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:
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/alembic/ABC_alembic.h6
-rw-r--r--source/blender/alembic/intern/abc_customdata.h2
-rw-r--r--source/blender/alembic/intern/abc_exporter.cc6
-rw-r--r--source/blender/alembic/intern/abc_mball.h2
-rw-r--r--source/blender/alembic/intern/abc_mesh.cc32
-rw-r--r--source/blender/alembic/intern/abc_mesh.h10
-rw-r--r--source/blender/alembic/intern/abc_object.cc8
-rw-r--r--source/blender/alembic/intern/abc_object.h2
-rw-r--r--source/blender/alembic/intern/abc_util.h1
-rw-r--r--source/blender/alembic/intern/alembic_capi.cc41
-rw-r--r--source/blender/blenfont/intern/blf_font.c4
-rw-r--r--source/blender/blenfont/intern/blf_glyph.c8
-rw-r--r--source/blender/blenkernel/BKE_DerivedMesh.h83
-rw-r--r--source/blender/blenkernel/BKE_anim.h1
-rw-r--r--source/blender/blenkernel/BKE_animsys.h1
-rw-r--r--source/blender/blenkernel/BKE_armature.h5
-rw-r--r--source/blender/blenkernel/BKE_blender_undo.h1
-rw-r--r--source/blender/blenkernel/BKE_blender_version.h2
-rw-r--r--source/blender/blenkernel/BKE_brush.h2
-rw-r--r--source/blender/blenkernel/BKE_bvhutils.h63
-rw-r--r--source/blender/blenkernel/BKE_cachefile.h1
-rw-r--r--source/blender/blenkernel/BKE_camera.h2
-rw-r--r--source/blender/blenkernel/BKE_cdderivedmesh.h76
-rw-r--r--source/blender/blenkernel/BKE_cloth.h1
-rw-r--r--source/blender/blenkernel/BKE_collection.h4
-rw-r--r--source/blender/blenkernel/BKE_collision.h2
-rw-r--r--source/blender/blenkernel/BKE_colortools.h94
-rw-r--r--source/blender/blenkernel/BKE_context.h8
-rw-r--r--source/blender/blenkernel/BKE_curve.h22
-rw-r--r--source/blender/blenkernel/BKE_displist.h2
-rw-r--r--source/blender/blenkernel/BKE_dynamicpaint.h2
-rw-r--r--source/blender/blenkernel/BKE_editmesh.h9
-rw-r--r--source/blender/blenkernel/BKE_gpencil.h32
-rw-r--r--source/blender/blenkernel/BKE_gpencil_modifier.h12
-rw-r--r--source/blender/blenkernel/BKE_image_save.h1
-rw-r--r--source/blender/blenkernel/BKE_key.h11
-rw-r--r--source/blender/blenkernel/BKE_lattice.h14
-rw-r--r--source/blender/blenkernel/BKE_layer.h5
-rw-r--r--source/blender/blenkernel/BKE_library.h5
-rw-r--r--source/blender/blenkernel/BKE_library_remap.h2
-rw-r--r--source/blender/blenkernel/BKE_light.h1
-rw-r--r--source/blender/blenkernel/BKE_linestyle.h1
-rw-r--r--source/blender/blenkernel/BKE_main.h1
-rw-r--r--source/blender/blenkernel/BKE_mask.h2
-rw-r--r--source/blender/blenkernel/BKE_material.h8
-rw-r--r--source/blender/blenkernel/BKE_mball.h2
-rw-r--r--source/blender/blenkernel/BKE_mball_tessellate.h1
-rw-r--r--source/blender/blenkernel/BKE_mesh.h52
-rw-r--r--source/blender/blenkernel/BKE_mesh_iterators.h6
-rw-r--r--source/blender/blenkernel/BKE_mesh_remesh_voxel.h46
-rw-r--r--source/blender/blenkernel/BKE_mesh_runtime.h1
-rw-r--r--source/blender/blenkernel/BKE_mesh_tangent.h2
-rw-r--r--source/blender/blenkernel/BKE_modifier.h1
-rw-r--r--source/blender/blenkernel/BKE_node.h14
-rw-r--r--source/blender/blenkernel/BKE_object.h1
-rw-r--r--source/blender/blenkernel/BKE_paint.h5
-rw-r--r--source/blender/blenkernel/BKE_particle.h1
-rw-r--r--source/blender/blenkernel/BKE_pbvh.h12
-rw-r--r--source/blender/blenkernel/BKE_scene.h4
-rw-r--r--source/blender/blenkernel/BKE_screen.h2
-rw-r--r--source/blender/blenkernel/BKE_sequencer.h2
-rw-r--r--source/blender/blenkernel/BKE_shader_fx.h11
-rw-r--r--source/blender/blenkernel/BKE_shrinkwrap.h1
-rw-r--r--source/blender/blenkernel/BKE_subdiv.h2
-rw-r--r--source/blender/blenkernel/BKE_text.h4
-rw-r--r--source/blender/blenkernel/BKE_texture.h4
-rw-r--r--source/blender/blenkernel/BKE_tracking.h1
-rw-r--r--source/blender/blenkernel/BKE_workspace.h3
-rw-r--r--source/blender/blenkernel/BKE_writeavi.h8
-rw-r--r--source/blender/blenkernel/CMakeLists.txt2
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf.c16
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf_intern.h14
-rw-r--r--source/blender/blenkernel/intern/CCGSubSurf_legacy.c4
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c340
-rw-r--r--source/blender/blenkernel/intern/action.c10
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c32
-rw-r--r--source/blender/blenkernel/intern/armature.c99
-rw-r--r--source/blender/blenkernel/intern/armature_update.c12
-rw-r--r--source/blender/blenkernel/intern/blendfile.c3
-rw-r--r--source/blender/blenkernel/intern/brush.c44
-rw-r--r--source/blender/blenkernel/intern/bvhutils.c694
-rw-r--r--source/blender/blenkernel/intern/cdderivedmesh.c874
-rw-r--r--source/blender/blenkernel/intern/collection.c5
-rw-r--r--source/blender/blenkernel/intern/colortools.c146
-rw-r--r--source/blender/blenkernel/intern/context.c7
-rw-r--r--source/blender/blenkernel/intern/crazyspace.c6
-rw-r--r--source/blender/blenkernel/intern/curve.c104
-rw-r--r--source/blender/blenkernel/intern/customdata.c28
-rw-r--r--source/blender/blenkernel/intern/displist.c42
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c66
-rw-r--r--source/blender/blenkernel/intern/editderivedmesh.c8
-rw-r--r--source/blender/blenkernel/intern/editmesh.c23
-rw-r--r--source/blender/blenkernel/intern/editmesh_bvh.c2
-rw-r--r--source/blender/blenkernel/intern/effect.c5
-rw-r--r--source/blender/blenkernel/intern/fcurve.c14
-rw-r--r--source/blender/blenkernel/intern/fmodifier.c6
-rw-r--r--source/blender/blenkernel/intern/font.c4
-rw-r--r--source/blender/blenkernel/intern/gpencil.c631
-rw-r--r--source/blender/blenkernel/intern/gpencil_modifier.c147
-rw-r--r--source/blender/blenkernel/intern/image.c4
-rw-r--r--source/blender/blenkernel/intern/key.c8
-rw-r--r--source/blender/blenkernel/intern/lattice.c134
-rw-r--r--source/blender/blenkernel/intern/layer.c38
-rw-r--r--source/blender/blenkernel/intern/library.c6
-rw-r--r--source/blender/blenkernel/intern/library_override.c8
-rw-r--r--source/blender/blenkernel/intern/library_query.c11
-rw-r--r--source/blender/blenkernel/intern/light.c10
-rw-r--r--source/blender/blenkernel/intern/linestyle.c86
-rw-r--r--source/blender/blenkernel/intern/main.c26
-rw-r--r--source/blender/blenkernel/intern/mask.c23
-rw-r--r--source/blender/blenkernel/intern/material.c16
-rw-r--r--source/blender/blenkernel/intern/mball.c7
-rw-r--r--source/blender/blenkernel/intern/mesh.c197
-rw-r--r--source/blender/blenkernel/intern/mesh_convert.c30
-rw-r--r--source/blender/blenkernel/intern/mesh_evaluate.c96
-rw-r--r--source/blender/blenkernel/intern/mesh_mapping.c2
-rw-r--r--source/blender/blenkernel/intern/mesh_merge.c2
-rw-r--r--source/blender/blenkernel/intern/mesh_remap.c20
-rw-r--r--source/blender/blenkernel/intern/mesh_remesh_voxel.c204
-rw-r--r--source/blender/blenkernel/intern/multires_reshape.c4
-rw-r--r--source/blender/blenkernel/intern/nla.c17
-rw-r--r--source/blender/blenkernel/intern/node.c20
-rw-r--r--source/blender/blenkernel/intern/object.c4
-rw-r--r--source/blender/blenkernel/intern/object_dupli.c4
-rw-r--r--source/blender/blenkernel/intern/object_update.c6
-rw-r--r--source/blender/blenkernel/intern/ocean.c2
-rw-r--r--source/blender/blenkernel/intern/paint.c28
-rw-r--r--source/blender/blenkernel/intern/particle.c47
-rw-r--r--source/blender/blenkernel/intern/particle_child.c17
-rw-r--r--source/blender/blenkernel/intern/particle_system.c20
-rw-r--r--source/blender/blenkernel/intern/pbvh.c13
-rw-r--r--source/blender/blenkernel/intern/pbvh_intern.h2
-rw-r--r--source/blender/blenkernel/intern/pointcache.c47
-rw-r--r--source/blender/blenkernel/intern/rigidbody.c2
-rw-r--r--source/blender/blenkernel/intern/scene.c54
-rw-r--r--source/blender/blenkernel/intern/seqeffects.c6
-rw-r--r--source/blender/blenkernel/intern/seqmodifier.c42
-rw-r--r--source/blender/blenkernel/intern/smoke.c6
-rw-r--r--source/blender/blenkernel/intern/softbody.c24
-rw-r--r--source/blender/blenkernel/intern/studiolight.c2
-rw-r--r--source/blender/blenkernel/intern/subsurf_ccg.c404
-rw-r--r--source/blender/blenkernel/intern/text.c120
-rw-r--r--source/blender/blenkernel/intern/texture.c16
-rw-r--r--source/blender/blenkernel/intern/undo_system.c2
-rw-r--r--source/blender/blenkernel/intern/unit.c24
-rw-r--r--source/blender/blenkernel/nla_private.h2
-rw-r--r--source/blender/blenlib/BLI_delaunay_2d.h199
-rw-r--r--source/blender/blenlib/BLI_dynstr.h1
-rw-r--r--source/blender/blenlib/BLI_listbase.h9
-rw-r--r--source/blender/blenlib/BLI_math_base.h1
-rw-r--r--source/blender/blenlib/BLI_math_color.h14
-rw-r--r--source/blender/blenlib/BLI_math_geom.h16
-rw-r--r--source/blender/blenlib/BLI_math_matrix.h11
-rw-r--r--source/blender/blenlib/BLI_math_vector.h8
-rw-r--r--source/blender/blenlib/BLI_memiter.h1
-rw-r--r--source/blender/blenlib/BLI_path_util.h4
-rw-r--r--source/blender/blenlib/BLI_string_utf8.h5
-rw-r--r--source/blender/blenlib/BLI_string_utils.h1
-rw-r--r--source/blender/blenlib/CMakeLists.txt2
-rw-r--r--source/blender/blenlib/intern/BLI_ghash.c4
-rw-r--r--source/blender/blenlib/intern/boxpack_2d.c4
-rw-r--r--source/blender/blenlib/intern/delaunay_2d.c2913
-rw-r--r--source/blender/blenlib/intern/freetypefont.c2
-rw-r--r--source/blender/blenlib/intern/math_base_inline.c5
-rw-r--r--source/blender/blenlib/intern/math_bits_inline.c34
-rw-r--r--source/blender/blenlib/intern/math_color.c2
-rw-r--r--source/blender/blenlib/intern/math_color_inline.c8
-rw-r--r--source/blender/blenlib/intern/math_geom.c276
-rw-r--r--source/blender/blenlib/intern/math_matrix.c124
-rw-r--r--source/blender/blenlib/intern/math_rotation.c18
-rw-r--r--source/blender/blenlib/intern/math_statistics.c2
-rw-r--r--source/blender/blenlib/intern/math_vector.c17
-rw-r--r--source/blender/blenlib/intern/math_vector_inline.c34
-rw-r--r--source/blender/blenlib/intern/path_util.c18
-rw-r--r--source/blender/blenlib/intern/polyfill_2d.c5
-rw-r--r--source/blender/blenlib/intern/string_utf8.c50
-rw-r--r--source/blender/blenlib/intern/string_utils.c15
-rw-r--r--source/blender/blenlib/intern/task.c2
-rw-r--r--source/blender/blenloader/BLO_blend_defs.h2
-rw-r--r--source/blender/blenloader/BLO_readfile.h1
-rw-r--r--source/blender/blenloader/intern/readfile.c192
-rw-r--r--source/blender/blenloader/intern/readfile.h2
-rw-r--r--source/blender/blenloader/intern/versioning_250.c13
-rw-r--r--source/blender/blenloader/intern/versioning_260.c2
-rw-r--r--source/blender/blenloader/intern/versioning_270.c6
-rw-r--r--source/blender/blenloader/intern/versioning_280.c184
-rw-r--r--source/blender/blenloader/intern/versioning_cycles.c406
-rw-r--r--source/blender/blenloader/intern/versioning_defaults.c24
-rw-r--r--source/blender/blenloader/intern/versioning_legacy.c4
-rw-r--r--source/blender/blenloader/intern/versioning_userdef.c20
-rw-r--r--source/blender/blenloader/intern/writefile.c9
-rw-r--r--source/blender/blentranslation/msgfmt/msgfmt.c6
-rw-r--r--source/blender/bmesh/intern/bmesh_construct.c80
-rw-r--r--source/blender/bmesh/intern/bmesh_edgeloop.c4
-rw-r--r--source/blender/bmesh/intern/bmesh_marking.c6
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh_conv.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_opdefines.c6
-rw-r--r--source/blender/bmesh/intern/bmesh_polygon.c111
-rw-r--r--source/blender/bmesh/intern/bmesh_polygon.h5
-rw-r--r--source/blender/bmesh/intern/bmesh_query.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_walkers_impl.c2
-rw-r--r--source/blender/bmesh/operators/bmo_primitive.c7
-rw-r--r--source/blender/bmesh/operators/bmo_removedoubles.c10
-rw-r--r--source/blender/bmesh/tools/bmesh_bevel.c1
-rw-r--r--source/blender/bmesh/tools/bmesh_decimate_collapse.c6
-rw-r--r--source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c2
-rw-r--r--source/blender/bmesh/tools/bmesh_region_match.c2
-rw-r--r--source/blender/collada/AnimationExporter.cpp2
-rw-r--r--source/blender/collada/AnimationExporter.h2
-rw-r--r--source/blender/collada/AnimationImporter.cpp2
-rw-r--r--source/blender/collada/CMakeLists.txt3
-rw-r--r--source/blender/collada/ControllerExporter.h1
-rw-r--r--source/blender/collada/GeometryExporter.h4
-rw-r--r--source/blender/collada/MeshImporter.cpp5
-rw-r--r--source/blender/collada/collada.h3
-rw-r--r--source/blender/collada/collada_utils.h2
-rw-r--r--source/blender/compositor/CMakeLists.txt13
-rw-r--r--source/blender/compositor/intern/COM_CompositorContext.h2
-rw-r--r--source/blender/compositor/intern/COM_Converter.cpp6
-rw-r--r--source/blender/compositor/intern/COM_ExecutionGroup.h4
-rw-r--r--source/blender/compositor/intern/COM_ExecutionSystem.h2
-rw-r--r--source/blender/compositor/intern/COM_MemoryBuffer.h2
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.h2
-rw-r--r--source/blender/compositor/intern/COM_OpenCLDevice.cpp2
-rw-r--r--source/blender/compositor/intern/COM_OpenCLDevice.h4
-rw-r--r--source/blender/compositor/nodes/COM_DenoiseNode.cpp47
-rw-r--r--source/blender/compositor/nodes/COM_DenoiseNode.h37
-rw-r--r--source/blender/compositor/nodes/COM_ImageNode.cpp2
-rw-r--r--source/blender/compositor/nodes/COM_MathNode.cpp36
-rw-r--r--source/blender/compositor/nodes/COM_MixNode.cpp2
-rw-r--r--source/blender/compositor/nodes/COM_TimeNode.cpp4
-rw-r--r--source/blender/compositor/operations/COM_BokehImageOperation.h2
-rw-r--r--source/blender/compositor/operations/COM_BrightnessOperation.cpp5
-rw-r--r--source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp2
-rw-r--r--source/blender/compositor/operations/COM_ColorCurveOperation.cpp16
-rw-r--r--source/blender/compositor/operations/COM_CompositorOperation.cpp4
-rw-r--r--source/blender/compositor/operations/COM_CurveBaseOperation.cpp10
-rw-r--r--source/blender/compositor/operations/COM_DenoiseOperation.cpp155
-rw-r--r--source/blender/compositor/operations/COM_DenoiseOperation.h71
-rw-r--r--source/blender/compositor/operations/COM_GlareGhostOperation.cpp12
-rw-r--r--source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp4
-rw-r--r--source/blender/compositor/operations/COM_GlareStreaksOperation.cpp2
-rw-r--r--source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp6
-rw-r--r--source/blender/compositor/operations/COM_MaskOperation.cpp2
-rw-r--r--source/blender/compositor/operations/COM_MixOperation.cpp7
-rw-r--r--source/blender/compositor/operations/COM_MixOperation.h4
-rw-r--r--source/blender/compositor/operations/COM_TextureOperation.cpp4
-rw-r--r--source/blender/compositor/operations/COM_VectorCurveOperation.cpp2
-rw-r--r--source/blender/compositor/operations/COM_ViewerOperation.cpp2
-rw-r--r--source/blender/compositor/operations/COM_WriteBufferOperation.cpp6
-rw-r--r--source/blender/datatoc/datatoc.c8
-rw-r--r--source/blender/depsgraph/DEG_depsgraph.h3
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_build.h3
-rw-r--r--source/blender/depsgraph/DEG_depsgraph_query.h5
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_cache.cc4
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_map.h1
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc3
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h6
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc11
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h3
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_rna.cc14
-rw-r--r--source/blender/depsgraph/intern/depsgraph.h2
-rw-r--r--source/blender/depsgraph/intern/depsgraph_query.cc8
-rw-r--r--source/blender/depsgraph/intern/depsgraph_tag.cc2
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc2
-rw-r--r--source/blender/depsgraph/intern/node/deg_node.h1
-rw-r--r--source/blender/depsgraph/intern/node/deg_node_id.h2
-rw-r--r--source/blender/depsgraph/intern/node/deg_node_operation.h1
-rw-r--r--source/blender/draw/CMakeLists.txt7
-rw-r--r--source/blender/draw/DRW_engine.h31
-rw-r--r--source/blender/draw/DRW_select_buffer.h130
-rw-r--r--source/blender/draw/engines/basic/basic_engine.c21
-rw-r--r--source/blender/draw/engines/eevee/eevee_effects.c4
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c6
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightcache.c18
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightcache.h1
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_lights.c7
-rw-r--r--source/blender/draw/engines/eevee/eevee_lookdev.c13
-rw-r--r--source/blender/draw/engines/eevee/eevee_lut.c23033
-rw-r--r--source/blender/draw/engines/eevee/eevee_lut.h23013
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c62
-rw-r--r--source/blender/draw/engines/eevee/eevee_mist.c5
-rw-r--r--source/blender/draw/engines/eevee/eevee_occlusion.c4
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h2
-rw-r--r--source/blender/draw/engines/eevee/eevee_render.c4
-rw-r--r--source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl228
-rw-r--r--source/blender/draw/engines/eevee/shaders/default_frag.glsl10
-rw-r--r--source/blender/draw/engines/eevee/shaders/lights_lib.glsl4
-rw-r--r--source/blender/draw/engines/eevee/shaders/prepass_frag.glsl6
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_cache_utils.c31
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c70
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_draw_utils.c184
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.c14
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.h48
-rw-r--r--source/blender/draw/engines/select/select_draw_utils.c83
-rw-r--r--source/blender/draw/engines/select/select_engine.c399
-rw-r--r--source/blender/draw/engines/select/select_engine.h7
-rw-r--r--source/blender/draw/engines/select/select_private.h23
-rw-r--r--source/blender/draw/engines/select/shaders/selection_id_frag.glsl5
-rw-r--r--source/blender/draw/engines/workbench/workbench_deferred.c2
-rw-r--r--source/blender/draw/engines/workbench/workbench_effect_taa.c4
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h24
-rw-r--r--source/blender/draw/engines/workbench/workbench_studiolight.c5
-rw-r--r--source/blender/draw/intern/DRW_render.h5
-rw-r--r--source/blender/draw/intern/draw_armature.c36
-rw-r--r--source/blender/draw/intern/draw_cache.c8
-rw-r--r--source/blender/draw/intern/draw_cache.h13
-rw-r--r--source/blender/draw/intern/draw_cache_extract.h250
-rw-r--r--source/blender/draw/intern/draw_cache_extract_mesh.c4398
-rw-r--r--source/blender/draw/intern/draw_cache_impl.h7
-rw-r--r--source/blender/draw/intern/draw_cache_impl_displist.c2
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c4911
-rw-r--r--source/blender/draw/intern/draw_common.h2
-rw-r--r--source/blender/draw/intern/draw_hair.c2
-rw-r--r--source/blender/draw/intern/draw_instance_data.c2
-rw-r--r--source/blender/draw/intern/draw_instance_data.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c58
-rw-r--r--source/blender/draw/intern/draw_manager.h3
-rw-r--r--source/blender/draw/intern/draw_manager_data.c8
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c29
-rw-r--r--source/blender/draw/intern/draw_manager_profiling.c6
-rw-r--r--source/blender/draw/intern/draw_manager_profiling.h2
-rw-r--r--source/blender/draw/intern/draw_manager_shader.c2
-rw-r--r--source/blender/draw/intern/draw_manager_texture.c1
-rw-r--r--source/blender/draw/intern/draw_select_buffer.c551
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c35
-rw-r--r--source/blender/draw/modes/object_mode.c74
-rw-r--r--source/blender/draw/modes/paint_vertex_mode.c52
-rw-r--r--source/blender/draw/modes/shaders/common_globals_lib.glsl5
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_frag.glsl6
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl25
-rw-r--r--source/blender/draw/modes/shaders/object_grid_frag.glsl75
-rw-r--r--source/blender/draw/modes/shaders/object_grid_vert.glsl6
-rw-r--r--source/blender/draw/modes/shaders/paint_vertex_frag.glsl9
-rw-r--r--source/blender/draw/modes/shaders/paint_weight_frag.glsl5
-rw-r--r--source/blender/editors/animation/anim_channels_defines.c14
-rw-r--r--source/blender/editors/animation/anim_filter.c12
-rw-r--r--source/blender/editors/animation/anim_ipo_utils.c2
-rw-r--r--source/blender/editors/animation/anim_motion_paths.c5
-rw-r--r--source/blender/editors/animation/drivers.c186
-rw-r--r--source/blender/editors/animation/keyframes_draw.c4
-rw-r--r--source/blender/editors/animation/keyframing.c42
-rw-r--r--source/blender/editors/animation/keyingsets.c18
-rw-r--r--source/blender/editors/armature/armature_add.c2
-rw-r--r--source/blender/editors/armature/armature_edit.c34
-rw-r--r--source/blender/editors/armature/armature_intern.h1
-rw-r--r--source/blender/editors/armature/armature_relations.c21
-rw-r--r--source/blender/editors/armature/armature_select.c16
-rw-r--r--source/blender/editors/armature/armature_utils.c47
-rw-r--r--source/blender/editors/armature/pose_select.c17
-rw-r--r--source/blender/editors/armature/pose_slide.c2
-rw-r--r--source/blender/editors/curve/editcurve.c18
-rw-r--r--source/blender/editors/curve/editcurve_paint.c4
-rw-r--r--source/blender/editors/curve/editcurve_select.c2
-rw-r--r--source/blender/editors/curve/editfont.c216
-rw-r--r--source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c4
-rw-r--r--source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c2
-rw-r--r--source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c1
-rw-r--r--source/blender/editors/gpencil/annotate_draw.c7
-rw-r--r--source/blender/editors/gpencil/annotate_paint.c103
-rw-r--r--source/blender/editors/gpencil/drawgpencil.c12
-rw-r--r--source/blender/editors/gpencil/gpencil_brush.c286
-rw-r--r--source/blender/editors/gpencil/gpencil_data.c6
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c596
-rw-r--r--source/blender/editors/gpencil/gpencil_intern.h64
-rw-r--r--source/blender/editors/gpencil/gpencil_interpolate.c2
-rw-r--r--source/blender/editors/gpencil/gpencil_ops.c8
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c56
-rw-r--r--source/blender/editors/gpencil/gpencil_primitive.c22
-rw-r--r--source/blender/editors/gpencil/gpencil_select.c179
-rw-r--r--source/blender/editors/gpencil/gpencil_utils.c12
-rw-r--r--source/blender/editors/include/BIF_glutil.h1
-rw-r--r--source/blender/editors/include/ED_anim_api.h2
-rw-r--r--source/blender/editors/include/ED_armature.h17
-rw-r--r--source/blender/editors/include/ED_clip.h1
-rw-r--r--source/blender/editors/include/ED_gizmo_library.h2
-rw-r--r--source/blender/editors/include/ED_gpencil.h5
-rw-r--r--source/blender/editors/include/ED_image.h1
-rw-r--r--source/blender/editors/include/ED_keyframes_draw.h1
-rw-r--r--source/blender/editors/include/ED_keyframing.h10
-rw-r--r--source/blender/editors/include/ED_markers.h1
-rw-r--r--source/blender/editors/include/ED_mesh.h15
-rw-r--r--source/blender/editors/include/ED_object.h24
-rw-r--r--source/blender/editors/include/ED_outliner.h14
-rw-r--r--source/blender/editors/include/ED_screen.h6
-rw-r--r--source/blender/editors/include/ED_sculpt.h6
-rw-r--r--source/blender/editors/include/ED_select_buffer_utils.h43
-rw-r--r--source/blender/editors/include/ED_text.h5
-rw-r--r--source/blender/editors/include/ED_time_scrub_ui.h1
-rw-r--r--source/blender/editors/include/ED_transform.h20
-rw-r--r--source/blender/editors/include/ED_transform_snap_object_context.h4
-rw-r--r--source/blender/editors/include/ED_uvedit.h1
-rw-r--r--source/blender/editors/include/ED_view3d.h23
-rw-r--r--source/blender/editors/include/UI_icons.h10
-rw-r--r--source/blender/editors/include/UI_interface.h1
-rw-r--r--source/blender/editors/include/UI_interface_icons.h2
-rw-r--r--source/blender/editors/include/UI_resources.h1
-rw-r--r--source/blender/editors/interface/interface.c37
-rw-r--r--source/blender/editors/interface/interface_anim.c4
-rw-r--r--source/blender/editors/interface/interface_context_menu.c52
-rw-r--r--source/blender/editors/interface/interface_draw.c26
-rw-r--r--source/blender/editors/interface/interface_eyedropper_datablock.c53
-rw-r--r--source/blender/editors/interface/interface_eyedropper_driver.c6
-rw-r--r--source/blender/editors/interface/interface_handlers.c102
-rw-r--r--source/blender/editors/interface/interface_icons.c17
-rw-r--r--source/blender/editors/interface/interface_layout.c18
-rw-r--r--source/blender/editors/interface/interface_ops.c176
-rw-r--r--source/blender/editors/interface/interface_panel.c2
-rw-r--r--source/blender/editors/interface/interface_region_popup.c8
-rw-r--r--source/blender/editors/interface/interface_region_tooltip.c26
-rw-r--r--source/blender/editors/interface/interface_templates.c264
-rw-r--r--source/blender/editors/interface/interface_utils.c9
-rw-r--r--source/blender/editors/interface/interface_widgets.c186
-rw-r--r--source/blender/editors/interface/resources.c20
-rw-r--r--source/blender/editors/interface/view2d_gizmo_navigate.c16
-rw-r--r--source/blender/editors/interface/view2d_ops.c6
-rw-r--r--source/blender/editors/mask/mask_shapekey.c2
-rw-r--r--source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c13
-rw-r--r--source/blender/editors/mesh/editmesh_knife.c4
-rw-r--r--source/blender/editors/mesh/editmesh_select.c44
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c40
-rw-r--r--source/blender/editors/mesh/editmesh_utils.c20
-rw-r--r--source/blender/editors/mesh/mesh_data.c126
-rw-r--r--source/blender/editors/mesh/meshtools.c13
-rw-r--r--source/blender/editors/object/CMakeLists.txt2
-rw-r--r--source/blender/editors/object/object_add.c25
-rw-r--r--source/blender/editors/object/object_constraint.c22
-rw-r--r--source/blender/editors/object/object_data_transfer.c8
-rw-r--r--source/blender/editors/object/object_data_transform.c333
-rw-r--r--source/blender/editors/object/object_edit.c41
-rw-r--r--source/blender/editors/object/object_gpencil_modifier.c4
-rw-r--r--source/blender/editors/object/object_hook.c4
-rw-r--r--source/blender/editors/object/object_intern.h3
-rw-r--r--source/blender/editors/object/object_modes.c13
-rw-r--r--source/blender/editors/object/object_modifier.c8
-rw-r--r--source/blender/editors/object/object_ops.c2
-rw-r--r--source/blender/editors/object/object_relations.c12
-rw-r--r--source/blender/editors/object/object_remesh.c158
-rw-r--r--source/blender/editors/object/object_select.c19
-rw-r--r--source/blender/editors/object/object_shader_fx.c9
-rw-r--r--source/blender/editors/object/object_transform.c66
-rw-r--r--source/blender/editors/object/object_vgroup.c6
-rw-r--r--source/blender/editors/physics/particle_edit.c6
-rw-r--r--source/blender/editors/physics/particle_object.c10
-rw-r--r--source/blender/editors/physics/physics_intern.h1
-rw-r--r--source/blender/editors/physics/physics_pointcache.c12
-rw-r--r--source/blender/editors/physics/rigidbody_constraint.c32
-rw-r--r--source/blender/editors/physics/rigidbody_object.c22
-rw-r--r--source/blender/editors/render/render_intern.h1
-rw-r--r--source/blender/editors/render/render_internal.c4
-rw-r--r--source/blender/editors/render/render_preview.c130
-rw-r--r--source/blender/editors/render/render_shading.c8
-rw-r--r--source/blender/editors/render/render_view.c4
-rw-r--r--source/blender/editors/screen/area.c127
-rw-r--r--source/blender/editors/screen/screen_context.c2
-rw-r--r--source/blender/editors/screen/screen_edit.c2
-rw-r--r--source/blender/editors/screen/screen_ops.c289
-rw-r--r--source/blender/editors/sculpt_paint/CMakeLists.txt1
-rw-r--r--source/blender/editors/sculpt_paint/paint_cursor.c2
-rw-r--r--source/blender/editors/sculpt_paint/paint_curve_undo.c1
-rw-r--r--source/blender/editors/sculpt_paint/paint_image_proj.c58
-rw-r--r--source/blender/editors/sculpt_paint/paint_image_undo.c15
-rw-r--r--source/blender/editors/sculpt_paint/paint_intern.h1
-rw-r--r--source/blender/editors/sculpt_paint/paint_stroke.c25
-rw-r--r--source/blender/editors/sculpt_paint/paint_utils.c5
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.c20
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_color_ops.c7
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c6
-rw-r--r--source/blender/editors/sculpt_paint/sculpt.c299
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_intern.h23
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_undo.c134
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_uv.c2
-rw-r--r--source/blender/editors/sound/sound_ops.c2
-rw-r--r--source/blender/editors/space_action/action_data.c2
-rw-r--r--source/blender/editors/space_action/action_draw.c352
-rw-r--r--source/blender/editors/space_action/action_intern.h2
-rw-r--r--source/blender/editors/space_action/space_action.c2
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c16
-rw-r--r--source/blender/editors/space_buttons/buttons_ops.c2
-rw-r--r--source/blender/editors/space_buttons/buttons_texture.c2
-rw-r--r--source/blender/editors/space_buttons/space_buttons.c4
-rw-r--r--source/blender/editors/space_clip/clip_dopesheet_draw.c3
-rw-r--r--source/blender/editors/space_clip/clip_editor.c2
-rw-r--r--source/blender/editors/space_clip/clip_ops.c4
-rw-r--r--source/blender/editors/space_clip/tracking_ops_solve.c7
-rw-r--r--source/blender/editors/space_clip/tracking_ops_track.c7
-rw-r--r--source/blender/editors/space_console/console_ops.c2
-rw-r--r--source/blender/editors/space_file/filelist.c2
-rw-r--r--source/blender/editors/space_graph/graph_buttons.c4
-rw-r--r--source/blender/editors/space_graph/graph_intern.h1
-rw-r--r--source/blender/editors/space_graph/space_graph.c2
-rw-r--r--source/blender/editors/space_image/image_buttons.c2
-rw-r--r--source/blender/editors/space_image/image_draw.c5
-rw-r--r--source/blender/editors/space_image/image_edit.c8
-rw-r--r--source/blender/editors/space_image/image_intern.h1
-rw-r--r--source/blender/editors/space_image/image_ops.c8
-rw-r--r--source/blender/editors/space_image/space_image.c15
-rw-r--r--source/blender/editors/space_info/info_stats.c2
-rw-r--r--source/blender/editors/space_info/textview.c11
-rw-r--r--source/blender/editors/space_nla/nla_buttons.c6
-rw-r--r--source/blender/editors/space_nla/nla_channels.c6
-rw-r--r--source/blender/editors/space_nla/nla_draw.c4
-rw-r--r--source/blender/editors/space_nla/space_nla.c2
-rw-r--r--source/blender/editors/space_node/CMakeLists.txt4
-rw-r--r--source/blender/editors/space_node/drawnode.c66
-rw-r--r--source/blender/editors/space_node/node_draw.c143
-rw-r--r--source/blender/editors/space_node/node_edit.c10
-rw-r--r--source/blender/editors/space_outliner/CMakeLists.txt1
-rw-r--r--source/blender/editors/space_outliner/outliner_dragdrop.c187
-rw-r--r--source/blender/editors/space_outliner/outliner_draw.c274
-rw-r--r--source/blender/editors/space_outliner/outliner_edit.c255
-rw-r--r--source/blender/editors/space_outliner/outliner_intern.h35
-rw-r--r--source/blender/editors/space_outliner/outliner_ops.c1
-rw-r--r--source/blender/editors/space_outliner/outliner_select.c444
-rw-r--r--source/blender/editors/space_outliner/outliner_sync.c554
-rw-r--r--source/blender/editors/space_outliner/outliner_tools.c128
-rw-r--r--source/blender/editors/space_outliner/outliner_tree.c17
-rw-r--r--source/blender/editors/space_outliner/outliner_utils.c140
-rw-r--r--source/blender/editors/space_outliner/space_outliner.c21
-rw-r--r--source/blender/editors/space_sequencer/CMakeLists.txt2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_draw.c11
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c10
-rw-r--r--source/blender/editors/space_sequencer/sequencer_intern.h1
-rw-r--r--source/blender/editors/space_sequencer/sequencer_preview.c2
-rw-r--r--source/blender/editors/space_sequencer/sequencer_select.c23
-rw-r--r--source/blender/editors/space_sequencer/space_sequencer.c9
-rw-r--r--source/blender/editors/space_text/space_text.c8
-rw-r--r--source/blender/editors/space_text/text_draw.c20
-rw-r--r--source/blender/editors/space_text/text_format.c38
-rw-r--r--source/blender/editors/space_text/text_intern.h4
-rw-r--r--source/blender/editors/space_text/text_ops.c140
-rw-r--r--source/blender/editors/space_text/text_undo.c185
-rw-r--r--source/blender/editors/space_view3d/drawobject.c2
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c4
-rw-r--r--source/blender/editors/space_view3d/view3d_camera_control.c3
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c127
-rw-r--r--source/blender/editors/space_view3d/view3d_draw_legacy.c57
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c86
-rw-r--r--source/blender/editors/space_view3d/view3d_fly.c93
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_camera.c8
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_navigate.c21
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_ruler.c18
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h7
-rw-r--r--source/blender/editors/space_view3d/view3d_iterators.c95
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c271
-rw-r--r--source/blender/editors/space_view3d/view3d_utils.c48
-rw-r--r--source/blender/editors/space_view3d/view3d_walk.c109
-rw-r--r--source/blender/editors/transform/transform.c218
-rw-r--r--source/blender/editors/transform/transform.h36
-rw-r--r--source/blender/editors/transform/transform_constraints.c12
-rw-r--r--source/blender/editors/transform/transform_conversions.c306
-rw-r--r--source/blender/editors/transform/transform_generics.c11
-rw-r--r--source/blender/editors/transform/transform_gizmo_2d.c4
-rw-r--r--source/blender/editors/transform/transform_input.c2
-rw-r--r--source/blender/editors/transform/transform_ops.c42
-rw-r--r--source/blender/editors/transform/transform_snap.c106
-rw-r--r--source/blender/editors/transform/transform_snap_object.c189
-rw-r--r--source/blender/editors/undo/ed_undo.c5
-rw-r--r--source/blender/editors/util/CMakeLists.txt2
-rw-r--r--source/blender/editors/util/select_buffer_utils.c303
-rw-r--r--source/blender/editors/uvedit/uvedit_draw.c64
-rw-r--r--source/blender/editors/uvedit/uvedit_intern.h1
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c248
-rw-r--r--source/blender/editors/uvedit/uvedit_parametrizer.c2
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c2
-rw-r--r--source/blender/freestyle/CMakeLists.txt5
-rw-r--r--source/blender/freestyle/FRS_freestyle.h1
-rw-r--r--source/blender/freestyle/intern/geometry/GeomCleaner.h8
-rw-r--r--source/blender/freestyle/intern/python/BPy_Freestyle.cpp8
-rw-r--r--source/blender/freestyle/intern/scene_graph/FrsMaterial.h16
-rw-r--r--source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h2
-rw-r--r--source/blender/freestyle/intern/scene_graph/NodeTransform.h8
-rw-r--r--source/blender/freestyle/intern/stroke/AdvancedFunctions1D.h4
-rw-r--r--source/blender/freestyle/intern/stroke/AdvancedStrokeShaders.h2
-rw-r--r--source/blender/freestyle/intern/stroke/BasicStrokeShaders.h4
-rw-r--r--source/blender/freestyle/intern/stroke/Curve.h2
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c22
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h4
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c10
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c4
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c8
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c20
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c15
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c5
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c89
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c8
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c8
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c41
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c8
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c8
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c63
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c8
-rw-r--r--source/blender/gpu/CMakeLists.txt1
-rw-r--r--source/blender/gpu/GPU_batch.h8
-rw-r--r--source/blender/gpu/GPU_batch_presets.h3
-rw-r--r--source/blender/gpu/GPU_draw.h6
-rw-r--r--source/blender/gpu/GPU_element.h19
-rw-r--r--source/blender/gpu/GPU_material.h5
-rw-r--r--source/blender/gpu/GPU_matrix.h12
-rw-r--r--source/blender/gpu/GPU_shader.h4
-rw-r--r--source/blender/gpu/GPU_shader_interface.h7
-rw-r--r--source/blender/gpu/GPU_texture.h1
-rw-r--r--source/blender/gpu/GPU_vertex_buffer.h7
-rw-r--r--source/blender/gpu/GPU_vertex_format.h74
-rw-r--r--source/blender/gpu/intern/gpu_batch.c44
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c2
-rw-r--r--source/blender/gpu/intern/gpu_codegen.c29
-rw-r--r--source/blender/gpu/intern/gpu_codegen.h1
-rw-r--r--source/blender/gpu/intern/gpu_context.cpp23
-rw-r--r--source/blender/gpu/intern/gpu_context_private.h2
-rw-r--r--source/blender/gpu/intern/gpu_element.c119
-rw-r--r--source/blender/gpu/intern/gpu_extensions.c8
-rw-r--r--source/blender/gpu/intern/gpu_immediate.c6
-rw-r--r--source/blender/gpu/intern/gpu_matrix.c91
-rw-r--r--source/blender/gpu/intern/gpu_matrix_private.h35
-rw-r--r--source/blender/gpu/intern/gpu_private.h3
-rw-r--r--source/blender/gpu/intern/gpu_shader_interface.c1
-rw-r--r--source/blender/gpu/intern/gpu_texture.c2
-rw-r--r--source/blender/gpu/intern/gpu_vertex_format.c144
-rw-r--r--source/blender/gpu/intern/gpu_vertex_format_private.h1
-rw-r--r--source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl4
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl723
-rw-r--r--source/blender/ikplugin/intern/itasc_plugin.cpp8
-rw-r--r--source/blender/imbuf/IMB_imbuf.h3
-rw-r--r--source/blender/imbuf/intern/colormanagement.c32
-rw-r--r--source/blender/imbuf/intern/imageprocess.c12
-rw-r--r--source/blender/imbuf/intern/openexr/openexr_api.cpp6
-rw-r--r--source/blender/imbuf/intern/scaling.c4
-rw-r--r--source/blender/makesdna/DNA_action_types.h3
-rw-r--r--source/blender/makesdna/DNA_documentation.h2
-rw-r--r--source/blender/makesdna/DNA_gpencil_modifier_types.h62
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h28
-rw-r--r--source/blender/makesdna/DNA_light_types.h1
-rw-r--r--source/blender/makesdna/DNA_material_types.h14
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h12
-rw-r--r--source/blender/makesdna/DNA_meshdata_types.h6
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h2
-rw-r--r--source/blender/makesdna/DNA_node_types.h87
-rw-r--r--source/blender/makesdna/DNA_object_fluidsim_types.h1
-rw-r--r--source/blender/makesdna/DNA_object_force_types.h4
-rw-r--r--source/blender/makesdna/DNA_object_types.h6
-rw-r--r--source/blender/makesdna/DNA_outliner_types.h4
-rw-r--r--source/blender/makesdna/DNA_scene_types.h33
-rw-r--r--source/blender/makesdna/DNA_screen_types.h7
-rw-r--r--source/blender/makesdna/DNA_sequence_types.h2
-rw-r--r--source/blender/makesdna/DNA_space_types.h43
-rw-r--r--source/blender/makesdna/DNA_texture_types.h1
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h316
-rw-r--r--source/blender/makesdna/DNA_view3d_types.h7
-rw-r--r--source/blender/makesdna/DNA_windowmanager_types.h20
-rw-r--r--source/blender/makesdna/DNA_world_types.h1
-rw-r--r--source/blender/makesdna/intern/dna_genfile.c2
-rw-r--r--source/blender/makesrna/RNA_access.h14
-rw-r--r--source/blender/makesrna/RNA_types.h19
-rw-r--r--source/blender/makesrna/intern/CMakeLists.txt2
-rw-r--r--source/blender/makesrna/intern/makesrna.c8
-rw-r--r--source/blender/makesrna/intern/rna_ID.c40
-rw-r--r--source/blender/makesrna/intern/rna_access.c1280
-rw-r--r--source/blender/makesrna/intern/rna_access_compare_override.c1099
-rw-r--r--source/blender/makesrna/intern/rna_access_internal.h34
-rw-r--r--source/blender/makesrna/intern/rna_action.c8
-rw-r--r--source/blender/makesrna/intern/rna_animation.c10
-rw-r--r--source/blender/makesrna/intern/rna_armature.c87
-rw-r--r--source/blender/makesrna/intern/rna_boid.c12
-rw-r--r--source/blender/makesrna/intern/rna_brush.c31
-rw-r--r--source/blender/makesrna/intern/rna_camera.c23
-rw-r--r--source/blender/makesrna/intern/rna_cloth.c13
-rw-r--r--source/blender/makesrna/intern/rna_collection.c11
-rw-r--r--source/blender/makesrna/intern/rna_color.c46
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c36
-rw-r--r--source/blender/makesrna/intern/rna_context.c4
-rw-r--r--source/blender/makesrna/intern/rna_curve.c59
-rw-r--r--source/blender/makesrna/intern/rna_define.c6
-rw-r--r--source/blender/makesrna/intern/rna_dynamicpaint.c2
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c20
-rw-r--r--source/blender/makesrna/intern/rna_fluidsim.c8
-rw-r--r--source/blender/makesrna/intern/rna_gpencil.c29
-rw-r--r--source/blender/makesrna/intern/rna_gpencil_modifier.c182
-rw-r--r--source/blender/makesrna/intern/rna_image.c38
-rw-r--r--source/blender/makesrna/intern/rna_internal.h3
-rw-r--r--source/blender/makesrna/intern/rna_internal_types.h1
-rw-r--r--source/blender/makesrna/intern/rna_key.c27
-rw-r--r--source/blender/makesrna/intern/rna_lattice.c16
-rw-r--r--source/blender/makesrna/intern/rna_layer.c6
-rw-r--r--source/blender/makesrna/intern/rna_light.c4
-rw-r--r--source/blender/makesrna/intern/rna_lightprobe.c3
-rw-r--r--source/blender/makesrna/intern/rna_linestyle.c16
-rw-r--r--source/blender/makesrna/intern/rna_mask.c22
-rw-r--r--source/blender/makesrna/intern/rna_material.c39
-rw-r--r--source/blender/makesrna/intern/rna_mesh.c50
-rw-r--r--source/blender/makesrna/intern/rna_mesh_api.c5
-rw-r--r--source/blender/makesrna/intern/rna_meta.c6
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c64
-rw-r--r--source/blender/makesrna/intern/rna_movieclip.c10
-rw-r--r--source/blender/makesrna/intern/rna_nla.c22
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c223
-rw-r--r--source/blender/makesrna/intern/rna_object.c214
-rw-r--r--source/blender/makesrna/intern/rna_object_api.c4
-rw-r--r--source/blender/makesrna/intern/rna_object_force.c111
-rw-r--r--source/blender/makesrna/intern/rna_particle.c72
-rw-r--r--source/blender/makesrna/intern/rna_pose.c47
-rw-r--r--source/blender/makesrna/intern/rna_rigidbody.c8
-rw-r--r--source/blender/makesrna/intern/rna_rna.c157
-rw-r--r--source/blender/makesrna/intern/rna_scene.c169
-rw-r--r--source/blender/makesrna/intern/rna_screen.c13
-rw-r--r--source/blender/makesrna/intern/rna_sculpt_paint.c42
-rw-r--r--source/blender/makesrna/intern/rna_sequencer.c77
-rw-r--r--source/blender/makesrna/intern/rna_shader_fx.c29
-rw-r--r--source/blender/makesrna/intern/rna_smoke.c6
-rw-r--r--source/blender/makesrna/intern/rna_space.c80
-rw-r--r--source/blender/makesrna/intern/rna_speaker.c1
-rw-r--r--source/blender/makesrna/intern/rna_text.c17
-rw-r--r--source/blender/makesrna/intern/rna_text_api.c10
-rw-r--r--source/blender/makesrna/intern/rna_texture.c18
-rw-r--r--source/blender/makesrna/intern/rna_timeline.c1
-rw-r--r--source/blender/makesrna/intern/rna_tracking.c76
-rw-r--r--source/blender/makesrna/intern/rna_ui.c2
-rw-r--r--source/blender/makesrna/intern/rna_ui_api.c3
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c35
-rw-r--r--source/blender/makesrna/intern/rna_vfont.c4
-rw-r--r--source/blender/makesrna/intern/rna_wm.c16
-rw-r--r--source/blender/makesrna/intern/rna_wm_gizmo.c9
-rw-r--r--source/blender/makesrna/intern/rna_wm_gizmo_api.c2
-rw-r--r--source/blender/makesrna/intern/rna_workspace.c2
-rw-r--r--source/blender/makesrna/intern/rna_world.c10
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c7
-rw-r--r--source/blender/modifiers/intern/MOD_array.c42
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c5
-rw-r--r--source/blender/modifiers/intern/MOD_boolean.c12
-rw-r--r--source/blender/modifiers/intern/MOD_cloth.c2
-rw-r--r--source/blender/modifiers/intern/MOD_collision.c2
-rw-r--r--source/blender/modifiers/intern/MOD_correctivesmooth.c8
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c7
-rw-r--r--source/blender/modifiers/intern/MOD_datatransfer.c9
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim_util.c2
-rw-r--r--source/blender/modifiers/intern/MOD_fluidsim_util.h2
-rw-r--r--source/blender/modifiers/intern/MOD_hook.c12
-rw-r--r--source/blender/modifiers/intern/MOD_laplaciandeform.c2
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c7
-rw-r--r--source/blender/modifiers/intern/MOD_mask.c22
-rw-r--r--source/blender/modifiers/intern/MOD_meshdeform.c9
-rw-r--r--source/blender/modifiers/intern/MOD_meshsequencecache.c10
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c7
-rw-r--r--source/blender/modifiers/intern/MOD_particlesystem.c2
-rw-r--r--source/blender/modifiers/intern/MOD_remesh.c4
-rw-r--r--source/blender/modifiers/intern/MOD_screw.c2
-rw-r--r--source/blender/modifiers/intern/MOD_shrinkwrap.c14
-rw-r--r--source/blender/modifiers/intern/MOD_simpledeform.c6
-rw-r--r--source/blender/modifiers/intern/MOD_surface.c2
-rw-r--r--source/blender/modifiers/intern/MOD_surfacedeform.c8
-rw-r--r--source/blender/modifiers/intern/MOD_util.c2
-rw-r--r--source/blender/modifiers/intern/MOD_util.h2
-rw-r--r--source/blender/modifiers/intern/MOD_uvproject.c2
-rw-r--r--source/blender/modifiers/intern/MOD_warp.c12
-rw-r--r--source/blender/modifiers/intern/MOD_weightvg_util.c4
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgedit.c8
-rw-r--r--source/blender/modifiers/intern/MOD_weightvgproximity.c4
-rw-r--r--source/blender/nodes/CMakeLists.txt7
-rw-r--r--source/blender/nodes/NOD_composite.h1
-rw-r--r--source/blender/nodes/NOD_shader.h4
-rw-r--r--source/blender/nodes/NOD_static_types.h7
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_curves.c6
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_denoise.c58
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_huecorrect.c4
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_outputFile.c2
-rw-r--r--source/blender/nodes/composite/nodes/node_composite_switchview.c2
-rw-r--r--source/blender/nodes/intern/node_socket.c2
-rw-r--r--source/blender/nodes/intern/node_util.c8
-rw-r--r--source/blender/nodes/intern/node_util.h2
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c24
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_clamp.c56
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_curves.c14
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_holdout.c10
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_map_range.c68
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_math.c370
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_normal.c2
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_normal_map.c6
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_object_info.c18
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c4
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tangent.c3
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c76
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_vectMath.c155
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_vector_math.c113
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_volume_info.c56
-rw-r--r--source/blender/nodes/texture/nodes/node_texture_curves.c10
-rw-r--r--source/blender/nodes/texture/nodes/node_texture_math.c36
-rw-r--r--source/blender/physics/BPH_mass_spring.h1
-rw-r--r--source/blender/physics/intern/BPH_mass_spring.cpp2
-rw-r--r--source/blender/physics/intern/implicit.h2
-rw-r--r--source/blender/physics/intern/implicit_blender.c9
-rw-r--r--source/blender/python/bmesh/bmesh_py_types.h4
-rw-r--r--source/blender/python/bmesh/bmesh_py_types_customdata.c6
-rw-r--r--source/blender/python/bmesh/bmesh_py_types_meshdata.c8
-rw-r--r--source/blender/python/generic/idprop_py_api.c5
-rw-r--r--source/blender/python/gpu/gpu_py_shader.c1
-rw-r--r--source/blender/python/gpu/gpu_py_types.c1
-rw-r--r--source/blender/python/intern/bpy_app_translations.c2
-rw-r--r--source/blender/python/intern/bpy_interface.c4
-rw-r--r--source/blender/python/intern/bpy_msgbus.c4
-rw-r--r--source/blender/python/intern/bpy_operator.c5
-rw-r--r--source/blender/python/intern/bpy_operator_wrap.c2
-rw-r--r--source/blender/python/intern/bpy_props.c10
-rw-r--r--source/blender/python/intern/bpy_rna.c47
-rw-r--r--source/blender/python/intern/bpy_rna_anim.c18
-rw-r--r--source/blender/python/intern/bpy_rna_array.c5
-rw-r--r--source/blender/python/intern/bpy_rna_driver.c2
-rw-r--r--source/blender/python/mathutils/mathutils.c148
-rw-r--r--source/blender/python/mathutils/mathutils.h30
-rw-r--r--source/blender/python/mathutils/mathutils_Matrix.c10
-rw-r--r--source/blender/python/mathutils/mathutils_Quaternion.c6
-rw-r--r--source/blender/python/mathutils/mathutils_Vector.c12
-rw-r--r--source/blender/python/mathutils/mathutils_geometry.c229
-rw-r--r--source/blender/render/extern/include/RE_engine.h1
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h5
-rw-r--r--source/blender/render/extern/include/RE_render_ext.h3
-rw-r--r--source/blender/render/extern/include/RE_shader_ext.h2
-rw-r--r--source/blender/render/intern/source/bake_api.c2
-rw-r--r--source/blender/render/intern/source/imagetexture.c4
-rw-r--r--source/blender/render/intern/source/pipeline.c21
-rw-r--r--source/blender/render/intern/source/pointdensity.c4
-rw-r--r--source/blender/render/intern/source/render_texture.c2
-rw-r--r--source/blender/windowmanager/CMakeLists.txt1
-rw-r--r--source/blender/windowmanager/WM_api.h14
-rw-r--r--source/blender/windowmanager/WM_types.h1
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h2
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c4
-rw-r--r--source/blender/windowmanager/gizmo/wm_gizmo_fn.h2
-rw-r--r--source/blender/windowmanager/gizmo/wm_gizmo_wmapi.h2
-rw-r--r--source/blender/windowmanager/intern/wm_dragdrop.c4
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c14
-rw-r--r--source/blender/windowmanager/intern/wm_files.c122
-rw-r--r--source/blender/windowmanager/intern/wm_operator_props.c5
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c419
-rw-r--r--source/blender/windowmanager/intern/wm_splash_screen.c314
-rw-r--r--source/blender/windowmanager/intern/wm_window.c12
-rw-r--r--source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c26
-rw-r--r--source/blender/windowmanager/message_bus/wm_message_bus.h7
-rw-r--r--source/blender/windowmanager/wm.h3
-rw-r--r--source/blender/windowmanager/wm_window.h4
842 files changed, 51350 insertions, 39845 deletions
diff --git a/source/blender/alembic/ABC_alembic.h b/source/blender/alembic/ABC_alembic.h
index 653382017d6..696e0ff1810 100644
--- a/source/blender/alembic/ABC_alembic.h
+++ b/source/blender/alembic/ABC_alembic.h
@@ -117,6 +117,12 @@ struct Mesh *ABC_read_mesh(struct CacheReader *reader,
const char **err_str,
int flags);
+bool ABC_mesh_topology_changed(struct CacheReader *reader,
+ struct Object *ob,
+ struct Mesh *existing_mesh,
+ const float time,
+ const char **err_str);
+
void CacheReader_incref(struct CacheReader *reader);
void CacheReader_free(struct CacheReader *reader);
diff --git a/source/blender/alembic/intern/abc_customdata.h b/source/blender/alembic/intern/abc_customdata.h
index 0ffafa8848e..52f55a41628 100644
--- a/source/blender/alembic/intern/abc_customdata.h
+++ b/source/blender/alembic/intern/abc_customdata.h
@@ -28,11 +28,11 @@
#include <Alembic/AbcGeom/All.h>
struct CustomData;
-struct Mesh;
struct MLoop;
struct MLoopUV;
struct MPoly;
struct MVert;
+struct Mesh;
using Alembic::Abc::ICompoundProperty;
using Alembic::Abc::OCompoundProperty;
diff --git a/source/blender/alembic/intern/abc_exporter.cc b/source/blender/alembic/intern/abc_exporter.cc
index 56fb5a68402..f19e0257b1b 100644
--- a/source/blender/alembic/intern/abc_exporter.cc
+++ b/source/blender/alembic/intern/abc_exporter.cc
@@ -241,9 +241,9 @@ Alembic::Abc::TimeSamplingPtr AbcExporter::createTimeSampling(double step)
getShutterSamples(step, true, samples);
- Alembic::Abc::TimeSamplingType ts(
- static_cast<uint32_t>(samples.size()),
- 1.0 / m_settings.scene->r.frs_sec); /* TODO(Sybren): shouldn't we use the FPS macro here? */
+ /* TODO(Sybren): shouldn't we use the FPS macro here? */
+ Alembic::Abc::TimeSamplingType ts(static_cast<uint32_t>(samples.size()),
+ 1.0 / m_settings.scene->r.frs_sec);
return TimeSamplingPtr(new Alembic::Abc::TimeSampling(ts, samples));
}
diff --git a/source/blender/alembic/intern/abc_mball.h b/source/blender/alembic/intern/abc_mball.h
index 770fa6fdf8c..4be977fa8f5 100644
--- a/source/blender/alembic/intern/abc_mball.h
+++ b/source/blender/alembic/intern/abc_mball.h
@@ -24,9 +24,7 @@
#include "abc_object.h"
#include "abc_mesh.h"
-struct EvaluationContext;
struct Main;
-struct MetaBall;
struct Object;
/* AbcMBallWriter converts the metaballs to meshes at every frame,
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc
index 6647ca83bd6..8728303923a 100644
--- a/source/blender/alembic/intern/abc_mesh.cc
+++ b/source/blender/alembic/intern/abc_mesh.cc
@@ -1131,6 +1131,31 @@ bool AbcMeshReader::accepts_object_type(
return true;
}
+bool AbcMeshReader::topology_changed(Mesh *existing_mesh, const ISampleSelector &sample_sel)
+{
+ IPolyMeshSchema::Sample sample;
+ try {
+ sample = m_schema.getValue(sample_sel);
+ }
+ catch (Alembic::Util::Exception &ex) {
+ printf("Alembic: error reading mesh sample for '%s/%s' at time %f: %s\n",
+ m_iobject.getFullName().c_str(),
+ m_schema.getName().c_str(),
+ sample_sel.getRequestedTime(),
+ ex.what());
+ // A similar error in read_mesh() would just return existing_mesh.
+ return false;
+ }
+
+ const P3fArraySamplePtr &positions = sample.getPositions();
+ const Alembic::Abc::Int32ArraySamplePtr &face_indices = sample.getFaceIndices();
+ const Alembic::Abc::Int32ArraySamplePtr &face_counts = sample.getFaceCounts();
+
+ return positions->size() != existing_mesh->totvert ||
+ face_counts->size() != existing_mesh->totpoly ||
+ face_indices->size() != existing_mesh->totloop;
+}
+
Mesh *AbcMeshReader::read_mesh(Mesh *existing_mesh,
const ISampleSelector &sample_sel,
int read_flag,
@@ -1162,10 +1187,7 @@ Mesh *AbcMeshReader::read_mesh(Mesh *existing_mesh,
ImportSettings settings;
settings.read_flag |= read_flag;
- bool topology_changed = positions->size() != existing_mesh->totvert ||
- face_counts->size() != existing_mesh->totpoly ||
- face_indices->size() != existing_mesh->totloop;
- if (topology_changed) {
+ if (topology_changed(existing_mesh, sample_sel)) {
new_mesh = BKE_mesh_new_nomain_from_template(
existing_mesh, positions->size(), 0, 0, face_indices->size(), face_counts->size());
@@ -1314,7 +1336,7 @@ static void read_subd_sample(const std::string &iobject_full_name,
if ((settings->read_flag & MOD_MESHSEQ_READ_POLY) != 0) {
/* Alembic's 'SubD' scheme is used to store subdivision surfaces, i.e. the pre-subdivision
- * mesh. Currently we don't add a subdivison modifier when we load such data. This code is
+ * mesh. Currently we don't add a subdivision modifier when we load such data. This code is
* assuming that the subdivided surface should be smooth, and sets a flag that will eventually
* mark all polygons as such. */
abc_mesh_data.poly_flag_smooth = true;
diff --git a/source/blender/alembic/intern/abc_mesh.h b/source/blender/alembic/intern/abc_mesh.h
index 859ab121eb6..c15fb948e03 100644
--- a/source/blender/alembic/intern/abc_mesh.h
+++ b/source/blender/alembic/intern/abc_mesh.h
@@ -100,16 +100,18 @@ class AbcMeshReader : public AbcObjectReader {
public:
AbcMeshReader(const Alembic::Abc::IObject &object, ImportSettings &settings);
- bool valid() const;
+ bool valid() const override;
bool accepts_object_type(const Alembic::AbcCoreAbstract::ObjectHeader &alembic_header,
const Object *const ob,
- const char **err_str) const;
- void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel);
+ const char **err_str) const override;
+ void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) override;
struct Mesh *read_mesh(struct Mesh *existing_mesh,
const Alembic::Abc::ISampleSelector &sample_sel,
int read_flag,
- const char **err_str);
+ const char **err_str) override;
+ bool topology_changed(Mesh *existing_mesh,
+ const Alembic::Abc::ISampleSelector &sample_sel) override;
private:
void readFaceSetsSample(Main *bmain,
diff --git a/source/blender/alembic/intern/abc_object.cc b/source/blender/alembic/intern/abc_object.cc
index f863fe4fee7..ebebbc0da1e 100644
--- a/source/blender/alembic/intern/abc_object.cc
+++ b/source/blender/alembic/intern/abc_object.cc
@@ -246,6 +246,14 @@ struct Mesh *AbcObjectReader::read_mesh(struct Mesh *existing_mesh,
return existing_mesh;
}
+bool AbcObjectReader::topology_changed(Mesh * /*existing_mesh*/,
+ const Alembic::Abc::ISampleSelector & /*sample_sel*/)
+{
+ /* The default implementation of read_mesh() just returns the original mesh, so never changes the
+ * topology. */
+ return false;
+}
+
void AbcObjectReader::setupObjectTransform(const float time)
{
bool is_constant = false;
diff --git a/source/blender/alembic/intern/abc_object.h b/source/blender/alembic/intern/abc_object.h
index 537f24ab7d6..efe78b9017c 100644
--- a/source/blender/alembic/intern/abc_object.h
+++ b/source/blender/alembic/intern/abc_object.h
@@ -190,6 +190,8 @@ class AbcObjectReader {
const Alembic::Abc::ISampleSelector &sample_sel,
int read_flag,
const char **err_str);
+ virtual bool topology_changed(Mesh *existing_mesh,
+ const Alembic::Abc::ISampleSelector &sample_sel);
/** Reads the object matrix and sets up an object transform if animated. */
void setupObjectTransform(const float time);
diff --git a/source/blender/alembic/intern/abc_util.h b/source/blender/alembic/intern/abc_util.h
index f7f662212fd..5eb0ed70599 100644
--- a/source/blender/alembic/intern/abc_util.h
+++ b/source/blender/alembic/intern/abc_util.h
@@ -44,7 +44,6 @@ using Alembic::Abc::chrono_t;
class AbcObjectReader;
struct ImportSettings;
-struct Base;
struct ID;
struct Object;
diff --git a/source/blender/alembic/intern/alembic_capi.cc b/source/blender/alembic/intern/alembic_capi.cc
index d63b310fef7..dc525e0c46c 100644
--- a/source/blender/alembic/intern/alembic_capi.cc
+++ b/source/blender/alembic/intern/alembic_capi.cc
@@ -937,12 +937,7 @@ void ABC_get_transform(CacheReader *reader, float r_mat[4][4], float time, float
/* ************************************************************************** */
-Mesh *ABC_read_mesh(CacheReader *reader,
- Object *ob,
- Mesh *existing_mesh,
- const float time,
- const char **err_str,
- int read_flag)
+static AbcObjectReader *get_abc_reader(CacheReader *reader, Object *ob, const char **err_str)
{
AbcObjectReader *abc_reader = reinterpret_cast<AbcObjectReader *>(reader);
IObject iobject = abc_reader->iobject();
@@ -958,12 +953,44 @@ Mesh *ABC_read_mesh(CacheReader *reader,
return NULL;
}
+ return abc_reader;
+}
+
+static ISampleSelector sample_selector_for_time(float time)
+{
/* kFloorIndex is used to be compatible with non-interpolating
* properties; they use the floor. */
- ISampleSelector sample_sel(time, ISampleSelector::kFloorIndex);
+ return ISampleSelector(time, ISampleSelector::kFloorIndex);
+}
+
+Mesh *ABC_read_mesh(CacheReader *reader,
+ Object *ob,
+ Mesh *existing_mesh,
+ const float time,
+ const char **err_str,
+ int read_flag)
+{
+ AbcObjectReader *abc_reader = get_abc_reader(reader, ob, err_str);
+ if (abc_reader == NULL) {
+ return NULL;
+ }
+
+ ISampleSelector sample_sel = sample_selector_for_time(time);
return abc_reader->read_mesh(existing_mesh, sample_sel, read_flag, err_str);
}
+bool ABC_mesh_topology_changed(
+ CacheReader *reader, Object *ob, Mesh *existing_mesh, const float time, const char **err_str)
+{
+ AbcObjectReader *abc_reader = get_abc_reader(reader, ob, err_str);
+ if (abc_reader == NULL) {
+ return false;
+ }
+
+ ISampleSelector sample_sel = sample_selector_for_time(time);
+ return abc_reader->topology_changed(existing_mesh, sample_sel);
+}
+
/* ************************************************************************** */
void CacheReader_free(CacheReader *reader)
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index 7283ade3ae5..6748a5324ac 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -619,8 +619,8 @@ static void blf_font_draw_buffer_ex(
cbuf[0] = (unsigned char)((b_col_char[0] * a) + (cbuf[0] * (1.0f - a)));
cbuf[1] = (unsigned char)((b_col_char[1] * a) + (cbuf[1] * (1.0f - a)));
cbuf[2] = (unsigned char)((b_col_char[2] * a) + (cbuf[2] * (1.0f - a)));
- cbuf[3] = (unsigned char)MIN2((int)cbuf[3] + (int)(a * 255),
- 255); /* clamp to 255 */
+ /* clamp to 255 */
+ cbuf[3] = (unsigned char)MIN2((int)cbuf[3] + (int)(a * 255), 255);
}
}
}
diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c
index 66be94aaa06..c0a53cbf282 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -329,10 +329,10 @@ GlyphBLF *blf_glyph_add(FontBLF *font, unsigned int index, unsigned int c)
/* Convert result from 1 bit per pixel to 8 bit per pixel */
/* Accum errors for later, fine if not interested beyond "ok vs any error" */
FT_Bitmap_New(&tempbitmap);
- err += FT_Bitmap_Convert(font->ft_lib,
- &slot->bitmap,
- &tempbitmap,
- 1); /* Does Blender use Pitch 1 always? It works so far */
+
+ /* Does Blender use Pitch 1 always? It works so far */
+ err += FT_Bitmap_Convert(font->ft_lib, &slot->bitmap, &tempbitmap, 1);
+
err += FT_Bitmap_Copy(font->ft_lib, &tempbitmap, &slot->bitmap);
err += FT_Bitmap_Done(font->ft_lib, &tempbitmap);
}
diff --git a/source/blender/blenkernel/BKE_DerivedMesh.h b/source/blender/blenkernel/BKE_DerivedMesh.h
index d215f214a6d..2145a673e45 100644
--- a/source/blender/blenkernel/BKE_DerivedMesh.h
+++ b/source/blender/blenkernel/BKE_DerivedMesh.h
@@ -79,12 +79,10 @@ struct CustomData_MeshMasks;
struct Depsgraph;
struct MEdge;
struct MFace;
-struct MLoopNorSpaceArray;
struct MVert;
struct Mesh;
struct ModifierData;
struct Object;
-struct PBVH;
struct Scene;
/*
@@ -150,23 +148,6 @@ struct DerivedMesh {
/** Calculate vert and face normals */
void (*calcNormals)(DerivedMesh *dm);
- /** Calculate loop (split) normals */
- void (*calcLoopNormals)(DerivedMesh *dm, const bool use_split_normals, const float split_angle);
-
- /** Calculate loop (split) normals, and returns split loop normal spacearr. */
- void (*calcLoopNormalsSpaceArray)(DerivedMesh *dm,
- const bool use_split_normals,
- const float split_angle,
- struct MLoopNorSpaceArray *r_lnors_spacearr);
-
- void (*calcLoopTangents)(DerivedMesh *dm,
- bool calc_active_tangent,
- const char (*tangent_names)[MAX_NAME],
- int tangent_names_count);
-
- /** Recalculates mesh tessellation */
- void (*recalcTessellation)(DerivedMesh *dm);
-
/** Loop tessellation cache (WARNING! Only call inside threading-protected code!) */
void (*recalcLoopTri)(DerivedMesh *dm);
/** accessor functions */
@@ -261,51 +242,6 @@ struct DerivedMesh {
DMFlagMat *(*getGridFlagMats)(DerivedMesh *dm);
unsigned int **(*getGridHidden)(DerivedMesh *dm);
- /** Iterate over each mapped vertex in the derived mesh, calling the
- * given function with the original vert and the mapped vert's new
- * coordinate and normal. For historical reasons the normal can be
- * passed as a float or short array, only one should be non-NULL.
- */
- void (*foreachMappedVert)(DerivedMesh *dm,
- void (*func)(void *userData,
- int index,
- const float co[3],
- const float no_f[3],
- const short no_s[3]),
- void *userData,
- DMForeachFlag flag);
-
- /** Iterate over each mapped edge in the derived mesh, calling the
- * given function with the original edge and the mapped edge's new
- * coordinates.
- */
- void (*foreachMappedEdge)(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float v0co[3], const float v1co[3]),
- void *userData);
-
- /** Iterate over each mapped loop in the derived mesh, calling the given function
- * with the original loop index and the mapped loops's new coordinate and normal.
- */
- void (*foreachMappedLoop)(DerivedMesh *dm,
- void (*func)(void *userData,
- int vertex_index,
- int face_index,
- const float co[3],
- const float no[3]),
- void *userData,
- DMForeachFlag flag);
-
- /** Iterate over each mapped face in the derived mesh, calling the
- * given function with the original face and the mapped face's (or
- * faces') center and normal.
- */
- void (*foreachMappedFaceCenter)(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float cent[3], const float no[3]),
- void *userData,
- DMForeachFlag flag);
-
/** Iterate over all vertex points, calling DO_MINMAX with given args.
*
* Also called in Editmode
@@ -319,9 +255,6 @@ struct DerivedMesh {
/** Get vertex location, undefined if index is not valid */
void (*getVertCo)(DerivedMesh *dm, int index, float r_co[3]);
- /** Fill the array (of length .getNumVerts()) with all vertex locations */
- void (*getVertCos)(DerivedMesh *dm, float (*r_cos)[3]);
-
/** Get smooth vertex normal, undefined if index is not valid */
void (*getVertNo)(DerivedMesh *dm, int index, float r_no[3]);
void (*getPolyNo)(DerivedMesh *dm, int index, float r_no[3]);
@@ -330,10 +263,6 @@ struct DerivedMesh {
*/
const struct MeshElemMap *(*getPolyMap)(struct Object *ob, DerivedMesh *dm);
- /** Get the BVH used for paint modes
- */
- struct PBVH *(*getPBVH)(struct Object *ob, DerivedMesh *dm);
-
/** Release reference to the DerivedMesh. This function decides internally
* if the DerivedMesh will be freed, or cached for later use. */
void (*release)(DerivedMesh *dm);
@@ -372,14 +301,6 @@ void DM_from_template(DerivedMesh *dm,
*/
int DM_release(DerivedMesh *dm);
-/** utility function to convert a DerivedMesh to a Mesh
- */
-void DM_to_mesh(DerivedMesh *dm,
- struct Mesh *me,
- struct Object *ob,
- const struct CustomData_MeshMasks *mask,
- bool take_ownership);
-
void DM_set_only_copy(DerivedMesh *dm, const struct CustomData_MeshMasks *mask);
/* adds a vertex/edge/face custom data layer to a DerivedMesh, optionally
@@ -446,8 +367,6 @@ DerivedMesh *mesh_create_derived_render(struct Depsgraph *depsgraph,
const struct CustomData_MeshMasks *dataMask);
/* same as above but wont use render settings */
-DerivedMesh *mesh_create_derived(struct Mesh *me, float (*vertCos)[3]);
-
struct Mesh *editbmesh_get_eval_cage(struct Depsgraph *depsgraph,
struct Scene *scene,
struct Object *,
@@ -464,7 +383,7 @@ struct Mesh *editbmesh_get_eval_cage_and_final(struct Depsgraph *depsgraph,
const struct CustomData_MeshMasks *dataMask,
struct Mesh **r_final);
-float (*editbmesh_get_vertex_cos(struct BMEditMesh *em, int *r_numVerts))[3];
+float (*editbmesh_vert_coords_alloc(struct BMEditMesh *em, int *r_vert_len))[3];
bool editbmesh_modifier_is_enabled(struct Scene *scene,
struct ModifierData *md,
bool has_prev_mesh);
diff --git a/source/blender/blenkernel/BKE_anim.h b/source/blender/blenkernel/BKE_anim.h
index dab76fb79f1..dce6f337885 100644
--- a/source/blender/blenkernel/BKE_anim.h
+++ b/source/blender/blenkernel/BKE_anim.h
@@ -24,7 +24,6 @@
*/
struct Depsgraph;
struct ListBase;
-struct Main;
struct Object;
struct ParticleSystem;
struct Path;
diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h
index fa8e294bdc1..a2a14011595 100644
--- a/source/blender/blenkernel/BKE_animsys.h
+++ b/source/blender/blenkernel/BKE_animsys.h
@@ -34,7 +34,6 @@ struct KeyingSet;
struct ListBase;
struct Main;
struct NlaKeyframingContext;
-struct PathResolvedRNA;
struct PointerRNA;
struct PropertyRNA;
struct ReportList;
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 99c6bb405b5..3beae7a1f9d 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -25,7 +25,6 @@
struct Bone;
struct Depsgraph;
-struct GHash;
struct ListBase;
struct Main;
struct Object;
@@ -78,6 +77,8 @@ struct bArmature *BKE_armature_copy(struct Main *bmain, const struct bArmature *
void BKE_armature_copy_bone_transforms(struct bArmature *armature_dst,
const struct bArmature *armature_src);
+void BKE_armature_transform(struct bArmature *arm, const float mat[4][4], const bool do_props);
+
/* Bounding box. */
struct BoundBox *BKE_armature_boundbox_get(struct Object *ob);
@@ -100,7 +101,7 @@ float distfactor_to_bone(
void BKE_armature_where_is(struct bArmature *arm);
void BKE_armature_where_is_bone(struct Bone *bone,
- struct Bone *prevbone,
+ const struct Bone *bone_parent,
const bool use_recursion);
void BKE_pose_clear_pointers(struct bPose *pose);
void BKE_pose_remap_bone_pointers(struct bArmature *armature, struct bPose *pose);
diff --git a/source/blender/blenkernel/BKE_blender_undo.h b/source/blender/blenkernel/BKE_blender_undo.h
index 6c2221326e9..7392d3947a2 100644
--- a/source/blender/blenkernel/BKE_blender_undo.h
+++ b/source/blender/blenkernel/BKE_blender_undo.h
@@ -26,7 +26,6 @@ extern "C" {
struct Main;
struct MemFileUndoData;
-struct Scene;
struct bContext;
#define BKE_UNDO_STR_MAX 64
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index ced9f4a3153..09900651dad 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -27,7 +27,7 @@
* \note Use #STRINGIFY() rather than defining with quotes.
*/
#define BLENDER_VERSION 281
-#define BLENDER_SUBVERSION 1
+#define BLENDER_SUBVERSION 3
/** Several breakages with 280, e.g. collections vs layers. */
#define BLENDER_MINVERSION 280
#define BLENDER_MINSUBVERSION 0
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index eeebfe1f2f6..26ab7f8ba0c 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -28,8 +28,6 @@ struct Brush;
struct ImBuf;
struct ImagePool;
struct Main;
-struct Material;
-struct Paint;
struct Scene;
struct ToolSettings;
struct UnifiedPaintSettings;
diff --git a/source/blender/blenkernel/BKE_bvhutils.h b/source/blender/blenkernel/BKE_bvhutils.h
index c88a64097bb..fdcb4066482 100644
--- a/source/blender/blenkernel/BKE_bvhutils.h
+++ b/source/blender/blenkernel/BKE_bvhutils.h
@@ -31,7 +31,6 @@
*/
struct BMEditMesh;
-struct DerivedMesh;
struct MFace;
struct MVert;
struct Mesh;
@@ -93,19 +92,18 @@ typedef struct BVHTreeFromMesh {
*
* free_bvhtree_from_mesh should be called when the tree is no longer needed.
*/
-BVHTree *bvhtree_from_editmesh_verts(BVHTreeFromEditMesh *data,
- struct BMEditMesh *em,
- float epsilon,
- int tree_type,
- int axis,
- BVHCache **bvh_cache);
+BVHTree *bvhtree_from_editmesh_verts(
+ BVHTreeFromEditMesh *data, struct BMEditMesh *em, float epsilon, int tree_type, int axis);
+
BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
const BLI_bitmap *mask,
int verts_num_active,
float epsilon,
int tree_type,
- int axis);
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data,
const struct MVert *vert,
@@ -115,21 +113,22 @@ BVHTree *bvhtree_from_mesh_verts_ex(struct BVHTreeFromMesh *data,
int verts_num_active,
float epsilon,
int tree_type,
- int axis);
-
-BVHTree *bvhtree_from_editmesh_edges(BVHTreeFromEditMesh *data,
- struct BMEditMesh *em,
- float epsilon,
- int tree_type,
- int axis,
- BVHCache **bvh_cache);
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
+
+BVHTree *bvhtree_from_editmesh_edges(
+ BVHTreeFromEditMesh *data, struct BMEditMesh *em, float epsilon, int tree_type, int axis);
+
BVHTree *bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
const BLI_bitmap *edges_mask,
int edges_num_active,
float epsilon,
int tree_type,
- int axis);
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
BVHTree *bvhtree_from_mesh_edges_ex(struct BVHTreeFromMesh *data,
const struct MVert *vert,
@@ -141,7 +140,9 @@ BVHTree *bvhtree_from_mesh_edges_ex(struct BVHTreeFromMesh *data,
int edges_num_active,
float epsilon,
int tree_type,
- int axis);
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
BVHTree *bvhtree_from_mesh_faces_ex(struct BVHTreeFromMesh *data,
const struct MVert *vert,
@@ -153,14 +154,13 @@ BVHTree *bvhtree_from_mesh_faces_ex(struct BVHTreeFromMesh *data,
int numFaces_active,
float epsilon,
int tree_type,
- int axis);
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
+
+BVHTree *bvhtree_from_editmesh_looptri(
+ BVHTreeFromEditMesh *data, struct BMEditMesh *em, float epsilon, int tree_type, int axis);
-BVHTree *bvhtree_from_editmesh_looptri(BVHTreeFromEditMesh *data,
- struct BMEditMesh *em,
- float epsilon,
- int tree_type,
- int axis,
- BVHCache **bvhCache);
BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
struct BMEditMesh *em,
const BLI_bitmap *mask,
@@ -168,7 +168,8 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
float epsilon,
int tree_type,
int axis,
- BVHCache **bvhCache);
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
const struct MVert *vert,
@@ -182,13 +183,21 @@ BVHTree *bvhtree_from_mesh_looptri_ex(struct BVHTreeFromMesh *data,
int looptri_num_active,
float epsilon,
int tree_type,
- int axis);
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
struct Mesh *mesh,
const int type,
const int tree_type);
+BVHTree *BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data,
+ struct BMEditMesh *em,
+ const int tree_type,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache);
+
/**
* Frees data allocated by a call to bvhtree_from_mesh_*.
*/
diff --git a/source/blender/blenkernel/BKE_cachefile.h b/source/blender/blenkernel/BKE_cachefile.h
index 257975e3c17..c8393fd3666 100644
--- a/source/blender/blenkernel/BKE_cachefile.h
+++ b/source/blender/blenkernel/BKE_cachefile.h
@@ -33,7 +33,6 @@ struct CacheReader;
struct Depsgraph;
struct Main;
struct Object;
-struct Scene;
void BKE_cachefiles_init(void);
void BKE_cachefiles_exit(void);
diff --git a/source/blender/blenkernel/BKE_camera.h b/source/blender/blenkernel/BKE_camera.h
index caed4959eff..da80b3d5032 100644
--- a/source/blender/blenkernel/BKE_camera.h
+++ b/source/blender/blenkernel/BKE_camera.h
@@ -32,14 +32,12 @@ extern "C" {
struct Camera;
struct Depsgraph;
-struct GPUFXSettings;
struct Main;
struct Object;
struct RegionView3D;
struct RenderData;
struct Scene;
struct View3D;
-struct ViewLayer;
struct rctf;
/* Camera Datablock */
diff --git a/source/blender/blenkernel/BKE_cdderivedmesh.h b/source/blender/blenkernel/BKE_cdderivedmesh.h
index 08d53bf0e21..50af6c876b4 100644
--- a/source/blender/blenkernel/BKE_cdderivedmesh.h
+++ b/source/blender/blenkernel/BKE_cdderivedmesh.h
@@ -33,9 +33,7 @@
struct BMEditMesh;
struct CustomData_MeshMasks;
struct DerivedMesh;
-struct MLoopNorSpaceArray;
struct Mesh;
-struct Object;
/* creates a new CDDerivedMesh */
struct DerivedMesh *CDDM_new(int numVerts, int numEdges, int numFaces, int numLoops, int numPolys);
@@ -51,79 +49,16 @@ struct DerivedMesh *CDDM_from_mesh_ex(struct Mesh *mesh,
eCDAllocType alloctype,
const struct CustomData_MeshMasks *mask);
-struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, const bool use_mdisps);
-
/* creates a CDDerivedMesh from the given BMEditMesh */
-DerivedMesh *CDDM_from_editbmesh(struct BMEditMesh *em,
- const bool use_mdisps,
- const bool use_tessface);
-
-/* creates a CDDerivedMesh from the given curve object */
-struct DerivedMesh *CDDM_from_curve(struct Object *ob);
-
-/* creates a CDDerivedMesh from the given curve object and specified dispbase */
-/* useful for OrcoDM creation for curves with constructive modifiers */
-DerivedMesh *CDDM_from_curve_displist(struct Object *ob, struct ListBase *dispbase);
+DerivedMesh *CDDM_from_editbmesh(struct BMEditMesh *em, const bool use_mdisps);
/* Copies the given DerivedMesh with verts, faces & edges stored as
* custom element data.
*/
struct DerivedMesh *CDDM_copy(struct DerivedMesh *dm);
-/* creates a CDDerivedMesh with the same layer stack configuration as the
- * given DerivedMesh and containing the requested numbers of elements.
- * elements are initialized to all zeros
- */
-struct DerivedMesh *CDDM_from_template_ex(struct DerivedMesh *source,
- int numVerts,
- int numEdges,
- int numFaces,
- int numLoops,
- int numPolys,
- const struct CustomData_MeshMasks *mask);
-struct DerivedMesh *CDDM_from_template(struct DerivedMesh *source,
- int numVerts,
- int numEdges,
- int numFaces,
- int numLoops,
- int numPolys);
-
-/* applies vertex coordinates or normals to a CDDerivedMesh. if the MVert
- * layer is a referenced layer, it will be duplicate to not overwrite the
- * original
- */
-void CDDM_apply_vert_coords(struct DerivedMesh *cddm, float (*vertCoords)[3]);
-void CDDM_apply_vert_normals(struct DerivedMesh *cddm, short (*vertNormals)[3]);
-
-/* recalculates vertex and face normals for a CDDerivedMesh
- */
-void CDDM_calc_normals_mapping_ex(struct DerivedMesh *dm, const bool only_face_normals);
-void CDDM_calc_normals_mapping(struct DerivedMesh *dm);
-void CDDM_calc_normals(struct DerivedMesh *dm);
-
-void CDDM_calc_loop_normals(struct DerivedMesh *dm,
- const bool use_split_normals,
- const float split_angle);
-void CDDM_calc_loop_normals_spacearr(struct DerivedMesh *dm,
- const bool use_split_normals,
- const float split_angle,
- struct MLoopNorSpaceArray *r_lnors_spacearr);
-
-/* reconstitute face triangulation */
-void CDDM_recalc_tessellation(struct DerivedMesh *dm);
-void CDDM_recalc_tessellation_ex(struct DerivedMesh *dm, const bool do_face_nor_cpy);
-
void CDDM_recalc_looptri(struct DerivedMesh *dm);
-/* lowers the number of vertices/edges/faces in a CDDerivedMesh
- * the layer data stays the same size
- */
-void CDDM_lower_num_verts(struct DerivedMesh *dm, int numVerts);
-void CDDM_lower_num_edges(struct DerivedMesh *dm, int numEdges);
-void CDDM_lower_num_loops(struct DerivedMesh *dm, int numLoops);
-void CDDM_lower_num_polys(struct DerivedMesh *dm, int numPolys);
-void CDDM_lower_num_tessfaces(DerivedMesh *dm, int numTessFaces);
-
/* vertex/edge/face access functions
* should always succeed if index is within bounds
* note these return pointers - any change modifies the internals of the mesh
@@ -145,13 +80,4 @@ struct MFace *CDDM_get_tessfaces(struct DerivedMesh *dm);
struct MLoop *CDDM_get_loops(struct DerivedMesh *dm);
struct MPoly *CDDM_get_polys(struct DerivedMesh *dm);
-/* Assigns news m*** layers to the cddm. Note that you must handle
- * freeing the old ones yourself. Also you must ensure dm->num****Data
- * is correct.*/
-void CDDM_set_mvert(struct DerivedMesh *dm, struct MVert *mvert);
-void CDDM_set_medge(struct DerivedMesh *dm, struct MEdge *medge);
-void CDDM_set_mface(struct DerivedMesh *dm, struct MFace *mface);
-void CDDM_set_mloop(struct DerivedMesh *dm, struct MLoop *mloop);
-void CDDM_set_mpoly(struct DerivedMesh *dm, struct MPoly *mpoly);
-
#endif
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index 43df78c33e4..01f94c39215 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -29,7 +29,6 @@
struct ClothModifierData;
struct CollisionModifierData;
struct Depsgraph;
-struct MFace;
struct Mesh;
struct Object;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_collection.h b/source/blender/blenkernel/BKE_collection.h
index 972ae5e8628..757b1c64db3 100644
--- a/source/blender/blenkernel/BKE_collection.h
+++ b/source/blender/blenkernel/BKE_collection.h
@@ -35,8 +35,6 @@ extern "C" {
struct BLI_Iterator;
struct Base;
struct Collection;
-struct Depsgraph;
-struct ID;
struct Main;
struct Object;
struct Scene;
@@ -171,7 +169,7 @@ void BKE_main_collections_parent_relations_rebuild(struct Main *bmain);
typedef void (*BKE_scene_objects_Cb)(struct Object *ob, void *data);
typedef void (*BKE_scene_collections_Cb)(struct Collection *ob, void *data);
-/* Iteratorion over objects in collection. */
+/* Iteration over objects in collection. */
#define FOREACH_COLLECTION_VISIBLE_OBJECT_RECURSIVE_BEGIN(_collection, _object, _mode) \
{ \
diff --git a/source/blender/blenkernel/BKE_collision.h b/source/blender/blenkernel/BKE_collision.h
index 291502a0c28..5d7a5094eb5 100644
--- a/source/blender/blenkernel/BKE_collision.h
+++ b/source/blender/blenkernel/BKE_collision.h
@@ -37,11 +37,9 @@
struct Collection;
struct CollisionModifierData;
struct Depsgraph;
-struct MFace;
struct MVert;
struct MVertTri;
struct Object;
-struct Scene;
////////////////////////////////////////
// used for collisions in collision.c
diff --git a/source/blender/blenkernel/BKE_colortools.h b/source/blender/blenkernel/BKE_colortools.h
index a6eb12c3708..643073b3470 100644
--- a/source/blender/blenkernel/BKE_colortools.h
+++ b/source/blender/blenkernel/BKE_colortools.h
@@ -34,17 +34,19 @@ struct ImBuf;
struct Scopes;
struct rctf;
-void curvemapping_set_defaults(
+void BKE_curvemapping_set_defaults(
struct CurveMapping *cumap, int tot, float minx, float miny, float maxx, float maxy);
-struct CurveMapping *curvemapping_add(int tot, float minx, float miny, float maxx, float maxy);
-void curvemapping_free_data(struct CurveMapping *cumap);
-void curvemapping_free(struct CurveMapping *cumap);
-void curvemapping_copy_data(struct CurveMapping *target, const struct CurveMapping *cumap);
-struct CurveMapping *curvemapping_copy(const struct CurveMapping *cumap);
-void curvemapping_set_black_white_ex(const float black[3], const float white[3], float r_bwmul[3]);
-void curvemapping_set_black_white(struct CurveMapping *cumap,
- const float black[3],
- const float white[3]);
+struct CurveMapping *BKE_curvemapping_add(int tot, float minx, float miny, float maxx, float maxy);
+void BKE_curvemapping_free_data(struct CurveMapping *cumap);
+void BKE_curvemapping_free(struct CurveMapping *cumap);
+void BKE_curvemapping_copy_data(struct CurveMapping *target, const struct CurveMapping *cumap);
+struct CurveMapping *BKE_curvemapping_copy(const struct CurveMapping *cumap);
+void BKE_curvemapping_set_black_white_ex(const float black[3],
+ const float white[3],
+ float r_bwmul[3]);
+void BKE_curvemapping_set_black_white(struct CurveMapping *cumap,
+ const float black[3],
+ const float white[3]);
enum {
CURVEMAP_SLOPE_NEGATIVE = 0,
@@ -52,56 +54,56 @@ enum {
CURVEMAP_SLOPE_POS_NEG = 2,
};
-void curvemap_reset(struct CurveMap *cuma, const struct rctf *clipr, int preset, int slope);
-void curvemap_remove(struct CurveMap *cuma, const short flag);
-bool curvemap_remove_point(struct CurveMap *cuma, struct CurveMapPoint *cmp);
-struct CurveMapPoint *curvemap_insert(struct CurveMap *cuma, float x, float y);
-void curvemap_handle_set(struct CurveMap *cuma, int type);
+void BKE_curvemap_reset(struct CurveMap *cuma, const struct rctf *clipr, int preset, int slope);
+void BKE_curvemap_remove(struct CurveMap *cuma, const short flag);
+bool BKE_curvemap_remove_point(struct CurveMap *cuma, struct CurveMapPoint *cmp);
+struct CurveMapPoint *BKE_curvemap_insert(struct CurveMap *cuma, float x, float y);
+void BKE_curvemap_handle_set(struct CurveMap *cuma, int type);
-void curvemapping_changed(struct CurveMapping *cumap, const bool rem_doubles);
-void curvemapping_changed_all(struct CurveMapping *cumap);
+void BKE_curvemapping_changed(struct CurveMapping *cumap, const bool rem_doubles);
+void BKE_curvemapping_changed_all(struct CurveMapping *cumap);
/* call before _all_ evaluation functions */
-void curvemapping_initialize(struct CurveMapping *cumap);
+void BKE_curvemapping_initialize(struct CurveMapping *cumap);
/* keep these (const CurveMap) - to help with thread safety */
/* single curve, no table check */
-float curvemap_evaluateF(const struct CurveMap *cuma, float value);
+float BKE_curvemap_evaluateF(const struct CurveMap *cuma, float value);
/* single curve, with table check */
-float curvemapping_evaluateF(const struct CurveMapping *cumap, int cur, float value);
-void curvemapping_evaluate3F(const struct CurveMapping *cumap,
- float vecout[3],
- const float vecin[3]);
-void curvemapping_evaluateRGBF(const struct CurveMapping *cumap,
- float vecout[3],
- const float vecin[3]);
-void curvemapping_evaluate_premulRGB(const struct CurveMapping *cumap,
- unsigned char vecout_byte[3],
- const unsigned char vecin_byte[3]);
-void curvemapping_evaluate_premulRGBF_ex(const struct CurveMapping *cumap,
- float vecout[3],
- const float vecin[3],
- const float black[3],
- const float bwmul[3]);
-void curvemapping_evaluate_premulRGBF(const struct CurveMapping *cumap,
- float vecout[3],
- const float vecin[3]);
-int curvemapping_RGBA_does_something(const struct CurveMapping *cumap);
-void curvemapping_table_RGBA(const struct CurveMapping *cumap, float **array, int *size);
+float BKE_curvemapping_evaluateF(const struct CurveMapping *cumap, int cur, float value);
+void BKE_curvemapping_evaluate3F(const struct CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3]);
+void BKE_curvemapping_evaluateRGBF(const struct CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3]);
+void BKE_curvemapping_evaluate_premulRGB(const struct CurveMapping *cumap,
+ unsigned char vecout_byte[3],
+ const unsigned char vecin_byte[3]);
+void BKE_curvemapping_evaluate_premulRGBF_ex(const struct CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3],
+ const float black[3],
+ const float bwmul[3]);
+void BKE_curvemapping_evaluate_premulRGBF(const struct CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3]);
+int BKE_curvemapping_RGBA_does_something(const struct CurveMapping *cumap);
+void BKE_curvemapping_table_RGBA(const struct CurveMapping *cumap, float **array, int *size);
/* non-const, these modify the curve */
-void curvemapping_premultiply(struct CurveMapping *cumap, int restore);
+void BKE_curvemapping_premultiply(struct CurveMapping *cumap, int restore);
void BKE_histogram_update_sample_line(struct Histogram *hist,
struct ImBuf *ibuf,
const struct ColorManagedViewSettings *view_settings,
const struct ColorManagedDisplaySettings *display_settings);
-void scopes_update(struct Scopes *scopes,
- struct ImBuf *ibuf,
- const struct ColorManagedViewSettings *view_settings,
- const struct ColorManagedDisplaySettings *display_settings);
-void scopes_free(struct Scopes *scopes);
-void scopes_new(struct Scopes *scopes);
+void BKE_scopes_update(struct Scopes *scopes,
+ struct ImBuf *ibuf,
+ const struct ColorManagedViewSettings *view_settings,
+ const struct ColorManagedDisplaySettings *display_settings);
+void BKE_scopes_free(struct Scopes *scopes);
+void BKE_scopes_new(struct Scopes *scopes);
void BKE_color_managed_display_settings_init(struct ColorManagedDisplaySettings *settings);
void BKE_color_managed_display_settings_copy(struct ColorManagedDisplaySettings *new_settings,
diff --git a/source/blender/blenkernel/BKE_context.h b/source/blender/blenkernel/BKE_context.h
index 53976b4c1ad..6bd7440eeea 100644
--- a/source/blender/blenkernel/BKE_context.h
+++ b/source/blender/blenkernel/BKE_context.h
@@ -33,7 +33,6 @@ extern "C" {
struct ARegion;
struct Base;
-struct Brush;
struct CacheFile;
struct Collection;
struct Depsgraph;
@@ -59,7 +58,6 @@ struct Text;
struct ToolSettings;
struct View3D;
struct ViewLayer;
-struct ViewRender;
struct bGPDframe;
struct bGPDlayer;
struct bGPdata;
@@ -137,8 +135,8 @@ void CTX_store_free(bContextStore *store);
void CTX_store_free_list(ListBase *contexts);
/* need to store if python is initialized or not */
-int CTX_py_init_get(bContext *C);
-void CTX_py_init_set(bContext *C, int value);
+bool CTX_py_init_get(bContext *C);
+void CTX_py_init_set(bContext *C, bool value);
void *CTX_py_dict_get(const bContext *C);
void CTX_py_dict_set(bContext *C, void *value);
@@ -239,7 +237,7 @@ bool CTX_data_dir(const char *member);
#define CTX_DATA_BEGIN_WITH_ID(C, Type, instance, member, Type_id, instance_id) \
CTX_DATA_BEGIN (C, Type, instance, member) \
- Type_id instance_id = ctx_link->ptr.id.data;
+ Type_id instance_id = (Type_id)ctx_link->ptr.owner_id;
int ctx_data_list_count(const bContext *C, int (*func)(const bContext *, ListBase *));
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 51ff4673aba..be49ca150b2 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -26,15 +26,12 @@
struct BezTriple;
struct Curve;
struct Depsgraph;
-struct EditNurb;
struct GHash;
-struct LinkNode;
struct ListBase;
struct Main;
struct Nurb;
struct Object;
struct Path;
-struct Scene;
struct TextBox;
struct rctf;
@@ -124,11 +121,22 @@ void BKE_curve_nurb_vert_active_set(struct Curve *cu, const struct Nurb *nu, con
bool BKE_curve_nurb_vert_active_get(struct Curve *cu, struct Nurb **r_nu, void **r_vert);
void BKE_curve_nurb_vert_active_validate(struct Curve *cu);
-float (*BKE_curve_nurbs_vertexCos_get(struct ListBase *lb, int *r_numVerts))[3];
-void BK_curve_nurbs_vertexCos_apply(struct ListBase *lb, float (*vertexCos)[3]);
+float (*BKE_curve_nurbs_vert_coords_alloc(struct ListBase *lb, int *r_vert_len))[3];
+void BKE_curve_nurbs_vert_coords_get(struct ListBase *lb, float (*vert_coords)[3], int vert_len);
-float (*BKE_curve_nurbs_keyVertexCos_get(struct ListBase *lb, float *key))[3];
-void BKE_curve_nurbs_keyVertexTilts_apply(struct ListBase *lb, float *key);
+void BKE_curve_nurbs_vert_coords_apply_with_mat4(struct ListBase *lb,
+ const float (*vert_coords)[3],
+ const float mat[4][4],
+ const bool constrain_2d);
+
+void BKE_curve_nurbs_vert_coords_apply(struct ListBase *lb,
+ const float (*vert_coords)[3],
+ const bool constrain_2d);
+
+float (*BKE_curve_nurbs_key_vert_coords_alloc(struct ListBase *lb,
+ float *key,
+ int *r_vert_len))[3];
+void BKE_curve_nurbs_key_vert_tilts_apply(struct ListBase *lb, float *key);
void BKE_curve_editNurb_keyIndex_delCV(struct GHash *keyindex, const void *cv);
void BKE_curve_editNurb_keyIndex_free(struct GHash **keyindex);
diff --git a/source/blender/blenkernel/BKE_displist.h b/source/blender/blenkernel/BKE_displist.h
index c57639a8193..cfacbfe0a21 100644
--- a/source/blender/blenkernel/BKE_displist.h
+++ b/source/blender/blenkernel/BKE_displist.h
@@ -49,9 +49,7 @@ enum {
/* prototypes */
struct Depsgraph;
-struct LinkNode;
struct ListBase;
-struct Main;
struct Mesh;
struct Object;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h
index c4f05d404ce..734bfbc019a 100644
--- a/source/blender/blenkernel/BKE_dynamicpaint.h
+++ b/source/blender/blenkernel/BKE_dynamicpaint.h
@@ -25,9 +25,7 @@ struct Depsgraph;
struct DynamicPaintCanvasSettings;
struct DynamicPaintModifierData;
struct DynamicPaintRuntime;
-struct Main;
struct Scene;
-struct ViewLayer;
/* Actual surface point */
typedef struct PaintSurfaceData {
diff --git a/source/blender/blenkernel/BKE_editmesh.h b/source/blender/blenkernel/BKE_editmesh.h
index b7280c702d2..062968eddfc 100644
--- a/source/blender/blenkernel/BKE_editmesh.h
+++ b/source/blender/blenkernel/BKE_editmesh.h
@@ -31,7 +31,6 @@
struct BMLoop;
struct BMesh;
struct Depsgraph;
-struct DerivedMesh;
struct EditMeshData;
struct Mesh;
struct MeshStatVis;
@@ -79,7 +78,7 @@ typedef struct BMEditMesh {
} BMEditMesh;
/* editmesh.c */
-void BKE_editmesh_tessface_calc(BMEditMesh *em);
+void BKE_editmesh_looptri_calc(BMEditMesh *em);
BMEditMesh *BKE_editmesh_create(BMesh *bm, const bool do_tessellate);
BMEditMesh *BKE_editmesh_copy(BMEditMesh *em);
BMEditMesh *BKE_editmesh_from_object(struct Object *ob);
@@ -88,7 +87,7 @@ void BKE_editmesh_free(BMEditMesh *em);
void BKE_editmesh_color_free(BMEditMesh *em);
void BKE_editmesh_color_ensure(BMEditMesh *em, const char htype);
-float (*BKE_editmesh_vertexCos_get_orco(BMEditMesh *em, int *r_numVerts))[3];
+float (*BKE_editmesh_vert_coords_alloc_orco(BMEditMesh *em, int *r_vert_len))[3];
void BKE_editmesh_lnorspace_update(BMEditMesh *em);
void BKE_editmesh_ensure_autosmooth(BMEditMesh *em);
@@ -98,7 +97,7 @@ void BKE_editmesh_statvis_calc(BMEditMesh *em,
struct EditMeshData *emd,
const struct MeshStatVis *statvis);
-float (*BKE_editmesh_vertexCos_get(
- struct Depsgraph *depsgraph, struct BMEditMesh *em, struct Scene *scene, int *r_numVerts))[3];
+float (*BKE_editmesh_vert_coords_alloc(
+ struct Depsgraph *depsgraph, struct BMEditMesh *em, struct Scene *scene, int *r_vert_len))[3];
#endif /* __BKE_EDITMESH_H__ */
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 60e9e6b91d3..f1cf87ea1b5 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -24,30 +24,40 @@
* \ingroup bke
*/
-struct ArrayGpencilModifierData;
struct BoundBox;
struct Brush;
struct CurveMapping;
struct Depsgraph;
-struct GpencilModifierData;
-struct LatticeGpencilModifierData;
struct ListBase;
struct Main;
struct Material;
struct Object;
-struct SimplifyGpencilModifierData;
struct ToolSettings;
struct bDeformGroup;
struct bGPDframe;
struct bGPDlayer;
-struct bGPDpalette;
-struct bGPDpalettecolor;
struct bGPDspoint;
struct bGPDstroke;
struct bGPdata;
struct MDeformVert;
-struct MDeformWeight;
+
+#define GPENCIL_SIMPLIFY(scene) ((scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ENABLE))
+#define GPENCIL_SIMPLIFY_ONPLAY(playing) \
+ (((playing == true) && (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ON_PLAY)) || \
+ ((scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ON_PLAY) == 0))
+#define GPENCIL_SIMPLIFY_FILL(scene, playing) \
+ ((GPENCIL_SIMPLIFY_ONPLAY(playing) && (GPENCIL_SIMPLIFY(scene)) && \
+ (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_FILL)))
+#define GPENCIL_SIMPLIFY_MODIF(scene, playing) \
+ ((GPENCIL_SIMPLIFY_ONPLAY(playing) && (GPENCIL_SIMPLIFY(scene)) && \
+ (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_MODIFIER)))
+#define GPENCIL_SIMPLIFY_FX(scene, playing) \
+ ((GPENCIL_SIMPLIFY_ONPLAY(playing) && (GPENCIL_SIMPLIFY(scene)) && \
+ (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_FX)))
+#define GPENCIL_SIMPLIFY_BLEND(scene, playing) \
+ ((GPENCIL_SIMPLIFY_ONPLAY(playing) && (GPENCIL_SIMPLIFY(scene)) && \
+ (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_BLEND)))
/* ------------ Grease-Pencil API ------------------ */
@@ -57,7 +67,7 @@ void BKE_gpencil_free_stroke(struct bGPDstroke *gps);
bool BKE_gpencil_free_strokes(struct bGPDframe *gpf);
void BKE_gpencil_free_frames(struct bGPDlayer *gpl);
void BKE_gpencil_free_layers(struct ListBase *list);
-bool BKE_gpencil_free_frame_runtime_data(struct bGPDframe *derived_gpf);
+bool BKE_gpencil_free_frame_runtime_data(struct bGPDframe *gpf_eval);
void BKE_gpencil_free(struct bGPdata *gpd, bool free_all);
void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd);
@@ -197,6 +207,10 @@ void BKE_gpencil_simplify_stroke(struct bGPDstroke *gps, float factor);
void BKE_gpencil_simplify_fixed(struct bGPDstroke *gps);
void BKE_gpencil_subdivide(struct bGPDstroke *gps, int level, int flag);
bool BKE_gpencil_trim_stroke(struct bGPDstroke *gps);
+void BKE_gpencil_merge_distance_stroke(struct bGPDframe *gpf,
+ struct bGPDstroke *gps,
+ const float threshold,
+ const bool use_unselected);
void BKE_gpencil_stroke_2d_flat(const struct bGPDspoint *points,
int totpoints,
@@ -212,11 +226,13 @@ void BKE_gpencil_stroke_2d_flat_ref(const struct bGPDspoint *ref_points,
void BKE_gpencil_transform(struct bGPdata *gpd, float mat[4][4]);
+bool BKE_gpencil_sample_stroke(struct bGPDstroke *gps, const float dist, const bool select);
bool BKE_gpencil_smooth_stroke(struct bGPDstroke *gps, int i, float inf);
bool BKE_gpencil_smooth_stroke_strength(struct bGPDstroke *gps, int point_index, float influence);
bool BKE_gpencil_smooth_stroke_thickness(struct bGPDstroke *gps, int point_index, float influence);
bool BKE_gpencil_smooth_stroke_uv(struct bGPDstroke *gps, int point_index, float influence);
bool BKE_gpencil_close_stroke(struct bGPDstroke *gps);
+void BKE_gpencil_dissolve_points(struct bGPDframe *gpf, struct bGPDstroke *gps, const short tag);
void BKE_gpencil_get_range_selected(struct bGPDlayer *gpl, int *r_initframe, int *r_endframe);
float BKE_gpencil_multiframe_falloff_calc(
diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 1f2f8ee57bf..36f38996c36 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -24,23 +24,16 @@
#include "BLI_compiler_attrs.h"
#include "BKE_customdata.h"
-struct BMEditMesh;
-struct DepsNodeHandle;
struct Depsgraph;
-struct DerivedMesh;
struct GpencilModifierData;
struct ID;
struct ListBase;
struct Main;
-struct Mesh;
struct ModifierUpdateDepsgraphContext;
struct Object;
struct Scene;
-struct ViewLayer;
-struct bArmature;
/* NOTE: bakeModifier() called from UI:
* needs to create new databloc-ks, hence the need for this. */
-struct bContext;
struct bGPDframe;
struct bGPDlayer;
struct bGPDstroke;
@@ -140,6 +133,7 @@ typedef struct GpencilModifierTypeInfo {
struct Depsgraph *depsgraph,
struct Object *ob,
struct bGPDlayer *gpl,
+ struct bGPDframe *gpf,
struct bGPDstroke *gps);
/**
@@ -327,4 +321,8 @@ int BKE_gpencil_time_modifier(struct Depsgraph *depsgraph,
void BKE_gpencil_lattice_init(struct Object *ob);
void BKE_gpencil_lattice_clear(struct Object *ob);
+void BKE_gpencil_modifiers_calc(struct Depsgraph *depsgraph,
+ struct Scene *scene,
+ struct Object *ob);
+
#endif /* __BKE_GPENCIL_MODIFIER_H__ */
diff --git a/source/blender/blenkernel/BKE_image_save.h b/source/blender/blenkernel/BKE_image_save.h
index 26c377a2574..8dfece944ff 100644
--- a/source/blender/blenkernel/BKE_image_save.h
+++ b/source/blender/blenkernel/BKE_image_save.h
@@ -31,7 +31,6 @@ extern "C" {
struct Image;
struct Main;
-struct RenderResult;
struct ReportList;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_key.h b/source/blender/blenkernel/BKE_key.h
index 58ad3f6230d..477a22b07bb 100644
--- a/source/blender/blenkernel/BKE_key.h
+++ b/source/blender/blenkernel/BKE_key.h
@@ -31,7 +31,6 @@ struct ListBase;
struct Main;
struct Mesh;
struct Object;
-struct WeightsArrayCache;
/* Kernel prototypes */
#ifdef __cplusplus
@@ -92,13 +91,17 @@ void BKE_keyblock_mesh_calc_normals(struct KeyBlock *kb,
float (*r_polynors)[3],
float (*r_loopnors)[3]);
-void BKE_keyblock_update_from_vertcos(struct Object *ob, struct KeyBlock *kb, float (*vertCos)[3]);
+void BKE_keyblock_update_from_vertcos(struct Object *ob,
+ struct KeyBlock *kb,
+ const float (*vertCos)[3]);
void BKE_keyblock_convert_from_vertcos(struct Object *ob,
struct KeyBlock *kb,
- float (*vertCos)[3]);
+ const float (*vertCos)[3]);
float (*BKE_keyblock_convert_to_vertcos(struct Object *ob, struct KeyBlock *kb))[3];
-void BKE_keyblock_update_from_offset(struct Object *ob, struct KeyBlock *kb, float (*ofs)[3]);
+void BKE_keyblock_update_from_offset(struct Object *ob,
+ struct KeyBlock *kb,
+ const float (*ofs)[3]);
/* other management */
bool BKE_keyblock_move(struct Object *ob, int org_index, int new_index);
diff --git a/source/blender/blenkernel/BKE_lattice.h b/source/blender/blenkernel/BKE_lattice.h
index c4173cd867e..a3befa6f3bb 100644
--- a/source/blender/blenkernel/BKE_lattice.h
+++ b/source/blender/blenkernel/BKE_lattice.h
@@ -58,7 +58,7 @@ void outside_lattice(struct Lattice *lt);
void curve_deform_verts(struct Object *cuOb,
struct Object *target,
- float (*vertexCos)[3],
+ float (*vert_coords)[3],
int numVerts,
struct MDeformVert *dvert,
const int defgrp_index,
@@ -73,14 +73,14 @@ void curve_deform_vector(struct Object *cuOb,
void lattice_deform_verts(struct Object *laOb,
struct Object *target,
struct Mesh *mesh,
- float (*vertexCos)[3],
+ float (*vert_coords)[3],
int numVerts,
const char *vgroup,
float influence);
void armature_deform_verts(struct Object *armOb,
struct Object *target,
const struct Mesh *mesh,
- float (*vertexCos)[3],
+ float (*vert_coords)[3],
float (*defMats)[3][3],
int numVerts,
int deformflag,
@@ -88,8 +88,12 @@ void armature_deform_verts(struct Object *armOb,
const char *defgrp_name,
struct bGPDstroke *gps);
-float (*BKE_lattice_vertexcos_get(struct Object *ob, int *r_numVerts))[3];
-void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3]);
+float (*BKE_lattice_vert_coords_alloc(const struct Lattice *lt, int *r_vert_len))[3];
+void BKE_lattice_vert_coords_get(const struct Lattice *lt, float (*vert_coords)[3]);
+void BKE_lattice_vert_coords_apply_with_mat4(struct Lattice *lt,
+ const float (*vert_coords)[3],
+ const float mat[4][4]);
+void BKE_lattice_vert_coords_apply(struct Lattice *lt, const float (*vert_coords)[3]);
void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph,
struct Scene *scene,
struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h
index daac35a1196..eb65b7641e1 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -37,17 +37,12 @@ extern "C" {
struct Base;
struct Collection;
struct Depsgraph;
-struct ID;
-struct IDProperty;
struct LayerCollection;
-struct ListBase;
struct Main;
struct Object;
-struct RenderEngine;
struct Scene;
struct View3D;
struct ViewLayer;
-struct WorkSpace;
struct ViewLayer *BKE_view_layer_default_view(const struct Scene *scene);
struct ViewLayer *BKE_view_layer_default_render(const struct Scene *scene);
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index 28769ba7de9..c8d85cd0c87 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -46,17 +46,14 @@ extern "C" {
* except in some specific cases requiring advanced (and potentially dangerous) handling.
*/
-struct BlendThumbnail;
struct GHash;
struct ID;
-struct ImBuf;
struct Library;
struct ListBase;
struct Main;
struct PointerRNA;
struct PropertyRNA;
struct bContext;
-struct wmWindowManager;
size_t BKE_libblock_get_alloc_info(short type, const char **name);
void *BKE_libblock_alloc_notest(short type) ATTR_WARN_UNUSED_RESULT;
@@ -223,7 +220,7 @@ void BKE_main_id_flag_all(struct Main *bmain, const int flag, const bool value);
void BKE_main_id_clear_newpoins(struct Main *bmain);
-void BLE_main_id_refcount_recompute(struct Main *bmain, const bool do_linked_only);
+void BKE_main_id_refcount_recompute(struct Main *bmain, const bool do_linked_only);
void BKE_main_lib_objects_recalc_all(struct Main *bmain);
diff --git a/source/blender/blenkernel/BKE_library_remap.h b/source/blender/blenkernel/BKE_library_remap.h
index d51bc5c2bce..917582e385a 100644
--- a/source/blender/blenkernel/BKE_library_remap.h
+++ b/source/blender/blenkernel/BKE_library_remap.h
@@ -25,6 +25,8 @@ extern "C" {
#include "BLI_compiler_attrs.h"
+struct wmWindowManager;
+
/* BKE_libblock_free, delete are declared in BKE_library.h for convenience. */
/* Also IDRemap->flag. */
diff --git a/source/blender/blenkernel/BKE_light.h b/source/blender/blenkernel/BKE_light.h
index 72bd5857526..e060f587afe 100644
--- a/source/blender/blenkernel/BKE_light.h
+++ b/source/blender/blenkernel/BKE_light.h
@@ -32,7 +32,6 @@ extern "C" {
struct Light;
struct Main;
-struct Scene;
void BKE_light_init(struct Light *la);
struct Light *BKE_light_add(struct Main *bmain, const char *name) ATTR_WARN_UNUSED_RESULT;
diff --git a/source/blender/blenkernel/BKE_linestyle.h b/source/blender/blenkernel/BKE_linestyle.h
index 79579b43446..b8950e5df88 100644
--- a/source/blender/blenkernel/BKE_linestyle.h
+++ b/source/blender/blenkernel/BKE_linestyle.h
@@ -38,7 +38,6 @@ extern "C" {
struct ColorBand;
struct Main;
-struct Object;
struct ViewLayer;
struct bContext;
diff --git a/source/blender/blenkernel/BKE_main.h b/source/blender/blenkernel/BKE_main.h
index 1c987d5eb8e..1b2e8bcbf42 100644
--- a/source/blender/blenkernel/BKE_main.h
+++ b/source/blender/blenkernel/BKE_main.h
@@ -40,7 +40,6 @@ extern "C" {
struct BLI_mempool;
struct BlendThumbnail;
-struct Depsgraph;
struct GHash;
struct GSet;
struct ImBuf;
diff --git a/source/blender/blenkernel/BKE_mask.h b/source/blender/blenkernel/BKE_mask.h
index bfdeadc7f60..47644ce82e9 100644
--- a/source/blender/blenkernel/BKE_mask.h
+++ b/source/blender/blenkernel/BKE_mask.h
@@ -38,7 +38,6 @@ struct MaskSplinePoint;
struct MaskSplinePointUW;
struct MovieClip;
struct MovieClipUser;
-struct Scene;
/* mask_ops.c */
typedef enum {
@@ -171,7 +170,6 @@ void BKE_mask_coord_to_image(struct Image *image,
/* parenting */
-void BKE_mask_evaluate_all_masks(struct Main *bmain, float ctime, const bool do_newframe);
void BKE_mask_evaluate(struct Mask *mask, const float ctime, const bool do_newframe);
void BKE_mask_layer_evaluate(struct MaskLayer *masklay, const float ctime, const bool do_newframe);
void BKE_mask_parent_init(struct MaskParent *parent);
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h
index b1200c7e608..44a8f98e994 100644
--- a/source/blender/blenkernel/BKE_material.h
+++ b/source/blender/blenkernel/BKE_material.h
@@ -28,12 +28,12 @@
extern "C" {
#endif
-struct bNode;
struct ID;
struct Main;
struct Material;
struct Object;
struct Scene;
+struct bNode;
/* materials */
@@ -103,9 +103,9 @@ void BKE_material_resize_id(struct Main *bmain, struct ID *id, short totcol, boo
void BKE_material_append_id(struct Main *bmain, struct ID *id, struct Material *ma);
struct Material *BKE_material_pop_id(struct Main *bmain,
struct ID *id,
- int index,
- bool update_data); /* index is an int because of RNA */
-void BKE_material_clear_id(struct Main *bmain, struct ID *id, bool update_data);
+ /* index is an int because of RNA. */
+ int index);
+void BKE_material_clear_id(struct Main *bmain, struct ID *id);
/* rendering */
void ramp_blend(int type, float r_col[3], const float fac, const float col[3]);
diff --git a/source/blender/blenkernel/BKE_mball.h b/source/blender/blenkernel/BKE_mball.h
index b582e88f9cb..5447fd00866 100644
--- a/source/blender/blenkernel/BKE_mball.h
+++ b/source/blender/blenkernel/BKE_mball.h
@@ -63,7 +63,7 @@ bool BKE_mball_minmax_ex(const struct MetaBall *mb,
bool BKE_mball_minmax(const struct MetaBall *mb, float min[3], float max[3]);
bool BKE_mball_center_median(const struct MetaBall *mb, float r_cent[3]);
bool BKE_mball_center_bounds(const struct MetaBall *mb, float r_cent[3]);
-void BKE_mball_transform(struct MetaBall *mb, float mat[4][4], const bool do_props);
+void BKE_mball_transform(struct MetaBall *mb, const float mat[4][4], const bool do_props);
void BKE_mball_translate(struct MetaBall *mb, const float offset[3]);
struct MetaElem *BKE_mball_element_add(struct MetaBall *mb, const int type);
diff --git a/source/blender/blenkernel/BKE_mball_tessellate.h b/source/blender/blenkernel/BKE_mball_tessellate.h
index ab8fbc44caf..39740458f2f 100644
--- a/source/blender/blenkernel/BKE_mball_tessellate.h
+++ b/source/blender/blenkernel/BKE_mball_tessellate.h
@@ -20,7 +20,6 @@
* \ingroup bke
*/
struct Depsgraph;
-struct Main;
struct Object;
struct Scene;
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 59812df246f..15df0cff6fc 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -53,13 +53,11 @@ struct MLoopTri;
struct MLoopUV;
struct MPoly;
struct MVert;
-struct MVertTri;
struct Main;
struct MemArena;
struct Mesh;
struct ModifierData;
struct Object;
-struct ReportList;
struct Scene;
#ifdef __cplusplus
@@ -185,7 +183,7 @@ void BKE_mesh_material_index_remove(struct Mesh *me, short index);
bool BKE_mesh_material_index_used(struct Mesh *me, short index);
void BKE_mesh_material_index_clear(struct Mesh *me);
void BKE_mesh_material_remap(struct Mesh *me, const unsigned int *remap, unsigned int remap_len);
-void BKE_mesh_smooth_flag_set(struct Object *meshOb, int enableSmooth);
+void BKE_mesh_smooth_flag_set(struct Mesh *me, const bool use_smooth);
const char *BKE_mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh);
@@ -198,18 +196,6 @@ void BKE_mesh_texspace_get_reference(
struct Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size);
void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob);
-bool BKE_mesh_uv_cdlayer_rename_index(struct Mesh *me,
- const int loop_index,
- const int face_index,
- const char *new_name,
- const bool do_tessface);
-bool BKE_mesh_uv_cdlayer_rename(struct Mesh *me,
- const char *old_name,
- const char *new_name,
- bool do_tessface);
-
-float (*BKE_mesh_vertexCos_get(const struct Mesh *me, int *r_numVerts))[3];
-
void BKE_mesh_split_faces(struct Mesh *mesh, bool free_loop_normals);
/* Create new mesh from the given object at its current state.
@@ -224,7 +210,9 @@ struct Mesh *BKE_mesh_new_from_object(struct Depsgraph *depsgraph,
struct Object *object,
bool preserve_all_data_layers);
-/* This is a version of BKE_mesh_new_from_object() which stores mesh in the given main database. */
+/* This is a version of BKE_mesh_new_from_object() which stores mesh in the given main database.
+ * However, that function enforces object type to be a geometry one, and ensures a mesh is always
+ * generated, be it empty. */
struct Mesh *BKE_mesh_new_from_object_to_bmain(struct Main *bmain,
struct Depsgraph *depsgraph,
struct Object *object,
@@ -266,8 +254,14 @@ void BKE_mesh_mselect_active_set(struct Mesh *me, int index, int type);
void BKE_mesh_count_selected_items(const struct Mesh *mesh, int r_count[3]);
-void BKE_mesh_apply_vert_coords(struct Mesh *mesh, float (*vertCoords)[3]);
-void BKE_mesh_apply_vert_normals(struct Mesh *mesh, short (*vertNormals)[3]);
+float (*BKE_mesh_vert_coords_alloc(const struct Mesh *mesh, int *r_vert_len))[3];
+void BKE_mesh_vert_coords_get(const struct Mesh *mesh, float (*vert_coords)[3]);
+
+void BKE_mesh_vert_coords_apply_with_mat4(struct Mesh *mesh,
+ const float (*vert_coords)[3],
+ const float mat[4][4]);
+void BKE_mesh_vert_coords_apply(struct Mesh *mesh, const float (*vert_coords)[3]);
+void BKE_mesh_vert_normals_apply(struct Mesh *mesh, const short (*vertNormals)[3]);
/* *** mesh_evaluate.c *** */
@@ -307,11 +301,6 @@ void BKE_mesh_calc_normals_poly(struct MVert *mverts,
void BKE_mesh_calc_normals(struct Mesh *me);
void BKE_mesh_ensure_normals(struct Mesh *me);
void BKE_mesh_ensure_normals_for_display(struct Mesh *mesh);
-void BKE_mesh_calc_normals_tessface(struct MVert *mverts,
- int numVerts,
- const struct MFace *mfaces,
- int numFaces,
- float (*r_faceNors)[3]);
void BKE_mesh_calc_normals_looptri(struct MVert *mverts,
int numVerts,
const struct MLoop *mloop,
@@ -484,6 +473,7 @@ void BKE_mesh_calc_poly_center(const struct MPoly *mpoly,
float BKE_mesh_calc_poly_area(const struct MPoly *mpoly,
const struct MLoop *loopstart,
const struct MVert *mvarray);
+float BKE_mesh_calc_poly_uv_area(const struct MPoly *mpoly, const struct MLoopUV *uv_array);
void BKE_mesh_calc_poly_angles(const struct MPoly *mpoly,
const struct MLoop *loopstart,
const struct MVert *mvarray,
@@ -535,14 +525,14 @@ void BKE_mesh_tangent_loops_to_tessdata(struct CustomData *fdata,
unsigned int (*loopindices)[4],
const int num_faces,
const char *layer_name);
-int BKE_mesh_recalc_tessellation(struct CustomData *fdata,
- struct CustomData *ldata,
- struct CustomData *pdata,
- struct MVert *mvert,
- int totface,
- int totloop,
- int totpoly,
- const bool do_face_nor_copy);
+int BKE_mesh_tessface_calc_ex(struct CustomData *fdata,
+ struct CustomData *ldata,
+ struct CustomData *pdata,
+ struct MVert *mvert,
+ int totface,
+ int totloop,
+ int totpoly,
+ const bool do_face_nor_copy);
void BKE_mesh_recalc_looptri(const struct MLoop *mloop,
const struct MPoly *mpoly,
const struct MVert *mvert,
diff --git a/source/blender/blenkernel/BKE_mesh_iterators.h b/source/blender/blenkernel/BKE_mesh_iterators.h
index 28fd4b8bc28..b5b65944079 100644
--- a/source/blender/blenkernel/BKE_mesh_iterators.h
+++ b/source/blender/blenkernel/BKE_mesh_iterators.h
@@ -20,12 +20,6 @@
* \ingroup bke
*/
-struct MEdge;
-struct MLoop;
-struct MLoopTri;
-struct MLoopUV;
-struct MPoly;
-struct MVert;
struct Mesh;
typedef enum MeshForeachFlag {
diff --git a/source/blender/blenkernel/BKE_mesh_remesh_voxel.h b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h
new file mode 100644
index 00000000000..089e4de4709
--- /dev/null
+++ b/source/blender/blenkernel/BKE_mesh_remesh_voxel.h
@@ -0,0 +1,46 @@
+/*
+ * 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) 2019 by Blender Foundation
+ * All rights reserved.
+ */
+#ifndef __BKE_REMESH_H__
+#define __BKE_REMESH_H__
+
+/** \file
+ * \ingroup bke
+ */
+
+#ifdef WITH_OPENVDB
+# include "openvdb_capi.h"
+#endif
+
+struct Mesh;
+
+/* OpenVDB Voxel Remesher */
+#ifdef WITH_OPENVDB
+struct OpenVDBLevelSet *BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(
+ struct Mesh *mesh, struct OpenVDBTransform *transform);
+struct Mesh *BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(struct OpenVDBLevelSet *level_set,
+ double isovalue,
+ double adaptivity,
+ bool relax_disoriented_triangles);
+#endif
+struct Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(struct Mesh *mesh, float voxel_size);
+
+/* Data reprojection functions */
+void BKE_remesh_reproject_paint_mask(struct Mesh *target, struct Mesh *source);
+
+#endif /* __BKE_REMESH_H__ */
diff --git a/source/blender/blenkernel/BKE_mesh_runtime.h b/source/blender/blenkernel/BKE_mesh_runtime.h
index 93d952bcae5..4dc9ac988e7 100644
--- a/source/blender/blenkernel/BKE_mesh_runtime.h
+++ b/source/blender/blenkernel/BKE_mesh_runtime.h
@@ -27,7 +27,6 @@
//#include "BKE_customdata.h" /* for CustomDataMask */
-struct ColorBand;
struct CustomData;
struct CustomData_MeshMasks;
struct Depsgraph;
diff --git a/source/blender/blenkernel/BKE_mesh_tangent.h b/source/blender/blenkernel/BKE_mesh_tangent.h
index bca825ce91c..4a86dfa3832 100644
--- a/source/blender/blenkernel/BKE_mesh_tangent.h
+++ b/source/blender/blenkernel/BKE_mesh_tangent.h
@@ -20,6 +20,8 @@
* \ingroup bke
*/
+struct ReportList;
+
void BKE_mesh_calc_loop_tangent_single_ex(const struct MVert *mverts,
const int numVerts,
const struct MLoop *mloops,
diff --git a/source/blender/blenkernel/BKE_modifier.h b/source/blender/blenkernel/BKE_modifier.h
index 4aab2a346e7..b2bc30c107c 100644
--- a/source/blender/blenkernel/BKE_modifier.h
+++ b/source/blender/blenkernel/BKE_modifier.h
@@ -35,7 +35,6 @@ struct Mesh;
struct ModifierData;
struct Object;
struct Scene;
-struct ViewLayer;
struct bArmature;
typedef enum {
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 8a107aac538..efc4e4fdc12 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -59,7 +59,6 @@ struct RenderData;
struct Scene;
struct SpaceNode;
struct Tex;
-struct ViewRender;
struct bContext;
struct bNode;
struct bNodeExecContext;
@@ -310,9 +309,8 @@ typedef struct bNodeTreeType {
/* callbacks */
void (*free_cache)(struct bNodeTree *ntree);
void (*free_node_cache)(struct bNodeTree *ntree, struct bNode *node);
- void (*foreach_nodeclass)(struct Scene *scene,
- void *calldata,
- bNodeClassCallback func); /* iteration over all node classes */
+ /* Iteration over all node classes. */
+ void (*foreach_nodeclass)(struct Scene *scene, void *calldata, bNodeClassCallback func);
/* Check visibility in the node editor */
bool (*poll)(const struct bContext *C, struct bNodeTreeType *ntreetype);
/* Select a node tree from the context */
@@ -616,6 +614,7 @@ void nodeUpdateInternalLinks(struct bNodeTree *ntree, struct bNode *node);
int nodeSocketIsHidden(struct bNodeSocket *sock);
void ntreeTagUsedSockets(struct bNodeTree *ntree);
+void nodeSetSocketAvailability(struct bNodeSocket *sock, bool is_available);
/* Node Clipboard */
void BKE_node_clipboard_init(struct bNodeTree *ntree);
@@ -895,7 +894,7 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree,
#define SH_NODE_CURVE_RGB 111
#define SH_NODE_CAMERA 114
#define SH_NODE_MATH 115
-#define SH_NODE_VECT_MATH 116
+#define SH_NODE_VECTOR_MATH 116
#define SH_NODE_SQUEEZE 117
//#define SH_NODE_MATERIAL_EXT 118
#define SH_NODE_INVERT 119
@@ -976,6 +975,10 @@ void BKE_nodetree_remove_layer_n(struct bNodeTree *ntree,
#define SH_NODE_VOLUME_PRINCIPLED 200
/* 201..700 occupied by other node types, continue from 701 */
#define SH_NODE_BSDF_HAIR_PRINCIPLED 701
+#define SH_NODE_MAP_RANGE 702
+#define SH_NODE_CLAMP 703
+#define SH_NODE_TEX_WHITE_NOISE 704
+#define SH_NODE_VOLUME_INFO 705
/* custom defines options for Material node */
#define SH_NODE_MAT_DIFF 1
@@ -1128,6 +1131,7 @@ void ntreeGPUMaterialNodes(struct bNodeTree *localtree,
#define CMP_NODE_CORNERPIN 321
#define CMP_NODE_SWITCH_VIEW 322
#define CMP_NODE_CRYPTOMATTE 323
+#define CMP_NODE_DENOISE 324
/* channel toggles */
#define CMP_CHAN_RGB 1
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index f59bf3579be..cf4bce3a209 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -43,7 +43,6 @@ struct RegionView3D;
struct RigidBodyWorld;
struct Scene;
struct ShaderFxData;
-struct SoftBody;
struct View3D;
struct ViewLayer;
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index cf9608e7c0f..8db27bd4118 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -32,7 +32,6 @@ struct Depsgraph;
struct EnumPropertyItem;
struct GridPaintMask;
struct ImagePool;
-struct MFace;
struct MLoop;
struct MLoopTri;
struct MVert;
@@ -47,7 +46,6 @@ struct Palette;
struct PaletteColor;
struct ReportList;
struct Scene;
-struct Sculpt;
struct StrokeCache;
struct SubdivCCG;
struct SubdivCCG;
@@ -242,7 +240,6 @@ typedef struct SculptSession {
/* PBVH acceleration structure */
struct PBVH *pbvh;
- bool show_diffuse_color;
bool show_mask;
/* Painting on deformed mesh */
@@ -260,6 +257,8 @@ typedef struct SculptSession {
struct StrokeCache *cache;
+ int active_vertex_index;
+
union {
struct {
struct SculptVertexPaintGeomMap gmap;
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 164dbbbf482..e9b4c2b5a66 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -57,7 +57,6 @@ struct ModifierData;
struct Object;
struct RNG;
struct Scene;
-struct ViewLayer;
#define PARTICLE_COLLISION_MAX_COLLISIONS 10
diff --git a/source/blender/blenkernel/BKE_pbvh.h b/source/blender/blenkernel/BKE_pbvh.h
index 79b462e749c..93a826f3324 100644
--- a/source/blender/blenkernel/BKE_pbvh.h
+++ b/source/blender/blenkernel/BKE_pbvh.h
@@ -28,12 +28,10 @@
struct BMLog;
struct BMesh;
-struct CCGDerivedMesh;
struct CCGElem;
struct CCGKey;
struct CustomData;
struct DMFlagMat;
-struct GPUBatch;
struct GPU_PBVH_Buffers;
struct IsectRayPrecalc;
struct MLoop;
@@ -278,9 +276,9 @@ float *BKE_pbvh_node_layer_disp_get(PBVH *pbvh, PBVHNode *node);
void BKE_pbvh_node_layer_disp_free(PBVHNode *node);
/* vertex deformer */
-float (*BKE_pbvh_get_vertCos(struct PBVH *pbvh))[3];
-void BKE_pbvh_apply_vertCos(struct PBVH *pbvh, float (*vertCos)[3], const int totvert);
-bool BKE_pbvh_isDeformed(struct PBVH *pbvh);
+float (*BKE_pbvh_vert_coords_alloc(struct PBVH *pbvh))[3];
+void BKE_pbvh_vert_coords_apply(struct PBVH *pbvh, const float (*vertCos)[3], const int totvert);
+bool BKE_pbvh_is_deformed(struct PBVH *pbvh);
/* Vertex Iterator */
@@ -301,6 +299,7 @@ typedef struct PBVHVertexIter {
int gx;
int gy;
int i;
+ int index;
/* grid */
struct CCGElem **grids;
@@ -369,6 +368,7 @@ void pbvh_vertex_iter_init(PBVH *bvh, PBVHNode *node, PBVHVertexIter *vi, int mo
continue; \
vi.co = vi.mvert->co; \
vi.no = vi.mvert->no; \
+ vi.index = vi.vert_indices[vi.i]; \
if (vi.vmask) \
vi.mask = &vi.vmask[vi.vert_indices[vi.gx]]; \
} \
@@ -385,6 +385,7 @@ void pbvh_vertex_iter_init(PBVH *bvh, PBVHNode *node, PBVHVertexIter *vi, int mo
continue; \
vi.co = vi.bm_vert->co; \
vi.fno = vi.bm_vert->no; \
+ vi.index = BM_elem_index_get(vi.bm_vert); \
vi.mask = BM_ELEM_CD_GET_VOID_P(vi.bm_vert, vi.cd_vert_mask_offset); \
}
@@ -409,7 +410,6 @@ bool BKE_pbvh_node_vert_update_check_any(PBVH *bvh, PBVHNode *node);
// void BKE_pbvh_node_BB_expand(PBVHNode *node, float co[3]);
bool pbvh_has_mask(PBVH *bvh);
-void pbvh_show_diffuse_color_set(PBVH *bvh, bool show_diffuse_color);
void pbvh_show_mask_set(PBVH *bvh, bool show_mask);
#endif /* __BKE_PBVH_H__ */
diff --git a/source/blender/blenkernel/BKE_scene.h b/source/blender/blenkernel/BKE_scene.h
index eafb91c85e1..d25288fc240 100644
--- a/source/blender/blenkernel/BKE_scene.h
+++ b/source/blender/blenkernel/BKE_scene.h
@@ -38,8 +38,6 @@ struct TransformOrientation;
struct UnitSettings;
struct View3DCursor;
struct ViewLayer;
-struct ViewRender;
-struct WorkSpace;
typedef enum eSceneCopyMethod {
SCE_COPY_NEW = 0,
@@ -135,7 +133,7 @@ int BKE_scene_frame_snap_by_seconds(struct Scene *scene, double interval_in_seco
bool BKE_scene_validate_setscene(struct Main *bmain, struct Scene *sce);
float BKE_scene_frame_get(const struct Scene *scene);
-float BKE_scene_frame_get_from_ctime(const struct Scene *scene, const float frame);
+float BKE_scene_frame_to_ctime(const struct Scene *scene, const float frame);
void BKE_scene_frame_set(struct Scene *scene, double cfra);
struct TransformOrientationSlot *BKE_scene_orientation_slot_get_from_flag(struct Scene *scene,
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 5d3e7ad5ec2..a2ce522a895 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -24,7 +24,6 @@
*/
struct ARegion;
-struct GPUFXSettings;
struct Header;
struct ID;
struct ListBase;
@@ -35,7 +34,6 @@ struct ScrArea;
struct ScrAreaMap;
struct ScrVert;
struct SpaceType;
-struct TransformOrientation;
struct View3D;
struct View3DShading;
struct WorkSpace;
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index a9e1dfb2392..e1bc16702d5 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -26,13 +26,11 @@
struct Depsgraph;
struct Editing;
-struct GPUFX;
struct GPUOffScreen;
struct GSet;
struct ImBuf;
struct Main;
struct Mask;
-struct RenderEngineType;
struct Scene;
struct Sequence;
struct SequenceModifierData;
diff --git a/source/blender/blenkernel/BKE_shader_fx.h b/source/blender/blenkernel/BKE_shader_fx.h
index e90dbfcf68d..9fe42a214e9 100644
--- a/source/blender/blenkernel/BKE_shader_fx.h
+++ b/source/blender/blenkernel/BKE_shader_fx.h
@@ -24,22 +24,11 @@
#include "BLI_compiler_attrs.h"
#include "BKE_customdata.h"
-struct DepsNodeHandle;
-struct Depsgraph;
-struct DerivedMesh;
struct ID;
struct ListBase;
-struct Main;
-struct Mesh;
struct ModifierUpdateDepsgraphContext;
struct Object;
-struct Scene;
struct ShaderFxData;
-struct ViewLayer;
-struct bArmature;
-struct bGPDframe;
-struct bGPDlayer;
-struct bGPDstroke;
#define SHADER_FX_ACTIVE(_fx, _is_render) \
(((_fx->mode & eShaderFxMode_Realtime) && (_is_render == false)) || \
diff --git a/source/blender/blenkernel/BKE_shrinkwrap.h b/source/blender/blenkernel/BKE_shrinkwrap.h
index 8993654254e..9ec75c39fcf 100644
--- a/source/blender/blenkernel/BKE_shrinkwrap.h
+++ b/source/blender/blenkernel/BKE_shrinkwrap.h
@@ -41,7 +41,6 @@
struct BVHTree;
struct MDeformVert;
-struct MVert;
struct Mesh;
struct ModifierEvalContext;
struct Object;
diff --git a/source/blender/blenkernel/BKE_subdiv.h b/source/blender/blenkernel/BKE_subdiv.h
index dd139233ee3..700bf5139e0 100644
--- a/source/blender/blenkernel/BKE_subdiv.h
+++ b/source/blender/blenkernel/BKE_subdiv.h
@@ -29,12 +29,10 @@
struct Mesh;
struct MultiresModifierData;
-struct Object;
struct OpenSubdiv_Converter;
struct OpenSubdiv_Evaluator;
struct OpenSubdiv_TopologyRefiner;
struct Subdiv;
-struct SubdivToMeshSettings;
typedef enum eSubdivVtxBoundaryInterpolation {
/* Do not interpolate boundaries. */
diff --git a/source/blender/blenkernel/BKE_text.h b/source/blender/blenkernel/BKE_text.h
index f018e912945..65aa43ced7c 100644
--- a/source/blender/blenkernel/BKE_text.h
+++ b/source/blender/blenkernel/BKE_text.h
@@ -59,10 +59,6 @@ void txt_order_cursors(struct Text *text, const bool reverse);
int txt_find_string(struct Text *text, const char *findstr, int wrap, int match_case);
bool txt_has_sel(struct Text *text);
int txt_get_span(struct TextLine *from, struct TextLine *to);
-int txt_utf8_offset_to_index(const char *str, int offset);
-int txt_utf8_index_to_offset(const char *str, int index);
-int txt_utf8_offset_to_column(const char *str, int offset);
-int txt_utf8_column_to_offset(const char *str, int column);
void txt_move_up(struct Text *text, const bool sel);
void txt_move_down(struct Text *text, const bool sel);
void txt_move_left(struct Text *text, const bool sel);
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index c17db591981..39216e98e82 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -31,17 +31,13 @@ struct Brush;
struct ColorBand;
struct FreestyleLineStyle;
struct ImagePool;
-struct Light;
struct MTex;
struct Main;
-struct Material;
struct ParticleSettings;
struct PointDensity;
struct Tex;
struct TexMapping;
struct TexResult;
-struct World;
-struct bNode;
/* in ColorBand struct */
#define MAXCOLORBAND 32
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index bf417403d43..c64d684de5a 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -25,7 +25,6 @@
*/
struct Camera;
-struct Depsgraph;
struct ImBuf;
struct ListBase;
struct MovieClipUser;
diff --git a/source/blender/blenkernel/BKE_workspace.h b/source/blender/blenkernel/BKE_workspace.h
index 133cf2d6cf5..ea8978b7374 100644
--- a/source/blender/blenkernel/BKE_workspace.h
+++ b/source/blender/blenkernel/BKE_workspace.h
@@ -24,9 +24,6 @@
#include "BLI_compiler_attrs.h"
struct Main;
-struct Scene;
-struct TransformOrientation;
-struct ViewLayer;
struct bScreen;
struct bToolRef;
diff --git a/source/blender/blenkernel/BKE_writeavi.h b/source/blender/blenkernel/BKE_writeavi.h
index 3212bad75cb..7fc740a4a9b 100644
--- a/source/blender/blenkernel/BKE_writeavi.h
+++ b/source/blender/blenkernel/BKE_writeavi.h
@@ -53,10 +53,10 @@ typedef struct bMovieHandle {
const char *suffix,
struct ReportList *reports);
void (*end_movie)(void *context_v);
- void (*get_movie_path)(char *string,
- struct RenderData *rd,
- bool preview,
- const char *suffix); /* optional */
+
+ /* Optional function. */
+ void (*get_movie_path)(char *string, struct RenderData *rd, bool preview, const char *suffix);
+
void *(*context_create)(void);
void (*context_free)(void *context_v);
} bMovieHandle;
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index d9bd87d97b5..669abff6599 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -151,6 +151,7 @@ set(SRC
intern/mesh_mapping.c
intern/mesh_merge.c
intern/mesh_remap.c
+ intern/mesh_remesh_voxel.c
intern/mesh_runtime.c
intern/mesh_tangent.c
intern/mesh_validate.c
@@ -300,6 +301,7 @@ set(SRC
BKE_mesh_iterators.h
BKE_mesh_mapping.h
BKE_mesh_remap.h
+ BKE_mesh_remesh_voxel.h
BKE_mesh_runtime.h
BKE_mesh_tangent.h
BKE_modifier.h
diff --git a/source/blender/blenkernel/intern/CCGSubSurf.c b/source/blender/blenkernel/intern/CCGSubSurf.c
index 49855de0591..d91296e0c01 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf.c
@@ -960,13 +960,13 @@ void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces, int *
}
}
-void ccgSubSurf__effectedFaceNeighbours(CCGSubSurf *ss,
- CCGFace **faces,
- int numFaces,
- CCGVert ***verts,
- int *numVerts,
- CCGEdge ***edges,
- int *numEdges)
+void ccgSubSurf__effectedFaceNeighbors(CCGSubSurf *ss,
+ CCGFace **faces,
+ int numFaces,
+ CCGVert ***verts,
+ int *numVerts,
+ CCGEdge ***edges,
+ int *numEdges)
{
CCGVert **arrayV;
CCGEdge **arrayE;
@@ -1134,7 +1134,7 @@ CCGError ccgSubSurf_stitchFaces(CCGSubSurf *ss, int lvl, CCGFace **effectedF, in
cornerIdx = gridSize - 1;
ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF);
- ccgSubSurf__effectedFaceNeighbours(
+ ccgSubSurf__effectedFaceNeighbors(
ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
/* zero */
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_intern.h b/source/blender/blenkernel/intern/CCGSubSurf_intern.h
index 41a34b65381..51486db1bdc 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_intern.h
+++ b/source/blender/blenkernel/intern/CCGSubSurf_intern.h
@@ -306,13 +306,13 @@ struct CCGSubSurf {
/* * CCGSubSurf.c * */
void ccgSubSurf__allFaces(CCGSubSurf *ss, CCGFace ***faces, int *numFaces, int *freeFaces);
-void ccgSubSurf__effectedFaceNeighbours(CCGSubSurf *ss,
- CCGFace **faces,
- int numFaces,
- CCGVert ***verts,
- int *numVerts,
- CCGEdge ***edges,
- int *numEdges);
+void ccgSubSurf__effectedFaceNeighbors(CCGSubSurf *ss,
+ CCGFace **faces,
+ int numFaces,
+ CCGVert ***verts,
+ int *numVerts,
+ CCGEdge ***edges,
+ int *numEdges);
/* * CCGSubSurf_legacy.c * */
diff --git a/source/blender/blenkernel/intern/CCGSubSurf_legacy.c b/source/blender/blenkernel/intern/CCGSubSurf_legacy.c
index d8b30c9d4ef..01735b34e5e 100644
--- a/source/blender/blenkernel/intern/CCGSubSurf_legacy.c
+++ b/source/blender/blenkernel/intern/CCGSubSurf_legacy.c
@@ -1323,7 +1323,7 @@ CCGError ccgSubSurf_updateNormals(CCGSubSurf *ss, CCGFace **effectedF, int numEf
int i, numEffectedV, numEffectedE, freeF;
ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF);
- ccgSubSurf__effectedFaceNeighbours(
+ ccgSubSurf__effectedFaceNeighbors(
ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
if (ss->calcVertNormals) {
@@ -1361,7 +1361,7 @@ CCGError ccgSubSurf_updateLevels(CCGSubSurf *ss, int lvl, CCGFace **effectedF, i
int curLvl, subdivLevels = ss->subdivLevels;
ccgSubSurf__allFaces(ss, &effectedF, &numEffectedF, &freeF);
- ccgSubSurf__effectedFaceNeighbours(
+ ccgSubSurf__effectedFaceNeighbors(
ss, effectedF, numEffectedF, &effectedV, &numEffectedV, &effectedE, &numEffectedE);
for (curLvl = lvl; curLvl < subdivLevels; curLvl++) {
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 7f1a0e6a744..010e162f49d 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -87,11 +87,8 @@
# define ASSERT_IS_VALID_MESH(mesh)
#endif
-static CLG_LogRef LOG = {"bke.derivedmesh"};
static ThreadRWMutex loops_cache_lock = PTHREAD_RWLOCK_INITIALIZER;
-static void shapekey_layers_to_keyblocks(DerivedMesh *dm, Mesh *me, int actshape_uid);
-
static void mesh_init_origspace(Mesh *mesh);
/* -------------------------------------------------------------------- */
@@ -516,154 +513,6 @@ void DM_ensure_looptri_data(DerivedMesh *dm)
}
}
-void DM_to_mesh(
- DerivedMesh *dm, Mesh *me, Object *ob, const CustomData_MeshMasks *mask, bool take_ownership)
-{
- /* dm might depend on me, so we need to do everything with a local copy */
- Mesh tmp = *me;
- int totvert, totedge /*, totface */ /* UNUSED */, totloop, totpoly;
- int did_shapekeys = 0;
- eCDAllocType alloctype = CD_DUPLICATE;
-
- if (take_ownership && dm->type == DM_TYPE_CDDM && dm->needsFree) {
- bool has_any_referenced_layers = CustomData_has_referenced(&dm->vertData) ||
- CustomData_has_referenced(&dm->edgeData) ||
- CustomData_has_referenced(&dm->loopData) ||
- CustomData_has_referenced(&dm->faceData) ||
- CustomData_has_referenced(&dm->polyData);
- if (!has_any_referenced_layers) {
- alloctype = CD_ASSIGN;
- }
- }
-
- CustomData_reset(&tmp.vdata);
- CustomData_reset(&tmp.edata);
- CustomData_reset(&tmp.fdata);
- CustomData_reset(&tmp.ldata);
- CustomData_reset(&tmp.pdata);
-
- DM_ensure_normals(dm);
-
- totvert = tmp.totvert = dm->getNumVerts(dm);
- totedge = tmp.totedge = dm->getNumEdges(dm);
- totloop = tmp.totloop = dm->getNumLoops(dm);
- totpoly = tmp.totpoly = dm->getNumPolys(dm);
- tmp.totface = 0;
-
- CustomData_copy(&dm->vertData, &tmp.vdata, mask->vmask, alloctype, totvert);
- CustomData_copy(&dm->edgeData, &tmp.edata, mask->emask, alloctype, totedge);
- CustomData_copy(&dm->loopData, &tmp.ldata, mask->lmask, alloctype, totloop);
- CustomData_copy(&dm->polyData, &tmp.pdata, mask->pmask, alloctype, totpoly);
- tmp.cd_flag = dm->cd_flag;
- tmp.runtime.deformed_only = dm->deformedOnly;
-
- if (CustomData_has_layer(&dm->vertData, CD_SHAPEKEY)) {
- KeyBlock *kb;
- int uid;
-
- if (ob) {
- kb = BLI_findlink(&me->key->block, ob->shapenr - 1);
- if (kb) {
- uid = kb->uid;
- }
- else {
- CLOG_ERROR(&LOG, "could not find active shapekey %d!", ob->shapenr - 1);
- uid = INT_MAX;
- }
- }
- else {
- /* if no object, set to INT_MAX so we don't mess up any shapekey layers */
- uid = INT_MAX;
- }
-
- shapekey_layers_to_keyblocks(dm, me, uid);
- did_shapekeys = 1;
- }
-
- /* copy texture space */
- if (ob) {
- BKE_mesh_texspace_copy_from_object(&tmp, ob);
- }
-
- /* not all DerivedMeshes store their verts/edges/faces in CustomData, so
- * we set them here in case they are missing */
- if (!CustomData_has_layer(&tmp.vdata, CD_MVERT)) {
- CustomData_add_layer(&tmp.vdata,
- CD_MVERT,
- CD_ASSIGN,
- (alloctype == CD_ASSIGN) ? dm->getVertArray(dm) : dm->dupVertArray(dm),
- totvert);
- }
- if (!CustomData_has_layer(&tmp.edata, CD_MEDGE)) {
- CustomData_add_layer(&tmp.edata,
- CD_MEDGE,
- CD_ASSIGN,
- (alloctype == CD_ASSIGN) ? dm->getEdgeArray(dm) : dm->dupEdgeArray(dm),
- totedge);
- }
- if (!CustomData_has_layer(&tmp.pdata, CD_MPOLY)) {
- tmp.mloop = (alloctype == CD_ASSIGN) ? dm->getLoopArray(dm) : dm->dupLoopArray(dm);
- tmp.mpoly = (alloctype == CD_ASSIGN) ? dm->getPolyArray(dm) : dm->dupPolyArray(dm);
-
- CustomData_add_layer(&tmp.ldata, CD_MLOOP, CD_ASSIGN, tmp.mloop, tmp.totloop);
- CustomData_add_layer(&tmp.pdata, CD_MPOLY, CD_ASSIGN, tmp.mpoly, tmp.totpoly);
- }
-
- /* object had got displacement layer, should copy this layer to save sculpted data */
- /* NOTE: maybe some other layers should be copied? nazgul */
- if (CustomData_has_layer(&me->ldata, CD_MDISPS)) {
- if (totloop == me->totloop) {
- MDisps *mdisps = CustomData_get_layer(&me->ldata, CD_MDISPS);
- CustomData_add_layer(&tmp.ldata, CD_MDISPS, alloctype, mdisps, totloop);
- }
- }
-
- /* yes, must be before _and_ after tessellate */
- BKE_mesh_update_customdata_pointers(&tmp, false);
-
- /* since 2.65 caller must do! */
- // BKE_mesh_tessface_calc(&tmp);
-
- CustomData_free(&me->vdata, me->totvert);
- CustomData_free(&me->edata, me->totedge);
- CustomData_free(&me->fdata, me->totface);
- CustomData_free(&me->ldata, me->totloop);
- CustomData_free(&me->pdata, me->totpoly);
-
- /* ok, this should now use new CD shapekey data,
- * which should be fed through the modifier
- * stack */
- if (tmp.totvert != me->totvert && !did_shapekeys && me->key) {
- CLOG_WARN(&LOG, "YEEK! this should be recoded! Shape key loss!: ID '%s'", tmp.id.name);
- if (tmp.key && !(tmp.id.tag & LIB_TAG_NO_MAIN)) {
- id_us_min(&tmp.key->id);
- }
- tmp.key = NULL;
- }
-
- /* Clear selection history */
- MEM_SAFE_FREE(tmp.mselect);
- tmp.totselect = 0;
- BLI_assert(ELEM(tmp.bb, NULL, me->bb));
- if (me->bb) {
- MEM_freeN(me->bb);
- tmp.bb = NULL;
- }
-
- /* skip the listbase */
- MEMCPY_STRUCT_AFTER(me, &tmp, id.prev);
-
- if (take_ownership) {
- if (alloctype == CD_ASSIGN) {
- CustomData_free_typemask(&dm->vertData, dm->numVertData, ~mask->vmask);
- CustomData_free_typemask(&dm->edgeData, dm->numEdgeData, ~mask->emask);
- CustomData_free_typemask(&dm->loopData, dm->numLoopData, ~mask->lmask);
- CustomData_free_typemask(&dm->polyData, dm->numPolyData, ~mask->pmask);
- }
- dm->release(dm);
- }
-}
-
/** Utility function to convert an (evaluated) Mesh to a shape key block. */
/* Just a shallow wrapper around BKE_keyblock_convert_from_mesh,
* that ensures both evaluated mesh and original one has same number of vertices. */
@@ -819,21 +668,6 @@ void DM_interp_vert_data(DerivedMesh *source,
&source->vertData, &dest->vertData, src_indices, weights, NULL, count, dest_index);
}
-DerivedMesh *mesh_create_derived(Mesh *me, float (*vertCos)[3])
-{
- DerivedMesh *dm = CDDM_from_mesh(me);
-
- if (!dm) {
- return NULL;
- }
-
- if (vertCos) {
- CDDM_apply_vert_coords(dm, vertCos);
- }
-
- return dm;
-}
-
static float (*get_editbmesh_orco_verts(BMEditMesh *em))[3]
{
BMIter iter;
@@ -904,7 +738,7 @@ static Mesh *create_orco_mesh(Object *ob, Mesh *me, BMEditMesh *em, int layer)
orco = get_orco_coords(ob, em, layer, &free);
if (orco) {
- BKE_mesh_apply_vert_coords(mesh, orco);
+ BKE_mesh_vert_coords_apply(mesh, orco);
if (free) {
MEM_freeN(orco);
}
@@ -924,10 +758,10 @@ static void add_orco_mesh(Object *ob, BMEditMesh *em, Mesh *mesh, Mesh *mesh_orc
free = 1;
if (mesh_orco->totvert == totvert) {
- orco = BKE_mesh_vertexCos_get(mesh_orco, NULL);
+ orco = BKE_mesh_vert_coords_alloc(mesh_orco, NULL);
}
else {
- orco = BKE_mesh_vertexCos_get(mesh, NULL);
+ orco = BKE_mesh_vert_coords_alloc(mesh, NULL);
}
}
else {
@@ -963,67 +797,6 @@ static void editmesh_update_statvis_color(const Scene *scene, Object *ob)
BKE_editmesh_statvis_calc(em, me->runtime.edit_data, &scene->toolsettings->statvis);
}
-static void shapekey_layers_to_keyblocks(DerivedMesh *dm, Mesh *me, int actshape_uid)
-{
- KeyBlock *kb;
- int i, j, tot;
-
- if (!me->key) {
- return;
- }
-
- tot = CustomData_number_of_layers(&dm->vertData, CD_SHAPEKEY);
- for (i = 0; i < tot; i++) {
- CustomDataLayer *layer =
- &dm->vertData.layers[CustomData_get_layer_index_n(&dm->vertData, CD_SHAPEKEY, i)];
- float(*cos)[3], (*kbcos)[3];
-
- for (kb = me->key->block.first; kb; kb = kb->next) {
- if (kb->uid == layer->uid) {
- break;
- }
- }
-
- if (!kb) {
- kb = BKE_keyblock_add(me->key, layer->name);
- kb->uid = layer->uid;
- }
-
- if (kb->data) {
- MEM_freeN(kb->data);
- }
-
- cos = CustomData_get_layer_n(&dm->vertData, CD_SHAPEKEY, i);
- kb->totelem = dm->numVertData;
-
- kb->data = kbcos = MEM_malloc_arrayN(kb->totelem, 3 * sizeof(float), "kbcos DerivedMesh.c");
- if (kb->uid == actshape_uid) {
- MVert *mvert = dm->getVertArray(dm);
-
- for (j = 0; j < dm->numVertData; j++, kbcos++, mvert++) {
- copy_v3_v3(*kbcos, mvert->co);
- }
- }
- else {
- for (j = 0; j < kb->totelem; j++, cos++, kbcos++) {
- copy_v3_v3(*kbcos, *cos);
- }
- }
- }
-
- for (kb = me->key->block.first; kb; kb = kb->next) {
- if (kb->totelem != dm->numVertData) {
- if (kb->data) {
- MEM_freeN(kb->data);
- }
-
- kb->totelem = dm->numVertData;
- kb->data = MEM_calloc_arrayN(kb->totelem, 3 * sizeof(float), "kb->data derivedmesh.c");
- CLOG_ERROR(&LOG, "lost a shapekey layer: '%s'! (bmesh internal error)", kb->name);
- }
- }
-}
-
static void mesh_copy_autosmooth(Mesh *me, Mesh *me_orig)
{
if (me_orig->flag & ME_AUTOSMOOTH) {
@@ -1046,24 +819,25 @@ static void mesh_calc_modifier_final_normals(const Mesh *mesh_input,
* since they are needed by drawing code. */
const bool do_poly_normals = ((final_datamask->pmask & CD_MASK_NORMAL) != 0);
- if (do_loop_normals) {
- /* In case we also need poly normals, add the layer and compute them here
- * (BKE_mesh_calc_normals_split() assumes that if that data exists, it is always valid). */
- if (do_poly_normals) {
- if (!CustomData_has_layer(&mesh_final->pdata, CD_NORMAL)) {
- float(*polynors)[3] = CustomData_add_layer(
- &mesh_final->pdata, CD_NORMAL, CD_CALLOC, NULL, mesh_final->totpoly);
- BKE_mesh_calc_normals_poly(mesh_final->mvert,
- NULL,
- mesh_final->totvert,
- mesh_final->mloop,
- mesh_final->mpoly,
- mesh_final->totloop,
- mesh_final->totpoly,
- polynors,
- false);
- }
+ /* In case we also need poly normals, add the layer and compute them here
+ * (BKE_mesh_calc_normals_split() assumes that if that data exists, it is always valid). */
+ if (do_poly_normals) {
+ if (!CustomData_has_layer(&mesh_final->pdata, CD_NORMAL)) {
+ float(*polynors)[3] = CustomData_add_layer(
+ &mesh_final->pdata, CD_NORMAL, CD_CALLOC, NULL, mesh_final->totpoly);
+ BKE_mesh_calc_normals_poly(mesh_final->mvert,
+ NULL,
+ mesh_final->totvert,
+ mesh_final->mloop,
+ mesh_final->mpoly,
+ mesh_final->totloop,
+ mesh_final->totpoly,
+ polynors,
+ false);
}
+ }
+
+ if (do_loop_normals) {
/* Compute loop normals (note: will compute poly and vert normals as well, if needed!) */
BKE_mesh_calc_normals_split(mesh_final);
BKE_mesh_tessface_clear(mesh_final);
@@ -1222,14 +996,14 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
if (mti->type == eModifierTypeType_OnlyDeform && !sculpt_dyntopo) {
if (!deformed_verts) {
- deformed_verts = BKE_mesh_vertexCos_get(mesh_input, &num_deformed_verts);
+ deformed_verts = BKE_mesh_vert_coords_alloc(mesh_input, &num_deformed_verts);
}
else if (isPrevDeform && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
if (mesh_final == NULL) {
mesh_final = BKE_mesh_copy_for_eval(mesh_input, true);
ASSERT_IS_VALID_MESH(mesh_final);
}
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
modwrap_deformVerts(md, &mectx, mesh_final, deformed_verts, num_deformed_verts);
@@ -1253,7 +1027,7 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
mesh_deform = BKE_mesh_copy_for_eval(mesh_input, true);
if (deformed_verts) {
- BKE_mesh_apply_vert_coords(mesh_deform, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_deform, deformed_verts);
}
}
}
@@ -1336,10 +1110,10 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
/* Deforming a mesh, read the vertex locations
* out of the mesh and deform them. Once done with this
* run of deformers verts will be written back. */
- deformed_verts = BKE_mesh_vertexCos_get(mesh_final, &num_deformed_verts);
+ deformed_verts = BKE_mesh_vert_coords_alloc(mesh_final, &num_deformed_verts);
}
else {
- deformed_verts = BKE_mesh_vertexCos_get(mesh_input, &num_deformed_verts);
+ deformed_verts = BKE_mesh_vert_coords_alloc(mesh_input, &num_deformed_verts);
}
}
/* if this is not the last modifier in the stack then recalculate the normals
@@ -1347,7 +1121,7 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
else if (isPrevDeform && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
/* XXX, this covers bug #23673, but we may need normal calc for other types */
if (mesh_final) {
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
}
@@ -1366,7 +1140,7 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
/* apply vertex coordinates or build a Mesh as necessary */
if (mesh_final) {
if (deformed_verts) {
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
}
else {
@@ -1374,7 +1148,7 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
ASSERT_IS_VALID_MESH(mesh_final);
if (deformed_verts) {
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
/* Initialize original indices the first time we evaluate a
@@ -1536,11 +1310,16 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
modifier_freeTemporaryData(md);
}
- /* Yay, we are done. If we have a Mesh and deformed vertices
- * need to apply these back onto the Mesh. If we have no
+ /* Yay, we are done. If we have a Mesh and deformed vertices,
+ * we need to apply these back onto the Mesh. If we have no
* Mesh then we need to build one. */
if (mesh_final == NULL) {
- if (deformed_verts == NULL && allow_shared_mesh) {
+ /* Note: this check on cdmask is a bit dodgy, it handles the issue at stake here (see T68211),
+ * but other cases might require similar handling?
+ * Could be a good idea to define a proper CustomData_MeshMask for that then. */
+ if (deformed_verts == NULL && allow_shared_mesh &&
+ (final_datamask.lmask & CD_MASK_NORMAL) == 0 &&
+ (final_datamask.pmask & CD_MASK_NORMAL) == 0) {
mesh_final = mesh_input;
}
else {
@@ -1548,7 +1327,7 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
}
}
if (deformed_verts) {
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
MEM_freeN(deformed_verts);
deformed_verts = NULL;
}
@@ -1608,14 +1387,14 @@ static void mesh_calc_modifiers(struct Depsgraph *depsgraph,
}
}
-float (*editbmesh_get_vertex_cos(BMEditMesh *em, int *r_numVerts))[3]
+float (*editbmesh_vert_coords_alloc(BMEditMesh *em, int *r_vert_len))[3]
{
BMIter iter;
BMVert *eve;
float(*cos)[3];
int i;
- *r_numVerts = em->bm->totvert;
+ *r_vert_len = em->bm->totvert;
cos = MEM_malloc_arrayN(em->bm->totvert, 3 * sizeof(float), "vertexcos");
@@ -1653,14 +1432,25 @@ static void editbmesh_calc_modifier_final_normals(const Mesh *mesh_input,
* simpler to generate it here as well. */
const bool do_poly_normals = ((final_datamask->pmask & CD_MASK_NORMAL) != 0);
- if (do_loop_normals) {
- /* In case we also need poly normals, add the layer here,
- * then BKE_mesh_calc_normals_split() will fill it. */
- if (do_poly_normals) {
- if (!CustomData_has_layer(&mesh_final->pdata, CD_NORMAL)) {
- CustomData_add_layer(&mesh_final->pdata, CD_NORMAL, CD_CALLOC, NULL, mesh_final->totpoly);
- }
+ /* In case we also need poly normals, add the layer and compute them here
+ * (BKE_mesh_calc_normals_split() assumes that if that data exists, it is always valid). */
+ if (do_poly_normals) {
+ if (!CustomData_has_layer(&mesh_final->pdata, CD_NORMAL)) {
+ float(*polynors)[3] = CustomData_add_layer(
+ &mesh_final->pdata, CD_NORMAL, CD_CALLOC, NULL, mesh_final->totpoly);
+ BKE_mesh_calc_normals_poly(mesh_final->mvert,
+ NULL,
+ mesh_final->totvert,
+ mesh_final->mloop,
+ mesh_final->mpoly,
+ mesh_final->totloop,
+ mesh_final->totpoly,
+ polynors,
+ false);
}
+ }
+
+ if (do_loop_normals) {
/* Compute loop normals */
BKE_mesh_calc_normals_split(mesh_final);
BKE_mesh_tessface_clear(mesh_final);
@@ -1776,10 +1566,10 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
/* Deforming a derived mesh, read the vertex locations
* out of the mesh and deform them. Once done with this
* run of deformers verts will be written back. */
- deformed_verts = BKE_mesh_vertexCos_get(mesh_final, &num_deformed_verts);
+ deformed_verts = BKE_mesh_vert_coords_alloc(mesh_final, &num_deformed_verts);
}
else {
- deformed_verts = editbmesh_get_vertex_cos(em_input, &num_deformed_verts);
+ deformed_verts = editbmesh_vert_coords_alloc(em_input, &num_deformed_verts);
}
}
else if (isPrevDeform && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
@@ -1789,7 +1579,7 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
mesh_copy_autosmooth(mesh_final, mesh_input);
}
BLI_assert(deformed_verts != NULL);
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
if (mti->deformVertsEM) {
@@ -1809,7 +1599,7 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
BKE_id_free(NULL, mesh_final);
}
mesh_final = mesh_tmp;
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
else if (mesh_final == mesh_cage) {
/* 'me' may be changed by this modifier, so we need to copy it. */
@@ -1823,7 +1613,7 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
mesh_copy_autosmooth(mesh_final, mesh_input);
if (deformed_verts) {
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
}
@@ -1893,7 +1683,7 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
if (r_cage && i == cageIndex) {
if (mesh_final && deformed_verts) {
mesh_cage = BKE_mesh_copy_for_eval(mesh_final, false);
- BKE_mesh_apply_vert_coords(mesh_cage, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_cage, deformed_verts);
}
else if (mesh_final) {
mesh_cage = mesh_final;
@@ -1925,7 +1715,7 @@ static void editbmesh_calc_modifiers(struct Depsgraph *depsgraph,
BKE_id_free(NULL, mesh_final);
}
mesh_final = mesh_tmp;
- BKE_mesh_apply_vert_coords(mesh_final, deformed_verts);
+ BKE_mesh_vert_coords_apply(mesh_final, deformed_verts);
}
}
else if (!deformed_verts && mesh_cage) {
diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c
index 984de700ce7..d072a0aa599 100644
--- a/source/blender/blenkernel/intern/action.c
+++ b/source/blender/blenkernel/intern/action.c
@@ -236,9 +236,9 @@ void action_group_colors_sync(bActionGroup *grp, const bActionGroup *ref_grp)
*/
else if (grp->cs.solid[0] == 0) {
/* define for setting colors in theme below */
- rgba_char_args_set(grp->cs.solid, 0xff, 0x00, 0x00, 255);
- rgba_char_args_set(grp->cs.select, 0x81, 0xe6, 0x14, 255);
- rgba_char_args_set(grp->cs.active, 0x18, 0xb6, 0xe0, 255);
+ rgba_uchar_args_set(grp->cs.solid, 0xff, 0x00, 0x00, 255);
+ rgba_uchar_args_set(grp->cs.select, 0x81, 0xe6, 0x14, 255);
+ rgba_uchar_args_set(grp->cs.active, 0x18, 0xb6, 0xe0, 255);
}
}
}
@@ -1420,9 +1420,7 @@ short action_get_item_transforms(bAction *act, Object *ob, bPoseChannel *pchan,
if ((curves) || (flags & ACT_TRANS_PROP) == 0) {
/* custom properties only */
- pPtr = strstr(
- bPtr,
- "[\""); /* extra '"' comment here to keep my texteditor functionlist working :) */
+ pPtr = strstr(bPtr, "[\"");
if (pPtr) {
flags |= ACT_TRANS_PROP;
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 26a2018f015..ab8ea37377d 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -648,7 +648,7 @@ char *BKE_animdata_driver_path_hack(bContext *C,
PropertyRNA *prop,
char *base_path)
{
- ID *id = (ID *)ptr->id.data;
+ ID *id = ptr->owner_id;
ScrArea *sa = CTX_wm_area(C);
/* get standard path which may be extended */
@@ -1656,14 +1656,14 @@ static bool animsys_store_rna_setting(PointerRNA *ptr,
if (path) {
/* get property to write to */
if (RNA_path_resolve_property(ptr, path, &r_result->ptr, &r_result->prop)) {
- if ((ptr->id.data == NULL) || RNA_property_animateable(&r_result->ptr, r_result->prop)) {
+ if ((ptr->owner_id == NULL) || RNA_property_animateable(&r_result->ptr, r_result->prop)) {
int array_len = RNA_property_array_length(&r_result->ptr, r_result->prop);
if (array_len && array_index >= array_len) {
if (G.debug & G_DEBUG) {
CLOG_WARN(&LOG,
"Animato: Invalid array index. ID = '%s', '%s[%d]', array length is %d",
- (ptr->id.data) ? (((ID *)ptr->id.data)->name + 2) : "<No ID>",
+ (ptr->owner_id) ? (ptr->owner_id->name + 2) : "<No ID>",
path,
array_index,
array_len - 1);
@@ -1682,7 +1682,7 @@ static bool animsys_store_rna_setting(PointerRNA *ptr,
if (G.debug & G_DEBUG) {
CLOG_WARN(&LOG,
"Animato: Invalid path. ID = '%s', '%s[%d]'",
- (ptr->id.data) ? (((ID *)ptr->id.data)->name + 2) : "<No ID>",
+ (ptr->owner_id) ? (ptr->owner_id->name + 2) : "<No ID>",
path,
array_index);
}
@@ -1703,7 +1703,7 @@ static bool animsys_read_rna_setting(PathResolvedRNA *anim_rna, float *r_value)
float orig_value;
/* caller must ensure this is animatable */
- BLI_assert(RNA_property_animateable(ptr, prop) || ptr->id.data == NULL);
+ BLI_assert(RNA_property_animateable(ptr, prop) || ptr->owner_id == NULL);
switch (RNA_property_type(prop)) {
case PROP_BOOLEAN: {
@@ -1765,7 +1765,7 @@ static bool animsys_write_rna_setting(PathResolvedRNA *anim_rna, const float val
int array_index = anim_rna->prop_index;
/* caller must ensure this is animatable */
- BLI_assert(RNA_property_animateable(ptr, prop) || ptr->id.data == NULL);
+ BLI_assert(RNA_property_animateable(ptr, prop) || ptr->owner_id == NULL);
/* Check whether value is new. Otherwise we skip all the updates. */
float old_value;
@@ -1844,7 +1844,7 @@ static bool animsys_construct_orig_pointer_rna(const PointerRNA *ptr, PointerRNA
* not a valid pointer, but there are exceptions in various places of this file which handles
* such pointers.
* We do special trickery here as well, to quickly go from evaluated to original NlaStrip. */
- if (ptr->id.data == NULL) {
+ if (ptr->owner_id == NULL) {
if (ptr->type != &RNA_NlaStrip) {
return false;
}
@@ -1855,8 +1855,8 @@ static bool animsys_construct_orig_pointer_rna(const PointerRNA *ptr, PointerRNA
ptr_orig->data = strip->orig_strip;
}
else {
- ptr_orig->id.data = ((ID *)ptr_orig->id.data)->orig_id;
- ptr_orig->data = ptr_orig->id.data;
+ ptr_orig->owner_id = ptr_orig->owner_id->orig_id;
+ ptr_orig->data = ptr_orig->owner_id;
}
return true;
}
@@ -2003,7 +2003,7 @@ void animsys_evaluate_action_group(PointerRNA *ptr, bAction *act, bActionGroup *
return;
}
- action_idcode_patch_check(ptr->id.data, act);
+ action_idcode_patch_check(ptr->owner_id, act);
/* if group is muted, don't evaluated any of the F-Curve */
if (agrp->flag & AGRP_MUTED) {
@@ -2034,7 +2034,7 @@ static void animsys_evaluate_action_ex(PointerRNA *ptr,
return;
}
- action_idcode_patch_check(ptr->id.data, act);
+ action_idcode_patch_check(ptr->owner_id, act);
/* calculate then execute each curve */
animsys_evaluate_fcurves(ptr, &act->curves, ctime, flush_to_original);
@@ -2643,7 +2643,7 @@ static NlaEvalChannel *nlaevalchan_verify(PointerRNA *ptr, NlaEvalData *nlaeval,
if (G.debug & G_DEBUG) {
CLOG_WARN(&LOG,
"Animato: Invalid path. ID = '%s', '%s'",
- (ptr->id.data) ? (((ID *)ptr->id.data)->name + 2) : "<No ID>",
+ (ptr->owner_id) ? (ptr->owner_id->name + 2) : "<No ID>",
path);
}
@@ -2651,7 +2651,7 @@ static NlaEvalChannel *nlaevalchan_verify(PointerRNA *ptr, NlaEvalData *nlaeval,
}
/* Check that the property can be animated. */
- if (ptr->id.data != NULL && !RNA_property_animateable(&key.ptr, key.prop)) {
+ if (ptr->owner_id != NULL && !RNA_property_animateable(&key.ptr, key.prop)) {
return NULL;
}
@@ -2884,7 +2884,7 @@ static bool nlaeval_blend_value(NlaBlendData *blend,
if (index < 0) {
if (G.debug & G_DEBUG) {
- ID *id = nec->key.ptr.id.data;
+ ID *id = nec->key.ptr.owner_id;
CLOG_WARN(&LOG,
"Animato: Invalid array index. ID = '%s', '%s[%d]', array length is %d",
id ? (id->name + 2) : "<No ID>",
@@ -3081,7 +3081,7 @@ static void nlastrip_evaluate_actionclip(PointerRNA *ptr,
return;
}
- action_idcode_patch_check(ptr->id.data, strip->act);
+ action_idcode_patch_check(ptr->owner_id, strip->act);
/* join this strip's modifiers to the parent's modifiers (own modifiers first) */
nlaeval_fmodifiers_join_stacks(&tmp_modifiers, &strip->modifiers, modifiers);
@@ -3940,7 +3940,7 @@ void BKE_animsys_evaluate_all_animation(Main *main,
* - this is like EVAL_ANIM_IDS, but this handles the case "embedded nodetrees"
* (i.e. scene/material/texture->nodetree) which we need a special exception
* for, otherwise they'd get skipped
- * - ntp = "node tree parent" = data-block where node tree stuff resides
+ * - 'ntp' stands for "node tree parent" = data-block where node tree stuff resides
*/
#define EVAL_ANIM_NODETREE_IDS(first, NtId_Type, aflag) \
for (id = first; id; id = id->next) { \
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 742e3634bf1..168422a4454 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -268,6 +268,90 @@ void BKE_armature_copy_bone_transforms(bArmature *armature_dst, const bArmature
}
}
+/** Helper for #ED_armature_transform */
+static void armature_transform_recurse(ListBase *bonebase,
+ const float mat[4][4],
+ const bool do_props,
+ /* Cached from 'mat'. */
+ const float mat3[3][3],
+ const float scale,
+ /* Child bones. */
+ const Bone *bone_parent,
+ const float arm_mat_parent_inv[4][4])
+{
+ for (Bone *bone = bonebase->first; bone; bone = bone->next) {
+
+ /* Transform the bone's roll. */
+ if (bone_parent == NULL) {
+
+ float roll_mat[3][3];
+ {
+ float delta[3];
+ sub_v3_v3v3(delta, bone->tail, bone->head);
+ vec_roll_to_mat3(delta, bone->roll, roll_mat);
+ }
+
+ /* Transform the roll matrix. */
+ mul_m3_m3m3(roll_mat, mat3, roll_mat);
+
+ /* Apply the transformed roll back. */
+ mat3_to_vec_roll(roll_mat, NULL, &bone->roll);
+ }
+
+ mul_m4_v3(mat, bone->arm_head);
+ mul_m4_v3(mat, bone->arm_tail);
+
+ /* Get the new head and tail */
+ if (bone_parent) {
+ sub_v3_v3v3(bone->head, bone->arm_head, bone_parent->arm_tail);
+ sub_v3_v3v3(bone->tail, bone->arm_tail, bone_parent->arm_tail);
+
+ mul_mat3_m4_v3(arm_mat_parent_inv, bone->head);
+ mul_mat3_m4_v3(arm_mat_parent_inv, bone->tail);
+ }
+ else {
+ copy_v3_v3(bone->head, bone->arm_head);
+ copy_v3_v3(bone->tail, bone->arm_tail);
+ }
+
+ BKE_armature_where_is_bone(bone, bone_parent, false);
+
+ {
+ float arm_mat3[3][3];
+ copy_m3_m4(arm_mat3, bone->arm_mat);
+ mat3_to_vec_roll(arm_mat3, NULL, &bone->arm_roll);
+ }
+
+ if (do_props) {
+ bone->rad_head *= scale;
+ bone->rad_tail *= scale;
+ bone->dist *= scale;
+
+ /* we could be smarter and scale by the matrix along the x & z axis */
+ bone->xwidth *= scale;
+ bone->zwidth *= scale;
+ }
+
+ if (!BLI_listbase_is_empty(&bone->childbase)) {
+ float arm_mat_inv[4][4];
+ invert_m4_m4(arm_mat_inv, bone->arm_mat);
+ armature_transform_recurse(&bone->childbase, mat, do_props, mat3, scale, bone, arm_mat_inv);
+ }
+ }
+}
+
+void BKE_armature_transform(bArmature *arm, const float mat[4][4], const bool do_props)
+{
+ /* Store the scale of the matrix here to use on envelopes. */
+ float scale = mat4_to_scale(mat);
+ float mat3[3][3];
+
+ copy_m3_m4(mat3, mat);
+ normalize_m3(mat3);
+
+ armature_transform_recurse(&arm->bonebase, mat, do_props, mat3, scale, NULL, NULL);
+}
+
static Bone *get_named_bone_bonechildren(ListBase *lb, const char *name)
{
Bone *curBone, *rbone;
@@ -2285,7 +2369,7 @@ void vec_roll_to_mat3(const float vec[3], const float roll, float mat[3][3])
/* recursive part, calculates restposition of entire tree of children */
/* used by exiting editmode too */
-void BKE_armature_where_is_bone(Bone *bone, Bone *prevbone, const bool use_recursion)
+void BKE_armature_where_is_bone(Bone *bone, const Bone *bone_parent, const bool use_recursion)
{
float vec[3];
@@ -2301,13 +2385,13 @@ void BKE_armature_where_is_bone(Bone *bone, Bone *prevbone, const bool use_recur
bone->segments = 1;
}
- if (prevbone) {
+ if (bone_parent) {
float offs_bone[4][4];
/* yoffs(b-1) + root(b) + bonemat(b) */
BKE_bone_offset_matrix_get(bone, offs_bone);
/* Compose the matrix for this bone */
- mul_m4_m4m4(bone->arm_mat, prevbone->arm_mat, offs_bone);
+ mul_m4_m4m4(bone->arm_mat, bone_parent->arm_mat, offs_bone);
}
else {
copy_m4_m3(bone->arm_mat, bone->bone_mat);
@@ -2316,9 +2400,9 @@ void BKE_armature_where_is_bone(Bone *bone, Bone *prevbone, const bool use_recur
/* and the kiddies */
if (use_recursion) {
- prevbone = bone;
+ bone_parent = bone;
for (bone = bone->childbase.first; bone; bone = bone->next) {
- BKE_armature_where_is_bone(bone, prevbone, use_recursion);
+ BKE_armature_where_is_bone(bone, bone_parent, use_recursion);
}
}
}
@@ -2707,8 +2791,9 @@ void BKE_pose_where_is_bone(struct Depsgraph *depsgraph,
cob = BKE_constraints_make_evalob(depsgraph, scene, ob, pchan, CONSTRAINT_OBTYPE_BONE);
/* Solve PoseChannel's Constraints */
- BKE_constraints_solve(
- depsgraph, &pchan->constraints, cob, ctime); /* ctime doesn't alter objects */
+
+ /* ctime doesn't alter objects. */
+ BKE_constraints_solve(depsgraph, &pchan->constraints, cob, ctime);
/* cleanup after Constraint Solving
* - applies matrix back to pchan, and frees temporary struct used
diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c
index bf7d81e5d63..00975976130 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -887,9 +887,10 @@ void BKE_pose_eval_proxy_copy_bone(struct Depsgraph *depsgraph, Object *object,
}
BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL);
bPoseChannel *pchan = pose_pchan_get_indexed(object, pchan_index);
+ BLI_assert(pchan != NULL);
DEG_debug_print_eval_subdata(
depsgraph, __func__, object->id.name, object, "pchan", pchan->name, pchan);
- /* TODO(sergey): Use indexec lookup, once it's guaranteed to be kept
+ /* TODO(sergey): Use indexed lookup, once it's guaranteed to be kept
* around for the time while proxies are evaluating.
*/
#if 0
@@ -897,8 +898,13 @@ void BKE_pose_eval_proxy_copy_bone(struct Depsgraph *depsgraph, Object *object,
#else
bPoseChannel *pchan_from = BKE_pose_channel_find_name(object->proxy_from->pose, pchan->name);
#endif
- BLI_assert(pchan != NULL);
- BLI_assert(pchan_from != NULL);
+ if (pchan_from == NULL) {
+ printf(
+ "WARNING: Could not find bone %s in linked ID anymore... "
+ "You should delete and re-generate your proxy.\n",
+ pchan->name);
+ return;
+ }
BKE_pose_copyesult_pchan_result(pchan, pchan_from);
copy_dq_dq(&pchan->runtime.deform_dual_quat, &pchan_from->runtime.deform_dual_quat);
BKE_pchan_bbone_segments_cache_copy(pchan, pchan_from);
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index bc62ad685ef..0d94fbe648f 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -372,7 +372,7 @@ static void setup_app_data(bContext *C,
* lib_link on local IDs using linked ones.
* There is no real way to predict amount of changes here, so we have to fully redo
* refcounting . */
- BLE_main_id_refcount_recompute(bmain, true);
+ BKE_main_id_refcount_recompute(bmain, true);
}
}
@@ -574,6 +574,7 @@ UserDef *BKE_blendfile_userdef_from_defaults(void)
"io_scene_gltf2",
"io_scene_obj",
"io_scene_x3d",
+ "cycles",
};
for (int i = 0; i < ARRAY_SIZE(addons); i++) {
bAddon *addon = BKE_addon_new();
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 709f74808a3..b2d3ccfebc3 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -184,9 +184,9 @@ void BKE_brush_init_gpencil_settings(Brush *brush)
brush->gpencil_settings->flag |= GP_BRUSH_ENABLE_CURSOR;
/* curves */
- brush->gpencil_settings->curve_sensitivity = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
- brush->gpencil_settings->curve_strength = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
- brush->gpencil_settings->curve_jitter = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ brush->gpencil_settings->curve_sensitivity = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ brush->gpencil_settings->curve_strength = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ brush->gpencil_settings->curve_jitter = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
/* add a new gp-brush */
@@ -386,8 +386,8 @@ void BKE_brush_gpencil_presets(bContext *C)
/* Curve */
custom_curve = brush->gpencil_settings->curve_sensitivity;
- curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(custom_curve);
+ BKE_curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(custom_curve);
brush_gpencil_curvemap_reset(custom_curve->cm, 3, GPCURVE_PRESET_INK);
/* Ink Noise brush */
@@ -423,8 +423,8 @@ void BKE_brush_gpencil_presets(bContext *C)
/* Curve */
custom_curve = brush->gpencil_settings->curve_sensitivity;
- curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(custom_curve);
+ BKE_curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(custom_curve);
brush_gpencil_curvemap_reset(custom_curve->cm, 3, GPCURVE_PRESET_INKNOISE);
brush->gpencil_settings->gradient_f = 1.0f;
@@ -495,8 +495,8 @@ void BKE_brush_gpencil_presets(bContext *C)
brush->smooth_stroke_factor = SMOOTH_STROKE_FACTOR;
/* Curve */
custom_curve = brush->gpencil_settings->curve_sensitivity;
- curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(custom_curve);
+ BKE_curvemapping_set_defaults(custom_curve, 0, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(custom_curve);
brush_gpencil_curvemap_reset(custom_curve->cm, 4, GPCURVE_PRESET_MARKER);
brush->gpencil_settings->gradient_f = 1.0f;
@@ -649,14 +649,14 @@ void BKE_brush_copy_data(Main *UNUSED(bmain),
brush_dst->preview = NULL;
}
- brush_dst->curve = curvemapping_copy(brush_src->curve);
+ brush_dst->curve = BKE_curvemapping_copy(brush_src->curve);
if (brush_src->gpencil_settings != NULL) {
brush_dst->gpencil_settings = MEM_dupallocN(brush_src->gpencil_settings);
- brush_dst->gpencil_settings->curve_sensitivity = curvemapping_copy(
+ brush_dst->gpencil_settings->curve_sensitivity = BKE_curvemapping_copy(
brush_src->gpencil_settings->curve_sensitivity);
- brush_dst->gpencil_settings->curve_strength = curvemapping_copy(
+ brush_dst->gpencil_settings->curve_strength = BKE_curvemapping_copy(
brush_src->gpencil_settings->curve_strength);
- brush_dst->gpencil_settings->curve_jitter = curvemapping_copy(
+ brush_dst->gpencil_settings->curve_jitter = BKE_curvemapping_copy(
brush_src->gpencil_settings->curve_jitter);
}
@@ -677,12 +677,12 @@ void BKE_brush_free(Brush *brush)
if (brush->icon_imbuf) {
IMB_freeImBuf(brush->icon_imbuf);
}
- curvemapping_free(brush->curve);
+ BKE_curvemapping_free(brush->curve);
if (brush->gpencil_settings != NULL) {
- curvemapping_free(brush->gpencil_settings->curve_sensitivity);
- curvemapping_free(brush->gpencil_settings->curve_strength);
- curvemapping_free(brush->gpencil_settings->curve_jitter);
+ BKE_curvemapping_free(brush->gpencil_settings->curve_sensitivity);
+ BKE_curvemapping_free(brush->gpencil_settings->curve_strength);
+ BKE_curvemapping_free(brush->gpencil_settings->curve_jitter);
MEM_SAFE_FREE(brush->gpencil_settings);
}
@@ -917,15 +917,15 @@ void BKE_brush_curve_preset(Brush *b, eCurveMappingPreset preset)
CurveMap *cm = NULL;
if (!b->curve) {
- b->curve = curvemapping_add(1, 0, 0, 1, 1);
+ b->curve = BKE_curvemapping_add(1, 0, 0, 1, 1);
}
cm = b->curve->cm;
cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
b->curve->preset = preset;
- curvemap_reset(cm, &b->curve->clipr, b->curve->preset, CURVEMAP_SLOPE_NEGATIVE);
- curvemapping_changed(b->curve, false);
+ BKE_curvemap_reset(cm, &b->curve->clipr, b->curve->preset, CURVEMAP_SLOPE_NEGATIVE);
+ BKE_curvemapping_changed(b->curve, false);
}
/* Generic texture sampler for 3D painting systems. point has to be either in
@@ -1412,7 +1412,7 @@ float BKE_brush_curve_strength(const Brush *br, float p, const float len)
switch (br->curve_preset) {
case BRUSH_CURVE_CUSTOM:
- strength = curvemapping_evaluateF(br->curve, 0, 1.0f - p);
+ strength = BKE_curvemapping_evaluateF(br->curve, 0, 1.0f - p);
break;
case BRUSH_CURVE_SHARP:
strength = p * p;
@@ -1498,7 +1498,7 @@ struct ImBuf *BKE_brush_gen_radial_control_imbuf(Brush *br, bool secondary)
int half = side / 2;
int i, j;
- curvemapping_initialize(br->curve);
+ BKE_curvemapping_initialize(br->curve);
texcache = BKE_brush_gen_texture_cache(br, half, secondary);
im->rect_float = MEM_callocN(sizeof(float) * side * side, "radial control rect");
im->x = im->y = side;
diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c
index e51d15ee152..85a12027bf2 100644
--- a/source/blender/blenkernel/intern/bvhutils.c
+++ b/source/blender/blenkernel/intern/bvhutils.c
@@ -425,11 +425,11 @@ static BVHTree *bvhtree_from_editmesh_verts_create_tree(float epsilon,
int tree_type,
int axis,
BMEditMesh *em,
- const int verts_num,
const BLI_bitmap *verts_mask,
int verts_num_active)
{
BM_mesh_elem_table_ensure(em->bm, BM_VERT);
+ const int verts_num = em->bm->totvert;
if (verts_mask) {
BLI_assert(IN_RANGE_INCL(verts_num_active, 0, verts_num));
}
@@ -516,52 +516,53 @@ BVHTree *bvhtree_from_editmesh_verts_ex(BVHTreeFromEditMesh *data,
int verts_num_active,
float epsilon,
int tree_type,
- int axis)
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
- BVHTree *tree = bvhtree_from_editmesh_verts_create_tree(
- epsilon, tree_type, axis, em, em->bm->totvert, verts_mask, verts_num_active);
-
- if (tree) {
- memset(data, 0, sizeof(*data));
- data->tree = tree;
- data->em = em;
- data->nearest_callback = NULL;
- data->raycast_callback = editmesh_verts_spherecast;
- }
-
- return tree;
-}
+ BVHTree *tree = NULL;
-BVHTree *bvhtree_from_editmesh_verts(BVHTreeFromEditMesh *data,
- BMEditMesh *em,
- float epsilon,
- int tree_type,
- int axis,
- BVHCache **bvh_cache)
-{
if (bvh_cache) {
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
- data->cached = bvhcache_find(*bvh_cache, BVHTREE_FROM_EM_VERTS, &data->tree);
+ data->cached = bvhcache_find(*bvh_cache, bvh_cache_type, &data->tree);
BLI_rw_mutex_unlock(&cache_rwlock);
if (data->cached == false) {
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- data->cached = bvhcache_find(*bvh_cache, BVHTREE_FROM_EM_VERTS, &data->tree);
+ data->cached = bvhcache_find(*bvh_cache, bvh_cache_type, &data->tree);
if (data->cached == false) {
- data->tree = bvhtree_from_editmesh_verts_ex(data, em, NULL, -1, epsilon, tree_type, axis);
+ tree = bvhtree_from_editmesh_verts_create_tree(
+ epsilon, tree_type, axis, em, verts_mask, verts_num_active);
/* Save on cache for later use */
/* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(bvh_cache, data->tree, BVHTREE_FROM_EM_VERTS);
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
+ data->cached = true;
}
BLI_rw_mutex_unlock(&cache_rwlock);
}
}
else {
- data->tree = bvhtree_from_editmesh_verts_ex(data, em, NULL, -1, epsilon, tree_type, axis);
+ tree = bvhtree_from_editmesh_verts_create_tree(
+ epsilon, tree_type, axis, em, verts_mask, verts_num_active);
}
- return data->tree;
+ if (tree) {
+ memset(data, 0, sizeof(*data));
+ data->tree = tree;
+ data->em = em;
+ data->nearest_callback = NULL;
+ data->raycast_callback = editmesh_verts_spherecast;
+ data->cached = bvh_cache != NULL;
+ }
+
+ return tree;
+}
+
+BVHTree *bvhtree_from_editmesh_verts(
+ BVHTreeFromEditMesh *data, BMEditMesh *em, float epsilon, int tree_type, int axis)
+{
+ return bvhtree_from_editmesh_verts_ex(data, em, NULL, -1, epsilon, tree_type, axis, 0, NULL);
}
/**
@@ -579,13 +580,40 @@ BVHTree *bvhtree_from_mesh_verts_ex(BVHTreeFromMesh *data,
int verts_num_active,
float epsilon,
int tree_type,
- int axis)
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
- BVHTree *tree = bvhtree_from_mesh_verts_create_tree(
- epsilon, tree_type, axis, vert, verts_num, verts_mask, verts_num_active);
+ bool in_cache = false;
+ BVHTree *tree = NULL;
+ if (bvh_cache) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ if (in_cache == false) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ if (in_cache) {
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ }
+ }
+ }
+
+ if (in_cache == false) {
+ tree = bvhtree_from_mesh_verts_create_tree(
+ epsilon, tree_type, axis, vert, verts_num, verts_mask, verts_num_active);
+
+ if (bvh_cache) {
+ /* Save on cache for later use */
+ /* printf("BVHTree built and saved on cache\n"); */
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ in_cache = true;
+ }
+ }
/* Setup BVHTreeFromMesh */
- bvhtree_from_mesh_verts_setup_data(data, tree, false, vert, vert_allocated);
+ bvhtree_from_mesh_verts_setup_data(data, tree, in_cache, vert, vert_allocated);
return tree;
}
@@ -600,11 +628,12 @@ static BVHTree *bvhtree_from_editmesh_edges_create_tree(float epsilon,
int tree_type,
int axis,
BMEditMesh *em,
- const int edges_num,
const BLI_bitmap *edges_mask,
int edges_num_active)
{
BM_mesh_elem_table_ensure(em->bm, BM_EDGE);
+ const int edges_num = em->bm->totedge;
+
if (edges_mask) {
BLI_assert(IN_RANGE_INCL(edges_num_active, 0, edges_num));
}
@@ -704,54 +733,53 @@ BVHTree *bvhtree_from_editmesh_edges_ex(BVHTreeFromEditMesh *data,
int edges_num_active,
float epsilon,
int tree_type,
- int axis)
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
- int edge_num = em->bm->totedge;
-
- BVHTree *tree = bvhtree_from_editmesh_edges_create_tree(
- epsilon, tree_type, axis, em, edge_num, edges_mask, edges_num_active);
-
- if (tree) {
- memset(data, 0, sizeof(*data));
- data->tree = tree;
- data->em = em;
- data->nearest_callback = NULL; /* TODO */
- data->raycast_callback = NULL; /* TODO */
- }
-
- return tree;
-}
+ BVHTree *tree = NULL;
-BVHTree *bvhtree_from_editmesh_edges(BVHTreeFromEditMesh *data,
- BMEditMesh *em,
- float epsilon,
- int tree_type,
- int axis,
- BVHCache **bvh_cache)
-{
if (bvh_cache) {
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
- data->cached = bvhcache_find(*bvh_cache, BVHTREE_FROM_EM_EDGES, &data->tree);
+ data->cached = bvhcache_find(*bvh_cache, bvh_cache_type, &data->tree);
BLI_rw_mutex_unlock(&cache_rwlock);
if (data->cached == false) {
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- data->cached = bvhcache_find(*bvh_cache, BVHTREE_FROM_EM_EDGES, &data->tree);
+ data->cached = bvhcache_find(*bvh_cache, bvh_cache_type, &data->tree);
if (data->cached == false) {
- data->tree = bvhtree_from_editmesh_edges_ex(data, em, NULL, -1, epsilon, tree_type, axis);
+ tree = bvhtree_from_editmesh_edges_create_tree(
+ epsilon, tree_type, axis, em, edges_mask, edges_num_active);
/* Save on cache for later use */
/* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(bvh_cache, data->tree, BVHTREE_FROM_EM_EDGES);
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
+ data->cached = true;
}
BLI_rw_mutex_unlock(&cache_rwlock);
}
}
else {
- data->tree = bvhtree_from_editmesh_edges_ex(data, em, NULL, -1, epsilon, tree_type, axis);
+ tree = bvhtree_from_editmesh_edges_create_tree(
+ epsilon, tree_type, axis, em, edges_mask, edges_num_active);
}
- return data->tree;
+ if (tree) {
+ memset(data, 0, sizeof(*data));
+ data->tree = tree;
+ data->em = em;
+ data->nearest_callback = NULL; /* TODO */
+ data->raycast_callback = NULL; /* TODO */
+ data->cached = bvh_cache != NULL;
+ }
+
+ return tree;
+}
+
+BVHTree *bvhtree_from_editmesh_edges(
+ BVHTreeFromEditMesh *data, BMEditMesh *em, float epsilon, int tree_type, int axis)
+{
+ return bvhtree_from_editmesh_edges_ex(data, em, NULL, -1, epsilon, tree_type, axis, 0, NULL);
}
/**
@@ -772,14 +800,41 @@ BVHTree *bvhtree_from_mesh_edges_ex(BVHTreeFromMesh *data,
int edges_num_active,
float epsilon,
int tree_type,
- int axis)
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
- BVHTree *tree = bvhtree_from_mesh_edges_create_tree(
- vert, edge, edges_num, edges_mask, edges_num_active, epsilon, tree_type, axis);
+ bool in_cache = false;
+ BVHTree *tree = NULL;
+ if (bvh_cache) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ if (in_cache == false) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ if (in_cache) {
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ }
+ }
+ }
+
+ if (in_cache == false) {
+ tree = bvhtree_from_mesh_edges_create_tree(
+ vert, edge, edges_num, edges_mask, edges_num_active, epsilon, tree_type, axis);
+
+ if (bvh_cache) {
+ /* Save on cache for later use */
+ /* printf("BVHTree built and saved on cache\n"); */
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ in_cache = true;
+ }
+ }
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_edges_setup_data(
- data, tree, false, vert, vert_allocated, edge, edge_allocated);
+ data, tree, in_cache, vert, vert_allocated, edge, edge_allocated);
return tree;
}
@@ -880,14 +935,41 @@ BVHTree *bvhtree_from_mesh_faces_ex(BVHTreeFromMesh *data,
int faces_num_active,
float epsilon,
int tree_type,
- int axis)
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
- BVHTree *tree = bvhtree_from_mesh_faces_create_tree(
- epsilon, tree_type, axis, vert, face, numFaces, faces_mask, faces_num_active);
+ bool in_cache = false;
+ BVHTree *tree = NULL;
+ if (bvh_cache) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ if (in_cache == false) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ if (in_cache) {
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ }
+ }
+ }
+
+ if (in_cache == false) {
+ tree = bvhtree_from_mesh_faces_create_tree(
+ epsilon, tree_type, axis, vert, face, numFaces, faces_mask, faces_num_active);
+
+ if (bvh_cache) {
+ /* Save on cache for later use */
+ /* printf("BVHTree built and saved on cache\n"); */
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ in_cache = true;
+ }
+ }
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_faces_setup_data(
- data, tree, false, vert, vert_allocated, face, face_allocated);
+ data, tree, in_cache, vert, vert_allocated, face, face_allocated);
return tree;
}
@@ -902,12 +984,11 @@ static BVHTree *bvhtree_from_editmesh_looptri_create_tree(float epsilon,
int tree_type,
int axis,
BMEditMesh *em,
- const int looptri_num,
const BLI_bitmap *looptri_mask,
int looptri_num_active)
{
BVHTree *tree = NULL;
- int i;
+ const int looptri_num = em->tottri;
if (looptri_num) {
if (looptri_mask) {
@@ -921,26 +1002,24 @@ static BVHTree *bvhtree_from_editmesh_looptri_create_tree(float epsilon,
/* printf("%s: building BVH, total=%d\n", __func__, numFaces); */
tree = BLI_bvhtree_new(looptri_num_active, epsilon, tree_type, axis);
if (tree) {
- if (em) {
- const struct BMLoop *(*looptris)[3] = (void *)em->looptris;
-
- /* Insert BMesh-tessellation triangles into the bvh tree, unless they are hidden
- * and/or selected. Even if the faces themselves are not selected for the snapped
- * transform, having a vertex selected means the face (and thus it's tessellated
- * triangles) will be moving and will not be a good snap targets. */
- for (i = 0; i < looptri_num; i++) {
- const BMLoop **ltri = looptris[i];
- bool insert = looptri_mask ? BLI_BITMAP_TEST_BOOL(looptri_mask, i) : true;
-
- if (insert) {
- /* No reason found to block hit-testing the triangle for snap, so insert it now.*/
- float co[3][3];
- copy_v3_v3(co[0], ltri[0]->v->co);
- copy_v3_v3(co[1], ltri[1]->v->co);
- copy_v3_v3(co[2], ltri[2]->v->co);
-
- BLI_bvhtree_insert(tree, i, co[0], 3);
- }
+ const struct BMLoop *(*looptris)[3] = (void *)em->looptris;
+
+ /* Insert BMesh-tessellation triangles into the bvh tree, unless they are hidden
+ * and/or selected. Even if the faces themselves are not selected for the snapped
+ * transform, having a vertex selected means the face (and thus it's tessellated
+ * triangles) will be moving and will not be a good snap targets. */
+ for (int i = 0; i < looptri_num; i++) {
+ const BMLoop **ltri = looptris[i];
+ bool insert = looptri_mask ? BLI_BITMAP_TEST_BOOL(looptri_mask, i) : true;
+
+ if (insert) {
+ /* No reason found to block hit-testing the triangle for snap, so insert it now.*/
+ float co[3][3];
+ copy_v3_v3(co[0], ltri[0]->v->co);
+ copy_v3_v3(co[1], ltri[1]->v->co);
+ copy_v3_v3(co[2], ltri[2]->v->co);
+
+ BLI_bvhtree_insert(tree, i, co[0], 3);
}
}
BLI_assert(BLI_bvhtree_get_len(tree) == looptri_num_active);
@@ -1033,33 +1112,34 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
float epsilon,
int tree_type,
int axis,
- BVHCache **bvhCache)
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
/* BMESH specific check that we have tessfaces,
* we _could_ tessellate here but rather not - campbell */
BVHTree *tree = NULL;
- if (bvhCache) {
+ if (bvh_cache) {
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
- bool in_cache = bvhcache_find(*bvhCache, BVHTREE_FROM_EM_LOOPTRI, &tree);
+ bool in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
BLI_rw_mutex_unlock(&cache_rwlock);
if (in_cache == false) {
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- in_cache = bvhcache_find(*bvhCache, BVHTREE_FROM_EM_LOOPTRI, &tree);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
if (in_cache == false) {
tree = bvhtree_from_editmesh_looptri_create_tree(
- epsilon, tree_type, axis, em, em->tottri, looptri_mask, looptri_num_active);
+ epsilon, tree_type, axis, em, looptri_mask, looptri_num_active);
/* Save on cache for later use */
/* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(bvhCache, tree, BVHTREE_FROM_EM_LOOPTRI);
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
}
BLI_rw_mutex_unlock(&cache_rwlock);
}
}
else {
tree = bvhtree_from_editmesh_looptri_create_tree(
- epsilon, tree_type, axis, em, em->tottri, looptri_mask, looptri_num_active);
+ epsilon, tree_type, axis, em, looptri_mask, looptri_num_active);
}
if (tree) {
@@ -1067,19 +1147,15 @@ BVHTree *bvhtree_from_editmesh_looptri_ex(BVHTreeFromEditMesh *data,
data->nearest_callback = editmesh_looptri_nearest_point;
data->raycast_callback = editmesh_looptri_spherecast;
data->em = em;
- data->cached = bvhCache != NULL;
+ data->cached = bvh_cache != NULL;
}
return tree;
}
-BVHTree *bvhtree_from_editmesh_looptri(BVHTreeFromEditMesh *data,
- BMEditMesh *em,
- float epsilon,
- int tree_type,
- int axis,
- BVHCache **bvhCache)
+BVHTree *bvhtree_from_editmesh_looptri(
+ BVHTreeFromEditMesh *data, BMEditMesh *em, float epsilon, int tree_type, int axis)
{
- return bvhtree_from_editmesh_looptri_ex(data, em, NULL, -1, epsilon, tree_type, axis, bvhCache);
+ return bvhtree_from_editmesh_looptri_ex(data, em, NULL, -1, epsilon, tree_type, axis, 0, NULL);
}
/**
@@ -1099,21 +1175,54 @@ BVHTree *bvhtree_from_mesh_looptri_ex(BVHTreeFromMesh *data,
int looptri_num_active,
float epsilon,
int tree_type,
- int axis)
+ int axis,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
{
- BVHTree *tree = bvhtree_from_mesh_looptri_create_tree(epsilon,
- tree_type,
- axis,
- vert,
- mloop,
- looptri,
- looptri_num,
- looptri_mask,
- looptri_num_active);
+ bool in_cache = false;
+ BVHTree *tree = NULL;
+ if (bvh_cache) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ if (in_cache == false) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
+ in_cache = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ if (in_cache) {
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ }
+ }
+ }
+
+ if (in_cache == false) {
+ /* Setup BVHTreeFromMesh */
+ tree = bvhtree_from_mesh_looptri_create_tree(epsilon,
+ tree_type,
+ axis,
+ vert,
+ mloop,
+ looptri,
+ looptri_num,
+ looptri_mask,
+ looptri_num_active);
+
+ if (bvh_cache) {
+ bvhcache_insert(bvh_cache, tree, bvh_cache_type);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+ in_cache = true;
+ }
+ }
/* Setup BVHTreeFromMesh */
- bvhtree_from_mesh_looptri_setup_data(
- data, tree, false, vert, vert_allocated, mloop, loop_allocated, looptri, looptri_allocated);
+ bvhtree_from_mesh_looptri_setup_data(data,
+ tree,
+ in_cache,
+ vert,
+ vert_allocated,
+ mloop,
+ loop_allocated,
+ looptri,
+ looptri_allocated);
return tree;
}
@@ -1202,164 +1311,154 @@ static BLI_bitmap *looptri_no_hidden_map_get(const MPoly *mpoly,
*/
BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
struct Mesh *mesh,
- const int type,
+ const int bvh_cache_type,
const int tree_type)
{
- struct BVHTreeFromMesh data_cp = {0};
+ BVHTree *tree = NULL;
+ BVHCache **bvh_cache = &mesh->runtime.bvh_cache;
BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
- data_cp.cached = bvhcache_find(mesh->runtime.bvh_cache, type, &data_cp.tree);
+ bool is_cached = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
BLI_rw_mutex_unlock(&cache_rwlock);
- if (data_cp.cached && data_cp.tree == NULL) {
+ if (is_cached && tree == NULL) {
memset(data, 0, sizeof(*data));
- return data_cp.tree;
+ return tree;
}
- switch (type) {
+ switch (bvh_cache_type) {
case BVHTREE_FROM_VERTS:
case BVHTREE_FROM_LOOSEVERTS:
- data_cp.raycast_callback = mesh_verts_spherecast;
-
- data_cp.vert = mesh->mvert;
+ if (is_cached == false) {
+ BLI_bitmap *loose_verts_mask = NULL;
+ int loose_vert_len = -1;
+ int verts_len = mesh->totvert;
+
+ if (bvh_cache_type == BVHTREE_FROM_LOOSEVERTS) {
+ loose_verts_mask = loose_verts_map_get(
+ mesh->medge, mesh->totedge, mesh->mvert, verts_len, &loose_vert_len);
+ }
- if (data_cp.cached == false) {
/* TODO: a global mutex lock held during the expensive operation of
* building the BVH tree is really bad for performance. */
- BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- data_cp.cached = bvhcache_find(mesh->runtime.bvh_cache, type, &data_cp.tree);
-
- if (data_cp.cached == false) {
- BLI_bitmap *loose_verts_mask = NULL;
- int loose_vert_len = -1;
- int verts_len = mesh->totvert;
-
- if (type == BVHTREE_FROM_LOOSEVERTS) {
- loose_verts_mask = loose_verts_map_get(
- mesh->medge, mesh->totedge, data_cp.vert, verts_len, &loose_vert_len);
- }
-
- data_cp.tree = bvhtree_from_mesh_verts_create_tree(
- 0.0, tree_type, 6, data_cp.vert, verts_len, loose_verts_mask, loose_vert_len);
-
- if (loose_verts_mask != NULL) {
- MEM_freeN(loose_verts_mask);
- }
-
- /* Save on cache for later use */
- /* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(&mesh->runtime.bvh_cache, data_cp.tree, type);
+ tree = bvhtree_from_mesh_verts_ex(data,
+ mesh->mvert,
+ verts_len,
+ false,
+ loose_verts_mask,
+ loose_vert_len,
+ 0.0f,
+ tree_type,
+ 6,
+ bvh_cache_type,
+ bvh_cache);
+
+ if (loose_verts_mask != NULL) {
+ MEM_freeN(loose_verts_mask);
}
- BLI_rw_mutex_unlock(&cache_rwlock);
+ }
+ else {
+ /* Setup BVHTreeFromMesh */
+ bvhtree_from_mesh_verts_setup_data(data, tree, true, mesh->mvert, false);
}
break;
case BVHTREE_FROM_EDGES:
case BVHTREE_FROM_LOOSEEDGES:
- data_cp.nearest_callback = mesh_edges_nearest_point;
- data_cp.raycast_callback = mesh_edges_spherecast;
-
- data_cp.vert = mesh->mvert;
- data_cp.edge = mesh->medge;
-
- if (data_cp.cached == false) {
- BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- data_cp.cached = bvhcache_find(mesh->runtime.bvh_cache, type, &data_cp.tree);
- if (data_cp.cached == false) {
- BLI_bitmap *loose_edges_mask = NULL;
- int loose_edges_len = -1;
- int edges_len = mesh->totedge;
-
- if (type == BVHTREE_FROM_LOOSEEDGES) {
- loose_edges_mask = loose_edges_map_get(data_cp.edge, edges_len, &loose_edges_len);
- }
+ if (is_cached == false) {
+ BLI_bitmap *loose_edges_mask = NULL;
+ int loose_edges_len = -1;
+ int edges_len = mesh->totedge;
- data_cp.tree = bvhtree_from_mesh_edges_create_tree(data_cp.vert,
- data_cp.edge,
- edges_len,
- loose_edges_mask,
- loose_edges_len,
- 0.0,
- tree_type,
- 6);
-
- if (loose_edges_mask != NULL) {
- MEM_freeN(loose_edges_mask);
- }
+ if (bvh_cache_type == BVHTREE_FROM_LOOSEEDGES) {
+ loose_edges_mask = loose_edges_map_get(mesh->medge, edges_len, &loose_edges_len);
+ }
- /* Save on cache for later use */
- /* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(&mesh->runtime.bvh_cache, data_cp.tree, type);
+ tree = bvhtree_from_mesh_edges_ex(data,
+ mesh->mvert,
+ false,
+ mesh->medge,
+ edges_len,
+ false,
+ loose_edges_mask,
+ loose_edges_len,
+ 0.0,
+ tree_type,
+ 6,
+ bvh_cache_type,
+ bvh_cache);
+
+ if (loose_edges_mask != NULL) {
+ MEM_freeN(loose_edges_mask);
}
- BLI_rw_mutex_unlock(&cache_rwlock);
+ }
+ else {
+ /* Setup BVHTreeFromMesh */
+ bvhtree_from_mesh_edges_setup_data(
+ data, tree, false, mesh->mvert, false, mesh->medge, false);
}
break;
case BVHTREE_FROM_FACES:
- data_cp.nearest_callback = mesh_faces_nearest_point;
- data_cp.raycast_callback = mesh_faces_spherecast;
-
- data_cp.vert = mesh->mvert;
- data_cp.face = mesh->mface;
-
- if (data_cp.cached == false) {
- BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- data_cp.cached = bvhcache_find(mesh->runtime.bvh_cache, BVHTREE_FROM_FACES, &data_cp.tree);
- if (data_cp.cached == false) {
- int num_faces = mesh->totface;
- BLI_assert(!(num_faces == 0 && mesh->totpoly != 0));
-
- data_cp.tree = bvhtree_from_mesh_faces_create_tree(
- 0.0, tree_type, 6, data_cp.vert, data_cp.face, num_faces, NULL, -1);
-
- /* Save on cache for later use */
- /* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(&mesh->runtime.bvh_cache, data_cp.tree, BVHTREE_FROM_FACES);
- }
- BLI_rw_mutex_unlock(&cache_rwlock);
+ if (is_cached == false) {
+ int num_faces = mesh->totface;
+ BLI_assert(!(num_faces == 0 && mesh->totpoly != 0));
+
+ tree = bvhtree_from_mesh_faces_ex(data,
+ mesh->mvert,
+ false,
+ mesh->mface,
+ num_faces,
+ false,
+ NULL,
+ -1,
+ 0.0,
+ tree_type,
+ 6,
+ bvh_cache_type,
+ bvh_cache);
+ }
+ else {
+ /* Setup BVHTreeFromMesh */
+ bvhtree_from_mesh_faces_setup_data(
+ data, tree, true, mesh->mvert, false, mesh->mface, false);
}
break;
case BVHTREE_FROM_LOOPTRI:
case BVHTREE_FROM_LOOPTRI_NO_HIDDEN:
- data_cp.nearest_callback = mesh_looptri_nearest_point;
- data_cp.raycast_callback = mesh_looptri_spherecast;
-
- data_cp.vert = mesh->mvert;
- data_cp.loop = mesh->mloop;
-
- /* TODO: store looptris somewhere? */
- data_cp.looptri = BKE_mesh_runtime_looptri_ensure(mesh);
-
- if (data_cp.cached == false) {
- BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_WRITE);
- data_cp.cached = bvhcache_find(
- mesh->runtime.bvh_cache, BVHTREE_FROM_LOOPTRI, &data_cp.tree);
- if (data_cp.cached == false) {
- BLI_bitmap *looptri_mask = NULL;
- int looptri_mask_active_len = -1;
- int looptri_len = BKE_mesh_runtime_looptri_len(mesh);
-
- if (type == BVHTREE_FROM_LOOPTRI_NO_HIDDEN) {
- looptri_mask = looptri_no_hidden_map_get(
- mesh->mpoly, looptri_len, &looptri_mask_active_len);
- }
-
- data_cp.tree = bvhtree_from_mesh_looptri_create_tree(0.0,
- tree_type,
- 6,
- data_cp.vert,
- data_cp.loop,
- data_cp.looptri,
- looptri_len,
- looptri_mask,
- looptri_mask_active_len);
-
- /* Save on cache for later use */
- /* printf("BVHTree built and saved on cache\n"); */
- bvhcache_insert(&mesh->runtime.bvh_cache, data_cp.tree, BVHTREE_FROM_LOOPTRI);
+ if (is_cached == false) {
+ const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
+ int looptri_len = BKE_mesh_runtime_looptri_len(mesh);
+
+ int looptri_mask_active_len = -1;
+ BLI_bitmap *looptri_mask = NULL;
+ if (bvh_cache_type == BVHTREE_FROM_LOOPTRI_NO_HIDDEN) {
+ looptri_mask = looptri_no_hidden_map_get(
+ mesh->mpoly, looptri_len, &looptri_mask_active_len);
}
- BLI_rw_mutex_unlock(&cache_rwlock);
+
+ tree = bvhtree_from_mesh_looptri_ex(data,
+ mesh->mvert,
+ false,
+ mesh->mloop,
+ false,
+ mlooptri,
+ looptri_len,
+ false,
+ looptri_mask,
+ looptri_mask_active_len,
+ 0.0,
+ tree_type,
+ 6,
+ bvh_cache_type,
+ bvh_cache);
+ }
+ else {
+ /* Setup BVHTreeFromMesh */
+ const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(mesh);
+ bvhtree_from_mesh_looptri_setup_data(
+ data, tree, true, mesh->mvert, false, mesh->mloop, false, mlooptri, false);
}
break;
case BVHTREE_FROM_EM_VERTS:
@@ -1369,23 +1468,113 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
break;
}
- if (data_cp.tree != NULL) {
+ if (data->tree != NULL) {
#ifdef DEBUG
- if (BLI_bvhtree_get_tree_type(data_cp.tree) != tree_type) {
+ if (BLI_bvhtree_get_tree_type(data->tree) != tree_type) {
printf("tree_type %d obtained instead of %d\n",
- BLI_bvhtree_get_tree_type(data_cp.tree),
+ BLI_bvhtree_get_tree_type(data->tree),
tree_type);
}
#endif
- data_cp.cached = true;
- memcpy(data, &data_cp, sizeof(*data));
+ BLI_assert(data->cached);
}
else {
- free_bvhtree_from_mesh(&data_cp);
+ free_bvhtree_from_mesh(data);
memset(data, 0, sizeof(*data));
}
- return data_cp.tree;
+ return tree;
+}
+
+/**
+ * Builds or queries a bvhcache for the cache bvhtree of the request type.
+ */
+BVHTree *BKE_bvhtree_from_editmesh_get(BVHTreeFromEditMesh *data,
+ struct BMEditMesh *em,
+ const int tree_type,
+ const int bvh_cache_type,
+ BVHCache **bvh_cache)
+{
+ BVHTree *tree = NULL;
+ bool is_cached = false;
+
+ memset(data, 0, sizeof(*data));
+
+ if (bvh_cache) {
+ BLI_rw_mutex_lock(&cache_rwlock, THREAD_LOCK_READ);
+ is_cached = bvhcache_find(*bvh_cache, bvh_cache_type, &tree);
+ BLI_rw_mutex_unlock(&cache_rwlock);
+
+ if (is_cached && tree == NULL) {
+ return tree;
+ }
+ }
+ data->tree = tree;
+ data->em = em;
+ data->cached = is_cached;
+
+ switch (bvh_cache_type) {
+ case BVHTREE_FROM_EM_VERTS:
+ if (is_cached == false) {
+ tree = bvhtree_from_editmesh_verts_ex(
+ data, em, NULL, -1, 0.0f, tree_type, 6, bvh_cache_type, bvh_cache);
+ }
+ else {
+ data->nearest_callback = NULL;
+ data->raycast_callback = editmesh_verts_spherecast;
+ }
+ break;
+
+ case BVHTREE_FROM_EM_EDGES:
+ if (is_cached == false) {
+ tree = bvhtree_from_editmesh_edges_ex(
+ data, em, NULL, -1, 0.0f, tree_type, 6, bvh_cache_type, bvh_cache);
+ }
+ else {
+ /* Setup BVHTreeFromMesh */
+ data->nearest_callback = NULL; /* TODO */
+ data->raycast_callback = NULL; /* TODO */
+ }
+ break;
+
+ case BVHTREE_FROM_EM_LOOPTRI:
+ if (is_cached == false) {
+ tree = bvhtree_from_editmesh_looptri_ex(
+ data, em, NULL, -1, 0.0f, tree_type, 6, bvh_cache_type, bvh_cache);
+ }
+ else {
+ /* Setup BVHTreeFromMesh */
+ data->nearest_callback = editmesh_looptri_nearest_point;
+ data->raycast_callback = editmesh_looptri_spherecast;
+ }
+ break;
+ case BVHTREE_FROM_VERTS:
+ case BVHTREE_FROM_EDGES:
+ case BVHTREE_FROM_FACES:
+ case BVHTREE_FROM_LOOPTRI:
+ case BVHTREE_FROM_LOOPTRI_NO_HIDDEN:
+ case BVHTREE_FROM_LOOSEVERTS:
+ case BVHTREE_FROM_LOOSEEDGES:
+ BLI_assert(false);
+ break;
+ }
+
+ if (data->tree != NULL) {
+#ifdef DEBUG
+ if (BLI_bvhtree_get_tree_type(data->tree) != tree_type) {
+ printf("tree_type %d obtained instead of %d\n",
+ BLI_bvhtree_get_tree_type(data->tree),
+ tree_type);
+ }
+#endif
+ BLI_assert(data->cached);
+ }
+ else {
+ free_bvhtree_from_editmesh(data);
+ memset(data, 0, sizeof(*data));
+ }
+
+ return tree;
}
/** \} */
@@ -1471,12 +1660,13 @@ bool bvhcache_has_tree(const BVHCache *cache, const BVHTree *tree)
* as that will be done when the cache is freed.
*
* A call to this assumes that there was no previous cached tree of the given type
+ * \warning The #BVHTree can be NULL.
*/
void bvhcache_insert(BVHCache **cache_p, BVHTree *tree, int type)
{
BVHCacheItem *item = NULL;
- assert(bvhcache_find(*cache_p, type, &(BVHTree *){0}) == false);
+ BLI_assert(bvhcache_find(*cache_p, type, &(BVHTree *){0}) == false);
item = MEM_mallocN(sizeof(BVHCacheItem), "BVHCacheItem");
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c
index eb1e8311a12..a55b5dc7817 100644
--- a/source/blender/blenkernel/intern/cdderivedmesh.c
+++ b/source/blender/blenkernel/intern/cdderivedmesh.c
@@ -173,16 +173,6 @@ static void cdDM_getVertCo(DerivedMesh *dm, int index, float r_co[3])
copy_v3_v3(r_co, cddm->mvert[index].co);
}
-static void cdDM_getVertCos(DerivedMesh *dm, float (*r_cos)[3])
-{
- MVert *mv = CDDM_get_verts(dm);
- int i;
-
- for (i = 0; i < dm->numVertData; i++, mv++) {
- copy_v3_v3(r_cos[i], mv->co);
- }
-}
-
static void cdDM_getVertNo(DerivedMesh *dm, int index, float r_no[3])
{
CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
@@ -203,280 +193,6 @@ static const MeshElemMap *cdDM_getPolyMap(Object *ob, DerivedMesh *dm)
return cddm->pmap;
}
-static bool check_sculpt_object_deformed(Object *object, bool for_construction)
-{
- bool deformed = false;
-
- /* Active modifiers means extra deformation, which can't be handled correct
- * on birth of PBVH and sculpt "layer" levels, so use PBVH only for internal brush
- * stuff and show final DerivedMesh so user would see actual object shape.
- */
- deformed |= object->sculpt->modifiers_active;
-
- if (for_construction) {
- deformed |= object->sculpt->kb != NULL;
- }
- else {
- /* As in case with modifiers, we can't synchronize deformation made against
- * PBVH and non-locked keyblock, so also use PBVH only for brushes and
- * final DM to give final result to user.
- */
- deformed |= object->sculpt->kb && (object->shapeflag & OB_SHAPE_LOCK) == 0;
- }
-
- return deformed;
-}
-
-static bool can_pbvh_draw(Object *ob, DerivedMesh *dm)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- Mesh *me = ob->data;
- bool deformed = check_sculpt_object_deformed(ob, false);
-
- if (deformed) {
- return false;
- }
-
- return cddm->mvert == me->mvert || ob->sculpt->kb;
-}
-
-static PBVH *cdDM_getPBVH(Object *ob, DerivedMesh *dm)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- if (!ob) {
- cddm->pbvh = NULL;
- return NULL;
- }
-
- if (!ob->sculpt) {
- return NULL;
- }
-
- if (ob->sculpt->pbvh) {
- cddm->pbvh = ob->sculpt->pbvh;
- cddm->pbvh_draw = can_pbvh_draw(ob, dm);
- }
-
- /* Sculpting on a BMesh (dynamic-topology) gets a special PBVH */
- if (!cddm->pbvh && ob->sculpt->bm) {
- cddm->pbvh = BKE_pbvh_new();
- cddm->pbvh_draw = true;
-
- BKE_pbvh_build_bmesh(cddm->pbvh,
- ob->sculpt->bm,
- ob->sculpt->bm_smooth_shading,
- ob->sculpt->bm_log,
- ob->sculpt->cd_vert_node_offset,
- ob->sculpt->cd_face_node_offset);
-
- pbvh_show_diffuse_color_set(cddm->pbvh, ob->sculpt->show_diffuse_color);
- pbvh_show_mask_set(cddm->pbvh, ob->sculpt->show_mask);
- }
-
- /* always build pbvh from original mesh, and only use it for drawing if
- * this derivedmesh is just original mesh. it's the multires subsurf dm
- * that this is actually for, to support a pbvh on a modified mesh */
- if (!cddm->pbvh && ob->type == OB_MESH) {
- Mesh *me = BKE_object_get_original_mesh(ob);
- const int looptris_num = poly_to_tri_count(me->totpoly, me->totloop);
- MLoopTri *looptri;
- bool deformed;
-
- cddm->pbvh = BKE_pbvh_new();
- cddm->pbvh_draw = can_pbvh_draw(ob, dm);
-
- looptri = MEM_malloc_arrayN(looptris_num, sizeof(*looptri), __func__);
-
- BKE_mesh_recalc_looptri(me->mloop, me->mpoly, me->mvert, me->totloop, me->totpoly, looptri);
-
- BKE_pbvh_build_mesh(cddm->pbvh,
- me->mpoly,
- me->mloop,
- me->mvert,
- me->totvert,
- &me->vdata,
- &me->ldata,
- looptri,
- looptris_num);
-
- pbvh_show_diffuse_color_set(cddm->pbvh, ob->sculpt->show_diffuse_color);
- pbvh_show_mask_set(cddm->pbvh, ob->sculpt->show_mask);
-
- deformed = check_sculpt_object_deformed(ob, true);
-
- if (deformed && ob->derivedDeform) {
- DerivedMesh *deformdm = ob->derivedDeform;
- float(*vertCos)[3];
- int totvert;
-
- totvert = deformdm->getNumVerts(deformdm);
- vertCos = MEM_malloc_arrayN(totvert, sizeof(float[3]), "cdDM_getPBVH vertCos");
- deformdm->getVertCos(deformdm, vertCos);
- BKE_pbvh_apply_vertCos(cddm->pbvh, vertCos, totvert);
- MEM_freeN(vertCos);
- }
- }
-
- return cddm->pbvh;
-}
-
-static void cdDM_foreachMappedVert(DerivedMesh *dm,
- void (*func)(void *userData,
- int index,
- const float co[3],
- const float no_f[3],
- const short no_s[3]),
- void *userData,
- DMForeachFlag flag)
-{
- MVert *mv = CDDM_get_verts(dm);
- const int *index = DM_get_vert_data_layer(dm, CD_ORIGINDEX);
- int i;
-
- if (index) {
- for (i = 0; i < dm->numVertData; i++, mv++) {
- const short *no = (flag & DM_FOREACH_USE_NORMAL) ? mv->no : NULL;
- const int orig = *index++;
- if (orig == ORIGINDEX_NONE) {
- continue;
- }
- func(userData, orig, mv->co, NULL, no);
- }
- }
- else {
- for (i = 0; i < dm->numVertData; i++, mv++) {
- const short *no = (flag & DM_FOREACH_USE_NORMAL) ? mv->no : NULL;
- func(userData, i, mv->co, NULL, no);
- }
- }
-}
-
-static void cdDM_foreachMappedEdge(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float v0co[3], const float v1co[3]),
- void *userData)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- MVert *mv = cddm->mvert;
- MEdge *med = cddm->medge;
- int i, orig, *index = DM_get_edge_data_layer(dm, CD_ORIGINDEX);
-
- for (i = 0; i < dm->numEdgeData; i++, med++) {
- if (index) {
- orig = *index++;
- if (orig == ORIGINDEX_NONE) {
- continue;
- }
- func(userData, orig, mv[med->v1].co, mv[med->v2].co);
- }
- else {
- func(userData, i, mv[med->v1].co, mv[med->v2].co);
- }
- }
-}
-
-static void cdDM_foreachMappedLoop(DerivedMesh *dm,
- void (*func)(void *userData,
- int vertex_index,
- int face_index,
- const float co[3],
- const float no[3]),
- void *userData,
- DMForeachFlag flag)
-{
- /* We can't use dm->getLoopDataLayout(dm) here,
- * we want to always access dm->loopData, EditDerivedBMesh would
- * return loop data from bmesh itself. */
- const float(*lnors)[3] = (flag & DM_FOREACH_USE_NORMAL) ? DM_get_loop_data_layer(dm, CD_NORMAL) :
- NULL;
-
- const MVert *mv = CDDM_get_verts(dm);
- const MLoop *ml = CDDM_get_loops(dm);
- const MPoly *mp = CDDM_get_polys(dm);
- const int *v_index = DM_get_vert_data_layer(dm, CD_ORIGINDEX);
- const int *f_index = DM_get_poly_data_layer(dm, CD_ORIGINDEX);
- int p_idx, i;
-
- for (p_idx = 0; p_idx < dm->numPolyData; ++p_idx, ++mp) {
- for (i = 0; i < mp->totloop; ++i, ++ml) {
- const int v_idx = v_index ? v_index[ml->v] : ml->v;
- const int f_idx = f_index ? f_index[p_idx] : p_idx;
- const float *no = lnors ? *lnors++ : NULL;
- if (!ELEM(ORIGINDEX_NONE, v_idx, f_idx)) {
- func(userData, v_idx, f_idx, mv[ml->v].co, no);
- }
- }
- }
-}
-
-static void cdDM_foreachMappedFaceCenter(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float cent[3], const float no[3]),
- void *userData,
- DMForeachFlag flag)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- MVert *mvert = cddm->mvert;
- MPoly *mp;
- MLoop *ml;
- int i, orig, *index;
-
- index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX);
- mp = cddm->mpoly;
- for (i = 0; i < dm->numPolyData; i++, mp++) {
- float cent[3];
- float *no, _no[3];
-
- if (index) {
- orig = *index++;
- if (orig == ORIGINDEX_NONE) {
- continue;
- }
- }
- else {
- orig = i;
- }
-
- ml = &cddm->mloop[mp->loopstart];
- BKE_mesh_calc_poly_center(mp, ml, mvert, cent);
-
- if (flag & DM_FOREACH_USE_NORMAL) {
- BKE_mesh_calc_poly_normal(mp, ml, mvert, (no = _no));
- }
- else {
- no = NULL;
- }
-
- func(userData, orig, cent, no);
- }
-}
-
-void CDDM_recalc_tessellation_ex(DerivedMesh *dm, const bool do_face_nor_cpy)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- dm->numTessFaceData = BKE_mesh_recalc_tessellation(&dm->faceData,
- &dm->loopData,
- &dm->polyData,
- cddm->mvert,
- dm->numTessFaceData,
- dm->numLoopData,
- dm->numPolyData,
- do_face_nor_cpy);
-
- cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
-
- /* Tessellation recreated faceData, and the active layer indices need to get re-propagated
- * from loops and polys to faces */
- CustomData_bmesh_update_active_layers(&dm->faceData, &dm->loopData);
-}
-
-void CDDM_recalc_tessellation(DerivedMesh *dm)
-{
- CDDM_recalc_tessellation_ex(dm, true);
-}
-
void CDDM_recalc_looptri(DerivedMesh *dm)
{
CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
@@ -549,25 +265,13 @@ static CDDerivedMesh *cdDM_create(const char *desc)
dm->getEdgeDataArray = DM_get_edge_data_layer;
dm->getTessFaceDataArray = DM_get_tessface_data_layer;
- dm->calcNormals = CDDM_calc_normals;
- dm->calcLoopNormals = CDDM_calc_loop_normals;
- dm->calcLoopNormalsSpaceArray = CDDM_calc_loop_normals_spacearr;
- dm->calcLoopTangents = DM_calc_loop_tangents;
- dm->recalcTessellation = CDDM_recalc_tessellation;
dm->recalcLoopTri = CDDM_recalc_looptri;
- dm->getVertCos = cdDM_getVertCos;
dm->getVertCo = cdDM_getVertCo;
dm->getVertNo = cdDM_getVertNo;
- dm->getPBVH = cdDM_getPBVH;
dm->getPolyMap = cdDM_getPolyMap;
- dm->foreachMappedVert = cdDM_foreachMappedVert;
- dm->foreachMappedEdge = cdDM_foreachMappedEdge;
- dm->foreachMappedLoop = cdDM_foreachMappedLoop;
- dm->foreachMappedFaceCenter = cdDM_foreachMappedFaceCenter;
-
dm->release = cdDM_release;
return cddm;
@@ -666,123 +370,12 @@ DerivedMesh *CDDM_from_mesh_ex(Mesh *mesh,
return dm;
}
-DerivedMesh *CDDM_from_curve(Object *ob)
-{
- ListBase disp = {NULL, NULL};
-
- if (ob->runtime.curve_cache) {
- disp = ob->runtime.curve_cache->disp;
- }
-
- return CDDM_from_curve_displist(ob, &disp);
-}
-
-DerivedMesh *CDDM_from_curve_displist(Object *ob, ListBase *dispbase)
-{
- Curve *cu = (Curve *)ob->data;
- DerivedMesh *dm;
- CDDerivedMesh *cddm;
- MVert *allvert;
- MEdge *alledge;
- MLoop *allloop;
- MPoly *allpoly;
- MLoopUV *alluv = NULL;
- int totvert, totedge, totloop, totpoly;
- bool use_orco_uv = (cu->flag & CU_UV_ORCO) != 0;
-
- if (BKE_mesh_nurbs_displist_to_mdata(ob,
- dispbase,
- &allvert,
- &totvert,
- &alledge,
- &totedge,
- &allloop,
- &allpoly,
- (use_orco_uv) ? &alluv : NULL,
- &totloop,
- &totpoly) != 0) {
- /* Error initializing mdata. This often happens when curve is empty */
- return CDDM_new(0, 0, 0, 0, 0);
- }
-
- dm = CDDM_new(totvert, totedge, 0, totloop, totpoly);
- dm->deformedOnly = 1;
- dm->dirty |= DM_DIRTY_NORMALS;
-
- cddm = (CDDerivedMesh *)dm;
-
- memcpy(cddm->mvert, allvert, totvert * sizeof(MVert));
- memcpy(cddm->medge, alledge, totedge * sizeof(MEdge));
- memcpy(cddm->mloop, allloop, totloop * sizeof(MLoop));
- memcpy(cddm->mpoly, allpoly, totpoly * sizeof(MPoly));
-
- if (alluv) {
- const char *uvname = "Orco";
- CustomData_add_layer_named(&cddm->dm.loopData, CD_MLOOPUV, CD_ASSIGN, alluv, totloop, uvname);
- }
-
- MEM_freeN(allvert);
- MEM_freeN(alledge);
- MEM_freeN(allloop);
- MEM_freeN(allpoly);
-
- return dm;
-}
-
-static void loops_to_customdata_corners(
- BMesh *bm, CustomData *facedata, int cdindex, const BMLoop *l3[3], int numCol, int numUV)
-{
- const BMLoop *l;
- // BMFace *f = l3[0]->f;
- MTFace *texface;
- MCol *mcol;
- MLoopCol *mloopcol;
- MLoopUV *mloopuv;
- int i, j, hasPCol = CustomData_has_layer(&bm->ldata, CD_PREVIEW_MLOOPCOL);
-
- for (i = 0; i < numUV; i++) {
- texface = CustomData_get_n(facedata, CD_MTFACE, cdindex, i);
-
- for (j = 0; j < 3; j++) {
- l = l3[j];
- mloopuv = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPUV, i);
- copy_v2_v2(texface->uv[j], mloopuv->uv);
- }
- }
-
- for (i = 0; i < numCol; i++) {
- mcol = CustomData_get_n(facedata, CD_MCOL, cdindex, i);
-
- for (j = 0; j < 3; j++) {
- l = l3[j];
- mloopcol = CustomData_bmesh_get_n(&bm->ldata, l->head.data, CD_MLOOPCOL, i);
- MESH_MLOOPCOL_TO_MCOL(mloopcol, &mcol[j]);
- }
- }
-
- if (hasPCol) {
- mcol = CustomData_get(facedata, cdindex, CD_PREVIEW_MCOL);
-
- for (j = 0; j < 3; j++) {
- l = l3[j];
- mloopcol = CustomData_bmesh_get(&bm->ldata, l->head.data, CD_PREVIEW_MLOOPCOL);
- MESH_MLOOPCOL_TO_MCOL(mloopcol, &mcol[j]);
- }
- }
-}
-
/* TODO(campbell): remove, use BKE_mesh_from_bmesh_for_eval_nomain instead. */
/* used for both editbmesh and bmesh */
-static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm,
- const bool use_mdisps,
- /* EditBMesh vars for use_tessface */
- const bool use_tessface,
- const int em_tottri,
- const BMLoop *(*em_looptris)[3])
+static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, const bool use_mdisps)
{
- DerivedMesh *dm = CDDM_new(
- bm->totvert, bm->totedge, use_tessface ? em_tottri : 0, bm->totloop, bm->totface);
+ DerivedMesh *dm = CDDM_new(bm->totvert, bm->totedge, 0, bm->totloop, bm->totface);
CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
BMIter iter;
@@ -791,11 +384,8 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm,
BMFace *efa;
MVert *mvert = cddm->mvert;
MEdge *medge = cddm->medge;
- MFace *mface = cddm->mface;
MLoop *mloop = cddm->mloop;
MPoly *mpoly = cddm->mpoly;
- int numCol = CustomData_number_of_layers(&bm->ldata, CD_MLOOPCOL);
- int numUV = CustomData_number_of_layers(&bm->ldata, CD_MLOOPUV);
int *index, add_orig;
CustomData_MeshMasks mask = {0};
unsigned int i, j;
@@ -822,11 +412,6 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm,
CustomData_merge(&bm->ldata, &dm->loopData, mask.lmask, CD_CALLOC, dm->numLoopData);
CustomData_merge(&bm->pdata, &dm->polyData, mask.pmask, CD_CALLOC, dm->numPolyData);
- /* add tessellation mface layers */
- if (use_tessface) {
- CustomData_from_bmeshpoly(&dm->faceData, &dm->loopData, em_tottri);
- }
-
index = dm->getVertDataArray(dm, CD_ORIGINDEX);
BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
@@ -885,32 +470,6 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm,
}
bm->elem_index_dirty &= ~BM_EDGE;
- /* avoid this where possiblem, takes extra memory */
- if (use_tessface) {
-
- BM_mesh_elem_index_ensure(bm, BM_FACE);
-
- index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
- for (i = 0; i < dm->numTessFaceData; i++) {
- MFace *mf = &mface[i];
- const BMLoop **l = em_looptris[i];
- efa = l[0]->f;
-
- mf->v1 = BM_elem_index_get(l[0]->v);
- mf->v2 = BM_elem_index_get(l[1]->v);
- mf->v3 = BM_elem_index_get(l[2]->v);
- mf->v4 = 0;
- mf->mat_nr = efa->mat_nr;
- mf->flag = BM_face_flag_to_mflag(efa);
-
- /* map mfaces to polygons in the same cddm intentionally */
- *index++ = BM_elem_index_get(efa);
-
- loops_to_customdata_corners(bm, &dm->faceData, i, l, numCol, numUV);
- test_index_face(mf, &dm->faceData, i, 3);
- }
- }
-
index = CustomData_get_layer(&dm->polyData, CD_ORIGINDEX);
j = 0;
BM_ITER_MESH_INDEX (efa, &iter, bm, BM_FACES_OF_MESH, i) {
@@ -950,24 +509,9 @@ static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm,
return dm;
}
-struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, const bool use_mdisps)
+DerivedMesh *CDDM_from_editbmesh(BMEditMesh *em, const bool use_mdisps)
{
- return cddm_from_bmesh_ex(bm,
- use_mdisps,
- false,
- /* these vars are for editmesh only */
- 0,
- NULL);
-}
-
-DerivedMesh *CDDM_from_editbmesh(BMEditMesh *em, const bool use_mdisps, const bool use_tessface)
-{
- return cddm_from_bmesh_ex(em->bm,
- use_mdisps,
- /* editmesh */
- use_tessface,
- em->tottri,
- (const BMLoop *(*)[3])em->looptris);
+ return cddm_from_bmesh_ex(em->bm, use_mdisps);
}
DerivedMesh *CDDM_copy(DerivedMesh *source)
@@ -1016,366 +560,11 @@ DerivedMesh *CDDM_copy(DerivedMesh *source)
return dm;
}
-/* note, the CD_ORIGINDEX layers are all 0, so if there is a direct
- * relationship between mesh data this needs to be set by the caller. */
-DerivedMesh *CDDM_from_template_ex(DerivedMesh *source,
- int numVerts,
- int numEdges,
- int numTessFaces,
- int numLoops,
- int numPolys,
- const CustomData_MeshMasks *mask)
-{
- 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);
- source->getPolyDataArray(source, CD_ORIGINDEX);
-
- /* this does a copy of all non mvert/medge/mface layers */
- DM_from_template_ex(
- dm, source, DM_TYPE_CDDM, numVerts, numEdges, numTessFaces, numLoops, numPolys, mask);
-
- /* now add mvert/medge/mface layers */
- CustomData_add_layer(&dm->vertData, CD_MVERT, CD_CALLOC, NULL, numVerts);
- CustomData_add_layer(&dm->edgeData, CD_MEDGE, CD_CALLOC, NULL, numEdges);
- CustomData_add_layer(&dm->faceData, CD_MFACE, CD_CALLOC, NULL, numTessFaces);
- CustomData_add_layer(&dm->loopData, CD_MLOOP, CD_CALLOC, NULL, numLoops);
- CustomData_add_layer(&dm->polyData, CD_MPOLY, CD_CALLOC, NULL, numPolys);
-
- if (!CustomData_get_layer(&dm->vertData, CD_ORIGINDEX)) {
- CustomData_add_layer(&dm->vertData, CD_ORIGINDEX, CD_CALLOC, NULL, numVerts);
- }
- if (!CustomData_get_layer(&dm->edgeData, CD_ORIGINDEX)) {
- CustomData_add_layer(&dm->edgeData, CD_ORIGINDEX, CD_CALLOC, NULL, numEdges);
- }
- if (!CustomData_get_layer(&dm->faceData, CD_ORIGINDEX)) {
- CustomData_add_layer(&dm->faceData, CD_ORIGINDEX, CD_CALLOC, NULL, numTessFaces);
- }
-
- cddm->mvert = CustomData_get_layer(&dm->vertData, CD_MVERT);
- cddm->medge = CustomData_get_layer(&dm->edgeData, CD_MEDGE);
- cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
- cddm->mloop = CustomData_get_layer(&dm->loopData, CD_MLOOP);
- cddm->mpoly = CustomData_get_layer(&dm->polyData, CD_MPOLY);
-
- return dm;
-}
-DerivedMesh *CDDM_from_template(
- DerivedMesh *source, int numVerts, int numEdges, int numTessFaces, int numLoops, int numPolys)
-{
- return CDDM_from_template_ex(
- source, numVerts, numEdges, numTessFaces, numLoops, numPolys, &CD_MASK_DERIVEDMESH);
-}
-
-void CDDM_apply_vert_coords(DerivedMesh *dm, float (*vertCoords)[3])
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- MVert *vert;
- int i;
-
- /* this will just return the pointer if it wasn't a referenced layer */
- vert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData);
- cddm->mvert = vert;
-
- for (i = 0; i < dm->numVertData; ++i, ++vert) {
- copy_v3_v3(vert->co, vertCoords[i]);
- }
-
- cddm->dm.dirty |= DM_DIRTY_NORMALS;
-}
-
-void CDDM_apply_vert_normals(DerivedMesh *dm, short (*vertNormals)[3])
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- MVert *vert;
- int i;
-
- /* this will just return the pointer if it wasn't a referenced layer */
- vert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData);
- cddm->mvert = vert;
-
- for (i = 0; i < dm->numVertData; ++i, ++vert) {
- copy_v3_v3_short(vert->no, vertNormals[i]);
- }
-
- cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
-}
-
-void CDDM_calc_normals_mapping_ex(DerivedMesh *dm, const bool only_face_normals)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- float(*face_nors)[3] = NULL;
-
- if (dm->numVertData == 0) {
- cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
- return;
- }
-
- /* now we skip calculating vertex normals for referenced layer,
- * no need to duplicate verts.
- * WATCH THIS, bmesh only change!,
- * need to take care of the side effects here - campbell */
-#if 0
- /* we don't want to overwrite any referenced layers */
- cddm->mvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData);
-#endif
-
-#if 0
- if (dm->numTessFaceData == 0) {
- /* No tessellation on this mesh yet, need to calculate one.
- *
- * Important not to update face normals from polys since it
- * interferes with assigning the new normal layer in the following code.
- */
- CDDM_recalc_tessellation_ex(dm, false);
- }
- else {
- /* A tessellation already exists, it should always have a CD_ORIGINDEX */
- BLI_assert(CustomData_has_layer(&dm->faceData, CD_ORIGINDEX));
- CustomData_free_layers(&dm->faceData, CD_NORMAL, dm->numTessFaceData);
- }
-#endif
-
- face_nors = MEM_malloc_arrayN(dm->numPolyData, sizeof(*face_nors), "face_nors");
-
- /* calculate face normals */
- BKE_mesh_calc_normals_poly(cddm->mvert,
- NULL,
- dm->numVertData,
- CDDM_get_loops(dm),
- CDDM_get_polys(dm),
- dm->numLoopData,
- dm->numPolyData,
- face_nors,
- only_face_normals);
-
- CustomData_add_layer(&dm->polyData, CD_NORMAL, CD_ASSIGN, face_nors, dm->numPolyData);
-
- cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
-}
-
-void CDDM_calc_normals_mapping(DerivedMesh *dm)
-{
- /* use this to skip calculating normals on original vert's, this may need to be changed */
- const bool only_face_normals = CustomData_is_referenced_layer(&dm->vertData, CD_MVERT);
-
- CDDM_calc_normals_mapping_ex(dm, only_face_normals);
-}
-
-#if 0
-/* bmesh note: this matches what we have in trunk */
-void CDDM_calc_normals(DerivedMesh *dm)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
- float(*poly_nors)[3];
-
- if (dm->numVertData == 0) {
- return;
- }
-
- /* we don't want to overwrite any referenced layers */
- cddm->mvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData);
-
- /* fill in if it exists */
- poly_nors = CustomData_get_layer(&dm->polyData, CD_NORMAL);
- if (!poly_nors) {
- poly_nors = CustomData_add_layer(&dm->polyData, CD_NORMAL, CD_CALLOC, NULL, dm->numPolyData);
- }
-
- BKE_mesh_calc_normals_poly(cddm->mvert,
- dm->numVertData,
- CDDM_get_loops(dm),
- CDDM_get_polys(dm),
- dm->numLoopData,
- dm->numPolyData,
- poly_nors,
- false);
-
- cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
-}
-#else
-
-/* poly normal layer is now only for final display */
-void CDDM_calc_normals(DerivedMesh *dm)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- /* we don't want to overwrite any referenced layers */
- cddm->mvert = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, dm->numVertData);
-
- BKE_mesh_calc_normals_poly(cddm->mvert,
- NULL,
- dm->numVertData,
- CDDM_get_loops(dm),
- CDDM_get_polys(dm),
- dm->numLoopData,
- dm->numPolyData,
- NULL,
- false);
-
- cddm->dm.dirty &= ~DM_DIRTY_NORMALS;
-}
-
-#endif
-
-void CDDM_calc_loop_normals(DerivedMesh *dm, const bool use_split_normals, const float split_angle)
-{
- CDDM_calc_loop_normals_spacearr(dm, use_split_normals, split_angle, NULL);
-}
-
/* #define DEBUG_CLNORS */
#ifdef DEBUG_CLNORS
# include "BLI_linklist.h"
#endif
-void CDDM_calc_loop_normals_spacearr(DerivedMesh *dm,
- const bool use_split_normals,
- const float split_angle,
- MLoopNorSpaceArray *r_lnors_spacearr)
-{
- MVert *mverts = dm->getVertArray(dm);
- MEdge *medges = dm->getEdgeArray(dm);
- MLoop *mloops = dm->getLoopArray(dm);
- MPoly *mpolys = dm->getPolyArray(dm);
-
- CustomData *ldata, *pdata;
-
- float(*lnors)[3];
- short(*clnor_data)[2];
- float(*pnors)[3];
-
- const int numVerts = dm->getNumVerts(dm);
- const int numEdges = dm->getNumEdges(dm);
- const int numLoops = dm->getNumLoops(dm);
- const int numPolys = dm->getNumPolys(dm);
-
- ldata = dm->getLoopDataLayout(dm);
- if (CustomData_has_layer(ldata, CD_NORMAL)) {
- lnors = CustomData_get_layer(ldata, CD_NORMAL);
- }
- else {
- lnors = CustomData_add_layer(ldata, CD_NORMAL, CD_CALLOC, NULL, numLoops);
- }
-
- /* Compute poly (always needed) and vert normals. */
- /* Note we can't use DM_ensure_normals, since it won't keep computed poly nors... */
- pdata = dm->getPolyDataLayout(dm);
- pnors = CustomData_get_layer(pdata, CD_NORMAL);
- if (!pnors) {
- pnors = CustomData_add_layer(pdata, CD_NORMAL, CD_CALLOC, NULL, numPolys);
- }
- BKE_mesh_calc_normals_poly(mverts,
- NULL,
- numVerts,
- mloops,
- mpolys,
- numLoops,
- numPolys,
- pnors,
- (dm->dirty & DM_DIRTY_NORMALS) ? false : true);
-
- dm->dirty &= ~DM_DIRTY_NORMALS;
-
- clnor_data = CustomData_get_layer(ldata, CD_CUSTOMLOOPNORMAL);
-
- BKE_mesh_normals_loop_split(mverts,
- numVerts,
- medges,
- numEdges,
- mloops,
- lnors,
- numLoops,
- mpolys,
- (const float(*)[3])pnors,
- numPolys,
- use_split_normals,
- split_angle,
- r_lnors_spacearr,
- clnor_data,
- NULL);
-#ifdef DEBUG_CLNORS
- if (r_lnors_spacearr) {
- int i;
- for (i = 0; i < numLoops; i++) {
- if (r_lnors_spacearr->lspacearr[i]->ref_alpha != 0.0f) {
- LinkNode *loops = r_lnors_spacearr->lspacearr[i]->loops;
- printf("Loop %d uses lnor space %p:\n", i, r_lnors_spacearr->lspacearr[i]);
- print_v3("\tfinal lnor", lnors[i]);
- print_v3("\tauto lnor", r_lnors_spacearr->lspacearr[i]->vec_lnor);
- print_v3("\tref_vec", r_lnors_spacearr->lspacearr[i]->vec_ref);
- printf("\talpha: %f\n\tbeta: %f\n\tloops: %p\n",
- r_lnors_spacearr->lspacearr[i]->ref_alpha,
- r_lnors_spacearr->lspacearr[i]->ref_beta,
- r_lnors_spacearr->lspacearr[i]->loops);
- printf("\t\t(shared with loops");
- while (loops) {
- printf(" %d", POINTER_AS_INT(loops->link));
- loops = loops->next;
- }
- printf(")\n");
- }
- else {
- printf("Loop %d has no lnor space\n", i);
- }
- }
- }
-#endif
-}
-
-void CDDM_lower_num_verts(DerivedMesh *dm, int numVerts)
-{
- BLI_assert(numVerts >= 0);
- if (numVerts < dm->numVertData) {
- CustomData_free_elem(&dm->vertData, numVerts, dm->numVertData - numVerts);
- }
-
- dm->numVertData = numVerts;
-}
-
-void CDDM_lower_num_edges(DerivedMesh *dm, int numEdges)
-{
- BLI_assert(numEdges >= 0);
- if (numEdges < dm->numEdgeData) {
- CustomData_free_elem(&dm->edgeData, numEdges, dm->numEdgeData - numEdges);
- }
-
- dm->numEdgeData = numEdges;
-}
-
-void CDDM_lower_num_tessfaces(DerivedMesh *dm, int numTessFaces)
-{
- BLI_assert(numTessFaces >= 0);
- if (numTessFaces < dm->numTessFaceData) {
- CustomData_free_elem(&dm->faceData, numTessFaces, dm->numTessFaceData - numTessFaces);
- }
-
- dm->numTessFaceData = numTessFaces;
-}
-
-void CDDM_lower_num_loops(DerivedMesh *dm, int numLoops)
-{
- BLI_assert(numLoops >= 0);
- if (numLoops < dm->numLoopData) {
- CustomData_free_elem(&dm->loopData, numLoops, dm->numLoopData - numLoops);
- }
-
- dm->numLoopData = numLoops;
-}
-
-void CDDM_lower_num_polys(DerivedMesh *dm, int numPolys)
-{
- BLI_assert(numPolys >= 0);
- if (numPolys < dm->numPolyData) {
- CustomData_free_elem(&dm->polyData, numPolys, dm->numPolyData - numPolys);
- }
-
- dm->numPolyData = numPolys;
-}
-
/* mesh element access functions */
MVert *CDDM_get_vert(DerivedMesh *dm, int index)
@@ -1429,58 +618,3 @@ MPoly *CDDM_get_polys(DerivedMesh *dm)
{
return ((CDDerivedMesh *)dm)->mpoly;
}
-
-void CDDM_set_mvert(DerivedMesh *dm, MVert *mvert)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- if (!CustomData_has_layer(&dm->vertData, CD_MVERT)) {
- CustomData_add_layer(&dm->vertData, CD_MVERT, CD_ASSIGN, mvert, dm->numVertData);
- }
-
- cddm->mvert = mvert;
-}
-
-void CDDM_set_medge(DerivedMesh *dm, MEdge *medge)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- if (!CustomData_has_layer(&dm->edgeData, CD_MEDGE)) {
- CustomData_add_layer(&dm->edgeData, CD_MEDGE, CD_ASSIGN, medge, dm->numEdgeData);
- }
-
- cddm->medge = medge;
-}
-
-void CDDM_set_mface(DerivedMesh *dm, MFace *mface)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- if (!CustomData_has_layer(&dm->faceData, CD_MFACE)) {
- CustomData_add_layer(&dm->faceData, CD_MFACE, CD_ASSIGN, mface, dm->numTessFaceData);
- }
-
- cddm->mface = mface;
-}
-
-void CDDM_set_mloop(DerivedMesh *dm, MLoop *mloop)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- if (!CustomData_has_layer(&dm->loopData, CD_MLOOP)) {
- CustomData_add_layer(&dm->loopData, CD_MLOOP, CD_ASSIGN, mloop, dm->numLoopData);
- }
-
- cddm->mloop = mloop;
-}
-
-void CDDM_set_mpoly(DerivedMesh *dm, MPoly *mpoly)
-{
- CDDerivedMesh *cddm = (CDDerivedMesh *)dm;
-
- if (!CustomData_has_layer(&dm->polyData, CD_MPOLY)) {
- CustomData_add_layer(&dm->polyData, CD_MPOLY, CD_ASSIGN, mpoly, dm->numPolyData);
- }
-
- cddm->mpoly = mpoly;
-}
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c
index 25f2797915a..2031576190e 100644
--- a/source/blender/blenkernel/intern/collection.c
+++ b/source/blender/blenkernel/intern/collection.c
@@ -239,8 +239,9 @@ static Collection *collection_duplicate_recursive(Main *bmain,
if (!do_hierarchy || collection_old->id.newid == NULL) {
BKE_id_copy(bmain, &collection_old->id, (ID **)&collection_new);
- id_us_min(
- &collection_new->id); /* Copying add one user by default, need to get rid of that one. */
+
+ /* Copying add one user by default, need to get rid of that one. */
+ id_us_min(&collection_new->id);
if (do_hierarchy) {
ID_NEW_SET(collection_old, collection_new);
diff --git a/source/blender/blenkernel/intern/colortools.c b/source/blender/blenkernel/intern/colortools.c
index aa5f74c6297..b129bf14bb8 100644
--- a/source/blender/blenkernel/intern/colortools.c
+++ b/source/blender/blenkernel/intern/colortools.c
@@ -48,7 +48,7 @@
/* ***************** operations on full struct ************* */
-void curvemapping_set_defaults(
+void BKE_curvemapping_set_defaults(
CurveMapping *cumap, int tot, float minx, float miny, float maxx, float maxy)
{
int a;
@@ -84,18 +84,18 @@ void curvemapping_set_defaults(
cumap->changed_timestamp = 0;
}
-CurveMapping *curvemapping_add(int tot, float minx, float miny, float maxx, float maxy)
+CurveMapping *BKE_curvemapping_add(int tot, float minx, float miny, float maxx, float maxy)
{
CurveMapping *cumap;
cumap = MEM_callocN(sizeof(CurveMapping), "new curvemap");
- curvemapping_set_defaults(cumap, tot, minx, miny, maxx, maxy);
+ BKE_curvemapping_set_defaults(cumap, tot, minx, miny, maxx, maxy);
return cumap;
}
-void curvemapping_free_data(CurveMapping *cumap)
+void BKE_curvemapping_free_data(CurveMapping *cumap)
{
int a;
@@ -115,15 +115,15 @@ void curvemapping_free_data(CurveMapping *cumap)
}
}
-void curvemapping_free(CurveMapping *cumap)
+void BKE_curvemapping_free(CurveMapping *cumap)
{
if (cumap) {
- curvemapping_free_data(cumap);
+ BKE_curvemapping_free_data(cumap);
MEM_freeN(cumap);
}
}
-void curvemapping_copy_data(CurveMapping *target, const CurveMapping *cumap)
+void BKE_curvemapping_copy_data(CurveMapping *target, const CurveMapping *cumap)
{
int a;
@@ -142,17 +142,19 @@ void curvemapping_copy_data(CurveMapping *target, const CurveMapping *cumap)
}
}
-CurveMapping *curvemapping_copy(const CurveMapping *cumap)
+CurveMapping *BKE_curvemapping_copy(const CurveMapping *cumap)
{
if (cumap) {
CurveMapping *cumapn = MEM_dupallocN(cumap);
- curvemapping_copy_data(cumapn, cumap);
+ BKE_curvemapping_copy_data(cumapn, cumap);
return cumapn;
}
return NULL;
}
-void curvemapping_set_black_white_ex(const float black[3], const float white[3], float r_bwmul[3])
+void BKE_curvemapping_set_black_white_ex(const float black[3],
+ const float white[3],
+ float r_bwmul[3])
{
int a;
@@ -162,7 +164,9 @@ void curvemapping_set_black_white_ex(const float black[3], const float white[3],
}
}
-void curvemapping_set_black_white(CurveMapping *cumap, const float black[3], const float white[3])
+void BKE_curvemapping_set_black_white(CurveMapping *cumap,
+ const float black[3],
+ const float white[3])
{
if (white) {
copy_v3_v3(cumap->white, white);
@@ -171,15 +175,15 @@ void curvemapping_set_black_white(CurveMapping *cumap, const float black[3], con
copy_v3_v3(cumap->black, black);
}
- curvemapping_set_black_white_ex(cumap->black, cumap->white, cumap->bwmul);
+ BKE_curvemapping_set_black_white_ex(cumap->black, cumap->white, cumap->bwmul);
cumap->changed_timestamp++;
}
/* ***************** operations on single curve ************* */
-/* ********** NOTE: requires curvemapping_changed() call after ******** */
+/* ********** NOTE: requires BKE_curvemapping_changed() call after ******** */
/* remove specified point */
-bool curvemap_remove_point(CurveMap *cuma, CurveMapPoint *point)
+bool BKE_curvemap_remove_point(CurveMap *cuma, CurveMapPoint *point)
{
CurveMapPoint *cmp;
int a, b, removed = 0;
@@ -209,7 +213,7 @@ bool curvemap_remove_point(CurveMap *cuma, CurveMapPoint *point)
}
/* removes with flag set */
-void curvemap_remove(CurveMap *cuma, const short flag)
+void BKE_curvemap_remove(CurveMap *cuma, const short flag)
{
CurveMapPoint *cmp = MEM_mallocN((cuma->totpoint) * sizeof(CurveMapPoint), "curve points");
int a, b, removed = 0;
@@ -232,7 +236,7 @@ void curvemap_remove(CurveMap *cuma, const short flag)
cuma->totpoint -= removed;
}
-CurveMapPoint *curvemap_insert(CurveMap *cuma, float x, float y)
+CurveMapPoint *BKE_curvemap_insert(CurveMap *cuma, float x, float y)
{
CurveMapPoint *cmp = MEM_callocN((cuma->totpoint + 1) * sizeof(CurveMapPoint), "curve points");
CurveMapPoint *newcmp = NULL;
@@ -266,7 +270,7 @@ CurveMapPoint *curvemap_insert(CurveMap *cuma, float x, float y)
return newcmp;
}
-void curvemap_reset(CurveMap *cuma, const rctf *clipr, int preset, int slope)
+void BKE_curvemap_reset(CurveMap *cuma, const rctf *clipr, int preset, int slope)
{
if (cuma->curve) {
MEM_freeN(cuma->curve);
@@ -439,7 +443,7 @@ void curvemap_reset(CurveMap *cuma, const rctf *clipr, int preset, int slope)
/**
* \param type: eBezTriple_Handle
*/
-void curvemap_handle_set(CurveMap *cuma, int type)
+void BKE_curvemap_handle_set(CurveMap *cuma, int type)
{
int a;
@@ -800,7 +804,7 @@ static void curvemap_make_table(CurveMap *cuma, const rctf *clipr)
/* call when you do images etc, needs restore too. also verifies tables */
/* it uses a flag to prevent premul or free to happen twice */
-void curvemapping_premultiply(CurveMapping *cumap, int restore)
+void BKE_curvemapping_premultiply(CurveMapping *cumap, int restore)
{
int a;
@@ -841,7 +845,7 @@ void curvemapping_premultiply(CurveMapping *cumap, int restore)
for (a = 0; a < 3; a++) {
int b;
for (b = 0; b <= CM_TABLE; b++) {
- cumap->cm[a].table[b].y = curvemap_evaluateF(cumap->cm + 3, cumap->cm[a].table[b].y);
+ cumap->cm[a].table[b].y = BKE_curvemap_evaluateF(cumap->cm + 3, cumap->cm[a].table[b].y);
}
copy_v2_v2(cumap->cm[a].premul_ext_in, cumap->cm[a].ext_in);
@@ -871,7 +875,7 @@ static int sort_curvepoints(const void *a1, const void *a2)
/* ************************ more CurveMapping calls *************** */
/* note; only does current curvemap! */
-void curvemapping_changed(CurveMapping *cumap, const bool rem_doubles)
+void BKE_curvemapping_changed(CurveMapping *cumap, const bool rem_doubles)
{
CurveMap *cuma = cumap->cm + cumap->cur;
CurveMapPoint *cmp = cuma->curve;
@@ -942,20 +946,20 @@ void curvemapping_changed(CurveMapping *cumap, const bool rem_doubles)
}
}
if (a != cuma->totpoint - 1) {
- curvemap_remove(cuma, 2);
+ BKE_curvemap_remove(cuma, 2);
}
}
curvemap_make_table(cuma, clipr);
}
-void curvemapping_changed_all(CurveMapping *cumap)
+void BKE_curvemapping_changed_all(CurveMapping *cumap)
{
int a, cur = cumap->cur;
for (a = 0; a < CM_TOT; a++) {
if (cumap->cm[a].curve) {
cumap->cur = a;
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
}
}
@@ -963,7 +967,7 @@ void curvemapping_changed_all(CurveMapping *cumap)
}
/* table should be verified */
-float curvemap_evaluateF(const CurveMap *cuma, float value)
+float BKE_curvemap_evaluateF(const CurveMap *cuma, float value)
{
float fi;
int i;
@@ -990,10 +994,10 @@ float curvemap_evaluateF(const CurveMap *cuma, float value)
}
/* works with curve 'cur' */
-float curvemapping_evaluateF(const CurveMapping *cumap, int cur, float value)
+float BKE_curvemapping_evaluateF(const CurveMapping *cumap, int cur, float value)
{
const CurveMap *cuma = cumap->cm + cur;
- float val = curvemap_evaluateF(cuma, value);
+ float val = BKE_curvemap_evaluateF(cuma, value);
/* account for clipping */
if (cumap->flag & CUMA_DO_CLIP) {
@@ -1009,19 +1013,24 @@ float curvemapping_evaluateF(const CurveMapping *cumap, int cur, float value)
}
/* vector case */
-void curvemapping_evaluate3F(const CurveMapping *cumap, float vecout[3], const float vecin[3])
+void BKE_curvemapping_evaluate3F(const CurveMapping *cumap, float vecout[3], const float vecin[3])
{
- vecout[0] = curvemap_evaluateF(&cumap->cm[0], vecin[0]);
- vecout[1] = curvemap_evaluateF(&cumap->cm[1], vecin[1]);
- vecout[2] = curvemap_evaluateF(&cumap->cm[2], vecin[2]);
+ vecout[0] = BKE_curvemap_evaluateF(&cumap->cm[0], vecin[0]);
+ vecout[1] = BKE_curvemap_evaluateF(&cumap->cm[1], vecin[1]);
+ vecout[2] = BKE_curvemap_evaluateF(&cumap->cm[2], vecin[2]);
}
/* RGB case, no black/white points, no premult */
-void curvemapping_evaluateRGBF(const CurveMapping *cumap, float vecout[3], const float vecin[3])
+void BKE_curvemapping_evaluateRGBF(const CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3])
{
- vecout[0] = curvemap_evaluateF(&cumap->cm[0], curvemap_evaluateF(&cumap->cm[3], vecin[0]));
- vecout[1] = curvemap_evaluateF(&cumap->cm[1], curvemap_evaluateF(&cumap->cm[3], vecin[1]));
- vecout[2] = curvemap_evaluateF(&cumap->cm[2], curvemap_evaluateF(&cumap->cm[3], vecin[2]));
+ vecout[0] = BKE_curvemap_evaluateF(&cumap->cm[0],
+ BKE_curvemap_evaluateF(&cumap->cm[3], vecin[0]));
+ vecout[1] = BKE_curvemap_evaluateF(&cumap->cm[1],
+ BKE_curvemap_evaluateF(&cumap->cm[3], vecin[1]));
+ vecout[2] = BKE_curvemap_evaluateF(&cumap->cm[2],
+ BKE_curvemap_evaluateF(&cumap->cm[3], vecin[2]));
}
static void curvemapping_evaluateRGBF_filmlike(const CurveMapping *cumap,
@@ -1033,8 +1042,8 @@ static void curvemapping_evaluateRGBF_filmlike(const CurveMapping *cumap,
const float v1in = vecin[channel_offset[1]];
const float v2in = vecin[channel_offset[2]];
- const float v0 = curvemap_evaluateF(&cumap->cm[channel_offset[0]], v0in);
- const float v2 = curvemap_evaluateF(&cumap->cm[channel_offset[2]], v2in);
+ const float v0 = BKE_curvemap_evaluateF(&cumap->cm[channel_offset[0]], v0in);
+ const float v2 = BKE_curvemap_evaluateF(&cumap->cm[channel_offset[2]], v2in);
const float v1 = v2 + ((v0 - v2) * (v1in - v2in) / (v0in - v2in));
vecout[channel_offset[0]] = v0;
@@ -1042,20 +1051,20 @@ static void curvemapping_evaluateRGBF_filmlike(const CurveMapping *cumap,
vecout[channel_offset[2]] = v2;
}
-/** same as #curvemapping_evaluate_premulRGBF
+/** same as #BKE_curvemapping_evaluate_premulRGBF
* but black/bwmul are passed as args for the compositor
* where they can change per pixel.
*
- * Use in conjunction with #curvemapping_set_black_white_ex
+ * Use in conjunction with #BKE_curvemapping_set_black_white_ex
*
* \param black: Use instead of cumap->black
* \param bwmul: Use instead of cumap->bwmul
*/
-void curvemapping_evaluate_premulRGBF_ex(const CurveMapping *cumap,
- float vecout[3],
- const float vecin[3],
- const float black[3],
- const float bwmul[3])
+void BKE_curvemapping_evaluate_premulRGBF_ex(const CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3],
+ const float black[3],
+ const float bwmul[3])
{
const float r = (vecin[0] - black[0]) * bwmul[0];
const float g = (vecin[1] - black[1]) * bwmul[1];
@@ -1064,9 +1073,9 @@ void curvemapping_evaluate_premulRGBF_ex(const CurveMapping *cumap,
switch (cumap->tone) {
default:
case CURVE_TONE_STANDARD: {
- vecout[0] = curvemap_evaluateF(&cumap->cm[0], r);
- vecout[1] = curvemap_evaluateF(&cumap->cm[1], g);
- vecout[2] = curvemap_evaluateF(&cumap->cm[2], b);
+ vecout[0] = BKE_curvemap_evaluateF(&cumap->cm[0], r);
+ vecout[1] = BKE_curvemap_evaluateF(&cumap->cm[1], g);
+ vecout[2] = BKE_curvemap_evaluateF(&cumap->cm[2], b);
break;
}
case CURVE_TONE_FILMLIKE: {
@@ -1088,8 +1097,9 @@ void curvemapping_evaluate_premulRGBF_ex(const CurveMapping *cumap,
}
else {
/* Case 4: r >= g == b */
- copy_v2_fl2(
- vecout, curvemap_evaluateF(&cumap->cm[0], r), curvemap_evaluateF(&cumap->cm[1], g));
+ copy_v2_fl2(vecout,
+ BKE_curvemap_evaluateF(&cumap->cm[0], r),
+ BKE_curvemap_evaluateF(&cumap->cm[1], g));
vecout[2] = vecout[1];
}
}
@@ -1116,17 +1126,17 @@ void curvemapping_evaluate_premulRGBF_ex(const CurveMapping *cumap,
}
/* RGB with black/white points and premult. tables are checked */
-void curvemapping_evaluate_premulRGBF(const CurveMapping *cumap,
- float vecout[3],
- const float vecin[3])
+void BKE_curvemapping_evaluate_premulRGBF(const CurveMapping *cumap,
+ float vecout[3],
+ const float vecin[3])
{
- curvemapping_evaluate_premulRGBF_ex(cumap, vecout, vecin, cumap->black, cumap->bwmul);
+ BKE_curvemapping_evaluate_premulRGBF_ex(cumap, vecout, vecin, cumap->black, cumap->bwmul);
}
/* same as above, byte version */
-void curvemapping_evaluate_premulRGB(const CurveMapping *cumap,
- unsigned char vecout_byte[3],
- const unsigned char vecin_byte[3])
+void BKE_curvemapping_evaluate_premulRGB(const CurveMapping *cumap,
+ unsigned char vecout_byte[3],
+ const unsigned char vecin_byte[3])
{
float vecin[3], vecout[3];
@@ -1134,14 +1144,14 @@ void curvemapping_evaluate_premulRGB(const CurveMapping *cumap,
vecin[1] = (float)vecin_byte[1] / 255.0f;
vecin[2] = (float)vecin_byte[2] / 255.0f;
- curvemapping_evaluate_premulRGBF(cumap, vecout, vecin);
+ BKE_curvemapping_evaluate_premulRGBF(cumap, vecout, vecin);
vecout_byte[0] = unit_float_to_uchar_clamp(vecout[0]);
vecout_byte[1] = unit_float_to_uchar_clamp(vecout[1]);
vecout_byte[2] = unit_float_to_uchar_clamp(vecout[2]);
}
-int curvemapping_RGBA_does_something(const CurveMapping *cumap)
+int BKE_curvemapping_RGBA_does_something(const CurveMapping *cumap)
{
int a;
@@ -1187,7 +1197,7 @@ int curvemapping_RGBA_does_something(const CurveMapping *cumap)
return 0;
}
-void curvemapping_initialize(CurveMapping *cumap)
+void BKE_curvemapping_initialize(CurveMapping *cumap)
{
int a;
@@ -1202,7 +1212,7 @@ void curvemapping_initialize(CurveMapping *cumap)
}
}
-void curvemapping_table_RGBA(const CurveMapping *cumap, float **array, int *size)
+void BKE_curvemapping_table_RGBA(const CurveMapping *cumap, float **array, int *size)
{
int a;
@@ -1520,10 +1530,10 @@ static void scopes_update_finalize(void *__restrict userdata, void *__restrict u
}
}
-void scopes_update(Scopes *scopes,
- ImBuf *ibuf,
- const ColorManagedViewSettings *view_settings,
- const ColorManagedDisplaySettings *display_settings)
+void BKE_scopes_update(Scopes *scopes,
+ ImBuf *ibuf,
+ const ColorManagedViewSettings *view_settings,
+ const ColorManagedDisplaySettings *display_settings)
{
int a;
unsigned int nl, na, nr, ng, nb;
@@ -1685,7 +1695,7 @@ void scopes_update(Scopes *scopes,
scopes->ok = 1;
}
-void scopes_free(Scopes *scopes)
+void BKE_scopes_free(Scopes *scopes)
{
if (scopes->waveform_1) {
MEM_freeN(scopes->waveform_1);
@@ -1705,7 +1715,7 @@ void scopes_free(Scopes *scopes)
}
}
-void scopes_new(Scopes *scopes)
+void BKE_scopes_new(Scopes *scopes)
{
scopes->accuracy = 30.0;
scopes->hist.mode = HISTO_MODE_RGB;
@@ -1781,7 +1791,7 @@ void BKE_color_managed_view_settings_copy(ColorManagedViewSettings *new_settings
new_settings->gamma = settings->gamma;
if (settings->curve_mapping) {
- new_settings->curve_mapping = curvemapping_copy(settings->curve_mapping);
+ new_settings->curve_mapping = BKE_curvemapping_copy(settings->curve_mapping);
}
else {
new_settings->curve_mapping = NULL;
@@ -1791,7 +1801,7 @@ void BKE_color_managed_view_settings_copy(ColorManagedViewSettings *new_settings
void BKE_color_managed_view_settings_free(ColorManagedViewSettings *settings)
{
if (settings->curve_mapping) {
- curvemapping_free(settings->curve_mapping);
+ BKE_curvemapping_free(settings->curve_mapping);
}
}
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index 2cb98d8d90b..f536f21c3e5 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -89,7 +89,8 @@ struct bContext {
struct Scene *scene;
int recursion;
- int py_init; /* true if python is initialized */
+ /** True if python is initialized. */
+ bool py_init;
void *py_context;
} data;
};
@@ -212,11 +213,11 @@ void CTX_store_free_list(ListBase *contexts)
/* is python initialized? */
-int CTX_py_init_get(bContext *C)
+bool CTX_py_init_get(bContext *C)
{
return C->data.py_init;
}
-void CTX_py_init_set(bContext *C, int value)
+void CTX_py_init_set(bContext *C, bool value)
{
C->data.py_init = value;
}
diff --git a/source/blender/blenkernel/intern/crazyspace.c b/source/blender/blenkernel/intern/crazyspace.c
index 09bbc6c0d13..fcbebd24b4a 100644
--- a/source/blender/blenkernel/intern/crazyspace.c
+++ b/source/blender/blenkernel/intern/crazyspace.c
@@ -293,7 +293,7 @@ int BKE_crazyspace_get_first_deform_matrices_editbmesh(struct Depsgraph *depsgra
BLI_linklist_free((LinkNode *)datamasks, NULL);
me = BKE_mesh_from_editmesh_with_coords_thin_wrap(em, &data_mask, NULL);
- deformedVerts = editbmesh_get_vertex_cos(em, &numVerts);
+ deformedVerts = editbmesh_vert_coords_alloc(em, &numVerts);
defmats = MEM_mallocN(sizeof(*defmats) * numVerts, "defmats");
for (a = 0; a < numVerts; a++) {
@@ -383,7 +383,7 @@ int BKE_sculpt_get_first_deform_matrices(struct Depsgraph *depsgraph,
* state. */
Mesh *me = object_eval.data;
me_eval = BKE_mesh_copy_for_eval(me, true);
- deformedVerts = BKE_mesh_vertexCos_get(me, &numVerts);
+ deformedVerts = BKE_mesh_vert_coords_alloc(me, &numVerts);
defmats = MEM_callocN(sizeof(*defmats) * numVerts, "defmats");
for (a = 0; a < numVerts; a++) {
@@ -485,7 +485,7 @@ void BKE_crazyspace_build_sculpt(struct Depsgraph *depsgraph,
int a, numVerts;
Mesh *mesh = (Mesh *)object->data;
- *deformcos = BKE_mesh_vertexCos_get(mesh, &numVerts);
+ *deformcos = BKE_mesh_vert_coords_alloc(mesh, &numVerts);
*deformmats = MEM_callocN(sizeof(*(*deformmats)) * numVerts, "defmats");
for (a = 0; a < numVerts; a++) {
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index efdfa2c19bb..0126c261fa1 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -2737,8 +2737,10 @@ void BKE_curve_bevelList_make(Object *ob, ListBase *nurbs, bool for_render)
/* check if we will calculate tilt data */
do_tilt = CU_DO_TILT(cu, nu);
- do_radius = CU_DO_RADIUS(
- cu, nu); /* normal display uses the radius, better just to calculate them */
+
+ /* Normal display uses the radius, better just to calculate them. */
+ do_radius = CU_DO_RADIUS(cu, nu);
+
do_weight = true;
/* check we are a single point? also check we are not a surface and that the orderu is sane,
@@ -4604,18 +4606,13 @@ void BKE_nurb_direction_switch(Nurb *nu)
}
}
-float (*BKE_curve_nurbs_vertexCos_get(ListBase *lb, int *r_numVerts))[3]
+void BKE_curve_nurbs_vert_coords_get(ListBase *lb, float (*vert_coords)[3], int vert_len)
{
- int i, numVerts = *r_numVerts = BKE_nurbList_verts_count(lb);
- float *co, (*cos)[3] = MEM_malloc_arrayN(numVerts, sizeof(*cos), "cu_vcos");
- Nurb *nu;
-
- co = cos[0];
- for (nu = lb->first; nu; nu = nu->next) {
+ float *co = vert_coords[0];
+ for (Nurb *nu = lb->first; nu; nu = nu->next) {
if (nu->type == CU_BEZIER) {
BezTriple *bezt = nu->bezt;
-
- for (i = 0; i < nu->pntsu; i++, bezt++) {
+ for (int i = 0; i < nu->pntsu; i++, bezt++) {
copy_v3_v3(co, bezt->vec[0]);
co += 3;
copy_v3_v3(co, bezt->vec[1]);
@@ -4626,20 +4623,30 @@ float (*BKE_curve_nurbs_vertexCos_get(ListBase *lb, int *r_numVerts))[3]
}
else {
BPoint *bp = nu->bp;
-
- for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
+ for (int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
copy_v3_v3(co, bp->vec);
co += 3;
}
}
}
+ BLI_assert(co == vert_coords[vert_len]);
+}
- return cos;
+float (*BKE_curve_nurbs_vert_coords_alloc(ListBase *lb, int *r_vert_len))[3]
+{
+ const int vert_len = BKE_nurbList_verts_count(lb);
+ float(*vert_coords)[3] = MEM_malloc_arrayN(vert_len, sizeof(*vert_coords), __func__);
+ BKE_curve_nurbs_vert_coords_get(lb, vert_coords, vert_len);
+ *r_vert_len = vert_len;
+ return vert_coords;
}
-void BK_curve_nurbs_vertexCos_apply(ListBase *lb, float (*vertexCos)[3])
+void BKE_curve_nurbs_vert_coords_apply_with_mat4(ListBase *lb,
+ const float (*vert_coords)[3],
+ const float mat[4][4],
+ const bool constrain_2d)
{
- const float *co = vertexCos[0];
+ const float *co = vert_coords[0];
Nurb *nu;
int i;
@@ -4648,6 +4655,44 @@ void BK_curve_nurbs_vertexCos_apply(ListBase *lb, float (*vertexCos)[3])
BezTriple *bezt = nu->bezt;
for (i = 0; i < nu->pntsu; i++, bezt++) {
+ mul_v3_m4v3(bezt->vec[0], mat, co);
+ co += 3;
+ mul_v3_m4v3(bezt->vec[1], mat, co);
+ co += 3;
+ mul_v3_m4v3(bezt->vec[2], mat, co);
+ co += 3;
+ }
+ }
+ else {
+ BPoint *bp = nu->bp;
+
+ for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
+ mul_v3_m4v3(bp->vec, mat, co);
+ co += 3;
+ }
+ }
+
+ if (constrain_2d) {
+ if (nu->flag & CU_2D) {
+ BKE_nurb_test_2d(nu);
+ }
+ }
+
+ calchandlesNurb_intern(nu, true);
+ }
+}
+
+void BKE_curve_nurbs_vert_coords_apply(ListBase *lb,
+ const float (*vert_coords)[3],
+ const bool constrain_2d)
+{
+ const float *co = vert_coords[0];
+
+ for (Nurb *nu = lb->first; nu; nu = nu->next) {
+ if (nu->type == CU_BEZIER) {
+ BezTriple *bezt = nu->bezt;
+
+ for (int i = 0; i < nu->pntsu; i++, bezt++) {
copy_v3_v3(bezt->vec[0], co);
co += 3;
copy_v3_v3(bezt->vec[1], co);
@@ -4659,28 +4704,33 @@ void BK_curve_nurbs_vertexCos_apply(ListBase *lb, float (*vertexCos)[3])
else {
BPoint *bp = nu->bp;
- for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
+ for (int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
copy_v3_v3(bp->vec, co);
co += 3;
}
}
+ if (constrain_2d) {
+ if (nu->flag & CU_2D) {
+ BKE_nurb_test_2d(nu);
+ }
+ }
+
calchandlesNurb_intern(nu, true);
}
}
-float (*BKE_curve_nurbs_keyVertexCos_get(ListBase *lb, float *key))[3]
+float (*BKE_curve_nurbs_key_vert_coords_alloc(ListBase *lb, float *key, int *r_vert_len))[3]
{
- int i, numVerts = BKE_nurbList_verts_count(lb);
- float *co, (*cos)[3] = MEM_malloc_arrayN(numVerts, sizeof(*cos), "cu_vcos");
- Nurb *nu;
+ int vert_len = BKE_nurbList_verts_count(lb);
+ float(*cos)[3] = MEM_malloc_arrayN(vert_len, sizeof(*cos), __func__);
- co = cos[0];
- for (nu = lb->first; nu; nu = nu->next) {
+ float *co = cos[0];
+ for (Nurb *nu = lb->first; nu; nu = nu->next) {
if (nu->type == CU_BEZIER) {
BezTriple *bezt = nu->bezt;
- for (i = 0; i < nu->pntsu; i++, bezt++) {
+ for (int i = 0; i < nu->pntsu; i++, bezt++) {
copy_v3_v3(co, &key[0]);
co += 3;
copy_v3_v3(co, &key[3]);
@@ -4693,18 +4743,18 @@ float (*BKE_curve_nurbs_keyVertexCos_get(ListBase *lb, float *key))[3]
else {
BPoint *bp = nu->bp;
- for (i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
+ for (int i = 0; i < nu->pntsu * nu->pntsv; i++, bp++) {
copy_v3_v3(co, key);
co += 3;
key += KEYELEM_FLOAT_LEN_BPOINT;
}
}
}
-
+ *r_vert_len = vert_len;
return cos;
}
-void BKE_curve_nurbs_keyVertexTilts_apply(ListBase *lb, float *key)
+void BKE_curve_nurbs_key_vert_tilts_apply(ListBase *lb, float *key)
{
Nurb *nu;
int i;
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 3c7ac5d8d2e..db0ed0dc0fb 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -294,7 +294,7 @@ static void layerInterp_mdeformvert(const void **sources,
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
/* now we know how many unique deform weights there are, so realloc */
if (dvert->dw && (dvert->totweight == totweight)) {
@@ -441,7 +441,7 @@ static void layerInterp_tface(
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
*tf = *(MTFace *)(*sources);
memcpy(tf->uv, uv, sizeof(tf->uv));
}
@@ -548,7 +548,7 @@ static void layerInterp_origspace_face(
}
}
- /* delay writing to the destination in case dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
memcpy(osf->uv, uv, sizeof(osf->uv));
}
@@ -908,7 +908,7 @@ static void layerInterp_mloopcol(
/* Subdivide smooth or fractal can cause problems without clamping
* although weights should also not cause this situation */
- /* also delay writing to the destination incase dest is in sources */
+ /* Also delay writing to the destination in case dest is in sources. */
mc->r = round_fl_to_uchar_clamp(col.r);
mc->g = round_fl_to_uchar_clamp(col.g);
mc->b = round_fl_to_uchar_clamp(col.b);
@@ -1008,7 +1008,7 @@ static void layerInterp_mloopuv(
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
copy_v2_v2(((MLoopUV *)dest)->uv, uv);
((MLoopUV *)dest)->flag = flag;
}
@@ -1104,7 +1104,7 @@ static void layerInterp_mloop_origspace(
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
copy_v2_v2(((OrigSpaceLoop *)dest)->uv, uv);
}
/* --- end copy */
@@ -1152,7 +1152,7 @@ static void layerInterp_mcol(
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
for (j = 0; j < 4; ++j) {
/* Subdivide smooth or fractal can cause problems without clamping
@@ -1220,7 +1220,7 @@ static void layerInterp_bweight(const void **sources,
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
*((float *)dest) = f;
}
@@ -1251,7 +1251,7 @@ static void layerInterp_shapekey(const void **sources,
}
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
copy_v3_v3((float *)dest, co);
}
@@ -1289,7 +1289,7 @@ static void layerInterp_mvert_skin(const void **sources,
madd_v3_v3fl(radius, vs_src->radius, w);
}
- /* delay writing to the destination incase dest is in sources */
+ /* Delay writing to the destination in case dest is in sources. */
vs_dst = dest;
copy_v3_v3(vs_dst->radius, radius);
vs_dst->flag &= ~MVERT_SKIN_ROOT;
@@ -2828,9 +2828,7 @@ void CustomData_interp(const CustomData *source,
const void *source_buf[SOURCE_BUF_SIZE];
const void **sources = source_buf;
- /* slow fallback in case we're interpolating a ridiculous number of
- * elements
- */
+ /* Slow fallback in case we're interpolating a ridiculous number of elements. */
if (count > SOURCE_BUF_SIZE) {
sources = MEM_malloc_arrayN(count, sizeof(*sources), __func__);
}
@@ -3828,9 +3826,7 @@ void CustomData_bmesh_interp(CustomData *data,
void *source_buf[SOURCE_BUF_SIZE];
const void **sources = (const void **)source_buf;
- /* slow fallback in case we're interpolating a ridiculous number of
- * elements
- */
+ /* Slow fallback in case we're interpolating a ridiculous number of elements. */
if (count > SOURCE_BUF_SIZE) {
sources = MEM_malloc_arrayN(count, sizeof(*sources), __func__);
}
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index 83a10344b96..cbd3c91acc7 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -892,8 +892,7 @@ static void curve_calc_modifiers_pre(
* tilts, which is passed through in the modifier stack.
* this is also the reason curves do not use a virtual
* shape key modifier yet. */
- deformedVerts = BKE_curve_nurbs_keyVertexCos_get(nurb, keyVerts);
- numVerts = BKE_nurbList_verts_count(nurb);
+ deformedVerts = BKE_curve_nurbs_key_vert_coords_alloc(nurb, keyVerts, &numVerts);
}
}
@@ -909,7 +908,7 @@ static void curve_calc_modifiers_pre(
}
if (!deformedVerts) {
- deformedVerts = BKE_curve_nurbs_vertexCos_get(nurb, &numVerts);
+ deformedVerts = BKE_curve_nurbs_vert_coords_alloc(nurb, &numVerts);
}
mti->deformVerts(md, &mectx, NULL, deformedVerts, numVerts);
@@ -921,11 +920,11 @@ static void curve_calc_modifiers_pre(
}
if (deformedVerts) {
- BK_curve_nurbs_vertexCos_apply(nurb, deformedVerts);
+ BKE_curve_nurbs_vert_coords_apply(nurb, deformedVerts, false);
MEM_freeN(deformedVerts);
}
if (keyVerts) { /* these are not passed through modifier stack */
- BKE_curve_nurbs_keyVertexTilts_apply(nurb, keyVerts);
+ BKE_curve_nurbs_key_vert_tilts_apply(nurb, keyVerts);
}
if (keyVerts) {
@@ -933,18 +932,18 @@ static void curve_calc_modifiers_pre(
}
}
-static float (*displist_get_allverts(ListBase *dispbase, int *totvert))[3]
+static float (*displist_vert_coords_alloc(ListBase *dispbase, int *r_vert_len))[3]
{
DispList *dl;
float(*allverts)[3], *fp;
- *totvert = 0;
+ *r_vert_len = 0;
for (dl = dispbase->first; dl; dl = dl->next) {
- *totvert += (dl->type == DL_INDEX3) ? dl->nr : dl->parts * dl->nr;
+ *r_vert_len += (dl->type == DL_INDEX3) ? dl->nr : dl->parts * dl->nr;
}
- allverts = MEM_mallocN((*totvert) * sizeof(float) * 3, "displist_get_allverts allverts");
+ allverts = MEM_mallocN((*r_vert_len) * sizeof(float) * 3, "displist_vert_coords_alloc allverts");
fp = (float *)allverts;
for (dl = dispbase->first; dl; dl = dl->next) {
int offs = 3 * ((dl->type == DL_INDEX3) ? dl->nr : dl->parts * dl->nr);
@@ -955,7 +954,7 @@ static float (*displist_get_allverts(ListBase *dispbase, int *totvert))[3]
return allverts;
}
-static void displist_apply_allverts(ListBase *dispbase, float (*allverts)[3])
+static void displist_vert_coords_apply(ListBase *dispbase, float (*allverts)[3])
{
DispList *dl;
const float *fp;
@@ -1027,7 +1026,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
* we need to create a Mesh for each curve that uses modifiers. */
if (modified == NULL /* && need_normal */) {
if (vertCos != NULL) {
- displist_apply_allverts(dispbase, vertCos);
+ displist_vert_coords_apply(dispbase, vertCos);
}
if (ELEM(ob->type, OB_CURVE, OB_FONT) && (cu->flag & CU_DEFORM_FILL)) {
@@ -1041,7 +1040,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
(mti->type == eModifierTypeType_DeformOrConstruct && !modified)) {
if (modified) {
if (!vertCos) {
- vertCos = BKE_mesh_vertexCos_get(modified, &totvert);
+ vertCos = BKE_mesh_vert_coords_alloc(modified, &totvert);
}
if (need_normal) {
BKE_mesh_ensure_normals(modified);
@@ -1050,7 +1049,7 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
}
else {
if (!vertCos) {
- vertCos = displist_get_allverts(dispbase, &totvert);
+ vertCos = displist_vert_coords_alloc(dispbase, &totvert);
}
mti->deformVerts(md, &mectx_deform, NULL, vertCos, totvert);
}
@@ -1071,12 +1070,12 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
BKE_id_free(NULL, modified);
modified = temp_mesh;
- BKE_mesh_apply_vert_coords(modified, vertCos);
+ BKE_mesh_vert_coords_apply(modified, vertCos);
}
}
else {
if (vertCos) {
- displist_apply_allverts(dispbase, vertCos);
+ displist_vert_coords_apply(dispbase, vertCos);
}
if (ELEM(ob->type, OB_CURVE, OB_FONT) && (cu->flag & CU_DEFORM_FILL)) {
@@ -1115,13 +1114,13 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
BKE_id_free(NULL, modified);
modified = temp_mesh;
- BKE_mesh_apply_vert_coords(modified, vertCos);
+ BKE_mesh_vert_coords_apply(modified, vertCos);
BKE_mesh_calc_normals_mapping_simple(modified);
MEM_freeN(vertCos);
}
else {
- displist_apply_allverts(dispbase, vertCos);
+ displist_vert_coords_apply(dispbase, vertCos);
MEM_freeN(vertCos);
vertCos = NULL;
}
@@ -1129,15 +1128,6 @@ static void curve_calc_modifiers_post(Depsgraph *depsgraph,
if (r_final) {
if (modified) {
- /* see: mesh_calc_modifiers */
- if (modified->totface == 0) {
- BKE_mesh_tessface_calc(modified);
- }
- /* Even if tessellation is not needed, some modifiers might have modified CD layers
- * (like mloopcol or mloopuv), hence we have to update those. */
- else if (modified->runtime.cd_dirty_vert & CD_MASK_TESSLOOPNORMAL) {
- BKE_mesh_tessface_calc(modified);
- }
/* XXX2.8(Sybren): make sure the face normals are recalculated as well */
BKE_mesh_ensure_normals(modified);
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 03530fc76b6..91b169590ac 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -117,7 +117,7 @@ static int neighStraightY[8] = {0, 1, 0, -1, 1, 1, -1, -1};
/* brush mesh raycast status */
#define HIT_VOLUME 1
#define HIT_PROXIMITY 2
-/* dynamicPaint_findNeighbourPixel() return codes */
+/* dynamicPaint_findNeighborPixel() return codes */
#define NOT_FOUND -1
#define ON_MESH_EDGE -2
#define OUT_OF_TEXTURE -3
@@ -233,7 +233,7 @@ typedef struct PaintUVPoint {
unsigned int v1, v2, v3;
/** If this pixel isn't uv mapped to any face, but it's neighboring pixel is. */
- unsigned int neighbour_pixel;
+ unsigned int neighbor_pixel;
} PaintUVPoint;
typedef struct ImgSeqFormatData {
@@ -2263,7 +2263,7 @@ static void dynamic_paint_create_uv_surface_direct_cb(
/* Init per pixel settings */
tPoint->tri_index = -1;
- tPoint->neighbour_pixel = -1;
+ tPoint->neighbor_pixel = -1;
tPoint->pixel_index = index;
/* Actual pixel center, used when collision is found */
@@ -2377,7 +2377,7 @@ static void dynamic_paint_create_uv_surface_neighbor_cb(
const int ind = (tx + u) + w * (ty + v);
/* if neighbor has index */
- if (tempPoints[ind].neighbour_pixel == -1 && tempPoints[ind].tri_index != -1) {
+ if (tempPoints[ind].neighbor_pixel == -1 && tempPoints[ind].tri_index != -1) {
float uv[2];
const int i = tempPoints[ind].tri_index;
const float *uv1 = mloopuv[mlooptri[i].tri[0]].uv;
@@ -2387,13 +2387,13 @@ static void dynamic_paint_create_uv_surface_neighbor_cb(
/* tri index */
/* There is a low possibility of actually having a neighbor point which tri is
* already set from another neighbor in a separate thread here.
- * Checking for both tri_index and neighbour_pixel above reduces that probability
+ * Checking for both tri_index and neighbor_pixel above reduces that probability
* but it remains possible.
- * That atomic op (and its memory fence) ensures tPoint->neighbour_pixel is set
- * to non--1 *before* its tri_index is set (i.e. that it cannot be used a neighbour).
+ * That atomic op (and its memory fence) ensures tPoint->neighbor_pixel is set
+ * to non--1 *before* its tri_index is set (i.e. that it cannot be used a neighbor).
*/
- tPoint->neighbour_pixel = ind - 1;
- atomic_add_and_fetch_uint32(&tPoint->neighbour_pixel, 1);
+ tPoint->neighbor_pixel = ind - 1;
+ atomic_add_and_fetch_uint32(&tPoint->neighbor_pixel, 1);
tPoint->tri_index = i;
/* Now calculate pixel data for this pixel as it was on polygon surface */
@@ -2467,13 +2467,13 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
* px, py : origin pixel x and y
* n_index : lookup direction index (use neighX, neighY to get final index)
*/
-static int dynamic_paint_find_neighbour_pixel(const DynamicPaintCreateUVSurfaceData *data,
- const MeshElemMap *vert_to_looptri_map,
- const int w,
- const int h,
- const int px,
- const int py,
- const int n_index)
+static int dynamic_paint_find_neighbor_pixel(const DynamicPaintCreateUVSurfaceData *data,
+ const MeshElemMap *vert_to_looptri_map,
+ const int w,
+ const int h,
+ const int px,
+ const int py,
+ const int n_index)
{
/* Note: Current method only uses polygon edges to detect neighboring pixels.
* -> It doesn't always lead to the optimum pixel but is accurate enough
@@ -2494,7 +2494,7 @@ static int dynamic_paint_find_neighbour_pixel(const DynamicPaintCreateUVSurfaceD
/* Check if shifted point is on same face -> it's a correct neighbor
* (and if it isn't marked as an "edge pixel") */
- if ((tPoint->tri_index == cPoint->tri_index) && (tPoint->neighbour_pixel == -1)) {
+ if ((tPoint->tri_index == cPoint->tri_index) && (tPoint->neighbor_pixel == -1)) {
return (x + w * y);
}
@@ -2504,7 +2504,7 @@ static int dynamic_paint_find_neighbour_pixel(const DynamicPaintCreateUVSurfaceD
* !! Replace with "is uv faces linked" check !!
* This should work fine as long as uv island margin is > 1 pixel.
*/
- if ((tPoint->tri_index != -1) && (tPoint->neighbour_pixel == -1)) {
+ if ((tPoint->tri_index != -1) && (tPoint->neighbor_pixel == -1)) {
return (x + w * y);
}
@@ -2691,8 +2691,8 @@ static void dynamic_paint_find_island_border(const DynamicPaintCreateUVSurfaceDa
}
/* If final point is an "edge pixel", use it's "real" neighbor instead */
- if (tempPoints[final_index].neighbour_pixel != -1) {
- final_index = tempPoints[final_index].neighbour_pixel;
+ if (tempPoints[final_index].neighbor_pixel != -1) {
+ final_index = tempPoints[final_index].neighbor_pixel;
/* If we ended up to our origin point */
if (final_index == (px + w * py)) {
@@ -2755,7 +2755,7 @@ static bool dynamicPaint_symmetrizeAdjData(PaintAdjData *ed, int active_points)
for (int i = 0, idx = ed->n_index[index]; i < ed->n_num[index]; i++) {
const int target = ed->n_target[idx + i];
- assert(!(ed->flags[target] & ADJ_BORDER_PIXEL));
+ BLI_assert(!(ed->flags[target] & ADJ_BORDER_PIXEL));
if (!dynamicPaint_pointHasNeighbor(ed, target, index)) {
new_n_num[target]++;
@@ -2782,7 +2782,7 @@ static bool dynamicPaint_symmetrizeAdjData(PaintAdjData *ed, int active_points)
new_n_num[index] = ed->n_num[index];
}
- assert(n_pos == total_targets);
+ BLI_assert(n_pos == total_targets);
/* Add symmetrized - this loop behavior must exactly match the count pass above */
for (int index = 0; index < active_points; index++) {
@@ -3016,7 +3016,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
ed->n_index[final_index[index]] = n_pos;
ed->n_num[final_index[index]] = 0;
- if (tempPoints[index].neighbour_pixel != -1) {
+ if (tempPoints[index].neighbor_pixel != -1) {
ed->flags[final_index[index]] |= ADJ_BORDER_PIXEL;
total_border++;
}
@@ -3024,7 +3024,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
for (int i = 0; i < 8; i++) {
/* Try to find a neighboring pixel in defined direction.
* If not found, -1 is returned */
- const int n_target = dynamic_paint_find_neighbour_pixel(
+ const int n_target = dynamic_paint_find_neighbor_pixel(
&data, vert_to_looptri_map, w, h, tx, ty, i);
if (n_target >= 0 && n_target != index) {
@@ -3084,7 +3084,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
const int fidx = final_index[index];
if (tempPoints[index].tri_index != -1) {
- int nidx = tempPoints[index].neighbour_pixel;
+ int nidx = tempPoints[index].neighbor_pixel;
fprintf(dump_file,
"%d\t%d,%d\t%u\t%d,%d\t%d\t",
fidx,
@@ -3186,7 +3186,7 @@ int dynamicPaint_createUVSurface(Scene *scene,
pPoint->alpha = 1.0f;
/* Every pixel that is assigned as "edge pixel" gets blue color */
- if (uvPoint->neighbour_pixel != -1) {
+ if (uvPoint->neighbor_pixel != -1) {
pPoint->color[2] = 1.0f;
}
/* and every pixel that finally got an polygon gets red color */
@@ -4061,8 +4061,10 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
hit_found = HIT_VOLUME;
/* Mark hit info */
- madd_v3_v3v3fl(
- hitCoord, ray_start, ray_dir, hit.dist); /* Calculate final hit coordinates */
+
+ /* Calculate final hit coordinates */
+ madd_v3_v3v3fl(hitCoord, ray_start, ray_dir, hit.dist);
+
depth += dist * sample_factor;
hitTri = f_index;
}
@@ -4113,8 +4115,10 @@ static void dynamic_paint_paint_mesh_cell_point_cb_ex(
treeData->tree, ray_start, proj_ray, 0.0f, &hit, mesh_tris_spherecast_dp, treeData);
if (hit.index != -1) {
proxDist = hit.dist;
- madd_v3_v3v3fl(
- hitCo, ray_start, proj_ray, hit.dist); /* Calculate final hit coordinates */
+
+ /* Calculate final hit coordinates */
+ madd_v3_v3v3fl(hitCo, ray_start, proj_ray, hit.dist);
+
tri = hit.index;
}
}
@@ -5568,7 +5572,7 @@ static void dynamic_paint_border_cb(void *__restrict userdata,
PaintPoint *pPoint2 = &((PaintPoint *)sData->type_data)[target];
- assert(!(sData->adj_data->flags[target] & ADJ_BORDER_PIXEL));
+ BLI_assert(!(sData->adj_data->flags[target] & ADJ_BORDER_PIXEL));
madd_v3_v3fl(mix_color, pPoint2->color, pPoint2->color[3]);
mix_color[3] += pPoint2->color[3];
diff --git a/source/blender/blenkernel/intern/editderivedmesh.c b/source/blender/blenkernel/intern/editderivedmesh.c
index 06f297b23e0..2df3d2f0fe9 100644
--- a/source/blender/blenkernel/intern/editderivedmesh.c
+++ b/source/blender/blenkernel/intern/editderivedmesh.c
@@ -517,8 +517,8 @@ static void cage_mapped_verts_callback(void *userData,
}
}
-float (*BKE_editmesh_vertexCos_get(
- struct Depsgraph *depsgraph, BMEditMesh *em, Scene *scene, int *r_numVerts))[3]
+float (*BKE_editmesh_vert_coords_alloc(
+ struct Depsgraph *depsgraph, BMEditMesh *em, Scene *scene, int *r_vert_len))[3]
{
Mesh *cage;
BLI_bitmap *visit_bitmap;
@@ -540,8 +540,8 @@ float (*BKE_editmesh_vertexCos_get(
MEM_freeN(visit_bitmap);
- if (r_numVerts) {
- *r_numVerts = em->bm->totvert;
+ if (r_vert_len) {
+ *r_vert_len = em->bm->totvert;
}
return cos_cage;
diff --git a/source/blender/blenkernel/intern/editmesh.c b/source/blender/blenkernel/intern/editmesh.c
index b8234ccc5bb..866c494d354 100644
--- a/source/blender/blenkernel/intern/editmesh.c
+++ b/source/blender/blenkernel/intern/editmesh.c
@@ -39,7 +39,7 @@ BMEditMesh *BKE_editmesh_create(BMesh *bm, const bool do_tessellate)
em->bm = bm;
if (do_tessellate) {
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
}
return em;
@@ -61,11 +61,10 @@ BMEditMesh *BKE_editmesh_copy(BMEditMesh *em)
/* The tessellation is NOT calculated on the copy here,
* because currently all the callers of this function use
- * it to make a backup copy of the BMEditMesh to restore
- * it in the case of errors in an operation. For perf
- * reasons, in that case it makes more sense to do the
- * tessellation only when/if that copy ends up getting
- * used.*/
+ * it to make a backup copy of the #BMEditMesh to restore
+ * it in the case of errors in an operation. For performance reasons,
+ * in that case it makes more sense to do the
+ * tessellation only when/if that copy ends up getting used. */
em_copy->looptris = NULL;
return em_copy;
@@ -97,8 +96,8 @@ static void editmesh_tessface_calc_intern(BMEditMesh *em)
BMesh *bm = em->bm;
- /* this assumes all faces can be scan-filled, which isn't always true,
- * worst case we over alloc a little which is acceptable */
+ /* This assumes all faces can be scan-filled, which isn't always true,
+ * worst case we over allocate a little which is acceptable. */
const int looptris_tot = poly_to_tri_count(bm->totface, bm->totloop);
const int looptris_tot_prev_alloc = em->looptris ?
(MEM_allocN_len(em->looptris) / sizeof(*em->looptris)) :
@@ -109,7 +108,7 @@ static void editmesh_tessface_calc_intern(BMEditMesh *em)
/* this means no reallocs for quad dominant models, for */
if ((em->looptris != NULL) &&
/* (*em->tottri >= looptris_tot)) */
- /* check against alloc'd size incase we over alloc'd a little */
+ /* Check against allocated size in case we over allocated a little. */
((looptris_tot_prev_alloc >= looptris_tot) &&
(looptris_tot_prev_alloc <= looptris_tot * 2))) {
looptris = em->looptris;
@@ -127,7 +126,7 @@ static void editmesh_tessface_calc_intern(BMEditMesh *em)
BM_mesh_calc_tessellation(em->bm, em->looptris, &em->tottri);
}
-void BKE_editmesh_tessface_calc(BMEditMesh *em)
+void BKE_editmesh_looptri_calc(BMEditMesh *em)
{
editmesh_tessface_calc_intern(em);
@@ -210,7 +209,7 @@ void BKE_editmesh_color_ensure(BMEditMesh *em, const char htype)
}
}
-float (*BKE_editmesh_vertexCos_get_orco(BMEditMesh *em, int *r_numVerts))[3]
+float (*BKE_editmesh_vert_coords_alloc_orco(BMEditMesh *em, int *r_vert_len))[3]
{
BMIter iter;
BMVert *eve;
@@ -223,7 +222,7 @@ float (*BKE_editmesh_vertexCos_get_orco(BMEditMesh *em, int *r_numVerts))[3]
copy_v3_v3(orco[i], eve->co);
}
- *r_numVerts = em->bm->totvert;
+ *r_vert_len = em->bm->totvert;
return orco;
}
diff --git a/source/blender/blenkernel/intern/editmesh_bvh.c b/source/blender/blenkernel/intern/editmesh_bvh.c
index f23276d7be0..5af4e4c0023 100644
--- a/source/blender/blenkernel/intern/editmesh_bvh.c
+++ b/source/blender/blenkernel/intern/editmesh_bvh.c
@@ -73,7 +73,7 @@ BMBVHTree *BKE_bmbvh_new_ex(BMesh *bm,
BMFace *f_test, *f_test_prev;
bool test_fn_ret;
- /* BKE_editmesh_tessface_calc() must be called already */
+ /* BKE_editmesh_looptri_calc() must be called already */
BLI_assert(looptris_tot != 0 || bm->totface == 0);
if (cos_cage) {
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 7cbd5b6b050..ffab82b75af 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -1338,8 +1338,9 @@ void BKE_sim_debug_data_clear_category(const char *category)
BLI_ghashIterator_init(&iter, _sim_debug_data->gh);
while (!BLI_ghashIterator_done(&iter)) {
const SimDebugElement *elem = BLI_ghashIterator_getValue(&iter);
- BLI_ghashIterator_step(
- &iter); /* removing invalidates the current iterator, so step before removing */
+
+ /* Removing invalidates the current iterator, so step before removing. */
+ BLI_ghashIterator_step(&iter);
if (elem->category_hash == category_hash) {
BLI_ghash_remove(_sim_debug_data->gh, elem, NULL, debug_element_free);
diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index 140d1f0d26c..657a08877b0 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -382,8 +382,8 @@ FCurve *rna_get_fcurve_context_ui(bContext *C,
}
/* there must be some RNA-pointer + property combon */
- if (prop && tptr.id.data && RNA_property_animateable(&tptr, prop)) {
- AnimData *adt = BKE_animdata_from_id(tptr.id.data);
+ if (prop && tptr.owner_id && RNA_property_animateable(&tptr, prop)) {
+ AnimData *adt = BKE_animdata_from_id(tptr.owner_id);
int step = (
/* Always 1 in case we have no context (can't check in 'ancestors' of given RNA ptr). */
C ? 2 : 1);
@@ -391,7 +391,7 @@ FCurve *rna_get_fcurve_context_ui(bContext *C,
if (!adt && C) {
path = BKE_animdata_driver_path_hack(C, &tptr, prop, NULL);
- adt = BKE_animdata_from_id(tptr.id.data);
+ adt = BKE_animdata_from_id(tptr.owner_id);
step--;
}
@@ -438,7 +438,7 @@ FCurve *rna_get_fcurve_context_ui(bContext *C,
if (tpath && tpath != path) {
MEM_freeN(path);
path = tpath;
- adt = BKE_animdata_from_id(tptr.id.data);
+ adt = BKE_animdata_from_id(tptr.owner_id);
}
else {
adt = NULL;
@@ -506,8 +506,10 @@ static int binarysearch_bezt_index_ex(
*/
for (loopbreaker = 0; (start <= end) && (loopbreaker < maxloop); loopbreaker++) {
/* compute and get midpoint */
- int mid = start + ((end - start) /
- 2); /* we calculate the midpoint this way to avoid int overflows... */
+
+ /* We calculate the midpoint this way to avoid int overflows... */
+ int mid = start + ((end - start) / 2);
+
float midfra = array[mid].vec[1][0];
/* check if exactly equal to midpoint */
diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c
index 4295a44098c..48c0258bf47 100644
--- a/source/blender/blenkernel/intern/fmodifier.c
+++ b/source/blender/blenkernel/intern/fmodifier.c
@@ -555,8 +555,10 @@ int BKE_fcm_envelope_find_index(FCM_EnvelopeData array[],
*/
for (loopbreaker = 0; (start <= end) && (loopbreaker < maxloop); loopbreaker++) {
/* compute and get midpoint */
- int mid = start + ((end - start) /
- 2); /* we calculate the midpoint this way to avoid int overflows... */
+
+ /* we calculate the midpoint this way to avoid int overflows... */
+ int mid = start + ((end - start) / 2);
+
float midfra = array[mid].time;
/* check if exactly equal to midpoint */
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 78117a4f615..b55635560be 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -955,7 +955,7 @@ static bool vfont_to_curve(Object *ob,
}
}
- current_line_length += xof;
+ current_line_length += xof - MARGIN_X_MIN;
if (ct->dobreak) {
current_line_length += twidth;
}
@@ -1026,7 +1026,7 @@ static bool vfont_to_curve(Object *ob,
}
ct++;
}
- current_line_length += xof + twidth;
+ current_line_length += xof + twidth - MARGIN_X_MIN;
longest_line_length = MAX2(current_line_length, longest_line_length);
cu->lines = 1;
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index 133c6e7297b..d4bf76ea44a 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -148,19 +148,19 @@ bool BKE_gpencil_free_strokes(bGPDframe *gpf)
}
/* Free strokes and colors belonging to a gp-frame */
-bool BKE_gpencil_free_frame_runtime_data(bGPDframe *derived_gpf)
+bool BKE_gpencil_free_frame_runtime_data(bGPDframe *gpf_eval)
{
bGPDstroke *gps_next;
- if (!derived_gpf) {
+ if (!gpf_eval) {
return false;
}
/* free strokes */
- for (bGPDstroke *gps = derived_gpf->strokes.first; gps; gps = gps_next) {
+ for (bGPDstroke *gps = gpf_eval->strokes.first; gps; gps = gps_next) {
gps_next = gps->next;
BKE_gpencil_free_stroke(gps);
}
- BLI_listbase_clear(&derived_gpf->strokes);
+ BLI_listbase_clear(&gpf_eval->strokes);
return true;
}
@@ -642,8 +642,10 @@ void BKE_gpencil_copy_data(bGPdata *gpd_dst, const bGPdata *gpd_src, const int U
BLI_listbase_clear(&gpd_dst->layers);
for (const bGPDlayer *gpl_src = gpd_src->layers.first; gpl_src; gpl_src = gpl_src->next) {
/* make a copy of source layer and its data */
- bGPDlayer *gpl_dst = BKE_gpencil_layer_duplicate(
- gpl_src); /* TODO here too could add unused flags... */
+
+ /* TODO here too could add unused flags... */
+ bGPDlayer *gpl_dst = BKE_gpencil_layer_duplicate(gpl_src);
+
BLI_addtail(&gpd_dst->layers, gpl_dst);
}
}
@@ -1404,6 +1406,313 @@ void BKE_gpencil_dvert_ensure(bGPDstroke *gps)
/* ************************************************** */
+static void stroke_defvert_create_nr_list(MDeformVert *dv_list,
+ int count,
+ ListBase *result,
+ int *totweight)
+{
+ LinkData *ld;
+ MDeformVert *dv;
+ MDeformWeight *dw;
+ int i, j;
+ int tw = 0;
+ for (i = 0; i < count; i++) {
+ dv = &dv_list[i];
+
+ /* find def_nr in list, if not exist, then create one */
+ for (j = 0; j < dv->totweight; j++) {
+ int found = 0;
+ dw = &dv->dw[j];
+ for (ld = result->first; ld; ld = ld->next) {
+ if (ld->data == POINTER_FROM_INT(dw->def_nr)) {
+ found = 1;
+ break;
+ }
+ }
+ if (!found) {
+ ld = MEM_callocN(sizeof(LinkData), "def_nr_item");
+ ld->data = POINTER_FROM_INT(dw->def_nr);
+ BLI_addtail(result, ld);
+ tw++;
+ }
+ }
+ }
+
+ *totweight = tw;
+}
+
+static MDeformVert *stroke_defvert_new_count(int count, int totweight, ListBase *def_nr_list)
+{
+ int i, j;
+ LinkData *ld;
+ MDeformVert *dst = MEM_mallocN(count * sizeof(MDeformVert), "new_deformVert");
+
+ dst->totweight = totweight;
+
+ for (i = 0; i < count; i++) {
+ dst[i].dw = MEM_mallocN(sizeof(MDeformWeight) * totweight, "new_deformWeight");
+ j = 0;
+ /* re-assign deform groups */
+ for (ld = def_nr_list->first; ld; ld = ld->next) {
+ dst[i].dw[j].def_nr = POINTER_AS_INT(ld->data);
+ j++;
+ }
+ }
+
+ return dst;
+}
+
+static void stroke_interpolate_deform_weights(
+ bGPDstroke *gps, int index_from, int index_to, float ratio, MDeformVert *vert)
+{
+ const MDeformVert *vl = &gps->dvert[index_from];
+ const MDeformVert *vr = &gps->dvert[index_to];
+ int i;
+
+ for (i = 0; i < vert->totweight; i++) {
+ float wl = defvert_find_weight(vl, vert->dw[i].def_nr);
+ float wr = defvert_find_weight(vr, vert->dw[i].def_nr);
+ vert->dw[i].weight = interpf(wr, wl, ratio);
+ }
+}
+
+static int stroke_march_next_point(const bGPDstroke *gps,
+ const int index_next_pt,
+ const float *current,
+ const float dist,
+ float *result,
+ float *pressure,
+ float *strength,
+ float *ratio_result,
+ int *index_from,
+ int *index_to)
+{
+ float remaining_till_next = 0.0f;
+ float remaining_march = dist;
+ float step_start[3];
+ float point[3];
+ int next_point_index = index_next_pt;
+ bGPDspoint *pt = NULL;
+
+ if (!(next_point_index < gps->totpoints)) {
+ return -1;
+ }
+
+ copy_v3_v3(step_start, current);
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(point, &pt->x);
+ remaining_till_next = len_v3v3(point, step_start);
+
+ while (remaining_till_next < remaining_march) {
+ remaining_march -= remaining_till_next;
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(point, &pt->x);
+ copy_v3_v3(step_start, point);
+ next_point_index++;
+ if (!(next_point_index < gps->totpoints)) {
+ next_point_index = gps->totpoints - 1;
+ break;
+ }
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(point, &pt->x);
+ remaining_till_next = len_v3v3(point, step_start);
+ }
+ if (remaining_till_next < remaining_march) {
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(result, &pt->x);
+ *pressure = gps->points[next_point_index].pressure;
+ *strength = gps->points[next_point_index].strength;
+
+ *index_from = next_point_index - 1;
+ *index_to = next_point_index;
+ *ratio_result = 1.0f;
+
+ return 0;
+ }
+ else {
+ float ratio = remaining_march / remaining_till_next;
+ interp_v3_v3v3(result, step_start, point, ratio);
+ *pressure = interpf(
+ gps->points[next_point_index].pressure, gps->points[next_point_index - 1].pressure, ratio);
+ *strength = interpf(
+ gps->points[next_point_index].strength, gps->points[next_point_index - 1].strength, ratio);
+
+ *index_from = next_point_index - 1;
+ *index_to = next_point_index;
+ *ratio_result = ratio;
+
+ return next_point_index;
+ }
+}
+
+static int stroke_march_next_point_no_interp(const bGPDstroke *gps,
+ const int index_next_pt,
+ const float *current,
+ const float dist,
+ float *result)
+{
+ float remaining_till_next = 0.0f;
+ float remaining_march = dist;
+ float step_start[3];
+ float point[3];
+ int next_point_index = index_next_pt;
+ bGPDspoint *pt = NULL;
+
+ if (!(next_point_index < gps->totpoints)) {
+ return -1;
+ }
+
+ copy_v3_v3(step_start, current);
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(point, &pt->x);
+ remaining_till_next = len_v3v3(point, step_start);
+
+ while (remaining_till_next < remaining_march) {
+ remaining_march -= remaining_till_next;
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(point, &pt->x);
+ copy_v3_v3(step_start, point);
+ next_point_index++;
+ if (!(next_point_index < gps->totpoints)) {
+ next_point_index = gps->totpoints - 1;
+ break;
+ }
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(point, &pt->x);
+ remaining_till_next = len_v3v3(point, step_start);
+ }
+ if (remaining_till_next < remaining_march) {
+ pt = &gps->points[next_point_index];
+ copy_v3_v3(result, &pt->x);
+ return 0;
+ }
+ else {
+ float ratio = remaining_march / remaining_till_next;
+ interp_v3_v3v3(result, step_start, point, ratio);
+ return next_point_index;
+ }
+}
+
+static int stroke_march_count(const bGPDstroke *gps, const float dist)
+{
+ int point_count = 0;
+ float point[3];
+ int next_point_index = 1;
+ bGPDspoint *pt = NULL;
+
+ pt = &gps->points[0];
+ copy_v3_v3(point, &pt->x);
+ point_count++;
+
+ while ((next_point_index = stroke_march_next_point_no_interp(
+ gps, next_point_index, point, dist, point)) > -1) {
+ point_count++;
+ if (next_point_index == 0) {
+ break; /* last point finished */
+ }
+ }
+ return point_count;
+}
+
+/**
+ * Resample a stroke
+ * \param gps: Stroke to sample
+ * \param dist: Distance of one segment
+ */
+bool BKE_gpencil_sample_stroke(bGPDstroke *gps, const float dist, const bool select)
+{
+ bGPDspoint *pt = gps->points;
+ bGPDspoint *pt1 = NULL;
+ bGPDspoint *pt2 = NULL;
+ int i;
+ LinkData *ld;
+ ListBase def_nr_list = {0};
+
+ if (gps->totpoints < 2 || dist < FLT_EPSILON) {
+ return false;
+ }
+ /* TODO: Implement feature point preservation. */
+ int count = stroke_march_count(gps, dist);
+
+ bGPDspoint *new_pt = MEM_callocN(sizeof(bGPDspoint) * count, "gp_stroke_points_sampled");
+ MDeformVert *new_dv = NULL;
+
+ int result_totweight;
+
+ if (gps->dvert != NULL) {
+ stroke_defvert_create_nr_list(gps->dvert, count, &def_nr_list, &result_totweight);
+ new_dv = stroke_defvert_new_count(count, result_totweight, &def_nr_list);
+ }
+
+ int next_point_index = 1;
+ i = 0;
+ float pressure, strength, ratio_result;
+ int index_from, index_to;
+ float last_coord[3];
+
+ /* 1st point is always at the start */
+ pt1 = &gps->points[0];
+ copy_v3_v3(last_coord, &pt1->x);
+ pt2 = &new_pt[i];
+ copy_v3_v3(&pt2->x, last_coord);
+ new_pt[i].pressure = pt[0].pressure;
+ new_pt[i].strength = pt[0].strength;
+ if (select) {
+ new_pt[i].flag |= GP_SPOINT_SELECT;
+ }
+ i++;
+
+ if (new_dv) {
+ stroke_interpolate_deform_weights(gps, 0, 0, 0, &new_dv[0]);
+ }
+
+ /* the rest */
+ while ((next_point_index = stroke_march_next_point(gps,
+ next_point_index,
+ last_coord,
+ dist,
+ last_coord,
+ &pressure,
+ &strength,
+ &ratio_result,
+ &index_from,
+ &index_to)) > -1) {
+ pt2 = &new_pt[i];
+ copy_v3_v3(&pt2->x, last_coord);
+ new_pt[i].pressure = pressure;
+ new_pt[i].strength = strength;
+ if (select) {
+ new_pt[i].flag |= GP_SPOINT_SELECT;
+ }
+
+ if (new_dv) {
+ stroke_interpolate_deform_weights(gps, index_from, index_to, ratio_result, &new_dv[i]);
+ }
+
+ i++;
+ if (next_point_index == 0) {
+ break; /* last point finished */
+ }
+ }
+
+ gps->points = new_pt;
+ gps->totpoints = i;
+ MEM_freeN(pt); /* original */
+
+ if (new_dv) {
+ BKE_gpencil_free_stroke_weights(gps);
+ while ((ld = BLI_pophead(&def_nr_list))) {
+ MEM_freeN(ld);
+ }
+ gps->dvert = new_dv;
+ }
+
+ gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gps->tot_triangles = 0;
+
+ return true;
+}
+
/**
* Apply smooth to stroke point
* \param gps: Stroke to smooth
@@ -1475,33 +1784,55 @@ bool BKE_gpencil_smooth_stroke_strength(bGPDstroke *gps, int point_index, float
bGPDspoint *ptb = &gps->points[point_index];
/* Do nothing if not enough points */
- if (gps->totpoints <= 2) {
+ if ((gps->totpoints <= 2) || (point_index < 1)) {
return false;
}
-
- /* Compute theoretical optimal value using distances */
- bGPDspoint *pta, *ptc;
- int before = point_index - 1;
- int after = point_index + 1;
-
- CLAMP_MIN(before, 0);
- CLAMP_MAX(after, gps->totpoints - 1);
-
- pta = &gps->points[before];
- ptc = &gps->points[after];
-
- /* the optimal value is the corresponding to the interpolation of the strength
- * at the distance of point b
- */
- float fac = line_point_factor_v3(&ptb->x, &pta->x, &ptc->x);
- /* sometimes the factor can be wrong due stroke geometry, so use middle point */
- if ((fac < 0.0f) || (fac > 1.0f)) {
- fac = 0.5f;
+ /* Only affect endpoints by a fraction of the normal influence */
+ float inf = influence;
+ if ((point_index == 0) || (point_index == gps->totpoints - 1)) {
+ inf *= 0.01f;
+ }
+ /* Limit max influence to reduce pop effect. */
+ CLAMP_MAX(inf, 0.98f);
+
+ float total = 0.0f;
+ float max_strength = 0.0f;
+ const int steps = 4;
+ const float average_fac = 1.0f / (float)(steps * 2 + 1);
+ int step;
+
+ /* add the point itself */
+ total += ptb->strength * average_fac;
+ max_strength = ptb->strength;
+
+ /* n-steps before/after current point */
+ for (step = 1; step <= steps; step++) {
+ bGPDspoint *pt1, *pt2;
+ int before = point_index - step;
+ int after = point_index + step;
+
+ CLAMP_MIN(before, 0);
+ CLAMP_MAX(after, gps->totpoints - 1);
+
+ pt1 = &gps->points[before];
+ pt2 = &gps->points[after];
+
+ /* add both these points to the average-sum (s += p[i]/n) */
+ total += pt1->strength * average_fac;
+ total += pt2->strength * average_fac;
+ /* Save max value. */
+ if (max_strength < pt1->strength) {
+ max_strength = pt1->strength;
+ }
+ if (max_strength < pt2->strength) {
+ max_strength = pt2->strength;
+ }
}
- const float optimal = (1.0f - fac) * pta->strength + fac * ptc->strength;
- /* Based on influence factor, blend between original and optimal */
- ptb->strength = (1.0f - influence) * ptb->strength + influence * optimal;
+ /* Based on influence factor, blend between original and optimal smoothed value. */
+ ptb->strength = interpf(ptb->strength, total, inf);
+ /* Clamp to maximum stroke strength to avoid weird results. */
+ CLAMP_MAX(ptb->strength, max_strength);
return true;
}
@@ -1516,31 +1847,52 @@ bool BKE_gpencil_smooth_stroke_thickness(bGPDstroke *gps, int point_index, float
if ((gps->totpoints <= 2) || (point_index < 1)) {
return false;
}
-
- /* Compute theoretical optimal value using distances */
- bGPDspoint *pta, *ptc;
- int before = point_index - 1;
- int after = point_index + 1;
-
- CLAMP_MIN(before, 0);
- CLAMP_MAX(after, gps->totpoints - 1);
-
- pta = &gps->points[before];
- ptc = &gps->points[after];
-
- /* the optimal value is the corresponding to the interpolation of the pressure
- * at the distance of point b
- */
- float fac = line_point_factor_v3(&ptb->x, &pta->x, &ptc->x);
- /* sometimes the factor can be wrong due stroke geometry, so use middle point */
- if ((fac < 0.0f) || (fac > 1.0f)) {
- fac = 0.5f;
+ /* Only affect endpoints by a fraction of the normal influence */
+ float inf = influence;
+ if ((point_index == 0) || (point_index == gps->totpoints - 1)) {
+ inf *= 0.01f;
+ }
+ /* Limit max influence to reduce pop effect. */
+ CLAMP_MAX(inf, 0.98f);
+
+ float total = 0.0f;
+ float max_pressure = 0.0f;
+ const int steps = 4;
+ const float average_fac = 1.0f / (float)(steps * 2 + 1);
+ int step;
+
+ /* add the point itself */
+ total += ptb->pressure * average_fac;
+ max_pressure = ptb->pressure;
+
+ /* n-steps before/after current point */
+ for (step = 1; step <= steps; step++) {
+ bGPDspoint *pt1, *pt2;
+ int before = point_index - step;
+ int after = point_index + step;
+
+ CLAMP_MIN(before, 0);
+ CLAMP_MAX(after, gps->totpoints - 1);
+
+ pt1 = &gps->points[before];
+ pt2 = &gps->points[after];
+
+ /* add both these points to the average-sum (s += p[i]/n) */
+ total += pt1->pressure * average_fac;
+ total += pt2->pressure * average_fac;
+ /* Save max value. */
+ if (max_pressure < pt1->pressure) {
+ max_pressure = pt1->pressure;
+ }
+ if (max_pressure < pt2->pressure) {
+ max_pressure = pt2->pressure;
+ }
}
- float optimal = interpf(ptc->pressure, pta->pressure, fac);
-
- /* Based on influence factor, blend between original and optimal */
- ptb->pressure = interpf(optimal, ptb->pressure, influence);
+ /* Based on influence factor, blend between original and optimal smoothed value. */
+ ptb->pressure = interpf(ptb->pressure, total, inf);
+ /* Clamp to maximum stroke thickness to avoid weird results. */
+ CLAMP_MAX(ptb->pressure, max_pressure);
return true;
}
@@ -1632,13 +1984,13 @@ float BKE_gpencil_multiframe_falloff_calc(
if (gpf->framenum < actnum) {
fnum = (float)(gpf->framenum - f_init) / (actnum - f_init);
fnum *= 0.5f;
- value = curvemapping_evaluateF(cur_falloff, 0, fnum);
+ value = BKE_curvemapping_evaluateF(cur_falloff, 0, fnum);
}
/* frames to the left of the active frame */
else if (gpf->framenum > actnum) {
fnum = (float)(gpf->framenum - actnum) / (f_end - actnum);
fnum *= 0.5f;
- value = curvemapping_evaluateF(cur_falloff, 0, fnum + 0.5f);
+ value = BKE_curvemapping_evaluateF(cur_falloff, 0, fnum + 0.5f);
}
else {
value = 1.0f;
@@ -2006,6 +2358,12 @@ bool BKE_gpencil_close_stroke(bGPDstroke *gps)
pt2 = &gps->points[0];
float dist_close = len_v3v3(&pt1->x, &pt2->x);
+ /* if the distance to close is very small, don't need add points and just enable cyclic. */
+ if (dist_close <= dist_avg) {
+ gps->flag |= GP_STROKE_CYCLIC;
+ return true;
+ }
+
/* Calc number of points required using the average distance. */
int tot_newpoints = MAX2(dist_close / dist_avg, 1);
@@ -2022,9 +2380,11 @@ bool BKE_gpencil_close_stroke(bGPDstroke *gps)
pt2 = &gps->points[0];
bGPDspoint *pt = &gps->points[old_tot];
for (int i = 1; i < tot_newpoints + 1; i++, pt++) {
- float step = ((float)i / (float)tot_newpoints);
+ float step = (tot_newpoints > 1) ? ((float)i / (float)tot_newpoints) : 0.99f;
/* Clamp last point to be near, but not on top of first point. */
- CLAMP(step, 0.0f, 0.99f);
+ if ((tot_newpoints > 1) && (i == tot_newpoints)) {
+ step *= 0.99f;
+ }
/* Average point. */
interp_v3_v3v3(&pt->x, &pt1->x, &pt2->x, step);
@@ -2056,3 +2416,162 @@ bool BKE_gpencil_close_stroke(bGPDstroke *gps)
return true;
}
+/* Dissolve points in stroke */
+void BKE_gpencil_dissolve_points(bGPDframe *gpf, bGPDstroke *gps, const short tag)
+{
+ bGPDspoint *pt;
+ MDeformVert *dvert = NULL;
+ int i;
+
+ int tot = gps->totpoints; /* number of points in new buffer */
+ /* first pass: count points to remove */
+ /* Count how many points are selected (i.e. how many to remove) */
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->flag & tag) {
+ /* selected point - one of the points to remove */
+ tot--;
+ }
+ }
+
+ /* if no points are left, we simply delete the entire stroke */
+ if (tot <= 0) {
+ /* remove the entire stroke */
+ if (gps->points) {
+ MEM_freeN(gps->points);
+ }
+ if (gps->dvert) {
+ BKE_gpencil_free_stroke_weights(gps);
+ MEM_freeN(gps->dvert);
+ }
+ if (gps->triangles) {
+ MEM_freeN(gps->triangles);
+ }
+ BLI_freelinkN(&gpf->strokes, gps);
+ }
+ else {
+ /* just copy all points to keep into a smaller buffer */
+ bGPDspoint *new_points = MEM_callocN(sizeof(bGPDspoint) * tot, "new gp stroke points copy");
+ bGPDspoint *npt = new_points;
+
+ MDeformVert *new_dvert = NULL;
+ MDeformVert *ndvert = NULL;
+
+ if (gps->dvert != NULL) {
+ new_dvert = MEM_callocN(sizeof(MDeformVert) * tot, "new gp stroke weights copy");
+ ndvert = new_dvert;
+ }
+
+ (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if ((pt->flag & tag) == 0) {
+ *npt = *pt;
+ npt++;
+
+ if (gps->dvert != NULL) {
+ *ndvert = *dvert;
+ ndvert->dw = MEM_dupallocN(dvert->dw);
+ ndvert++;
+ }
+ }
+ if (gps->dvert != NULL) {
+ dvert++;
+ }
+ }
+
+ /* free the old buffer */
+ if (gps->points) {
+ MEM_freeN(gps->points);
+ }
+ if (gps->dvert) {
+ BKE_gpencil_free_stroke_weights(gps);
+ MEM_freeN(gps->dvert);
+ }
+
+ /* save the new buffer */
+ gps->points = new_points;
+ gps->dvert = new_dvert;
+ gps->totpoints = tot;
+
+ /* triangles cache needs to be recalculated */
+ gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gps->tot_triangles = 0;
+ }
+}
+
+/* Merge by distance ------------------------------------- */
+/* Reduce a series of points when the distance is below a threshold.
+ * Special case for first and last points (both are keeped) for other points,
+ * the merge point always is at first point.
+ * \param gpf: Grease Pencil frame
+ * \param gps: Grease Pencil stroke
+ * \param threshold: Distance between points
+ * \param use_unselected: Set to true to analyze all stroke and not only selected points
+ */
+void BKE_gpencil_merge_distance_stroke(bGPDframe *gpf,
+ bGPDstroke *gps,
+ const float threshold,
+ const bool use_unselected)
+{
+ bGPDspoint *pt = NULL;
+ bGPDspoint *pt_next = NULL;
+ float tagged = false;
+ /* Use square distance to speed up loop */
+ const float th_square = threshold * threshold;
+ /* Need to have something to merge. */
+ if (gps->totpoints < 2) {
+ return;
+ }
+ int i = 0;
+ int step = 1;
+ while ((i < gps->totpoints - 1) && (i + step < gps->totpoints)) {
+ pt = &gps->points[i];
+ if (pt->flag & GP_SPOINT_TAG) {
+ i++;
+ step = 1;
+ continue;
+ }
+ pt_next = &gps->points[i + step];
+ /* Do not recalc tagged points. */
+ if (pt_next->flag & GP_SPOINT_TAG) {
+ step++;
+ continue;
+ }
+ /* Check if contiguous points are selected. */
+ if (!use_unselected) {
+ if (((pt->flag & GP_SPOINT_SELECT) == 0) || ((pt_next->flag & GP_SPOINT_SELECT) == 0)) {
+ i++;
+ step = 1;
+ continue;
+ }
+ }
+ float len_square = len_squared_v3v3(&pt->x, &pt_next->x);
+ if (len_square <= th_square) {
+ tagged = true;
+ if (i != gps->totpoints - 1) {
+ /* Tag second point for delete. */
+ pt_next->flag |= GP_SPOINT_TAG;
+ }
+ else {
+ pt->flag |= GP_SPOINT_TAG;
+ }
+ /* Jump to next pair of points, keeping first point segment equals.*/
+ step++;
+ }
+ else {
+ /* Analyze next point. */
+ i++;
+ step = 1;
+ }
+ }
+
+ /* Always untag extremes. */
+ pt = &gps->points[0];
+ pt->flag &= ~GP_SPOINT_TAG;
+ pt = &gps->points[gps->totpoints - 1];
+ pt->flag &= ~GP_SPOINT_TAG;
+
+ /* Dissolve tagged points */
+ if (tagged) {
+ BKE_gpencil_dissolve_points(gpf, gps, GP_SPOINT_TAG);
+ }
+}
diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c
index 34daba385f6..daa63515c3d 100644
--- a/source/blender/blenkernel/intern/gpencil_modifier.c
+++ b/source/blender/blenkernel/intern/gpencil_modifier.c
@@ -43,6 +43,7 @@
#include "BKE_library_query.h"
#include "BKE_gpencil.h"
#include "BKE_lattice.h"
+#include "BKE_material.h"
#include "BKE_gpencil_modifier.h"
#include "BKE_object.h"
@@ -343,7 +344,7 @@ bool BKE_gpencil_has_time_modifiers(Object *ob)
void BKE_gpencil_stroke_modifiers(Depsgraph *depsgraph,
Object *ob,
bGPDlayer *gpl,
- bGPDframe *UNUSED(gpf),
+ bGPDframe *gpf,
bGPDstroke *gps,
bool is_render)
{
@@ -360,7 +361,7 @@ void BKE_gpencil_stroke_modifiers(Depsgraph *depsgraph,
}
if (mti && mti->deformStroke) {
- mti->deformStroke(md, depsgraph, ob, gpl, gps);
+ mti->deformStroke(md, depsgraph, ob, gpl, gpf, gps);
/* subdivide always requires update */
if (md->type == eGpencilModifierType_Subdiv) {
gps->flag |= GP_STROKE_RECALC_GEOMETRY;
@@ -446,14 +447,6 @@ void BKE_gpencil_eval_geometry(Depsgraph *depsgraph, bGPdata *gpd)
gpl->actframe = BKE_gpencil_layer_getframe(gpl, ctime, GP_GETFRAME_USE_PREV);
}
- /* TODO: Move "derived_gpf" logic here from DRW_gpencil_populate_datablock()?
- * This would be better than inventing our own logic for this stuff...
- */
-
- /* TODO: Move the following code to "BKE_gpencil_eval_done()" (marked as an exit node)
- * later when there's more happening here. For now, let's just keep this in here to avoid
- * needing to have one more node slowing down evaluation...
- */
if (DEG_is_active(depsgraph)) {
bGPdata *gpd_orig = (bGPdata *)DEG_get_original_id(&gpd->id);
@@ -714,6 +707,8 @@ void BKE_gpencil_subdivide(bGPDstroke *gps, int level, int flag)
pt_final->strength = pt->strength;
pt_final->time = pt->time;
pt_final->flag = pt->flag;
+ pt_final->runtime.pt_orig = pt->runtime.pt_orig;
+ pt_final->runtime.idx_orig = pt->runtime.idx_orig;
if (gps->dvert != NULL) {
dvert = &temp_dverts[i];
@@ -736,6 +731,7 @@ void BKE_gpencil_subdivide(bGPDstroke *gps, int level, int flag)
pt_final->strength = interpf(pt->strength, next->strength, 0.5f);
CLAMP(pt_final->strength, GPENCIL_STRENGTH_MIN, 1.0f);
pt_final->time = interpf(pt->time, next->time, 0.5f);
+ pt_final->runtime.pt_orig = NULL;
if (gps->dvert != NULL) {
dvert = &temp_dverts[i];
@@ -781,3 +777,134 @@ void BKE_gpencil_subdivide(bGPDstroke *gps, int level, int flag)
}
}
}
+
+/* Copy frame but do not assign new memory */
+static void gpencil_frame_copy_noalloc(Object *ob, bGPDframe *gpf, bGPDframe *gpf_eval)
+{
+ gpf_eval->prev = gpf->prev;
+ gpf_eval->next = gpf->next;
+ gpf_eval->framenum = gpf->framenum;
+ gpf_eval->flag = gpf->flag;
+ gpf_eval->key_type = gpf->key_type;
+ gpf_eval->runtime = gpf->runtime;
+ copy_m4_m4(gpf_eval->runtime.parent_obmat, gpf->runtime.parent_obmat);
+
+ /* copy strokes */
+ BLI_listbase_clear(&gpf_eval->strokes);
+ for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) {
+ /* make copy of source stroke */
+ bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
+
+ /* copy color to temp fields to apply temporal changes in the stroke */
+ MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps_src->mat_nr + 1);
+ copy_v4_v4(gps_dst->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
+ copy_v4_v4(gps_dst->runtime.tmp_fill_rgba, gp_style->fill_rgba);
+
+ /* Save original pointers for using in edit and select operators. */
+ gps_dst->runtime.gps_orig = gps_src;
+ for (int i = 0; i < gps_src->totpoints; i++) {
+ bGPDspoint *pt_dst = &gps_dst->points[i];
+ pt_dst->runtime.pt_orig = &gps_src->points[i];
+ pt_dst->runtime.idx_orig = i;
+ }
+
+ BLI_addtail(&gpf_eval->strokes, gps_dst);
+ }
+}
+
+/* Ensure there is a evaluated frame */
+static void gpencil_evaluated_frame_ensure(int idx,
+ Object *ob,
+ bGPDframe *gpf,
+ bGPDframe **gpf_eval)
+{
+ /* Create evaluated frames array data or expand. */
+ bGPDframe *evaluated_frames = ob->runtime.gpencil_evaluated_frames;
+ *gpf_eval = &evaluated_frames[idx];
+
+ /* If already exist a evaluated frame create a new one. */
+ if (*gpf_eval != NULL) {
+ /* first clear temp data */
+ BKE_gpencil_free_frame_runtime_data(*gpf_eval);
+ }
+ /* Copy data (do not assign new memory). */
+ gpencil_frame_copy_noalloc(ob, gpf, *gpf_eval);
+}
+
+/* Calculate gpencil modifiers */
+void BKE_gpencil_modifiers_calc(Depsgraph *depsgraph, Scene *scene, Object *ob)
+{
+ /* use original data to set reference pointers to original data */
+ Object *ob_orig = DEG_get_original_object(ob);
+ bGPdata *gpd = (bGPdata *)ob_orig->data;
+ const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
+ const bool simplify_modif = GPENCIL_SIMPLIFY_MODIF(scene, false);
+ const bool is_render = (bool)(DEG_get_mode(depsgraph) == DAG_EVAL_RENDER);
+ const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
+ int cfra_eval = (int)DEG_get_ctime(depsgraph);
+
+ /* Create array of evaluated frames equal to number of layers. */
+ ob->runtime.gpencil_tot_layers = BLI_listbase_count(&gpd->layers);
+ CLAMP_MIN(ob->runtime.gpencil_tot_layers, 1);
+ if (ob->runtime.gpencil_evaluated_frames == NULL) {
+ ob->runtime.gpencil_evaluated_frames = MEM_callocN(
+ sizeof(struct bGPDframe) * ob->runtime.gpencil_tot_layers, __func__);
+ }
+ else {
+ ob->runtime.gpencil_evaluated_frames = MEM_recallocN(ob->runtime.gpencil_evaluated_frames,
+ sizeof(struct bGPDframe) *
+ ob->runtime.gpencil_tot_layers);
+ }
+
+ /* Init general modifiers data. */
+ if (ob->greasepencil_modifiers.first) {
+ BKE_gpencil_lattice_init(ob);
+ }
+
+ /* *****************************************************************
+ * Loop all layers, duplicate data and apply modifiers.
+ *
+ * ******************************************************************/
+ int idx = 0;
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ /* Remap frame (Time modifier) */
+ int remap_cfra = cfra_eval;
+ if ((time_remap) && (!simplify_modif)) {
+ remap_cfra = BKE_gpencil_time_modifier(depsgraph, scene, ob, gpl, cfra_eval, is_render);
+ }
+ bGPDframe *gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
+
+ if (gpf == NULL) {
+ idx++;
+ continue;
+ }
+
+ /* Create a duplicate data set of stroke to modify. */
+ bGPDframe *gpf_eval = NULL;
+ gpencil_evaluated_frame_ensure(idx, ob, gpf, &gpf_eval);
+
+ /* Skip all if some disable flag is enabled. */
+ if ((ob->greasepencil_modifiers.first == NULL) || (is_multiedit) || (simplify_modif)) {
+ idx++;
+ continue;
+ }
+
+ /* Apply geometry modifiers (create new geometry). */
+ if (BKE_gpencil_has_geometry_modifiers(ob)) {
+ BKE_gpencil_geometry_modifiers(depsgraph, ob, gpl, gpf_eval, is_render);
+ }
+
+ /* Loop all strokes and deform them. */
+ for (bGPDstroke *gps = gpf_eval->strokes.first; gps; gps = gps->next) {
+ /* Apply modifiers that only deform geometry */
+ BKE_gpencil_stroke_modifiers(depsgraph, ob, gpl, gpf_eval, gps, is_render);
+ }
+
+ idx++;
+ }
+
+ /* Clear any lattice data. */
+ if (ob->greasepencil_modifiers.first) {
+ BKE_gpencil_lattice_clear(ob);
+ }
+}
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 8e04ef2d3ca..a99407b9bf9 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2766,8 +2766,8 @@ static void do_makepicstring(char *string,
int frame,
const char imtype,
const ImageFormatData *im_format,
- const short use_ext,
- const short use_frames,
+ const bool use_ext,
+ const bool use_frames,
const char *suffix)
{
if (string == NULL) {
diff --git a/source/blender/blenkernel/intern/key.c b/source/blender/blenkernel/intern/key.c
index 61de6a8c06a..9a38f348361 100644
--- a/source/blender/blenkernel/intern/key.c
+++ b/source/blender/blenkernel/intern/key.c
@@ -2066,9 +2066,9 @@ void BKE_keyblock_mesh_calc_normals(struct KeyBlock *kb,
}
/************************* raw coords ************************/
-void BKE_keyblock_update_from_vertcos(Object *ob, KeyBlock *kb, float (*vertCos)[3])
+void BKE_keyblock_update_from_vertcos(Object *ob, KeyBlock *kb, const float (*vertCos)[3])
{
- float(*co)[3] = vertCos;
+ const float(*co)[3] = vertCos;
float *fp = kb->data;
int tot, a;
@@ -2126,7 +2126,7 @@ void BKE_keyblock_update_from_vertcos(Object *ob, KeyBlock *kb, float (*vertCos)
}
}
-void BKE_keyblock_convert_from_vertcos(Object *ob, KeyBlock *kb, float (*vertCos)[3])
+void BKE_keyblock_convert_from_vertcos(Object *ob, KeyBlock *kb, const float (*vertCos)[3])
{
int tot = 0, elemsize;
@@ -2219,7 +2219,7 @@ float (*BKE_keyblock_convert_to_vertcos(Object *ob, KeyBlock *kb))[3]
}
/************************* raw coord offsets ************************/
-void BKE_keyblock_update_from_offset(Object *ob, KeyBlock *kb, float (*ofs)[3])
+void BKE_keyblock_update_from_offset(Object *ob, KeyBlock *kb, const float (*ofs)[3])
{
int a;
float *fp = kb->data;
diff --git a/source/blender/blenkernel/intern/lattice.c b/source/blender/blenkernel/intern/lattice.c
index 83b354ffb4a..e46b7ca5130 100644
--- a/source/blender/blenkernel/intern/lattice.c
+++ b/source/blender/blenkernel/intern/lattice.c
@@ -139,7 +139,7 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
BPoint *bp;
int i, u, v, w;
float fu, fv, fw, uc, vc, wc, du = 0.0, dv = 0.0, dw = 0.0;
- float *co, (*vertexCos)[3] = NULL;
+ float *co, (*vert_coords)[3] = NULL;
/* vertex weight groups are just freed all for now */
if (lt->dvert) {
@@ -159,7 +159,7 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
}
}
- vertexCos = MEM_mallocN(sizeof(*vertexCos) * uNew * vNew * wNew, "tmp_vcos");
+ vert_coords = MEM_mallocN(sizeof(*vert_coords) * uNew * vNew * wNew, "tmp_vcos");
calc_lat_fudu(lt->flag, uNew, &fu, &du);
calc_lat_fudu(lt->flag, vNew, &fv, &dv);
@@ -187,7 +187,7 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
}
}
- co = vertexCos[0];
+ co = vert_coords[0];
for (w = 0, wc = fw; w < wNew; w++, wc += dw) {
for (v = 0, vc = fv; v < vNew; v++, vc += dv) {
for (u = 0, uc = fu; u < uNew; u++, co += 3, uc += du) {
@@ -212,7 +212,7 @@ void BKE_lattice_resize(Lattice *lt, int uNew, int vNew, int wNew, Object *ltOb)
copy_m4_m4(mat, ltOb->obmat);
unit_m4(ltOb->obmat);
- lattice_deform_verts(ltOb, NULL, NULL, vertexCos, uNew * vNew * wNew, NULL, 1.0f);
+ lattice_deform_verts(ltOb, NULL, NULL, vert_coords, uNew * vNew * wNew, NULL, 1.0f);
copy_m4_m4(ltOb->obmat, mat);
lt->typeu = typeu;
@@ -238,10 +238,10 @@ void BKE_lattice_resize(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++) {
- copy_v3_v3(bp->vec, vertexCos[i]);
+ copy_v3_v3(bp->vec, vert_coords[i]);
}
- MEM_freeN(vertexCos);
+ MEM_freeN(vert_coords);
}
void BKE_lattice_init(Lattice *lt)
@@ -747,7 +747,7 @@ static bool calc_curve_deform(
void curve_deform_verts(Object *cuOb,
Object *target,
- float (*vertexCos)[3],
+ float (*vert_coords)[3],
int numVerts,
MDeformVert *dvert,
const int defgrp_index,
@@ -786,11 +786,11 @@ void curve_deform_verts(Object *cuOb,
const float weight = defvert_find_weight(dvert_iter, defgrp_index);
if (weight > 0.0f) {
- mul_m4_v3(cd.curvespace, vertexCos[a]);
- copy_v3_v3(vec, vertexCos[a]);
+ mul_m4_v3(cd.curvespace, vert_coords[a]);
+ copy_v3_v3(vec, vert_coords[a]);
calc_curve_deform(cuOb, vec, defaxis, &cd, NULL);
- interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
- mul_m4_v3(cd.objectspace, vertexCos[a]);
+ interp_v3_v3v3(vert_coords[a], vert_coords[a], vec, weight);
+ mul_m4_v3(cd.objectspace, vert_coords[a]);
}
}
}
@@ -800,8 +800,8 @@ void curve_deform_verts(Object *cuOb,
for (a = 0, dvert_iter = dvert; a < numVerts; a++, dvert_iter++) {
if (defvert_find_weight(dvert_iter, defgrp_index) > 0.0f) {
- mul_m4_v3(cd.curvespace, vertexCos[a]);
- minmax_v3v3_v3(cd.dmin, cd.dmax, vertexCos[a]);
+ mul_m4_v3(cd.curvespace, vert_coords[a]);
+ minmax_v3v3_v3(cd.dmin, cd.dmax, vert_coords[a]);
}
}
@@ -810,10 +810,10 @@ void curve_deform_verts(Object *cuOb,
if (weight > 0.0f) {
/* already in 'cd.curvespace', prev for loop */
- copy_v3_v3(vec, vertexCos[a]);
+ copy_v3_v3(vec, vert_coords[a]);
calc_curve_deform(cuOb, vec, defaxis, &cd, NULL);
- interp_v3_v3v3(vertexCos[a], vertexCos[a], vec, weight);
- mul_m4_v3(cd.objectspace, vertexCos[a]);
+ interp_v3_v3v3(vert_coords[a], vert_coords[a], vec, weight);
+ mul_m4_v3(cd.objectspace, vert_coords[a]);
}
}
}
@@ -821,9 +821,9 @@ void curve_deform_verts(Object *cuOb,
else {
if (cu->flag & CU_DEFORM_BOUNDS_OFF) {
for (a = 0; a < numVerts; a++) {
- mul_m4_v3(cd.curvespace, vertexCos[a]);
- calc_curve_deform(cuOb, vertexCos[a], defaxis, &cd, NULL);
- mul_m4_v3(cd.objectspace, vertexCos[a]);
+ mul_m4_v3(cd.curvespace, vert_coords[a]);
+ calc_curve_deform(cuOb, vert_coords[a], defaxis, &cd, NULL);
+ mul_m4_v3(cd.objectspace, vert_coords[a]);
}
}
else {
@@ -831,14 +831,14 @@ void curve_deform_verts(Object *cuOb,
INIT_MINMAX(cd.dmin, cd.dmax);
for (a = 0; a < numVerts; a++) {
- mul_m4_v3(cd.curvespace, vertexCos[a]);
- minmax_v3v3_v3(cd.dmin, cd.dmax, vertexCos[a]);
+ mul_m4_v3(cd.curvespace, vert_coords[a]);
+ minmax_v3v3_v3(cd.dmin, cd.dmax, vert_coords[a]);
}
for (a = 0; a < numVerts; a++) {
/* already in 'cd.curvespace', prev for loop */
- calc_curve_deform(cuOb, vertexCos[a], defaxis, &cd, NULL);
- mul_m4_v3(cd.objectspace, vertexCos[a]);
+ calc_curve_deform(cuOb, vert_coords[a], defaxis, &cd, NULL);
+ mul_m4_v3(cd.objectspace, vert_coords[a]);
}
}
}
@@ -881,7 +881,7 @@ void curve_deform_vector(
typedef struct LatticeDeformUserdata {
LatticeDeformData *lattice_deform_data;
- float (*vertexCos)[3];
+ float (*vert_coords)[3];
MDeformVert *dvert;
int defgrp_index;
float fac;
@@ -896,18 +896,18 @@ static void lattice_deform_vert_task(void *__restrict userdata,
if (data->dvert != NULL) {
const float weight = defvert_find_weight(data->dvert + index, data->defgrp_index);
if (weight > 0.0f) {
- calc_latt_deform(data->lattice_deform_data, data->vertexCos[index], weight * data->fac);
+ calc_latt_deform(data->lattice_deform_data, data->vert_coords[index], weight * data->fac);
}
}
else {
- calc_latt_deform(data->lattice_deform_data, data->vertexCos[index], data->fac);
+ calc_latt_deform(data->lattice_deform_data, data->vert_coords[index], data->fac);
}
}
void lattice_deform_verts(Object *laOb,
Object *target,
Mesh *mesh,
- float (*vertexCos)[3],
+ float (*vert_coords)[3],
int numVerts,
const char *vgroup,
float fac)
@@ -942,11 +942,13 @@ void lattice_deform_verts(Object *laOb,
}
}
- LatticeDeformUserdata data = {.lattice_deform_data = lattice_deform_data,
- .vertexCos = vertexCos,
- .dvert = dvert,
- .defgrp_index = defgrp_index,
- .fac = fac};
+ LatticeDeformUserdata data = {
+ .lattice_deform_data = lattice_deform_data,
+ .vert_coords = vert_coords,
+ .dvert = dvert,
+ .defgrp_index = defgrp_index,
+ .fac = fac,
+ };
TaskParallelSettings settings;
BLI_parallel_range_settings_defaults(&settings);
@@ -1055,33 +1057,37 @@ void outside_lattice(Lattice *lt)
}
}
-float (*BKE_lattice_vertexcos_get(struct Object *ob, int *r_numVerts))[3]
+void BKE_lattice_vert_coords_get(const Lattice *lt, float (*vert_coords)[3])
{
- Lattice *lt = ob->data;
- int i, numVerts;
- float(*vertexCos)[3];
-
- if (lt->editlatt) {
- lt = lt->editlatt->latt;
+ const int vert_len = lt->pntsu * lt->pntsv * lt->pntsw;
+ for (int i = 0; i < vert_len; i++) {
+ copy_v3_v3(vert_coords[i], lt->def[i].vec);
}
- numVerts = *r_numVerts = lt->pntsu * lt->pntsv * lt->pntsw;
+}
- vertexCos = MEM_mallocN(sizeof(*vertexCos) * numVerts, "lt_vcos");
+float (*BKE_lattice_vert_coords_alloc(const Lattice *lt, int *r_vert_len))[3]
+{
+ const int vert_len = *r_vert_len = lt->pntsu * lt->pntsv * lt->pntsw;
+ float(*vert_coords)[3] = MEM_mallocN(sizeof(*vert_coords) * vert_len, __func__);
+ BKE_lattice_vert_coords_get(lt, vert_coords);
+ return vert_coords;
+}
+void BKE_lattice_vert_coords_apply_with_mat4(struct Lattice *lt,
+ const float (*vertexCos)[3],
+ const float mat[4][4])
+{
+ int i, numVerts = lt->pntsu * lt->pntsv * lt->pntsw;
for (i = 0; i < numVerts; i++) {
- copy_v3_v3(vertexCos[i], lt->def[i].vec);
+ mul_v3_m4v3(lt->def[i].vec, mat, vertexCos[i]);
}
-
- return vertexCos;
}
-void BKE_lattice_vertexcos_apply(struct Object *ob, float (*vertexCos)[3])
+void BKE_lattice_vert_coords_apply(Lattice *lt, const float (*vert_coords)[3])
{
- Lattice *lt = ob->data;
- int i, numVerts = lt->pntsu * lt->pntsv * lt->pntsw;
-
- for (i = 0; i < numVerts; i++) {
- copy_v3_v3(lt->def[i].vec, vertexCos[i]);
+ const int vert_len = lt->pntsu * lt->pntsv * lt->pntsw;
+ for (int i = 0; i < vert_len; i++) {
+ copy_v3_v3(lt->def[i].vec, vert_coords[i]);
}
}
@@ -1093,7 +1099,7 @@ void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, Scene *scene, Objec
Object *ob_orig = DEG_get_original_object(ob);
VirtualModifierData virtualModifierData;
ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
- float(*vertexCos)[3] = NULL;
+ float(*vert_coords)[3] = NULL;
int numVerts, editmode = (lt->editlatt != NULL);
const ModifierEvalContext mectx = {depsgraph, ob, 0};
@@ -1123,29 +1129,37 @@ void BKE_lattice_modifiers_calc(struct Depsgraph *depsgraph, Scene *scene, Objec
continue;
}
- if (!vertexCos) {
- vertexCos = BKE_lattice_vertexcos_get(ob_orig, &numVerts);
+ if (!vert_coords) {
+ Lattice *lt_orig = ob_orig->data;
+ if (lt_orig->editlatt) {
+ lt_orig = lt_orig->editlatt->latt;
+ }
+ vert_coords = BKE_lattice_vert_coords_alloc(lt_orig, &numVerts);
}
- mti->deformVerts(md, &mectx, NULL, vertexCos, numVerts);
+ mti->deformVerts(md, &mectx, NULL, vert_coords, numVerts);
}
if (ob->id.tag & LIB_TAG_COPIED_ON_WRITE) {
- if (vertexCos) {
- BKE_lattice_vertexcos_apply(ob, vertexCos);
- MEM_freeN(vertexCos);
+ if (vert_coords) {
+ BKE_lattice_vert_coords_apply(ob->data, vert_coords);
+ MEM_freeN(vert_coords);
}
}
else {
/* Displist won't do anything; this is just for posterity's sake until we remove it. */
- if (!vertexCos) {
- vertexCos = BKE_lattice_vertexcos_get(ob_orig, &numVerts);
+ if (!vert_coords) {
+ Lattice *lt_orig = ob_orig->data;
+ if (lt_orig->editlatt) {
+ lt_orig = lt_orig->editlatt->latt;
+ }
+ vert_coords = BKE_lattice_vert_coords_alloc(lt_orig, &numVerts);
}
DispList *dl = MEM_callocN(sizeof(*dl), "lt_dl");
dl->type = DL_VERTS;
dl->parts = 1;
dl->nr = numVerts;
- dl->verts = (float *)vertexCos;
+ dl->verts = (float *)vert_coords;
BLI_addtail(&ob->runtime.curve_cache->disp, dl);
}
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 40608285785..de105b9b62a 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -494,6 +494,36 @@ static LayerCollection *collection_from_index(ListBase *lb, const int number, in
}
/**
+ * Determine if a collection is hidden, viewport visibility restricted, or excluded
+ */
+static bool layer_collection_hidden(ViewLayer *view_layer, LayerCollection *lc)
+{
+ if (lc->flag & LAYER_COLLECTION_EXCLUDE) {
+ return true;
+ }
+
+ /* Check visiblilty restriction flags */
+ if (lc->flag & LAYER_COLLECTION_HIDE || lc->collection->flag & COLLECTION_RESTRICT_VIEWPORT) {
+ return true;
+ }
+ else {
+ /* Restriction flags stay set, so we need to check parents */
+ CollectionParent *parent = lc->collection->parents.first;
+
+ if (parent) {
+ lc = BKE_layer_collection_first_from_scene_collection(view_layer, parent->collection);
+
+ return lc && layer_collection_hidden(view_layer, lc);
+ }
+ else {
+ return false;
+ }
+ }
+
+ return false;
+}
+
+/**
* Get the collection for a given index
*/
LayerCollection *BKE_layer_collection_from_index(ViewLayer *view_layer, const int index)
@@ -537,8 +567,9 @@ LayerCollection *BKE_layer_collection_activate_parent(ViewLayer *view_layer, Lay
lc = NULL;
}
- if (lc && (lc->flag & LAYER_COLLECTION_EXCLUDE)) {
- /* Don't activate excluded collections. */
+ /* Don't activate excluded or hidden collections to prevent creating objects in a hidden
+ * collection from the UI */
+ if (lc && layer_collection_hidden(view_layer, lc)) {
return BKE_layer_collection_activate_parent(view_layer, lc);
}
@@ -817,8 +848,7 @@ void BKE_layer_collection_sync(const Scene *scene, ViewLayer *view_layer)
/* Always set a valid active collection. */
LayerCollection *active = view_layer->active_collection;
-
- if (active && (active->flag & LAYER_COLLECTION_EXCLUDE)) {
+ if (active && layer_collection_hidden(view_layer, active)) {
BKE_layer_collection_activate_parent(view_layer, active);
}
else if (active == NULL) {
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 3f095d923b1..2dbca3b4db1 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -1727,8 +1727,8 @@ bool BKE_id_new_name_validate(ListBase *lb, ID *id, const char *tname)
/* This was in 2.43 and previous releases
* however all data in blender should be sorted, not just duplicate names
- * sorting should not hurt, but noting just incase it alters the way other
- * functions work, so sort every time */
+ * sorting should not hurt, but noting just in case it alters the way other
+ * functions work, so sort every time. */
#if 0
if (result) {
id_sort_by_name(lb, id);
@@ -1815,7 +1815,7 @@ static int id_refcount_recompute_callback(void *user_data,
return IDWALK_RET_NOP;
}
-void BLE_main_id_refcount_recompute(struct Main *bmain, const bool do_linked_only)
+void BKE_main_id_refcount_recompute(struct Main *bmain, const bool do_linked_only)
{
ID *id;
diff --git a/source/blender/blenkernel/intern/library_override.c b/source/blender/blenkernel/intern/library_override.c
index fed90ad8982..ce368575492 100644
--- a/source/blender/blenkernel/intern/library_override.c
+++ b/source/blender/blenkernel/intern/library_override.c
@@ -628,7 +628,7 @@ void BKE_main_override_library_operations_create(Main *bmain, const bool force_a
ID *id;
FOREACH_MAIN_ID_BEGIN (bmain, id) {
- if (force_auto ||
+ if ((ID_IS_OVERRIDE_LIBRARY(id) && force_auto) ||
(ID_IS_OVERRIDE_LIBRARY_AUTO(id) && (id->tag & LIB_TAG_OVERRIDE_LIBRARY_AUTOREFRESH))) {
BKE_override_library_operations_create(bmain, id, force_auto);
id->tag &= ~LIB_TAG_OVERRIDE_LIBRARY_AUTOREFRESH;
@@ -703,9 +703,9 @@ void BKE_override_library_update(Main *bmain, ID *local)
local->tag |= LIB_TAG_OVERRIDE_LIBRARY_REFOK;
/* Full rebuild of Depsgraph! */
- DEG_on_visible_update(
- bmain,
- true); /* XXX Is this actual valid replacement for old DAG_relations_tag_update(bmain) ? */
+
+ /* XXX Is this actual valid replacement for old DAG_relations_tag_update(bmain) ? */
+ DEG_on_visible_update(bmain, true);
}
/** Update all overrides from given \a bmain. */
diff --git a/source/blender/blenkernel/intern/library_query.c b/source/blender/blenkernel/intern/library_query.c
index db4265d0894..ca3da0d89c7 100644
--- a/source/blender/blenkernel/intern/library_query.c
+++ b/source/blender/blenkernel/intern/library_query.c
@@ -376,7 +376,7 @@ static void library_foreach_ID_link(Main *bmain,
int i;
if (flag & IDWALK_RECURSE) {
- /* For now, recursion implies read-only. */
+ /* For now, recursion implies read-only. */
flag |= IDWALK_READONLY;
data.ids_handled = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
@@ -1168,10 +1168,8 @@ bool BKE_library_id_can_use_idtype(ID *id_owner, const short id_type_used)
case ID_CA:
return ELEM(id_type_used, ID_OB);
case ID_KE:
- return ELEM(id_type_used,
- ID_ME,
- ID_CU,
- ID_LT); /* Warning! key->from, could be more types in future? */
+ /* Warning! key->from, could be more types in future? */
+ return ELEM(id_type_used, ID_ME, ID_CU, ID_LT);
case ID_SCR:
return ELEM(id_type_used, ID_SCE);
case ID_WO:
@@ -1190,7 +1188,8 @@ bool BKE_library_id_can_use_idtype(ID *id_owner, const short id_type_used)
case ID_MC:
return ELEM(id_type_used, ID_GD, ID_IM);
case ID_MSK:
- return ELEM(id_type_used, ID_MC); /* WARNING! mask->parent.id, not typed. */
+ /* WARNING! mask->parent.id, not typed. */
+ return ELEM(id_type_used, ID_MC);
case ID_LS:
return (ELEM(id_type_used, ID_TE, ID_OB));
case ID_LP:
diff --git a/source/blender/blenkernel/intern/light.c b/source/blender/blenkernel/intern/light.c
index 271bf58fcc6..75c9e0e42a5 100644
--- a/source/blender/blenkernel/intern/light.c
+++ b/source/blender/blenkernel/intern/light.c
@@ -69,7 +69,7 @@ void BKE_light_init(Light *la)
la->coeff_const = 1.0f;
la->coeff_lin = 0.0f;
la->coeff_quad = 0.0f;
- la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f);
+ la->curfalloff = BKE_curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f);
la->cascade_max_dist = 200.0f;
la->cascade_count = 4;
la->cascade_exponent = 0.8f;
@@ -82,7 +82,7 @@ void BKE_light_init(Light *la)
la->att_dist = 40.0f;
la->sun_angle = DEG2RADF(0.526f);
- curvemapping_initialize(la->curfalloff);
+ BKE_curvemapping_initialize(la->curfalloff);
}
Light *BKE_light_add(Main *bmain, const char *name)
@@ -108,7 +108,7 @@ Light *BKE_light_add(Main *bmain, const char *name)
*/
void BKE_light_copy_data(Main *bmain, Light *la_dst, const Light *la_src, const int flag)
{
- la_dst->curfalloff = curvemapping_copy(la_src->curfalloff);
+ la_dst->curfalloff = BKE_curvemapping_copy(la_src->curfalloff);
if (la_src->nodetree) {
/* Note: nodetree is *not* in bmain, however this specific case is handled at lower level
@@ -145,7 +145,7 @@ Light *BKE_light_localize(Light *la)
Light *lan = BKE_libblock_copy_for_localize(&la->id);
- lan->curfalloff = curvemapping_copy(la->curfalloff);
+ lan->curfalloff = BKE_curvemapping_copy(la->curfalloff);
if (la->nodetree) {
lan->nodetree = ntreeLocalize(la->nodetree);
@@ -167,7 +167,7 @@ void BKE_light_free(Light *la)
{
BKE_animdata_free((ID *)la, false);
- curvemapping_free(la->curfalloff);
+ BKE_curvemapping_free(la->curfalloff);
/* is no lib link block, but light extension */
if (la->nodetree) {
diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c
index 31e6d2e89e5..7bfe5a7c8ff 100644
--- a/source/blender/blenkernel/intern/linestyle.c
+++ b/source/blender/blenkernel/intern/linestyle.c
@@ -512,13 +512,13 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_add(FreestyleLineStyle *linestyl
switch (type) {
case LS_MODIFIER_ALONG_STROKE: {
LineStyleAlphaModifier_AlongStroke *p = (LineStyleAlphaModifier_AlongStroke *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
break;
}
case LS_MODIFIER_DISTANCE_FROM_CAMERA: {
LineStyleAlphaModifier_DistanceFromCamera *p = (LineStyleAlphaModifier_DistanceFromCamera *)
m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->range_min = 0.0f;
p->range_max = 10000.0f;
break;
@@ -527,25 +527,25 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_add(FreestyleLineStyle *linestyl
LineStyleAlphaModifier_DistanceFromObject *p = (LineStyleAlphaModifier_DistanceFromObject *)
m;
p->target = NULL;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->range_min = 0.0f;
p->range_max = 10000.0f;
break;
}
case LS_MODIFIER_MATERIAL: {
LineStyleAlphaModifier_Material *p = (LineStyleAlphaModifier_Material *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->mat_attr = LS_MODIFIER_MATERIAL_LINE_A;
break;
}
case LS_MODIFIER_TANGENT: {
LineStyleAlphaModifier_Tangent *p = (LineStyleAlphaModifier_Tangent *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
break;
}
case LS_MODIFIER_NOISE: {
LineStyleAlphaModifier_Noise *p = (LineStyleAlphaModifier_Noise *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
((LineStyleAlphaModifier_Noise *)m)->amplitude = 10.0f;
((LineStyleAlphaModifier_Noise *)m)->period = 10.0f;
((LineStyleAlphaModifier_Noise *)m)->seed = 512;
@@ -553,14 +553,14 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_add(FreestyleLineStyle *linestyl
}
case LS_MODIFIER_CREASE_ANGLE: {
LineStyleAlphaModifier_CreaseAngle *p = (LineStyleAlphaModifier_CreaseAngle *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
((LineStyleAlphaModifier_CreaseAngle *)m)->min_angle = 0.0f;
((LineStyleAlphaModifier_CreaseAngle *)m)->max_angle = DEG2RADF(180.0f);
break;
}
case LS_MODIFIER_CURVATURE_3D: {
LineStyleAlphaModifier_Curvature_3D *p = (LineStyleAlphaModifier_Curvature_3D *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
((LineStyleAlphaModifier_Curvature_3D *)m)->min_curvature = 0.0f;
((LineStyleAlphaModifier_Curvature_3D *)m)->max_curvature = 0.5f;
break;
@@ -588,7 +588,7 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
case LS_MODIFIER_ALONG_STROKE: {
LineStyleAlphaModifier_AlongStroke *p = (LineStyleAlphaModifier_AlongStroke *)m;
LineStyleAlphaModifier_AlongStroke *q = (LineStyleAlphaModifier_AlongStroke *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
break;
}
@@ -597,7 +597,7 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
m;
LineStyleAlphaModifier_DistanceFromCamera *q = (LineStyleAlphaModifier_DistanceFromCamera *)
new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->range_min = p->range_min;
q->range_max = p->range_max;
@@ -612,7 +612,7 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
id_us_plus(&p->target->id);
}
q->target = p->target;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->range_min = p->range_min;
q->range_max = p->range_max;
@@ -621,7 +621,7 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
case LS_MODIFIER_MATERIAL: {
LineStyleAlphaModifier_Material *p = (LineStyleAlphaModifier_Material *)m;
LineStyleAlphaModifier_Material *q = (LineStyleAlphaModifier_Material *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->mat_attr = p->mat_attr;
break;
@@ -629,14 +629,14 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
case LS_MODIFIER_TANGENT: {
LineStyleAlphaModifier_Tangent *p = (LineStyleAlphaModifier_Tangent *)m;
LineStyleAlphaModifier_Tangent *q = (LineStyleAlphaModifier_Tangent *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
break;
}
case LS_MODIFIER_NOISE: {
LineStyleAlphaModifier_Noise *p = (LineStyleAlphaModifier_Noise *)m;
LineStyleAlphaModifier_Noise *q = (LineStyleAlphaModifier_Noise *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->amplitude = p->amplitude;
q->period = p->period;
@@ -646,7 +646,7 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
case LS_MODIFIER_CREASE_ANGLE: {
LineStyleAlphaModifier_CreaseAngle *p = (LineStyleAlphaModifier_CreaseAngle *)m;
LineStyleAlphaModifier_CreaseAngle *q = (LineStyleAlphaModifier_CreaseAngle *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->min_angle = p->min_angle;
q->max_angle = p->max_angle;
@@ -655,7 +655,7 @@ LineStyleModifier *BKE_linestyle_alpha_modifier_copy(FreestyleLineStyle *linesty
case LS_MODIFIER_CURVATURE_3D: {
LineStyleAlphaModifier_Curvature_3D *p = (LineStyleAlphaModifier_Curvature_3D *)m;
LineStyleAlphaModifier_Curvature_3D *q = (LineStyleAlphaModifier_Curvature_3D *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->min_curvature = p->min_curvature;
q->max_curvature = p->max_curvature;
@@ -676,28 +676,28 @@ int BKE_linestyle_alpha_modifier_remove(FreestyleLineStyle *linestyle, LineStyle
}
switch (m->type) {
case LS_MODIFIER_ALONG_STROKE:
- curvemapping_free(((LineStyleAlphaModifier_AlongStroke *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_AlongStroke *)m)->curve);
break;
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
- curvemapping_free(((LineStyleAlphaModifier_DistanceFromCamera *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_DistanceFromCamera *)m)->curve);
break;
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
- curvemapping_free(((LineStyleAlphaModifier_DistanceFromObject *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_DistanceFromObject *)m)->curve);
break;
case LS_MODIFIER_MATERIAL:
- curvemapping_free(((LineStyleAlphaModifier_Material *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_Material *)m)->curve);
break;
case LS_MODIFIER_TANGENT:
- curvemapping_free(((LineStyleAlphaModifier_Tangent *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_Tangent *)m)->curve);
break;
case LS_MODIFIER_NOISE:
- curvemapping_free(((LineStyleAlphaModifier_Noise *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_Noise *)m)->curve);
break;
case LS_MODIFIER_CREASE_ANGLE:
- curvemapping_free(((LineStyleAlphaModifier_CreaseAngle *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_CreaseAngle *)m)->curve);
break;
case LS_MODIFIER_CURVATURE_3D:
- curvemapping_free(((LineStyleAlphaModifier_Curvature_3D *)m)->curve);
+ BKE_curvemapping_free(((LineStyleAlphaModifier_Curvature_3D *)m)->curve);
break;
}
BLI_freelinkN(&linestyle->alpha_modifiers, m);
@@ -755,7 +755,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
switch (type) {
case LS_MODIFIER_ALONG_STROKE: {
LineStyleThicknessModifier_AlongStroke *p = (LineStyleThicknessModifier_AlongStroke *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->value_min = 0.0f;
p->value_max = 1.0f;
break;
@@ -763,7 +763,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
case LS_MODIFIER_DISTANCE_FROM_CAMERA: {
LineStyleThicknessModifier_DistanceFromCamera *p =
(LineStyleThicknessModifier_DistanceFromCamera *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->range_min = 0.0f;
p->range_max = 1000.0f;
p->value_min = 0.0f;
@@ -774,7 +774,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
LineStyleThicknessModifier_DistanceFromObject *p =
(LineStyleThicknessModifier_DistanceFromObject *)m;
p->target = NULL;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->range_min = 0.0f;
p->range_max = 1000.0f;
p->value_min = 0.0f;
@@ -783,7 +783,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
}
case LS_MODIFIER_MATERIAL: {
LineStyleThicknessModifier_Material *p = (LineStyleThicknessModifier_Material *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->mat_attr = LS_MODIFIER_MATERIAL_LINE;
p->value_min = 0.0f;
p->value_max = 1.0f;
@@ -798,7 +798,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
}
case LS_MODIFIER_TANGENT: {
LineStyleThicknessModifier_Tangent *p = (LineStyleThicknessModifier_Tangent *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->min_thickness = 1.0f;
p->max_thickness = 10.0f;
break;
@@ -813,7 +813,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
}
case LS_MODIFIER_CREASE_ANGLE: {
LineStyleThicknessModifier_CreaseAngle *p = (LineStyleThicknessModifier_CreaseAngle *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->min_angle = 0.0f;
p->max_angle = DEG2RADF(180.0f);
p->min_thickness = 1.0f;
@@ -822,7 +822,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_add(FreestyleLineStyle *line
}
case LS_MODIFIER_CURVATURE_3D: {
LineStyleThicknessModifier_Curvature_3D *p = (LineStyleThicknessModifier_Curvature_3D *)m;
- p->curve = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ p->curve = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
p->min_curvature = 0.0f;
p->max_curvature = 0.5f;
p->min_thickness = 1.0f;
@@ -855,7 +855,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
case LS_MODIFIER_ALONG_STROKE: {
LineStyleThicknessModifier_AlongStroke *p = (LineStyleThicknessModifier_AlongStroke *)m;
LineStyleThicknessModifier_AlongStroke *q = (LineStyleThicknessModifier_AlongStroke *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->value_min = p->value_min;
q->value_max = p->value_max;
@@ -866,7 +866,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
(LineStyleThicknessModifier_DistanceFromCamera *)m;
LineStyleThicknessModifier_DistanceFromCamera *q =
(LineStyleThicknessModifier_DistanceFromCamera *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->range_min = p->range_min;
q->range_max = p->range_max;
@@ -883,7 +883,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) {
id_us_plus((ID *)q->target);
}
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->range_min = p->range_min;
q->range_max = p->range_max;
@@ -894,7 +894,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
case LS_MODIFIER_MATERIAL: {
LineStyleThicknessModifier_Material *p = (LineStyleThicknessModifier_Material *)m;
LineStyleThicknessModifier_Material *q = (LineStyleThicknessModifier_Material *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->mat_attr = p->mat_attr;
q->value_min = p->value_min;
@@ -912,7 +912,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
case LS_MODIFIER_TANGENT: {
LineStyleThicknessModifier_Tangent *p = (LineStyleThicknessModifier_Tangent *)m;
LineStyleThicknessModifier_Tangent *q = (LineStyleThicknessModifier_Tangent *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->min_thickness = p->min_thickness;
q->max_thickness = p->max_thickness;
@@ -931,7 +931,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
LineStyleThicknessModifier_Curvature_3D *p = (LineStyleThicknessModifier_Curvature_3D *)m;
LineStyleThicknessModifier_Curvature_3D *q = (LineStyleThicknessModifier_Curvature_3D *)
new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->min_curvature = p->min_curvature;
q->max_curvature = p->max_curvature;
@@ -942,7 +942,7 @@ LineStyleModifier *BKE_linestyle_thickness_modifier_copy(FreestyleLineStyle *lin
case LS_MODIFIER_CREASE_ANGLE: {
LineStyleThicknessModifier_CreaseAngle *p = (LineStyleThicknessModifier_CreaseAngle *)m;
LineStyleThicknessModifier_CreaseAngle *q = (LineStyleThicknessModifier_CreaseAngle *)new_m;
- q->curve = curvemapping_copy(p->curve);
+ q->curve = BKE_curvemapping_copy(p->curve);
q->flags = p->flags;
q->min_angle = p->min_angle;
q->max_angle = p->max_angle;
@@ -965,21 +965,21 @@ int BKE_linestyle_thickness_modifier_remove(FreestyleLineStyle *linestyle, LineS
}
switch (m->type) {
case LS_MODIFIER_ALONG_STROKE:
- curvemapping_free(((LineStyleThicknessModifier_AlongStroke *)m)->curve);
+ BKE_curvemapping_free(((LineStyleThicknessModifier_AlongStroke *)m)->curve);
break;
case LS_MODIFIER_DISTANCE_FROM_CAMERA:
- curvemapping_free(((LineStyleThicknessModifier_DistanceFromCamera *)m)->curve);
+ BKE_curvemapping_free(((LineStyleThicknessModifier_DistanceFromCamera *)m)->curve);
break;
case LS_MODIFIER_DISTANCE_FROM_OBJECT:
- curvemapping_free(((LineStyleThicknessModifier_DistanceFromObject *)m)->curve);
+ BKE_curvemapping_free(((LineStyleThicknessModifier_DistanceFromObject *)m)->curve);
break;
case LS_MODIFIER_MATERIAL:
- curvemapping_free(((LineStyleThicknessModifier_Material *)m)->curve);
+ BKE_curvemapping_free(((LineStyleThicknessModifier_Material *)m)->curve);
break;
case LS_MODIFIER_CALLIGRAPHY:
break;
case LS_MODIFIER_TANGENT:
- curvemapping_free(((LineStyleThicknessModifier_Tangent *)m)->curve);
+ BKE_curvemapping_free(((LineStyleThicknessModifier_Tangent *)m)->curve);
break;
case LS_MODIFIER_NOISE:
break;
diff --git a/source/blender/blenkernel/intern/main.c b/source/blender/blenkernel/intern/main.c
index 170b8d0ab93..8e2c3a11ac0 100644
--- a/source/blender/blenkernel/intern/main.c
+++ b/source/blender/blenkernel/intern/main.c
@@ -485,16 +485,23 @@ int set_listbasepointers(Main *bmain, ListBase **lb)
/* BACKWARDS! also watch order of free-ing! (mesh<->mat), first items freed last.
* This is important because freeing data decreases user-counts of other data-blocks,
* if this data is its self freed it can crash. */
- lb[INDEX_ID_LI] = &(
- bmain->libraries); /* Libraries may be accessed from pretty much any other ID... */
+
+ /* Libraries may be accessed from pretty much any other ID. */
+ lb[INDEX_ID_LI] = &(bmain->libraries);
+
lb[INDEX_ID_IP] = &(bmain->ipo);
- lb[INDEX_ID_AC] = &(
- bmain->actions); /* moved here to avoid problems when freeing with animato (aligorith) */
+
+ /* Moved here to avoid problems when freeing with animato (aligorith). */
+ lb[INDEX_ID_AC] = &(bmain->actions);
+
lb[INDEX_ID_KE] = &(bmain->shapekeys);
- lb[INDEX_ID_PAL] = &(
- bmain->palettes); /* referenced by gpencil, so needs to be before that to avoid crashes */
- lb[INDEX_ID_GD] = &(
- bmain->gpencils); /* referenced by nodes, objects, view, scene etc, before to free after. */
+
+ /* Referenced by gpencil, so needs to be before that to avoid crashes. */
+ lb[INDEX_ID_PAL] = &(bmain->palettes);
+
+ /* Referenced by nodes, objects, view, scene etc, before to free after. */
+ lb[INDEX_ID_GD] = &(bmain->gpencils);
+
lb[INDEX_ID_NT] = &(bmain->nodetrees);
lb[INDEX_ID_IM] = &(bmain->images);
lb[INDEX_ID_TE] = &(bmain->textures);
@@ -502,8 +509,7 @@ int set_listbasepointers(Main *bmain, ListBase **lb)
lb[INDEX_ID_VF] = &(bmain->fonts);
/* Important!: When adding a new object type,
- * the specific data should be inserted here
- */
+ * the specific data should be inserted here. */
lb[INDEX_ID_AR] = &(bmain->armatures);
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index bb93d068bef..fc087ff91b2 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -892,8 +892,8 @@ void BKE_mask_copy_data(Main *UNUSED(bmain),
{
BLI_listbase_clear(&mask_dst->masklayers);
- BKE_mask_layer_copy_list(&mask_dst->masklayers,
- &mask_src->masklayers); /* TODO add unused flag to those as well. */
+ /* TODO add unused flag to those as well. */
+ BKE_mask_layer_copy_list(&mask_dst->masklayers, &mask_src->masklayers);
/* enable fake user by default */
id_fake_user_set(&mask_dst->id);
@@ -1469,15 +1469,6 @@ void BKE_mask_evaluate(Mask *mask, const float ctime, const bool do_newframe)
}
}
-void BKE_mask_evaluate_all_masks(Main *bmain, float ctime, const bool do_newframe)
-{
- Mask *mask;
-
- for (mask = bmain->masks.first; mask; mask = mask->id.next) {
- BKE_mask_evaluate(mask, ctime, do_newframe);
- }
-}
-
void BKE_mask_parent_init(MaskParent *parent)
{
parent->id_type = ID_MC;
@@ -1637,7 +1628,9 @@ MaskLayerShape *BKE_mask_layer_shape_find_frame(MaskLayer *masklay, const int fr
return NULL;
}
-/* when returning 2 - the frame isnt found but before/after frames are */
+/**
+ * When returning 2 - the frame isn't found but before/after frames are.
+ */
int BKE_mask_layer_shape_find_frame_range(MaskLayer *masklay,
const float frame,
MaskLayerShape **r_masklay_shape_a,
@@ -1775,10 +1768,10 @@ static void interp_weights_uv_v2_calc(float r_uv[2],
{
float pt_on_line[2];
r_uv[0] = closest_to_line_v2(pt_on_line, pt, pt_a, pt_b);
+
r_uv[1] = (len_v2v2(pt_on_line, pt) / len_v2v2(pt_a, pt_b)) *
- ((line_point_side_v2(pt_a, pt_b, pt) < 0.0f) ?
- -1.0f :
- 1.0f); /* this line only sets the sign */
+ /* This line only sets the sign. */
+ ((line_point_side_v2(pt_a, pt_b, pt) < 0.0f) ? -1.0f : 1.0f);
}
static void interp_weights_uv_v2_apply(const float uv[2],
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index b01c1189fd1..1545ae4f48f 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -461,7 +461,7 @@ void BKE_material_append_id(Main *bmain, ID *id, Material *ma)
}
}
-Material *BKE_material_pop_id(Main *bmain, ID *id, int index_i, bool update_data)
+Material *BKE_material_pop_id(Main *bmain, ID *id, int index_i)
{
short index = (short)index_i;
Material *ret = NULL;
@@ -489,10 +489,7 @@ Material *BKE_material_pop_id(Main *bmain, ID *id, int index_i, bool update_data
test_all_objects_materials(bmain, id);
}
- if (update_data) {
- /* decrease mat_nr index */
- material_data_index_remove_id(id, index);
- }
+ material_data_index_remove_id(id, index);
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
DEG_relations_tag_update(bmain);
@@ -502,7 +499,7 @@ Material *BKE_material_pop_id(Main *bmain, ID *id, int index_i, bool update_data
return ret;
}
-void BKE_material_clear_id(Main *bmain, ID *id, bool update_data)
+void BKE_material_clear_id(Main *bmain, ID *id)
{
Material ***matar;
if ((matar = give_matarar_id(id))) {
@@ -516,12 +513,9 @@ void BKE_material_clear_id(Main *bmain, ID *id, bool update_data)
MEM_freeN(*matar);
*matar = NULL;
}
- test_all_objects_materials(bmain, id);
- if (update_data) {
- /* decrease mat_nr index */
- material_data_index_clear_id(id);
- }
+ test_all_objects_materials(bmain, id);
+ material_data_index_clear_id(id);
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
DEG_relations_tag_update(bmain);
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index d6fa071009e..19009322975 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -364,12 +364,13 @@ bool BKE_mball_is_any_unselected(const MetaBall *mb)
return false;
}
-/* \brief copy some properties from object to other metaball object with same base name
+/**
+ * \brief copy some properties from object to other metaball object with same base name
*
* When some properties (wiresize, threshold, update flags) of metaball are changed, then this
* properties are copied to all metaballs in same "group" (metaballs with same base name: MBall,
* MBall.001, MBall.002, etc). The most important is to copy properties to the base metaball,
- * because this metaball influence polygonisation of metaballs. */
+ * because this metaball influence polygonization of metaballs. */
void BKE_mball_properties_copy(Scene *scene, Object *active_object)
{
Scene *sce_iter = scene;
@@ -525,7 +526,7 @@ bool BKE_mball_center_bounds(const MetaBall *mb, float r_cent[3])
return false;
}
-void BKE_mball_transform(MetaBall *mb, float mat[4][4], const bool do_props)
+void BKE_mball_transform(MetaBall *mb, const float mat[4][4], const bool do_props)
{
float quat[4];
const float scale = mat4_to_scale(mat);
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 7e755e54eaa..71fd65d1f23 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -536,6 +536,7 @@ void BKE_mesh_init(Mesh *me)
me->size[0] = me->size[1] = me->size[2] = 1.0;
me->smoothresh = DEG2RADF(30);
me->texflag = ME_AUTOSPACE;
+ me->remesh_voxel_size = 0.1f;
CustomData_reset(&me->vdata);
CustomData_reset(&me->edata);
@@ -800,7 +801,7 @@ Mesh *BKE_mesh_from_editmesh_with_coords_thin_wrap(BMEditMesh *em,
me->runtime.is_original = true;
if (vertexCos) {
/* We will own this array in the future. */
- BKE_mesh_apply_vert_coords(me, vertexCos);
+ BKE_mesh_vert_coords_apply(me, vertexCos);
MEM_freeN(vertexCos);
me->runtime.is_original = false;
}
@@ -812,92 +813,6 @@ void BKE_mesh_make_local(Main *bmain, Mesh *me, const bool lib_local)
BKE_id_make_local_generic(bmain, &me->id, true, lib_local);
}
-bool BKE_mesh_uv_cdlayer_rename_index(Mesh *me,
- const int loop_index,
- const int face_index,
- const char *new_name,
- const bool do_tessface)
-{
- CustomData *ldata, *fdata;
- CustomDataLayer *cdlu, *cdlf;
-
- if (me->edit_mesh) {
- ldata = &me->edit_mesh->bm->ldata;
- fdata = NULL; /* No tessellated data in BMesh! */
- }
- else {
- ldata = &me->ldata;
- fdata = &me->fdata;
- }
-
- cdlu = &ldata->layers[loop_index];
- cdlf = (face_index != -1) && fdata && do_tessface ? &fdata->layers[face_index] : NULL;
-
- if (cdlu->name != new_name) {
- /* Mesh validate passes a name from the CD layer as the new name,
- * Avoid memcpy from self to self in this case.
- */
- BLI_strncpy(cdlu->name, new_name, sizeof(cdlu->name));
- CustomData_set_layer_unique_name(ldata, loop_index);
- }
-
- if (cdlf == NULL) {
- return false;
- }
-
- BLI_strncpy(cdlf->name, cdlu->name, sizeof(cdlf->name));
- CustomData_set_layer_unique_name(fdata, face_index);
-
- return true;
-}
-
-bool BKE_mesh_uv_cdlayer_rename(Mesh *me,
- const char *old_name,
- const char *new_name,
- bool do_tessface)
-{
- CustomData *ldata, *fdata;
- if (me->edit_mesh) {
- ldata = &me->edit_mesh->bm->ldata;
- /* No tessellated data in BMesh! */
- fdata = NULL;
- do_tessface = false;
- }
- else {
- ldata = &me->ldata;
- fdata = &me->fdata;
- do_tessface = (do_tessface && fdata->totlayer);
- }
-
- {
- const int lidx_start = CustomData_get_layer_index(ldata, CD_MLOOPUV);
- const int fidx_start = do_tessface ? CustomData_get_layer_index(fdata, CD_MTFACE) : -1;
- int lidx = CustomData_get_named_layer(ldata, CD_MLOOPUV, old_name);
- int fidx = do_tessface ? CustomData_get_named_layer(fdata, CD_MTFACE, old_name) : -1;
-
- /* None of those cases should happen, in theory!
- * Note this assume we have the same number of mtexpoly, mloopuv and mtface layers!
- */
- if (lidx == -1) {
- if (fidx == -1) {
- /* No layer found with this name! */
- return false;
- }
- else {
- lidx = fidx;
- }
- }
-
- /* Go back to absolute indices! */
- lidx += lidx_start;
- if (fidx != -1) {
- fidx += fidx_start;
- }
-
- return BKE_mesh_uv_cdlayer_rename_index(me, lidx, fidx, new_name, do_tessface);
- }
-}
-
void BKE_mesh_boundbox_calc(Mesh *me, float r_loc[3], float r_size[3])
{
BoundBox *bb;
@@ -1272,54 +1187,21 @@ void BKE_mesh_material_remap(Mesh *me, const unsigned int *remap, unsigned int r
#undef MAT_NR_REMAP
}
-void BKE_mesh_smooth_flag_set(Object *meshOb, int enableSmooth)
+void BKE_mesh_smooth_flag_set(Mesh *me, const bool use_smooth)
{
- Mesh *me = meshOb->data;
- int i;
-
- for (i = 0; i < me->totpoly; i++) {
- MPoly *mp = &me->mpoly[i];
-
- if (enableSmooth) {
- mp->flag |= ME_SMOOTH;
- }
- else {
- mp->flag &= ~ME_SMOOTH;
+ if (use_smooth) {
+ for (int i = 0; i < me->totpoly; i++) {
+ me->mpoly[i].flag |= ME_SMOOTH;
}
}
-
- for (i = 0; i < me->totface; i++) {
- MFace *mf = &me->mface[i];
-
- if (enableSmooth) {
- mf->flag |= ME_SMOOTH;
- }
- else {
- mf->flag &= ~ME_SMOOTH;
+ else {
+ for (int i = 0; i < me->totpoly; i++) {
+ me->mpoly[i].flag &= ~ME_SMOOTH;
}
}
}
/**
- * Return a newly MEM_malloc'd array of all the mesh vertex locations
- * \note \a r_verts_len may be NULL
- */
-float (*BKE_mesh_vertexCos_get(const Mesh *me, int *r_verts_len))[3]
-{
- int i, verts_len = me->totvert;
- float(*cos)[3] = MEM_malloc_arrayN(verts_len, sizeof(*cos), "vertexcos1");
-
- if (r_verts_len) {
- *r_verts_len = verts_len;
- }
- for (i = 0; i < verts_len; i++) {
- copy_v3_v3(cos[i], me->mvert[i].co);
- }
-
- return cos;
-}
-
-/**
* Find the index of the loop in 'poly' which references vertex,
* returns -1 if not found
*/
@@ -1470,7 +1352,7 @@ void BKE_mesh_ensure_navmesh(Mesh *me)
void BKE_mesh_tessface_calc(Mesh *mesh)
{
- mesh->totface = BKE_mesh_recalc_tessellation(
+ mesh->totface = BKE_mesh_tessface_calc_ex(
&mesh->fdata,
&mesh->ldata,
&mesh->pdata,
@@ -1664,35 +1546,56 @@ void BKE_mesh_count_selected_items(const Mesh *mesh, int r_count[3])
/* We could support faces in paint modes. */
}
-void BKE_mesh_apply_vert_coords(Mesh *mesh, float (*vertCoords)[3])
+void BKE_mesh_vert_coords_get(const Mesh *mesh, float (*vert_coords)[3])
{
- MVert *vert;
- int i;
-
- /* this will just return the pointer if it wasn't a referenced layer */
- vert = CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert);
- mesh->mvert = vert;
+ const MVert *mv = mesh->mvert;
+ for (int i = 0; i < mesh->totvert; i++, mv++) {
+ copy_v3_v3(vert_coords[i], mv->co);
+ }
+}
- for (i = 0; i < mesh->totvert; ++i, ++vert) {
- copy_v3_v3(vert->co, vertCoords[i]);
+float (*BKE_mesh_vert_coords_alloc(const Mesh *mesh, int *r_vert_len))[3]
+{
+ float(*vert_coords)[3] = MEM_mallocN(sizeof(float[3]) * mesh->totvert, __func__);
+ BKE_mesh_vert_coords_get(mesh, vert_coords);
+ if (r_vert_len) {
+ *r_vert_len = mesh->totvert;
}
+ return vert_coords;
+}
+void BKE_mesh_vert_coords_apply(Mesh *mesh, const float (*vert_coords)[3])
+{
+ /* This will just return the pointer if it wasn't a referenced layer. */
+ MVert *mv = CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert);
+ mesh->mvert = mv;
+ for (int i = 0; i < mesh->totvert; i++, mv++) {
+ copy_v3_v3(mv->co, vert_coords[i]);
+ }
mesh->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
}
-void BKE_mesh_apply_vert_normals(Mesh *mesh, short (*vertNormals)[3])
+void BKE_mesh_vert_coords_apply_with_mat4(Mesh *mesh,
+ const float (*vert_coords)[3],
+ const float mat[4][4])
{
- MVert *vert;
- int i;
-
- /* this will just return the pointer if it wasn't a referenced layer */
- vert = CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert);
- mesh->mvert = vert;
-
- for (i = 0; i < mesh->totvert; ++i, ++vert) {
- copy_v3_v3_short(vert->no, vertNormals[i]);
+ /* This will just return the pointer if it wasn't a referenced layer. */
+ MVert *mv = CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert);
+ mesh->mvert = mv;
+ for (int i = 0; i < mesh->totvert; i++, mv++) {
+ mul_v3_m4v3(mv->co, mat, vert_coords[i]);
}
+ mesh->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
+}
+void BKE_mesh_vert_normals_apply(Mesh *mesh, const short (*vert_normals)[3])
+{
+ /* This will just return the pointer if it wasn't a referenced layer. */
+ MVert *mv = CustomData_duplicate_referenced_layer(&mesh->vdata, CD_MVERT, mesh->totvert);
+ mesh->mvert = mv;
+ for (int i = 0; i < mesh->totvert; i++, mv++) {
+ copy_v3_v3_short(mv->no, vert_normals[i]);
+ }
mesh->runtime.cd_dirty_vert &= ~CD_MASK_NORMAL;
}
diff --git a/source/blender/blenkernel/intern/mesh_convert.c b/source/blender/blenkernel/intern/mesh_convert.c
index fec83ebc899..e072a37acee 100644
--- a/source/blender/blenkernel/intern/mesh_convert.c
+++ b/source/blender/blenkernel/intern/mesh_convert.c
@@ -978,7 +978,7 @@ static void curve_to_mesh_eval_ensure(Object *object)
*
* So we create temporary copy of the object which will use same data as the original bevel, but
* will have no modifiers. */
- Object bevel_object = {NULL};
+ Object bevel_object = {{NULL}};
if (remapped_curve.bevobj != NULL) {
bevel_object = *remapped_curve.bevobj;
BLI_listbase_clear(&bevel_object.modifiers);
@@ -986,7 +986,7 @@ static void curve_to_mesh_eval_ensure(Object *object)
}
/* Same thing for taper. */
- Object taper_object = {NULL};
+ Object taper_object = {{NULL}};
if (remapped_curve.taperobj != NULL) {
taper_object = *remapped_curve.taperobj;
BLI_listbase_clear(&taper_object.modifiers);
@@ -1216,10 +1216,14 @@ Mesh *BKE_mesh_new_from_object_to_bmain(Main *bmain,
Object *object,
bool preserve_all_data_layers)
{
+ BLI_assert(ELEM(object->type, OB_FONT, OB_CURVE, OB_SURF, OB_MBALL, OB_MESH));
+
Mesh *mesh = BKE_mesh_new_from_object(depsgraph, object, preserve_all_data_layers);
if (mesh == NULL) {
- /* Unable to convert the object to a mesh. */
- return NULL;
+ /* Unable to convert the object to a mesh, return an empty one. */
+ Mesh *mesh_in_bmain = BKE_mesh_add(bmain, ((ID *)object->data)->name + 2);
+ id_us_min(&mesh_in_bmain->id);
+ return mesh_in_bmain;
}
/* Make sure mesh only points original datablocks, also increase users of materials and other
@@ -1233,14 +1237,14 @@ Mesh *BKE_mesh_new_from_object_to_bmain(Main *bmain,
BKE_library_foreach_ID_link(
NULL, &mesh->id, foreach_libblock_make_original_callback, NULL, IDWALK_NOP);
- /* Append the mesh to bmain.
- * We do it a bit longer way since there is no simple and clear way of adding existing datablock
- * to the bmain. So we allocate new empty mesh in the bmain (which guarantess all the naming and
- * orders and flags) and move the temporary mesh in place there. */
+ /* Append the mesh to 'bmain'.
+ * We do it a bit longer way since there is no simple and clear way of adding existing data-block
+ * to the 'bmain'. So we allocate new empty mesh in the 'bmain' (which guarantees all the naming
+ * and orders and flags) and move the temporary mesh in place there. */
Mesh *mesh_in_bmain = BKE_mesh_add(bmain, mesh->id.name + 2);
/* NOTE: BKE_mesh_nomain_to_mesh() does not copy materials and instead it preserves them in the
- * destinaion mesh. So we "steal" all related fields before calling it.
+ * destination mesh. So we "steal" all related fields before calling it.
*
* TODO(sergey): We really better have a function which gets and ID and accepts it for the bmain.
*/
@@ -1337,11 +1341,11 @@ Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
if (mti->type == eModifierTypeType_OnlyDeform) {
int numVerts;
- float(*deformedVerts)[3] = BKE_mesh_vertexCos_get(me, &numVerts);
+ float(*deformedVerts)[3] = BKE_mesh_vert_coords_alloc(me, &numVerts);
BKE_id_copy_ex(NULL, &me->id, (ID **)&result, LIB_ID_COPY_LOCALIZE);
mti->deformVerts(md_eval, &mectx, result, deformedVerts, numVerts);
- BKE_mesh_apply_vert_coords(result, deformedVerts);
+ BKE_mesh_vert_coords_apply(result, deformedVerts);
if (build_shapekey_layers) {
add_shapekey_layers(result, me);
@@ -1430,7 +1434,6 @@ static void shapekey_layers_to_keyblocks(Mesh *mesh_src, Mesh *mesh_dst, int act
}
}
-/* This is a Mesh-based copy of DM_to_mesh() */
void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
Mesh *mesh_dst,
Object *ob,
@@ -1438,7 +1441,7 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
bool take_ownership)
{
/* mesh_src might depend on mesh_dst, so we need to do everything with a local copy */
- /* TODO(Sybren): the above claim came from DM_to_mesh();
+ /* TODO(Sybren): the above claim came from 2.7x derived-mesh code (DM_to_mesh);
* check whether it is still true with Mesh */
Mesh tmp = *mesh_dst;
int totvert, totedge /*, totface */ /* UNUSED */, totloop, totpoly;
@@ -1590,7 +1593,6 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
}
}
-/* This is a Mesh-based copy of DM_to_meshkey() */
void BKE_mesh_nomain_to_meshkey(Mesh *mesh_src, Mesh *mesh_dst, KeyBlock *kb)
{
int a, totvert = mesh_src->totvert;
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.c b/source/blender/blenkernel/intern/mesh_evaluate.c
index e28d50cbde4..38762109167 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.c
+++ b/source/blender/blenkernel/intern/mesh_evaluate.c
@@ -448,64 +448,6 @@ void BKE_mesh_calc_normals(Mesh *mesh)
mesh->runtime.cd_dirty_vert &= ~CD_MASK_NORMAL;
}
-void BKE_mesh_calc_normals_tessface(
- MVert *mverts, int numVerts, const MFace *mfaces, int numFaces, float (*r_faceNors)[3])
-{
- float(*tnorms)[3] = MEM_calloc_arrayN((size_t)numVerts, sizeof(*tnorms), "tnorms");
- float(*fnors)[3] = (r_faceNors) ?
- r_faceNors :
- MEM_calloc_arrayN((size_t)numFaces, sizeof(*fnors), "meshnormals");
- int i;
-
- if (!tnorms || !fnors) {
- goto cleanup;
- }
-
- for (i = 0; i < numFaces; i++) {
- const MFace *mf = &mfaces[i];
- float *f_no = fnors[i];
- float *n4 = (mf->v4) ? tnorms[mf->v4] : NULL;
- const float *c4 = (mf->v4) ? mverts[mf->v4].co : NULL;
-
- if (mf->v4) {
- normal_quad_v3(
- f_no, mverts[mf->v1].co, mverts[mf->v2].co, mverts[mf->v3].co, mverts[mf->v4].co);
- }
- else {
- normal_tri_v3(f_no, mverts[mf->v1].co, mverts[mf->v2].co, mverts[mf->v3].co);
- }
-
- accumulate_vertex_normals_v3(tnorms[mf->v1],
- tnorms[mf->v2],
- tnorms[mf->v3],
- n4,
- f_no,
- mverts[mf->v1].co,
- mverts[mf->v2].co,
- mverts[mf->v3].co,
- c4);
- }
-
- /* following Mesh convention; we use vertex coordinate itself for normal in this case */
- for (i = 0; i < numVerts; i++) {
- MVert *mv = &mverts[i];
- float *no = tnorms[i];
-
- if (UNLIKELY(normalize_v3(no) == 0.0f)) {
- normalize_v3_v3(no, mv->co);
- }
-
- normal_float_to_short_v3(mv->no, no);
- }
-
-cleanup:
- MEM_freeN(tnorms);
-
- if (fnors != r_faceNors) {
- MEM_freeN(fnors);
- }
-}
-
void BKE_mesh_calc_normals_looptri(MVert *mverts,
int numVerts,
const MLoop *mloop,
@@ -1320,7 +1262,7 @@ static void split_loop_nor_fan_do(LoopSplitTaskDataCommon *common_data, LoopSpli
}
// print_v2("new clnors", clnors_avg);
}
- /* Extra bonus: since smallstack is local to this func,
+ /* Extra bonus: since small-stack is local to this function,
* no more need to empty it at all cost! */
BKE_lnor_space_custom_data_to_normal(lnor_space, *clnor_ref, lnor);
@@ -1336,7 +1278,7 @@ static void split_loop_nor_fan_do(LoopSplitTaskDataCommon *common_data, LoopSpli
copy_v3_v3(nor, lnor);
}
}
- /* Extra bonus: since smallstack is local to this func,
+ /* Extra bonus: since small-stack is local to this funcion,
* no more need to empty it at all cost! */
}
}
@@ -2378,6 +2320,24 @@ float BKE_mesh_calc_poly_area(const MPoly *mpoly, const MLoop *loopstart, const
}
}
+float BKE_mesh_calc_poly_uv_area(const MPoly *mpoly, const MLoopUV *uv_array)
+{
+
+ int i, l_iter = mpoly->loopstart;
+ float area;
+ float(*vertexcos)[2] = BLI_array_alloca(vertexcos, (size_t)mpoly->totloop);
+
+ /* pack vertex cos into an array for area_poly_v2 */
+ for (i = 0; i < mpoly->totloop; i++, l_iter++) {
+ copy_v2_v2(vertexcos[i], uv_array[l_iter].uv);
+ }
+
+ /* finally calculate the area */
+ area = area_poly_v2((const float(*)[2])vertexcos, (unsigned int)mpoly->totloop);
+
+ return area;
+}
+
/**
* Calculate the volume and volume-weighted centroid of the volume
* formed by the polygon and the origin.
@@ -2985,14 +2945,14 @@ void BKE_mesh_tangent_loops_to_tessdata(CustomData *fdata,
*
* \return number of tessellation faces.
*/
-int BKE_mesh_recalc_tessellation(CustomData *fdata,
- CustomData *ldata,
- CustomData *pdata,
- MVert *mvert,
- int totface,
- int totloop,
- int totpoly,
- const bool do_face_nor_copy)
+int BKE_mesh_tessface_calc_ex(CustomData *fdata,
+ CustomData *ldata,
+ CustomData *pdata,
+ MVert *mvert,
+ int totface,
+ int totloop,
+ int totpoly,
+ const bool do_face_nor_copy)
{
/* use this to avoid locking pthread for _every_ polygon
* and calling the fill function */
diff --git a/source/blender/blenkernel/intern/mesh_mapping.c b/source/blender/blenkernel/intern/mesh_mapping.c
index 78c0fa184f4..d908a248a28 100644
--- a/source/blender/blenkernel/intern/mesh_mapping.c
+++ b/source/blender/blenkernel/intern/mesh_mapping.c
@@ -845,7 +845,7 @@ static bool poly_is_island_boundary_smooth_cb(const MPoly *mp,
const MPoly *mp_other = (mp == &mpoly_array[edge_poly_map->indices[0]]) ?
&mpoly_array[edge_poly_map->indices[1]] :
&mpoly_array[edge_poly_map->indices[0]];
- return (mp_other->flag & ME_SMOOTH) != 0;
+ return (mp_other->flag & ME_SMOOTH) == 0;
}
return true;
}
diff --git a/source/blender/blenkernel/intern/mesh_merge.c b/source/blender/blenkernel/intern/mesh_merge.c
index 71cc20c78b7..ae808b85323 100644
--- a/source/blender/blenkernel/intern/mesh_merge.c
+++ b/source/blender/blenkernel/intern/mesh_merge.c
@@ -235,7 +235,7 @@ static bool poly_gset_compare_fn(const void *k1, const void *k2)
* but the additional checks are costly and not necessary in the case of mirror,
* because each vertex is only merged to its own mirror.
*
- * \note #BKE_mesh_recalc_tessellation has to run on the returned DM
+ * \note #BKE_mesh_tessface_calc_ex has to run on the returned DM
* if you want to access tessfaces.
*/
Mesh *BKE_mesh_merge_verts(Mesh *mesh,
diff --git a/source/blender/blenkernel/intern/mesh_remap.c b/source/blender/blenkernel/intern/mesh_remap.c
index db158ca8fb2..834008ca1ac 100644
--- a/source/blender/blenkernel/intern/mesh_remap.c
+++ b/source/blender/blenkernel/intern/mesh_remap.c
@@ -291,7 +291,7 @@ void BKE_mesh_remap_find_best_match_from_mesh(const MVert *verts_dst,
float best_match = FLT_MAX, match;
const int numverts_src = me_src->totvert;
- float(*vcos_src)[3] = BKE_mesh_vertexCos_get(me_src, NULL);
+ float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL);
mesh_calc_eigen_matrix(NULL, (const float(*)[3])vcos_src, numverts_src, mat_src);
mesh_calc_eigen_matrix(verts_dst, NULL, numverts_dst, mat_dst);
@@ -548,7 +548,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode,
}
else if (ELEM(mode, MREMAP_MODE_VERT_EDGE_NEAREST, MREMAP_MODE_VERT_EDGEINTERP_NEAREST)) {
MEdge *edges_src = me_src->medge;
- float(*vcos_src)[3] = BKE_mesh_vertexCos_get(me_src, NULL);
+ float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL);
BKE_bvhtree_from_mesh_get(&treedata, me_src, BVHTREE_FROM_EDGES, 2);
nearest.index = -1;
@@ -602,7 +602,7 @@ void BKE_mesh_remap_calc_verts_from_mesh(const int mode,
MREMAP_MODE_VERT_POLYINTERP_VNORPROJ)) {
MPoly *polys_src = me_src->mpoly;
MLoop *loops_src = me_src->mloop;
- float(*vcos_src)[3] = BKE_mesh_vertexCos_get(me_src, NULL);
+ float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL);
size_t tmp_buff_size = MREMAP_DEFAULT_BUFSIZE;
float(*vcos)[3] = MEM_mallocN(sizeof(*vcos) * tmp_buff_size, __func__);
@@ -752,7 +752,7 @@ void BKE_mesh_remap_calc_edges_from_mesh(const int mode,
const int num_verts_src = me_src->totvert;
const int num_edges_src = me_src->totedge;
MEdge *edges_src = me_src->medge;
- float(*vcos_src)[3] = BKE_mesh_vertexCos_get(me_src, NULL);
+ float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL);
MeshElemMap *vert_to_edge_src_map;
int *vert_to_edge_src_map_mem;
@@ -901,7 +901,7 @@ void BKE_mesh_remap_calc_edges_from_mesh(const int mode,
MEdge *edges_src = me_src->medge;
MPoly *polys_src = me_src->mpoly;
MLoop *loops_src = me_src->mloop;
- float(*vcos_src)[3] = BKE_mesh_vertexCos_get(me_src, NULL);
+ float(*vcos_src)[3] = BKE_mesh_vert_coords_alloc(me_src, NULL);
BKE_bvhtree_from_mesh_get(&treedata, me_src, BVHTREE_FROM_LOOPTRI, 2);
@@ -1350,7 +1350,7 @@ void BKE_mesh_remap_calc_loops_from_mesh(const int mode,
size_t islands_res_buff_size = MREMAP_DEFAULT_BUFSIZE;
if (!use_from_vert) {
- vcos_src = BKE_mesh_vertexCos_get(me_src, NULL);
+ vcos_src = BKE_mesh_vert_coords_alloc(me_src, NULL);
vcos_interp = MEM_mallocN(sizeof(*vcos_interp) * buff_size_interp, __func__);
indices_interp = MEM_mallocN(sizeof(*indices_interp) * buff_size_interp, __func__);
@@ -1553,7 +1553,9 @@ void BKE_mesh_remap_calc_loops_from_mesh(const int mode,
num_verts_active,
0.0,
2,
- 6);
+ 6,
+ 0,
+ NULL);
}
MEM_freeN(verts_active);
@@ -1594,7 +1596,9 @@ void BKE_mesh_remap_calc_loops_from_mesh(const int mode,
num_looptri_active,
0.0,
2,
- 6);
+ 6,
+ 0,
+ NULL);
}
MEM_freeN(looptri_active);
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.c b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
new file mode 100644
index 00000000000..a5136311a22
--- /dev/null
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.c
@@ -0,0 +1,204 @@
+/*
+ * 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) 2019 by Blender Foundation
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup bke
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <time.h>
+#include <float.h>
+#include <ctype.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "DNA_object_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+
+#include "BKE_mesh.h"
+#include "BKE_mesh_runtime.h"
+#include "BKE_library.h"
+#include "BKE_customdata.h"
+#include "BKE_bvhutils.h"
+#include "BKE_mesh_remesh_voxel.h" /* own include */
+
+#ifdef WITH_OPENVDB
+# include "openvdb_capi.h"
+#endif
+
+#ifdef WITH_OPENVDB
+struct OpenVDBLevelSet *BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(
+ Mesh *mesh, struct OpenVDBTransform *transform)
+{
+ BKE_mesh_runtime_looptri_recalc(mesh);
+ const MLoopTri *looptri = BKE_mesh_runtime_looptri_ensure(mesh);
+ MVertTri *verttri = MEM_callocN(sizeof(*verttri) * BKE_mesh_runtime_looptri_len(mesh),
+ "remesh_looptri");
+ BKE_mesh_runtime_verttri_from_looptri(
+ verttri, mesh->mloop, looptri, BKE_mesh_runtime_looptri_len(mesh));
+
+ unsigned int totfaces = BKE_mesh_runtime_looptri_len(mesh);
+ unsigned int totverts = mesh->totvert;
+ float *verts = (float *)MEM_malloc_arrayN(totverts * 3, sizeof(float), "remesh_input_verts");
+ unsigned int *faces = (unsigned int *)MEM_malloc_arrayN(
+ totfaces * 3, sizeof(unsigned int), "remesh_intput_faces");
+
+ for (unsigned int i = 0; i < totverts; i++) {
+ MVert *mvert = &mesh->mvert[i];
+ verts[i * 3] = mvert->co[0];
+ verts[i * 3 + 1] = mvert->co[1];
+ verts[i * 3 + 2] = mvert->co[2];
+ }
+
+ for (unsigned int i = 0; i < totfaces; i++) {
+ MVertTri *vt = &verttri[i];
+ faces[i * 3] = vt->tri[0];
+ faces[i * 3 + 1] = vt->tri[1];
+ faces[i * 3 + 2] = vt->tri[2];
+ }
+
+ struct OpenVDBLevelSet *level_set = OpenVDBLevelSet_create(false, NULL);
+ OpenVDBLevelSet_mesh_to_level_set(level_set, verts, faces, totverts, totfaces, transform);
+
+ MEM_freeN(verts);
+ MEM_freeN(faces);
+ MEM_freeN(verttri);
+
+ return level_set;
+}
+
+Mesh *BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(struct OpenVDBLevelSet *level_set,
+ double isovalue,
+ double adaptivity,
+ bool relax_disoriented_triangles)
+{
+# ifdef WITH_OPENVDB
+ struct OpenVDBVolumeToMeshData output_mesh;
+ OpenVDBLevelSet_volume_to_mesh(
+ level_set, &output_mesh, isovalue, adaptivity, relax_disoriented_triangles);
+# endif
+
+ Mesh *mesh = BKE_mesh_new_nomain(output_mesh.totvertices,
+ 0,
+ 0,
+ (output_mesh.totquads * 4) + (output_mesh.tottriangles * 3),
+ output_mesh.totquads + output_mesh.tottriangles);
+
+ for (int i = 0; i < output_mesh.totvertices; i++) {
+ copy_v3_v3(mesh->mvert[i].co, &output_mesh.vertices[i * 3]);
+ }
+
+ MPoly *mp = mesh->mpoly;
+ MLoop *ml = mesh->mloop;
+ for (int i = 0; i < output_mesh.totquads; i++, mp++, ml += 4) {
+ mp->loopstart = (int)(ml - mesh->mloop);
+ mp->totloop = 4;
+
+ ml[0].v = output_mesh.quads[i * 4 + 3];
+ ml[1].v = output_mesh.quads[i * 4 + 2];
+ ml[2].v = output_mesh.quads[i * 4 + 1];
+ ml[3].v = output_mesh.quads[i * 4];
+ }
+
+ for (int i = 0; i < output_mesh.tottriangles; i++, mp++, ml += 3) {
+ mp->loopstart = (int)(ml - mesh->mloop);
+ mp->totloop = 3;
+
+ ml[0].v = output_mesh.triangles[i * 3 + 2];
+ ml[1].v = output_mesh.triangles[i * 3 + 1];
+ ml[2].v = output_mesh.triangles[i * 3];
+ }
+
+ BKE_mesh_calc_edges(mesh, false, false);
+ BKE_mesh_calc_normals(mesh);
+
+ MEM_freeN(output_mesh.quads);
+ MEM_freeN(output_mesh.vertices);
+
+ if (output_mesh.tottriangles > 0) {
+ MEM_freeN(output_mesh.triangles);
+ }
+
+ return mesh;
+}
+#endif
+
+Mesh *BKE_mesh_remesh_voxel_to_mesh_nomain(Mesh *mesh, float voxel_size)
+{
+ Mesh *new_mesh = NULL;
+#ifdef WITH_OPENVDB
+ struct OpenVDBLevelSet *level_set;
+ struct OpenVDBTransform *xform = OpenVDBTransform_create();
+ OpenVDBTransform_create_linear_transform(xform, (double)voxel_size);
+ level_set = BKE_mesh_remesh_voxel_ovdb_mesh_to_level_set_create(mesh, xform);
+ new_mesh = BKE_mesh_remesh_voxel_ovdb_volume_to_mesh_nomain(level_set, 0.0, 0.0, false);
+ OpenVDBLevelSet_free(level_set);
+ OpenVDBTransform_free(xform);
+#else
+ UNUSED_VARS(mesh, voxel_size);
+#endif
+ return new_mesh;
+}
+
+void BKE_remesh_reproject_paint_mask(Mesh *target, Mesh *source)
+{
+ BVHTreeFromMesh bvhtree = {
+ .nearest_callback = NULL,
+ };
+ BKE_bvhtree_from_mesh_get(&bvhtree, source, BVHTREE_FROM_VERTS, 2);
+ MVert *target_verts = CustomData_get_layer(&target->vdata, CD_MVERT);
+
+ float *target_mask;
+ if (CustomData_has_layer(&target->vdata, CD_PAINT_MASK)) {
+ target_mask = CustomData_get_layer(&target->vdata, CD_PAINT_MASK);
+ }
+ else {
+ target_mask = CustomData_add_layer(
+ &target->vdata, CD_PAINT_MASK, CD_CALLOC, NULL, target->totvert);
+ }
+
+ float *source_mask;
+ if (CustomData_has_layer(&source->vdata, CD_PAINT_MASK)) {
+ source_mask = CustomData_get_layer(&source->vdata, CD_PAINT_MASK);
+ }
+ else {
+ source_mask = CustomData_add_layer(
+ &source->vdata, CD_PAINT_MASK, CD_CALLOC, NULL, source->totvert);
+ }
+
+ for (int i = 0; i < target->totvert; i++) {
+ float from_co[3];
+ BVHTreeNearest nearest;
+ nearest.index = -1;
+ nearest.dist_sq = FLT_MAX;
+ copy_v3_v3(from_co, target_verts[i].co);
+ BLI_bvhtree_find_nearest(bvhtree.tree, from_co, &nearest, bvhtree.nearest_callback, &bvhtree);
+ if (nearest.index != -1) {
+ target_mask[i] = source_mask[nearest.index];
+ }
+ }
+ free_bvhtree_from_mesh(&bvhtree);
+}
diff --git a/source/blender/blenkernel/intern/multires_reshape.c b/source/blender/blenkernel/intern/multires_reshape.c
index d939267ac5a..9947b96105d 100644
--- a/source/blender/blenkernel/intern/multires_reshape.c
+++ b/source/blender/blenkernel/intern/multires_reshape.c
@@ -891,7 +891,7 @@ bool multiresModifier_reshapeFromObject(struct Depsgraph *depsgraph,
Object *src_eval = DEG_get_evaluated_object(depsgraph, src);
Mesh *src_mesh_eval = mesh_get_eval_final(depsgraph, scene_eval, src_eval, &CD_MASK_BAREMESH);
int num_deformed_verts;
- float(*deformed_verts)[3] = BKE_mesh_vertexCos_get(src_mesh_eval, &num_deformed_verts);
+ float(*deformed_verts)[3] = BKE_mesh_vert_coords_alloc(src_mesh_eval, &num_deformed_verts);
bool result = multires_reshape_from_vertcos(
depsgraph, dst, &reshape_mmd, deformed_verts, num_deformed_verts, false);
MEM_freeN(deformed_verts);
@@ -926,7 +926,7 @@ bool multiresModifier_reshapeFromDeformModifier(struct Depsgraph *depsgraph,
* deformation modifiers will be applied though). */
Mesh *multires_mesh = BKE_multires_create_mesh(depsgraph, scene_eval, &highest_mmd, object);
int num_deformed_verts;
- float(*deformed_verts)[3] = BKE_mesh_vertexCos_get(multires_mesh, &num_deformed_verts);
+ float(*deformed_verts)[3] = BKE_mesh_vert_coords_alloc(multires_mesh, &num_deformed_verts);
/* Apply deformation modifier on the multires, */
const ModifierEvalContext modifier_ctx = {
.depsgraph = depsgraph,
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 0b06bfab2ab..2cc1083aba3 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -448,8 +448,9 @@ static float nlastrip_get_frame_actionclip(NlaStrip *strip, float cframe, short
if (IS_EQF(strip->scale, 0.0f)) {
strip->scale = 1.0f;
}
- scale = fabsf(
- strip->scale); /* scale must be positive - we've got a special flag for reversing */
+
+ /* Scale must be positive - we've got a special flag for reversing. */
+ scale = fabsf(strip->scale);
/* length of referenced action */
actlength = strip->actend - strip->actstart;
@@ -1280,9 +1281,9 @@ static void nlastrip_fix_resize_overlaps(NlaStrip *strip)
* then offset everything else by the remaining defict to give the strip room
*/
nls->start = nls->end - 1.0f;
- offset = ceilf(
- strip->end -
- nls->start); /* XXX: review whether preventing fractionals is good here... */
+
+ /* XXX: review whether preventing fractionals is good here... */
+ offset = ceilf(strip->end - nls->start);
/* apply necessary offset to ensure that the strip has enough space */
for (; nls; nls = nls->next) {
@@ -1329,9 +1330,9 @@ static void nlastrip_fix_resize_overlaps(NlaStrip *strip)
* then offset everything else by the remaining defict to give the strip room
*/
nls->end = nls->start + 1.0f;
- offset = ceilf(
- nls->end -
- strip->start); /* XXX: review whether preventing fractionals is good here... */
+
+ /* XXX: review whether preventing fractionals is good here... */
+ offset = ceilf(nls->end - strip->start);
/* apply necessary offset to ensure that the strip has enough space */
for (; nls; nls = nls->next) {
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 775f6eb37a7..206c59c110a 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -2799,6 +2799,16 @@ int nodeSocketIsHidden(bNodeSocket *sock)
return ((sock->flag & (SOCK_HIDDEN | SOCK_UNAVAIL)) != 0);
}
+void nodeSetSocketAvailability(bNodeSocket *sock, bool is_available)
+{
+ if (is_available) {
+ sock->flag &= ~SOCK_UNAVAIL;
+ }
+ else {
+ sock->flag |= SOCK_UNAVAIL;
+ }
+}
+
/* ************** Node Clipboard *********** */
#define USE_NODE_CB_VALIDATE
@@ -3222,11 +3232,6 @@ void ntreeTagUsedSockets(bNodeTree *ntree)
}
for (link = ntree->links.first; link; link = link->next) {
- /* link is unused if either side is disabled */
- if ((link->fromsock->flag & SOCK_UNAVAIL) || (link->tosock->flag & SOCK_UNAVAIL)) {
- continue;
- }
-
link->fromsock->flag |= SOCK_IN_USE;
link->tosock->flag |= SOCK_IN_USE;
}
@@ -3779,6 +3784,7 @@ static void registerCompositNodes(void)
register_node_type_cmp_despeckle();
register_node_type_cmp_defocus();
register_node_type_cmp_sunbeams();
+ register_node_type_cmp_denoise();
register_node_type_cmp_valtorgb();
register_node_type_cmp_rgbtobw();
@@ -3856,6 +3862,8 @@ static void registerShaderNodes(void)
register_node_type_sh_mapping();
register_node_type_sh_curve_vec();
register_node_type_sh_curve_rgb();
+ register_node_type_sh_map_range();
+ register_node_type_sh_clamp();
register_node_type_sh_math();
register_node_type_sh_vect_math();
register_node_type_sh_vect_transform();
@@ -3925,6 +3933,7 @@ static void registerShaderNodes(void)
register_node_type_sh_tex_brick();
register_node_type_sh_tex_pointdensity();
register_node_type_sh_tex_ies();
+ register_node_type_sh_tex_white_noise();
}
static void registerTextureNodes(void)
@@ -3951,6 +3960,7 @@ static void registerTextureNodes(void)
register_node_type_sh_tangent();
register_node_type_sh_normal_map();
register_node_type_sh_hair_info();
+ register_node_type_sh_volume_info();
register_node_type_tex_checker();
register_node_type_tex_texture();
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index eb2f23a7b2a..ae091f32fbf 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -2226,7 +2226,7 @@ static bool ob_parcurve(Object *ob, Object *par, float mat[4][4])
* dependency cycles. We can't correct anything from here, since that would
* cause a threading conflicts.
*
- * TODO(sergey): Somce of the legit looking cases like T56619 need to be
+ * TODO(sergey): Some of the legit looking cases like T56619 need to be
* looked into, and maybe curve cache (and other dependencies) are to be
* evaluated prior to conversion. */
if (par->runtime.curve_cache == NULL) {
@@ -3587,7 +3587,7 @@ bool BKE_object_shapekey_free(Main *bmain, Object *ob)
BKE_id_free_us(bmain, key);
- return false;
+ return true;
}
bool BKE_object_shapekey_remove(Main *bmain, Object *ob, KeyBlock *kb)
diff --git a/source/blender/blenkernel/intern/object_dupli.c b/source/blender/blenkernel/intern/object_dupli.c
index 0dedbb7e934..7983fe54be5 100644
--- a/source/blender/blenkernel/intern/object_dupli.c
+++ b/source/blender/blenkernel/intern/object_dupli.c
@@ -762,8 +762,8 @@ static void make_duplis_particle_system(const DupliContext *ctx, ParticleSystem
no_draw_flag |= PARS_NO_DISP;
}
- ctime = DEG_get_ctime(
- ctx->depsgraph); /* NOTE: in old animsys, used parent object's timeoffset... */
+ /* NOTE: in old animsys, used parent object's timeoffset... */
+ ctime = DEG_get_ctime(ctx->depsgraph);
totpart = psys->totpart;
totchild = psys->totchild;
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 202eadaa35a..3a330ea0d5a 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -43,6 +43,7 @@
#include "BKE_displist.h"
#include "BKE_editmesh.h"
#include "BKE_effect.h"
+#include "BKE_gpencil_modifier.h"
#include "BKE_image.h"
#include "BKE_key.h"
#include "BKE_layer.h"
@@ -215,6 +216,9 @@ void BKE_object_handle_data_update(Depsgraph *depsgraph, Scene *scene, Object *o
case OB_LATTICE:
BKE_lattice_modifiers_calc(depsgraph, scene, ob);
break;
+ case OB_GPENCIL:
+ BKE_gpencil_modifiers_calc(depsgraph, scene, ob);
+ break;
}
/* particles */
@@ -432,7 +436,7 @@ void BKE_object_eval_eval_base_flags(Depsgraph *depsgraph,
BKE_base_eval_flags(base);
/* For render, compute base visibility again since BKE_base_eval_flags
- * assumed viewport visibility. Selectability does not matter here. */
+ * assumed viewport visibility. Select-ability does not matter here. */
if (DEG_get_mode(depsgraph) == DAG_EVAL_RENDER) {
if (base->flag & BASE_ENABLED_RENDER) {
base->flag |= BASE_VISIBLE;
diff --git a/source/blender/blenkernel/intern/ocean.c b/source/blender/blenkernel/intern/ocean.c
index 39fb668c873..fcceebc3913 100644
--- a/source/blender/blenkernel/intern/ocean.c
+++ b/source/blender/blenkernel/intern/ocean.c
@@ -519,7 +519,7 @@ static void ocean_compute_htilda(void *__restrict userdata,
int j;
- /* note the <= _N/2 here, see the fftw doco
+ /* Note the <= _N/2 here, see the FFTW documentation
* about the mechanics of the complex->real fft storage. */
for (j = 0; j <= o->_N / 2; ++j) {
fftw_complex exp_param1;
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 99ae19c3c30..a46bb36c883 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -658,15 +658,16 @@ void BKE_paint_cavity_curve_preset(Paint *p, int preset)
CurveMap *cm = NULL;
if (!p->cavity_curve) {
- p->cavity_curve = curvemapping_add(1, 0, 0, 1, 1);
+ p->cavity_curve = BKE_curvemapping_add(1, 0, 0, 1, 1);
}
cm = p->cavity_curve->cm;
cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
p->cavity_curve->preset = preset;
- curvemap_reset(cm, &p->cavity_curve->clipr, p->cavity_curve->preset, CURVEMAP_SLOPE_POSITIVE);
- curvemapping_changed(p->cavity_curve, false);
+ BKE_curvemap_reset(
+ cm, &p->cavity_curve->clipr, p->cavity_curve->preset, CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_changed(p->cavity_curve, false);
}
eObjectMode BKE_paint_object_mode_from_paintmode(ePaintMode mode)
@@ -778,7 +779,7 @@ void BKE_paint_init(Main *bmain, Scene *sce, ePaintMode mode, const char col[3])
void BKE_paint_free(Paint *paint)
{
- curvemapping_free(paint->cavity_curve);
+ BKE_curvemapping_free(paint->cavity_curve);
MEM_SAFE_FREE(paint->tool_slots);
}
@@ -789,7 +790,7 @@ void BKE_paint_free(Paint *paint)
void BKE_paint_copy(Paint *src, Paint *tar, const int flag)
{
tar->brush = src->brush;
- tar->cavity_curve = curvemapping_copy(src->cavity_curve);
+ tar->cavity_curve = BKE_curvemapping_copy(src->cavity_curve);
tar->tool_slots = MEM_dupallocN(src->tool_slots);
if ((flag & LIB_ID_CREATE_NO_USER_REFCOUNT) == 0) {
@@ -1158,7 +1159,6 @@ static void sculpt_update_object(
MultiresModifierData *mmd = BKE_sculpt_multires_active(scene, ob);
ss->modifiers_active = sculpt_modifiers_active(scene, sd, ob);
- ss->show_diffuse_color = (sd->flags & SCULPT_SHOW_DIFFUSE) != 0;
ss->show_mask = (sd->flags & SCULPT_HIDE_MASK) == 0;
ss->building_vp_handle = false;
@@ -1213,7 +1213,6 @@ static void sculpt_update_object(
&ss->pmap, &ss->pmap_mem, me->mpoly, me->mloop, me->totvert, me->totpoly, me->totloop);
}
- pbvh_show_diffuse_color_set(ss->pbvh, ss->show_diffuse_color);
pbvh_show_mask_set(ss->pbvh, ss->show_mask);
if (ss->modifiers_active) {
@@ -1223,10 +1222,10 @@ static void sculpt_update_object(
BKE_sculptsession_free_deformMats(ss);
ss->orig_cos = (ss->kb) ? BKE_keyblock_convert_to_vertcos(ob, ss->kb) :
- BKE_mesh_vertexCos_get(me, NULL);
+ BKE_mesh_vert_coords_alloc(me, NULL);
BKE_crazyspace_build_sculpt(depsgraph, scene, ob, &ss->deform_imats, &ss->deform_cos);
- BKE_pbvh_apply_vertCos(ss->pbvh, ss->deform_cos, me->totvert);
+ BKE_pbvh_vert_coords_apply(ss->pbvh, ss->deform_cos, me->totvert);
for (a = 0; a < me->totvert; ++a) {
invert_m3(ss->deform_imats[a]);
@@ -1243,14 +1242,14 @@ static void sculpt_update_object(
/* if pbvh is deformed, key block is already applied to it */
if (ss->kb) {
- bool pbvh_deformed = BKE_pbvh_isDeformed(ss->pbvh);
+ bool pbvh_deformed = BKE_pbvh_is_deformed(ss->pbvh);
if (!pbvh_deformed || ss->deform_cos == NULL) {
float(*vertCos)[3] = BKE_keyblock_convert_to_vertcos(ob, ss->kb);
if (vertCos) {
if (!pbvh_deformed) {
/* apply shape keys coordinates to PBVH */
- BKE_pbvh_apply_vertCos(ss->pbvh, vertCos, me->totvert);
+ BKE_pbvh_vert_coords_apply(ss->pbvh, vertCos, me->totvert);
}
if (ss->deform_cos == NULL) {
ss->deform_cos = vertCos;
@@ -1449,7 +1448,6 @@ static PBVH *build_pbvh_for_dynamic_topology(Object *ob)
ob->sculpt->bm_log,
ob->sculpt->cd_vert_node_offset,
ob->sculpt->cd_face_node_offset);
- pbvh_show_diffuse_color_set(pbvh, ob->sculpt->show_diffuse_color);
pbvh_show_mask_set(pbvh, ob->sculpt->show_mask);
return pbvh;
}
@@ -1474,14 +1472,13 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform)
looptri,
looptris_num);
- pbvh_show_diffuse_color_set(pbvh, ob->sculpt->show_diffuse_color);
pbvh_show_mask_set(pbvh, ob->sculpt->show_mask);
const bool is_deformed = check_sculpt_object_deformed(ob, true);
if (is_deformed && me_eval_deform != NULL) {
int totvert;
- float(*v_cos)[3] = BKE_mesh_vertexCos_get(me_eval_deform, &totvert);
- BKE_pbvh_apply_vertCos(pbvh, v_cos, totvert);
+ float(*v_cos)[3] = BKE_mesh_vert_coords_alloc(me_eval_deform, &totvert);
+ BKE_pbvh_vert_coords_apply(pbvh, v_cos, totvert);
MEM_freeN(v_cos);
}
@@ -1500,7 +1497,6 @@ static PBVH *build_pbvh_from_ccg(Object *ob, SubdivCCG *subdiv_ccg)
(void **)subdiv_ccg->grid_faces,
subdiv_ccg->grid_flag_mats,
subdiv_ccg->grid_hidden);
- pbvh_show_diffuse_color_set(pbvh, ob->sculpt->show_diffuse_color);
pbvh_show_mask_set(pbvh, ob->sculpt->show_mask);
return pbvh;
}
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 64616af945f..ffeba0148a2 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -494,13 +494,13 @@ void BKE_particlesettings_free(ParticleSettings *part)
}
if (part->clumpcurve) {
- curvemapping_free(part->clumpcurve);
+ BKE_curvemapping_free(part->clumpcurve);
}
if (part->roughcurve) {
- curvemapping_free(part->roughcurve);
+ BKE_curvemapping_free(part->roughcurve);
}
if (part->twistcurve) {
- curvemapping_free(part->twistcurve);
+ BKE_curvemapping_free(part->twistcurve);
}
BKE_partdeflect_free(part->pd);
@@ -1764,8 +1764,9 @@ void psys_particle_on_dm(Mesh *mesh_final,
copy_v3_v3(nor, tmpnor);
}
- normalize_v3(
- tmpnor); /* XXX Why not normalize tmpnor before copying it into nor??? -- mont29 */
+ /* XXX Why not normalize tmpnor before copying it into nor??? -- mont29 */
+ normalize_v3(tmpnor);
+
mul_v3_fl(tmpnor, -foffset);
add_v3_v3(vec, tmpnor);
}
@@ -2060,10 +2061,10 @@ int do_guides(Depsgraph *depsgraph,
}
if (clumpcurve) {
- curvemapping_changed_all(clumpcurve);
+ BKE_curvemapping_changed_all(clumpcurve);
}
if (roughcurve) {
- curvemapping_changed_all(roughcurve);
+ BKE_curvemapping_changed_all(roughcurve);
}
{
@@ -2368,22 +2369,22 @@ static bool psys_thread_context_init_path(ParticleThreadContext *ctx,
/* prepare curvemapping tables */
if ((part->child_flag & PART_CHILD_USE_CLUMP_CURVE) && part->clumpcurve) {
- ctx->clumpcurve = curvemapping_copy(part->clumpcurve);
- curvemapping_changed_all(ctx->clumpcurve);
+ ctx->clumpcurve = BKE_curvemapping_copy(part->clumpcurve);
+ BKE_curvemapping_changed_all(ctx->clumpcurve);
}
else {
ctx->clumpcurve = NULL;
}
if ((part->child_flag & PART_CHILD_USE_ROUGH_CURVE) && part->roughcurve) {
- ctx->roughcurve = curvemapping_copy(part->roughcurve);
- curvemapping_changed_all(ctx->roughcurve);
+ ctx->roughcurve = BKE_curvemapping_copy(part->roughcurve);
+ BKE_curvemapping_changed_all(ctx->roughcurve);
}
else {
ctx->roughcurve = NULL;
}
if ((part->child_flag & PART_CHILD_USE_TWIST_CURVE) && part->twistcurve) {
- ctx->twistcurve = curvemapping_copy(part->twistcurve);
- curvemapping_changed_all(ctx->twistcurve);
+ ctx->twistcurve = BKE_curvemapping_copy(part->twistcurve);
+ BKE_curvemapping_changed_all(ctx->twistcurve);
}
else {
ctx->twistcurve = NULL;
@@ -3559,7 +3560,7 @@ ModifierData *object_add_particle_system(Main *bmain, Scene *scene, Object *ob,
psys->totpart = 0;
psys->flag = PSYS_CURRENT;
- psys->cfra = BKE_scene_frame_get_from_ctime(scene, CFRA + 1);
+ psys->cfra = BKE_scene_frame_to_ctime(scene, CFRA + 1);
DEG_relations_tag_update(bmain);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
@@ -3719,42 +3720,42 @@ ParticleSettings *BKE_particlesettings_add(Main *bmain, const char *name)
void BKE_particlesettings_clump_curve_init(ParticleSettings *part)
{
- CurveMapping *cumap = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ CurveMapping *cumap = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
cumap->cm[0].curve[0].x = 0.0f;
cumap->cm[0].curve[0].y = 1.0f;
cumap->cm[0].curve[1].x = 1.0f;
cumap->cm[0].curve[1].y = 1.0f;
- curvemapping_initialize(cumap);
+ BKE_curvemapping_initialize(cumap);
part->clumpcurve = cumap;
}
void BKE_particlesettings_rough_curve_init(ParticleSettings *part)
{
- CurveMapping *cumap = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ CurveMapping *cumap = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
cumap->cm[0].curve[0].x = 0.0f;
cumap->cm[0].curve[0].y = 1.0f;
cumap->cm[0].curve[1].x = 1.0f;
cumap->cm[0].curve[1].y = 1.0f;
- curvemapping_initialize(cumap);
+ BKE_curvemapping_initialize(cumap);
part->roughcurve = cumap;
}
void BKE_particlesettings_twist_curve_init(ParticleSettings *part)
{
- CurveMapping *cumap = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ CurveMapping *cumap = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
cumap->cm[0].curve[0].x = 0.0f;
cumap->cm[0].curve[0].y = 1.0f;
cumap->cm[0].curve[1].x = 1.0f;
cumap->cm[0].curve[1].y = 1.0f;
- curvemapping_initialize(cumap);
+ BKE_curvemapping_initialize(cumap);
part->twistcurve = cumap;
}
@@ -3780,13 +3781,13 @@ void BKE_particlesettings_copy_data(Main *UNUSED(bmain),
part_dst->fluid = MEM_dupallocN(part_src->fluid);
if (part_src->clumpcurve) {
- part_dst->clumpcurve = curvemapping_copy(part_src->clumpcurve);
+ part_dst->clumpcurve = BKE_curvemapping_copy(part_src->clumpcurve);
}
if (part_src->roughcurve) {
- part_dst->roughcurve = curvemapping_copy(part_src->roughcurve);
+ part_dst->roughcurve = BKE_curvemapping_copy(part_src->roughcurve);
}
if (part_src->twistcurve) {
- part_dst->twistcurve = curvemapping_copy(part_src->twistcurve);
+ part_dst->twistcurve = BKE_curvemapping_copy(part_src->twistcurve);
}
part_dst->boids = boid_copy_settings(part_src->boids);
diff --git a/source/blender/blenkernel/intern/particle_child.c b/source/blender/blenkernel/intern/particle_child.c
index b74fd3ff684..3b02e010e7f 100644
--- a/source/blender/blenkernel/intern/particle_child.c
+++ b/source/blender/blenkernel/intern/particle_child.c
@@ -597,7 +597,8 @@ static float do_clump_level(float result[3],
float clump = 0.0f;
if (clumpcurve) {
- clump = pa_clump * (1.0f - clamp_f(curvemapping_evaluateF(clumpcurve, 0, time), 0.0f, 1.0f));
+ clump = pa_clump *
+ (1.0f - clamp_f(BKE_curvemapping_evaluateF(clumpcurve, 0, time), 0.0f, 1.0f));
interp_v3_v3v3(result, co, par_co, clump);
}
@@ -714,7 +715,7 @@ static void do_rough_curve(const float loc[3],
return;
}
- fac *= clamp_f(curvemapping_evaluateF(roughcurve, 0, time), 0.0f, 1.0f);
+ fac *= clamp_f(BKE_curvemapping_evaluateF(roughcurve, 0, time), 0.0f, 1.0f);
copy_v3_v3(rco, loc);
mul_v3_fl(rco, time);
@@ -749,15 +750,15 @@ static void twist_get_axis(const ParticleChildModifierContext *modifier_ctx,
}
}
-static float curvemapping_integrate_clamped(CurveMapping *curve,
- float start,
- float end,
- float step)
+static float BKE_curvemapping_integrate_clamped(CurveMapping *curve,
+ float start,
+ float end,
+ float step)
{
float integral = 0.0f;
float x = start;
while (x < end) {
- float y = curvemapping_evaluateF(curve, 0, x);
+ float y = BKE_curvemapping_evaluateF(curve, 0, x);
y = clamp_f(y, 0.0f, 1.0f);
/* TODO(sergey): Clamp last step to end. */
integral += y * step;
@@ -804,7 +805,7 @@ static void do_twist(const ParticleChildModifierContext *modifier_ctx,
}
if (twist_curve != NULL) {
const int num_segments = twist_num_segments(modifier_ctx);
- angle *= curvemapping_integrate_clamped(twist_curve, 0.0f, time, 1.0f / num_segments);
+ angle *= BKE_curvemapping_integrate_clamped(twist_curve, 0.0f, time, 1.0f / num_segments);
}
else {
angle *= time;
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index 5685e5cd05e..e328ae8952e 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -563,13 +563,13 @@ void psys_thread_context_free(ParticleThreadContext *ctx)
BLI_kdtree_3d_free(ctx->tree);
if (ctx->clumpcurve != NULL) {
- curvemapping_free(ctx->clumpcurve);
+ BKE_curvemapping_free(ctx->clumpcurve);
}
if (ctx->roughcurve != NULL) {
- curvemapping_free(ctx->roughcurve);
+ BKE_curvemapping_free(ctx->roughcurve);
}
if (ctx->twistcurve != NULL) {
- curvemapping_free(ctx->twistcurve);
+ BKE_curvemapping_free(ctx->twistcurve);
}
}
@@ -1958,10 +1958,10 @@ static void sphclassical_density_accum_cb(void *userdata,
pfr->data[1] += q / npa->sphdensity;
}
-static void sphclassical_neighbour_accum_cb(void *userdata,
- int index,
- const float co[3],
- float UNUSED(squared_dist))
+static void sphclassical_neighbor_accum_cb(void *userdata,
+ int index,
+ const float co[3],
+ float UNUSED(squared_dist))
{
SPHRangeData *pfr = (SPHRangeData *)userdata;
ParticleData *npa = pfr->npsys->particles + index;
@@ -2031,7 +2031,7 @@ static void sphclassical_force_cb(void *sphdata_v,
pfr.pa = pa;
sph_evaluate_func(
- NULL, psys, state->co, &pfr, interaction_radius, sphclassical_neighbour_accum_cb);
+ NULL, psys, state->co, &pfr, interaction_radius, sphclassical_neighbor_accum_cb);
pressure = stiffness * (pow7f(pa->sphdensity / rest_density) - 1.0f);
/* multiply by mass so that we return a force, not accel */
@@ -3490,10 +3490,10 @@ static void do_hair_dynamics(ParticleSimulationData *sim)
psys->clmd->sim_parms->effector_weights = psys->part->effector_weights;
BKE_id_copy_ex(NULL, &psys->hair_in_mesh->id, (ID **)&psys->hair_out_mesh, LIB_ID_COPY_LOCALIZE);
- deformedVerts = BKE_mesh_vertexCos_get(psys->hair_out_mesh, NULL);
+ deformedVerts = BKE_mesh_vert_coords_alloc(psys->hair_out_mesh, NULL);
clothModifier_do(
psys->clmd, sim->depsgraph, sim->scene, sim->ob, psys->hair_in_mesh, deformedVerts);
- BKE_mesh_apply_vert_coords(psys->hair_out_mesh, deformedVerts);
+ BKE_mesh_vert_coords_apply(psys->hair_out_mesh, deformedVerts);
MEM_freeN(deformedVerts);
diff --git a/source/blender/blenkernel/intern/pbvh.c b/source/blender/blenkernel/intern/pbvh.c
index 860e2bdaa93..cea68a0c525 100644
--- a/source/blender/blenkernel/intern/pbvh.c
+++ b/source/blender/blenkernel/intern/pbvh.c
@@ -533,7 +533,7 @@ static void pbvh_build(PBVH *bvh, BB *cb, BBC *prim_bbc, int totprim)
* Do a full rebuild with on Mesh data structure.
*
* \note Unlike mpoly/mloop/verts, looptri is **totally owned** by PBVH
- * (which means it may rewrite it if needed, see #BKE_pbvh_apply_vertCos().
+ * (which means it may rewrite it if needed, see #BKE_pbvh_vert_coords_apply().
*/
void BKE_pbvh_build_mesh(PBVH *bvh,
const MPoly *mpoly,
@@ -2306,7 +2306,7 @@ void BKE_pbvh_node_layer_disp_free(PBVHNode *node)
}
}
-float (*BKE_pbvh_get_vertCos(PBVH *pbvh))[3]
+float (*BKE_pbvh_vert_coords_alloc(PBVH *pbvh))[3]
{
float(*vertCos)[3] = NULL;
@@ -2324,7 +2324,7 @@ float (*BKE_pbvh_get_vertCos(PBVH *pbvh))[3]
return vertCos;
}
-void BKE_pbvh_apply_vertCos(PBVH *pbvh, float (*vertCos)[3], const int totvert)
+void BKE_pbvh_vert_coords_apply(PBVH *pbvh, const float (*vertCos)[3], const int totvert)
{
if (totvert != pbvh->totvert) {
BLI_assert(!"PBVH: Given deforming vcos number does not natch PBVH vertex number!");
@@ -2368,7 +2368,7 @@ void BKE_pbvh_apply_vertCos(PBVH *pbvh, float (*vertCos)[3], const int totvert)
}
}
-bool BKE_pbvh_isDeformed(PBVH *pbvh)
+bool BKE_pbvh_is_deformed(PBVH *pbvh)
{
return pbvh->deformed;
}
@@ -2501,11 +2501,6 @@ bool pbvh_has_mask(PBVH *bvh)
return false;
}
-void pbvh_show_diffuse_color_set(PBVH *bvh, bool show_diffuse_color)
-{
- bvh->show_diffuse_color = !pbvh_has_mask(bvh) || show_diffuse_color;
-}
-
void pbvh_show_mask_set(PBVH *bvh, bool show_mask)
{
bvh->show_mask = show_mask;
diff --git a/source/blender/blenkernel/intern/pbvh_intern.h b/source/blender/blenkernel/intern/pbvh_intern.h
index dc9d796075b..e74a8d43c68 100644
--- a/source/blender/blenkernel/intern/pbvh_intern.h
+++ b/source/blender/blenkernel/intern/pbvh_intern.h
@@ -152,8 +152,6 @@ struct PBVH {
/* flag are verts/faces deformed */
bool deformed;
-
- bool show_diffuse_color;
bool show_mask;
/* Dynamic topology */
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index bf33e076e32..13d0f1adb84 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -2073,10 +2073,9 @@ static int ptcache_path(PTCacheID *pid, char *filename)
file[i - 6] = '\0';
}
- BLI_snprintf(filename,
- MAX_PTCACHE_PATH,
- "//" PTCACHE_PATH "%s",
- file); /* add blend file name to pointcache dir */
+ /* Add blend file name to pointcache dir. */
+ BLI_snprintf(filename, MAX_PTCACHE_PATH, "//" PTCACHE_PATH "%s", file);
+
BLI_path_abs(filename, blendfilename);
return BLI_add_slash(filename); /* new strlen() */
}
@@ -2130,24 +2129,17 @@ static int ptcache_filename(PTCacheID *pid, char *filename, int cfra, short do_p
if (pid->cache->flag & PTCACHE_EXTERNAL) {
if (pid->cache->index >= 0) {
- BLI_snprintf(newname,
- MAX_PTCACHE_FILE,
- "_%06d_%02u%s",
- cfra,
- pid->stack_index,
- ext); /* always 6 chars */
+ /* Always 6 chars. */
+ BLI_snprintf(newname, MAX_PTCACHE_FILE, "_%06d_%02u%s", cfra, pid->stack_index, ext);
}
else {
- BLI_snprintf(newname, MAX_PTCACHE_FILE, "_%06d%s", cfra, ext); /* always 6 chars */
+ /* Always 6 chars. */
+ BLI_snprintf(newname, MAX_PTCACHE_FILE, "_%06d%s", cfra, ext);
}
}
else {
- BLI_snprintf(newname,
- MAX_PTCACHE_FILE,
- "_%06d_%02u%s",
- cfra,
- pid->stack_index,
- ext); /* always 6 chars */
+ /* Always 6 chars. */
+ BLI_snprintf(newname, MAX_PTCACHE_FILE, "_%06d_%02u%s", cfra, pid->stack_index, ext);
}
len += 16;
}
@@ -2178,8 +2170,9 @@ static PTCacheFile *ptcache_file_open(PTCacheID *pid, int mode, int cfra)
fp = BLI_fopen(filename, "rb");
}
else if (mode == PTCACHE_FILE_WRITE) {
- BLI_make_existing_file(
- filename); /* will create the dir if needs be, same as //textures is created */
+ /* Will create the dir if needs be, same as "//textures" is created. */
+ BLI_make_existing_file(filename);
+
fp = BLI_fopen(filename, "wb");
}
else if (mode == PTCACHE_FILE_UPDATE) {
@@ -3337,7 +3330,7 @@ int BKE_ptcache_write(PTCacheID *pid, unsigned int cfra)
cache->cached_frames[cfra - cache->startframe] = 1;
}
- BKE_ptcache_update_info(pid);
+ cache->flag |= PTCACHE_FLAG_INFO_DIRTY;
return !error;
}
@@ -3500,8 +3493,9 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, unsigned int cfra)
break;
}
- BKE_ptcache_update_info(pid);
+ pid->cache->flag |= PTCACHE_FLAG_INFO_DIRTY;
}
+
int BKE_ptcache_id_exist(PTCacheID *pid, int cfra)
{
if (!pid->cache) {
@@ -3559,7 +3553,7 @@ void BKE_ptcache_id_time(
if (timescale) {
time = BKE_scene_frame_get(scene);
- nexttime = BKE_scene_frame_get_from_ctime(scene, CFRA + 1.0f);
+ nexttime = BKE_scene_frame_to_ctime(scene, CFRA + 1.0f);
*timescale = MAX2(nexttime - time, 0.0f);
}
@@ -4288,7 +4282,7 @@ void BKE_ptcache_toggle_disk_cache(PTCacheID *pid)
BKE_ptcache_id_time(pid, NULL, 0.0f, NULL, NULL, NULL);
- BKE_ptcache_update_info(pid);
+ cache->flag |= PTCACHE_FLAG_INFO_DIRTY;
if ((cache->flag & PTCACHE_DISK_CACHE) == 0) {
if (cache->index) {
@@ -4461,7 +4455,8 @@ void BKE_ptcache_load_external(PTCacheID *pid)
cache->cached_frames = NULL;
cache->cached_frames_len = 0;
}
- BKE_ptcache_update_info(pid);
+
+ cache->flag |= PTCACHE_FLAG_INFO_DIRTY;
}
void BKE_ptcache_update_info(PTCacheID *pid)
@@ -4469,7 +4464,9 @@ void BKE_ptcache_update_info(PTCacheID *pid)
PointCache *cache = pid->cache;
PTCacheExtra *extra = NULL;
int totframes = 0;
- char mem_info[64];
+ char mem_info[sizeof(((PointCache *)0)->info) / sizeof(*(((PointCache *)0)->info))];
+
+ cache->flag &= ~PTCACHE_FLAG_INFO_DIRTY;
if (cache->flag & PTCACHE_EXTERNAL) {
int cfra = cache->startframe;
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index c9b18dfc7e6..ec73406c14c 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -1607,7 +1607,7 @@ static void rigidbody_update_sim_ob(
/* create dummy 'point' which represents last known position of object as result of sim */
/* XXX: this can create some inaccuracies with sim position,
- * but is probably better than using unsimulated vals? */
+ * but is probably better than using un-simulated values? */
RB_body_get_position(rbo->shared->physics_object, eff_loc);
RB_body_get_linear_velocity(rbo->shared->physics_object, eff_vel);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index a447b828bb1..1ef93427253 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -176,10 +176,10 @@ ToolSettings *BKE_toolsettings_copy(ToolSettings *toolsettings, const int flag)
ts->particle.object = NULL;
/* duplicate Grease Pencil interpolation curve */
- ts->gp_interpolate.custom_ipo = curvemapping_copy(ts->gp_interpolate.custom_ipo);
+ ts->gp_interpolate.custom_ipo = BKE_curvemapping_copy(ts->gp_interpolate.custom_ipo);
/* duplicate Grease Pencil multiframe fallof */
- ts->gp_sculpt.cur_falloff = curvemapping_copy(ts->gp_sculpt.cur_falloff);
- ts->gp_sculpt.cur_primitive = curvemapping_copy(ts->gp_sculpt.cur_primitive);
+ ts->gp_sculpt.cur_falloff = BKE_curvemapping_copy(ts->gp_sculpt.cur_falloff);
+ ts->gp_sculpt.cur_primitive = BKE_curvemapping_copy(ts->gp_sculpt.cur_primitive);
return ts;
}
@@ -212,14 +212,14 @@ void BKE_toolsettings_free(ToolSettings *toolsettings)
/* free Grease Pencil interpolation curve */
if (toolsettings->gp_interpolate.custom_ipo) {
- curvemapping_free(toolsettings->gp_interpolate.custom_ipo);
+ BKE_curvemapping_free(toolsettings->gp_interpolate.custom_ipo);
}
/* free Grease Pencil multiframe falloff curve */
if (toolsettings->gp_sculpt.cur_falloff) {
- curvemapping_free(toolsettings->gp_sculpt.cur_falloff);
+ BKE_curvemapping_free(toolsettings->gp_sculpt.cur_falloff);
}
if (toolsettings->gp_sculpt.cur_primitive) {
- curvemapping_free(toolsettings->gp_sculpt.cur_primitive);
+ BKE_curvemapping_free(toolsettings->gp_sculpt.cur_primitive);
}
MEM_freeN(toolsettings);
@@ -291,7 +291,7 @@ void BKE_scene_copy_data(Main *bmain, Scene *sce_dst, const Scene *sce_src, cons
BKE_color_managed_view_settings_copy(&sce_dst->r.bake.im_format.view_settings,
&sce_src->r.bake.im_format.view_settings);
- curvemapping_copy_data(&sce_dst->r.mblur_shutter_curve, &sce_src->r.mblur_shutter_curve);
+ BKE_curvemapping_copy_data(&sce_dst->r.mblur_shutter_curve, &sce_src->r.mblur_shutter_curve);
/* tool settings */
sce_dst->toolsettings = BKE_toolsettings_copy(sce_dst->toolsettings, flag_subdata);
@@ -347,7 +347,7 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
sce_copy = BKE_scene_add(bmain, sce->id.name + 2);
rv = sce_copy->r.views;
- curvemapping_free_data(&sce_copy->r.mblur_shutter_curve);
+ BKE_curvemapping_free_data(&sce_copy->r.mblur_shutter_curve);
sce_copy->r = sce->r;
sce_copy->r.views = rv;
sce_copy->unit = sce->unit;
@@ -380,7 +380,7 @@ Scene *BKE_scene_copy(Main *bmain, Scene *sce, int type)
BKE_color_managed_view_settings_copy(&sce_copy->r.bake.im_format.view_settings,
&sce->r.bake.im_format.view_settings);
- curvemapping_copy_data(&sce_copy->r.mblur_shutter_curve, &sce->r.mblur_shutter_curve);
+ BKE_curvemapping_copy_data(&sce_copy->r.mblur_shutter_curve, &sce->r.mblur_shutter_curve);
/* viewport display settings */
sce_copy->display = sce->display;
@@ -515,7 +515,7 @@ void BKE_scene_free_ex(Scene *sce, const bool do_id_user)
BKE_color_managed_view_settings_free(&sce->view_settings);
BKE_previewimg_free(&sce->preview);
- curvemapping_free_data(&sce->r.mblur_shutter_curve);
+ BKE_curvemapping_free_data(&sce->r.mblur_shutter_curve);
for (ViewLayer *view_layer = sce->view_layers.first, *view_layer_next; view_layer;
view_layer = view_layer_next) {
@@ -653,12 +653,12 @@ void BKE_scene_init(Scene *sce)
sce->r.unit_line_thickness = 1.0f;
mblur_shutter_curve = &sce->r.mblur_shutter_curve;
- curvemapping_set_defaults(mblur_shutter_curve, 1, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(mblur_shutter_curve);
- curvemap_reset(mblur_shutter_curve->cm,
- &mblur_shutter_curve->clipr,
- CURVE_PRESET_MAX,
- CURVEMAP_SLOPE_POS_NEG);
+ BKE_curvemapping_set_defaults(mblur_shutter_curve, 1, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(mblur_shutter_curve);
+ BKE_curvemap_reset(mblur_shutter_curve->cm,
+ &mblur_shutter_curve->clipr,
+ CURVE_PRESET_MAX,
+ CURVEMAP_SLOPE_POS_NEG);
sce->toolsettings = MEM_callocN(sizeof(struct ToolSettings), "Tool Settings Struct");
@@ -704,19 +704,19 @@ void BKE_scene_init(Scene *sce)
sce->toolsettings->imapaint.seam_bleed = 2;
/* grease pencil multiframe falloff curve */
- sce->toolsettings->gp_sculpt.cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ sce->toolsettings->gp_sculpt.cur_falloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
CurveMapping *gp_falloff_curve = sce->toolsettings->gp_sculpt.cur_falloff;
- curvemapping_initialize(gp_falloff_curve);
- curvemap_reset(
+ BKE_curvemapping_initialize(gp_falloff_curve);
+ BKE_curvemap_reset(
gp_falloff_curve->cm, &gp_falloff_curve->clipr, CURVE_PRESET_GAUSS, CURVEMAP_SLOPE_POSITIVE);
- sce->toolsettings->gp_sculpt.cur_primitive = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ sce->toolsettings->gp_sculpt.cur_primitive = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
CurveMapping *gp_primitive_curve = sce->toolsettings->gp_sculpt.cur_primitive;
- curvemapping_initialize(gp_primitive_curve);
- curvemap_reset(gp_primitive_curve->cm,
- &gp_primitive_curve->clipr,
- CURVE_PRESET_BELL,
- CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_initialize(gp_primitive_curve);
+ BKE_curvemap_reset(gp_primitive_curve->cm,
+ &gp_primitive_curve->clipr,
+ CURVE_PRESET_BELL,
+ CURVEMAP_SLOPE_POSITIVE);
sce->toolsettings->gp_sculpt.guide.spacing = 20.0f;
@@ -1347,11 +1347,11 @@ bool BKE_scene_validate_setscene(Main *bmain, Scene *sce)
*/
float BKE_scene_frame_get(const Scene *scene)
{
- return BKE_scene_frame_get_from_ctime(scene, scene->r.cfra);
+ return BKE_scene_frame_to_ctime(scene, scene->r.cfra);
}
/* This function is used to obtain arbitrary fractional frames */
-float BKE_scene_frame_get_from_ctime(const Scene *scene, const float frame)
+float BKE_scene_frame_to_ctime(const Scene *scene, const float frame)
{
float ctime = frame;
ctime += scene->r.subframe;
diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c
index b151bc7f092..89f3f9ef9fd 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -1646,7 +1646,7 @@ static void do_blend_effect_float(
case SEQ_TYPE_DARKEN:
apply_blend_function_float(facf0, facf1, x, y, rect1, rect2, out, blend_color_darken_float);
break;
- case SEQ_TYPE_BURN:
+ case SEQ_TYPE_COLOR_BURN:
apply_blend_function_float(facf0, facf1, x, y, rect1, rect2, out, blend_color_burn_float);
break;
case SEQ_TYPE_LINEAR_BURN:
@@ -1734,7 +1734,7 @@ static void do_blend_effect_byte(float facf0,
case SEQ_TYPE_DARKEN:
apply_blend_function_byte(facf0, facf1, x, y, rect1, rect2, out, blend_color_darken_byte);
break;
- case SEQ_TYPE_BURN:
+ case SEQ_TYPE_COLOR_BURN:
apply_blend_function_byte(facf0, facf1, x, y, rect1, rect2, out, blend_color_burn_byte);
break;
case SEQ_TYPE_LINEAR_BURN:
@@ -4130,7 +4130,7 @@ static struct SeqEffectHandle get_sequence_effect_impl(int seq_type)
break;
case SEQ_TYPE_SCREEN:
case SEQ_TYPE_OVERLAY:
- case SEQ_TYPE_BURN:
+ case SEQ_TYPE_COLOR_BURN:
case SEQ_TYPE_LINEAR_BURN:
case SEQ_TYPE_DARKEN:
case SEQ_TYPE_LIGHTEN:
diff --git a/source/blender/blenkernel/intern/seqmodifier.c b/source/blender/blenkernel/intern/seqmodifier.c
index cc44cd66f23..a7543881dad 100644
--- a/source/blender/blenkernel/intern/seqmodifier.c
+++ b/source/blender/blenkernel/intern/seqmodifier.c
@@ -293,14 +293,14 @@ static void curves_init_data(SequenceModifierData *smd)
{
CurvesModifierData *cmd = (CurvesModifierData *)smd;
- curvemapping_set_defaults(&cmd->curve_mapping, 4, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_set_defaults(&cmd->curve_mapping, 4, 0.0f, 0.0f, 1.0f, 1.0f);
}
static void curves_free_data(SequenceModifierData *smd)
{
CurvesModifierData *cmd = (CurvesModifierData *)smd;
- curvemapping_free_data(&cmd->curve_mapping);
+ BKE_curvemapping_free_data(&cmd->curve_mapping);
}
static void curves_copy_data(SequenceModifierData *target, SequenceModifierData *smd)
@@ -308,7 +308,7 @@ static void curves_copy_data(SequenceModifierData *target, SequenceModifierData
CurvesModifierData *cmd = (CurvesModifierData *)smd;
CurvesModifierData *cmd_target = (CurvesModifierData *)target;
- curvemapping_copy_data(&cmd_target->curve_mapping, &cmd->curve_mapping);
+ BKE_curvemapping_copy_data(&cmd_target->curve_mapping, &cmd->curve_mapping);
}
static void curves_apply_threaded(int width,
@@ -330,7 +330,7 @@ static void curves_apply_threaded(int width,
float *pixel = rect_float + pixel_index;
float result[3];
- curvemapping_evaluate_premulRGBF(curve_mapping, result, pixel);
+ BKE_curvemapping_evaluate_premulRGBF(curve_mapping, result, pixel);
if (mask_rect_float) {
const float *m = mask_rect_float + pixel_index;
@@ -351,7 +351,7 @@ static void curves_apply_threaded(int width,
straight_uchar_to_premul_float(tempc, pixel);
- curvemapping_evaluate_premulRGBF(curve_mapping, result, tempc);
+ BKE_curvemapping_evaluate_premulRGBF(curve_mapping, result, tempc);
if (mask_rect) {
float t[3];
@@ -381,14 +381,14 @@ static void curves_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImBuf *m
float black[3] = {0.0f, 0.0f, 0.0f};
float white[3] = {1.0f, 1.0f, 1.0f};
- curvemapping_initialize(&cmd->curve_mapping);
+ BKE_curvemapping_initialize(&cmd->curve_mapping);
- curvemapping_premultiply(&cmd->curve_mapping, 0);
- curvemapping_set_black_white(&cmd->curve_mapping, black, white);
+ BKE_curvemapping_premultiply(&cmd->curve_mapping, 0);
+ BKE_curvemapping_set_black_white(&cmd->curve_mapping, black, white);
modifier_apply_threaded(ibuf, mask, curves_apply_threaded, &cmd->curve_mapping);
- curvemapping_premultiply(&cmd->curve_mapping, 1);
+ BKE_curvemapping_premultiply(&cmd->curve_mapping, 1);
}
static SequenceModifierTypeInfo seqModifier_Curves = {
@@ -408,13 +408,13 @@ static void hue_correct_init_data(SequenceModifierData *smd)
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
int c;
- curvemapping_set_defaults(&hcmd->curve_mapping, 1, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_set_defaults(&hcmd->curve_mapping, 1, 0.0f, 0.0f, 1.0f, 1.0f);
hcmd->curve_mapping.preset = CURVE_PRESET_MID9;
for (c = 0; c < 3; c++) {
CurveMap *cuma = &hcmd->curve_mapping.cm[c];
- curvemap_reset(
+ BKE_curvemap_reset(
cuma, &hcmd->curve_mapping.clipr, hcmd->curve_mapping.preset, CURVEMAP_SLOPE_POSITIVE);
}
@@ -426,7 +426,7 @@ static void hue_correct_free_data(SequenceModifierData *smd)
{
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
- curvemapping_free_data(&hcmd->curve_mapping);
+ BKE_curvemapping_free_data(&hcmd->curve_mapping);
}
static void hue_correct_copy_data(SequenceModifierData *target, SequenceModifierData *smd)
@@ -434,7 +434,7 @@ static void hue_correct_copy_data(SequenceModifierData *target, SequenceModifier
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
HueCorrectModifierData *hcmd_target = (HueCorrectModifierData *)target;
- curvemapping_copy_data(&hcmd_target->curve_mapping, &hcmd->curve_mapping);
+ BKE_curvemapping_copy_data(&hcmd_target->curve_mapping, &hcmd->curve_mapping);
}
static void hue_correct_apply_threaded(int width,
@@ -464,15 +464,15 @@ static void hue_correct_apply_threaded(int width,
rgb_to_hsv(pixel[0], pixel[1], pixel[2], hsv, hsv + 1, hsv + 2);
/* adjust hue, scaling returned default 0.5 up to 1 */
- f = curvemapping_evaluateF(curve_mapping, 0, hsv[0]);
+ f = BKE_curvemapping_evaluateF(curve_mapping, 0, hsv[0]);
hsv[0] += f - 0.5f;
/* adjust saturation, scaling returned default 0.5 up to 1 */
- f = curvemapping_evaluateF(curve_mapping, 1, hsv[0]);
+ f = BKE_curvemapping_evaluateF(curve_mapping, 1, hsv[0]);
hsv[1] *= (f * 2.0f);
/* adjust value, scaling returned default 0.5 up to 1 */
- f = curvemapping_evaluateF(curve_mapping, 2, hsv[0]);
+ f = BKE_curvemapping_evaluateF(curve_mapping, 2, hsv[0]);
hsv[2] *= (f * 2.f);
hsv[0] = hsv[0] - floorf(hsv[0]); /* mod 1.0 */
@@ -506,7 +506,7 @@ static void hue_correct_apply(struct SequenceModifierData *smd, ImBuf *ibuf, ImB
{
HueCorrectModifierData *hcmd = (HueCorrectModifierData *)smd;
- curvemapping_initialize(&hcmd->curve_mapping);
+ BKE_curvemapping_initialize(&hcmd->curve_mapping);
modifier_apply_threaded(ibuf, mask, hue_correct_apply_threaded, &hcmd->curve_mapping);
}
@@ -545,20 +545,20 @@ static void brightcontrast_apply_threaded(int width,
float brightness = data->bright / 100.0f;
float contrast = data->contrast;
float delta = contrast / 200.0f;
-
- a = 1.0f - delta * 2.0f;
/*
* The algorithm is by Werner D. Streidt
* (http://visca.com/ffactory/archives/5-99/msg00021.html)
* Extracted of OpenCV demhist.c
*/
if (contrast > 0) {
- a = 1.0f / a;
+ a = 1.0f - delta * 2.0f;
+ a = 1.0f / max_ff(a, FLT_EPSILON);
b = a * (brightness - delta);
}
else {
delta *= -1;
- b = a * (brightness + delta);
+ a = max_ff(1.0f - delta * 2.0f, 0.0f);
+ b = a * brightness + delta;
}
for (y = 0; y < height; y++) {
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index 688af539bbb..74873db179d 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -1428,13 +1428,13 @@ static void emit_from_particles(Object *flow_ob,
/* prepare curvemapping tables */
if ((psys->part->child_flag & PART_CHILD_USE_CLUMP_CURVE) && psys->part->clumpcurve) {
- curvemapping_changed_all(psys->part->clumpcurve);
+ BKE_curvemapping_changed_all(psys->part->clumpcurve);
}
if ((psys->part->child_flag & PART_CHILD_USE_ROUGH_CURVE) && psys->part->roughcurve) {
- curvemapping_changed_all(psys->part->roughcurve);
+ BKE_curvemapping_changed_all(psys->part->roughcurve);
}
if ((psys->part->child_flag & PART_CHILD_USE_TWIST_CURVE) && psys->part->twistcurve) {
- curvemapping_changed_all(psys->part->twistcurve);
+ BKE_curvemapping_changed_all(psys->part->twistcurve);
}
/* initialize particle cache */
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c
index 2024a507ebb..d3b72fb295d 100644
--- a/source/blender/blenkernel/intern/softbody.c
+++ b/source/blender/blenkernel/intern/softbody.c
@@ -1731,8 +1731,8 @@ static int sb_detect_vertex_collisionCached(float opco[3],
/* switch origin to be nv2*/
sub_v3_v3v3(edge1, nv1, nv2);
sub_v3_v3v3(edge2, nv3, nv2);
- sub_v3_v3v3(
- dv1, opco, nv2); /* abuse dv1 to have vertex in question at *origin* of triangle */
+ /* Abuse dv1 to have vertex in question at *origin* of triangle. */
+ sub_v3_v3v3(dv1, opco, nv2);
cross_v3_v3v3(d_nvect, edge2, edge1);
/* n_mag = */ /* UNUSED */ normalize_v3(d_nvect);
@@ -2087,9 +2087,12 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene,
if (scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
float gravity[3];
copy_v3_v3(gravity, scene->physics_settings.gravity);
+
+ /* Individual mass of node here. */
mul_v3_fl(gravity,
sb_grav_force_scale(ob) * _final_mass(ob, bp) *
- sb->effector_weights->global_gravity); /* individual mass of node here */
+ sb->effector_weights->global_gravity);
+
add_v3_v3(bp->force, gravity);
}
@@ -2099,8 +2102,10 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene,
float kd;
float force[3] = {0.0f, 0.0f, 0.0f};
float speed[3] = {0.0f, 0.0f, 0.0f};
- float eval_sb_fric_force_scale = sb_fric_force_scale(
- ob); /* just for calling function once */
+
+ /* just for calling function once */
+ float eval_sb_fric_force_scale = sb_fric_force_scale(ob);
+
pd_point_from_soft(scene, bp->pos, bp->vec, sb->bpoint - bp, &epoint);
BKE_effectors_apply(effectors, NULL, sb->effector_weights, &epoint, force, speed);
@@ -2700,7 +2705,7 @@ static void mesh_to_softbody(Scene *scene, Object *ob)
for (a = 0; a < me->totvert; a++, bp++) {
/* get scalar values needed *per vertex* from vertex group functions,
- * so we can *paint* them nicly ..
+ * so we can *paint* them nicely ..
* they are normalized [0.0..1.0] so may be we need amplitude for scale
* which can be done by caller but still .. i'd like it to go this way
*/
@@ -2743,9 +2748,10 @@ static void mesh_to_softbody(Scene *scene, Object *ob)
build_bps_springlist(ob); /* scan for springs attached to bodypoints ONCE */
/* insert *other second order* springs if desired */
if (sb->secondspring > 0.0000001f) {
- add_2nd_order_springs(
- ob, sb->secondspring); /* exploits the first run of build_bps_springlist(ob);*/
- build_bps_springlist(ob); /* yes we need to do it again*/
+ /* exploits the first run of build_bps_springlist(ob); */
+ add_2nd_order_springs(ob, sb->secondspring);
+ /* yes we need to do it again. */
+ build_bps_springlist(ob);
}
springs_from_mesh(ob); /* write the 'rest'-length of the springs */
if (ob->softflag & OB_SB_SELF) {
diff --git a/source/blender/blenkernel/intern/studiolight.c b/source/blender/blenkernel/intern/studiolight.c
index 20f2a9be53b..6e83f5d75e2 100644
--- a/source/blender/blenkernel/intern/studiolight.c
+++ b/source/blender/blenkernel/intern/studiolight.c
@@ -69,7 +69,7 @@ static int last_studiolight_id = 0;
/*
* Disable this option so caches are not loaded from disk
- * Do not checkin with this commented out
+ * Do not checking with this commented out.
*/
#define STUDIOLIGHT_LOAD_CACHED_FILES
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 09a073e3ca6..77dc438cd04 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -83,8 +83,6 @@ static CCGDerivedMesh *getCCGDerivedMesh(CCGSubSurf *ss,
int useSubsurfUv,
DerivedMesh *dm,
bool use_gpu_backend);
-static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm);
-
///
static void *arena_alloc(CCGAllocatorHDL a, int numBytes)
@@ -1580,221 +1578,6 @@ static void ccgDM_copyFinalPolyArray(DerivedMesh *dm, MPoly *mpoly)
}
}
-static void ccgdm_getVertCos(DerivedMesh *dm, float (*cos)[3])
-{
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
- CCGSubSurf *ss = ccgdm->ss;
- int edgeSize = ccgSubSurf_getEdgeSize(ss);
- int gridSize = ccgSubSurf_getGridSize(ss);
- int i;
- CCGVertIterator vi;
- CCGEdgeIterator ei;
- CCGFaceIterator fi;
- CCGFace **faceMap2;
- CCGEdge **edgeMap2;
- CCGVert **vertMap2;
- int index, totvert, totedge, totface;
-
- totvert = ccgSubSurf_getNumVerts(ss);
- vertMap2 = MEM_mallocN(totvert * sizeof(*vertMap2), "vertmap");
- for (ccgSubSurf_initVertIterator(ss, &vi); !ccgVertIterator_isStopped(&vi);
- ccgVertIterator_next(&vi)) {
- CCGVert *v = ccgVertIterator_getCurrent(&vi);
-
- vertMap2[POINTER_AS_INT(ccgSubSurf_getVertVertHandle(v))] = v;
- }
-
- totedge = ccgSubSurf_getNumEdges(ss);
- edgeMap2 = MEM_mallocN(totedge * sizeof(*edgeMap2), "edgemap");
- for (ccgSubSurf_initEdgeIterator(ss, &ei), i = 0; !ccgEdgeIterator_isStopped(&ei);
- i++, ccgEdgeIterator_next(&ei)) {
- CCGEdge *e = ccgEdgeIterator_getCurrent(&ei);
-
- edgeMap2[POINTER_AS_INT(ccgSubSurf_getEdgeEdgeHandle(e))] = e;
- }
-
- totface = ccgSubSurf_getNumFaces(ss);
- faceMap2 = MEM_mallocN(totface * sizeof(*faceMap2), "facemap");
- for (ccgSubSurf_initFaceIterator(ss, &fi); !ccgFaceIterator_isStopped(&fi);
- ccgFaceIterator_next(&fi)) {
- CCGFace *f = ccgFaceIterator_getCurrent(&fi);
-
- faceMap2[POINTER_AS_INT(ccgSubSurf_getFaceFaceHandle(f))] = f;
- }
-
- i = 0;
- for (index = 0; index < totface; index++) {
- CCGFace *f = faceMap2[index];
- int x, y, S, numVerts = ccgSubSurf_getFaceNumVerts(f);
-
- copy_v3_v3(cos[i++], ccgSubSurf_getFaceCenterData(f));
-
- for (S = 0; S < numVerts; S++) {
- for (x = 1; x < gridSize - 1; x++) {
- copy_v3_v3(cos[i++], ccgSubSurf_getFaceGridEdgeData(ss, f, S, x));
- }
- }
-
- for (S = 0; S < numVerts; S++) {
- for (y = 1; y < gridSize - 1; y++) {
- for (x = 1; x < gridSize - 1; x++) {
- copy_v3_v3(cos[i++], ccgSubSurf_getFaceGridData(ss, f, S, x, y));
- }
- }
- }
- }
-
- for (index = 0; index < totedge; index++) {
- CCGEdge *e = edgeMap2[index];
- int x;
-
- for (x = 1; x < edgeSize - 1; x++) {
- copy_v3_v3(cos[i++], ccgSubSurf_getEdgeData(ss, e, x));
- }
- }
-
- for (index = 0; index < totvert; index++) {
- CCGVert *v = vertMap2[index];
- copy_v3_v3(cos[i++], ccgSubSurf_getVertData(ss, v));
- }
-
- MEM_freeN(vertMap2);
- MEM_freeN(edgeMap2);
- MEM_freeN(faceMap2);
-}
-
-static void ccgDM_foreachMappedVert(DerivedMesh *dm,
- void (*func)(void *userData,
- int index,
- const float co[3],
- const float no_f[3],
- const short no_s[3]),
- void *userData,
- DMForeachFlag flag)
-{
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
- CCGVertIterator vi;
- CCGKey key;
- CCG_key_top_level(&key, ccgdm->ss);
-
- for (ccgSubSurf_initVertIterator(ccgdm->ss, &vi); !ccgVertIterator_isStopped(&vi);
- ccgVertIterator_next(&vi)) {
- CCGVert *v = ccgVertIterator_getCurrent(&vi);
- const int index = ccgDM_getVertMapIndex(ccgdm->ss, v);
-
- if (index != -1) {
- CCGElem *vd = ccgSubSurf_getVertData(ccgdm->ss, v);
- const float *no = (flag & DM_FOREACH_USE_NORMAL) ? CCG_elem_no(&key, vd) : NULL;
- func(userData, index, CCG_elem_co(&key, vd), no, NULL);
- }
- }
-}
-
-static void ccgDM_foreachMappedEdge(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float v0co[3], const float v1co[3]),
- void *userData)
-{
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
- CCGSubSurf *ss = ccgdm->ss;
- CCGEdgeIterator ei;
- CCGKey key;
- int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
-
- CCG_key_top_level(&key, ss);
-
- for (ccgSubSurf_initEdgeIterator(ss, &ei); !ccgEdgeIterator_isStopped(&ei);
- ccgEdgeIterator_next(&ei)) {
- CCGEdge *e = ccgEdgeIterator_getCurrent(&ei);
- const int index = ccgDM_getEdgeMapIndex(ss, e);
-
- if (index != -1) {
- CCGElem *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
- for (i = 0; i < edgeSize - 1; i++) {
- func(userData,
- index,
- CCG_elem_offset_co(&key, edgeData, i),
- CCG_elem_offset_co(&key, edgeData, i + 1));
- }
- }
- }
-}
-
-static void ccgDM_foreachMappedLoop(DerivedMesh *dm,
- void (*func)(void *userData,
- int vertex_index,
- int face_index,
- const float co[3],
- const float no[3]),
- void *userData,
- DMForeachFlag flag)
-{
- /* We can't use dm->getLoopDataLayout(dm) here, we want to always access dm->loopData,
- * EditDerivedBMesh would return loop data from bmesh itself. */
- const float(*lnors)[3] = (flag & DM_FOREACH_USE_NORMAL) ? DM_get_loop_data_layer(dm, CD_NORMAL) :
- NULL;
-
- MVert *mv = dm->getVertArray(dm);
- MLoop *ml = dm->getLoopArray(dm);
- MPoly *mp = dm->getPolyArray(dm);
- const int *v_index = dm->getVertDataArray(dm, CD_ORIGINDEX);
- const int *f_index = dm->getPolyDataArray(dm, CD_ORIGINDEX);
- int p_idx, i;
-
- for (p_idx = 0; p_idx < dm->numPolyData; ++p_idx, ++mp) {
- for (i = 0; i < mp->totloop; ++i, ++ml) {
- const int v_idx = v_index ? v_index[ml->v] : ml->v;
- const int f_idx = f_index ? f_index[p_idx] : p_idx;
- const float *no = lnors ? *lnors++ : NULL;
- if (!ELEM(ORIGINDEX_NONE, v_idx, f_idx)) {
- func(userData, v_idx, f_idx, mv[ml->v].co, no);
- }
- }
- }
-}
-
-static void UNUSED_FUNCTION(ccgdm_pbvh_update)(CCGDerivedMesh *ccgdm)
-{
- if (ccgdm->pbvh && ccgDM_use_grid_pbvh(ccgdm)) {
- CCGFace **faces;
- int totface;
-
- BKE_pbvh_get_grid_updates(ccgdm->pbvh, 1, (void ***)&faces, &totface);
- if (totface) {
- ccgSubSurf_updateFromFaces(ccgdm->ss, 0, faces, totface);
- ccgSubSurf_updateNormals(ccgdm->ss, faces, totface);
- MEM_freeN(faces);
- }
- }
-}
-
-static void ccgDM_foreachMappedFaceCenter(
- DerivedMesh *dm,
- void (*func)(void *userData, int index, const float co[3], const float no[3]),
- void *userData,
- DMForeachFlag flag)
-{
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
- CCGSubSurf *ss = ccgdm->ss;
- CCGKey key;
- CCGFaceIterator fi;
-
- CCG_key_top_level(&key, ss);
-
- for (ccgSubSurf_initFaceIterator(ss, &fi); !ccgFaceIterator_isStopped(&fi);
- ccgFaceIterator_next(&fi)) {
- CCGFace *f = ccgFaceIterator_getCurrent(&fi);
- const int index = ccgDM_getFaceMapIndex(ss, f);
-
- if (index != -1) {
- /* Face center data normal isn't updated atm. */
- CCGElem *vd = ccgSubSurf_getFaceGridData(ss, f, 0, 0, 0);
- const float *no = (flag & DM_FOREACH_USE_NORMAL) ? CCG_elem_no(&key, vd) : NULL;
- func(userData, index, CCG_elem_co(&key, vd), no);
- }
- }
-}
-
static void ccgDM_release(DerivedMesh *dm)
{
CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
@@ -2222,175 +2005,6 @@ static const MeshElemMap *ccgDM_getPolyMap(Object *ob, DerivedMesh *dm)
return ccgdm->pmap;
}
-static int ccgDM_use_grid_pbvh(CCGDerivedMesh *ccgdm)
-{
- MultiresModifierData *mmd = ccgdm->multires.mmd;
-
- /* both of multires and subsurf modifiers are CCG, but
- * grids should only be used when sculpting on multires */
- if (!mmd) {
- return 0;
- }
-
- return 1;
-}
-
-static struct PBVH *ccgDM_getPBVH(Object *ob, DerivedMesh *dm)
-{
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
- CCGKey key;
- int numGrids;
-
- CCG_key_top_level(&key, ccgdm->ss);
-
- if (!ob) {
- ccgdm->pbvh = NULL;
- return NULL;
- }
-
- if (!ob->sculpt) {
- return NULL;
- }
-
- bool grid_pbvh = ccgDM_use_grid_pbvh(ccgdm);
- if ((ob->mode & OB_MODE_SCULPT) == 0) {
- /* In vwpaint, we may use a grid_pbvh for multires/subsurf, under certain conditions.
- * More complex cases break 'history' trail back to original vertices,
- * in that case we fall back to deformed cage only (i.e. original deformed mesh). */
- VirtualModifierData virtualModifierData;
- ModifierData *md = modifiers_getVirtualModifierList(ob, &virtualModifierData);
-
- grid_pbvh = true;
- bool has_one_ccg_modifier = false;
- for (; md; md = md->next) {
- /* We can only accept to use this ccgdm if:
- * - it's the only active ccgdm in the stack.
- * - there is no topology-modifying modifier in the stack.
- * Otherwise, there is no way to map back to original geometry from grid-generated PBVH.
- */
- const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
-
- if (!modifier_isEnabled(NULL, md, eModifierMode_Realtime)) {
- continue;
- }
- if (ELEM(mti->type, eModifierTypeType_OnlyDeform, eModifierTypeType_NonGeometrical)) {
- continue;
- }
-
- if (ELEM(md->type, eModifierType_Subsurf, eModifierType_Multires)) {
- if (has_one_ccg_modifier) {
- /* We only allow a single active ccg modifier in the stack. */
- grid_pbvh = false;
- break;
- }
- has_one_ccg_modifier = true;
- continue;
- }
-
- /* Any other non-deforming modifier makes it impossible to use grid pbvh. */
- grid_pbvh = false;
- break;
- }
- }
-
- if (ob->sculpt->pbvh) {
- /* Note that we have to clean up existing pbvh instead of updating it in case it does not
- * match current grid_pbvh status. */
- const PBVHType pbvh_type = BKE_pbvh_type(ob->sculpt->pbvh);
- if (grid_pbvh) {
- if (pbvh_type == PBVH_GRIDS) {
- /* pbvh's grids, gridadj and gridfaces points to data inside ccgdm
- * but this can be freed on ccgdm release, this updates the pointers
- * when the ccgdm gets remade, the assumption is that the topology
- * does not change. */
- ccgdm_create_grids(dm);
- BKE_pbvh_grids_update(ob->sculpt->pbvh,
- ccgdm->gridData,
- (void **)ccgdm->gridFaces,
- ccgdm->gridFlagMats,
- ccgdm->gridHidden);
- }
- else {
- BKE_pbvh_free(ob->sculpt->pbvh);
- ob->sculpt->pbvh = NULL;
- }
- }
- else if (pbvh_type == PBVH_GRIDS) {
- BKE_pbvh_free(ob->sculpt->pbvh);
- ob->sculpt->pbvh = NULL;
- }
-
- ccgdm->pbvh = ob->sculpt->pbvh;
- }
-
- if (ccgdm->pbvh) {
- return ccgdm->pbvh;
- }
-
- /* No pbvh exists yet, we need to create one. only in case of multires
- * we build a pbvh over the modified mesh, in other cases the base mesh
- * is being sculpted, so we build a pbvh from that. */
- /* Note: vwpaint tries to always build a pbvh over the modified mesh. */
- if (grid_pbvh) {
- ccgdm_create_grids(dm);
-
- numGrids = ccgDM_getNumGrids(dm);
-
- ob->sculpt->pbvh = ccgdm->pbvh = BKE_pbvh_new();
- BKE_pbvh_build_grids(ccgdm->pbvh,
- ccgdm->gridData,
- numGrids,
- &key,
- (void **)ccgdm->gridFaces,
- ccgdm->gridFlagMats,
- ccgdm->gridHidden);
- }
- else if (ob->type == OB_MESH) {
- Mesh *me = BKE_object_get_original_mesh(ob);
- const int looptris_num = poly_to_tri_count(me->totpoly, me->totloop);
- MLoopTri *looptri;
-
- looptri = MEM_mallocN(sizeof(*looptri) * looptris_num, __func__);
-
- BKE_mesh_recalc_looptri(me->mloop, me->mpoly, me->mvert, me->totloop, me->totpoly, looptri);
-
- ob->sculpt->pbvh = ccgdm->pbvh = BKE_pbvh_new();
- BKE_pbvh_build_mesh(ccgdm->pbvh,
- me->mpoly,
- me->mloop,
- me->mvert,
- me->totvert,
- &me->vdata,
- &me->ldata,
- looptri,
- looptris_num);
-
- if (ob->sculpt->modifiers_active && ob->derivedDeform != NULL) {
- DerivedMesh *deformdm = ob->derivedDeform;
- float(*vertCos)[3];
- int totvert;
-
- totvert = deformdm->getNumVerts(deformdm);
- vertCos = MEM_malloc_arrayN(totvert, sizeof(float[3]), "ccgDM_getPBVH vertCos");
- deformdm->getVertCos(deformdm, vertCos);
- BKE_pbvh_apply_vertCos(ccgdm->pbvh, vertCos, totvert);
- MEM_freeN(vertCos);
- }
- }
-
- if (ccgdm->pbvh != NULL) {
- pbvh_show_diffuse_color_set(ccgdm->pbvh, ob->sculpt->show_diffuse_color);
- pbvh_show_mask_set(ccgdm->pbvh, ob->sculpt->show_mask);
- }
-
- return ccgdm->pbvh;
-}
-
-static void ccgDM_recalcTessellation(DerivedMesh *UNUSED(dm))
-{
- /* Nothing to do: CCG handles creating its own tessfaces */
-}
-
/* WARNING! *MUST* be called in an 'loops_cache_rwlock' protected thread context! */
static void ccgDM_recalcLoopTri(DerivedMesh *dm)
{
@@ -2426,12 +2040,6 @@ static void ccgDM_recalcLoopTri(DerivedMesh *dm)
dm->looptris.array_wip = NULL;
}
-static void ccgDM_calcNormals(DerivedMesh *dm)
-{
- /* Nothing to do: CCG calculates normals during drawing */
- dm->dirty &= ~DM_DIRTY_NORMALS;
-}
-
static void set_default_ccgdm_callbacks(CCGDerivedMesh *ccgdm)
{
ccgdm->dm.getMinMax = ccgDM_getMinMax;
@@ -2472,21 +2080,9 @@ static void set_default_ccgdm_callbacks(CCGDerivedMesh *ccgdm)
ccgdm->dm.getGridFlagMats = ccgDM_getGridFlagMats;
ccgdm->dm.getGridHidden = ccgDM_getGridHidden;
ccgdm->dm.getPolyMap = ccgDM_getPolyMap;
- ccgdm->dm.getPBVH = ccgDM_getPBVH;
- ccgdm->dm.calcNormals = ccgDM_calcNormals;
- ccgdm->dm.calcLoopNormals = CDDM_calc_loop_normals;
- ccgdm->dm.calcLoopNormalsSpaceArray = CDDM_calc_loop_normals_spacearr;
- ccgdm->dm.calcLoopTangents = DM_calc_loop_tangents;
- ccgdm->dm.recalcTessellation = ccgDM_recalcTessellation;
ccgdm->dm.recalcLoopTri = ccgDM_recalcLoopTri;
- ccgdm->dm.getVertCos = ccgdm_getVertCos;
- ccgdm->dm.foreachMappedVert = ccgDM_foreachMappedVert;
- ccgdm->dm.foreachMappedEdge = ccgDM_foreachMappedEdge;
- ccgdm->dm.foreachMappedLoop = ccgDM_foreachMappedLoop;
- ccgdm->dm.foreachMappedFaceCenter = ccgDM_foreachMappedFaceCenter;
-
ccgdm->dm.release = ccgDM_release;
}
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index 29aa3ca1659..83be64e84c9 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -703,50 +703,6 @@ bool txt_cursor_is_line_end(Text *text)
/* Cursor movement functions */
/*****************************/
-int txt_utf8_offset_to_index(const char *str, int offset)
-{
- int index = 0, pos = 0;
- while (pos != offset) {
- pos += BLI_str_utf8_size(str + pos);
- index++;
- }
- return index;
-}
-
-int txt_utf8_index_to_offset(const char *str, int index)
-{
- int offset = 0, pos = 0;
- while (pos != index) {
- offset += BLI_str_utf8_size(str + offset);
- pos++;
- }
- return offset;
-}
-
-int txt_utf8_offset_to_column(const char *str, int offset)
-{
- int column = 0, pos = 0;
- while (pos < offset) {
- column += BLI_str_utf8_char_width_safe(str + pos);
- pos += BLI_str_utf8_size_safe(str + pos);
- }
- return column;
-}
-
-int txt_utf8_column_to_offset(const char *str, int column)
-{
- int offset = 0, pos = 0, col;
- while (*(str + offset) && pos < column) {
- col = BLI_str_utf8_char_width_safe(str + offset);
- if (pos + col > column) {
- break;
- }
- offset += BLI_str_utf8_size_safe(str + offset);
- pos += col;
- }
- return offset;
-}
-
void txt_move_up(Text *text, const bool sel)
{
TextLine **linep;
@@ -764,9 +720,9 @@ void txt_move_up(Text *text, const bool sel)
}
if ((*linep)->prev) {
- int column = txt_utf8_offset_to_column((*linep)->line, *charp);
+ int column = BLI_str_utf8_offset_to_column((*linep)->line, *charp);
*linep = (*linep)->prev;
- *charp = txt_utf8_column_to_offset((*linep)->line, column);
+ *charp = BLI_str_utf8_offset_from_column((*linep)->line, column);
}
else {
txt_move_bol(text, sel);
@@ -794,9 +750,9 @@ void txt_move_down(Text *text, const bool sel)
}
if ((*linep)->next) {
- int column = txt_utf8_offset_to_column((*linep)->line, *charp);
+ int column = BLI_str_utf8_offset_to_column((*linep)->line, *charp);
*linep = (*linep)->next;
- *charp = txt_utf8_column_to_offset((*linep)->line, column);
+ *charp = BLI_str_utf8_offset_from_column((*linep)->line, column);
}
else {
txt_move_eol(text, sel);
@@ -1975,9 +1931,9 @@ bool txt_replace_char(Text *text, unsigned int add)
*
* \note caller must handle undo.
*/
-static void txt_select_prefix(Text *text, const char *add)
+static void txt_select_prefix(Text *text, const char *add, bool skip_blank_lines)
{
- int len, num, curc_old;
+ int len, num, curc_old, selc_old;
char *tmp;
const int indentlen = strlen(add);
@@ -1985,12 +1941,13 @@ static void txt_select_prefix(Text *text, const char *add)
BLI_assert(!ELEM(NULL, text->curl, text->sell));
curc_old = text->curc;
+ selc_old = text->selc;
num = 0;
while (true) {
/* don't indent blank lines */
- if (text->curl->len != 0) {
+ if ((text->curl->len != 0) || (skip_blank_lines == 0)) {
tmp = MEM_mallocN(text->curl->len + indentlen + 1, "textline_string");
text->curc = 0;
@@ -2014,7 +1971,9 @@ static void txt_select_prefix(Text *text, const char *add)
}
if (text->curl == text->sell) {
- text->selc += indentlen;
+ if (text->curl->len != 0) {
+ text->selc += indentlen;
+ }
break;
}
else {
@@ -2022,19 +1981,26 @@ static void txt_select_prefix(Text *text, const char *add)
num++;
}
}
- if (!curc_old) {
- text->curc = 0;
- }
- else {
- text->curc = curc_old + indentlen;
- }
while (num > 0) {
text->curl = text->curl->prev;
num--;
}
- /* caller must handle undo */
+ /* Keep the cursor left aligned if we don't have a selection. */
+ if (curc_old == 0 && !(text->curl == text->sell && curc_old == selc_old)) {
+ if (text->curl == text->sell) {
+ if (text->curc == text->selc) {
+ text->selc = 0;
+ }
+ }
+ text->curc = 0;
+ }
+ else {
+ if (text->curl->len != 0) {
+ text->curc = curc_old + indentlen;
+ }
+ }
}
/**
@@ -2042,10 +2008,12 @@ static void txt_select_prefix(Text *text, const char *add)
*
* \param r_line_index_mask: List of lines that are already at indent level 0,
* to store them later into the undo buffer.
+ * \param require_all: When true, all non-empty lines must have this prefix.
+ * Needed for comments where we might want to un-comment a block which contains some comments.
*
* \note caller must handle undo.
*/
-static bool txt_select_unprefix(Text *text, const char *remove)
+static bool txt_select_unprefix(Text *text, const char *remove, const bool require_all)
{
int num = 0;
const int indentlen = strlen(remove);
@@ -2054,6 +2022,29 @@ static bool txt_select_unprefix(Text *text, const char *remove)
BLI_assert(!ELEM(NULL, text->curl, text->sell));
+ if (require_all) {
+ /* Check all non-empty lines use this 'remove',
+ * so the operation is applied equally or not at all. */
+ TextLine *l = text->curl;
+ while (true) {
+ if (STREQLEN(l->line, remove, indentlen)) {
+ /* pass */
+ }
+ else {
+ /* Blank lines or whitespace can be skipped. */
+ for (int i = 0; i < l->len; i++) {
+ if (!ELEM(l->line[i], '\t', ' ')) {
+ return false;
+ }
+ }
+ }
+ if (l == text->sell) {
+ break;
+ }
+ l = l->next;
+ }
+ }
+
while (true) {
bool changed = false;
if (STREQLEN(text->curl->line, remove, indentlen)) {
@@ -2102,7 +2093,8 @@ void txt_comment(Text *text)
return;
}
- txt_select_prefix(text, prefix);
+ const bool skip_blank_lines = txt_has_sel(text);
+ txt_select_prefix(text, prefix, skip_blank_lines);
}
bool txt_uncomment(Text *text)
@@ -2113,7 +2105,7 @@ bool txt_uncomment(Text *text)
return false;
}
- return txt_select_unprefix(text, prefix);
+ return txt_select_unprefix(text, prefix, true);
}
void txt_indent(Text *text)
@@ -2124,7 +2116,7 @@ void txt_indent(Text *text)
return;
}
- txt_select_prefix(text, prefix);
+ txt_select_prefix(text, prefix, true);
}
bool txt_unindent(Text *text)
@@ -2135,7 +2127,7 @@ bool txt_unindent(Text *text)
return false;
}
- return txt_select_unprefix(text, prefix);
+ return txt_select_unprefix(text, prefix, false);
}
void txt_move_lines(struct Text *text, const int direction)
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 9baa8bd20e1..ad7c5e3f660 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -659,15 +659,15 @@ void BKE_texture_pointdensity_init_data(PointDensity *pd)
pd->object = NULL;
pd->psys = 0;
pd->psys_cache_space = TEX_PD_WORLDSPACE;
- pd->falloff_curve = curvemapping_add(1, 0, 0, 1, 1);
+ pd->falloff_curve = BKE_curvemapping_add(1, 0, 0, 1, 1);
pd->falloff_curve->preset = CURVE_PRESET_LINE;
pd->falloff_curve->cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
- curvemap_reset(pd->falloff_curve->cm,
- &pd->falloff_curve->clipr,
- pd->falloff_curve->preset,
- CURVEMAP_SLOPE_POSITIVE);
- curvemapping_changed(pd->falloff_curve, false);
+ BKE_curvemap_reset(pd->falloff_curve->cm,
+ &pd->falloff_curve->clipr,
+ pd->falloff_curve->preset,
+ CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_changed(pd->falloff_curve, false);
}
PointDensity *BKE_texture_pointdensity_add(void)
@@ -687,7 +687,7 @@ PointDensity *BKE_texture_pointdensity_copy(const PointDensity *pd, const int UN
if (pdn->coba) {
pdn->coba = MEM_dupallocN(pdn->coba);
}
- pdn->falloff_curve = curvemapping_copy(pdn->falloff_curve); /* can be NULL */
+ pdn->falloff_curve = BKE_curvemapping_copy(pdn->falloff_curve); /* can be NULL */
return pdn;
}
@@ -706,7 +706,7 @@ void BKE_texture_pointdensity_free_data(PointDensity *pd)
pd->coba = NULL;
}
- curvemapping_free(pd->falloff_curve); /* can be NULL */
+ BKE_curvemapping_free(pd->falloff_curve); /* can be NULL */
}
void BKE_texture_pointdensity_free(PointDensity *pd)
diff --git a/source/blender/blenkernel/intern/undo_system.c b/source/blender/blenkernel/intern/undo_system.c
index 07cf5205cab..36b950fb8f9 100644
--- a/source/blender/blenkernel/intern/undo_system.c
+++ b/source/blender/blenkernel/intern/undo_system.c
@@ -503,7 +503,7 @@ bool BKE_undosys_step_push_with_type(UndoStack *ustack,
/* Might not be final place for this to be called - probably only want to call it from some
* undo handlers, not all of them? */
if (BKE_override_library_is_enabled()) {
- BKE_main_override_library_operations_create(G.main, false);
+ BKE_main_override_library_operations_create(CTX_data_main(C), false);
}
/* Remove all undos after (also when 'ustack->step_active == NULL'). */
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c
index 375721057c3..ac1b5e4ab0b 100644
--- a/source/blender/blenkernel/intern/unit.c
+++ b/source/blender/blenkernel/intern/unit.c
@@ -501,12 +501,12 @@ static PreferredUnits preferred_units_from_UnitSettings(const UnitSettings *sett
return units;
}
-static size_t unit_as_string_splitted(char *str,
- int len_max,
- double value,
- int prec,
- const bUnitCollection *usys,
- const bUnitDef *main_unit)
+static size_t unit_as_string_split_pair(char *str,
+ int len_max,
+ double value,
+ int prec,
+ const bUnitCollection *usys,
+ const bUnitDef *main_unit)
{
const bUnitDef *unit_a, *unit_b;
double value_a, value_b;
@@ -602,7 +602,7 @@ static size_t unit_as_string_main(char *str,
}
if (split && unit_should_be_split(type)) {
- int length = unit_as_string_splitted(str, len_max, value, prec, usys, main_unit);
+ int length = unit_as_string_split_pair(str, len_max, value, prec, usys, main_unit);
/* failed when length is negative, fallback to no split */
if (length >= 0) {
return length;
@@ -734,8 +734,9 @@ static int unit_scale_str(char *str,
len_name = strlen(replace_str);
len_move = (len - (found_ofs + len_name)) + 1; /* 1+ to copy the string terminator */
- len_num = BLI_snprintf(
- str_tmp, TEMP_STR_SIZE, "*%.9g" SEP_STR, unit->scalar / scale_pref); /* # removed later */
+
+ /* # removed later */
+ len_num = BLI_snprintf(str_tmp, TEMP_STR_SIZE, "*%.9g" SEP_STR, unit->scalar / scale_pref);
if (len_num > len_max) {
len_num = len_max;
@@ -748,8 +749,9 @@ static int unit_scale_str(char *str,
if (len_move > 0) {
/* resize the last part of the string */
- memmove(
- str_found + len_num, str_found + len_name, len_move); /* may grow or shrink the string */
+
+ /* May grow or shrink the string. */
+ memmove(str_found + len_num, str_found + len_name, len_move);
}
if (found_ofs + len_num > len_max) {
diff --git a/source/blender/blenkernel/nla_private.h b/source/blender/blenkernel/nla_private.h
index 1705cd4effc..ed653182a3e 100644
--- a/source/blender/blenkernel/nla_private.h
+++ b/source/blender/blenkernel/nla_private.h
@@ -24,8 +24,6 @@
#ifndef __NLA_PRIVATE_H__
#define __NLA_PRIVATE_H__
-struct Depsgraph;
-
#include "RNA_types.h"
#include "BLI_bitmap.h"
#include "BLI_ghash.h"
diff --git a/source/blender/blenlib/BLI_delaunay_2d.h b/source/blender/blenlib/BLI_delaunay_2d.h
new file mode 100644
index 00000000000..fe81de5fc5e
--- /dev/null
+++ b/source/blender/blenlib/BLI_delaunay_2d.h
@@ -0,0 +1,199 @@
+/*
+ * 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.
+ */
+
+#ifndef __BLI_DELAUNAY_2D_H__
+#define __BLI_DELAUNAY_2D_H__
+
+/** \file
+ * \ingroup bli
+ */
+
+/**
+ * Interface for Constrained Delaunay Triangulation (CDT) in 2D.
+ *
+ * The input is a set of vertices, edges between those vertices,
+ * and faces using those vertices.
+ * Those inputs are called "constraints". The output must contain
+ * those constraints, or at least edges, points, and vertices that
+ * may be pieced together to form the constraints. Part of the
+ * work of doing the CDT is to detect intersections and mergers
+ * among the input elements, so these routines are also useful
+ * for doing 2D intersection.
+ *
+ * The output is a triangulation of the plane that includes the
+ * constraints in the above sense, and also satisfies the
+ * "Delaunay condition" as modified to take into account that
+ * the constraints must be there: for every non-constrained edge
+ * in the output, there is a circle through the endpoints that
+ * does not contain any of the vertices directly connected to
+ * those endpoints. What this means in practice is that as
+ * much as possible the triangles look "nice" -- not too long
+ * and skinny.
+ *
+ * Optionally, the output can be a subset of the triangulation
+ * (but still containing all of the constraints), to get the
+ * effect of 2D intersection.
+ *
+ * The underlying method is incremental, but we need to know
+ * beforehand a bounding box for all of the constraints.
+ * This code can be extended in the future to allow for
+ * deletion of constraints, if there is a use in Blender
+ * for dynamically maintaining a triangulation.
+ */
+
+/**
+ * Input to Constrained Delaunay Triangulation.
+ * There are verts_len vertices, whose coordinates
+ * are given by vert_coords. For the rest of the input,
+ * vertices are referred to by indices into that array.
+ * Edges and Faces are optional. If provided, they will
+ * appear in the output triangulation ("constraints").
+ * One can provide faces and not edges -- the edges
+ * implied by the faces will be inferred.
+ *
+ * The edges are given by pairs of vertex indices.
+ * The faces are given in a triple `(faces, faces_start_table, faces_len_table)`
+ * to represent a list-of-lists as follows:
+ * the vertex indices for a counterclockwise traversal of
+ * face number `i` starts at `faces_start_table[i]` and has `faces_len_table[i]`
+ * elements.
+ *
+ * The edges implied by the faces are automatically added
+ * and need not be put in the edges array, which is intended
+ * as a way to specify edges that are not part of any face.
+ *
+ * Some notes about some special cases and how they are handled:
+ * - Input faces can have any number of vertices greater than 2. Depending
+ * on the output option, ngons may be triangulated or they may remain
+ * as ngons.
+ * - Input faces may have repeated vertices. Output faces will not,
+ * except when the CDT_CONSTRAINTS output option is used.
+ * - Input faces may have edges that self-intersect, but currently the labeling
+ * of which output faces have which input faces may not be done correctly,
+ * since the labeling relies on the inside being on the left of edges
+ * as one traverses the face. Output faces will not self-intersect.
+ * - Input edges, including those implied by the input faces, may have
+ * zero-length or near-zero-length edges (nearness as determined by epsilon),
+ * but those edges will not be in the output.
+ * - Input edges (including face edges) can overlap or nearly overlap each other.
+ * The output edges will not overlap, but instead be divided into as many
+ * edges as necessary to represent each overlap regime.
+ * - Input vertices may be coincide with, or nearly coincide with (as determined
+ * by epsilon) other input vertices. Only one representative will survive
+ * in the output. If an input vertex is within epsilon of an edge (including
+ * an added triangulation edge), it will be snapped to that edge, so the
+ * output coordinates may not exactly match the input coordinates in all cases.
+ * - Wire edges (those not part of faces) and isolated vertices are allowed in
+ * the input. If they are inside faces, they will be incorporated into the
+ * triangulation of those faces.
+ *
+ * Epsilon is used for "is it near enough" distance calculations.
+ * If zero is supplied for epsilon, an internal value of 1e-8 used
+ * instead, since this code will not work correctly if it is not allowed
+ * to merge "too near" vertices.
+ */
+typedef struct CDT_input {
+ int verts_len;
+ int edges_len;
+ int faces_len;
+ float (*vert_coords)[2];
+ int (*edges)[2];
+ int *faces;
+ int *faces_start_table;
+ int *faces_len_table;
+ float epsilon;
+} CDT_input;
+
+/**
+ * A representation of the triangulation for output.
+ * See #CDT_input for the representation of the output
+ * vertices, edges, and faces, all represented in
+ * a similar way to the input.
+ *
+ * The output may have merged some input vertices together,
+ * if they were closer than some epsilon distance.
+ * The output edges may be overlapping sub-segments of some
+ * input edges; or they may be new edges for the triangulation.
+ * The output faces may be pieces of some input faces, or they
+ * may be new.
+ *
+ * In the same way that faces lists-of-lists were represented by
+ * a run-together array and a "start" and "len" extra array,
+ * similar triples are used to represent the output to input
+ * mapping of vertices, edges, and faces.
+ *
+ * Those triples are:
+ * - verts_orig, verts_orig_start_table, verts_orig_len_table
+ * - edges_orig, edges_orig_start_table, edges_orig_len_table
+ * - faces_orig, faces_orig_start_table, faces_orig_len_table
+ *
+ * For edges, the edges_orig triple can also say which original face
+ * edge is part of a given output edge. If an index in edges_orig
+ * is greater than the input's edges_len, then subtract input's edges_len
+ * from it to some number i: then the face edge that starts from the
+ * input vertex at input's faces[i] is the corresponding face edge.
+ * for convenience, face_edge_offset in the result will be the input's
+ * edges_len, so that this conversion can be easily done by the caller.
+ */
+typedef struct CDT_result {
+ int verts_len;
+ int edges_len;
+ int faces_len;
+ int face_edge_offset;
+ float (*vert_coords)[2];
+ int (*edges)[2];
+ int *faces;
+ int *faces_start_table;
+ int *faces_len_table;
+ int *verts_orig;
+ int *verts_orig_start_table;
+ int *verts_orig_len_table;
+ int *edges_orig;
+ int *edges_orig_start_table;
+ int *edges_orig_len_table;
+ int *faces_orig;
+ int *faces_orig_start_table;
+ int *faces_orig_len_table;
+} CDT_result;
+
+/** What triangles and edges of CDT are desired when getting output? */
+typedef enum CDT_output_type {
+ /** All triangles, outer boundary is convex hull. */
+ CDT_FULL,
+ /** All triangles fully enclosed by constraint edges or faces. */
+ CDT_INSIDE,
+ /** Only point, edge, and face constraints, and their intersections. */
+ CDT_CONSTRAINTS,
+ /**
+ * Like CDT_CONSTRAINTS, but keep enough
+ * edges so that any output faces that came from input faces can be made as valid
+ * #BMesh faces in Blender: that is,
+ * no vertex appears more than once and no isolated holes in faces.
+ */
+ CDT_CONSTRAINTS_VALID_BMESH
+} CDT_output_type;
+
+/**
+ * API interface to CDT.
+ * This returns a pointer to an allocated CDT_result.
+ * When the caller is finished with it, the caller
+ * should use #BLI_delaunay_2d_cdt_free() to free it.
+ */
+CDT_result *BLI_delaunay_2d_cdt_calc(const CDT_input *input, const CDT_output_type output_type);
+
+void BLI_delaunay_2d_cdt_free(CDT_result *result);
+
+#endif /* __BLI_DELAUNAY_2D_H__ */
diff --git a/source/blender/blenlib/BLI_dynstr.h b/source/blender/blenlib/BLI_dynstr.h
index 72a6a1b0150..87e58d90d3f 100644
--- a/source/blender/blenlib/BLI_dynstr.h
+++ b/source/blender/blenlib/BLI_dynstr.h
@@ -35,7 +35,6 @@
#include "BLI_compiler_attrs.h"
struct DynStr;
-struct MemArena;
/** The abstract DynStr type */
typedef struct DynStr DynStr;
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h
index c235a72e7e4..b8b62dd3451 100644
--- a/source/blender/blenlib/BLI_listbase.h
+++ b/source/blender/blenlib/BLI_listbase.h
@@ -171,12 +171,21 @@ struct LinkData *BLI_genericNodeN(void *data);
#define LISTBASE_FOREACH(type, var, list) \
for (type var = (type)((list)->first); var != NULL; var = (type)(((Link *)(var))->next))
+#define LISTBASE_FOREACH_BACKWARD(type, var, list) \
+ for (type var = (type)((list)->last); var != NULL; var = (type)(((Link *)(var))->prev))
+
/** A version of #LISTBASE_FOREACH that supports removing the item we're looping over. */
#define LISTBASE_FOREACH_MUTABLE(type, var, list) \
for (type var = (type)((list)->first), *var##_iter_next; \
((var != NULL) ? ((void)(var##_iter_next = (type)(((Link *)(var))->next)), 1) : 0); \
var = var##_iter_next)
+/** A version of #LISTBASE_FOREACH_BACKWARD that supports removing the item we're looping over. */
+#define LISTBASE_FOREACH_BACKWARD_MUTABLE(type, var, list) \
+ for (type var = (type)((list)->last), *var##_iter_prev; \
+ ((var != NULL) ? ((void)(var##_iter_prev = (type)(((Link *)(var))->prev)), 1) : 0); \
+ var = var##_iter_prev)
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenlib/BLI_math_base.h b/source/blender/blenlib/BLI_math_base.h
index 5b941f570de..deb29605552 100644
--- a/source/blender/blenlib/BLI_math_base.h
+++ b/source/blender/blenlib/BLI_math_base.h
@@ -112,6 +112,7 @@ MINLINE float saasin(float fac);
MINLINE float sasqrt(float fac);
MINLINE float interpf(float a, float b, float t);
+MINLINE double interpd(double a, double b, double t);
MINLINE float min_ff(float a, float b);
MINLINE float max_ff(float a, float b);
diff --git a/source/blender/blenlib/BLI_math_color.h b/source/blender/blenlib/BLI_math_color.h
index 03eb2b890cf..3bc3be8b022 100644
--- a/source/blender/blenlib/BLI_math_color.h
+++ b/source/blender/blenlib/BLI_math_color.h
@@ -140,12 +140,18 @@ MINLINE void float_to_byte_dither_v3(
#define rgba_float_args_set_ch(col, r, g, b, a) \
rgba_float_args_set(col, (r) / 255.0f, (g) / 255.0f, (b) / 255.0f, (a) / 255.0f)
-MINLINE void rgba_char_args_set(
- char col[4], const char r, const char g, const char b, const char a);
+MINLINE void rgba_uchar_args_set(unsigned char col[4],
+ const unsigned char r,
+ const unsigned char g,
+ const unsigned char b,
+ const unsigned char a);
MINLINE void rgba_float_args_set(
float col[4], const float r, const float g, const float b, const float a);
-MINLINE void rgba_char_args_test_set(
- char col[4], const char r, const char g, const char b, const char a);
+MINLINE void rgba_uchar_args_test_set(unsigned char col[4],
+ const unsigned char r,
+ const unsigned char g,
+ const unsigned char b,
+ const unsigned char a);
MINLINE void cpack_cpy_3ub(unsigned char r_col[3], const unsigned int pack);
void blackbody_temperature_to_rgb_table(float *r_table, int width, float min, float max);
diff --git a/source/blender/blenlib/BLI_math_geom.h b/source/blender/blenlib/BLI_math_geom.h
index d5485765844..39b1b96d009 100644
--- a/source/blender/blenlib/BLI_math_geom.h
+++ b/source/blender/blenlib/BLI_math_geom.h
@@ -92,6 +92,7 @@ float volume_tetrahedron_signed_v3(const float v1[3],
const float v3[3],
const float v4[3]);
+bool is_edge_convex_v3(const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
bool is_quad_convex_v3(const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
bool is_quad_convex_v2(const float v1[2], const float v2[2], const float v3[2], const float v4[2]);
bool is_poly_convex_v2(const float verts[][2], unsigned int nr);
@@ -390,6 +391,13 @@ bool isect_tri_tri_epsilon_v3(const float t_a0[3],
float r_i2[3],
const float epsilon);
+bool isect_tri_tri_v2(const float p1[2],
+ const float q1[2],
+ const float r1[2],
+ const float p2[2],
+ const float q2[2],
+ const float r2[2]);
+
/* water-tight raycast (requires pre-calculation) */
struct IsectRayPrecalc {
/* Maximal dimension kz, and orthogonal dimensions. */
@@ -635,6 +643,14 @@ void projmat_dimensions(const float projmat[4][4],
float *r_near,
float *r_far);
+void projmat_from_subregion(const float projmat[4][4],
+ const int win_size[2],
+ const int x_min,
+ const int x_max,
+ const int y_min,
+ const int y_max,
+ float r_projmat[4][4]);
+
int box_clip_bounds_m4(float boundbox[2][3], const float bounds[4], float winmat[4][4]);
void box_minmax_bounds_m4(float min[3], float max[3], float boundbox[2][3], float mat[4][4]);
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index 52d976daa2d..f5d87667b73 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -41,6 +41,7 @@ void zero_m4(float R[4][4]);
void unit_m2(float R[2][2]);
void unit_m3(float R[3][3]);
void unit_m4(float R[4][4]);
+void unit_m4_db(double m[4][4]);
void copy_m2_m2(float R[2][2], const float A[2][2]);
void copy_m3_m3(float R[3][3], const float A[3][3]);
@@ -48,9 +49,14 @@ void copy_m4_m4(float R[4][4], const float A[4][4]);
void copy_m3_m4(float R[3][3], const float A[4][4]);
void copy_m4_m3(float R[4][4], const float A[3][3]);
+void copy_m4_m4_db(double m1[4][4], const double m2[4][4]);
+
/* double->float */
void copy_m3_m3d(float R[3][3], const double A[3][3]);
+/* float->double */
+void copy_m4d_m4(double R[4][4], const float A[4][4]);
+
void swap_m3m3(float A[3][3], float B[3][3]);
void swap_m4m4(float A[4][4], float B[4][4]);
@@ -82,6 +88,8 @@ void mul_m3_m3m3_uniq(float R[3][3], const float A[3][3], const float B[3][3]);
void mul_m3_m3_pre(float R[3][3], const float A[3][3]);
void mul_m3_m3_post(float R[3][3], const float B[3][3]);
void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4]);
+void mul_m4_m4m4_db_uniq(double R[4][4], const double A[4][4], const double B[4][4]);
+void mul_m4db_m4db_m4fl_uniq(double R[4][4], const double A[4][4], const float B[4][4]);
void mul_m4_m4_pre(float R[4][4], const float A[4][4]);
void mul_m4_m4_post(float R[4][4], const float B[4][4]);
@@ -173,11 +181,14 @@ void _va_mul_m4_series_9(float R[4][4],
void mul_m4_v3(const float M[4][4], float r[3]);
void mul_v3_m4v3(float r[3], const float M[4][4], const float v[3]);
+void mul_v3_m4v3_db(double r[3], const double mat[4][4], const double vec[3]);
+void mul_v4_m4v3_db(double r[4], const double mat[4][4], const double vec[3]);
void mul_v2_m4v3(float r[2], const float M[4][4], const float v[3]);
void mul_v2_m2v2(float r[2], const float M[2][2], const float v[2]);
void mul_m2v2(const float M[2][2], float v[2]);
void mul_mat3_m4_v3(const float M[4][4], float r[3]);
void mul_v3_mat3_m4v3(float r[3], const float M[4][4], const float v[3]);
+void mul_v3_mat3_m4v3_db(double r[3], const double M[4][4], const double v[3]);
void mul_m4_v4(const float M[4][4], float r[4]);
void mul_v4_m4v4(float r[4], const float M[4][4], const float v[4]);
void mul_v4_m4v3(float r[4], const float M[4][4], const float v[3]); /* v has implicit w = 1.0f */
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 2815046865d..ccb42683d5a 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -106,6 +106,7 @@ MINLINE void add_v2_v2(float r[2], const float a[2]);
MINLINE void add_v2_v2v2(float r[2], const float a[2], const float b[2]);
MINLINE void add_v2_v2v2_int(int r[2], const int a[2], const int b[2]);
MINLINE void add_v3_v3(float r[3], const float a[3]);
+MINLINE void add_v3_v3_db(double r[3], const double a[3]);
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3]);
MINLINE void add_v4_v4(float r[4], const float a[4]);
MINLINE void add_v4_v4v4(float r[4], const float a[4], const float b[4]);
@@ -119,6 +120,7 @@ MINLINE void sub_v2_v2v2_int(int r[2], const int a[2], const int b[2]);
MINLINE void sub_v3_v3(float r[3], const float a[3]);
MINLINE void sub_v3_v3v3(float r[3], const float a[3], const float b[3]);
MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3]);
+MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3]);
MINLINE void sub_v4_v4(float r[4], const float a[4]);
MINLINE void sub_v4_v4v4(float r[4], const float a[4], const float b[4]);
@@ -127,6 +129,7 @@ MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3])
MINLINE void mul_v2_fl(float r[2], float f);
MINLINE void mul_v2_v2fl(float r[2], const float a[2], float f);
MINLINE void mul_v3_fl(float r[3], float f);
+MINLINE void mul_v3db_db(double r[3], double f);
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f);
MINLINE void mul_v2_v2(float r[2], const float a[2]);
MINLINE void mul_v2_v2v2(float r[2], const float a[2], const float b[2]);
@@ -189,9 +192,12 @@ MINLINE float dot_v4v4(const float a[4], const float b[4]) ATTR_WARN_UNUSED_RESU
MINLINE double dot_v3db_v3fl(const double a[3], const float b[3]) ATTR_WARN_UNUSED_RESULT;
+MINLINE double dot_v3v3_db(const double a[3], const double b[3]) ATTR_WARN_UNUSED_RESULT;
+
MINLINE float cross_v2v2(const float a[2], const float b[2]) ATTR_WARN_UNUSED_RESULT;
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3]);
MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3]);
+MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3]);
MINLINE void add_newell_cross_v3_v3v3(float n[3], const float v_prev[3], const float v_curr[3]);
@@ -231,9 +237,11 @@ MINLINE double normalize_v3_d(double n[3]);
/******************************* Interpolation *******************************/
void interp_v2_v2v2(float r[2], const float a[2], const float b[2], const float t);
+void interp_v2_v2v2_db(double target[2], const double a[2], const double b[2], const double t);
void interp_v2_v2v2v2(
float r[2], const float a[2], const float b[2], const float c[2], const float t[3]);
void interp_v3_v3v3(float r[3], const float a[3], const float b[3], const float t);
+void interp_v3_v3v3_db(double target[3], const double a[3], const double b[3], const double t);
void interp_v3_v3v3v3(
float p[3], const float v1[3], const float v2[3], const float v3[3], const float w[3]);
void interp_v3_v3v3v3v3(float p[3],
diff --git a/source/blender/blenlib/BLI_memiter.h b/source/blender/blenlib/BLI_memiter.h
index 6f6316e15e4..9f5be292dd8 100644
--- a/source/blender/blenlib/BLI_memiter.h
+++ b/source/blender/blenlib/BLI_memiter.h
@@ -33,7 +33,6 @@ extern "C" {
#define BLI_MEMITER_DEFAULT_SIZE (1 << 19)
struct BLI_memiter;
-struct BLI_memiter_chunk;
typedef struct BLI_memiter BLI_memiter;
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index 31b68204c51..75d5cb286ac 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -29,8 +29,6 @@ extern "C" {
#include "BLI_compiler_attrs.h"
-struct ListBase;
-
void BLI_setenv(const char *env, const char *val) ATTR_NONNULL(1);
void BLI_setenv_if_new(const char *env, const char *val) ATTR_NONNULL(1);
const char *BLI_getenv(const char *env) ATTR_NONNULL(1);
@@ -42,6 +40,8 @@ void BLI_split_dirfile(
const char *string, char *dir, char *file, const size_t dirlen, const size_t filelen);
void BLI_split_dir_part(const char *string, char *dir, const size_t dirlen);
void BLI_split_file_part(const char *string, char *file, const size_t filelen);
+const char *BLI_path_extension(const char *filepath) ATTR_NONNULL();
+
void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__restrict file)
ATTR_NONNULL();
void BLI_join_dirfile(char *__restrict string,
diff --git a/source/blender/blenlib/BLI_string_utf8.h b/source/blender/blenlib/BLI_string_utf8.h
index 70586b671b4..0cdd6e94610 100644
--- a/source/blender/blenlib/BLI_string_utf8.h
+++ b/source/blender/blenlib/BLI_string_utf8.h
@@ -89,6 +89,11 @@ size_t BLI_str_partition_ex_utf8(const char *str,
const char **suf,
const bool from_right) ATTR_NONNULL(1, 3, 4, 5);
+int BLI_str_utf8_offset_to_index(const char *str, int offset);
+int BLI_str_utf8_offset_from_index(const char *str, int index);
+int BLI_str_utf8_offset_to_column(const char *str, int offset);
+int BLI_str_utf8_offset_from_column(const char *str, int column);
+
#define BLI_UTF8_MAX 6 /* mem */
#define BLI_UTF8_WIDTH_MAX 2 /* columns */
#define BLI_UTF8_ERR ((unsigned int)-1)
diff --git a/source/blender/blenlib/BLI_string_utils.h b/source/blender/blenlib/BLI_string_utils.h
index 9740629276d..13dbb2de659 100644
--- a/source/blender/blenlib/BLI_string_utils.h
+++ b/source/blender/blenlib/BLI_string_utils.h
@@ -38,6 +38,7 @@ struct ListBase;
typedef bool (*UniquenameCheckCallback)(void *arg, const char *name);
size_t BLI_split_name_num(char *left, int *nr, const char *name, const char delim);
+bool BLI_string_is_decimal(const char *string) ATTR_NONNULL();
void BLI_string_split_suffix(const char *string, char *r_body, char *r_suf, const size_t str_len);
void BLI_string_split_prefix(const char *string, char *r_pre, char *r_body, const size_t str_len);
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index 0ec6e7ee4fc..7f6e9d49b17 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -63,6 +63,7 @@ set(SRC
intern/buffer.c
intern/callbacks.c
intern/convexhull_2d.c
+ intern/delaunay_2d.c
intern/dynlib.c
intern/easing.c
intern/edgehash.c
@@ -150,6 +151,7 @@ set(SRC
BLI_compiler_typecheck.h
BLI_console.h
BLI_convexhull_2d.h
+ BLI_delaunay_2d.h
BLI_dial_2d.h
BLI_dlrbTree.h
BLI_dynlib.h
diff --git a/source/blender/blenlib/intern/BLI_ghash.c b/source/blender/blenlib/intern/BLI_ghash.c
index 769bb02e2b9..05ffb02597d 100644
--- a/source/blender/blenlib/intern/BLI_ghash.c
+++ b/source/blender/blenlib/intern/BLI_ghash.c
@@ -886,7 +886,7 @@ bool BLI_ghash_ensure_p_ex(GHash *gh, const void *key, void ***r_key, void ***r_
const bool haskey = (e != NULL);
if (!haskey) {
- /* pass 'key' incase we resize */
+ /* Pass 'key' in case we resize. */
e = BLI_mempool_alloc(gh->entrypool);
ghash_insert_ex_keyonly_entry(gh, (void *)key, bucket_index, (Entry *)e);
e->e.key = NULL; /* caller must re-assign */
@@ -1189,7 +1189,7 @@ bool BLI_gset_ensure_p_ex(GSet *gs, const void *key, void ***r_key)
const bool haskey = (e != NULL);
if (!haskey) {
- /* pass 'key' incase we resize */
+ /* Pass 'key' in case we resize */
e = BLI_mempool_alloc(((GHash *)gs)->entrypool);
ghash_insert_ex_keyonly_entry((GHash *)gs, (void *)key, bucket_index, (Entry *)e);
e->key = NULL; /* caller must re-assign */
diff --git a/source/blender/blenlib/intern/boxpack_2d.c b/source/blender/blenlib/intern/boxpack_2d.c
index 196d45967be..ddc7f9ee4c7 100644
--- a/source/blender/blenlib/intern/boxpack_2d.c
+++ b/source/blender/blenlib/intern/boxpack_2d.c
@@ -273,12 +273,12 @@ static int vertex_sort(const void *p1, const void *p2, void *vs_ctx_p)
/** \} */
/**
- * Main boxpacking function accessed from other functions
+ * Main box-packing function accessed from other functions
* This sets boxes x,y to positive values, sorting from 0,0 outwards.
* There is no limit to the space boxes may take, only that they will be packed
* tightly into the lower left hand corner (0,0)
*
- * \param boxarray: a pre allocated array of boxes.
+ * \param boxarray: a pre-allocated array of boxes.
* only the 'box->x' and 'box->y' are set, 'box->w' and 'box->h' are used,
* 'box->index' is not used at all, the only reason its there
* is that the box array is sorted by area and programs need to be able
diff --git a/source/blender/blenlib/intern/delaunay_2d.c b/source/blender/blenlib/intern/delaunay_2d.c
new file mode 100644
index 00000000000..23f560c5463
--- /dev/null
+++ b/source/blender/blenlib/intern/delaunay_2d.c
@@ -0,0 +1,2913 @@
+/*
+ * 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.
+ */
+
+/** \file
+ * \ingroup bli
+ *
+ * Dynamic Constrained Delaunay Triangulation.
+ * See paper by Marcelo Kallmann, Hanspeter Bieri, and Daniel Thalmann
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_array.h"
+#include "BLI_bitmap.h"
+#include "BLI_linklist.h"
+#include "BLI_math.h"
+#include "BLI_memarena.h"
+#include "BLI_mempool.h"
+#include "BLI_rand.h"
+
+#include "BLI_delaunay_2d.h"
+
+/* Uncomment this define to get helpful debugging functions etc. defined. */
+// #define DEBUG_CDT
+
+struct CDTEdge;
+struct CDTFace;
+struct CDTVert;
+
+typedef struct SymEdge {
+ struct SymEdge *next; /* In face, doing CCW traversal of face. */
+ struct SymEdge *rot; /* CCW around vert. */
+ struct CDTVert *vert; /* Vert at origin. */
+ struct CDTEdge *edge; /* Undirected edge this is for. */
+ struct CDTFace *face; /* Face on left side. */
+} SymEdge;
+
+typedef struct CDTVert {
+ double co[2]; /* Coordinate. */
+ SymEdge *symedge; /* Some edge attached to it. */
+ LinkNode *input_ids; /* List of corresponding vertex input ids. */
+ int index; /* Index into array that cdt keeps. */
+} CDTVert;
+
+typedef struct CDTEdge {
+ LinkNode *input_ids; /* List of input edge ids that this is part of. */
+ SymEdge symedges[2]; /* The directed edges for this edge. */
+} CDTEdge;
+
+typedef struct CDTFace {
+ double centroid[2]; /* Average of vertex coords. */
+ SymEdge *symedge; /* A symedge in face; only used during output. */
+ LinkNode *input_ids; /* List of input face ids that this is part of. */
+ int visit_index; /* Which visit epoch has this been seen. */
+ bool deleted; /* Marks this face no longer used. */
+} CDTFace;
+
+typedef struct CDT_state {
+ LinkNode *edges;
+ LinkNode *faces;
+ CDTFace *outer_face;
+ CDTVert **vert_array;
+ int vert_array_len;
+ int vert_array_len_alloc;
+ double minx;
+ double miny;
+ double maxx;
+ double maxy;
+ double margin;
+ int visit_count;
+ int face_edge_offset;
+ RNG *rng;
+ MemArena *arena;
+ BLI_mempool *listpool;
+ double epsilon;
+ bool output_prepared;
+} CDT_state;
+
+typedef struct LocateResult {
+ enum { OnVert, OnEdge, InFace } loc_kind;
+ SymEdge *se;
+ double edge_lambda;
+} LocateResult;
+
+#define DLNY_ARENASIZE 1 << 14
+
+/**
+ * This margin means that will only be a 1 degree possible
+ * concavity on outside if remove all border touching triangles.
+ */
+#define DLNY_MARGIN_PCT 2000.0
+
+#ifdef DEBUG_CDT
+# define F2(p) p[0], p[1]
+static void dump_se(const SymEdge *se, const char *lab);
+static void dump_v(const CDTVert *v, const char *lab);
+static void dump_se_cycle(const SymEdge *se, const char *lab, const int limit);
+static void dump_id_list(const LinkNode *id_list, const char *lab);
+static void dump_cdt(const CDT_state *cdt, const char *lab);
+static void cdt_draw(CDT_state *cdt, const char *lab);
+static void validate_face_centroid(SymEdge *se);
+static void validate_cdt(CDT_state *cdt, bool check_all_tris);
+#endif
+
+/* TODO: move these to BLI_vector... and BLI_math... */
+static double max_dd(const double a, const double b)
+{
+ return (a > b) ? a : b;
+}
+
+static double len_v2v2_db(const double a[2], const double b[2])
+{
+ return sqrt((b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]));
+}
+
+static double len_squared_v2v2_db(const double a[2], const double b[2])
+{
+ return (b[0] - a[0]) * (b[0] - a[0]) + (b[1] - a[1]) * (b[1] - a[1]);
+}
+
+static void add_v2_v2_db(double a[2], const double b[2])
+{
+ a[0] += b[0];
+ a[1] += b[1];
+}
+
+static void sub_v2_v2v2_db(double *a, const double *b, const double *c)
+{
+ a[0] = b[0] - c[0];
+ a[1] = b[1] - c[1];
+}
+
+static double dot_v2v2_db(const double *a, const double *b)
+{
+ return a[0] * b[0] + a[1] * b[1];
+}
+
+static double closest_to_line_v2_db(double r_close[2],
+ const double p[2],
+ const double l1[2],
+ const double l2[2])
+{
+ double h[2], u[2], lambda, denom;
+ sub_v2_v2v2_db(u, l2, l1);
+ sub_v2_v2v2_db(h, p, l1);
+ denom = dot_v2v2_db(u, u);
+ if (denom < DBL_EPSILON) {
+ r_close[0] = l1[0];
+ r_close[1] = l1[1];
+ return 0.0;
+ }
+ lambda = dot_v2v2_db(u, h) / dot_v2v2_db(u, u);
+ r_close[0] = l1[0] + u[0] * lambda;
+ r_close[1] = l1[1] + u[1] * lambda;
+ return lambda;
+}
+
+/**
+ * If intersection == ISECT_LINE_LINE_CROSS or ISECT_LINE_LINE_NONE:
+ * <pre>
+ * pt = v1 + lamba * (v2 - v1) = v3 + mu * (v4 - v3)
+ * </pre>
+ */
+static int isect_seg_seg_v2_lambda_mu_db(const double v1[2],
+ const double v2[2],
+ const double v3[2],
+ const double v4[2],
+ double *r_lambda,
+ double *r_mu)
+{
+ double div, lambda, mu;
+
+ div = (v2[0] - v1[0]) * (v4[1] - v3[1]) - (v2[1] - v1[1]) * (v4[0] - v3[0]);
+ if (fabs(div) < DBL_EPSILON) {
+ return ISECT_LINE_LINE_COLINEAR;
+ }
+
+ lambda = ((v1[1] - v3[1]) * (v4[0] - v3[0]) - (v1[0] - v3[0]) * (v4[1] - v3[1])) / div;
+
+ mu = ((v1[1] - v3[1]) * (v2[0] - v1[0]) - (v1[0] - v3[0]) * (v2[1] - v1[1])) / div;
+
+ if (r_lambda) {
+ *r_lambda = lambda;
+ }
+ if (r_mu) {
+ *r_mu = mu;
+ }
+
+ if (lambda >= 0.0 && lambda <= 1.0 && mu >= 0.0 && mu <= 1.0) {
+ if (lambda == 0.0 || lambda == 1.0 || mu == 0.0 || mu == 1.0) {
+ return ISECT_LINE_LINE_EXACT;
+ }
+ return ISECT_LINE_LINE_CROSS;
+ }
+ return ISECT_LINE_LINE_NONE;
+}
+
+/** return 1 if a,b,c forms CCW angle, -1 if a CW angle, 0 if straight */
+static int CCW_test(const double a[2], const double b[2], const double c[2])
+{
+ double det;
+ double ab;
+
+ /* This is twice the signed area of triangle abc. */
+ det = (b[0] - a[0]) * (c[1] - a[1]) - (c[0] - a[0]) * (b[1] - a[1]);
+ ab = len_v2v2_db(a, b);
+ if (ab < DBL_EPSILON) {
+ return 0;
+ }
+ det /= ab;
+ if (det > DBL_EPSILON) {
+ return 1;
+ }
+ else if (det < -DBL_EPSILON) {
+ return -1;
+ }
+ return 0;
+}
+
+/** return true if a -- b -- c are in that order, assuming they are on a straight line. */
+static bool in_line(const double a[2], const double b[2], const double c[2])
+{
+ double dir_ab[2], dir_ac[2];
+
+ sub_v2_v2v2_db(dir_ab, a, b);
+ sub_v2_v2v2_db(dir_ac, a, c);
+ return dot_v2v2_db(dir_ab, dir_ac) >= 0.0;
+}
+
+#ifndef NDEBUG
+/** Is s2 reachable from s1 by next pointers with < limit hops? */
+static bool reachable(SymEdge *s1, SymEdge *s2, int limit)
+{
+ int count = 0;
+ for (SymEdge *s = s1; s && count < limit; s = s->next) {
+ if (s == s2) {
+ return true;
+ }
+ count++;
+ }
+ return false;
+}
+#endif
+
+static void calc_face_centroid(SymEdge *se)
+{
+ SymEdge *senext;
+ double *centroidp = se->face->centroid;
+ int count;
+ copy_v2_v2_db(centroidp, se->vert->co);
+ count = 1;
+ for (senext = se->next; senext != se; senext = senext->next) {
+ add_v2_v2_db(centroidp, senext->vert->co);
+ count++;
+ }
+ centroidp[0] /= count;
+ centroidp[1] /= count;
+}
+
+/** Using array to store these instead of linked list so can make a random selection from them. */
+static CDTVert *add_cdtvert(CDT_state *cdt, double x, double y)
+{
+ CDTVert *v = BLI_memarena_alloc(cdt->arena, sizeof(*v));
+ v->co[0] = x;
+ v->co[1] = y;
+ v->input_ids = NULL;
+ v->symedge = NULL;
+ if (cdt->vert_array_len == cdt->vert_array_len_alloc) {
+ CDTVert **old_array = cdt->vert_array;
+ cdt->vert_array_len_alloc *= 4;
+ cdt->vert_array = BLI_memarena_alloc(cdt->arena,
+ cdt->vert_array_len_alloc * sizeof(cdt->vert_array[0]));
+ memmove(cdt->vert_array, old_array, cdt->vert_array_len * sizeof(cdt->vert_array[0]));
+ }
+ BLI_assert(cdt->vert_array_len < cdt->vert_array_len_alloc);
+ v->index = cdt->vert_array_len;
+ cdt->vert_array[cdt->vert_array_len++] = v;
+ return v;
+}
+
+static CDTEdge *add_cdtedge(
+ CDT_state *cdt, CDTVert *v1, CDTVert *v2, CDTFace *fleft, CDTFace *fright)
+{
+ CDTEdge *e = BLI_memarena_alloc(cdt->arena, sizeof(*e));
+ SymEdge *se = &e->symedges[0];
+ SymEdge *sesym = &e->symedges[1];
+ e->input_ids = NULL;
+ BLI_linklist_prepend_arena(&cdt->edges, (void *)e, cdt->arena);
+ se->edge = sesym->edge = e;
+ se->face = fleft;
+ sesym->face = fright;
+ se->vert = v1;
+ if (v1->symedge == NULL) {
+ v1->symedge = se;
+ }
+ sesym->vert = v2;
+ if (v2->symedge == NULL) {
+ v2->symedge = sesym;
+ }
+ se->next = sesym->next = se->rot = sesym->rot = NULL;
+ return e;
+}
+
+static CDTFace *add_cdtface(CDT_state *cdt)
+{
+ CDTFace *f = BLI_memarena_alloc(cdt->arena, sizeof(*f));
+ f->visit_index = 0;
+ f->deleted = false;
+ f->symedge = NULL;
+ f->input_ids = NULL;
+ BLI_linklist_prepend_arena(&cdt->faces, (void *)f, cdt->arena);
+ return f;
+}
+
+static bool id_in_list(const LinkNode *id_list, int id)
+{
+ const LinkNode *ln;
+
+ for (ln = id_list; ln; ln = ln->next) {
+ if (POINTER_AS_INT(ln->link) == id) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/** is any id in (range_start, range_start+1, ... , range_end) in id_list? */
+static bool id_range_in_list(const LinkNode *id_list, int range_start, int range_end)
+{
+ const LinkNode *ln;
+ int id;
+
+ for (ln = id_list; ln; ln = ln->next) {
+ id = POINTER_AS_INT(ln->link);
+ if (id >= range_start && id <= range_end) {
+ return true;
+ }
+ }
+ return false;
+}
+
+static void add_to_input_ids(LinkNode **dst, int input_id, CDT_state *cdt)
+{
+ if (!id_in_list(*dst, input_id)) {
+ BLI_linklist_prepend_arena(dst, POINTER_FROM_INT(input_id), cdt->arena);
+ }
+}
+
+static void add_list_to_input_ids(LinkNode **dst, const LinkNode *src, CDT_state *cdt)
+{
+ const LinkNode *ln;
+
+ for (ln = src; ln; ln = ln->next) {
+ add_to_input_ids(dst, POINTER_AS_INT(ln->link), cdt);
+ }
+}
+
+/** Return other #SymEdge for same #CDTEdge as se. */
+static inline SymEdge *sym(const SymEdge *se)
+{
+ return se->next->rot;
+}
+
+/** Return SymEdge whose next is se. */
+static inline SymEdge *prev(const SymEdge *se)
+{
+ return se->rot->next->rot;
+}
+
+static inline bool is_border_edge(const CDTEdge *e, const CDT_state *cdt)
+{
+ return e->symedges[0].face == cdt->outer_face || e->symedges[1].face == cdt->outer_face;
+}
+
+/** Does one edge of this edge touch the frame? */
+static bool edge_touches_frame(const CDTEdge *e)
+{
+ return e->symedges[0].vert->index < 4 || e->symedges[1].vert->index < 4;
+}
+
+static inline bool is_constrained_edge(const CDTEdge *e)
+{
+ return e->input_ids != NULL;
+}
+
+static inline bool is_deleted_edge(const CDTEdge *e)
+{
+ return e->symedges[0].next == NULL;
+}
+
+/** Is there already an edge between a and b? */
+static bool exists_edge(const CDTVert *a, const CDTVert *b)
+{
+ SymEdge *se, *ss;
+ se = a->symedge;
+ if (se->next->vert == b) {
+ return true;
+ }
+ for (ss = se->rot; ss != se; ss = ss->rot) {
+ if (ss->next->vert == b) {
+ return true;
+ }
+ }
+ return false;
+}
+
+/**
+ * Assume s1 and s2 are both SymEdges in a face with > 3 sides,
+ * and one is not the next of the other.
+ * Add an edge from s1->v to s2->v, splitting the face in two.
+ * The original face will continue to be associated with the subface
+ * that has s1, and a new face will be made for s2's new face.
+ * The centroids of both faces are recalculated.
+ * Return the new diagonal's CDTEdge *.
+ */
+static CDTEdge *add_diagonal(CDT_state *cdt, SymEdge *s1, SymEdge *s2)
+{
+ CDTEdge *ediag;
+ CDTFace *fold, *fnew;
+ SymEdge *sdiag, *sdiagsym;
+ SymEdge *s1prev, *s1prevsym, *s2prev, *s2prevsym, *se;
+ BLI_assert(reachable(s1, s2, 20));
+ BLI_assert(reachable(s2, s1, 20));
+ fold = s1->face;
+ fnew = add_cdtface(cdt);
+ s1prev = prev(s1);
+ s1prevsym = sym(s1prev);
+ s2prev = prev(s2);
+ s2prevsym = sym(s2prev);
+ ediag = add_cdtedge(cdt, s1->vert, s2->vert, fnew, fold);
+ sdiag = &ediag->symedges[0];
+ sdiagsym = &ediag->symedges[1];
+ sdiag->next = s2;
+ sdiagsym->next = s1;
+ s2prev->next = sdiagsym;
+ s1prev->next = sdiag;
+ s1->rot = sdiag;
+ sdiag->rot = s1prevsym;
+ s2->rot = sdiagsym;
+ sdiagsym->rot = s2prevsym;
+#ifdef DEBUG_CDT
+ BLI_assert(reachable(s2, sdiag, 20));
+#endif
+ for (se = s2; se != sdiag; se = se->next) {
+ se->face = fnew;
+ }
+ add_list_to_input_ids(&fnew->input_ids, fold->input_ids, cdt);
+ calc_face_centroid(sdiag);
+ calc_face_centroid(sdiagsym);
+ return ediag;
+}
+
+/**
+ * Split \a se at fraction \a lambda,
+ * and return the new #CDTEdge that is the new second half.
+ * Copy the edge input_ids into the new one.
+ */
+static CDTEdge *split_edge(CDT_state *cdt, SymEdge *se, double lambda)
+{
+ const double *a, *b;
+ double p[2];
+ CDTVert *v;
+ CDTEdge *e;
+ SymEdge *sesym, *newse, *newsesym, *senext, *sesymprev, *sesymprevsym;
+ /* Split e at lambda. */
+ a = se->vert->co;
+ b = se->next->vert->co;
+ sesym = sym(se);
+ sesymprev = prev(sesym);
+ sesymprevsym = sym(sesymprev);
+ senext = se->next;
+ p[0] = (1.0 - lambda) * a[0] + lambda * b[0];
+ p[1] = (1.0 - lambda) * a[1] + lambda * b[1];
+ v = add_cdtvert(cdt, p[0], p[1]);
+ e = add_cdtedge(cdt, v, se->next->vert, se->face, sesym->face);
+ sesym->vert = v;
+ newse = &e->symedges[0];
+ newsesym = &e->symedges[1];
+ se->next = newse;
+ newsesym->next = sesym;
+ newse->next = senext;
+ newse->rot = sesym;
+ sesym->rot = newse;
+ senext->rot = newsesym;
+ newsesym->rot = sesymprevsym;
+ sesymprev->next = newsesym;
+ if (newsesym->vert->symedge == sesym) {
+ newsesym->vert->symedge = newsesym;
+ }
+ add_list_to_input_ids(&e->input_ids, se->edge->input_ids, cdt);
+ calc_face_centroid(se);
+ calc_face_centroid(sesym);
+ return e;
+}
+
+/**
+ * Delete an edge from the structure. The new combined face on either side of
+ * the deleted edge will be the one that was e's face; the centroid is updated.
+ * There will be now an unused face, marked by setting its deleted flag,
+ * and an unused #CDTEdge, marked by setting the next and rot pointers of
+ * its SymEdges to NULL.
+ * <pre>
+ * . v2 .
+ * / \ / \
+ * /f|j\ / \
+ * / | \ / \
+ * |
+ * A | B A
+ * \ e| / \ /
+ * \ | / \ /
+ * \h|i/ \ /
+ * . v1 .
+ * </pre>
+ * Also handle variant cases where one or both ends
+ * are attached only to e.
+ */
+static void delete_edge(CDT_state *cdt, SymEdge *e)
+{
+ SymEdge *esym, *f, *h, *i, *j, *k, *jsym, *hsym;
+ CDTFace *aface, *bface;
+ CDTVert *v1, *v2;
+ bool v1_isolated, v2_isolated;
+
+ esym = sym(e);
+ v1 = e->vert;
+ v2 = esym->vert;
+ aface = e->face;
+ bface = esym->face;
+ f = e->next;
+ h = prev(e);
+ i = esym->next;
+ j = prev(esym);
+ jsym = sym(j);
+ hsym = sym(h);
+ v1_isolated = (i == e);
+ v2_isolated = (f == esym);
+
+ if (!v1_isolated) {
+ h->next = i;
+ i->rot = hsym;
+ }
+ if (!v2_isolated) {
+ j->next = f;
+ f->rot = jsym;
+ }
+ if (!v1_isolated && !v2_isolated && aface != bface) {
+ for (k = i; k != f; k = k->next) {
+ k->face = aface;
+ }
+ }
+
+ /* If e was representative symedge for v1 or v2, fix that. */
+ if (v1_isolated) {
+ v1->symedge = NULL;
+ }
+ else if (v1->symedge == e) {
+ v1->symedge = i;
+ }
+ if (v2_isolated) {
+ v2->symedge = NULL;
+ }
+ else if (v2->symedge == esym) {
+ v2->symedge = f;
+ }
+
+ /* Mark SymEdge as deleted by setting all its pointers to NULL. */
+ e->next = e->rot = NULL;
+ esym->next = esym->rot = NULL;
+ if (!v1_isolated && !v2_isolated && aface != bface) {
+ bface->deleted = true;
+ if (cdt->outer_face == bface) {
+ cdt->outer_face = aface;
+ }
+ }
+ if (aface != cdt->outer_face) {
+ calc_face_centroid(f);
+ }
+}
+
+/**
+ * The initial structure will be the rectangle with opposite corners (minx,miny)
+ * and (maxx,maxy), and a diagonal going between those two corners.
+ * We keep track of the outer face (surrounding the entire structure; its boundary
+ * is the clockwise traversal of the bounding box rectangle initially) in cdt->outer_face.
+ *
+ * The vertices are kept as pointers in an array (which may need to be reallocated from
+ * time to time); the edges and faces are kept in lists. Sometimes edges and faces are deleted,
+ * marked by setting all pointers to NULL (for edges), or setting the deleted flag to true (for
+ * faces).
+ *
+ * A #MemArena is allocated to do all allocations from except for link list nodes; a listpool
+ * is created for link list node allocations.
+ *
+ * The epsilon argument is stored and used in "near enough" distance calculations.
+ *
+ * When done, caller must call BLI_constrained_delaunay_free to free
+ * the memory used by the returned #CDT_state.
+ */
+static CDT_state *cdt_init(double minx, double maxx, double miny, double maxy, double epsilon)
+{
+ double x0, x1, y0, y1;
+ double margin;
+ CDTVert *v[4];
+ CDTEdge *e[4];
+ CDTFace *f0, *fouter;
+ int i, inext, iprev;
+ MemArena *arena = BLI_memarena_new(DLNY_ARENASIZE, __func__);
+ CDT_state *cdt = BLI_memarena_alloc(arena, sizeof(CDT_state));
+ cdt->edges = NULL;
+ cdt->faces = NULL;
+ cdt->vert_array_len = 0;
+ cdt->vert_array_len_alloc = 32;
+ cdt->vert_array = BLI_memarena_alloc(arena,
+ cdt->vert_array_len_alloc * sizeof(*cdt->vert_array));
+ cdt->minx = minx;
+ cdt->miny = miny;
+ cdt->maxx = maxx;
+ cdt->maxy = maxy;
+ cdt->arena = arena;
+ cdt->listpool = BLI_mempool_create(sizeof(LinkNode), 128, 128, 0);
+ cdt->rng = BLI_rng_new(0);
+ cdt->epsilon = epsilon;
+
+ /* Expand bounding box a bit and make initial CDT from it. */
+ margin = DLNY_MARGIN_PCT * max_dd(maxx - minx, maxy - miny) / 100.0;
+ if (margin <= 0.0) {
+ margin = 1.0;
+ }
+ if (margin < epsilon) {
+ margin = 4 * epsilon; /* Make sure constraint verts don't merge with border verts. */
+ }
+ cdt->margin = margin;
+ x0 = minx - margin;
+ y0 = miny - margin;
+ x1 = maxx + margin;
+ y1 = maxy + margin;
+
+ /* Make a quad, then split it with a diagonal. */
+ v[0] = add_cdtvert(cdt, x0, y0);
+ v[1] = add_cdtvert(cdt, x1, y0);
+ v[2] = add_cdtvert(cdt, x1, y1);
+ v[3] = add_cdtvert(cdt, x0, y1);
+ cdt->outer_face = fouter = add_cdtface(cdt);
+ f0 = add_cdtface(cdt);
+ for (i = 0; i < 4; i++) {
+ e[i] = add_cdtedge(cdt, v[i], v[(i + 1) % 4], f0, fouter);
+ }
+ for (i = 0; i < 4; i++) {
+ inext = (i + 1) % 4;
+ iprev = (i + 3) % 4;
+ e[i]->symedges[0].next = &e[inext]->symedges[0];
+ e[inext]->symedges[1].next = &e[i]->symedges[1];
+ e[i]->symedges[0].rot = &e[iprev]->symedges[1];
+ e[iprev]->symedges[1].rot = &e[i]->symedges[0];
+ }
+ calc_face_centroid(&e[0]->symedges[0]);
+ add_diagonal(cdt, &e[0]->symedges[0], &e[2]->symedges[0]);
+ fouter->centroid[0] = fouter->centroid[1] = 0.0;
+
+ cdt->visit_count = 0;
+ cdt->output_prepared = false;
+ cdt->face_edge_offset = 0;
+ return cdt;
+}
+
+static void cdt_free(CDT_state *cdt)
+{
+ BLI_rng_free(cdt->rng);
+ BLI_mempool_destroy(cdt->listpool);
+ BLI_memarena_free(cdt->arena);
+}
+
+static bool locate_point_final(const double p[2],
+ SymEdge *tri_se,
+ bool try_neighbors,
+ const double epsilon,
+ LocateResult *r_lr)
+{
+ /* 'p' should be in or on our just outside of 'cur_tri'. */
+ double dist_inside[3];
+ int i;
+ SymEdge *se;
+ const double *a, *b;
+ double lambda, close[2];
+ bool done = false;
+#ifdef DEBUG_CDT
+ int dbglevel = 0;
+ if (dbglevel > 0) {
+ fprintf(stderr, "locate_point_final %d\n", try_neighbors);
+ dump_se(tri_se, "tri_se");
+ fprintf(stderr, "\n");
+ }
+#endif
+ se = tri_se;
+ i = 0;
+ do {
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr, "%d: ", i);
+ dump_se(se, "search se");
+ }
+#endif
+ a = se->vert->co;
+ b = se->next->vert->co;
+ lambda = closest_to_line_v2_db(close, p, a, b);
+ double len_close_p = len_v2v2_db(close, p);
+ if (len_close_p < epsilon) {
+ if (len_v2v2_db(p, a) < epsilon) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "OnVert case a (%.2f,%.2f)\n", F2(a));
+ }
+#endif
+ r_lr->loc_kind = OnVert;
+ r_lr->se = se;
+ r_lr->edge_lambda = 0.0;
+ done = true;
+ }
+ else if (len_v2v2_db(p, b) < epsilon) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "OnVert case b (%.2f,%.2f)\n", F2(b));
+ }
+#endif
+ r_lr->loc_kind = OnVert;
+ r_lr->se = se->next;
+ r_lr->edge_lambda = 0.0;
+ done = true;
+ }
+ else if (lambda > 0.0 && lambda < 1.0) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "OnEdge case, lambda=%f\n", lambda);
+ dump_se(se, "se");
+ }
+#endif
+ r_lr->loc_kind = OnEdge;
+ r_lr->se = se;
+ r_lr->edge_lambda = lambda;
+ done = true;
+ }
+ }
+ else {
+ dist_inside[i] = len_close_p;
+ dist_inside[i] = CCW_test(a, b, p) >= 0 ? len_close_p : -len_close_p;
+ }
+ i++;
+ se = se->next;
+ } while (se != tri_se && !done);
+ if (!done) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr,
+ "not done, dist_inside=%f %f %f\n",
+ dist_inside[0],
+ dist_inside[1],
+ dist_inside[2]);
+ }
+#endif
+ if (dist_inside[0] >= 0.0 && dist_inside[1] >= 0.0 && dist_inside[2] >= 0.0) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "InFace case\n");
+ dump_se_cycle(tri_se, "tri", 10);
+ }
+#endif
+ r_lr->loc_kind = InFace;
+ r_lr->se = tri_se;
+ r_lr->edge_lambda = 0.0;
+ done = true;
+ }
+ else if (try_neighbors) {
+ for (se = tri_se->next; se != tri_se; se = se->next) {
+ if (locate_point_final(p, se, false, epsilon, r_lr)) {
+ done = true;
+ break;
+ }
+ }
+ if (!done) {
+ /* Shouldn't happen desperation mode: pick something. */
+ se = NULL;
+ if (dist_inside[0] > 0) {
+ se = tri_se;
+ }
+ if (dist_inside[1] > 0 && (se == NULL || dist_inside[1] < dist_inside[i])) {
+ se = tri_se->next;
+ }
+ if (se == NULL) {
+ se = tri_se->next->next;
+ }
+ a = se->vert->co;
+ b = se->next->vert->co;
+ lambda = closest_to_line_v2_db(close, p, a, b);
+ if (lambda <= 0.0) {
+ r_lr->loc_kind = OnVert;
+ r_lr->se = se;
+ r_lr->edge_lambda = 0.0;
+ }
+ else if (lambda >= 1.0) {
+ r_lr->loc_kind = OnVert;
+ r_lr->se = se->next;
+ r_lr->edge_lambda = 0.0;
+ }
+ else {
+ r_lr->loc_kind = OnEdge;
+ r_lr->se = se->next;
+ r_lr->edge_lambda = lambda;
+ }
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(
+ stderr, "desperation case kind=%u lambda=%f\n", r_lr->loc_kind, r_lr->edge_lambda);
+ dump_se(r_lr->se, "se");
+ BLI_assert(0); /* While developing, catch these "should not happens" */
+ }
+#endif
+ fprintf(stderr, "desperation!\n"); // TODO: remove
+ return true;
+ }
+ }
+ }
+ return done;
+}
+
+static LocateResult locate_point(CDT_state *cdt, const double p[2])
+{
+ LocateResult lr;
+ SymEdge *cur_se, *next_se, *next_se_sym;
+ CDTFace *cur_tri;
+ bool done;
+ int sample_n, i, k;
+ CDTVert *v, *best_start_vert;
+ double dist_squared, best_dist_squared;
+ double *a, *b, *c;
+ const double epsilon = cdt->epsilon;
+ int visit = ++cdt->visit_count;
+ int loop_count = 0;
+#ifdef DEBUG_CDT
+ int dbglevel = 0;
+
+ if (dbglevel > 0) {
+ fprintf(stderr, "locate_point (%.2f,%.2f), visit_index=%d\n", F2(p), visit);
+ }
+#endif
+ /* Starting point determined by closest to p in an n ** (1/3) sized sample of current points. */
+ BLI_assert(cdt->vert_array_len > 0);
+ sample_n = (int)round(pow((double)cdt->vert_array_len, 0.33333));
+ if (sample_n < 1) {
+ sample_n = 1;
+ }
+ best_start_vert = NULL;
+ best_dist_squared = DBL_MAX;
+ for (k = 0; k < sample_n; k++) {
+ /* Yes, this may try some i's more than once,
+ * but will still get about an n ** (1/3) size sample. */
+ i = (int)(BLI_rng_get_uint(cdt->rng) % cdt->vert_array_len);
+ v = cdt->vert_array[i];
+ dist_squared = len_squared_v2v2_db(p, v->co);
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "try start vert %d, dist_squared=%f\n", i, dist_squared);
+ dump_v(v, "v");
+ }
+#endif
+ if (dist_squared < best_dist_squared) {
+ best_dist_squared = dist_squared;
+ best_start_vert = v;
+ }
+ }
+ cur_se = &best_start_vert->symedge[0];
+ if (cur_se->face == cdt->outer_face) {
+ cur_se = cur_se->rot;
+ BLI_assert(cur_se->face != cdt->outer_face);
+ }
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ dump_se(cur_se, "start vert edge");
+ }
+#endif
+ done = false;
+ while (!done) {
+ /* Find edge of cur_tri that separates p and t's centroid,
+ * and where other tri over the edge is unvisited. */
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ dump_se_cycle(cur_se, "cur search face", 5);
+ }
+#endif
+ cur_tri = cur_se->face;
+ BLI_assert(cur_tri != cdt->outer_face);
+ cur_tri->visit_index = visit;
+ /* Is p in or on current triangle? */
+ a = cur_se->vert->co;
+ b = cur_se->next->vert->co;
+ c = cur_se->next->next->vert->co;
+ if (CCW_test(a, b, p) >= 0 && CCW_test(b, c, p) >= 0 && CCW_test(c, a, p) >= 0) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr, "p in current triangle\n");
+ }
+#endif
+ done = locate_point_final(p, cur_se, false, epsilon, &lr);
+ BLI_assert(done == true);
+ break;
+ }
+ bool found_next = false;
+ next_se = cur_se;
+ do {
+ a = next_se->vert->co;
+ b = next_se->next->vert->co;
+ c = next_se->next->next->vert->co;
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ dump_se(next_se, "search edge");
+ fprintf(stderr, "tri centroid=(%.2f,%.2f)\n", F2(cur_tri->centroid));
+ validate_face_centroid(next_se);
+ }
+#endif
+ next_se_sym = sym(next_se);
+ if (CCW_test(a, b, p) <= 0 && next_se->face != cdt->outer_face) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr, "CCW_test(a, b, p) <= 0\n");
+ }
+#endif
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ dump_se(next_se_sym, "next_se_sym");
+ fprintf(stderr, "next_se_sym face visit=%d\n", next_se_sym->face->visit_index);
+ }
+#endif
+ if (next_se_sym->face->visit_index != visit) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "found edge to cross\n");
+ }
+#endif
+ found_next = true;
+ cur_se = next_se_sym;
+ break;
+ }
+ }
+ next_se = next_se->next;
+ } while (next_se != cur_se);
+ if (!found_next) {
+ done = locate_point_final(p, cur_se, true, epsilon, &lr);
+ BLI_assert(done = true);
+ done = true;
+ }
+ if (++loop_count > 1000000) {
+ fprintf(stderr, "infinite search loop?\n");
+ done = locate_point_final(p, cur_se, true, epsilon, &lr);
+ }
+ }
+
+ return lr;
+}
+
+/** return true if circumcircle(v1, v2, v3) does not contain p. */
+static bool delaunay_check(CDTVert *v1, CDTVert *v2, CDTVert *v3, CDTVert *p, const double epsilon)
+{
+ double a, b, c, d, z1, z2, z3;
+ const double *p1, *p2, *p3;
+ double cen[2], r, len_pc;
+ /* To do epislon test, need center and radius of circumcircle. */
+ p1 = v1->co;
+ p2 = v2->co;
+ p3 = v3->co;
+ z1 = dot_v2v2_db(p1, p1);
+ z2 = dot_v2v2_db(p2, p2);
+ z3 = dot_v2v2_db(p3, p3);
+ a = p1[0] * (p2[1] - p3[1]) - p1[1] * (p2[0] - p3[0]) + p2[0] * p3[1] - p3[0] * p2[1];
+ b = z1 * (p3[1] - p2[1]) + z2 * (p1[1] - p3[1]) + z3 * (p2[1] - p1[1]);
+ c = z1 * (p2[0] - p3[0]) + z2 * (p3[0] - p1[0]) + z3 * (p1[0] - p2[0]);
+ d = z1 * (p3[0] * p2[1] - p2[0] * p3[1]) + z2 * (p1[0] * p3[1] - p3[0] * p1[1]) +
+ z3 * (p2[0] * p1[1] - p1[0] * p2[1]);
+ if (a == 0.0) {
+ return true; /* Not really, but this shouldn't happen. */
+ }
+ cen[0] = -b / (2 * a);
+ cen[1] = -c / (2 * a);
+ r = sqrt((b * b + c * c - 4 * a * d) / (4 * a * a));
+ len_pc = len_v2v2_db(p->co, cen);
+ return (len_pc >= (r - epsilon));
+}
+
+/** Use LinkNode linked list as stack of SymEdges, allocating from cdt->listpool. */
+typedef LinkNode *Stack;
+
+static inline void push(Stack *stack, SymEdge *se, CDT_state *cdt)
+{
+ BLI_linklist_prepend_pool(stack, se, cdt->listpool);
+}
+
+static inline SymEdge *pop(Stack *stack, CDT_state *cdt)
+{
+ return (SymEdge *)BLI_linklist_pop_pool(stack, cdt->listpool);
+}
+
+static inline bool is_empty(Stack *stack)
+{
+ return *stack == NULL;
+}
+
+/**
+ * <pre>
+ * /\ /\
+ * /a|\ / \
+ * / | sesym / \
+ * / | \ / \
+ * . b | d . -> . se______
+ * \ se| / \ /
+ * \ |c/ \ /
+ * \ |/ \ /
+ * </pre>
+ */
+static void flip(SymEdge *se, CDT_state *cdt)
+{
+ SymEdge *a, *b, *c, *d;
+ SymEdge *sesym, *asym, *bsym, *csym, *dsym;
+ CDTFace *t1, *t2;
+ CDTVert *v1, *v2;
+#ifdef DEBUG_CDT
+ const int dbglevel = 0;
+#endif
+
+ sesym = sym(se);
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "flip\n");
+ dump_se(se, "se");
+ dump_se(sesym, "sesym");
+ }
+#endif
+ a = se->next;
+ b = a->next;
+ c = sesym->next;
+ d = c->next;
+ asym = sym(a);
+ bsym = sym(b);
+ csym = sym(c);
+ dsym = sym(d);
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ dump_se(a, "a");
+ dump_se(b, "b");
+ dump_se(c, "c");
+ dump_se(d, "d");
+ }
+#endif
+ v1 = se->vert;
+ v2 = sesym->vert;
+ t1 = a->face;
+ t2 = c->face;
+
+ se->vert = b->vert;
+ sesym->vert = d->vert;
+
+ a->next = se;
+ se->next = d;
+ d->next = a;
+
+ sesym->next = b;
+ b->next = c;
+ c->next = sesym;
+
+ a->rot = dsym;
+ b->rot = se;
+ se->rot = asym;
+
+ c->rot = bsym;
+ d->rot = sesym;
+ sesym->rot = csym;
+
+ a->face = se->face = d->face = t1;
+ sesym->face = b->face = c->face = t2;
+
+ if (v1->symedge == se) {
+ v1->symedge = c;
+ }
+ if (v2->symedge == sesym) {
+ v2->symedge = a;
+ }
+
+ calc_face_centroid(a);
+ calc_face_centroid(sesym);
+
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "after flip\n");
+ dump_se_cycle(a, "a cycle", 5);
+ dump_se_cycle(sesym, "sesym cycle", 5);
+ }
+#endif
+ if (cdt) {
+ /* Pass. */
+ }
+}
+
+static void flip_edges(CDTVert *v, Stack *stack, CDT_state *cdt)
+{
+ SymEdge *se, *sesym;
+ CDTVert *a, *b, *c, *d;
+ SymEdge *tri_without_p;
+ bool is_delaunay;
+ const double epsilon = cdt->epsilon;
+ int count = 0;
+#ifdef DEBUG_CDT
+ const int dbglevel = 0;
+ if (dbglevel > 0) {
+ fprintf(stderr, "flip_edges, v=(%.2f,%.2f)\n", F2(v->co));
+ }
+#endif
+ while (!is_empty(stack)) {
+ if (++count > 10000) {
+ fprintf(stderr, "infinite flip loop?\n");
+ return;
+ }
+ se = pop(stack, cdt);
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ dump_se(se, "flip_edges popped");
+ }
+#endif
+ if (!is_constrained_edge(se->edge)) {
+ /* Edge is not constrained; is it Delaunay? */
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ dump_se_cycle(se, "unconstrained edge", 5);
+ }
+ else if (dbglevel > 0) {
+ fprintf(stderr, "unconstrained edge\n");
+ }
+#endif
+ a = se->vert;
+ b = se->next->vert;
+ c = se->next->next->vert;
+ sesym = sym(se);
+ d = sesym->next->next->vert;
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr, "a=(%.2f,%.2f) b=(%.2f,%.2f)\n", F2(a->co), F2(b->co));
+ fprintf(stderr, "c=(%.2f,%.2f) d=(%.2f,%.2f)\n", F2(c->co), F2(d->co));
+ }
+#endif
+ if (v == c) {
+ tri_without_p = sesym;
+ is_delaunay = delaunay_check(a, b, c, d, epsilon);
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr, "v==c, delaunay(a,b,c,d)=%d\n", is_delaunay);
+ }
+#endif
+ }
+ else {
+ tri_without_p = se;
+ BLI_assert(d == v);
+ is_delaunay = delaunay_check(b, a, d, c, epsilon);
+#ifdef DEBUG_CDT
+ if (dbglevel > 1) {
+ fprintf(stderr, "v!=c, delaunay(b,a,d,c)=%d\n", is_delaunay);
+ }
+#endif
+ }
+ if (!is_delaunay) {
+ /* Push two edges of tri without p that aren't se. */
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ fprintf(stderr, "maybe pushing more edges\n");
+ }
+#endif
+ if (!is_border_edge(tri_without_p->next->edge, cdt)) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ dump_se(tri_without_p->next, "push1");
+ }
+#endif
+ push(stack, tri_without_p->next, cdt);
+ }
+ if (!is_border_edge(tri_without_p->next->next->edge, cdt)) {
+#ifdef DEBUG_CDT
+ if (dbglevel > 0) {
+ dump_se(tri_without_p->next->next, "\npush2");
+ }
+#endif
+ push(stack, tri_without_p->next->next, cdt);
+ }
+ flip(se, cdt);
+ }
+ }
+ }
+}
+
+/**
+ * Splits e at lambda and returns a #SymEdge with new vert as its vert.
+ * The two opposite triangle vertices to e are connect to new point.
+ * <pre>
+ * /\ /\
+ * /f|\ / |\
+ * / |j\ / | \
+ * / | i\ / k| \
+ * . | . -> . l_ p m_.
+ * \g | / \ | /
+ * \ |h/ \ | /
+ * \e|/ \ e|/
+ *
+ * t1 = {e, f, g}; t2 = {h, i, j};
+ * t1' = {e, l.sym, g}; t2' = {h, m.sym, e'.sym}
+ * t3 = {k, f, l}; t4 = {m, i, j}
+ * </pre>
+ */
+static CDTVert *insert_point_in_edge(CDT_state *cdt, SymEdge *e, double lambda)
+{
+ SymEdge *f, *g, *h, *i, *j, *k;
+ CDTEdge *ke;
+ CDTVert *p;
+ Stack stack;
+ /* Split e at lambda. */
+
+ f = e->next;
+ g = f->next;
+ BLI_assert(g->next == e);
+ j = sym(e);
+ h = j->next;
+ i = h->next;
+ BLI_assert(i->next == j);
+
+ ke = split_edge(cdt, e, lambda);
+ k = &ke->symedges[0];
+ p = k->vert;
+
+ add_diagonal(cdt, g, k);
+ add_diagonal(cdt, sym(e), i);
+
+ stack = NULL;
+ if (!is_border_edge(f->edge, cdt)) {
+ push(&stack, f, cdt);
+ }
+ if (!is_border_edge(g->edge, cdt)) {
+ push(&stack, g, cdt);
+ }
+ if (!is_border_edge(h->edge, cdt)) {
+ push(&stack, h, cdt);
+ }
+ if (!is_border_edge(i->edge, cdt)) {
+ push(&stack, i, cdt);
+ }
+ flip_edges(k->vert, &stack, cdt);
+ return p;
+}
+
+/**
+ * Inserts p inside e's triangle and connects the three cornders
+ * of the triangle to the new point. Returns a SymEdge that has
+ * new point as its point.
+ * <pre>
+ * * *
+ * *g * * .j*
+ * * * * . *
+ * * p * -> * 1. p . 3*
+ * * * * . . *
+ * * e f* * . h 2 i . *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * </pre>
+ */
+static CDTVert *insert_point_in_face(CDT_state *cdt, SymEdge *e, const double p[2])
+{
+ SymEdge *f, *g, *h, *i, *j;
+ SymEdge *esym, *fsym, *gsym, *hsym, *isym, *jsym;
+ CDTVert *v;
+ CDTEdge *he, *ie, *je;
+ CDTFace *t1, *t2, *t3;
+ Stack stack;
+
+ f = e->next;
+ g = f->next;
+ esym = sym(e);
+ fsym = sym(f);
+ gsym = sym(g);
+ t1 = e->face;
+ t2 = add_cdtface(cdt);
+ t3 = add_cdtface(cdt);
+
+ v = add_cdtvert(cdt, p[0], p[1]);
+ he = add_cdtedge(cdt, e->vert, v, t1, t2);
+ h = &he->symedges[0];
+ hsym = &he->symedges[1];
+ ie = add_cdtedge(cdt, f->vert, v, t2, t3);
+ i = &ie->symedges[0];
+ isym = &ie->symedges[1];
+ je = add_cdtedge(cdt, g->vert, v, t3, t1);
+ j = &je->symedges[0];
+ jsym = &je->symedges[1];
+
+ e->next = i;
+ i->next = hsym;
+ hsym->next = e;
+ e->face = t2;
+
+ f->next = j;
+ j->next = isym;
+ isym->next = f;
+ f->face = t3;
+
+ g->next = h;
+ h->next = jsym;
+ jsym->next = g;
+ g->face = t1;
+
+ e->rot = h;
+ i->rot = esym;
+ hsym->rot = isym;
+
+ f->rot = i;
+ j->rot = fsym;
+ isym->rot = jsym;
+
+ g->rot = j;
+ h->rot = gsym;
+ jsym->rot = hsym;
+
+ calc_face_centroid(e);
+ calc_face_centroid(f);
+ calc_face_centroid(g);
+
+ stack = NULL;
+ if (!is_border_edge(e->edge, cdt)) {
+ push(&stack, e, cdt);
+ }
+ if (!is_border_edge(f->edge, cdt)) {
+ push(&stack, f, cdt);
+ }
+ if (!is_border_edge(g->edge, cdt)) {
+ push(&stack, g, cdt);
+ }
+ flip_edges(v, &stack, cdt);
+
+ return v;
+}
+
+/**
+ * Re-triangulates, assuring constrained delaunay condition,
+ * the pseudo-polygon that cycles from se.
+ * "pseudo" because a vertex may be repeated.
+ * See Anglada paper, "An Improved incremental algorithm
+ * for constructing restricted Delaunay triangulations".
+ */
+static void re_delaunay_triangulate(CDT_state *cdt, SymEdge *se)
+{
+ SymEdge *ss, *first, *cse;
+ CDTVert *a, *b, *c, *v;
+ CDTEdge *ebc, *eca;
+ const double epsilon = cdt->epsilon;
+ int count;
+#ifdef DEBUG_CDT
+ SymEdge *last;
+ const int dbg_level = 0;
+
+ if (dbg_level > 0) {
+ fprintf(stderr, "retriangulate");
+ dump_se_cycle(se, "poly ", 1000);
+ }
+#endif
+ /* 'se' is a diagonal just added, and it is base of area to retriangulate (face on its left) */
+ count = 1;
+ for (ss = se->next; ss != se; ss = ss->next) {
+ count++;
+ }
+ if (count <= 3) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "nothing to do\n");
+ }
+#endif
+ return;
+ }
+ /* First and last are the SymEdges whose verts are first and last off of base,
+ * continuing from 'se'. */
+ first = se->next->next;
+ /* We want to make a triangle with 'se' as base and some other c as 3rd vertex. */
+ a = se->vert;
+ b = se->next->vert;
+ c = first->vert;
+ cse = first;
+#ifdef DEBUG_CDT
+ last = prev(se);
+ if (dbg_level > 1) {
+ dump_se(first, "first");
+ dump_se(last, "last");
+ dump_v(a, "a");
+ dump_v(b, "b");
+ dump_v(c, "c");
+ }
+#endif
+ for (ss = first->next; ss != se; ss = ss->next) {
+ v = ss->vert;
+ if (!delaunay_check(a, b, c, v, epsilon)) {
+ c = v;
+ cse = ss;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ dump_v(c, "new c ");
+ }
+#endif
+ }
+ }
+ /* Add diagonals necessary to make abc a triangle. */
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "make triangle abc exist where\n");
+ dump_v(a, " a");
+ dump_v(b, " b");
+ dump_v(c, " c");
+ }
+#endif
+ ebc = NULL;
+ eca = NULL;
+ if (!exists_edge(b, c)) {
+ ebc = add_diagonal(cdt, se->next, cse);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "added edge ebc\n");
+ dump_se(&ebc->symedges[0], " ebc");
+ }
+#endif
+ }
+ if (!exists_edge(c, a)) {
+ eca = add_diagonal(cdt, cse, se);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "added edge eca\n");
+ dump_se(&eca->symedges[0], " eca");
+ }
+#endif
+ }
+ /* Now recurse. */
+ if (ebc) {
+ re_delaunay_triangulate(cdt, &ebc->symedges[1]);
+ }
+ if (eca) {
+ re_delaunay_triangulate(cdt, &eca->symedges[1]);
+ }
+}
+
+/**
+ * Add a constrained point to cdt structure, and return the corresponding CDTVert*.
+ * May not be at exact coords given, because it can be merged with an existing vertex
+ * or moved to an existing edge (which could be a triangulation edge, not just a constraint one)
+ * if the point is within cdt->epsilon of those other elements.
+ *
+ * input_id will be added to the list of input_ids for the returned CDTVert (don't use -1 for id).
+ *
+ * Assumes cdt has been initialized, with min/max bounds that contain coords.
+ * Assumes that #BLI_constrained_delaunay_get_output has not been called yet.
+ */
+static CDTVert *add_point_constraint(CDT_state *cdt, const double coords[2], int input_id)
+{
+ LocateResult lr;
+ CDTVert *v;
+#ifdef DEBUG_CDT
+ const int dbg_level = 0;
+#endif
+
+ BLI_assert(!cdt->output_prepared);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "add point constraint (%.3f,%.3f), id=%d\n", F2(coords), input_id);
+ }
+#endif
+ lr = locate_point(cdt, coords);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, " locate result has loc_kind %u\n", lr.loc_kind);
+ }
+#endif
+ if (lr.loc_kind == OnVert) {
+ v = lr.se->vert;
+ }
+ else if (lr.loc_kind == OnEdge) {
+ v = insert_point_in_edge(cdt, lr.se, lr.edge_lambda);
+ }
+ else {
+ v = insert_point_in_face(cdt, lr.se, coords);
+ }
+ add_to_input_ids(&v->input_ids, input_id, cdt);
+ return v;
+}
+
+/**
+ * Add a constrained edge between v1 and v2 to cdt structure.
+ * This may result in a number of #CDTEdges created, due to intersections
+ * and partial overlaps with existing cdt vertices and edges.
+ * Each created #CDTEdge will have input_id added to its input_ids list.
+ *
+ * If \a r_edges is not NULL, the #CDTEdges generated or found that go from
+ * v1 to v2 are put into that linked list, in order.
+ *
+ * Assumes that #BLI_constrained_delaunay_get_output has not been called yet.
+ */
+static void add_edge_constraint(
+ CDT_state *cdt, CDTVert *v1, CDTVert *v2, int input_id, LinkNode **r_edges)
+{
+ CDTVert *va, *vb, *vc;
+ SymEdge *vse1;
+#ifdef DEBUG_CDT
+ SymEdge *vse2;
+#endif
+ SymEdge *t, *tstart, *tout, *tnext;
+ SymEdge *se;
+ CDTEdge *edge;
+ int ccw1, ccw2, isect;
+ int i, search_count;
+ double lambda;
+ bool done, state_through_vert;
+ LinkNodePair edge_list = {NULL, NULL};
+ typedef struct CrossData {
+ double lambda;
+ CDTVert *vert;
+ SymEdge *in;
+ SymEdge *out;
+ } CrossData;
+ CrossData cdata;
+ CrossData *crossings = NULL;
+ CrossData *cd;
+ BLI_array_staticdeclare(crossings, 128);
+#ifdef DEBUG_CDT
+ const int dbg_level = 0;
+#endif
+
+ /* Find path through structure from v1 to v2 and record how we got there in crossings.
+ * In crossings array, each CrossData is populated as follows:
+ *
+ * If ray from previous node goes through a face, not along an edge:
+ *
+ * _ B
+ * / |\
+ * - - | \
+ * prev........X \
+ * \ d | \C
+ * -- | /
+ * \ a| b/
+ * - - | /
+ * \ A
+ *
+ * lambda = fraction of way along AB where X is.
+ * vert = NULL initially, will later get new node that splits AB
+ * in = a (SymEdge from A->B, whose face the ray goes through)
+ * out = b (SymEdge from A->C, whose face the ray goes through next
+ *
+ * If the ray from the previous node goes directly to an existing vertex, say A
+ * in the previous diagram, maybe along an existing edge like d in that diagram
+ * but if prev had lambda !=0 then there may be no such edge d, then:
+ *
+ * lambda = 0
+ * vert = A
+ * in = a
+ * out = b
+ *
+ * crossings[0] will have in = NULL, and crossings[last] will have out = NULL
+ */
+ if (r_edges) {
+ *r_edges = NULL;
+ }
+ vse1 = v1->symedge;
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ vse2 = v2->symedge;
+ fprintf(stderr, "\ninsert_segment %d\n", input_id);
+ dump_v(v1, " 1");
+ dump_v(v2, " 2");
+ if (dbg_level > 1) {
+ dump_se(vse1, " se1");
+ dump_se(vse2, " se2");
+ }
+ }
+#endif
+ if (v1 == v2) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "segment between same vertices, ignored\n");
+ }
+#endif
+ return;
+ }
+ state_through_vert = true;
+ done = false;
+ t = vse1;
+ search_count = 0;
+ while (!done) {
+ /* Invariant: crossings[0 .. BLI_array_len(crossings)] has crossing info for path up to
+ * but not including the crossing of edge t, which will either be through a vert
+ * (if state_through_vert is true) or through edge t not at either end.
+ * In the latter case, t->face is the face that ray v1--v2 goes through after path-so-far.
+ */
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(
+ stderr, "top of insert_segment main loop, state_through_vert=%d\n", state_through_vert);
+ dump_se_cycle(t, "current t ", 4);
+ }
+#endif
+ if (state_through_vert) {
+ /* Invariant: ray v1--v2 contains t->vert. */
+ cdata.in = (BLI_array_len(crossings) == 0) ? NULL : t;
+ cdata.out = NULL; /* To be filled in if this isn't final. */
+ cdata.lambda = 0.0;
+ cdata.vert = t->vert;
+ BLI_array_append(crossings, cdata);
+ if (t->vert == v2) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "found v2, so done\n");
+ }
+#endif
+ done = true;
+ }
+ else {
+ /* Do ccw scan of triangles around t->vert to find exit triangle for ray v1--v2. */
+ tstart = t;
+ tout = NULL;
+ do {
+ va = t->next->vert;
+ vb = t->next->next->vert;
+ ccw1 = CCW_test(t->vert->co, va->co, v2->co);
+ ccw2 = CCW_test(t->vert->co, vb->co, v2->co);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "non-final through vert case\n");
+ dump_v(va, " va");
+ dump_v(vb, " vb");
+ fprintf(stderr, "ccw1=%d, ccw2=%d\n", ccw1, ccw2);
+ }
+#endif
+ if (ccw1 == 0 && in_line(t->vert->co, va->co, v2->co)) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "ray goes through va\n");
+ }
+#endif
+ state_through_vert = true;
+ tout = t;
+ t = t->next;
+ break;
+ }
+ else if (ccw2 == 0 && in_line(t->vert->co, vb->co, v2->co)) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "ray goes through vb\n");
+ }
+#endif
+ state_through_vert = true;
+ t = t->next->next;
+ tout = sym(t);
+ break;
+ }
+ else if (ccw1 > 0 && ccw2 < 0) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "segment intersects\n");
+ }
+#endif
+ state_through_vert = false;
+ tout = t;
+ t = t->next;
+ break;
+ }
+ t = t->rot;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ dump_se_cycle(t, "next rot tri", 4);
+ }
+#endif
+ } while (t != tstart);
+ BLI_assert(tout != NULL); /* TODO: something sensivle for "this can't happen" */
+ crossings[BLI_array_len(crossings) - 1].out = tout;
+ }
+ }
+ else { /* State is "through edge", not "through vert" */
+ /* Invariant: ray v1--v2 intersects segment t->edge, not at either end.
+ * and t->face is the face we have just passed through. */
+ va = t->vert;
+ vb = t->next->vert;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "through edge case\n");
+ dump_v(va, " va");
+ dump_v(vb, " vb");
+ }
+#endif
+ isect = isect_seg_seg_v2_lambda_mu_db(va->co, vb->co, v1->co, v2->co, &lambda, NULL);
+ /* TODO: something sensible for "this can't happen" */
+ BLI_assert(isect == ISECT_LINE_LINE_CROSS);
+ UNUSED_VARS_NDEBUG(isect);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "intersect point at %f along va--vb\n", lambda);
+ if (dbg_level == 1) {
+ dump_v(va, " va");
+ dump_v(vb, " vb");
+ }
+ }
+#endif
+ tout = sym(t)->next;
+ cdata.in = t;
+ cdata.out = tout;
+ cdata.lambda = lambda;
+ cdata.vert = NULL; /* To be filled in with edge split vertex later. */
+ BLI_array_append(crossings, cdata);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ dump_se_cycle(tout, "next search tri", 4);
+ }
+#endif
+ /* 'tout' is 'symedge' from 'vb' to third vertex, 'vc'. */
+ BLI_assert(tout->vert == va);
+ vc = tout->next->vert;
+ ccw1 = CCW_test(v1->co, v2->co, vc->co);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "now searching with third vertex ");
+ dump_v(vc, "vc");
+ fprintf(stderr, "ccw(v1, v2, vc) = %d\n", ccw1);
+ }
+#endif
+ if (ccw1 == -1) {
+ /* v1--v2 should intersect vb--vc. */
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "v1--v2 intersects vb--vc\n");
+ }
+#endif
+ t = tout->next;
+ state_through_vert = false;
+ }
+ else if (ccw1 == 1) {
+ /* v1--v2 should intersect va--vc. */
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "v1--v2 intersects va--vc\n");
+ }
+#endif
+ t = tout;
+ state_through_vert = false;
+ }
+ else {
+ /* ccw1 == 0. */
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "ccw==0 case, so going through or to vc\n");
+ }
+#endif
+ t = tout->next;
+ state_through_vert = true;
+ }
+ }
+ if (++search_count > 10000) {
+ fprintf(stderr, "infinite loop? bailing out\n");
+ BLI_assert(0); /* Catch these while developing. */
+ break;
+ }
+ }
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "Crossing info gathered:\n");
+ for (i = 0; i < BLI_array_len(crossings); i++) {
+ cd = &crossings[i];
+ fprintf(stderr, "%d:\n", i);
+ if (cd->vert != NULL) {
+ dump_v(cd->vert, " vert: ");
+ }
+ else {
+ fprintf(stderr, " lambda=%f along in\n", cd->lambda);
+ }
+ if (cd->in) {
+ dump_se(cd->in, " in: ");
+ }
+ if (cd->out) {
+ dump_se(cd->out, " out: ");
+ }
+ }
+ }
+#endif
+
+ if (BLI_array_len(crossings) == 2) {
+ /* For speed, handle special case of segment must have already been there. */
+ se = crossings[1].in;
+ if (se->next->vert != v1) {
+ se = prev(se);
+ }
+ BLI_assert(se->vert == v1 || se->next->vert == v1);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "segment already there: ");
+ dump_se(se, "");
+ }
+#endif
+ add_to_input_ids(&se->edge->input_ids, input_id, cdt);
+ if (r_edges != NULL) {
+ BLI_linklist_append_pool(&edge_list, se->edge, cdt->listpool);
+ }
+ }
+ else {
+ /* Insert all intersection points. */
+ for (i = 0; i < BLI_array_len(crossings); i++) {
+ cd = &crossings[i];
+ if (cd->lambda != 0.0 && is_constrained_edge(cd->in->edge)) {
+ edge = split_edge(cdt, cd->in, cd->lambda);
+ cd->vert = edge->symedges[0].vert;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "insert vert for crossing %d: ", i);
+ dump_v(cd->vert, "inserted");
+ }
+#endif
+ }
+ }
+
+ /* Remove any crossed, non-intersected edges. */
+ for (i = 0; i < BLI_array_len(crossings); i++) {
+ cd = &crossings[i];
+ if (cd->lambda != 0.0 && !is_constrained_edge(cd->in->edge)) {
+ delete_edge(cdt, cd->in);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "delete edge for crossing %d\n", i);
+ }
+#endif
+ }
+ }
+
+ /* Insert segments for v1->v2. */
+ tstart = crossings[0].out;
+ for (i = 1; i < BLI_array_len(crossings); i++) {
+ cd = &crossings[i];
+ t = tnext = NULL;
+ if (cd->lambda != 0.0) {
+ if (is_constrained_edge(cd->in->edge)) {
+ t = cd->vert->symedge;
+ tnext = sym(t)->next;
+ }
+ }
+ else if (cd->lambda == 0.0) {
+ t = cd->in;
+ tnext = cd->out;
+ }
+ if (t) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "insert diagonal between\n");
+ dump_se(tstart, " ");
+ dump_se(t, " ");
+ dump_se_cycle(tstart, "tstart", 100);
+ dump_se_cycle(t, "t", 100);
+ }
+#endif
+ if (tstart->next->vert == t->vert) {
+ edge = tstart->edge;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "already there\n");
+ }
+#endif
+ }
+ else {
+ edge = add_diagonal(cdt, tstart, t);
+ }
+ add_to_input_ids(&edge->input_ids, input_id, cdt);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "added\n");
+ }
+#endif
+ if (r_edges != NULL) {
+ BLI_linklist_append_pool(&edge_list, edge, cdt->listpool);
+ }
+ /* Now retriangulate upper and lower gaps. */
+ re_delaunay_triangulate(cdt, &edge->symedges[0]);
+ re_delaunay_triangulate(cdt, &edge->symedges[1]);
+ }
+ if (i < BLI_array_len(crossings) - 1) {
+ if (tnext != NULL) {
+ tstart = tnext;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "now tstart = ");
+ dump_se(tstart, "");
+ }
+#endif
+ }
+ }
+ }
+ }
+ if (r_edges) {
+ *r_edges = edge_list.list;
+ }
+ BLI_array_free(crossings);
+}
+
+/**
+ * Add face_id to the input_ids lists of all #CDTFace's on the interior of the input face with that
+ * id. face_symedge is on edge of the boundary of the input face, with assumption that interior is
+ * on the left of that SymEdge.
+ *
+ * The algorithm is: starting from the #CDTFace for face_symedge, add the face_id and then
+ * process all adjacent faces where the adjacency isn't across an edge that was a constraint added
+ * for the boundary of the input face.
+ * fedge_start..fedge_end is the inclusive range of edge input ids that are for the given face.
+ *
+ * Note: if the input face is not CCW oriented, we'll be labeling the outside, not the inside.
+ * Note 2: if the boundary has self-crossings, this method will arbitrarily pick one of the
+ * contiguous set of faces enclosed by parts of the boundary, leaving the other such untagged. This
+ * may be a feature instead of a bug if the first contiguous section is most of the face and the
+ * others are tiny self-crossing triangles at some parts of the boundary. On the other hand, if
+ * decide we want to handle these in full generality, then will need a more complicated algorithm
+ * (using "inside" tests and a parity rule) to decide on the interior.
+ */
+static void add_face_ids(
+ CDT_state *cdt, SymEdge *face_symedge, int face_id, int fedge_start, int fedge_end)
+{
+ Stack stack;
+ SymEdge *se, *se_start, *se_sym;
+ CDTFace *face, *face_other;
+ int visit;
+
+ /* Can't loop forever since eventually would visit every face. */
+ cdt->visit_count++;
+ visit = cdt->visit_count;
+ stack = NULL;
+ push(&stack, face_symedge, cdt);
+ while (!is_empty(&stack)) {
+ se = pop(&stack, cdt);
+ face = se->face;
+ if (face->visit_index == visit) {
+ continue;
+ }
+ face->visit_index = visit;
+ add_to_input_ids(&face->input_ids, face_id, cdt);
+ se_start = se;
+ for (se = se->next; se != se_start; se = se->next) {
+ if (!id_range_in_list(se->edge->input_ids, fedge_start, fedge_end)) {
+ se_sym = sym(se);
+ face_other = se_sym->face;
+ if (face_other->visit_index != visit) {
+ push(&stack, se_sym, cdt);
+ }
+ }
+ }
+ }
+}
+
+/* Delete_edge but try not to mess up outer face.
+ * Also faces have symedges now, so make sure not
+ * to mess those up either. */
+static void dissolve_symedge(CDT_state *cdt, SymEdge *se)
+{
+ SymEdge *symse = sym(se);
+ if (symse->face == cdt->outer_face) {
+ se = sym(se);
+ symse = sym(se);
+ }
+ if (cdt->outer_face->symedge == se || cdt->outer_face->symedge == symse) {
+ /* Advancing by 2 to get past possible 'sym(se)'. */
+ if (se->next->next == se) {
+ cdt->outer_face->symedge = NULL;
+ }
+ else {
+ cdt->outer_face->symedge = se->next->next;
+ }
+ }
+ else {
+ if (se->face->symedge == se) {
+ se->face->symedge = se->next;
+ }
+ if (symse->face->symedge == se) {
+ symse->face->symedge = symse->next;
+ }
+ }
+ delete_edge(cdt, se);
+}
+
+static void remove_non_constraint_edges(CDT_state *cdt, const bool valid_bmesh)
+{
+ LinkNode *ln;
+ CDTEdge *e;
+ SymEdge *se, *se2;
+ CDTFace *fleft, *fright;
+ bool dissolve;
+
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (CDTEdge *)ln->link;
+ dissolve = !is_deleted_edge(e) && !is_constrained_edge(e);
+ if (dissolve) {
+ se = &e->symedges[0];
+ if (valid_bmesh) {
+ fleft = se->face;
+ fright = sym(se)->face;
+ if (fleft != cdt->outer_face && fright != cdt->outer_face &&
+ (fleft->input_ids != NULL || fright->input_ids != NULL)) {
+ /* Is there another symedge with same left and right faces? */
+ for (se2 = se->next; dissolve && se2 != se; se2 = se2->next) {
+ if (sym(se2)->face == fright) {
+ dissolve = false;
+ }
+ }
+ }
+ }
+ if (dissolve) {
+ dissolve_symedge(cdt, se);
+ }
+ }
+ }
+}
+
+static void remove_outer_edges(CDT_state *cdt, const bool remove_until_constraints)
+{
+ LinkNode *fstack = NULL;
+ SymEdge *se, *se_start;
+ CDTFace *f, *fsym;
+ int visit = ++cdt->visit_count;
+#ifdef DEBUG_CDT
+ int dbg_level = 0;
+
+ if (dbg_level > 0) {
+ fprintf(stderr, "remove_outer_edges, until_constraints=%d\n", remove_until_constraints);
+ }
+#endif
+
+ cdt->outer_face->visit_index = visit;
+
+ /* Find an f, not outer face, but touching outer face. */
+ f = NULL;
+ se_start = se = cdt->vert_array[0]->symedge;
+ do {
+ if (se->face != cdt->outer_face) {
+ f = se->face;
+ break;
+ }
+ se = se->rot;
+ } while (se != se_start);
+ BLI_assert(f != NULL && f->symedge != NULL);
+ if (f == NULL) {
+ return;
+ }
+ BLI_linklist_prepend_pool(&fstack, f, cdt->listpool);
+ while (fstack != NULL) {
+ LinkNode *to_dissolve = NULL;
+ bool dissolvable;
+ f = (CDTFace *)BLI_linklist_pop_pool(&fstack, cdt->listpool);
+ if (f->visit_index == visit) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "skipping f=%p, already visited\n", f);
+ }
+#endif
+ continue;
+ }
+ BLI_assert(f != cdt->outer_face);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "top of loop, f=%p\n", f);
+ dump_se_cycle(f->symedge, "visit", 10000);
+ dump_cdt(cdt, "cdt at top of loop");
+ }
+#endif
+ f->visit_index = visit;
+ se_start = se = f->symedge;
+ do {
+ if (remove_until_constraints) {
+ dissolvable = !is_constrained_edge(se->edge);
+ }
+ else {
+ dissolvable = edge_touches_frame(se->edge);
+ }
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ dump_se(se, "edge in f");
+ fprintf(stderr, " dissolvable=%d\n", dissolvable);
+ }
+#endif
+ if (dissolvable) {
+ fsym = sym(se)->face;
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ dump_se_cycle(fsym->symedge, "fsym", 10000);
+ fprintf(stderr, " visited=%d\n", fsym->visit_index == visit);
+ }
+#endif
+ if (fsym->visit_index != visit) {
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ fprintf(stderr, "pushing face %p\n", fsym);
+ dump_se_cycle(fsym->symedge, "pushed", 10000);
+ }
+#endif
+ BLI_linklist_prepend_pool(&fstack, fsym, cdt->listpool);
+ }
+ else {
+ BLI_linklist_prepend_pool(&to_dissolve, se, cdt->listpool);
+ }
+ }
+ se = se->next;
+ } while (se != se_start);
+ while (to_dissolve != NULL) {
+ se = (SymEdge *)BLI_linklist_pop_pool(&to_dissolve, cdt->listpool);
+ if (se->next != NULL) {
+ dissolve_symedge(cdt, se);
+ }
+ }
+ }
+}
+
+/**
+ * Remove edges and merge faces to get desired output, as per options.
+ * \note the cdt cannot be further changed after this.
+ */
+static void prepare_cdt_for_output(CDT_state *cdt, const CDT_output_type output_type)
+{
+ CDTFace *f;
+ CDTEdge *e;
+ LinkNode *ln;
+
+ cdt->output_prepared = true;
+
+ /* Make sure all non-deleted faces have a symedge. */
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (CDTEdge *)ln->link;
+ if (e->symedges[0].face->symedge == NULL) {
+ e->symedges[0].face->symedge = &e->symedges[0];
+ }
+ if (e->symedges[1].face->symedge == NULL) {
+ e->symedges[1].face->symedge = &e->symedges[1];
+ }
+ }
+#ifdef DEBUG_CDT
+ /* All non-deleted faces should have a symedge now. */
+ for (ln = cdt->faces; ln; ln = ln->next) {
+ f = (CDTFace *)ln->link;
+ if (!f->deleted) {
+ BLI_assert(f->symedge != NULL);
+ }
+ }
+#else
+ UNUSED_VARS(f);
+#endif
+
+ if (output_type == CDT_CONSTRAINTS || output_type == CDT_CONSTRAINTS_VALID_BMESH) {
+ remove_non_constraint_edges(cdt, output_type == CDT_CONSTRAINTS_VALID_BMESH);
+ }
+ else if (output_type == CDT_FULL || output_type == CDT_INSIDE) {
+ remove_outer_edges(cdt, output_type == CDT_INSIDE);
+ }
+}
+
+#define NUM_BOUND_VERTS 4
+#define VERT_OUT_INDEX(v) ((v)->index - NUM_BOUND_VERTS)
+
+static CDT_result *cdt_get_output(CDT_state *cdt, const CDT_output_type output_type)
+{
+ int i, j, nv, ne, nf, faces_len_total;
+ int orig_map_size, orig_map_index;
+ CDT_result *result;
+ LinkNode *lne, *lnf, *ln;
+ SymEdge *se, *se_start;
+ CDTEdge *e;
+ CDTFace *f;
+
+ prepare_cdt_for_output(cdt, output_type);
+
+ result = (CDT_result *)MEM_callocN(sizeof(*result), __func__);
+
+ /* All verts except first NUM_BOUND_VERTS will be output. */
+ nv = cdt->vert_array_len - NUM_BOUND_VERTS;
+ if (nv <= 0) {
+ return result;
+ }
+
+ result->verts_len = nv;
+ result->vert_coords = MEM_malloc_arrayN(nv, sizeof(result->vert_coords[0]), __func__);
+
+ /* Make the vertex "orig" map arrays, mapping output verts to lists of input ones. */
+ orig_map_size = 0;
+ for (i = 0; i < nv; i++) {
+ orig_map_size += BLI_linklist_count(cdt->vert_array[i + 4]->input_ids);
+ }
+ result->verts_orig_len_table = MEM_malloc_arrayN(nv, sizeof(int), __func__);
+ result->verts_orig_start_table = MEM_malloc_arrayN(nv, sizeof(int), __func__);
+ result->verts_orig = MEM_malloc_arrayN(orig_map_size, sizeof(int), __func__);
+
+ orig_map_index = 0;
+ for (i = 0; i < nv; i++) {
+ j = i + NUM_BOUND_VERTS;
+ result->vert_coords[i][0] = (float)cdt->vert_array[j]->co[0];
+ result->vert_coords[i][1] = (float)cdt->vert_array[j]->co[1];
+ result->verts_orig_start_table[i] = orig_map_index;
+ for (ln = cdt->vert_array[j]->input_ids; ln; ln = ln->next) {
+ result->verts_orig[orig_map_index++] = POINTER_AS_INT(ln->link);
+ }
+ result->verts_orig_len_table[i] = orig_map_index - result->verts_orig_start_table[i];
+ }
+
+ ne = 0;
+ orig_map_size = 0;
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (CDTEdge *)ln->link;
+ if (!is_deleted_edge(e)) {
+ ne++;
+ if (e->input_ids) {
+ orig_map_size += BLI_linklist_count(e->input_ids);
+ }
+ }
+ }
+ if (ne != 0) {
+ result->edges_len = ne;
+ result->face_edge_offset = cdt->face_edge_offset;
+ result->edges = MEM_malloc_arrayN(ne, sizeof(result->edges[0]), __func__);
+ result->edges_orig_len_table = MEM_malloc_arrayN(ne, sizeof(int), __func__);
+ result->edges_orig_start_table = MEM_malloc_arrayN(ne, sizeof(int), __func__);
+ if (orig_map_size > 0) {
+ result->edges_orig = MEM_malloc_arrayN(orig_map_size, sizeof(int), __func__);
+ }
+ orig_map_index = 0;
+ i = 0;
+ for (lne = cdt->edges; lne; lne = lne->next) {
+ e = (CDTEdge *)lne->link;
+ if (!is_deleted_edge(e)) {
+ result->edges[i][0] = VERT_OUT_INDEX(e->symedges[0].vert);
+ result->edges[i][1] = VERT_OUT_INDEX(e->symedges[1].vert);
+ result->edges_orig_start_table[i] = orig_map_index;
+ for (ln = e->input_ids; ln; ln = ln->next) {
+ result->edges_orig[orig_map_index++] = POINTER_AS_INT(ln->link);
+ }
+ result->edges_orig_len_table[i] = orig_map_index - result->edges_orig_start_table[i];
+ i++;
+ }
+ }
+ }
+
+ nf = 0;
+ faces_len_total = 0;
+ orig_map_size = 0;
+ for (ln = cdt->faces; ln; ln = ln->next) {
+ f = (CDTFace *)ln->link;
+ if (!f->deleted && f != cdt->outer_face) {
+ nf++;
+ se = se_start = f->symedge;
+ BLI_assert(se != NULL);
+ do {
+ faces_len_total++;
+ se = se->next;
+ } while (se != se_start);
+ if (f->input_ids) {
+ orig_map_size += BLI_linklist_count(f->input_ids);
+ }
+ }
+ }
+
+ if (nf != 0) {
+ result->faces_len = nf;
+ result->faces_len_table = MEM_malloc_arrayN(nf, sizeof(int), __func__);
+ result->faces_start_table = MEM_malloc_arrayN(nf, sizeof(int), __func__);
+ result->faces = MEM_malloc_arrayN(faces_len_total, sizeof(int), __func__);
+ result->faces_orig_len_table = MEM_malloc_arrayN(nf, sizeof(int), __func__);
+ result->faces_orig_start_table = MEM_malloc_arrayN(nf, sizeof(int), __func__);
+ if (orig_map_size > 0) {
+ result->faces_orig = MEM_malloc_arrayN(orig_map_size, sizeof(int), __func__);
+ }
+ orig_map_index = 0;
+ i = 0;
+ j = 0;
+ for (lnf = cdt->faces; lnf; lnf = lnf->next) {
+ f = (CDTFace *)lnf->link;
+ if (!f->deleted && f != cdt->outer_face) {
+ result->faces_start_table[i] = j;
+ se = se_start = f->symedge;
+ do {
+ result->faces[j++] = VERT_OUT_INDEX(se->vert);
+ se = se->next;
+ } while (se != se_start);
+ result->faces_len_table[i] = j - result->faces_start_table[i];
+ result->faces_orig_start_table[i] = orig_map_index;
+ for (ln = f->input_ids; ln; ln = ln->next) {
+ result->faces_orig[orig_map_index++] = POINTER_AS_INT(ln->link);
+ }
+ result->faces_orig_len_table[i] = orig_map_index - result->faces_orig_start_table[i];
+ i++;
+ }
+ }
+ }
+ return result;
+}
+
+CDT_result *BLI_delaunay_2d_cdt_calc(const CDT_input *input, const CDT_output_type output_type)
+{
+ int nv = input->verts_len;
+ int ne = input->edges_len;
+ int nf = input->faces_len;
+ double epsilon = (double)input->epsilon;
+ int i, f, v1, v2;
+ int fedge_start, fedge_end;
+ double minx, maxx, miny, maxy;
+ float *xy;
+ double vert_co[2];
+ CDT_state *cdt;
+ CDT_result *result;
+ CDTVert **verts;
+ LinkNode *edge_list;
+ CDTEdge *face_edge;
+ SymEdge *face_symedge;
+#ifdef DEBUG_CDT
+ int dbg_level = 1;
+#endif
+
+ if ((nv > 0 && input->vert_coords == NULL) || (ne > 0 && input->edges == NULL) ||
+ (nf > 0 && (input->faces == NULL || input->faces_start_table == NULL ||
+ input->faces_len_table == NULL))) {
+#ifdef DEBUG_CDT
+ fprintf(stderr, "invalid input: unexpected NULL array(s)\n");
+#endif
+ return NULL;
+ }
+
+ if (nv > 0) {
+ minx = miny = DBL_MAX;
+ maxx = maxy = -DBL_MAX;
+ for (i = 0; i < nv; i++) {
+ xy = input->vert_coords[i];
+ if (xy[0] < minx) {
+ minx = xy[0];
+ }
+ if (xy[0] > maxx) {
+ maxx = xy[0];
+ }
+ if (xy[1] < miny) {
+ miny = xy[1];
+ }
+ if (xy[1] > maxy) {
+ maxy = xy[1];
+ }
+ }
+ verts = (CDTVert **)MEM_mallocN(nv * sizeof(CDTVert *), "constrained delaunay");
+ }
+ else {
+ minx = miny = maxx = maxy = 0;
+ verts = NULL;
+ }
+
+ if (epsilon == 0.0) {
+ epsilon = 1e-8;
+ }
+ cdt = cdt_init(minx, maxx, miny, maxy, epsilon);
+ /* TODO: use a random permutation for order of adding the vertices. */
+ for (i = 0; i < nv; i++) {
+ vert_co[0] = (double)input->vert_coords[i][0];
+ vert_co[1] = (double)input->vert_coords[i][1];
+ verts[i] = add_point_constraint(cdt, vert_co, i);
+ }
+ for (i = 0; i < ne; i++) {
+ v1 = input->edges[i][0];
+ v2 = input->edges[i][1];
+ if (v1 < 0 || v1 >= nv || v2 < 0 || v2 >= nv) {
+#ifdef DEBUG_CDT
+ fprintf(stderr, "edge indices not valid: v1=%d, v2=%d, nv=%d\n", v1, v2, nv);
+#endif
+ continue;
+ }
+ add_edge_constraint(cdt, verts[v1], verts[v2], i, NULL);
+ }
+ cdt->face_edge_offset = ne;
+ for (f = 0; f < nf; f++) {
+ int flen = input->faces_len_table[f];
+ int fstart = input->faces_start_table[f];
+ if (flen <= 2) {
+#ifdef DEBUG_CDT
+ fprintf(stderr, "face %d has length %d; ignored\n", f, flen);
+#endif
+ continue;
+ }
+ for (i = 0; i < flen; i++) {
+ int face_edge_id = cdt->face_edge_offset + fstart + i;
+ v1 = input->faces[fstart + i];
+ v2 = input->faces[fstart + ((i + 1) % flen)];
+ if (v1 < 0 || v1 >= nv || v2 < 0 || v2 >= nv) {
+#ifdef DEBUG_CDT
+ fprintf(stderr, "face indices not valid: f=%d, v1=%d, v2=%d, nv=%d\n", f, v1, v2, nv);
+#endif
+ continue;
+ }
+ add_edge_constraint(cdt, verts[v1], verts[v2], face_edge_id, &edge_list);
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ fprintf(stderr, "edges for edge %d:\n", i);
+ for (LinkNode *ln = edge_list; ln; ln = ln->next) {
+ CDTEdge *cdt_e = (CDTEdge *)ln->link;
+ fprintf(stderr,
+ " (%.2f,%.2f)->(%.2f,%.2f)\n",
+ F2(cdt_e->symedges[0].vert->co),
+ F2(cdt_e->symedges[1].vert->co));
+ }
+ }
+#endif
+ if (i == 0) {
+ face_edge = (CDTEdge *)edge_list->link;
+ face_symedge = &face_edge->symedges[0];
+ if (face_symedge->vert != verts[v1]) {
+ face_symedge = &face_edge->symedges[1];
+ BLI_assert(face_symedge->vert == verts[v1]);
+ }
+ }
+ BLI_linklist_free_pool(edge_list, NULL, cdt->listpool);
+ }
+ fedge_start = cdt->face_edge_offset + fstart;
+ fedge_end = fedge_start + flen - 1;
+ add_face_ids(cdt, face_symedge, f, fedge_start, fedge_end);
+ }
+#ifdef DEBUG_CDT
+ if (dbg_level > 1) {
+ validate_cdt(cdt, true);
+ }
+ if (dbg_level > 1) {
+ cdt_draw(cdt, "before cdt_get_output");
+ }
+#endif
+ result = cdt_get_output(cdt, output_type);
+#ifdef DEBUG_CDT
+ if (dbg_level > 0) {
+ cdt_draw(cdt, "final");
+ }
+#endif
+ if (verts) {
+ MEM_freeN(verts);
+ }
+ cdt_free(cdt);
+ return result;
+}
+
+void BLI_delaunay_2d_cdt_free(CDT_result *result)
+{
+ if (result == NULL) {
+ return;
+ }
+ if (result->vert_coords) {
+ MEM_freeN(result->vert_coords);
+ }
+ if (result->edges) {
+ MEM_freeN(result->edges);
+ }
+ if (result->faces) {
+ MEM_freeN(result->faces);
+ }
+ if (result->faces_start_table) {
+ MEM_freeN(result->faces_start_table);
+ }
+ if (result->faces_len_table) {
+ MEM_freeN(result->faces_len_table);
+ }
+ if (result->verts_orig) {
+ MEM_freeN(result->verts_orig);
+ }
+ if (result->verts_orig_start_table) {
+ MEM_freeN(result->verts_orig_start_table);
+ }
+ if (result->verts_orig_len_table) {
+ MEM_freeN(result->verts_orig_len_table);
+ }
+ if (result->edges_orig) {
+ MEM_freeN(result->edges_orig);
+ }
+ if (result->edges_orig_start_table) {
+ MEM_freeN(result->edges_orig_start_table);
+ }
+ if (result->edges_orig_len_table) {
+ MEM_freeN(result->edges_orig_len_table);
+ }
+ if (result->faces_orig) {
+ MEM_freeN(result->faces_orig);
+ }
+ if (result->faces_orig_start_table) {
+ MEM_freeN(result->faces_orig_start_table);
+ }
+ if (result->faces_orig_len_table) {
+ MEM_freeN(result->faces_orig_len_table);
+ }
+ MEM_freeN(result);
+}
+
+#ifdef DEBUG_CDT
+
+static void dump_se(const SymEdge *se, const char *lab)
+{
+ if (se->next) {
+ fprintf(
+ stderr, "%s((%.2f,%.2f)->(%.2f,%.2f))\n", lab, F2(se->vert->co), F2(se->next->vert->co));
+ }
+ else {
+ fprintf(stderr, "%s((%.2f,%.2f)->NULL)\n", lab, F2(se->vert->co));
+ }
+}
+
+static void dump_v(const CDTVert *v, const char *lab)
+{
+ fprintf(stderr, "%s(%.2f,%.2f)\n", lab, F2(v->co));
+}
+
+static void dump_se_cycle(const SymEdge *se, const char *lab, const int limit)
+{
+ int count = 0;
+ const SymEdge *s = se;
+ fprintf(stderr, "%s:\n", lab);
+ do {
+ dump_se(s, " ");
+ s = s->next;
+ count++;
+ } while (s != se && count < limit);
+ if (count == limit) {
+ fprintf(stderr, " limit hit without cycle!\n");
+ }
+}
+
+static void dump_id_list(const LinkNode *id_list, const char *lab)
+{
+ const LinkNode *ln;
+ if (!id_list) {
+ return;
+ }
+ fprintf(stderr, "%s", lab);
+ for (ln = id_list; ln; ln = ln->next) {
+ fprintf(stderr, "%d%c", POINTER_AS_INT(ln->link), ln->next ? ' ' : '\n');
+ }
+}
+
+# define PL(p) (POINTER_AS_UINT(p) & 0xFFFF)
+static void dump_cdt(const CDT_state *cdt, const char *lab)
+{
+ LinkNode *ln;
+ CDTVert *v;
+ CDTEdge *e;
+ CDTFace *f;
+ SymEdge *se;
+ int i;
+
+ fprintf(stderr, "\nCDT %s\n", lab);
+ fprintf(stderr, "\nVERTS\n");
+ for (i = 0; i < cdt->vert_array_len; i++) {
+ v = cdt->vert_array[i];
+ fprintf(stderr, "%x: (%f,%f) symedge=%x\n", PL(v), F2(v->co), PL(v->symedge));
+ dump_id_list(v->input_ids, " ");
+ }
+ fprintf(stderr, "\nEDGES\n");
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (CDTEdge *)ln->link;
+ if (e->symedges[0].next == NULL) {
+ continue;
+ }
+ fprintf(stderr, "%x:\n", PL(e));
+ for (i = 0; i < 2; i++) {
+ se = &e->symedges[i];
+ fprintf(stderr,
+ " se[%d] @%x: next=%x, rot=%x, vert=%x (%.2f,%.2f), edge=%x, face=%x\n",
+ i,
+ PL(se),
+ PL(se->next),
+ PL(se->rot),
+ PL(se->vert),
+ F2(se->vert->co),
+ PL(se->edge),
+ PL(se->face));
+ }
+ dump_id_list(e->input_ids, " ");
+ }
+ fprintf(stderr, "\nFACES\n");
+ for (ln = cdt->faces; ln; ln = ln->next) {
+ f = (CDTFace *)ln->link;
+ if (f->deleted) {
+ continue;
+ }
+ if (f == cdt->outer_face) {
+ fprintf(stderr, "outer");
+ }
+ else {
+ fprintf(stderr, "%x: centroid (%f,%f)", PL(f), F2(f->centroid));
+ }
+ fprintf(stderr, " symedge=%x\n", PL(f->symedge));
+ dump_id_list(f->input_ids, " ");
+ }
+ fprintf(stderr, "\nOTHER\n");
+ fprintf(
+ stderr, "minx=%f, maxx=%f, miny=%f, maxy=%f\n", cdt->minx, cdt->maxx, cdt->miny, cdt->maxy);
+ fprintf(stderr, "margin=%f\n", cdt->margin);
+}
+# undef PL
+
+/**
+ * Make an html file with svg in it to display the argument cdt.
+ * Mouse-overs will reveal the coordinates of vertices and edges.
+ * Constraint edges are drawn thicker than non-constraint edges.
+ * The first call creates DRAWFILE; subsequent calls append to it.
+ */
+# define DRAWFILE "/tmp/debug_draw.html"
+# define MAX_DRAW_WIDTH 1000
+# define MAX_DRAW_HEIGHT 700
+static void cdt_draw(CDT_state *cdt, const char *lab)
+{
+ static bool append = false;
+ FILE *f = fopen(DRAWFILE, append ? "a" : "w");
+ double draw_margin = (cdt->maxx - cdt->minx + cdt->maxy - cdt->miny + 1) * 0.05;
+ double minx = cdt->minx - draw_margin;
+ double maxx = cdt->maxx + draw_margin;
+ double miny = cdt->miny - draw_margin;
+ double maxy = cdt->maxy + draw_margin;
+ double width = maxx - minx;
+ double height = maxy - miny;
+ double aspect = height / width;
+ int view_width, view_height;
+ double scale;
+ LinkNode *ln;
+ CDTVert *v, *u;
+ CDTEdge *e;
+ int i, strokew;
+
+ view_width = MAX_DRAW_WIDTH;
+ view_height = (int)(view_width * aspect);
+ if (view_height > MAX_DRAW_HEIGHT) {
+ view_height = MAX_DRAW_HEIGHT;
+ view_width = (int)(view_height / aspect);
+ }
+ scale = view_width / width;
+
+# define SX(x) ((x - minx) * scale)
+# define SY(y) ((maxy - y) * scale)
+
+ if (!f) {
+ printf("couldn't open file %s\n", DRAWFILE);
+ return;
+ }
+ fprintf(f, "<div>%s</div>\n<div>\n", lab);
+ fprintf(f,
+ "<svg version=\"1.1\" "
+ "xmlns=\"http://www.w3.org/2000/svg\" "
+ "xmlns:xlink=\"http://www.w3.org/1999/xlink\" "
+ "xml:space=\"preserve\"\n");
+ fprintf(f, "width=\"%d\" height=\"%d\">/n", view_width, view_height);
+
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (CDTEdge *)ln->link;
+ if (is_deleted_edge(e)) {
+ continue;
+ }
+ u = e->symedges[0].vert;
+ v = e->symedges[1].vert;
+ strokew = is_constrained_edge(e) ? 5 : 2;
+ fprintf(f,
+ "<line fill=\"none\" stroke=\"black\" stroke-width=\"%d\" "
+ "x1=\"%.1f\" y1=\"%.1f\" x2=\"%.1f\" y2=\"%.1f\">\n",
+ strokew,
+ SX(u->co[0]),
+ SY(u->co[1]),
+ SX(v->co[0]),
+ SY(v->co[1]));
+ fprintf(
+ f, " <title>(%.3f,%.3f)(%.3f,%.3f)</title>\n", u->co[0], u->co[1], v->co[0], v->co[1]);
+ fprintf(f, "</line>\n");
+ }
+ i = cdt->output_prepared ? NUM_BOUND_VERTS : 0;
+ for (; i < cdt->vert_array_len; i++) {
+ v = cdt->vert_array[i];
+ fprintf(f,
+ "<circle fill=\"black\" cx=\"%.1f\" cy=\"%.1f\" r=\"5\">\n",
+ SX(v->co[0]),
+ SY(v->co[1]));
+ fprintf(f, " <title>(%.3f,%.3f)</title>\n", v->co[0], v->co[1]);
+ fprintf(f, "</circle>\n");
+ }
+
+ fprintf(f, "</svg>\n</div>\n");
+ fclose(f);
+ append = true;
+# undef SX
+# undef SY
+}
+
+# ifndef NDEBUG /* Only used in assert. */
+/**
+ * Is a visible from b: i.e., ab crosses no edge of cdt?
+ * If constrained is true, consider only constrained edges as possible crossers.
+ * In any case, don't count an edge ab itself.
+ */
+static bool is_visible(const CDTVert *a, const CDTVert *b, bool constrained, const CDT_state *cdt)
+{
+ const LinkNode *ln;
+ const CDTEdge *e;
+ const SymEdge *se, *senext;
+ int ikind;
+
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (const CDTEdge *)ln->link;
+ if (is_deleted_edge(e) || is_border_edge(e, cdt)) {
+ continue;
+ }
+ if (constrained && !is_constrained_edge(e)) {
+ continue;
+ }
+ se = (const SymEdge *)&e->symedges[0];
+ senext = se->next;
+ if ((a == se->vert || a == senext->vert) || b == se->vert || b == se->next->vert) {
+ continue;
+ }
+ ikind = isect_seg_seg_v2_lambda_mu_db(
+ a->co, b->co, se->vert->co, senext->vert->co, NULL, NULL);
+ if (ikind != ISECT_LINE_LINE_NONE) {
+ if (ikind == ISECT_LINE_LINE_COLINEAR) {
+ /* TODO: special test here for overlap. */
+ continue;
+ }
+ return false;
+ }
+ }
+ return true;
+}
+# endif
+
+# ifndef NDEBUG /* Only used in assert. */
+/**
+ * Check that edge ab satisfies constrained delaunay condition:
+ * That is, for all non-constraint, non-border edges ab,
+ * (1) ab is visible in the constraint graph; and
+ * (2) there is a circle through a and b such that any vertex v connected by an edge to a or b
+ * is not inside that circle.
+ * The argument 'se' specifies ab by: a is se's vert and b is se->next's vert.
+ * Return true if check is OK.
+ */
+static bool is_delaunay_edge(const SymEdge *se, const double epsilon)
+{
+ int i;
+ CDTVert *a, *b, *c;
+ const SymEdge *sesym, *curse, *ss;
+ bool ok[2];
+
+ if (!is_constrained_edge(se->edge)) {
+ return true;
+ }
+ sesym = sym(se);
+ a = se->vert;
+ b = se->next->vert;
+ /* Try both the triangles adjacent to se's edge for circle. */
+ for (i = 0; i < 2; i++) {
+ ok[i] = true;
+ curse = (i == 0) ? se : sesym;
+ a = curse->vert;
+ b = curse->next->vert;
+ c = curse->next->next->vert;
+ for (ss = curse->rot; ss != curse; ss = ss->rot) {
+ ok[i] |= delaunay_check(a, b, c, ss->next->vert, epsilon);
+ }
+ }
+ return ok[0] || ok[1];
+}
+# endif
+
+# ifndef NDEBUG
+static bool plausible_non_null_ptr(void *p)
+{
+ return p > (void *)0x1000;
+}
+# endif
+
+static void validate_face_centroid(SymEdge *se)
+{
+ SymEdge *senext;
+# ifndef NDEBUG
+ double *centroidp = se->face->centroid;
+# endif
+ double c[2];
+ int count;
+ copy_v2_v2_db(c, se->vert->co);
+ BLI_assert(reachable(se->next, se, 100));
+ count = 1;
+ for (senext = se->next; senext != se; senext = senext->next) {
+ add_v2_v2_db(c, senext->vert->co);
+ count++;
+ }
+ c[0] /= count;
+ c[1] /= count;
+ BLI_assert(fabs(c[0] - centroidp[0]) < 1e-8 && fabs(c[1] - centroidp[1]) < 1e-8);
+}
+
+static void validate_cdt(CDT_state *cdt, bool check_all_tris)
+{
+ LinkNode *ln, *lne;
+ int totedges, totfaces, totverts, totborderedges;
+ CDTEdge *e;
+ SymEdge *se, *sesym, *s;
+ CDTVert *v;
+ CDTFace *f;
+ double *p;
+ double margin;
+ int i, limit;
+ bool isborder;
+
+ if (cdt->output_prepared) {
+ return;
+ }
+
+ BLI_assert(cdt != NULL);
+ BLI_assert(cdt->maxx >= cdt->minx);
+ BLI_assert(cdt->maxy >= cdt->miny);
+ totedges = 0;
+ totborderedges = 0;
+ for (ln = cdt->edges; ln; ln = ln->next) {
+ e = (CDTEdge *)ln->link;
+ se = &e->symedges[0];
+ sesym = &e->symedges[1];
+ if (is_deleted_edge(e)) {
+ BLI_assert(se->rot == NULL && sesym->next == NULL && sesym->rot == NULL);
+ continue;
+ }
+ totedges++;
+ isborder = is_border_edge(e, cdt);
+ if (isborder) {
+ totborderedges++;
+ BLI_assert((se->face == cdt->outer_face && sesym->face != cdt->outer_face) ||
+ (se->face != cdt->outer_face && sesym->face == cdt->outer_face));
+ }
+ /* BLI_assert(se->face != sesym->face);
+ * Not required because faces can have intruding wire edges. */
+ BLI_assert(se->vert != sesym->vert);
+ BLI_assert(se->edge == sesym->edge && se->edge == e);
+ BLI_assert(sym(se) == sesym && sym(sesym) == se);
+ for (i = 0; i < 2; i++) {
+ se = &e->symedges[i];
+ v = se->vert;
+ f = se->face;
+ p = v->co;
+ UNUSED_VARS_NDEBUG(p);
+ BLI_assert(plausible_non_null_ptr(v));
+ if (f != NULL) {
+ BLI_assert(plausible_non_null_ptr(f));
+ }
+ BLI_assert(plausible_non_null_ptr(se->next));
+ BLI_assert(plausible_non_null_ptr(se->rot));
+ if (check_all_tris && se->face != cdt->outer_face) {
+ limit = 3;
+ }
+ else {
+ limit = 10000;
+ }
+ BLI_assert(reachable(se->next, se, limit));
+ UNUSED_VARS_NDEBUG(limit);
+ BLI_assert(se->next->next != se);
+ s = se;
+ do {
+ BLI_assert(prev(s)->next == s);
+ BLI_assert(s->rot == sym(prev(s)));
+ s = s->next;
+ } while (s != se);
+ }
+ BLI_assert(isborder || is_visible(se->vert, se->next->vert, false, cdt));
+ BLI_assert(isborder || is_delaunay_edge(se, cdt->epsilon));
+ }
+ totverts = 0;
+ margin = cdt->margin;
+ for (i = 0; i < cdt->vert_array_len; i++) {
+ totverts++;
+ v = cdt->vert_array[i];
+ BLI_assert(plausible_non_null_ptr(v));
+ p = v->co;
+ BLI_assert(p[0] >= cdt->minx - margin && p[0] <= cdt->maxx + margin);
+ UNUSED_VARS_NDEBUG(margin);
+ BLI_assert(v->symedge->vert == v);
+ }
+ totfaces = 0;
+ for (ln = cdt->faces; ln; ln = ln->next) {
+ f = (CDTFace *)ln->link;
+ BLI_assert(plausible_non_null_ptr(f));
+ if (f->deleted) {
+ continue;
+ }
+ totfaces++;
+ if (f == cdt->outer_face) {
+ continue;
+ }
+ for (lne = cdt->edges; lne; lne = lne->next) {
+ e = (CDTEdge *)lne->link;
+ if (!is_deleted_edge(e)) {
+ for (i = 0; i < 2; i++) {
+ if (e->symedges[i].face == f) {
+ validate_face_centroid(&e->symedges[i]);
+ }
+ }
+ }
+ }
+ p = f->centroid;
+ BLI_assert(p[0] >= cdt->minx - margin && p[0] <= cdt->maxx + margin);
+ BLI_assert(p[1] >= cdt->miny - margin && p[1] <= cdt->maxy + margin);
+ }
+ /* Euler's formula for planar graphs. */
+ if (check_all_tris) {
+ BLI_assert(totverts - totedges + totfaces == 2);
+ }
+}
+#endif
diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c
index 7be7674069c..b5a950d6851 100644
--- a/source/blender/blenlib/intern/freetypefont.c
+++ b/source/blender/blenlib/intern/freetypefont.c
@@ -565,7 +565,7 @@ VChar *BLI_vfontchar_copy(const VChar *vchar_src, const int UNUSED(flag))
* between them
* </pre>
*
- * Each glyph's original outline points are located on a grid of indivisible units.
+ * Each glyphs original outline points are located on a grid of indivisible units.
* The points are stored in the font file as 16-bit integer grid coordinates,
* with the grid origin's being at (0, 0); they thus range from -16384 to 16383.
*
diff --git a/source/blender/blenlib/intern/math_base_inline.c b/source/blender/blenlib/intern/math_base_inline.c
index 8f30255a08b..320f8a0f1ab 100644
--- a/source/blender/blenlib/intern/math_base_inline.c
+++ b/source/blender/blenlib/intern/math_base_inline.c
@@ -171,6 +171,11 @@ MINLINE float interpf(float target, float origin, float fac)
return (fac * target) + (1.0f - fac) * origin;
}
+MINLINE double interpd(double target, double origin, double fac)
+{
+ return (fac * target) + (1.0f - fac) * origin;
+}
+
/* used for zoom values*/
MINLINE float power_of_2(float val)
{
diff --git a/source/blender/blenlib/intern/math_bits_inline.c b/source/blender/blenlib/intern/math_bits_inline.c
index ec2408e30a1..a6883c2aaba 100644
--- a/source/blender/blenlib/intern/math_bits_inline.c
+++ b/source/blender/blenlib/intern/math_bits_inline.c
@@ -28,7 +28,7 @@
#include "BLI_math_bits.h"
-MINLINE int bitscan_forward_i(int a)
+MINLINE unsigned int bitscan_forward_uint(unsigned int a)
{
BLI_assert(a != 0);
#ifdef _MSC_VER
@@ -36,28 +36,28 @@ MINLINE int bitscan_forward_i(int a)
_BitScanForward(&ctz, a);
return ctz;
#else
- return __builtin_ctz((unsigned int)a);
+ return (unsigned int)__builtin_ctz(a);
#endif
}
-MINLINE unsigned int bitscan_forward_uint(unsigned int a)
+MINLINE int bitscan_forward_i(int a)
{
- return (unsigned int)bitscan_forward_i((int)a);
+ return (int)bitscan_forward_uint((unsigned int)a);
}
-MINLINE int bitscan_forward_clear_i(int *a)
+MINLINE unsigned int bitscan_forward_clear_uint(unsigned int *a)
{
- int i = bitscan_forward_i(*a);
+ unsigned int i = bitscan_forward_uint(*a);
*a &= (*a) - 1;
return i;
}
-MINLINE unsigned int bitscan_forward_clear_uint(unsigned int *a)
+MINLINE int bitscan_forward_clear_i(int *a)
{
- return (unsigned int)bitscan_forward_clear_i((int *)a);
+ return (int)bitscan_forward_clear_uint((unsigned int *)a);
}
-MINLINE int bitscan_reverse_i(int a)
+MINLINE unsigned int bitscan_reverse_uint(unsigned int a)
{
BLI_assert(a != 0);
#ifdef _MSC_VER
@@ -65,26 +65,26 @@ MINLINE int bitscan_reverse_i(int a)
_BitScanReverse(&clz, a);
return clz;
#else
- return __builtin_clz((unsigned int)a);
+ return (unsigned int)__builtin_clz(a);
#endif
}
-MINLINE unsigned int bitscan_reverse_uint(unsigned int a)
+MINLINE int bitscan_reverse_i(int a)
{
- return (unsigned int)bitscan_reverse_i((int)a);
+ return (int)bitscan_reverse_uint((unsigned int)a);
}
-MINLINE int bitscan_reverse_clear_i(int *a)
+MINLINE unsigned int bitscan_reverse_clear_uint(unsigned int *a)
{
- int i = bitscan_reverse_i(*a);
+ unsigned int i = bitscan_reverse_uint(*a);
/* TODO(sergey): This could probably be optimized. */
- *a &= ~(1 << (sizeof(int) * 8 - i - 1));
+ *a &= ~(1 << (sizeof(unsigned int) * 8 - i - 1));
return i;
}
-MINLINE unsigned int bitscan_reverse_clear_uint(unsigned int *a)
+MINLINE int bitscan_reverse_clear_i(int *a)
{
- return (unsigned int)bitscan_reverse_clear_i((int *)a);
+ return (int)bitscan_reverse_clear_uint((unsigned int *)a);
}
MINLINE unsigned int highest_order_bit_uint(unsigned int n)
diff --git a/source/blender/blenlib/intern/math_color.c b/source/blender/blenlib/intern/math_color.c
index f07c2ec159e..cc29ebe4f20 100644
--- a/source/blender/blenlib/intern/math_color.c
+++ b/source/blender/blenlib/intern/math_color.c
@@ -153,7 +153,7 @@ void rgb_to_ycc(float r, float g, float b, float *ly, float *lcb, float *lcr, in
cr = (0.5f * sr) - (0.41869f * sg) - (0.08131f * sb) + 128.0f;
break;
default:
- assert(!"invalid colorspace");
+ BLI_assert(!"invalid colorspace");
break;
}
diff --git a/source/blender/blenlib/intern/math_color_inline.c b/source/blender/blenlib/intern/math_color_inline.c
index d7a2d681f33..f5aaddc0ea3 100644
--- a/source/blender/blenlib/intern/math_color_inline.c
+++ b/source/blender/blenlib/intern/math_color_inline.c
@@ -225,8 +225,8 @@ MINLINE void srgb_to_linearrgb_uchar4_predivide(float linear[4], const unsigned
srgb_to_linearrgb_predivide_v4(linear, fsrgb);
}
-MINLINE void rgba_char_args_set(
- char col[4], const char r, const char g, const char b, const char a)
+MINLINE void rgba_uchar_args_set(
+ uchar col[4], const uchar r, const uchar g, const uchar b, const uchar a)
{
col[0] = r;
col[1] = g;
@@ -243,8 +243,8 @@ MINLINE void rgba_float_args_set(
col[3] = a;
}
-MINLINE void rgba_char_args_test_set(
- char col[4], const char r, const char g, const char b, const char a)
+MINLINE void rgba_uchar_args_test_set(
+ uchar col[4], const uchar r, const uchar g, const uchar b, const uchar a)
{
if (col[3] == 0) {
col[0] = r;
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index 7cdac6b1497..c4bdc73e0e3 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -2346,6 +2346,213 @@ bool isect_tri_tri_epsilon_v3(const float t_a0[3],
return false;
}
+/* -------------------------------------------------------------------- */
+/** \name Tri-Tri Intersect 2D
+ *
+ * "Fast and Robust Triangle-Triangle Overlap Test
+ * Using Orientation Predicates" P. Guigue - O. Devillers
+ * Journal of Graphics Tools, 8(1), 2003.
+ *
+ * \{ */
+
+static bool isect_tri_tri_v2_impl_vert(const float t_a0[2],
+ const float t_a1[2],
+ const float t_a2[2],
+ const float t_b0[2],
+ const float t_b1[2],
+ const float t_b2[2])
+{
+ if (line_point_side_v2(t_b2, t_b0, t_a1) >= 0.0f) {
+ if (line_point_side_v2(t_b2, t_b1, t_a1) <= 0.0f) {
+ if (line_point_side_v2(t_a0, t_b0, t_a1) > 0.0f) {
+ if (line_point_side_v2(t_a0, t_b1, t_a1) <= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ if (line_point_side_v2(t_a0, t_b0, t_a2) >= 0.0f) {
+ if (line_point_side_v2(t_a1, t_a2, t_b0) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+ else if (line_point_side_v2(t_a0, t_b1, t_a1) <= 0.0f) {
+ if (line_point_side_v2(t_b2, t_b1, t_a2) <= 0.0f) {
+ if (line_point_side_v2(t_a1, t_a2, t_b1) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ else if (line_point_side_v2(t_b2, t_b0, t_a2) >= 0.0f) {
+ if (line_point_side_v2(t_a1, t_a2, t_b2) >= 0.0f) {
+ if (line_point_side_v2(t_a0, t_b0, t_a2) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else if (line_point_side_v2(t_a1, t_a2, t_b1) >= 0.0f) {
+ if (line_point_side_v2(t_b2, t_a2, t_b1) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+}
+
+static bool isect_tri_tri_v2_impl_edge(const float t_a0[2],
+ const float t_a1[2],
+ const float t_a2[2],
+ const float t_b0[2],
+ const float t_b1[2],
+ const float t_b2[2])
+{
+ UNUSED_VARS(t_b1);
+
+ if (line_point_side_v2(t_b2, t_b0, t_a1) >= 0.0f) {
+ if (line_point_side_v2(t_a0, t_b0, t_a1) >= 0.0f) {
+ if (line_point_side_v2(t_a0, t_a1, t_b2) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ if (line_point_side_v2(t_a1, t_a2, t_b0) >= 0.0f) {
+ if (line_point_side_v2(t_a2, t_a0, t_b0) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+ else {
+ if (line_point_side_v2(t_b2, t_b0, t_a2) >= 0.0f) {
+ if (line_point_side_v2(t_a0, t_b0, t_a2) >= 0.0f) {
+ if (line_point_side_v2(t_a0, t_a2, t_b2) >= 0.0f) {
+ return 1;
+ }
+ else {
+ if (line_point_side_v2(t_a1, t_a2, t_b2) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ return 0;
+ }
+ }
+}
+
+static int isect_tri_tri_impl_ccw_v2(const float t_a0[2],
+ const float t_a1[2],
+ const float t_a2[2],
+ const float t_b0[2],
+ const float t_b1[2],
+ const float t_b2[2])
+{
+ if (line_point_side_v2(t_b0, t_b1, t_a0) >= 0.0f) {
+ if (line_point_side_v2(t_b1, t_b2, t_a0) >= 0.0f) {
+ if (line_point_side_v2(t_b2, t_b0, t_a0) >= 0.0f) {
+ return 1;
+ }
+ else {
+ return isect_tri_tri_v2_impl_edge(t_a0, t_a1, t_a2, t_b0, t_b1, t_b2);
+ }
+ }
+ else {
+ if (line_point_side_v2(t_b2, t_b0, t_a0) >= 0.0f) {
+ return isect_tri_tri_v2_impl_edge(t_a0, t_a1, t_a2, t_b2, t_b0, t_b1);
+ }
+ else {
+ return isect_tri_tri_v2_impl_vert(t_a0, t_a1, t_a2, t_b0, t_b1, t_b2);
+ }
+ }
+ }
+ else {
+ if (line_point_side_v2(t_b1, t_b2, t_a0) >= 0.0f) {
+ if (line_point_side_v2(t_b2, t_b0, t_a0) >= 0.0f) {
+ return isect_tri_tri_v2_impl_edge(t_a0, t_a1, t_a2, t_b1, t_b2, t_b0);
+ }
+ else {
+ return isect_tri_tri_v2_impl_vert(t_a0, t_a1, t_a2, t_b1, t_b2, t_b0);
+ }
+ }
+ else {
+ return isect_tri_tri_v2_impl_vert(t_a0, t_a1, t_a2, t_b2, t_b0, t_b1);
+ }
+ }
+}
+
+bool isect_tri_tri_v2(const float t_a0[2],
+ const float t_a1[2],
+ const float t_a2[2],
+ const float t_b0[2],
+ const float t_b1[2],
+ const float t_b2[2])
+{
+ if (line_point_side_v2(t_a0, t_a1, t_a2) < 0.0f) {
+ if (line_point_side_v2(t_b0, t_b1, t_b2) < 0.0f) {
+ return isect_tri_tri_impl_ccw_v2(t_a0, t_a2, t_a1, t_b0, t_b2, t_b1);
+ }
+ else {
+ return isect_tri_tri_impl_ccw_v2(t_a0, t_a2, t_a1, t_b0, t_b1, t_b2);
+ }
+ }
+ else {
+ if (line_point_side_v2(t_b0, t_b1, t_b2) < 0.0f) {
+ return isect_tri_tri_impl_ccw_v2(t_a0, t_a1, t_a2, t_b0, t_b2, t_b1);
+ }
+ else {
+ return isect_tri_tri_impl_ccw_v2(t_a0, t_a1, t_a2, t_b0, t_b1, t_b2);
+ }
+ }
+}
+
+/** \} */
+
/* Adapted from the paper by Kasper Fauerby */
/* "Improved Collision detection and Response" */
@@ -3245,7 +3452,7 @@ bool clip_segment_v3_plane(
}
}
- /* incase input/output values match (above also) */
+ /* In case input/output values match (above also). */
const float p1_copy[3] = {UNPACK3(p1)};
copy_v3_v3(r_p2, p2);
copy_v3_v3(r_p1, p1_copy);
@@ -3304,7 +3511,7 @@ bool clip_segment_v3_plane_n(const float p1[3],
}
}
- /* incase input/output values match */
+ /* In case input/output values match. */
const float p1_copy[3] = {UNPACK3(p1)};
madd_v3_v3v3fl(r_p1, p1_copy, dp, p1_fac);
@@ -4481,6 +4688,50 @@ void projmat_dimensions(const float projmat[4][4],
}
}
+/**
+ * Creates a projection matrix for a small region of the viewport.
+ *
+ * \param projmat: Projection Matrix.
+ * \param win_size: Viewport Size.
+ * \param x_min, x_max, y_min, y_max: Coordinates of the subregion.
+ * \return r_projmat: Resulting Projection Matrix.
+ */
+void projmat_from_subregion(const float projmat[4][4],
+ const int win_size[2],
+ const int x_min,
+ const int x_max,
+ const int y_min,
+ const int y_max,
+ float r_projmat[4][4])
+{
+ float rect_width = (float)(x_max - x_min);
+ float rect_height = (float)(y_max - y_min);
+
+ float x_fac = (float)((x_min + x_max) - win_size[0]) / rect_width;
+ float y_fac = (float)((y_min + y_max) - win_size[1]) / rect_height;
+
+ copy_m4_m4(r_projmat, projmat);
+ r_projmat[0][0] *= (float)win_size[0] / rect_width;
+ r_projmat[1][1] *= (float)win_size[1] / rect_height;
+
+#if 0 /* TODO: check if this is more efficient. */
+ r_projmat[2][0] -= x_fac * r_projmat[2][3];
+ r_projmat[2][1] -= y_fac * r_projmat[2][3];
+
+ r_projmat[3][0] -= x_fac * r_projmat[3][3];
+ r_projmat[3][1] -= y_fac * r_projmat[3][3];
+#else
+ if (projmat[3][3] == 0.0f) {
+ r_projmat[2][0] += x_fac;
+ r_projmat[2][1] += y_fac;
+ }
+ else {
+ r_projmat[3][0] -= x_fac;
+ r_projmat[3][1] -= y_fac;
+ }
+#endif
+}
+
static void i_multmatrix(float icand[4][4], float Vm[4][4])
{
int row, col;
@@ -5479,6 +5730,27 @@ float form_factor_hemi_poly(
}
/**
+ * Check if the edge is convex or concave
+ * (depends on face winding)
+ * Copied from BM_edge_is_convex().
+ */
+bool is_edge_convex_v3(const float v1[3],
+ const float v2[3],
+ const float f1_no[3],
+ const float f2_no[3])
+{
+ if (!equals_v3v3(f1_no, f2_no)) {
+ float cross[3];
+ float l_dir[3];
+ cross_v3_v3v3(cross, f1_no, f2_no);
+ /* we assume contiguous normals, otherwise the result isn't meaningful */
+ sub_v3_v3v3(l_dir, v2, v1);
+ return (dot_v3v3(l_dir, cross) > 0.0f);
+ }
+ return false;
+}
+
+/**
* Evaluate if entire quad is a proper convex quad
*/
bool is_quad_convex_v3(const float v1[3], const float v2[3], const float v3[3], const float v4[3])
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 7c64206134b..2568d42566c 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -71,6 +71,15 @@ void unit_m4(float m[4][4])
m[3][0] = m[3][1] = m[3][2] = 0.0f;
}
+void unit_m4_db(double m[4][4])
+{
+ m[0][0] = m[1][1] = m[2][2] = m[3][3] = 1.0f;
+ m[0][1] = m[0][2] = m[0][3] = 0.0f;
+ m[1][0] = m[1][2] = m[1][3] = 0.0f;
+ m[2][0] = m[2][1] = m[2][3] = 0.0f;
+ m[3][0] = m[3][1] = m[3][2] = 0.0f;
+}
+
void copy_m2_m2(float m1[2][2], const float m2[2][2])
{
memcpy(m1, m2, sizeof(float[2][2]));
@@ -87,6 +96,11 @@ void copy_m4_m4(float m1[4][4], const float m2[4][4])
memcpy(m1, m2, sizeof(float[4][4]));
}
+void copy_m4_m4_db(double m1[4][4], const double m2[4][4])
+{
+ memcpy(m1, m2, sizeof(double[4][4]));
+}
+
void copy_m3_m4(float m1[3][3], const float m2[4][4])
{
m1[0][0] = m2[0][0];
@@ -127,6 +141,29 @@ void copy_m4_m3(float m1[4][4], const float m2[3][3]) /* no clear */
m1[3][3] = 1.0f;
}
+void copy_m4d_m4(double m1[4][4], const float m2[4][4])
+{
+ m1[0][0] = m2[0][0];
+ m1[0][1] = m2[0][1];
+ m1[0][2] = m2[0][2];
+ m1[0][3] = m2[0][3];
+
+ m1[1][0] = m2[1][0];
+ m1[1][1] = m2[1][1];
+ m1[1][2] = m2[1][2];
+ m1[1][3] = m2[1][3];
+
+ m1[2][0] = m2[2][0];
+ m1[2][1] = m2[2][1];
+ m1[2][2] = m2[2][2];
+ m1[2][3] = m2[2][3];
+
+ m1[3][0] = m2[3][0];
+ m1[3][1] = m2[3][1];
+ m1[3][2] = m2[3][2];
+ m1[3][3] = m2[3][3];
+}
+
void copy_m3_m3d(float R[3][3], const double A[3][3])
{
/* Keep it stupid simple for better data flow in CPU. */
@@ -231,6 +268,61 @@ void mul_m4_m4m4_uniq(float R[4][4], const float A[4][4], const float B[4][4])
#endif
}
+void mul_m4_m4m4_db_uniq(double R[4][4], const double A[4][4], const double B[4][4])
+{
+ BLI_assert(R != A && R != B);
+
+ /* matrix product: R[j][k] = A[j][i] . B[i][k] */
+
+ R[0][0] = B[0][0] * A[0][0] + B[0][1] * A[1][0] + B[0][2] * A[2][0] + B[0][3] * A[3][0];
+ R[0][1] = B[0][0] * A[0][1] + B[0][1] * A[1][1] + B[0][2] * A[2][1] + B[0][3] * A[3][1];
+ R[0][2] = B[0][0] * A[0][2] + B[0][1] * A[1][2] + B[0][2] * A[2][2] + B[0][3] * A[3][2];
+ R[0][3] = B[0][0] * A[0][3] + B[0][1] * A[1][3] + B[0][2] * A[2][3] + B[0][3] * A[3][3];
+
+ R[1][0] = B[1][0] * A[0][0] + B[1][1] * A[1][0] + B[1][2] * A[2][0] + B[1][3] * A[3][0];
+ R[1][1] = B[1][0] * A[0][1] + B[1][1] * A[1][1] + B[1][2] * A[2][1] + B[1][3] * A[3][1];
+ R[1][2] = B[1][0] * A[0][2] + B[1][1] * A[1][2] + B[1][2] * A[2][2] + B[1][3] * A[3][2];
+ R[1][3] = B[1][0] * A[0][3] + B[1][1] * A[1][3] + B[1][2] * A[2][3] + B[1][3] * A[3][3];
+
+ R[2][0] = B[2][0] * A[0][0] + B[2][1] * A[1][0] + B[2][2] * A[2][0] + B[2][3] * A[3][0];
+ R[2][1] = B[2][0] * A[0][1] + B[2][1] * A[1][1] + B[2][2] * A[2][1] + B[2][3] * A[3][1];
+ R[2][2] = B[2][0] * A[0][2] + B[2][1] * A[1][2] + B[2][2] * A[2][2] + B[2][3] * A[3][2];
+ R[2][3] = B[2][0] * A[0][3] + B[2][1] * A[1][3] + B[2][2] * A[2][3] + B[2][3] * A[3][3];
+
+ R[3][0] = B[3][0] * A[0][0] + B[3][1] * A[1][0] + B[3][2] * A[2][0] + B[3][3] * A[3][0];
+ R[3][1] = B[3][0] * A[0][1] + B[3][1] * A[1][1] + B[3][2] * A[2][1] + B[3][3] * A[3][1];
+ R[3][2] = B[3][0] * A[0][2] + B[3][1] * A[1][2] + B[3][2] * A[2][2] + B[3][3] * A[3][2];
+ R[3][3] = B[3][0] * A[0][3] + B[3][1] * A[1][3] + B[3][2] * A[2][3] + B[3][3] * A[3][3];
+}
+
+void mul_m4db_m4db_m4fl_uniq(double R[4][4], const double A[4][4], const float B[4][4])
+{
+ /* Remove second check since types don't match. */
+ BLI_assert(R != A /* && R != B */);
+
+ /* matrix product: R[j][k] = A[j][i] . B[i][k] */
+
+ R[0][0] = B[0][0] * A[0][0] + B[0][1] * A[1][0] + B[0][2] * A[2][0] + B[0][3] * A[3][0];
+ R[0][1] = B[0][0] * A[0][1] + B[0][1] * A[1][1] + B[0][2] * A[2][1] + B[0][3] * A[3][1];
+ R[0][2] = B[0][0] * A[0][2] + B[0][1] * A[1][2] + B[0][2] * A[2][2] + B[0][3] * A[3][2];
+ R[0][3] = B[0][0] * A[0][3] + B[0][1] * A[1][3] + B[0][2] * A[2][3] + B[0][3] * A[3][3];
+
+ R[1][0] = B[1][0] * A[0][0] + B[1][1] * A[1][0] + B[1][2] * A[2][0] + B[1][3] * A[3][0];
+ R[1][1] = B[1][0] * A[0][1] + B[1][1] * A[1][1] + B[1][2] * A[2][1] + B[1][3] * A[3][1];
+ R[1][2] = B[1][0] * A[0][2] + B[1][1] * A[1][2] + B[1][2] * A[2][2] + B[1][3] * A[3][2];
+ R[1][3] = B[1][0] * A[0][3] + B[1][1] * A[1][3] + B[1][2] * A[2][3] + B[1][3] * A[3][3];
+
+ R[2][0] = B[2][0] * A[0][0] + B[2][1] * A[1][0] + B[2][2] * A[2][0] + B[2][3] * A[3][0];
+ R[2][1] = B[2][0] * A[0][1] + B[2][1] * A[1][1] + B[2][2] * A[2][1] + B[2][3] * A[3][1];
+ R[2][2] = B[2][0] * A[0][2] + B[2][1] * A[1][2] + B[2][2] * A[2][2] + B[2][3] * A[3][2];
+ R[2][3] = B[2][0] * A[0][3] + B[2][1] * A[1][3] + B[2][2] * A[2][3] + B[2][3] * A[3][3];
+
+ R[3][0] = B[3][0] * A[0][0] + B[3][1] * A[1][0] + B[3][2] * A[2][0] + B[3][3] * A[3][0];
+ R[3][1] = B[3][0] * A[0][1] + B[3][1] * A[1][1] + B[3][2] * A[2][1] + B[3][3] * A[3][1];
+ R[3][2] = B[3][0] * A[0][2] + B[3][1] * A[1][2] + B[3][2] * A[2][2] + B[3][3] * A[3][2];
+ R[3][3] = B[3][0] * A[0][3] + B[3][1] * A[1][3] + B[3][2] * A[2][3] + B[3][3] * A[3][3];
+}
+
void mul_m4_m4_pre(float R[4][4], const float A[4][4])
{
BLI_assert(A != R);
@@ -604,6 +696,26 @@ void mul_v3_m4v3(float r[3], const float mat[4][4], const float vec[3])
r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
}
+void mul_v3_m4v3_db(double r[3], const double mat[4][4], const double vec[3])
+{
+ const double x = vec[0];
+ const double y = vec[1];
+
+ r[0] = x * mat[0][0] + y * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
+ r[1] = x * mat[0][1] + y * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
+ r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
+}
+void mul_v4_m4v3_db(double r[4], const double mat[4][4], const double vec[3])
+{
+ const double x = vec[0];
+ const double y = vec[1];
+
+ r[0] = x * mat[0][0] + y * mat[1][0] + mat[2][0] * vec[2] + mat[3][0];
+ r[1] = x * mat[0][1] + y * mat[1][1] + mat[2][1] * vec[2] + mat[3][1];
+ r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2] + mat[3][2];
+ r[3] = x * mat[0][3] + y * mat[1][3] + mat[2][3] * vec[2] + mat[3][3];
+}
+
void mul_v2_m4v3(float r[2], const float mat[4][4], const float vec[3])
{
const float x = vec[0];
@@ -646,6 +758,16 @@ void mul_v3_mat3_m4v3(float r[3], const float mat[4][4], const float vec[3])
r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
}
+void mul_v3_mat3_m4v3_db(double r[3], const double mat[4][4], const double vec[3])
+{
+ const double x = vec[0];
+ const double y = vec[1];
+
+ r[0] = x * mat[0][0] + y * mat[1][0] + mat[2][0] * vec[2];
+ r[1] = x * mat[0][1] + y * mat[1][1] + mat[2][1] * vec[2];
+ r[2] = x * mat[0][2] + y * mat[1][2] + mat[2][2] * vec[2];
+}
+
void mul_project_m4_v3(const float mat[4][4], float vec[3])
{
/* absolute value to not flip the frustum upside down behind the camera */
@@ -1891,7 +2013,7 @@ void rotate_m4(float mat[4][4], const char axis, const float angle)
const float angle_cos = cosf(angle);
const float angle_sin = sinf(angle);
- assert(axis >= 'X' && axis <= 'Z');
+ BLI_assert(axis >= 'X' && axis <= 'Z');
switch (axis) {
case 'X':
diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c
index 47814b1080c..e4b44240272 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -644,8 +644,8 @@ void vec_to_quat(float q[4], const float vec[3], short axis, const short upflag)
float nor[3], tvec[3];
float angle, si, co, len;
- assert(axis >= 0 && axis <= 5);
- assert(upflag >= 0 && upflag <= 2);
+ BLI_assert(axis >= 0 && axis <= 5);
+ BLI_assert(upflag >= 0 && upflag <= 2);
/* first set the quat to unit */
unit_qt(q);
@@ -1194,7 +1194,7 @@ void axis_angle_to_quat_single(float q[4], const char axis, const float angle)
const float angle_sin = sinf(angle_half);
const int axis_index = (axis - 'X');
- assert(axis >= 'X' && axis <= 'Z');
+ BLI_assert(axis >= 'X' && axis <= 'Z');
q[0] = angle_cos;
zero_v3(q + 1);
@@ -1398,7 +1398,7 @@ void rotate_eul(float beul[3], const char axis, const float ang)
{
float eul[3], mat1[3][3], mat2[3][3], totmat[3][3];
- assert(axis >= 'X' && axis <= 'Z');
+ BLI_assert(axis >= 'X' && axis <= 'Z');
eul[0] = eul[1] = eul[2] = 0.0f;
if (axis == 'X') {
@@ -1544,7 +1544,7 @@ static const RotOrderInfo rotOrders[] = {
*/
static const RotOrderInfo *get_rotation_order_info(const short order)
{
- assert(order >= 0 && order <= 6);
+ BLI_assert(order >= 0 && order <= 6);
if (order < 1) {
return &rotOrders[0];
}
@@ -1813,7 +1813,7 @@ void rotate_eulO(float beul[3], const short order, char axis, float ang)
{
float eul[3], mat1[3][3], mat2[3][3], totmat[3][3];
- assert(axis >= 'X' && axis <= 'Z');
+ BLI_assert(axis >= 'X' && axis <= 'Z');
zero_v3(eul);
@@ -2119,8 +2119,8 @@ void quat_apply_track(float quat[4], short axis, short upflag)
{0.0, sqrt_1_2, sqrt_1_2, 0.0},
};
- assert(axis >= 0 && axis <= 5);
- assert(upflag >= 0 && upflag <= 2);
+ BLI_assert(axis >= 0 && axis <= 5);
+ BLI_assert(upflag >= 0 && upflag <= 2);
mul_qt_qtqt(quat, quat, quat_track[axis]);
@@ -2142,7 +2142,7 @@ void vec_apply_track(float vec[3], short axis)
{
float tvec[3];
- assert(axis >= 0 && axis <= 5);
+ BLI_assert(axis >= 0 && axis <= 5);
copy_v3_v3(tvec, vec);
diff --git a/source/blender/blenlib/intern/math_statistics.c b/source/blender/blenlib/intern/math_statistics.c
index d4fcb32ce37..18affbed708 100644
--- a/source/blender/blenlib/intern/math_statistics.c
+++ b/source/blender/blenlib/intern/math_statistics.c
@@ -96,7 +96,7 @@ static void covariance_m_vn_ex_task_cb(void *__restrict userdata,
* \param center: the center (or mean point) of cos_vn. If NULL,
* it is assumed cos_vn is already centered.
* \param use_sample_correction: whether to apply sample correction
- * (i.e. get 'sample varince' instead of 'population variance').
+ * (i.e. get 'sample variance' instead of 'population variance').
* \return r_covmat the computed covariance matrix.
*/
void BLI_covariance_m_vn_ex(const int n,
diff --git a/source/blender/blenlib/intern/math_vector.c b/source/blender/blenlib/intern/math_vector.c
index 1977558ac88..961850d3a9a 100644
--- a/source/blender/blenlib/intern/math_vector.c
+++ b/source/blender/blenlib/intern/math_vector.c
@@ -1392,4 +1392,21 @@ void mul_vn_db(double *array_tar, const int size, const double f)
}
}
+void interp_v3_v3v3_db(double target[3], const double a[3], const double b[3], const double t)
+{
+ const double s = 1.0f - t;
+
+ target[0] = s * a[0] + t * b[0];
+ target[1] = s * a[1] + t * b[1];
+ target[2] = s * a[2] + t * b[2];
+}
+
+void interp_v2_v2v2_db(double target[2], const double a[2], const double b[2], const double t)
+{
+ const double s = 1.0f - t;
+
+ target[0] = s * a[0] + t * b[0];
+ target[1] = s * a[1] + t * b[1];
+}
+
/** \} */
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index 865c2f5dc25..8cb618ae14e 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -374,6 +374,13 @@ MINLINE void add_v3_v3(float r[3], const float a[3])
r[2] += a[2];
}
+MINLINE void add_v3_v3_db(double r[3], const double a[3])
+{
+ r[0] += a[0];
+ r[1] += a[1];
+ r[2] += a[2];
+}
+
MINLINE void add_v3_v3v3(float r[3], const float a[3], const float b[3])
{
r[0] = a[0] + b[0];
@@ -450,6 +457,13 @@ MINLINE void sub_v3_v3v3_int(int r[3], const int a[3], const int b[3])
r[2] = a[2] - b[2];
}
+MINLINE void sub_v3_v3v3_db(double r[3], const double a[3], const double b[3])
+{
+ r[0] = a[0] - b[0];
+ r[1] = a[1] - b[1];
+ r[2] = a[2] - b[2];
+}
+
MINLINE void sub_v3db_v3fl_v3fl(double r[3], const float a[3], const float b[3])
{
r[0] = (double)a[0] - (double)b[0];
@@ -492,6 +506,13 @@ MINLINE void mul_v3_fl(float r[3], float f)
r[2] *= f;
}
+MINLINE void mul_v3db_db(double r[3], double f)
+{
+ r[0] *= f;
+ r[1] *= f;
+ r[2] *= f;
+}
+
MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f)
{
r[0] = a[0] * f;
@@ -836,6 +857,11 @@ MINLINE double dot_v3db_v3fl(const double a[3], const float b[3])
return a[0] * (double)b[0] + a[1] * (double)b[1] + a[2] * (double)b[2];
}
+MINLINE double dot_v3v3_db(const double a[3], const double b[3])
+{
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+}
+
MINLINE float cross_v2v2(const float a[2], const float b[2])
{
return a[0] * b[1] - a[1] * b[0];
@@ -859,6 +885,14 @@ MINLINE void cross_v3_v3v3_hi_prec(float r[3], const float a[3], const float b[3
r[2] = (float)((double)a[0] * (double)b[1] - (double)a[1] * (double)b[0]);
}
+MINLINE void cross_v3_v3v3_db(double r[3], const double a[3], const double b[3])
+{
+ BLI_assert(r != a && r != b);
+ r[0] = a[1] * b[2] - a[2] * b[1];
+ r[1] = a[2] * b[0] - a[0] * b[2];
+ r[2] = a[0] * b[1] - a[1] * b[0];
+}
+
/* Newell's Method */
/* excuse this fairly specific function,
* its used for polygon normals all over the place
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c
index 111b530a527..18acbca00a1 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -1685,6 +1685,24 @@ void BLI_split_file_part(const char *string, char *file, const size_t filelen)
}
/**
+ * Returns a pointer to the last extension (e.g. the position of the last period).
+ * Returns NULL if there is no extension.
+ */
+const char *BLI_path_extension(const char *filepath)
+{
+ const char *extension = strrchr(filepath, '.');
+ if (extension == NULL) {
+ return NULL;
+ }
+ if (BLI_first_slash(extension) != NULL) {
+ /* There is a path separator in the extension, so the '.' was found in a
+ * directory component and not in the filename. */
+ return NULL;
+ }
+ return extension;
+}
+
+/**
* Append a filename to a dir, ensuring slash separates.
*/
void BLI_path_append(char *__restrict dst, const size_t maxlen, const char *__restrict file)
diff --git a/source/blender/blenlib/intern/polyfill_2d.c b/source/blender/blenlib/intern/polyfill_2d.c
index 575a4a06d6a..31b18079c73 100644
--- a/source/blender/blenlib/intern/polyfill_2d.c
+++ b/source/blender/blenlib/intern/polyfill_2d.c
@@ -193,7 +193,10 @@ BLI_INLINE eSign signum_enum(float a)
*/
BLI_INLINE float area_tri_signed_v2_alt_2x(const float v1[2], const float v2[2], const float v3[2])
{
- return ((v1[0] * (v2[1] - v3[1])) + (v2[0] * (v3[1] - v1[1])) + (v3[0] * (v1[1] - v2[1])));
+ float d2[2], d3[2];
+ sub_v2_v2v2(d2, v2, v1);
+ sub_v2_v2v2(d3, v3, v1);
+ return (d2[0] * d3[1]) - (d3[0] * d2[1]);
}
static eSign span_tri_v2_sign(const float v1[2], const float v2[2], const float v3[2])
diff --git a/source/blender/blenlib/intern/string_utf8.c b/source/blender/blenlib/intern/string_utf8.c
index 01412416854..22c23727d76 100644
--- a/source/blender/blenlib/intern/string_utf8.c
+++ b/source/blender/blenlib/intern/string_utf8.c
@@ -868,3 +868,53 @@ size_t BLI_str_partition_ex_utf8(const char *str,
*suf = *sep = NULL;
return str_len;
}
+
+/* -------------------------------------------------------------------- */
+/** \name Offset Conversion in Strings
+ * \{ */
+
+int BLI_str_utf8_offset_to_index(const char *str, int offset)
+{
+ int index = 0, pos = 0;
+ while (pos != offset) {
+ pos += BLI_str_utf8_size(str + pos);
+ index++;
+ }
+ return index;
+}
+
+int BLI_str_utf8_offset_from_index(const char *str, int index)
+{
+ int offset = 0, pos = 0;
+ while (pos != index) {
+ offset += BLI_str_utf8_size(str + offset);
+ pos++;
+ }
+ return offset;
+}
+
+int BLI_str_utf8_offset_to_column(const char *str, int offset)
+{
+ int column = 0, pos = 0;
+ while (pos < offset) {
+ column += BLI_str_utf8_char_width_safe(str + pos);
+ pos += BLI_str_utf8_size_safe(str + pos);
+ }
+ return column;
+}
+
+int BLI_str_utf8_offset_from_column(const char *str, int column)
+{
+ int offset = 0, pos = 0, col;
+ while (*(str + offset) && pos < column) {
+ col = BLI_str_utf8_char_width_safe(str + offset);
+ if (pos + col > column) {
+ break;
+ }
+ offset += BLI_str_utf8_size_safe(str + offset);
+ pos += col;
+ }
+ return offset;
+}
+
+/** \} */
diff --git a/source/blender/blenlib/intern/string_utils.c b/source/blender/blenlib/intern/string_utils.c
index f2b3ef2ad87..b956e1c0a7e 100644
--- a/source/blender/blenlib/intern/string_utils.c
+++ b/source/blender/blenlib/intern/string_utils.c
@@ -82,6 +82,21 @@ size_t BLI_split_name_num(char *left, int *nr, const char *name, const char deli
return name_len;
}
+bool BLI_string_is_decimal(const char *string)
+{
+ if (*string == '\0') {
+ return false;
+ }
+
+ /* Keep iterating over the string until a non-digit is found. */
+ while (isdigit(*string)) {
+ string++;
+ }
+
+ /* If the non-digit we found is the terminating \0, everything was digits. */
+ return *string == '\0';
+}
+
static bool is_char_sep(const char c)
{
return ELEM(c, '.', ' ', '-', '_');
diff --git a/source/blender/blenlib/intern/task.c b/source/blender/blenlib/intern/task.c
index bea38a232cc..034a6d4017e 100644
--- a/source/blender/blenlib/intern/task.c
+++ b/source/blender/blenlib/intern/task.c
@@ -149,7 +149,7 @@ typedef struct TaskThreadLocalStorage {
* without "interrupting" for task execution.
*
* We try to accumulate as much tasks as possible in a local queue without
- * any locks first, and then we push all of them into a scheduler's queue
+ * any locks first, and then we push all of them into a schedulers queue
* from within a single mutex lock.
*/
bool do_delayed_push;
diff --git a/source/blender/blenloader/BLO_blend_defs.h b/source/blender/blenloader/BLO_blend_defs.h
index 0787d054141..fec61605dca 100644
--- a/source/blender/blenloader/BLO_blend_defs.h
+++ b/source/blender/blenloader/BLO_blend_defs.h
@@ -18,7 +18,7 @@
/** \file
* \ingroup blenloader
- * \brief defines for blendfile codes
+ * \brief defines for blend-file codes.
*/
/* INTEGER CODES */
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 8944dfdb711..adf3bf00d48 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -41,7 +41,6 @@ struct UserDef;
struct View3D;
struct ViewLayer;
struct WorkSpace;
-struct bContext;
struct bScreen;
struct wmWindowManager;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 44bb07d87f8..2a036d7f4ea 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -222,7 +222,7 @@
* which keeps large arrays in memory from data-blocks we may not even use.
*
* \note This is disabled when using compression,
- * while zlib supports seek ist's unusably slow, see: T61880.
+ * while zlib supports seek it's unusably slow, see: T61880.
*/
#define USE_BHEAD_READ_ON_DEMAND
@@ -271,13 +271,13 @@ typedef struct BHeadN {
* because ID names are used in lookup tables. */
#define BHEAD_USE_READ_ON_DEMAND(bhead) ((bhead)->code == DATA)
-/* this function ensures that reports are printed,
- * in the case of libraray linking errors this is important!
+/**
+ * This function ensures that reports are printed,
+ * in the case of library linking errors this is important!
*
* bit kludge but better then doubling up on prints,
* we could alternatively have a versions of a report function which forces printing - campbell
*/
-
void blo_reportf_wrap(ReportList *reports, ReportType type, const char *format, ...)
{
char fixed_buf[1024]; /* should be long enough */
@@ -533,7 +533,7 @@ static void split_libdata(ListBase *lb_src, Main **lib_main_array, const uint li
if (id->lib) {
if (((uint)id->lib->temp_index < lib_main_array_len) &&
- /* this check should never fail, just incase 'id->lib' is a dangling pointer. */
+ /* this check should never fail, just in case 'id->lib' is a dangling pointer. */
(lib_main_array[id->lib->temp_index]->curlib == id->lib)) {
Main *mainvar = lib_main_array[id->lib->temp_index];
ListBase *lb_dst = which_libbase(mainvar, GS(id->name));
@@ -679,8 +679,10 @@ static Main *blo_find_main(FileData *fd, const char *filepath, const char *relab
/* Add library data-block itself to 'main' Main, since libraries are **never** linked data.
* Fixes bug where you could end with all ID_LI data-blocks having the same name... */
lib = BKE_libblock_alloc(mainlist->first, ID_LI, BLI_path_basename(filepath), 0);
- lib->id.us = ID_FAKE_USERS(
- lib); /* Important, consistency with main ID reading code from read_libblock(). */
+
+ /* Important, consistency with main ID reading code from read_libblock(). */
+ lib->id.us = ID_FAKE_USERS(lib);
+
BLI_strncpy(lib->name, filepath, sizeof(lib->name));
BLI_strncpy(lib->filepath, name1, sizeof(lib->filepath));
@@ -2496,16 +2498,13 @@ static void IDP_DirectLinkProperty(IDProperty *prop, int switch_endian, FileData
IDP_DirectLinkIDPArray(prop, switch_endian, fd);
break;
case IDP_DOUBLE:
- /* erg, stupid doubles. since I'm storing them
- * in the same field as int val; val2 in the
- * IDPropertyData struct, they have to deal with
- * endianness specifically
+ /* Workaround for doubles.
+ * They are stored in the same field as `int val, val2` in the IDPropertyData struct,
+ * they have to deal with endianness specifically.
*
- * in theory, val and val2 would've already been swapped
+ * In theory, val and val2 would've already been swapped
* if switch_endian is true, so we have to first unswap
- * them then reswap them as a single 64-bit entity.
- */
-
+ * them then re-swap them as a single 64-bit entity. */
if (switch_endian) {
BLI_endian_switch_int32(&prop->data.val);
BLI_endian_switch_int32(&prop->data.val2);
@@ -3367,8 +3366,10 @@ static void direct_link_workspace(FileData *fd, WorkSpace *workspace, const Main
for (WorkSpaceDataRelation *relation = workspace->hook_layout_relations.first; relation;
relation = relation->next) {
- relation->parent = newglobadr(
- fd, relation->parent); /* data from window - need to access through global oldnew-map */
+
+ /* data from window - need to access through global oldnew-map */
+ relation->parent = newglobadr(fd, relation->parent);
+
relation->value = newdataadr(fd, relation->value);
}
@@ -4894,21 +4895,13 @@ static void lib_link_mesh(FileData *fd, Main *main)
G_MAIN = gmain;
}
- /*
- * Re-tessellate, even if the polys were just created from tessfaces, this
- * is important because it:
- * - fill the CD_ORIGINDEX layer
- * - gives consistency of tessface between loading from a file and
- * converting an edited BMesh back into a mesh (i.e. it replaces
- * quad tessfaces in a loaded mesh immediately, instead of lazily
- * waiting until edit mode has been entered/exited, making it easier
- * to recognize problems that would otherwise only show up after edits).
- */
-#ifdef USE_TESSFACE_DEFAULT
- BKE_mesh_tessface_calc(me);
-#else
+ /* Deprecated, only kept for conversion. */
BKE_mesh_tessface_clear(me);
-#endif
+
+ /* Moved from do_versions because we need updated polygons for calculating normals. */
+ if (MAIN_VERSION_OLDER(main, 256, 6)) {
+ BKE_mesh_calc_normals(me);
+ }
me->id.tag &= ~LIB_TAG_NEED_LINK;
}
@@ -5841,7 +5834,7 @@ static void direct_link_gpencil_modifiers(FileData *fd, ListBase *lb)
if (gpmd->curve_thickness) {
direct_link_curvemapping(fd, gpmd->curve_thickness);
/* initialize the curve. Maybe this could be moved to modififer logic */
- curvemapping_initialize(gpmd->curve_thickness);
+ BKE_curvemapping_initialize(gpmd->curve_thickness);
}
}
}
@@ -7682,8 +7675,8 @@ static void direct_link_windowmanager(FileData *fd, wmWindowManager *wm)
win->addmousemove = true;
win->stereo3d_format = newdataadr(fd, win->stereo3d_format);
- /* multiview always fallback to anaglyph at file opening
- * otherwise quadbuffer saved files can break Blender */
+ /* Multi-view always fallback to anaglyph at file opening
+ * otherwise quad-buffer saved files can break Blender. */
if (win->stereo3d_format) {
win->stereo3d_format->display_mode = S3D_DISPLAY_ANAGLYPH;
}
@@ -8940,6 +8933,37 @@ static void direct_link_linestyle(FileData *fd, FreestyleLineStyle *linestyle)
/** \name Read Library Data Block
* \{ */
+static ID *create_placeholder(Main *mainvar, const short idcode, const char *idname, const int tag)
+{
+ ListBase *lb = which_libbase(mainvar, idcode);
+ ID *ph_id = BKE_libblock_alloc_notest(idcode);
+
+ *((short *)ph_id->name) = idcode;
+ BLI_strncpy(ph_id->name + 2, idname, sizeof(ph_id->name) - 2);
+ BKE_libblock_init_empty(ph_id);
+ ph_id->lib = mainvar->curlib;
+ ph_id->tag = tag | LIB_TAG_MISSING;
+ ph_id->us = ID_FAKE_USERS(ph_id);
+ ph_id->icon_id = 0;
+
+ BLI_addtail(lb, ph_id);
+ id_sort_by_name(lb, ph_id);
+
+ return ph_id;
+}
+
+static void placeholders_ensure_valid(Main *bmain)
+{
+ /* Placeholder ObData IDs won't have any material, we have to update their objects for that,
+ * otherwise the inconsistency between both will lead to crashes (especially in Eevee?). */
+ for (Object *ob = bmain->objects.first; ob != NULL; ob = ob->id.next) {
+ ID *obdata = ob->data;
+ if (obdata != NULL && obdata->tag & LIB_TAG_MISSING) {
+ test_object_materials(bmain, ob, obdata);
+ }
+ }
+}
+
static const char *dataname(short id_code)
{
switch (id_code) {
@@ -9125,8 +9149,9 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const int ta
/* do after read_struct, for dna reconstruct */
lb = which_libbase(main, idcode);
if (lb) {
- oldnewmap_insert(
- fd->libmap, bhead->old, id, bhead->code); /* for ID_LINK_PLACEHOLDER check */
+ /* for ID_LINK_PLACEHOLDER check */
+ oldnewmap_insert(fd->libmap, bhead->old, id, bhead->code);
+
BLI_addtail(lb, id);
}
else {
@@ -9156,7 +9181,7 @@ static BHead *read_libblock(FileData *fd, Main *main, BHead *bhead, const int ta
* flags dependency graph does not do animation update to avoid loss of unkeyed changes.,
* which conflicts with undo/redo of changes to animation data itself.
*
- * But for regular file load we clear the flag, since the flags might have been changed sinde
+ * But for regular file load we clear the flag, since the flags might have been changed since
* the version the file has been saved with. */
if (!fd->memfile) {
id->recalc = 0;
@@ -9395,8 +9420,8 @@ static void do_versions_userdef(FileData *fd, BlendFileData *bfd)
/* Themes for Node and Sequence editor were not using grid color,
* but back. we copy this over then. */
for (btheme = user->themes.first; btheme; btheme = btheme->next) {
- copy_v4_v4_char(btheme->space_node.grid, btheme->space_node.back);
- copy_v4_v4_char(btheme->space_sequencer.grid, btheme->space_sequencer.back);
+ copy_v4_v4_uchar(btheme->space_node.grid, btheme->space_node.back);
+ copy_v4_v4_uchar(btheme->space_sequencer.grid, btheme->space_sequencer.back);
}
}
@@ -9456,7 +9481,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* don't forget to set version number in BKE_blender_version.h! */
}
-static void do_versions_after_linking(Main *main)
+static void do_versions_after_linking(Main *main, ReportList *reports)
{
// printf("%s for %s (%s), %d.%d\n", __func__, main->curlib ? main->curlib->name : main->name,
// main->curlib ? "LIB" : "MAIN", main->versionfile, main->subversionfile);
@@ -9464,7 +9489,7 @@ static void do_versions_after_linking(Main *main)
do_versions_after_linking_250(main);
do_versions_after_linking_260(main);
do_versions_after_linking_270(main);
- do_versions_after_linking_280(main);
+ do_versions_after_linking_280(main, reports);
do_versions_after_linking_cycles(main);
}
@@ -9493,8 +9518,10 @@ static void lib_link_all(FileData *fd, Main *main)
lib_link_material(fd, main);
lib_link_texture(fd, main);
lib_link_image(fd, main);
- lib_link_ipo(
- fd, main); /* XXX deprecated... still needs to be maintained for version patches still */
+
+ /* XXX deprecated... still needs to be maintained for version patches still. */
+ lib_link_ipo(fd, main);
+
lib_link_key(fd, main);
lib_link_world(fd, main);
lib_link_light(fd, main);
@@ -9508,8 +9535,10 @@ static void lib_link_all(FileData *fd, Main *main)
lib_link_armature(fd, main);
lib_link_action(fd, main);
lib_link_vfont(fd, main);
- lib_link_nodetree(fd,
- main); /* has to be done after scene/materials, this will verify group nodes */
+
+ /* Has to be done after scene/materials, this will verify group nodes. */
+ lib_link_nodetree(fd, main);
+
lib_link_palette(fd, main);
lib_link_brush(fd, main);
lib_link_paint_curve(fd, main);
@@ -9767,7 +9796,7 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
blo_split_main(&mainlist, bfd->main);
for (Main *mainvar = mainlist.first; mainvar; mainvar = mainvar->next) {
BLI_assert(mainvar->versionfile != 0);
- do_versions_after_linking(mainvar);
+ do_versions_after_linking(mainvar, fd->reports);
}
blo_join_main(&mainlist);
@@ -9775,6 +9804,8 @@ BlendFileData *blo_read_file_internal(FileData *fd, const char *filepath)
ntreeUpdateAllNew(bfd->main);
}
+ placeholders_ensure_valid(bfd->main);
+
BKE_main_id_tag_all(bfd->main, LIB_TAG_NEW, false);
/* Now that all our data-blocks are loaded,
@@ -11096,6 +11127,19 @@ static bool object_in_any_scene(Main *bmain, Object *ob)
return false;
}
+static bool object_in_any_collection(Main *bmain, Object *ob)
+{
+ Collection *collection;
+
+ for (collection = bmain->collections.first; collection; collection = collection->id.next) {
+ if (BKE_collection_has_object(collection, ob)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
static void add_loose_objects_to_scene(Main *mainvar,
Main *bmain,
Scene *scene,
@@ -11105,7 +11149,7 @@ static void add_loose_objects_to_scene(Main *mainvar,
const short flag)
{
Collection *active_collection = NULL;
- const bool is_link = (flag & FILE_LINK) != 0;
+ const bool do_append = (flag & FILE_LINK) == 0;
BLI_assert(scene);
@@ -11114,14 +11158,13 @@ static void add_loose_objects_to_scene(Main *mainvar,
for (Object *ob = mainvar->objects.first; ob; ob = ob->id.next) {
bool do_it = (ob->id.tag & LIB_TAG_DOIT) != 0;
if (do_it || ((ob->id.tag & LIB_TAG_INDIRECT) && (ob->id.tag & LIB_TAG_PRE_EXISTING) == 0)) {
- if (!is_link) {
+ if (do_append) {
if (ob->id.us == 0) {
do_it = true;
}
- else if ((ob->id.lib == lib) && (object_in_any_scene(bmain, ob) == 0)) {
- /* When appending, make sure any indirectly loaded objects get a base,
- * else they cant be accessed at all
- * (see T27437). */
+ else if ((ob->id.lib == lib) && (object_in_any_collection(bmain, ob) == 0)) {
+ /* When appending, make sure any indirectly loaded object gets a base,
+ * when they are not part of any collection yet. */
do_it = true;
}
}
@@ -11171,8 +11214,6 @@ static void add_collections_to_scene(Main *mainvar,
Library *lib,
const short flag)
{
- const bool do_append = (flag & FILE_LINK) == 0;
-
Collection *active_collection = scene->master_collection;
if (flag & FILE_ACTIVE_COLLECTION) {
LayerCollection *lc = BKE_layer_collection_get_active(view_layer);
@@ -11211,12 +11252,10 @@ static void add_collections_to_scene(Main *mainvar,
ob->transflag |= OB_DUPLICOLLECTION;
copy_v3_v3(ob->loc, scene->cursor.location);
}
- /* We do not want to force instantiation of indirectly linked collections...
- * Except when we are appending (since in that case, we'll end up instantiating all objects,
- * it's better to do it via their own collections if possible).
- * Reports showing that desired difference in behaviors between link and append:
- * See T62570, T61796. */
- else if (do_append || (collection->id.tag & LIB_TAG_INDIRECT) == 0) {
+ /* We do not want to force instantiation of indirectly linked collections,
+ * not even when appending. Users can now easily instantiate collections (and their objects)
+ * as needed by themselves. See T67032. */
+ else if ((collection->id.tag & LIB_TAG_INDIRECT) == 0) {
bool do_add_collection = (collection->id.tag & LIB_TAG_DOIT) != 0;
if (!do_add_collection) {
/* We need to check that objects in that collections are already instantiated in a scene.
@@ -11228,9 +11267,8 @@ static void add_collections_to_scene(Main *mainvar,
for (CollectionObject *coll_ob = collection->gobject.first; coll_ob != NULL;
coll_ob = coll_ob->next) {
Object *ob = coll_ob->ob;
- if ((ob->id.tag & LIB_TAG_PRE_EXISTING) == 0 && (ob->id.tag & LIB_TAG_DOIT) == 0 &&
- (do_append || (ob->id.tag & LIB_TAG_INDIRECT) == 0) && (ob->id.lib == lib) &&
- (object_in_any_scene(bmain, ob) == 0)) {
+ if ((ob->id.tag & (LIB_TAG_PRE_EXISTING | LIB_TAG_DOIT | LIB_TAG_INDIRECT)) == 0 &&
+ (ob->id.lib == lib) && (object_in_any_scene(bmain, ob) == 0)) {
do_add_collection = true;
break;
}
@@ -11252,6 +11290,7 @@ static void add_collections_to_scene(Main *mainvar,
}
}
+ /* Those are kept for safety and consistency, but should not be needed anymore? */
collection->id.tag &= ~LIB_TAG_INDIRECT;
collection->id.tag |= LIB_TAG_EXTERN;
}
@@ -11259,25 +11298,6 @@ static void add_collections_to_scene(Main *mainvar,
}
}
-static ID *create_placeholder(Main *mainvar, const short idcode, const char *idname, const int tag)
-{
- ListBase *lb = which_libbase(mainvar, idcode);
- ID *ph_id = BKE_libblock_alloc_notest(idcode);
-
- *((short *)ph_id->name) = idcode;
- BLI_strncpy(ph_id->name + 2, idname, sizeof(ph_id->name) - 2);
- BKE_libblock_init_empty(ph_id);
- ph_id->lib = mainvar->curlib;
- ph_id->tag = tag | LIB_TAG_MISSING;
- ph_id->us = ID_FAKE_USERS(ph_id);
- ph_id->icon_id = 0;
-
- BLI_addtail(lb, ph_id);
- id_sort_by_name(lb, ph_id);
-
- return ph_id;
-}
-
/* returns true if the item was found
* but it may already have already been appended/linked */
static ID *link_named_part(
@@ -11547,7 +11567,7 @@ static void library_link_end(Main *mainl,
* or they will go again through do_versions - bad, very bad! */
split_main_newid(mainvar, main_newid);
- do_versions_after_linking(main_newid);
+ do_versions_after_linking(main_newid, (*fd)->reports);
add_main_to_main(mainvar, main_newid);
}
@@ -11559,10 +11579,12 @@ static void library_link_end(Main *mainl,
/* After all data has been read and versioned, uses LIB_TAG_NEW. */
ntreeUpdateAllNew(mainvar);
+ placeholders_ensure_valid(mainvar);
+
BKE_main_id_tag_all(mainvar, LIB_TAG_NEW, false);
- fix_relpaths_library(BKE_main_blendfile_path(mainvar),
- mainvar); /* make all relative paths, relative to the open blend file */
+ /* Make all relative paths, relative to the open blend file. */
+ fix_relpaths_library(BKE_main_blendfile_path(mainvar), mainvar);
/* Give a base to loose objects and collections.
* Only directly linked objects & collections are instantiated by
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index 7cd5bb7ac93..10ee3d52a74 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -187,7 +187,7 @@ void blo_do_versions_cycles(struct FileData *fd, struct Library *lib, struct Mai
void do_versions_after_linking_250(struct Main *bmain);
void do_versions_after_linking_260(struct Main *bmain);
void do_versions_after_linking_270(struct Main *bmain);
-void do_versions_after_linking_280(struct Main *bmain);
+void do_versions_after_linking_280(struct Main *bmain, ReportList *reports);
void do_versions_after_linking_cycles(struct Main *bmain);
#endif
diff --git a/source/blender/blenloader/intern/versioning_250.c b/source/blender/blenloader/intern/versioning_250.c
index 81751a6ed07..ba4dc2d33c7 100644
--- a/source/blender/blenloader/intern/versioning_250.c
+++ b/source/blender/blenloader/intern/versioning_250.c
@@ -1555,7 +1555,7 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
for (sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_IMAGE) {
SpaceImage *sima = (SpaceImage *)sl;
- scopes_new(&sima->scopes);
+ BKE_scopes_new(&sima->scopes);
}
}
}
@@ -2080,11 +2080,12 @@ void blo_do_versions_250(FileData *fd, Library *lib, Main *bmain)
}
}
- if (bmain->versionfile < 256 || (bmain->versionfile == 256 && bmain->subversionfile < 6)) {
- Mesh *me;
-
- for (me = bmain->meshes.first; me; me = me->id.next) {
- BKE_mesh_calc_normals_tessface(me->mvert, me->totvert, me->mface, me->totface, NULL);
+ if (0) {
+ if (bmain->versionfile < 256 || (bmain->versionfile == 256 && bmain->subversionfile < 6)) {
+ for (Mesh *me = bmain->meshes.first; me; me = me->id.next) {
+ /* Vertex normal calculation from legacy 'MFace' has been removed.
+ * update after calculating polygons in file reading code instead. */
+ }
}
}
diff --git a/source/blender/blenloader/intern/versioning_260.c b/source/blender/blenloader/intern/versioning_260.c
index 7b0aab99aea..6f5c37d716e 100644
--- a/source/blender/blenloader/intern/versioning_260.c
+++ b/source/blender/blenloader/intern/versioning_260.c
@@ -264,7 +264,7 @@ static void do_versions_nodetree_multi_file_output_format_2_62_1(Scene *sce, bNo
/* if z buffer is saved, change the image type to multilayer exr.
* XXX this is slightly messy, Z buffer was ignored before for anything but EXR and IRIS ...
- * i'm just assuming here that IRIZ means IRIS with z buffer ...
+ * I'm just assuming here that IRIZ means IRIS with z buffer ...
*/
if (old_data && ELEM(old_data->im_format.imtype, R_IMF_IMTYPE_IRIZ, R_IMF_IMTYPE_OPENEXR)) {
char sockpath[FILE_MAX];
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index 3dc79308f64..b61692799ed 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1103,9 +1103,9 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
Scene *scene;
for (scene = bmain->scenes.first; scene != NULL; scene = scene->id.next) {
CurveMapping *curve_mapping = &scene->r.mblur_shutter_curve;
- curvemapping_set_defaults(curve_mapping, 1, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(curve_mapping);
- curvemap_reset(
+ BKE_curvemapping_set_defaults(curve_mapping, 1, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(curve_mapping);
+ BKE_curvemap_reset(
curve_mapping->cm, &curve_mapping->clipr, CURVE_PRESET_MAX, CURVEMAP_SLOPE_POS_NEG);
}
}
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 1a79b7c9b5a..d2017864192 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -125,8 +125,8 @@ static void do_version_workspaces_create_from_screens(Main *bmain)
}
if (screen_parent) {
- /* fullscreen with "Back to Previous" option, don't create
- * a new workspace, add layout workspace containing parent */
+ /* Full-screen with "Back to Previous" option, don't create
+ * a new workspace, add layout workspace containing parent. */
workspace = BLI_findstring(
&bmain->workspaces, screen_parent->id.name + 2, offsetof(ID, name) + 2);
}
@@ -734,7 +734,98 @@ static void do_versions_seq_alloc_transform_and_crop(ListBase *seqbase)
}
}
-void do_versions_after_linking_280(Main *bmain)
+/* Return true if there is something to convert. */
+static void do_versions_material_convert_legacy_blend_mode(bNodeTree *ntree, char blend_method)
+{
+ bool need_update = false;
+
+ /* Iterate backwards from end so we don't encounter newly added links. */
+ bNodeLink *prevlink;
+ for (bNodeLink *link = ntree->links.last; link; link = prevlink) {
+ prevlink = link->prev;
+
+ /* Detect link to replace. */
+ bNode *fromnode = link->fromnode;
+ bNodeSocket *fromsock = link->fromsock;
+ bNode *tonode = link->tonode;
+ bNodeSocket *tosock = link->tosock;
+
+ if (!(tonode->type == SH_NODE_OUTPUT_MATERIAL && STREQ(tosock->identifier, "Surface"))) {
+ continue;
+ }
+
+ /* Only do outputs that are enabled for EEVEE */
+ if (!ELEM(tonode->custom1, SHD_OUTPUT_ALL, SHD_OUTPUT_EEVEE)) {
+ continue;
+ }
+
+ if (blend_method == 1 /* MA_BM_ADD */) {
+ nodeRemLink(ntree, link);
+
+ bNode *add_node = nodeAddStaticNode(NULL, ntree, SH_NODE_ADD_SHADER);
+ add_node->locx = 0.5f * (fromnode->locx + tonode->locx);
+ add_node->locy = 0.5f * (fromnode->locy + tonode->locy);
+
+ bNodeSocket *shader1_socket = add_node->inputs.first;
+ bNodeSocket *shader2_socket = add_node->inputs.last;
+ bNodeSocket *add_socket = nodeFindSocket(add_node, SOCK_OUT, "Shader");
+
+ bNode *transp_node = nodeAddStaticNode(NULL, ntree, SH_NODE_BSDF_TRANSPARENT);
+ transp_node->locx = add_node->locx;
+ transp_node->locy = add_node->locy - 110.0f;
+
+ bNodeSocket *transp_socket = nodeFindSocket(transp_node, SOCK_OUT, "BSDF");
+
+ /* Link to input and material output node. */
+ nodeAddLink(ntree, fromnode, fromsock, add_node, shader1_socket);
+ nodeAddLink(ntree, transp_node, transp_socket, add_node, shader2_socket);
+ nodeAddLink(ntree, add_node, add_socket, tonode, tosock);
+
+ need_update = true;
+ }
+ else if (blend_method == 2 /* MA_BM_MULTIPLY */) {
+ nodeRemLink(ntree, link);
+
+ bNode *transp_node = nodeAddStaticNode(NULL, ntree, SH_NODE_BSDF_TRANSPARENT);
+
+ bNodeSocket *color_socket = nodeFindSocket(transp_node, SOCK_IN, "Color");
+ bNodeSocket *transp_socket = nodeFindSocket(transp_node, SOCK_OUT, "BSDF");
+
+ /* If incomming link is from a closure socket, we need to convert it. */
+ if (fromsock->type == SOCK_SHADER) {
+ transp_node->locx = 0.33f * fromnode->locx + 0.66f * tonode->locx;
+ transp_node->locy = 0.33f * fromnode->locy + 0.66f * tonode->locy;
+
+ bNode *shtorgb_node = nodeAddStaticNode(NULL, ntree, SH_NODE_SHADERTORGB);
+ shtorgb_node->locx = 0.66f * fromnode->locx + 0.33f * tonode->locx;
+ shtorgb_node->locy = 0.66f * fromnode->locy + 0.33f * tonode->locy;
+
+ bNodeSocket *shader_socket = nodeFindSocket(shtorgb_node, SOCK_IN, "Shader");
+ bNodeSocket *rgba_socket = nodeFindSocket(shtorgb_node, SOCK_OUT, "Color");
+
+ nodeAddLink(ntree, fromnode, fromsock, shtorgb_node, shader_socket);
+ nodeAddLink(ntree, shtorgb_node, rgba_socket, transp_node, color_socket);
+ }
+ else {
+ transp_node->locx = 0.5f * (fromnode->locx + tonode->locx);
+ transp_node->locy = 0.5f * (fromnode->locy + tonode->locy);
+
+ nodeAddLink(ntree, fromnode, fromsock, transp_node, color_socket);
+ }
+
+ /* Link to input and material output node. */
+ nodeAddLink(ntree, transp_node, transp_socket, tonode, tosock);
+
+ need_update = true;
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
+void do_versions_after_linking_280(Main *bmain, ReportList *UNUSED(reports))
{
bool use_collection_compat_28 = true;
@@ -1129,6 +1220,28 @@ void do_versions_after_linking_280(Main *bmain)
camera->dof_ob = NULL;
}
}
+
+ if (!MAIN_VERSION_ATLEAST(bmain, 281, 2)) {
+ /* Replace Multiply and Additive blend mode by Alpha Blend
+ * now that we use dualsource blending. */
+ /* We take care of doing only nodetrees that are always part of materials
+ * with old blending modes. */
+ for (Material *ma = bmain->materials.first; ma; ma = ma->id.next) {
+ bNodeTree *ntree = ma->nodetree;
+ if (ma->blend_method == 1 /* MA_BM_ADD */) {
+ if (ma->use_nodes) {
+ do_versions_material_convert_legacy_blend_mode(ntree, 1 /* MA_BM_ADD */);
+ }
+ ma->blend_method = MA_BM_BLEND;
+ }
+ else if (ma->blend_method == 2 /* MA_BM_MULTIPLY */) {
+ if (ma->use_nodes) {
+ do_versions_material_convert_legacy_blend_mode(ntree, 2 /* MA_BM_MULTIPLY */);
+ }
+ ma->blend_method = MA_BM_BLEND;
+ }
+ }
+ }
}
/* NOTE: This version patch is intended for versions < 2.52.2,
@@ -1347,12 +1460,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
/* sculpt brushes */
GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
if ((gset) && (gset->cur_falloff == NULL)) {
- gset->cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(gset->cur_falloff);
- curvemap_reset(gset->cur_falloff->cm,
- &gset->cur_falloff->clipr,
- CURVE_PRESET_GAUSS,
- CURVEMAP_SLOPE_POSITIVE);
+ gset->cur_falloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(gset->cur_falloff);
+ BKE_curvemap_reset(gset->cur_falloff->cm,
+ &gset->cur_falloff->clipr,
+ CURVE_PRESET_GAUSS,
+ CURVEMAP_SLOPE_POSITIVE);
}
}
}
@@ -2668,9 +2781,9 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
navigation_region = MEM_callocN(sizeof(ARegion),
"userpref navigation-region do_versions");
- BLI_insertlinkbefore(regionbase,
- main_region,
- navigation_region); /* order matters, addhead not addtail! */
+ /* Order matters, addhead not addtail! */
+ BLI_insertlinkbefore(regionbase, main_region, navigation_region);
+
navigation_region->regiontype = RGN_TYPE_NAV_BAR;
navigation_region->alignment = RGN_ALIGN_LEFT;
}
@@ -2748,12 +2861,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
for (Scene *scene = bmain->scenes.first; scene; scene = scene->id.next) {
GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
if ((gset) && (gset->cur_primitive == NULL)) {
- gset->cur_primitive = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
- curvemapping_initialize(gset->cur_primitive);
- curvemap_reset(gset->cur_primitive->cm,
- &gset->cur_primitive->clipr,
- CURVE_PRESET_BELL,
- CURVEMAP_SLOPE_POSITIVE);
+ gset->cur_primitive = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ BKE_curvemapping_initialize(gset->cur_primitive);
+ BKE_curvemap_reset(gset->cur_primitive->cm,
+ &gset->cur_primitive->clipr,
+ CURVE_PRESET_BELL,
+ CURVEMAP_SLOPE_POSITIVE);
}
}
}
@@ -3407,11 +3520,11 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
ARegion *ar = NULL;
if (sl->spacetype == SPACE_CLIP) {
if (((SpaceClip *)sl)->view == SC_VIEW_GRAPH) {
- ar = do_versions_find_region(regionbase, RGN_TYPE_PREVIEW);
+ ar = do_versions_find_region_or_null(regionbase, RGN_TYPE_PREVIEW);
}
}
else {
- ar = do_versions_find_region(regionbase, RGN_TYPE_WINDOW);
+ ar = do_versions_find_region_or_null(regionbase, RGN_TYPE_WINDOW);
}
if (ar != NULL) {
@@ -3549,6 +3662,37 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
+ if (!MAIN_VERSION_ATLEAST(bmain, 281, 3)) {
+ if (U.view_rotate_sensitivity_turntable == 0) {
+ U.view_rotate_sensitivity_turntable = DEG2RADF(0.4f);
+ U.view_rotate_sensitivity_trackball = 1.0f;
+ }
+ for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_TEXT) {
+ ListBase *regionbase = (sl == sa->spacedata.first) ? &sa->regionbase : &sl->regionbase;
+ ARegion *ar = do_versions_find_region_or_null(regionbase, RGN_TYPE_UI);
+ if (ar) {
+ ar->alignment = RGN_ALIGN_RIGHT;
+ }
+ }
+ /* Mark outliners as dirty for syncing and enable synced selection */
+ if (sl->spacetype == SPACE_OUTLINER) {
+ SpaceOutliner *soutliner = (SpaceOutliner *)sl;
+ soutliner->sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_ALL;
+ soutliner->flag |= SO_SYNC_SELECT;
+ }
+ }
+ }
+ }
+ for (Mesh *mesh = bmain->meshes.first; mesh; mesh = mesh->id.next) {
+ if (mesh->remesh_voxel_size == 0.0f) {
+ mesh->remesh_voxel_size = 0.1f;
+ }
+ }
+ }
+
{
/* Versioning code until next subversion bump goes here. */
}
diff --git a/source/blender/blenloader/intern/versioning_cycles.c b/source/blender/blenloader/intern/versioning_cycles.c
index 92113723aab..a3e9b8dc206 100644
--- a/source/blender/blenloader/intern/versioning_cycles.c
+++ b/source/blender/blenloader/intern/versioning_cycles.c
@@ -26,6 +26,7 @@
#include "BLI_math.h"
#include "BLI_string.h"
+#include "BLI_listbase.h"
#include "BLI_utildefines.h"
#include "DNA_color_types.h"
@@ -44,6 +45,11 @@
#include "BLO_readfile.h"
#include "readfile.h"
+static bool socket_is_used(bNodeSocket *sock)
+{
+ return sock->flag & SOCK_IN_USE;
+}
+
static float *cycles_node_socket_float_value(bNodeSocket *socket)
{
bNodeSocketValueFloat *socket_data = socket->default_value;
@@ -56,6 +62,12 @@ static float *cycles_node_socket_rgba_value(bNodeSocket *socket)
return socket_data->value;
}
+static float *cycles_node_socket_vector_value(bNodeSocket *socket)
+{
+ bNodeSocketValueVector *socket_data = socket->default_value;
+ return socket_data->value;
+}
+
static IDProperty *cycles_properties_from_ID(ID *id)
{
IDProperty *idprop = IDP_GetProperties(id, false);
@@ -185,7 +197,7 @@ static void square_roughness_node_insert(bNodeTree *ntree)
/* Add sqrt node. */
bNode *node = nodeAddStaticNode(NULL, ntree, SH_NODE_MATH);
- node->custom1 = NODE_MATH_POW;
+ node->custom1 = NODE_MATH_POWER;
node->locx = 0.5f * (fromnode->locx + tonode->locx);
node->locy = 0.5f * (fromnode->locy + tonode->locy);
@@ -231,7 +243,7 @@ static void vector_curve_node_remap(bNode *node)
}
}
- curvemapping_changed_all(mapping);
+ BKE_curvemapping_changed_all(mapping);
}
}
@@ -385,6 +397,365 @@ static void light_emission_unify(Light *light, const char *engine)
}
}
+/* The B input of the Math node is no longer used for single-operand operators.
+ * Previously, if the B input was linked and the A input was not, the B input
+ * was used as the input of the operator. To correct this, we move the link
+ * from B to A if B is linked and A is not.
+ */
+static void update_math_node_single_operand_operators(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_MATH) {
+ if (ELEM(node->custom1,
+ NODE_MATH_SQRT,
+ NODE_MATH_CEIL,
+ NODE_MATH_SINE,
+ NODE_MATH_ROUND,
+ NODE_MATH_FLOOR,
+ NODE_MATH_COSINE,
+ NODE_MATH_ARCSINE,
+ NODE_MATH_TANGENT,
+ NODE_MATH_ABSOLUTE,
+ NODE_MATH_FRACTION,
+ NODE_MATH_ARCCOSINE,
+ NODE_MATH_ARCTANGENT)) {
+ bNodeSocket *sockA = BLI_findlink(&node->inputs, 0);
+ bNodeSocket *sockB = BLI_findlink(&node->inputs, 1);
+ if (!sockA->link && sockB->link) {
+ nodeAddLink(ntree, sockB->link->fromnode, sockB->link->fromsock, node, sockA);
+ nodeRemLink(ntree, sockB->link);
+ need_update = true;
+ }
+ }
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
+/* The Value output of the Vector Math node is no longer available in the Add
+ * and Subtract operators. Previously, this Value output was computed from the
+ * Vector output V as follows:
+ *
+ * Value = (abs(V.x) + abs(V.y) + abs(V.z)) / 3
+ *
+ * Or more compactly using vector operators:
+ *
+ * Value = dot(abs(V), (1 / 3, 1 / 3, 1 / 3))
+ *
+ * To correct this, if the Value output was used, we are going to compute
+ * it using the second equation by adding an absolute and a dot node, and
+ * then connect them appropriately.
+ */
+static void update_vector_math_node_add_and_subtract_operators(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ bNodeSocket *sockOutValue = nodeFindSocket(node, SOCK_OUT, "Value");
+ if (socket_is_used(sockOutValue) &&
+ ELEM(node->custom1, NODE_VECTOR_MATH_ADD, NODE_VECTOR_MATH_SUBTRACT)) {
+
+ bNode *absNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ absNode->custom1 = NODE_VECTOR_MATH_ABSOLUTE;
+ absNode->locx = node->locx + node->width + 20.0f;
+ absNode->locy = node->locy;
+
+ bNode *dotNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ dotNode->custom1 = NODE_VECTOR_MATH_DOT_PRODUCT;
+ dotNode->locx = absNode->locx + absNode->width + 20.0f;
+ dotNode->locy = absNode->locy;
+ bNodeSocket *sockDotB = BLI_findlink(&dotNode->inputs, 1);
+ bNodeSocket *sockDotOutValue = nodeFindSocket(dotNode, SOCK_OUT, "Value");
+ copy_v3_fl(cycles_node_socket_vector_value(sockDotB), 1 / 3.0f);
+
+ LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutValue) {
+ nodeAddLink(ntree, dotNode, sockDotOutValue, link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+
+ bNodeSocket *sockAbsA = BLI_findlink(&absNode->inputs, 0);
+ bNodeSocket *sockDotA = BLI_findlink(&dotNode->inputs, 0);
+ bNodeSocket *sockOutVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ bNodeSocket *sockAbsOutVector = nodeFindSocket(absNode, SOCK_OUT, "Vector");
+
+ nodeAddLink(ntree, node, sockOutVector, absNode, sockAbsA);
+ nodeAddLink(ntree, absNode, sockAbsOutVector, dotNode, sockDotA);
+
+ need_update = true;
+ }
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
+/* The Vector output of the Vector Math node is no longer available in the Dot
+ * Product operator. Previously, this Vector was always zero initialized. To
+ * correct this, we zero out any socket the Vector Output was connected to.
+ */
+static void update_vector_math_node_dot_product_operator(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ bNodeSocket *sockOutVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ if (socket_is_used(sockOutVector) && node->custom1 == NODE_VECTOR_MATH_DOT_PRODUCT) {
+ LISTBASE_FOREACH_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutVector) {
+ switch (link->tosock->type) {
+ case SOCK_FLOAT:
+ *cycles_node_socket_float_value(link->tosock) = 0.0f;
+ break;
+ case SOCK_VECTOR:
+ copy_v3_fl(cycles_node_socket_vector_value(link->tosock), 0.0f);
+ break;
+ case SOCK_RGBA:
+ copy_v4_fl(cycles_node_socket_rgba_value(link->tosock), 0.0f);
+ break;
+ }
+ nodeRemLink(ntree, link);
+ }
+ }
+ need_update = true;
+ }
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
+/* Previously, the Vector output of the cross product operator was normalized.
+ * To correct this, a Normalize node is added to normalize the output if used.
+ * Moreover, the Value output was removed. This Value was equal to the length
+ * of the cross product. To correct this, a Length node is added if needed.
+ */
+static void update_vector_math_node_cross_product_operator(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ if (node->custom1 == NODE_VECTOR_MATH_CROSS_PRODUCT) {
+ bNodeSocket *sockOutVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ if (socket_is_used(sockOutVector)) {
+ bNode *normalizeNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ normalizeNode->custom1 = NODE_VECTOR_MATH_NORMALIZE;
+ normalizeNode->locx = node->locx + node->width + 20.0f;
+ normalizeNode->locy = node->locy;
+ bNodeSocket *sockNormalizeOut = nodeFindSocket(normalizeNode, SOCK_OUT, "Vector");
+
+ LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutVector) {
+ nodeAddLink(ntree, normalizeNode, sockNormalizeOut, link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockNormalizeA = BLI_findlink(&normalizeNode->inputs, 0);
+ nodeAddLink(ntree, node, sockOutVector, normalizeNode, sockNormalizeA);
+
+ need_update = true;
+ }
+
+ bNodeSocket *sockOutValue = nodeFindSocket(node, SOCK_OUT, "Value");
+ if (socket_is_used(sockOutValue)) {
+ bNode *lengthNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ lengthNode->custom1 = NODE_VECTOR_MATH_LENGTH;
+ lengthNode->locx = node->locx + node->width + 20.0f;
+ if (socket_is_used(sockOutVector)) {
+ lengthNode->locy = node->locy - lengthNode->height - 20.0f;
+ }
+ else {
+ lengthNode->locy = node->locy;
+ }
+ bNodeSocket *sockLengthOut = nodeFindSocket(lengthNode, SOCK_OUT, "Value");
+
+ LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutValue) {
+ nodeAddLink(ntree, lengthNode, sockLengthOut, link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockLengthA = BLI_findlink(&lengthNode->inputs, 0);
+ nodeAddLink(ntree, node, sockOutVector, lengthNode, sockLengthA);
+
+ need_update = true;
+ }
+ }
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
+/* The Value output of the Vector Math node is no longer available in the
+ * Normalize operator. This Value output was equal to the length of the
+ * the input vector A. To correct this, we either add a Length node or
+ * convert the Normalize node into a Length node, depending on if the
+ * Vector output is needed.
+ */
+static void update_vector_math_node_normalize_operator(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ bNodeSocket *sockOutValue = nodeFindSocket(node, SOCK_OUT, "Value");
+ if (node->custom1 == NODE_VECTOR_MATH_NORMALIZE && socket_is_used(sockOutValue)) {
+ bNodeSocket *sockOutVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ if (socket_is_used(sockOutVector)) {
+ bNode *lengthNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ lengthNode->custom1 = NODE_VECTOR_MATH_LENGTH;
+ lengthNode->locx = node->locx + node->width + 20.0f;
+ lengthNode->locy = node->locy;
+ bNodeSocket *sockLengthValue = nodeFindSocket(lengthNode, SOCK_OUT, "Value");
+
+ LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutValue) {
+ nodeAddLink(ntree, lengthNode, sockLengthValue, link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockA = BLI_findlink(&node->inputs, 0);
+ bNodeSocket *sockLengthA = BLI_findlink(&lengthNode->inputs, 0);
+ if (sockA->link) {
+ bNodeLink *link = sockA->link;
+ nodeAddLink(ntree, link->fromnode, link->fromsock, lengthNode, sockLengthA);
+ }
+ else {
+ copy_v3_v3(cycles_node_socket_vector_value(sockLengthA),
+ cycles_node_socket_vector_value(sockA));
+ }
+
+ need_update = true;
+ }
+ else {
+ node->custom1 = NODE_VECTOR_MATH_LENGTH;
+ }
+ }
+ }
+ }
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
+/* The Vector Math operator types didn't have an enum, but rather, their
+ * values were hard coded into the code. After the enum was created and
+ * after more vector operators were added, the hard coded values needs
+ * to be remapped to their correct enum values. To fix this, we remap
+ * the values according to the following rules:
+ *
+ * Dot Product Operator : 3 -> 7
+ * Normalize Operator : 5 -> 11
+ *
+ * Additionally, since the Average operator was removed, it is assigned
+ * a value of -1 just to be identified later in the versioning code:
+ *
+ * Average Operator : 2 -> -1
+ *
+ */
+static void update_vector_math_node_operators_enum_mapping(bNodeTree *ntree)
+{
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ switch (node->custom1) {
+ case 2:
+ node->custom1 = -1;
+ break;
+ case 3:
+ node->custom1 = 7;
+ break;
+ case 5:
+ node->custom1 = 11;
+ break;
+ }
+ }
+ }
+}
+
+/* The Average operator is no longer available in the Vector Math node.
+ * The Vector output was equal to the normalized sum of input vectors while
+ * the Value output was equal to the length of the sum of input vectors.
+ * To correct this, we convert the node into an Add node and add a length
+ * node or a normalize node if needed.
+ */
+static void update_vector_math_node_average_operator(bNodeTree *ntree)
+{
+ bool need_update = false;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if (node->type == SH_NODE_VECTOR_MATH) {
+ /* See update_vector_math_node_operators_enum_mapping. */
+ if (node->custom1 == -1) {
+ node->custom1 = NODE_VECTOR_MATH_ADD;
+ bNodeSocket *sockOutVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ if (socket_is_used(sockOutVector)) {
+ bNode *normalizeNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ normalizeNode->custom1 = NODE_VECTOR_MATH_NORMALIZE;
+ normalizeNode->locx = node->locx + node->width + 20.0f;
+ normalizeNode->locy = node->locy;
+ bNodeSocket *sockNormalizeOut = nodeFindSocket(normalizeNode, SOCK_OUT, "Vector");
+
+ LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutVector) {
+ nodeAddLink(ntree, normalizeNode, sockNormalizeOut, link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockNormalizeA = BLI_findlink(&normalizeNode->inputs, 0);
+ nodeAddLink(ntree, node, sockOutVector, normalizeNode, sockNormalizeA);
+
+ need_update = true;
+ }
+
+ bNodeSocket *sockOutValue = nodeFindSocket(node, SOCK_OUT, "Value");
+ if (socket_is_used(sockOutValue)) {
+ bNode *lengthNode = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
+ lengthNode->custom1 = NODE_VECTOR_MATH_LENGTH;
+ lengthNode->locx = node->locx + node->width + 20.0f;
+ if (socket_is_used(sockOutVector)) {
+ lengthNode->locy = node->locy - lengthNode->height - 20.0f;
+ }
+ else {
+ lengthNode->locy = node->locy;
+ }
+ bNodeSocket *sockLengthOut = nodeFindSocket(lengthNode, SOCK_OUT, "Value");
+
+ LISTBASE_FOREACH_BACKWARD_MUTABLE (bNodeLink *, link, &ntree->links) {
+ if (link->fromsock == sockOutValue) {
+ nodeAddLink(ntree, lengthNode, sockLengthOut, link->tonode, link->tosock);
+ nodeRemLink(ntree, link);
+ }
+ }
+ bNodeSocket *sockLengthA = BLI_findlink(&lengthNode->inputs, 0);
+ nodeAddLink(ntree, node, sockOutVector, lengthNode, sockLengthA);
+
+ need_update = true;
+ }
+ }
+ }
+ }
+
+ if (need_update) {
+ ntreeUpdateTree(NULL, ntree);
+ }
+}
+
void blo_do_versions_cycles(FileData *UNUSED(fd), Library *UNUSED(lib), Main *bmain)
{
/* Particle shape shared with Eevee. */
@@ -417,6 +788,15 @@ void blo_do_versions_cycles(FileData *UNUSED(fd), Library *UNUSED(lib), Main *bm
}
}
}
+
+ if (!MAIN_VERSION_ATLEAST(bmain, 281, 3)) {
+ FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
+ if (ntree->type == NTREE_SHADER) {
+ update_vector_math_node_operators_enum_mapping(ntree);
+ }
+ }
+ FOREACH_NODETREE_END;
+ }
}
void do_versions_after_linking_cycles(Main *bmain)
@@ -526,4 +906,26 @@ void do_versions_after_linking_cycles(Main *bmain)
}
}
}
+
+ if (!MAIN_VERSION_ATLEAST(bmain, 281, 2)) {
+ FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
+ if (ntree->type == NTREE_SHADER) {
+ update_math_node_single_operand_operators(ntree);
+ }
+ }
+ FOREACH_NODETREE_END;
+ }
+
+ if (!MAIN_VERSION_ATLEAST(bmain, 281, 3)) {
+ FOREACH_NODETREE_BEGIN (bmain, ntree, id) {
+ if (ntree->type == NTREE_SHADER) {
+ update_vector_math_node_add_and_subtract_operators(ntree);
+ update_vector_math_node_dot_product_operator(ntree);
+ update_vector_math_node_cross_product_operator(ntree);
+ update_vector_math_node_normalize_operator(ntree);
+ update_vector_math_node_average_operator(ntree);
+ }
+ }
+ FOREACH_NODETREE_END;
+ }
}
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 14230752d1f..fa69892584a 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -268,22 +268,22 @@ static void blo_update_defaults_scene(Main *bmain, Scene *scene)
/* Be sure curfalloff and primitive are initializated */
ToolSettings *ts = scene->toolsettings;
if (ts->gp_sculpt.cur_falloff == NULL) {
- ts->gp_sculpt.cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ts->gp_sculpt.cur_falloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
CurveMapping *gp_falloff_curve = ts->gp_sculpt.cur_falloff;
- curvemapping_initialize(gp_falloff_curve);
- curvemap_reset(gp_falloff_curve->cm,
- &gp_falloff_curve->clipr,
- CURVE_PRESET_GAUSS,
- CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_initialize(gp_falloff_curve);
+ BKE_curvemap_reset(gp_falloff_curve->cm,
+ &gp_falloff_curve->clipr,
+ CURVE_PRESET_GAUSS,
+ CURVEMAP_SLOPE_POSITIVE);
}
if (ts->gp_sculpt.cur_primitive == NULL) {
- ts->gp_sculpt.cur_primitive = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ts->gp_sculpt.cur_primitive = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
CurveMapping *gp_primitive_curve = ts->gp_sculpt.cur_primitive;
- curvemapping_initialize(gp_primitive_curve);
- curvemap_reset(gp_primitive_curve->cm,
- &gp_primitive_curve->clipr,
- CURVE_PRESET_BELL,
- CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_initialize(gp_primitive_curve);
+ BKE_curvemap_reset(gp_primitive_curve->cm,
+ &gp_primitive_curve->clipr,
+ CURVE_PRESET_BELL,
+ CURVEMAP_SLOPE_POSITIVE);
}
/* Correct default startup UV's. */
diff --git a/source/blender/blenloader/intern/versioning_legacy.c b/source/blender/blenloader/intern/versioning_legacy.c
index 0f1d7cbf70f..9b6f252f62d 100644
--- a/source/blender/blenloader/intern/versioning_legacy.c
+++ b/source/blender/blenloader/intern/versioning_legacy.c
@@ -2094,8 +2094,8 @@ void blo_do_versions_pre250(FileData *fd, Library *lib, Main *bmain)
la->falloff_type = LA_FALLOFF_INVLINEAR;
if (la->curfalloff == NULL) {
- la->curfalloff = curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f);
- curvemapping_initialize(la->curfalloff);
+ la->curfalloff = BKE_curvemapping_add(1, 0.0f, 1.0f, 1.0f, 0.0f);
+ BKE_curvemapping_initialize(la->curfalloff);
}
}
}
diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c
index 709e6dc17b6..8bbfc29131e 100644
--- a/source/blender/blenloader/intern/versioning_userdef.c
+++ b/source/blender/blenloader/intern/versioning_userdef.c
@@ -51,12 +51,12 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
memcpy(btheme, &U_theme_default, sizeof(*btheme));
}
-#define FROM_DEFAULT_V4_UCHAR(member) copy_v4_v4_char(btheme->member, U_theme_default.member)
+#define FROM_DEFAULT_V4_UCHAR(member) copy_v4_v4_uchar(btheme->member, U_theme_default.member)
if (!USER_VERSION_ATLEAST(280, 25)) {
- copy_v4_v4_char(btheme->space_action.anim_preview_range, btheme->space_action.anim_active);
- copy_v4_v4_char(btheme->space_nla.anim_preview_range, btheme->space_nla.anim_active);
- copy_v4_v4_char(btheme->space_graph.anim_preview_range, btheme->space_action.anim_active);
+ copy_v4_v4_uchar(btheme->space_action.anim_preview_range, btheme->space_action.anim_active);
+ copy_v4_v4_uchar(btheme->space_nla.anim_preview_range, btheme->space_nla.anim_active);
+ copy_v4_v4_uchar(btheme->space_graph.anim_preview_range, btheme->space_action.anim_active);
}
if (!USER_VERSION_ATLEAST(280, 26)) {
@@ -102,8 +102,8 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
if (!USER_VERSION_ATLEAST(280, 40)) {
FROM_DEFAULT_V4_UCHAR(space_preferences.navigation_bar);
- copy_v4_v4_char(btheme->space_preferences.execution_buts,
- btheme->space_preferences.navigation_bar);
+ copy_v4_v4_uchar(btheme->space_preferences.execution_buts,
+ btheme->space_preferences.navigation_bar);
}
if (!USER_VERSION_ATLEAST(280, 41)) {
@@ -141,6 +141,11 @@ static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
FROM_DEFAULT_V4_UCHAR(space_outliner.row_alternate);
}
+ if (!USER_VERSION_ATLEAST(281, 3)) {
+ FROM_DEFAULT_V4_UCHAR(space_outliner.selected_highlight);
+ FROM_DEFAULT_V4_UCHAR(space_outliner.active);
+ }
+
/**
* Include next version bump.
*/
@@ -370,9 +375,6 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
if (userdef->keyhandles_new == HD_AUTO) {
userdef->keyhandles_new = HD_AUTO_ANIM;
}
-
- /* enable (Cycles) addon by default */
- BKE_addon_ensure(&userdef->addons, "cycles");
}
if (!USER_VERSION_ATLEAST(267, 0)) {
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 5954ba9cf8e..0ff7ba0034f 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1142,9 +1142,12 @@ typedef struct RenderInfo {
char scene_name[MAX_ID_NAME - 2];
} RenderInfo;
-/* was for historic render-deamon feature,
- * now write because it can be easily extracted without
- * reading the whole blend file */
+/**
+ * This was originally added for the historic render-daemon feature,
+ * now write because it can be easily extracted without reading the whole blend file.
+ *
+ * See: `release/scripts/modules/blend_render_info.py`
+ */
static void write_renderinfo(WriteData *wd, Main *mainvar)
{
bScreen *curscreen;
diff --git a/source/blender/blentranslation/msgfmt/msgfmt.c b/source/blender/blentranslation/msgfmt/msgfmt.c
index f226699d8bf..4691d791301 100644
--- a/source/blender/blentranslation/msgfmt/msgfmt.c
+++ b/source/blender/blentranslation/msgfmt/msgfmt.c
@@ -24,7 +24,7 @@
*
* Generate binary message catalog from textual translation description.
*
- * This program converts a textual Uniforum-style message catalog (.po file)
+ * This program converts a textual Uniform-style message catalog (.po file)
* into a binary GNU catalog (.mo file).
* This is essentially the same function as the GNU msgfmt program,
* however, it is a simpler implementation.
@@ -82,12 +82,12 @@ static char *trim(char *str)
return str;
}
- for (i = 0; i < len && ELEM(str[0], ' ', '\t', '\n'); str++, i++) {
+ for (i = 0; i < len && ELEM(str[0], ' ', '\t', '\r', '\n'); str++, i++) {
/* pass */
}
char *end = &str[len - 1 - i];
- for (i = len; i > 0 && ELEM(end[0], ' ', '\t', '\n'); end--, i--) {
+ for (i = len; i > 0 && ELEM(end[0], ' ', '\t', '\r', '\n'); end--, i--) {
/* pass */
}
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c
index 760b0aa00ae..c8eab9c4b8c 100644
--- a/source/blender/bmesh/intern/bmesh_construct.c
+++ b/source/blender/bmesh/intern/bmesh_construct.c
@@ -390,79 +390,13 @@ void BM_verts_sort_radial_plane(BMVert **vert_arr, int len)
struct SortIntByFloat *vang = BLI_array_alloca(vang, len);
BMVert **vert_arr_map = BLI_array_alloca(vert_arr_map, len);
- float totv_inv = 1.0f / (float)len;
- int i = 0;
+ float nor[3], cent[3];
+ int index_tangent = 0;
+ BM_verts_calc_normal_from_cloud_ex(vert_arr, len, nor, cent, &index_tangent);
+ const float *far = vert_arr[index_tangent]->co;
- float cent[3], nor[3];
-
- const float *far = NULL, *far_cross = NULL;
-
- float far_vec[3];
- float far_cross_vec[3];
- float sign_vec[3]; /* work out if we are pos/neg angle */
-
- float far_dist_sq, far_dist_max_sq;
- float far_cross_dist, far_cross_best = 0.0f;
-
- /* get the center point and collect vector array since we loop over these a lot */
- zero_v3(cent);
- for (i = 0; i < len; i++) {
- madd_v3_v3fl(cent, vert_arr[i]->co, totv_inv);
- }
-
- /* find the far point from cent */
- far_dist_max_sq = 0.0f;
- for (i = 0; i < len; i++) {
- far_dist_sq = len_squared_v3v3(vert_arr[i]->co, cent);
- if (far_dist_sq > far_dist_max_sq || far == NULL) {
- far = vert_arr[i]->co;
- far_dist_max_sq = far_dist_sq;
- }
- }
-
- sub_v3_v3v3(far_vec, far, cent);
- // far_dist = len_v3(far_vec); /* real dist */ /* UNUSED */
-
- /* --- */
-
- /* find a point 90deg about to compare with */
- far_cross_best = 0.0f;
- for (i = 0; i < len; i++) {
-
- if (far == vert_arr[i]->co) {
- continue;
- }
-
- sub_v3_v3v3(far_cross_vec, vert_arr[i]->co, cent);
- far_cross_dist = normalize_v3(far_cross_vec);
-
- /* more of a weight then a distance */
- far_cross_dist = (
- /* First we want to have a value close to zero mapped to 1. */
- 1.0f - fabsf(dot_v3v3(far_vec, far_cross_vec)) *
- /* Second we multiply by the distance
- * so points close to the center are not preferred. */
- far_cross_dist);
-
- if (far_cross_dist > far_cross_best || far_cross == NULL) {
- far_cross = vert_arr[i]->co;
- far_cross_best = far_cross_dist;
- }
- }
-
- sub_v3_v3v3(far_cross_vec, far_cross, cent);
-
- /* --- */
-
- /* now we have 2 vectors we can have a cross product */
- cross_v3_v3v3(nor, far_vec, far_cross_vec);
- normalize_v3(nor);
- cross_v3_v3v3(sign_vec, far_vec, nor); /* this vector should match 'far_cross_vec' closely */
-
- /* --- */
-
- /* now calculate every points angle around the normal (signed) */
- for (i = 0; i < len; i++) {
+ /* Now calculate every points angle around the normal (signed). */
+ for (int i = 0; i < len; i++) {
vang[i].sort_value = angle_signed_on_axis_v3v3v3_v3(far, cent, vert_arr[i]->co, nor);
vang[i].data = i;
vert_arr_map[i] = vert_arr[i];
@@ -473,7 +407,7 @@ void BM_verts_sort_radial_plane(BMVert **vert_arr, int len)
/* --- */
- for (i = 0; i < len; i++) {
+ for (int i = 0; i < len; i++) {
vert_arr[i] = vert_arr_map[vang[i].data];
}
}
diff --git a/source/blender/bmesh/intern/bmesh_edgeloop.c b/source/blender/bmesh/intern/bmesh_edgeloop.c
index 2ca9c7e6340..49c71bf8298 100644
--- a/source/blender/bmesh/intern/bmesh_edgeloop.c
+++ b/source/blender/bmesh/intern/bmesh_edgeloop.c
@@ -45,7 +45,9 @@ typedef struct BMEdgeLoopStore {
} BMEdgeLoopStore;
#define BM_EDGELOOP_IS_CLOSED (1 << 0)
-#define EDGELOOP_EPS 0.00001f
+
+/* Use a small value since we need normals even for very small loops. */
+#define EDGELOOP_EPS 1e-10f
/* -------------------------------------------------------------------- */
/* BM_mesh_edgeloops_find & Util Functions */
diff --git a/source/blender/bmesh/intern/bmesh_marking.c b/source/blender/bmesh/intern/bmesh_marking.c
index 5aec59ccd5d..788edc348d9 100644
--- a/source/blender/bmesh/intern/bmesh_marking.c
+++ b/source/blender/bmesh/intern/bmesh_marking.c
@@ -870,9 +870,11 @@ void BM_editselection_normal(BMEditSelection *ese, float r_normal[3])
}
}
-/* Calculate a plane that is rightangles to the edge/vert/faces normal
+/**
+ * Calculate a plane that is right angles to the edge/vert/faces normal
* also make the plane run along an axis that is related to the geometry,
- * because this is used for the gizmos Y axis. */
+ * because this is used for the gizmos Y axis.
+ */
void BM_editselection_plane(BMEditSelection *ese, float r_plane[3])
{
if (ese->htype == BM_VERT) {
diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c
index 2000689b496..9bab959f0a2 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_conv.c
+++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c
@@ -422,7 +422,7 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar
/* don't use 'j' since we may have skipped some faces, hence some loops. */
BM_elem_index_set(l_iter, totloops++); /* set_ok */
- /* Save index of correspsonding MLoop */
+ /* Save index of corresponding #MLoop. */
CustomData_to_bmesh_block(&me->ldata, &bm->ldata, j++, &l_iter->head.data, true);
} while ((l_iter = l_iter->next) != l_first);
diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c b/source/blender/bmesh/intern/bmesh_opdefines.c
index e8b35afdcb1..b9f0bcc05f0 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -336,7 +336,7 @@ static BMOpDefine bmo_find_doubles_def = {
/* slots_in */
{{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* input vertices */
{"keep_verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* list of verts to keep */
- {"dist", BMO_OP_SLOT_FLT}, /* minimum distance */
+ {"dist", BMO_OP_SLOT_FLT}, /* maximum distance */
{{'\0'}},
},
/* slots_out */
@@ -379,7 +379,7 @@ static BMOpDefine bmo_automerge_def = {
"automerge",
/* slots_in */
{{"verts", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT}}, /* input verts */
- {"dist", BMO_OP_SLOT_FLT}, /* minimum distance */
+ {"dist", BMO_OP_SLOT_FLT}, /* maximum distance */
{{'\0'}},
},
{{{'\0'}}}, /* no output */
@@ -1173,7 +1173,7 @@ static BMOpDefine bmo_dissolve_limit_def = {
static BMOpDefine bmo_dissolve_degenerate_def = {
"dissolve_degenerate",
/* slots_in */
- {{"dist", BMO_OP_SLOT_FLT}, /* minimum distance to consider degenerate */
+ {{"dist", BMO_OP_SLOT_FLT}, /* maximum distance to consider degenerate */
{"edges", BMO_OP_SLOT_ELEMENT_BUF, {BM_EDGE}},
{{'\0'}},
},
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c
index 172f7050aa0..915ad6bf5c4 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.c
+++ b/source/blender/bmesh/intern/bmesh_polygon.c
@@ -483,7 +483,7 @@ void BM_face_calc_tangent_edge_diagonal(const BMFace *f, float r_tangent[3])
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
- /* incase of degenerate faces */
+ /* In case of degenerate faces. */
zero_v3(r_tangent);
/* warning: O(n^2) loop here, take care! */
@@ -520,7 +520,7 @@ void BM_face_calc_tangent_vert_diagonal(const BMFace *f, float r_tangent[3])
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
- /* incase of degenerate faces */
+ /* In case of degenerate faces. */
zero_v3(r_tangent);
/* warning: O(n^2) loop here, take care! */
@@ -865,6 +865,113 @@ float BM_face_calc_normal_vcos(const BMesh *bm,
}
/**
+ * Calculate a normal from a vertex cloud.
+ *
+ * \note We could make a higher quality version that takes all vertices into account.
+ * Currently it finds 4 outer most points returning it's normal.
+ */
+void BM_verts_calc_normal_from_cloud_ex(
+ BMVert **varr, int varr_len, float r_normal[3], float r_center[3], int *r_index_tangent)
+{
+ const float varr_len_inv = 1.0f / (float)varr_len;
+
+ /* Get the center point and collect vector array since we loop over these a lot. */
+ float center[3] = {0.0f, 0.0f, 0.0f};
+ for (int i = 0; i < varr_len; i++) {
+ madd_v3_v3fl(center, varr[i]->co, varr_len_inv);
+ }
+
+ /* Find the 'co_a' point from center. */
+ int co_a_index = 0;
+ const float *co_a = NULL;
+ {
+ float dist_sq_max = -1.0f;
+ for (int i = 0; i < varr_len; i++) {
+ const float dist_sq_test = len_squared_v3v3(varr[i]->co, center);
+ if (!(dist_sq_test <= dist_sq_max)) {
+ co_a = varr[i]->co;
+ co_a_index = i;
+ dist_sq_max = dist_sq_test;
+ }
+ }
+ }
+
+ float dir_a[3];
+ sub_v3_v3v3(dir_a, co_a, center);
+ normalize_v3(dir_a);
+
+ const float *co_b = NULL;
+ float dir_b[3] = {0.0f, 0.0f, 0.0f};
+ {
+ float dist_sq_max = -1.0f;
+ for (int i = 0; i < varr_len; i++) {
+ if (varr[i]->co == co_a) {
+ continue;
+ }
+ float dir_test[3];
+ sub_v3_v3v3(dir_test, varr[i]->co, center);
+ project_plane_normalized_v3_v3v3(dir_test, dir_test, dir_a);
+ const float dist_sq_test = len_squared_v3(dir_test);
+ if (!(dist_sq_test <= dist_sq_max)) {
+ co_b = varr[i]->co;
+ dist_sq_max = dist_sq_test;
+ copy_v3_v3(dir_b, dir_test);
+ }
+ }
+ }
+
+ if (varr_len <= 3) {
+ normal_tri_v3(r_normal, center, co_a, co_b);
+ goto finally;
+ }
+
+ normalize_v3(dir_b);
+
+ const float *co_a_opposite = NULL;
+ const float *co_b_opposite = NULL;
+
+ {
+ float dot_a_min = FLT_MAX;
+ float dot_b_min = FLT_MAX;
+ for (int i = 0; i < varr_len; i++) {
+ const float *co_test = varr[i]->co;
+ float dot_test;
+
+ if (co_test != co_a) {
+ dot_test = dot_v3v3(dir_a, co_test);
+ if (dot_test < dot_a_min) {
+ dot_a_min = dot_test;
+ co_a_opposite = co_test;
+ }
+ }
+
+ if (co_test != co_b) {
+ dot_test = dot_v3v3(dir_b, co_test);
+ if (dot_test < dot_b_min) {
+ dot_b_min = dot_test;
+ co_b_opposite = co_test;
+ }
+ }
+ }
+ }
+
+ normal_quad_v3(r_normal, co_a, co_b, co_a_opposite, co_b_opposite);
+
+finally:
+ if (r_center != NULL) {
+ copy_v3_v3(r_center, center);
+ }
+ if (r_index_tangent != NULL) {
+ *r_index_tangent = co_a_index;
+ }
+}
+
+void BM_verts_calc_normal_from_cloud(BMVert **varr, int varr_len, float r_normal[3])
+{
+ BM_verts_calc_normal_from_cloud_ex(varr, varr_len, r_normal, NULL, NULL);
+}
+
+/**
* Calculates the face subset normal.
*/
float BM_face_calc_normal_subset(const BMLoop *l_first, const BMLoop *l_last, float r_no[3])
diff --git a/source/blender/bmesh/intern/bmesh_polygon.h b/source/blender/bmesh/intern/bmesh_polygon.h
index 191ebd86f4a..2ae32777a7d 100644
--- a/source/blender/bmesh/intern/bmesh_polygon.h
+++ b/source/blender/bmesh/intern/bmesh_polygon.h
@@ -38,6 +38,11 @@ float BM_face_calc_normal_vcos(const BMesh *bm,
const BMFace *f,
float r_no[3],
float const (*vertexCos)[3]) ATTR_NONNULL();
+
+void BM_verts_calc_normal_from_cloud_ex(
+ BMVert **varr, int varr_len, float r_normal[3], float r_center[3], int *r_index_tangent);
+void BM_verts_calc_normal_from_cloud(BMVert **varr, int varr_len, float r_normal[3]);
+
float BM_face_calc_normal_subset(const BMLoop *l_first, const BMLoop *l_last, float r_no[3])
ATTR_NONNULL();
float BM_face_calc_area(const BMFace *f) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
diff --git a/source/blender/bmesh/intern/bmesh_query.c b/source/blender/bmesh/intern/bmesh_query.c
index 4a47bcccb25..51bc86e40eb 100644
--- a/source/blender/bmesh/intern/bmesh_query.c
+++ b/source/blender/bmesh/intern/bmesh_query.c
@@ -1542,7 +1542,7 @@ float BM_loop_calc_face_normal_safe_ex(const BMLoop *l, const float epsilon_sq,
/**
* #BM_loop_calc_face_normal_safe_ex with pre-defined sane epsilon.
*
- * Since this doesn't scale baed on triangle size, fixed value works well.
+ * Since this doesn't scale based on triangle size, fixed value works well.
*/
float BM_loop_calc_face_normal_safe(const BMLoop *l, float r_normal[3])
{
diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c
index ade6fdfcbed..f317c59b8d1 100644
--- a/source/blender/bmesh/intern/bmesh_walkers_impl.c
+++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c
@@ -648,7 +648,7 @@ static void *bmw_ConnectedVertexWalker_step(BMWalker *walker)
* \note that this doesn't work on non-manifold geometry.
* it might be better to rewrite this to extract
* boundary info from the island walker, rather then directly walking
- * over the boundary. raises an error if it encounters nonmanifold geometry.
+ * over the boundary. raises an error if it encounters non-manifold geometry.
*
* \todo Add restriction flag/callback for wire edges.
*/
diff --git a/source/blender/bmesh/operators/bmo_primitive.c b/source/blender/bmesh/operators/bmo_primitive.c
index 287a7e93470..ff7dcc388b3 100644
--- a/source/blender/bmesh/operators/bmo_primitive.c
+++ b/source/blender/bmesh/operators/bmo_primitive.c
@@ -1560,9 +1560,10 @@ void BM_mesh_calc_uvs_cone(BMesh *bm,
float inv_mat[4][4];
int loop_index;
- mul_mat3_m4_v3(
- mat, local_up); /* transform the upvector like we did the cone itself, without location. */
- normalize_v3(local_up); /* remove global scaling... */
+ /* Transform the upvector like we did the cone itself, without location. */
+ mul_mat3_m4_v3(mat, local_up);
+ /* Remove global scaling... */
+ normalize_v3(local_up);
invert_m4_m4(inv_mat, mat);
diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c
index 616886deba1..d783842c017 100644
--- a/source/blender/bmesh/operators/bmo_removedoubles.c
+++ b/source/blender/bmesh/operators/bmo_removedoubles.c
@@ -80,10 +80,12 @@ static BMFace *remdoubles_createface(BMesh *bm,
{
BMEdge *e_new;
- BMEdge **edges = BLI_array_alloca(edges, f->len); /* new ordered edges */
- BMVert **verts = BLI_array_alloca(verts, f->len); /* new ordered verts */
- BMLoop **loops = BLI_array_alloca(
- loops, f->len); /* original ordered loops to copy attrs into the new face */
+ /* New ordered edges. */
+ BMEdge **edges = BLI_array_alloca(edges, f->len);
+ /* New ordered verts. */
+ BMVert **verts = BLI_array_alloca(verts, f->len);
+ /* Original ordered loops to copy attributes into the new face. */
+ BMLoop **loops = BLI_array_alloca(loops, f->len);
STACK_DECLARE(edges);
STACK_DECLARE(loops);
diff --git a/source/blender/bmesh/tools/bmesh_bevel.c b/source/blender/bmesh/tools/bmesh_bevel.c
index 94935f2090b..797e2ca864e 100644
--- a/source/blender/bmesh/tools/bmesh_bevel.c
+++ b/source/blender/bmesh/tools/bmesh_bevel.c
@@ -3122,6 +3122,7 @@ static void adjust_offsets(BevelParams *bp, BMesh *bm)
}
if (!iscycle) {
/* right->left direction, changing vchainstart at each step */
+ v->adjchain = NULL;
v = vchainstart;
bvcur = bv;
do {
diff --git a/source/blender/bmesh/tools/bmesh_decimate_collapse.c b/source/blender/bmesh/tools/bmesh_decimate_collapse.c
index e32a9334343..198b4c8e76b 100644
--- a/source/blender/bmesh/tools/bmesh_decimate_collapse.c
+++ b/source/blender/bmesh/tools/bmesh_decimate_collapse.c
@@ -363,7 +363,7 @@ static void bm_decim_build_edge_cost(BMesh *bm,
struct KD_Symmetry_Data {
/* pre-flipped coords */
float e_v1_co[3], e_v2_co[3];
- /* Use to compare the correct endpoints incase v1/v2 are swapped */
+ /* Use to compare the correct endpoints in case v1/v2 are swapped. */
float e_dir[3];
int e_found_index;
@@ -1371,8 +1371,8 @@ void BM_mesh_decimate_collapse(BMesh *bm,
/* handy to detect corruptions elsewhere */
BLI_assert(BM_elem_index_get(e) < tot_edge_orig);
- /* under normal conditions wont be accessed again,
- * but NULL just incase so we don't use freed node */
+ /* Under normal conditions wont be accessed again,
+ * but NULL just in case so we don't use freed node. */
eheap_table[BM_elem_index_get(e)] = NULL;
bm_decim_edge_collapse(bm,
diff --git a/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c b/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c
index 27b4fa15f26..2cc86a7c93f 100644
--- a/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c
+++ b/source/blender/bmesh/tools/bmesh_decimate_unsubdivide.c
@@ -231,7 +231,7 @@ void BM_mesh_decimate_unsubdivide_ex(BMesh *bm, const int iterations, const bool
if (BMO_vert_flag_test(bm, v, ELE_VERT_TAG))
#endif
{
- /* check again incase the topology changed */
+ /* Check again in case the topology changed. */
if (bm_vert_dissolve_fan_test(v)) {
v_first = v;
}
diff --git a/source/blender/bmesh/tools/bmesh_region_match.c b/source/blender/bmesh/tools/bmesh_region_match.c
index 943f7532960..c30992fa296 100644
--- a/source/blender/bmesh/tools/bmesh_region_match.c
+++ b/source/blender/bmesh/tools/bmesh_region_match.c
@@ -1099,7 +1099,7 @@ static BMEdge *bm_face_region_pivot_edge_find(BMFace **faces_region,
}
}
else {
- /* use incase (depth == 0), no interior verts */
+ /* Use in case (depth == 0), no interior verts. */
e_pivot_fallback = e;
}
} while ((l_iter = l_iter->next) != l_first);
diff --git a/source/blender/collada/AnimationExporter.cpp b/source/blender/collada/AnimationExporter.cpp
index a2c629bd0f1..a15c215d2e2 100644
--- a/source/blender/collada/AnimationExporter.cpp
+++ b/source/blender/collada/AnimationExporter.cpp
@@ -336,7 +336,7 @@ void AnimationExporter::export_curve_animation(Object *ob, BCAnimationCurve &cur
/*
* Some curves can not be exported as is and need some conversion
- * For more information see implementation oif get_modified_export_curve()
+ * For more information see implementation of get_modified_export_curve()
* note: if mcurve is not NULL then it must be deleted at end of this method;
*/
diff --git a/source/blender/collada/AnimationExporter.h b/source/blender/collada/AnimationExporter.h
index 27474cc2b58..2be2dadeeeb 100644
--- a/source/blender/collada/AnimationExporter.h
+++ b/source/blender/collada/AnimationExporter.h
@@ -78,8 +78,6 @@ extern "C" {
#include <map>
#include <algorithm> // std::find
-struct Depsgraph;
-
typedef enum BC_animation_source_type {
BC_SOURCE_TYPE_VALUE,
BC_SOURCE_TYPE_ANGLE,
diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp
index 3bdc11291d5..54177560eb5 100644
--- a/source/blender/collada/AnimationImporter.cpp
+++ b/source/blender/collada/AnimationImporter.cpp
@@ -966,7 +966,7 @@ void AnimationImporter::apply_matrix_curves(Object *ob,
}
/*
- * This function returns the aspet ration from the Collada camera.
+ * This function returns the aspect ration from the Collada camera.
*
* Note:COLLADA allows to specify either XFov, or YFov alone.
* In that case the aspect ratio can be determined from
diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt
index 5f28ca4ffbb..40762db759e 100644
--- a/source/blender/collada/CMakeLists.txt
+++ b/source/blender/collada/CMakeLists.txt
@@ -28,10 +28,7 @@ FIND_FILE(OPENCOLLADA_ANIMATION_CLIP
)
IF(OPENCOLLADA_ANIMATION_CLIP)
- message(STATUS "Found opencollada: ${OPENCOLLADA_ANIMATION_CLIP} ")
add_definitions(-DWITH_OPENCOLLADA_ANIMATION_CLIP)
-ELSE()
- message(STATUS "opencollada: Build without animation clip support")
ENDIF()
set(INC
diff --git a/source/blender/collada/ControllerExporter.h b/source/blender/collada/ControllerExporter.h
index 200f8431f62..ce2ed9fe453 100644
--- a/source/blender/collada/ControllerExporter.h
+++ b/source/blender/collada/ControllerExporter.h
@@ -47,7 +47,6 @@
#include "BKE_key.h"
-struct Depsgraph;
class SceneExporter;
class ControllerExporter : public COLLADASW::LibraryControllers,
diff --git a/source/blender/collada/GeometryExporter.h b/source/blender/collada/GeometryExporter.h
index 7262784db82..8c7a38fc407 100644
--- a/source/blender/collada/GeometryExporter.h
+++ b/source/blender/collada/GeometryExporter.h
@@ -39,8 +39,6 @@
#include "BlenderContext.h"
#include "BKE_key.h"
-struct Depsgraph;
-
class Normal {
public:
float x;
@@ -58,8 +56,6 @@ class GeometryExporter : COLLADASW::LibraryGeometries {
unsigned int v1, v2, v3, v4;
};
- Normal n;
-
public:
/* TODO: optimize UV sets by making indexed list with duplicates removed */
GeometryExporter(BlenderContext &blender_context,
diff --git a/source/blender/collada/MeshImporter.cpp b/source/blender/collada/MeshImporter.cpp
index 657cce24a82..64031e10d77 100644
--- a/source/blender/collada/MeshImporter.cpp
+++ b/source/blender/collada/MeshImporter.cpp
@@ -1149,8 +1149,9 @@ Object *MeshImporter::create_mesh_object(
BKE_mesh_assign_object(m_bmain, ob, new_mesh);
BKE_mesh_calc_normals(new_mesh);
- id_us_plus(
- &old_mesh->id); /* Because BKE_mesh_assign_object would have already decreased it... */
+ /* Because BKE_mesh_assign_object would have already decreased it... */
+ id_us_plus(&old_mesh->id);
+
BKE_id_free_us(m_bmain, old_mesh);
COLLADAFW::MaterialBindingArray &mat_array = geom->getMaterialBindings();
diff --git a/source/blender/collada/collada.h b/source/blender/collada/collada.h
index df6e72cbf3a..72753e170a3 100644
--- a/source/blender/collada/collada.h
+++ b/source/blender/collada/collada.h
@@ -34,9 +34,6 @@ extern "C" {
#include "BLI_path_util.h"
#include "RNA_types.h"
-struct Depsgraph;
-struct Scene;
-struct ViewLayer;
struct bContext;
/*
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index c23e33df76d..c0425e59d1a 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -69,8 +69,6 @@ extern "C" {
constexpr int LIMITTED_PRECISION = 6;
-struct Depsgraph;
-
typedef std::map<COLLADAFW::UniqueId, Image *> UidImageMap;
typedef std::map<std::string, Image *> KeyImageMap;
typedef std::map<COLLADAFW::TextureMapId, std::vector<MTex *>> TexIndexTextureArrayMap;
diff --git a/source/blender/compositor/CMakeLists.txt b/source/blender/compositor/CMakeLists.txt
index 308a95c0e0c..2a8914c8cd9 100644
--- a/source/blender/compositor/CMakeLists.txt
+++ b/source/blender/compositor/CMakeLists.txt
@@ -276,11 +276,12 @@ set(SRC
nodes/COM_VectorBlurNode.h
operations/COM_VectorBlurOperation.cpp
operations/COM_VectorBlurOperation.h
-
nodes/COM_BlurNode.cpp
nodes/COM_BlurNode.h
nodes/COM_BokehBlurNode.cpp
nodes/COM_BokehBlurNode.h
+ nodes/COM_DenoiseNode.cpp
+ nodes/COM_DenoiseNode.h
nodes/COM_DespeckleNode.cpp
nodes/COM_DespeckleNode.h
nodes/COM_DilateErodeNode.cpp
@@ -490,6 +491,8 @@ set(SRC
operations/COM_ConvolutionEdgeFilterOperation.h
operations/COM_ConvolutionFilterOperation.cpp
operations/COM_ConvolutionFilterOperation.h
+ operations/COM_DenoiseOperation.cpp
+ operations/COM_DenoiseOperation.h
operations/COM_DespeckleOperation.cpp
operations/COM_DespeckleOperation.h
operations/COM_DilateErodeOperation.cpp
@@ -558,4 +561,12 @@ if(WITH_INTERNATIONAL)
add_definitions(-DWITH_INTERNATIONAL)
endif()
+if(WITH_OPENIMAGEDENOISE)
+ add_definitions(-DWITH_OPENIMAGEDENOISE)
+ add_definitions(-DOIDN_STATIC_LIB)
+ list(APPEND INC_SYS
+ ${OPENIMAGEDENOISE_INCLUDE_DIRS}
+ )
+endif()
+
blender_add_lib(bf_compositor "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
diff --git a/source/blender/compositor/intern/COM_CompositorContext.h b/source/blender/compositor/intern/COM_CompositorContext.h
index f4cd60e3ee0..b28d5ff0cdf 100644
--- a/source/blender/compositor/intern/COM_CompositorContext.h
+++ b/source/blender/compositor/intern/COM_CompositorContext.h
@@ -215,7 +215,7 @@ class CompositorContext {
}
/**
- * \brief get the current framenumber of the scene in this context
+ * \brief get the current frame-number of the scene in this context
*/
int getFramenumber() const;
diff --git a/source/blender/compositor/intern/COM_Converter.cpp b/source/blender/compositor/intern/COM_Converter.cpp
index 9dc55527f0d..704833389f8 100644
--- a/source/blender/compositor/intern/COM_Converter.cpp
+++ b/source/blender/compositor/intern/COM_Converter.cpp
@@ -53,6 +53,7 @@ extern "C" {
#include "COM_CropNode.h"
#include "COM_CryptomatteNode.h"
#include "COM_DefocusNode.h"
+#include "COM_DenoiseNode.h"
#include "COM_DespeckleNode.h"
#include "COM_DifferenceMatteNode.h"
#include "COM_DilateErodeNode.h"
@@ -122,7 +123,7 @@ bool Converter::is_fast_node(bNode *b_node)
b_node->type == CMP_NODE_BOKEHBLUR || b_node->type == CMP_NODE_GLARE ||
b_node->type == CMP_NODE_DBLUR || b_node->type == CMP_NODE_MOVIEDISTORTION ||
b_node->type == CMP_NODE_LENSDIST || b_node->type == CMP_NODE_DOUBLEEDGEMASK ||
- b_node->type == CMP_NODE_DILATEERODE);
+ b_node->type == CMP_NODE_DILATEERODE || b_node->type == CMP_NODE_DENOISE);
}
Node *Converter::convert(bNode *b_node)
@@ -402,6 +403,9 @@ Node *Converter::convert(bNode *b_node)
case CMP_NODE_CRYPTOMATTE:
node = new CryptomatteNode(b_node);
break;
+ case CMP_NODE_DENOISE:
+ node = new DenoiseNode(b_node);
+ break;
}
return node;
}
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.h b/source/blender/compositor/intern/COM_ExecutionGroup.h
index 41ae6f1c5b2..89464030cac 100644
--- a/source/blender/compositor/intern/COM_ExecutionGroup.h
+++ b/source/blender/compositor/intern/COM_ExecutionGroup.h
@@ -195,7 +195,7 @@ class ExecutionGroup {
/**
* \brief Determine the rect (minx, maxx, miny, maxy) of a chunk at a position.
- * \note Only gives useful results ater the determination of the chunksize
+ * \note Only gives useful results after the determination of the chunksize
* \see determineChunkSize()
*/
void determineChunkRect(rcti *rect, const unsigned int xChunk, const unsigned int yChunk) const;
@@ -406,7 +406,7 @@ class ExecutionGroup {
/**
* \brief Determine the rect (minx, maxx, miny, maxy) of a chunk.
- * \note Only gives useful results ater the determination of the chunksize
+ * \note Only gives useful results after the determination of the chunksize
* \see determineChunkSize()
*/
void determineChunkRect(rcti *rect, const unsigned int chunkNumber) const;
diff --git a/source/blender/compositor/intern/COM_ExecutionSystem.h b/source/blender/compositor/intern/COM_ExecutionSystem.h
index 009b1fb28cd..1977a31b15b 100644
--- a/source/blender/compositor/intern/COM_ExecutionSystem.h
+++ b/source/blender/compositor/intern/COM_ExecutionSystem.h
@@ -33,7 +33,7 @@ class ExecutionGroup;
* In order to get to an efficient model for execution, several steps are being done. these steps
* are explained below.
*
- * \section EM_Step1 Step 1: translating blender node system to the new compsitor system
+ * \section EM_Step1 Step 1: translating blender node system to the new compositor system
* Blenders node structure is based on C structs (DNA). These structs are not efficient in the new
* architecture. We want to use classes in order to simplify the system. during this step the
* blender node_tree is evaluated and converted to a CPP node system.
diff --git a/source/blender/compositor/intern/COM_MemoryBuffer.h b/source/blender/compositor/intern/COM_MemoryBuffer.h
index df936818f33..7e5b0264aa3 100644
--- a/source/blender/compositor/intern/COM_MemoryBuffer.h
+++ b/source/blender/compositor/intern/COM_MemoryBuffer.h
@@ -73,7 +73,7 @@ class MemoryBuffer {
rcti m_rect;
/**
- * brief refers to the chunknumber within the executiongroup where related to the MemoryProxy
+ * brief refers to the chunk-number within the execution-group where related to the MemoryProxy
* \see memoryProxy
*/
unsigned int m_chunkNumber;
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
index af9ed2648c9..6b073452771 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.h
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -368,7 +368,7 @@ class NodeOperation : public SocketReader {
return true;
}
- inline bool isBreaked() const
+ inline bool isBraked() const
{
return this->m_btree->test_break(this->m_btree->tbh);
}
diff --git a/source/blender/compositor/intern/COM_OpenCLDevice.cpp b/source/blender/compositor/intern/COM_OpenCLDevice.cpp
index 0aa054b8c77..2529637801d 100644
--- a/source/blender/compositor/intern/COM_OpenCLDevice.cpp
+++ b/source/blender/compositor/intern/COM_OpenCLDevice.cpp
@@ -248,7 +248,7 @@ void OpenCLDevice::COM_clEnqueueRange(cl_kernel kernel,
printf("CLERROR[%d]: %s\n", error, clewErrorString(error));
}
clFlush(this->m_queue);
- if (operation->isBreaked()) {
+ if (operation->isBraked()) {
breaked = false;
}
}
diff --git a/source/blender/compositor/intern/COM_OpenCLDevice.h b/source/blender/compositor/intern/COM_OpenCLDevice.h
index 7a83bda162c..45ce77acac7 100644
--- a/source/blender/compositor/intern/COM_OpenCLDevice.h
+++ b/source/blender/compositor/intern/COM_OpenCLDevice.h
@@ -78,8 +78,8 @@ class OpenCLDevice : public Device {
bool initialize();
/**
- * \brief deinitialize the device
- * During deintiialization the command queue is cleared
+ * \brief de-initialize the device
+ * During de-initialization the command queue is cleared
*/
void deinitialize();
diff --git a/source/blender/compositor/nodes/COM_DenoiseNode.cpp b/source/blender/compositor/nodes/COM_DenoiseNode.cpp
new file mode 100644
index 00000000000..7de120d1204
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DenoiseNode.cpp
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2019, Blender Foundation.
+ *
+ * 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.
+ *
+ * Contributor:
+ * Stefan Werner
+ */
+
+#include "COM_DenoiseNode.h"
+#include "DNA_node_types.h"
+#include "COM_SetValueOperation.h"
+#include "COM_MixOperation.h"
+#include "COM_DenoiseOperation.h"
+
+DenoiseNode::DenoiseNode(bNode *editorNode) : Node(editorNode)
+{
+ /* pass */
+}
+
+void DenoiseNode::convertToOperations(NodeConverter &converter,
+ const CompositorContext & /*context*/) const
+{
+ bNode *node = this->getbNode();
+ NodeDenoise *denoise = (NodeDenoise *)node->storage;
+
+ DenoiseOperation *operation = new DenoiseOperation();
+ converter.addOperation(operation);
+ operation->setDenoiseSettings(denoise);
+
+ converter.mapInputSocket(getInputSocket(0), operation->getInputSocket(0));
+ converter.mapInputSocket(getInputSocket(1), operation->getInputSocket(1));
+ converter.mapInputSocket(getInputSocket(2), operation->getInputSocket(2));
+ converter.mapOutputSocket(getOutputSocket(0), operation->getOutputSocket(0));
+}
diff --git a/source/blender/compositor/nodes/COM_DenoiseNode.h b/source/blender/compositor/nodes/COM_DenoiseNode.h
new file mode 100644
index 00000000000..0924da8931c
--- /dev/null
+++ b/source/blender/compositor/nodes/COM_DenoiseNode.h
@@ -0,0 +1,37 @@
+/*
+ * Copyright 2019, Blender Foundation.
+ *
+ * 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.
+ *
+ * Contributor:
+ * Stefan Werner
+ */
+
+#ifndef __COM_DENOISENODE_H__
+#define __COM_DENOISENODE_H__
+
+#include "COM_Node.h"
+
+/**
+ * \brief DenoiseNode
+ * \ingroup Node
+ */
+class DenoiseNode : public Node {
+ public:
+ DenoiseNode(bNode *editorNode);
+ void convertToOperations(NodeConverter &converter, const CompositorContext &context) const;
+};
+
+#endif
diff --git a/source/blender/compositor/nodes/COM_ImageNode.cpp b/source/blender/compositor/nodes/COM_ImageNode.cpp
index dc3f65deb1f..6bce56ffd52 100644
--- a/source/blender/compositor/nodes/COM_ImageNode.cpp
+++ b/source/blender/compositor/nodes/COM_ImageNode.cpp
@@ -195,7 +195,7 @@ void ImageNode::convertToOperations(NodeConverter &converter,
}
}
- /* incase we can't load the layer */
+ /* In case we can't load the layer. */
if (operation == NULL) {
converter.setInvalidOutput(getOutputSocket(index));
}
diff --git a/source/blender/compositor/nodes/COM_MathNode.cpp b/source/blender/compositor/nodes/COM_MathNode.cpp
index 5a2f934f37f..d13b34bb6b5 100644
--- a/source/blender/compositor/nodes/COM_MathNode.cpp
+++ b/source/blender/compositor/nodes/COM_MathNode.cpp
@@ -29,61 +29,61 @@ void MathNode::convertToOperations(NodeConverter &converter,
case NODE_MATH_ADD:
operation = new MathAddOperation();
break;
- case NODE_MATH_SUB:
+ case NODE_MATH_SUBTRACT:
operation = new MathSubtractOperation();
break;
- case NODE_MATH_MUL:
+ case NODE_MATH_MULTIPLY:
operation = new MathMultiplyOperation();
break;
case NODE_MATH_DIVIDE:
operation = new MathDivideOperation();
break;
- case NODE_MATH_SIN:
+ case NODE_MATH_SINE:
operation = new MathSineOperation();
break;
- case NODE_MATH_COS:
+ case NODE_MATH_COSINE:
operation = new MathCosineOperation();
break;
- case NODE_MATH_TAN:
+ case NODE_MATH_TANGENT:
operation = new MathTangentOperation();
break;
- case NODE_MATH_ASIN:
+ case NODE_MATH_ARCSINE:
operation = new MathArcSineOperation();
break;
- case NODE_MATH_ACOS:
+ case NODE_MATH_ARCCOSINE:
operation = new MathArcCosineOperation();
break;
- case NODE_MATH_ATAN:
+ case NODE_MATH_ARCTANGENT:
operation = new MathArcTangentOperation();
break;
- case NODE_MATH_POW:
+ case NODE_MATH_POWER:
operation = new MathPowerOperation();
break;
- case NODE_MATH_LOG:
+ case NODE_MATH_LOGARITHM:
operation = new MathLogarithmOperation();
break;
- case NODE_MATH_MIN:
+ case NODE_MATH_MINIMUM:
operation = new MathMinimumOperation();
break;
- case NODE_MATH_MAX:
+ case NODE_MATH_MAXIMUM:
operation = new MathMaximumOperation();
break;
case NODE_MATH_ROUND:
operation = new MathRoundOperation();
break;
- case NODE_MATH_LESS:
+ case NODE_MATH_LESS_THAN:
operation = new MathLessThanOperation();
break;
- case NODE_MATH_GREATER:
+ case NODE_MATH_GREATER_THAN:
operation = new MathGreaterThanOperation();
break;
- case NODE_MATH_MOD:
+ case NODE_MATH_MODULO:
operation = new MathModuloOperation();
break;
- case NODE_MATH_ABS:
+ case NODE_MATH_ABSOLUTE:
operation = new MathAbsoluteOperation();
break;
- case NODE_MATH_ATAN2:
+ case NODE_MATH_ARCTAN2:
operation = new MathArcTan2Operation();
break;
case NODE_MATH_FLOOR:
@@ -92,7 +92,7 @@ void MathNode::convertToOperations(NodeConverter &converter,
case NODE_MATH_CEIL:
operation = new MathCeilOperation();
break;
- case NODE_MATH_FRACT:
+ case NODE_MATH_FRACTION:
operation = new MathFractOperation();
break;
case NODE_MATH_SQRT:
diff --git a/source/blender/compositor/nodes/COM_MixNode.cpp b/source/blender/compositor/nodes/COM_MixNode.cpp
index 27a605e28d4..b3bcefaccb5 100644
--- a/source/blender/compositor/nodes/COM_MixNode.cpp
+++ b/source/blender/compositor/nodes/COM_MixNode.cpp
@@ -52,7 +52,7 @@ void MixNode::convertToOperations(NodeConverter &converter,
convertProg = new MixLightenOperation();
break;
case MA_RAMP_BURN:
- convertProg = new MixBurnOperation();
+ convertProg = new MixColorBurnOperation();
break;
case MA_RAMP_HUE:
convertProg = new MixHueOperation();
diff --git a/source/blender/compositor/nodes/COM_TimeNode.cpp b/source/blender/compositor/nodes/COM_TimeNode.cpp
index 45604882992..2a30ee9c574 100644
--- a/source/blender/compositor/nodes/COM_TimeNode.cpp
+++ b/source/blender/compositor/nodes/COM_TimeNode.cpp
@@ -49,8 +49,8 @@ void TimeNode::convertToOperations(NodeConverter &converter,
fac = (context.getFramenumber() - node->custom1) / (float)(node->custom2 - node->custom1);
}
- curvemapping_initialize((CurveMapping *)node->storage);
- fac = curvemapping_evaluateF((CurveMapping *)node->storage, 0, fac);
+ BKE_curvemapping_initialize((CurveMapping *)node->storage);
+ fac = BKE_curvemapping_evaluateF((CurveMapping *)node->storage, 0, fac);
operation->setValue(clamp_f(fac, 0.0f, 1.0f));
converter.addOperation(operation);
diff --git a/source/blender/compositor/operations/COM_BokehImageOperation.h b/source/blender/compositor/operations/COM_BokehImageOperation.h
index 2bb3e5bc1ab..e907559d6e7 100644
--- a/source/blender/compositor/operations/COM_BokehImageOperation.h
+++ b/source/blender/compositor/operations/COM_BokehImageOperation.h
@@ -85,7 +85,7 @@ class BokehImageOperation : public NodeOperation {
bool m_deleteData;
/**
- * \brief determine the coordinate of a flap cornder
+ * \brief determine the coordinate of a flap corner.
*
* \param r: result in bokehimage space are stored [x,y]
* \param flapNumber: the flap number to calculate
diff --git a/source/blender/compositor/operations/COM_BrightnessOperation.cpp b/source/blender/compositor/operations/COM_BrightnessOperation.cpp
index d0bab5aa4d9..b6c22029899 100644
--- a/source/blender/compositor/operations/COM_BrightnessOperation.cpp
+++ b/source/blender/compositor/operations/COM_BrightnessOperation.cpp
@@ -62,12 +62,13 @@ void BrightnessOperation::executePixelSampled(float output[4],
* Extracted of OpenCV demhist.c
*/
if (contrast > 0) {
- a = 1.0f / (1.0f - delta * 2.0f);
+ a = 1.0f - delta * 2.0f;
+ a = 1.0f / max_ff(a, FLT_EPSILON);
b = a * (brightness - delta);
}
else {
delta *= -1;
- a = 1.0f - delta * 2.0f;
+ a = max_ff(1.0f - delta * 2.0f, 0.0f);
b = a * brightness + delta;
}
if (this->m_use_premultiply) {
diff --git a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp
index 68b5af3089a..1578a805d1e 100644
--- a/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp
+++ b/source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cpp
@@ -22,7 +22,7 @@
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
+ * but best keep it this way, since 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 */
diff --git a/source/blender/compositor/operations/COM_ColorCurveOperation.cpp b/source/blender/compositor/operations/COM_ColorCurveOperation.cpp
index e25ef49cf28..90d3a60abd0 100644
--- a/source/blender/compositor/operations/COM_ColorCurveOperation.cpp
+++ b/source/blender/compositor/operations/COM_ColorCurveOperation.cpp
@@ -50,7 +50,7 @@ void ColorCurveOperation::initExecution()
this->m_inputBlackProgram = this->getInputSocketReader(2);
this->m_inputWhiteProgram = this->getInputSocketReader(3);
- curvemapping_premultiply(this->m_curveMapping, 0);
+ BKE_curvemapping_premultiply(this->m_curveMapping, 0);
}
void ColorCurveOperation::executePixelSampled(float output[4],
@@ -73,20 +73,20 @@ void ColorCurveOperation::executePixelSampled(float output[4],
/* get our own local bwmul value,
* since we can't be threadsafe and use cumap->bwmul & friends */
- curvemapping_set_black_white_ex(black, white, bwmul);
+ BKE_curvemapping_set_black_white_ex(black, white, bwmul);
this->m_inputFacProgram->readSampled(fac, x, y, sampler);
this->m_inputImageProgram->readSampled(image, x, y, sampler);
if (*fac >= 1.0f) {
- curvemapping_evaluate_premulRGBF_ex(cumap, output, image, black, bwmul);
+ BKE_curvemapping_evaluate_premulRGBF_ex(cumap, output, image, black, bwmul);
}
else if (*fac <= 0.0f) {
copy_v3_v3(output, image);
}
else {
float col[4];
- curvemapping_evaluate_premulRGBF_ex(cumap, col, image, black, bwmul);
+ BKE_curvemapping_evaluate_premulRGBF_ex(cumap, col, image, black, bwmul);
interp_v3_v3v3(output, image, col, *fac);
}
output[3] = image[3];
@@ -120,9 +120,9 @@ void ConstantLevelColorCurveOperation::initExecution()
this->m_inputFacProgram = this->getInputSocketReader(0);
this->m_inputImageProgram = this->getInputSocketReader(1);
- curvemapping_premultiply(this->m_curveMapping, 0);
+ BKE_curvemapping_premultiply(this->m_curveMapping, 0);
- curvemapping_set_black_white(this->m_curveMapping, this->m_black, this->m_white);
+ BKE_curvemapping_set_black_white(this->m_curveMapping, this->m_black, this->m_white);
}
void ConstantLevelColorCurveOperation::executePixelSampled(float output[4],
@@ -137,14 +137,14 @@ void ConstantLevelColorCurveOperation::executePixelSampled(float output[4],
this->m_inputImageProgram->readSampled(image, x, y, sampler);
if (*fac >= 1.0f) {
- curvemapping_evaluate_premulRGBF(this->m_curveMapping, output, image);
+ BKE_curvemapping_evaluate_premulRGBF(this->m_curveMapping, output, image);
}
else if (*fac <= 0.0f) {
copy_v3_v3(output, image);
}
else {
float col[4];
- curvemapping_evaluate_premulRGBF(this->m_curveMapping, col, image);
+ BKE_curvemapping_evaluate_premulRGBF(this->m_curveMapping, col, image);
interp_v3_v3v3(output, image, col, *fac);
}
output[3] = image[3];
diff --git a/source/blender/compositor/operations/COM_CompositorOperation.cpp b/source/blender/compositor/operations/COM_CompositorOperation.cpp
index 40315d217ce..5bd466658c0 100644
--- a/source/blender/compositor/operations/COM_CompositorOperation.cpp
+++ b/source/blender/compositor/operations/COM_CompositorOperation.cpp
@@ -78,7 +78,7 @@ void CompositorOperation::deinitExecution()
return;
}
- if (!isBreaked()) {
+ if (!isBraked()) {
Render *re = RE_GetSceneRender(this->m_scene);
RenderResult *rr = RE_AcquireResultWrite(re);
@@ -207,7 +207,7 @@ void CompositorOperation::executeRegion(rcti *rect, unsigned int /*tileNumber*/)
zbuffer[offset] = color[0];
offset4 += COM_NUM_CHANNELS_COLOR;
offset++;
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
diff --git a/source/blender/compositor/operations/COM_CurveBaseOperation.cpp b/source/blender/compositor/operations/COM_CurveBaseOperation.cpp
index d84af71d8d8..858931ad46d 100644
--- a/source/blender/compositor/operations/COM_CurveBaseOperation.cpp
+++ b/source/blender/compositor/operations/COM_CurveBaseOperation.cpp
@@ -34,19 +34,19 @@ CurveBaseOperation::CurveBaseOperation() : NodeOperation()
CurveBaseOperation::~CurveBaseOperation()
{
if (this->m_curveMapping) {
- curvemapping_free(this->m_curveMapping);
+ BKE_curvemapping_free(this->m_curveMapping);
this->m_curveMapping = NULL;
}
}
void CurveBaseOperation::initExecution()
{
- curvemapping_initialize(this->m_curveMapping);
+ BKE_curvemapping_initialize(this->m_curveMapping);
}
void CurveBaseOperation::deinitExecution()
{
if (this->m_curveMapping) {
- curvemapping_free(this->m_curveMapping);
+ BKE_curvemapping_free(this->m_curveMapping);
this->m_curveMapping = NULL;
}
}
@@ -55,7 +55,7 @@ void CurveBaseOperation::setCurveMapping(CurveMapping *mapping)
{
/* duplicate the curve to avoid glitches while drawing, see bug [#32374] */
if (this->m_curveMapping) {
- curvemapping_free(this->m_curveMapping);
+ BKE_curvemapping_free(this->m_curveMapping);
}
- this->m_curveMapping = curvemapping_copy(mapping);
+ this->m_curveMapping = BKE_curvemapping_copy(mapping);
}
diff --git a/source/blender/compositor/operations/COM_DenoiseOperation.cpp b/source/blender/compositor/operations/COM_DenoiseOperation.cpp
new file mode 100644
index 00000000000..ad53ab13def
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DenoiseOperation.cpp
@@ -0,0 +1,155 @@
+/*
+ * Copyright 2019, Blender Foundation.
+ *
+ * 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.
+ *
+ * Contributor:
+ * Stefan Werner
+ */
+
+#include "COM_DenoiseOperation.h"
+#include "BLI_math.h"
+#ifdef WITH_OPENIMAGEDENOISE
+# include <OpenImageDenoise/oidn.hpp>
+#endif
+#include <iostream>
+
+DenoiseOperation::DenoiseOperation() : SingleThreadedOperation()
+{
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_COLOR);
+ this->addInputSocket(COM_DT_VECTOR);
+ this->addOutputSocket(COM_DT_COLOR);
+ this->m_settings = NULL;
+}
+void DenoiseOperation::initExecution()
+{
+ SingleThreadedOperation::initExecution();
+ this->m_inputProgramColor = getInputSocketReader(0);
+ this->m_inputProgramAlbedo = getInputSocketReader(1);
+ this->m_inputProgramNormal = getInputSocketReader(2);
+}
+
+void DenoiseOperation::deinitExecution()
+{
+ this->m_inputProgramColor = NULL;
+ this->m_inputProgramAlbedo = NULL;
+ this->m_inputProgramNormal = NULL;
+ SingleThreadedOperation::deinitExecution();
+}
+
+MemoryBuffer *DenoiseOperation::createMemoryBuffer(rcti *rect2)
+{
+ MemoryBuffer *tileColor = (MemoryBuffer *)this->m_inputProgramColor->initializeTileData(rect2);
+ MemoryBuffer *tileAlbedo = (MemoryBuffer *)this->m_inputProgramAlbedo->initializeTileData(rect2);
+ MemoryBuffer *tileNormal = (MemoryBuffer *)this->m_inputProgramNormal->initializeTileData(rect2);
+ rcti rect;
+ rect.xmin = 0;
+ rect.ymin = 0;
+ rect.xmax = getWidth();
+ rect.ymax = getHeight();
+ MemoryBuffer *result = new MemoryBuffer(COM_DT_COLOR, &rect);
+ float *data = result->getBuffer();
+ this->generateDenoise(data, tileColor, tileAlbedo, tileNormal, this->m_settings);
+ return result;
+}
+
+bool DenoiseOperation::determineDependingAreaOfInterest(rcti * /*input*/,
+ ReadBufferOperation *readOperation,
+ rcti *output)
+{
+ if (isCached()) {
+ return false;
+ }
+ else {
+ rcti newInput;
+ newInput.xmax = this->getWidth();
+ newInput.xmin = 0;
+ newInput.ymax = this->getHeight();
+ newInput.ymin = 0;
+ return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
+ }
+}
+
+void DenoiseOperation::generateDenoise(float *data,
+ MemoryBuffer *inputTileColor,
+ MemoryBuffer *inputTileAlbedo,
+ MemoryBuffer *inputTileNormal,
+ NodeDenoise *settings)
+{
+ float *inputBufferColor = inputTileColor->getBuffer();
+ BLI_assert(inputBufferColor);
+ if (!inputBufferColor) {
+ return;
+ }
+#ifdef WITH_OPENIMAGEDENOISE
+ oidn::DeviceRef device = oidn::newDevice();
+ device.commit();
+
+ oidn::FilterRef filter = device.newFilter("RT");
+ filter.setImage("color",
+ inputBufferColor,
+ oidn::Format::Float3,
+ inputTileColor->getWidth(),
+ inputTileColor->getHeight(),
+ 0,
+ 4 * sizeof(float));
+ if (inputTileAlbedo && inputTileAlbedo->getBuffer()) {
+ filter.setImage("albedo",
+ inputTileAlbedo->getBuffer(),
+ oidn::Format::Float3,
+ inputTileAlbedo->getWidth(),
+ inputTileAlbedo->getHeight(),
+ 0,
+ 4 * sizeof(float));
+ }
+ if (inputTileNormal && inputTileNormal->getBuffer()) {
+ filter.setImage("normal",
+ inputTileNormal->getBuffer(),
+ oidn::Format::Float3,
+ inputTileNormal->getWidth(),
+ inputTileNormal->getHeight(),
+ 0,
+ 3 * sizeof(float));
+ }
+ filter.setImage("output",
+ data,
+ oidn::Format::Float3,
+ inputTileColor->getWidth(),
+ inputTileColor->getHeight(),
+ 0,
+ 4 * sizeof(float));
+
+ BLI_assert(settings);
+ if (settings) {
+ filter.set("hdr", settings->hdr);
+ filter.set("srgb", false);
+ }
+
+ filter.commit();
+ filter.execute();
+
+ /* copy the alpha channel, OpenImageDenoise currently only supports RGB */
+ size_t numPixels = inputTileColor->getWidth() * inputTileColor->getHeight();
+ for (size_t i = 0; i < numPixels; ++i) {
+ data[i * 4 + 3] = inputBufferColor[i * 4 + 3];
+ }
+#else
+ UNUSED_VARS(inputTileAlbedo, inputTileNormal, settings);
+ ::memcpy(data,
+ inputBufferColor,
+ inputTileColor->getWidth() * inputTileColor->getHeight() * sizeof(float) * 4);
+#endif
+}
diff --git a/source/blender/compositor/operations/COM_DenoiseOperation.h b/source/blender/compositor/operations/COM_DenoiseOperation.h
new file mode 100644
index 00000000000..6e19bd6034a
--- /dev/null
+++ b/source/blender/compositor/operations/COM_DenoiseOperation.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2019, Blender Foundation.
+ *
+ * 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.
+ *
+ * Contributor:
+ * Stefan Werner
+ */
+
+#ifndef __COM_DENOISEBASEOPERATION_H__
+#define __COM_DENOISEBASEOPERATION_H__
+
+#include "COM_SingleThreadedOperation.h"
+#include "DNA_node_types.h"
+
+class DenoiseOperation : public SingleThreadedOperation {
+ private:
+ /**
+ * \brief Cached reference to the input programs
+ */
+ SocketReader *m_inputProgramColor;
+ SocketReader *m_inputProgramAlbedo;
+ SocketReader *m_inputProgramNormal;
+
+ /**
+ * \brief settings of the denoise node.
+ */
+ NodeDenoise *m_settings;
+
+ public:
+ DenoiseOperation();
+ /**
+ * Initialize the execution
+ */
+ void initExecution();
+
+ /**
+ * Deinitialize the execution
+ */
+ void deinitExecution();
+
+ void setDenoiseSettings(NodeDenoise *settings)
+ {
+ this->m_settings = settings;
+ }
+ bool determineDependingAreaOfInterest(rcti *input,
+ ReadBufferOperation *readOperation,
+ rcti *output);
+
+ protected:
+ void generateDenoise(float *data,
+ MemoryBuffer *inputTileColor,
+ MemoryBuffer *inputTileAlbedo,
+ MemoryBuffer *inputTileNormal,
+ NodeDenoise *settings);
+
+ MemoryBuffer *createMemoryBuffer(rcti *rect);
+};
+#endif
diff --git a/source/blender/compositor/operations/COM_GlareGhostOperation.cpp b/source/blender/compositor/operations/COM_GlareGhostOperation.cpp
index 944a1d9c5dc..9f01cf5d63a 100644
--- a/source/blender/compositor/operations/COM_GlareGhostOperation.cpp
+++ b/source/blender/compositor/operations/COM_GlareGhostOperation.cpp
@@ -51,7 +51,7 @@ void GlareGhostOperation::generateGlare(float *data, MemoryBuffer *inputTile, No
if (!breaked) {
FastGaussianBlurOperation::IIR_gauss(tbuf1, s1, 1, 3);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
if (!breaked) {
@@ -60,19 +60,19 @@ void GlareGhostOperation::generateGlare(float *data, MemoryBuffer *inputTile, No
MemoryBuffer *tbuf2 = tbuf1->duplicate();
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
if (!breaked) {
FastGaussianBlurOperation::IIR_gauss(tbuf2, s2, 0, 3);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
if (!breaked) {
FastGaussianBlurOperation::IIR_gauss(tbuf2, s2, 1, 3);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
if (!breaked) {
@@ -117,7 +117,7 @@ void GlareGhostOperation::generateGlare(float *data, MemoryBuffer *inputTile, No
gbuf->writePixel(x, y, c);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
@@ -142,7 +142,7 @@ void GlareGhostOperation::generateGlare(float *data, MemoryBuffer *inputTile, No
}
tbuf1->addPixel(x, y, tc);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
diff --git a/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp b/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp
index 1ceeba18960..75c2ae51bde 100644
--- a/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp
+++ b/source/blender/compositor/operations/COM_GlareSimpleStarOperation.cpp
@@ -58,7 +58,7 @@ void GlareSimpleStarOperation::generateGlare(float *data,
c[3] = 1.0f;
tbuf2->writePixel(x, y, c);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
@@ -87,7 +87,7 @@ void GlareSimpleStarOperation::generateGlare(float *data,
c[3] = 1.0f;
tbuf2->writePixel(x, y, c);
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
diff --git a/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp b/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp
index 78ca373faaf..951dec9281e 100644
--- a/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp
+++ b/source/blender/compositor/operations/COM_GlareStreaksOperation.cpp
@@ -78,7 +78,7 @@ void GlareStreaksOperation::generateGlare(float *data,
tdstcol[2] = 0.5f * (tdstcol[2] + c1[2] + wt * (c2[2] + wt * (c3[2] + wt * c4[2])));
tdstcol[3] = 1.0f;
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
diff --git a/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp b/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp
index 61ad4248fb0..fae280249de 100644
--- a/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp
+++ b/source/blender/compositor/operations/COM_HueSaturationValueCorrectOperation.cpp
@@ -51,15 +51,15 @@ void HueSaturationValueCorrectOperation::executePixelSampled(float output[4],
this->m_inputProgram->readSampled(hsv, x, y, sampler);
/* adjust hue, scaling returned default 0.5 up to 1 */
- f = curvemapping_evaluateF(this->m_curveMapping, 0, hsv[0]);
+ f = BKE_curvemapping_evaluateF(this->m_curveMapping, 0, hsv[0]);
hsv[0] += f - 0.5f;
/* adjust saturation, scaling returned default 0.5 up to 1 */
- f = curvemapping_evaluateF(this->m_curveMapping, 1, hsv[0]);
+ f = BKE_curvemapping_evaluateF(this->m_curveMapping, 1, hsv[0]);
hsv[1] *= (f * 2.0f);
/* adjust value, scaling returned default 0.5 up to 1 */
- f = curvemapping_evaluateF(this->m_curveMapping, 2, hsv[0]);
+ f = BKE_curvemapping_evaluateF(this->m_curveMapping, 2, hsv[0]);
hsv[2] *= (f * 2.0f);
hsv[0] = hsv[0] - floorf(hsv[0]); /* mod 1.0 */
diff --git a/source/blender/compositor/operations/COM_MaskOperation.cpp b/source/blender/compositor/operations/COM_MaskOperation.cpp
index 0c9208fb6bb..88a3a5c535c 100644
--- a/source/blender/compositor/operations/COM_MaskOperation.cpp
+++ b/source/blender/compositor/operations/COM_MaskOperation.cpp
@@ -148,7 +148,7 @@ void MaskOperation::executePixelSampled(float output[4],
}
}
else {
- /* incase loop below fails */
+ /* In case loop below fails. */
output[0] = 0.0f;
for (unsigned int i = 0; i < this->m_rasterMaskHandleTot; i++) {
diff --git a/source/blender/compositor/operations/COM_MixOperation.cpp b/source/blender/compositor/operations/COM_MixOperation.cpp
index a610cb0d1e8..6b8a0caa13b 100644
--- a/source/blender/compositor/operations/COM_MixOperation.cpp
+++ b/source/blender/compositor/operations/COM_MixOperation.cpp
@@ -162,12 +162,15 @@ void MixBlendOperation::executePixelSampled(float output[4],
/* ******** Mix Burn Operation ******** */
-MixBurnOperation::MixBurnOperation() : MixBaseOperation()
+MixColorBurnOperation::MixColorBurnOperation() : MixBaseOperation()
{
/* pass */
}
-void MixBurnOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler)
+void MixColorBurnOperation::executePixelSampled(float output[4],
+ float x,
+ float y,
+ PixelSampler sampler)
{
float inputColor1[4];
float inputColor2[4];
diff --git a/source/blender/compositor/operations/COM_MixOperation.h b/source/blender/compositor/operations/COM_MixOperation.h
index 6ea55a3edfd..fbf60fb9d37 100644
--- a/source/blender/compositor/operations/COM_MixOperation.h
+++ b/source/blender/compositor/operations/COM_MixOperation.h
@@ -95,9 +95,9 @@ class MixBlendOperation : public MixBaseOperation {
void executePixelSampled(float output[4], float x, float y, PixelSampler sampler);
};
-class MixBurnOperation : public MixBaseOperation {
+class MixColorBurnOperation : public MixBaseOperation {
public:
- MixBurnOperation();
+ MixColorBurnOperation();
void executePixelSampled(float output[4], float x, float y, PixelSampler sampler);
};
diff --git a/source/blender/compositor/operations/COM_TextureOperation.cpp b/source/blender/compositor/operations/COM_TextureOperation.cpp
index f2d78845b6c..e09ccbb016a 100644
--- a/source/blender/compositor/operations/COM_TextureOperation.cpp
+++ b/source/blender/compositor/operations/COM_TextureOperation.cpp
@@ -111,9 +111,9 @@ void TextureBaseOperation::executePixelSampled(float output[4],
float u = (x - cx) / this->getWidth() * 2;
float v = (y - cy) / this->getHeight() * 2;
- /* When no interpolation/filtering happens in multitex() foce nearest interpolation.
+ /* When no interpolation/filtering happens in multitex() force nearest interpolation.
* We do it here because (a) we can't easily say multitex() that we want nearest
- * interpolation and (b) in such configuration multitex() sinply floor's the value
+ * interpolation and (b) in such configuration multitex() simply floor's the value
* which often produces artifacts.
*/
if (m_texture != NULL && (m_texture->imaflag & TEX_INTERPOL) == 0) {
diff --git a/source/blender/compositor/operations/COM_VectorCurveOperation.cpp b/source/blender/compositor/operations/COM_VectorCurveOperation.cpp
index 850aef122f4..6996c7ecb71 100644
--- a/source/blender/compositor/operations/COM_VectorCurveOperation.cpp
+++ b/source/blender/compositor/operations/COM_VectorCurveOperation.cpp
@@ -48,7 +48,7 @@ void VectorCurveOperation::executePixelSampled(float output[4],
this->m_inputProgram->readSampled(input, x, y, sampler);
- curvemapping_evaluate_premulRGBF(this->m_curveMapping, output, input);
+ BKE_curvemapping_evaluate_premulRGBF(this->m_curveMapping, output, input);
}
void VectorCurveOperation::deinitExecution()
diff --git a/source/blender/compositor/operations/COM_ViewerOperation.cpp b/source/blender/compositor/operations/COM_ViewerOperation.cpp
index d5b9edae719..3f7619523e3 100644
--- a/source/blender/compositor/operations/COM_ViewerOperation.cpp
+++ b/source/blender/compositor/operations/COM_ViewerOperation.cpp
@@ -111,7 +111,7 @@ void ViewerOperation::executeRegion(rcti *rect, unsigned int /*tileNumber*/)
offset++;
offset4 += 4;
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
offset += offsetadd;
diff --git a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
index beba29e6755..6c5e45472a8 100644
--- a/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
+++ b/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
@@ -76,7 +76,7 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int /*tileNumber*/
this->m_input->read(&(buffer[offset4]), x, y, data);
offset4 += num_channels;
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
@@ -100,7 +100,7 @@ void WriteBufferOperation::executeRegion(rcti *rect, unsigned int /*tileNumber*/
this->m_input->readSampled(&(buffer[offset4]), x, y, COM_PS_NEAREST);
offset4 += num_channels;
}
- if (isBreaked()) {
+ if (isBraked()) {
breaked = true;
}
}
@@ -119,7 +119,7 @@ void WriteBufferOperation::executeOpenCLRegion(OpenCLDevice *device,
/*
* 1. create cl_mem from outputbuffer
* 2. call NodeOperation (input) executeOpenCLChunk(.....)
- * 3. schedule readback from opencl to main device (outputbuffer)
+ * 3. schedule read back from opencl to main device (outputbuffer)
* 4. schedule native callback
*
* note: list of cl_mem will be filled by 2, and needs to be cleaned up by 4
diff --git a/source/blender/datatoc/datatoc.c b/source/blender/datatoc/datatoc.c
index 6fe2650d66c..cf8d17e5e7e 100644
--- a/source/blender/datatoc/datatoc.c
+++ b/source/blender/datatoc/datatoc.c
@@ -94,11 +94,11 @@ int main(int argc, char **argv)
fprintf(fpout, "/* DataToC output of file <%s> */\n\n", argv[1]);
/* Quiet 'missing-variable-declarations' warning. */
- fprintf(fpout, "extern int datatoc_%s_size;\n", argv[1]);
- fprintf(fpout, "extern char datatoc_%s[];\n\n", argv[1]);
+ fprintf(fpout, "extern const int datatoc_%s_size;\n", argv[1]);
+ fprintf(fpout, "extern const char datatoc_%s[];\n\n", argv[1]);
- fprintf(fpout, "int datatoc_%s_size = %d;\n", argv[1], (int)size);
- fprintf(fpout, "char datatoc_%s[] = {\n", argv[1]);
+ fprintf(fpout, "const int datatoc_%s_size = %d;\n", argv[1], (int)size);
+ fprintf(fpout, "const char datatoc_%s[] = {\n", argv[1]);
while (size--) {
/* if we want to open in an editor
* this is nicer to avoid very long lines */
diff --git a/source/blender/depsgraph/DEG_depsgraph.h b/source/blender/depsgraph/DEG_depsgraph.h
index bdcb4061096..fd12f90016b 100644
--- a/source/blender/depsgraph/DEG_depsgraph.h
+++ b/source/blender/depsgraph/DEG_depsgraph.h
@@ -55,9 +55,6 @@ typedef struct Depsgraph Depsgraph;
struct Main;
-struct PointerRNA;
-struct PropertyRNA;
-struct RenderEngineType;
struct Scene;
struct ViewLayer;
diff --git a/source/blender/depsgraph/DEG_depsgraph_build.h b/source/blender/depsgraph/DEG_depsgraph_build.h
index 18e06410adf..37dfaf2c3e2 100644
--- a/source/blender/depsgraph/DEG_depsgraph_build.h
+++ b/source/blender/depsgraph/DEG_depsgraph_build.h
@@ -34,12 +34,9 @@ struct Depsgraph;
/* ------------------------------------------------ */
struct CacheFile;
-struct Collection;
struct CustomData_MeshMasks;
-struct EffectorWeights;
struct ID;
struct Main;
-struct ModifierData;
struct Object;
struct Scene;
struct ViewLayer;
diff --git a/source/blender/depsgraph/DEG_depsgraph_query.h b/source/blender/depsgraph/DEG_depsgraph_query.h
index e3381e79e9c..82f7f33411a 100644
--- a/source/blender/depsgraph/DEG_depsgraph_query.h
+++ b/source/blender/depsgraph/DEG_depsgraph_query.h
@@ -32,14 +32,13 @@
/* Needed for the instance iterator. */
#include "DNA_object_types.h"
-struct ID;
-
struct BLI_Iterator;
-struct Base;
struct CustomData_MeshMasks;
struct Depsgraph;
struct DupliObject;
+struct ID;
struct ListBase;
+struct PointerRNA;
struct Scene;
struct ViewLayer;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_cache.cc b/source/blender/depsgraph/intern/builder/deg_builder_cache.cc
index 3df707e92c1..3cfb4f95e5e 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_cache.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_cache.cc
@@ -103,9 +103,9 @@ void animated_property_cb(ID * /*id*/, FCurve *fcurve, void *data_v)
/* Get storage for the ID.
* This is needed to deal with cases when nested datablock is animated by its parent. */
AnimatedPropertyStorage *animated_property_storage = data->animated_property_storage;
- if (pointer_rna.id.data != data->pointer_rna.id.data) {
+ if (pointer_rna.owner_id != data->pointer_rna.owner_id) {
animated_property_storage = data->builder_cache->ensureAnimatedPropertyStorage(
- reinterpret_cast<ID *>(pointer_rna.id.data));
+ pointer_rna.owner_id);
}
/* Set the property as animated. */
animated_property_storage->tagPropertyAsAnimated(&pointer_rna, property_rna);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_map.h b/source/blender/depsgraph/intern/builder/deg_builder_map.h
index 0767837a587..65b493e2467 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_map.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_map.h
@@ -25,7 +25,6 @@
#include "intern/depsgraph_type.h"
-struct GSet;
struct ID;
namespace DEG {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index 986f65df3fc..fd4c1e251e4 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -944,8 +944,9 @@ void DepsgraphNodeBuilder::build_driver_id_property(ID *id, const char *rna_path
}
PointerRNA id_ptr, ptr;
PropertyRNA *prop;
+ int index;
RNA_id_pointer_create(id, &id_ptr);
- if (!RNA_path_resolve_full(&id_ptr, rna_path, &ptr, &prop, NULL)) {
+ if (!RNA_path_resolve_full(&id_ptr, rna_path, &ptr, &prop, &index)) {
return;
}
if (prop == NULL) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index de9f0e4d6cd..65f3521b556 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -31,7 +31,6 @@
#include "DEG_depsgraph.h"
-struct Base;
struct CacheFile;
struct Camera;
struct Collection;
@@ -44,14 +43,12 @@ struct LayerCollection;
struct Light;
struct LightProbe;
struct ListBase;
-struct MTex;
struct Main;
struct Mask;
struct Material;
struct MovieClip;
struct Object;
struct ParticleSettings;
-struct Probe;
struct Scene;
struct Speaker;
struct Tex;
@@ -64,15 +61,12 @@ struct bNodeTree;
struct bPoseChannel;
struct bSound;
-struct PropertyRNA;
-
namespace DEG {
struct ComponentNode;
struct Depsgraph;
class DepsgraphBuilderCache;
struct IDNode;
-struct Node;
struct OperationNode;
struct TimeSourceNode;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 0e608bdf903..ba6a4756313 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -531,7 +531,7 @@ void DepsgraphRelationBuilder::build_collection(LayerCollection *from_layer_coll
/* If we came from layer collection we don't go deeper, view layer
* builder takes care of going deeper.
*
- * NOTE: Do early output before tagging build as done, so possbile
+ * NOTE: Do early output before tagging build as done, so possible
* subsequent builds from outside of the layer collection properly
* recurses into all the nested objects and collections. */
return;
@@ -1384,7 +1384,7 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
* it. This is necessary to provide more granular dependencies specifically for
* Bone objects, because the armature data doesn't have per-bone components,
* and generic add_relation can only add one link. */
- ID *id_ptr = (ID *)property_entry_key.ptr.id.data;
+ ID *id_ptr = property_entry_key.ptr.owner_id;
bool is_bone = id_ptr && property_entry_key.ptr.type == &RNA_Bone;
/* If the Bone property is referenced via obj.pose.bones[].bone,
* the RNA pointer refers to the Object ID, so skip to data. */
@@ -1433,8 +1433,8 @@ void DepsgraphRelationBuilder::build_driver_data(ID *id, FCurve *fcu)
PointerRNA ptr;
RNA_id_pointer_create(id, &id_ptr);
if (RNA_path_resolve_full(&id_ptr, fcu->rna_path, &ptr, NULL, NULL)) {
- if (id_ptr.id.data != ptr.id.data) {
- ComponentKey cow_key((ID *)ptr.id.data, NodeType::COPY_ON_WRITE);
+ if (id_ptr.owner_id != ptr.owner_id) {
+ ComponentKey cow_key(ptr.owner_id, NodeType::COPY_ON_WRITE);
add_relation(cow_key, driver_key, "Driven CoW -> Driver", RELATION_CHECK_BEFORE_ADD);
}
}
@@ -1531,8 +1531,9 @@ void DepsgraphRelationBuilder::build_driver_id_property(ID *id, const char *rna_
}
PointerRNA id_ptr, ptr;
PropertyRNA *prop;
+ int index;
RNA_id_pointer_create(id, &id_ptr);
- if (!RNA_path_resolve_full(&id_ptr, rna_path, &ptr, &prop, NULL)) {
+ if (!RNA_path_resolve_full(&id_ptr, rna_path, &ptr, &prop, &index)) {
return;
}
if (prop == NULL) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 0e15818622f..e58ef989ac9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -51,7 +51,6 @@ struct Camera;
struct Collection;
struct EffectorWeights;
struct FCurve;
-struct GHash;
struct ID;
struct Image;
struct Key;
@@ -59,11 +58,9 @@ struct LayerCollection;
struct Light;
struct LightProbe;
struct ListBase;
-struct MTex;
struct Main;
struct Mask;
struct Material;
-struct ModifierData;
struct MovieClip;
struct Object;
struct ParticleSettings;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_rna.cc b/source/blender/depsgraph/intern/builder/deg_builder_rna.cc
index be494104522..d3ae3da9b56 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_rna.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_rna.cc
@@ -177,7 +177,7 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier(const PointerRNA *ptr,
return node_identifier;
}
/* Set default values for returns. */
- node_identifier.id = static_cast<ID *>(ptr->id.data);
+ node_identifier.id = ptr->owner_id;
node_identifier.component_name = "";
node_identifier.operation_code = OperationCode::OPERATION;
node_identifier.operation_name = "";
@@ -239,7 +239,7 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier(const PointerRNA *ptr,
return node_identifier;
}
else if (RNA_struct_is_a(ptr->type, &RNA_Constraint)) {
- const Object *object = static_cast<const Object *>(ptr->id.data);
+ const Object *object = reinterpret_cast<const Object *>(ptr->owner_id);
const bConstraint *constraint = static_cast<const bConstraint *>(ptr->data);
RNANodeQueryIDData *id_data = ensure_id_data(&object->id);
/* Check whether is object or bone constraint. */
@@ -259,7 +259,7 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier(const PointerRNA *ptr,
return node_identifier;
}
else if (ELEM(ptr->type, &RNA_ConstraintTarget, &RNA_ConstraintTargetBone)) {
- Object *object = (Object *)ptr->id.data;
+ Object *object = reinterpret_cast<Object *>(ptr->owner_id);
bConstraintTarget *tgt = (bConstraintTarget *)ptr->data;
/* Check whether is object or bone constraint. */
bPoseChannel *pchan = NULL;
@@ -323,14 +323,14 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier(const PointerRNA *ptr,
}
else if (ptr->type == &RNA_ShapeKey) {
KeyBlock *key_block = static_cast<KeyBlock *>(ptr->data);
- node_identifier.id = static_cast<ID *>(ptr->id.data);
+ node_identifier.id = ptr->owner_id;
node_identifier.type = NodeType::PARAMETERS;
node_identifier.operation_code = OperationCode::PARAMETERS_EVAL;
node_identifier.operation_name = key_block->name;
return node_identifier;
}
else if (ptr->type == &RNA_Key) {
- node_identifier.id = static_cast<ID *>(ptr->id.data);
+ node_identifier.id = ptr->owner_id;
node_identifier.type = NodeType::GEOMETRY;
return node_identifier;
}
@@ -348,12 +348,12 @@ RNANodeIdentifier RNANodeQuery::construct_node_identifier(const PointerRNA *ptr,
return node_identifier;
}
else if (ELEM(ptr->type, &RNA_Curve, &RNA_TextCurve)) {
- node_identifier.id = (ID *)ptr->id.data;
+ node_identifier.id = ptr->owner_id;
node_identifier.type = NodeType::GEOMETRY;
return node_identifier;
}
else if (ELEM(ptr->type, &RNA_BezierSplinePoint, &RNA_SplinePoint)) {
- node_identifier.id = (ID *)ptr->id.data;
+ node_identifier.id = ptr->owner_id;
node_identifier.type = NodeType::GEOMETRY;
return node_identifier;
}
diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h
index 15ce57cb169..96b1a2a1f8a 100644
--- a/source/blender/depsgraph/intern/depsgraph.h
+++ b/source/blender/depsgraph/intern/depsgraph.h
@@ -45,13 +45,11 @@
struct GHash;
struct GSet;
struct ID;
-struct Main;
struct Scene;
struct ViewLayer;
namespace DEG {
-struct ComponentNode;
struct IDNode;
struct Node;
struct OperationNode;
diff --git a/source/blender/depsgraph/intern/depsgraph_query.cc b/source/blender/depsgraph/intern/depsgraph_query.cc
index 23f2bf4194f..8556a351e2b 100644
--- a/source/blender/depsgraph/intern/depsgraph_query.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query.cc
@@ -205,11 +205,11 @@ void DEG_get_evaluated_rna_pointer(const Depsgraph *depsgraph,
if ((ptr == NULL) || (r_ptr_eval == NULL)) {
return;
}
- ID *orig_id = (ID *)ptr->id.data;
+ ID *orig_id = ptr->owner_id;
ID *cow_id = DEG_get_evaluated_id(depsgraph, orig_id);
- if (ptr->id.data == ptr->data) {
+ if (ptr->owner_id == ptr->data) {
/* For ID pointers, it's easy... */
- r_ptr_eval->id.data = (void *)cow_id;
+ r_ptr_eval->owner_id = cow_id;
r_ptr_eval->data = (void *)cow_id;
r_ptr_eval->type = ptr->type;
}
@@ -220,7 +220,7 @@ void DEG_get_evaluated_rna_pointer(const Depsgraph *depsgraph,
const Object *ob_eval = (Object *)cow_id;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
const bPoseChannel *pchan_eval = BKE_pose_channel_find_name(ob_eval->pose, pchan->name);
- r_ptr_eval->id.data = (void *)cow_id;
+ r_ptr_eval->owner_id = cow_id;
r_ptr_eval->data = (void *)pchan_eval;
r_ptr_eval->type = ptr->type;
}
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index 392514990e3..b73a3c08e10 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -638,7 +638,7 @@ void graph_id_tag_update(
* This way IDs in the undo steps will have this flag preserved, making it possible to restore
* all needed tags when new dependency graph is created on redo.
* This is the only way to ensure modifications to animation data (such as keyframes i.e.)
- * properly triggers animation update for the newely constructed dependency graph on redo (while
+ * properly triggers animation update for the newly constructed dependency graph on redo (while
* usually newly created dependency graph skips animation update to avoid loss of unkeyed
* changes). */
if (update_source == DEG_UPDATE_SOURCE_USER_EDIT) {
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index 1f310957896..1f9c12f604d 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -1027,7 +1027,7 @@ class SceneBackup {
*
* NOTE: Scene can not disappear after relations update, because otherwise the entire dependency
* graph will be gone. This means we don't need to compare original scene pointer, or worry about
- * freeing those if they cant' be restorted: we just copy them over to a new scene. */
+ * freeing those if they cant' be restored: we just copy them over to a new scene. */
void *sound_scene;
void *playback_handle;
void *sound_scrub_handle;
diff --git a/source/blender/depsgraph/intern/node/deg_node.h b/source/blender/depsgraph/intern/node/deg_node.h
index eea69502baa..acfc8d19bc7 100644
--- a/source/blender/depsgraph/intern/node/deg_node.h
+++ b/source/blender/depsgraph/intern/node/deg_node.h
@@ -29,7 +29,6 @@
#include "DEG_depsgraph_build.h"
-struct GHash;
struct ID;
struct Scene;
diff --git a/source/blender/depsgraph/intern/node/deg_node_id.h b/source/blender/depsgraph/intern/node/deg_node_id.h
index e6eb91a6b2d..35184253f5c 100644
--- a/source/blender/depsgraph/intern/node/deg_node_id.h
+++ b/source/blender/depsgraph/intern/node/deg_node_id.h
@@ -26,6 +26,8 @@
#include "intern/node/deg_node.h"
#include "BLI_sys_types.h"
+struct GHash;
+
namespace DEG {
struct ComponentNode;
diff --git a/source/blender/depsgraph/intern/node/deg_node_operation.h b/source/blender/depsgraph/intern/node/deg_node_operation.h
index b0776d186bb..87c1a7f10a1 100644
--- a/source/blender/depsgraph/intern/node/deg_node_operation.h
+++ b/source/blender/depsgraph/intern/node/deg_node_operation.h
@@ -28,7 +28,6 @@
#include "intern/depsgraph_type.h"
struct Depsgraph;
-struct ID;
namespace DEG {
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 3129b9e23d6..138523c7208 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -52,6 +52,7 @@ set(SRC
intern/draw_anim_viz.c
intern/draw_armature.c
intern/draw_cache.c
+ intern/draw_cache_extract_mesh.c
intern/draw_cache_impl_curve.c
intern/draw_cache_impl_displist.c
intern/draw_cache_impl_lattice.c
@@ -69,6 +70,7 @@ set(SRC
intern/draw_manager_shader.c
intern/draw_manager_text.c
intern/draw_manager_texture.c
+ intern/draw_select_buffer.c
intern/draw_view.c
modes/edit_armature_mode.c
modes/edit_curve_mode.c
@@ -94,6 +96,7 @@ set(SRC
engines/eevee/eevee_lightprobes.c
engines/eevee/eevee_lights.c
engines/eevee/eevee_lookdev.c
+ engines/eevee/eevee_lut.c
engines/eevee/eevee_materials.c
engines/eevee/eevee_mist.c
engines/eevee/eevee_motion_blur.c
@@ -126,12 +129,14 @@ set(SRC
engines/gpencil/gpencil_engine.h
engines/gpencil/gpencil_render.c
engines/gpencil/gpencil_shader_fx.c
- engines/select/select_engine.c
engines/select/select_draw_utils.c
+ engines/select/select_engine.c
DRW_engine.h
+ DRW_select_buffer.h
intern/DRW_render.h
intern/draw_cache.h
+ intern/draw_cache_extract.h
intern/draw_cache_impl.h
intern/draw_cache_inline.h
intern/draw_common.h
diff --git a/source/blender/draw/DRW_engine.h b/source/blender/draw/DRW_engine.h
index 491717d0137..34d3ae1d207 100644
--- a/source/blender/draw/DRW_engine.h
+++ b/source/blender/draw/DRW_engine.h
@@ -26,28 +26,20 @@
#include "BLI_sys_types.h" /* for bool */
struct ARegion;
-struct Base;
struct DRWInstanceDataList;
-struct DRWPass;
struct Depsgraph;
struct DrawEngineType;
struct GPUMaterial;
struct GPUOffScreen;
struct GPUViewport;
struct ID;
-struct IDProperty;
struct Main;
-struct Material;
struct Object;
-struct RegionView3D;
struct RenderEngine;
struct RenderEngineType;
struct Scene;
struct View3D;
-struct ViewContext;
struct ViewLayer;
-struct ViewportEngineData;
-struct WorkSpace;
struct bContext;
struct rcti;
@@ -141,9 +133,7 @@ void DRW_draw_depth_object(struct ARegion *ar,
void DRW_draw_select_id(struct Depsgraph *depsgraph,
struct ARegion *ar,
struct View3D *v3d,
- struct Base **bases,
- const uint bases_len,
- short select_mode);
+ const struct rcti *rect);
/* grease pencil render */
bool DRW_render_check_grease_pencil(struct Depsgraph *depsgraph);
@@ -168,27 +158,12 @@ void DRW_opengl_context_disable_ex(bool restore);
void DRW_opengl_render_context_enable(void *re_gl_context);
void DRW_opengl_render_context_disable(void *re_gl_context);
-void DRW_gawain_render_context_enable(void *re_gpu_context);
-void DRW_gawain_render_context_disable(void *re_gpu_context);
+void DRW_gpu_render_context_enable(void *re_gpu_context);
+void DRW_gpu_render_context_disable(void *re_gpu_context);
void DRW_deferred_shader_remove(struct GPUMaterial *mat);
struct DrawDataList *DRW_drawdatalist_from_id(struct ID *id);
void DRW_drawdata_free(struct ID *id);
-/* select_engine.c */
-void DRW_select_context_create(struct Base **bases,
- const uint bases_len,
- short select_mode);
-bool DRW_select_elem_get(const uint sel_id, uint *r_elem, uint *r_base_index, char *r_elem_type);
-uint DRW_select_context_offset_for_object_elem(const uint base_index, char elem_type);
-uint DRW_select_context_elem_len(void);
-void DRW_framebuffer_select_id_read(const struct rcti *rect, uint *r_buf);
-void DRW_draw_select_id_object(struct Depsgraph *depsgraph,
- struct ViewLayer *view_layer,
- struct ARegion *ar,
- struct View3D *v3d,
- struct Object *ob,
- short select_mode);
-
#endif /* __DRW_ENGINE_H__ */
diff --git a/source/blender/draw/DRW_select_buffer.h b/source/blender/draw/DRW_select_buffer.h
new file mode 100644
index 00000000000..0ad13af81ba
--- /dev/null
+++ b/source/blender/draw/DRW_select_buffer.h
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ *
+ * Copyright 2016, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw
+ */
+
+#ifndef __DRW_SELECT_BUFFER_H__
+#define __DRW_SELECT_BUFFER_H__
+
+#include "BLI_sys_types.h" /* for bool and uint */
+
+struct ARegion;
+struct Base;
+struct Depsgraph;
+struct Object;
+struct View3D;
+struct rcti;
+
+typedef struct SELECTID_ObjectData {
+ DrawData dd;
+
+ uint drawn_index;
+ bool is_drawn;
+} SELECTID_ObjectData;
+
+struct ObjectOffsets {
+ /* For convenience only. */
+ union {
+ uint offset;
+ uint face_start;
+ };
+ union {
+ uint face;
+ uint edge_start;
+ };
+ union {
+ uint edge;
+ uint vert_start;
+ };
+ uint vert;
+};
+
+struct SELECTID_Context {
+ /* All context objects */
+ struct Object **objects;
+ uint objects_len;
+
+ /* Array with only drawn objects. When a new object is found within the rect,
+ * it is added to the end of the list.
+ * The list is reset to any viewport or context update. */
+ struct ObjectOffsets *index_offsets;
+ struct Object **objects_drawn;
+ uint objects_drawn_len;
+
+ /** Total number of element indices `index_offsets[object_drawn_len - 1].vert`. */
+ uint index_drawn_len;
+
+ short select_mode;
+
+ /* To check for updates. */
+ float persmat[4][4];
+ bool is_dirty;
+
+ /* rect is used to check which objects whose indexes need to be drawn. */
+ rcti last_rect;
+};
+
+/* draw_select_buffer.c */
+bool DRW_select_buffer_elem_get(const uint sel_id,
+ uint *r_elem,
+ uint *r_base_index,
+ char *r_elem_type);
+uint DRW_select_buffer_context_offset_for_object_elem(struct Depsgraph *depsgraph,
+ struct Object *object,
+ char elem_type);
+uint *DRW_select_buffer_read(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const rcti *rect,
+ uint *r_buf_len);
+uint *DRW_select_buffer_bitmap_from_rect(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const struct rcti *rect,
+ uint *r_bitmap_len);
+uint *DRW_select_buffer_bitmap_from_circle(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int center[2],
+ const int radius,
+ uint *r_bitmap_len);
+uint *DRW_select_buffer_bitmap_from_poly(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int poly[][2],
+ const int poly_len,
+ const struct rcti *rect,
+ uint *r_bitmap_len);
+uint DRW_select_buffer_sample_point(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int center[2]);
+uint DRW_select_buffer_find_nearest_to_point(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int center[2],
+ const uint id_min,
+ const uint id_max,
+ uint *dist);
+void DRW_select_buffer_context_create(struct Base **bases,
+ const uint bases_len,
+ short select_mode);
+
+#endif /* __DRW_SELECT_BUFFER_H__ */
diff --git a/source/blender/draw/engines/basic/basic_engine.c b/source/blender/draw/engines/basic/basic_engine.c
index dd7f4683ce0..f548bd15bf4 100644
--- a/source/blender/draw/engines/basic/basic_engine.c
+++ b/source/blender/draw/engines/basic/basic_engine.c
@@ -25,6 +25,7 @@
#include "DRW_render.h"
+#include "BKE_paint.h"
#include "BKE_particle.h"
#include "DNA_particle_types.h"
@@ -161,13 +162,19 @@ static void basic_cache_populate(void *vedata, Object *ob)
}
}
- struct GPUBatch *geom = DRW_cache_object_surface_get(ob);
- if (geom) {
- const bool do_cull = (draw_ctx->v3d &&
- (draw_ctx->v3d->shading.flag & V3D_SHADING_BACKFACE_CULLING));
- /* Depth Prepass */
- DRW_shgroup_call(
- (do_cull) ? stl->g_data->depth_shgrp_cull : stl->g_data->depth_shgrp, geom, ob);
+ const bool use_sculpt_pbvh = BKE_sculptsession_use_pbvh_draw(ob, draw_ctx->v3d);
+ const bool do_cull = (draw_ctx->v3d &&
+ (draw_ctx->v3d->shading.flag & V3D_SHADING_BACKFACE_CULLING));
+ DRWShadingGroup *shgrp = (do_cull) ? stl->g_data->depth_shgrp_cull : stl->g_data->depth_shgrp;
+
+ if (use_sculpt_pbvh) {
+ DRW_shgroup_call_sculpt(shgrp, ob, false, false, false);
+ }
+ else {
+ struct GPUBatch *geom = DRW_cache_object_surface_get(ob);
+ if (geom) {
+ DRW_shgroup_call(shgrp, geom, ob);
+ }
}
}
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 93521c71127..0ca1e0b2858 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -509,7 +509,7 @@ void EEVEE_downsample_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, int le
}
/**
- * Simple downsampling algorithm for cubemap. Reconstruct mip chain up to mip level.
+ * Simple down-sampling algorithm for cubemap. Reconstruct mip chain up to mip level.
*/
void EEVEE_downsample_cube_buffer(EEVEE_Data *vedata, GPUTexture *texture_src, int level)
{
@@ -580,7 +580,7 @@ void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
/* NOTE: Lookdev drawing happens before TAA but after
* motion blur and dof to avoid distortions.
* Velocity resolve use a hack to exclude lookdev
- * spheres from creating shimering reprojection vectors. */
+ * spheres from creating shimmering re-projection vectors. */
EEVEE_lookdev_draw(vedata);
EEVEE_velocity_resolve(vedata);
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index b36ad540ef9..ab4eb7b8532 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -295,7 +295,13 @@ static void eevee_draw_background(void *vedata)
EEVEE_volumes_resolve(sldata, vedata);
/* Transparent */
+ /* TODO(fclem): should be its own Framebuffer.
+ * This is needed because dualsource blending only works with 1 color buffer. */
+ GPU_framebuffer_texture_attach(fbl->main_color_fb, dtxl->depth, 0, 0);
+ GPU_framebuffer_bind(fbl->main_color_fb);
DRW_draw_pass(psl->transparent_pass);
+ GPU_framebuffer_bind(fbl->main_fb);
+ GPU_framebuffer_texture_detach(fbl->main_color_fb, dtxl->depth);
/* Post Process */
DRW_stats_group_start("Post FX");
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c
index c82a112b343..05aea652591 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.c
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.c
@@ -80,8 +80,8 @@ extern void DRW_opengl_context_disable(void);
extern void DRW_opengl_render_context_enable(void *re_gl_context);
extern void DRW_opengl_render_context_disable(void *re_gl_context);
-extern void DRW_gawain_render_context_enable(void *re_gpu_context);
-extern void DRW_gawain_render_context_disable(void *re_gpu_context);
+extern void DRW_gpu_render_context_enable(void *re_gpu_context);
+extern void DRW_gpu_render_context_disable(void *re_gpu_context);
typedef struct EEVEE_LightBake {
Depsgraph *depsgraph;
@@ -138,7 +138,7 @@ typedef struct EEVEE_LightBake {
float vis_res;
/** Result of previous light bounce. */
GPUTexture *grid_prev;
- /** Pointer to the id.data of the probe object. */
+ /** Pointer to the owner_id of the probe object. */
LightProbe **grid_prb;
/* Reflection probe */
@@ -148,7 +148,7 @@ typedef struct EEVEE_LightBake {
int ref_cube_res;
/** Index of the current cube. */
int cube_offset;
- /** Pointer to the id.data of the probe object. */
+ /** Pointer to the owner_id of the probe object. */
LightProbe **cube_prb;
/* Dummy Textures */
@@ -412,7 +412,7 @@ static void eevee_lightbake_context_enable(EEVEE_LightBake *lbake)
if (lbake->gpu_context == NULL) {
lbake->gpu_context = GPU_context_create(0);
}
- DRW_gawain_render_context_enable(lbake->gpu_context);
+ DRW_gpu_render_context_enable(lbake->gpu_context);
}
else {
DRW_opengl_context_enable();
@@ -422,7 +422,7 @@ static void eevee_lightbake_context_enable(EEVEE_LightBake *lbake)
static void eevee_lightbake_context_disable(EEVEE_LightBake *lbake)
{
if (lbake->gl_context) {
- DRW_gawain_render_context_disable(lbake->gpu_context);
+ DRW_gpu_render_context_disable(lbake->gpu_context);
DRW_opengl_render_context_disable(lbake->gl_context);
}
else {
@@ -654,7 +654,7 @@ static void eevee_lightbake_delete_resources(EEVEE_LightBake *lbake)
if (lbake->gl_context) {
DRW_opengl_render_context_enable(lbake->gl_context);
- DRW_gawain_render_context_enable(lbake->gpu_context);
+ DRW_gpu_render_context_enable(lbake->gpu_context);
}
else if (!lbake->resource_only) {
DRW_opengl_context_enable();
@@ -675,8 +675,8 @@ static void eevee_lightbake_delete_resources(EEVEE_LightBake *lbake)
}
if (lbake->gpu_context) {
- DRW_gawain_render_context_disable(lbake->gpu_context);
- DRW_gawain_render_context_enable(lbake->gpu_context);
+ DRW_gpu_render_context_disable(lbake->gpu_context);
+ DRW_gpu_render_context_enable(lbake->gpu_context);
GPU_context_discard(lbake->gpu_context);
}
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.h b/source/blender/draw/engines/eevee/eevee_lightcache.h
index 5aea712a910..ede2de13dce 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.h
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.h
@@ -26,7 +26,6 @@
#include "BLI_sys_types.h" /* for bool */
struct EEVEE_Data;
-struct EEVEE_LightBake;
struct EEVEE_ViewLayerData;
struct LightCache;
struct Scene;
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 2026b44fe87..8b1309e8537 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -1213,7 +1213,7 @@ void EEVEE_lightbake_filter_visibility(EEVEE_ViewLayerData *sldata,
DRW_draw_pass(psl->probe_visibility_compute);
}
-/* Actually a simple downsampling */
+/* Actually a simple down-sampling. */
static void downsample_planar(void *vedata, int level)
{
EEVEE_PassList *psl = ((EEVEE_Data *)vedata)->psl;
diff --git a/source/blender/draw/engines/eevee/eevee_lights.c b/source/blender/draw/engines/eevee/eevee_lights.c
index d23287264b3..0bfc23b8354 100644
--- a/source/blender/draw/engines/eevee/eevee_lights.c
+++ b/source/blender/draw/engines/eevee/eevee_lights.c
@@ -779,7 +779,7 @@ static void eevee_light_setup(Object *ob, EEVEE_Light *evli)
/**
* Special ball distribution:
- * Point are distributed in a way that when they are orthogonaly
+ * Point are distributed in a way that when they are orthogonally
* projected into any plane, the resulting distribution is (close to)
* a uniform disc distribution.
*/
@@ -1166,9 +1166,8 @@ static void eevee_shadow_cascade_setup(Object *ob,
/* Compute offset. */
sub_v2_v2(shadow_texco, shadow_origin);
- mul_v2_fl(shadow_texco,
- (2.0f * sh_data->radius[c]) /
- linfo->shadow_cascade_size); /* Texture to light space. */
+ /* Texture to light space. */
+ mul_v2_fl(shadow_texco, (2.0f * sh_data->radius[c]) / linfo->shadow_cascade_size);
/* Apply offset. */
add_v2_v2(center, shadow_texco);
diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index e6e699bef10..f52fcf31267 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -75,22 +75,21 @@ void EEVEE_lookdev_cache_init(EEVEE_Data *vedata,
if (LOOK_DEV_OVERLAY_ENABLED(v3d)) {
/* Viewport / Spheres size. */
- rcti rect;
- ED_region_visible_rect(draw_ctx->ar, &rect);
+ const rcti *rect = ED_region_visible_rect(draw_ctx->ar);
/* Make the viewport width scale the lookdev spheres a bit.
* Scale between 1000px and 2000px. */
const float viewport_scale = clamp_f(
- BLI_rcti_size_x(&rect) / (2000.0f * U.dpi_fac), 0.5f, 1.0f);
+ BLI_rcti_size_x(rect) / (2000.0f * U.dpi_fac), 0.5f, 1.0f);
const int sphere_size = U.lookdev_sphere_size * U.dpi_fac * viewport_scale;
- if (sphere_size != effects->sphere_size || rect.xmax != effects->anchor[0] ||
- rect.ymin != effects->anchor[1]) {
+ if (sphere_size != effects->sphere_size || rect->xmax != effects->anchor[0] ||
+ rect->ymin != effects->anchor[1]) {
/* If sphere size or anchor point moves, reset TAA to avoid ghosting issue.
* This needs to happen early because we are changing taa_current_sample. */
effects->sphere_size = sphere_size;
- effects->anchor[0] = rect.xmax;
- effects->anchor[1] = rect.ymin;
+ effects->anchor[0] = rect->xmax;
+ effects->anchor[1] = rect->ymin;
EEVEE_temporal_sampling_reset(vedata);
}
}
diff --git a/source/blender/draw/engines/eevee/eevee_lut.c b/source/blender/draw/engines/eevee/eevee_lut.c
new file mode 100644
index 00000000000..b380269db99
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_lut.c
@@ -0,0 +1,23033 @@
+/*
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup gpu
+ */
+
+#include "eevee_lut.h" /* own include */
+
+const float ltc_mat_ggx[64 * 64 * 4] = {
+ 1.000000, 0.000000, 0.000000, 0.000020, 1.000000, 0.000000, 0.000000, 0.000504,
+ 1.000000, 0.000000, 0.000000, 0.002016, 1.000000, 0.000000, 0.000000, 0.004535,
+ 1.000000, 0.000000, 0.000000, 0.008063, 1.000000, 0.000000, 0.000000, 0.012598,
+ 1.000000, 0.000000, 0.000000, 0.018141, 1.000000, 0.000000, 0.000000, 0.024692,
+ 1.000000, 0.000000, 0.000000, 0.032253, 1.000000, 0.000000, 0.000000, 0.040821,
+ 1.000000, 0.000000, 0.000000, 0.050400, 1.000000, 0.000000, 0.000000, 0.060989,
+ 1.000000, 0.000000, 0.000000, 0.072591, 1.000000, 0.000000, 0.000000, 0.085206,
+ 1.000000, 0.000000, 0.000000, 0.098836, 1.000000, 0.000000, 0.000000, 0.113484,
+ 1.000000, 0.000000, 0.000000, 0.129153, 1.000000, 0.000000, 0.000000, 0.145839,
+ 1.000000, 0.000000, 0.000000, 0.163548, 1.000000, 0.000000, 0.000000, 0.182266,
+ 1.000000, 0.000000, 0.000000, 0.201942, 1.000000, 0.000000, 0.000000, 0.222314,
+ 1.000000, 0.000000, 0.000000, 0.241906, 1.000000, 0.000000, 0.000000, 0.262314,
+ 1.000000, 0.000000, 0.000000, 0.285754, 1.000000, 0.000000, 0.000000, 0.310159,
+ 1.000000, 0.000000, 0.000000, 0.335426, 1.000000, 0.000000, 0.000000, 0.361341,
+ 1.000000, 0.000000, 0.000000, 0.387445, 1.000000, 0.000000, 0.000000, 0.412784,
+ 1.000000, 0.000000, 0.000000, 0.438197, 1.000000, 0.000000, 0.000000, 0.466966,
+ 1.000000, 0.000000, 0.000000, 0.495590, 1.000000, 0.000000, 0.000000, 0.523448,
+ 1.000000, 0.000000, 0.000000, 0.549938, 1.000000, 0.000000, 0.000000, 0.579790,
+ 1.000000, 0.000000, 0.000000, 0.608746, 1.000000, 0.000000, 0.000000, 0.636185,
+ 1.000000, 0.000000, 0.000000, 0.664748, 1.000000, 0.000000, 0.000000, 0.693130,
+ 1.000000, 0.000000, 0.000000, 0.719660, 1.000000, 0.000000, 0.000000, 0.747662,
+ 1.000000, 0.000000, 0.000000, 0.774023, 1.000000, 0.000000, 0.000000, 0.799775,
+ 1.000000, 0.000000, 0.000000, 0.825274, 1.000000, 0.000000, 0.000000, 0.849156,
+ 1.000000, 0.000000, 0.000000, 0.873248, 1.000000, 0.000000, 0.000000, 0.895320,
+ 1.000000, 0.000000, 0.000000, 0.917565, 1.000000, 0.000000, 0.000000, 0.937863,
+ 1.000000, 0.000000, 0.000000, 0.958139, 1.000000, 0.000000, 0.000000, 0.976563,
+ 1.000000, 0.000000, 0.000000, 0.994658, 1.000000, 0.000000, 0.000000, 1.011200,
+ 1.000000, 0.000000, 0.000000, 1.027120, 1.000000, 0.000000, 0.000000, 1.041890,
+ 1.000000, 0.000000, 0.000000, 1.055680, 1.000000, 0.000000, 0.000000, 1.068770,
+ 1.000000, 0.000000, 0.000000, 1.080580, 1.000000, 0.000000, 0.000000, 1.091940,
+ 1.000000, 0.000000, 0.000000, 1.101910, 1.000000, 0.000000, 0.000000, 1.111610,
+ 1.000000, 0.000000, 0.000000, 1.119900, 1.000000, 0.000000, 0.000000, 1.128130,
+ 0.999547, -0.000000, 0.022442, 0.000020, 0.999495, -0.000011, 0.022441, 0.000504,
+ 0.999496, -0.000045, 0.022441, 0.002015, 0.999496, -0.000102, 0.022441, 0.004533,
+ 0.999495, -0.000181, 0.022441, 0.008058, 0.999497, -0.000283, 0.022441, 0.012591,
+ 0.999496, -0.000407, 0.022441, 0.018132, 0.999498, -0.000554, 0.022441, 0.024680,
+ 0.999499, -0.000724, 0.022441, 0.032236, 0.999495, -0.000916, 0.022440, 0.040801,
+ 0.999499, -0.001131, 0.022441, 0.050375, 0.999494, -0.001369, 0.022440, 0.060959,
+ 0.999489, -0.001629, 0.022440, 0.072554, 0.999489, -0.001912, 0.022441, 0.085162,
+ 0.999498, -0.002218, 0.022441, 0.098787, 0.999492, -0.002546, 0.022441, 0.113426,
+ 0.999507, -0.002898, 0.022442, 0.129088, 0.999494, -0.003272, 0.022439, 0.145767,
+ 0.999546, -0.003667, 0.022442, 0.163472, 0.999543, -0.004082, 0.022439, 0.182182,
+ 0.999499, -0.004501, 0.022434, 0.201843, 0.999503, -0.004837, 0.022420, 0.222198,
+ 0.999546, -0.004529, 0.022315, 0.241714, 0.999508, -0.005874, 0.022433, 0.262184,
+ 0.999509, -0.006388, 0.022427, 0.285609, 0.999501, -0.006910, 0.022417, 0.309998,
+ 0.999539, -0.007420, 0.022399, 0.335262, 0.999454, -0.007863, 0.022367, 0.361154,
+ 0.999529, -0.008119, 0.022283, 0.387224, 0.999503, -0.007999, 0.022106, 0.412520,
+ 0.999561, -0.009528, 0.022306, 0.438006, 0.999557, -0.009913, 0.022207, 0.466735,
+ 0.999541, -0.010094, 0.022040, 0.495332, 0.999562, -0.009968, 0.021807, 0.523197,
+ 0.999556, -0.010503, 0.021710, 0.550223, 0.999561, -0.011419, 0.021722, 0.579498,
+ 0.999588, -0.011182, 0.021336, 0.608416, 0.999633, -0.010773, 0.020869, 0.635965,
+ 0.999527, -0.012167, 0.021015, 0.664476, 0.999508, -0.011600, 0.020431, 0.692786,
+ 0.999568, -0.011560, 0.019979, 0.719709, 0.999671, -0.012112, 0.019741, 0.747370,
+ 0.999688, -0.011077, 0.018885, 0.773692, 0.999620, -0.012237, 0.018845, 0.799534,
+ 0.999823, -0.011033, 0.017800, 0.825046, 0.999599, -0.011492, 0.017422, 0.849075,
+ 0.999619, -0.010592, 0.016435, 0.872999, 0.999613, -0.010599, 0.015823, 0.895371,
+ 0.999640, -0.009799, 0.014813, 0.917364, 0.999770, -0.009672, 0.014072, 0.938002,
+ 0.999726, -0.008692, 0.012954, 0.957917, 0.999730, -0.008669, 0.012233, 0.976557,
+ 0.999773, -0.007320, 0.010896, 0.994459, 0.999811, -0.007560, 0.010271, 1.011180,
+ 0.999862, -0.005837, 0.008788, 1.027010, 0.999835, -0.006314, 0.008275, 1.041860,
+ 0.999871, -0.004508, 0.006746, 1.055690, 0.999867, -0.004861, 0.006210, 1.068610,
+ 0.999939, -0.003221, 0.004783, 1.080640, 0.999918, -0.003182, 0.004064, 1.091810,
+ 1.000030, -0.001933, 0.002807, 1.102070, 0.999928, -0.001537, 0.001987, 1.111520,
+ 0.999933, -0.000624, 0.000918, 1.120090, 1.000000, -0.000001, 0.000001, 1.128130,
+ 0.997866, -0.000001, 0.044833, 0.000020, 0.997987, -0.000023, 0.044839, 0.000503,
+ 0.997987, -0.000090, 0.044839, 0.002012, 0.997985, -0.000203, 0.044839, 0.004526,
+ 0.997986, -0.000362, 0.044839, 0.008046, 0.997987, -0.000565, 0.044839, 0.012572,
+ 0.997988, -0.000813, 0.044839, 0.018104, 0.997984, -0.001107, 0.044839, 0.024643,
+ 0.997985, -0.001446, 0.044839, 0.032188, 0.997987, -0.001830, 0.044839, 0.040739,
+ 0.997983, -0.002260, 0.044839, 0.050299, 0.997991, -0.002735, 0.044839, 0.060867,
+ 0.997984, -0.003255, 0.044838, 0.072444, 0.998002, -0.003820, 0.044839, 0.085035,
+ 0.997997, -0.004431, 0.044840, 0.098637, 0.998007, -0.005088, 0.044840, 0.113255,
+ 0.998008, -0.005790, 0.044840, 0.128891, 0.998003, -0.006537, 0.044838, 0.145548,
+ 0.997983, -0.007327, 0.044836, 0.163221, 0.997985, -0.008155, 0.044836, 0.181899,
+ 0.998005, -0.008990, 0.044829, 0.201533, 0.998026, -0.009644, 0.044793, 0.221821,
+ 0.998055, -0.009227, 0.044611, 0.241282, 0.998040, -0.011736, 0.044825, 0.261791,
+ 0.998048, -0.012763, 0.044816, 0.285181, 0.998088, -0.013806, 0.044800, 0.309540,
+ 0.998058, -0.014821, 0.044767, 0.334751, 0.998099, -0.015700, 0.044697, 0.360610,
+ 0.998116, -0.016198, 0.044512, 0.386603, 0.998195, -0.015945, 0.044171, 0.411844,
+ 0.998168, -0.018395, 0.044425, 0.437730, 0.998184, -0.019791, 0.044381, 0.466009,
+ 0.998251, -0.020143, 0.044069, 0.494574, 0.998305, -0.019885, 0.043563, 0.522405,
+ 0.998273, -0.021058, 0.043414, 0.549967, 0.998254, -0.022790, 0.043394, 0.578655,
+ 0.998349, -0.022311, 0.042653, 0.607580, 0.998430, -0.022309, 0.042000, 0.635524,
+ 0.998373, -0.024114, 0.041899, 0.663621, 0.998425, -0.023145, 0.040812, 0.691906,
+ 0.998504, -0.023368, 0.040057, 0.719339, 0.998443, -0.024165, 0.039463, 0.746430,
+ 0.998480, -0.022871, 0.038000, 0.773086, 0.998569, -0.023519, 0.037232, 0.798988,
+ 0.998619, -0.022311, 0.035647, 0.824249, 0.998594, -0.022311, 0.034523, 0.848808,
+ 0.998622, -0.021343, 0.032889, 0.872270, 0.998669, -0.020791, 0.031437, 0.895157,
+ 0.998705, -0.019842, 0.029693, 0.916769, 0.998786, -0.018917, 0.027963, 0.937773,
+ 0.998888, -0.017881, 0.026160, 0.957431, 0.999060, -0.016685, 0.024216, 0.976495,
+ 0.999038, -0.015546, 0.022264, 0.994169, 0.999237, -0.014135, 0.020197, 1.011120,
+ 0.999378, -0.012932, 0.018174, 1.026920, 0.999433, -0.011319, 0.015990, 1.041740,
+ 0.999439, -0.010124, 0.014039, 1.055590, 0.999614, -0.008375, 0.011783, 1.068520,
+ 0.999722, -0.007218, 0.009837, 1.080690, 0.999817, -0.005541, 0.007690, 1.091760,
+ 0.999830, -0.004270, 0.005782, 1.102110, 0.999964, -0.002739, 0.003745, 1.111520,
+ 1.000010, -0.001367, 0.001872, 1.120310, 0.999946, 0.000039, -0.000029, 1.128040,
+ 0.995847, -0.000001, 0.067179, 0.000020, 0.995464, -0.000034, 0.067153, 0.000502,
+ 0.995470, -0.000135, 0.067153, 0.002006, 0.995471, -0.000305, 0.067153, 0.004515,
+ 0.995470, -0.000541, 0.067153, 0.008026, 0.995471, -0.000846, 0.067153, 0.012541,
+ 0.995470, -0.001218, 0.067153, 0.018059, 0.995470, -0.001658, 0.067153, 0.024581,
+ 0.995463, -0.002166, 0.067153, 0.032106, 0.995468, -0.002741, 0.067153, 0.040637,
+ 0.995474, -0.003384, 0.067153, 0.050172, 0.995473, -0.004096, 0.067153, 0.060713,
+ 0.995478, -0.004875, 0.067153, 0.072262, 0.995476, -0.005721, 0.067153, 0.084819,
+ 0.995477, -0.006637, 0.067154, 0.098388, 0.995498, -0.007620, 0.067154, 0.112972,
+ 0.995509, -0.008671, 0.067154, 0.128568, 0.995509, -0.009790, 0.067153, 0.145183,
+ 0.995503, -0.010972, 0.067149, 0.162808, 0.995501, -0.012211, 0.067146, 0.181441,
+ 0.995530, -0.013456, 0.067137, 0.201015, 0.995550, -0.014391, 0.067083, 0.221206,
+ 0.995580, -0.014351, 0.066888, 0.240813, 0.995577, -0.017400, 0.067105, 0.261257,
+ 0.995602, -0.019111, 0.067118, 0.284467, 0.995623, -0.020671, 0.067095, 0.308765,
+ 0.995658, -0.022184, 0.067047, 0.333905, 0.995705, -0.023483, 0.066942, 0.359677,
+ 0.995719, -0.024193, 0.066671, 0.385554, 0.995786, -0.024354, 0.066266, 0.410951,
+ 0.995887, -0.027187, 0.066437, 0.437163, 0.995944, -0.029601, 0.066493, 0.464842,
+ 0.996004, -0.030104, 0.066010, 0.493320, 0.996128, -0.029831, 0.065269, 0.521131,
+ 0.996253, -0.031643, 0.065074, 0.549167, 0.996244, -0.033904, 0.064943, 0.577370,
+ 0.996309, -0.033329, 0.063893, 0.606073, 0.996417, -0.033894, 0.063085, 0.634527,
+ 0.996372, -0.035310, 0.062508, 0.662560, 0.996542, -0.034894, 0.061199, 0.690516,
+ 0.996568, -0.035161, 0.060069, 0.718317, 0.996711, -0.035432, 0.058852, 0.745280,
+ 0.996671, -0.034951, 0.057190, 0.772061, 0.996865, -0.034562, 0.055532, 0.798089,
+ 0.996802, -0.034257, 0.053782, 0.823178, 0.996992, -0.033086, 0.051610, 0.847949,
+ 0.996944, -0.032467, 0.049554, 0.871431, 0.997146, -0.030954, 0.047030, 0.894357,
+ 0.997189, -0.029937, 0.044604, 0.916142, 0.997471, -0.028139, 0.041881, 0.937193,
+ 0.997515, -0.026870, 0.039182, 0.957000, 0.997812, -0.024717, 0.036134, 0.975936,
+ 0.998027, -0.023353, 0.033395, 0.993910, 0.998233, -0.020984, 0.030192, 1.010750,
+ 0.998481, -0.019431, 0.027271, 1.026690, 0.998859, -0.016973, 0.024016, 1.041730,
+ 0.998940, -0.015232, 0.021052, 1.055510, 0.999132, -0.012750, 0.017863, 1.068560,
+ 0.999369, -0.010828, 0.014787, 1.080540, 0.999549, -0.008459, 0.011619, 1.091850,
+ 0.999805, -0.006394, 0.008672, 1.102070, 0.999850, -0.004146, 0.005668, 1.111700,
+ 0.999912, -0.002074, 0.002776, 1.120220, 1.000010, 0.000087, -0.000054, 1.128320,
+ 0.991943, -0.000002, 0.089338, 0.000020, 0.991952, -0.000045, 0.089339, 0.000500,
+ 0.991956, -0.000180, 0.089339, 0.001999, 0.991955, -0.000405, 0.089339, 0.004499,
+ 0.991953, -0.000720, 0.089339, 0.007998, 0.991955, -0.001125, 0.089339, 0.012496,
+ 0.991957, -0.001621, 0.089340, 0.017995, 0.991958, -0.002206, 0.089340, 0.024494,
+ 0.991947, -0.002881, 0.089339, 0.031993, 0.991962, -0.003647, 0.089340, 0.040493,
+ 0.991965, -0.004503, 0.089340, 0.049995, 0.991980, -0.005449, 0.089341, 0.060499,
+ 0.991970, -0.006485, 0.089340, 0.072007, 0.991976, -0.007612, 0.089341, 0.084521,
+ 0.991980, -0.008829, 0.089341, 0.098041, 0.991982, -0.010137, 0.089340, 0.112571,
+ 0.992008, -0.011535, 0.089342, 0.128115, 0.992026, -0.013023, 0.089341, 0.144672,
+ 0.992064, -0.014597, 0.089342, 0.162241, 0.992041, -0.016242, 0.089336, 0.180801,
+ 0.992086, -0.017889, 0.089321, 0.200302, 0.992157, -0.019037, 0.089240, 0.220332,
+ 0.992181, -0.019558, 0.089053, 0.240144, 0.992175, -0.022726, 0.089215, 0.260728,
+ 0.992210, -0.025420, 0.089304, 0.283473, 0.992220, -0.027488, 0.089270, 0.307673,
+ 0.992317, -0.029490, 0.089203, 0.332729, 0.992374, -0.031186, 0.089058, 0.358387,
+ 0.992505, -0.032066, 0.088699, 0.384102, 0.992568, -0.032972, 0.088320, 0.409767,
+ 0.992675, -0.036006, 0.088360, 0.436145, 0.992746, -0.039290, 0.088459, 0.463217,
+ 0.992873, -0.039934, 0.087829, 0.491557, 0.992934, -0.040231, 0.087011, 0.519516,
+ 0.993091, -0.042201, 0.086586, 0.547741, 0.993259, -0.044350, 0.086194, 0.575792,
+ 0.993455, -0.044637, 0.085119, 0.604233, 0.993497, -0.045430, 0.084058, 0.632925,
+ 0.993694, -0.046330, 0.082967, 0.660985, 0.993718, -0.047062, 0.081718, 0.688714,
+ 0.993973, -0.046884, 0.080029, 0.716743, 0.994207, -0.046705, 0.078129, 0.743770,
+ 0.994168, -0.046970, 0.076334, 0.770420, 0.994500, -0.045682, 0.073818, 0.796659,
+ 0.994356, -0.045552, 0.071554, 0.821868, 0.994747, -0.043949, 0.068609, 0.846572,
+ 0.994937, -0.043006, 0.065869, 0.870435, 0.995142, -0.041341, 0.062645, 0.893272,
+ 0.995451, -0.039652, 0.059290, 0.915376, 0.995445, -0.037845, 0.055850, 0.936196,
+ 0.995967, -0.035522, 0.052095, 0.956376, 0.996094, -0.033515, 0.048377, 0.975327,
+ 0.996622, -0.030682, 0.044257, 0.993471, 0.996938, -0.028550, 0.040469, 1.010520,
+ 0.997383, -0.025340, 0.036090, 1.026370, 0.997714, -0.023165, 0.032218, 1.041390,
+ 0.998249, -0.019814, 0.027843, 1.055420, 0.998596, -0.017434, 0.023876, 1.068460,
+ 0.998946, -0.014135, 0.019594, 1.080560, 0.999280, -0.011560, 0.015628, 1.091810,
+ 0.999507, -0.008391, 0.011461, 1.102130, 0.999697, -0.005666, 0.007633, 1.111690,
+ 0.999869, -0.002699, 0.003649, 1.120420, 1.000010, 0.000062, -0.000032, 1.128320,
+ 0.987221, -0.000002, 0.111332, 0.000020, 0.987390, -0.000056, 0.111351, 0.000498,
+ 0.987448, -0.000224, 0.111357, 0.001990, 0.987441, -0.000505, 0.111357, 0.004478,
+ 0.987442, -0.000898, 0.111357, 0.007961, 0.987442, -0.001403, 0.111357, 0.012440,
+ 0.987444, -0.002020, 0.111357, 0.017913, 0.987442, -0.002750, 0.111357, 0.024382,
+ 0.987446, -0.003591, 0.111357, 0.031847, 0.987435, -0.004546, 0.111356, 0.040309,
+ 0.987461, -0.005612, 0.111358, 0.049768, 0.987458, -0.006791, 0.111358, 0.060224,
+ 0.987443, -0.008083, 0.111356, 0.071679, 0.987476, -0.009487, 0.111358, 0.084136,
+ 0.987490, -0.011004, 0.111361, 0.097597, 0.987508, -0.012634, 0.111362, 0.112062,
+ 0.987494, -0.014377, 0.111357, 0.127533, 0.987526, -0.016231, 0.111359, 0.144015,
+ 0.987558, -0.018191, 0.111361, 0.161502, 0.987602, -0.020239, 0.111355, 0.179979,
+ 0.987692, -0.022273, 0.111346, 0.199386, 0.987702, -0.023531, 0.111215, 0.219183,
+ 0.987789, -0.024763, 0.111061, 0.239202, 0.987776, -0.028067, 0.111171, 0.259957,
+ 0.987856, -0.031675, 0.111327, 0.282198, 0.987912, -0.034247, 0.111282, 0.306294,
+ 0.988000, -0.036721, 0.111198, 0.331219, 0.988055, -0.038777, 0.110994, 0.356708,
+ 0.988241, -0.039772, 0.110547, 0.382234, 0.988399, -0.041608, 0.110198, 0.408227,
+ 0.988539, -0.044819, 0.110137, 0.434662, 0.988661, -0.048379, 0.110143, 0.461442,
+ 0.988967, -0.049590, 0.109453, 0.489318, 0.989073, -0.050680, 0.108628, 0.517516,
+ 0.989274, -0.052695, 0.108003, 0.545844, 0.989528, -0.054578, 0.107255, 0.573823,
+ 0.989709, -0.056150, 0.106294, 0.601944, 0.989991, -0.056866, 0.104896, 0.630855,
+ 0.990392, -0.057291, 0.103336, 0.658925, 0.990374, -0.058622, 0.101890, 0.686661,
+ 0.990747, -0.058476, 0.099783, 0.714548, 0.991041, -0.058266, 0.097431, 0.741860,
+ 0.991236, -0.058412, 0.095168, 0.768422, 0.991585, -0.057306, 0.092158, 0.794817,
+ 0.991984, -0.056424, 0.089117, 0.820336, 0.992100, -0.055361, 0.085805, 0.844930,
+ 0.992749, -0.053382, 0.082035, 0.868961, 0.992880, -0.051866, 0.078218, 0.891931,
+ 0.993511, -0.049249, 0.073894, 0.914186, 0.993617, -0.047196, 0.069640, 0.935320,
+ 0.994110, -0.044216, 0.064966, 0.955430, 0.994595, -0.041665, 0.060318, 0.974685,
+ 0.994976, -0.038431, 0.055349, 0.992807, 0.995579, -0.035349, 0.050394, 1.009960,
+ 0.996069, -0.031979, 0.045212, 1.026060, 0.996718, -0.028472, 0.040011, 1.041140,
+ 0.997173, -0.025079, 0.034946, 1.055170, 0.997818, -0.021333, 0.029653, 1.068300,
+ 0.998318, -0.017851, 0.024549, 1.080500, 0.998853, -0.014112, 0.019420, 1.091770,
+ 0.999218, -0.010591, 0.014387, 1.102200, 0.999594, -0.006935, 0.009435, 1.111750,
+ 0.999750, -0.003405, 0.004641, 1.120560, 1.000010, 0.000109, -0.000113, 1.128530,
+ 0.983383, -0.000003, 0.133358, 0.000020, 0.981942, -0.000067, 0.133162, 0.000495,
+ 0.981946, -0.000268, 0.133163, 0.001979, 0.981944, -0.000604, 0.133163, 0.004453,
+ 0.981941, -0.001074, 0.133162, 0.007917, 0.981946, -0.001678, 0.133163, 0.012370,
+ 0.981944, -0.002416, 0.133162, 0.017813, 0.981945, -0.003288, 0.133163, 0.024247,
+ 0.981945, -0.004295, 0.133162, 0.031670, 0.981955, -0.005436, 0.133164, 0.040085,
+ 0.981951, -0.006711, 0.133163, 0.049490, 0.981968, -0.008121, 0.133165, 0.059889,
+ 0.981979, -0.009665, 0.133166, 0.071281, 0.981996, -0.011345, 0.133168, 0.083669,
+ 0.982014, -0.013159, 0.133169, 0.097053, 0.982011, -0.015107, 0.133167, 0.111438,
+ 0.982062, -0.017191, 0.133172, 0.126826, 0.982100, -0.019407, 0.133175, 0.143215,
+ 0.982149, -0.021750, 0.133176, 0.160609, 0.982163, -0.024195, 0.133173, 0.178981,
+ 0.982247, -0.026591, 0.133148, 0.198249, 0.982291, -0.027916, 0.132974, 0.217795,
+ 0.982396, -0.029966, 0.132868, 0.238042, 0.982456, -0.033454, 0.132934, 0.258901,
+ 0.982499, -0.037864, 0.133137, 0.280639, 0.982617, -0.040927, 0.133085, 0.304604,
+ 0.982740, -0.043852, 0.132985, 0.329376, 0.982944, -0.046229, 0.132728, 0.354697,
+ 0.983080, -0.047600, 0.132228, 0.380102, 0.983391, -0.050190, 0.131924, 0.406256,
+ 0.983514, -0.053590, 0.131737, 0.432735, 0.983730, -0.057186, 0.131567, 0.459359,
+ 0.984056, -0.059235, 0.130932, 0.486637, 0.984234, -0.061049, 0.130092, 0.515090,
+ 0.984748, -0.063076, 0.129230, 0.543461, 0.985073, -0.064740, 0.128174, 0.571376,
+ 0.985195, -0.067194, 0.127133, 0.599414, 0.985734, -0.068135, 0.125576, 0.628134,
+ 0.986241, -0.068609, 0.123639, 0.656399, 0.986356, -0.069851, 0.121834, 0.684258,
+ 0.986894, -0.070093, 0.119454, 0.711818, 0.987382, -0.069832, 0.116718, 0.739511,
+ 0.988109, -0.069398, 0.113699, 0.766267, 0.988363, -0.068958, 0.110454, 0.792456,
+ 0.989112, -0.067235, 0.106602, 0.818130, 0.989241, -0.066203, 0.102670, 0.842889,
+ 0.990333, -0.063894, 0.098138, 0.867204, 0.990591, -0.061853, 0.093539, 0.890380,
+ 0.991106, -0.059312, 0.088553, 0.912576, 0.991919, -0.056268, 0.083219, 0.934118,
+ 0.992111, -0.053408, 0.077830, 0.954254, 0.992997, -0.049546, 0.072045, 0.973722,
+ 0.993317, -0.046371, 0.066346, 0.991949, 0.994133, -0.042125, 0.060188, 1.009360,
+ 0.994705, -0.038498, 0.054250, 1.025590, 0.995495, -0.034096, 0.047986, 1.040830,
+ 0.996206, -0.030105, 0.041887, 1.054970, 0.996971, -0.025610, 0.035535, 1.068240,
+ 0.997796, -0.021393, 0.029365, 1.080560, 0.998272, -0.016961, 0.023293, 1.091820,
+ 0.998857, -0.012676, 0.017279, 1.102190, 0.999390, -0.008325, 0.011316, 1.111920,
+ 0.999752, -0.004108, 0.005579, 1.120750, 1.000000, 0.000151, -0.000119, 1.128850,
+ 0.975169, -0.000003, 0.154669, 0.000020, 0.975439, -0.000078, 0.154712, 0.000492,
+ 0.975464, -0.000312, 0.154716, 0.001966, 0.975464, -0.000702, 0.154716, 0.004424,
+ 0.975462, -0.001247, 0.154715, 0.007865, 0.975461, -0.001949, 0.154715, 0.012289,
+ 0.975464, -0.002807, 0.154715, 0.017696, 0.975468, -0.003820, 0.154716, 0.024087,
+ 0.975471, -0.004990, 0.154716, 0.031461, 0.975472, -0.006315, 0.154717, 0.039820,
+ 0.975486, -0.007797, 0.154718, 0.049164, 0.975489, -0.009435, 0.154718, 0.059493,
+ 0.975509, -0.011229, 0.154721, 0.070811, 0.975540, -0.013180, 0.154724, 0.083118,
+ 0.975557, -0.015288, 0.154726, 0.096415, 0.975585, -0.017551, 0.154728, 0.110705,
+ 0.975605, -0.019971, 0.154729, 0.125992, 0.975645, -0.022545, 0.154729, 0.142272,
+ 0.975711, -0.025265, 0.154735, 0.159549, 0.975788, -0.028099, 0.154736, 0.177805,
+ 0.975872, -0.030823, 0.154704, 0.196911, 0.975968, -0.032484, 0.154525, 0.216324,
+ 0.976063, -0.035128, 0.154432, 0.236628, 0.976157, -0.038862, 0.154460, 0.257539,
+ 0.976204, -0.043770, 0.154665, 0.278975, 0.976358, -0.047514, 0.154652, 0.302606,
+ 0.976571, -0.050864, 0.154535, 0.327204, 0.976725, -0.053499, 0.154221, 0.352276,
+ 0.977013, -0.055555, 0.153737, 0.377696, 0.977294, -0.058673, 0.153403, 0.403855,
+ 0.977602, -0.062272, 0.153120, 0.430333, 0.977932, -0.065817, 0.152755, 0.456855,
+ 0.978241, -0.068988, 0.152233, 0.483668, 0.978602, -0.071280, 0.151320, 0.512097,
+ 0.979234, -0.073277, 0.150235, 0.540455, 0.979770, -0.075163, 0.148978, 0.568486,
+ 0.979995, -0.077803, 0.147755, 0.596524, 0.980780, -0.079185, 0.146019, 0.624825,
+ 0.981628, -0.079967, 0.143906, 0.653403, 0.982067, -0.080853, 0.141561, 0.681445,
+ 0.982710, -0.081602, 0.139025, 0.708918, 0.983734, -0.081251, 0.135764, 0.736594,
+ 0.984310, -0.080620, 0.132152, 0.763576, 0.985071, -0.080160, 0.128460, 0.789797,
+ 0.986180, -0.078421, 0.124084, 0.815804, 0.986886, -0.076664, 0.119300, 0.840869,
+ 0.987485, -0.074774, 0.114236, 0.864952, 0.988431, -0.071670, 0.108654, 0.888431,
+ 0.988886, -0.069161, 0.102994, 0.910963, 0.990024, -0.065405, 0.096728, 0.932629,
+ 0.990401, -0.061976, 0.090384, 0.953130, 0.991093, -0.057930, 0.083789, 0.972587,
+ 0.992018, -0.053658, 0.077017, 0.991184, 0.992536, -0.049372, 0.070149, 1.008630,
+ 0.993421, -0.044481, 0.062953, 1.024940, 0.993928, -0.040008, 0.056045, 1.040170,
+ 0.994994, -0.034798, 0.048560, 1.054630, 0.995866, -0.030102, 0.041615, 1.068070,
+ 0.996916, -0.024823, 0.034260, 1.080390, 0.997766, -0.019923, 0.027167, 1.091770,
+ 0.998479, -0.014742, 0.020139, 1.102350, 0.999210, -0.009802, 0.013194, 1.112060,
+ 0.999652, -0.004743, 0.006407, 1.121040, 0.999998, 0.000089, -0.000104, 1.129060,
+ 0.967868, -0.000004, 0.175947, 0.000019, 0.968001, -0.000089, 0.175972, 0.000488,
+ 0.968010, -0.000355, 0.175973, 0.001951, 0.968012, -0.000798, 0.175974, 0.004390,
+ 0.968011, -0.001419, 0.175973, 0.007805, 0.968011, -0.002217, 0.175973, 0.012195,
+ 0.968016, -0.003192, 0.175974, 0.017561, 0.968019, -0.004345, 0.175974, 0.023903,
+ 0.968018, -0.005675, 0.175974, 0.031221, 0.968033, -0.007183, 0.175977, 0.039516,
+ 0.968049, -0.008868, 0.175979, 0.048788, 0.968047, -0.010731, 0.175978, 0.059039,
+ 0.968072, -0.012772, 0.175981, 0.070270, 0.968108, -0.014991, 0.175986, 0.082484,
+ 0.968112, -0.017387, 0.175985, 0.095678, 0.968173, -0.019961, 0.175993, 0.109862,
+ 0.968270, -0.022713, 0.176008, 0.125033, 0.968292, -0.025639, 0.176010, 0.141193,
+ 0.968339, -0.028730, 0.176007, 0.158336, 0.968389, -0.031940, 0.176001, 0.176441,
+ 0.968501, -0.034941, 0.175962, 0.195359, 0.968646, -0.037081, 0.175793, 0.214686,
+ 0.968789, -0.040233, 0.175708, 0.234973, 0.968860, -0.044260, 0.175700, 0.255871,
+ 0.969013, -0.049398, 0.175876, 0.277238, 0.969242, -0.053993, 0.175940, 0.300326,
+ 0.969419, -0.057730, 0.175781, 0.324702, 0.969763, -0.060564, 0.175432, 0.349527,
+ 0.970093, -0.063449, 0.174992, 0.374976, 0.970361, -0.067059, 0.174611, 0.401097,
+ 0.970825, -0.070825, 0.174226, 0.427496, 0.971214, -0.074287, 0.173684, 0.453858,
+ 0.971622, -0.078261, 0.173186, 0.480637, 0.972175, -0.081315, 0.172288, 0.508655,
+ 0.972944, -0.083268, 0.170979, 0.536973, 0.973595, -0.085596, 0.169573, 0.565138,
+ 0.974345, -0.088216, 0.168152, 0.593222, 0.975233, -0.090167, 0.166314, 0.621201,
+ 0.976239, -0.091211, 0.163931, 0.649919, 0.977289, -0.091696, 0.161106, 0.678011,
+ 0.978076, -0.092706, 0.158272, 0.705717, 0.979533, -0.092556, 0.154750, 0.733228,
+ 0.980335, -0.091816, 0.150638, 0.760454, 0.981808, -0.090851, 0.146201, 0.786918,
+ 0.983061, -0.089617, 0.141386, 0.812953, 0.984148, -0.087159, 0.135837, 0.838281,
+ 0.985047, -0.085062, 0.130135, 0.862594, 0.986219, -0.081854, 0.123882, 0.886330,
+ 0.987043, -0.078452, 0.117126, 0.908952, 0.988107, -0.074960, 0.110341, 0.930744,
+ 0.988955, -0.070355, 0.102885, 0.951728, 0.989426, -0.066280, 0.095417, 0.971166,
+ 0.990421, -0.061083, 0.087633, 0.989984, 0.991032, -0.056294, 0.079779, 1.007650,
+ 0.992041, -0.050815, 0.071817, 1.024340, 0.992794, -0.045405, 0.063713, 1.039760,
+ 0.993691, -0.039819, 0.055534, 1.054180, 0.994778, -0.034148, 0.047339, 1.067720,
+ 0.995915, -0.028428, 0.039102, 1.080280, 0.997109, -0.022642, 0.030995, 1.091850,
+ 0.998095, -0.016874, 0.023029, 1.102470, 0.998985, -0.011127, 0.015072, 1.112290,
+ 0.999581, -0.005439, 0.007406, 1.121310, 1.000030, 0.000162, -0.000106, 1.129460,
+ 0.959505, -0.000004, 0.196876, 0.000019, 0.959599, -0.000099, 0.196895, 0.000484,
+ 0.959641, -0.000397, 0.196903, 0.001934, 0.959599, -0.000893, 0.196895, 0.004352,
+ 0.959603, -0.001587, 0.196896, 0.007737, 0.959604, -0.002480, 0.196896, 0.012089,
+ 0.959605, -0.003572, 0.196896, 0.017408, 0.959605, -0.004862, 0.196896, 0.023695,
+ 0.959613, -0.006350, 0.196897, 0.030950, 0.959619, -0.008037, 0.196898, 0.039172,
+ 0.959636, -0.009923, 0.196901, 0.048365, 0.959634, -0.012007, 0.196900, 0.058527,
+ 0.959675, -0.014290, 0.196906, 0.069661, 0.959712, -0.016772, 0.196911, 0.081768,
+ 0.959752, -0.019452, 0.196918, 0.094849, 0.959807, -0.022332, 0.196925, 0.108910,
+ 0.959828, -0.025409, 0.196924, 0.123947, 0.959906, -0.028681, 0.196934, 0.139968,
+ 0.960005, -0.032137, 0.196944, 0.156968, 0.960071, -0.035711, 0.196936, 0.174910,
+ 0.960237, -0.038906, 0.196882, 0.193597, 0.960367, -0.041623, 0.196731, 0.212850,
+ 0.960562, -0.045266, 0.196654, 0.233075, 0.960735, -0.049621, 0.196643, 0.253941,
+ 0.960913, -0.054938, 0.196774, 0.275278, 0.961121, -0.060341, 0.196893, 0.297733,
+ 0.961390, -0.064424, 0.196717, 0.321877, 0.961818, -0.067556, 0.196314, 0.346476,
+ 0.962175, -0.071271, 0.195917, 0.371907, 0.962550, -0.075285, 0.195500, 0.397916,
+ 0.963164, -0.079207, 0.195026, 0.424229, 0.963782, -0.082822, 0.194424, 0.450637,
+ 0.964306, -0.087312, 0.193831, 0.477288, 0.964923, -0.091105, 0.192973, 0.504716,
+ 0.966048, -0.093251, 0.191510, 0.533053, 0.967024, -0.095898, 0.190013, 0.561366,
+ 0.968038, -0.098350, 0.188253, 0.589464, 0.969152, -0.100754, 0.186257, 0.617433,
+ 0.970557, -0.102239, 0.183775, 0.645801, 0.972104, -0.102767, 0.180645, 0.674278,
+ 0.973203, -0.103492, 0.177242, 0.702004, 0.975123, -0.103793, 0.173450, 0.729529,
+ 0.976410, -0.102839, 0.168886, 0.756712, 0.978313, -0.101687, 0.163892, 0.783801,
+ 0.980036, -0.100314, 0.158439, 0.809671, 0.981339, -0.097836, 0.152211, 0.835402,
+ 0.982794, -0.095001, 0.145679, 0.860081, 0.984123, -0.092099, 0.138949, 0.883757,
+ 0.984918, -0.087864, 0.131283, 0.906850, 0.985999, -0.083939, 0.123464, 0.928786,
+ 0.987151, -0.079123, 0.115324, 0.949830, 0.987827, -0.073933, 0.106854, 0.969620,
+ 0.988806, -0.068809, 0.098269, 0.988610, 0.989588, -0.062896, 0.089346, 1.006670,
+ 0.990438, -0.057315, 0.080539, 1.023440, 0.991506, -0.050943, 0.071373, 1.039330,
+ 0.992492, -0.044872, 0.062373, 1.053780, 0.993663, -0.038350, 0.053084, 1.067470,
+ 0.994956, -0.031959, 0.043951, 1.080070, 0.996340, -0.025401, 0.034780, 1.091820,
+ 0.997610, -0.018969, 0.025795, 1.102500, 0.998630, -0.012444, 0.016989, 1.112470,
+ 0.999470, -0.006140, 0.008295, 1.121510, 1.000080, 0.000217, -0.000146, 1.129930,
+ 0.950129, -0.000004, 0.217413, 0.000019, 0.950264, -0.000110, 0.217444, 0.000479,
+ 0.950300, -0.000438, 0.217451, 0.001915, 0.950246, -0.000986, 0.217440, 0.004310,
+ 0.950246, -0.001753, 0.217440, 0.007661, 0.950245, -0.002739, 0.217440, 0.011971,
+ 0.950253, -0.003945, 0.217441, 0.017239, 0.950258, -0.005369, 0.217442, 0.023464,
+ 0.950267, -0.007013, 0.217444, 0.030648, 0.950277, -0.008876, 0.217446, 0.038791,
+ 0.950284, -0.010958, 0.217446, 0.047893, 0.950312, -0.013259, 0.217451, 0.057957,
+ 0.950334, -0.015780, 0.217454, 0.068982, 0.950378, -0.018520, 0.217462, 0.080971,
+ 0.950417, -0.021480, 0.217467, 0.093926, 0.950488, -0.024659, 0.217479, 0.107850,
+ 0.950534, -0.028057, 0.217483, 0.122743, 0.950633, -0.031669, 0.217498, 0.138611,
+ 0.950698, -0.035479, 0.217499, 0.155442, 0.950844, -0.039400, 0.217507, 0.173208,
+ 0.950999, -0.042681, 0.217419, 0.191605, 0.951221, -0.046130, 0.217317, 0.210840,
+ 0.951412, -0.050213, 0.217238, 0.230945, 0.951623, -0.054918, 0.217220, 0.251745,
+ 0.951867, -0.060449, 0.217306, 0.273001, 0.952069, -0.066519, 0.217466, 0.294874,
+ 0.952459, -0.070918, 0.217266, 0.318732, 0.952996, -0.074611, 0.216891, 0.343180,
+ 0.953425, -0.078925, 0.216503, 0.368490, 0.953885, -0.083329, 0.216042, 0.394373,
+ 0.954617, -0.087371, 0.215469, 0.420505, 0.955429, -0.091405, 0.214802, 0.446907,
+ 0.956068, -0.096167, 0.214146, 0.473522, 0.957094, -0.100480, 0.213286, 0.500520,
+ 0.958372, -0.103248, 0.211796, 0.528715, 0.959654, -0.106033, 0.210160, 0.557065,
+ 0.961305, -0.108384, 0.208149, 0.585286, 0.962785, -0.111122, 0.206024, 0.613334,
+ 0.964848, -0.112981, 0.203442, 0.641334, 0.966498, -0.113717, 0.199960, 0.669955,
+ 0.968678, -0.114121, 0.196105, 0.698094, 0.970489, -0.114524, 0.191906, 0.725643,
+ 0.972903, -0.113792, 0.186963, 0.752856, 0.974701, -0.112406, 0.181343, 0.780013,
+ 0.976718, -0.110685, 0.175185, 0.806268, 0.978905, -0.108468, 0.168535, 0.832073,
+ 0.980267, -0.105061, 0.161106, 0.857149, 0.981967, -0.101675, 0.153387, 0.881145,
+ 0.983063, -0.097449, 0.145199, 0.904255, 0.984432, -0.092581, 0.136527, 0.926686,
+ 0.985734, -0.087798, 0.127584, 0.947901, 0.986228, -0.081884, 0.118125, 0.968111,
+ 0.987190, -0.076121, 0.108594, 0.987190, 0.988228, -0.069820, 0.099000, 1.005590,
+ 0.989046, -0.063274, 0.089007, 1.022460, 0.990242, -0.056522, 0.079083, 1.038410,
+ 0.991252, -0.049527, 0.068918, 1.053470, 0.992542, -0.042537, 0.058859, 1.067240,
+ 0.994096, -0.035320, 0.048683, 1.080090, 0.995593, -0.028235, 0.038598, 1.091770,
+ 0.997110, -0.020951, 0.028646, 1.102740, 0.998263, -0.013929, 0.018850, 1.112620,
+ 0.999254, -0.006736, 0.009208, 1.121910, 0.999967, 0.000142, -0.000066, 1.130240,
+ 0.935608, -0.000005, 0.236466, 0.000019, 0.939960, -0.000120, 0.237568, 0.000474,
+ 0.939959, -0.000479, 0.237567, 0.001895, 0.939954, -0.001077, 0.237566, 0.004263,
+ 0.939956, -0.001915, 0.237566, 0.007578, 0.939954, -0.002993, 0.237566, 0.011841,
+ 0.939960, -0.004310, 0.237567, 0.017052, 0.939969, -0.005866, 0.237569, 0.023210,
+ 0.939982, -0.007662, 0.237572, 0.030316, 0.939987, -0.009697, 0.237572, 0.038371,
+ 0.939997, -0.011971, 0.237574, 0.047375, 0.940031, -0.014486, 0.237581, 0.057330,
+ 0.940073, -0.017240, 0.237589, 0.068237, 0.940120, -0.020234, 0.237598, 0.080097,
+ 0.940162, -0.023466, 0.237604, 0.092912, 0.940237, -0.026939, 0.237615, 0.106686,
+ 0.940328, -0.030649, 0.237632, 0.121421, 0.940419, -0.034592, 0.237645, 0.137115,
+ 0.940522, -0.038748, 0.237654, 0.153766, 0.940702, -0.042991, 0.237661, 0.171330,
+ 0.940871, -0.046509, 0.237561, 0.189502, 0.941103, -0.050531, 0.237480, 0.208616,
+ 0.941369, -0.055066, 0.237423, 0.228595, 0.941641, -0.060134, 0.237399, 0.249287,
+ 0.941903, -0.065880, 0.237443, 0.270467, 0.942224, -0.072267, 0.237597, 0.292024,
+ 0.942633, -0.077179, 0.237419, 0.315272, 0.943172, -0.081562, 0.237068, 0.339579,
+ 0.943691, -0.086397, 0.236682, 0.364717, 0.944382, -0.091154, 0.236213, 0.390435,
+ 0.945392, -0.095297, 0.235562, 0.416425, 0.946185, -0.099895, 0.234832, 0.442772,
+ 0.947212, -0.104796, 0.234114, 0.469347, 0.948778, -0.109280, 0.233222, 0.496162,
+ 0.950149, -0.113081, 0.231845, 0.523978, 0.951989, -0.115893, 0.230005, 0.552295,
+ 0.953921, -0.118460, 0.227862, 0.580569, 0.955624, -0.121150, 0.225439, 0.608698,
+ 0.958234, -0.123373, 0.222635, 0.636696, 0.960593, -0.124519, 0.219093, 0.665208,
+ 0.963201, -0.124736, 0.214749, 0.693557, 0.965642, -0.125012, 0.210059, 0.721334,
+ 0.968765, -0.124661, 0.204935, 0.748613, 0.971753, -0.122996, 0.198661, 0.776224,
+ 0.973751, -0.120998, 0.191823, 0.802461, 0.976709, -0.118583, 0.184359, 0.828399,
+ 0.977956, -0.115102, 0.176437, 0.853693, 0.979672, -0.111077, 0.167681, 0.877962,
+ 0.981816, -0.106880, 0.158872, 0.901564, 0.982380, -0.101469, 0.149398, 0.924057,
+ 0.983964, -0.096001, 0.139436, 0.945751, 0.984933, -0.089963, 0.129430, 0.966272,
+ 0.985694, -0.083297, 0.118940, 0.985741, 0.986822, -0.076708, 0.108349, 1.004070,
+ 0.987725, -0.069361, 0.097603, 1.021540, 0.988770, -0.062110, 0.086652, 1.037570,
+ 0.990129, -0.054414, 0.075618, 1.052960, 0.991337, -0.046744, 0.064575, 1.066830,
+ 0.992978, -0.038793, 0.053468, 1.079800, 0.994676, -0.030973, 0.042414, 1.091810,
+ 0.996450, -0.023031, 0.031404, 1.102860, 0.997967, -0.015206, 0.020687, 1.112910,
+ 0.999220, -0.007448, 0.010155, 1.122370, 1.000020, 0.000240, -0.000075, 1.130890,
+ 0.922948, -0.000005, 0.255626, 0.000019, 0.928785, -0.000130, 0.257244, 0.000468,
+ 0.928761, -0.000518, 0.257237, 0.001872, 0.928751, -0.001167, 0.257235, 0.004212,
+ 0.928751, -0.002074, 0.257234, 0.007488, 0.928754, -0.003241, 0.257235, 0.011700,
+ 0.928760, -0.004666, 0.257236, 0.016849, 0.928763, -0.006351, 0.257237, 0.022933,
+ 0.928774, -0.008296, 0.257239, 0.029955, 0.928791, -0.010500, 0.257243, 0.037914,
+ 0.928804, -0.012962, 0.257245, 0.046811, 0.928847, -0.015685, 0.257255, 0.056647,
+ 0.928890, -0.018666, 0.257263, 0.067425, 0.928924, -0.021907, 0.257268, 0.079143,
+ 0.928989, -0.025407, 0.257282, 0.091808, 0.929090, -0.029165, 0.257301, 0.105419,
+ 0.929180, -0.033180, 0.257316, 0.119978, 0.929290, -0.037447, 0.257332, 0.135491,
+ 0.929453, -0.041939, 0.257357, 0.151948, 0.929586, -0.046461, 0.257347, 0.169275,
+ 0.929858, -0.050343, 0.257269, 0.187257, 0.930125, -0.054841, 0.257199, 0.206204,
+ 0.930403, -0.059806, 0.257149, 0.226010, 0.930726, -0.065244, 0.257122, 0.246561,
+ 0.931098, -0.071238, 0.257153, 0.267618, 0.931396, -0.077751, 0.257237, 0.288993,
+ 0.931947, -0.083237, 0.257124, 0.311527, 0.932579, -0.088396, 0.256830, 0.335697,
+ 0.933194, -0.093704, 0.256444, 0.360634, 0.934013, -0.098729, 0.255939, 0.386126,
+ 0.935307, -0.103215, 0.255282, 0.412018, 0.936374, -0.108234, 0.254538, 0.438292,
+ 0.937760, -0.113234, 0.253728, 0.464805, 0.939599, -0.118013, 0.252750, 0.491464,
+ 0.941036, -0.122661, 0.251404, 0.518751, 0.943370, -0.125477, 0.249435, 0.547133,
+ 0.945318, -0.128374, 0.247113, 0.575456, 0.947995, -0.130996, 0.244441, 0.603720,
+ 0.950818, -0.133438, 0.241352, 0.631740, 0.954378, -0.135004, 0.237849, 0.659971,
+ 0.957151, -0.135313, 0.233188, 0.688478, 0.960743, -0.135210, 0.228001, 0.716767,
+ 0.964352, -0.135007, 0.222249, 0.744349, 0.967273, -0.133523, 0.215420, 0.771786,
+ 0.969767, -0.131155, 0.208039, 0.798639, 0.973195, -0.128492, 0.200076, 0.824774,
+ 0.975557, -0.125094, 0.191451, 0.850222, 0.977692, -0.120578, 0.181840, 0.874761,
+ 0.980260, -0.115882, 0.172102, 0.898497, 0.981394, -0.110372, 0.161859, 0.921636,
+ 0.982386, -0.104150, 0.151080, 0.943467, 0.983783, -0.097813, 0.140407, 0.964045,
+ 0.984220, -0.090617, 0.129058, 0.983980, 0.985447, -0.083292, 0.117614, 1.002760,
+ 0.986682, -0.075441, 0.105850, 1.020470, 0.987326, -0.067389, 0.094094, 1.036780,
+ 0.988707, -0.059256, 0.082209, 1.052180, 0.990185, -0.050717, 0.070192, 1.066520,
+ 0.991866, -0.042349, 0.058208, 1.079650, 0.993897, -0.033612, 0.046099, 1.091880,
+ 0.995841, -0.025218, 0.034274, 1.103070, 0.997605, -0.016489, 0.022483, 1.113240,
+ 0.999037, -0.008171, 0.011065, 1.122620, 1.000030, 0.000292, -0.000169, 1.131390,
+ 0.915304, -0.000006, 0.275999, 0.000018, 0.916680, -0.000139, 0.276414, 0.000462,
+ 0.916664, -0.000557, 0.276409, 0.001848, 0.916653, -0.001254, 0.276406, 0.004157,
+ 0.916651, -0.002229, 0.276405, 0.007391, 0.916655, -0.003482, 0.276406, 0.011548,
+ 0.916653, -0.005014, 0.276405, 0.016629, 0.916667, -0.006825, 0.276409, 0.022635,
+ 0.916680, -0.008914, 0.276412, 0.029565, 0.916690, -0.011282, 0.276413, 0.037420,
+ 0.916727, -0.013928, 0.276422, 0.046202, 0.916759, -0.016853, 0.276429, 0.055910,
+ 0.916793, -0.020056, 0.276436, 0.066547, 0.916849, -0.023537, 0.276448, 0.078114,
+ 0.916964, -0.027297, 0.276474, 0.090616, 0.917047, -0.031334, 0.276491, 0.104051,
+ 0.917152, -0.035646, 0.276511, 0.118424, 0.917286, -0.040227, 0.276533, 0.133736,
+ 0.917469, -0.045041, 0.276564, 0.149978, 0.917686, -0.049787, 0.276563, 0.167057,
+ 0.917953, -0.054094, 0.276493, 0.184846, 0.918228, -0.059071, 0.276437, 0.203614,
+ 0.918572, -0.064428, 0.276398, 0.223212, 0.918918, -0.070233, 0.276362, 0.243584,
+ 0.919356, -0.076484, 0.276383, 0.264465, 0.919842, -0.083081, 0.276434, 0.285701,
+ 0.920451, -0.089297, 0.276407, 0.307559, 0.921113, -0.095016, 0.276128, 0.331501,
+ 0.921881, -0.100771, 0.275754, 0.356207, 0.923027, -0.106029, 0.275254, 0.381477,
+ 0.924364, -0.111029, 0.274595, 0.407220, 0.925818, -0.116345, 0.273841, 0.433385,
+ 0.927460, -0.121424, 0.272913, 0.459848, 0.929167, -0.126570, 0.271837, 0.486493,
+ 0.931426, -0.131581, 0.270575, 0.513432, 0.934001, -0.135038, 0.268512, 0.541502,
+ 0.936296, -0.138039, 0.266135, 0.569658, 0.939985, -0.140687, 0.263271, 0.598375,
+ 0.943516, -0.143247, 0.260058, 0.626563, 0.947820, -0.145135, 0.256138, 0.654711,
+ 0.951023, -0.145733, 0.251154, 0.683285, 0.955338, -0.145554, 0.245562, 0.711831,
+ 0.959629, -0.145008, 0.239265, 0.739573, 0.963123, -0.144003, 0.232064, 0.767027,
+ 0.966742, -0.141289, 0.224036, 0.794359, 0.969991, -0.138247, 0.215305, 0.820361,
+ 0.973403, -0.134786, 0.206051, 0.846548, 0.975317, -0.129966, 0.195914, 0.871541,
+ 0.977647, -0.124710, 0.185184, 0.895313, 0.980137, -0.119086, 0.174161, 0.918398,
+ 0.981031, -0.112297, 0.162792, 0.940679, 0.982037, -0.105372, 0.150952, 0.961991,
+ 0.983164, -0.097821, 0.138921, 0.981913, 0.983757, -0.089724, 0.126611, 1.001090,
+ 0.985036, -0.081597, 0.114228, 1.019020, 0.986289, -0.072773, 0.101389, 1.036040,
+ 0.987329, -0.063932, 0.088648, 1.051490, 0.989193, -0.054811, 0.075684, 1.066190,
+ 0.990716, -0.045687, 0.062758, 1.079480, 0.992769, -0.036431, 0.049834, 1.091720,
+ 0.995240, -0.027176, 0.037031, 1.103300, 0.997154, -0.017961, 0.024396, 1.113530,
+ 0.998845, -0.008781, 0.011957, 1.123190, 1.000020, 0.000259, -0.000108, 1.131770,
+ 0.903945, -0.000006, 0.295126, 0.000018, 0.903668, -0.000149, 0.295037, 0.000455,
+ 0.903677, -0.000595, 0.295040, 0.001821, 0.903673, -0.001338, 0.295039, 0.004098,
+ 0.903666, -0.002379, 0.295036, 0.007286, 0.903668, -0.003717, 0.295037, 0.011384,
+ 0.903679, -0.005352, 0.295040, 0.016394, 0.903684, -0.007285, 0.295041, 0.022314,
+ 0.903698, -0.009515, 0.295044, 0.029146, 0.903718, -0.012042, 0.295049, 0.036890,
+ 0.903754, -0.014866, 0.295058, 0.045548, 0.903801, -0.017988, 0.295070, 0.055119,
+ 0.903851, -0.021406, 0.295082, 0.065606, 0.903921, -0.025122, 0.295097, 0.077011,
+ 0.904002, -0.029134, 0.295116, 0.089335, 0.904111, -0.033441, 0.295140, 0.102583,
+ 0.904246, -0.038041, 0.295169, 0.116755, 0.904408, -0.042926, 0.295202, 0.131853,
+ 0.904637, -0.048047, 0.295245, 0.147869, 0.904821, -0.052921, 0.295214, 0.164658,
+ 0.905163, -0.057775, 0.295185, 0.182274, 0.905469, -0.063176, 0.295143, 0.200828,
+ 0.905851, -0.068917, 0.295112, 0.220200, 0.906322, -0.075086, 0.295104, 0.240372,
+ 0.906761, -0.081586, 0.295086, 0.261082, 0.907350, -0.088214, 0.295095, 0.282123,
+ 0.908087, -0.095082, 0.295139, 0.303563, 0.908826, -0.101488, 0.294920, 0.327028,
+ 0.909832, -0.107577, 0.294577, 0.351464, 0.911393, -0.113033, 0.294115, 0.376497,
+ 0.912804, -0.118629, 0.293446, 0.402115, 0.914081, -0.124232, 0.292581, 0.428111,
+ 0.916370, -0.129399, 0.291660, 0.454442, 0.918140, -0.134892, 0.290422, 0.481024,
+ 0.921179, -0.140069, 0.289194, 0.507924, 0.924544, -0.144431, 0.287421, 0.535557,
+ 0.927995, -0.147498, 0.284867, 0.563984, 0.931556, -0.150197, 0.281722, 0.592300,
+ 0.935777, -0.152711, 0.278207, 0.620832, 0.940869, -0.154836, 0.274148, 0.649069,
+ 0.945994, -0.155912, 0.269057, 0.677746, 0.949634, -0.155641, 0.262799, 0.706293,
+ 0.955032, -0.154809, 0.256097, 0.734278, 0.959170, -0.153678, 0.248618, 0.761751,
+ 0.962931, -0.151253, 0.239794, 0.789032, 0.966045, -0.147625, 0.230281, 0.815422,
+ 0.969710, -0.143964, 0.220382, 0.841787, 0.972747, -0.139464, 0.209846, 0.867446,
+ 0.975545, -0.133459, 0.198189, 0.892004, 0.978381, -0.127424, 0.186362, 0.915458,
+ 0.979935, -0.120506, 0.173964, 0.937948, 0.980948, -0.112820, 0.161429, 0.959732,
+ 0.982234, -0.104941, 0.148557, 0.980118, 0.982767, -0.096291, 0.135508, 0.999463,
+ 0.983544, -0.087362, 0.122338, 1.017560, 0.984965, -0.078345, 0.108669, 1.034920,
+ 0.986233, -0.068480, 0.094991, 1.050870, 0.987796, -0.059087, 0.081139, 1.065600,
+ 0.989885, -0.048914, 0.067310, 1.079400, 0.991821, -0.039100, 0.053567, 1.091740,
+ 0.994480, -0.029087, 0.039753, 1.103410, 0.996769, -0.019114, 0.026146, 1.113830,
+ 0.998641, -0.009470, 0.012873, 1.123700, 0.999978, 0.000446, -0.000169, 1.132530,
+ 0.888362, -0.000006, 0.312578, 0.000018, 0.889988, -0.000158, 0.313148, 0.000448,
+ 0.889825, -0.000631, 0.313092, 0.001794, 0.889840, -0.001420, 0.313097, 0.004036,
+ 0.889828, -0.002524, 0.313092, 0.007174, 0.889831, -0.003944, 0.313093, 0.011210,
+ 0.889831, -0.005680, 0.313093, 0.016143, 0.889844, -0.007731, 0.313096, 0.021972,
+ 0.889858, -0.010097, 0.313100, 0.028700, 0.889882, -0.012779, 0.313106, 0.036326,
+ 0.889918, -0.015776, 0.313116, 0.044851, 0.889967, -0.019088, 0.313129, 0.054276,
+ 0.890030, -0.022715, 0.313145, 0.064603, 0.890108, -0.026657, 0.313165, 0.075834,
+ 0.890218, -0.030913, 0.313193, 0.087973, 0.890351, -0.035482, 0.313226, 0.101019,
+ 0.890510, -0.040361, 0.313263, 0.114979, 0.890672, -0.045539, 0.313294, 0.129848,
+ 0.890882, -0.050944, 0.313333, 0.145616, 0.891189, -0.055966, 0.313324, 0.162122,
+ 0.891457, -0.061312, 0.313281, 0.179524, 0.891856, -0.067149, 0.313281, 0.197855,
+ 0.892312, -0.073273, 0.313268, 0.216991, 0.892819, -0.079786, 0.313263, 0.236924,
+ 0.893369, -0.086527, 0.313247, 0.257433, 0.894045, -0.093159, 0.313205, 0.278215,
+ 0.894884, -0.100532, 0.313276, 0.299467, 0.895832, -0.107716, 0.313205, 0.322276,
+ 0.897043, -0.114099, 0.312873, 0.346420, 0.898515, -0.119941, 0.312331, 0.371187,
+ 0.900191, -0.126044, 0.311731, 0.396656, 0.901880, -0.131808, 0.310859, 0.422488,
+ 0.904359, -0.137289, 0.309857, 0.448744, 0.906923, -0.142991, 0.308714, 0.475239,
+ 0.910634, -0.148253, 0.307465, 0.501983, 0.914502, -0.153332, 0.305774, 0.529254,
+ 0.919046, -0.156646, 0.303156, 0.557709, 0.923194, -0.159612, 0.299928, 0.586267,
+ 0.928858, -0.162027, 0.296245, 0.614925, 0.934464, -0.164203, 0.291832, 0.643187,
+ 0.939824, -0.165602, 0.286565, 0.671601, 0.944582, -0.165383, 0.280073, 0.700213,
+ 0.949257, -0.164439, 0.272891, 0.728432, 0.954389, -0.162953, 0.264771, 0.756082,
+ 0.958595, -0.161007, 0.255927, 0.783690, 0.962138, -0.157243, 0.245769, 0.810769,
+ 0.966979, -0.152872, 0.235127, 0.836999, 0.969566, -0.148209, 0.223470, 0.862684,
+ 0.972372, -0.142211, 0.211147, 0.887847, 0.975916, -0.135458, 0.198606, 0.911843,
+ 0.978026, -0.128398, 0.185498, 0.934795, 0.979686, -0.120313, 0.171710, 0.956787,
+ 0.980748, -0.111660, 0.158159, 0.978046, 0.981622, -0.103035, 0.144399, 0.997693,
+ 0.982356, -0.093033, 0.130010, 1.016420, 0.983308, -0.083463, 0.115778, 1.033660,
+ 0.985037, -0.073225, 0.101327, 1.050140, 0.986493, -0.062814, 0.086554, 1.065070,
+ 0.988484, -0.052656, 0.072041, 1.079070, 0.991051, -0.041574, 0.057115, 1.091890,
+ 0.993523, -0.031427, 0.042664, 1.103690, 0.996280, -0.020360, 0.027932, 1.114230,
+ 0.998344, -0.010245, 0.013818, 1.124210, 0.999997, 0.000426, -0.000194, 1.133300,
+ 0.871555, -0.000007, 0.329176, 0.000017, 0.875255, -0.000167, 0.330571, 0.000441,
+ 0.875644, -0.000666, 0.330718, 0.001764, 0.875159, -0.001499, 0.330536, 0.003969,
+ 0.875160, -0.002665, 0.330536, 0.007056, 0.875158, -0.004164, 0.330535, 0.011025,
+ 0.875160, -0.005996, 0.330535, 0.015876, 0.875163, -0.008161, 0.330536, 0.021610,
+ 0.875174, -0.010659, 0.330538, 0.028227, 0.875199, -0.013490, 0.330545, 0.035727,
+ 0.875257, -0.016654, 0.330563, 0.044112, 0.875304, -0.020150, 0.330575, 0.053382,
+ 0.875373, -0.023978, 0.330595, 0.063539, 0.875464, -0.028139, 0.330619, 0.074587,
+ 0.875565, -0.032630, 0.330645, 0.086526, 0.875691, -0.037452, 0.330676, 0.099360,
+ 0.875897, -0.042599, 0.330733, 0.113093, 0.876091, -0.048058, 0.330776, 0.127722,
+ 0.876353, -0.053722, 0.330826, 0.143227, 0.876649, -0.058981, 0.330809, 0.159462,
+ 0.877034, -0.064786, 0.330819, 0.176642, 0.877443, -0.070979, 0.330817, 0.194702,
+ 0.877956, -0.077478, 0.330832, 0.213577, 0.878499, -0.084318, 0.330822, 0.233246,
+ 0.879144, -0.091271, 0.330804, 0.253512, 0.879982, -0.098082, 0.330766, 0.274137,
+ 0.880970, -0.105823, 0.330864, 0.295209, 0.882051, -0.113671, 0.330896, 0.317226,
+ 0.883397, -0.120303, 0.330545, 0.341068, 0.884987, -0.126670, 0.330068, 0.365613,
+ 0.886789, -0.133118, 0.329418, 0.390807, 0.889311, -0.139024, 0.328683, 0.416494,
+ 0.891995, -0.144971, 0.327729, 0.442618, 0.895106, -0.150747, 0.326521, 0.469131,
+ 0.899527, -0.156283, 0.325229, 0.495921, 0.905040, -0.161707, 0.323780, 0.523162,
+ 0.909875, -0.165661, 0.321220, 0.550920, 0.915610, -0.168755, 0.317942, 0.579928,
+ 0.921225, -0.171193, 0.313983, 0.608539, 0.927308, -0.173190, 0.309636, 0.636854,
+ 0.933077, -0.174819, 0.304262, 0.665230, 0.938766, -0.175002, 0.297563, 0.693609,
+ 0.943667, -0.173946, 0.289613, 0.722157, 0.949033, -0.172221, 0.281227, 0.750021,
+ 0.953765, -0.169869, 0.271545, 0.777466, 0.958040, -0.166578, 0.261034, 0.804853,
+ 0.962302, -0.161761, 0.249434, 0.831569, 0.966544, -0.156636, 0.237484, 0.857779,
+ 0.969372, -0.150784, 0.224395, 0.883051, 0.972486, -0.143672, 0.210786, 0.907864,
+ 0.975853, -0.135772, 0.196556, 0.931223, 0.977975, -0.127942, 0.182307, 0.954061,
+ 0.979122, -0.118347, 0.167607, 0.975310, 0.980719, -0.109112, 0.152739, 0.995666,
+ 0.981223, -0.099179, 0.137932, 1.014750, 0.982160, -0.088355, 0.122692, 1.032530,
+ 0.983379, -0.078082, 0.107493, 1.049170, 0.985434, -0.066565, 0.091779, 1.064640,
+ 0.987332, -0.055771, 0.076495, 1.078960, 0.990004, -0.044281, 0.060721, 1.091990,
+ 0.992975, -0.033168, 0.045228, 1.103930, 0.995811, -0.021955, 0.029793, 1.114760,
+ 0.998200, -0.010761, 0.014642, 1.124840, 1.000020, 0.000249, -0.000146, 1.134130,
+ 0.859519, -0.000007, 0.347264, 0.000017, 0.859843, -0.000175, 0.347394, 0.000433,
+ 0.859656, -0.000700, 0.347319, 0.001733, 0.859671, -0.001575, 0.347325, 0.003899,
+ 0.859669, -0.002800, 0.347324, 0.006931, 0.859670, -0.004375, 0.347324, 0.010830,
+ 0.859665, -0.006300, 0.347321, 0.015595, 0.859685, -0.008575, 0.347328, 0.021228,
+ 0.859694, -0.011200, 0.347329, 0.027727, 0.859718, -0.014175, 0.347336, 0.035095,
+ 0.859760, -0.017499, 0.347348, 0.043331, 0.859820, -0.021172, 0.347366, 0.052438,
+ 0.859892, -0.025194, 0.347387, 0.062417, 0.860006, -0.029565, 0.347422, 0.073271,
+ 0.860122, -0.034283, 0.347453, 0.085000, 0.860282, -0.039346, 0.347499, 0.097610,
+ 0.860482, -0.044751, 0.347554, 0.111104, 0.860719, -0.050478, 0.347614, 0.125479,
+ 0.860998, -0.056358, 0.347666, 0.140703, 0.861322, -0.061947, 0.347662, 0.156681,
+ 0.861724, -0.068128, 0.347684, 0.173597, 0.862198, -0.074657, 0.347709, 0.191371,
+ 0.862733, -0.081523, 0.347727, 0.209976, 0.863371, -0.088664, 0.347744, 0.229351,
+ 0.864140, -0.095791, 0.347734, 0.249340, 0.865138, -0.102912, 0.347720, 0.269797,
+ 0.866182, -0.110924, 0.347800, 0.290654, 0.867436, -0.119223, 0.347911, 0.312074,
+ 0.869087, -0.126197, 0.347649, 0.335438, 0.870859, -0.133145, 0.347222, 0.359732,
+ 0.872997, -0.139869, 0.346645, 0.384670, 0.875939, -0.146089, 0.345935, 0.410190,
+ 0.879012, -0.152334, 0.345012, 0.436218, 0.883353, -0.158210, 0.343924, 0.462641,
+ 0.888362, -0.164097, 0.342636, 0.489449, 0.895026, -0.169528, 0.341351, 0.516629,
+ 0.900753, -0.174408, 0.339115, 0.544109, 0.906814, -0.177510, 0.335809, 0.572857,
+ 0.912855, -0.180101, 0.331597, 0.601554, 0.919438, -0.182116, 0.326980, 0.630198,
+ 0.925962, -0.183494, 0.321449, 0.658404, 0.931734, -0.184159, 0.314595, 0.686625,
+ 0.937620, -0.183040, 0.306462, 0.715310, 0.943858, -0.181323, 0.297514, 0.744272,
+ 0.948662, -0.178683, 0.287447, 0.771462, 0.953299, -0.175379, 0.276166, 0.798593,
+ 0.957346, -0.170395, 0.263758, 0.825600, 0.962565, -0.165042, 0.251019, 0.852575,
+ 0.966075, -0.158655, 0.237011, 0.878316, 0.969048, -0.151707, 0.222518, 0.903290,
+ 0.972423, -0.143271, 0.207848, 0.927745, 0.975833, -0.134824, 0.192463, 0.950859,
+ 0.977629, -0.125444, 0.176800, 0.972947, 0.978995, -0.114949, 0.161033, 0.993263,
+ 0.980533, -0.104936, 0.145523, 1.013370, 0.980745, -0.093558, 0.129799, 1.031280,
+ 0.981814, -0.082296, 0.113486, 1.048250, 0.983943, -0.071008, 0.097293, 1.064050,
+ 0.986141, -0.058793, 0.080814, 1.078500, 0.988878, -0.047275, 0.064491, 1.092040,
+ 0.992132, -0.034913, 0.047813, 1.104130, 0.995300, -0.023241, 0.031621, 1.115270,
+ 0.998117, -0.011271, 0.015494, 1.125510, 1.000030, 0.000340, -0.000196, 1.135040,
+ 0.845441, -0.000007, 0.364305, 0.000017, 0.843588, -0.000183, 0.363506, 0.000425,
+ 0.843412, -0.000733, 0.363430, 0.001700, 0.843401, -0.001648, 0.363426, 0.003825,
+ 0.843399, -0.002930, 0.363425, 0.006800, 0.843401, -0.004578, 0.363425, 0.010625,
+ 0.843394, -0.006592, 0.363421, 0.015300, 0.843398, -0.008973, 0.363421, 0.020826,
+ 0.843415, -0.011719, 0.363426, 0.027202, 0.843438, -0.014831, 0.363432, 0.034431,
+ 0.843483, -0.018309, 0.363447, 0.042512, 0.843560, -0.022152, 0.363472, 0.051447,
+ 0.843646, -0.026360, 0.363499, 0.061238, 0.843743, -0.030932, 0.363527, 0.071887,
+ 0.843880, -0.035866, 0.363569, 0.083397, 0.844079, -0.041162, 0.363631, 0.095774,
+ 0.844279, -0.046813, 0.363688, 0.109015, 0.844549, -0.052792, 0.363761, 0.123124,
+ 0.844858, -0.058820, 0.363817, 0.138044, 0.845220, -0.064757, 0.363830, 0.153755,
+ 0.845669, -0.071318, 0.363879, 0.170394, 0.846155, -0.078170, 0.363908, 0.187861,
+ 0.846789, -0.085391, 0.363969, 0.206176, 0.847502, -0.092809, 0.363999, 0.225244,
+ 0.848400, -0.100050, 0.363997, 0.244926, 0.849461, -0.107615, 0.364008, 0.265188,
+ 0.850562, -0.115814, 0.364055, 0.285870, 0.851962, -0.124334, 0.364179, 0.306926,
+ 0.854326, -0.131995, 0.364233, 0.329605, 0.856295, -0.139338, 0.363856, 0.353590,
+ 0.858857, -0.146346, 0.363347, 0.378310, 0.862428, -0.152994, 0.362807, 0.403722,
+ 0.866203, -0.159463, 0.361963, 0.429537, 0.871629, -0.165623, 0.361120, 0.456000,
+ 0.877365, -0.171649, 0.359917, 0.482773, 0.883744, -0.177151, 0.358480, 0.509705,
+ 0.890693, -0.182381, 0.356523, 0.537215, 0.897278, -0.186076, 0.353300, 0.565493,
+ 0.903958, -0.188602, 0.349095, 0.594293, 0.910908, -0.190755, 0.344215, 0.623165,
+ 0.918117, -0.192063, 0.338606, 0.651573, 0.924644, -0.192758, 0.331544, 0.679869,
+ 0.931054, -0.192238, 0.323163, 0.708668, 0.937303, -0.190035, 0.313529, 0.737201,
+ 0.943387, -0.187162, 0.303152, 0.764977, 0.948494, -0.183876, 0.291460, 0.792683,
+ 0.952546, -0.178901, 0.277917, 0.819228, 0.958077, -0.173173, 0.264753, 0.846559,
+ 0.962462, -0.166450, 0.250020, 0.872962, 0.966569, -0.159452, 0.234873, 0.898729,
+ 0.969108, -0.150740, 0.218752, 0.923126, 0.973072, -0.141523, 0.202673, 0.947278,
+ 0.975452, -0.132075, 0.186326, 0.969938, 0.977784, -0.121257, 0.169396, 0.991325,
+ 0.978990, -0.110182, 0.153044, 1.011230, 0.979777, -0.098963, 0.136485, 1.029900,
+ 0.980865, -0.086589, 0.119343, 1.047270, 0.982432, -0.074611, 0.102452, 1.063410,
+ 0.984935, -0.062182, 0.085242, 1.078340, 0.987776, -0.049569, 0.067855, 1.092000,
+ 0.991030, -0.037239, 0.050692, 1.104300, 0.994740, -0.024435, 0.033332, 1.115760,
+ 0.997768, -0.012145, 0.016435, 1.126170, 1.000030, 0.000318, -0.000170, 1.135980,
+ 0.825551, -0.000008, 0.378425, 0.000017, 0.826640, -0.000191, 0.378923, 0.000417,
+ 0.826323, -0.000763, 0.378779, 0.001666, 0.826359, -0.001718, 0.378795, 0.003748,
+ 0.826360, -0.003054, 0.378795, 0.006663, 0.826368, -0.004772, 0.378798, 0.010410,
+ 0.826364, -0.006871, 0.378795, 0.014991, 0.826368, -0.009352, 0.378795, 0.020405,
+ 0.826376, -0.012215, 0.378797, 0.026653, 0.826399, -0.015458, 0.378803, 0.033736,
+ 0.826460, -0.019082, 0.378824, 0.041654, 0.826525, -0.023087, 0.378846, 0.050409,
+ 0.826614, -0.027472, 0.378876, 0.060003, 0.826740, -0.032236, 0.378917, 0.070439,
+ 0.826888, -0.037377, 0.378964, 0.081720, 0.827078, -0.042894, 0.379024, 0.093849,
+ 0.827318, -0.048778, 0.379099, 0.106828, 0.827640, -0.054994, 0.379199, 0.120659,
+ 0.827926, -0.061106, 0.379227, 0.135260, 0.828325, -0.067505, 0.379275, 0.150713,
+ 0.828801, -0.074345, 0.379332, 0.167034, 0.829400, -0.081552, 0.379415, 0.184209,
+ 0.830094, -0.089078, 0.379495, 0.202203, 0.830900, -0.096736, 0.379555, 0.220945,
+ 0.831943, -0.104135, 0.379577, 0.240306, 0.833037, -0.112106, 0.379604, 0.260317,
+ 0.834278, -0.120554, 0.379668, 0.280800, 0.836192, -0.129128, 0.379900, 0.301654,
+ 0.838671, -0.137541, 0.380109, 0.323502, 0.840939, -0.145230, 0.379809, 0.347176,
+ 0.844575, -0.152480, 0.379593, 0.371706, 0.848379, -0.159607, 0.379090, 0.396880,
+ 0.853616, -0.166267, 0.378617, 0.422702, 0.858921, -0.172698, 0.377746, 0.448919,
+ 0.865324, -0.178823, 0.376749, 0.475661, 0.872207, -0.184542, 0.375363, 0.502599,
+ 0.880018, -0.189836, 0.373657, 0.529914, 0.886940, -0.194294, 0.370673, 0.557683,
+ 0.894779, -0.197022, 0.366620, 0.586848, 0.902242, -0.199108, 0.361380, 0.615831,
+ 0.909914, -0.200398, 0.355434, 0.644478, 0.917088, -0.200940, 0.348173, 0.672905,
+ 0.923888, -0.200671, 0.339482, 0.701327, 0.930495, -0.198773, 0.329560, 0.730101,
+ 0.937247, -0.195394, 0.318363, 0.758383, 0.943108, -0.191956, 0.306323, 0.786539,
+ 0.948296, -0.187227, 0.292576, 0.813637, 0.953472, -0.181165, 0.278234, 0.840793,
+ 0.958485, -0.174119, 0.263054, 0.867712, 0.962714, -0.166564, 0.246756, 0.893635,
+ 0.966185, -0.158181, 0.229945, 0.919028, 0.970146, -0.148275, 0.212633, 0.943413,
+ 0.973491, -0.138157, 0.195229, 0.966627, 0.975741, -0.127574, 0.178048, 0.988817,
+ 0.977238, -0.115540, 0.160312, 1.009240, 0.978411, -0.103640, 0.142857, 1.028450,
+ 0.979811, -0.091312, 0.125317, 1.046480, 0.981160, -0.078256, 0.107627, 1.062840,
+ 0.983543, -0.065596, 0.089586, 1.077980, 0.986789, -0.052041, 0.071376, 1.092000,
+ 0.990292, -0.038973, 0.053228, 1.104840, 0.994187, -0.025808, 0.035194, 1.116420,
+ 0.997499, -0.012607, 0.017320, 1.127030, 0.999999, 0.000276, -0.000149, 1.136740,
+ 0.810750, -0.000008, 0.394456, 0.000016, 0.808692, -0.000198, 0.393453, 0.000408,
+ 0.808460, -0.000793, 0.393340, 0.001630, 0.808595, -0.001784, 0.393407, 0.003667,
+ 0.808597, -0.003172, 0.393408, 0.006519, 0.808598, -0.004956, 0.393408, 0.010187,
+ 0.808591, -0.007136, 0.393403, 0.014669, 0.808592, -0.009713, 0.393402, 0.019967,
+ 0.808610, -0.012686, 0.393407, 0.026080, 0.808633, -0.016054, 0.393413, 0.033011,
+ 0.808680, -0.019817, 0.393429, 0.040759, 0.808748, -0.023976, 0.393453, 0.049326,
+ 0.808854, -0.028529, 0.393490, 0.058716, 0.808992, -0.033475, 0.393540, 0.068930,
+ 0.809141, -0.038812, 0.393588, 0.079971, 0.809352, -0.044538, 0.393660, 0.091843,
+ 0.809608, -0.050643, 0.393742, 0.104549, 0.809915, -0.057071, 0.393834, 0.118085,
+ 0.810253, -0.063353, 0.393885, 0.132377, 0.810687, -0.070097, 0.393953, 0.147537,
+ 0.811233, -0.077227, 0.394047, 0.163543, 0.811865, -0.084763, 0.394148, 0.180394,
+ 0.812648, -0.092566, 0.394265, 0.198051, 0.813583, -0.100416, 0.394363, 0.216443,
+ 0.814683, -0.108119, 0.394402, 0.235502, 0.815948, -0.116440, 0.394489, 0.255242,
+ 0.817278, -0.125036, 0.394542, 0.275441, 0.819605, -0.133655, 0.394860, 0.296094,
+ 0.822256, -0.142682, 0.395248, 0.317309, 0.825349, -0.150756, 0.395241, 0.340516,
+ 0.829605, -0.158392, 0.395285, 0.364819, 0.833910, -0.165801, 0.394922, 0.389736,
+ 0.839808, -0.172677, 0.394691, 0.415409, 0.845708, -0.179448, 0.394006, 0.441546,
+ 0.853025, -0.185746, 0.393279, 0.468320, 0.859666, -0.191684, 0.391655, 0.495302,
+ 0.867890, -0.197146, 0.390068, 0.522620, 0.875845, -0.201904, 0.387270, 0.550336,
+ 0.882634, -0.205023, 0.382688, 0.578825, 0.891076, -0.207098, 0.377543, 0.608103,
+ 0.900589, -0.208474, 0.371752, 0.637230, 0.907910, -0.209068, 0.364016, 0.665769,
+ 0.915971, -0.208655, 0.355593, 0.694428, 0.923455, -0.207290, 0.345439, 0.723224,
+ 0.931514, -0.203821, 0.334099, 0.751925, 0.937885, -0.199860, 0.321069, 0.780249,
+ 0.943136, -0.194993, 0.306571, 0.807700, 0.948818, -0.189132, 0.291556, 0.834970,
+ 0.954433, -0.181617, 0.275745, 0.861880, 0.959078, -0.173595, 0.258695, 0.888562,
+ 0.962705, -0.164855, 0.240825, 0.914008, 0.966753, -0.155129, 0.222680, 0.939145,
+ 0.970704, -0.144241, 0.204542, 0.963393, 0.973367, -0.133188, 0.185927, 0.985983,
+ 0.975984, -0.121146, 0.167743, 1.007040, 0.976994, -0.108366, 0.149218, 1.027150,
+ 0.978485, -0.095675, 0.131310, 1.045500, 0.980074, -0.082073, 0.112513, 1.062210,
+ 0.982250, -0.068406, 0.093832, 1.077820, 0.985530, -0.054950, 0.074951, 1.091990,
+ 0.989529, -0.040786, 0.055848, 1.105080, 0.993536, -0.027198, 0.036858, 1.116840,
+ 0.997247, -0.013272, 0.018184, 1.127890, 1.000000, 0.000432, -0.000199, 1.137920,
+ 0.785886, -0.000008, 0.405036, 0.000016, 0.790388, -0.000205, 0.407355, 0.000398,
+ 0.790145, -0.000821, 0.407231, 0.001593, 0.790135, -0.001847, 0.407226, 0.003583,
+ 0.790119, -0.003283, 0.407218, 0.006370, 0.790126, -0.005130, 0.407220, 0.009954,
+ 0.790130, -0.007387, 0.407221, 0.014334, 0.790135, -0.010054, 0.407221, 0.019511,
+ 0.790134, -0.013131, 0.407217, 0.025485, 0.790160, -0.016617, 0.407224, 0.032257,
+ 0.790197, -0.020512, 0.407236, 0.039828, 0.790273, -0.024816, 0.407263, 0.048201,
+ 0.790381, -0.029527, 0.407304, 0.057378, 0.790521, -0.034645, 0.407355, 0.067360,
+ 0.790704, -0.040167, 0.407420, 0.078152, 0.790925, -0.046090, 0.407499, 0.089758,
+ 0.791195, -0.052402, 0.407589, 0.102180, 0.791522, -0.059012, 0.407691, 0.115410,
+ 0.791878, -0.065488, 0.407748, 0.129390, 0.792361, -0.072521, 0.407849, 0.144237,
+ 0.792942, -0.079984, 0.407963, 0.159924, 0.793620, -0.087790, 0.408087, 0.176425,
+ 0.794529, -0.095845, 0.408259, 0.193733, 0.795521, -0.103827, 0.408362, 0.211756,
+ 0.796778, -0.111937, 0.408482, 0.230524, 0.798027, -0.120521, 0.408547, 0.249967,
+ 0.799813, -0.129242, 0.408721, 0.269926, 0.802387, -0.138048, 0.409148, 0.290338,
+ 0.805279, -0.147301, 0.409641, 0.311193, 0.809251, -0.155895, 0.410154, 0.333611,
+ 0.813733, -0.163942, 0.410297, 0.357615, 0.819081, -0.171666, 0.410373, 0.382339,
+ 0.825427, -0.178905, 0.410348, 0.407828, 0.831720, -0.185812, 0.409486, 0.434034,
+ 0.838770, -0.192318, 0.408776, 0.460493, 0.845817, -0.198249, 0.407176, 0.487346,
+ 0.854664, -0.204034, 0.405719, 0.514832, 0.863495, -0.208908, 0.403282, 0.542401,
+ 0.871883, -0.212765, 0.399293, 0.570683, 0.880650, -0.214911, 0.393803, 0.599947,
+ 0.890040, -0.216214, 0.387536, 0.629320, 0.898476, -0.216745, 0.379846, 0.658319,
+ 0.906738, -0.216387, 0.370625, 0.687138, 0.914844, -0.215053, 0.360139, 0.716010,
+ 0.923877, -0.212007, 0.348849, 0.745124, 0.931925, -0.207481, 0.335639, 0.773366,
+ 0.938054, -0.202418, 0.320798, 0.801636, 0.943895, -0.196507, 0.304772, 0.829055,
+ 0.949468, -0.189009, 0.288033, 0.856097, 0.955152, -0.180539, 0.270532, 0.883010,
+ 0.959403, -0.171437, 0.251639, 0.909296, 0.963309, -0.161661, 0.232563, 0.934868,
+ 0.967399, -0.150425, 0.213231, 0.959662, 0.972009, -0.138659, 0.194247, 0.983020,
+ 0.974330, -0.126595, 0.174718, 1.005170, 0.975823, -0.113205, 0.155518, 1.025660,
+ 0.976371, -0.099610, 0.136709, 1.044180, 0.978705, -0.086075, 0.117571, 1.061460,
+ 0.981477, -0.071444, 0.098005, 1.077770, 0.984263, -0.057230, 0.078218, 1.092140,
+ 0.988423, -0.042888, 0.058405, 1.105530, 0.993000, -0.028244, 0.038522, 1.117580,
+ 0.997040, -0.014018, 0.019015, 1.128640, 0.999913, 0.000369, -0.000145, 1.139010,
+ 0.777662, -0.000008, 0.423844, 0.000015, 0.770458, -0.000212, 0.419915, 0.000388,
+ 0.770716, -0.000847, 0.420055, 0.001554, 0.770982, -0.001906, 0.420202, 0.003497,
+ 0.770981, -0.003388, 0.420201, 0.006216, 0.770980, -0.005293, 0.420200, 0.009713,
+ 0.770983, -0.007622, 0.420200, 0.013987, 0.770985, -0.010374, 0.420198, 0.019038,
+ 0.770996, -0.013549, 0.420200, 0.024868, 0.771029, -0.017146, 0.420212, 0.031476,
+ 0.771052, -0.021165, 0.420215, 0.038865, 0.771131, -0.025605, 0.420245, 0.047036,
+ 0.771235, -0.030465, 0.420284, 0.055991, 0.771383, -0.035744, 0.420341, 0.065735,
+ 0.771591, -0.041439, 0.420423, 0.076269, 0.771819, -0.047546, 0.420506, 0.087598,
+ 0.772123, -0.054051, 0.420617, 0.099727, 0.772464, -0.060797, 0.420720, 0.112637,
+ 0.772855, -0.067539, 0.420799, 0.126313, 0.773317, -0.074832, 0.420893, 0.140824,
+ 0.773981, -0.082568, 0.421058, 0.156170, 0.774746, -0.090631, 0.421226, 0.172322,
+ 0.775660, -0.098898, 0.421397, 0.189253, 0.776837, -0.106994, 0.421569, 0.206912,
+ 0.778097, -0.115528, 0.421704, 0.225359, 0.779588, -0.124317, 0.421849, 0.244470,
+ 0.781574, -0.133139, 0.422097, 0.264156, 0.784451, -0.142179, 0.422615, 0.284318,
+ 0.787682, -0.151650, 0.423269, 0.304902, 0.792433, -0.160771, 0.424396, 0.326500,
+ 0.797359, -0.169166, 0.424772, 0.350140, 0.803986, -0.177149, 0.425475, 0.374768,
+ 0.809504, -0.184745, 0.424996, 0.399928, 0.815885, -0.191730, 0.424247, 0.425796,
+ 0.823513, -0.198525, 0.423515, 0.452287, 0.832549, -0.204709, 0.422787, 0.479321,
+ 0.841653, -0.210447, 0.421187, 0.506718, 0.850401, -0.215501, 0.418519, 0.534320,
+ 0.859854, -0.219752, 0.414715, 0.562420, 0.869364, -0.222305, 0.409462, 0.591558,
+ 0.878837, -0.223744, 0.402926, 0.621074, 0.888636, -0.224065, 0.395043, 0.650538,
+ 0.898132, -0.223742, 0.385640, 0.679538, 0.907181, -0.222308, 0.375378, 0.708674,
+ 0.915621, -0.219837, 0.363212, 0.737714, 0.923900, -0.215233, 0.349313, 0.767014,
+ 0.931644, -0.209592, 0.334162, 0.795133, 0.938887, -0.203644, 0.317943, 0.823228,
+ 0.945282, -0.196349, 0.300581, 0.850822, 0.950758, -0.187420, 0.282195, 0.877594,
+ 0.956146, -0.177879, 0.262481, 0.904564, 0.960355, -0.167643, 0.242487, 0.930741,
+ 0.965256, -0.156671, 0.222668, 0.955868, 0.968029, -0.144123, 0.201907, 0.979869,
+ 0.972510, -0.131305, 0.182020, 1.002910, 0.974925, -0.118335, 0.161909, 1.023920,
+ 0.975402, -0.103714, 0.142129, 1.043300, 0.976987, -0.089415, 0.122447, 1.060890,
+ 0.979677, -0.074886, 0.102248, 1.077130, 0.983184, -0.059609, 0.081485, 1.092180,
+ 0.987466, -0.044767, 0.060948, 1.105850, 0.992348, -0.029522, 0.040183, 1.118290,
+ 0.996674, -0.014392, 0.019816, 1.129660, 1.000030, 0.000321, -0.000150, 1.140200,
+ 0.757901, -0.000009, 0.436176, 0.000015, 0.751195, -0.000218, 0.432317, 0.000379,
+ 0.751178, -0.000871, 0.432307, 0.001514, 0.751195, -0.001961, 0.432317, 0.003407,
+ 0.751198, -0.003486, 0.432318, 0.006057, 0.751195, -0.005446, 0.432315, 0.009464,
+ 0.751207, -0.007842, 0.432320, 0.013628, 0.751213, -0.010673, 0.432320, 0.018550,
+ 0.751221, -0.013939, 0.432319, 0.024230, 0.751244, -0.017640, 0.432325, 0.030669,
+ 0.751300, -0.021774, 0.432348, 0.037870, 0.751358, -0.026341, 0.432367, 0.045832,
+ 0.751458, -0.031340, 0.432404, 0.054559, 0.751608, -0.036768, 0.432464, 0.064054,
+ 0.751800, -0.042625, 0.432540, 0.074322, 0.752065, -0.048903, 0.432645, 0.085367,
+ 0.752376, -0.055583, 0.432762, 0.097191, 0.752715, -0.062386, 0.432859, 0.109768,
+ 0.753137, -0.069415, 0.432958, 0.123126, 0.753676, -0.077004, 0.433099, 0.137308,
+ 0.754345, -0.084971, 0.433272, 0.152290, 0.755235, -0.093268, 0.433504, 0.168075,
+ 0.756186, -0.101710, 0.433693, 0.184625, 0.757363, -0.110019, 0.433857, 0.201897,
+ 0.758840, -0.118870, 0.434102, 0.220014, 0.760467, -0.127881, 0.434306, 0.238778,
+ 0.762969, -0.136766, 0.434751, 0.258172, 0.765823, -0.146120, 0.435290, 0.278062,
+ 0.769676, -0.155660, 0.436236, 0.298437, 0.774909, -0.165177, 0.437754, 0.319532,
+ 0.779940, -0.174020, 0.438343, 0.342505, 0.785757, -0.182201, 0.438609, 0.366693,
+ 0.792487, -0.190104, 0.438762, 0.391668, 0.800380, -0.197438, 0.438795, 0.417494,
+ 0.808494, -0.204365, 0.438226, 0.443933, 0.817695, -0.210714, 0.437283, 0.470929,
+ 0.828111, -0.216651, 0.436087, 0.498569, 0.837901, -0.221804, 0.433717, 0.526165,
+ 0.847813, -0.226318, 0.430133, 0.554155, 0.858314, -0.229297, 0.425213, 0.582822,
+ 0.868891, -0.230999, 0.418576, 0.612847, 0.878941, -0.231155, 0.410405, 0.642445,
+ 0.888809, -0.230935, 0.400544, 0.672024, 0.898089, -0.229343, 0.389613, 0.701366,
+ 0.908081, -0.226886, 0.377197, 0.730763, 0.916819, -0.222676, 0.363397, 0.759642,
+ 0.924968, -0.216835, 0.347437, 0.788775, 0.932906, -0.210245, 0.329950, 0.817135,
+ 0.940025, -0.202992, 0.312262, 0.844912, 0.946101, -0.194360, 0.293313, 0.872164,
+ 0.952835, -0.184125, 0.273638, 0.899443, 0.957347, -0.173657, 0.252385, 0.926389,
+ 0.961434, -0.162204, 0.231038, 0.951947, 0.965522, -0.149790, 0.209834, 0.976751,
+ 0.969412, -0.136307, 0.188821, 1.000220, 0.973902, -0.122527, 0.168013, 1.022290,
+ 0.974045, -0.108213, 0.147634, 1.041990, 0.975775, -0.092740, 0.127050, 1.060190,
+ 0.978383, -0.077821, 0.106309, 1.077110, 0.982110, -0.062122, 0.084928, 1.092450,
+ 0.986517, -0.046385, 0.063352, 1.106510, 0.991696, -0.030935, 0.041970, 1.119030,
+ 0.996349, -0.015091, 0.020627, 1.130730, 1.000030, 0.000442, -0.000231, 1.141460,
+ 0.727498, -0.000009, 0.441528, 0.000015, 0.730897, -0.000224, 0.443589, 0.000368,
+ 0.730796, -0.000894, 0.443528, 0.001473, 0.730805, -0.002011, 0.443533, 0.003314,
+ 0.730814, -0.003576, 0.443538, 0.005892, 0.730815, -0.005587, 0.443538, 0.009207,
+ 0.730822, -0.008045, 0.443540, 0.013258, 0.730836, -0.010950, 0.443545, 0.018047,
+ 0.730848, -0.014301, 0.443546, 0.023573, 0.730871, -0.018097, 0.443552, 0.029838,
+ 0.730915, -0.022338, 0.443567, 0.036844, 0.730982, -0.027023, 0.443591, 0.044591,
+ 0.731076, -0.032149, 0.443627, 0.053083, 0.731245, -0.037717, 0.443699, 0.062324,
+ 0.731440, -0.043722, 0.443777, 0.072318, 0.731700, -0.050158, 0.443881, 0.083069,
+ 0.732034, -0.056994, 0.444014, 0.094581, 0.732388, -0.063876, 0.444113, 0.106825,
+ 0.732853, -0.071203, 0.444247, 0.119859, 0.733473, -0.079008, 0.444442, 0.133690,
+ 0.734195, -0.087194, 0.444645, 0.148304, 0.735069, -0.095696, 0.444877, 0.163702,
+ 0.736169, -0.104260, 0.445133, 0.179861, 0.737470, -0.112853, 0.445370, 0.196778,
+ 0.738991, -0.121990, 0.445651, 0.214496, 0.740865, -0.131153, 0.445958, 0.232913,
+ 0.743637, -0.140245, 0.446548, 0.251977, 0.746797, -0.149722, 0.447246, 0.271551,
+ 0.751517, -0.159341, 0.448656, 0.291774, 0.756156, -0.169106, 0.449866, 0.312455,
+ 0.761519, -0.178436, 0.450919, 0.334552, 0.768295, -0.186904, 0.451776, 0.358491,
+ 0.776613, -0.195117, 0.452832, 0.383446, 0.783966, -0.202695, 0.452490, 0.408945,
+ 0.793542, -0.209850, 0.452587, 0.435364, 0.803192, -0.216403, 0.451852, 0.462336,
+ 0.813892, -0.222510, 0.450708, 0.489870, 0.824968, -0.227676, 0.448600, 0.517697,
+ 0.835859, -0.232443, 0.445156, 0.545975, 0.846825, -0.235775, 0.440351, 0.574483,
+ 0.858085, -0.237897, 0.433641, 0.604246, 0.868825, -0.238074, 0.425354, 0.634101,
+ 0.879638, -0.237661, 0.415383, 0.664201, 0.889966, -0.236186, 0.404136, 0.693918,
+ 0.899479, -0.233599, 0.390917, 0.723481, 0.908769, -0.229737, 0.376352, 0.752580,
+ 0.917966, -0.223836, 0.360372, 0.781764, 0.926304, -0.217067, 0.342551, 0.811139,
+ 0.934626, -0.209309, 0.324238, 0.839585, 0.941841, -0.200710, 0.304484, 0.867044,
+ 0.947890, -0.190602, 0.283607, 0.894579, 0.954196, -0.179253, 0.262205, 0.921743,
+ 0.958383, -0.167646, 0.239847, 0.948026, 0.963119, -0.155073, 0.218078, 0.973296,
+ 0.966941, -0.141426, 0.195899, 0.998135, 0.970836, -0.126849, 0.174121, 1.020210,
+ 0.973301, -0.112296, 0.153052, 1.040850, 0.974480, -0.096496, 0.131733, 1.059460,
+ 0.977045, -0.080489, 0.109970, 1.076930, 0.980751, -0.064844, 0.088166, 1.092540,
+ 0.985475, -0.048194, 0.065799, 1.106970, 0.991089, -0.031919, 0.043521, 1.120040,
+ 0.996122, -0.015809, 0.021478, 1.131730, 1.000010, 0.000372, -0.000200, 1.142910,
+ 0.708622, -0.000009, 0.453040, 0.000014, 0.711162, -0.000229, 0.454662, 0.000358,
+ 0.709812, -0.000914, 0.453797, 0.001430, 0.709865, -0.002058, 0.453834, 0.003219,
+ 0.709864, -0.003659, 0.453833, 0.005723, 0.709855, -0.005717, 0.453826, 0.008943,
+ 0.709862, -0.008232, 0.453828, 0.012878, 0.709875, -0.011204, 0.453832, 0.017529,
+ 0.709896, -0.014632, 0.453839, 0.022898, 0.709925, -0.018516, 0.453847, 0.028984,
+ 0.709974, -0.022855, 0.453866, 0.035789, 0.710045, -0.027647, 0.453892, 0.043316,
+ 0.710133, -0.032891, 0.453924, 0.051567, 0.710292, -0.038585, 0.453992, 0.060546,
+ 0.710485, -0.044725, 0.454070, 0.070257, 0.710769, -0.051305, 0.454192, 0.080708,
+ 0.711106, -0.058273, 0.454329, 0.091896, 0.711516, -0.065287, 0.454460, 0.103814,
+ 0.712071, -0.072843, 0.454653, 0.116508, 0.712676, -0.080831, 0.454840, 0.129968,
+ 0.713476, -0.089222, 0.455096, 0.144206, 0.714377, -0.097905, 0.455346, 0.159212,
+ 0.715579, -0.106531, 0.455647, 0.174973, 0.716977, -0.115492, 0.455961, 0.191504,
+ 0.718620, -0.124821, 0.456315, 0.208835, 0.720840, -0.134079, 0.456800, 0.226869,
+ 0.723786, -0.143427, 0.457521, 0.245582, 0.727464, -0.153061, 0.458475, 0.264957,
+ 0.732771, -0.162768, 0.460239, 0.284948, 0.736515, -0.172627, 0.460899, 0.305220,
+ 0.743519, -0.182487, 0.463225, 0.326717, 0.750041, -0.191295, 0.464027, 0.350113,
+ 0.758589, -0.199746, 0.465227, 0.374782, 0.767703, -0.207584, 0.465877, 0.400226,
+ 0.777484, -0.214973, 0.465996, 0.426442, 0.788792, -0.221796, 0.466019, 0.453688,
+ 0.800194, -0.228038, 0.465083, 0.481246, 0.811234, -0.233346, 0.462506, 0.509086,
+ 0.822859, -0.238073, 0.459257, 0.537338, 0.835082, -0.241764, 0.454863, 0.566108,
+ 0.846332, -0.244241, 0.448163, 0.595126, 0.858355, -0.244736, 0.439709, 0.625574,
+ 0.870340, -0.244278, 0.429837, 0.656170, 0.881027, -0.242550, 0.418002, 0.686029,
+ 0.891007, -0.239912, 0.404325, 0.716039, 0.900874, -0.236133, 0.389222, 0.745518,
+ 0.911072, -0.230672, 0.373269, 0.775026, 0.920359, -0.223560, 0.355083, 0.804521,
+ 0.928604, -0.215591, 0.335533, 0.834045, 0.937175, -0.206503, 0.315278, 0.861612,
+ 0.942825, -0.196684, 0.293653, 0.889131, 0.949805, -0.185116, 0.271503, 0.916853,
+ 0.955535, -0.172703, 0.248821, 0.943541, 0.959843, -0.159978, 0.225591, 0.970132,
+ 0.964393, -0.146375, 0.202719, 0.994709, 0.968008, -0.131269, 0.179928, 1.018600,
+ 0.971013, -0.115690, 0.158007, 1.039280, 0.973334, -0.100300, 0.136240, 1.058870,
+ 0.975775, -0.083335, 0.113800, 1.076520, 0.979579, -0.066898, 0.091314, 1.092970,
+ 0.984323, -0.050090, 0.068305, 1.107340, 0.990351, -0.033238, 0.045177, 1.120840,
+ 0.995823, -0.016149, 0.022170, 1.132960, 1.000100, 0.000234, -0.000109, 1.144410,
+ 0.683895, -0.000009, 0.460150, 0.000014, 0.688330, -0.000233, 0.463134, 0.000347,
+ 0.688368, -0.000934, 0.463159, 0.001387, 0.688367, -0.002100, 0.463159, 0.003122,
+ 0.688369, -0.003734, 0.463159, 0.005550, 0.688377, -0.005834, 0.463163, 0.008672,
+ 0.688386, -0.008401, 0.463166, 0.012488, 0.688398, -0.011434, 0.463169, 0.016999,
+ 0.688418, -0.014933, 0.463175, 0.022205, 0.688453, -0.018896, 0.463188, 0.028108,
+ 0.688515, -0.023324, 0.463214, 0.034709, 0.688570, -0.028214, 0.463231, 0.042009,
+ 0.688679, -0.033564, 0.463276, 0.050013, 0.688854, -0.039373, 0.463356, 0.058725,
+ 0.689038, -0.045635, 0.463430, 0.068148, 0.689321, -0.052343, 0.463553, 0.078290,
+ 0.689662, -0.059412, 0.463693, 0.089150, 0.690188, -0.066574, 0.463900, 0.100735,
+ 0.690755, -0.074311, 0.464107, 0.113074, 0.691405, -0.082472, 0.464329, 0.126161,
+ 0.692198, -0.091048, 0.464585, 0.140007, 0.693196, -0.099878, 0.464893, 0.154612,
+ 0.694540, -0.108651, 0.465285, 0.169984, 0.695921, -0.117855, 0.465596, 0.186106,
+ 0.697749, -0.127340, 0.466056, 0.203034, 0.700375, -0.136714, 0.466771, 0.220703,
+ 0.703395, -0.146386, 0.467579, 0.239062, 0.707904, -0.156096, 0.469067, 0.258188,
+ 0.711673, -0.165904, 0.469851, 0.277759, 0.717489, -0.175812, 0.471815, 0.297935,
+ 0.724051, -0.185931, 0.473890, 0.318916, 0.731965, -0.195238, 0.475870, 0.341591,
+ 0.741151, -0.204021, 0.477523, 0.366062, 0.751416, -0.212113, 0.478881, 0.391396,
+ 0.761848, -0.219790, 0.479226, 0.417599, 0.771886, -0.226700, 0.478495, 0.444401,
+ 0.783998, -0.232991, 0.477622, 0.472084, 0.796523, -0.238645, 0.475833, 0.500193,
+ 0.808851, -0.243396, 0.472568, 0.528650, 0.821191, -0.247226, 0.467857, 0.557362,
+ 0.834261, -0.250102, 0.461871, 0.586768, 0.846762, -0.251056, 0.453543, 0.617085,
+ 0.859867, -0.250604, 0.443494, 0.647659, 0.871948, -0.248783, 0.431711, 0.678119,
+ 0.882967, -0.245855, 0.417911, 0.708399, 0.892826, -0.242168, 0.401993, 0.738256,
+ 0.903320, -0.237062, 0.385371, 0.767999, 0.913633, -0.229970, 0.366837, 0.798191,
+ 0.922774, -0.221687, 0.346372, 0.827756, 0.931371, -0.212345, 0.325682, 0.856425,
+ 0.938929, -0.202060, 0.303665, 0.884299, 0.944821, -0.190981, 0.280786, 0.912023,
+ 0.951792, -0.178065, 0.257300, 0.939669, 0.957712, -0.164634, 0.233448, 0.966550,
+ 0.961912, -0.150863, 0.209504, 0.992366, 0.966382, -0.135770, 0.185970, 1.016330,
+ 0.969588, -0.119593, 0.162905, 1.038430, 0.971777, -0.103203, 0.140530, 1.058410,
+ 0.974330, -0.086589, 0.117909, 1.076320, 0.978686, -0.069083, 0.094410, 1.093260,
+ 0.983281, -0.051657, 0.070567, 1.107960, 0.989562, -0.034558, 0.046859, 1.121820,
+ 0.995465, -0.016781, 0.022985, 1.134200, 0.999991, 0.000373, -0.000236, 1.145900,
+ 0.662251, -0.000009, 0.468575, 0.000013, 0.666634, -0.000238, 0.471675, 0.000336,
+ 0.666411, -0.000950, 0.471516, 0.001343, 0.666399, -0.002138, 0.471509, 0.003022,
+ 0.666386, -0.003801, 0.471499, 0.005373, 0.666405, -0.005940, 0.471511, 0.008395,
+ 0.666406, -0.008553, 0.471508, 0.012090, 0.666428, -0.011640, 0.471519, 0.016457,
+ 0.666444, -0.015201, 0.471522, 0.021497, 0.666490, -0.019236, 0.471543, 0.027212,
+ 0.666537, -0.023743, 0.471558, 0.033603, 0.666617, -0.028720, 0.471591, 0.040673,
+ 0.666718, -0.034165, 0.471631, 0.048424, 0.666889, -0.040076, 0.471710, 0.056862,
+ 0.667104, -0.046448, 0.471805, 0.065991, 0.667374, -0.053268, 0.471923, 0.075818,
+ 0.667772, -0.060380, 0.472098, 0.086343, 0.668371, -0.067739, 0.472363, 0.097592,
+ 0.668971, -0.075603, 0.472596, 0.109567, 0.669696, -0.083929, 0.472869, 0.122272,
+ 0.670481, -0.092668, 0.473126, 0.135718, 0.671500, -0.101600, 0.473442, 0.149914,
+ 0.672911, -0.110566, 0.473890, 0.164882, 0.674512, -0.119984, 0.474354, 0.180602,
+ 0.676510, -0.129574, 0.474922, 0.197110, 0.679292, -0.139106, 0.475764, 0.214371,
+ 0.682798, -0.148993, 0.476886, 0.232405, 0.686955, -0.158737, 0.478179, 0.251153,
+ 0.691406, -0.168754, 0.479432, 0.270436, 0.697438, -0.178703, 0.481481, 0.290374,
+ 0.704761, -0.188955, 0.484143, 0.311044, 0.713599, -0.198814, 0.487007, 0.333003,
+ 0.723194, -0.207869, 0.488962, 0.357144, 0.732601, -0.216189, 0.489815, 0.382169,
+ 0.744193, -0.223980, 0.490888, 0.408227, 0.754907, -0.231156, 0.490355, 0.434928,
+ 0.767403, -0.237470, 0.489548, 0.462599, 0.781070, -0.243503, 0.488274, 0.490908,
+ 0.793893, -0.248114, 0.484843, 0.519421, 0.807296, -0.252220, 0.480300, 0.548561,
+ 0.820529, -0.255265, 0.474097, 0.577772, 0.833716, -0.256741, 0.466041, 0.607782,
+ 0.848403, -0.256370, 0.456547, 0.638807, 0.860755, -0.254804, 0.443946, 0.670058,
+ 0.874012, -0.251834, 0.430852, 0.700749, 0.885619, -0.247867, 0.414903, 0.731446,
+ 0.896069, -0.242634, 0.397276, 0.761191, 0.906266, -0.236093, 0.378535, 0.791053,
+ 0.916759, -0.227543, 0.358038, 0.821298, 0.925230, -0.217830, 0.335705, 0.850747,
+ 0.934360, -0.207534, 0.313797, 0.879258, 0.941631, -0.195983, 0.289671, 0.907734,
+ 0.947564, -0.183567, 0.265319, 0.935206, 0.953681, -0.169345, 0.240815, 0.962739,
+ 0.960008, -0.154909, 0.216119, 0.989227, 0.964145, -0.140161, 0.192096, 1.014650,
+ 0.968171, -0.123411, 0.167855, 1.037370, 0.969859, -0.106525, 0.144817, 1.057670,
+ 0.972666, -0.089102, 0.121490, 1.076100, 0.977055, -0.071809, 0.097531, 1.093360,
+ 0.982527, -0.053421, 0.073022, 1.108780, 0.989001, -0.035558, 0.048337, 1.122850,
+ 0.995120, -0.017638, 0.023938, 1.135480, 1.000070, 0.000369, -0.000212, 1.147440,
+ 0.651047, -0.000010, 0.484101, 0.000013, 0.644145, -0.000241, 0.478968, 0.000325,
+ 0.643960, -0.000965, 0.478831, 0.001298, 0.643960, -0.002172, 0.478830, 0.002920,
+ 0.643968, -0.003860, 0.478835, 0.005192, 0.643974, -0.006032, 0.478838, 0.008113,
+ 0.643977, -0.008685, 0.478836, 0.011683, 0.643982, -0.011821, 0.478834, 0.015903,
+ 0.644024, -0.015437, 0.478856, 0.020774, 0.644059, -0.019534, 0.478868, 0.026298,
+ 0.644122, -0.024110, 0.478896, 0.032475, 0.644207, -0.029164, 0.478933, 0.039309,
+ 0.644320, -0.034692, 0.478981, 0.046803, 0.644481, -0.040692, 0.479053, 0.054961,
+ 0.644722, -0.047159, 0.479169, 0.063791, 0.645013, -0.054075, 0.479302, 0.073297,
+ 0.645503, -0.061200, 0.479541, 0.083490, 0.646117, -0.068730, 0.479829, 0.094387,
+ 0.646707, -0.076785, 0.480061, 0.105991, 0.647431, -0.085247, 0.480343, 0.118310,
+ 0.648310, -0.094072, 0.480660, 0.131348, 0.649486, -0.103056, 0.481083, 0.145140,
+ 0.650864, -0.112261, 0.481528, 0.159676, 0.652604, -0.121852, 0.482102, 0.174979,
+ 0.654825, -0.131505, 0.482813, 0.191079, 0.657876, -0.141189, 0.483876, 0.207927,
+ 0.661339, -0.151239, 0.484990, 0.225586, 0.665463, -0.161091, 0.486279, 0.243947,
+ 0.670542, -0.171235, 0.487968, 0.262957, 0.677361, -0.181347, 0.490530, 0.282781,
+ 0.685672, -0.191679, 0.493862, 0.303311, 0.694551, -0.201781, 0.496990, 0.324607,
+ 0.703753, -0.211164, 0.498884, 0.347916, 0.713703, -0.219675, 0.500086, 0.372628,
+ 0.725911, -0.227836, 0.501554, 0.398694, 0.738620, -0.235330, 0.502193, 0.425529,
+ 0.752118, -0.241786, 0.501811, 0.453209, 0.765790, -0.247865, 0.500185, 0.481381,
+ 0.779568, -0.252696, 0.497159, 0.510110, 0.793991, -0.256802, 0.492765, 0.539322,
+ 0.808182, -0.259942, 0.486827, 0.569078, 0.821698, -0.261703, 0.478386, 0.598818,
+ 0.836009, -0.262006, 0.468772, 0.629762, 0.849824, -0.260333, 0.456352, 0.661366,
+ 0.863888, -0.257398, 0.442533, 0.692950, 0.876585, -0.253264, 0.426573, 0.723608,
+ 0.888665, -0.248026, 0.408964, 0.754378, 0.899537, -0.241487, 0.389677, 0.784761,
+ 0.909400, -0.233463, 0.368516, 0.814688, 0.920166, -0.223397, 0.346624, 0.845009,
+ 0.928899, -0.212550, 0.322717, 0.874431, 0.937156, -0.200869, 0.298698, 0.902922,
+ 0.943861, -0.188387, 0.273491, 0.931356, 0.949557, -0.174341, 0.247866, 0.958854,
+ 0.955862, -0.158994, 0.222496, 0.986098, 0.961721, -0.143664, 0.197522, 1.012290,
+ 0.965976, -0.127412, 0.173020, 1.035710, 0.968652, -0.109798, 0.148954, 1.056990,
+ 0.971084, -0.091679, 0.125044, 1.075870, 0.975584, -0.073963, 0.100577, 1.093720,
+ 0.981220, -0.055322, 0.075367, 1.109480, 0.988253, -0.036682, 0.049890, 1.123940,
+ 0.994820, -0.018039, 0.024611, 1.136940, 1.000010, 0.000230, -0.000188, 1.149190,
+ 0.613867, -0.000010, 0.479449, 0.000012, 0.621485, -0.000245, 0.485399, 0.000313,
+ 0.621429, -0.000978, 0.485353, 0.001252, 0.621120, -0.002200, 0.485114, 0.002817,
+ 0.621119, -0.003911, 0.485112, 0.005008, 0.621122, -0.006111, 0.485112, 0.007825,
+ 0.621133, -0.008799, 0.485117, 0.011269, 0.621152, -0.011976, 0.485125, 0.015339,
+ 0.621183, -0.015640, 0.485139, 0.020038, 0.621227, -0.019790, 0.485158, 0.025366,
+ 0.621298, -0.024425, 0.485192, 0.031326, 0.621388, -0.029544, 0.485233, 0.037920,
+ 0.621507, -0.035143, 0.485286, 0.045152, 0.621693, -0.041220, 0.485378, 0.053028,
+ 0.621933, -0.047767, 0.485495, 0.061552, 0.622232, -0.054757, 0.485635, 0.070732,
+ 0.622809, -0.061942, 0.485943, 0.080588, 0.623407, -0.069625, 0.486232, 0.091127,
+ 0.624060, -0.077796, 0.486516, 0.102354, 0.624835, -0.086373, 0.486838, 0.114279,
+ 0.625758, -0.095251, 0.487188, 0.126902, 0.627043, -0.104299, 0.487695, 0.140285,
+ 0.628438, -0.113724, 0.488163, 0.154397, 0.630325, -0.123417, 0.488858, 0.169267,
+ 0.632801, -0.133137, 0.489754, 0.184941, 0.635784, -0.143052, 0.490815, 0.201360,
+ 0.639406, -0.153132, 0.492048, 0.218643, 0.643872, -0.163143, 0.493630, 0.236615,
+ 0.649900, -0.173330, 0.496009, 0.255449, 0.657201, -0.183622, 0.498994, 0.275006,
+ 0.666221, -0.194019, 0.502888, 0.295354, 0.674419, -0.204192, 0.505459, 0.316244,
+ 0.683729, -0.214060, 0.507771, 0.338490, 0.695584, -0.222854, 0.510245, 0.363166,
+ 0.708583, -0.231315, 0.512293, 0.389071, 0.721233, -0.238911, 0.512747, 0.415737,
+ 0.735134, -0.245657, 0.512482, 0.443331, 0.750179, -0.251879, 0.511526, 0.471891,
+ 0.765073, -0.256911, 0.508935, 0.500892, 0.779794, -0.261144, 0.504341, 0.530294,
+ 0.794801, -0.264316, 0.498515, 0.560144, 0.810339, -0.266276, 0.491015, 0.590213,
+ 0.824818, -0.266981, 0.481126, 0.620865, 0.839375, -0.265778, 0.468685, 0.652687,
+ 0.853043, -0.262748, 0.453925, 0.684759, 0.867335, -0.258474, 0.437912, 0.716209,
+ 0.880370, -0.253187, 0.419648, 0.747508, 0.891711, -0.246476, 0.399820, 0.777970,
+ 0.902896, -0.238735, 0.378790, 0.808586, 0.913601, -0.228850, 0.355891, 0.838843,
+ 0.923019, -0.217656, 0.331773, 0.869014, 0.933432, -0.205539, 0.307356, 0.898512,
+ 0.939691, -0.192595, 0.281321, 0.926900, 0.946938, -0.178945, 0.255441, 0.955297,
+ 0.952372, -0.163587, 0.229013, 0.983231, 0.959090, -0.147214, 0.203179, 1.009710,
+ 0.963675, -0.130640, 0.177920, 1.034380, 0.968247, -0.113121, 0.152898, 1.056250,
+ 0.970010, -0.094582, 0.128712, 1.075980, 0.974458, -0.075565, 0.103349, 1.094000,
+ 0.980168, -0.057200, 0.077673, 1.110400, 0.987295, -0.037799, 0.051444, 1.124910,
+ 0.994432, -0.018642, 0.025429, 1.138510, 0.999975, 0.000543, -0.000282, 1.151080,
+ 0.592656, -0.000010, 0.486018, 0.000012, 0.598467, -0.000247, 0.490781, 0.000302,
+ 0.597934, -0.000988, 0.490343, 0.001205, 0.597903, -0.002224, 0.490319, 0.002712,
+ 0.597913, -0.003953, 0.490327, 0.004821, 0.597919, -0.006177, 0.490329, 0.007533,
+ 0.597936, -0.008894, 0.490339, 0.010848, 0.597956, -0.012104, 0.490347, 0.014767,
+ 0.597992, -0.015807, 0.490365, 0.019290, 0.598032, -0.020002, 0.490382, 0.024420,
+ 0.598109, -0.024687, 0.490420, 0.030159, 0.598215, -0.029859, 0.490474, 0.036510,
+ 0.598330, -0.035517, 0.490524, 0.043476, 0.598525, -0.041656, 0.490624, 0.051063,
+ 0.598778, -0.048269, 0.490753, 0.059278, 0.599135, -0.055311, 0.490940, 0.068130,
+ 0.599802, -0.062542, 0.491328, 0.077647, 0.600361, -0.070364, 0.491598, 0.087818,
+ 0.601010, -0.078626, 0.491882, 0.098657, 0.601811, -0.087296, 0.492232, 0.110180,
+ 0.602861, -0.096228, 0.492684, 0.122400, 0.604167, -0.105380, 0.493213, 0.135354,
+ 0.605693, -0.114896, 0.493799, 0.149034, 0.607682, -0.124654, 0.494576, 0.163469,
+ 0.610672, -0.134560, 0.495900, 0.178747, 0.613313, -0.144581, 0.496713, 0.194723,
+ 0.617603, -0.154703, 0.498499, 0.211617, 0.622174, -0.164890, 0.500188, 0.229183,
+ 0.628855, -0.175164, 0.503072, 0.247786, 0.636963, -0.185565, 0.506798, 0.267116,
+ 0.644866, -0.195911, 0.509719, 0.287020, 0.653741, -0.206104, 0.512776, 0.307763,
+ 0.664942, -0.216447, 0.516812, 0.329631, 0.676330, -0.225520, 0.519181, 0.353515,
+ 0.690012, -0.234316, 0.521681, 0.379226, 0.704243, -0.242032, 0.523129, 0.405901,
+ 0.719396, -0.249172, 0.523768, 0.433585, 0.734471, -0.255543, 0.522541, 0.462085,
+ 0.750539, -0.260697, 0.520217, 0.491233, 0.766365, -0.265010, 0.516293, 0.521094,
+ 0.781677, -0.268409, 0.509708, 0.551014, 0.797132, -0.270399, 0.501944, 0.581463,
+ 0.812655, -0.271247, 0.492025, 0.612402, 0.828592, -0.270708, 0.480424, 0.643798,
+ 0.844044, -0.268085, 0.465955, 0.676820, 0.857305, -0.263459, 0.448425, 0.708496,
+ 0.871140, -0.258151, 0.430243, 0.740460, 0.884936, -0.251171, 0.410578, 0.771583,
+ 0.895772, -0.243305, 0.388620, 0.802234, 0.906961, -0.234037, 0.365214, 0.833179,
+ 0.917775, -0.222714, 0.341160, 0.863530, 0.927883, -0.210175, 0.315720, 0.893557,
+ 0.936617, -0.196925, 0.289159, 0.922976, 0.943384, -0.182788, 0.261996, 0.951606,
+ 0.949713, -0.167965, 0.235324, 0.979958, 0.955818, -0.151109, 0.208408, 1.007650,
+ 0.961344, -0.133834, 0.182591, 1.033290, 0.965469, -0.115987, 0.156958, 1.055700,
+ 0.968693, -0.097460, 0.132239, 1.075830, 0.973165, -0.077851, 0.106195, 1.094510,
+ 0.979387, -0.058507, 0.079767, 1.111370, 0.986710, -0.039041, 0.053026, 1.126430,
+ 0.994093, -0.019408, 0.026316, 1.140160, 1.000020, 0.000540, -0.000194, 1.152990,
+ 0.574483, -0.000010, 0.494533, 0.000011, 0.574478, -0.000249, 0.494528, 0.000289,
+ 0.574607, -0.000997, 0.494637, 0.001158, 0.574396, -0.002242, 0.494458, 0.002605,
+ 0.574377, -0.003986, 0.494440, 0.004631, 0.574386, -0.006228, 0.494445, 0.007236,
+ 0.574401, -0.008968, 0.494453, 0.010421, 0.574419, -0.012206, 0.494460, 0.014186,
+ 0.574459, -0.015940, 0.494481, 0.018532, 0.574525, -0.020169, 0.494520, 0.023462,
+ 0.574587, -0.024892, 0.494547, 0.028976, 0.574697, -0.030107, 0.494604, 0.035080,
+ 0.574853, -0.035811, 0.494688, 0.041777, 0.575027, -0.041999, 0.494772, 0.049072,
+ 0.575294, -0.048662, 0.494915, 0.056973, 0.575733, -0.055715, 0.495173, 0.065495,
+ 0.576356, -0.063049, 0.495537, 0.074661, 0.576944, -0.070929, 0.495836, 0.084461,
+ 0.577650, -0.079272, 0.496177, 0.094914, 0.578491, -0.088017, 0.496563, 0.106030,
+ 0.579639, -0.096946, 0.497096, 0.117841, 0.580989, -0.106220, 0.497684, 0.130367,
+ 0.582587, -0.115861, 0.498337, 0.143609, 0.584951, -0.125605, 0.499414, 0.157625,
+ 0.587602, -0.135608, 0.500518, 0.172413, 0.590760, -0.145742, 0.501767, 0.187999,
+ 0.594992, -0.155934, 0.503542, 0.204450, 0.600656, -0.166303, 0.506135, 0.221764,
+ 0.607816, -0.176681, 0.509542, 0.240020, 0.615220, -0.187071, 0.512630, 0.258992,
+ 0.623702, -0.197465, 0.516021, 0.278773, 0.634192, -0.207816, 0.520422, 0.299377,
+ 0.644936, -0.218183, 0.524073, 0.320802, 0.657888, -0.227800, 0.528049, 0.343840,
+ 0.670666, -0.236747, 0.529860, 0.369160, 0.685626, -0.244840, 0.531892, 0.395867,
+ 0.701304, -0.252071, 0.532727, 0.423488, 0.717727, -0.258714, 0.532146, 0.452201,
+ 0.733914, -0.264211, 0.529883, 0.481579, 0.750529, -0.268590, 0.525900, 0.511558,
+ 0.767470, -0.272046, 0.519990, 0.542042, 0.785189, -0.274225, 0.513083, 0.572799,
+ 0.800954, -0.275189, 0.502936, 0.603816, 0.816962, -0.274946, 0.490921, 0.635461,
+ 0.833360, -0.272695, 0.476840, 0.667600, 0.848143, -0.268223, 0.459405, 0.700510,
+ 0.861818, -0.262768, 0.440319, 0.732902, 0.876828, -0.255872, 0.420123, 0.765084,
+ 0.889312, -0.247703, 0.398379, 0.796391, 0.900412, -0.238381, 0.374496, 0.827333,
+ 0.912251, -0.227783, 0.349874, 0.858385, 0.921792, -0.214832, 0.323181, 0.888652,
+ 0.931273, -0.200949, 0.296624, 0.917763, 0.940295, -0.186537, 0.269211, 0.947878,
+ 0.946812, -0.171538, 0.241447, 0.977016, 0.953588, -0.155254, 0.213829, 1.005010,
+ 0.958841, -0.137156, 0.186807, 1.031790, 0.963746, -0.118699, 0.160706, 1.055020,
+ 0.966468, -0.099836, 0.135504, 1.075680, 0.971178, -0.080519, 0.109131, 1.094790,
+ 0.978310, -0.059935, 0.081829, 1.112300, 0.985886, -0.039966, 0.054587, 1.127710,
+ 0.994021, -0.019868, 0.026940, 1.141860, 1.000090, 0.000271, -0.000130, 1.155140,
+ 0.538716, -0.000010, 0.486732, 0.000011, 0.550656, -0.000251, 0.497518, 0.000277,
+ 0.550570, -0.001003, 0.497441, 0.001110, 0.550903, -0.002257, 0.497733, 0.002498,
+ 0.550568, -0.004010, 0.497438, 0.004439, 0.550574, -0.006266, 0.497440, 0.006936,
+ 0.550591, -0.009023, 0.497449, 0.009989, 0.550623, -0.012280, 0.497469, 0.013598,
+ 0.550667, -0.016036, 0.497495, 0.017765, 0.550724, -0.020291, 0.497526, 0.022492,
+ 0.550792, -0.025042, 0.497557, 0.027779, 0.550918, -0.030288, 0.497630, 0.033633,
+ 0.551058, -0.036024, 0.497701, 0.040057, 0.551276, -0.042247, 0.497824, 0.047059,
+ 0.551551, -0.048944, 0.497977, 0.054643, 0.552074, -0.055960, 0.498312, 0.062837,
+ 0.552681, -0.063398, 0.498679, 0.071646, 0.553324, -0.071318, 0.499031, 0.081075,
+ 0.554011, -0.079727, 0.499365, 0.091129, 0.554880, -0.088524, 0.499779, 0.101837,
+ 0.556171, -0.097442, 0.500444, 0.113239, 0.557498, -0.106841, 0.501025, 0.125316,
+ 0.559299, -0.116533, 0.501864, 0.138128, 0.561647, -0.126298, 0.502967, 0.151695,
+ 0.564347, -0.136388, 0.504129, 0.166040, 0.567863, -0.146576, 0.505713, 0.181207,
+ 0.572569, -0.156832, 0.507953, 0.197259, 0.578919, -0.167323, 0.511186, 0.214258,
+ 0.585387, -0.177712, 0.514042, 0.232038, 0.593134, -0.188184, 0.517484, 0.250733,
+ 0.603295, -0.198717, 0.522345, 0.270454, 0.613854, -0.209177, 0.526751, 0.290807,
+ 0.626092, -0.219644, 0.531595, 0.312202, 0.637868, -0.229494, 0.534721, 0.334435,
+ 0.652458, -0.238718, 0.538304, 0.359184, 0.666985, -0.247061, 0.539875, 0.385637,
+ 0.683301, -0.254652, 0.541042, 0.413280, 0.699980, -0.261376, 0.540735, 0.441903,
+ 0.717824, -0.267085, 0.539139, 0.471609, 0.734617, -0.271465, 0.534958, 0.501446,
+ 0.753663, -0.275280, 0.530320, 0.532571, 0.770512, -0.277617, 0.522134, 0.563641,
+ 0.787356, -0.278525, 0.512060, 0.595067, 0.806252, -0.278512, 0.501190, 0.627226,
+ 0.822061, -0.277023, 0.486791, 0.659402, 0.838959, -0.273175, 0.470467, 0.692874,
+ 0.853790, -0.267238, 0.450688, 0.725702, 0.868268, -0.260327, 0.429741, 0.758320,
+ 0.881994, -0.251946, 0.407223, 0.790189, 0.893885, -0.242432, 0.383214, 0.821625,
+ 0.905118, -0.231904, 0.357297, 0.853011, 0.916045, -0.219545, 0.330733, 0.883773,
+ 0.927614, -0.205378, 0.303916, 0.914435, 0.936005, -0.190388, 0.275941, 0.944502,
+ 0.944533, -0.174900, 0.247493, 0.974439, 0.950758, -0.158588, 0.218996, 1.002860,
+ 0.957078, -0.141027, 0.191559, 1.030400, 0.962448, -0.121507, 0.164457, 1.054660,
+ 0.964993, -0.102068, 0.138636, 1.076100, 0.970017, -0.082260, 0.111861, 1.095410,
+ 0.976610, -0.062033, 0.084344, 1.113170, 0.985073, -0.040983, 0.055850, 1.129110,
+ 0.993515, -0.020146, 0.027533, 1.143800, 1.000060, 0.000273, -0.000108, 1.157360,
+ 0.525324, -0.000010, 0.498153, 0.000011, 0.526513, -0.000252, 0.499277, 0.000265,
+ 0.526517, -0.001006, 0.499282, 0.001061, 0.526588, -0.002265, 0.499337, 0.002388,
+ 0.526539, -0.004026, 0.499302, 0.004245, 0.526547, -0.006290, 0.499306, 0.006634,
+ 0.526561, -0.009056, 0.499313, 0.009553, 0.526593, -0.012325, 0.499334, 0.013005,
+ 0.526642, -0.016096, 0.499365, 0.016991, 0.526700, -0.020366, 0.499396, 0.021512,
+ 0.526792, -0.025135, 0.499451, 0.026572, 0.526904, -0.030398, 0.499511, 0.032173,
+ 0.527079, -0.036155, 0.499617, 0.038323, 0.527285, -0.042398, 0.499731, 0.045026,
+ 0.527602, -0.049112, 0.499924, 0.052294, 0.528166, -0.056113, 0.500306, 0.060153,
+ 0.528790, -0.063599, 0.500700, 0.068606, 0.529421, -0.071581, 0.501048, 0.077652,
+ 0.530144, -0.079985, 0.501421, 0.087315, 0.531062, -0.088803, 0.501884, 0.097608,
+ 0.532374, -0.097764, 0.502590, 0.108588, 0.533828, -0.107197, 0.503290, 0.120234,
+ 0.535810, -0.116887, 0.504312, 0.132602, 0.538063, -0.126755, 0.505365, 0.145721,
+ 0.540900, -0.136819, 0.506668, 0.159617, 0.544882, -0.147117, 0.508731, 0.174369,
+ 0.550238, -0.157446, 0.511601, 0.190028, 0.556038, -0.167988, 0.514431, 0.206587,
+ 0.563031, -0.178364, 0.517808, 0.224046, 0.571543, -0.189007, 0.521937, 0.242503,
+ 0.582255, -0.199546, 0.527415, 0.261977, 0.592720, -0.210084, 0.531682, 0.282162,
+ 0.605648, -0.220448, 0.537123, 0.303426, 0.617850, -0.230593, 0.540664, 0.325323,
+ 0.632223, -0.240238, 0.544467, 0.348993, 0.648819, -0.248870, 0.547594, 0.375462,
+ 0.665825, -0.256657, 0.549120, 0.403024, 0.683389, -0.263711, 0.549294, 0.431773,
+ 0.701495, -0.269666, 0.547649, 0.461494, 0.719197, -0.274169, 0.543786, 0.491623,
+ 0.737906, -0.278124, 0.538644, 0.522994, 0.756652, -0.280632, 0.531057, 0.554775,
+ 0.775279, -0.281741, 0.521972, 0.586441, 0.792688, -0.281652, 0.509613, 0.618596,
+ 0.811894, -0.280345, 0.496497, 0.651462, 0.827938, -0.277128, 0.479680, 0.684023,
+ 0.844837, -0.271646, 0.460688, 0.718024, 0.859239, -0.264397, 0.438872, 0.751207,
+ 0.874088, -0.256144, 0.415770, 0.784232, 0.887693, -0.246311, 0.391369, 0.816191,
+ 0.899402, -0.235497, 0.365872, 0.847828, 0.910973, -0.223631, 0.338618, 0.879340,
+ 0.922040, -0.209874, 0.310803, 0.910325, 0.930987, -0.194265, 0.281802, 0.940695,
+ 0.940000, -0.178125, 0.252836, 0.970958, 0.948018, -0.161479, 0.224239, 1.000780,
+ 0.955141, -0.144038, 0.195857, 1.028800, 0.960513, -0.124915, 0.168487, 1.053710,
+ 0.963964, -0.104284, 0.141495, 1.075960, 0.968713, -0.083873, 0.114437, 1.096280,
+ 0.975524, -0.063558, 0.086310, 1.114480, 0.984310, -0.042291, 0.057477, 1.130690,
+ 0.992916, -0.020913, 0.028434, 1.145680, 0.999926, 0.000743, -0.000379, 1.159550,
+ 0.501042, -0.000010, 0.498726, 0.000010, 0.502992, -0.000252, 0.500665, 0.000253,
+ 0.502417, -0.001008, 0.500092, 0.001013, 0.502965, -0.002269, 0.500621, 0.002280,
+ 0.502318, -0.004031, 0.499994, 0.004050, 0.502333, -0.006298, 0.500005, 0.006329,
+ 0.502362, -0.009069, 0.500027, 0.009114, 0.502369, -0.012342, 0.500023, 0.012408,
+ 0.502430, -0.016118, 0.500066, 0.016211, 0.502493, -0.020394, 0.500103, 0.020526,
+ 0.502592, -0.025168, 0.500166, 0.025355, 0.502707, -0.030439, 0.500230, 0.030703,
+ 0.502881, -0.036201, 0.500335, 0.036575, 0.503124, -0.042451, 0.500488, 0.042980,
+ 0.503443, -0.049158, 0.500686, 0.049927, 0.504083, -0.056148, 0.501155, 0.057454,
+ 0.504668, -0.063685, 0.501524, 0.065541, 0.505319, -0.071683, 0.501904, 0.074207,
+ 0.506090, -0.080092, 0.502321, 0.083470, 0.507122, -0.088843, 0.502896, 0.093360,
+ 0.508414, -0.097855, 0.503603, 0.103910, 0.509955, -0.107304, 0.504416, 0.115113,
+ 0.512061, -0.116921, 0.505565, 0.127054, 0.514419, -0.126890, 0.506732, 0.139709,
+ 0.517529, -0.136934, 0.508338, 0.153173, 0.522085, -0.147327, 0.510987, 0.167528,
+ 0.526986, -0.157612, 0.513527, 0.182708, 0.533122, -0.168213, 0.516717, 0.198881,
+ 0.540807, -0.178688, 0.520832, 0.215986, 0.550687, -0.189511, 0.526320, 0.234335,
+ 0.560567, -0.199998, 0.531009, 0.253375, 0.571698, -0.210652, 0.535839, 0.273499,
+ 0.584364, -0.220917, 0.541091, 0.294355, 0.599066, -0.231370, 0.546875, 0.316525,
+ 0.614148, -0.241206, 0.551306, 0.339671, 0.631157, -0.250379, 0.555187, 0.365310,
+ 0.647919, -0.258397, 0.556595, 0.392767, 0.666112, -0.265528, 0.556949, 0.421397,
+ 0.686158, -0.271827, 0.556617, 0.451433, 0.704838, -0.276740, 0.552975, 0.482131,
+ 0.723957, -0.280733, 0.547814, 0.513458, 0.742620, -0.283359, 0.539970, 0.545446,
+ 0.762009, -0.284541, 0.530422, 0.577750, 0.781314, -0.284507, 0.518546, 0.610434,
+ 0.799116, -0.283309, 0.504178, 0.643178, 0.817604, -0.280378, 0.488430, 0.676248,
+ 0.834590, -0.275619, 0.469457, 0.709698, 0.850974, -0.268560, 0.447698, 0.744245,
+ 0.866747, -0.260094, 0.424791, 0.777695, 0.881412, -0.249929, 0.399913, 0.810392,
+ 0.893600, -0.239137, 0.373080, 0.842872, 0.905943, -0.226818, 0.345705, 0.874677,
+ 0.916408, -0.213699, 0.317060, 0.906257, 0.927215, -0.198428, 0.288444, 0.936881,
+ 0.935625, -0.181643, 0.258329, 0.967950, 0.944076, -0.164386, 0.228488, 0.998216,
+ 0.951229, -0.146339, 0.199763, 1.026890, 0.958793, -0.127709, 0.172153, 1.053500,
+ 0.963219, -0.107244, 0.144989, 1.076460, 0.967562, -0.085776, 0.116850, 1.096750,
+ 0.974866, -0.064538, 0.088057, 1.115760, 0.983353, -0.043173, 0.058735, 1.132270,
+ 0.992503, -0.021836, 0.029418, 1.147800, 1.000030, 0.000605, -0.000231, 1.162070,
+ 0.482935, -0.000010, 0.504695, 0.000010, 0.477554, -0.000252, 0.499071, 0.000241,
+ 0.477904, -0.001007, 0.499436, 0.000963, 0.478368, -0.002266, 0.499899, 0.002169,
+ 0.477977, -0.004027, 0.499513, 0.003854, 0.477993, -0.006292, 0.499525, 0.006022,
+ 0.478011, -0.009060, 0.499536, 0.008673, 0.478051, -0.012330, 0.499566, 0.011807,
+ 0.478089, -0.016102, 0.499587, 0.015427, 0.478171, -0.020374, 0.499645, 0.019534,
+ 0.478254, -0.025143, 0.499692, 0.024132, 0.478390, -0.030407, 0.499779, 0.029225,
+ 0.478588, -0.036163, 0.499911, 0.034820, 0.478812, -0.042402, 0.500046, 0.040923,
+ 0.479208, -0.049072, 0.500326, 0.047552, 0.479841, -0.056072, 0.500805, 0.054738,
+ 0.480392, -0.063613, 0.501152, 0.062461, 0.481068, -0.071613, 0.501561, 0.070747,
+ 0.481898, -0.080006, 0.502054, 0.079612, 0.483022, -0.088657, 0.502728, 0.089097,
+ 0.484332, -0.097755, 0.503479, 0.099210, 0.486126, -0.107173, 0.504546, 0.109990,
+ 0.488066, -0.116770, 0.505570, 0.121476, 0.490521, -0.126725, 0.506849, 0.133672,
+ 0.494232, -0.136793, 0.509110, 0.146731, 0.498302, -0.147116, 0.511345, 0.160577,
+ 0.503565, -0.157446, 0.514344, 0.175335, 0.510902, -0.168121, 0.518824, 0.191207,
+ 0.519263, -0.178799, 0.523666, 0.208058, 0.528204, -0.189407, 0.528296, 0.225875,
+ 0.538854, -0.200145, 0.533724, 0.244782, 0.551278, -0.210701, 0.539833, 0.264753,
+ 0.565222, -0.221303, 0.546131, 0.285745, 0.579403, -0.231688, 0.551496, 0.307592,
+ 0.595469, -0.241718, 0.556809, 0.330582, 0.610929, -0.250992, 0.559641, 0.354995,
+ 0.629433, -0.259602, 0.562379, 0.382471, 0.648504, -0.267038, 0.563676, 0.411126,
+ 0.667560, -0.273388, 0.562092, 0.440924, 0.689143, -0.278788, 0.560807, 0.472118,
+ 0.709056, -0.282783, 0.555701, 0.503774, 0.729855, -0.285836, 0.548698, 0.536364,
+ 0.748954, -0.287078, 0.538544, 0.568950, 0.768373, -0.287133, 0.526711, 0.601991,
+ 0.788270, -0.285839, 0.512511, 0.635403, 0.807465, -0.283238, 0.496323, 0.668797,
+ 0.825194, -0.279060, 0.477638, 0.702584, 0.842203, -0.272286, 0.456253, 0.736393,
+ 0.857749, -0.263854, 0.432412, 0.770960, 0.874799, -0.253943, 0.407806, 0.804890,
+ 0.887497, -0.242370, 0.380330, 0.837710, 0.899660, -0.230278, 0.352446, 0.870376,
+ 0.911753, -0.216460, 0.323268, 0.902256, 0.923011, -0.202071, 0.294314, 0.933306,
+ 0.932375, -0.185519, 0.264104, 0.965177, 0.940537, -0.167604, 0.234035, 0.996303,
+ 0.948904, -0.149068, 0.204120, 1.026100, 0.955263, -0.129539, 0.175431, 1.053040,
+ 0.960303, -0.109932, 0.148116, 1.076170, 0.965512, -0.088057, 0.119693, 1.097420,
+ 0.973466, -0.066055, 0.090162, 1.117210, 0.982840, -0.043923, 0.059987, 1.134360,
+ 0.992216, -0.021959, 0.029898, 1.150060, 0.999946, 0.000119, -0.000021, 1.164710,
+ 0.447827, -0.000010, 0.491543, 0.000009, 0.454778, -0.000251, 0.499172, 0.000229,
+ 0.453519, -0.001003, 0.497787, 0.000914, 0.453570, -0.002258, 0.497847, 0.002057,
+ 0.453578, -0.004014, 0.497855, 0.003657, 0.453570, -0.006271, 0.497841, 0.005715,
+ 0.453598, -0.009030, 0.497864, 0.008230, 0.453627, -0.012289, 0.497882, 0.011205,
+ 0.453684, -0.016047, 0.497923, 0.014641, 0.453764, -0.020304, 0.497980, 0.018539,
+ 0.453866, -0.025058, 0.498049, 0.022905, 0.453996, -0.030303, 0.498130, 0.027742,
+ 0.454196, -0.036038, 0.498267, 0.033059, 0.454457, -0.042252, 0.498445, 0.038861,
+ 0.454926, -0.048839, 0.498812, 0.045177, 0.455525, -0.055865, 0.499272, 0.052015,
+ 0.456074, -0.063377, 0.499625, 0.059375, 0.456752, -0.071361, 0.500049, 0.067275,
+ 0.457648, -0.079710, 0.500615, 0.075745, 0.458849, -0.088303, 0.501399, 0.084823,
+ 0.460290, -0.097409, 0.502293, 0.094514, 0.462000, -0.106729, 0.503301, 0.104848,
+ 0.464121, -0.116354, 0.504533, 0.115884, 0.466889, -0.126214, 0.506172, 0.127652,
+ 0.470744, -0.136324, 0.508667, 0.140240, 0.474880, -0.146595, 0.510995, 0.153673,
+ 0.480845, -0.157027, 0.514832, 0.168053, 0.488262, -0.167658, 0.519506, 0.183508,
+ 0.496547, -0.178343, 0.524347, 0.199948, 0.506254, -0.188916, 0.529830, 0.217503,
+ 0.517961, -0.199975, 0.536357, 0.236272, 0.531484, -0.210624, 0.543641, 0.256096,
+ 0.545496, -0.221227, 0.550048, 0.277085, 0.559497, -0.231568, 0.555076, 0.298615,
+ 0.575752, -0.241698, 0.560541, 0.321547, 0.591999, -0.251172, 0.564156, 0.345602,
+ 0.610654, -0.260178, 0.567607, 0.371851, 0.630484, -0.268094, 0.569230, 0.400760,
+ 0.651807, -0.274661, 0.569779, 0.430801, 0.672390, -0.280331, 0.566791, 0.461939,
+ 0.693024, -0.284501, 0.562007, 0.493854, 0.715473, -0.287852, 0.555791, 0.526992,
+ 0.736323, -0.289290, 0.546345, 0.560102, 0.755771, -0.289405, 0.534000, 0.593543,
+ 0.775424, -0.288100, 0.519114, 0.627256, 0.795447, -0.285562, 0.502543, 0.661464,
+ 0.815319, -0.281416, 0.484773, 0.695206, 0.831769, -0.275523, 0.463445, 0.729044,
+ 0.849464, -0.267516, 0.440269, 0.764069, 0.866775, -0.257584, 0.415049, 0.799089,
+ 0.881252, -0.245817, 0.388049, 0.831948, 0.894209, -0.233127, 0.358890, 0.865526,
+ 0.906922, -0.219579, 0.329915, 0.898180, 0.919686, -0.204491, 0.300441, 0.930013,
+ 0.929044, -0.188962, 0.269445, 0.962061, 0.938393, -0.171079, 0.238402, 0.994214,
+ 0.946610, -0.151990, 0.208204, 1.025330, 0.953095, -0.131953, 0.178653, 1.052900,
+ 0.958644, -0.111233, 0.150684, 1.077100, 0.963925, -0.090310, 0.122359, 1.098550,
+ 0.971995, -0.068050, 0.092334, 1.118740, 0.981658, -0.044851, 0.061420, 1.136350,
+ 0.991649, -0.022193, 0.030358, 1.152380, 0.999985, 0.000393, -0.000111, 1.167720,
+ 0.396806, -0.000010, 0.457671, 0.000008, 0.429186, -0.000249, 0.495017, 0.000216,
+ 0.429324, -0.000998, 0.495173, 0.000865, 0.429175, -0.002245, 0.494999, 0.001946,
+ 0.429129, -0.003990, 0.494952, 0.003460, 0.429153, -0.006235, 0.494974, 0.005407,
+ 0.429168, -0.008977, 0.494983, 0.007787, 0.429207, -0.012217, 0.495012, 0.010602,
+ 0.429257, -0.015954, 0.495047, 0.013853, 0.429338, -0.020186, 0.495106, 0.017544,
+ 0.429431, -0.024910, 0.495165, 0.021677, 0.429587, -0.030125, 0.495279, 0.026259,
+ 0.429796, -0.035825, 0.495432, 0.031297, 0.430065, -0.041997, 0.495621, 0.036798,
+ 0.430588, -0.048514, 0.496061, 0.042798, 0.431130, -0.055503, 0.496472, 0.049291,
+ 0.431743, -0.062985, 0.496904, 0.056291, 0.432448, -0.070926, 0.497369, 0.063806,
+ 0.433414, -0.079194, 0.498032, 0.071885, 0.434638, -0.087735, 0.498854, 0.080552,
+ 0.436110, -0.096806, 0.499812, 0.089805, 0.437859, -0.106002, 0.500891, 0.099714,
+ 0.440017, -0.115648, 0.502198, 0.110289, 0.443236, -0.125427, 0.504389, 0.121644,
+ 0.446970, -0.135492, 0.506809, 0.133769, 0.451689, -0.145746, 0.509858, 0.146787,
+ 0.458110, -0.156219, 0.514247, 0.160793, 0.465305, -0.166834, 0.518816, 0.175791,
+ 0.474085, -0.177546, 0.524331, 0.191906, 0.484808, -0.188262, 0.531040, 0.209199,
+ 0.497320, -0.199346, 0.538511, 0.227825, 0.509693, -0.209951, 0.544554, 0.247269,
+ 0.524367, -0.220533, 0.551616, 0.267978, 0.539228, -0.231082, 0.557368, 0.289672,
+ 0.556440, -0.241342, 0.563782, 0.312680, 0.574204, -0.250964, 0.568851, 0.336510,
+ 0.593388, -0.260306, 0.573120, 0.362219, 0.613358, -0.268667, 0.574916, 0.390322,
+ 0.634512, -0.275591, 0.575053, 0.420478, 0.655630, -0.281328, 0.572404, 0.451614,
+ 0.678265, -0.285948, 0.568893, 0.484112, 0.700110, -0.289408, 0.561878, 0.517348,
+ 0.723005, -0.291328, 0.553590, 0.551355, 0.743744, -0.291418, 0.541099, 0.585109,
+ 0.763949, -0.290252, 0.526489, 0.619487, 0.784186, -0.287648, 0.509496, 0.654040,
+ 0.804304, -0.283782, 0.491484, 0.688649, 0.823629, -0.278067, 0.470517, 0.723133,
+ 0.840940, -0.270588, 0.447050, 0.757163, 0.857852, -0.261188, 0.421252, 0.792816,
+ 0.874934, -0.249313, 0.394191, 0.827248, 0.888709, -0.236492, 0.365359, 0.861074,
+ 0.902589, -0.222185, 0.336016, 0.894417, 0.914201, -0.207314, 0.305270, 0.926825,
+ 0.925978, -0.191146, 0.274532, 0.959500, 0.935120, -0.174135, 0.243393, 0.991583,
+ 0.943656, -0.155231, 0.212414, 1.023560, 0.951719, -0.134403, 0.182005, 1.052390,
+ 0.957164, -0.113023, 0.153043, 1.077540, 0.962656, -0.091449, 0.124186, 1.099840,
+ 0.970695, -0.069418, 0.094165, 1.120000, 0.980749, -0.046620, 0.062967, 1.138490,
+ 0.991205, -0.022703, 0.031115, 1.154940, 0.999884, 0.000632, -0.000254, 1.170600,
+ 0.379821, -0.000010, 0.460637, 0.000008, 0.405188, -0.000247, 0.491396, 0.000204,
+ 0.404796, -0.000989, 0.490914, 0.000816, 0.404830, -0.002226, 0.490949, 0.001836,
+ 0.404730, -0.003957, 0.490840, 0.003263, 0.404731, -0.006183, 0.490836, 0.005099,
+ 0.404768, -0.008903, 0.490871, 0.007345, 0.404791, -0.012116, 0.490883, 0.010000,
+ 0.404857, -0.015821, 0.490938, 0.013068, 0.404943, -0.020018, 0.491004, 0.016550,
+ 0.405059, -0.024703, 0.491093, 0.020452, 0.405213, -0.029873, 0.491205, 0.024779,
+ 0.405399, -0.035523, 0.491333, 0.029537, 0.405731, -0.041635, 0.491604, 0.034741,
+ 0.406303, -0.048081, 0.492116, 0.040426, 0.406814, -0.055046, 0.492506, 0.046573,
+ 0.407404, -0.062465, 0.492926, 0.053206, 0.408149, -0.070296, 0.493442, 0.060344,
+ 0.409128, -0.078462, 0.494136, 0.068030, 0.410408, -0.087007, 0.495054, 0.076279,
+ 0.411813, -0.095964, 0.495962, 0.085105, 0.413735, -0.105075, 0.497257, 0.094588,
+ 0.416137, -0.114646, 0.498882, 0.104725, 0.419340, -0.124394, 0.501132, 0.115630,
+ 0.423326, -0.134328, 0.503883, 0.127325, 0.428419, -0.144580, 0.507470, 0.139911,
+ 0.434840, -0.154979, 0.511964, 0.153481, 0.442641, -0.165628, 0.517328, 0.168114,
+ 0.452511, -0.176365, 0.524258, 0.183995, 0.463473, -0.187298, 0.531248, 0.200953,
+ 0.475564, -0.198244, 0.538367, 0.219176, 0.488664, -0.208938, 0.545175, 0.238514,
+ 0.504073, -0.219599, 0.553227, 0.259129, 0.520832, -0.230378, 0.560653, 0.280997,
+ 0.538455, -0.240703, 0.567523, 0.303821, 0.557090, -0.250548, 0.573287, 0.327948,
+ 0.576646, -0.259964, 0.577795, 0.353362, 0.596705, -0.268721, 0.580077, 0.380336,
+ 0.618053, -0.276054, 0.580180, 0.410100, 0.640303, -0.282176, 0.578747, 0.441610,
+ 0.662365, -0.286931, 0.574294, 0.474106, 0.684542, -0.290521, 0.567035, 0.507549,
+ 0.707984, -0.292672, 0.558687, 0.541853, 0.730913, -0.293189, 0.547606, 0.576581,
+ 0.752948, -0.292199, 0.533471, 0.611720, 0.773452, -0.289508, 0.516395, 0.646339,
+ 0.794715, -0.285716, 0.497873, 0.682131, 0.814251, -0.280051, 0.476845, 0.716396,
+ 0.833057, -0.272873, 0.453449, 0.751503, 0.849590, -0.263982, 0.427857, 0.786085,
+ 0.867022, -0.252745, 0.400335, 0.821355, 0.882277, -0.239655, 0.371304, 0.856460,
+ 0.895375, -0.225386, 0.340397, 0.890828, 0.909347, -0.209587, 0.310005, 0.923532,
+ 0.921885, -0.193433, 0.279600, 0.956419, 0.932127, -0.176135, 0.247276, 0.989445,
+ 0.941869, -0.157872, 0.216186, 1.022210, 0.949735, -0.137577, 0.185602, 1.051950,
+ 0.956617, -0.115285, 0.155767, 1.078220, 0.961974, -0.092842, 0.126103, 1.101490,
+ 0.969720, -0.070059, 0.095676, 1.122070, 0.980120, -0.047467, 0.064327, 1.140800,
+ 0.990825, -0.023811, 0.032086, 1.157700, 0.999876, 0.000382, -0.000081, 1.174030,
+ 0.367636, -0.000010, 0.469176, 0.000008, 0.380377, -0.000245, 0.485434, 0.000192,
+ 0.380416, -0.000979, 0.485475, 0.000767, 0.380376, -0.002202, 0.485435, 0.001725,
+ 0.380419, -0.003914, 0.485487, 0.003067, 0.380438, -0.006115, 0.485505, 0.004793,
+ 0.380462, -0.008806, 0.485525, 0.006904, 0.380496, -0.011984, 0.485551, 0.009400,
+ 0.380560, -0.015649, 0.485605, 0.012285, 0.380640, -0.019799, 0.485666, 0.015560,
+ 0.380767, -0.024432, 0.485770, 0.019231, 0.380909, -0.029544, 0.485871, 0.023303,
+ 0.381142, -0.035132, 0.486060, 0.027786, 0.381472, -0.041154, 0.486336, 0.032694,
+ 0.382015, -0.047541, 0.486833, 0.038057, 0.382523, -0.054440, 0.487231, 0.043861,
+ 0.383129, -0.061784, 0.487683, 0.050133, 0.383952, -0.069509, 0.488313, 0.056900,
+ 0.384980, -0.077582, 0.489077, 0.064195, 0.386331, -0.086044, 0.490113, 0.072032,
+ 0.387788, -0.094841, 0.491099, 0.080438, 0.389808, -0.103899, 0.492566, 0.089490,
+ 0.392520, -0.113313, 0.494601, 0.099210, 0.395493, -0.123007, 0.496619, 0.109641,
+ 0.399826, -0.132859, 0.499912, 0.120919, 0.405341, -0.143077, 0.504061, 0.133107,
+ 0.411932, -0.153465, 0.508905, 0.146263, 0.420591, -0.164108, 0.515482, 0.160544,
+ 0.431010, -0.174893, 0.523191, 0.176123, 0.441881, -0.185839, 0.530260, 0.192757,
+ 0.453919, -0.196633, 0.537295, 0.210535, 0.468715, -0.207611, 0.546156, 0.229886,
+ 0.485182, -0.218517, 0.555173, 0.250543, 0.501926, -0.229249, 0.562728, 0.272210,
+ 0.517850, -0.239481, 0.567494, 0.294892, 0.536947, -0.249395, 0.573889, 0.318987,
+ 0.557115, -0.259000, 0.578831, 0.344348, 0.577966, -0.268075, 0.582055, 0.371223,
+ 0.599489, -0.276115, 0.583307, 0.399834, 0.624790, -0.282523, 0.583902, 0.431415,
+ 0.647504, -0.287663, 0.579530, 0.464301, 0.670601, -0.291538, 0.573103, 0.498123,
+ 0.693539, -0.293842, 0.563731, 0.532662, 0.717385, -0.294681, 0.553169, 0.567925,
+ 0.741533, -0.293717, 0.539908, 0.603502, 0.762142, -0.291156, 0.521902, 0.639074,
+ 0.783014, -0.287190, 0.502815, 0.674439, 0.805158, -0.281773, 0.482598, 0.710497,
+ 0.823646, -0.274682, 0.458949, 0.745600, 0.841879, -0.266184, 0.433129, 0.781085,
+ 0.859515, -0.255682, 0.406064, 0.816000, 0.875335, -0.242849, 0.376509, 0.851074,
+ 0.890147, -0.228329, 0.345502, 0.886473, 0.903144, -0.212491, 0.314280, 0.920751,
+ 0.916618, -0.195695, 0.282994, 0.954606, 0.927953, -0.178267, 0.251091, 0.988402,
+ 0.937414, -0.159549, 0.219107, 1.021410, 0.946823, -0.140022, 0.188960, 1.051670,
+ 0.954651, -0.118154, 0.158667, 1.078190, 0.959955, -0.094664, 0.128808, 1.102500,
+ 0.968580, -0.071179, 0.097379, 1.123910, 0.979380, -0.047505, 0.065097, 1.143220,
+ 0.990498, -0.024059, 0.032627, 1.160770, 0.999844, -0.000051, 0.000112, 1.177270,
+ 0.316912, -0.000009, 0.425996, 0.000007, 0.356423, -0.000241, 0.479108, 0.000180,
+ 0.356272, -0.000965, 0.478897, 0.000718, 0.356262, -0.002172, 0.478894, 0.001616,
+ 0.356265, -0.003861, 0.478895, 0.002873, 0.356278, -0.006032, 0.478905, 0.004489,
+ 0.356293, -0.008686, 0.478914, 0.006466, 0.356346, -0.011821, 0.478965, 0.008804,
+ 0.356395, -0.015435, 0.479001, 0.011507, 0.356484, -0.019529, 0.479075, 0.014576,
+ 0.356609, -0.024099, 0.479180, 0.018018, 0.356766, -0.029141, 0.479305, 0.021838,
+ 0.357009, -0.034650, 0.479512, 0.026045, 0.357424, -0.040546, 0.479909, 0.030666,
+ 0.357899, -0.046883, 0.480337, 0.035705, 0.358424, -0.053689, 0.480771, 0.041173,
+ 0.359041, -0.060942, 0.481242, 0.047084, 0.359903, -0.068524, 0.481943, 0.053483,
+ 0.360932, -0.076488, 0.482741, 0.060380, 0.362196, -0.084836, 0.483688, 0.067803,
+ 0.363847, -0.093500, 0.484947, 0.075809, 0.365972, -0.102471, 0.486588, 0.084417,
+ 0.368741, -0.111751, 0.488787, 0.093720, 0.372146, -0.121334, 0.491405, 0.103732,
+ 0.377114, -0.131147, 0.495604, 0.114608, 0.382260, -0.141213, 0.499436, 0.126345,
+ 0.389609, -0.151632, 0.505334, 0.139116, 0.397925, -0.162073, 0.511680, 0.152995,
+ 0.407824, -0.172819, 0.518876, 0.168071, 0.420014, -0.183929, 0.527639, 0.184495,
+ 0.434266, -0.195032, 0.537588, 0.202320, 0.447352, -0.205792, 0.544379, 0.221189,
+ 0.463726, -0.216704, 0.553422, 0.241616, 0.481406, -0.227531, 0.562074, 0.263298,
+ 0.498707, -0.238017, 0.568227, 0.286116, 0.518039, -0.247936, 0.574473, 0.310100,
+ 0.538277, -0.257437, 0.579191, 0.335401, 0.561166, -0.266829, 0.584807, 0.362246,
+ 0.583189, -0.275329, 0.586476, 0.390609, 0.606024, -0.282340, 0.585578, 0.420998,
+ 0.632419, -0.287924, 0.584496, 0.454357, 0.656128, -0.291972, 0.577766, 0.488233,
+ 0.679953, -0.294560, 0.568750, 0.523248, 0.704654, -0.295816, 0.558388, 0.559168,
+ 0.729016, -0.295157, 0.544826, 0.595326, 0.752062, -0.292779, 0.528273, 0.631864,
+ 0.773138, -0.288681, 0.508482, 0.667793, 0.794869, -0.283358, 0.487341, 0.704035,
+ 0.815101, -0.276080, 0.463540, 0.739925, 0.834212, -0.267670, 0.438672, 0.775539,
+ 0.852368, -0.257397, 0.411239, 0.810895, 0.870207, -0.245689, 0.382900, 0.846472,
+ 0.884063, -0.231452, 0.351496, 0.881788, 0.898284, -0.215561, 0.318950, 0.917438,
+ 0.912964, -0.198208, 0.287367, 0.952422, 0.924666, -0.180426, 0.254487, 0.987551,
+ 0.934429, -0.161525, 0.222226, 1.021420, 0.943485, -0.141197, 0.191143, 1.052180,
+ 0.952100, -0.120085, 0.161112, 1.079370, 0.957876, -0.097588, 0.130982, 1.104030,
+ 0.966943, -0.072684, 0.099055, 1.126160, 0.978313, -0.048370, 0.066282, 1.146190,
+ 0.990048, -0.023907, 0.032924, 1.164130, 0.999984, 0.000462, -0.000077, 1.180990,
+ 0.321287, -0.000009, 0.455413, 0.000007, 0.332595, -0.000238, 0.471437, 0.000168,
+ 0.332729, -0.000950, 0.471618, 0.000670, 0.332305, -0.002136, 0.471028, 0.001507,
+ 0.332326, -0.003798, 0.471055, 0.002680, 0.332344, -0.005934, 0.471072, 0.004188,
+ 0.332356, -0.008543, 0.471077, 0.006032, 0.332403, -0.011627, 0.471121, 0.008214,
+ 0.332461, -0.015182, 0.471170, 0.010736, 0.332552, -0.019209, 0.471251, 0.013601,
+ 0.332657, -0.023702, 0.471330, 0.016815, 0.332835, -0.028661, 0.471487, 0.020385,
+ 0.333083, -0.034077, 0.471708, 0.024321, 0.333547, -0.039856, 0.472190, 0.028652,
+ 0.333989, -0.046092, 0.472587, 0.033376, 0.334532, -0.052790, 0.473054, 0.038508,
+ 0.335167, -0.059928, 0.473568, 0.044064, 0.336080, -0.067351, 0.474362, 0.050096,
+ 0.337146, -0.075224, 0.475231, 0.056602, 0.338462, -0.083418, 0.476282, 0.063627,
+ 0.340140, -0.091938, 0.477615, 0.071215, 0.342341, -0.100741, 0.479404, 0.079417,
+ 0.345088, -0.109905, 0.481618, 0.088263, 0.349049, -0.119369, 0.485081, 0.097885,
+ 0.353939, -0.129033, 0.489317, 0.108336, 0.359893, -0.139038, 0.494309, 0.119698,
+ 0.366945, -0.149411, 0.499983, 0.132024, 0.375814, -0.159843, 0.507185, 0.145558,
+ 0.387112, -0.170664, 0.516392, 0.160433, 0.400230, -0.181897, 0.526519, 0.176648,
+ 0.412555, -0.192785, 0.534230, 0.193922, 0.427023, -0.203663, 0.542741, 0.212662,
+ 0.443685, -0.214695, 0.552066, 0.232944, 0.461499, -0.225561, 0.560762, 0.254495,
+ 0.480975, -0.236257, 0.569421, 0.277531, 0.501000, -0.246390, 0.576101, 0.301724,
+ 0.521691, -0.256101, 0.581493, 0.327112, 0.543478, -0.265289, 0.585221, 0.353917,
+ 0.566094, -0.273938, 0.587614, 0.381941, 0.589578, -0.281679, 0.587991, 0.411720,
+ 0.614583, -0.287655, 0.585928, 0.444148, 0.641813, -0.292228, 0.582092, 0.478617,
+ 0.666189, -0.295172, 0.573980, 0.513970, 0.690475, -0.296480, 0.561676, 0.550118,
+ 0.715543, -0.296203, 0.548758, 0.586933, 0.740405, -0.293999, 0.532792, 0.623840,
+ 0.762183, -0.289980, 0.512735, 0.660723, 0.786069, -0.284780, 0.492402, 0.698070,
+ 0.806812, -0.277568, 0.469058, 0.734422, 0.826987, -0.268951, 0.443017, 0.770946,
+ 0.844588, -0.259049, 0.415501, 0.806990, 0.863725, -0.247100, 0.387328, 0.842107,
+ 0.879137, -0.234157, 0.356108, 0.878078, 0.894634, -0.218719, 0.324315, 0.914058,
+ 0.909162, -0.201293, 0.291813, 0.949922, 0.920720, -0.182670, 0.258474, 0.985337,
+ 0.931580, -0.163212, 0.225593, 1.020500, 0.941238, -0.142771, 0.193986, 1.052730,
+ 0.949293, -0.120956, 0.163392, 1.080750, 0.956226, -0.098574, 0.132934, 1.105590,
+ 0.965460, -0.075118, 0.101255, 1.128230, 0.977403, -0.049792, 0.067544, 1.149000,
+ 0.989648, -0.024157, 0.033468, 1.167650, 1.000010, 0.000576, -0.000185, 1.185190,
+ 0.303474, -0.000009, 0.454200, 0.000006, 0.308894, -0.000233, 0.462306, 0.000156,
+ 0.309426, -0.000932, 0.463093, 0.000622, 0.308643, -0.002095, 0.461933, 0.001400,
+ 0.308651, -0.003724, 0.461941, 0.002489, 0.308662, -0.005819, 0.461950, 0.003889,
+ 0.308687, -0.008378, 0.461974, 0.005602, 0.308728, -0.011402, 0.462011, 0.007629,
+ 0.308789, -0.014888, 0.462067, 0.009973, 0.308882, -0.018837, 0.462151, 0.012637,
+ 0.309007, -0.023244, 0.462263, 0.015627, 0.309180, -0.028105, 0.462417, 0.018950,
+ 0.309442, -0.033406, 0.462667, 0.022617, 0.309901, -0.039059, 0.463162, 0.026661,
+ 0.310331, -0.045204, 0.463555, 0.031071, 0.310858, -0.051774, 0.464019, 0.035870,
+ 0.311576, -0.058736, 0.464669, 0.041085, 0.312436, -0.066038, 0.465406, 0.046745,
+ 0.313526, -0.073727, 0.466339, 0.052872, 0.314903, -0.081757, 0.467504, 0.059504,
+ 0.316814, -0.090167, 0.469226, 0.066689, 0.318965, -0.098755, 0.470981, 0.074466,
+ 0.322077, -0.107792, 0.473814, 0.082912, 0.325947, -0.117098, 0.477241, 0.092085,
+ 0.331008, -0.126602, 0.481840, 0.102137, 0.337893, -0.136619, 0.488334, 0.113135,
+ 0.345106, -0.146838, 0.494415, 0.125110, 0.355111, -0.157357, 0.503275, 0.138356,
+ 0.365095, -0.167955, 0.510966, 0.152686, 0.378344, -0.179157, 0.521508, 0.168560,
+ 0.391599, -0.190143, 0.530455, 0.185610, 0.407786, -0.201230, 0.541275, 0.204308,
+ 0.425294, -0.212456, 0.551784, 0.224623, 0.444021, -0.223568, 0.561493, 0.246172,
+ 0.463418, -0.234154, 0.569886, 0.268979, 0.484077, -0.244546, 0.577116, 0.293411,
+ 0.505513, -0.254301, 0.582914, 0.318936, 0.527672, -0.263564, 0.587208, 0.345856,
+ 0.550565, -0.272332, 0.589277, 0.374054, 0.573656, -0.280011, 0.588426, 0.403276,
+ 0.598270, -0.286924, 0.587504, 0.434740, 0.624731, -0.291994, 0.583401, 0.468767,
+ 0.652396, -0.295159, 0.576997, 0.504411, 0.677320, -0.296954, 0.565863, 0.541140,
+ 0.703147, -0.296877, 0.552316, 0.578160, 0.728715, -0.295147, 0.536773, 0.616124,
+ 0.752448, -0.291275, 0.517710, 0.653885, 0.775169, -0.285905, 0.496087, 0.691537,
+ 0.799307, -0.279064, 0.474232, 0.729251, 0.819482, -0.270294, 0.447676, 0.766267,
+ 0.837659, -0.260032, 0.419656, 0.802616, 0.856903, -0.248497, 0.391328, 0.838583,
+ 0.873325, -0.235252, 0.360285, 0.874711, 0.889788, -0.221126, 0.329215, 0.910770,
+ 0.904486, -0.204304, 0.296392, 0.946530, 0.917711, -0.185562, 0.262159, 0.983828,
+ 0.928969, -0.165635, 0.229142, 1.019550, 0.939707, -0.144420, 0.196730, 1.053170,
+ 0.948167, -0.122147, 0.165095, 1.082300, 0.955222, -0.099098, 0.134510, 1.107910,
+ 0.964401, -0.075533, 0.102476, 1.131200, 0.976605, -0.051382, 0.068967, 1.152180,
+ 0.989085, -0.025850, 0.034506, 1.171290, 0.999908, 0.000618, -0.000271, 1.189610,
+ 0.285803, -0.000009, 0.452348, 0.000006, 0.284689, -0.000227, 0.450581, 0.000144,
+ 0.285263, -0.000910, 0.451482, 0.000575, 0.285302, -0.002048, 0.451553, 0.001294,
+ 0.285318, -0.003641, 0.451574, 0.002301, 0.285330, -0.005688, 0.451585, 0.003595,
+ 0.285361, -0.008190, 0.451618, 0.005179, 0.285397, -0.011146, 0.451650, 0.007054,
+ 0.285447, -0.014554, 0.451688, 0.009222, 0.285527, -0.018413, 0.451758, 0.011687,
+ 0.285688, -0.022721, 0.451929, 0.014455, 0.285840, -0.027471, 0.452055, 0.017534,
+ 0.286136, -0.032628, 0.452369, 0.020941, 0.286574, -0.038179, 0.452853, 0.024696,
+ 0.287012, -0.044188, 0.453272, 0.028800, 0.287542, -0.050610, 0.453752, 0.033268,
+ 0.288299, -0.057363, 0.454488, 0.038150, 0.289186, -0.064546, 0.455294, 0.043445,
+ 0.290302, -0.072040, 0.456301, 0.049197, 0.291776, -0.079905, 0.457648, 0.055445,
+ 0.293720, -0.088117, 0.459483, 0.062231, 0.296052, -0.096533, 0.461571, 0.069599,
+ 0.299563, -0.105409, 0.465085, 0.077658, 0.303350, -0.114553, 0.468506, 0.086418,
+ 0.309167, -0.123917, 0.474423, 0.096108, 0.315290, -0.133810, 0.479950, 0.106643,
+ 0.324163, -0.144021, 0.488592, 0.118322, 0.333272, -0.154382, 0.496461, 0.131133,
+ 0.344224, -0.165015, 0.505620, 0.145208, 0.357733, -0.176168, 0.516719, 0.160730,
+ 0.373046, -0.187468, 0.528513, 0.177807, 0.387880, -0.198488, 0.537713, 0.196072,
+ 0.405133, -0.209545, 0.547999, 0.216050, 0.423845, -0.220724, 0.557590, 0.237484,
+ 0.443777, -0.231518, 0.566246, 0.260390, 0.464824, -0.242035, 0.574326, 0.284835,
+ 0.486635, -0.251898, 0.580370, 0.310518, 0.510120, -0.261304, 0.585680, 0.337678,
+ 0.535301, -0.270384, 0.590197, 0.366242, 0.559193, -0.278410, 0.590569, 0.395873,
+ 0.583544, -0.285325, 0.588161, 0.426857, 0.608834, -0.291113, 0.584249, 0.459477,
+ 0.635753, -0.294882, 0.577630, 0.494734, 0.664367, -0.297088, 0.569479, 0.532023,
+ 0.689688, -0.297364, 0.555064, 0.569629, 0.715732, -0.295949, 0.539522, 0.608124,
+ 0.741307, -0.292259, 0.521613, 0.646231, 0.764949, -0.287063, 0.499690, 0.684938,
+ 0.788599, -0.280120, 0.476747, 0.723548, 0.810480, -0.271530, 0.451160, 0.761135,
+ 0.831372, -0.261289, 0.424101, 0.798916, 0.850092, -0.249559, 0.394430, 0.835952,
+ 0.867777, -0.236348, 0.363849, 0.871606, 0.884632, -0.221569, 0.332477, 0.907843,
+ 0.900470, -0.206180, 0.300667, 0.944187, 0.914524, -0.188771, 0.266552, 0.981371,
+ 0.926892, -0.168362, 0.232349, 1.018410, 0.937951, -0.146761, 0.199359, 1.053080,
+ 0.947236, -0.123813, 0.167500, 1.083900, 0.954367, -0.099984, 0.136166, 1.110470,
+ 0.963907, -0.075928, 0.103808, 1.134140, 0.976218, -0.051137, 0.069706, 1.155750,
+ 0.988772, -0.026742, 0.035253, 1.175310, 0.999888, -0.000521, 0.000290, 1.193890,
+ 0.263546, -0.000009, 0.441896, 0.000005, 0.262352, -0.000222, 0.439889, 0.000132,
+ 0.262325, -0.000887, 0.439848, 0.000529, 0.262280, -0.001995, 0.439765, 0.001190,
+ 0.262372, -0.003547, 0.439922, 0.002116, 0.262390, -0.005541, 0.439941, 0.003307,
+ 0.262412, -0.007979, 0.439961, 0.004763, 0.262453, -0.010858, 0.440002, 0.006488,
+ 0.262528, -0.014179, 0.440085, 0.008483, 0.262615, -0.017938, 0.440166, 0.010753,
+ 0.262744, -0.022135, 0.440291, 0.013304, 0.262939, -0.026762, 0.440493, 0.016144,
+ 0.263277, -0.031757, 0.440889, 0.019297, 0.263680, -0.037183, 0.441338, 0.022770,
+ 0.264106, -0.043037, 0.441753, 0.026570, 0.264624, -0.049304, 0.442227, 0.030718,
+ 0.265378, -0.055867, 0.442985, 0.035262, 0.266253, -0.062872, 0.443795, 0.040197,
+ 0.267478, -0.070157, 0.445008, 0.045590, 0.269062, -0.077845, 0.446599, 0.051454,
+ 0.270926, -0.085794, 0.448349, 0.057838, 0.273693, -0.094077, 0.451221, 0.064836,
+ 0.276746, -0.102704, 0.454097, 0.072439, 0.281693, -0.111735, 0.459517, 0.080874,
+ 0.287335, -0.121004, 0.465310, 0.090155, 0.294480, -0.130734, 0.472605, 0.100371,
+ 0.302570, -0.140777, 0.480251, 0.111644, 0.312465, -0.151110, 0.489444, 0.124111,
+ 0.324856, -0.161890, 0.500919, 0.137979, 0.337740, -0.172946, 0.511317, 0.153163,
+ 0.352550, -0.184152, 0.522684, 0.169817, 0.367786, -0.195220, 0.532480, 0.187886,
+ 0.385474, -0.206320, 0.543326, 0.207634, 0.404976, -0.217744, 0.554109, 0.229165,
+ 0.425203, -0.228691, 0.563395, 0.252068, 0.446704, -0.239299, 0.571565, 0.276471,
+ 0.468951, -0.249348, 0.577935, 0.302323, 0.493487, -0.258933, 0.584309, 0.329882,
+ 0.517861, -0.268009, 0.587730, 0.358525, 0.543309, -0.276238, 0.589612, 0.388585,
+ 0.569704, -0.283560, 0.589294, 0.419787, 0.594871, -0.289497, 0.585137, 0.452114,
+ 0.622555, -0.294452, 0.580356, 0.486466, 0.651167, -0.296918, 0.571850, 0.523079,
+ 0.677332, -0.297647, 0.558428, 0.561100, 0.703718, -0.296321, 0.542232, 0.599592,
+ 0.730262, -0.293339, 0.524541, 0.639138, 0.754304, -0.288036, 0.502691, 0.677978,
+ 0.778051, -0.281018, 0.479212, 0.716537, 0.801557, -0.272414, 0.454071, 0.755860,
+ 0.822559, -0.262419, 0.425952, 0.794477, 0.843051, -0.250702, 0.397313, 0.832664,
+ 0.862320, -0.237264, 0.366534, 0.869876, 0.879044, -0.222716, 0.334816, 0.906973,
+ 0.896362, -0.206827, 0.303143, 0.943558, 0.910342, -0.189659, 0.269699, 0.979759,
+ 0.924119, -0.171108, 0.236411, 1.017180, 0.935374, -0.149579, 0.202224, 1.052890,
+ 0.944295, -0.126295, 0.169890, 1.084960, 0.952227, -0.101511, 0.138089, 1.112560,
+ 0.962041, -0.076639, 0.105053, 1.137500, 0.975280, -0.051197, 0.070329, 1.159830,
+ 0.988476, -0.025463, 0.035127, 1.179870, 0.999962, 0.000029, 0.000015, 1.199010,
+ 0.227089, -0.000008, 0.404216, 0.000005, 0.239725, -0.000215, 0.426708, 0.000121,
+ 0.239904, -0.000861, 0.427028, 0.000484, 0.239911, -0.001937, 0.427039, 0.001088,
+ 0.239914, -0.003443, 0.427040, 0.001935, 0.239933, -0.005379, 0.427064, 0.003024,
+ 0.239944, -0.007745, 0.427065, 0.004356, 0.239993, -0.010540, 0.427122, 0.005934,
+ 0.240052, -0.013763, 0.427179, 0.007760, 0.240148, -0.017411, 0.427279, 0.009839,
+ 0.240278, -0.021484, 0.427410, 0.012176, 0.240472, -0.025973, 0.427618, 0.014783,
+ 0.240839, -0.030813, 0.428086, 0.017684, 0.241201, -0.036089, 0.428482, 0.020878,
+ 0.241626, -0.041772, 0.428907, 0.024382, 0.242207, -0.047834, 0.429520, 0.028223,
+ 0.242980, -0.054220, 0.430332, 0.032433, 0.243881, -0.061002, 0.431222, 0.037025,
+ 0.245123, -0.068087, 0.432512, 0.042054, 0.246670, -0.075548, 0.434088, 0.047541,
+ 0.248779, -0.083287, 0.436323, 0.053554, 0.251665, -0.091355, 0.439509, 0.060172,
+ 0.255305, -0.099849, 0.443478, 0.067428, 0.260049, -0.108576, 0.448713, 0.075467,
+ 0.266192, -0.117754, 0.455524, 0.084339, 0.273158, -0.127294, 0.462700, 0.094168,
+ 0.282131, -0.137311, 0.472068, 0.105150, 0.293332, -0.147736, 0.483565, 0.117402,
+ 0.304667, -0.158357, 0.493702, 0.130824, 0.317785, -0.169274, 0.504708, 0.145724,
+ 0.333245, -0.180595, 0.517107, 0.162150, 0.349843, -0.191892, 0.528849, 0.180149,
+ 0.367944, -0.203168, 0.540301, 0.199746, 0.387579, -0.214443, 0.551514, 0.221047,
+ 0.408247, -0.225624, 0.560906, 0.243981, 0.430140, -0.236422, 0.569590, 0.268513,
+ 0.452669, -0.246540, 0.576098, 0.294409, 0.476196, -0.256157, 0.580925, 0.322002,
+ 0.501157, -0.265289, 0.584839, 0.351052, 0.527632, -0.273671, 0.587614, 0.381200,
+ 0.555754, -0.281254, 0.589119, 0.412994, 0.581682, -0.287448, 0.585204, 0.445498,
+ 0.608196, -0.292614, 0.579006, 0.479505, 0.635661, -0.296068, 0.571297, 0.514643,
+ 0.664999, -0.297395, 0.560855, 0.552213, 0.691039, -0.296645, 0.544525, 0.591365,
+ 0.717900, -0.293785, 0.526535, 0.630883, 0.744059, -0.289089, 0.505450, 0.670932,
+ 0.768630, -0.282239, 0.482514, 0.710904, 0.793273, -0.273688, 0.457246, 0.750259,
+ 0.814731, -0.263280, 0.428872, 0.789480, 0.835603, -0.251526, 0.399384, 0.828597,
+ 0.854890, -0.238339, 0.368811, 0.866892, 0.872828, -0.223607, 0.336617, 0.905630,
+ 0.889462, -0.207538, 0.303997, 0.943538, 0.904929, -0.190297, 0.270812, 0.980591,
+ 0.919101, -0.172034, 0.237453, 1.019350, 0.930536, -0.152058, 0.204431, 1.054980,
+ 0.941223, -0.129515, 0.172495, 1.087170, 0.949820, -0.104263, 0.140175, 1.115510,
+ 0.960592, -0.078194, 0.106465, 1.140980, 0.974629, -0.051688, 0.071159, 1.164180,
+ 0.988110, -0.025393, 0.035443, 1.184650, 1.000040, 0.000804, -0.000331, 1.204620,
+ 0.214668, -0.000008, 0.406619, 0.000004, 0.218053, -0.000208, 0.413025, 0.000110,
+ 0.217987, -0.000832, 0.412901, 0.000439, 0.217971, -0.001872, 0.412876, 0.000989,
+ 0.217968, -0.003329, 0.412860, 0.001758, 0.217985, -0.005201, 0.412882, 0.002747,
+ 0.218014, -0.007488, 0.412916, 0.003958, 0.218054, -0.010190, 0.412957, 0.005393,
+ 0.218106, -0.013306, 0.413005, 0.007053, 0.218217, -0.016834, 0.413139, 0.008946,
+ 0.218338, -0.020771, 0.413258, 0.011075, 0.218550, -0.025100, 0.413509, 0.013455,
+ 0.218913, -0.029786, 0.413992, 0.016108, 0.219265, -0.034896, 0.414383, 0.019031,
+ 0.219696, -0.040391, 0.414839, 0.022246, 0.220329, -0.046200, 0.415567, 0.025792,
+ 0.220989, -0.052421, 0.416210, 0.029664, 0.222027, -0.058948, 0.417385, 0.033932,
+ 0.223301, -0.065821, 0.418779, 0.038606, 0.224988, -0.073035, 0.420665, 0.043735,
+ 0.227211, -0.080527, 0.423198, 0.049384, 0.230131, -0.088395, 0.426566, 0.055614,
+ 0.233908, -0.096621, 0.430910, 0.062483, 0.239092, -0.105223, 0.437148, 0.070164,
+ 0.245315, -0.114240, 0.444302, 0.078695, 0.253166, -0.123680, 0.453262, 0.088238,
+ 0.262374, -0.133569, 0.463211, 0.098868, 0.273145, -0.143836, 0.474271, 0.110727,
+ 0.285512, -0.154577, 0.486300, 0.123945, 0.299512, -0.165501, 0.498817, 0.138581,
+ 0.314287, -0.176698, 0.510341, 0.154676, 0.331083, -0.188066, 0.522583, 0.172459,
+ 0.349615, -0.199597, 0.534879, 0.191979, 0.369318, -0.210843, 0.546083, 0.213090,
+ 0.390377, -0.222068, 0.556200, 0.235998, 0.412411, -0.233059, 0.564704, 0.260518,
+ 0.435715, -0.243570, 0.572314, 0.286795, 0.461196, -0.253356, 0.579395, 0.314559,
+ 0.485587, -0.262362, 0.581985, 0.343581, 0.511908, -0.270895, 0.584347, 0.374367,
+ 0.539798, -0.278452, 0.585050, 0.406015, 0.567974, -0.284877, 0.583344, 0.439168,
+ 0.594303, -0.290124, 0.577348, 0.473005, 0.622951, -0.294183, 0.570751, 0.508534,
+ 0.652404, -0.296389, 0.561541, 0.544764, 0.679291, -0.296605, 0.546426, 0.582927,
+ 0.706437, -0.294095, 0.528599, 0.622681, 0.734485, -0.289780, 0.508676, 0.663567,
+ 0.758841, -0.283363, 0.484768, 0.704092, 0.785370, -0.275015, 0.460434, 0.745101,
+ 0.807315, -0.264689, 0.432166, 0.784712, 0.827100, -0.252597, 0.401807, 0.824241,
+ 0.849191, -0.239154, 0.371458, 0.863803, 0.867046, -0.224451, 0.338873, 0.903063,
+ 0.885200, -0.208342, 0.306175, 0.942763, 0.901771, -0.190684, 0.272759, 0.981559,
+ 0.915958, -0.172105, 0.239306, 1.020480, 0.928046, -0.152214, 0.206071, 1.057650,
+ 0.939961, -0.130247, 0.173670, 1.089990, 0.948711, -0.106720, 0.142201, 1.118290,
+ 0.959305, -0.080869, 0.108454, 1.144670, 0.973009, -0.053914, 0.072811, 1.168390,
+ 0.987631, -0.026295, 0.036062, 1.190040, 0.999978, 0.001328, -0.000559, 1.210580,
+ 0.193925, -0.000008, 0.391974, 0.000004, 0.196746, -0.000200, 0.397675, 0.000099,
+ 0.196670, -0.000801, 0.397521, 0.000396, 0.196633, -0.001802, 0.397445, 0.000892,
+ 0.196654, -0.003204, 0.397482, 0.001586, 0.196659, -0.005006, 0.397480, 0.002479,
+ 0.196683, -0.007209, 0.397506, 0.003572, 0.196728, -0.009810, 0.397562, 0.004867,
+ 0.196792, -0.012810, 0.397633, 0.006367, 0.196890, -0.016206, 0.397746, 0.008078,
+ 0.197017, -0.019994, 0.397884, 0.010005, 0.197290, -0.024139, 0.398270, 0.012169,
+ 0.197583, -0.028667, 0.398639, 0.014575, 0.197927, -0.033586, 0.399034, 0.017236,
+ 0.198383, -0.038881, 0.399554, 0.020172, 0.199002, -0.044474, 0.400289, 0.023419,
+ 0.199739, -0.050458, 0.401111, 0.026984, 0.200784, -0.056729, 0.402349, 0.030922,
+ 0.202075, -0.063364, 0.403841, 0.035250, 0.203898, -0.070325, 0.406076, 0.040031,
+ 0.206199, -0.077557, 0.408841, 0.045328, 0.209252, -0.085184, 0.412590, 0.051179,
+ 0.213638, -0.093199, 0.418288, 0.057746, 0.218810, -0.101617, 0.424681, 0.065051,
+ 0.225642, -0.110520, 0.433429, 0.073276, 0.233717, -0.119772, 0.442897, 0.082468,
+ 0.242823, -0.129505, 0.452888, 0.092748, 0.254772, -0.139906, 0.466407, 0.104417,
+ 0.266603, -0.150402, 0.477413, 0.117211, 0.280730, -0.161395, 0.490519, 0.131598,
+ 0.295399, -0.172465, 0.502010, 0.147407, 0.312705, -0.183982, 0.515311, 0.165031,
+ 0.331335, -0.195532, 0.527860, 0.184336, 0.351037, -0.206971, 0.539200, 0.205361,
+ 0.372175, -0.218117, 0.549410, 0.228043, 0.394548, -0.229327, 0.558642, 0.252670,
+ 0.419598, -0.240052, 0.567861, 0.279071, 0.443922, -0.249937, 0.573332, 0.306882,
+ 0.471495, -0.259407, 0.580130, 0.336610, 0.496769, -0.267749, 0.580564, 0.367328,
+ 0.524951, -0.275524, 0.581696, 0.399753, 0.553180, -0.282148, 0.579885, 0.433134,
+ 0.581577, -0.287533, 0.575471, 0.467534, 0.609231, -0.291612, 0.567445, 0.502943,
+ 0.637478, -0.293911, 0.557657, 0.538710, 0.667795, -0.295096, 0.546535, 0.576568,
+ 0.694272, -0.294073, 0.529561, 0.614929, 0.722937, -0.290386, 0.510561, 0.655909,
+ 0.749682, -0.284481, 0.487846, 0.697663, 0.774754, -0.276188, 0.462487, 0.738515,
+ 0.799301, -0.266215, 0.434810, 0.779802, 0.820762, -0.254116, 0.404879, 0.820045,
+ 0.843231, -0.240393, 0.374559, 0.860294, 0.861857, -0.225503, 0.341582, 0.900965,
+ 0.880815, -0.209382, 0.308778, 0.941727, 0.897660, -0.191550, 0.275232, 0.980916,
+ 0.912926, -0.172346, 0.240938, 1.021620, 0.926391, -0.151799, 0.207223, 1.059700,
+ 0.938429, -0.129968, 0.174840, 1.092910, 0.947834, -0.106510, 0.142984, 1.122480,
+ 0.958432, -0.082410, 0.109902, 1.149000, 0.972402, -0.056524, 0.074445, 1.173300,
+ 0.987191, -0.028427, 0.037379, 1.195380, 0.999975, 0.000039, -0.000042, 1.216760,
+ 0.178114, -0.000008, 0.385418, 0.000004, 0.176074, -0.000192, 0.381002, 0.000089,
+ 0.176010, -0.000768, 0.380861, 0.000355, 0.175980, -0.001727, 0.380798, 0.000798,
+ 0.175994, -0.003070, 0.380824, 0.001419, 0.176017, -0.004797, 0.380858, 0.002219,
+ 0.176019, -0.006906, 0.380839, 0.003197, 0.176072, -0.009399, 0.380913, 0.004357,
+ 0.176131, -0.012273, 0.380979, 0.005702, 0.176239, -0.015526, 0.381120, 0.007237,
+ 0.176371, -0.019155, 0.381272, 0.008969, 0.176638, -0.023117, 0.381669, 0.010919,
+ 0.176912, -0.027463, 0.382015, 0.013090, 0.177279, -0.032173, 0.382476, 0.015495,
+ 0.177740, -0.037222, 0.383041, 0.018167, 0.178344, -0.042613, 0.383780, 0.021121,
+ 0.179153, -0.048331, 0.384773, 0.024390, 0.180197, -0.054345, 0.386076, 0.028006,
+ 0.181581, -0.060712, 0.387809, 0.032004, 0.183440, -0.067386, 0.390205, 0.036453,
+ 0.186139, -0.074399, 0.393944, 0.041416, 0.189432, -0.081773, 0.398320, 0.046939,
+ 0.193795, -0.089546, 0.404188, 0.053144, 0.199641, -0.097826, 0.412100, 0.060137,
+ 0.206679, -0.106499, 0.421425, 0.068008, 0.214865, -0.115654, 0.431504, 0.076919,
+ 0.224406, -0.125268, 0.442526, 0.086884, 0.235876, -0.135475, 0.455465, 0.098187,
+ 0.248335, -0.146023, 0.468100, 0.110759, 0.262868, -0.157016, 0.482069, 0.124885,
+ 0.278962, -0.168245, 0.496182, 0.140645, 0.295082, -0.179580, 0.507401, 0.157838,
+ 0.313738, -0.191227, 0.520252, 0.176950, 0.333573, -0.202718, 0.531708, 0.197817,
+ 0.356433, -0.214424, 0.544509, 0.220785, 0.378853, -0.225492, 0.553730, 0.245306,
+ 0.402717, -0.236236, 0.561348, 0.271593, 0.428375, -0.246568, 0.568538, 0.299776,
+ 0.454724, -0.255941, 0.573462, 0.329433, 0.482291, -0.264511, 0.576356, 0.360598,
+ 0.509706, -0.272129, 0.576446, 0.393204, 0.538805, -0.278979, 0.575298, 0.427227,
+ 0.568919, -0.284528, 0.572154, 0.462157, 0.596804, -0.288801, 0.564691, 0.497997,
+ 0.625987, -0.291334, 0.555134, 0.534467, 0.656414, -0.292722, 0.545051, 0.571736,
+ 0.683916, -0.292185, 0.528813, 0.610158, 0.711809, -0.290043, 0.511060, 0.649061,
+ 0.739547, -0.285246, 0.490103, 0.690081, 0.766914, -0.277647, 0.465523, 0.732554,
+ 0.791375, -0.267603, 0.437718, 0.773982, 0.814772, -0.256109, 0.408820, 0.816090,
+ 0.836691, -0.242281, 0.377823, 0.856849, 0.856984, -0.227155, 0.344960, 0.898363,
+ 0.876332, -0.210395, 0.311335, 0.939471, 0.894988, -0.192612, 0.277703, 0.980799,
+ 0.911113, -0.173236, 0.243019, 1.022150, 0.924092, -0.152258, 0.209037, 1.061390,
+ 0.936828, -0.129575, 0.175909, 1.096350, 0.946869, -0.105940, 0.143852, 1.127070,
+ 0.958284, -0.081318, 0.110289, 1.154190, 0.972325, -0.055613, 0.074723, 1.179090,
+ 0.986878, -0.029790, 0.038315, 1.201630, 0.999936, -0.001972, 0.000912, 1.223380,
+ 0.151174, -0.000007, 0.351531, 0.000003, 0.155594, -0.000183, 0.361806, 0.000079,
+ 0.156099, -0.000732, 0.362982, 0.000315, 0.156053, -0.001646, 0.362869, 0.000708,
+ 0.156093, -0.002926, 0.362961, 0.001259, 0.156099, -0.004572, 0.362959, 0.001968,
+ 0.156120, -0.006582, 0.362982, 0.002836, 0.156168, -0.008958, 0.363048, 0.003866,
+ 0.156221, -0.011696, 0.363101, 0.005061, 0.156324, -0.014797, 0.363241, 0.006427,
+ 0.156476, -0.018250, 0.363448, 0.007972, 0.156731, -0.022027, 0.363840, 0.009715,
+ 0.156994, -0.026176, 0.364179, 0.011657, 0.157341, -0.030670, 0.364620, 0.013821,
+ 0.157867, -0.035459, 0.365364, 0.016236, 0.158460, -0.040614, 0.366111, 0.018909,
+ 0.159308, -0.046052, 0.367248, 0.021885, 0.160426, -0.051810, 0.368767, 0.025200,
+ 0.161877, -0.057891, 0.370745, 0.028882, 0.163995, -0.064281, 0.373831, 0.033014,
+ 0.166550, -0.071007, 0.377366, 0.037628, 0.170237, -0.078152, 0.382799, 0.042849,
+ 0.175096, -0.085717, 0.389915, 0.048732, 0.181069, -0.093802, 0.398487, 0.055421,
+ 0.188487, -0.102363, 0.408799, 0.063019, 0.197029, -0.111343, 0.419991, 0.071634,
+ 0.206684, -0.120812, 0.431455, 0.081280, 0.218698, -0.131033, 0.445746, 0.092365,
+ 0.230726, -0.141373, 0.457471, 0.104545, 0.245516, -0.152387, 0.472388, 0.118449,
+ 0.261551, -0.163628, 0.486671, 0.133923, 0.277437, -0.174814, 0.497620, 0.150849,
+ 0.296662, -0.186713, 0.511620, 0.169924, 0.317950, -0.198513, 0.525435, 0.190848,
+ 0.339422, -0.210119, 0.536267, 0.213504, 0.362143, -0.221354, 0.545982, 0.237947,
+ 0.387198, -0.232240, 0.555364, 0.264427, 0.412349, -0.242570, 0.561489, 0.292519,
+ 0.439274, -0.252284, 0.566903, 0.322561, 0.466779, -0.261023, 0.569614, 0.353952,
+ 0.496011, -0.268990, 0.571589, 0.387278, 0.524964, -0.275498, 0.570325, 0.421356,
+ 0.556518, -0.281449, 0.568792, 0.457314, 0.584363, -0.285526, 0.560268, 0.493199,
+ 0.614214, -0.288440, 0.552050, 0.530276, 0.645684, -0.289777, 0.541906, 0.568550,
+ 0.673446, -0.289722, 0.526464, 0.606927, 0.701924, -0.287792, 0.509872, 0.645945,
+ 0.730370, -0.284315, 0.490649, 0.685564, 0.757405, -0.278804, 0.467964, 0.726511,
+ 0.784025, -0.269543, 0.441468, 0.768601, 0.808255, -0.258117, 0.412160, 0.811321,
+ 0.830739, -0.244728, 0.380606, 0.853496, 0.851914, -0.229428, 0.348111, 0.895374,
+ 0.872586, -0.212508, 0.314732, 0.937674, 0.891581, -0.194025, 0.280338, 0.979869,
+ 0.907641, -0.174711, 0.245203, 1.022530, 0.922233, -0.153509, 0.210770, 1.063710,
+ 0.935878, -0.130418, 0.177399, 1.099720, 0.946338, -0.105558, 0.144507, 1.131240,
+ 0.957265, -0.080059, 0.110508, 1.159730, 0.971668, -0.053977, 0.074231, 1.185150,
+ 0.986600, -0.027710, 0.037522, 1.208580, 1.000210, -0.000516, 0.000135, 1.231350,
+ 0.137468, -0.000007, 0.345041, 0.000003, 0.137030, -0.000173, 0.343936, 0.000069,
+ 0.136986, -0.000693, 0.343830, 0.000276, 0.136964, -0.001559, 0.343761, 0.000621,
+ 0.137003, -0.002772, 0.343863, 0.001105, 0.137012, -0.004331, 0.343868, 0.001727,
+ 0.137043, -0.006236, 0.343916, 0.002490, 0.137090, -0.008487, 0.343986, 0.003396,
+ 0.137145, -0.011081, 0.344045, 0.004447, 0.137242, -0.014019, 0.344177, 0.005650,
+ 0.137431, -0.017271, 0.344491, 0.007019, 0.137644, -0.020861, 0.344805, 0.008560,
+ 0.137910, -0.024792, 0.345172, 0.010286, 0.138295, -0.029046, 0.345734, 0.012219,
+ 0.138764, -0.033596, 0.346371, 0.014377, 0.139415, -0.038467, 0.347298, 0.016789,
+ 0.140272, -0.043618, 0.348527, 0.019489, 0.141457, -0.049102, 0.350276, 0.022504,
+ 0.143030, -0.054876, 0.352646, 0.025896, 0.145289, -0.061010, 0.356206, 0.029717,
+ 0.148502, -0.067478, 0.361488, 0.034056, 0.152188, -0.074345, 0.367103, 0.038953,
+ 0.157359, -0.081744, 0.375247, 0.044554, 0.163790, -0.089633, 0.385064, 0.050953,
+ 0.171376, -0.098005, 0.396082, 0.058261, 0.179901, -0.106817, 0.407418, 0.066540,
+ 0.189892, -0.116239, 0.420031, 0.075994, 0.201838, -0.126270, 0.434321, 0.086724,
+ 0.214311, -0.136701, 0.447631, 0.098752, 0.228902, -0.147616, 0.462046, 0.112353,
+ 0.245107, -0.158871, 0.476942, 0.127605, 0.262292, -0.170261, 0.490285, 0.144469,
+ 0.281215, -0.182017, 0.503783, 0.163282, 0.301058, -0.193729, 0.515505, 0.183873,
+ 0.322752, -0.205512, 0.526820, 0.206466, 0.347547, -0.217214, 0.539473, 0.231194,
+ 0.370969, -0.227966, 0.546625, 0.257288, 0.397533, -0.238555, 0.554720, 0.285789,
+ 0.423980, -0.248278, 0.559468, 0.315746, 0.452928, -0.257422, 0.564095, 0.347724,
+ 0.482121, -0.265306, 0.565426, 0.380922, 0.510438, -0.272043, 0.563205, 0.415639,
+ 0.541188, -0.277614, 0.561087, 0.451702, 0.571667, -0.281927, 0.554922, 0.488450,
+ 0.602432, -0.285015, 0.546838, 0.526442, 0.634126, -0.286512, 0.537415, 0.564896,
+ 0.662816, -0.286388, 0.522906, 0.604037, 0.692411, -0.284734, 0.507003, 0.643795,
+ 0.720946, -0.281297, 0.488398, 0.682980, 0.748293, -0.276262, 0.466353, 0.723466,
+ 0.776931, -0.269978, 0.443573, 0.764565, 0.801065, -0.260305, 0.415279, 0.805838,
+ 0.825843, -0.247426, 0.384773, 0.849985, 0.848070, -0.232437, 0.352555, 0.893174,
+ 0.869122, -0.215806, 0.318642, 0.936564, 0.888963, -0.197307, 0.283810, 0.980253,
+ 0.905547, -0.177203, 0.247888, 1.024630, 0.918554, -0.155542, 0.212904, 1.067140,
+ 0.931395, -0.131948, 0.178700, 1.104510, 0.941749, -0.106723, 0.145902, 1.136940,
+ 0.954551, -0.080494, 0.111193, 1.166600, 0.970279, -0.053424, 0.074470, 1.192490,
+ 0.986117, -0.025745, 0.036879, 1.216650, 0.999938, 0.001906, -0.001029, 1.239810,
+ 0.118493, -0.000006, 0.322720, 0.000002, 0.118765, -0.000163, 0.323456, 0.000060,
+ 0.118772, -0.000652, 0.323477, 0.000239, 0.118843, -0.001467, 0.323657, 0.000539,
+ 0.118804, -0.002608, 0.323553, 0.000958, 0.118826, -0.004076, 0.323595, 0.001498,
+ 0.118846, -0.005868, 0.323617, 0.002160, 0.118886, -0.007986, 0.323670, 0.002947,
+ 0.118947, -0.010427, 0.323753, 0.003861, 0.119055, -0.013191, 0.323922, 0.004910,
+ 0.119241, -0.016244, 0.324251, 0.006108, 0.119440, -0.019634, 0.324544, 0.007458,
+ 0.119739, -0.023338, 0.325026, 0.008978, 0.120110, -0.027318, 0.325586, 0.010689,
+ 0.120571, -0.031614, 0.326231, 0.012607, 0.121240, -0.036194, 0.327264, 0.014765,
+ 0.122162, -0.041051, 0.328733, 0.017200, 0.123378, -0.046223, 0.330659, 0.019938,
+ 0.125183, -0.051711, 0.333754, 0.023050, 0.127832, -0.057565, 0.338507, 0.026597,
+ 0.130909, -0.063744, 0.343666, 0.030634, 0.135221, -0.070430, 0.351063, 0.035273,
+ 0.140820, -0.077636, 0.360604, 0.040614, 0.146781, -0.085229, 0.369638, 0.046679,
+ 0.155121, -0.093535, 0.382700, 0.053763, 0.163980, -0.102234, 0.395220, 0.061798,
+ 0.173926, -0.111465, 0.407930, 0.070970, 0.185137, -0.121296, 0.421050, 0.081343,
+ 0.198260, -0.131690, 0.435735, 0.093160, 0.212938, -0.142614, 0.450932, 0.106547,
+ 0.229046, -0.153884, 0.465726, 0.121575, 0.246246, -0.165382, 0.479461, 0.138286,
+ 0.264637, -0.176806, 0.492106, 0.156660, 0.284959, -0.188793, 0.504774, 0.177280,
+ 0.308157, -0.200763, 0.518805, 0.199880, 0.330951, -0.212390, 0.528231, 0.224293,
+ 0.354900, -0.223521, 0.536376, 0.250541, 0.381502, -0.234169, 0.544846, 0.278902,
+ 0.409529, -0.244077, 0.551717, 0.309227, 0.437523, -0.253363, 0.555170, 0.341426,
+ 0.467624, -0.261659, 0.557772, 0.375180, 0.497268, -0.268498, 0.556442, 0.410070,
+ 0.528294, -0.274018, 0.553915, 0.446445, 0.559053, -0.278169, 0.549153, 0.483779,
+ 0.589329, -0.281229, 0.539878, 0.522249, 0.622503, -0.282902, 0.531620, 0.561754,
+ 0.652382, -0.282815, 0.518119, 0.601544, 0.681847, -0.281247, 0.502187, 0.641574,
+ 0.712285, -0.277986, 0.484824, 0.682633, 0.740094, -0.273017, 0.463483, 0.723426,
+ 0.768478, -0.266692, 0.441299, 0.763747, 0.794556, -0.258358, 0.415238, 0.805565,
+ 0.819408, -0.248807, 0.386912, 0.847254, 0.843411, -0.236214, 0.356165, 0.891091,
+ 0.862397, -0.219794, 0.320562, 0.936174, 0.883113, -0.201768, 0.285322, 0.982562,
+ 0.900230, -0.181672, 0.249713, 1.028620, 0.915192, -0.159279, 0.214546, 1.071630,
+ 0.928458, -0.134725, 0.180285, 1.109950, 0.940690, -0.109130, 0.147119, 1.143540,
+ 0.953409, -0.082131, 0.112492, 1.173720, 0.969537, -0.054268, 0.075201, 1.200430,
+ 0.985612, -0.025910, 0.037036, 1.225280, 0.999835, 0.002982, -0.001518, 1.249590,
+ 0.100970, -0.000006, 0.300277, 0.000002, 0.101577, -0.000152, 0.302077, 0.000051,
+ 0.101572, -0.000609, 0.302066, 0.000205, 0.101566, -0.001370, 0.302047, 0.000461,
+ 0.101592, -0.002436, 0.302114, 0.000819, 0.101608, -0.003805, 0.302140, 0.001282,
+ 0.101627, -0.005479, 0.302160, 0.001848, 0.101669, -0.007456, 0.302224, 0.002522,
+ 0.101732, -0.009736, 0.302318, 0.003307, 0.101844, -0.012310, 0.302513, 0.004211,
+ 0.102025, -0.015168, 0.302850, 0.005245, 0.102224, -0.018333, 0.303166, 0.006415,
+ 0.102515, -0.021782, 0.303654, 0.007741, 0.102886, -0.025507, 0.304243, 0.009240,
+ 0.103395, -0.029514, 0.305089, 0.010934, 0.104109, -0.033791, 0.306301, 0.012856,
+ 0.105074, -0.038357, 0.307980, 0.015034, 0.106540, -0.043213, 0.310726, 0.017523,
+ 0.108478, -0.048424, 0.314351, 0.020365, 0.111015, -0.053934, 0.319032, 0.023633,
+ 0.114682, -0.059888, 0.326050, 0.027419, 0.119110, -0.066337, 0.334109, 0.031790,
+ 0.124736, -0.073301, 0.344013, 0.036850, 0.131479, -0.080774, 0.355358, 0.042710,
+ 0.139283, -0.088820, 0.367614, 0.049479, 0.148054, -0.097339, 0.380072, 0.057237,
+ 0.159037, -0.106650, 0.395678, 0.066270, 0.169794, -0.116221, 0.407950, 0.076319,
+ 0.183140, -0.126632, 0.423546, 0.087956, 0.197515, -0.137383, 0.438213, 0.101042,
+ 0.213514, -0.148641, 0.453248, 0.115827, 0.230650, -0.160117, 0.466880, 0.132283,
+ 0.249148, -0.171807, 0.479962, 0.150644, 0.270219, -0.183695, 0.494618, 0.171073,
+ 0.292338, -0.195574, 0.506937, 0.193378, 0.314999, -0.207205, 0.516463, 0.217585,
+ 0.340991, -0.218955, 0.528123, 0.244280, 0.367982, -0.229917, 0.537025, 0.272784,
+ 0.394320, -0.239737, 0.541627, 0.302742, 0.423364, -0.249048, 0.546466, 0.335112,
+ 0.453751, -0.257329, 0.549466, 0.369032, 0.484160, -0.264623, 0.549503, 0.404577,
+ 0.515262, -0.270411, 0.547008, 0.441337, 0.547036, -0.274581, 0.542249, 0.479162,
+ 0.576614, -0.277266, 0.533015, 0.517904, 0.611143, -0.279144, 0.525512, 0.558508,
+ 0.640989, -0.279001, 0.511540, 0.598995, 0.671182, -0.277324, 0.495641, 0.639935,
+ 0.700848, -0.273908, 0.477526, 0.681017, 0.729862, -0.269063, 0.457955, 0.722764,
+ 0.758273, -0.262282, 0.434846, 0.764349, 0.784121, -0.254281, 0.409203, 0.806206,
+ 0.809798, -0.245050, 0.382694, 0.848617, 0.834953, -0.233861, 0.354034, 0.892445,
+ 0.856817, -0.221308, 0.321764, 0.936263, 0.877609, -0.205996, 0.288118, 0.982401,
+ 0.897489, -0.186702, 0.253277, 1.029750, 0.913792, -0.164618, 0.217963, 1.074880,
+ 0.927850, -0.140023, 0.183221, 1.114870, 0.940378, -0.113280, 0.149385, 1.149470,
+ 0.952730, -0.085396, 0.114152, 1.180700, 0.969059, -0.056870, 0.076984, 1.209120,
+ 0.985574, -0.027650, 0.038119, 1.234980, 0.999943, 0.002391, -0.001269, 1.259870,
+ 0.085272, -0.000006, 0.279021, 0.000002, 0.085414, -0.000141, 0.279483, 0.000043,
+ 0.085419, -0.000563, 0.279500, 0.000172, 0.085419, -0.001268, 0.279493, 0.000387,
+ 0.085423, -0.002253, 0.279501, 0.000689, 0.085444, -0.003521, 0.279549, 0.001078,
+ 0.085470, -0.005070, 0.279591, 0.001555, 0.085509, -0.006899, 0.279652, 0.002124,
+ 0.085572, -0.009008, 0.279752, 0.002787, 0.085699, -0.011380, 0.280011, 0.003555,
+ 0.085855, -0.014031, 0.280297, 0.004434, 0.086068, -0.016963, 0.280682, 0.005436,
+ 0.086344, -0.020144, 0.281159, 0.006579, 0.086743, -0.023600, 0.281886, 0.007880,
+ 0.087239, -0.027307, 0.282745, 0.009361, 0.087982, -0.031269, 0.284139, 0.011056,
+ 0.089126, -0.035531, 0.286470, 0.013007, 0.090691, -0.040095, 0.289708, 0.015249,
+ 0.092762, -0.044964, 0.293904, 0.017845, 0.095838, -0.050243, 0.300471, 0.020892,
+ 0.099583, -0.055951, 0.308060, 0.024425, 0.104526, -0.062215, 0.317874, 0.028572,
+ 0.110532, -0.069005, 0.329332, 0.033423, 0.117385, -0.076307, 0.341217, 0.039047,
+ 0.125220, -0.084184, 0.353968, 0.045579, 0.134037, -0.092525, 0.366797, 0.053077,
+ 0.144014, -0.101487, 0.380209, 0.061742, 0.156013, -0.111273, 0.395956, 0.071777,
+ 0.168872, -0.121431, 0.410530, 0.083090, 0.183089, -0.132105, 0.425073, 0.095934,
+ 0.198763, -0.143286, 0.439833, 0.110448, 0.216159, -0.154841, 0.454507, 0.126769,
+ 0.234859, -0.166588, 0.468368, 0.144950, 0.255879, -0.178626, 0.482846, 0.165233,
+ 0.276770, -0.190218, 0.493489, 0.187217, 0.301184, -0.202227, 0.506549, 0.211659,
+ 0.325852, -0.213764, 0.515800, 0.237922, 0.352824, -0.224870, 0.525442, 0.266320,
+ 0.380882, -0.235246, 0.532487, 0.296691, 0.410137, -0.244847, 0.537703, 0.329179,
+ 0.439787, -0.253122, 0.540361, 0.363135, 0.472291, -0.260517, 0.542734, 0.399222,
+ 0.501856, -0.266519, 0.538826, 0.436352, 0.534816, -0.270905, 0.535152, 0.474505,
+ 0.565069, -0.273826, 0.525979, 0.513988, 0.597154, -0.275333, 0.516394, 0.554852,
+ 0.630473, -0.275314, 0.506206, 0.596592, 0.660574, -0.273323, 0.489769, 0.638117,
+ 0.692015, -0.270008, 0.472578, 0.680457, 0.720647, -0.265001, 0.452134, 0.723008,
+ 0.750528, -0.258311, 0.430344, 0.765954, 0.777568, -0.250046, 0.405624, 0.809012,
+ 0.803870, -0.240114, 0.378339, 0.852425, 0.828439, -0.228737, 0.349877, 0.895346,
+ 0.851472, -0.216632, 0.318968, 0.940695, 0.873906, -0.202782, 0.287489, 0.987235,
+ 0.894670, -0.187059, 0.254394, 1.033480, 0.912281, -0.168818, 0.221294, 1.078120,
+ 0.927358, -0.146494, 0.186750, 1.119280, 0.940385, -0.120009, 0.152322, 1.156090,
+ 0.952672, -0.091718, 0.117514, 1.188750, 0.968496, -0.062032, 0.079741, 1.218210,
+ 0.985236, -0.031495, 0.040238, 1.245230, 0.999980, -0.000575, 0.000111, 1.271330,
+ 0.070243, -0.000005, 0.255273, 0.000001, 0.070298, -0.000129, 0.255469, 0.000035,
+ 0.070369, -0.000516, 0.255727, 0.000142, 0.070380, -0.001160, 0.255754, 0.000319,
+ 0.070396, -0.002062, 0.255813, 0.000568, 0.070410, -0.003222, 0.255839, 0.000889,
+ 0.070430, -0.004639, 0.255863, 0.001283, 0.070476, -0.006314, 0.255953, 0.001753,
+ 0.070543, -0.008243, 0.256079, 0.002303, 0.070669, -0.010412, 0.256360, 0.002944,
+ 0.070819, -0.012844, 0.256647, 0.003680, 0.071036, -0.015518, 0.257084, 0.004526,
+ 0.071322, -0.018437, 0.257637, 0.005497, 0.071718, -0.021600, 0.258416, 0.006612,
+ 0.072321, -0.024997, 0.259699, 0.007901, 0.073145, -0.028657, 0.261475, 0.009388,
+ 0.074335, -0.032589, 0.264132, 0.011119, 0.076068, -0.036843, 0.268150, 0.013145,
+ 0.078454, -0.041429, 0.273636, 0.015525, 0.081862, -0.046463, 0.281653, 0.018353,
+ 0.085738, -0.051948, 0.289992, 0.021664, 0.090813, -0.057984, 0.300660, 0.025596,
+ 0.096751, -0.064512, 0.312204, 0.030195, 0.103717, -0.071651, 0.325001, 0.035602,
+ 0.111596, -0.079323, 0.338129, 0.041896, 0.120933, -0.087645, 0.352853, 0.049245,
+ 0.130787, -0.096492, 0.366192, 0.057675, 0.142311, -0.105973, 0.380864, 0.067397,
+ 0.155344, -0.116182, 0.396575, 0.078590, 0.169535, -0.126815, 0.411443, 0.091238,
+ 0.185173, -0.138015, 0.426256, 0.105607, 0.201755, -0.149325, 0.439607, 0.121551,
+ 0.221334, -0.161207, 0.455467, 0.139608, 0.241461, -0.173162, 0.469096, 0.159591,
+ 0.262940, -0.185040, 0.481014, 0.181560, 0.286776, -0.196881, 0.493291, 0.205781,
+ 0.311596, -0.208311, 0.503556, 0.231819, 0.338667, -0.219671, 0.513268, 0.260274,
+ 0.366021, -0.230451, 0.519414, 0.290862, 0.395875, -0.240131, 0.526766, 0.323196,
+ 0.425564, -0.248566, 0.529050, 0.357071, 0.457094, -0.256195, 0.530796, 0.393262,
+ 0.488286, -0.262331, 0.528703, 0.430797, 0.522291, -0.267141, 0.527270, 0.470231,
+ 0.554172, -0.270411, 0.519848, 0.510477, 0.586427, -0.271986, 0.510307, 0.551594,
+ 0.619638, -0.271920, 0.499158, 0.593849, 0.650656, -0.269817, 0.483852, 0.636314,
+ 0.682840, -0.266267, 0.467515, 0.679679, 0.714356, -0.261130, 0.449310, 0.723884,
+ 0.742717, -0.254067, 0.425789, 0.767245, 0.770894, -0.245652, 0.401144, 0.811819,
+ 0.797358, -0.235554, 0.374224, 0.856315, 0.823377, -0.223896, 0.346167, 0.901077,
+ 0.847456, -0.210865, 0.316056, 0.946502, 0.870697, -0.196574, 0.284503, 0.993711,
+ 0.891068, -0.180814, 0.251628, 1.041340, 0.909267, -0.163314, 0.219065, 1.086090,
+ 0.925653, -0.143304, 0.186446, 1.127020, 0.940017, -0.121322, 0.153416, 1.163710,
+ 0.952398, -0.097387, 0.120334, 1.197120, 0.967568, -0.069878, 0.083520, 1.227910,
+ 0.984772, -0.039003, 0.043921, 1.256720, 1.000260, -0.007009, 0.003157, 1.284280,
+ 0.055665, -0.000005, 0.227325, 0.000001, 0.056524, -0.000116, 0.230826, 0.000028,
+ 0.056572, -0.000466, 0.231026, 0.000114, 0.056586, -0.001048, 0.231079, 0.000257,
+ 0.056576, -0.001863, 0.231025, 0.000457, 0.056591, -0.002910, 0.231058, 0.000715,
+ 0.056611, -0.004190, 0.231085, 0.001032, 0.056653, -0.005702, 0.231169, 0.001412,
+ 0.056747, -0.007437, 0.231417, 0.001860, 0.056857, -0.009403, 0.231661, 0.002383,
+ 0.056986, -0.011599, 0.231895, 0.002987, 0.057222, -0.014010, 0.232456, 0.003690,
+ 0.057519, -0.016651, 0.233096, 0.004503, 0.057953, -0.019510, 0.234094, 0.005449,
+ 0.058592, -0.022599, 0.235629, 0.006556, 0.059565, -0.025942, 0.238106, 0.007857,
+ 0.060911, -0.029566, 0.241557, 0.009391, 0.062875, -0.033513, 0.246652, 0.011220,
+ 0.065691, -0.037860, 0.254091, 0.013417, 0.069135, -0.042654, 0.262666, 0.016037,
+ 0.073217, -0.047897, 0.272029, 0.019151, 0.078286, -0.053672, 0.283007, 0.022860,
+ 0.084397, -0.060068, 0.295732, 0.027283, 0.091360, -0.067009, 0.308779, 0.032484,
+ 0.099441, -0.074552, 0.322886, 0.038589, 0.108189, -0.082712, 0.336408, 0.045713,
+ 0.118574, -0.091493, 0.351692, 0.053983, 0.129989, -0.100854, 0.366502, 0.063516,
+ 0.142722, -0.110837, 0.381675, 0.074439, 0.156654, -0.121353, 0.396300, 0.086848,
+ 0.172151, -0.132414, 0.411477, 0.100963, 0.188712, -0.143809, 0.425080, 0.116795,
+ 0.208093, -0.155765, 0.441328, 0.134715, 0.227936, -0.167608, 0.454328, 0.154396,
+ 0.249495, -0.179579, 0.467235, 0.176179, 0.273620, -0.191488, 0.480248, 0.200193,
+ 0.296371, -0.202618, 0.487886, 0.225775, 0.324234, -0.214133, 0.499632, 0.254410,
+ 0.353049, -0.225212, 0.509532, 0.285077, 0.381785, -0.234875, 0.514265, 0.317047,
+ 0.414038, -0.244205, 0.521282, 0.351874, 0.445251, -0.252145, 0.522931, 0.388279,
+ 0.476819, -0.258433, 0.520947, 0.425825, 0.509209, -0.263411, 0.517669, 0.465104,
+ 0.542759, -0.266732, 0.512841, 0.505741, 0.574822, -0.268263, 0.503317, 0.547611,
+ 0.609324, -0.268489, 0.493035, 0.590953, 0.641772, -0.266941, 0.478816, 0.634880,
+ 0.674049, -0.263297, 0.462863, 0.679072, 0.705071, -0.257618, 0.442931, 0.723487,
+ 0.734709, -0.250625, 0.421299, 0.768708, 0.763704, -0.241790, 0.397085, 0.814375,
+ 0.791818, -0.231115, 0.370577, 0.859907, 0.817439, -0.219220, 0.342320, 0.906715,
+ 0.843202, -0.205658, 0.312627, 0.953943, 0.866639, -0.190563, 0.280933, 1.001850,
+ 0.888129, -0.173978, 0.248393, 1.051050, 0.907239, -0.155485, 0.216007, 1.097040,
+ 0.923893, -0.134782, 0.183233, 1.138570, 0.938882, -0.112490, 0.150376, 1.175390,
+ 0.952464, -0.089071, 0.117177, 1.209240, 0.968529, -0.064652, 0.081310, 1.240550,
+ 0.984763, -0.038606, 0.043938, 1.270180, 1.000530, -0.012380, 0.005987, 1.298730,
+ 0.043793, -0.000004, 0.204012, 0.000001, 0.044017, -0.000103, 0.205049, 0.000022,
+ 0.044053, -0.000414, 0.205225, 0.000089, 0.044049, -0.000931, 0.205200, 0.000200,
+ 0.043988, -0.001654, 0.204901, 0.000355, 0.044072, -0.002585, 0.205255, 0.000557,
+ 0.044097, -0.003722, 0.205311, 0.000805, 0.044136, -0.005065, 0.205391, 0.001103,
+ 0.044223, -0.006604, 0.205638, 0.001458, 0.044325, -0.008352, 0.205877, 0.001873,
+ 0.044483, -0.010299, 0.206270, 0.002359, 0.044700, -0.012445, 0.206796, 0.002930,
+ 0.045017, -0.014793, 0.207593, 0.003600, 0.045482, -0.017336, 0.208819, 0.004392,
+ 0.046245, -0.020116, 0.211036, 0.005339, 0.047369, -0.023157, 0.214388, 0.006470,
+ 0.049019, -0.026494, 0.219357, 0.007839, 0.051278, -0.030184, 0.226061, 0.009502,
+ 0.054128, -0.034266, 0.234094, 0.011516, 0.057899, -0.038854, 0.244297, 0.013969,
+ 0.062083, -0.043874, 0.254457, 0.016901, 0.067350, -0.049510, 0.266706, 0.020455,
+ 0.073176, -0.055626, 0.278753, 0.024661, 0.080394, -0.062459, 0.293090, 0.029713,
+ 0.087929, -0.069756, 0.305856, 0.035587, 0.097067, -0.077880, 0.321059, 0.042577,
+ 0.106508, -0.086354, 0.333873, 0.050560, 0.117760, -0.095593, 0.349008, 0.059897,
+ 0.130081, -0.105438, 0.363776, 0.070631, 0.144454, -0.115899, 0.380112, 0.082882,
+ 0.159600, -0.126827, 0.394843, 0.096761, 0.176097, -0.138161, 0.409033, 0.112381,
+ 0.194726, -0.149904, 0.424257, 0.129952, 0.213944, -0.161675, 0.436945, 0.149333,
+ 0.235516, -0.173659, 0.450176, 0.170892, 0.260564, -0.185963, 0.466305, 0.194984,
+ 0.285183, -0.197582, 0.477328, 0.220805, 0.311095, -0.208697, 0.486566, 0.248694,
+ 0.338924, -0.219519, 0.494811, 0.279015, 0.369757, -0.229766, 0.504065, 0.311725,
+ 0.399600, -0.238879, 0.507909, 0.345844, 0.430484, -0.246802, 0.509805, 0.381749,
+ 0.464130, -0.253924, 0.511436, 0.420251, 0.497077, -0.259319, 0.508787, 0.459957,
+ 0.530434, -0.263297, 0.503940, 0.501356, 0.565725, -0.265619, 0.498040, 0.544252,
+ 0.599254, -0.265842, 0.487346, 0.587856, 0.631251, -0.263978, 0.472975, 0.631969,
+ 0.663972, -0.260430, 0.457135, 0.677471, 0.697724, -0.255358, 0.439844, 0.723744,
+ 0.727725, -0.248308, 0.417872, 0.770653, 0.756417, -0.239181, 0.392730, 0.817357,
+ 0.785419, -0.228140, 0.367839, 0.864221, 0.812660, -0.215681, 0.339449, 0.912701,
+ 0.839391, -0.201623, 0.309279, 0.962419, 0.863660, -0.185624, 0.278029, 1.012200,
+ 0.885028, -0.167970, 0.245294, 1.061860, 0.904639, -0.148336, 0.212689, 1.109340,
+ 0.922048, -0.126370, 0.179616, 1.150630, 0.936952, -0.102928, 0.146749, 1.188850,
+ 0.951895, -0.078527, 0.112733, 1.223520, 0.967198, -0.053015, 0.076006, 1.256810,
+ 0.984405, -0.026490, 0.038318, 1.287620, 1.000210, 0.000700, -0.000200, 1.316560,
+ 0.032596, -0.000004, 0.176706, 0.000001, 0.032933, -0.000090, 0.178527, 0.000017,
+ 0.032918, -0.000360, 0.178453, 0.000066, 0.032909, -0.000809, 0.178383, 0.000149,
+ 0.032918, -0.001438, 0.178394, 0.000266, 0.032942, -0.002247, 0.178517, 0.000417,
+ 0.032951, -0.003236, 0.178490, 0.000603, 0.033011, -0.004399, 0.178695, 0.000829,
+ 0.033073, -0.005741, 0.178843, 0.001099, 0.033186, -0.007259, 0.179176, 0.001419,
+ 0.033344, -0.008953, 0.179618, 0.001800, 0.033567, -0.010822, 0.180238, 0.002253,
+ 0.033939, -0.012869, 0.181417, 0.002798, 0.034524, -0.015114, 0.183395, 0.003456,
+ 0.035446, -0.017596, 0.186616, 0.004259, 0.036831, -0.020352, 0.191547, 0.005249,
+ 0.038611, -0.023411, 0.197508, 0.006470, 0.041030, -0.026851, 0.205395, 0.007981,
+ 0.044224, -0.030748, 0.215365, 0.009856, 0.047866, -0.035086, 0.225595, 0.012142,
+ 0.052242, -0.039951, 0.236946, 0.014939, 0.057451, -0.045357, 0.249442, 0.018319,
+ 0.063121, -0.051286, 0.261222, 0.022364, 0.070112, -0.057927, 0.275418, 0.027242,
+ 0.077733, -0.065065, 0.288989, 0.032946, 0.086271, -0.072881, 0.302546, 0.039682,
+ 0.096103, -0.081363, 0.317164, 0.047570, 0.106976, -0.090446, 0.331733, 0.056701,
+ 0.119175, -0.100105, 0.346610, 0.067202, 0.132919, -0.110375, 0.362249, 0.079259,
+ 0.147727, -0.121115, 0.376978, 0.092867, 0.163618, -0.132299, 0.390681, 0.108228,
+ 0.182234, -0.143887, 0.406571, 0.125502, 0.201809, -0.155827, 0.420420, 0.144836,
+ 0.225041, -0.168357, 0.438411, 0.166706, 0.247621, -0.180040, 0.450368, 0.189909,
+ 0.270970, -0.191536, 0.460083, 0.215251, 0.296658, -0.203024, 0.469765, 0.243164,
+ 0.325892, -0.214056, 0.481837, 0.273388, 0.354060, -0.224104, 0.487474, 0.305344,
+ 0.384372, -0.233489, 0.492773, 0.339741, 0.417490, -0.241874, 0.498451, 0.376287,
+ 0.450130, -0.248834, 0.499632, 0.414195, 0.481285, -0.254658, 0.495233, 0.454077,
+ 0.519183, -0.259367, 0.496401, 0.496352, 0.551544, -0.261818, 0.487686, 0.538798,
+ 0.587349, -0.262964, 0.479453, 0.583626, 0.621679, -0.262128, 0.467709, 0.629451,
+ 0.654991, -0.258998, 0.452123, 0.675660, 0.686873, -0.254119, 0.433495, 0.723248,
+ 0.719801, -0.246946, 0.413657, 0.771156, 0.750355, -0.237709, 0.390366, 0.819890,
+ 0.780033, -0.226549, 0.364947, 0.868601, 0.809254, -0.214186, 0.337256, 0.920034,
+ 0.836576, -0.199639, 0.307395, 0.971706, 0.861774, -0.183169, 0.275431, 1.024790,
+ 0.885707, -0.165111, 0.243431, 1.078370, 0.904742, -0.144363, 0.210921, 1.127830,
+ 0.915604, -0.121305, 0.176470, 1.172540, 0.930959, -0.096212, 0.143106, 1.210120,
+ 0.948404, -0.069969, 0.108112, 1.244740, 0.967012, -0.042759, 0.070848, 1.277180,
+ 0.984183, -0.014704, 0.032335, 1.308300, 0.999577, 0.014216, -0.007269, 1.338200,
+ 0.022923, -0.000003, 0.148623, 0.000000, 0.023219, -0.000076, 0.150540, 0.000012,
+ 0.023231, -0.000304, 0.150630, 0.000047, 0.023235, -0.000683, 0.150624, 0.000105,
+ 0.023209, -0.001214, 0.150445, 0.000188, 0.023252, -0.001898, 0.150679, 0.000295,
+ 0.023283, -0.002732, 0.150789, 0.000428, 0.023337, -0.003713, 0.150995, 0.000591,
+ 0.023401, -0.004848, 0.151180, 0.000788, 0.023514, -0.006129, 0.151562, 0.001025,
+ 0.023679, -0.007561, 0.152116, 0.001314, 0.023956, -0.009147, 0.153162, 0.001666,
+ 0.024433, -0.010904, 0.155133, 0.002102, 0.025139, -0.012861, 0.158035, 0.002644,
+ 0.026260, -0.015063, 0.162751, 0.003329, 0.027787, -0.017553, 0.168944, 0.004198,
+ 0.029847, -0.020398, 0.176835, 0.005300, 0.032544, -0.023655, 0.186686, 0.006698,
+ 0.035558, -0.027298, 0.196248, 0.008427, 0.039284, -0.031446, 0.207352, 0.010585,
+ 0.043681, -0.036116, 0.219279, 0.013246, 0.048527, -0.041293, 0.230728, 0.016474,
+ 0.054157, -0.047034, 0.242994, 0.020372, 0.060948, -0.053500, 0.257042, 0.025095,
+ 0.068523, -0.060541, 0.271020, 0.030686, 0.076804, -0.068055, 0.284060, 0.037193,
+ 0.086484, -0.076501, 0.299186, 0.044979, 0.096941, -0.085267, 0.313200, 0.053832,
+ 0.108478, -0.094733, 0.327138, 0.064115, 0.121705, -0.104810, 0.342345, 0.075918,
+ 0.136743, -0.115474, 0.358472, 0.089412, 0.152986, -0.126536, 0.374067, 0.104562,
+ 0.170397, -0.138061, 0.388267, 0.121632, 0.191392, -0.150203, 0.406467, 0.140996,
+ 0.211566, -0.161751, 0.418641, 0.161696, 0.233567, -0.173407, 0.430418, 0.184557,
+ 0.257769, -0.185397, 0.442770, 0.210092, 0.285310, -0.197048, 0.457191, 0.237827,
+ 0.311726, -0.207840, 0.464712, 0.267253, 0.340537, -0.218345, 0.472539, 0.299332,
+ 0.372921, -0.228306, 0.482331, 0.333988, 0.402924, -0.236665, 0.484378, 0.369722,
+ 0.434475, -0.244097, 0.484717, 0.407836, 0.469736, -0.250547, 0.487093, 0.448465,
+ 0.505045, -0.255110, 0.485575, 0.490263, 0.540262, -0.258444, 0.481225, 0.534495,
+ 0.576347, -0.259903, 0.473481, 0.579451, 0.608656, -0.259572, 0.460300, 0.625604,
+ 0.646679, -0.257908, 0.450341, 0.674511, 0.679902, -0.253663, 0.431561, 0.723269,
+ 0.714159, -0.247419, 0.412684, 0.773263, 0.745345, -0.239122, 0.389388, 0.824182,
+ 0.778248, -0.228837, 0.365361, 0.876634, 0.807208, -0.216197, 0.337667, 0.929450,
+ 0.835019, -0.201772, 0.307197, 0.985261, 0.860261, -0.185291, 0.274205, 1.042990,
+ 0.877601, -0.165809, 0.240178, 1.098160, 0.898211, -0.143897, 0.207571, 1.146940,
+ 0.915789, -0.119513, 0.174904, 1.190080, 0.931831, -0.093292, 0.141423, 1.229700,
+ 0.949244, -0.065653, 0.105603, 1.265530, 0.967527, -0.037026, 0.067955, 1.299860,
+ 0.984139, -0.007301, 0.028313, 1.332520, 0.999713, 0.023465, -0.012179, 1.363970,
+ 0.015213, -0.000002, 0.122795, 0.000000, 0.015165, -0.000062, 0.122399, 0.000008,
+ 0.015118, -0.000246, 0.122023, 0.000030, 0.015120, -0.000553, 0.122030, 0.000069,
+ 0.015125, -0.000984, 0.122037, 0.000122, 0.015143, -0.001538, 0.122140, 0.000193,
+ 0.015171, -0.002210, 0.122237, 0.000281, 0.015211, -0.003007, 0.122380, 0.000391,
+ 0.015288, -0.003925, 0.122700, 0.000526, 0.015412, -0.004966, 0.123244, 0.000694,
+ 0.015620, -0.006133, 0.124228, 0.000905, 0.015966, -0.007441, 0.125945, 0.001173,
+ 0.016567, -0.008925, 0.129098, 0.001519, 0.017487, -0.010627, 0.133865, 0.001970,
+ 0.018839, -0.012604, 0.140682, 0.002564, 0.020554, -0.014881, 0.148534, 0.003336,
+ 0.022673, -0.017512, 0.157381, 0.004337, 0.025188, -0.020527, 0.166685, 0.005617,
+ 0.028363, -0.024032, 0.177796, 0.007256, 0.031869, -0.027943, 0.188251, 0.009288,
+ 0.036104, -0.032431, 0.200038, 0.011835, 0.040666, -0.037353, 0.210685, 0.014915,
+ 0.046385, -0.043013, 0.224182, 0.018725, 0.052570, -0.049101, 0.236340, 0.023228,
+ 0.059808, -0.055918, 0.250013, 0.028652, 0.067944, -0.063366, 0.263981, 0.035063,
+ 0.077118, -0.071460, 0.278072, 0.042588, 0.088127, -0.080350, 0.295110, 0.051449,
+ 0.099663, -0.089690, 0.309976, 0.061577, 0.112702, -0.099644, 0.325611, 0.073214,
+ 0.126488, -0.109829, 0.339321, 0.086232, 0.142625, -0.120859, 0.355740, 0.101275,
+ 0.159530, -0.131956, 0.369845, 0.117892, 0.176991, -0.143145, 0.381460, 0.136205,
+ 0.199715, -0.155292, 0.400520, 0.157252, 0.220787, -0.167066, 0.412055, 0.179966,
+ 0.243697, -0.178396, 0.423133, 0.204418, 0.272106, -0.190433, 0.439524, 0.232141,
+ 0.297637, -0.201265, 0.447041, 0.261109, 0.325273, -0.211834, 0.454488, 0.292627,
+ 0.357219, -0.221889, 0.465004, 0.326669, 0.387362, -0.230729, 0.468527, 0.362426,
+ 0.423131, -0.239240, 0.475836, 0.401533, 0.455430, -0.246067, 0.475017, 0.441902,
+ 0.493393, -0.251557, 0.478017, 0.484239, 0.526253, -0.255571, 0.470900, 0.528586,
+ 0.560554, -0.257752, 0.463167, 0.574346, 0.599306, -0.258076, 0.456452, 0.621655,
+ 0.634541, -0.256471, 0.443725, 0.670492, 0.668907, -0.253283, 0.428719, 0.721943,
+ 0.705619, -0.247562, 0.411348, 0.772477, 0.739034, -0.240626, 0.388939, 0.826400,
+ 0.771408, -0.231493, 0.364250, 0.881702, 0.803312, -0.220125, 0.337321, 0.938500,
+ 0.828457, -0.206645, 0.305364, 0.997437, 0.854819, -0.190664, 0.273715, 1.056930,
+ 0.878666, -0.171429, 0.242218, 1.112510, 0.898404, -0.149235, 0.209556, 1.163980,
+ 0.917416, -0.124350, 0.176863, 1.210140, 0.933133, -0.097270, 0.142775, 1.251780,
+ 0.950660, -0.068361, 0.106735, 1.290280, 0.968589, -0.037872, 0.068161, 1.327030,
+ 0.984776, -0.006057, 0.027397, 1.361580, 0.999940, 0.026328, -0.013812, 1.394300,
+ 0.008674, -0.000002, 0.092898, 0.000000, 0.008640, -0.000047, 0.092524, 0.000004,
+ 0.008646, -0.000187, 0.092581, 0.000017, 0.008641, -0.000420, 0.092490, 0.000039,
+ 0.008639, -0.000746, 0.092459, 0.000070, 0.008685, -0.001165, 0.092900, 0.000111,
+ 0.008697, -0.001677, 0.092853, 0.000164, 0.008743, -0.002281, 0.093091, 0.000231,
+ 0.008827, -0.002979, 0.093568, 0.000317, 0.008989, -0.003776, 0.094617, 0.000430,
+ 0.009293, -0.004692, 0.096741, 0.000580, 0.009783, -0.005755, 0.100084, 0.000784,
+ 0.010575, -0.007015, 0.105447, 0.001063, 0.011695, -0.008518, 0.112494, 0.001447,
+ 0.013042, -0.010276, 0.119876, 0.001964, 0.014837, -0.012381, 0.129034, 0.002664,
+ 0.016872, -0.014820, 0.137812, 0.003584, 0.019369, -0.017656, 0.147696, 0.004781,
+ 0.022269, -0.020921, 0.157795, 0.006317, 0.025689, -0.024665, 0.168431, 0.008263,
+ 0.029469, -0.028860, 0.178587, 0.010671, 0.034041, -0.033644, 0.190251, 0.013663,
+ 0.039392, -0.039033, 0.202999, 0.017327, 0.045395, -0.045009, 0.215655, 0.021745,
+ 0.052194, -0.051546, 0.228686, 0.026994, 0.060028, -0.058817, 0.242838, 0.033272,
+ 0.069240, -0.066723, 0.258145, 0.040646, 0.079383, -0.075240, 0.273565, 0.049224,
+ 0.090230, -0.084185, 0.287735, 0.059011, 0.102014, -0.093648, 0.301161, 0.070202,
+ 0.116054, -0.103967, 0.317438, 0.083200, 0.131910, -0.114622, 0.334166, 0.097795,
+ 0.148239, -0.125452, 0.348192, 0.113985, 0.165809, -0.136453, 0.361094, 0.131928,
+ 0.184616, -0.147648, 0.373534, 0.151811, 0.207491, -0.159607, 0.391010, 0.174476,
+ 0.230106, -0.171119, 0.402504, 0.198798, 0.257036, -0.182906, 0.418032, 0.225796,
+ 0.281172, -0.193605, 0.425468, 0.254027, 0.312034, -0.204771, 0.440379, 0.285713,
+ 0.340402, -0.214988, 0.445406, 0.319196, 0.370231, -0.224711, 0.449680, 0.355370,
+ 0.407105, -0.233516, 0.460747, 0.393838, 0.439037, -0.240801, 0.460624, 0.433747,
+ 0.477810, -0.247620, 0.465957, 0.477234, 0.510655, -0.251823, 0.460054, 0.520440,
+ 0.550584, -0.255552, 0.459172, 0.567853, 0.585872, -0.257036, 0.450311, 0.615943,
+ 0.620466, -0.257535, 0.437763, 0.667693, 0.660496, -0.255248, 0.426639, 0.718988,
+ 0.695578, -0.251141, 0.409185, 0.772503, 0.732176, -0.244718, 0.390150, 0.827023,
+ 0.760782, -0.236782, 0.362594, 0.885651, 0.794220, -0.225923, 0.337110, 0.943756,
+ 0.824521, -0.213855, 0.308272, 1.008740, 0.854964, -0.197723, 0.278529, 1.067640,
+ 0.878065, -0.179209, 0.246208, 1.128360, 0.899834, -0.157569, 0.213290, 1.183180,
+ 0.918815, -0.133206, 0.181038, 1.231610, 0.934934, -0.106545, 0.146993, 1.276440,
+ 0.952115, -0.078057, 0.111175, 1.318420, 0.969060, -0.047828, 0.072855, 1.358390,
+ 0.985178, -0.016001, 0.032579, 1.396970, 1.000390, 0.017313, -0.009526, 1.433120,
+ 0.003841, -0.000001, 0.061358, 0.000000, 0.003900, -0.000031, 0.062292, 0.000002,
+ 0.003900, -0.000126, 0.062263, 0.000008, 0.003895, -0.000282, 0.062066, 0.000018,
+ 0.003916, -0.000503, 0.062469, 0.000032, 0.003927, -0.000784, 0.062511, 0.000052,
+ 0.003961, -0.001129, 0.062817, 0.000078, 0.004019, -0.001538, 0.063329, 0.000114,
+ 0.004150, -0.002021, 0.064644, 0.000164, 0.004412, -0.002600, 0.067389, 0.000238,
+ 0.004844, -0.003310, 0.071653, 0.000346, 0.005491, -0.004190, 0.077500, 0.000506,
+ 0.006363, -0.005273, 0.084476, 0.000739, 0.007466, -0.006604, 0.092133, 0.001073,
+ 0.008766, -0.008188, 0.099707, 0.001537, 0.010313, -0.010081, 0.107433, 0.002172,
+ 0.012331, -0.012364, 0.117088, 0.003034, 0.014627, -0.015001, 0.126438, 0.004160,
+ 0.017229, -0.018053, 0.135672, 0.005615, 0.020425, -0.021596, 0.146244, 0.007478,
+ 0.024160, -0.025623, 0.157481, 0.009810, 0.028469, -0.030221, 0.169125, 0.012715,
+ 0.033445, -0.035333, 0.181659, 0.016245, 0.039125, -0.041085, 0.194400, 0.020542,
+ 0.045472, -0.047345, 0.207082, 0.025633, 0.053098, -0.054286, 0.221656, 0.031704,
+ 0.061536, -0.061838, 0.236036, 0.038832, 0.070336, -0.069763, 0.248398, 0.046974,
+ 0.081039, -0.078476, 0.263611, 0.056525, 0.092014, -0.087349, 0.275857, 0.067172,
+ 0.105584, -0.097365, 0.292555, 0.079811, 0.119506, -0.107271, 0.306333, 0.093594,
+ 0.134434, -0.117608, 0.318888, 0.109106, 0.153399, -0.128938, 0.337552, 0.127074,
+ 0.171258, -0.139944, 0.349955, 0.146430, 0.191059, -0.151288, 0.361545, 0.168000,
+ 0.215069, -0.163018, 0.378421, 0.192082, 0.237838, -0.174226, 0.388790, 0.217838,
+ 0.266965, -0.186063, 0.405857, 0.246931, 0.292827, -0.196909, 0.414146, 0.277505,
+ 0.324352, -0.207473, 0.426955, 0.310711, 0.354427, -0.217713, 0.433429, 0.346794,
+ 0.389854, -0.227183, 0.443966, 0.385237, 0.420749, -0.235131, 0.444710, 0.424955,
+ 0.459597, -0.242786, 0.451729, 0.468446, 0.495316, -0.248767, 0.450720, 0.513422,
+ 0.534903, -0.253351, 0.450924, 0.560618, 0.572369, -0.256277, 0.445266, 0.609677,
+ 0.612383, -0.257600, 0.438798, 0.660995, 0.644037, -0.256931, 0.421693, 0.713807,
+ 0.686749, -0.254036, 0.410900, 0.767616, 0.719814, -0.249785, 0.390151, 0.825330,
+ 0.754719, -0.244283, 0.367847, 0.888311, 0.792022, -0.235076, 0.345013, 0.948177,
+ 0.822404, -0.225061, 0.316193, 1.016610, 0.853084, -0.211113, 0.287013, 1.080750,
+ 0.879871, -0.194490, 0.255424, 1.145010, 0.901655, -0.174023, 0.222879, 1.202030,
+ 0.919957, -0.150900, 0.189890, 1.256980, 0.938412, -0.124923, 0.156060, 1.305880,
+ 0.953471, -0.096814, 0.120512, 1.352900, 0.970451, -0.066734, 0.082851, 1.398600,
+ 0.985522, -0.034734, 0.042446, 1.441480, 1.000990, -0.001022, 0.000679, 1.483980,
+ 0.000965, -0.000001, 0.030641, 0.000000, 0.000992, -0.000016, 0.031464, 0.000000,
+ 0.000991, -0.000063, 0.031363, 0.000002, 0.000975, -0.000141, 0.030360, 0.000005,
+ 0.000998, -0.000253, 0.031496, 0.000009, 0.001022, -0.000397, 0.031996, 0.000015,
+ 0.001079, -0.000578, 0.033138, 0.000025, 0.001216, -0.000817, 0.035940, 0.000042,
+ 0.001445, -0.001138, 0.039965, 0.000072, 0.001788, -0.001570, 0.045056, 0.000124,
+ 0.002257, -0.002141, 0.050803, 0.000209, 0.002856, -0.002877, 0.056844, 0.000342,
+ 0.003599, -0.003803, 0.063089, 0.000544, 0.004555, -0.004963, 0.070220, 0.000842,
+ 0.005691, -0.006379, 0.077343, 0.001267, 0.007169, -0.008135, 0.086084, 0.001866,
+ 0.008853, -0.010195, 0.094408, 0.002670, 0.010932, -0.012639, 0.103951, 0.003740,
+ 0.013370, -0.015488, 0.113786, 0.005130, 0.016153, -0.018732, 0.123477, 0.006889,
+ 0.019427, -0.022465, 0.133986, 0.009106, 0.023097, -0.026598, 0.143979, 0.011807,
+ 0.027363, -0.031285, 0.154645, 0.015127, 0.032390, -0.036595, 0.166765, 0.019179,
+ 0.037922, -0.042291, 0.177932, 0.023924, 0.044750, -0.048747, 0.191670, 0.029657,
+ 0.051939, -0.055640, 0.203224, 0.036292, 0.059946, -0.063165, 0.215652, 0.044059,
+ 0.070243, -0.071431, 0.232089, 0.053162, 0.080690, -0.080061, 0.245258, 0.063456,
+ 0.092319, -0.089281, 0.258609, 0.075248, 0.106938, -0.099310, 0.276654, 0.088891,
+ 0.121238, -0.109575, 0.289847, 0.104055, 0.138817, -0.120461, 0.307566, 0.121266,
+ 0.155950, -0.131209, 0.320117, 0.139944, 0.178418, -0.143049, 0.339677, 0.161591,
+ 0.197875, -0.154074, 0.349886, 0.184303, 0.224368, -0.166307, 0.369352, 0.210669,
+ 0.252213, -0.178051, 0.386242, 0.238895, 0.277321, -0.189335, 0.395294, 0.269182,
+ 0.310332, -0.200683, 0.412148, 0.302508, 0.338809, -0.210856, 0.418266, 0.337264,
+ 0.372678, -0.220655, 0.428723, 0.374881, 0.405632, -0.230053, 0.433887, 0.415656,
+ 0.442293, -0.237993, 0.439911, 0.457982, 0.477256, -0.244897, 0.440175, 0.502831,
+ 0.515592, -0.250657, 0.441079, 0.550277, 0.550969, -0.255459, 0.435219, 0.601102,
+ 0.592883, -0.257696, 0.432882, 0.651785, 0.629092, -0.259894, 0.421054, 0.708961,
+ 0.672033, -0.258592, 0.411770, 0.763806, 0.709147, -0.256525, 0.395267, 0.824249,
+ 0.745367, -0.254677, 0.375013, 0.895100, 0.784715, -0.247892, 0.353906, 0.959317,
+ 0.818107, -0.240162, 0.327801, 1.031530, 0.847895, -0.229741, 0.298821, 1.106010,
+ 0.879603, -0.213084, 0.269115, 1.164000, 0.902605, -0.195242, 0.236606, 1.228540,
+ 0.922788, -0.174505, 0.203442, 1.290170, 0.944831, -0.150169, 0.169594, 1.341570,
+ 0.959656, -0.124099, 0.135909, 1.395600, 0.972399, -0.096063, 0.099056, 1.451280,
+ 0.986549, -0.065710, 0.060235, 1.503120, 1.000130, -0.033356, 0.018669, 1.553640,
+ 0.000006, -0.000000, 0.007783, 0.000000, 0.000000, -0.000000, 0.000028, 0.000000,
+ 0.000001, -0.000002, 0.000250, 0.000000, 0.000004, -0.000006, 0.000357, 0.000000,
+ 0.000008, -0.000017, 0.000516, 0.000000, 0.000024, -0.000045, 0.001022, 0.000001,
+ 0.000046, -0.000089, 0.001443, 0.000004, 0.000097, -0.000178, 0.002419, 0.000010,
+ 0.000171, -0.000314, 0.003549, 0.000024, 0.000293, -0.000520, 0.005138, 0.000050,
+ 0.000790, -0.001182, 0.023862, 0.000139, 0.001141, -0.001718, 0.028669, 0.000244,
+ 0.001761, -0.002497, 0.036857, 0.000421, 0.002223, -0.003337, 0.040047, 0.000657,
+ 0.003434, -0.004820, 0.053575, 0.001093, 0.004276, -0.006008, 0.057099, 0.001553,
+ 0.004614, -0.007376, 0.055108, 0.002150, 0.006957, -0.009714, 0.071577, 0.003165,
+ 0.008676, -0.012094, 0.079331, 0.004370, 0.010669, -0.014820, 0.086939, 0.005896,
+ 0.014035, -0.018350, 0.101572, 0.007988, 0.016894, -0.022006, 0.110180, 0.010423,
+ 0.020197, -0.026157, 0.119041, 0.013417, 0.025470, -0.031278, 0.135404, 0.017301,
+ 0.029838, -0.036247, 0.143700, 0.021543, 0.035159, -0.042237, 0.155120, 0.026888,
+ 0.042769, -0.048871, 0.171280, 0.033235, 0.049485, -0.055800, 0.181813, 0.040444,
+ 0.059239, -0.063558, 0.198745, 0.049004, 0.068146, -0.071838, 0.210497, 0.058824,
+ 0.080475, -0.080930, 0.228864, 0.070283, 0.094220, -0.090649, 0.247008, 0.083401,
+ 0.106777, -0.100216, 0.258812, 0.097595, 0.124471, -0.110827, 0.278617, 0.114162,
+ 0.138389, -0.121193, 0.287049, 0.131983, 0.159543, -0.132530, 0.307151, 0.152541,
+ 0.176432, -0.143611, 0.315640, 0.174673, 0.201723, -0.155480, 0.335380, 0.199842,
+ 0.229721, -0.167166, 0.355256, 0.227097, 0.250206, -0.178238, 0.360047, 0.256014,
+ 0.282118, -0.189905, 0.378761, 0.288550, 0.312821, -0.201033, 0.391810, 0.323348,
+ 0.341482, -0.211584, 0.397716, 0.360564, 0.377368, -0.221314, 0.410141, 0.400004,
+ 0.418229, -0.230474, 0.423485, 0.442371, 0.444881, -0.239443, 0.418874, 0.488796,
+ 0.488899, -0.245987, 0.427545, 0.535012, 0.520317, -0.253948, 0.422147, 0.589678,
+ 0.568566, -0.256616, 0.427190, 0.637683, 0.599607, -0.263760, 0.415114, 0.703363,
+ 0.642220, -0.268687, 0.408715, 0.771363, 0.685698, -0.269400, 0.399722, 0.835740,
+ 0.732327, -0.266642, 0.388651, 0.897764, 0.769873, -0.267712, 0.369198, 0.983312,
+ 0.806733, -0.263479, 0.346802, 1.062220, 0.843466, -0.254575, 0.321368, 1.134770,
+ 0.873008, -0.242749, 0.292110, 1.207120, 0.908438, -0.227250, 0.262143, 1.274650,
+ 0.936321, -0.207621, 0.228876, 1.332030, 0.950353, -0.187932, 0.194840, 1.404390,
+ 0.964420, -0.165154, 0.163178, 1.473200, 0.979856, -0.139302, 0.127531, 1.535740,
+ 0.982561, -0.111340, 0.090346, 1.599820, 0.996389, -0.080812, 0.048901, 1.657700,
+};
+
+const float ltc_mag_ggx[64 * 64 * 2] = {
+ 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 0.999998, 0.000000, 0.999994, 0.000000, 0.999989,
+ 0.000000, 0.999973, 0.000000, 0.999947, 0.000000, 0.999894, 0.000001, 0.999798, 0.000001,
+ 0.999617, 0.000003, 0.999234, 0.000008, 0.998258, 0.000015, 0.995040, 0.000027, 0.980816,
+ 0.000024, 0.967553, 0.000002, 0.966877, 0.000004, 0.965752, 0.000007, 0.963820, 0.000013,
+ 0.960306, 0.000020, 0.953619, 0.000028, 0.941103, 0.000028, 0.926619, 0.000016, 0.920983,
+ 0.000024, 0.912293, 0.000031, 0.899277, 0.000035, 0.880884, 0.000026, 0.870399, 0.000034,
+ 0.856138, 0.000039, 0.837436, 0.000037, 0.820973, 0.000039, 0.803583, 0.000043, 0.782168,
+ 0.000040, 0.764107, 0.000045, 0.743092, 0.000046, 0.721626, 0.000046, 0.700375, 0.000048,
+ 0.677334, 0.000046, 0.655702, 0.000048, 0.632059, 0.000046, 0.610125, 0.000048, 0.586530,
+ 0.000046, 0.564508, 0.000048, 0.541405, 0.000046, 0.519556, 0.000046, 0.497292, 0.000045,
+ 0.475898, 0.000045, 0.454722, 0.000043, 0.434042, 0.000042, 0.414126, 0.000041, 0.394387,
+ 0.000040, 0.375841, 0.000039, 0.357219, 0.000037, 0.340084, 0.000037, 0.322714, 0.000034,
+ 0.306974, 0.000034, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999996, 0.000000, 0.999991,
+ 0.000000, 0.999983, 0.000000, 0.999968, 0.000000, 0.999940, 0.000000, 0.999891, 0.000001,
+ 0.999797, 0.000001, 0.999617, 0.000003, 0.999227, 0.000008, 0.998239, 0.000016, 0.994937,
+ 0.000027, 0.980225, 0.000021, 0.967549, 0.000002, 0.966865, 0.000004, 0.965739, 0.000008,
+ 0.963794, 0.000013, 0.960244, 0.000021, 0.953495, 0.000028, 0.940876, 0.000027, 0.926569,
+ 0.000016, 0.920905, 0.000024, 0.912169, 0.000032, 0.899095, 0.000035, 0.882209, 0.000029,
+ 0.870272, 0.000034, 0.855977, 0.000039, 0.837431, 0.000037, 0.820826, 0.000040, 0.803408,
+ 0.000044, 0.782838, 0.000042, 0.763941, 0.000045, 0.742904, 0.000046, 0.721463, 0.000046,
+ 0.700197, 0.000048, 0.677501, 0.000047, 0.655527, 0.000048, 0.632400, 0.000048, 0.609964,
+ 0.000048, 0.586839, 0.000048, 0.564353, 0.000048, 0.541589, 0.000047, 0.519413, 0.000046,
+ 0.497337, 0.000045, 0.475797, 0.000045, 0.454659, 0.000044, 0.434065, 0.000042, 0.414018,
+ 0.000041, 0.394550, 0.000040, 0.375742, 0.000039, 0.357501, 0.000038, 0.339996, 0.000037,
+ 0.323069, 0.000035, 0.306897, 0.000034, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 0.999998, 0.000000, 0.999997, 0.000000, 0.999995,
+ 0.000000, 0.999991, 0.000000, 0.999981, 0.000000, 0.999967, 0.000000, 0.999938, 0.000000,
+ 0.999886, 0.000001, 0.999792, 0.000002, 0.999608, 0.000004, 0.999209, 0.000008, 0.998179,
+ 0.000017, 0.994605, 0.000027, 0.979468, 0.000017, 0.967529, 0.000002, 0.966836, 0.000005,
+ 0.965690, 0.000008, 0.963706, 0.000014, 0.960063, 0.000022, 0.953113, 0.000029, 0.940192,
+ 0.000025, 0.927731, 0.000020, 0.920669, 0.000025, 0.911799, 0.000032, 0.898570, 0.000034,
+ 0.883283, 0.000032, 0.869890, 0.000036, 0.855483, 0.000040, 0.837987, 0.000039, 0.820546,
+ 0.000041, 0.802878, 0.000044, 0.783402, 0.000044, 0.763439, 0.000046, 0.742925, 0.000047,
+ 0.721633, 0.000048, 0.699850, 0.000048, 0.677830, 0.000049, 0.655126, 0.000049, 0.632697,
+ 0.000050, 0.609613, 0.000049, 0.587098, 0.000049, 0.564119, 0.000048, 0.541813, 0.000048,
+ 0.519342, 0.000047, 0.497514, 0.000047, 0.475879, 0.000046, 0.454789, 0.000045, 0.434217,
+ 0.000044, 0.414086, 0.000042, 0.394744, 0.000041, 0.375782, 0.000040, 0.357707, 0.000039,
+ 0.340038, 0.000037, 0.323284, 0.000036, 0.306954, 0.000034, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999997,
+ 0.000000, 0.999993, 0.000000, 0.999988, 0.000000, 0.999979, 0.000000, 0.999962, 0.000000,
+ 0.999933, 0.000000, 0.999881, 0.000001, 0.999783, 0.000002, 0.999594, 0.000004, 0.999178,
+ 0.000009, 0.998073, 0.000018, 0.993993, 0.000028, 0.979982, 0.000015, 0.968145, 0.000004,
+ 0.966786, 0.000005, 0.965611, 0.000009, 0.963557, 0.000016, 0.959752, 0.000024, 0.952461,
+ 0.000029, 0.940193, 0.000024, 0.929042, 0.000023, 0.920266, 0.000027, 0.911178, 0.000034,
+ 0.897873, 0.000033, 0.884053, 0.000035, 0.869455, 0.000038, 0.854655, 0.000040, 0.838347,
+ 0.000042, 0.820693, 0.000044, 0.802277, 0.000045, 0.783634, 0.000047, 0.763159, 0.000048,
+ 0.742914, 0.000049, 0.721662, 0.000050, 0.699668, 0.000050, 0.677839, 0.000051, 0.655091,
+ 0.000051, 0.632665, 0.000052, 0.609734, 0.000051, 0.587043, 0.000051, 0.564298, 0.000051,
+ 0.541769, 0.000050, 0.519529, 0.000049, 0.497574, 0.000048, 0.476028, 0.000047, 0.454961,
+ 0.000046, 0.434341, 0.000045, 0.414364, 0.000044, 0.394832, 0.000042, 0.376109, 0.000041,
+ 0.357790, 0.000040, 0.340379, 0.000038, 0.323385, 0.000037, 0.307295, 0.000036, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 0.999999, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999997,
+ 0.000000, 0.999996, 0.000000, 0.999992, 0.000000, 0.999986, 0.000000, 0.999975, 0.000000,
+ 0.999959, 0.000000, 0.999927, 0.000000, 0.999871, 0.000001, 0.999771, 0.000002, 0.999572,
+ 0.000005, 0.999133, 0.000011, 0.997912, 0.000020, 0.993008, 0.000028, 0.980645, 0.000014,
+ 0.970057, 0.000006, 0.966717, 0.000007, 0.965497, 0.000011, 0.963340, 0.000018, 0.959294,
+ 0.000026, 0.951519, 0.000029, 0.940517, 0.000025, 0.930140, 0.000027, 0.919720, 0.000030,
+ 0.910294, 0.000035, 0.897701, 0.000035, 0.884522, 0.000039, 0.869489, 0.000041, 0.853983,
+ 0.000042, 0.838425, 0.000045, 0.820656, 0.000047, 0.801875, 0.000048, 0.783521, 0.000051,
+ 0.763131, 0.000051, 0.742610, 0.000052, 0.721480, 0.000053, 0.699696, 0.000054, 0.677592,
+ 0.000054, 0.655250, 0.000055, 0.632452, 0.000054, 0.609903, 0.000054, 0.586928, 0.000054,
+ 0.564464, 0.000054, 0.541801, 0.000052, 0.519681, 0.000052, 0.497685, 0.000051, 0.476220,
+ 0.000050, 0.455135, 0.000049, 0.434600, 0.000047, 0.414564, 0.000046, 0.395165, 0.000044,
+ 0.376333, 0.000043, 0.358197, 0.000042, 0.340640, 0.000040, 0.323816, 0.000039, 0.307581,
+ 0.000037, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999999, 0.000000, 0.999998,
+ 0.000000, 0.999997, 0.000000, 0.999994, 0.000000, 0.999990, 0.000000, 0.999984, 0.000000,
+ 0.999972, 0.000000, 0.999952, 0.000000, 0.999919, 0.000001, 0.999860, 0.000001, 0.999753,
+ 0.000003, 0.999546, 0.000006, 0.999074, 0.000013, 0.997671, 0.000023, 0.991504, 0.000026,
+ 0.981148, 0.000013, 0.971965, 0.000009, 0.966624, 0.000008, 0.965344, 0.000014, 0.963048,
+ 0.000021, 0.958673, 0.000029, 0.950262, 0.000028, 0.940836, 0.000027, 0.930996, 0.000031,
+ 0.919848, 0.000035, 0.909136, 0.000037, 0.897554, 0.000038, 0.884691, 0.000043, 0.869414,
+ 0.000045, 0.853462, 0.000045, 0.838187, 0.000050, 0.820381, 0.000050, 0.801844, 0.000052,
+ 0.783061, 0.000054, 0.763205, 0.000055, 0.742362, 0.000056, 0.721393, 0.000057, 0.699676,
+ 0.000058, 0.677395, 0.000058, 0.655208, 0.000059, 0.632451, 0.000058, 0.609839, 0.000058,
+ 0.587093, 0.000058, 0.564467, 0.000057, 0.542043, 0.000056, 0.519826, 0.000055, 0.497952,
+ 0.000054, 0.476477, 0.000053, 0.455412, 0.000051, 0.434926, 0.000050, 0.414900, 0.000049,
+ 0.395552, 0.000047, 0.376712, 0.000045, 0.358622, 0.000044, 0.341048, 0.000042, 0.324262,
+ 0.000041, 0.308013, 0.000039, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999998,
+ 0.000000, 0.999997, 0.000000, 0.999995, 0.000000, 0.999994, 0.000000, 0.999988, 0.000000,
+ 0.999979, 0.000000, 0.999965, 0.000000, 0.999945, 0.000000, 0.999908, 0.000001, 0.999846,
+ 0.000002, 0.999733, 0.000004, 0.999511, 0.000008, 0.998993, 0.000016, 0.997326, 0.000027,
+ 0.989706, 0.000021, 0.981713, 0.000013, 0.973636, 0.000011, 0.966509, 0.000010, 0.965149,
+ 0.000017, 0.962669, 0.000025, 0.957860, 0.000032, 0.949334, 0.000028, 0.941041, 0.000030,
+ 0.931575, 0.000036, 0.920102, 0.000040, 0.908002, 0.000038, 0.897269, 0.000043, 0.884559,
+ 0.000048, 0.869161, 0.000048, 0.853342, 0.000051, 0.837633, 0.000054, 0.820252, 0.000055,
+ 0.801872, 0.000058, 0.782418, 0.000059, 0.763100, 0.000061, 0.742183, 0.000061, 0.721098,
+ 0.000063, 0.699512, 0.000063, 0.677372, 0.000064, 0.655059, 0.000063, 0.632567, 0.000064,
+ 0.609784, 0.000063, 0.587237, 0.000063, 0.564525, 0.000062, 0.542181, 0.000061, 0.520017,
+ 0.000060, 0.498204, 0.000058, 0.476742, 0.000057, 0.455803, 0.000055, 0.435251, 0.000054,
+ 0.415374, 0.000052, 0.395921, 0.000050, 0.377253, 0.000049, 0.359021, 0.000047, 0.341637,
+ 0.000045, 0.324700, 0.000043, 0.308625, 0.000042, 1.000000, 0.000000, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999999,
+ 0.000000, 0.999998, 0.000000, 0.999996, 0.000000, 0.999993, 0.000000, 0.999989, 0.000000,
+ 0.999983, 0.000000, 0.999974, 0.000000, 0.999959, 0.000000, 0.999936, 0.000000, 0.999896,
+ 0.000001, 0.999830, 0.000002, 0.999709, 0.000005, 0.999469, 0.000010, 0.998886, 0.000019,
+ 0.996819, 0.000030, 0.988837, 0.000019, 0.982178, 0.000013, 0.975017, 0.000013, 0.967101,
+ 0.000014, 0.964905, 0.000021, 0.962180, 0.000030, 0.956821, 0.000034, 0.948829, 0.000031,
+ 0.941092, 0.000035, 0.931883, 0.000041, 0.920211, 0.000044, 0.907307, 0.000043, 0.896840,
+ 0.000049, 0.884119, 0.000053, 0.869148, 0.000054, 0.853377, 0.000058, 0.836753, 0.000059,
+ 0.820063, 0.000062, 0.801694, 0.000065, 0.782116, 0.000065, 0.762673, 0.000067, 0.742133,
+ 0.000068, 0.720779, 0.000069, 0.699386, 0.000070, 0.677320, 0.000070, 0.654888, 0.000070,
+ 0.632499, 0.000069, 0.609825, 0.000069, 0.587287, 0.000068, 0.564743, 0.000067, 0.542409,
+ 0.000066, 0.520282, 0.000065, 0.498506, 0.000063, 0.477102, 0.000062, 0.456167, 0.000060,
+ 0.435728, 0.000058, 0.415809, 0.000056, 0.396517, 0.000054, 0.377737, 0.000053, 0.359698,
+ 0.000051, 0.342164, 0.000049, 0.325417, 0.000047, 0.309186, 0.000045, 1.000000, 0.000000,
+ 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 0.999999, 0.000000, 0.999997, 0.000000, 0.999994, 0.000000, 0.999993, 0.000000,
+ 0.999987, 0.000000, 0.999981, 0.000000, 0.999969, 0.000000, 0.999953, 0.000000, 0.999925,
+ 0.000001, 0.999881, 0.000001, 0.999810, 0.000003, 0.999680, 0.000007, 0.999418, 0.000013,
+ 0.998748, 0.000023, 0.996066, 0.000033, 0.988379, 0.000018, 0.982567, 0.000014, 0.976097,
+ 0.000015, 0.968475, 0.000018, 0.964606, 0.000025, 0.961564, 0.000035, 0.955517, 0.000036,
+ 0.948381, 0.000034, 0.941095, 0.000041, 0.931923, 0.000048, 0.919960, 0.000048, 0.907419,
+ 0.000050, 0.896180, 0.000056, 0.883370, 0.000059, 0.869046, 0.000062, 0.853278, 0.000066,
+ 0.836091, 0.000066, 0.819644, 0.000070, 0.801246, 0.000071, 0.782031, 0.000074, 0.762066,
+ 0.000075, 0.741964, 0.000077, 0.720554, 0.000077, 0.699098, 0.000078, 0.677189, 0.000077,
+ 0.654840, 0.000078, 0.632496, 0.000077, 0.609908, 0.000076, 0.587312, 0.000075, 0.564938,
+ 0.000074, 0.542577, 0.000073, 0.520620, 0.000071, 0.498819, 0.000069, 0.477555, 0.000068,
+ 0.456568, 0.000065, 0.436278, 0.000064, 0.416370, 0.000061, 0.397144, 0.000059, 0.378412,
+ 0.000057, 0.360376, 0.000055, 0.342906, 0.000053, 0.326136, 0.000051, 0.309970, 0.000048,
+ 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999997, 0.000000, 0.999994, 0.000000,
+ 0.999991, 0.000000, 0.999985, 0.000000, 0.999977, 0.000000, 0.999964, 0.000000, 0.999945,
+ 0.000000, 0.999912, 0.000001, 0.999866, 0.000002, 0.999786, 0.000004, 0.999647, 0.000009,
+ 0.999356, 0.000016, 0.998563, 0.000028, 0.994928, 0.000034, 0.987999, 0.000018, 0.982893,
+ 0.000016, 0.977044, 0.000018, 0.969972, 0.000023, 0.964237, 0.000031, 0.960791, 0.000041,
+ 0.954292, 0.000037, 0.948052, 0.000040, 0.940938, 0.000048, 0.931689, 0.000055, 0.919870,
+ 0.000054, 0.907665, 0.000059, 0.895281, 0.000064, 0.882621, 0.000066, 0.868730, 0.000071,
+ 0.853008, 0.000074, 0.835944, 0.000076, 0.818949, 0.000080, 0.800951, 0.000081, 0.781847,
+ 0.000084, 0.761649, 0.000085, 0.741520, 0.000086, 0.720495, 0.000087, 0.698742, 0.000087,
+ 0.677096, 0.000087, 0.654782, 0.000086, 0.632335, 0.000086, 0.610031, 0.000085, 0.587457,
+ 0.000084, 0.565130, 0.000082, 0.542877, 0.000080, 0.520900, 0.000079, 0.499291, 0.000077,
+ 0.477971, 0.000074, 0.457221, 0.000072, 0.436803, 0.000070, 0.417083, 0.000068, 0.397749,
+ 0.000065, 0.379177, 0.000063, 0.361061, 0.000060, 0.343713, 0.000058, 0.326894, 0.000055,
+ 0.310816, 0.000053, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999999, 0.000000, 0.999996, 0.000000,
+ 0.999992, 0.000000, 0.999989, 0.000000, 0.999980, 0.000000, 0.999971, 0.000000, 0.999955,
+ 0.000000, 0.999933, 0.000001, 0.999901, 0.000001, 0.999847, 0.000003, 0.999761, 0.000006,
+ 0.999607, 0.000011, 0.999282, 0.000020, 0.998310, 0.000034, 0.993288, 0.000029, 0.987855,
+ 0.000019, 0.983167, 0.000018, 0.977908, 0.000022, 0.971194, 0.000029, 0.963867, 0.000039,
+ 0.959820, 0.000046, 0.953497, 0.000042, 0.947621, 0.000048, 0.940611, 0.000057, 0.931174,
+ 0.000062, 0.919919, 0.000063, 0.907856, 0.000069, 0.894509, 0.000074, 0.881954, 0.000076,
+ 0.868309, 0.000082, 0.852511, 0.000084, 0.835821, 0.000088, 0.817981, 0.000090, 0.800504,
+ 0.000093, 0.781410, 0.000095, 0.761427, 0.000096, 0.740940, 0.000097, 0.720233, 0.000098,
+ 0.698592, 0.000098, 0.676763, 0.000098, 0.654808, 0.000097, 0.632326, 0.000096, 0.610049,
+ 0.000095, 0.587630, 0.000093, 0.565261, 0.000092, 0.543244, 0.000090, 0.521273, 0.000087,
+ 0.499818, 0.000085, 0.478536, 0.000082, 0.457826, 0.000080, 0.437549, 0.000077, 0.417760,
+ 0.000074, 0.398630, 0.000072, 0.379954, 0.000069, 0.362025, 0.000066, 0.344581, 0.000063,
+ 0.327909, 0.000061, 0.311736, 0.000058, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999997, 0.000000,
+ 0.999995, 0.000000, 0.999992, 0.000000, 0.999985, 0.000000, 0.999977, 0.000000, 0.999966,
+ 0.000000, 0.999948, 0.000000, 0.999923, 0.000001, 0.999884, 0.000002, 0.999826, 0.000004,
+ 0.999732, 0.000008, 0.999561, 0.000014, 0.999191, 0.000026, 0.997955, 0.000041, 0.992228,
+ 0.000028, 0.987638, 0.000021, 0.983395, 0.000022, 0.978614, 0.000027, 0.972389, 0.000037,
+ 0.964392, 0.000047, 0.958610, 0.000051, 0.952806, 0.000049, 0.947120, 0.000057, 0.940104,
+ 0.000067, 0.930398, 0.000069, 0.919866, 0.000074, 0.907853, 0.000081, 0.894078, 0.000083,
+ 0.881177, 0.000089, 0.867575, 0.000094, 0.852107, 0.000097, 0.835502, 0.000101, 0.817560,
+ 0.000103, 0.799840, 0.000107, 0.780998, 0.000108, 0.761132, 0.000110, 0.740429, 0.000110,
+ 0.719836, 0.000111, 0.698467, 0.000111, 0.676446, 0.000110, 0.654635, 0.000110, 0.632411,
+ 0.000109, 0.609986, 0.000107, 0.587872, 0.000105, 0.565528, 0.000103, 0.543563, 0.000101,
+ 0.521760, 0.000098, 0.500188, 0.000095, 0.479204, 0.000092, 0.458413, 0.000089, 0.438314,
+ 0.000086, 0.418573, 0.000082, 0.399470, 0.000079, 0.380892, 0.000076, 0.362953, 0.000073,
+ 0.345601, 0.000070, 0.328895, 0.000066, 0.312808, 0.000063, 1.000000, 0.000000, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000,
+ 0.999997, 0.000000, 0.999995, 0.000000, 0.999989, 0.000000, 0.999983, 0.000000, 0.999974,
+ 0.000000, 0.999959, 0.000000, 0.999939, 0.000001, 0.999911, 0.000001, 0.999868, 0.000003,
+ 0.999804, 0.000005, 0.999700, 0.000010, 0.999510, 0.000019, 0.999078, 0.000032, 0.997428,
+ 0.000047, 0.991620, 0.000029, 0.987479, 0.000023, 0.983582, 0.000026, 0.979186, 0.000034,
+ 0.973250, 0.000045, 0.965221, 0.000057, 0.957262, 0.000054, 0.952211, 0.000059, 0.946631,
+ 0.000069, 0.939391, 0.000079, 0.929795, 0.000079, 0.919650, 0.000088, 0.907737, 0.000095,
+ 0.893899, 0.000097, 0.880239, 0.000105, 0.866562, 0.000108, 0.851640, 0.000113, 0.835021,
+ 0.000117, 0.817311, 0.000120, 0.798845, 0.000122, 0.780479, 0.000125, 0.760694, 0.000125,
+ 0.740142, 0.000127, 0.719248, 0.000126, 0.698209, 0.000127, 0.676398, 0.000126, 0.654378,
+ 0.000124, 0.632484, 0.000123, 0.610113, 0.000121, 0.587931, 0.000118, 0.565872, 0.000116,
+ 0.543814, 0.000113, 0.522265, 0.000110, 0.500835, 0.000106, 0.479818, 0.000103, 0.459258,
+ 0.000099, 0.439061, 0.000095, 0.419552, 0.000092, 0.400399, 0.000088, 0.381976, 0.000084,
+ 0.364009, 0.000081, 0.346761, 0.000077, 0.330049, 0.000074, 0.314018, 0.000070, 1.000000,
+ 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000,
+ 0.999998, 0.000000, 0.999997, 0.000000, 0.999992, 0.000000, 0.999989, 0.000000, 0.999980,
+ 0.000000, 0.999969, 0.000000, 0.999953, 0.000001, 0.999929, 0.000001, 0.999898, 0.000002,
+ 0.999849, 0.000004, 0.999778, 0.000007, 0.999661, 0.000013, 0.999451, 0.000024, 0.998936,
+ 0.000040, 0.996620, 0.000052, 0.991094, 0.000030, 0.987487, 0.000028, 0.983731, 0.000032,
+ 0.979647, 0.000042, 0.973837, 0.000056, 0.965840, 0.000068, 0.956309, 0.000062, 0.951523,
+ 0.000070, 0.946003, 0.000084, 0.938454, 0.000091, 0.929279, 0.000094, 0.919239, 0.000104,
+ 0.907293, 0.000110, 0.893936, 0.000115, 0.879674, 0.000122, 0.865668, 0.000126, 0.850998,
+ 0.000132, 0.834498, 0.000135, 0.816903, 0.000139, 0.798235, 0.000141, 0.779724, 0.000144,
+ 0.760251, 0.000145, 0.739808, 0.000145, 0.718762, 0.000145, 0.697815, 0.000144, 0.676310,
+ 0.000144, 0.654278, 0.000142, 0.632347, 0.000139, 0.610296, 0.000137, 0.588039, 0.000134,
+ 0.566218, 0.000131, 0.544346, 0.000127, 0.522701, 0.000123, 0.501542, 0.000119, 0.480508,
+ 0.000115, 0.460092, 0.000111, 0.440021, 0.000107, 0.420446, 0.000102, 0.401512, 0.000098,
+ 0.382990, 0.000094, 0.365232, 0.000090, 0.347865, 0.000085, 0.331342, 0.000082, 0.315202,
+ 0.000077, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
+ 0.999999, 0.000000, 0.999998, 0.000000, 0.999995, 0.000000, 0.999992, 0.000000, 0.999986,
+ 0.000000, 0.999976, 0.000001, 0.999964, 0.000001, 0.999945, 0.000001, 0.999919, 0.000002,
+ 0.999882, 0.000003, 0.999829, 0.000005, 0.999749, 0.000010, 0.999620, 0.000018, 0.999382,
+ 0.000031, 0.998751, 0.000050, 0.995344, 0.000051, 0.990768, 0.000035, 0.987464, 0.000034,
+ 0.983846, 0.000040, 0.980007, 0.000053, 0.974494, 0.000070, 0.966220, 0.000078, 0.956273,
+ 0.000075, 0.950952, 0.000086, 0.945215, 0.000100, 0.937287, 0.000104, 0.928649, 0.000112,
+ 0.918791, 0.000124, 0.906685, 0.000127, 0.893706, 0.000136, 0.879248, 0.000142, 0.864685,
+ 0.000148, 0.850032, 0.000154, 0.833853, 0.000157, 0.816353, 0.000161, 0.797834, 0.000164,
+ 0.778831, 0.000165, 0.759756, 0.000167, 0.739419, 0.000167, 0.718491, 0.000167, 0.697392,
+ 0.000166, 0.676102, 0.000164, 0.654243, 0.000162, 0.632176, 0.000159, 0.610407, 0.000155,
+ 0.588394, 0.000152, 0.566450, 0.000148, 0.544900, 0.000144, 0.523276, 0.000139, 0.502179,
+ 0.000134, 0.481359, 0.000129, 0.460920, 0.000125, 0.441084, 0.000120, 0.421517, 0.000115,
+ 0.402721, 0.000110, 0.384222, 0.000105, 0.366534, 0.000100, 0.349205, 0.000095, 0.332702,
+ 0.000091, 0.316599, 0.000086, 1.000000, 0.000001, 1.000000, 0.000001, 1.000000, 0.000001,
+ 0.999999, 0.000001, 0.999999, 0.000001, 0.999998, 0.000001, 0.999995, 0.000001, 0.999990,
+ 0.000001, 0.999984, 0.000001, 0.999973, 0.000001, 0.999959, 0.000001, 0.999936, 0.000002,
+ 0.999907, 0.000003, 0.999866, 0.000004, 0.999806, 0.000008, 0.999716, 0.000013, 0.999576,
+ 0.000023, 0.999300, 0.000039, 0.998498, 0.000061, 0.994132, 0.000049, 0.990310, 0.000038,
+ 0.987409, 0.000042, 0.983981, 0.000050, 0.980268, 0.000067, 0.974875, 0.000085, 0.966063,
+ 0.000086, 0.956779, 0.000090, 0.950259, 0.000106, 0.944239, 0.000119, 0.936341, 0.000122,
+ 0.928047, 0.000135, 0.918065, 0.000146, 0.906267, 0.000151, 0.893419, 0.000162, 0.878758,
+ 0.000166, 0.863699, 0.000174, 0.848876, 0.000178, 0.833032, 0.000184, 0.815557, 0.000186,
+ 0.797323, 0.000191, 0.778124, 0.000192, 0.758929, 0.000193, 0.738979, 0.000193, 0.718213,
+ 0.000192, 0.696947, 0.000190, 0.675807, 0.000188, 0.654147, 0.000184, 0.632290, 0.000181,
+ 0.610499, 0.000177, 0.588747, 0.000173, 0.566783, 0.000167, 0.545359, 0.000163, 0.523984,
+ 0.000157, 0.502917, 0.000152, 0.482294, 0.000146, 0.461945, 0.000140, 0.442133, 0.000134,
+ 0.422705, 0.000128, 0.403916, 0.000123, 0.385540, 0.000117, 0.367909, 0.000112, 0.350651,
+ 0.000106, 0.334208, 0.000101, 0.318123, 0.000096, 1.000000, 0.000001, 1.000000, 0.000001,
+ 1.000000, 0.000001, 1.000000, 0.000001, 0.999999, 0.000001, 0.999997, 0.000001, 0.999995,
+ 0.000001, 0.999989, 0.000001, 0.999981, 0.000001, 0.999969, 0.000002, 0.999952, 0.000002,
+ 0.999928, 0.000003, 0.999895, 0.000004, 0.999848, 0.000007, 0.999781, 0.000011, 0.999682,
+ 0.000018, 0.999523, 0.000031, 0.999205, 0.000050, 0.998131, 0.000073, 0.993334, 0.000051,
+ 0.990160, 0.000047, 0.987321, 0.000052, 0.984099, 0.000064, 0.980432, 0.000084, 0.974976,
+ 0.000103, 0.966429, 0.000100, 0.957633, 0.000111, 0.949422, 0.000129, 0.943045, 0.000140,
+ 0.935448, 0.000146, 0.927225, 0.000162, 0.917033, 0.000169, 0.905762, 0.000180, 0.892879,
+ 0.000190, 0.878435, 0.000196, 0.863114, 0.000205, 0.847760, 0.000209, 0.832084, 0.000215,
+ 0.814915, 0.000218, 0.796711, 0.000220, 0.777603, 0.000223, 0.757991, 0.000222, 0.738371,
+ 0.000223, 0.717872, 0.000221, 0.696619, 0.000218, 0.675379, 0.000216, 0.654110, 0.000212,
+ 0.632410, 0.000207, 0.610460, 0.000202, 0.589030, 0.000197, 0.567267, 0.000190, 0.545886,
+ 0.000185, 0.524714, 0.000177, 0.503789, 0.000171, 0.483204, 0.000165, 0.462976, 0.000157,
+ 0.443294, 0.000151, 0.423988, 0.000144, 0.405325, 0.000138, 0.386981, 0.000131, 0.369436,
+ 0.000125, 0.352190, 0.000118, 0.335804, 0.000113, 0.319749, 0.000107, 1.000000, 0.000002,
+ 1.000000, 0.000002, 1.000000, 0.000002, 0.999999, 0.000002, 0.999999, 0.000002, 0.999997,
+ 0.000002, 0.999993, 0.000002, 0.999987, 0.000002, 0.999979, 0.000003, 0.999965, 0.000003,
+ 0.999947, 0.000003, 0.999918, 0.000005, 0.999881, 0.000006, 0.999828, 0.000010, 0.999753,
+ 0.000015, 0.999642, 0.000025, 0.999464, 0.000040, 0.999089, 0.000064, 0.997567, 0.000086,
+ 0.992903, 0.000059, 0.990011, 0.000058, 0.987192, 0.000065, 0.984180, 0.000082, 0.980491,
+ 0.000106, 0.974779, 0.000122, 0.966750, 0.000119, 0.958248, 0.000136, 0.948884, 0.000155,
+ 0.941673, 0.000162, 0.934521, 0.000177, 0.926205, 0.000193, 0.916089, 0.000200, 0.904963,
+ 0.000214, 0.892089, 0.000222, 0.878028, 0.000233, 0.862490, 0.000239, 0.846587, 0.000247,
+ 0.830988, 0.000251, 0.814165, 0.000256, 0.796135, 0.000258, 0.777052, 0.000259, 0.757201,
+ 0.000258, 0.737655, 0.000257, 0.717477, 0.000255, 0.696433, 0.000252, 0.675084, 0.000247,
+ 0.653907, 0.000242, 0.632561, 0.000237, 0.610658, 0.000229, 0.589322, 0.000224, 0.567857,
+ 0.000216, 0.546520, 0.000209, 0.525433, 0.000202, 0.504679, 0.000193, 0.484203, 0.000186,
+ 0.464203, 0.000178, 0.444549, 0.000170, 0.425346, 0.000162, 0.406706, 0.000154, 0.388576,
+ 0.000147, 0.370940, 0.000139, 0.353996, 0.000133, 0.337391, 0.000126, 0.321648, 0.000120,
+ 1.000000, 0.000004, 1.000000, 0.000004, 1.000000, 0.000004, 0.999999, 0.000004, 0.999998,
+ 0.000004, 0.999996, 0.000004, 0.999992, 0.000004, 0.999986, 0.000004, 0.999976, 0.000004,
+ 0.999961, 0.000005, 0.999938, 0.000006, 0.999908, 0.000007, 0.999865, 0.000010, 0.999807,
+ 0.000014, 0.999723, 0.000022, 0.999602, 0.000034, 0.999398, 0.000053, 0.998946, 0.000081,
+ 0.996647, 0.000094, 0.992298, 0.000067, 0.989802, 0.000072, 0.987019, 0.000082, 0.984219,
+ 0.000105, 0.980425, 0.000131, 0.974241, 0.000140, 0.967006, 0.000146, 0.958930, 0.000167,
+ 0.949157, 0.000188, 0.940620, 0.000195, 0.933509, 0.000214, 0.925088, 0.000230, 0.915178,
+ 0.000240, 0.904093, 0.000255, 0.891337, 0.000264, 0.877326, 0.000275, 0.861794, 0.000281,
+ 0.845758, 0.000290, 0.829792, 0.000294, 0.813037, 0.000297, 0.795285, 0.000300, 0.776323,
+ 0.000300, 0.756673, 0.000300, 0.736856, 0.000298, 0.716883, 0.000294, 0.696089, 0.000289,
+ 0.675050, 0.000285, 0.653509, 0.000277, 0.632580, 0.000272, 0.611040, 0.000263, 0.589567,
+ 0.000255, 0.568322, 0.000246, 0.547235, 0.000237, 0.526160, 0.000228, 0.505716, 0.000219,
+ 0.485274, 0.000210, 0.465411, 0.000201, 0.445854, 0.000191, 0.426911, 0.000183, 0.408222,
+ 0.000174, 0.390307, 0.000165, 0.372624, 0.000157, 0.355804, 0.000149, 0.339240, 0.000141,
+ 0.323534, 0.000134, 1.000000, 0.000006, 1.000000, 0.000006, 1.000000, 0.000006, 0.999999,
+ 0.000006, 0.999998, 0.000006, 0.999996, 0.000006, 0.999991, 0.000007, 0.999984, 0.000007,
+ 0.999973, 0.000007, 0.999955, 0.000008, 0.999931, 0.000009, 0.999896, 0.000011, 0.999847,
+ 0.000015, 0.999784, 0.000021, 0.999692, 0.000030, 0.999554, 0.000045, 0.999326, 0.000069,
+ 0.998757, 0.000102, 0.995367, 0.000096, 0.992090, 0.000083, 0.989517, 0.000089, 0.987008,
+ 0.000106, 0.984210, 0.000133, 0.980210, 0.000162, 0.973676, 0.000162, 0.967052, 0.000179,
+ 0.959385, 0.000207, 0.949461, 0.000225, 0.939578, 0.000236, 0.932416, 0.000259, 0.923759,
+ 0.000271, 0.914223, 0.000289, 0.902942, 0.000301, 0.890419, 0.000314, 0.876639, 0.000324,
+ 0.861316, 0.000332, 0.844960, 0.000338, 0.828427, 0.000346, 0.811871, 0.000348, 0.794397,
+ 0.000350, 0.775726, 0.000350, 0.756170, 0.000347, 0.736091, 0.000344, 0.716213, 0.000341,
+ 0.695736, 0.000332, 0.674961, 0.000328, 0.653518, 0.000319, 0.632574, 0.000310, 0.611340,
+ 0.000301, 0.590017, 0.000291, 0.568752, 0.000280, 0.548061, 0.000270, 0.527110, 0.000259,
+ 0.506682, 0.000248, 0.486524, 0.000237, 0.466812, 0.000227, 0.447320, 0.000216, 0.428473,
+ 0.000206, 0.409921, 0.000196, 0.392028, 0.000185, 0.374606, 0.000176, 0.357601, 0.000167,
+ 0.341348, 0.000158, 0.325420, 0.000149, 1.000000, 0.000010, 1.000000, 0.000010, 1.000000,
+ 0.000010, 0.999999, 0.000010, 0.999998, 0.000010, 0.999995, 0.000011, 0.999991, 0.000011,
+ 0.999982, 0.000011, 0.999968, 0.000012, 0.999950, 0.000013, 0.999922, 0.000015, 0.999884,
+ 0.000018, 0.999830, 0.000022, 0.999758, 0.000030, 0.999654, 0.000042, 0.999503, 0.000061,
+ 0.999237, 0.000090, 0.998491, 0.000127, 0.994594, 0.000108, 0.991780, 0.000103, 0.989265,
+ 0.000112, 0.986998, 0.000136, 0.984137, 0.000169, 0.979798, 0.000197, 0.973370, 0.000197,
+ 0.967239, 0.000223, 0.959543, 0.000254, 0.949466, 0.000266, 0.939074, 0.000288, 0.931118,
+ 0.000311, 0.922525, 0.000326, 0.912983, 0.000346, 0.901617, 0.000356, 0.889487, 0.000374,
+ 0.875787, 0.000383, 0.860654, 0.000394, 0.844417, 0.000400, 0.827410, 0.000405, 0.810545,
+ 0.000407, 0.793312, 0.000407, 0.774847, 0.000407, 0.755621, 0.000405, 0.735511, 0.000397,
+ 0.715435, 0.000394, 0.695403, 0.000385, 0.674681, 0.000376, 0.653590, 0.000366, 0.632471,
+ 0.000355, 0.611510, 0.000344, 0.590640, 0.000332, 0.569386, 0.000319, 0.548785, 0.000307,
+ 0.528146, 0.000294, 0.507872, 0.000282, 0.487805, 0.000269, 0.468196, 0.000256, 0.448922,
+ 0.000244, 0.430093, 0.000232, 0.411845, 0.000220, 0.393808, 0.000209, 0.376615, 0.000198,
+ 0.359655, 0.000187, 0.343452, 0.000177, 0.327650, 0.000168, 1.000000, 0.000017, 1.000000,
+ 0.000017, 1.000000, 0.000017, 0.999999, 0.000017, 0.999998, 0.000017, 0.999995, 0.000017,
+ 0.999990, 0.000018, 0.999979, 0.000018, 0.999966, 0.000019, 0.999944, 0.000021, 0.999912,
+ 0.000023, 0.999869, 0.000027, 0.999811, 0.000033, 0.999730, 0.000043, 0.999617, 0.000059,
+ 0.999445, 0.000083, 0.999138, 0.000118, 0.998095, 0.000157, 0.993919, 0.000125, 0.991333,
+ 0.000126, 0.989226, 0.000145, 0.986954, 0.000176, 0.983982, 0.000214, 0.979128, 0.000235,
+ 0.973327, 0.000244, 0.967416, 0.000277, 0.959729, 0.000309, 0.949758, 0.000322, 0.939173,
+ 0.000350, 0.929600, 0.000370, 0.921181, 0.000391, 0.911640, 0.000414, 0.900435, 0.000427,
+ 0.888183, 0.000441, 0.874772, 0.000455, 0.859566, 0.000462, 0.843579, 0.000472, 0.826453,
+ 0.000474, 0.809164, 0.000477, 0.792179, 0.000478, 0.773866, 0.000473, 0.754944, 0.000470,
+ 0.735133, 0.000462, 0.714858, 0.000454, 0.694829, 0.000444, 0.674453, 0.000432, 0.653685,
+ 0.000420, 0.632666, 0.000407, 0.611676, 0.000392, 0.591193, 0.000379, 0.570145, 0.000363,
+ 0.549566, 0.000349, 0.529278, 0.000334, 0.509026, 0.000318, 0.489186, 0.000304, 0.469662,
+ 0.000289, 0.450691, 0.000275, 0.431841, 0.000261, 0.413752, 0.000248, 0.395951, 0.000235,
+ 0.378633, 0.000222, 0.361940, 0.000211, 0.345599, 0.000198, 0.329999, 0.000188, 1.000000,
+ 0.000027, 1.000000, 0.000027, 1.000000, 0.000027, 0.999999, 0.000027, 0.999998, 0.000027,
+ 0.999994, 0.000027, 0.999988, 0.000028, 0.999977, 0.000029, 0.999961, 0.000030, 0.999937,
+ 0.000032, 0.999904, 0.000036, 0.999854, 0.000041, 0.999790, 0.000049, 0.999699, 0.000062,
+ 0.999572, 0.000082, 0.999381, 0.000112, 0.999016, 0.000154, 0.997437, 0.000188, 0.993545,
+ 0.000156, 0.991135, 0.000161, 0.989157, 0.000188, 0.986874, 0.000226, 0.983714, 0.000269,
+ 0.978301, 0.000277, 0.973227, 0.000303, 0.967317, 0.000342, 0.959477, 0.000371, 0.950012,
+ 0.000393, 0.939484, 0.000428, 0.928135, 0.000444, 0.919819, 0.000473, 0.910049, 0.000492,
+ 0.899181, 0.000513, 0.886881, 0.000524, 0.873590, 0.000540, 0.858613, 0.000547, 0.842809,
+ 0.000555, 0.825727, 0.000558, 0.808086, 0.000558, 0.790728, 0.000556, 0.772987, 0.000553,
+ 0.754100, 0.000544, 0.734669, 0.000536, 0.714411, 0.000523, 0.694196, 0.000512, 0.674252,
+ 0.000497, 0.653570, 0.000481, 0.632999, 0.000467, 0.611994, 0.000449, 0.591604, 0.000432,
+ 0.571134, 0.000415, 0.550528, 0.000396, 0.530292, 0.000379, 0.510364, 0.000361, 0.490749,
+ 0.000344, 0.471266, 0.000328, 0.452462, 0.000311, 0.433907, 0.000295, 0.415659, 0.000279,
+ 0.398138, 0.000265, 0.380833, 0.000250, 0.364247, 0.000236, 0.348041, 0.000223, 0.332389,
+ 0.000211, 1.000000, 0.000042, 1.000000, 0.000042, 1.000000, 0.000042, 0.999999, 0.000042,
+ 0.999997, 0.000042, 0.999993, 0.000043, 0.999986, 0.000043, 0.999974, 0.000044, 0.999956,
+ 0.000046, 0.999930, 0.000049, 0.999892, 0.000054, 0.999838, 0.000061, 0.999767, 0.000072,
+ 0.999666, 0.000088, 0.999525, 0.000113, 0.999311, 0.000150, 0.998865, 0.000200, 0.996278,
+ 0.000211, 0.992956, 0.000190, 0.991017, 0.000210, 0.989055, 0.000244, 0.986741, 0.000290,
+ 0.983288, 0.000334, 0.977784, 0.000340, 0.973037, 0.000378, 0.967181, 0.000424, 0.958971,
+ 0.000444, 0.950093, 0.000483, 0.939552, 0.000518, 0.927678, 0.000539, 0.918278, 0.000569,
+ 0.908449, 0.000589, 0.897713, 0.000612, 0.885533, 0.000626, 0.872131, 0.000639, 0.857517,
+ 0.000647, 0.841796, 0.000652, 0.824726, 0.000654, 0.807297, 0.000656, 0.789058, 0.000647,
+ 0.771890, 0.000644, 0.753082, 0.000630, 0.734100, 0.000622, 0.714094, 0.000605, 0.693839,
+ 0.000589, 0.673891, 0.000573, 0.653565, 0.000553, 0.633326, 0.000533, 0.612582, 0.000515,
+ 0.592050, 0.000493, 0.571918, 0.000472, 0.551572, 0.000452, 0.531553, 0.000430, 0.511750,
+ 0.000410, 0.492380, 0.000390, 0.473143, 0.000370, 0.454230, 0.000351, 0.435963, 0.000332,
+ 0.417870, 0.000315, 0.400387, 0.000297, 0.383332, 0.000281, 0.366665, 0.000265, 0.350633,
+ 0.000251, 0.334964, 0.000236, 1.000000, 0.000064, 1.000000, 0.000064, 1.000000, 0.000064,
+ 0.999999, 0.000064, 0.999997, 0.000065, 0.999994, 0.000065, 0.999985, 0.000066, 0.999972,
+ 0.000068, 0.999952, 0.000070, 0.999922, 0.000074, 0.999880, 0.000080, 0.999820, 0.000090,
+ 0.999741, 0.000104, 0.999629, 0.000125, 0.999474, 0.000156, 0.999229, 0.000201, 0.998662,
+ 0.000259, 0.995299, 0.000245, 0.992732, 0.000245, 0.990847, 0.000273, 0.988911, 0.000316,
+ 0.986540, 0.000372, 0.982636, 0.000410, 0.977346, 0.000422, 0.972909, 0.000476, 0.966821,
+ 0.000522, 0.958686, 0.000545, 0.949754, 0.000589, 0.939184, 0.000620, 0.927505, 0.000654,
+ 0.916606, 0.000682, 0.906707, 0.000704, 0.895937, 0.000726, 0.883913, 0.000744, 0.870642,
+ 0.000755, 0.856241, 0.000764, 0.840690, 0.000771, 0.823728, 0.000766, 0.806481, 0.000768,
+ 0.787924, 0.000754, 0.770588, 0.000750, 0.751991, 0.000732, 0.733407, 0.000718, 0.713688,
+ 0.000701, 0.693595, 0.000679, 0.673426, 0.000657, 0.653590, 0.000636, 0.633576, 0.000612,
+ 0.613144, 0.000586, 0.592711, 0.000563, 0.572722, 0.000538, 0.552762, 0.000513, 0.532985,
+ 0.000490, 0.513219, 0.000464, 0.493992, 0.000442, 0.475090, 0.000419, 0.456287, 0.000397,
+ 0.438152, 0.000376, 0.420294, 0.000355, 0.402749, 0.000335, 0.385879, 0.000316, 0.369352,
+ 0.000298, 0.353301, 0.000281, 0.337781, 0.000265, 1.000000, 0.000097, 1.000000, 0.000097,
+ 1.000000, 0.000097, 0.999999, 0.000097, 0.999997, 0.000097, 0.999993, 0.000098, 0.999984,
+ 0.000099, 0.999969, 0.000101, 0.999946, 0.000105, 0.999913, 0.000110, 0.999868, 0.000118,
+ 0.999801, 0.000130, 0.999712, 0.000149, 0.999589, 0.000175, 0.999416, 0.000214, 0.999136,
+ 0.000269, 0.998367, 0.000333, 0.994701, 0.000305, 0.992497, 0.000318, 0.990608, 0.000354,
+ 0.988715, 0.000409, 0.986241, 0.000473, 0.981696, 0.000495, 0.977097, 0.000533, 0.972583,
+ 0.000594, 0.966142, 0.000637, 0.958230, 0.000670, 0.949677, 0.000719, 0.939226, 0.000751,
+ 0.927501, 0.000793, 0.915199, 0.000820, 0.904980, 0.000848, 0.894243, 0.000869, 0.882154,
+ 0.000884, 0.869161, 0.000898, 0.854751, 0.000901, 0.839368, 0.000907, 0.822874, 0.000902,
+ 0.805514, 0.000897, 0.787160, 0.000882, 0.769061, 0.000870, 0.751000, 0.000852, 0.732614,
+ 0.000831, 0.713171, 0.000807, 0.693472, 0.000783, 0.673528, 0.000756, 0.653397, 0.000727,
+ 0.633781, 0.000700, 0.613877, 0.000671, 0.593506, 0.000640, 0.573667, 0.000614, 0.553932,
+ 0.000583, 0.534345, 0.000554, 0.515042, 0.000528, 0.495674, 0.000499, 0.477132, 0.000474,
+ 0.458609, 0.000448, 0.440354, 0.000424, 0.422765, 0.000400, 0.405472, 0.000378, 0.388482,
+ 0.000355, 0.372191, 0.000336, 0.356099, 0.000315, 0.340737, 0.000298, 1.000000, 0.000143,
+ 1.000000, 0.000143, 1.000000, 0.000143, 0.999999, 0.000144, 0.999996, 0.000144, 0.999991,
+ 0.000145, 0.999981, 0.000147, 0.999966, 0.000149, 0.999941, 0.000154, 0.999905, 0.000161,
+ 0.999852, 0.000172, 0.999780, 0.000187, 0.999681, 0.000210, 0.999546, 0.000244, 0.999352,
+ 0.000292, 0.999027, 0.000357, 0.997886, 0.000422, 0.994190, 0.000385, 0.992140, 0.000410,
+ 0.990274, 0.000456, 0.988455, 0.000527, 0.985804, 0.000598, 0.981030, 0.000613, 0.976674,
+ 0.000668, 0.972021, 0.000737, 0.965274, 0.000774, 0.958046, 0.000831, 0.949333, 0.000876,
+ 0.939135, 0.000917, 0.927119, 0.000952, 0.914690, 0.000991, 0.903006, 0.001013, 0.892368,
+ 0.001038, 0.880231, 0.001050, 0.867432, 0.001063, 0.853208, 0.001068, 0.837956, 0.001065,
+ 0.821772, 0.001059, 0.804328, 0.001047, 0.786465, 0.001032, 0.768004, 0.001011, 0.749720,
+ 0.000986, 0.731682, 0.000963, 0.712813, 0.000932, 0.693139, 0.000899, 0.673566, 0.000870,
+ 0.653483, 0.000836, 0.633891, 0.000800, 0.614433, 0.000767, 0.594586, 0.000732, 0.574769,
+ 0.000696, 0.555149, 0.000664, 0.535898, 0.000630, 0.516753, 0.000596, 0.497816, 0.000567,
+ 0.479034, 0.000534, 0.460975, 0.000507, 0.442935, 0.000477, 0.425263, 0.000451, 0.408248,
+ 0.000425, 0.391339, 0.000400, 0.375130, 0.000378, 0.359172, 0.000354, 0.343876, 0.000335,
+ 1.000000, 0.000209, 1.000000, 0.000209, 1.000000, 0.000209, 0.999999, 0.000209, 0.999996,
+ 0.000210, 0.999991, 0.000211, 0.999979, 0.000213, 0.999963, 0.000217, 0.999933, 0.000223,
+ 0.999894, 0.000232, 0.999837, 0.000246, 0.999756, 0.000266, 0.999648, 0.000295, 0.999499,
+ 0.000337, 0.999283, 0.000396, 0.998896, 0.000474, 0.997006, 0.000520, 0.993819, 0.000497,
+ 0.991632, 0.000524, 0.989875, 0.000587, 0.988109, 0.000676, 0.985155, 0.000748, 0.980479,
+ 0.000769, 0.976271, 0.000841, 0.971347, 0.000911, 0.964528, 0.000953, 0.957632, 0.001022,
+ 0.948681, 0.001061, 0.938716, 0.001119, 0.926629, 0.001148, 0.914025, 0.001190, 0.901026,
+ 0.001212, 0.890358, 0.001239, 0.878283, 0.001253, 0.865459, 0.001255, 0.851407, 0.001261,
+ 0.836276, 0.001248, 0.820436, 0.001244, 0.803253, 0.001221, 0.785562, 0.001201, 0.767180,
+ 0.001178, 0.748551, 0.001143, 0.730564, 0.001109, 0.712253, 0.001076, 0.692867, 0.001036,
+ 0.673695, 0.000997, 0.653912, 0.000957, 0.634129, 0.000917, 0.615004, 0.000874, 0.595587,
+ 0.000833, 0.575965, 0.000795, 0.556600, 0.000752, 0.537428, 0.000716, 0.518623, 0.000677,
+ 0.499964, 0.000641, 0.481356, 0.000606, 0.463279, 0.000570, 0.445673, 0.000540, 0.428032,
+ 0.000507, 0.411112, 0.000480, 0.394444, 0.000451, 0.378247, 0.000424, 0.362415, 0.000399,
+ 0.347103, 0.000375, 1.000000, 0.000301, 1.000000, 0.000301, 1.000000, 0.000301, 0.999998,
+ 0.000301, 0.999996, 0.000302, 0.999989, 0.000303, 0.999977, 0.000306, 0.999958, 0.000311,
+ 0.999927, 0.000319, 0.999884, 0.000331, 0.999820, 0.000348, 0.999733, 0.000374, 0.999613,
+ 0.000410, 0.999447, 0.000462, 0.999204, 0.000533, 0.998725, 0.000625, 0.995871, 0.000632,
+ 0.993194, 0.000632, 0.991541, 0.000689, 0.989773, 0.000767, 0.987647, 0.000864, 0.984193,
+ 0.000922, 0.980016, 0.000971, 0.975859, 0.001060, 0.970514, 0.001122, 0.963625, 0.001172,
+ 0.956959, 0.001252, 0.947956, 0.001294, 0.938090, 0.001359, 0.926590, 0.001393, 0.913829,
+ 0.001433, 0.900050, 0.001458, 0.888129, 0.001475, 0.876070, 0.001488, 0.863461, 0.001487,
+ 0.849594, 0.001489, 0.834531, 0.001465, 0.819030, 0.001458, 0.802122, 0.001430, 0.784450,
+ 0.001397, 0.766434, 0.001363, 0.747816, 0.001326, 0.729519, 0.001283, 0.711454, 0.001238,
+ 0.692699, 0.001191, 0.673723, 0.001146, 0.654386, 0.001096, 0.634673, 0.001046, 0.615554,
+ 0.001000, 0.596462, 0.000948, 0.577385, 0.000902, 0.558257, 0.000856, 0.539200, 0.000810,
+ 0.520543, 0.000769, 0.502206, 0.000724, 0.484020, 0.000686, 0.465779, 0.000645, 0.448455,
+ 0.000610, 0.431091, 0.000572, 0.414147, 0.000540, 0.397650, 0.000507, 0.381576, 0.000478,
+ 0.365881, 0.000448, 0.350582, 0.000421, 1.000000, 0.000427, 1.000000, 0.000427, 1.000000,
+ 0.000427, 0.999998, 0.000428, 0.999995, 0.000429, 0.999988, 0.000431, 0.999976, 0.000434,
+ 0.999952, 0.000441, 0.999919, 0.000451, 0.999871, 0.000466, 0.999801, 0.000488, 0.999704,
+ 0.000520, 0.999572, 0.000566, 0.999389, 0.000629, 0.999114, 0.000715, 0.998488, 0.000819,
+ 0.995234, 0.000804, 0.993021, 0.000830, 0.991407, 0.000903, 0.989625, 0.000997, 0.987064,
+ 0.001097, 0.983265, 0.001144, 0.979535, 0.001227, 0.975224, 0.001326, 0.969574, 0.001381,
+ 0.963021, 0.001459, 0.956046, 0.001528, 0.947136, 0.001582, 0.937313, 0.001635, 0.926073,
+ 0.001684, 0.913121, 0.001716, 0.899165, 0.001742, 0.885891, 0.001761, 0.873783, 0.001764,
+ 0.861331, 0.001762, 0.847569, 0.001753, 0.832785, 0.001728, 0.817442, 0.001702, 0.800613,
+ 0.001666, 0.783597, 0.001629, 0.765710, 0.001583, 0.747021, 0.001531, 0.728593, 0.001480,
+ 0.710661, 0.001428, 0.692426, 0.001369, 0.673623, 0.001311, 0.654940, 0.001256, 0.635448,
+ 0.001195, 0.616221, 0.001138, 0.597531, 0.001082, 0.578795, 0.001027, 0.559892, 0.000971,
+ 0.541307, 0.000920, 0.522608, 0.000868, 0.504484, 0.000821, 0.486603, 0.000773, 0.468802,
+ 0.000730, 0.451172, 0.000685, 0.434348, 0.000648, 0.417445, 0.000606, 0.401077, 0.000572,
+ 0.385039, 0.000536, 0.369483, 0.000504, 0.354272, 0.000473, 1.000000, 0.000600, 1.000000,
+ 0.000600, 1.000000, 0.000600, 0.999998, 0.000600, 0.999994, 0.000601, 0.999987, 0.000604,
+ 0.999972, 0.000609, 0.999949, 0.000617, 0.999912, 0.000630, 0.999857, 0.000649, 0.999781,
+ 0.000677, 0.999674, 0.000717, 0.999528, 0.000773, 0.999326, 0.000850, 0.999009, 0.000953,
+ 0.998112, 0.001064, 0.994496, 0.001022, 0.992806, 0.001086, 0.991211, 0.001176, 0.989415,
+ 0.001290, 0.986499, 0.001390, 0.982679, 0.001445, 0.978839, 0.001540, 0.974295, 0.001644,
+ 0.968784, 0.001715, 0.962324, 0.001803, 0.954956, 0.001864, 0.946240, 0.001938, 0.936517,
+ 0.001982, 0.925186, 0.002030, 0.912520, 0.002066, 0.898441, 0.002078, 0.884394, 0.002099,
+ 0.871273, 0.002087, 0.859057, 0.002087, 0.845243, 0.002055, 0.830723, 0.002029, 0.815801,
+ 0.001995, 0.799140, 0.001942, 0.782372, 0.001888, 0.764820, 0.001837, 0.746586, 0.001774,
+ 0.728100, 0.001706, 0.709842, 0.001641, 0.692019, 0.001574, 0.673640, 0.001503, 0.655277,
+ 0.001435, 0.636438, 0.001364, 0.617364, 0.001299, 0.598603, 0.001230, 0.580195, 0.001166,
+ 0.561786, 0.001104, 0.543377, 0.001041, 0.525093, 0.000984, 0.506791, 0.000927, 0.489291,
+ 0.000874, 0.471811, 0.000822, 0.454435, 0.000775, 0.437493, 0.000727, 0.420977, 0.000684,
+ 0.404729, 0.000644, 0.388756, 0.000603, 0.373344, 0.000568, 0.358191, 0.000532, 1.000000,
+ 0.000832, 1.000000, 0.000832, 1.000000, 0.000832, 0.999998, 0.000833, 0.999995, 0.000834,
+ 0.999985, 0.000838, 0.999969, 0.000844, 0.999944, 0.000854, 0.999903, 0.000870, 0.999843,
+ 0.000894, 0.999759, 0.000929, 0.999643, 0.000978, 0.999480, 0.001047, 0.999255, 0.001140,
+ 0.998885, 0.001262, 0.997405, 0.001359, 0.994240, 0.001336, 0.992458, 0.001409, 0.990929,
+ 0.001523, 0.989116, 0.001659, 0.985624, 0.001741, 0.982003, 0.001821, 0.978336, 0.001945,
+ 0.973184, 0.002027, 0.967800, 0.002122, 0.961348, 0.002214, 0.953841, 0.002282, 0.945340,
+ 0.002357, 0.935552, 0.002406, 0.924064, 0.002444, 0.911827, 0.002476, 0.897731, 0.002484,
+ 0.883409, 0.002499, 0.868625, 0.002467, 0.856529, 0.002465, 0.842999, 0.002424, 0.828505,
+ 0.002374, 0.813825, 0.002326, 0.797813, 0.002267, 0.781097, 0.002197, 0.764038, 0.002124,
+ 0.746067, 0.002048, 0.727687, 0.001967, 0.709571, 0.001888, 0.691503, 0.001805, 0.673673,
+ 0.001718, 0.655732, 0.001641, 0.637399, 0.001559, 0.618616, 0.001476, 0.600050, 0.001401,
+ 0.581713, 0.001324, 0.563546, 0.001250, 0.545605, 0.001182, 0.527559, 0.001112, 0.509764,
+ 0.001050, 0.491930, 0.000986, 0.475011, 0.000929, 0.457878, 0.000873, 0.440979, 0.000820,
+ 0.424613, 0.000772, 0.408549, 0.000722, 0.392771, 0.000680, 0.377317, 0.000637, 0.362352,
+ 0.000598, 1.000000, 0.001143, 1.000000, 0.001143, 0.999999, 0.001143, 0.999998, 0.001144,
+ 0.999994, 0.001146, 0.999984, 0.001150, 0.999967, 0.001158, 0.999937, 0.001171, 0.999894,
+ 0.001191, 0.999828, 0.001220, 0.999735, 0.001263, 0.999606, 0.001324, 0.999426, 0.001407,
+ 0.999173, 0.001519, 0.998730, 0.001661, 0.996243, 0.001702, 0.993779, 0.001728, 0.991900,
+ 0.001811, 0.990524, 0.001960, 0.988680, 0.002120, 0.984663, 0.002176, 0.981457, 0.002306,
+ 0.977608, 0.002440, 0.972215, 0.002513, 0.966798, 0.002629, 0.960241, 0.002714, 0.952489,
+ 0.002784, 0.944127, 0.002854, 0.934282, 0.002910, 0.923271, 0.002946, 0.910803, 0.002963,
+ 0.896705, 0.002968, 0.882380, 0.002966, 0.867116, 0.002932, 0.853636, 0.002894, 0.840469,
+ 0.002847, 0.826390, 0.002786, 0.811759, 0.002716, 0.796113, 0.002632, 0.779518, 0.002546,
+ 0.763142, 0.002460, 0.745464, 0.002365, 0.727491, 0.002265, 0.709414, 0.002164, 0.691396,
+ 0.002071, 0.673680, 0.001971, 0.656049, 0.001870, 0.638188, 0.001776, 0.620177, 0.001685,
+ 0.601506, 0.001589, 0.583620, 0.001506, 0.565496, 0.001418, 0.547890, 0.001337, 0.530323,
+ 0.001260, 0.512795, 0.001186, 0.495199, 0.001115, 0.478101, 0.001049, 0.461511, 0.000984,
+ 0.444879, 0.000926, 0.428424, 0.000867, 0.412495, 0.000814, 0.396975, 0.000764, 0.381614,
+ 0.000716, 0.366732, 0.000672, 1.000000, 0.001555, 1.000000, 0.001555, 1.000000, 0.001555,
+ 0.999998, 0.001556, 0.999994, 0.001559, 0.999983, 0.001564, 0.999963, 0.001573, 0.999932,
+ 0.001589, 0.999882, 0.001614, 0.999810, 0.001650, 0.999708, 0.001703, 0.999565, 0.001777,
+ 0.999368, 0.001877, 0.999081, 0.002010, 0.998520, 0.002172, 0.995490, 0.002174, 0.993252,
+ 0.002224, 0.991727, 0.002350, 0.989951, 0.002506, 0.988029, 0.002688, 0.984029, 0.002750,
+ 0.980683, 0.002898, 0.976554, 0.003033, 0.971390, 0.003133, 0.965544, 0.003237, 0.959120,
+ 0.003334, 0.951183, 0.003404, 0.942974, 0.003475, 0.932642, 0.003504, 0.922158, 0.003545,
+ 0.909404, 0.003539, 0.896071, 0.003544, 0.881206, 0.003499, 0.866077, 0.003473, 0.850930,
+ 0.003415, 0.837703, 0.003334, 0.823878, 0.003249, 0.809449, 0.003163, 0.794379, 0.003064,
+ 0.778138, 0.002950, 0.761997, 0.002841, 0.744938, 0.002721, 0.727212, 0.002607, 0.709549,
+ 0.002489, 0.691704, 0.002368, 0.673689, 0.002252, 0.656453, 0.002138, 0.639128, 0.002022,
+ 0.621512, 0.001914, 0.603598, 0.001810, 0.585590, 0.001705, 0.567852, 0.001609, 0.550300,
+ 0.001514, 0.533033, 0.001425, 0.515942, 0.001340, 0.498814, 0.001260, 0.481595, 0.001182,
+ 0.465117, 0.001112, 0.448865, 0.001041, 0.432711, 0.000977, 0.416822, 0.000919, 0.401272,
+ 0.000858, 0.386226, 0.000807, 0.371321, 0.000755, 1.000000, 0.002096, 1.000000, 0.002096,
+ 1.000000, 0.002096, 0.999997, 0.002097, 0.999991, 0.002100, 0.999979, 0.002107, 0.999959,
+ 0.002118, 0.999925, 0.002138, 0.999870, 0.002168, 0.999791, 0.002213, 0.999677, 0.002277,
+ 0.999521, 0.002365, 0.999301, 0.002485, 0.998977, 0.002642, 0.998191, 0.002817, 0.994801,
+ 0.002785, 0.993091, 0.002888, 0.991571, 0.003039, 0.989700, 0.003216, 0.987023, 0.003373,
+ 0.983289, 0.003461, 0.979892, 0.003637, 0.975111, 0.003736, 0.970351, 0.003884, 0.964131,
+ 0.003971, 0.957747, 0.004081, 0.949536, 0.004135, 0.941372, 0.004203, 0.931049, 0.004228,
+ 0.920647, 0.004250, 0.908033, 0.004228, 0.895028, 0.004220, 0.879968, 0.004150, 0.864875,
+ 0.004088, 0.849180, 0.004009, 0.834934, 0.003912, 0.821397, 0.003801, 0.807135, 0.003680,
+ 0.792363, 0.003552, 0.776661, 0.003411, 0.760705, 0.003281, 0.744408, 0.003140, 0.726994,
+ 0.002991, 0.709598, 0.002850, 0.692112, 0.002712, 0.674435, 0.002572, 0.656760, 0.002434,
+ 0.639982, 0.002304, 0.622983, 0.002178, 0.605471, 0.002050, 0.587960, 0.001938, 0.570463,
+ 0.001820, 0.553058, 0.001715, 0.535894, 0.001611, 0.519089, 0.001514, 0.502454, 0.001421,
+ 0.485681, 0.001335, 0.468935, 0.001250, 0.452951, 0.001173, 0.437139, 0.001102, 0.421446,
+ 0.001031, 0.405951, 0.000966, 0.391003, 0.000908, 0.376198, 0.000848, 1.000000, 0.002801,
+ 1.000000, 0.002801, 0.999999, 0.002801, 0.999997, 0.002802, 0.999992, 0.002806, 0.999979,
+ 0.002814, 0.999956, 0.002828, 0.999916, 0.002852, 0.999857, 0.002889, 0.999768, 0.002943,
+ 0.999645, 0.003019, 0.999470, 0.003125, 0.999229, 0.003267, 0.998852, 0.003450, 0.997558,
+ 0.003611, 0.994417, 0.003590, 0.992824, 0.003724, 0.991344, 0.003907, 0.989337, 0.004104,
+ 0.985811, 0.004210, 0.982772, 0.004375, 0.979001, 0.004551, 0.974102, 0.004645, 0.969197,
+ 0.004806, 0.962759, 0.004878, 0.956207, 0.004982, 0.947909, 0.005034, 0.939596, 0.005075,
+ 0.929642, 0.005098, 0.918807, 0.005085, 0.906921, 0.005056, 0.893312, 0.004988, 0.878933,
+ 0.004913, 0.863986, 0.004826, 0.847936, 0.004708, 0.832253, 0.004569, 0.818619, 0.004427,
+ 0.804788, 0.004277, 0.790241, 0.004119, 0.775162, 0.003948, 0.759463, 0.003774, 0.743598,
+ 0.003610, 0.726970, 0.003436, 0.709646, 0.003264, 0.692770, 0.003097, 0.675371, 0.002936,
+ 0.657863, 0.002777, 0.640772, 0.002617, 0.624441, 0.002474, 0.607497, 0.002331, 0.590438,
+ 0.002190, 0.573224, 0.002066, 0.556168, 0.001935, 0.539232, 0.001825, 0.522352, 0.001707,
+ 0.506172, 0.001606, 0.489842, 0.001505, 0.473463, 0.001409, 0.457266, 0.001326, 0.441609,
+ 0.001238, 0.426348, 0.001163, 0.411002, 0.001089, 0.396045, 0.001019, 0.381448, 0.000956,
+ 1.000000, 0.003712, 1.000000, 0.003712, 1.000000, 0.003713, 0.999997, 0.003714, 0.999990,
+ 0.003719, 0.999977, 0.003728, 0.999950, 0.003745, 0.999908, 0.003774, 0.999843, 0.003818,
+ 0.999745, 0.003883, 0.999608, 0.003974, 0.999415, 0.004100, 0.999143, 0.004267, 0.998700,
+ 0.004476, 0.996363, 0.004553, 0.994021, 0.004611, 0.992372, 0.004764, 0.991007, 0.004991,
+ 0.988767, 0.005197, 0.984872, 0.005284, 0.982004, 0.005489, 0.977714, 0.005644, 0.973076,
+ 0.005769, 0.967565, 0.005892, 0.961384, 0.005996, 0.954435, 0.006060, 0.946303, 0.006113,
+ 0.937662, 0.006120, 0.927867, 0.006122, 0.916475, 0.006048, 0.905410, 0.006031, 0.891591,
+ 0.005922, 0.877573, 0.005789, 0.862511, 0.005666, 0.846861, 0.005515, 0.830680, 0.005338,
+ 0.815725, 0.005155, 0.802321, 0.004966, 0.787826, 0.004754, 0.773454, 0.004560, 0.758224,
+ 0.004347, 0.742650, 0.004144, 0.726729, 0.003937, 0.710155, 0.003736, 0.693312, 0.003537,
+ 0.676530, 0.003344, 0.659444, 0.003160, 0.642051, 0.002978, 0.625758, 0.002806, 0.609615,
+ 0.002643, 0.592919, 0.002485, 0.576298, 0.002333, 0.559489, 0.002195, 0.542891, 0.002054,
+ 0.526255, 0.001934, 0.509853, 0.001807, 0.494131, 0.001698, 0.478114, 0.001591, 0.462274,
+ 0.001490, 0.446412, 0.001395, 0.431274, 0.001310, 0.416350, 0.001224, 0.401476, 0.001148,
+ 0.386993, 0.001076, 1.000000, 0.004882, 1.000000, 0.004882, 1.000000, 0.004883, 0.999997,
+ 0.004885, 0.999988, 0.004890, 0.999974, 0.004901, 0.999946, 0.004922, 0.999897, 0.004956,
+ 0.999825, 0.005009, 0.999718, 0.005086, 0.999565, 0.005194, 0.999352, 0.005341, 0.999046,
+ 0.005535, 0.998492, 0.005770, 0.995564, 0.005785, 0.993339, 0.005864, 0.991834, 0.006060,
+ 0.990496, 0.006333, 0.987826, 0.006519, 0.983830, 0.006608, 0.981090, 0.006855, 0.976131,
+ 0.006958, 0.971922, 0.007142, 0.965901, 0.007214, 0.959606, 0.007320, 0.952504, 0.007358,
+ 0.944365, 0.007385, 0.935652, 0.007380, 0.925813, 0.007336, 0.914397, 0.007231, 0.903257,
+ 0.007140, 0.890015, 0.007001, 0.876014, 0.006828, 0.861436, 0.006656, 0.845752, 0.006445,
+ 0.829169, 0.006216, 0.813435, 0.005978, 0.799701, 0.005757, 0.785726, 0.005499, 0.771520,
+ 0.005250, 0.756830, 0.004996, 0.741951, 0.004754, 0.726367, 0.004508, 0.710537, 0.004268,
+ 0.693965, 0.004035, 0.677724, 0.003808, 0.661170, 0.003594, 0.644274, 0.003384, 0.627449,
+ 0.003182, 0.611645, 0.002997, 0.595614, 0.002810, 0.579426, 0.002643, 0.563016, 0.002475,
+ 0.546728, 0.002326, 0.530539, 0.002178, 0.514164, 0.002042, 0.498344, 0.001914, 0.482957,
+ 0.001792, 0.467336, 0.001677, 0.451994, 0.001576, 0.436514, 0.001471, 0.421780, 0.001380,
+ 0.407271, 0.001292, 0.392822, 0.001210, 1.000000, 0.006374, 1.000000, 0.006374, 0.999999,
+ 0.006375, 0.999996, 0.006377, 0.999987, 0.006384, 0.999971, 0.006397, 0.999939, 0.006421,
+ 0.999888, 0.006462, 0.999807, 0.006524, 0.999689, 0.006615, 0.999520, 0.006742, 0.999283,
+ 0.006913, 0.998936, 0.007136, 0.998165, 0.007385, 0.994847, 0.007344, 0.993182, 0.007500,
+ 0.991665, 0.007725, 0.989708, 0.007976, 0.986663, 0.008130, 0.983288, 0.008304, 0.980104,
+ 0.008535, 0.974855, 0.008610, 0.970450, 0.008791, 0.964509, 0.008864, 0.957594, 0.008903,
+ 0.950546, 0.008933, 0.942225, 0.008901, 0.933365, 0.008868, 0.923202, 0.008732, 0.912605,
+ 0.008631, 0.901099, 0.008474, 0.888177, 0.008258, 0.873955, 0.008018, 0.860091, 0.007790,
+ 0.844340, 0.007525, 0.828517, 0.007241, 0.812390, 0.006938, 0.797210, 0.006648, 0.783489,
+ 0.006348, 0.769514, 0.006042, 0.755419, 0.005736, 0.741083, 0.005444, 0.726059, 0.005155,
+ 0.710809, 0.004871, 0.695052, 0.004598, 0.678886, 0.004334, 0.663042, 0.004080, 0.646634,
+ 0.003843, 0.630117, 0.003609, 0.613804, 0.003389, 0.598338, 0.003185, 0.582687, 0.002984,
+ 0.566809, 0.002801, 0.550817, 0.002623, 0.534937, 0.002458, 0.519151, 0.002306, 0.503118,
+ 0.002155, 0.487723, 0.002020, 0.472725, 0.001894, 0.457599, 0.001771, 0.442558, 0.001658,
+ 0.427624, 0.001555, 0.413171, 0.001453, 0.399122, 0.001365, 1.000000, 0.008265, 1.000000,
+ 0.008265, 1.000000, 0.008266, 0.999996, 0.008268, 0.999987, 0.008276, 0.999967, 0.008292,
+ 0.999933, 0.008320, 0.999876, 0.008368, 0.999786, 0.008440, 0.999655, 0.008546, 0.999468,
+ 0.008693, 0.999203, 0.008891, 0.998803, 0.009144, 0.997480, 0.009358, 0.994446, 0.009333,
+ 0.992920, 0.009531, 0.991414, 0.009789, 0.989049, 0.010023, 0.985820, 0.010166, 0.982441,
+ 0.010358, 0.978595, 0.010529, 0.973495, 0.010627, 0.968405, 0.010726, 0.962717, 0.010823,
+ 0.955478, 0.010810, 0.948275, 0.010791, 0.940006, 0.010716, 0.930831, 0.010631, 0.920648,
+ 0.010408, 0.910205, 0.010231, 0.898445, 0.010005, 0.885986, 0.009719, 0.872204, 0.009407,
+ 0.858436, 0.009109, 0.843454, 0.008766, 0.827437, 0.008398, 0.811488, 0.008037, 0.796039,
+ 0.007674, 0.781083, 0.007310, 0.767642, 0.006940, 0.753901, 0.006575, 0.740131, 0.006227,
+ 0.725845, 0.005884, 0.710991, 0.005556, 0.696002, 0.005231, 0.680461, 0.004925, 0.664875,
+ 0.004635, 0.649273, 0.004354, 0.633020, 0.004087, 0.617050, 0.003841, 0.601154, 0.003596,
+ 0.586008, 0.003376, 0.570699, 0.003160, 0.555166, 0.002960, 0.539645, 0.002776, 0.524159,
+ 0.002595, 0.508682, 0.002433, 0.493163, 0.002279, 0.478004, 0.002131, 0.463470, 0.001995,
+ 0.448778, 0.001870, 0.434105, 0.001747, 0.419576, 0.001639, 0.405541, 0.001533, 1.000000,
+ 0.010646, 1.000000, 0.010646, 0.999999, 0.010647, 0.999995, 0.010650, 0.999985, 0.010659,
+ 0.999964, 0.010677, 0.999925, 0.010711, 0.999861, 0.010766, 0.999763, 0.010850, 0.999616,
+ 0.010972, 0.999408, 0.011141, 0.999112, 0.011366, 0.998637, 0.011647, 0.996223, 0.011723,
+ 0.994006, 0.011806, 0.992444, 0.012025, 0.991028, 0.012331, 0.988030, 0.012495, 0.984816,
+ 0.012654, 0.981399, 0.012854, 0.977085, 0.012969, 0.972154, 0.013091, 0.966617, 0.013117,
+ 0.960628, 0.013158, 0.953295, 0.013109, 0.945750, 0.012997, 0.937654, 0.012880, 0.927716,
+ 0.012648, 0.917932, 0.012389, 0.907719, 0.012131, 0.895840, 0.011801, 0.883526, 0.011414,
+ 0.870301, 0.011007, 0.856272, 0.010602, 0.842251, 0.010194, 0.826466, 0.009733, 0.810859,
+ 0.009285, 0.795051, 0.008833, 0.780053, 0.008403, 0.765750, 0.007964, 0.752298, 0.007525,
+ 0.739153, 0.007115, 0.725514, 0.006704, 0.711473, 0.006327, 0.696936, 0.005952, 0.682126,
+ 0.005592, 0.667027, 0.005254, 0.651875, 0.004938, 0.636463, 0.004628, 0.620641, 0.004339,
+ 0.604931, 0.004070, 0.589549, 0.003809, 0.574712, 0.003570, 0.559775, 0.003345, 0.544514,
+ 0.003125, 0.529555, 0.002932, 0.514402, 0.002742, 0.499302, 0.002566, 0.484114, 0.002399,
+ 0.469308, 0.002251, 0.455133, 0.002102, 0.440939, 0.001973, 0.426627, 0.001844, 0.412509,
+ 0.001725, 1.000000, 0.013628, 1.000000, 0.013628, 0.999999, 0.013629, 0.999995, 0.013633,
+ 0.999983, 0.013643, 0.999960, 0.013664, 0.999917, 0.013702, 0.999846, 0.013765, 0.999736,
+ 0.013862, 0.999573, 0.014001, 0.999340, 0.014193, 0.999004, 0.014446, 0.998407, 0.014749,
+ 0.995464, 0.014731, 0.993328, 0.014828, 0.991799, 0.015080, 0.990397, 0.015432, 0.986835,
+ 0.015501, 0.983938, 0.015731, 0.980154, 0.015875, 0.975659, 0.015958, 0.970171, 0.015983,
+ 0.964803, 0.016008, 0.958366, 0.015948, 0.950613, 0.015800, 0.942874, 0.015584, 0.935005,
+ 0.015429, 0.924991, 0.015074, 0.914814, 0.014676, 0.904743, 0.014310, 0.893216, 0.013869,
+ 0.880769, 0.013371, 0.868136, 0.012861, 0.854690, 0.012340, 0.840593, 0.011809, 0.825808,
+ 0.011253, 0.810090, 0.010710, 0.795040, 0.010164, 0.779757, 0.009640, 0.764697, 0.009119,
+ 0.750913, 0.008595, 0.738175, 0.008116, 0.725242, 0.007645, 0.711864, 0.007189, 0.698009,
+ 0.006758, 0.683841, 0.006350, 0.669391, 0.005955, 0.654731, 0.005587, 0.639805, 0.005236,
+ 0.624789, 0.004908, 0.609325, 0.004594, 0.593975, 0.004303, 0.578983, 0.004030, 0.564442,
+ 0.003771, 0.549835, 0.003532, 0.535039, 0.003303, 0.520403, 0.003089, 0.505687, 0.002893,
+ 0.490939, 0.002708, 0.476233, 0.002534, 0.461624, 0.002371, 0.447833, 0.002221, 0.433992,
+ 0.002076, 0.420147, 0.001950, 1.000000, 0.017341, 1.000000, 0.017342, 0.999999, 0.017343,
+ 0.999995, 0.017347, 0.999983, 0.017358, 0.999954, 0.017382, 0.999908, 0.017426, 0.999828,
+ 0.017497, 0.999705, 0.017606, 0.999524, 0.017763, 0.999263, 0.017978, 0.998878, 0.018258,
+ 0.998012, 0.018555, 0.994614, 0.018426, 0.993132, 0.018638, 0.991563, 0.018907, 0.989298,
+ 0.019158, 0.986036, 0.019252, 0.982558, 0.019406, 0.978531, 0.019486, 0.974198, 0.019585,
+ 0.968148, 0.019475, 0.962565, 0.019428, 0.956041, 0.019299, 0.947749, 0.018989, 0.940180,
+ 0.018704, 0.931650, 0.018346, 0.921798, 0.017878, 0.911573, 0.017362, 0.901569, 0.016848,
+ 0.890341, 0.016265, 0.877835, 0.015620, 0.865472, 0.014952, 0.852905, 0.014327, 0.838906,
+ 0.013664, 0.824888, 0.012990, 0.809977, 0.012322, 0.794697, 0.011657, 0.780028, 0.011031,
+ 0.765124, 0.010424, 0.750411, 0.009822, 0.737264, 0.009244, 0.724799, 0.008687, 0.712253,
+ 0.008165, 0.699267, 0.007673, 0.685618, 0.007197, 0.671736, 0.006739, 0.657777, 0.006319,
+ 0.643497, 0.005924, 0.628890, 0.005539, 0.614299, 0.005193, 0.599197, 0.004860, 0.584175,
+ 0.004544, 0.569541, 0.004258, 0.555193, 0.003979, 0.540947, 0.003724, 0.526593, 0.003486,
+ 0.512335, 0.003261, 0.498017, 0.003051, 0.483609, 0.002855, 0.469368, 0.002675, 0.455037,
+ 0.002499, 0.441493, 0.002348, 0.428147, 0.002199, 1.000000, 0.021942, 1.000000, 0.021942,
+ 0.999998, 0.021943, 0.999993, 0.021948, 0.999981, 0.021961, 0.999949, 0.021988, 0.999896,
+ 0.022037, 0.999808, 0.022117, 0.999670, 0.022238, 0.999466, 0.022412, 0.999174, 0.022649,
+ 0.998725, 0.022953, 0.996979, 0.023112, 0.994317, 0.023074, 0.992781, 0.023290, 0.991191,
+ 0.023573, 0.987787, 0.023615, 0.985092, 0.023799, 0.981121, 0.023855, 0.976924, 0.023871,
+ 0.972180, 0.023870, 0.965956, 0.023660, 0.959998, 0.023474, 0.953245, 0.023228, 0.944445,
+ 0.022697, 0.937087, 0.022353, 0.928341, 0.021814, 0.918400, 0.021152, 0.907959, 0.020455,
+ 0.898080, 0.019767, 0.887047, 0.018992, 0.875221, 0.018208, 0.862690, 0.017358, 0.850735,
+ 0.016572, 0.837545, 0.015752, 0.823639, 0.014948, 0.809699, 0.014143, 0.794797, 0.013353,
+ 0.780578, 0.012619, 0.766019, 0.011891, 0.751447, 0.011184, 0.737275, 0.010514, 0.724545,
+ 0.009873, 0.712644, 0.009266, 0.700432, 0.008690, 0.687664, 0.008147, 0.674288, 0.007630,
+ 0.660966, 0.007144, 0.647264, 0.006685, 0.633431, 0.006266, 0.619133, 0.005856, 0.604935,
+ 0.005482, 0.590236, 0.005133, 0.575473, 0.004791, 0.561228, 0.004489, 0.547054, 0.004202,
+ 0.533175, 0.003929, 0.519163, 0.003674, 0.505328, 0.003441, 0.491446, 0.003220, 0.477356,
+ 0.003013, 0.463560, 0.002826, 0.449623, 0.002650, 0.436068, 0.002470, 1.000000, 0.027613,
+ 1.000000, 0.027614, 0.999998, 0.027615, 0.999993, 0.027620, 0.999976, 0.027634, 0.999945,
+ 0.027664, 0.999884, 0.027718, 0.999784, 0.027806, 0.999630, 0.027939, 0.999401, 0.028130,
+ 0.999066, 0.028386, 0.998524, 0.028703, 0.995702, 0.028626, 0.993593, 0.028673, 0.992067,
+ 0.028899, 0.990548, 0.029213, 0.986775, 0.029130, 0.984054, 0.029310, 0.979481, 0.029188,
+ 0.975297, 0.029160, 0.969810, 0.028954, 0.963524, 0.028628, 0.957398, 0.028313, 0.950088,
+ 0.027847, 0.941538, 0.027180, 0.933332, 0.026539, 0.924392, 0.025778, 0.914581, 0.024916,
+ 0.904347, 0.024024, 0.894324, 0.023123, 0.883724, 0.022153, 0.872207, 0.021136, 0.859927,
+ 0.020105, 0.848373, 0.019126, 0.836023, 0.018131, 0.822890, 0.017172, 0.809324, 0.016220,
+ 0.795361, 0.015262, 0.781253, 0.014390, 0.767338, 0.013533, 0.753156, 0.012724, 0.739122,
+ 0.011945, 0.725358, 0.011205, 0.712949, 0.010487, 0.701621, 0.009840, 0.689703, 0.009215,
+ 0.677216, 0.008625, 0.664217, 0.008069, 0.651370, 0.007559, 0.638000, 0.007057, 0.624530,
+ 0.006613, 0.610601, 0.006184, 0.596760, 0.005780, 0.582433, 0.005409, 0.568026, 0.005061,
+ 0.554140, 0.004735, 0.540178, 0.004429, 0.526513, 0.004144, 0.512954, 0.003882, 0.499403,
+ 0.003629, 0.486026, 0.003408, 0.472345, 0.003186, 0.458828, 0.002976, 0.445379, 0.002794,
+ 1.000000, 0.034572, 1.000000, 0.034572, 0.999999, 0.034573, 0.999991, 0.034579, 0.999974,
+ 0.034594, 0.999937, 0.034626, 0.999869, 0.034685, 0.999757, 0.034780, 0.999582, 0.034923,
+ 0.999322, 0.035126, 0.998939, 0.035397, 0.998219, 0.035702, 0.994974, 0.035473, 0.993201,
+ 0.035562, 0.991573, 0.035764, 0.989301, 0.035925, 0.985712, 0.035802, 0.982411, 0.035835,
+ 0.977827, 0.035617, 0.973278, 0.035440, 0.967397, 0.035048, 0.960696, 0.034480, 0.954349,
+ 0.033986, 0.946066, 0.033132, 0.938012, 0.032359, 0.929413, 0.031441, 0.920355, 0.030410,
+ 0.910586, 0.029278, 0.900609, 0.028139, 0.890093, 0.026910, 0.880013, 0.025727, 0.869001,
+ 0.024467, 0.857510, 0.023225, 0.845820, 0.022012, 0.834383, 0.020827, 0.822158, 0.019663,
+ 0.809056, 0.018531, 0.795832, 0.017417, 0.782547, 0.016376, 0.768900, 0.015391, 0.755526,
+ 0.014449, 0.741681, 0.013537, 0.728178, 0.012696, 0.714642, 0.011881, 0.702756, 0.011116,
+ 0.691750, 0.010415, 0.680159, 0.009744, 0.668073, 0.009119, 0.655405, 0.008514, 0.642921,
+ 0.007976, 0.629993, 0.007451, 0.616828, 0.006970, 0.603305, 0.006524, 0.589833, 0.006102,
+ 0.575945, 0.005708, 0.561745, 0.005334, 0.548277, 0.005000, 0.534467, 0.004676, 0.521032,
+ 0.004381, 0.507877, 0.004103, 0.494654, 0.003836, 0.481592, 0.003587, 0.468509, 0.003373,
+ 0.455293, 0.003162, 1.000000, 0.043070, 1.000000, 0.043070, 0.999998, 0.043071, 0.999991,
+ 0.043077, 0.999970, 0.043094, 0.999928, 0.043128, 0.999852, 0.043189, 0.999724, 0.043290,
+ 0.999527, 0.043440, 0.999230, 0.043651, 0.998783, 0.043925, 0.997507, 0.044110, 0.994418,
+ 0.043823, 0.992864, 0.043940, 0.991127, 0.044096, 0.987331, 0.043841, 0.984819, 0.043899,
+ 0.980384, 0.043591, 0.975846, 0.043254, 0.970748, 0.042829, 0.964303, 0.042153, 0.957720,
+ 0.041411, 0.950747, 0.040589, 0.942533, 0.039489, 0.934045, 0.038354, 0.924942, 0.037057,
+ 0.915811, 0.035699, 0.906120, 0.034240, 0.896434, 0.032808, 0.886021, 0.031288, 0.876081,
+ 0.029778, 0.865608, 0.028233, 0.854924, 0.026749, 0.843607, 0.025260, 0.832456, 0.023821,
+ 0.821342, 0.022468, 0.809303, 0.021130, 0.796468, 0.019839, 0.784046, 0.018623, 0.771262,
+ 0.017456, 0.758118, 0.016381, 0.745075, 0.015329, 0.731926, 0.014365, 0.718630, 0.013436,
+ 0.705414, 0.012560, 0.693792, 0.011751, 0.683108, 0.011002, 0.671830, 0.010276, 0.660150,
+ 0.009620, 0.647907, 0.008980, 0.635734, 0.008408, 0.623208, 0.007862, 0.610438, 0.007350,
+ 0.597345, 0.006877, 0.584138, 0.006435, 0.570700, 0.006022, 0.556966, 0.005632, 0.543607,
+ 0.005283, 0.530213, 0.004940, 0.516912, 0.004623, 0.503916, 0.004331, 0.491146, 0.004069,
+ 0.478439, 0.003814, 0.465834, 0.003580, 1.000000, 0.053404, 1.000000, 0.053404, 0.999998,
+ 0.053406, 0.999989, 0.053412, 0.999968, 0.053428, 0.999918, 0.053463, 0.999830, 0.053526,
+ 0.999685, 0.053628, 0.999461, 0.053780, 0.999119, 0.053990, 0.998582, 0.054252, 0.995919,
+ 0.054032, 0.993735, 0.053891, 0.992126, 0.053956, 0.990266, 0.054040, 0.986317, 0.053606,
+ 0.983213, 0.053442, 0.978303, 0.052862, 0.973665, 0.052336, 0.968091, 0.051617, 0.961026,
+ 0.050543, 0.954333, 0.049523, 0.946372, 0.048170, 0.938254, 0.046767, 0.929516, 0.045234,
+ 0.920106, 0.043508, 0.910899, 0.041740, 0.901532, 0.039939, 0.891919, 0.038090, 0.882006,
+ 0.036234, 0.871965, 0.034344, 0.862145, 0.032483, 0.852058, 0.030668, 0.841610, 0.028910,
+ 0.830806, 0.027208, 0.820476, 0.025609, 0.809514, 0.024039, 0.797865, 0.022538, 0.785621,
+ 0.021123, 0.773765, 0.019791, 0.761629, 0.018523, 0.748891, 0.017336, 0.736437, 0.016230,
+ 0.723707, 0.015178, 0.710606, 0.014179, 0.698019, 0.013259, 0.686203, 0.012389, 0.675692,
+ 0.011598, 0.664826, 0.010833, 0.653490, 0.010135, 0.641774, 0.009478, 0.629794, 0.008861,
+ 0.617647, 0.008285, 0.605340, 0.007753, 0.592718, 0.007260, 0.579746, 0.006797, 0.566763,
+ 0.006361, 0.553515, 0.005952, 0.540118, 0.005569, 0.527325, 0.005231, 0.514265, 0.004907,
+ 0.501406, 0.004603, 0.488922, 0.004312, 0.476541, 0.004047, 1.000000, 0.065918, 1.000000,
+ 0.065919, 0.999998, 0.065920, 0.999988, 0.065926, 0.999963, 0.065942, 0.999907, 0.065976,
+ 0.999806, 0.066038, 0.999639, 0.066136, 0.999378, 0.066281, 0.998985, 0.066478, 0.998285,
+ 0.066691, 0.995071, 0.066199, 0.993172, 0.066045, 0.991438, 0.066010, 0.988428, 0.065687,
+ 0.985218, 0.065291, 0.981128, 0.064711, 0.976015, 0.063849, 0.970970, 0.062993, 0.964582,
+ 0.061793, 0.957383, 0.060363, 0.949969, 0.058813, 0.941843, 0.057027, 0.933624, 0.055189,
+ 0.924543, 0.053122, 0.914919, 0.050890, 0.905773, 0.048642, 0.896434, 0.046336, 0.887195,
+ 0.044062, 0.877706, 0.041780, 0.867719, 0.039450, 0.858587, 0.037243, 0.849317, 0.035096,
+ 0.839585, 0.032985, 0.829856, 0.031003, 0.819589, 0.029095, 0.809714, 0.027274, 0.799340,
+ 0.025563, 0.788224, 0.023918, 0.776619, 0.022383, 0.765210, 0.020930, 0.753716, 0.019579,
+ 0.741564, 0.018300, 0.729413, 0.017126, 0.717146, 0.015993, 0.704360, 0.014949, 0.692190,
+ 0.013968, 0.680289, 0.013058, 0.669611, 0.012220, 0.659113, 0.011417, 0.648148, 0.010673,
+ 0.636905, 0.009990, 0.625154, 0.009343, 0.613481, 0.008748, 0.601540, 0.008183, 0.589430,
+ 0.007669, 0.576828, 0.007172, 0.564194, 0.006727, 0.551501, 0.006309, 0.538635, 0.005922,
+ 0.525724, 0.005549, 0.513209, 0.005202, 0.500457, 0.004882, 0.487990, 0.004572, 1.000000,
+ 0.081013, 1.000000, 0.081013, 0.999997, 0.081015, 0.999985, 0.081020, 0.999956, 0.081035,
+ 0.999893, 0.081066, 0.999777, 0.081120, 0.999583, 0.081208, 0.999281, 0.081334, 0.998813,
+ 0.081497, 0.997597, 0.081522, 0.994379, 0.080850, 0.992744, 0.080679, 0.990745, 0.080459,
+ 0.986646, 0.079611, 0.983611, 0.079091, 0.978869, 0.078075, 0.973475, 0.076822, 0.967845,
+ 0.075493, 0.960778, 0.073706, 0.953333, 0.071805, 0.945274, 0.069595, 0.936955, 0.067249,
+ 0.928319, 0.064773, 0.919075, 0.062095, 0.909114, 0.059182, 0.900137, 0.056392, 0.891069,
+ 0.053539, 0.882262, 0.050764, 0.873232, 0.047979, 0.864042, 0.045226, 0.855002, 0.042541,
+ 0.846569, 0.040013, 0.837714, 0.037527, 0.828918, 0.035203, 0.819783, 0.033001, 0.810129,
+ 0.030891, 0.800866, 0.028911, 0.790930, 0.027026, 0.780593, 0.025276, 0.769511, 0.023618,
+ 0.758558, 0.022065, 0.747632, 0.020629, 0.736146, 0.019287, 0.724093, 0.018033, 0.712340,
+ 0.016826, 0.700201, 0.015746, 0.687949, 0.014703, 0.676163, 0.013751, 0.665001, 0.012866,
+ 0.654720, 0.012037, 0.644213, 0.011260, 0.633382, 0.010541, 0.622120, 0.009865, 0.610631,
+ 0.009233, 0.599078, 0.008642, 0.587519, 0.008118, 0.575505, 0.007612, 0.563148, 0.007139,
+ 0.550828, 0.006684, 0.538458, 0.006277, 0.525905, 0.005883, 0.513517, 0.005527, 0.501395,
+ 0.005197, 1.000000, 0.099151, 1.000000, 0.099150, 0.999996, 0.099152, 0.999984, 0.099156,
+ 0.999947, 0.099167, 0.999874, 0.099191, 0.999739, 0.099233, 0.999514, 0.099298, 0.999159,
+ 0.099388, 0.998586, 0.099484, 0.995731, 0.098842, 0.993384, 0.098276, 0.991615, 0.097927,
+ 0.989029, 0.097343, 0.985373, 0.096354, 0.981278, 0.095231, 0.975777, 0.093623, 0.970526,
+ 0.092022, 0.963755, 0.089891, 0.956676, 0.087606, 0.948099, 0.084775, 0.939718, 0.081864,
+ 0.931305, 0.078857, 0.922342, 0.075613, 0.912842, 0.072147, 0.903304, 0.068619, 0.894110,
+ 0.065059, 0.885512, 0.061602, 0.877193, 0.058243, 0.868770, 0.054898, 0.860267, 0.051610,
+ 0.851915, 0.048468, 0.843912, 0.045445, 0.836040, 0.042561, 0.828245, 0.039875, 0.820159,
+ 0.037320, 0.811670, 0.034916, 0.802659, 0.032640, 0.793921, 0.030490, 0.784713, 0.028486,
+ 0.774946, 0.026619, 0.764480, 0.024859, 0.753793, 0.023211, 0.743506, 0.021704, 0.732555,
+ 0.020284, 0.720965, 0.018965, 0.709422, 0.017719, 0.697756, 0.016563, 0.685565, 0.015483,
+ 0.673987, 0.014489, 0.662440, 0.013561, 0.651675, 0.012696, 0.641598, 0.011879, 0.631210,
+ 0.011126, 0.620514, 0.010437, 0.609366, 0.009787, 0.598137, 0.009173, 0.586966, 0.008598,
+ 0.575549, 0.008068, 0.563797, 0.007573, 0.551758, 0.007106, 0.539894, 0.006684, 0.527901,
+ 0.006279, 0.515819, 0.005905, 1.000000, 0.120864, 1.000000, 0.120864, 0.999996, 0.120864,
+ 0.999980, 0.120867, 0.999940, 0.120872, 0.999852, 0.120884, 0.999693, 0.120903, 0.999426,
+ 0.120929, 0.999002, 0.120955, 0.998235, 0.120918, 0.994608, 0.119764, 0.992997, 0.119265,
+ 0.990968, 0.118630, 0.987002, 0.117261, 0.983524, 0.116009, 0.978750, 0.114252, 0.972652,
+ 0.111930, 0.966613, 0.109555, 0.959275, 0.106612, 0.951272, 0.103375, 0.942323, 0.099659,
+ 0.933679, 0.095884, 0.924822, 0.091926, 0.915742, 0.087806, 0.906348, 0.083489, 0.896883,
+ 0.079085, 0.887740, 0.074675, 0.879860, 0.070577, 0.871998, 0.066501, 0.864325, 0.062541,
+ 0.856685, 0.058678, 0.849250, 0.055006, 0.841719, 0.051473, 0.834755, 0.048140, 0.827853,
+ 0.045017, 0.820888, 0.042097, 0.813616, 0.039370, 0.805767, 0.036777, 0.797338, 0.034327,
+ 0.789122, 0.032053, 0.780601, 0.029948, 0.771424, 0.027981, 0.761502, 0.026105, 0.751166,
+ 0.024394, 0.741276, 0.022809, 0.730898, 0.021327, 0.719878, 0.019931, 0.708379, 0.018657,
+ 0.697165, 0.017445, 0.685554, 0.016314, 0.673631, 0.015276, 0.662385, 0.014300, 0.651059,
+ 0.013411, 0.640451, 0.012579, 0.630536, 0.011793, 0.620316, 0.011055, 0.609722, 0.010367,
+ 0.598804, 0.009730, 0.587871, 0.009128, 0.577121, 0.008589, 0.566019, 0.008073, 0.554664,
+ 0.007597, 0.543101, 0.007148, 0.531558, 0.006734, 1.000000, 0.146767, 1.000000, 0.146767,
+ 0.999997, 0.146767, 0.999977, 0.146765, 0.999929, 0.146762, 0.999823, 0.146753, 0.999633,
+ 0.146735, 0.999314, 0.146699, 0.998796, 0.146620, 0.997124, 0.146107, 0.994062, 0.144857,
+ 0.992154, 0.144011, 0.989186, 0.142712, 0.985279, 0.140926, 0.980826, 0.138850, 0.975056,
+ 0.136168, 0.969005, 0.133217, 0.961554, 0.129590, 0.954206, 0.125886, 0.945046, 0.121335,
+ 0.935678, 0.116492, 0.926748, 0.111635, 0.917764, 0.106625, 0.908358, 0.101325, 0.899219,
+ 0.096025, 0.890089, 0.090653, 0.881488, 0.085390, 0.874031, 0.080418, 0.866932, 0.075601,
+ 0.859976, 0.070902, 0.853375, 0.066439, 0.846971, 0.062201, 0.840483, 0.058129, 0.833969,
+ 0.054276, 0.828060, 0.050704, 0.822128, 0.047368, 0.815989, 0.044272, 0.809336, 0.041344,
+ 0.802177, 0.038601, 0.794410, 0.036023, 0.786573, 0.033638, 0.778619, 0.031432, 0.770000,
+ 0.029362, 0.760698, 0.027410, 0.750932, 0.025615, 0.740993, 0.023974, 0.731159, 0.022418,
+ 0.720836, 0.020989, 0.709913, 0.019641, 0.698415, 0.018382, 0.687450, 0.017222, 0.676154,
+ 0.016151, 0.664383, 0.015140, 0.653300, 0.014187, 0.642072, 0.013310, 0.631412, 0.012493,
+ 0.621622, 0.011741, 0.611681, 0.011036, 0.601420, 0.010377, 0.590830, 0.009756, 0.580254,
+ 0.009181, 0.569841, 0.008647, 0.559224, 0.008157, 0.548315, 0.007679, 1.000000, 0.177563,
+ 1.000000, 0.177563, 0.999994, 0.177562, 0.999972, 0.177555, 0.999914, 0.177536, 0.999787,
+ 0.177496, 0.999556, 0.177420, 0.999165, 0.177285, 0.998500, 0.177037, 0.995388, 0.175634,
+ 0.993102, 0.174375, 0.990992, 0.173121, 0.986932, 0.170896, 0.982786, 0.168470, 0.977592,
+ 0.165455, 0.971075, 0.161676, 0.963967, 0.157458, 0.956397, 0.152836, 0.947489, 0.147467,
+ 0.937564, 0.141450, 0.928182, 0.135383, 0.919027, 0.129212, 0.909618, 0.122760, 0.900492,
+ 0.116273, 0.891671, 0.109800, 0.883146, 0.103362, 0.875151, 0.097080, 0.868338, 0.091173,
+ 0.862033, 0.085497, 0.856107, 0.080069, 0.850644, 0.074962, 0.845261, 0.070079, 0.839885,
+ 0.065432, 0.834609, 0.061097, 0.829083, 0.056974, 0.824040, 0.053174, 0.818968, 0.049665,
+ 0.813496, 0.046386, 0.807533, 0.043322, 0.800990, 0.040440, 0.793891, 0.037758, 0.786281,
+ 0.035262, 0.778773, 0.032958, 0.770737, 0.030808, 0.762094, 0.028796, 0.752898, 0.026925,
+ 0.743306, 0.025193, 0.733416, 0.023595, 0.723742, 0.022115, 0.713542, 0.020744, 0.702755,
+ 0.019434, 0.691484, 0.018205, 0.680531, 0.017077, 0.669530, 0.016034, 0.658126, 0.015068,
+ 0.646933, 0.014155, 0.636107, 0.013318, 0.625271, 0.012528, 0.615225, 0.011794, 0.605678,
+ 0.011118, 0.595830, 0.010476, 0.585704, 0.009867, 0.575413, 0.009297, 0.565373, 0.008767,
+ 1.000000, 0.214058, 0.999999, 0.214058, 0.999994, 0.214055, 0.999966, 0.214039, 0.999893,
+ 0.213998, 0.999737, 0.213910, 0.999449, 0.213745, 0.998960, 0.213458, 0.997900, 0.212855,
+ 0.994278, 0.210779, 0.992254, 0.209260, 0.988810, 0.206908, 0.984715, 0.204009, 0.979738,
+ 0.200471, 0.972884, 0.195813, 0.965996, 0.190856, 0.957974, 0.185077, 0.949155, 0.178680,
+ 0.939288, 0.171513, 0.928996, 0.163838, 0.919563, 0.156246, 0.910004, 0.148359, 0.900791,
+ 0.140417, 0.892135, 0.132569, 0.883803, 0.124741, 0.876034, 0.117091, 0.869219, 0.109835,
+ 0.863062, 0.102859, 0.857795, 0.096293, 0.853009, 0.090072, 0.848603, 0.084210, 0.844335,
+ 0.078653, 0.840208, 0.073440, 0.836035, 0.068533, 0.831720, 0.063927, 0.827135, 0.059591,
+ 0.822797, 0.055620, 0.818387, 0.051939, 0.813565, 0.048532, 0.808142, 0.045314, 0.802212,
+ 0.042335, 0.795730, 0.039555, 0.788741, 0.036988, 0.781093, 0.034569, 0.773597, 0.032330,
+ 0.765622, 0.030272, 0.757083, 0.028348, 0.747992, 0.026556, 0.738591, 0.024884, 0.728719,
+ 0.023334, 0.719146, 0.021908, 0.709165, 0.020571, 0.698750, 0.019325, 0.687884, 0.018158,
+ 0.676818, 0.017075, 0.666247, 0.016072, 0.655284, 0.015126, 0.644010, 0.014256, 0.633353,
+ 0.013433, 0.622674, 0.012653, 0.612265, 0.011935, 0.602455, 0.011253, 0.593147, 0.010623,
+ 0.583592, 0.010021, 1.000000, 0.257170, 1.000000, 0.257170, 0.999992, 0.257164, 0.999958,
+ 0.257135, 0.999864, 0.257060, 0.999666, 0.256897, 0.999302, 0.256596, 0.998663, 0.256070,
+ 0.995607, 0.254123, 0.993094, 0.252081, 0.990700, 0.249867, 0.985940, 0.246118, 0.981214,
+ 0.242049, 0.974966, 0.236869, 0.967589, 0.230724, 0.959150, 0.223635, 0.950257, 0.215960,
+ 0.940165, 0.207296, 0.929396, 0.197901, 0.919288, 0.188437, 0.909428, 0.178762, 0.900105,
+ 0.169072, 0.891418, 0.159478, 0.883347, 0.150020, 0.875992, 0.140813, 0.869466, 0.131960,
+ 0.863699, 0.123501, 0.858553, 0.115436, 0.854379, 0.107901, 0.850894, 0.100880, 0.847632,
+ 0.094230, 0.844571, 0.087986, 0.841630, 0.082153, 0.838542, 0.076641, 0.835412, 0.071532,
+ 0.831899, 0.066688, 0.828177, 0.062218, 0.824160, 0.058045, 0.820393, 0.054267, 0.816068,
+ 0.050717, 0.811201, 0.047404, 0.805785, 0.044317, 0.799878, 0.041456, 0.793469, 0.038815,
+ 0.786473, 0.036345, 0.778874, 0.034022, 0.771277, 0.031860, 0.763426, 0.029886, 0.755044,
+ 0.028036, 0.746161, 0.026298, 0.737124, 0.024730, 0.727610, 0.023251, 0.717822, 0.021875,
+ 0.708279, 0.020594, 0.698333, 0.019395, 0.688020, 0.018272, 0.677321, 0.017204, 0.666504,
+ 0.016212, 0.656184, 0.015292, 0.645560, 0.014433, 0.634636, 0.013616, 0.624124, 0.012861,
+ 0.613914, 0.012143, 0.603589, 0.011489, 1.000000, 0.307946, 0.999999, 0.307945, 0.999988,
+ 0.307934, 0.999944, 0.307886, 0.999824, 0.307756, 0.999565, 0.307480, 0.999085, 0.306966,
+ 0.998103, 0.306004, 0.994249, 0.303028, 0.991807, 0.300435, 0.987773, 0.296554, 0.982673,
+ 0.291600, 0.976623, 0.285641, 0.968757, 0.278150, 0.959849, 0.269529, 0.950663, 0.260248,
+ 0.940129, 0.249704, 0.928950, 0.238291, 0.917996, 0.226501, 0.907813, 0.214669, 0.898305,
+ 0.202835, 0.889626, 0.191158, 0.881750, 0.179695, 0.874715, 0.168548, 0.868746, 0.157920,
+ 0.863703, 0.147807, 0.859315, 0.138149, 0.855538, 0.128993, 0.852428, 0.120414, 0.850168,
+ 0.112498, 0.848132, 0.105054, 0.846291, 0.098109, 0.844431, 0.091594, 0.842493, 0.085506,
+ 0.840368, 0.079820, 0.837980, 0.074510, 0.835230, 0.069542, 0.832091, 0.064909, 0.828667,
+ 0.060629, 0.824805, 0.056652, 0.820988, 0.053023, 0.816635, 0.049636, 0.811725, 0.046466,
+ 0.806316, 0.043508, 0.800469, 0.040787, 0.794107, 0.038255, 0.787218, 0.035882, 0.779872,
+ 0.033679, 0.772097, 0.031638, 0.764484, 0.029738, 0.756428, 0.027958, 0.748022, 0.026315,
+ 0.739268, 0.024780, 0.730240, 0.023339, 0.720893, 0.022003, 0.711190, 0.020755, 0.701791,
+ 0.019584, 0.692184, 0.018489, 0.682258, 0.017454, 0.672060, 0.016487, 0.661717, 0.015596,
+ 0.651462, 0.014752, 0.641467, 0.013973, 0.631229, 0.013236, 1.000000, 0.367573, 0.999999,
+ 0.367571, 0.999984, 0.367553, 0.999925, 0.367473, 0.999759, 0.367259, 0.999410, 0.366801,
+ 0.998739, 0.365946, 0.995529, 0.363191, 0.992875, 0.360171, 0.989135, 0.355981, 0.984166,
+ 0.350401, 0.977871, 0.343348, 0.969510, 0.334341, 0.959964, 0.323862, 0.950162, 0.312521,
+ 0.938882, 0.299577, 0.926992, 0.285573, 0.915589, 0.271212, 0.904791, 0.256611, 0.895177,
+ 0.242224, 0.886403, 0.227952, 0.878957, 0.214192, 0.872418, 0.200795, 0.867029, 0.188015,
+ 0.862835, 0.175975, 0.859411, 0.164526, 0.856655, 0.153693, 0.854519, 0.143520, 0.852828,
+ 0.133970, 0.851412, 0.124984, 0.850609, 0.116748, 0.849855, 0.109050, 0.849017, 0.101839,
+ 0.848079, 0.095136, 0.846911, 0.088877, 0.845445, 0.083038, 0.843620, 0.077584, 0.841411,
+ 0.072505, 0.838768, 0.067769, 0.835801, 0.063402, 0.832341, 0.059310, 0.828424, 0.055512,
+ 0.824312, 0.052024, 0.819918, 0.048786, 0.815072, 0.045780, 0.809863, 0.043018, 0.804164,
+ 0.040425, 0.798034, 0.038015, 0.791436, 0.035744, 0.784498, 0.033647, 0.777125, 0.031667,
+ 0.769365, 0.029812, 0.761579, 0.028100, 0.753746, 0.026505, 0.745573, 0.025007, 0.737083,
+ 0.023603, 0.728545, 0.022330, 0.719691, 0.021124, 0.710569, 0.019998, 0.701216, 0.018957,
+ 0.692094, 0.017970, 0.682909, 0.017042, 0.673509, 0.016173, 0.663863, 0.015341, 1.000000,
+ 0.437395, 0.999998, 0.437394, 0.999980, 0.437363, 0.999891, 0.437232, 0.999656, 0.436877,
+ 0.999148, 0.436121, 0.997959, 0.434564, 0.993464, 0.430134, 0.990606, 0.426077, 0.985027,
+ 0.419397, 0.978491, 0.411180, 0.969643, 0.400480, 0.959189, 0.387690, 0.948223, 0.373575,
+ 0.935955, 0.357622, 0.923237, 0.340430, 0.911074, 0.322735, 0.899724, 0.304790, 0.890189,
+ 0.287392, 0.881796, 0.270248, 0.874781, 0.253659, 0.869166, 0.237786, 0.864725, 0.222618,
+ 0.861565, 0.208356, 0.859284, 0.194867, 0.857677, 0.182120, 0.856714, 0.170180, 0.856155,
+ 0.158969, 0.855800, 0.148413, 0.855672, 0.138578, 0.855538, 0.129345, 0.855689, 0.120861,
+ 0.855767, 0.112969, 0.855618, 0.105593, 0.855250, 0.098745, 0.854583, 0.092373, 0.853534,
+ 0.086414, 0.852061, 0.080834, 0.850253, 0.075677, 0.848004, 0.070861, 0.845333, 0.066378,
+ 0.842376, 0.062263, 0.838956, 0.058411, 0.835121, 0.054833, 0.830842, 0.051484, 0.826212,
+ 0.048355, 0.821522, 0.045471, 0.816551, 0.042826, 0.811211, 0.040361, 0.805479, 0.038039,
+ 0.799409, 0.035874, 0.793060, 0.033873, 0.786395, 0.031998, 0.779416, 0.030241, 0.772140,
+ 0.028595, 0.764636, 0.027075, 0.756836, 0.025635, 0.749315, 0.024303, 0.741561, 0.023050,
+ 0.733589, 0.021880, 0.725479, 0.020784, 0.717255, 0.019770, 0.708829, 0.018817, 0.700191,
+ 0.017911, 1.000000, 0.518937, 0.999998, 0.518933, 0.999967, 0.518883, 0.999832, 0.518660,
+ 0.999466, 0.518057, 0.998644, 0.516752, 0.994458, 0.512347, 0.991223, 0.507675, 0.985515,
+ 0.500188, 0.978308, 0.490408, 0.968359, 0.477357, 0.956820, 0.461752, 0.943929, 0.443796,
+ 0.930224, 0.423893, 0.916514, 0.402682, 0.903653, 0.380914, 0.892315, 0.359212, 0.882942,
+ 0.338102, 0.875438, 0.317730, 0.869642, 0.298186, 0.865304, 0.279491, 0.862382, 0.261804,
+ 0.860666, 0.245146, 0.859788, 0.229406, 0.859608, 0.214605, 0.859912, 0.200691, 0.860530,
+ 0.187623, 0.861368, 0.175390, 0.862237, 0.163901, 0.863127, 0.153175, 0.863923, 0.143147,
+ 0.864567, 0.133781, 0.865013, 0.125042, 0.865390, 0.116952, 0.865591, 0.109476, 0.865517,
+ 0.102542, 0.865084, 0.096069, 0.864309, 0.090050, 0.863151, 0.084433, 0.861649, 0.079222,
+ 0.859742, 0.074348, 0.857446, 0.069796, 0.854757, 0.065536, 0.851783, 0.061608, 0.848516,
+ 0.057970, 0.844897, 0.054574, 0.840956, 0.051417, 0.836676, 0.048460, 0.832075, 0.045693,
+ 0.827191, 0.043118, 0.822295, 0.040772, 0.817294, 0.038603, 0.812013, 0.036568, 0.806465,
+ 0.034655, 0.800691, 0.032872, 0.794709, 0.031211, 0.788493, 0.029650, 0.782049, 0.028178,
+ 0.775403, 0.026797, 0.768570, 0.025500, 0.761536, 0.024276, 0.754303, 0.023114, 0.746920,
+ 0.022031, 0.739745, 0.021019, 1.000000, 0.613914, 0.999996, 0.613907, 0.999942, 0.613814,
+ 0.999704, 0.613407, 0.999046, 0.612302, 0.995516, 0.608266, 0.991726, 0.602863, 0.985157,
+ 0.593956, 0.976420, 0.581748, 0.964404, 0.565183, 0.950601, 0.545273, 0.935158, 0.522129,
+ 0.919364, 0.496782, 0.904754, 0.470571, 0.891760, 0.444037, 0.881492, 0.418322, 0.873656,
+ 0.393522, 0.868053, 0.369795, 0.864336, 0.347171, 0.862259, 0.325737, 0.861556, 0.305532,
+ 0.861776, 0.286416, 0.862661, 0.268355, 0.864015, 0.251334, 0.865711, 0.235352, 0.867519,
+ 0.220302, 0.869351, 0.206161, 0.871144, 0.192908, 0.872839, 0.180505, 0.874307, 0.168848,
+ 0.875667, 0.158021, 0.876758, 0.147877, 0.877640, 0.138441, 0.878237, 0.129627, 0.878563,
+ 0.121415, 0.878572, 0.113741, 0.878420, 0.106652, 0.878057, 0.100097, 0.877413, 0.094013,
+ 0.876460, 0.088346, 0.875233, 0.083092, 0.873700, 0.078198, 0.871873, 0.073640, 0.869780,
+ 0.069410, 0.867405, 0.065470, 0.864751, 0.061791, 0.861818, 0.058349, 0.858645, 0.055144,
+ 0.855307, 0.052189, 0.851736, 0.049433, 0.847927, 0.046850, 0.843888, 0.044426, 0.839629,
+ 0.042150, 0.835158, 0.040008, 0.830509, 0.038008, 0.825714, 0.036149, 0.820729, 0.034396,
+ 0.815751, 0.032778, 0.810752, 0.031275, 0.805587, 0.029854, 0.800317, 0.028540, 0.794890,
+ 0.027295, 0.789314, 0.026114, 0.783593, 0.024994, 1.000000, 0.724258, 0.999992, 0.724243,
+ 0.999870, 0.724044, 0.999336, 0.723170, 0.996271, 0.719432, 0.991159, 0.712576, 0.982465,
+ 0.700927, 0.970490, 0.684297, 0.953973, 0.661244, 0.935546, 0.633804, 0.916596, 0.603071,
+ 0.899353, 0.571050, 0.885216, 0.539206, 0.875076, 0.508714, 0.868334, 0.479571, 0.864414,
+ 0.451796, 0.862678, 0.425328, 0.862835, 0.400352, 0.864067, 0.376532, 0.866086, 0.353910,
+ 0.868557, 0.332424, 0.871271, 0.312053, 0.874058, 0.292764, 0.876800, 0.274530, 0.879390,
+ 0.257297, 0.881900, 0.241140, 0.884187, 0.225934, 0.886262, 0.211669, 0.888119, 0.198311,
+ 0.889709, 0.185783, 0.891054, 0.174063, 0.892196, 0.163143, 0.893101, 0.152952, 0.893803,
+ 0.143475, 0.894277, 0.134647, 0.894532, 0.126434, 0.894576, 0.118800, 0.894393, 0.111694,
+ 0.893976, 0.105069, 0.893346, 0.098908, 0.892502, 0.093172, 0.891441, 0.087828, 0.890276,
+ 0.082903, 0.888972, 0.078351, 0.887469, 0.074108, 0.885785, 0.070163, 0.883914, 0.066484,
+ 0.881872, 0.063057, 0.879651, 0.059853, 0.877267, 0.056862, 0.874717, 0.054060, 0.872012,
+ 0.051438, 0.869157, 0.048981, 0.866155, 0.046673, 0.863014, 0.044506, 0.859748, 0.042473,
+ 0.856416, 0.040596, 0.852958, 0.038827, 0.849382, 0.037162, 0.845694, 0.035596, 0.841893,
+ 0.034115, 0.837981, 0.032714, 0.833963, 0.031386, 0.829847, 0.030128, 1.000000, 0.852140,
+ 0.999969, 0.852095, 0.999483, 0.851408, 0.994545, 0.845790, 0.986188, 0.835231, 0.969847,
+ 0.814687, 0.945951, 0.783735, 0.919170, 0.746074, 0.895488, 0.706938, 0.878232, 0.669534,
+ 0.868252, 0.635168, 0.863873, 0.603069, 0.863369, 0.572514, 0.865450, 0.543169, 0.868803,
+ 0.514578, 0.872794, 0.486762, 0.877020, 0.459811, 0.881054, 0.433654, 0.884974, 0.408574,
+ 0.888587, 0.384525, 0.891877, 0.361560, 0.894793, 0.339661, 0.897430, 0.318913, 0.899796,
+ 0.299302, 0.901943, 0.280843, 0.903858, 0.263481, 0.905574, 0.247197, 0.907069, 0.231915,
+ 0.908379, 0.217614, 0.909520, 0.204250, 0.910483, 0.191758, 0.911280, 0.180092, 0.911936,
+ 0.169222, 0.912454, 0.159098, 0.912835, 0.149668, 0.913078, 0.140884, 0.913192, 0.132709,
+ 0.913175, 0.125095, 0.913040, 0.118012, 0.912781, 0.111417, 0.912410, 0.105281, 0.911924,
+ 0.099569, 0.911331, 0.094253, 0.910637, 0.089308, 0.909840, 0.084700, 0.908941, 0.080404,
+ 0.907944, 0.076398, 0.906857, 0.072664, 0.905680, 0.069178, 0.904416, 0.065922, 0.903067,
+ 0.062878, 0.901637, 0.060031, 0.900128, 0.057365, 0.898544, 0.054867, 0.896890, 0.052527,
+ 0.895165, 0.050331, 0.893371, 0.048267, 0.891572, 0.046360, 0.889763, 0.044600, 0.887894,
+ 0.042945, 0.885967, 0.041388, 0.883984, 0.039922, 0.881945, 0.038540, 0.879854, 0.037236,
+ 0.999804, 0.995833, 0.938155, 0.933611, 0.864755, 0.854311, 0.888594, 0.865264, 0.905575,
+ 0.863922, 0.915125, 0.850558, 0.920665, 0.829254, 0.924073, 0.802578, 0.926304, 0.772211,
+ 0.927829, 0.739366, 0.928924, 0.705033, 0.929730, 0.670019, 0.930339, 0.634993, 0.930811,
+ 0.600485, 0.931191, 0.566897, 0.931490, 0.534485, 0.931737, 0.503429, 0.931939, 0.473811,
+ 0.932108, 0.445668, 0.932250, 0.418993, 0.932371, 0.393762, 0.932474, 0.369939, 0.932562,
+ 0.347479, 0.932638, 0.326336, 0.932703, 0.306462, 0.932760, 0.287805, 0.932809, 0.270313,
+ 0.932851, 0.253933, 0.932887, 0.238610, 0.932917, 0.224289, 0.932943, 0.210917, 0.932965,
+ 0.198440, 0.932982, 0.186807, 0.932995, 0.175966, 0.933005, 0.165869, 0.933011, 0.156468,
+ 0.933013, 0.147719, 0.933013, 0.139579, 0.933010, 0.132007, 0.933004, 0.124965, 0.932994,
+ 0.118416, 0.932982, 0.112326, 0.932968, 0.106663, 0.932950, 0.101397, 0.932931, 0.096499,
+ 0.932908, 0.091944, 0.932883, 0.087706, 0.932856, 0.083762, 0.932827, 0.080092, 0.932796,
+ 0.076675, 0.932762, 0.073494, 0.932727, 0.070530, 0.932689, 0.067768, 0.932650, 0.065193,
+ 0.932609, 0.062792, 0.932565, 0.060552, 0.932521, 0.058461, 0.932474, 0.056508, 0.932427,
+ 0.054684, 0.932377, 0.052979, 0.932326, 0.051385, 0.932274, 0.049894, 0.932220, 0.048497,
+ 0.932164, 0.047190,
+};
+
+const float bsdf_split_sum_ggx[64 * 64 * 2] = {
+ 1.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f,
+ 1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
+ 0.999512f, 0.000000f, 0.999023f, 0.000001f, 0.999023f, 0.000001f, 0.998535f, 0.000001f,
+ 0.998047f, 0.000001f, 0.997559f, 0.000002f, 0.997070f, 0.000003f, 0.996094f, 0.000004f,
+ 0.994629f, 0.000004f, 0.993652f, 0.000006f, 0.991699f, 0.000007f, 0.989746f, 0.000008f,
+ 0.987305f, 0.000010f, 0.984375f, 0.000012f, 0.980957f, 0.000013f, 0.977539f, 0.000016f,
+ 0.973145f, 0.000018f, 0.967773f, 0.000020f, 0.961914f, 0.000023f, 0.955566f, 0.000025f,
+ 0.947754f, 0.000028f, 0.939941f, 0.000031f, 0.930664f, 0.000033f, 0.920410f, 0.000036f,
+ 0.909180f, 0.000039f, 0.896973f, 0.000042f, 0.884277f, 0.000044f, 0.870117f, 0.000047f,
+ 0.854980f, 0.000049f, 0.838867f, 0.000051f, 0.821777f, 0.000053f, 0.803711f, 0.000055f,
+ 0.785156f, 0.000057f, 0.765625f, 0.000058f, 0.745605f, 0.000059f, 0.724609f, 0.000060f,
+ 0.703613f, 0.000061f, 0.681641f, 0.000061f, 0.659668f, 0.000061f, 0.637695f, 0.000061f,
+ 0.615234f, 0.000061f, 0.592773f, 0.000060f, 0.570801f, 0.000060f, 0.548340f, 0.000059f,
+ 0.526855f, 0.000058f, 0.504883f, 0.000057f, 0.483887f, 0.000055f, 0.462891f, 0.000054f,
+ 0.442627f, 0.000053f, 0.422607f, 0.000051f, 0.403320f, 0.000050f, 0.384766f, 0.000048f,
+ 0.366455f, 0.000046f, 0.348877f, 0.000045f, 0.332031f, 0.000043f, 0.315918f, 0.000041f,
+ 0.999512f, 0.000000f, 0.999512f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f,
+ 0.999512f, 0.000000f, 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
+ 0.999512f, 0.000000f, 0.999023f, 0.000001f, 0.999023f, 0.000001f, 0.998535f, 0.000002f,
+ 0.998047f, 0.000003f, 0.997559f, 0.000004f, 0.997070f, 0.000005f, 0.996094f, 0.000006f,
+ 0.994629f, 0.000008f, 0.993164f, 0.000010f, 0.991699f, 0.000012f, 0.989746f, 0.000015f,
+ 0.987305f, 0.000018f, 0.984375f, 0.000020f, 0.980957f, 0.000024f, 0.977051f, 0.000027f,
+ 0.972168f, 0.000031f, 0.967285f, 0.000035f, 0.961426f, 0.000039f, 0.954590f, 0.000043f,
+ 0.947266f, 0.000048f, 0.938965f, 0.000052f, 0.929199f, 0.000057f, 0.919434f, 0.000061f,
+ 0.908203f, 0.000065f, 0.895996f, 0.000069f, 0.882812f, 0.000073f, 0.868652f, 0.000077f,
+ 0.853027f, 0.000080f, 0.837402f, 0.000083f, 0.820312f, 0.000086f, 0.802246f, 0.000088f,
+ 0.783691f, 0.000090f, 0.764160f, 0.000092f, 0.744141f, 0.000093f, 0.723633f, 0.000093f,
+ 0.702637f, 0.000094f, 0.681152f, 0.000094f, 0.659180f, 0.000093f, 0.637207f, 0.000093f,
+ 0.615234f, 0.000091f, 0.593262f, 0.000090f, 0.571289f, 0.000088f, 0.549316f, 0.000087f,
+ 0.527344f, 0.000085f, 0.505859f, 0.000082f, 0.485107f, 0.000080f, 0.464355f, 0.000078f,
+ 0.444336f, 0.000075f, 0.424561f, 0.000072f, 0.405273f, 0.000070f, 0.386719f, 0.000067f,
+ 0.368652f, 0.000065f, 0.351318f, 0.000062f, 0.334473f, 0.000059f, 0.318115f, 0.000057f,
+ 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f, 1.000000f, 0.000000f,
+ 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000001f, 0.999512f, 0.000001f,
+ 0.999512f, 0.000001f, 0.999512f, 0.000003f, 0.999023f, 0.000002f, 0.998535f, 0.000004f,
+ 0.998047f, 0.000005f, 0.997559f, 0.000007f, 0.997070f, 0.000009f, 0.996094f, 0.000011f,
+ 0.994629f, 0.000013f, 0.993164f, 0.000017f, 0.991211f, 0.000020f, 0.989258f, 0.000024f,
+ 0.986816f, 0.000028f, 0.983887f, 0.000033f, 0.980469f, 0.000038f, 0.976562f, 0.000043f,
+ 0.971680f, 0.000049f, 0.966797f, 0.000055f, 0.960449f, 0.000062f, 0.953613f, 0.000068f,
+ 0.946289f, 0.000075f, 0.937500f, 0.000081f, 0.928223f, 0.000088f, 0.917969f, 0.000094f,
+ 0.906738f, 0.000100f, 0.894531f, 0.000106f, 0.880859f, 0.000111f, 0.866699f, 0.000116f,
+ 0.851562f, 0.000120f, 0.835449f, 0.000124f, 0.818359f, 0.000127f, 0.800781f, 0.000130f,
+ 0.782227f, 0.000132f, 0.762695f, 0.000134f, 0.742676f, 0.000134f, 0.722656f, 0.000135f,
+ 0.701660f, 0.000134f, 0.680176f, 0.000133f, 0.658691f, 0.000132f, 0.636719f, 0.000130f,
+ 0.615234f, 0.000128f, 0.593262f, 0.000125f, 0.571289f, 0.000123f, 0.549805f, 0.000119f,
+ 0.528320f, 0.000116f, 0.507324f, 0.000112f, 0.486328f, 0.000109f, 0.466064f, 0.000105f,
+ 0.446045f, 0.000101f, 0.426514f, 0.000097f, 0.407471f, 0.000093f, 0.388916f, 0.000089f,
+ 0.370850f, 0.000085f, 0.353516f, 0.000082f, 0.336914f, 0.000078f, 0.320557f, 0.000074f,
+ 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
+ 1.000000f, 0.000000f, 1.000000f, 0.000001f, 0.999512f, 0.000001f, 0.999512f, 0.000002f,
+ 0.999512f, 0.000002f, 0.999023f, 0.000003f, 0.999023f, 0.000005f, 0.998535f, 0.000006f,
+ 0.998535f, 0.000008f, 0.997559f, 0.000011f, 0.997070f, 0.000014f, 0.996094f, 0.000017f,
+ 0.994629f, 0.000020f, 0.993164f, 0.000026f, 0.991211f, 0.000030f, 0.989258f, 0.000036f,
+ 0.986816f, 0.000043f, 0.983398f, 0.000050f, 0.979980f, 0.000058f, 0.976074f, 0.000066f,
+ 0.971191f, 0.000074f, 0.965820f, 0.000082f, 0.959961f, 0.000093f, 0.952637f, 0.000101f,
+ 0.945312f, 0.000111f, 0.936523f, 0.000120f, 0.927246f, 0.000129f, 0.916504f, 0.000137f,
+ 0.905273f, 0.000145f, 0.892578f, 0.000153f, 0.879395f, 0.000160f, 0.865234f, 0.000166f,
+ 0.850098f, 0.000171f, 0.833984f, 0.000176f, 0.816895f, 0.000179f, 0.799316f, 0.000182f,
+ 0.780762f, 0.000184f, 0.761230f, 0.000185f, 0.741699f, 0.000185f, 0.721191f, 0.000184f,
+ 0.700684f, 0.000183f, 0.679688f, 0.000181f, 0.658203f, 0.000178f, 0.636719f, 0.000175f,
+ 0.615234f, 0.000171f, 0.593262f, 0.000167f, 0.571777f, 0.000162f, 0.550293f, 0.000158f,
+ 0.529297f, 0.000152f, 0.508301f, 0.000147f, 0.487793f, 0.000142f, 0.467529f, 0.000136f,
+ 0.447754f, 0.000131f, 0.428223f, 0.000125f, 0.409424f, 0.000120f, 0.391113f, 0.000115f,
+ 0.373291f, 0.000109f, 0.355957f, 0.000104f, 0.339355f, 0.000099f, 0.323242f, 0.000094f,
+ 0.999512f, 0.000002f, 0.999512f, 0.000002f, 1.000000f, 0.000002f, 0.999512f, 0.000002f,
+ 1.000000f, 0.000002f, 0.999512f, 0.000002f, 0.999512f, 0.000002f, 0.999512f, 0.000003f,
+ 0.999512f, 0.000004f, 0.999512f, 0.000005f, 0.999023f, 0.000007f, 0.998535f, 0.000010f,
+ 0.998047f, 0.000012f, 0.997559f, 0.000017f, 0.996582f, 0.000020f, 0.995605f, 0.000025f,
+ 0.994629f, 0.000032f, 0.993164f, 0.000038f, 0.991211f, 0.000047f, 0.988770f, 0.000055f,
+ 0.986328f, 0.000063f, 0.983398f, 0.000074f, 0.979492f, 0.000085f, 0.975586f, 0.000095f,
+ 0.970703f, 0.000108f, 0.965332f, 0.000121f, 0.958984f, 0.000132f, 0.952148f, 0.000145f,
+ 0.944336f, 0.000157f, 0.935547f, 0.000170f, 0.925781f, 0.000181f, 0.915039f, 0.000192f,
+ 0.903809f, 0.000203f, 0.891113f, 0.000212f, 0.877930f, 0.000220f, 0.863281f, 0.000227f,
+ 0.848145f, 0.000234f, 0.832031f, 0.000239f, 0.814941f, 0.000242f, 0.797363f, 0.000245f,
+ 0.778809f, 0.000247f, 0.759766f, 0.000247f, 0.740234f, 0.000246f, 0.720215f, 0.000244f,
+ 0.699707f, 0.000241f, 0.678711f, 0.000237f, 0.657715f, 0.000233f, 0.636230f, 0.000228f,
+ 0.614746f, 0.000222f, 0.593750f, 0.000216f, 0.572266f, 0.000209f, 0.551270f, 0.000202f,
+ 0.530273f, 0.000195f, 0.509277f, 0.000187f, 0.489014f, 0.000180f, 0.468994f, 0.000172f,
+ 0.449463f, 0.000165f, 0.430176f, 0.000157f, 0.411377f, 0.000150f, 0.393311f, 0.000143f,
+ 0.375488f, 0.000136f, 0.358398f, 0.000129f, 0.341797f, 0.000123f, 0.325684f, 0.000116f,
+ 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000005f,
+ 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000006f, 0.999512f, 0.000007f,
+ 0.999512f, 0.000008f, 0.999512f, 0.000011f, 0.999023f, 0.000013f, 0.998535f, 0.000015f,
+ 0.998047f, 0.000019f, 0.997559f, 0.000026f, 0.996582f, 0.000033f, 0.995605f, 0.000040f,
+ 0.994141f, 0.000047f, 0.993164f, 0.000058f, 0.991211f, 0.000069f, 0.988770f, 0.000080f,
+ 0.985840f, 0.000093f, 0.982910f, 0.000106f, 0.979004f, 0.000121f, 0.975098f, 0.000137f,
+ 0.970215f, 0.000153f, 0.964355f, 0.000169f, 0.958008f, 0.000186f, 0.951172f, 0.000201f,
+ 0.943359f, 0.000218f, 0.934082f, 0.000233f, 0.924316f, 0.000248f, 0.914062f, 0.000262f,
+ 0.902344f, 0.000275f, 0.889648f, 0.000286f, 0.875977f, 0.000295f, 0.861816f, 0.000304f,
+ 0.846680f, 0.000311f, 0.830566f, 0.000316f, 0.813477f, 0.000319f, 0.795898f, 0.000321f,
+ 0.777344f, 0.000322f, 0.758301f, 0.000320f, 0.739258f, 0.000318f, 0.719238f, 0.000314f,
+ 0.698730f, 0.000309f, 0.678223f, 0.000303f, 0.657227f, 0.000296f, 0.636230f, 0.000288f,
+ 0.614746f, 0.000280f, 0.593750f, 0.000271f, 0.572754f, 0.000262f, 0.551758f, 0.000252f,
+ 0.531250f, 0.000243f, 0.510742f, 0.000233f, 0.490479f, 0.000223f, 0.470703f, 0.000213f,
+ 0.451172f, 0.000203f, 0.432129f, 0.000194f, 0.413574f, 0.000184f, 0.395508f, 0.000175f,
+ 0.377930f, 0.000166f, 0.360840f, 0.000157f, 0.344238f, 0.000149f, 0.328125f, 0.000141f,
+ 0.999512f, 0.000011f, 0.999512f, 0.000011f, 0.999512f, 0.000011f, 0.999512f, 0.000011f,
+ 0.999512f, 0.000011f, 0.999512f, 0.000012f, 0.999512f, 0.000014f, 0.999512f, 0.000015f,
+ 0.999512f, 0.000017f, 0.999023f, 0.000020f, 0.998535f, 0.000022f, 0.998535f, 0.000028f,
+ 0.998047f, 0.000034f, 0.997559f, 0.000042f, 0.996582f, 0.000050f, 0.995605f, 0.000060f,
+ 0.994141f, 0.000072f, 0.992676f, 0.000084f, 0.990723f, 0.000099f, 0.988281f, 0.000115f,
+ 0.985840f, 0.000133f, 0.982422f, 0.000150f, 0.978516f, 0.000171f, 0.974609f, 0.000191f,
+ 0.969238f, 0.000211f, 0.963867f, 0.000232f, 0.957520f, 0.000253f, 0.950195f, 0.000274f,
+ 0.941895f, 0.000294f, 0.933105f, 0.000314f, 0.922852f, 0.000332f, 0.912109f, 0.000348f,
+ 0.900879f, 0.000363f, 0.888184f, 0.000377f, 0.874512f, 0.000387f, 0.859863f, 0.000397f,
+ 0.844727f, 0.000404f, 0.828613f, 0.000408f, 0.811523f, 0.000411f, 0.793945f, 0.000412f,
+ 0.775879f, 0.000411f, 0.756836f, 0.000407f, 0.737793f, 0.000403f, 0.717773f, 0.000396f,
+ 0.697754f, 0.000389f, 0.677246f, 0.000380f, 0.656738f, 0.000370f, 0.635742f, 0.000359f,
+ 0.614746f, 0.000347f, 0.594238f, 0.000335f, 0.573242f, 0.000323f, 0.552734f, 0.000310f,
+ 0.532227f, 0.000297f, 0.511719f, 0.000284f, 0.491943f, 0.000272f, 0.472412f, 0.000259f,
+ 0.453125f, 0.000246f, 0.434082f, 0.000234f, 0.415771f, 0.000222f, 0.397705f, 0.000211f,
+ 0.380127f, 0.000199f, 0.363281f, 0.000189f, 0.346680f, 0.000178f, 0.330811f, 0.000168f,
+ 0.999512f, 0.000022f, 0.999512f, 0.000022f, 0.999512f, 0.000022f, 0.999512f, 0.000022f,
+ 0.999512f, 0.000023f, 0.999512f, 0.000025f, 0.999512f, 0.000024f, 0.999512f, 0.000028f,
+ 0.999023f, 0.000030f, 0.999023f, 0.000035f, 0.999023f, 0.000040f, 0.998535f, 0.000046f,
+ 0.998047f, 0.000056f, 0.997559f, 0.000063f, 0.996094f, 0.000077f, 0.995605f, 0.000089f,
+ 0.994141f, 0.000106f, 0.992188f, 0.000123f, 0.990234f, 0.000143f, 0.987793f, 0.000163f,
+ 0.985352f, 0.000185f, 0.981934f, 0.000211f, 0.978027f, 0.000236f, 0.973633f, 0.000261f,
+ 0.968750f, 0.000288f, 0.962891f, 0.000314f, 0.956055f, 0.000341f, 0.949219f, 0.000366f,
+ 0.940918f, 0.000391f, 0.931641f, 0.000414f, 0.921875f, 0.000436f, 0.910645f, 0.000455f,
+ 0.898926f, 0.000471f, 0.886230f, 0.000487f, 0.872559f, 0.000499f, 0.858398f, 0.000509f,
+ 0.842773f, 0.000515f, 0.826660f, 0.000518f, 0.810059f, 0.000520f, 0.792480f, 0.000519f,
+ 0.774414f, 0.000515f, 0.755371f, 0.000509f, 0.736328f, 0.000501f, 0.716797f, 0.000492f,
+ 0.696777f, 0.000480f, 0.676758f, 0.000468f, 0.656250f, 0.000454f, 0.635742f, 0.000439f,
+ 0.615234f, 0.000424f, 0.594238f, 0.000408f, 0.573730f, 0.000392f, 0.553223f, 0.000375f,
+ 0.533203f, 0.000359f, 0.513184f, 0.000342f, 0.493408f, 0.000326f, 0.474121f, 0.000310f,
+ 0.455078f, 0.000294f, 0.436279f, 0.000279f, 0.417969f, 0.000264f, 0.400146f, 0.000250f,
+ 0.382812f, 0.000237f, 0.365723f, 0.000223f, 0.349365f, 0.000211f, 0.333496f, 0.000199f,
+ 0.999512f, 0.000041f, 0.999512f, 0.000041f, 0.999512f, 0.000041f, 0.999512f, 0.000042f,
+ 0.999512f, 0.000042f, 0.999512f, 0.000044f, 0.999512f, 0.000046f, 0.999512f, 0.000049f,
+ 0.999512f, 0.000054f, 0.999512f, 0.000059f, 0.999023f, 0.000065f, 0.998535f, 0.000076f,
+ 0.998047f, 0.000087f, 0.997070f, 0.000098f, 0.996582f, 0.000117f, 0.995117f, 0.000135f,
+ 0.993652f, 0.000152f, 0.992188f, 0.000176f, 0.989746f, 0.000201f, 0.987793f, 0.000228f,
+ 0.984863f, 0.000256f, 0.981445f, 0.000286f, 0.977539f, 0.000318f, 0.973145f, 0.000352f,
+ 0.967773f, 0.000384f, 0.961914f, 0.000417f, 0.955566f, 0.000451f, 0.947754f, 0.000481f,
+ 0.939453f, 0.000510f, 0.930176f, 0.000537f, 0.919922f, 0.000563f, 0.909180f, 0.000585f,
+ 0.897461f, 0.000604f, 0.884766f, 0.000620f, 0.871094f, 0.000632f, 0.856445f, 0.000641f,
+ 0.841309f, 0.000647f, 0.825195f, 0.000648f, 0.808105f, 0.000648f, 0.790527f, 0.000643f,
+ 0.772949f, 0.000637f, 0.754395f, 0.000627f, 0.735352f, 0.000615f, 0.715820f, 0.000601f,
+ 0.695801f, 0.000585f, 0.675781f, 0.000568f, 0.655762f, 0.000550f, 0.635742f, 0.000530f,
+ 0.615234f, 0.000510f, 0.594727f, 0.000490f, 0.574707f, 0.000469f, 0.554199f, 0.000448f,
+ 0.534180f, 0.000428f, 0.514648f, 0.000407f, 0.495117f, 0.000387f, 0.475830f, 0.000367f,
+ 0.456787f, 0.000348f, 0.438232f, 0.000329f, 0.420166f, 0.000311f, 0.402344f, 0.000294f,
+ 0.385254f, 0.000277f, 0.368408f, 0.000262f, 0.352051f, 0.000246f, 0.336182f, 0.000232f,
+ 0.999512f, 0.000072f, 0.999512f, 0.000072f, 0.999512f, 0.000072f, 0.999512f, 0.000072f,
+ 0.999512f, 0.000073f, 0.999512f, 0.000076f, 0.999512f, 0.000078f, 0.999512f, 0.000082f,
+ 0.999023f, 0.000086f, 0.999023f, 0.000095f, 0.998535f, 0.000102f, 0.998047f, 0.000116f,
+ 0.998047f, 0.000131f, 0.997070f, 0.000147f, 0.996094f, 0.000167f, 0.995117f, 0.000195f,
+ 0.993652f, 0.000219f, 0.991699f, 0.000246f, 0.989746f, 0.000278f, 0.987305f, 0.000315f,
+ 0.984375f, 0.000350f, 0.980957f, 0.000385f, 0.976562f, 0.000427f, 0.972168f, 0.000467f,
+ 0.967285f, 0.000509f, 0.960938f, 0.000548f, 0.954102f, 0.000587f, 0.946777f, 0.000623f,
+ 0.937988f, 0.000657f, 0.928711f, 0.000690f, 0.918457f, 0.000718f, 0.907715f, 0.000741f,
+ 0.895508f, 0.000762f, 0.882812f, 0.000778f, 0.869141f, 0.000791f, 0.854492f, 0.000798f,
+ 0.839355f, 0.000802f, 0.823242f, 0.000801f, 0.806152f, 0.000796f, 0.789062f, 0.000788f,
+ 0.770996f, 0.000777f, 0.752930f, 0.000762f, 0.733887f, 0.000745f, 0.714844f, 0.000726f,
+ 0.695312f, 0.000704f, 0.675293f, 0.000682f, 0.655273f, 0.000658f, 0.635254f, 0.000633f,
+ 0.615234f, 0.000607f, 0.595215f, 0.000582f, 0.575195f, 0.000556f, 0.555176f, 0.000530f,
+ 0.535645f, 0.000504f, 0.515625f, 0.000479f, 0.496582f, 0.000455f, 0.477539f, 0.000431f,
+ 0.458984f, 0.000407f, 0.440430f, 0.000385f, 0.422363f, 0.000363f, 0.404785f, 0.000343f,
+ 0.387695f, 0.000323f, 0.370850f, 0.000304f, 0.354736f, 0.000286f, 0.338867f, 0.000268f,
+ 0.999512f, 0.000119f, 0.999512f, 0.000119f, 0.999512f, 0.000119f, 0.999512f, 0.000119f,
+ 0.999512f, 0.000121f, 0.999512f, 0.000122f, 0.999512f, 0.000128f, 0.999512f, 0.000131f,
+ 0.999512f, 0.000139f, 0.999023f, 0.000149f, 0.998535f, 0.000161f, 0.998047f, 0.000179f,
+ 0.998047f, 0.000194f, 0.997070f, 0.000220f, 0.996094f, 0.000247f, 0.994629f, 0.000275f,
+ 0.993652f, 0.000309f, 0.991699f, 0.000344f, 0.989746f, 0.000385f, 0.986816f, 0.000429f,
+ 0.983887f, 0.000471f, 0.980469f, 0.000519f, 0.976074f, 0.000565f, 0.971680f, 0.000614f,
+ 0.966309f, 0.000664f, 0.959961f, 0.000710f, 0.953125f, 0.000754f, 0.945312f, 0.000797f,
+ 0.936523f, 0.000837f, 0.927246f, 0.000873f, 0.916992f, 0.000902f, 0.905762f, 0.000929f,
+ 0.893555f, 0.000950f, 0.880859f, 0.000966f, 0.866699f, 0.000977f, 0.852539f, 0.000981f,
+ 0.836914f, 0.000981f, 0.821289f, 0.000977f, 0.804688f, 0.000968f, 0.787109f, 0.000955f,
+ 0.769531f, 0.000937f, 0.751465f, 0.000917f, 0.732422f, 0.000894f, 0.713379f, 0.000868f,
+ 0.694336f, 0.000840f, 0.674805f, 0.000811f, 0.655273f, 0.000780f, 0.635254f, 0.000749f,
+ 0.615723f, 0.000716f, 0.595703f, 0.000685f, 0.575684f, 0.000653f, 0.556152f, 0.000621f,
+ 0.536621f, 0.000590f, 0.517090f, 0.000559f, 0.498291f, 0.000530f, 0.479492f, 0.000501f,
+ 0.460938f, 0.000473f, 0.442627f, 0.000446f, 0.424805f, 0.000420f, 0.407227f, 0.000396f,
+ 0.390137f, 0.000373f, 0.373535f, 0.000350f, 0.357422f, 0.000329f, 0.341553f, 0.000309f,
+ 0.999512f, 0.000187f, 0.999512f, 0.000187f, 0.999512f, 0.000188f, 0.999512f, 0.000188f,
+ 0.999512f, 0.000190f, 0.999512f, 0.000194f, 0.999512f, 0.000201f, 0.999023f, 0.000204f,
+ 0.999023f, 0.000213f, 0.999023f, 0.000228f, 0.998535f, 0.000242f, 0.998535f, 0.000264f,
+ 0.997559f, 0.000285f, 0.997070f, 0.000311f, 0.996094f, 0.000351f, 0.995117f, 0.000386f,
+ 0.993164f, 0.000429f, 0.991211f, 0.000470f, 0.989258f, 0.000520f, 0.986328f, 0.000575f,
+ 0.983398f, 0.000628f, 0.979492f, 0.000683f, 0.975586f, 0.000741f, 0.970703f, 0.000801f,
+ 0.965332f, 0.000855f, 0.958984f, 0.000910f, 0.951660f, 0.000961f, 0.943848f, 0.001009f,
+ 0.935059f, 0.001053f, 0.925781f, 0.001090f, 0.915039f, 0.001123f, 0.903809f, 0.001152f,
+ 0.891602f, 0.001172f, 0.878906f, 0.001186f, 0.864746f, 0.001194f, 0.850586f, 0.001195f,
+ 0.835449f, 0.001191f, 0.819336f, 0.001181f, 0.802734f, 0.001164f, 0.785645f, 0.001144f,
+ 0.768066f, 0.001121f, 0.750000f, 0.001092f, 0.731445f, 0.001061f, 0.712402f, 0.001027f,
+ 0.693359f, 0.000992f, 0.674316f, 0.000955f, 0.654785f, 0.000916f, 0.635254f, 0.000877f,
+ 0.615723f, 0.000838f, 0.596191f, 0.000799f, 0.576660f, 0.000760f, 0.557129f, 0.000721f,
+ 0.538086f, 0.000684f, 0.518555f, 0.000648f, 0.500000f, 0.000612f, 0.481445f, 0.000578f,
+ 0.462891f, 0.000545f, 0.444824f, 0.000513f, 0.427246f, 0.000483f, 0.409912f, 0.000454f,
+ 0.392822f, 0.000427f, 0.376221f, 0.000401f, 0.360107f, 0.000376f, 0.344482f, 0.000353f,
+ 0.999512f, 0.000284f, 0.999512f, 0.000284f, 0.999512f, 0.000284f, 0.999512f, 0.000285f,
+ 0.999512f, 0.000287f, 0.999512f, 0.000292f, 0.999512f, 0.000296f, 0.999023f, 0.000307f,
+ 0.999023f, 0.000320f, 0.999023f, 0.000338f, 0.998535f, 0.000349f, 0.998047f, 0.000381f,
+ 0.997559f, 0.000407f, 0.996582f, 0.000447f, 0.995605f, 0.000480f, 0.994629f, 0.000531f,
+ 0.992676f, 0.000579f, 0.990723f, 0.000637f, 0.988770f, 0.000693f, 0.985840f, 0.000755f,
+ 0.982422f, 0.000824f, 0.979004f, 0.000889f, 0.975098f, 0.000958f, 0.969727f, 0.001024f,
+ 0.963867f, 0.001090f, 0.957520f, 0.001152f, 0.950684f, 0.001211f, 0.942383f, 0.001263f,
+ 0.933594f, 0.001309f, 0.923828f, 0.001353f, 0.913086f, 0.001387f, 0.901855f, 0.001413f,
+ 0.889648f, 0.001432f, 0.876465f, 0.001443f, 0.862793f, 0.001446f, 0.848145f, 0.001442f,
+ 0.833008f, 0.001431f, 0.817383f, 0.001413f, 0.800781f, 0.001390f, 0.783691f, 0.001362f,
+ 0.766113f, 0.001328f, 0.748535f, 0.001291f, 0.729980f, 0.001250f, 0.711426f, 0.001207f,
+ 0.692871f, 0.001163f, 0.673828f, 0.001116f, 0.654785f, 0.001068f, 0.635254f, 0.001020f,
+ 0.616211f, 0.000973f, 0.596680f, 0.000926f, 0.577637f, 0.000878f, 0.558105f, 0.000833f,
+ 0.539062f, 0.000788f, 0.520508f, 0.000745f, 0.501465f, 0.000702f, 0.483154f, 0.000663f,
+ 0.465088f, 0.000624f, 0.447266f, 0.000587f, 0.429443f, 0.000552f, 0.412354f, 0.000518f,
+ 0.395508f, 0.000486f, 0.378906f, 0.000456f, 0.363037f, 0.000427f, 0.347168f, 0.000400f,
+ 0.999512f, 0.000417f, 0.999512f, 0.000417f, 0.999512f, 0.000418f, 0.999512f, 0.000419f,
+ 0.999512f, 0.000422f, 0.999512f, 0.000425f, 0.999023f, 0.000434f, 0.999023f, 0.000447f,
+ 0.999023f, 0.000462f, 0.999023f, 0.000480f, 0.998047f, 0.000508f, 0.998047f, 0.000538f,
+ 0.997070f, 0.000576f, 0.996582f, 0.000621f, 0.995605f, 0.000669f, 0.993652f, 0.000721f,
+ 0.992188f, 0.000784f, 0.990723f, 0.000849f, 0.987793f, 0.000918f, 0.985840f, 0.000996f,
+ 0.982422f, 0.001071f, 0.978516f, 0.001148f, 0.973633f, 0.001225f, 0.968750f, 0.001304f,
+ 0.962891f, 0.001378f, 0.956543f, 0.001447f, 0.948730f, 0.001511f, 0.940918f, 0.001568f,
+ 0.931641f, 0.001617f, 0.921875f, 0.001660f, 0.911621f, 0.001697f, 0.899902f, 0.001719f,
+ 0.887695f, 0.001735f, 0.874512f, 0.001740f, 0.860840f, 0.001738f, 0.846191f, 0.001725f,
+ 0.831055f, 0.001706f, 0.815430f, 0.001679f, 0.798828f, 0.001646f, 0.782227f, 0.001607f,
+ 0.764648f, 0.001562f, 0.747070f, 0.001514f, 0.729004f, 0.001462f, 0.710449f, 0.001409f,
+ 0.691895f, 0.001352f, 0.673340f, 0.001295f, 0.654297f, 0.001237f, 0.635254f, 0.001179f,
+ 0.616211f, 0.001122f, 0.597168f, 0.001065f, 0.578125f, 0.001010f, 0.559570f, 0.000955f,
+ 0.540527f, 0.000902f, 0.521973f, 0.000852f, 0.503418f, 0.000803f, 0.485352f, 0.000755f,
+ 0.467285f, 0.000710f, 0.449463f, 0.000668f, 0.431885f, 0.000626f, 0.414795f, 0.000587f,
+ 0.398193f, 0.000551f, 0.381836f, 0.000516f, 0.365723f, 0.000483f, 0.350098f, 0.000452f,
+ 0.999023f, 0.000597f, 0.999023f, 0.000597f, 0.999023f, 0.000597f, 0.999023f, 0.000598f,
+ 0.999023f, 0.000602f, 0.999023f, 0.000610f, 0.999023f, 0.000618f, 0.999023f, 0.000632f,
+ 0.998535f, 0.000651f, 0.998535f, 0.000675f, 0.998047f, 0.000704f, 0.997559f, 0.000742f,
+ 0.997070f, 0.000787f, 0.996094f, 0.000843f, 0.995117f, 0.000902f, 0.993652f, 0.000966f,
+ 0.992188f, 0.001039f, 0.990234f, 0.001117f, 0.987793f, 0.001197f, 0.984863f, 0.001286f,
+ 0.981445f, 0.001372f, 0.977539f, 0.001464f, 0.972656f, 0.001553f, 0.967773f, 0.001639f,
+ 0.961914f, 0.001722f, 0.955078f, 0.001798f, 0.947754f, 0.001868f, 0.938965f, 0.001928f,
+ 0.930176f, 0.001982f, 0.920410f, 0.002026f, 0.909668f, 0.002056f, 0.897949f, 0.002075f,
+ 0.885254f, 0.002085f, 0.872559f, 0.002083f, 0.858398f, 0.002071f, 0.844238f, 0.002048f,
+ 0.828613f, 0.002018f, 0.812988f, 0.001980f, 0.796875f, 0.001934f, 0.780273f, 0.001883f,
+ 0.763184f, 0.001824f, 0.745605f, 0.001763f, 0.728027f, 0.001698f, 0.709473f, 0.001632f,
+ 0.691406f, 0.001563f, 0.672852f, 0.001494f, 0.654297f, 0.001422f, 0.635254f, 0.001355f,
+ 0.616699f, 0.001286f, 0.598145f, 0.001218f, 0.579102f, 0.001152f, 0.560547f, 0.001089f,
+ 0.541992f, 0.001027f, 0.523438f, 0.000968f, 0.505371f, 0.000911f, 0.487305f, 0.000857f,
+ 0.469482f, 0.000804f, 0.451904f, 0.000755f, 0.434570f, 0.000708f, 0.417480f, 0.000663f,
+ 0.400879f, 0.000621f, 0.384521f, 0.000581f, 0.368652f, 0.000544f, 0.353027f, 0.000508f,
+ 0.999023f, 0.000833f, 0.999023f, 0.000833f, 0.999023f, 0.000834f, 0.999023f, 0.000835f,
+ 0.999023f, 0.000840f, 0.999023f, 0.000845f, 0.998535f, 0.000861f, 0.998535f, 0.000875f,
+ 0.998535f, 0.000897f, 0.998047f, 0.000928f, 0.997559f, 0.000965f, 0.997070f, 0.001007f,
+ 0.996582f, 0.001061f, 0.995605f, 0.001128f, 0.994629f, 0.001195f, 0.993164f, 0.001276f,
+ 0.991699f, 0.001362f, 0.989258f, 0.001453f, 0.986816f, 0.001539f, 0.983887f, 0.001645f,
+ 0.980469f, 0.001747f, 0.976562f, 0.001849f, 0.971680f, 0.001945f, 0.966309f, 0.002045f,
+ 0.959961f, 0.002136f, 0.953613f, 0.002218f, 0.945801f, 0.002291f, 0.937500f, 0.002357f,
+ 0.928223f, 0.002407f, 0.917969f, 0.002447f, 0.907227f, 0.002472f, 0.895508f, 0.002487f,
+ 0.883301f, 0.002485f, 0.870117f, 0.002474f, 0.856445f, 0.002451f, 0.841797f, 0.002417f,
+ 0.826660f, 0.002373f, 0.811035f, 0.002317f, 0.794922f, 0.002258f, 0.778320f, 0.002190f,
+ 0.761230f, 0.002117f, 0.744141f, 0.002041f, 0.726562f, 0.001961f, 0.708496f, 0.001880f,
+ 0.690430f, 0.001796f, 0.672363f, 0.001713f, 0.654297f, 0.001630f, 0.635742f, 0.001547f,
+ 0.617188f, 0.001466f, 0.598633f, 0.001387f, 0.580078f, 0.001310f, 0.561523f, 0.001235f,
+ 0.543457f, 0.001164f, 0.524902f, 0.001095f, 0.507324f, 0.001029f, 0.489258f, 0.000967f,
+ 0.471680f, 0.000906f, 0.454346f, 0.000850f, 0.437012f, 0.000796f, 0.420166f, 0.000745f,
+ 0.403564f, 0.000698f, 0.387451f, 0.000652f, 0.371582f, 0.000609f, 0.356201f, 0.000569f,
+ 0.998535f, 0.001139f, 0.998535f, 0.001139f, 0.998535f, 0.001140f, 0.998535f, 0.001142f,
+ 0.998535f, 0.001147f, 0.998535f, 0.001159f, 0.998535f, 0.001168f, 0.998047f, 0.001190f,
+ 0.998047f, 0.001217f, 0.997559f, 0.001254f, 0.997559f, 0.001301f, 0.997070f, 0.001356f,
+ 0.996094f, 0.001416f, 0.995605f, 0.001493f, 0.994141f, 0.001574f, 0.992676f, 0.001663f,
+ 0.990723f, 0.001759f, 0.988770f, 0.001867f, 0.986328f, 0.001980f, 0.982910f, 0.002087f,
+ 0.979492f, 0.002199f, 0.975586f, 0.002319f, 0.970703f, 0.002422f, 0.965332f, 0.002531f,
+ 0.958496f, 0.002628f, 0.952148f, 0.002714f, 0.944336f, 0.002792f, 0.935547f, 0.002851f,
+ 0.926270f, 0.002903f, 0.916016f, 0.002935f, 0.904785f, 0.002954f, 0.893066f, 0.002956f,
+ 0.880859f, 0.002947f, 0.867676f, 0.002920f, 0.853516f, 0.002882f, 0.839355f, 0.002831f,
+ 0.824219f, 0.002769f, 0.809082f, 0.002699f, 0.792969f, 0.002619f, 0.776367f, 0.002533f,
+ 0.759766f, 0.002443f, 0.742676f, 0.002350f, 0.725586f, 0.002251f, 0.708008f, 0.002151f,
+ 0.689941f, 0.002052f, 0.671875f, 0.001953f, 0.653809f, 0.001854f, 0.635742f, 0.001758f,
+ 0.617676f, 0.001663f, 0.599121f, 0.001572f, 0.581055f, 0.001482f, 0.562988f, 0.001395f,
+ 0.544922f, 0.001313f, 0.526855f, 0.001234f, 0.508789f, 0.001158f, 0.491455f, 0.001086f,
+ 0.473877f, 0.001018f, 0.456787f, 0.000954f, 0.439697f, 0.000892f, 0.422852f, 0.000834f,
+ 0.406494f, 0.000780f, 0.390381f, 0.000729f, 0.374512f, 0.000680f, 0.359131f, 0.000635f,
+ 0.998047f, 0.001528f, 0.998047f, 0.001528f, 0.998047f, 0.001529f, 0.998047f, 0.001532f,
+ 0.998047f, 0.001539f, 0.998047f, 0.001546f, 0.998047f, 0.001562f, 0.998047f, 0.001589f,
+ 0.997559f, 0.001621f, 0.997559f, 0.001668f, 0.996582f, 0.001715f, 0.996582f, 0.001777f,
+ 0.995605f, 0.001859f, 0.994629f, 0.001939f, 0.993652f, 0.002035f, 0.992188f, 0.002140f,
+ 0.990234f, 0.002243f, 0.987793f, 0.002369f, 0.985352f, 0.002489f, 0.981934f, 0.002621f,
+ 0.978516f, 0.002750f, 0.974121f, 0.002876f, 0.969238f, 0.002991f, 0.963867f, 0.003105f,
+ 0.957031f, 0.003206f, 0.950195f, 0.003300f, 0.942383f, 0.003374f, 0.933594f, 0.003431f,
+ 0.923828f, 0.003473f, 0.913574f, 0.003498f, 0.902344f, 0.003506f, 0.890625f, 0.003494f,
+ 0.878418f, 0.003468f, 0.865234f, 0.003426f, 0.851074f, 0.003366f, 0.836914f, 0.003296f,
+ 0.822266f, 0.003216f, 0.806641f, 0.003122f, 0.791016f, 0.003023f, 0.774902f, 0.002916f,
+ 0.758301f, 0.002804f, 0.741211f, 0.002689f, 0.724121f, 0.002573f, 0.707031f, 0.002453f,
+ 0.689453f, 0.002335f, 0.671875f, 0.002216f, 0.653809f, 0.002102f, 0.636230f, 0.001987f,
+ 0.618164f, 0.001878f, 0.600098f, 0.001771f, 0.582031f, 0.001668f, 0.564453f, 0.001569f,
+ 0.546387f, 0.001475f, 0.528809f, 0.001384f, 0.511230f, 0.001297f, 0.493652f, 0.001217f,
+ 0.476318f, 0.001139f, 0.459229f, 0.001065f, 0.442383f, 0.000996f, 0.425781f, 0.000930f,
+ 0.409424f, 0.000869f, 0.393311f, 0.000811f, 0.377686f, 0.000757f, 0.362305f, 0.000707f,
+ 0.997559f, 0.002018f, 0.997559f, 0.002018f, 0.997559f, 0.002018f, 0.997559f, 0.002022f,
+ 0.997559f, 0.002028f, 0.997559f, 0.002045f, 0.997559f, 0.002066f, 0.997559f, 0.002092f,
+ 0.997559f, 0.002129f, 0.996582f, 0.002176f, 0.996094f, 0.002235f, 0.995605f, 0.002312f,
+ 0.995605f, 0.002407f, 0.993652f, 0.002491f, 0.992676f, 0.002605f, 0.991211f, 0.002729f,
+ 0.989258f, 0.002846f, 0.987305f, 0.002987f, 0.984375f, 0.003120f, 0.980957f, 0.003263f,
+ 0.977051f, 0.003403f, 0.972656f, 0.003542f, 0.967285f, 0.003666f, 0.961914f, 0.003782f,
+ 0.955566f, 0.003889f, 0.947754f, 0.003967f, 0.939941f, 0.004044f, 0.931152f, 0.004097f,
+ 0.921387f, 0.004131f, 0.911133f, 0.004139f, 0.899902f, 0.004131f, 0.888184f, 0.004108f,
+ 0.875488f, 0.004055f, 0.862305f, 0.003990f, 0.848633f, 0.003914f, 0.834473f, 0.003819f,
+ 0.819824f, 0.003712f, 0.804199f, 0.003593f, 0.788574f, 0.003469f, 0.772949f, 0.003338f,
+ 0.756348f, 0.003201f, 0.739746f, 0.003063f, 0.723145f, 0.002924f, 0.706055f, 0.002781f,
+ 0.688965f, 0.002644f, 0.671387f, 0.002506f, 0.653809f, 0.002371f, 0.636230f, 0.002239f,
+ 0.618652f, 0.002111f, 0.601074f, 0.001989f, 0.583496f, 0.001871f, 0.565430f, 0.001759f,
+ 0.547852f, 0.001650f, 0.530273f, 0.001547f, 0.513184f, 0.001449f, 0.495850f, 0.001356f,
+ 0.478760f, 0.001269f, 0.461670f, 0.001185f, 0.445068f, 0.001107f, 0.428467f, 0.001035f,
+ 0.412354f, 0.000965f, 0.396240f, 0.000901f, 0.380615f, 0.000840f, 0.365479f, 0.000783f,
+ 0.997070f, 0.002625f, 0.997070f, 0.002625f, 0.997070f, 0.002626f, 0.997070f, 0.002630f,
+ 0.997070f, 0.002640f, 0.997070f, 0.002659f, 0.997070f, 0.002676f, 0.996582f, 0.002708f,
+ 0.996582f, 0.002752f, 0.996094f, 0.002813f, 0.995605f, 0.002886f, 0.995117f, 0.002956f,
+ 0.994141f, 0.003071f, 0.992676f, 0.003172f, 0.991699f, 0.003292f, 0.990234f, 0.003433f,
+ 0.988281f, 0.003580f, 0.985840f, 0.003727f, 0.982910f, 0.003870f, 0.979492f, 0.004028f,
+ 0.975586f, 0.004177f, 0.971191f, 0.004322f, 0.966309f, 0.004456f, 0.959961f, 0.004570f,
+ 0.953125f, 0.004669f, 0.945801f, 0.004757f, 0.937500f, 0.004826f, 0.928711f, 0.004864f,
+ 0.918945f, 0.004883f, 0.908691f, 0.004875f, 0.897461f, 0.004845f, 0.885254f, 0.004795f,
+ 0.872559f, 0.004723f, 0.859863f, 0.004631f, 0.846191f, 0.004520f, 0.832031f, 0.004398f,
+ 0.817383f, 0.004261f, 0.802246f, 0.004116f, 0.786621f, 0.003963f, 0.770996f, 0.003805f,
+ 0.754883f, 0.003639f, 0.738770f, 0.003475f, 0.722168f, 0.003307f, 0.705078f, 0.003143f,
+ 0.688477f, 0.002981f, 0.671387f, 0.002821f, 0.653809f, 0.002665f, 0.636719f, 0.002512f,
+ 0.619141f, 0.002367f, 0.602051f, 0.002226f, 0.584473f, 0.002090f, 0.566895f, 0.001963f,
+ 0.549805f, 0.001840f, 0.532227f, 0.001722f, 0.515137f, 0.001613f, 0.498047f, 0.001508f,
+ 0.481201f, 0.001409f, 0.464355f, 0.001316f, 0.447754f, 0.001228f, 0.431396f, 0.001145f,
+ 0.415283f, 0.001069f, 0.399414f, 0.000997f, 0.383789f, 0.000929f, 0.368652f, 0.000865f,
+ 0.996582f, 0.003370f, 0.996582f, 0.003370f, 0.996582f, 0.003372f, 0.996582f, 0.003378f,
+ 0.996582f, 0.003389f, 0.996094f, 0.003410f, 0.996094f, 0.003435f, 0.996094f, 0.003471f,
+ 0.996094f, 0.003523f, 0.995117f, 0.003588f, 0.995117f, 0.003664f, 0.994141f, 0.003754f,
+ 0.993164f, 0.003864f, 0.992676f, 0.003990f, 0.990723f, 0.004128f, 0.989746f, 0.004288f,
+ 0.987793f, 0.004429f, 0.984375f, 0.004601f, 0.981445f, 0.004757f, 0.978027f, 0.004925f,
+ 0.974121f, 0.005089f, 0.969727f, 0.005241f, 0.964355f, 0.005375f, 0.958008f, 0.005486f,
+ 0.951172f, 0.005596f, 0.943848f, 0.005665f, 0.935547f, 0.005718f, 0.925781f, 0.005737f,
+ 0.916016f, 0.005733f, 0.905762f, 0.005707f, 0.894531f, 0.005650f, 0.882324f, 0.005569f,
+ 0.870117f, 0.005466f, 0.856934f, 0.005341f, 0.843262f, 0.005199f, 0.829102f, 0.005043f,
+ 0.814941f, 0.004871f, 0.799805f, 0.004692f, 0.784668f, 0.004505f, 0.769043f, 0.004314f,
+ 0.753418f, 0.004116f, 0.737305f, 0.003922f, 0.721191f, 0.003729f, 0.704590f, 0.003536f,
+ 0.687988f, 0.003347f, 0.670898f, 0.003162f, 0.654297f, 0.002983f, 0.637207f, 0.002810f,
+ 0.620117f, 0.002642f, 0.603027f, 0.002481f, 0.585938f, 0.002329f, 0.568359f, 0.002182f,
+ 0.551270f, 0.002045f, 0.534180f, 0.001913f, 0.517090f, 0.001788f, 0.500488f, 0.001671f,
+ 0.483643f, 0.001560f, 0.467041f, 0.001456f, 0.450684f, 0.001358f, 0.434326f, 0.001266f,
+ 0.418213f, 0.001181f, 0.402588f, 0.001101f, 0.386963f, 0.001025f, 0.371826f, 0.000954f,
+ 0.995605f, 0.004276f, 0.995605f, 0.004276f, 0.995605f, 0.004280f, 0.995605f, 0.004284f,
+ 0.995605f, 0.004299f, 0.995117f, 0.004318f, 0.995117f, 0.004349f, 0.995117f, 0.004383f,
+ 0.994629f, 0.004456f, 0.994629f, 0.004524f, 0.994141f, 0.004612f, 0.993164f, 0.004704f,
+ 0.992676f, 0.004848f, 0.991699f, 0.004974f, 0.990234f, 0.005142f, 0.987793f, 0.005291f,
+ 0.986328f, 0.005474f, 0.982910f, 0.005638f, 0.980469f, 0.005825f, 0.976562f, 0.005989f,
+ 0.972656f, 0.006157f, 0.967773f, 0.006313f, 0.961914f, 0.006443f, 0.955566f, 0.006554f,
+ 0.948730f, 0.006645f, 0.940918f, 0.006702f, 0.932617f, 0.006733f, 0.923340f, 0.006733f,
+ 0.913574f, 0.006699f, 0.902832f, 0.006645f, 0.891602f, 0.006550f, 0.879395f, 0.006435f,
+ 0.867188f, 0.006294f, 0.854004f, 0.006130f, 0.840332f, 0.005951f, 0.826660f, 0.005756f,
+ 0.812500f, 0.005543f, 0.797363f, 0.005325f, 0.782715f, 0.005100f, 0.767090f, 0.004871f,
+ 0.751465f, 0.004642f, 0.735840f, 0.004414f, 0.719727f, 0.004185f, 0.703613f, 0.003960f,
+ 0.687500f, 0.003744f, 0.670898f, 0.003531f, 0.654297f, 0.003326f, 0.637695f, 0.003128f,
+ 0.620605f, 0.002939f, 0.604004f, 0.002756f, 0.586914f, 0.002584f, 0.569824f, 0.002420f,
+ 0.553223f, 0.002264f, 0.536133f, 0.002117f, 0.519531f, 0.001978f, 0.502930f, 0.001847f,
+ 0.486328f, 0.001723f, 0.469727f, 0.001607f, 0.453369f, 0.001498f, 0.437256f, 0.001395f,
+ 0.421387f, 0.001300f, 0.405762f, 0.001211f, 0.390381f, 0.001127f, 0.375244f, 0.001050f,
+ 0.994141f, 0.005367f, 0.994141f, 0.005367f, 0.994141f, 0.005371f, 0.994141f, 0.005375f,
+ 0.994141f, 0.005394f, 0.994141f, 0.005413f, 0.994141f, 0.005447f, 0.994141f, 0.005508f,
+ 0.993652f, 0.005558f, 0.993652f, 0.005650f, 0.992676f, 0.005741f, 0.991699f, 0.005848f,
+ 0.991211f, 0.006004f, 0.990234f, 0.006149f, 0.988281f, 0.006317f, 0.986328f, 0.006504f,
+ 0.984863f, 0.006687f, 0.981934f, 0.006866f, 0.978516f, 0.007050f, 0.974609f, 0.007233f,
+ 0.970215f, 0.007393f, 0.965820f, 0.007553f, 0.959961f, 0.007675f, 0.953125f, 0.007774f,
+ 0.946289f, 0.007843f, 0.938477f, 0.007889f, 0.929688f, 0.007889f, 0.920410f, 0.007858f,
+ 0.910156f, 0.007793f, 0.899414f, 0.007694f, 0.888672f, 0.007565f, 0.876465f, 0.007401f,
+ 0.864258f, 0.007214f, 0.851074f, 0.007008f, 0.837402f, 0.006779f, 0.823730f, 0.006535f,
+ 0.809570f, 0.006279f, 0.794922f, 0.006023f, 0.780273f, 0.005753f, 0.765137f, 0.005482f,
+ 0.750000f, 0.005215f, 0.734375f, 0.004944f, 0.718750f, 0.004681f, 0.703125f, 0.004425f,
+ 0.687012f, 0.004173f, 0.670898f, 0.003929f, 0.654297f, 0.003700f, 0.638184f, 0.003473f,
+ 0.621582f, 0.003260f, 0.604980f, 0.003056f, 0.588379f, 0.002861f, 0.571777f, 0.002676f,
+ 0.555176f, 0.002502f, 0.538574f, 0.002337f, 0.521973f, 0.002180f, 0.505371f, 0.002035f,
+ 0.488770f, 0.001898f, 0.472656f, 0.001769f, 0.456299f, 0.001649f, 0.440430f, 0.001534f,
+ 0.424561f, 0.001430f, 0.408936f, 0.001329f, 0.393555f, 0.001238f, 0.378418f, 0.001151f,
+ 0.993164f, 0.006672f, 0.993164f, 0.006672f, 0.993164f, 0.006676f, 0.993164f, 0.006687f,
+ 0.993164f, 0.006699f, 0.993164f, 0.006721f, 0.992676f, 0.006760f, 0.992676f, 0.006821f,
+ 0.992188f, 0.006897f, 0.991699f, 0.006973f, 0.991211f, 0.007099f, 0.990234f, 0.007206f,
+ 0.990234f, 0.007366f, 0.988281f, 0.007519f, 0.986328f, 0.007706f, 0.984863f, 0.007912f,
+ 0.982422f, 0.008087f, 0.979980f, 0.008286f, 0.977051f, 0.008476f, 0.972656f, 0.008667f,
+ 0.968262f, 0.008827f, 0.962891f, 0.008980f, 0.957520f, 0.009079f, 0.951172f, 0.009171f,
+ 0.943848f, 0.009216f, 0.935547f, 0.009224f, 0.926758f, 0.009193f, 0.917480f, 0.009125f,
+ 0.906738f, 0.009010f, 0.895996f, 0.008865f, 0.885254f, 0.008682f, 0.873047f, 0.008469f,
+ 0.860840f, 0.008232f, 0.847656f, 0.007973f, 0.834473f, 0.007690f, 0.820801f, 0.007397f,
+ 0.807129f, 0.007092f, 0.792969f, 0.006783f, 0.778320f, 0.006462f, 0.763184f, 0.006145f,
+ 0.748535f, 0.005833f, 0.733398f, 0.005524f, 0.717773f, 0.005219f, 0.702148f, 0.004925f,
+ 0.686523f, 0.004639f, 0.670898f, 0.004364f, 0.654785f, 0.004097f, 0.638672f, 0.003847f,
+ 0.622559f, 0.003605f, 0.605957f, 0.003376f, 0.589844f, 0.003157f, 0.573242f, 0.002951f,
+ 0.556641f, 0.002756f, 0.540527f, 0.002573f, 0.523926f, 0.002399f, 0.507812f, 0.002237f,
+ 0.491455f, 0.002085f, 0.475342f, 0.001943f, 0.459229f, 0.001809f, 0.443359f, 0.001684f,
+ 0.427734f, 0.001567f, 0.412109f, 0.001457f, 0.396973f, 0.001356f, 0.382080f, 0.001261f,
+ 0.991699f, 0.008217f, 0.991699f, 0.008217f, 0.991699f, 0.008217f, 0.991699f, 0.008232f,
+ 0.991211f, 0.008240f, 0.991211f, 0.008270f, 0.991211f, 0.008324f, 0.991211f, 0.008377f,
+ 0.990723f, 0.008461f, 0.990234f, 0.008553f, 0.989746f, 0.008682f, 0.988770f, 0.008820f,
+ 0.987793f, 0.008972f, 0.986816f, 0.009163f, 0.985352f, 0.009338f, 0.982910f, 0.009567f,
+ 0.980957f, 0.009758f, 0.977539f, 0.009956f, 0.974609f, 0.010155f, 0.970215f, 0.010330f,
+ 0.965820f, 0.010483f, 0.960449f, 0.010597f, 0.954590f, 0.010696f, 0.947754f, 0.010750f,
+ 0.940430f, 0.010757f, 0.932129f, 0.010735f, 0.923340f, 0.010651f, 0.913574f, 0.010536f,
+ 0.903809f, 0.010376f, 0.892578f, 0.010162f, 0.881348f, 0.009926f, 0.869629f, 0.009651f,
+ 0.857422f, 0.009354f, 0.844727f, 0.009026f, 0.831543f, 0.008690f, 0.817871f, 0.008331f,
+ 0.804199f, 0.007973f, 0.790527f, 0.007603f, 0.775879f, 0.007233f, 0.761719f, 0.006866f,
+ 0.747070f, 0.006500f, 0.731934f, 0.006145f, 0.716797f, 0.005798f, 0.701660f, 0.005466f,
+ 0.686523f, 0.005138f, 0.670898f, 0.004829f, 0.655273f, 0.004532f, 0.639160f, 0.004246f,
+ 0.623535f, 0.003975f, 0.607422f, 0.003719f, 0.591309f, 0.003477f, 0.575195f, 0.003246f,
+ 0.558594f, 0.003029f, 0.542480f, 0.002827f, 0.526367f, 0.002634f, 0.510254f, 0.002455f,
+ 0.494141f, 0.002285f, 0.478271f, 0.002129f, 0.462402f, 0.001980f, 0.446533f, 0.001843f,
+ 0.430908f, 0.001715f, 0.415527f, 0.001594f, 0.400391f, 0.001483f, 0.385498f, 0.001378f,
+ 0.989746f, 0.010040f, 0.989746f, 0.010040f, 0.989746f, 0.010040f, 0.989746f, 0.010048f,
+ 0.989746f, 0.010071f, 0.989746f, 0.010094f, 0.989258f, 0.010147f, 0.989258f, 0.010223f,
+ 0.988770f, 0.010300f, 0.988770f, 0.010406f, 0.987793f, 0.010529f, 0.986816f, 0.010696f,
+ 0.986328f, 0.010857f, 0.984863f, 0.011055f, 0.982422f, 0.011238f, 0.981445f, 0.011467f,
+ 0.978516f, 0.011673f, 0.975098f, 0.011871f, 0.972168f, 0.012062f, 0.967285f, 0.012215f,
+ 0.962402f, 0.012352f, 0.957031f, 0.012459f, 0.951172f, 0.012535f, 0.944336f, 0.012535f,
+ 0.937012f, 0.012520f, 0.928711f, 0.012428f, 0.919922f, 0.012299f, 0.910156f, 0.012115f,
+ 0.899414f, 0.011879f, 0.889160f, 0.011612f, 0.877441f, 0.011299f, 0.865723f, 0.010956f,
+ 0.853516f, 0.010582f, 0.841309f, 0.010193f, 0.828125f, 0.009773f, 0.814941f, 0.009361f,
+ 0.801270f, 0.008926f, 0.787598f, 0.008499f, 0.773926f, 0.008064f, 0.759766f, 0.007641f,
+ 0.745117f, 0.007225f, 0.730469f, 0.006817f, 0.716309f, 0.006424f, 0.701172f, 0.006042f,
+ 0.686035f, 0.005676f, 0.670898f, 0.005329f, 0.655273f, 0.004993f, 0.640137f, 0.004673f,
+ 0.624512f, 0.004372f, 0.608398f, 0.004086f, 0.592773f, 0.003817f, 0.576660f, 0.003561f,
+ 0.561035f, 0.003323f, 0.544922f, 0.003098f, 0.528809f, 0.002884f, 0.512695f, 0.002686f,
+ 0.497070f, 0.002501f, 0.481201f, 0.002327f, 0.465332f, 0.002165f, 0.449707f, 0.002014f,
+ 0.434326f, 0.001873f, 0.418945f, 0.001740f, 0.403809f, 0.001617f, 0.388916f, 0.001504f,
+ 0.987793f, 0.012169f, 0.987793f, 0.012169f, 0.987793f, 0.012169f, 0.987793f, 0.012184f,
+ 0.987305f, 0.012207f, 0.987305f, 0.012245f, 0.987305f, 0.012291f, 0.986816f, 0.012360f,
+ 0.986816f, 0.012459f, 0.986328f, 0.012573f, 0.985840f, 0.012695f, 0.984863f, 0.012878f,
+ 0.983887f, 0.013046f, 0.982422f, 0.013237f, 0.980469f, 0.013466f, 0.979004f, 0.013680f,
+ 0.976074f, 0.013878f, 0.972656f, 0.014069f, 0.969238f, 0.014259f, 0.964355f, 0.014397f,
+ 0.959961f, 0.014488f, 0.954102f, 0.014580f, 0.947754f, 0.014595f, 0.940430f, 0.014557f,
+ 0.933105f, 0.014481f, 0.925293f, 0.014328f, 0.915527f, 0.014122f, 0.906250f, 0.013870f,
+ 0.895996f, 0.013565f, 0.885254f, 0.013206f, 0.873535f, 0.012817f, 0.862305f, 0.012383f,
+ 0.850098f, 0.011932f, 0.837891f, 0.011452f, 0.824707f, 0.010963f, 0.812012f, 0.010460f,
+ 0.798828f, 0.009964f, 0.785156f, 0.009460f, 0.771484f, 0.008965f, 0.757812f, 0.008484f,
+ 0.743652f, 0.008003f, 0.729492f, 0.007542f, 0.715332f, 0.007095f, 0.700684f, 0.006668f,
+ 0.686035f, 0.006256f, 0.670898f, 0.005863f, 0.655762f, 0.005489f, 0.640625f, 0.005135f,
+ 0.625488f, 0.004799f, 0.609863f, 0.004478f, 0.594238f, 0.004181f, 0.578613f, 0.003901f,
+ 0.562988f, 0.003635f, 0.547363f, 0.003386f, 0.531250f, 0.003153f, 0.515625f, 0.002935f,
+ 0.500000f, 0.002729f, 0.484131f, 0.002539f, 0.468506f, 0.002361f, 0.453125f, 0.002195f,
+ 0.437744f, 0.002041f, 0.422363f, 0.001897f, 0.407471f, 0.001763f, 0.392578f, 0.001637f,
+ 0.985352f, 0.014641f, 0.985352f, 0.014641f, 0.984863f, 0.014648f, 0.984863f, 0.014656f,
+ 0.984863f, 0.014679f, 0.984863f, 0.014717f, 0.984863f, 0.014771f, 0.984375f, 0.014839f,
+ 0.984375f, 0.014938f, 0.983398f, 0.015060f, 0.983398f, 0.015244f, 0.981934f, 0.015388f,
+ 0.980957f, 0.015587f, 0.979492f, 0.015778f, 0.977539f, 0.015976f, 0.975586f, 0.016190f,
+ 0.972656f, 0.016388f, 0.969727f, 0.016571f, 0.965820f, 0.016739f, 0.961426f, 0.016861f,
+ 0.956055f, 0.016922f, 0.950684f, 0.016953f, 0.943848f, 0.016922f, 0.937012f, 0.016815f,
+ 0.929199f, 0.016663f, 0.920410f, 0.016434f, 0.911621f, 0.016144f, 0.901855f, 0.015793f,
+ 0.891602f, 0.015411f, 0.880859f, 0.014954f, 0.869629f, 0.014473f, 0.857910f, 0.013947f,
+ 0.846191f, 0.013390f, 0.833984f, 0.012825f, 0.821289f, 0.012253f, 0.809082f, 0.011665f,
+ 0.795898f, 0.011086f, 0.782715f, 0.010506f, 0.769531f, 0.009933f, 0.755859f, 0.009377f,
+ 0.742188f, 0.008842f, 0.728516f, 0.008316f, 0.714355f, 0.007812f, 0.700195f, 0.007336f,
+ 0.685547f, 0.006874f, 0.670898f, 0.006435f, 0.656250f, 0.006020f, 0.641602f, 0.005623f,
+ 0.626465f, 0.005253f, 0.611328f, 0.004902f, 0.596191f, 0.004570f, 0.580566f, 0.004261f,
+ 0.564941f, 0.003967f, 0.549316f, 0.003695f, 0.533691f, 0.003437f, 0.518066f, 0.003199f,
+ 0.502930f, 0.002975f, 0.487305f, 0.002766f, 0.471680f, 0.002571f, 0.456299f, 0.002388f,
+ 0.441162f, 0.002220f, 0.426025f, 0.002062f, 0.411133f, 0.001916f, 0.396240f, 0.001781f,
+ 0.982422f, 0.017502f, 0.982422f, 0.017502f, 0.982422f, 0.017502f, 0.982422f, 0.017517f,
+ 0.981934f, 0.017532f, 0.981934f, 0.017593f, 0.981934f, 0.017639f, 0.981934f, 0.017731f,
+ 0.981445f, 0.017838f, 0.980957f, 0.017960f, 0.979980f, 0.018112f, 0.979004f, 0.018295f,
+ 0.978027f, 0.018478f, 0.975586f, 0.018677f, 0.974609f, 0.018860f, 0.972168f, 0.019073f,
+ 0.969238f, 0.019287f, 0.965820f, 0.019455f, 0.962402f, 0.019562f, 0.958008f, 0.019653f,
+ 0.952637f, 0.019653f, 0.946289f, 0.019623f, 0.939453f, 0.019516f, 0.932617f, 0.019348f,
+ 0.924316f, 0.019089f, 0.916016f, 0.018784f, 0.907227f, 0.018387f, 0.897461f, 0.017944f,
+ 0.887207f, 0.017426f, 0.876465f, 0.016861f, 0.865234f, 0.016266f, 0.854004f, 0.015640f,
+ 0.842285f, 0.014999f, 0.830078f, 0.014320f, 0.818359f, 0.013641f, 0.805664f, 0.012962f,
+ 0.792969f, 0.012291f, 0.780273f, 0.011627f, 0.767090f, 0.010979f, 0.753906f, 0.010345f,
+ 0.740723f, 0.009735f, 0.727539f, 0.009155f, 0.713867f, 0.008591f, 0.699707f, 0.008049f,
+ 0.685547f, 0.007534f, 0.671387f, 0.007050f, 0.656738f, 0.006588f, 0.642578f, 0.006149f,
+ 0.627441f, 0.005737f, 0.612793f, 0.005352f, 0.597656f, 0.004986f, 0.582520f, 0.004642f,
+ 0.567383f, 0.004322f, 0.551758f, 0.004021f, 0.536621f, 0.003744f, 0.520996f, 0.003481f,
+ 0.505859f, 0.003235f, 0.490479f, 0.003006f, 0.475098f, 0.002794f, 0.459717f, 0.002596f,
+ 0.444580f, 0.002411f, 0.429688f, 0.002241f, 0.414795f, 0.002081f, 0.400146f, 0.001933f,
+ 0.979004f, 0.020798f, 0.979004f, 0.020798f, 0.979004f, 0.020798f, 0.979004f, 0.020813f,
+ 0.979004f, 0.020844f, 0.978516f, 0.020874f, 0.978516f, 0.020935f, 0.978027f, 0.021027f,
+ 0.978027f, 0.021149f, 0.977539f, 0.021286f, 0.977051f, 0.021454f, 0.975586f, 0.021622f,
+ 0.974121f, 0.021820f, 0.972656f, 0.021988f, 0.970215f, 0.022186f, 0.968750f, 0.022385f,
+ 0.965820f, 0.022552f, 0.961914f, 0.022675f, 0.958008f, 0.022736f, 0.953613f, 0.022751f,
+ 0.948242f, 0.022736f, 0.942383f, 0.022614f, 0.935547f, 0.022415f, 0.927734f, 0.022156f,
+ 0.919922f, 0.021790f, 0.911621f, 0.021362f, 0.901855f, 0.020859f, 0.892090f, 0.020279f,
+ 0.882324f, 0.019638f, 0.872070f, 0.018951f, 0.860840f, 0.018234f, 0.849609f, 0.017487f,
+ 0.838379f, 0.016708f, 0.826172f, 0.015930f, 0.814453f, 0.015144f, 0.802246f, 0.014359f,
+ 0.790527f, 0.013588f, 0.777832f, 0.012833f, 0.765137f, 0.012100f, 0.752441f, 0.011383f,
+ 0.739258f, 0.010696f, 0.726074f, 0.010040f, 0.712891f, 0.009415f, 0.699219f, 0.008812f,
+ 0.685547f, 0.008240f, 0.671875f, 0.007698f, 0.657715f, 0.007191f, 0.643555f, 0.006710f,
+ 0.628906f, 0.006252f, 0.614258f, 0.005829f, 0.599609f, 0.005428f, 0.584473f, 0.005051f,
+ 0.569336f, 0.004704f, 0.554199f, 0.004372f, 0.539062f, 0.004063f, 0.523926f, 0.003780f,
+ 0.508789f, 0.003513f, 0.493652f, 0.003263f, 0.478271f, 0.003033f, 0.463135f, 0.002817f,
+ 0.448242f, 0.002615f, 0.433350f, 0.002430f, 0.418457f, 0.002256f, 0.403809f, 0.002094f,
+ 0.975098f, 0.024582f, 0.975098f, 0.024567f, 0.975098f, 0.024582f, 0.975098f, 0.024597f,
+ 0.975098f, 0.024628f, 0.975098f, 0.024658f, 0.975098f, 0.024734f, 0.974609f, 0.024826f,
+ 0.973633f, 0.024933f, 0.973633f, 0.025055f, 0.972656f, 0.025223f, 0.972168f, 0.025421f,
+ 0.970215f, 0.025589f, 0.968262f, 0.025742f, 0.966309f, 0.025925f, 0.964355f, 0.026108f,
+ 0.960938f, 0.026230f, 0.957520f, 0.026321f, 0.953613f, 0.026352f, 0.948242f, 0.026260f,
+ 0.943848f, 0.026154f, 0.937500f, 0.025970f, 0.930664f, 0.025650f, 0.922852f, 0.025253f,
+ 0.915039f, 0.024765f, 0.906738f, 0.024200f, 0.897461f, 0.023560f, 0.887207f, 0.022827f,
+ 0.877441f, 0.022064f, 0.866699f, 0.021225f, 0.855957f, 0.020370f, 0.845215f, 0.019470f,
+ 0.833984f, 0.018570f, 0.822266f, 0.017654f, 0.811035f, 0.016754f, 0.799316f, 0.015854f,
+ 0.787109f, 0.014984f, 0.775391f, 0.014122f, 0.763184f, 0.013298f, 0.750488f, 0.012489f,
+ 0.737793f, 0.011726f, 0.725098f, 0.010986f, 0.712402f, 0.010284f, 0.699219f, 0.009621f,
+ 0.685547f, 0.008987f, 0.671875f, 0.008392f, 0.658203f, 0.007828f, 0.644531f, 0.007305f,
+ 0.630371f, 0.006802f, 0.615723f, 0.006336f, 0.601562f, 0.005898f, 0.586914f, 0.005489f,
+ 0.571777f, 0.005104f, 0.557129f, 0.004745f, 0.541992f, 0.004414f, 0.526855f, 0.004101f,
+ 0.511719f, 0.003809f, 0.496826f, 0.003538f, 0.481689f, 0.003286f, 0.466797f, 0.003052f,
+ 0.451904f, 0.002832f, 0.437012f, 0.002630f, 0.422363f, 0.002441f, 0.407715f, 0.002268f,
+ 0.970703f, 0.028870f, 0.970703f, 0.028870f, 0.970703f, 0.028885f, 0.970703f, 0.028900f,
+ 0.970703f, 0.028915f, 0.970703f, 0.028961f, 0.970215f, 0.029022f, 0.970215f, 0.029114f,
+ 0.969727f, 0.029251f, 0.968750f, 0.029373f, 0.968262f, 0.029526f, 0.966797f, 0.029678f,
+ 0.966309f, 0.029877f, 0.964844f, 0.030045f, 0.962402f, 0.030167f, 0.959473f, 0.030304f,
+ 0.956543f, 0.030411f, 0.953125f, 0.030411f, 0.948242f, 0.030319f, 0.943359f, 0.030197f,
+ 0.938477f, 0.029968f, 0.931641f, 0.029648f, 0.924805f, 0.029221f, 0.917969f, 0.028687f,
+ 0.909180f, 0.028030f, 0.900879f, 0.027313f, 0.891602f, 0.026505f, 0.881836f, 0.025620f,
+ 0.871582f, 0.024673f, 0.861816f, 0.023697f, 0.851074f, 0.022659f, 0.840820f, 0.021622f,
+ 0.829590f, 0.020569f, 0.818359f, 0.019516f, 0.807129f, 0.018478f, 0.795898f, 0.017456f,
+ 0.784180f, 0.016464f, 0.772461f, 0.015503f, 0.760742f, 0.014572f, 0.748535f, 0.013672f,
+ 0.736816f, 0.012817f, 0.724121f, 0.012001f, 0.711914f, 0.011215f, 0.698730f, 0.010483f,
+ 0.686035f, 0.009789f, 0.672852f, 0.009132f, 0.659180f, 0.008514f, 0.645508f, 0.007935f,
+ 0.631836f, 0.007389f, 0.617676f, 0.006878f, 0.603516f, 0.006397f, 0.588867f, 0.005951f,
+ 0.574219f, 0.005531f, 0.559570f, 0.005142f, 0.544922f, 0.004776f, 0.529785f, 0.004436f,
+ 0.515137f, 0.004120f, 0.500000f, 0.003828f, 0.485352f, 0.003555f, 0.470215f, 0.003302f,
+ 0.455566f, 0.003065f, 0.440918f, 0.002844f, 0.426270f, 0.002642f, 0.411621f, 0.002451f,
+ 0.965820f, 0.033752f, 0.965820f, 0.033752f, 0.965820f, 0.033752f, 0.965820f, 0.033783f,
+ 0.965820f, 0.033783f, 0.965820f, 0.033875f, 0.965332f, 0.033905f, 0.965332f, 0.033997f,
+ 0.964844f, 0.034088f, 0.963867f, 0.034241f, 0.963379f, 0.034393f, 0.962402f, 0.034546f,
+ 0.960938f, 0.034698f, 0.958496f, 0.034851f, 0.957520f, 0.034973f, 0.954102f, 0.035034f,
+ 0.951172f, 0.035034f, 0.947754f, 0.034943f, 0.942871f, 0.034821f, 0.937988f, 0.034576f,
+ 0.932129f, 0.034180f, 0.926270f, 0.033722f, 0.918945f, 0.033142f, 0.911133f, 0.032410f,
+ 0.902832f, 0.031616f, 0.894531f, 0.030685f, 0.885254f, 0.029694f, 0.876465f, 0.028641f,
+ 0.866699f, 0.027512f, 0.856445f, 0.026337f, 0.846191f, 0.025146f, 0.835449f, 0.023926f,
+ 0.825195f, 0.022720f, 0.814453f, 0.021515f, 0.803711f, 0.020340f, 0.792480f, 0.019165f,
+ 0.781250f, 0.018051f, 0.770020f, 0.016968f, 0.758789f, 0.015915f, 0.747070f, 0.014931f,
+ 0.735352f, 0.013977f, 0.723145f, 0.013069f, 0.710938f, 0.012215f, 0.698730f, 0.011398f,
+ 0.686035f, 0.010635f, 0.673340f, 0.009918f, 0.660156f, 0.009239f, 0.646484f, 0.008598f,
+ 0.633301f, 0.008003f, 0.619141f, 0.007446f, 0.605469f, 0.006927f, 0.591309f, 0.006439f,
+ 0.576660f, 0.005985f, 0.562500f, 0.005562f, 0.547852f, 0.005165f, 0.533203f, 0.004795f,
+ 0.518066f, 0.004456f, 0.503418f, 0.004135f, 0.488770f, 0.003841f, 0.474121f, 0.003565f,
+ 0.459229f, 0.003311f, 0.444580f, 0.003073f, 0.430176f, 0.002853f, 0.415771f, 0.002647f,
+ 0.960449f, 0.039276f, 0.960449f, 0.039276f, 0.960449f, 0.039276f, 0.960449f, 0.039307f,
+ 0.960449f, 0.039337f, 0.959961f, 0.039368f, 0.959961f, 0.039429f, 0.959961f, 0.039520f,
+ 0.959473f, 0.039612f, 0.958984f, 0.039764f, 0.958008f, 0.039886f, 0.956543f, 0.040009f,
+ 0.955566f, 0.040131f, 0.953125f, 0.040253f, 0.951172f, 0.040314f, 0.948242f, 0.040283f,
+ 0.945801f, 0.040222f, 0.940918f, 0.040039f, 0.936523f, 0.039764f, 0.931152f, 0.039368f,
+ 0.926270f, 0.038879f, 0.919434f, 0.038208f, 0.913086f, 0.037445f, 0.905273f, 0.036530f,
+ 0.897461f, 0.035522f, 0.888184f, 0.034393f, 0.879395f, 0.033173f, 0.870117f, 0.031891f,
+ 0.860352f, 0.030563f, 0.850586f, 0.029190f, 0.840820f, 0.027802f, 0.830566f, 0.026398f,
+ 0.820312f, 0.025009f, 0.810059f, 0.023636f, 0.799805f, 0.022308f, 0.789062f, 0.020996f,
+ 0.778809f, 0.019730f, 0.767578f, 0.018524f, 0.756348f, 0.017365f, 0.745605f, 0.016251f,
+ 0.733887f, 0.015213f, 0.722656f, 0.014206f, 0.710938f, 0.013260f, 0.698730f, 0.012367f,
+ 0.686523f, 0.011536f, 0.673828f, 0.010742f, 0.661133f, 0.010002f, 0.647949f, 0.009308f,
+ 0.634766f, 0.008659f, 0.621094f, 0.008057f, 0.607422f, 0.007488f, 0.593262f, 0.006958f,
+ 0.579102f, 0.006466f, 0.564941f, 0.006004f, 0.550781f, 0.005577f, 0.536133f, 0.005177f,
+ 0.521484f, 0.004807f, 0.506836f, 0.004463f, 0.492432f, 0.004143f, 0.477783f, 0.003847f,
+ 0.463135f, 0.003571f, 0.448730f, 0.003315f, 0.434082f, 0.003077f, 0.419922f, 0.002857f,
+ 0.954102f, 0.045502f, 0.954102f, 0.045502f, 0.954102f, 0.045502f, 0.954102f, 0.045532f,
+ 0.954102f, 0.045563f, 0.954102f, 0.045593f, 0.953613f, 0.045654f, 0.953613f, 0.045715f,
+ 0.953125f, 0.045868f, 0.952148f, 0.045990f, 0.951660f, 0.046082f, 0.950195f, 0.046143f,
+ 0.948242f, 0.046265f, 0.946777f, 0.046265f, 0.943848f, 0.046265f, 0.941895f, 0.046204f,
+ 0.938477f, 0.046021f, 0.935059f, 0.045685f, 0.929199f, 0.045258f, 0.925293f, 0.044708f,
+ 0.919434f, 0.044006f, 0.912109f, 0.043121f, 0.905273f, 0.042145f, 0.897949f, 0.041016f,
+ 0.890137f, 0.039734f, 0.881348f, 0.038391f, 0.872559f, 0.036926f, 0.863770f, 0.035431f,
+ 0.854004f, 0.033813f, 0.844727f, 0.032227f, 0.835449f, 0.030640f, 0.825195f, 0.029037f,
+ 0.815430f, 0.027451f, 0.806152f, 0.025909f, 0.795898f, 0.024399f, 0.785645f, 0.022934f,
+ 0.775391f, 0.021530f, 0.765137f, 0.020187f, 0.754883f, 0.018890f, 0.743652f, 0.017670f,
+ 0.732910f, 0.016510f, 0.721680f, 0.015411f, 0.710449f, 0.014374f, 0.698730f, 0.013405f,
+ 0.686523f, 0.012482f, 0.674316f, 0.011620f, 0.662109f, 0.010811f, 0.649414f, 0.010063f,
+ 0.636230f, 0.009354f, 0.623047f, 0.008698f, 0.609375f, 0.008080f, 0.595703f, 0.007507f,
+ 0.582031f, 0.006973f, 0.567871f, 0.006477f, 0.553711f, 0.006016f, 0.539551f, 0.005585f,
+ 0.524902f, 0.005180f, 0.510254f, 0.004810f, 0.496094f, 0.004463f, 0.481689f, 0.004147f,
+ 0.467041f, 0.003847f, 0.452637f, 0.003571f, 0.438232f, 0.003315f, 0.424072f, 0.003077f,
+ 0.947266f, 0.052490f, 0.947266f, 0.052490f, 0.947266f, 0.052490f, 0.947266f, 0.052521f,
+ 0.947266f, 0.052551f, 0.946777f, 0.052582f, 0.946777f, 0.052612f, 0.946289f, 0.052734f,
+ 0.945801f, 0.052795f, 0.945312f, 0.052887f, 0.944336f, 0.052948f, 0.942871f, 0.053040f,
+ 0.941406f, 0.053009f, 0.939941f, 0.053009f, 0.937012f, 0.052917f, 0.934570f, 0.052704f,
+ 0.931641f, 0.052399f, 0.926758f, 0.051971f, 0.922852f, 0.051331f, 0.917480f, 0.050568f,
+ 0.911133f, 0.049622f, 0.904297f, 0.048523f, 0.898438f, 0.047272f, 0.890137f, 0.045868f,
+ 0.882812f, 0.044312f, 0.874512f, 0.042694f, 0.865723f, 0.040955f, 0.856934f, 0.039154f,
+ 0.847656f, 0.037354f, 0.838867f, 0.035522f, 0.829590f, 0.033661f, 0.820312f, 0.031830f,
+ 0.811035f, 0.030060f, 0.801270f, 0.028305f, 0.791992f, 0.026611f, 0.782227f, 0.024994f,
+ 0.772461f, 0.023422f, 0.762695f, 0.021927f, 0.752441f, 0.020508f, 0.742188f, 0.019165f,
+ 0.731445f, 0.017883f, 0.721191f, 0.016678f, 0.709961f, 0.015556f, 0.698730f, 0.014488f,
+ 0.687012f, 0.013489f, 0.675293f, 0.012550f, 0.663086f, 0.011673f, 0.650879f, 0.010849f,
+ 0.638184f, 0.010086f, 0.625000f, 0.009369f, 0.611816f, 0.008705f, 0.598145f, 0.008087f,
+ 0.584961f, 0.007511f, 0.570801f, 0.006977f, 0.556641f, 0.006474f, 0.542480f, 0.006012f,
+ 0.528320f, 0.005581f, 0.514160f, 0.005180f, 0.499756f, 0.004807f, 0.485596f, 0.004459f,
+ 0.471191f, 0.004139f, 0.456787f, 0.003843f, 0.442383f, 0.003569f, 0.428467f, 0.003313f,
+ 0.939453f, 0.060333f, 0.939453f, 0.060333f, 0.939453f, 0.060333f, 0.939453f, 0.060333f,
+ 0.939453f, 0.060394f, 0.938965f, 0.060394f, 0.938965f, 0.060455f, 0.938477f, 0.060516f,
+ 0.937988f, 0.060577f, 0.937500f, 0.060638f, 0.936035f, 0.060669f, 0.935547f, 0.060669f,
+ 0.933594f, 0.060608f, 0.931641f, 0.060516f, 0.929688f, 0.060272f, 0.927246f, 0.059967f,
+ 0.922363f, 0.059448f, 0.918945f, 0.058868f, 0.914062f, 0.057953f, 0.908691f, 0.056946f,
+ 0.902832f, 0.055786f, 0.897461f, 0.054382f, 0.890137f, 0.052826f, 0.882324f, 0.051117f,
+ 0.874023f, 0.049255f, 0.866211f, 0.047302f, 0.858398f, 0.045288f, 0.849609f, 0.043213f,
+ 0.840820f, 0.041107f, 0.832031f, 0.038971f, 0.823730f, 0.036896f, 0.814453f, 0.034821f,
+ 0.806152f, 0.032806f, 0.796875f, 0.030853f, 0.788086f, 0.028961f, 0.778809f, 0.027161f,
+ 0.769531f, 0.025421f, 0.760254f, 0.023788f, 0.750488f, 0.022217f, 0.740723f, 0.020737f,
+ 0.730957f, 0.019333f, 0.720703f, 0.018021f, 0.709961f, 0.016785f, 0.698730f, 0.015625f,
+ 0.687500f, 0.014549f, 0.676270f, 0.013535f, 0.664551f, 0.012573f, 0.652344f, 0.011688f,
+ 0.640137f, 0.010864f, 0.627441f, 0.010086f, 0.614258f, 0.009369f, 0.601074f, 0.008698f,
+ 0.587402f, 0.008080f, 0.573730f, 0.007500f, 0.560059f, 0.006962f, 0.545898f, 0.006462f,
+ 0.531738f, 0.006001f, 0.517578f, 0.005569f, 0.503418f, 0.005165f, 0.489502f, 0.004795f,
+ 0.475098f, 0.004452f, 0.460938f, 0.004131f, 0.446777f, 0.003838f, 0.432861f, 0.003563f,
+ 0.930664f, 0.069031f, 0.930664f, 0.069031f, 0.930664f, 0.069031f, 0.930664f, 0.069031f,
+ 0.930664f, 0.069092f, 0.930664f, 0.069092f, 0.930176f, 0.069214f, 0.929688f, 0.069153f,
+ 0.929199f, 0.069214f, 0.929199f, 0.069275f, 0.927246f, 0.069214f, 0.926758f, 0.069153f,
+ 0.925293f, 0.069031f, 0.923340f, 0.068787f, 0.920410f, 0.068420f, 0.917480f, 0.067932f,
+ 0.914551f, 0.067261f, 0.911133f, 0.066345f, 0.905273f, 0.065247f, 0.900391f, 0.063965f,
+ 0.894043f, 0.062469f, 0.888184f, 0.060699f, 0.880859f, 0.058807f, 0.873535f, 0.056763f,
+ 0.866211f, 0.054565f, 0.858887f, 0.052277f, 0.850586f, 0.049896f, 0.841797f, 0.047485f,
+ 0.833496f, 0.045105f, 0.825684f, 0.042664f, 0.817383f, 0.040283f, 0.809082f, 0.037964f,
+ 0.800781f, 0.035706f, 0.792480f, 0.033539f, 0.784180f, 0.031433f, 0.775391f, 0.029449f,
+ 0.766602f, 0.027542f, 0.757812f, 0.025726f, 0.748535f, 0.024017f, 0.739258f, 0.022400f,
+ 0.729980f, 0.020874f, 0.719727f, 0.019440f, 0.709961f, 0.018097f, 0.699219f, 0.016830f,
+ 0.688477f, 0.015656f, 0.677246f, 0.014557f, 0.665527f, 0.013527f, 0.653809f, 0.012573f,
+ 0.641602f, 0.011681f, 0.629395f, 0.010841f, 0.616699f, 0.010071f, 0.603516f, 0.009346f,
+ 0.590332f, 0.008682f, 0.577148f, 0.008057f, 0.563477f, 0.007481f, 0.549316f, 0.006943f,
+ 0.535645f, 0.006443f, 0.521484f, 0.005978f, 0.507324f, 0.005550f, 0.493408f, 0.005150f,
+ 0.479248f, 0.004780f, 0.465332f, 0.004436f, 0.451172f, 0.004124f, 0.437256f, 0.003828f,
+ 0.920898f, 0.078735f, 0.920898f, 0.078735f, 0.920898f, 0.078735f, 0.920898f, 0.078735f,
+ 0.920898f, 0.078796f, 0.920898f, 0.078796f, 0.920410f, 0.078796f, 0.919922f, 0.078857f,
+ 0.919922f, 0.078857f, 0.918945f, 0.078796f, 0.917480f, 0.078735f, 0.916992f, 0.078613f,
+ 0.915039f, 0.078308f, 0.913086f, 0.077942f, 0.910645f, 0.077454f, 0.908691f, 0.076660f,
+ 0.905273f, 0.075745f, 0.899902f, 0.074585f, 0.895996f, 0.073181f, 0.889648f, 0.071533f,
+ 0.883789f, 0.069641f, 0.877930f, 0.067566f, 0.872070f, 0.065247f, 0.864258f, 0.062805f,
+ 0.856934f, 0.060242f, 0.849121f, 0.057556f, 0.841797f, 0.054810f, 0.833984f, 0.052063f,
+ 0.827148f, 0.049316f, 0.818848f, 0.046570f, 0.811035f, 0.043915f, 0.803223f, 0.041290f,
+ 0.795898f, 0.038788f, 0.788086f, 0.036377f, 0.779785f, 0.034058f, 0.771973f, 0.031830f,
+ 0.763672f, 0.029755f, 0.755371f, 0.027771f, 0.747070f, 0.025894f, 0.738281f, 0.024139f,
+ 0.729004f, 0.022476f, 0.719238f, 0.020935f, 0.709473f, 0.019470f, 0.699707f, 0.018097f,
+ 0.688965f, 0.016830f, 0.678223f, 0.015640f, 0.666992f, 0.014534f, 0.655762f, 0.013496f,
+ 0.643555f, 0.012535f, 0.631348f, 0.011642f, 0.619141f, 0.010803f, 0.606445f, 0.010033f,
+ 0.593262f, 0.009308f, 0.580078f, 0.008644f, 0.566406f, 0.008018f, 0.553223f, 0.007446f,
+ 0.539062f, 0.006908f, 0.525391f, 0.006413f, 0.511230f, 0.005951f, 0.497559f, 0.005527f,
+ 0.483643f, 0.005131f, 0.469482f, 0.004765f, 0.455566f, 0.004421f, 0.441650f, 0.004108f,
+ 0.910156f, 0.089539f, 0.910156f, 0.089539f, 0.910156f, 0.089539f, 0.910156f, 0.089539f,
+ 0.910156f, 0.089539f, 0.909668f, 0.089539f, 0.909668f, 0.089539f, 0.909180f, 0.089539f,
+ 0.908691f, 0.089478f, 0.907715f, 0.089417f, 0.907227f, 0.089233f, 0.905762f, 0.088989f,
+ 0.904297f, 0.088562f, 0.902832f, 0.088013f, 0.900391f, 0.087280f, 0.896973f, 0.086243f,
+ 0.895020f, 0.085083f, 0.889160f, 0.083557f, 0.884766f, 0.081787f, 0.878906f, 0.079712f,
+ 0.874512f, 0.077393f, 0.867676f, 0.074951f, 0.860840f, 0.072205f, 0.854492f, 0.069275f,
+ 0.848145f, 0.066223f, 0.840820f, 0.063171f, 0.833008f, 0.060059f, 0.826172f, 0.056885f,
+ 0.819336f, 0.053741f, 0.812012f, 0.050690f, 0.804688f, 0.047699f, 0.797852f, 0.044800f,
+ 0.790527f, 0.042023f, 0.783691f, 0.039337f, 0.776367f, 0.036804f, 0.768555f, 0.034393f,
+ 0.761230f, 0.032074f, 0.753418f, 0.029922f, 0.745117f, 0.027893f, 0.736816f, 0.025970f,
+ 0.728516f, 0.024170f, 0.719238f, 0.022491f, 0.709961f, 0.020905f, 0.700195f, 0.019440f,
+ 0.689941f, 0.018066f, 0.679688f, 0.016785f, 0.668457f, 0.015587f, 0.657227f, 0.014473f,
+ 0.645996f, 0.013443f, 0.633789f, 0.012474f, 0.621582f, 0.011581f, 0.609375f, 0.010750f,
+ 0.596191f, 0.009972f, 0.583496f, 0.009262f, 0.569824f, 0.008591f, 0.556641f, 0.007973f,
+ 0.542969f, 0.007404f, 0.529297f, 0.006874f, 0.515625f, 0.006378f, 0.501465f, 0.005920f,
+ 0.487793f, 0.005501f, 0.474121f, 0.005108f, 0.460205f, 0.004742f, 0.446289f, 0.004406f,
+ 0.898438f, 0.101440f, 0.898438f, 0.101440f, 0.898438f, 0.101440f, 0.898438f, 0.101440f,
+ 0.897949f, 0.101440f, 0.897949f, 0.101440f, 0.897461f, 0.101440f, 0.896973f, 0.101379f,
+ 0.896973f, 0.101318f, 0.895996f, 0.101135f, 0.895508f, 0.100830f, 0.894043f, 0.100464f,
+ 0.893066f, 0.099854f, 0.890625f, 0.099121f, 0.888184f, 0.098083f, 0.885254f, 0.096802f,
+ 0.882324f, 0.095215f, 0.878418f, 0.093323f, 0.872559f, 0.091125f, 0.869629f, 0.088623f,
+ 0.862793f, 0.085815f, 0.855957f, 0.082764f, 0.850098f, 0.079590f, 0.844727f, 0.076172f,
+ 0.837402f, 0.072693f, 0.831055f, 0.069092f, 0.824219f, 0.065491f, 0.817871f, 0.061981f,
+ 0.811035f, 0.058472f, 0.804688f, 0.055023f, 0.797852f, 0.051697f, 0.791992f, 0.048492f,
+ 0.785645f, 0.045410f, 0.778809f, 0.042480f, 0.771973f, 0.039673f, 0.765625f, 0.037018f,
+ 0.758789f, 0.034515f, 0.750977f, 0.032166f, 0.743652f, 0.029968f, 0.735840f, 0.027878f,
+ 0.727539f, 0.025940f, 0.718750f, 0.024124f, 0.709961f, 0.022430f, 0.700684f, 0.020844f,
+ 0.690918f, 0.019363f, 0.680664f, 0.017975f, 0.670410f, 0.016693f, 0.659180f, 0.015495f,
+ 0.647949f, 0.014389f, 0.636230f, 0.013359f, 0.624512f, 0.012398f, 0.611816f, 0.011505f,
+ 0.599609f, 0.010681f, 0.586426f, 0.009911f, 0.573730f, 0.009201f, 0.560547f, 0.008537f,
+ 0.546875f, 0.007927f, 0.533203f, 0.007355f, 0.519531f, 0.006828f, 0.505859f, 0.006340f,
+ 0.492432f, 0.005890f, 0.478516f, 0.005470f, 0.464844f, 0.005077f, 0.450928f, 0.004719f,
+ 0.885254f, 0.114624f, 0.885254f, 0.114624f, 0.885254f, 0.114624f, 0.885254f, 0.114624f,
+ 0.884766f, 0.114624f, 0.884766f, 0.114563f, 0.884766f, 0.114502f, 0.884277f, 0.114380f,
+ 0.883789f, 0.114258f, 0.883301f, 0.114014f, 0.882324f, 0.113525f, 0.881348f, 0.112976f,
+ 0.879395f, 0.112183f, 0.877441f, 0.111145f, 0.875977f, 0.109802f, 0.872559f, 0.108215f,
+ 0.869141f, 0.106201f, 0.865723f, 0.103821f, 0.860352f, 0.101196f, 0.854492f, 0.098145f,
+ 0.850586f, 0.094849f, 0.845215f, 0.091187f, 0.838379f, 0.087463f, 0.833496f, 0.083496f,
+ 0.826660f, 0.079468f, 0.820801f, 0.075378f, 0.814453f, 0.071289f, 0.809082f, 0.067322f,
+ 0.803711f, 0.063354f, 0.797363f, 0.059540f, 0.791992f, 0.055878f, 0.786133f, 0.052338f,
+ 0.780762f, 0.048950f, 0.774414f, 0.045746f, 0.768555f, 0.042664f, 0.762207f, 0.039795f,
+ 0.755859f, 0.037079f, 0.749023f, 0.034546f, 0.741699f, 0.032135f, 0.734863f, 0.029892f,
+ 0.727051f, 0.027802f, 0.718750f, 0.025833f, 0.710449f, 0.024002f, 0.701172f, 0.022293f,
+ 0.691895f, 0.020706f, 0.682129f, 0.019226f, 0.671875f, 0.017853f, 0.661133f, 0.016571f,
+ 0.650391f, 0.015381f, 0.639160f, 0.014282f, 0.626953f, 0.013252f, 0.615234f, 0.012299f,
+ 0.602539f, 0.011414f, 0.590332f, 0.010597f, 0.577148f, 0.009834f, 0.563965f, 0.009132f,
+ 0.550781f, 0.008476f, 0.537598f, 0.007866f, 0.523926f, 0.007309f, 0.510254f, 0.006786f,
+ 0.496826f, 0.006306f, 0.483154f, 0.005856f, 0.469482f, 0.005440f, 0.455811f, 0.005054f,
+ 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870605f, 0.129028f,
+ 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870117f, 0.128906f, 0.870117f, 0.128784f,
+ 0.869629f, 0.128540f, 0.869141f, 0.128052f, 0.868164f, 0.127563f, 0.867188f, 0.126709f,
+ 0.865723f, 0.125732f, 0.863281f, 0.124329f, 0.862305f, 0.122742f, 0.858887f, 0.120544f,
+ 0.854980f, 0.118103f, 0.850098f, 0.115173f, 0.847168f, 0.111938f, 0.843750f, 0.108276f,
+ 0.836426f, 0.104309f, 0.832031f, 0.100159f, 0.827148f, 0.095764f, 0.821289f, 0.091187f,
+ 0.815918f, 0.086609f, 0.810547f, 0.081970f, 0.806152f, 0.077393f, 0.800781f, 0.072937f,
+ 0.795410f, 0.068542f, 0.790039f, 0.064270f, 0.785645f, 0.060242f, 0.780762f, 0.056335f,
+ 0.775391f, 0.052643f, 0.770020f, 0.049133f, 0.765137f, 0.045807f, 0.759766f, 0.042694f,
+ 0.753906f, 0.039734f, 0.747559f, 0.036987f, 0.740723f, 0.034393f, 0.733887f, 0.031982f,
+ 0.726562f, 0.029739f, 0.719238f, 0.027618f, 0.710449f, 0.025650f, 0.702148f, 0.023834f,
+ 0.692871f, 0.022125f, 0.683594f, 0.020538f, 0.673828f, 0.019058f, 0.663574f, 0.017685f,
+ 0.652832f, 0.016418f, 0.641602f, 0.015244f, 0.629883f, 0.014153f, 0.618164f, 0.013138f,
+ 0.605957f, 0.012192f, 0.593750f, 0.011314f, 0.581055f, 0.010506f, 0.567871f, 0.009750f,
+ 0.555176f, 0.009056f, 0.541504f, 0.008408f, 0.528320f, 0.007809f, 0.514648f, 0.007252f,
+ 0.501465f, 0.006741f, 0.487793f, 0.006260f, 0.474365f, 0.005817f, 0.460938f, 0.005409f,
+ 0.854492f, 0.145020f, 0.854492f, 0.145020f, 0.854492f, 0.145020f, 0.854492f, 0.145020f,
+ 0.854492f, 0.144897f, 0.854492f, 0.144897f, 0.854004f, 0.144653f, 0.854492f, 0.144531f,
+ 0.854004f, 0.144165f, 0.853027f, 0.143555f, 0.852051f, 0.142822f, 0.851074f, 0.141724f,
+ 0.850586f, 0.140503f, 0.848145f, 0.138672f, 0.846191f, 0.136475f, 0.843262f, 0.133911f,
+ 0.839844f, 0.130859f, 0.835449f, 0.127319f, 0.832031f, 0.123474f, 0.828613f, 0.119141f,
+ 0.823242f, 0.114502f, 0.819824f, 0.109558f, 0.813477f, 0.104431f, 0.809570f, 0.099304f,
+ 0.804199f, 0.094055f, 0.799316f, 0.088867f, 0.794922f, 0.083740f, 0.791992f, 0.078735f,
+ 0.786621f, 0.073914f, 0.783203f, 0.069214f, 0.779297f, 0.064758f, 0.774902f, 0.060516f,
+ 0.770508f, 0.056488f, 0.765625f, 0.052673f, 0.761230f, 0.049072f, 0.756348f, 0.045715f,
+ 0.750977f, 0.042511f, 0.745605f, 0.039551f, 0.739746f, 0.036774f, 0.733398f, 0.034180f,
+ 0.726562f, 0.031738f, 0.719238f, 0.029495f, 0.711426f, 0.027390f, 0.703125f, 0.025421f,
+ 0.694336f, 0.023605f, 0.685059f, 0.021912f, 0.675781f, 0.020340f, 0.665527f, 0.018875f,
+ 0.655273f, 0.017517f, 0.644043f, 0.016251f, 0.632812f, 0.015091f, 0.621582f, 0.014008f,
+ 0.609375f, 0.013000f, 0.597168f, 0.012070f, 0.584473f, 0.011200f, 0.571777f, 0.010406f,
+ 0.559082f, 0.009659f, 0.545898f, 0.008972f, 0.532715f, 0.008339f, 0.519531f, 0.007748f,
+ 0.505859f, 0.007198f, 0.492676f, 0.006691f, 0.479248f, 0.006218f, 0.465820f, 0.005783f,
+ 0.837402f, 0.162476f, 0.837402f, 0.162476f, 0.837402f, 0.162476f, 0.837402f, 0.162354f,
+ 0.837402f, 0.162354f, 0.836914f, 0.162231f, 0.836914f, 0.161987f, 0.836426f, 0.161743f,
+ 0.836426f, 0.161133f, 0.835449f, 0.160522f, 0.835449f, 0.159546f, 0.834473f, 0.158203f,
+ 0.833496f, 0.156372f, 0.831055f, 0.154175f, 0.830078f, 0.151489f, 0.826660f, 0.148315f,
+ 0.823242f, 0.144531f, 0.821289f, 0.140381f, 0.817383f, 0.135620f, 0.812012f, 0.130615f,
+ 0.810547f, 0.125122f, 0.805176f, 0.119507f, 0.800293f, 0.113647f, 0.797852f, 0.107788f,
+ 0.792480f, 0.101868f, 0.788574f, 0.096008f, 0.785156f, 0.090332f, 0.782715f, 0.084839f,
+ 0.779297f, 0.079468f, 0.774902f, 0.074341f, 0.772461f, 0.069458f, 0.769531f, 0.064819f,
+ 0.765137f, 0.060486f, 0.761719f, 0.056366f, 0.758301f, 0.052490f, 0.753418f, 0.048828f,
+ 0.749023f, 0.045410f, 0.743652f, 0.042206f, 0.738770f, 0.039215f, 0.732422f, 0.036438f,
+ 0.726074f, 0.033844f, 0.719238f, 0.031433f, 0.711914f, 0.029190f, 0.704102f, 0.027100f,
+ 0.695801f, 0.025146f, 0.687012f, 0.023346f, 0.677734f, 0.021667f, 0.667969f, 0.020111f,
+ 0.657715f, 0.018646f, 0.646973f, 0.017319f, 0.636230f, 0.016068f, 0.624512f, 0.014923f,
+ 0.612793f, 0.013855f, 0.601074f, 0.012863f, 0.588379f, 0.011948f, 0.576172f, 0.011093f,
+ 0.563477f, 0.010300f, 0.550293f, 0.009567f, 0.537109f, 0.008896f, 0.523926f, 0.008263f,
+ 0.510742f, 0.007687f, 0.497559f, 0.007145f, 0.484375f, 0.006645f, 0.470947f, 0.006180f,
+ 0.818359f, 0.181519f, 0.818359f, 0.181519f, 0.818359f, 0.181519f, 0.817871f, 0.181519f,
+ 0.817871f, 0.181396f, 0.817871f, 0.181274f, 0.817871f, 0.181030f, 0.817871f, 0.180542f,
+ 0.817871f, 0.179932f, 0.817383f, 0.178955f, 0.816406f, 0.177612f, 0.815918f, 0.175903f,
+ 0.814941f, 0.173584f, 0.812500f, 0.170898f, 0.811035f, 0.167603f, 0.808594f, 0.163696f,
+ 0.805664f, 0.159180f, 0.802246f, 0.154175f, 0.799805f, 0.148560f, 0.796875f, 0.142700f,
+ 0.792480f, 0.136353f, 0.789551f, 0.129883f, 0.787598f, 0.123230f, 0.782227f, 0.116577f,
+ 0.780273f, 0.109985f, 0.777344f, 0.103516f, 0.774414f, 0.097168f, 0.771973f, 0.091125f,
+ 0.770508f, 0.085205f, 0.767578f, 0.079651f, 0.765625f, 0.074341f, 0.763184f, 0.069336f,
+ 0.760254f, 0.064636f, 0.757812f, 0.060181f, 0.754395f, 0.056000f, 0.750977f, 0.052063f,
+ 0.747559f, 0.048431f, 0.742188f, 0.044983f, 0.737793f, 0.041779f, 0.732422f, 0.038818f,
+ 0.726074f, 0.036041f, 0.719727f, 0.033447f, 0.712891f, 0.031052f, 0.705566f, 0.028824f,
+ 0.697266f, 0.026749f, 0.688965f, 0.024826f, 0.679688f, 0.023041f, 0.670410f, 0.021393f,
+ 0.660645f, 0.019852f, 0.649902f, 0.018433f, 0.639160f, 0.017105f, 0.627930f, 0.015869f,
+ 0.616211f, 0.014748f, 0.604492f, 0.013687f, 0.592773f, 0.012718f, 0.580078f, 0.011818f,
+ 0.567871f, 0.010979f, 0.554688f, 0.010201f, 0.541992f, 0.009483f, 0.528809f, 0.008812f,
+ 0.515625f, 0.008194f, 0.502441f, 0.007626f, 0.489502f, 0.007088f, 0.476318f, 0.006599f,
+ 0.797363f, 0.202393f, 0.797363f, 0.202393f, 0.797363f, 0.202393f, 0.797363f, 0.202393f,
+ 0.797363f, 0.202148f, 0.797363f, 0.202026f, 0.797363f, 0.201660f, 0.797363f, 0.201050f,
+ 0.796875f, 0.200195f, 0.796875f, 0.198975f, 0.796387f, 0.197266f, 0.795898f, 0.195068f,
+ 0.794922f, 0.192261f, 0.792969f, 0.188843f, 0.792480f, 0.184937f, 0.789551f, 0.180298f,
+ 0.787598f, 0.174927f, 0.785645f, 0.168823f, 0.782715f, 0.162231f, 0.779297f, 0.155273f,
+ 0.775879f, 0.148071f, 0.775391f, 0.140747f, 0.772461f, 0.133179f, 0.770508f, 0.125732f,
+ 0.767578f, 0.118347f, 0.766113f, 0.111206f, 0.764648f, 0.104248f, 0.763184f, 0.097595f,
+ 0.762695f, 0.091187f, 0.761719f, 0.085144f, 0.759277f, 0.079407f, 0.758301f, 0.073975f,
+ 0.755859f, 0.068909f, 0.754395f, 0.064087f, 0.751465f, 0.059631f, 0.748535f, 0.055450f,
+ 0.745117f, 0.051514f, 0.741211f, 0.047852f, 0.737305f, 0.044434f, 0.731934f, 0.041260f,
+ 0.726562f, 0.038300f, 0.720215f, 0.035553f, 0.713867f, 0.032990f, 0.706543f, 0.030624f,
+ 0.699219f, 0.028427f, 0.690918f, 0.026382f, 0.682129f, 0.024475f, 0.672852f, 0.022720f,
+ 0.663086f, 0.021088f, 0.652832f, 0.019577f, 0.642578f, 0.018173f, 0.631348f, 0.016876f,
+ 0.620117f, 0.015671f, 0.608398f, 0.014565f, 0.596680f, 0.013535f, 0.584473f, 0.012573f,
+ 0.572266f, 0.011681f, 0.559570f, 0.010857f, 0.546875f, 0.010101f, 0.533691f, 0.009392f,
+ 0.520996f, 0.008736f, 0.507812f, 0.008125f, 0.494629f, 0.007565f, 0.481689f, 0.007042f,
+ 0.774414f, 0.225098f, 0.774414f, 0.225098f, 0.774414f, 0.225098f, 0.774414f, 0.225098f,
+ 0.774414f, 0.224854f, 0.774902f, 0.224609f, 0.774414f, 0.224121f, 0.774414f, 0.223389f,
+ 0.774414f, 0.222290f, 0.773926f, 0.220581f, 0.773926f, 0.218628f, 0.773926f, 0.215942f,
+ 0.773438f, 0.212524f, 0.772461f, 0.208374f, 0.771484f, 0.203491f, 0.770508f, 0.197754f,
+ 0.769043f, 0.191284f, 0.766113f, 0.184204f, 0.763672f, 0.176514f, 0.760742f, 0.168457f,
+ 0.760742f, 0.160278f, 0.757812f, 0.151855f, 0.757812f, 0.143433f, 0.756836f, 0.135132f,
+ 0.754395f, 0.126953f, 0.755371f, 0.119141f, 0.755371f, 0.111511f, 0.754395f, 0.104309f,
+ 0.753418f, 0.097351f, 0.754395f, 0.090820f, 0.753906f, 0.084595f, 0.752441f, 0.078796f,
+ 0.751465f, 0.073303f, 0.750000f, 0.068176f, 0.748535f, 0.063354f, 0.746094f, 0.058899f,
+ 0.743164f, 0.054718f, 0.740234f, 0.050812f, 0.736816f, 0.047150f, 0.731934f, 0.043793f,
+ 0.727051f, 0.040649f, 0.721191f, 0.037720f, 0.714844f, 0.035004f, 0.708008f, 0.032501f,
+ 0.700684f, 0.030167f, 0.692871f, 0.027985f, 0.684570f, 0.025986f, 0.675781f, 0.024124f,
+ 0.666016f, 0.022385f, 0.656250f, 0.020782f, 0.645996f, 0.019302f, 0.635254f, 0.017929f,
+ 0.624023f, 0.016647f, 0.612793f, 0.015480f, 0.601074f, 0.014381f, 0.588867f, 0.013367f,
+ 0.576660f, 0.012428f, 0.563965f, 0.011559f, 0.551270f, 0.010750f, 0.539062f, 0.010002f,
+ 0.525879f, 0.009308f, 0.513184f, 0.008659f, 0.500000f, 0.008064f, 0.487061f, 0.007511f,
+ 0.750000f, 0.249878f, 0.749512f, 0.249878f, 0.750000f, 0.249878f, 0.750000f, 0.249756f,
+ 0.750000f, 0.249512f, 0.750000f, 0.249146f, 0.750000f, 0.248413f, 0.750488f, 0.247559f,
+ 0.750488f, 0.246094f, 0.750488f, 0.244141f, 0.750488f, 0.241577f, 0.750488f, 0.238281f,
+ 0.748535f, 0.234009f, 0.749512f, 0.229004f, 0.749023f, 0.223022f, 0.747070f, 0.216309f,
+ 0.745117f, 0.208496f, 0.743164f, 0.200195f, 0.744629f, 0.191406f, 0.741211f, 0.182251f,
+ 0.741699f, 0.172852f, 0.740234f, 0.163330f, 0.742676f, 0.154053f, 0.741211f, 0.144775f,
+ 0.743652f, 0.135864f, 0.744629f, 0.127197f, 0.743164f, 0.118958f, 0.744629f, 0.111145f,
+ 0.745605f, 0.103638f, 0.746582f, 0.096558f, 0.748047f, 0.089966f, 0.747559f, 0.083679f,
+ 0.747559f, 0.077820f, 0.746582f, 0.072327f, 0.745605f, 0.067261f, 0.744629f, 0.062469f,
+ 0.742676f, 0.058014f, 0.739746f, 0.053864f, 0.735840f, 0.049988f, 0.731934f, 0.046417f,
+ 0.727539f, 0.043091f, 0.722168f, 0.039978f, 0.716309f, 0.037079f, 0.709473f, 0.034424f,
+ 0.702637f, 0.031952f, 0.695312f, 0.029663f, 0.687012f, 0.027542f, 0.678223f, 0.025558f,
+ 0.668945f, 0.023743f, 0.659180f, 0.022049f, 0.649414f, 0.020477f, 0.638672f, 0.019028f,
+ 0.627930f, 0.017670f, 0.616699f, 0.016434f, 0.604980f, 0.015274f, 0.593262f, 0.014198f,
+ 0.581055f, 0.013206f, 0.568848f, 0.012283f, 0.556641f, 0.011429f, 0.543945f, 0.010643f,
+ 0.531250f, 0.009903f, 0.518066f, 0.009224f, 0.505371f, 0.008591f, 0.492676f, 0.008003f,
+ 0.723145f, 0.276611f, 0.723145f, 0.276611f, 0.723145f, 0.276611f, 0.723145f, 0.276611f,
+ 0.723145f, 0.276123f, 0.723145f, 0.275635f, 0.723145f, 0.274902f, 0.723633f, 0.273682f,
+ 0.723633f, 0.271973f, 0.724121f, 0.269531f, 0.724609f, 0.266113f, 0.725098f, 0.262207f,
+ 0.725098f, 0.257080f, 0.724609f, 0.250732f, 0.722656f, 0.243652f, 0.725586f, 0.235474f,
+ 0.724121f, 0.226685f, 0.723145f, 0.216919f, 0.722656f, 0.206787f, 0.720703f, 0.196289f,
+ 0.723145f, 0.185791f, 0.723633f, 0.175171f, 0.724121f, 0.164795f, 0.728027f, 0.154663f,
+ 0.730469f, 0.144897f, 0.731934f, 0.135498f, 0.734863f, 0.126587f, 0.737305f, 0.118103f,
+ 0.739258f, 0.110107f, 0.739746f, 0.102478f, 0.741699f, 0.095398f, 0.743164f, 0.088745f,
+ 0.743652f, 0.082520f, 0.743652f, 0.076660f, 0.743652f, 0.071228f, 0.742676f, 0.066101f,
+ 0.741211f, 0.061401f, 0.739258f, 0.057007f, 0.735840f, 0.052887f, 0.732422f, 0.049103f,
+ 0.728516f, 0.045563f, 0.723145f, 0.042297f, 0.717773f, 0.039246f, 0.711914f, 0.036438f,
+ 0.704590f, 0.033813f, 0.697754f, 0.031403f, 0.689453f, 0.029160f, 0.681152f, 0.027069f,
+ 0.671875f, 0.025146f, 0.662598f, 0.023346f, 0.652832f, 0.021698f, 0.642578f, 0.020157f,
+ 0.631836f, 0.018738f, 0.621094f, 0.017426f, 0.609375f, 0.016205f, 0.597656f, 0.015076f,
+ 0.585938f, 0.014023f, 0.573730f, 0.013054f, 0.561523f, 0.012146f, 0.548828f, 0.011314f,
+ 0.536621f, 0.010536f, 0.523926f, 0.009811f, 0.511230f, 0.009148f, 0.498291f, 0.008530f,
+ 0.693848f, 0.305664f, 0.693848f, 0.305664f, 0.693848f, 0.305664f, 0.693848f, 0.305664f,
+ 0.693848f, 0.305176f, 0.694336f, 0.304443f, 0.694824f, 0.303467f, 0.695312f, 0.302002f,
+ 0.695312f, 0.299561f, 0.696289f, 0.296631f, 0.696777f, 0.292725f, 0.696777f, 0.287598f,
+ 0.697754f, 0.281250f, 0.698242f, 0.273926f, 0.698730f, 0.265137f, 0.697266f, 0.255615f,
+ 0.699707f, 0.245239f, 0.699707f, 0.234131f, 0.700195f, 0.222412f, 0.702637f, 0.210693f,
+ 0.705078f, 0.198853f, 0.708496f, 0.187134f, 0.708984f, 0.175781f, 0.715332f, 0.164673f,
+ 0.718750f, 0.154053f, 0.722168f, 0.143921f, 0.724121f, 0.134277f, 0.727539f, 0.125244f,
+ 0.731934f, 0.116638f, 0.733398f, 0.108582f, 0.736816f, 0.101013f, 0.738281f, 0.093872f,
+ 0.740234f, 0.087219f, 0.741699f, 0.081055f, 0.741211f, 0.075256f, 0.741211f, 0.069885f,
+ 0.740723f, 0.064880f, 0.738281f, 0.060211f, 0.736328f, 0.055908f, 0.732910f, 0.051849f,
+ 0.729004f, 0.048157f, 0.724609f, 0.044678f, 0.719727f, 0.041473f, 0.713379f, 0.038483f,
+ 0.707031f, 0.035736f, 0.699707f, 0.033173f, 0.692383f, 0.030823f, 0.684082f, 0.028625f,
+ 0.675293f, 0.026596f, 0.666016f, 0.024704f, 0.656738f, 0.022964f, 0.646484f, 0.021347f,
+ 0.636230f, 0.019852f, 0.625488f, 0.018463f, 0.614258f, 0.017181f, 0.602539f, 0.015976f,
+ 0.590820f, 0.014877f, 0.578613f, 0.013855f, 0.566895f, 0.012901f, 0.554688f, 0.012024f,
+ 0.541992f, 0.011200f, 0.529297f, 0.010437f, 0.516602f, 0.009735f, 0.503906f, 0.009079f,
+ 0.662598f, 0.337158f, 0.662598f, 0.337158f, 0.662598f, 0.337158f, 0.662598f, 0.336914f,
+ 0.662598f, 0.336670f, 0.663086f, 0.335938f, 0.663086f, 0.334473f, 0.664062f, 0.332520f,
+ 0.665039f, 0.329834f, 0.666016f, 0.325928f, 0.665527f, 0.320801f, 0.667969f, 0.314697f,
+ 0.667480f, 0.306885f, 0.669922f, 0.298096f, 0.669434f, 0.287842f, 0.671387f, 0.276367f,
+ 0.675781f, 0.264404f, 0.675781f, 0.251465f, 0.677734f, 0.238403f, 0.681152f, 0.225342f,
+ 0.686035f, 0.212036f, 0.690430f, 0.199219f, 0.694824f, 0.186768f, 0.700684f, 0.174805f,
+ 0.702637f, 0.163330f, 0.708008f, 0.152466f, 0.714844f, 0.142212f, 0.718750f, 0.132446f,
+ 0.724609f, 0.123291f, 0.728516f, 0.114685f, 0.731445f, 0.106628f, 0.734375f, 0.099121f,
+ 0.736816f, 0.092102f, 0.738770f, 0.085510f, 0.740723f, 0.079407f, 0.740234f, 0.073730f,
+ 0.739258f, 0.068420f, 0.738770f, 0.063538f, 0.736328f, 0.058960f, 0.734375f, 0.054718f,
+ 0.730469f, 0.050781f, 0.726562f, 0.047150f, 0.721191f, 0.043762f, 0.715332f, 0.040619f,
+ 0.709473f, 0.037720f, 0.702637f, 0.035034f, 0.695312f, 0.032532f, 0.687500f, 0.030243f,
+ 0.678711f, 0.028107f, 0.669922f, 0.026123f, 0.660645f, 0.024277f, 0.650391f, 0.022583f,
+ 0.640137f, 0.021011f, 0.629395f, 0.019547f, 0.618652f, 0.018188f, 0.607422f, 0.016937f,
+ 0.595703f, 0.015778f, 0.583984f, 0.014694f, 0.572266f, 0.013695f, 0.560059f, 0.012764f,
+ 0.547852f, 0.011902f, 0.535156f, 0.011101f, 0.522461f, 0.010353f, 0.510254f, 0.009666f,
+ 0.628418f, 0.371338f, 0.628418f, 0.371338f, 0.628418f, 0.371094f, 0.628418f, 0.371094f,
+ 0.628418f, 0.370361f, 0.629395f, 0.369385f, 0.629883f, 0.367920f, 0.630859f, 0.365234f,
+ 0.631836f, 0.361816f, 0.633301f, 0.357178f, 0.634766f, 0.350830f, 0.635742f, 0.343262f,
+ 0.638184f, 0.333984f, 0.640137f, 0.322998f, 0.641113f, 0.311035f, 0.645508f, 0.297852f,
+ 0.647949f, 0.283691f, 0.652344f, 0.269043f, 0.657227f, 0.254395f, 0.662598f, 0.239868f,
+ 0.669922f, 0.225464f, 0.673340f, 0.211426f, 0.680664f, 0.197876f, 0.685547f, 0.184937f,
+ 0.693359f, 0.172729f, 0.700684f, 0.161011f, 0.705566f, 0.150146f, 0.711426f, 0.139771f,
+ 0.718750f, 0.130005f, 0.722168f, 0.120911f, 0.727051f, 0.112427f, 0.732422f, 0.104431f,
+ 0.733887f, 0.097046f, 0.737305f, 0.090088f, 0.738770f, 0.083618f, 0.740234f, 0.077637f,
+ 0.739258f, 0.072083f, 0.738281f, 0.066895f, 0.736816f, 0.062073f, 0.734375f, 0.057648f,
+ 0.731934f, 0.053497f, 0.728027f, 0.049683f, 0.723145f, 0.046112f, 0.717773f, 0.042816f,
+ 0.712402f, 0.039764f, 0.705566f, 0.036957f, 0.698242f, 0.034332f, 0.690430f, 0.031891f,
+ 0.682617f, 0.029663f, 0.673340f, 0.027573f, 0.664551f, 0.025650f, 0.654785f, 0.023865f,
+ 0.644531f, 0.022202f, 0.634277f, 0.020676f, 0.623535f, 0.019257f, 0.612305f, 0.017929f,
+ 0.601074f, 0.016708f, 0.589355f, 0.015579f, 0.577637f, 0.014526f, 0.565430f, 0.013550f,
+ 0.553223f, 0.012642f, 0.541016f, 0.011787f, 0.528809f, 0.011009f, 0.516113f, 0.010277f,
+ 0.591309f, 0.407959f, 0.591797f, 0.407959f, 0.591797f, 0.407959f, 0.591797f, 0.407471f,
+ 0.592285f, 0.406982f, 0.592773f, 0.405762f, 0.593750f, 0.403564f, 0.594727f, 0.400391f,
+ 0.596680f, 0.396240f, 0.598145f, 0.390137f, 0.600098f, 0.382568f, 0.602539f, 0.373047f,
+ 0.604980f, 0.361816f, 0.606934f, 0.348877f, 0.611816f, 0.334473f, 0.616699f, 0.319336f,
+ 0.620605f, 0.302979f, 0.627930f, 0.286865f, 0.634277f, 0.270508f, 0.638672f, 0.254150f,
+ 0.647949f, 0.238525f, 0.654297f, 0.223389f, 0.663086f, 0.208862f, 0.673828f, 0.195068f,
+ 0.680176f, 0.182007f, 0.689941f, 0.169678f, 0.696289f, 0.157959f, 0.705078f, 0.147095f,
+ 0.713867f, 0.136841f, 0.719727f, 0.127197f, 0.724121f, 0.118225f, 0.729980f, 0.109863f,
+ 0.731934f, 0.101990f, 0.735840f, 0.094727f, 0.737305f, 0.087952f, 0.738770f, 0.081604f,
+ 0.740234f, 0.075745f, 0.739258f, 0.070312f, 0.738281f, 0.065247f, 0.735840f, 0.060608f,
+ 0.733398f, 0.056274f, 0.729492f, 0.052246f, 0.725098f, 0.048523f, 0.720703f, 0.045074f,
+ 0.714355f, 0.041870f, 0.708496f, 0.038910f, 0.701660f, 0.036163f, 0.693848f, 0.033630f,
+ 0.686035f, 0.031281f, 0.677734f, 0.029099f, 0.668457f, 0.027069f, 0.659180f, 0.025192f,
+ 0.648926f, 0.023453f, 0.639160f, 0.021851f, 0.628418f, 0.020355f, 0.617676f, 0.018967f,
+ 0.605957f, 0.017685f, 0.594727f, 0.016495f, 0.583008f, 0.015388f, 0.571289f, 0.014366f,
+ 0.559570f, 0.013412f, 0.546875f, 0.012520f, 0.534668f, 0.011696f, 0.522461f, 0.010925f,
+ 0.551758f, 0.447754f, 0.551758f, 0.447754f, 0.552246f, 0.447510f, 0.552246f, 0.447266f,
+ 0.552734f, 0.446289f, 0.553223f, 0.444580f, 0.555176f, 0.441895f, 0.556152f, 0.438232f,
+ 0.558594f, 0.432617f, 0.561035f, 0.425049f, 0.563477f, 0.415527f, 0.566406f, 0.404053f,
+ 0.570312f, 0.390381f, 0.575195f, 0.375000f, 0.578613f, 0.358154f, 0.584473f, 0.340332f,
+ 0.593750f, 0.322266f, 0.600098f, 0.303955f, 0.611328f, 0.286133f, 0.617676f, 0.268555f,
+ 0.629395f, 0.251709f, 0.640625f, 0.235352f, 0.649902f, 0.219849f, 0.661621f, 0.205078f,
+ 0.671387f, 0.191284f, 0.678711f, 0.178223f, 0.688965f, 0.166016f, 0.699707f, 0.154419f,
+ 0.707031f, 0.143555f, 0.714844f, 0.133545f, 0.719727f, 0.124084f, 0.726074f, 0.115295f,
+ 0.731445f, 0.107056f, 0.734863f, 0.099365f, 0.737305f, 0.092285f, 0.739258f, 0.085632f,
+ 0.740234f, 0.079529f, 0.739746f, 0.073792f, 0.739258f, 0.068542f, 0.737793f, 0.063599f,
+ 0.734863f, 0.059082f, 0.731934f, 0.054871f, 0.727539f, 0.050964f, 0.723633f, 0.047394f,
+ 0.717773f, 0.044006f, 0.711426f, 0.040924f, 0.705078f, 0.038055f, 0.697754f, 0.035400f,
+ 0.689941f, 0.032928f, 0.681641f, 0.030655f, 0.672852f, 0.028534f, 0.663574f, 0.026581f,
+ 0.653809f, 0.024750f, 0.644043f, 0.023071f, 0.633301f, 0.021515f, 0.622559f, 0.020050f,
+ 0.611328f, 0.018707f, 0.600098f, 0.017456f, 0.588867f, 0.016296f, 0.577148f, 0.015221f,
+ 0.565430f, 0.014221f, 0.553223f, 0.013290f, 0.541504f, 0.012421f, 0.528809f, 0.011620f,
+ 0.509277f, 0.490234f, 0.509277f, 0.490234f, 0.509277f, 0.489990f, 0.509766f, 0.489502f,
+ 0.510254f, 0.488525f, 0.511230f, 0.486328f, 0.512695f, 0.482910f, 0.514160f, 0.478027f,
+ 0.517578f, 0.470947f, 0.520996f, 0.461670f, 0.523926f, 0.449707f, 0.528809f, 0.435303f,
+ 0.534180f, 0.418945f, 0.540527f, 0.400635f, 0.548340f, 0.381348f, 0.554688f, 0.361328f,
+ 0.566895f, 0.340820f, 0.577637f, 0.320801f, 0.588867f, 0.301270f, 0.601074f, 0.282471f,
+ 0.610352f, 0.264404f, 0.624023f, 0.247070f, 0.637207f, 0.230591f, 0.649414f, 0.215210f,
+ 0.662109f, 0.200562f, 0.672852f, 0.186768f, 0.685547f, 0.173828f, 0.693359f, 0.161743f,
+ 0.702148f, 0.150391f, 0.711426f, 0.139771f, 0.720703f, 0.129883f, 0.726074f, 0.120667f,
+ 0.730469f, 0.112061f, 0.733887f, 0.104065f, 0.738281f, 0.096619f, 0.739258f, 0.089722f,
+ 0.740234f, 0.083252f, 0.741699f, 0.077332f, 0.740723f, 0.071777f, 0.739258f, 0.066711f,
+ 0.736816f, 0.061951f, 0.734375f, 0.057556f, 0.730469f, 0.053497f, 0.726074f, 0.049713f,
+ 0.720703f, 0.046234f, 0.714844f, 0.042999f, 0.708496f, 0.039978f, 0.701172f, 0.037231f,
+ 0.693848f, 0.034637f, 0.685547f, 0.032257f, 0.677246f, 0.030060f, 0.667969f, 0.028000f,
+ 0.658691f, 0.026108f, 0.648926f, 0.024338f, 0.638672f, 0.022705f, 0.627930f, 0.021194f,
+ 0.617188f, 0.019775f, 0.605957f, 0.018463f, 0.594727f, 0.017258f, 0.583008f, 0.016129f,
+ 0.571289f, 0.015076f, 0.559570f, 0.014099f, 0.547852f, 0.013191f, 0.535645f, 0.012337f,
+ 0.463623f, 0.536133f, 0.463623f, 0.536133f, 0.463867f, 0.535645f, 0.464111f, 0.535156f,
+ 0.465088f, 0.533691f, 0.466064f, 0.530762f, 0.468506f, 0.526367f, 0.471191f, 0.520020f,
+ 0.474609f, 0.511230f, 0.478516f, 0.499268f, 0.483643f, 0.484375f, 0.489990f, 0.466797f,
+ 0.495361f, 0.447266f, 0.502441f, 0.425537f, 0.515137f, 0.403564f, 0.526855f, 0.380859f,
+ 0.540039f, 0.358887f, 0.553711f, 0.336914f, 0.564453f, 0.315918f, 0.587891f, 0.295898f,
+ 0.600098f, 0.276611f, 0.610840f, 0.258545f, 0.624512f, 0.241211f, 0.641113f, 0.225098f,
+ 0.657715f, 0.209717f, 0.668457f, 0.195312f, 0.678223f, 0.181763f, 0.687988f, 0.169067f,
+ 0.701172f, 0.157104f, 0.707031f, 0.146118f, 0.715332f, 0.135620f, 0.723145f, 0.125977f,
+ 0.728516f, 0.117126f, 0.734375f, 0.108704f, 0.736328f, 0.100952f, 0.739746f, 0.093750f,
+ 0.741699f, 0.087036f, 0.742188f, 0.080872f, 0.741699f, 0.075134f, 0.741211f, 0.069763f,
+ 0.739258f, 0.064819f, 0.736816f, 0.060272f, 0.733398f, 0.056030f, 0.729004f, 0.052124f,
+ 0.724121f, 0.048492f, 0.718750f, 0.045105f, 0.712402f, 0.041992f, 0.705078f, 0.039093f,
+ 0.698242f, 0.036407f, 0.689941f, 0.033905f, 0.681641f, 0.031616f, 0.672852f, 0.029480f,
+ 0.663574f, 0.027512f, 0.653809f, 0.025665f, 0.644043f, 0.023956f, 0.633301f, 0.022369f,
+ 0.622559f, 0.020889f, 0.611816f, 0.019516f, 0.601074f, 0.018250f, 0.589355f, 0.017059f,
+ 0.578125f, 0.015961f, 0.565918f, 0.014946f, 0.554199f, 0.013992f, 0.542480f, 0.013107f,
+ 0.414551f, 0.584961f, 0.414551f, 0.584961f, 0.414795f, 0.584961f, 0.415039f, 0.583984f,
+ 0.416260f, 0.582031f, 0.418457f, 0.578613f, 0.420166f, 0.572754f, 0.424072f, 0.563965f,
+ 0.428467f, 0.552246f, 0.433838f, 0.537109f, 0.441162f, 0.518066f, 0.448730f, 0.497070f,
+ 0.458984f, 0.473633f, 0.467773f, 0.449219f, 0.480713f, 0.424072f, 0.497559f, 0.399414f,
+ 0.511719f, 0.375244f, 0.529297f, 0.352051f, 0.543945f, 0.329834f, 0.566895f, 0.308838f,
+ 0.581543f, 0.288574f, 0.598633f, 0.269531f, 0.619629f, 0.251465f, 0.635742f, 0.234497f,
+ 0.646973f, 0.218506f, 0.659668f, 0.203369f, 0.674805f, 0.189331f, 0.684570f, 0.176025f,
+ 0.695801f, 0.163696f, 0.707031f, 0.152222f, 0.718750f, 0.141357f, 0.723145f, 0.131348f,
+ 0.729004f, 0.122009f, 0.734375f, 0.113342f, 0.738281f, 0.105286f, 0.741211f, 0.097778f,
+ 0.743164f, 0.090820f, 0.744629f, 0.084412f, 0.744629f, 0.078430f, 0.743652f, 0.072876f,
+ 0.742676f, 0.067749f, 0.739746f, 0.062988f, 0.735840f, 0.058624f, 0.731934f, 0.054535f,
+ 0.727539f, 0.050751f, 0.721680f, 0.047241f, 0.715820f, 0.044006f, 0.709473f, 0.040985f,
+ 0.702148f, 0.038208f, 0.694824f, 0.035614f, 0.686523f, 0.033234f, 0.677734f, 0.031006f,
+ 0.668457f, 0.028946f, 0.659180f, 0.027023f, 0.649414f, 0.025238f, 0.639160f, 0.023590f,
+ 0.628906f, 0.022049f, 0.618164f, 0.020630f, 0.606934f, 0.019287f, 0.595703f, 0.018051f,
+ 0.584473f, 0.016907f, 0.572754f, 0.015839f, 0.561035f, 0.014839f, 0.549316f, 0.013908f,
+ 0.361816f, 0.637695f, 0.361816f, 0.637695f, 0.362061f, 0.637207f, 0.362793f, 0.636230f,
+ 0.364258f, 0.633301f, 0.366455f, 0.628906f, 0.369873f, 0.621094f, 0.374512f, 0.609375f,
+ 0.378906f, 0.593750f, 0.387451f, 0.573730f, 0.396484f, 0.550293f, 0.407471f, 0.524414f,
+ 0.419189f, 0.497314f, 0.433594f, 0.469971f, 0.453613f, 0.442627f, 0.473633f, 0.416016f,
+ 0.488037f, 0.390381f, 0.509277f, 0.365967f, 0.528809f, 0.343262f, 0.549805f, 0.320801f,
+ 0.574707f, 0.299805f, 0.590332f, 0.280029f, 0.609375f, 0.261475f, 0.631836f, 0.243774f,
+ 0.641602f, 0.227173f, 0.659668f, 0.211426f, 0.671387f, 0.196777f, 0.685059f, 0.183105f,
+ 0.698730f, 0.170166f, 0.705078f, 0.158203f, 0.715820f, 0.146973f, 0.723145f, 0.136597f,
+ 0.730469f, 0.126831f, 0.737793f, 0.117920f, 0.740723f, 0.109558f, 0.741699f, 0.101807f,
+ 0.745117f, 0.094604f, 0.747559f, 0.087891f, 0.747070f, 0.081726f, 0.747070f, 0.075989f,
+ 0.744141f, 0.070679f, 0.742676f, 0.065796f, 0.739258f, 0.061218f, 0.735840f, 0.056976f,
+ 0.730957f, 0.053070f, 0.725586f, 0.049438f, 0.719727f, 0.046082f, 0.713867f, 0.042938f,
+ 0.706543f, 0.040070f, 0.699219f, 0.037384f, 0.690918f, 0.034882f, 0.682617f, 0.032562f,
+ 0.673828f, 0.030426f, 0.664551f, 0.028442f, 0.654785f, 0.026581f, 0.645020f, 0.024857f,
+ 0.634766f, 0.023254f, 0.624023f, 0.021774f, 0.613281f, 0.020386f, 0.602051f, 0.019089f,
+ 0.590820f, 0.017899f, 0.579590f, 0.016769f, 0.567871f, 0.015732f, 0.556641f, 0.014755f,
+ 0.305420f, 0.694336f, 0.305420f, 0.694336f, 0.305664f, 0.693848f, 0.306641f, 0.691895f,
+ 0.308105f, 0.687988f, 0.311279f, 0.681152f, 0.316162f, 0.669922f, 0.321777f, 0.654297f,
+ 0.330078f, 0.632812f, 0.344238f, 0.606934f, 0.353027f, 0.578125f, 0.367432f, 0.547852f,
+ 0.385498f, 0.517578f, 0.405273f, 0.487793f, 0.422852f, 0.458496f, 0.448730f, 0.431152f,
+ 0.473633f, 0.404541f, 0.493896f, 0.379639f, 0.519531f, 0.355469f, 0.539551f, 0.332520f,
+ 0.563477f, 0.310791f, 0.583008f, 0.290283f, 0.604004f, 0.270752f, 0.626953f, 0.252686f,
+ 0.642090f, 0.235352f, 0.657715f, 0.218994f, 0.672852f, 0.203857f, 0.686523f, 0.189575f,
+ 0.699219f, 0.176270f, 0.707031f, 0.163818f, 0.717285f, 0.152344f, 0.723633f, 0.141602f,
+ 0.730469f, 0.131592f, 0.739258f, 0.122375f, 0.741699f, 0.113708f, 0.745605f, 0.105713f,
+ 0.747559f, 0.098267f, 0.748047f, 0.091370f, 0.749023f, 0.085022f, 0.748535f, 0.079102f,
+ 0.747070f, 0.073608f, 0.746582f, 0.068542f, 0.742188f, 0.063843f, 0.739258f, 0.059448f,
+ 0.734375f, 0.055420f, 0.730469f, 0.051666f, 0.724609f, 0.048187f, 0.717773f, 0.044952f,
+ 0.710938f, 0.041962f, 0.704102f, 0.039154f, 0.695801f, 0.036591f, 0.687988f, 0.034180f,
+ 0.679199f, 0.031952f, 0.670410f, 0.029892f, 0.660645f, 0.027969f, 0.650879f, 0.026184f,
+ 0.640625f, 0.024521f, 0.630371f, 0.022964f, 0.619629f, 0.021515f, 0.608887f, 0.020172f,
+ 0.598145f, 0.018921f, 0.586914f, 0.017761f, 0.575195f, 0.016663f, 0.563965f, 0.015656f,
+ 0.244995f, 0.754395f, 0.245117f, 0.754395f, 0.245483f, 0.753418f, 0.246704f, 0.750977f,
+ 0.249634f, 0.745117f, 0.253662f, 0.734863f, 0.260010f, 0.717773f, 0.268555f, 0.694336f,
+ 0.277344f, 0.665527f, 0.292480f, 0.632812f, 0.309814f, 0.599121f, 0.331787f, 0.565918f,
+ 0.352539f, 0.533203f, 0.376465f, 0.501953f, 0.405518f, 0.472412f, 0.433838f, 0.444336f,
+ 0.456787f, 0.417236f, 0.488281f, 0.391357f, 0.510254f, 0.366211f, 0.540039f, 0.343018f,
+ 0.564941f, 0.320557f, 0.579590f, 0.299561f, 0.606445f, 0.279541f, 0.627441f, 0.260498f,
+ 0.638184f, 0.242676f, 0.666504f, 0.226074f, 0.670898f, 0.210327f, 0.687988f, 0.195801f,
+ 0.700684f, 0.182129f, 0.706055f, 0.169312f, 0.718262f, 0.157471f, 0.727539f, 0.146362f,
+ 0.735840f, 0.136108f, 0.738770f, 0.126587f, 0.743164f, 0.117737f, 0.746582f, 0.109497f,
+ 0.751953f, 0.101868f, 0.751953f, 0.094788f, 0.753906f, 0.088257f, 0.752930f, 0.082153f,
+ 0.750977f, 0.076538f, 0.749512f, 0.071289f, 0.745605f, 0.066406f, 0.742188f, 0.061951f,
+ 0.738281f, 0.057770f, 0.734375f, 0.053894f, 0.729004f, 0.050293f, 0.722656f, 0.046967f,
+ 0.715332f, 0.043854f, 0.708496f, 0.040985f, 0.701172f, 0.038330f, 0.693359f, 0.035828f,
+ 0.684570f, 0.033539f, 0.676270f, 0.031403f, 0.666992f, 0.029404f, 0.657227f, 0.027542f,
+ 0.646973f, 0.025818f, 0.636719f, 0.024200f, 0.626465f, 0.022705f, 0.615723f, 0.021301f,
+ 0.604980f, 0.020004f, 0.593750f, 0.018784f, 0.582520f, 0.017654f, 0.571289f, 0.016586f,
+ 0.180542f, 0.818848f, 0.180664f, 0.818848f, 0.181274f, 0.817383f, 0.183350f, 0.812988f,
+ 0.187134f, 0.802734f, 0.193237f, 0.784180f, 0.201416f, 0.757324f, 0.214355f, 0.723145f,
+ 0.231445f, 0.685547f, 0.248901f, 0.648438f, 0.272217f, 0.611816f, 0.302979f, 0.577148f,
+ 0.329834f, 0.544922f, 0.364258f, 0.514160f, 0.394043f, 0.484619f, 0.425781f, 0.456055f,
+ 0.456543f, 0.428467f, 0.481934f, 0.402344f, 0.512207f, 0.376709f, 0.540039f, 0.352783f,
+ 0.566406f, 0.329346f, 0.579102f, 0.307617f, 0.607910f, 0.286865f, 0.627930f, 0.267822f,
+ 0.645996f, 0.249512f, 0.661621f, 0.232178f, 0.677734f, 0.216309f, 0.691406f, 0.201172f,
+ 0.702637f, 0.187256f, 0.711426f, 0.174194f, 0.721680f, 0.161987f, 0.730957f, 0.150879f,
+ 0.736328f, 0.140259f, 0.742188f, 0.130493f, 0.746582f, 0.121582f, 0.750488f, 0.113159f,
+ 0.751953f, 0.105347f, 0.752930f, 0.098083f, 0.756836f, 0.091370f, 0.755859f, 0.085144f,
+ 0.755371f, 0.079346f, 0.752441f, 0.073975f, 0.750488f, 0.069031f, 0.746582f, 0.064392f,
+ 0.743652f, 0.060120f, 0.737793f, 0.056152f, 0.733398f, 0.052460f, 0.727051f, 0.049011f,
+ 0.720215f, 0.045837f, 0.713867f, 0.042847f, 0.706543f, 0.040100f, 0.699219f, 0.037537f,
+ 0.690430f, 0.035156f, 0.682129f, 0.032928f, 0.672852f, 0.030884f, 0.663086f, 0.028961f,
+ 0.653809f, 0.027161f, 0.644043f, 0.025497f, 0.633301f, 0.023941f, 0.622559f, 0.022491f,
+ 0.612305f, 0.021133f, 0.601074f, 0.019867f, 0.590332f, 0.018692f, 0.579102f, 0.017578f,
+ 0.111816f, 0.888184f, 0.112000f, 0.887207f, 0.112976f, 0.883789f, 0.115845f, 0.873047f,
+ 0.122864f, 0.849609f, 0.133301f, 0.813477f, 0.147217f, 0.770996f, 0.167236f, 0.728027f,
+ 0.196411f, 0.688965f, 0.222290f, 0.653320f, 0.258057f, 0.619629f, 0.293457f, 0.587402f,
+ 0.328613f, 0.556152f, 0.361328f, 0.524902f, 0.392578f, 0.495850f, 0.430420f, 0.466064f,
+ 0.459961f, 0.437744f, 0.482422f, 0.410889f, 0.511230f, 0.385010f, 0.536621f, 0.359863f,
+ 0.568848f, 0.336182f, 0.592773f, 0.313721f, 0.614258f, 0.293213f, 0.626953f, 0.273193f,
+ 0.646484f, 0.254639f, 0.657227f, 0.237427f, 0.683105f, 0.221191f, 0.693359f, 0.205933f,
+ 0.698242f, 0.191772f, 0.709473f, 0.178589f, 0.724609f, 0.166260f, 0.733398f, 0.154907f,
+ 0.739746f, 0.144165f, 0.745605f, 0.134399f, 0.750977f, 0.125122f, 0.753906f, 0.116577f,
+ 0.754883f, 0.108704f, 0.758301f, 0.101257f, 0.759766f, 0.094482f, 0.757812f, 0.088074f,
+ 0.759766f, 0.082092f, 0.758301f, 0.076660f, 0.756348f, 0.071594f, 0.752441f, 0.066833f,
+ 0.748047f, 0.062469f, 0.741699f, 0.058380f, 0.736816f, 0.054596f, 0.732910f, 0.051086f,
+ 0.726074f, 0.047791f, 0.719727f, 0.044769f, 0.711914f, 0.041901f, 0.704590f, 0.039276f,
+ 0.696289f, 0.036804f, 0.688477f, 0.034546f, 0.678711f, 0.032410f, 0.669922f, 0.030411f,
+ 0.660156f, 0.028564f, 0.650391f, 0.026840f, 0.640625f, 0.025223f, 0.630371f, 0.023727f,
+ 0.619629f, 0.022324f, 0.608887f, 0.020996f, 0.597656f, 0.019775f, 0.586914f, 0.018631f,
+ 0.038452f, 0.960938f, 0.039124f, 0.957520f, 0.042480f, 0.933594f, 0.051575f, 0.879395f,
+ 0.069275f, 0.824219f, 0.091064f, 0.785156f, 0.126343f, 0.753906f, 0.154419f, 0.725586f,
+ 0.192139f, 0.695312f, 0.234375f, 0.663086f, 0.273438f, 0.630371f, 0.305908f, 0.597656f,
+ 0.338379f, 0.565430f, 0.379150f, 0.532227f, 0.413818f, 0.501465f, 0.444336f, 0.471191f,
+ 0.471436f, 0.442383f, 0.504395f, 0.414795f, 0.531250f, 0.388672f, 0.547363f, 0.364014f,
+ 0.579590f, 0.340088f, 0.603516f, 0.317627f, 0.622559f, 0.297119f, 0.635742f, 0.276855f,
+ 0.669434f, 0.258301f, 0.670410f, 0.241089f, 0.685547f, 0.224854f, 0.699219f, 0.209717f,
+ 0.712402f, 0.195190f, 0.720703f, 0.182373f, 0.729980f, 0.169678f, 0.746582f, 0.158325f,
+ 0.744629f, 0.147705f, 0.748535f, 0.137695f, 0.760254f, 0.128296f, 0.757812f, 0.119629f,
+ 0.761230f, 0.111755f, 0.762207f, 0.104248f, 0.764160f, 0.097290f, 0.763184f, 0.090881f,
+ 0.762207f, 0.084900f, 0.760742f, 0.079285f, 0.759766f, 0.074097f, 0.755859f, 0.069275f,
+ 0.752930f, 0.064758f, 0.747559f, 0.060669f, 0.742676f, 0.056793f, 0.737305f, 0.053131f,
+ 0.731445f, 0.049774f, 0.725586f, 0.046661f, 0.718262f, 0.043732f, 0.710449f, 0.041077f,
+ 0.702637f, 0.038544f, 0.694336f, 0.036163f, 0.685547f, 0.033966f, 0.676758f, 0.031921f,
+ 0.667480f, 0.030014f, 0.657715f, 0.028229f, 0.647461f, 0.026566f, 0.637207f, 0.025009f,
+ 0.626953f, 0.023544f, 0.616699f, 0.022186f, 0.605957f, 0.020920f, 0.594727f, 0.019730f,
+};
+
+const float ltc_disk_integral[64 * 64] = {
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.015873f, 0.047619f, 0.079365f, 0.111111f, 0.142857f, 0.174603f, 0.206349f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000148f, 0.002454f, 0.008675f, 0.019560f,
+ 0.035433f, 0.056294f, 0.081819f, 0.111259f, 0.142857f, 0.174603f, 0.206349f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000002f, 0.000761f, 0.003673f, 0.009403f, 0.018333f, 0.030683f,
+ 0.046556f, 0.065952f, 0.088768f, 0.114784f, 0.143618f, 0.174606f, 0.206349f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000039f, 0.000969f, 0.003703f, 0.008684f, 0.016189f, 0.026395f, 0.039409f,
+ 0.055282f, 0.074014f, 0.095554f, 0.119795f, 0.146560f, 0.175573f, 0.206388f, 0.238095f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000047f, 0.000895f, 0.003265f, 0.007514f, 0.013873f, 0.022495f, 0.033483f, 0.046897f,
+ 0.062770f, 0.081102f, 0.101860f, 0.124985f, 0.150372f, 0.177868f, 0.207245f, 0.238143f,
+ 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000028f,
+ 0.000695f, 0.002655f, 0.006230f, 0.011623f, 0.018976f, 0.028384f, 0.039915f, 0.053606f,
+ 0.069479f, 0.087534f, 0.107749f, 0.130087f, 0.154481f, 0.180833f, 0.209005f, 0.238791f,
+ 0.269869f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000465f,
+ 0.002017f, 0.004975f, 0.009533f, 0.015821f, 0.023934f, 0.033937f, 0.045874f, 0.059772f,
+ 0.075645f, 0.093493f, 0.113302f, 0.135045f, 0.158678f, 0.184136f, 0.211325f, 0.240113f,
+ 0.270306f, 0.301594f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000260f, 0.001426f,
+ 0.003823f, 0.007642f, 0.013012f, 0.020025f, 0.028745f, 0.039218f, 0.051475f, 0.065535f,
+ 0.081408f, 0.099094f, 0.118583f, 0.139856f, 0.162882f, 0.187615f, 0.213991f, 0.241918f,
+ 0.271267f, 0.301847f, 0.333333f, 0.365079f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000109f, 0.000921f, 0.002807f,
+ 0.005966f, 0.010528f, 0.016585f, 0.024200f, 0.033420f, 0.044278f, 0.056796f, 0.070988f,
+ 0.086861f, 0.104415f, 0.123643f, 0.144531f, 0.167057f, 0.191188f, 0.216878f, 0.244062f,
+ 0.272649f, 0.302509f, 0.333442f, 0.365079f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000024f, 0.000524f, 0.001947f, 0.004511f,
+ 0.008351f, 0.013561f, 0.020206f, 0.028332f, 0.037974f, 0.049155f, 0.061892f, 0.076194f,
+ 0.092067f, 0.109511f, 0.128520f, 0.149085f, 0.171189f, 0.194809f, 0.219910f, 0.246447f,
+ 0.274352f, 0.303535f, 0.333857f, 0.365104f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000242f, 0.001250f, 0.003275f, 0.006463f,
+ 0.010913f, 0.016693f, 0.023849f, 0.032418f, 0.042423f, 0.053881f, 0.066805f, 0.081201f,
+ 0.097074f, 0.114424f, 0.133246f, 0.153534f, 0.175275f, 0.198453f, 0.223042f, 0.249009f,
+ 0.276304f, 0.304862f, 0.334584f, 0.365322f, 0.396826f, 0.428571f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000074f, 0.000716f, 0.002252f, 0.004848f, 0.008610f,
+ 0.013608f, 0.019894f, 0.027502f, 0.036458f, 0.046780f, 0.058480f, 0.071567f, 0.086045f,
+ 0.101918f, 0.119186f, 0.137845f, 0.157891f, 0.179316f, 0.202106f, 0.226243f, 0.251704f,
+ 0.278451f, 0.306436f, 0.335586f, 0.365796f, 0.396900f, 0.428571f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000006f, 0.000342f, 0.001437f, 0.003492f, 0.006624f, 0.010911f,
+ 0.016406f, 0.023146f, 0.031157f, 0.040457f, 0.051059f, 0.062972f, 0.076203f, 0.090753f,
+ 0.106626f, 0.123822f, 0.142337f, 0.162170f, 0.183314f, 0.205760f, 0.229496f, 0.254502f,
+ 0.280753f, 0.308212f, 0.336825f, 0.366517f, 0.397167f, 0.428578f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000114f, 0.000820f, 0.002381f, 0.004935f, 0.008569f, 0.013339f,
+ 0.019286f, 0.026437f, 0.034810f, 0.044418f, 0.055271f, 0.067375f, 0.080733f, 0.095348f,
+ 0.111221f, 0.128352f, 0.146740f, 0.166382f, 0.187276f, 0.209413f, 0.232786f, 0.257382f,
+ 0.283181f, 0.310156f, 0.338269f, 0.367461f, 0.397646f, 0.428685f, 0.460318f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000014f, 0.000390f, 0.001503f, 0.003525f, 0.006554f, 0.010655f, 0.015872f,
+ 0.022233f, 0.029758f, 0.038460f, 0.048347f, 0.059427f, 0.071702f, 0.085175f, 0.099848f,
+ 0.115721f, 0.132794f, 0.151067f, 0.170538f, 0.191204f, 0.213063f, 0.236107f, 0.260329f,
+ 0.285714f, 0.312243f, 0.339887f, 0.368604f, 0.398329f, 0.428961f, 0.460331f, 0.492064f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000130f, 0.000845f, 0.002376f, 0.004845f, 0.008325f, 0.012864f, 0.018495f,
+ 0.025237f, 0.033105f, 0.042107f, 0.052249f, 0.063534f, 0.075965f, 0.089543f, 0.104269f,
+ 0.120142f, 0.137163f, 0.155330f, 0.174645f, 0.195106f, 0.216710f, 0.239454f, 0.263332f,
+ 0.288336f, 0.314451f, 0.341658f, 0.369924f, 0.399202f, 0.429416f, 0.460447f, 0.492064f,
+ 0.523809f, 0.555555f, 0.587301f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000016f, 0.000391f, 0.001475f, 0.003423f, 0.006322f, 0.010230f, 0.015179f, 0.021195f,
+ 0.028290f, 0.036474f, 0.045752f, 0.056128f, 0.067602f, 0.080176f, 0.093850f, 0.108623f,
+ 0.124496f, 0.141469f, 0.159541f, 0.178713f, 0.198985f, 0.220355f, 0.242823f, 0.266385f,
+ 0.291036f, 0.316767f, 0.343563f, 0.371402f, 0.400248f, 0.430047f, 0.460709f, 0.492079f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000123f, 0.000807f, 0.002272f, 0.004628f, 0.007942f, 0.012253f, 0.017589f, 0.023963f,
+ 0.031387f, 0.039864f, 0.049398f, 0.059990f, 0.071638f, 0.084344f, 0.098106f, 0.112923f,
+ 0.128796f, 0.145725f, 0.163709f, 0.182749f, 0.202847f, 0.224001f, 0.246214f, 0.269482f,
+ 0.293805f, 0.319176f, 0.345587f, 0.373021f, 0.401454f, 0.430844f, 0.461125f, 0.492187f,
+ 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f,
+ 0.000356f, 0.001378f, 0.003225f, 0.005979f, 0.009689f, 0.014384f, 0.020083f, 0.026795f,
+ 0.034525f, 0.043276f, 0.053047f, 0.063839f, 0.075649f, 0.088476f, 0.102320f, 0.117178f,
+ 0.133051f, 0.149939f, 0.167841f, 0.186760f, 0.206696f, 0.227650f, 0.249625f, 0.272620f,
+ 0.296636f, 0.321671f, 0.347718f, 0.374768f, 0.402804f, 0.431796f, 0.461695f, 0.492420f,
+ 0.523822f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f,
+ 0.000725f, 0.002097f, 0.004323f, 0.007463f, 0.011553f, 0.016613f, 0.022655f, 0.029684f,
+ 0.037702f, 0.046708f, 0.056701f, 0.067680f, 0.079640f, 0.092581f, 0.106501f, 0.121397f,
+ 0.137270f, 0.154120f, 0.171946f, 0.190751f, 0.210537f, 0.231305f, 0.253057f, 0.275797f,
+ 0.299525f, 0.324242f, 0.349947f, 0.376633f, 0.404289f, 0.432895f, 0.462415f, 0.492788f,
+ 0.523909f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000005f, 0.000296f,
+ 0.001231f, 0.002960f, 0.005558f, 0.009072f, 0.013526f, 0.018933f, 0.025299f, 0.032627f,
+ 0.040916f, 0.050162f, 0.060364f, 0.071517f, 0.083619f, 0.096666f, 0.110656f, 0.125588f,
+ 0.141461f, 0.158275f, 0.176031f, 0.194730f, 0.214374f, 0.234967f, 0.256512f, 0.279011f,
+ 0.302468f, 0.326887f, 0.352266f, 0.378605f, 0.405897f, 0.434130f, 0.463277f, 0.493295f,
+ 0.524106f, 0.555561f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000068f, 0.000613f,
+ 0.001874f, 0.003958f, 0.006921f, 0.010796f, 0.015599f, 0.021336f, 0.028011f, 0.035623f,
+ 0.044167f, 0.053640f, 0.064038f, 0.075355f, 0.087589f, 0.100736f, 0.114793f, 0.129759f,
+ 0.145632f, 0.162412f, 0.180101f, 0.198700f, 0.218213f, 0.238641f, 0.259989f, 0.282262f,
+ 0.305464f, 0.329599f, 0.354670f, 0.380678f, 0.407622f, 0.435493f, 0.464275f, 0.493938f,
+ 0.524422f, 0.555624f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000223f, 0.001054f,
+ 0.002649f, 0.005086f, 0.008406f, 0.012629f, 0.017766f, 0.023820f, 0.030789f, 0.038669f,
+ 0.047455f, 0.057143f, 0.067726f, 0.079199f, 0.091558f, 0.104798f, 0.118918f, 0.133915f,
+ 0.149788f, 0.166537f, 0.184164f, 0.202669f, 0.222056f, 0.242329f, 0.263492f, 0.285551f,
+ 0.308510f, 0.332376f, 0.357153f, 0.382845f, 0.409454f, 0.436977f, 0.465404f, 0.494713f,
+ 0.524864f, 0.555779f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f, 0.000486f, 0.001621f,
+ 0.003553f, 0.006338f, 0.010004f, 0.014565f, 0.020024f, 0.026380f, 0.033629f, 0.041765f,
+ 0.050782f, 0.060673f, 0.071431f, 0.083052f, 0.095529f, 0.108859f, 0.123038f, 0.138065f,
+ 0.153938f, 0.170657f, 0.188224f, 0.206640f, 0.225909f, 0.246035f, 0.267022f, 0.288878f,
+ 0.311607f, 0.335216f, 0.359713f, 0.385103f, 0.411390f, 0.438576f, 0.466656f, 0.495617f,
+ 0.525431f, 0.556041f, 0.587338f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000149f, 0.000861f, 0.002312f,
+ 0.004581f, 0.007709f, 0.011713f, 0.016599f, 0.022367f, 0.029014f, 0.036531f, 0.044912f,
+ 0.054148f, 0.064233f, 0.075158f, 0.086918f, 0.099507f, 0.112922f, 0.127157f, 0.142212f,
+ 0.158085f, 0.174776f, 0.192287f, 0.210619f, 0.229775f, 0.249761f, 0.270582f, 0.292243f,
+ 0.314753f, 0.338118f, 0.362347f, 0.387447f, 0.413424f, 0.440284f, 0.468027f, 0.496645f,
+ 0.526122f, 0.556417f, 0.587451f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000355f, 0.001353f, 0.003126f,
+ 0.005730f, 0.009194f, 0.013526f, 0.018728f, 0.024795f, 0.031720f, 0.039494f, 0.048109f,
+ 0.057555f, 0.067824f, 0.078909f, 0.090802f, 0.103499f, 0.116993f, 0.131282f, 0.146364f,
+ 0.162237f, 0.178902f, 0.196358f, 0.214610f, 0.233660f, 0.253512f, 0.274174f, 0.295650f,
+ 0.317950f, 0.341081f, 0.365053f, 0.389874f, 0.415553f, 0.442098f, 0.469512f, 0.497794f,
+ 0.526935f, 0.556908f, 0.587657f, 0.619060f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000083f, 0.000665f, 0.001962f, 0.004059f,
+ 0.006997f, 0.010790f, 0.015442f, 0.020949f, 0.027304f, 0.034497f, 0.042518f, 0.051358f,
+ 0.061005f, 0.071451f, 0.082688f, 0.094709f, 0.107507f, 0.121078f, 0.135419f, 0.150526f,
+ 0.166399f, 0.183038f, 0.200443f, 0.218618f, 0.237566f, 0.257291f, 0.277800f, 0.299100f,
+ 0.321199f, 0.344106f, 0.367830f, 0.392383f, 0.417774f, 0.444013f, 0.471107f, 0.499060f,
+ 0.527869f, 0.557517f, 0.587966f, 0.619130f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000233f, 0.001082f, 0.002688f, 0.005111f,
+ 0.008377f, 0.012493f, 0.017456f, 0.023260f, 0.029893f, 0.037345f, 0.045604f, 0.054659f,
+ 0.064499f, 0.075115f, 0.086498f, 0.098641f, 0.111537f, 0.125182f, 0.139571f, 0.154703f,
+ 0.170576f, 0.187190f, 0.204547f, 0.222648f, 0.241498f, 0.261101f, 0.281465f, 0.302595f,
+ 0.324501f, 0.347192f, 0.370679f, 0.394973f, 0.420085f, 0.446027f, 0.472810f, 0.500441f,
+ 0.528921f, 0.558244f, 0.588384f, 0.619281f, 0.650795f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000033f, 0.000477f, 0.001611f, 0.003532f, 0.006280f,
+ 0.009869f, 0.014301f, 0.019568f, 0.025659f, 0.032563f, 0.040265f, 0.048753f, 0.058016f,
+ 0.068042f, 0.078821f, 0.090344f, 0.102604f, 0.115594f, 0.129309f, 0.143745f, 0.158901f,
+ 0.174774f, 0.191365f, 0.208674f, 0.226705f, 0.245461f, 0.264947f, 0.285170f, 0.306137f,
+ 0.327857f, 0.350341f, 0.373598f, 0.397642f, 0.422485f, 0.448139f, 0.474619f, 0.501933f,
+ 0.530089f, 0.559087f, 0.588913f, 0.619525f, 0.650826f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000130f, 0.000821f, 0.002252f, 0.004491f, 0.007562f,
+ 0.011472f, 0.016213f, 0.021776f, 0.028147f, 0.035312f, 0.043256f, 0.051966f, 0.061430f,
+ 0.071635f, 0.082571f, 0.094229f, 0.106602f, 0.119682f, 0.133465f, 0.147947f, 0.163125f,
+ 0.178998f, 0.195566f, 0.212830f, 0.230793f, 0.249459f, 0.268832f, 0.288920f, 0.309730f,
+ 0.331271f, 0.353554f, 0.376590f, 0.400391f, 0.424973f, 0.450347f, 0.476531f, 0.503535f,
+ 0.531372f, 0.560047f, 0.589554f, 0.619869f, 0.650923f, 0.682540f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000005f, 0.000309f, 0.001270f, 0.003008f, 0.005566f, 0.008959f,
+ 0.013183f, 0.018228f, 0.024080f, 0.030723f, 0.038142f, 0.046321f, 0.055246f, 0.064903f,
+ 0.075281f, 0.086369f, 0.098158f, 0.110639f, 0.123806f, 0.137655f, 0.152180f, 0.167380f,
+ 0.183253f, 0.199799f, 0.217020f, 0.234918f, 0.253496f, 0.272761f, 0.292719f, 0.313377f,
+ 0.334745f, 0.356833f, 0.379654f, 0.403221f, 0.427548f, 0.452651f, 0.478545f, 0.505246f,
+ 0.532768f, 0.561122f, 0.590309f, 0.620318f, 0.651102f, 0.682545f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000053f, 0.000579f, 0.001828f, 0.003878f, 0.006757f, 0.010468f,
+ 0.015002f, 0.020344f, 0.026479f, 0.033388f, 0.041054f, 0.049461f, 0.058594f, 0.068440f,
+ 0.078985f, 0.090220f, 0.102134f, 0.114721f, 0.127972f, 0.141884f, 0.156451f, 0.171672f,
+ 0.187545f, 0.204070f, 0.221249f, 0.239083f, 0.257578f, 0.276738f, 0.296569f, 0.317080f,
+ 0.338281f, 0.360181f, 0.382794f, 0.406133f, 0.430213f, 0.455050f, 0.480662f, 0.507065f,
+ 0.534278f, 0.562313f, 0.591180f, 0.620875f, 0.651373f, 0.682593f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000169f, 0.000949f, 0.002497f, 0.004864f, 0.008063f, 0.012089f,
+ 0.016929f, 0.022563f, 0.028974f, 0.036142f, 0.044049f, 0.052678f, 0.062014f, 0.072042f,
+ 0.082750f, 0.094127f, 0.106164f, 0.118852f, 0.132185f, 0.146157f, 0.160766f, 0.176007f,
+ 0.191880f, 0.208385f, 0.225523f, 0.243296f, 0.261709f, 0.280767f, 0.300476f, 0.320845f,
+ 0.341883f, 0.363601f, 0.386011f, 0.409128f, 0.432967f, 0.457545f, 0.482881f, 0.508992f,
+ 0.535899f, 0.563619f, 0.592165f, 0.621544f, 0.651743f, 0.682709f, 0.714286f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000010f, 0.000368f, 0.001423f, 0.003279f, 0.005966f, 0.009485f, 0.013824f,
+ 0.018964f, 0.024886f, 0.031567f, 0.038988f, 0.047130f, 0.055975f, 0.065508f, 0.075714f,
+ 0.086580f, 0.098095f, 0.110251f, 0.123038f, 0.136450f, 0.150482f, 0.165129f, 0.180390f,
+ 0.196263f, 0.212748f, 0.229847f, 0.247561f, 0.265895f, 0.284854f, 0.304445f, 0.324675f,
+ 0.345555f, 0.367095f, 0.389309f, 0.412210f, 0.435814f, 0.460138f, 0.485203f, 0.511028f,
+ 0.537634f, 0.565041f, 0.593268f, 0.622327f, 0.652217f, 0.682907f, 0.714296f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000068f, 0.000658f, 0.002006f, 0.004178f, 0.007186f, 0.011024f, 0.015672f,
+ 0.021109f, 0.027312f, 0.034259f, 0.041928f, 0.050300f, 0.059356f, 0.069081f, 0.079460f,
+ 0.090480f, 0.102130f, 0.114400f, 0.127284f, 0.140772f, 0.154862f, 0.169548f, 0.184828f,
+ 0.200701f, 0.217167f, 0.234227f, 0.251884f, 0.270141f, 0.289004f, 0.308479f, 0.328575f,
+ 0.349301f, 0.370668f, 0.392689f, 0.415379f, 0.438754f, 0.462830f, 0.487630f, 0.513173f,
+ 0.539482f, 0.566579f, 0.594488f, 0.623226f, 0.652800f, 0.683198f, 0.714354f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000196f, 0.001048f, 0.002702f, 0.005194f, 0.008526f, 0.012680f, 0.017635f,
+ 0.023365f, 0.029846f, 0.037053f, 0.044965f, 0.053561f, 0.062824f, 0.072737f, 0.083284f,
+ 0.094454f, 0.106236f, 0.118619f, 0.131595f, 0.145159f, 0.159305f, 0.174028f, 0.189327f,
+ 0.205200f, 0.221647f, 0.238670f, 0.256270f, 0.274453f, 0.293222f, 0.312585f, 0.332550f,
+ 0.353126f, 0.374324f, 0.396158f, 0.418641f, 0.441790f, 0.465624f, 0.490163f, 0.515429f,
+ 0.541445f, 0.568236f, 0.595828f, 0.624242f, 0.653496f, 0.683588f, 0.714482f, 0.746032f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000012f, 0.000407f, 0.001545f, 0.003514f, 0.006332f, 0.009987f, 0.014457f, 0.019715f,
+ 0.025734f, 0.032488f, 0.039952f, 0.048102f, 0.056919f, 0.066384f, 0.076480f, 0.087193f,
+ 0.098509f, 0.110419f, 0.122912f, 0.135980f, 0.149617f, 0.163817f, 0.178577f, 0.193894f,
+ 0.209767f, 0.226196f, 0.243182f, 0.260728f, 0.278837f, 0.297515f, 0.316768f, 0.336605f,
+ 0.357034f, 0.378067f, 0.399717f, 0.421998f, 0.444928f, 0.468523f, 0.492806f, 0.517798f,
+ 0.543525f, 0.570012f, 0.597288f, 0.625379f, 0.654307f, 0.684084f, 0.714693f, 0.746044f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000074f, 0.000713f, 0.002152f, 0.004446f, 0.007592f, 0.011571f, 0.016356f, 0.021915f,
+ 0.028220f, 0.035243f, 0.042959f, 0.051344f, 0.060377f, 0.070040f, 0.080316f, 0.091191f,
+ 0.102651f, 0.114686f, 0.127286f, 0.140443f, 0.154151f, 0.168405f, 0.183201f, 0.198536f,
+ 0.214409f, 0.230820f, 0.247770f, 0.265263f, 0.283301f, 0.301889f, 0.321035f, 0.340746f,
+ 0.361032f, 0.381904f, 0.403374f, 0.425457f, 0.448169f, 0.471530f, 0.495561f, 0.520284f,
+ 0.545725f, 0.571911f, 0.598873f, 0.626640f, 0.655239f, 0.684692f, 0.714999f, 0.746106f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000208f, 0.001121f, 0.002877f, 0.005501f, 0.008979f, 0.013283f, 0.018380f, 0.024238f,
+ 0.030826f, 0.038115f, 0.046079f, 0.054695f, 0.063941f, 0.073799f, 0.084252f, 0.095285f,
+ 0.106886f, 0.119044f, 0.131749f, 0.144994f, 0.158772f, 0.173078f, 0.187908f, 0.203261f,
+ 0.219134f, 0.235527f, 0.252443f, 0.269883f, 0.287851f, 0.306352f, 0.325393f, 0.344981f,
+ 0.365126f, 0.385839f, 0.407132f, 0.429020f, 0.451520f, 0.474651f, 0.498433f, 0.522890f,
+ 0.548048f, 0.573936f, 0.600584f, 0.628027f, 0.656295f, 0.685417f, 0.715406f, 0.746240f,
+ 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f,
+ 0.000427f, 0.001638f, 0.003724f, 0.006685f, 0.010497f, 0.015125f, 0.020534f, 0.026688f,
+ 0.033557f, 0.041109f, 0.049318f, 0.058161f, 0.067617f, 0.077666f, 0.088293f, 0.099482f,
+ 0.111221f, 0.123499f, 0.136308f, 0.149639f, 0.163485f, 0.177843f, 0.192707f, 0.208077f,
+ 0.223950f, 0.240326f, 0.257208f, 0.274596f, 0.292496f, 0.310911f, 0.329849f, 0.349316f,
+ 0.369323f, 0.389880f, 0.410999f, 0.432696f, 0.454987f, 0.477890f, 0.501426f, 0.525620f,
+ 0.550498f, 0.576089f, 0.602427f, 0.629544f, 0.657479f, 0.686264f, 0.715924f, 0.746459f,
+ 0.777789f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000071f,
+ 0.000744f, 0.002274f, 0.004698f, 0.008002f, 0.012149f, 0.017102f, 0.022822f, 0.029271f,
+ 0.036417f, 0.044229f, 0.052681f, 0.061749f, 0.071411f, 0.081649f, 0.092447f, 0.103790f,
+ 0.115665f, 0.128062f, 0.140972f, 0.154387f, 0.168301f, 0.182709f, 0.197608f, 0.212994f,
+ 0.228867f, 0.245227f, 0.262074f, 0.279412f, 0.297244f, 0.315575f, 0.334412f, 0.353760f,
+ 0.373631f, 0.394034f, 0.414983f, 0.436491f, 0.458575f, 0.481253f, 0.504547f, 0.528481f,
+ 0.553081f, 0.578377f, 0.604404f, 0.631197f, 0.658795f, 0.687238f, 0.716559f, 0.746776f,
+ 0.777849f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000205f,
+ 0.001168f, 0.003033f, 0.005806f, 0.009456f, 0.013942f, 0.019220f, 0.025250f, 0.031992f,
+ 0.039414f, 0.047484f, 0.056176f, 0.065466f, 0.075333f, 0.085757f, 0.096724f, 0.108218f,
+ 0.120227f, 0.132741f, 0.145751f, 0.159249f, 0.173230f, 0.187687f, 0.202619f, 0.218021f,
+ 0.233894f, 0.250238f, 0.267052f, 0.284341f, 0.302106f, 0.320354f, 0.339090f, 0.358322f,
+ 0.378059f, 0.398311f, 0.419090f, 0.440412f, 0.462292f, 0.484748f, 0.507802f, 0.531477f,
+ 0.555802f, 0.580805f, 0.606522f, 0.632990f, 0.660250f, 0.688346f, 0.717319f, 0.747200f,
+ 0.777982f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000427f,
+ 0.001710f, 0.003925f, 0.007054f, 0.011055f, 0.015881f, 0.021485f, 0.027824f, 0.034859f,
+ 0.042554f, 0.050881f, 0.059811f, 0.069321f, 0.079390f, 0.089998f, 0.101132f, 0.112775f,
+ 0.124917f, 0.137547f, 0.150655f, 0.164236f, 0.178281f, 0.192788f, 0.207752f, 0.223171f,
+ 0.239044f, 0.255371f, 0.272153f, 0.289393f, 0.307093f, 0.325259f, 0.343896f, 0.363012f,
+ 0.382617f, 0.402719f, 0.423332f, 0.444469f, 0.466146f, 0.488383f, 0.511199f, 0.534618f,
+ 0.558668f, 0.583380f, 0.608787f, 0.634929f, 0.661849f, 0.689594f, 0.718211f, 0.747742f,
+ 0.778205f, 0.809530f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000059f, 0.000754f,
+ 0.002379f, 0.004956f, 0.008449f, 0.012806f, 0.017974f, 0.023905f, 0.030553f, 0.037879f,
+ 0.045847f, 0.054429f, 0.063595f, 0.073323f, 0.083592f, 0.094384f, 0.105682f, 0.117474f,
+ 0.129747f, 0.142491f, 0.155697f, 0.169358f, 0.183469f, 0.198024f, 0.213020f, 0.228455f,
+ 0.244329f, 0.260639f, 0.277389f, 0.294580f, 0.312216f, 0.330300f, 0.348840f, 0.367842f,
+ 0.387315f, 0.407270f, 0.427717f, 0.448671f, 0.470149f, 0.492167f, 0.514746f, 0.537911f,
+ 0.561688f, 0.586108f, 0.611206f, 0.637022f, 0.663599f, 0.690989f, 0.719242f, 0.748411f,
+ 0.778531f, 0.809583f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000187f, 0.001196f,
+ 0.003184f, 0.006136f, 0.010000f, 0.014716f, 0.020230f, 0.026488f, 0.033445f, 0.041062f,
+ 0.049303f, 0.058138f, 0.067540f, 0.077485f, 0.087953f, 0.098926f, 0.110388f, 0.122327f,
+ 0.134729f, 0.147587f, 0.160889f, 0.174631f, 0.188806f, 0.203409f, 0.218437f, 0.233888f,
+ 0.249761f, 0.266056f, 0.282774f, 0.299917f, 0.317488f, 0.335493f, 0.353936f, 0.372825f,
+ 0.392168f, 0.411976f, 0.432259f, 0.453032f, 0.474310f, 0.496111f, 0.518456f, 0.541367f,
+ 0.564872f, 0.589001f, 0.613789f, 0.639277f, 0.665510f, 0.692539f, 0.720422f, 0.749216f,
+ 0.778974f, 0.809711f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000409f, 0.001767f,
+ 0.004137f, 0.007474f, 0.011716f, 0.016797f, 0.022657f, 0.029244f, 0.036512f, 0.044420f,
+ 0.052933f, 0.062021f, 0.071657f, 0.081819f, 0.092485f, 0.103638f, 0.115263f, 0.127348f,
+ 0.139880f, 0.152849f, 0.166248f, 0.180070f, 0.194308f, 0.208958f, 0.224018f, 0.239485f,
+ 0.255359f, 0.271638f, 0.288324f, 0.305419f, 0.322927f, 0.340851f, 0.359199f, 0.377975f,
+ 0.397189f, 0.416851f, 0.436971f, 0.457564f, 0.478644f, 0.500229f, 0.522339f, 0.544997f,
+ 0.568230f, 0.592068f, 0.616546f, 0.641705f, 0.667590f, 0.694255f, 0.721760f, 0.750168f,
+ 0.779545f, 0.809933f, 0.841272f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000041f, 0.000744f, 0.002481f,
+ 0.005248f, 0.008982f, 0.013608f, 0.019058f, 0.025269f, 0.032188f, 0.039767f, 0.047967f,
+ 0.056752f, 0.066093f, 0.075963f, 0.086340f, 0.097203f, 0.108537f, 0.120325f, 0.132554f,
+ 0.145215f, 0.158296f, 0.171790f, 0.185691f, 0.199993f, 0.214691f, 0.229782f, 0.245265f,
+ 0.261138f, 0.277401f, 0.294056f, 0.311104f, 0.328548f, 0.346394f, 0.364645f, 0.383310f,
+ 0.402396f, 0.421912f, 0.441870f, 0.462283f, 0.483165f, 0.504535f, 0.526410f, 0.548816f,
+ 0.571776f, 0.595323f, 0.619489f, 0.644317f, 0.669852f, 0.696148f, 0.723267f, 0.751280f,
+ 0.780258f, 0.810268f, 0.841311f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000156f, 0.001209f, 0.003349f,
+ 0.006531f, 0.010672f, 0.015691f, 0.021515f, 0.028080f, 0.035332f, 0.043225f, 0.051717f,
+ 0.060775f, 0.070370f, 0.080474f, 0.091067f, 0.102128f, 0.113641f, 0.125591f, 0.137965f,
+ 0.150754f, 0.163947f, 0.177537f, 0.191516f, 0.205881f, 0.220626f, 0.235749f, 0.251248f,
+ 0.267121f, 0.283368f, 0.299992f, 0.316992f, 0.334374f, 0.352140f, 0.370296f, 0.388849f,
+ 0.407807f, 0.427178f, 0.446974f, 0.467207f, 0.487892f, 0.509046f, 0.530687f, 0.552839f,
+ 0.575527f, 0.598780f, 0.622634f, 0.647128f, 0.672308f, 0.698231f, 0.724958f, 0.752563f,
+ 0.781127f, 0.810733f, 0.841426f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000374f, 0.001821f, 0.004389f,
+ 0.008001f, 0.012559f, 0.017979f, 0.024182f, 0.031106f, 0.038695f, 0.046903f, 0.055690f,
+ 0.065023f, 0.074872f, 0.085211f, 0.096020f, 0.107279f, 0.118971f, 0.131084f, 0.143604f,
+ 0.156521f, 0.169825f, 0.183510f, 0.197569f, 0.211997f, 0.226789f, 0.241944f, 0.257458f,
+ 0.273331f, 0.289563f, 0.306154f, 0.323108f, 0.340426f, 0.358113f, 0.376175f, 0.394616f,
+ 0.413445f, 0.432671f, 0.452305f, 0.472358f, 0.492845f, 0.513783f, 0.535189f, 0.557087f,
+ 0.579500f, 0.602459f, 0.625997f, 0.650154f, 0.674976f, 0.700518f, 0.726845f, 0.754032f,
+ 0.782167f, 0.811344f, 0.841644f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000719f, 0.002598f, 0.005618f,
+ 0.009675f, 0.014663f, 0.020490f, 0.027080f, 0.034367f, 0.042297f, 0.050824f, 0.059909f,
+ 0.069517f, 0.079622f, 0.090198f, 0.101224f, 0.112682f, 0.124555f, 0.136831f, 0.149496f,
+ 0.162542f, 0.175958f, 0.189739f, 0.203877f, 0.218368f, 0.233208f, 0.248393f, 0.263923f,
+ 0.279796f, 0.296012f, 0.312573f, 0.329479f, 0.346734f, 0.364342f, 0.382307f, 0.400637f,
+ 0.419337f, 0.438418f, 0.457889f, 0.477761f, 0.498050f, 0.518770f, 0.539940f, 0.561581f,
+ 0.583718f, 0.606380f, 0.629599f, 0.653415f, 0.677874f, 0.703030f, 0.728948f, 0.755706f,
+ 0.783396f, 0.812121f, 0.841989f, 0.873035f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.001215f, 0.003561f, 0.007056f,
+ 0.011574f, 0.017003f, 0.023248f, 0.030232f, 0.037888f, 0.046164f, 0.055014f, 0.064399f,
+ 0.074287f, 0.084650f, 0.095464f, 0.106709f, 0.118367f, 0.130423f, 0.142862f, 0.155674f,
+ 0.168849f, 0.182378f, 0.196255f, 0.210473f, 0.225027f, 0.239915f, 0.255132f, 0.270678f,
+ 0.286551f, 0.302751f, 0.319280f, 0.336138f, 0.353330f, 0.370858f, 0.388728f, 0.406944f,
+ 0.425515f, 0.444449f, 0.463756f, 0.483447f, 0.503535f, 0.524036f, 0.544968f, 0.566350f,
+ 0.588208f, 0.610569f, 0.633466f, 0.656936f, 0.681025f, 0.705788f, 0.731289f, 0.757606f,
+ 0.784834f, 0.813085f, 0.842485f, 0.873130f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000324f, 0.001887f, 0.004735f, 0.008727f,
+ 0.013724f, 0.019607f, 0.026280f, 0.033666f, 0.041699f, 0.050326f, 0.059504f, 0.069194f,
+ 0.079365f, 0.089989f, 0.101045f, 0.112512f, 0.124372f, 0.136611f, 0.149216f, 0.162176f,
+ 0.175482f, 0.189125f, 0.203098f, 0.217396f, 0.232015f, 0.246950f, 0.262200f, 0.277761f,
+ 0.293634f, 0.309819f, 0.326315f, 0.343126f, 0.360254f, 0.377701f, 0.395474f, 0.413577f,
+ 0.432018f, 0.450804f, 0.469944f, 0.489451f, 0.509337f, 0.529617f, 0.550307f, 0.571428f,
+ 0.593003f, 0.615059f, 0.637628f, 0.660746f, 0.684460f, 0.708820f, 0.733893f, 0.759756f,
+ 0.786505f, 0.814259f, 0.843157f, 0.873340f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000683f, 0.002764f, 0.006148f, 0.010661f,
+ 0.016155f, 0.022506f, 0.029620f, 0.037417f, 0.045835f, 0.054821f, 0.064333f, 0.074333f,
+ 0.084792f, 0.095683f, 0.106984f, 0.118675f, 0.130741f, 0.143166f, 0.155939f, 0.169049f,
+ 0.182487f, 0.196245f, 0.210317f, 0.224697f, 0.239380f, 0.254364f, 0.269646f, 0.285223f,
+ 0.301096f, 0.317265f, 0.333729f, 0.350491f, 0.367554f, 0.384920f, 0.402594f, 0.420582f,
+ 0.438891f, 0.457527f, 0.476499f, 0.495820f, 0.515500f, 0.535555f, 0.556000f, 0.576855f,
+ 0.598143f, 0.619888f, 0.642123f, 0.664883f, 0.688211f, 0.712160f, 0.736792f, 0.762186f,
+ 0.788439f, 0.815672f, 0.844034f, 0.873699f, 0.904765f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.001228f, 0.003880f, 0.007835f, 0.012895f,
+ 0.018905f, 0.025742f, 0.033309f, 0.041530f, 0.050342f, 0.059696f, 0.069550f, 0.079868f,
+ 0.090620f, 0.101783f, 0.113333f, 0.125254f, 0.137529f, 0.150144f, 0.163088f, 0.176351f,
+ 0.189924f, 0.203799f, 0.217970f, 0.232433f, 0.247182f, 0.262216f, 0.277530f, 0.293124f,
+ 0.308997f, 0.325149f, 0.341581f, 0.358294f, 0.375290f, 0.392573f, 0.410148f, 0.428019f,
+ 0.446192f, 0.464676f, 0.483478f, 0.502608f, 0.522079f, 0.541905f, 0.562100f, 0.582684f,
+ 0.603677f, 0.625106f, 0.646998f, 0.669390f, 0.692324f, 0.715849f, 0.740028f, 0.764937f,
+ 0.790673f, 0.817358f, 0.845150f, 0.874244f, 0.904828f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000260f, 0.002001f, 0.005278f, 0.009840f, 0.015475f,
+ 0.022025f, 0.029365f, 0.037402f, 0.046060f, 0.055280f, 0.065013f, 0.075218f, 0.085861f,
+ 0.096916f, 0.108356f, 0.120163f, 0.132319f, 0.144808f, 0.157618f, 0.170737f, 0.184155f,
+ 0.197866f, 0.211861f, 0.226134f, 0.240682f, 0.255499f, 0.270583f, 0.285931f, 0.301542f,
+ 0.317415f, 0.333550f, 0.349948f, 0.366610f, 0.383539f, 0.400738f, 0.418210f, 0.435961f,
+ 0.453997f, 0.472324f, 0.490951f, 0.509887f, 0.529144f, 0.548735f, 0.568674f, 0.588979f,
+ 0.609671f, 0.630773f, 0.652314f, 0.674328f, 0.696854f, 0.719942f, 0.743651f, 0.768057f,
+ 0.793253f, 0.819363f, 0.846547f, 0.875017f, 0.905021f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000642f, 0.003053f, 0.007010f, 0.012219f, 0.018462f,
+ 0.025577f, 0.033444f, 0.041970f, 0.051082f, 0.060724f, 0.070849f, 0.081417f, 0.092397f,
+ 0.103763f, 0.115491f, 0.127562f, 0.139960f, 0.152670f, 0.165679f, 0.178979f, 0.192558f,
+ 0.206410f, 0.220529f, 0.234907f, 0.249542f, 0.264428f, 0.279564f, 0.294947f, 0.310575f,
+ 0.326448f, 0.342566f, 0.358929f, 0.375540f, 0.392399f, 0.409511f, 0.426878f, 0.444506f,
+ 0.462400f, 0.480566f, 0.499013f, 0.517749f, 0.536785f, 0.556134f, 0.575809f, 0.595827f,
+ 0.616207f, 0.636973f, 0.658150f, 0.679772f, 0.701876f, 0.724509f, 0.747730f, 0.771609f,
+ 0.796240f, 0.821743f, 0.848280f, 0.876069f, 0.905404f, 0.936508f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000020f, 0.001278f, 0.004450f, 0.009147f, 0.015050f, 0.021937f,
+ 0.029649f, 0.038068f, 0.047106f, 0.056694f, 0.066777f, 0.077310f, 0.088257f, 0.099588f,
+ 0.111277f, 0.123304f, 0.135650f, 0.148299f, 0.161237f, 0.174455f, 0.187941f, 0.201687f,
+ 0.215687f, 0.229933f, 0.244420f, 0.259145f, 0.274103f, 0.289293f, 0.304711f, 0.320357f,
+ 0.336230f, 0.352330f, 0.368658f, 0.385214f, 0.402002f, 0.419023f, 0.436282f, 0.453782f,
+ 0.471529f, 0.489528f, 0.507788f, 0.526317f, 0.545124f, 0.564221f, 0.583621f, 0.603341f,
+ 0.623397f, 0.643812f, 0.664611f, 0.685824f, 0.707488f, 0.729646f, 0.752354f, 0.775680f,
+ 0.799715f, 0.824574f, 0.850417f, 0.877466f, 0.906040f, 0.936528f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000183f, 0.002253f, 0.006282f, 0.011786f, 0.018436f, 0.026011f,
+ 0.034358f, 0.043364f, 0.052944f, 0.063033f, 0.073580f, 0.084544f, 0.095889f, 0.107588f,
+ 0.119617f, 0.131957f, 0.144591f, 0.157503f, 0.170682f, 0.184117f, 0.197799f, 0.211720f,
+ 0.225873f, 0.240253f, 0.254854f, 0.269673f, 0.284707f, 0.299953f, 0.315408f, 0.331073f,
+ 0.346946f, 0.363028f, 0.379318f, 0.395818f, 0.412530f, 0.429457f, 0.446602f, 0.463968f,
+ 0.481561f, 0.499386f, 0.517450f, 0.535761f, 0.554328f, 0.573162f, 0.592275f, 0.611681f,
+ 0.631398f, 0.651445f, 0.671845f, 0.692628f, 0.713827f, 0.735484f, 0.757650f, 0.780390f,
+ 0.803789f, 0.827960f, 0.853056f, 0.879298f, 0.907014f, 0.936691f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000617f, 0.003679f, 0.008674f, 0.015068f, 0.022531f, 0.030851f,
+ 0.039880f, 0.049515f, 0.059675f, 0.070300f, 0.081343f, 0.092764f, 0.104533f, 0.116624f,
+ 0.129015f, 0.141687f, 0.154626f, 0.167818f, 0.181252f, 0.194918f, 0.208807f, 0.222913f,
+ 0.237229f, 0.251750f, 0.266473f, 0.281392f, 0.296505f, 0.311811f, 0.327306f, 0.342991f,
+ 0.358864f, 0.374925f, 0.391176f, 0.407616f, 0.424249f, 0.441076f, 0.458100f, 0.475324f,
+ 0.492754f, 0.510394f, 0.528251f, 0.546331f, 0.564644f, 0.583198f, 0.602005f, 0.621078f,
+ 0.640434f, 0.660089f, 0.680066f, 0.700390f, 0.721094f, 0.742215f, 0.763800f, 0.785912f,
+ 0.808628f, 0.832055f, 0.856338f, 0.881690f, 0.908441f, 0.937125f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000000f, 0.001477f, 0.005732f, 0.011826f, 0.019212f, 0.027573f, 0.036710f,
+ 0.046487f, 0.056807f, 0.067598f, 0.078806f, 0.090386f, 0.102304f, 0.114532f, 0.127047f,
+ 0.139828f, 0.152861f, 0.166130f, 0.179624f, 0.193332f, 0.207247f, 0.221360f, 0.235666f,
+ 0.250158f, 0.264832f, 0.279684f, 0.294711f, 0.309911f, 0.325280f, 0.340819f, 0.356524f,
+ 0.372397f, 0.388438f, 0.404645f, 0.421022f, 0.437569f, 0.454287f, 0.471181f, 0.488253f,
+ 0.505507f, 0.522947f, 0.540580f, 0.558412f, 0.576449f, 0.594701f, 0.613178f, 0.631892f,
+ 0.650856f, 0.670088f, 0.689606f, 0.709434f, 0.729600f, 0.750138f, 0.771093f, 0.792519f,
+ 0.814488f, 0.837097f, 0.860481f, 0.884842f, 0.910494f, 0.937985f, 0.968254f, 1.000000f,
+ 0.000000f, 0.000096f, 0.003012f, 0.008704f, 0.016071f, 0.024590f, 0.033968f, 0.044025f,
+ 0.054641f, 0.065728f, 0.077225f, 0.089081f, 0.101260f, 0.113731f, 0.126469f, 0.139454f,
+ 0.152670f, 0.166101f, 0.179736f, 0.193565f, 0.207578f, 0.221769f, 0.236130f, 0.250656f,
+ 0.265343f, 0.280187f, 0.295183f, 0.310330f, 0.325624f, 0.341065f, 0.356650f, 0.372380f,
+ 0.388253f, 0.404269f, 0.420430f, 0.436735f, 0.453187f, 0.469786f, 0.486536f, 0.503439f,
+ 0.520498f, 0.537717f, 0.555102f, 0.572657f, 0.590390f, 0.608307f, 0.626419f, 0.644733f,
+ 0.663264f, 0.682025f, 0.701032f, 0.720308f, 0.739875f, 0.759764f, 0.780014f, 0.800673f,
+ 0.821803f, 0.843492f, 0.865860f, 0.889087f, 0.913466f, 0.939520f, 0.968350f, 1.000000f,
+ 0.000000f, 0.000727f, 0.005696f, 0.013170f, 0.022074f, 0.031940f, 0.042520f, 0.053660f,
+ 0.065258f, 0.077243f, 0.089562f, 0.102175f, 0.115050f, 0.128164f, 0.141495f, 0.155026f,
+ 0.168745f, 0.182639f, 0.196699f, 0.210915f, 0.225282f, 0.239792f, 0.254440f, 0.269223f,
+ 0.284135f, 0.299174f, 0.314337f, 0.329622f, 0.345026f, 0.360549f, 0.376189f, 0.391946f,
+ 0.407819f, 0.423808f, 0.439914f, 0.456137f, 0.472479f, 0.488940f, 0.505523f, 0.522230f,
+ 0.539064f, 0.556028f, 0.573125f, 0.590361f, 0.607741f, 0.625270f, 0.642957f, 0.660809f,
+ 0.678836f, 0.697050f, 0.715465f, 0.734098f, 0.752968f, 0.772101f, 0.791529f, 0.811290f,
+ 0.831438f, 0.852044f, 0.873210f, 0.895090f, 0.917932f, 0.942204f, 0.968981f, 1.000000f,
+ 0.000000f, 0.002796f, 0.010764f, 0.020645f, 0.031576f, 0.043202f, 0.055340f, 0.067877f,
+ 0.080740f, 0.093877f, 0.107250f, 0.120832f, 0.134598f, 0.148533f, 0.162620f, 0.176849f,
+ 0.191210f, 0.205694f, 0.220294f, 0.235005f, 0.249820f, 0.264737f, 0.279751f, 0.294859f,
+ 0.310058f, 0.325346f, 0.340721f, 0.356181f, 0.371725f, 0.387353f, 0.403063f, 0.418854f,
+ 0.434727f, 0.450682f, 0.466718f, 0.482837f, 0.499038f, 0.515324f, 0.531695f, 0.548153f,
+ 0.564700f, 0.581338f, 0.598070f, 0.614900f, 0.631830f, 0.648865f, 0.666011f, 0.683273f,
+ 0.700659f, 0.718176f, 0.735834f, 0.753646f, 0.771625f, 0.789790f, 0.808162f, 0.826771f,
+ 0.845654f, 0.864863f, 0.884472f, 0.904592f, 0.925407f, 0.947271f, 0.971050f, 1.000000f,
+ 0.000000f, 0.015873f, 0.031746f, 0.047619f, 0.063492f, 0.079365f, 0.095238f, 0.111111f,
+ 0.126984f, 0.142857f, 0.158730f, 0.174603f, 0.190476f, 0.206349f, 0.222222f, 0.238095f,
+ 0.253968f, 0.269841f, 0.285714f, 0.301587f, 0.317460f, 0.333333f, 0.349206f, 0.365079f,
+ 0.380952f, 0.396825f, 0.412698f, 0.428571f, 0.444444f, 0.460317f, 0.476190f, 0.492063f,
+ 0.507937f, 0.523810f, 0.539683f, 0.555556f, 0.571429f, 0.587302f, 0.603175f, 0.619048f,
+ 0.634921f, 0.650794f, 0.666667f, 0.682540f, 0.698413f, 0.714286f, 0.730159f, 0.746032f,
+ 0.761905f, 0.777778f, 0.793651f, 0.809524f, 0.825397f, 0.841270f, 0.857143f, 0.873016f,
+ 0.888889f, 0.904762f, 0.920635f, 0.936508f, 0.952381f, 0.968254f, 0.984127f, 1.000000f,
+};
+
+const float btdf_split_sum_ggx[32][64 * 64] = {
+ {
+ 0.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.039917f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ },
+ {
+ 0.000122f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.004147f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.897949f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000732f, 0.996094f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002439f,
+ 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000366f, 0.078308f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.001098f, 0.992188f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.005001f, 0.998535f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.902344f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.002928f,
+ 0.997070f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000732f, 0.301758f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.002562f, 0.996094f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.433594f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.004021f, 0.996582f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001098f, 0.949219f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000610f,
+ 0.012039f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.002073f, 0.993652f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000854f, 0.725586f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000610f, 0.011856f, 0.998047f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.002905f, 0.995117f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001098f, 0.978027f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000732f,
+ 0.314941f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000731f, 0.017670f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000366f, 0.005852f, 0.997559f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.003050f, 0.996094f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001957f, 0.993652f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001586f, 0.990234f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001220f, 0.986816f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.001220f,
+ 0.984375f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
+ 0.001098f, 0.985352f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.001220f, 0.989258f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.001341f, 0.993652f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.001586f, 0.996094f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.002802f, 0.997559f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000117f, 0.000122f, 0.000122f, 0.000243f, 0.006088f, 0.998535f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.026321f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.892578f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000975f,
+ 0.993652f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.002317f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.017944f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000731f, 0.983887f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
+ 0.000122f, 0.000122f, 0.001653f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.026108f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000732f, 0.995605f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.003777f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000365f, 0.991211f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002195f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000364f, 0.993164f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002672f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000360f, 0.998047f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.017075f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000731f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.997070f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.006874f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000480f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.996582f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000067f, 0.005440f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000365f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000121f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.995605f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995117f,
+ },
+ {
+ 0.003168f, 0.995605f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000976f, 0.053314f, 0.994629f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000732f, 0.003660f, 0.653809f, 0.995117f, 0.998047f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.001463f, 0.010452f, 0.947266f, 0.995605f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000853f, 0.002928f, 0.037750f,
+ 0.980957f, 0.996582f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000610f, 0.001342f,
+ 0.006100f, 0.314453f, 0.989746f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
+ 0.001091f, 0.002317f, 0.015839f, 0.910645f, 0.993652f, 0.997559f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000366f, 0.000732f, 0.001463f, 0.005302f, 0.068909f, 0.977539f, 0.995605f, 0.998047f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000244f, 0.000732f, 0.001098f, 0.002560f, 0.011551f, 0.658691f, 0.989746f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000732f, 0.001585f, 0.004868f, 0.041077f,
+ 0.958984f, 0.994141f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000732f, 0.001215f, 0.002802f,
+ 0.010834f, 0.441895f, 0.987305f, 0.996094f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000488f, 0.000850f,
+ 0.001586f, 0.004753f, 0.039154f, 0.948242f, 0.993652f, 0.997559f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f,
+ 0.000732f, 0.001220f, 0.003159f, 0.012032f, 0.480713f, 0.985840f, 0.996094f, 0.998047f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000240f, 0.000731f, 0.001097f, 0.001950f, 0.005966f, 0.054413f, 0.957520f, 0.994141f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000486f, 0.000732f, 0.001534f, 0.003536f, 0.016937f, 0.726562f,
+ 0.988281f, 0.996582f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000732f, 0.001098f, 0.002192f, 0.008278f,
+ 0.125244f, 0.974121f, 0.994629f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000731f, 0.000947f, 0.001828f,
+ 0.005314f, 0.031677f, 0.916016f, 0.991699f, 0.997070f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f,
+ 0.001339f, 0.003294f, 0.014389f, 0.562012f, 0.985840f, 0.996094f, 0.998047f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
+ 0.000732f, 0.001098f, 0.002310f, 0.008163f, 0.123779f, 0.973633f, 0.994629f, 0.997559f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000365f, 0.000732f, 0.001097f, 0.002071f, 0.005669f, 0.041199f, 0.937988f, 0.992676f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000366f, 0.000728f, 0.000732f, 0.001585f, 0.004143f, 0.020813f, 0.813965f,
+ 0.989746f, 0.996582f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.001220f, 0.003292f, 0.012581f,
+ 0.446533f, 0.984863f, 0.996094f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000471f, 0.000732f, 0.001220f, 0.002796f,
+ 0.009338f, 0.161865f, 0.977051f, 0.995117f, 0.997559f, 0.998535f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000732f, 0.001098f,
+ 0.002285f, 0.006870f, 0.074097f, 0.965820f, 0.994141f, 0.997559f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000731f,
+ 0.001086f, 0.001945f, 0.005238f, 0.043732f, 0.947754f, 0.993652f, 0.997559f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f,
+ 0.000730f, 0.000893f, 0.001826f, 0.004871f, 0.030411f, 0.922852f, 0.992188f, 0.997559f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000243f, 0.000609f, 0.000732f, 0.001407f, 0.004375f, 0.023758f, 0.892090f, 0.992188f,
+ 0.997070f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000605f, 0.000732f, 0.001579f, 0.003941f, 0.020767f, 0.862793f,
+ 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000238f, 0.000483f, 0.000732f, 0.001449f, 0.003654f, 0.018951f,
+ 0.847656f, 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000233f, 0.000485f, 0.000732f, 0.001308f, 0.003353f,
+ 0.018997f, 0.855469f, 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000118f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f, 0.000732f, 0.001292f,
+ 0.003649f, 0.019791f, 0.881836f, 0.992188f, 0.997559f, 0.998535f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000432f, 0.000732f,
+ 0.001220f, 0.003635f, 0.021912f, 0.916992f, 0.993652f, 0.997559f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
+ 0.000732f, 0.001245f, 0.004002f, 0.028107f, 0.946289f, 0.994141f, 0.998047f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000085f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000475f, 0.000732f, 0.001611f, 0.004581f, 0.040466f, 0.966309f, 0.995605f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000487f, 0.000732f, 0.001703f, 0.005589f, 0.073486f, 0.979980f, 0.996094f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000475f, 0.000732f, 0.001706f, 0.006809f, 0.198730f, 0.987305f,
+ 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.002071f, 0.009590f, 0.647949f,
+ 0.992188f, 0.997559f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000710f, 0.001093f, 0.002541f, 0.015533f,
+ 0.922852f, 0.995117f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000728f, 0.001218f, 0.003387f,
+ 0.034454f, 0.975586f, 0.996582f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000731f, 0.001219f,
+ 0.004959f, 0.161865f, 0.989746f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000731f,
+ 0.001767f, 0.009331f, 0.849121f, 0.994629f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
+ 0.000732f, 0.002644f, 0.024231f, 0.977051f, 0.997559f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000685f, 0.001217f, 0.004139f, 0.195435f, 0.992676f, 0.998535f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000362f, 0.000731f, 0.001570f, 0.010086f, 0.944824f, 0.997070f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000365f, 0.000745f, 0.002781f, 0.051758f, 0.990723f, 0.998535f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000599f, 0.001176f, 0.006641f, 0.899414f, 0.997070f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000731f, 0.002066f, 0.032654f, 0.991211f, 0.998535f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000448f, 0.001088f, 0.005440f, 0.918457f, 0.997070f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000725f, 0.001822f, 0.038452f, 0.994141f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000329f, 0.000848f, 0.005672f, 0.972168f,
+ 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000581f, 0.001982f, 0.155273f,
+ 0.997070f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000330f, 0.000848f, 0.009247f,
+ 0.992676f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000589f, 0.002625f,
+ 0.958496f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001199f,
+ 0.083374f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000716f,
+ 0.007244f, 0.996582f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.002277f, 0.991211f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000070f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000854f, 0.950684f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000121f, 0.000122f,
+ 0.000475f, 0.067139f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000122f,
+ 0.000002f, 0.005859f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f,
+ 0.000014f, 0.001376f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000121f, 0.000572f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000077f, 0.000002f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000103f, 0.992188f, 0.991699f, 0.991699f, 0.992188f, 0.992188f, 0.991699f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.940430f, 0.940430f, 0.940918f, 0.940918f, 0.940430f, 0.940430f,
+ },
+ {
+ 0.014023f, 0.979492f, 0.994629f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000488f, 0.004757f, 0.163330f, 0.975098f, 0.993164f, 0.996582f, 0.997559f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000610f, 0.002928f, 0.017166f, 0.563965f, 0.978027f, 0.992676f, 0.996094f,
+ 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000364f, 0.000732f, 0.002192f, 0.006573f, 0.044952f, 0.830566f, 0.980957f,
+ 0.992676f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000366f, 0.000854f, 0.001586f, 0.004253f, 0.014313f, 0.130371f,
+ 0.919922f, 0.984375f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000488f, 0.000854f, 0.001342f, 0.003025f, 0.007305f,
+ 0.028870f, 0.407715f, 0.954590f, 0.987305f, 0.993652f, 0.996094f, 0.997070f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000609f, 0.000842f, 0.000976f, 0.002193f,
+ 0.005112f, 0.012505f, 0.066589f, 0.768066f, 0.970703f, 0.989746f, 0.994629f, 0.996582f,
+ 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000244f, 0.000599f, 0.000609f, 0.000976f,
+ 0.001829f, 0.003046f, 0.007256f, 0.023499f, 0.194946f, 0.908691f, 0.979980f, 0.991699f,
+ 0.995117f, 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000488f, 0.000609f,
+ 0.000976f, 0.001583f, 0.002647f, 0.004726f, 0.012169f, 0.050537f, 0.568359f, 0.954102f,
+ 0.985840f, 0.993164f, 0.995605f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000488f,
+ 0.000610f, 0.000975f, 0.001211f, 0.001946f, 0.003532f, 0.007793f, 0.022446f, 0.139648f,
+ 0.856445f, 0.974121f, 0.989746f, 0.994141f, 0.996094f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f,
+ 0.000310f, 0.000609f, 0.000807f, 0.001098f, 0.001822f, 0.002794f, 0.005699f, 0.012878f,
+ 0.047821f, 0.469238f, 0.941406f, 0.982910f, 0.991699f, 0.995117f, 0.996582f, 0.997559f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000244f, 0.000244f, 0.000609f, 0.000732f, 0.001098f, 0.001461f, 0.002274f, 0.004025f,
+ 0.008247f, 0.023254f, 0.135254f, 0.833984f, 0.969727f, 0.987793f, 0.993652f, 0.995605f,
+ 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000207f, 0.000244f, 0.000609f, 0.000610f, 0.001096f, 0.001098f, 0.002071f,
+ 0.003370f, 0.006172f, 0.014442f, 0.052795f, 0.486572f, 0.940430f, 0.981934f, 0.991699f,
+ 0.994629f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000485f, 0.000610f, 0.001080f, 0.001098f,
+ 0.001742f, 0.002668f, 0.004692f, 0.010147f, 0.028076f, 0.168701f, 0.854004f, 0.970703f,
+ 0.988770f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000487f, 0.000610f, 0.000731f,
+ 0.001098f, 0.001413f, 0.002411f, 0.003895f, 0.007072f, 0.017242f, 0.069580f, 0.605957f,
+ 0.948730f, 0.983398f, 0.992188f, 0.995117f, 0.996582f, 0.997559f, 0.998047f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000244f, 0.000609f,
+ 0.000610f, 0.001094f, 0.001337f, 0.001828f, 0.003275f, 0.005814f, 0.012054f, 0.036987f,
+ 0.270752f, 0.899414f, 0.975586f, 0.989746f, 0.993652f, 0.996094f, 0.997070f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000365f,
+ 0.000597f, 0.000610f, 0.000970f, 0.001098f, 0.001815f, 0.002771f, 0.005009f, 0.008888f,
+ 0.023804f, 0.115845f, 0.775879f, 0.962891f, 0.986328f, 0.993164f, 0.995605f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000244f, 0.000536f, 0.000731f, 0.000937f, 0.001203f, 0.001581f, 0.002186f, 0.004005f,
+ 0.007061f, 0.016830f, 0.061218f, 0.522949f, 0.940430f, 0.981934f, 0.991211f, 0.994629f,
+ 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000363f, 0.000487f, 0.000731f, 0.000732f, 0.001097f, 0.001339f, 0.002071f,
+ 0.003498f, 0.005947f, 0.012390f, 0.037964f, 0.268799f, 0.896973f, 0.975586f, 0.989258f,
+ 0.994141f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000244f, 0.000366f, 0.000609f, 0.000610f, 0.001094f, 0.001215f,
+ 0.002056f, 0.003183f, 0.004742f, 0.009880f, 0.026337f, 0.139526f, 0.813477f, 0.966309f,
+ 0.986816f, 0.993164f, 0.996094f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000163f, 0.000363f, 0.000600f, 0.000731f, 0.001088f,
+ 0.001216f, 0.001616f, 0.002640f, 0.004402f, 0.008156f, 0.019669f, 0.083191f, 0.664062f,
+ 0.953125f, 0.984375f, 0.992188f, 0.995117f, 0.997070f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000244f, 0.000523f, 0.000731f,
+ 0.000732f, 0.001097f, 0.001690f, 0.002169f, 0.003998f, 0.006939f, 0.015808f, 0.055634f,
+ 0.471191f, 0.935059f, 0.980957f, 0.991211f, 0.995117f, 0.996582f, 0.997559f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000336f, 0.000486f,
+ 0.000731f, 0.000732f, 0.001097f, 0.001558f, 0.002069f, 0.003525f, 0.006058f, 0.013062f,
+ 0.040894f, 0.306396f, 0.910156f, 0.978027f, 0.990234f, 0.994141f, 0.996582f, 0.997559f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000113f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000360f,
+ 0.000515f, 0.000731f, 0.000731f, 0.001094f, 0.001219f, 0.002148f, 0.003159f, 0.005577f,
+ 0.011360f, 0.031952f, 0.203979f, 0.874512f, 0.973633f, 0.989258f, 0.994141f, 0.996582f,
+ 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000325f, 0.000366f, 0.000731f, 0.000731f, 0.001093f, 0.001219f, 0.001820f, 0.002916f,
+ 0.005291f, 0.009758f, 0.026352f, 0.145020f, 0.832520f, 0.969238f, 0.988281f, 0.993652f,
+ 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000244f, 0.000440f, 0.000605f, 0.000731f, 0.001086f, 0.001097f, 0.001646f,
+ 0.002670f, 0.004230f, 0.008835f, 0.022415f, 0.112183f, 0.786133f, 0.966309f, 0.987793f,
+ 0.993652f, 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000272f, 0.000358f, 0.000565f, 0.000731f, 0.000790f, 0.001210f,
+ 0.001573f, 0.002434f, 0.004360f, 0.008102f, 0.020660f, 0.092896f, 0.741699f, 0.962891f,
+ 0.987305f, 0.993164f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000364f, 0.000723f, 0.000731f, 0.000731f,
+ 0.001216f, 0.001698f, 0.002510f, 0.003998f, 0.007484f, 0.018463f, 0.082336f, 0.709961f,
+ 0.961426f, 0.986816f, 0.993652f, 0.996094f, 0.997559f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000362f, 0.000704f, 0.000730f,
+ 0.000845f, 0.001096f, 0.001513f, 0.002302f, 0.003941f, 0.007168f, 0.017746f, 0.076782f,
+ 0.693848f, 0.961426f, 0.987305f, 0.993652f, 0.996094f, 0.997559f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000364f, 0.000579f,
+ 0.000728f, 0.000731f, 0.001096f, 0.001491f, 0.002069f, 0.003899f, 0.007195f, 0.017059f,
+ 0.075439f, 0.701172f, 0.962402f, 0.987793f, 0.993652f, 0.996094f, 0.997559f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000357f,
+ 0.000482f, 0.000730f, 0.000731f, 0.001094f, 0.001334f, 0.002230f, 0.003708f, 0.007217f,
+ 0.017410f, 0.079163f, 0.730469f, 0.965820f, 0.988281f, 0.994141f, 0.996582f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f,
+ 0.000243f, 0.000365f, 0.000729f, 0.000731f, 0.001095f, 0.001330f, 0.002066f, 0.003637f,
+ 0.007118f, 0.018112f, 0.087708f, 0.775391f, 0.969238f, 0.989258f, 0.994629f, 0.997070f,
+ 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000073f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000323f, 0.000390f, 0.000729f, 0.000731f, 0.001094f, 0.001332f, 0.002275f,
+ 0.003782f, 0.007252f, 0.019379f, 0.105042f, 0.827637f, 0.973145f, 0.990723f, 0.994629f,
+ 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000240f, 0.000369f, 0.000729f, 0.000731f, 0.001093f, 0.001330f,
+ 0.002209f, 0.003937f, 0.007896f, 0.021805f, 0.137207f, 0.876953f, 0.979004f, 0.991699f,
+ 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000272f, 0.000479f, 0.000727f, 0.000731f, 0.001085f,
+ 0.001331f, 0.002291f, 0.004105f, 0.008446f, 0.025024f, 0.202271f, 0.916504f, 0.982910f,
+ 0.993164f, 0.996094f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000360f, 0.000469f, 0.000681f, 0.000731f,
+ 0.001092f, 0.001331f, 0.002184f, 0.004227f, 0.009521f, 0.030899f, 0.335205f, 0.945312f,
+ 0.986816f, 0.993652f, 0.996582f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000116f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000429f, 0.000726f,
+ 0.000731f, 0.001091f, 0.001649f, 0.002464f, 0.004810f, 0.010895f, 0.041931f, 0.563477f,
+ 0.963867f, 0.989746f, 0.995117f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000101f, 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000288f, 0.000481f,
+ 0.000720f, 0.000731f, 0.001093f, 0.001571f, 0.002735f, 0.005405f, 0.013199f, 0.064880f,
+ 0.786133f, 0.976562f, 0.992188f, 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f,
+ 0.000481f, 0.000727f, 0.000731f, 0.001093f, 0.001655f, 0.003132f, 0.005909f, 0.017181f,
+ 0.123169f, 0.904297f, 0.984375f, 0.993652f, 0.996582f, 0.998047f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000120f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000264f, 0.000392f, 0.000727f, 0.000835f, 0.001196f, 0.001765f, 0.003252f, 0.007343f,
+ 0.024521f, 0.304199f, 0.954102f, 0.989258f, 0.995605f, 0.997559f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000034f, 0.000119f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000235f, 0.000375f, 0.000728f, 0.000822f, 0.001095f, 0.002024f, 0.003952f,
+ 0.009193f, 0.040894f, 0.694824f, 0.975586f, 0.992676f, 0.996582f, 0.998047f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000112f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000307f, 0.000475f, 0.000728f, 0.000943f, 0.001216f, 0.002283f,
+ 0.004829f, 0.013008f, 0.092224f, 0.908203f, 0.986328f, 0.995117f, 0.997559f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000073f, 0.000118f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000576f, 0.000728f, 0.001073f, 0.001569f,
+ 0.002668f, 0.005947f, 0.020889f, 0.331543f, 0.965820f, 0.992188f, 0.996582f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000100f, 0.000120f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000362f, 0.000630f, 0.000729f, 0.001087f,
+ 0.001567f, 0.003241f, 0.008240f, 0.043793f, 0.824219f, 0.984375f, 0.994629f, 0.997559f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000075f, 0.000119f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000363f, 0.000689f, 0.000730f,
+ 0.001185f, 0.002022f, 0.004108f, 0.013702f, 0.161011f, 0.957031f, 0.991699f, 0.996582f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000105f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000156f, 0.000372f, 0.000689f,
+ 0.000730f, 0.001198f, 0.002651f, 0.006214f, 0.028854f, 0.750000f, 0.984375f, 0.995605f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000102f,
+ 0.000118f, 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000472f,
+ 0.000724f, 0.000966f, 0.001658f, 0.003397f, 0.010582f, 0.116028f, 0.959473f, 0.993164f,
+ 0.997559f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000111f, 0.000119f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f,
+ 0.000479f, 0.000726f, 0.001163f, 0.002157f, 0.004829f, 0.024338f, 0.776855f, 0.987793f,
+ 0.996582f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000097f, 0.000117f, 0.000120f, 0.000121f, 0.000121f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000219f, 0.000580f, 0.000728f, 0.001203f, 0.002872f, 0.009109f, 0.130371f, 0.972168f,
+ 0.995117f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000118f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000333f, 0.000681f, 0.000940f, 0.001629f, 0.004120f, 0.025467f, 0.890625f,
+ 0.991699f, 0.997559f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000083f, 0.000116f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000353f, 0.000722f, 0.000961f, 0.002403f, 0.009354f, 0.295166f,
+ 0.985840f, 0.997070f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000105f,
+ 0.000118f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000130f, 0.000427f, 0.000605f, 0.001345f, 0.004620f, 0.041229f,
+ 0.966797f, 0.996094f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000074f, 0.000114f, 0.000119f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000089f, 0.000562f, 0.000942f, 0.002352f, 0.012459f,
+ 0.854004f, 0.994141f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000103f, 0.000117f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000007f, 0.000002f, 0.000231f, 0.000596f, 0.001180f, 0.005474f,
+ 0.211426f, 0.991211f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000118f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000122f, 0.000029f, 0.000004f, 0.000001f, 0.000348f, 0.000896f, 0.002764f,
+ 0.032562f, 0.984375f, 0.998535f, 0.998535f, 0.999023f, 0.998535f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000089f, 0.000116f, 0.000119f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000013f, 0.000003f, 0.000075f, 0.000586f, 0.001508f,
+ 0.010292f, 0.963379f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000107f,
+ 0.000118f, 0.000120f, 0.000121f, 0.000116f, 0.000008f, 0.000002f, 0.000233f, 0.000857f,
+ 0.004566f, 0.834961f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000083f, 0.000114f, 0.000119f, 0.000120f, 0.000060f, 0.000005f, 0.000001f, 0.000557f,
+ 0.002064f, 0.182373f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000103f, 0.000117f, 0.000120f, 0.000024f, 0.000003f, 0.000168f,
+ 0.000968f, 0.026428f, 0.996582f, 0.997070f, 0.996582f, 0.996582f, 0.996582f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000047f, 0.000110f, 0.000118f, 0.000017f, 0.000002f,
+ 0.000513f, 0.006870f, 0.995605f, 0.995605f, 0.995117f, 0.995117f, 0.995117f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000096f, 0.000115f, 0.000011f,
+ 0.000042f, 0.001919f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992676f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000044f, 0.000109f,
+ 0.000008f, 0.000314f, 0.985840f, 0.985840f, 0.985840f, 0.985840f, 0.986328f, 0.985840f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000089f, 0.000060f, 0.964355f, 0.964355f, 0.963867f, 0.963867f, 0.963379f, 0.964355f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000022f, 0.818848f, 0.819824f, 0.819336f, 0.819824f, 0.819824f, 0.819824f,
+ },
+ {
+ 0.038849f, 0.941406f, 0.984375f, 0.992188f, 0.994141f, 0.996094f, 0.996582f, 0.997070f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
+ 0.001582f, 0.014984f, 0.262451f, 0.930664f, 0.979980f, 0.989258f, 0.993164f, 0.995117f,
+ 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
+ 0.000244f, 0.002317f, 0.009003f, 0.047180f, 0.524902f, 0.936523f, 0.978027f, 0.988281f,
+ 0.992188f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
+ 0.000122f, 0.001098f, 0.002560f, 0.006824f, 0.020493f, 0.108826f, 0.715820f, 0.946289f,
+ 0.978516f, 0.988281f, 0.992188f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000607f, 0.001098f, 0.002310f, 0.005646f, 0.012825f, 0.040131f, 0.231201f,
+ 0.825195f, 0.954590f, 0.979980f, 0.988281f, 0.992188f, 0.994141f, 0.995117f, 0.996582f,
+ 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000244f, 0.000609f, 0.001341f, 0.002310f, 0.004208f, 0.008865f, 0.021591f,
+ 0.074585f, 0.439209f, 0.885742f, 0.962402f, 0.981934f, 0.989258f, 0.992676f, 0.994141f,
+ 0.995605f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000483f, 0.000610f, 0.001460f, 0.002192f, 0.003994f, 0.007030f,
+ 0.013847f, 0.036316f, 0.146362f, 0.661621f, 0.921875f, 0.969238f, 0.983398f, 0.989746f,
+ 0.993164f, 0.994141f, 0.995605f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000243f, 0.000604f, 0.000730f, 0.001307f, 0.001944f, 0.003017f,
+ 0.004997f, 0.009834f, 0.021606f, 0.063416f, 0.295410f, 0.808594f, 0.944336f, 0.974609f,
+ 0.985352f, 0.990234f, 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000366f, 0.000495f, 0.000731f, 0.001217f, 0.001823f,
+ 0.002796f, 0.004398f, 0.007656f, 0.015366f, 0.035828f, 0.119263f, 0.531738f, 0.886230f,
+ 0.958496f, 0.979004f, 0.986816f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000244f, 0.000366f, 0.000607f, 0.000731f, 0.001211f,
+ 0.001650f, 0.002441f, 0.003975f, 0.006207f, 0.011536f, 0.023315f, 0.060822f, 0.242798f,
+ 0.744141f, 0.927734f, 0.969238f, 0.982422f, 0.989258f, 0.992188f, 0.994141f, 0.995605f,
+ 0.996094f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000211f, 0.000455f, 0.000486f, 0.000853f,
+ 0.001081f, 0.001810f, 0.002426f, 0.003759f, 0.005501f, 0.009094f, 0.016876f, 0.037109f,
+ 0.114075f, 0.475586f, 0.862305f, 0.951172f, 0.975586f, 0.985840f, 0.990234f, 0.992676f,
+ 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000364f, 0.000366f, 0.000464f,
+ 0.000731f, 0.001093f, 0.001577f, 0.002235f, 0.002798f, 0.004841f, 0.007637f, 0.013008f,
+ 0.025635f, 0.063965f, 0.238403f, 0.720215f, 0.919434f, 0.965820f, 0.981445f, 0.987793f,
+ 0.991211f, 0.993652f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000238f, 0.000609f,
+ 0.000712f, 0.000974f, 0.000976f, 0.001507f, 0.002031f, 0.002680f, 0.004066f, 0.006294f,
+ 0.010284f, 0.018326f, 0.040924f, 0.124146f, 0.485596f, 0.859375f, 0.949707f, 0.975586f,
+ 0.984375f, 0.989746f, 0.992676f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997070f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000113f, 0.000487f,
+ 0.000488f, 0.000610f, 0.000961f, 0.000976f, 0.001337f, 0.001705f, 0.002663f, 0.003521f,
+ 0.005417f, 0.008408f, 0.014809f, 0.028793f, 0.073120f, 0.270996f, 0.741699f, 0.922363f,
+ 0.965332f, 0.980957f, 0.987793f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f,
+ 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000244f, 0.000224f,
+ 0.000486f, 0.000609f, 0.000610f, 0.000973f, 0.000975f, 0.001306f, 0.001703f, 0.002350f,
+ 0.003239f, 0.004848f, 0.007122f, 0.011955f, 0.021820f, 0.048859f, 0.152710f, 0.554199f,
+ 0.875977f, 0.953125f, 0.976562f, 0.985352f, 0.990234f, 0.993164f, 0.994629f, 0.995605f,
+ 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000234f,
+ 0.000244f, 0.000485f, 0.000488f, 0.000610f, 0.000969f, 0.000975f, 0.001335f, 0.001693f,
+ 0.001991f, 0.002811f, 0.004097f, 0.006397f, 0.009903f, 0.017303f, 0.035034f, 0.094421f,
+ 0.354736f, 0.795898f, 0.933594f, 0.969238f, 0.981934f, 0.988281f, 0.991699f, 0.993652f,
+ 0.995117f, 0.996094f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000244f, 0.000244f, 0.000480f, 0.000608f, 0.000488f, 0.000922f, 0.000975f, 0.000976f,
+ 0.001339f, 0.001827f, 0.002674f, 0.003891f, 0.005688f, 0.008324f, 0.014320f, 0.026917f,
+ 0.064392f, 0.216431f, 0.668945f, 0.904785f, 0.959961f, 0.978516f, 0.986816f, 0.990723f,
+ 0.993652f, 0.994141f, 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000188f, 0.000220f, 0.000480f, 0.000608f, 0.000609f, 0.000876f, 0.000975f,
+ 0.000976f, 0.001454f, 0.002068f, 0.002649f, 0.003481f, 0.004757f, 0.007801f, 0.012230f,
+ 0.021698f, 0.046814f, 0.138306f, 0.506348f, 0.859375f, 0.947754f, 0.974121f, 0.984375f,
+ 0.989746f, 0.992188f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000446f, 0.000487f, 0.000609f, 0.000731f,
+ 0.000973f, 0.000975f, 0.001310f, 0.001823f, 0.002304f, 0.002869f, 0.004890f, 0.006813f,
+ 0.010475f, 0.017731f, 0.036163f, 0.095337f, 0.353516f, 0.792480f, 0.932129f, 0.968262f,
+ 0.982422f, 0.988770f, 0.992188f, 0.993652f, 0.995605f, 0.996094f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000241f, 0.000362f, 0.000487f, 0.000609f,
+ 0.000609f, 0.000973f, 0.001213f, 0.001419f, 0.001807f, 0.002068f, 0.002794f, 0.004070f,
+ 0.005917f, 0.009140f, 0.015129f, 0.029053f, 0.070068f, 0.242554f, 0.700684f, 0.911621f,
+ 0.961914f, 0.979492f, 0.987305f, 0.991211f, 0.993164f, 0.995117f, 0.995605f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000243f, 0.000483f, 0.000603f,
+ 0.000609f, 0.000730f, 0.001076f, 0.000975f, 0.001327f, 0.001598f, 0.002056f, 0.002848f,
+ 0.003519f, 0.005589f, 0.008041f, 0.013321f, 0.024155f, 0.054718f, 0.171875f, 0.590332f,
+ 0.885742f, 0.955566f, 0.977051f, 0.985840f, 0.990723f, 0.993164f, 0.994629f, 0.995605f,
+ 0.997070f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000192f, 0.000122f, 0.000244f, 0.000483f,
+ 0.000606f, 0.000608f, 0.000731f, 0.000953f, 0.001095f, 0.001258f, 0.001575f, 0.002066f,
+ 0.002594f, 0.003857f, 0.004734f, 0.007683f, 0.011642f, 0.021179f, 0.044464f, 0.127930f,
+ 0.476807f, 0.850586f, 0.947266f, 0.974121f, 0.984375f, 0.989746f, 0.992676f, 0.994141f,
+ 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000229f, 0.000239f, 0.000244f,
+ 0.000343f, 0.000483f, 0.000608f, 0.000609f, 0.000857f, 0.000973f, 0.001097f, 0.001571f,
+ 0.002041f, 0.002399f, 0.002922f, 0.004471f, 0.006836f, 0.010643f, 0.018661f, 0.037354f,
+ 0.100037f, 0.378418f, 0.810547f, 0.937988f, 0.971191f, 0.983887f, 0.989258f, 0.992188f,
+ 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000161f,
+ 0.000230f, 0.000244f, 0.000486f, 0.000607f, 0.000609f, 0.000819f, 0.000972f, 0.000975f,
+ 0.001431f, 0.001945f, 0.002283f, 0.003031f, 0.004238f, 0.006424f, 0.009995f, 0.016068f,
+ 0.032104f, 0.081360f, 0.302246f, 0.765625f, 0.928223f, 0.968750f, 0.982422f, 0.988770f,
+ 0.992676f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000240f, 0.000240f, 0.000244f, 0.000450f, 0.000607f, 0.000609f, 0.000731f, 0.001084f,
+ 0.000974f, 0.001341f, 0.001910f, 0.002254f, 0.003216f, 0.004017f, 0.005692f, 0.008980f,
+ 0.014832f, 0.028854f, 0.069641f, 0.248657f, 0.719238f, 0.918945f, 0.965820f, 0.981445f,
+ 0.988770f, 0.992188f, 0.994629f, 0.995605f, 0.996094f, 0.997070f, 0.997559f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000243f, 0.000360f, 0.000461f, 0.000607f, 0.000608f, 0.000731f,
+ 0.001086f, 0.001202f, 0.001307f, 0.001592f, 0.002066f, 0.003134f, 0.003990f, 0.005611f,
+ 0.008133f, 0.013680f, 0.025986f, 0.061462f, 0.211670f, 0.676758f, 0.910156f, 0.963867f,
+ 0.980957f, 0.988281f, 0.991699f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000243f, 0.000482f, 0.000604f, 0.000608f,
+ 0.000730f, 0.001040f, 0.001188f, 0.001287f, 0.001574f, 0.002064f, 0.002613f, 0.003721f,
+ 0.005428f, 0.008018f, 0.013161f, 0.024200f, 0.055573f, 0.186401f, 0.642578f, 0.904785f,
+ 0.962402f, 0.980469f, 0.987793f, 0.991699f, 0.994141f, 0.995605f, 0.996582f, 0.997070f,
+ 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000480f, 0.000602f,
+ 0.000721f, 0.000705f, 0.000907f, 0.001094f, 0.001096f, 0.001493f, 0.002058f, 0.002607f,
+ 0.003639f, 0.004826f, 0.007595f, 0.012413f, 0.022171f, 0.051697f, 0.171143f, 0.619629f,
+ 0.899414f, 0.961426f, 0.980957f, 0.987793f, 0.992188f, 0.994629f, 0.995605f, 0.996582f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000172f, 0.000232f, 0.000243f, 0.000244f,
+ 0.000576f, 0.000711f, 0.000608f, 0.000767f, 0.001089f, 0.001213f, 0.001509f, 0.002029f,
+ 0.002684f, 0.003550f, 0.005161f, 0.007107f, 0.011871f, 0.021545f, 0.049347f, 0.163086f,
+ 0.609863f, 0.900391f, 0.962891f, 0.980957f, 0.988281f, 0.992676f, 0.994629f, 0.996094f,
+ 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000210f, 0.000122f, 0.000337f,
+ 0.000290f, 0.000594f, 0.000726f, 0.000730f, 0.000731f, 0.001090f, 0.001212f, 0.001506f,
+ 0.002029f, 0.002335f, 0.003489f, 0.005077f, 0.007000f, 0.011398f, 0.021027f, 0.048218f,
+ 0.161133f, 0.614258f, 0.903809f, 0.963379f, 0.981934f, 0.988770f, 0.992188f, 0.994629f,
+ 0.996094f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000281f, 0.000440f, 0.000683f, 0.000726f, 0.000730f, 0.000731f, 0.001087f, 0.001095f,
+ 0.001485f, 0.001793f, 0.002214f, 0.002991f, 0.004951f, 0.006912f, 0.011162f, 0.020905f,
+ 0.048187f, 0.165527f, 0.633789f, 0.910156f, 0.965820f, 0.982422f, 0.989746f, 0.993164f,
+ 0.995117f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000241f, 0.000243f, 0.000480f, 0.000725f, 0.000697f, 0.000731f, 0.001007f,
+ 0.001094f, 0.001360f, 0.001795f, 0.002161f, 0.003244f, 0.004871f, 0.006966f, 0.011330f,
+ 0.020706f, 0.049591f, 0.178345f, 0.667969f, 0.918457f, 0.968262f, 0.983887f, 0.990234f,
+ 0.993652f, 0.995605f, 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000086f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000243f, 0.000243f, 0.000465f, 0.000592f, 0.000729f, 0.000730f,
+ 0.001079f, 0.001093f, 0.001332f, 0.001885f, 0.002129f, 0.003254f, 0.004818f, 0.006889f,
+ 0.011429f, 0.021957f, 0.052521f, 0.201294f, 0.714355f, 0.929199f, 0.972168f, 0.985352f,
+ 0.991211f, 0.994141f, 0.995605f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000115f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000184f, 0.000241f, 0.000347f, 0.000453f, 0.000579f, 0.000728f,
+ 0.000729f, 0.001034f, 0.001093f, 0.001292f, 0.001857f, 0.002131f, 0.003296f, 0.004826f,
+ 0.006958f, 0.011726f, 0.023071f, 0.057983f, 0.239258f, 0.767578f, 0.939453f, 0.976074f,
+ 0.987305f, 0.992676f, 0.994629f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000088f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000191f, 0.000242f, 0.000425f, 0.000558f,
+ 0.000723f, 0.000730f, 0.001058f, 0.001092f, 0.001297f, 0.001653f, 0.002352f, 0.003124f,
+ 0.004860f, 0.007072f, 0.012131f, 0.024551f, 0.066406f, 0.300537f, 0.820312f, 0.951172f,
+ 0.979492f, 0.988281f, 0.993164f, 0.995117f, 0.996582f, 0.997070f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000227f, 0.000239f, 0.000341f, 0.000359f,
+ 0.000587f, 0.000605f, 0.000729f, 0.001040f, 0.001185f, 0.001275f, 0.001849f, 0.002390f,
+ 0.003399f, 0.005001f, 0.007404f, 0.012871f, 0.027237f, 0.079529f, 0.395264f, 0.868164f,
+ 0.960938f, 0.982910f, 0.990234f, 0.993164f, 0.995605f, 0.997070f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000120f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000211f, 0.000239f, 0.000307f,
+ 0.000394f, 0.000704f, 0.000711f, 0.000728f, 0.001001f, 0.001088f, 0.001204f, 0.001713f,
+ 0.002367f, 0.003151f, 0.004639f, 0.007820f, 0.014084f, 0.030609f, 0.102722f, 0.527344f,
+ 0.906250f, 0.969727f, 0.985840f, 0.991699f, 0.994629f, 0.996094f, 0.997559f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000115f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000196f,
+ 0.000332f, 0.000363f, 0.000686f, 0.000719f, 0.000723f, 0.000963f, 0.001089f, 0.001290f,
+ 0.001849f, 0.002394f, 0.003458f, 0.004833f, 0.008301f, 0.015579f, 0.036926f, 0.143188f,
+ 0.676270f, 0.934570f, 0.976562f, 0.988281f, 0.992676f, 0.995605f, 0.996582f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000102f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000311f, 0.000345f, 0.000479f, 0.000723f, 0.000728f, 0.000934f, 0.001085f,
+ 0.001282f, 0.001821f, 0.002399f, 0.003355f, 0.005524f, 0.008881f, 0.017807f, 0.047058f,
+ 0.222046f, 0.803223f, 0.954102f, 0.981445f, 0.990723f, 0.994141f, 0.996582f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000090f,
+ 0.000116f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000201f, 0.000239f, 0.000358f, 0.000618f, 0.000719f, 0.000727f, 0.000863f,
+ 0.001087f, 0.001350f, 0.001945f, 0.002689f, 0.003731f, 0.005817f, 0.010033f, 0.021332f,
+ 0.064514f, 0.374512f, 0.885254f, 0.969238f, 0.986328f, 0.992676f, 0.995605f, 0.996582f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000086f, 0.000117f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000164f, 0.000238f, 0.000353f, 0.000596f, 0.000591f, 0.000727f,
+ 0.000901f, 0.001085f, 0.001266f, 0.001767f, 0.002663f, 0.003914f, 0.006153f, 0.011612f,
+ 0.026871f, 0.100525f, 0.605957f, 0.934082f, 0.978027f, 0.989746f, 0.994141f, 0.996094f,
+ 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000107f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000195f, 0.000323f, 0.000339f, 0.000461f, 0.000706f,
+ 0.000726f, 0.000845f, 0.001086f, 0.001298f, 0.001843f, 0.003027f, 0.004387f, 0.007011f,
+ 0.013832f, 0.036530f, 0.183228f, 0.805664f, 0.959961f, 0.984863f, 0.991699f, 0.995605f,
+ 0.997070f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000120f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000336f, 0.000464f,
+ 0.000708f, 0.000726f, 0.000965f, 0.001083f, 0.001458f, 0.002180f, 0.003096f, 0.004425f,
+ 0.008377f, 0.017639f, 0.056610f, 0.390869f, 0.909180f, 0.975586f, 0.989746f, 0.994141f,
+ 0.996582f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000113f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000135f, 0.000336f,
+ 0.000467f, 0.000713f, 0.000725f, 0.000959f, 0.001191f, 0.001287f, 0.001939f, 0.003231f,
+ 0.005306f, 0.009888f, 0.024414f, 0.105835f, 0.709961f, 0.955078f, 0.984863f, 0.993164f,
+ 0.996094f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000061f, 0.000089f,
+ 0.000118f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000309f,
+ 0.000299f, 0.000460f, 0.000710f, 0.000724f, 0.000997f, 0.001073f, 0.001410f, 0.002117f,
+ 0.003506f, 0.006031f, 0.012863f, 0.038391f, 0.260742f, 0.892090f, 0.975098f, 0.990723f,
+ 0.995117f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000085f, 0.000110f, 0.000118f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000317f, 0.000499f, 0.000706f, 0.000599f, 0.000851f, 0.001069f, 0.001633f,
+ 0.002367f, 0.003918f, 0.007580f, 0.017929f, 0.074646f, 0.645508f, 0.956055f, 0.986328f,
+ 0.994141f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000099f, 0.000113f, 0.000119f, 0.000119f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000160f, 0.000326f, 0.000308f, 0.000578f, 0.000602f, 0.000921f, 0.001071f,
+ 0.001807f, 0.002783f, 0.004620f, 0.010017f, 0.029465f, 0.211792f, 0.896484f, 0.979004f,
+ 0.992188f, 0.996094f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000027f, 0.000103f, 0.000114f, 0.000118f, 0.000120f,
+ 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000090f, 0.000212f, 0.000309f, 0.000586f, 0.000602f, 0.000937f,
+ 0.001147f, 0.002031f, 0.003237f, 0.006134f, 0.014969f, 0.063171f, 0.665527f, 0.964355f,
+ 0.989258f, 0.995117f, 0.999023f, 0.998535f, 0.999023f, 0.999023f, 0.998535f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000018f, 0.000103f, 0.000113f,
+ 0.000117f, 0.000119f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000004f, 0.000002f, 0.000199f, 0.000390f, 0.000586f, 0.000665f,
+ 0.000946f, 0.001365f, 0.002207f, 0.003767f, 0.008308f, 0.025955f, 0.227661f, 0.924316f,
+ 0.984863f, 0.994141f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000098f, 0.000109f, 0.000117f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000011f, 0.000005f, 0.000003f, 0.000002f, 0.000193f, 0.000388f, 0.000586f,
+ 0.000659f, 0.000952f, 0.001580f, 0.002762f, 0.005363f, 0.013153f, 0.066589f, 0.781738f,
+ 0.977051f, 0.993164f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000075f, 0.000112f, 0.000116f, 0.000118f, 0.000119f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f,
+ 0.000088f, 0.000026f, 0.000010f, 0.000005f, 0.000003f, 0.000002f, 0.000186f, 0.000407f,
+ 0.000586f, 0.000760f, 0.000986f, 0.001796f, 0.003275f, 0.007565f, 0.026794f, 0.363281f,
+ 0.959473f, 0.990723f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000010f, 0.000090f, 0.000110f, 0.000115f, 0.000117f,
+ 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000077f, 0.000023f, 0.000011f, 0.000005f, 0.000003f, 0.000002f, 0.000158f,
+ 0.000407f, 0.000587f, 0.000826f, 0.001264f, 0.002174f, 0.004894f, 0.013359f, 0.098511f,
+ 0.911133f, 0.987793f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000084f, 0.000107f,
+ 0.000114f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000093f, 0.000024f, 0.000011f, 0.000005f, 0.000003f, 0.000002f,
+ 0.000220f, 0.000476f, 0.000585f, 0.000913f, 0.001374f, 0.002951f, 0.007511f, 0.034973f,
+ 0.736328f, 0.982910f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000056f, 0.000102f, 0.000112f, 0.000116f, 0.000117f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000075f, 0.000025f, 0.000010f, 0.000005f, 0.000003f,
+ 0.000034f, 0.000222f, 0.000491f, 0.000589f, 0.001020f, 0.001881f, 0.004669f, 0.015717f,
+ 0.298340f, 0.974609f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000048f, 0.000095f, 0.000106f, 0.000114f, 0.000117f, 0.000118f,
+ 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000089f, 0.000029f, 0.000012f, 0.000006f,
+ 0.000003f, 0.000002f, 0.000223f, 0.000525f, 0.000687f, 0.001122f, 0.002672f, 0.008255f,
+ 0.079590f, 0.954590f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000077f, 0.000104f, 0.000112f,
+ 0.000115f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000109f, 0.000031f, 0.000013f,
+ 0.000006f, 0.000003f, 0.000002f, 0.000254f, 0.000550f, 0.000846f, 0.001545f, 0.004223f,
+ 0.027771f, 0.901855f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f,
+ 0.000090f, 0.000107f, 0.000113f, 0.000116f, 0.000118f, 0.000119f, 0.000120f, 0.000041f,
+ 0.000015f, 0.000007f, 0.000004f, 0.000002f, 0.000271f, 0.000563f, 0.000786f, 0.002211f,
+ 0.012207f, 0.711426f, 0.994629f, 0.994629f, 0.995117f, 0.994629f, 0.994629f, 0.994629f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000028f, 0.000083f, 0.000102f, 0.000110f, 0.000114f, 0.000117f, 0.000118f,
+ 0.000052f, 0.000019f, 0.000008f, 0.000004f, 0.000002f, 0.000314f, 0.000444f, 0.001049f,
+ 0.005669f, 0.266846f, 0.993164f, 0.993652f, 0.993164f, 0.993652f, 0.993164f, 0.993164f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000048f, 0.000089f, 0.000106f, 0.000112f,
+ 0.000115f, 0.000077f, 0.000026f, 0.000010f, 0.000005f, 0.000079f, 0.000425f, 0.000405f,
+ 0.002468f, 0.064209f, 0.990234f, 0.990723f, 0.990234f, 0.990234f, 0.990234f, 0.991211f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000075f,
+ 0.000098f, 0.000108f, 0.000113f, 0.000044f, 0.000016f, 0.000006f, 0.000027f, 0.000270f,
+ 0.000825f, 0.018448f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000049f, 0.000085f, 0.000102f, 0.000070f, 0.000022f, 0.000008f, 0.000133f,
+ 0.000295f, 0.005318f, 0.978516f, 0.979004f, 0.977539f, 0.977539f, 0.978027f, 0.978516f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.000092f, 0.000036f, 0.000011f,
+ 0.000135f, 0.000925f, 0.959473f, 0.959961f, 0.959961f, 0.959473f, 0.959961f, 0.959473f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000027f, 0.000065f,
+ 0.000016f, 0.000109f, 0.907715f, 0.907227f, 0.907715f, 0.907227f, 0.907715f, 0.907715f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000017f, 0.711914f, 0.712402f, 0.711426f, 0.711426f, 0.711914f, 0.712402f,
+ },
+ {
+ 0.076172f, 0.877441f, 0.964355f, 0.980957f, 0.987305f, 0.990723f, 0.992676f, 0.993652f,
+ 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.003897f, 0.033173f, 0.320557f, 0.863770f, 0.953613f, 0.975586f, 0.984863f, 0.988770f,
+ 0.991211f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000975f, 0.005951f, 0.020935f, 0.093140f, 0.501465f, 0.873047f, 0.950684f, 0.973145f,
+ 0.981934f, 0.986816f, 0.990234f, 0.992188f, 0.993164f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000610f, 0.002430f, 0.006081f, 0.015915f, 0.045593f, 0.179810f, 0.635254f, 0.889648f,
+ 0.951172f, 0.972168f, 0.981445f, 0.986328f, 0.989746f, 0.991699f, 0.993652f, 0.994629f,
+ 0.995117f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.001219f, 0.002796f, 0.006172f, 0.012848f, 0.028458f, 0.081177f, 0.301758f,
+ 0.733398f, 0.905273f, 0.953613f, 0.972168f, 0.981445f, 0.986328f, 0.989258f, 0.991699f,
+ 0.993652f, 0.994141f, 0.995117f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000731f, 0.001706f, 0.003166f, 0.005470f, 0.010406f, 0.020813f, 0.047089f,
+ 0.136719f, 0.449951f, 0.803223f, 0.919434f, 0.957520f, 0.973633f, 0.981934f, 0.986328f,
+ 0.989746f, 0.991699f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000366f, 0.001214f, 0.001894f, 0.003159f, 0.005108f, 0.008720f, 0.015839f,
+ 0.031586f, 0.074951f, 0.224121f, 0.596680f, 0.851074f, 0.932617f, 0.962402f, 0.975586f,
+ 0.982910f, 0.987305f, 0.989746f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000366f, 0.000731f, 0.000976f, 0.001827f, 0.002987f, 0.004757f, 0.007988f,
+ 0.013023f, 0.023544f, 0.048431f, 0.120239f, 0.352783f, 0.717285f, 0.887207f, 0.943848f,
+ 0.966309f, 0.978027f, 0.983887f, 0.987305f, 0.990234f, 0.992188f, 0.993652f, 0.994629f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000434f, 0.000488f, 0.000704f, 0.001218f, 0.002190f, 0.002783f, 0.004723f,
+ 0.006878f, 0.011040f, 0.018372f, 0.034241f, 0.073242f, 0.194336f, 0.510742f, 0.803711f,
+ 0.912598f, 0.952637f, 0.970703f, 0.979004f, 0.984863f, 0.988281f, 0.991211f, 0.992676f,
+ 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000243f, 0.000488f, 0.000488f, 0.000916f, 0.001219f, 0.002308f, 0.002914f,
+ 0.004124f, 0.006523f, 0.009537f, 0.014793f, 0.025833f, 0.050446f, 0.116089f, 0.312744f,
+ 0.661133f, 0.860840f, 0.931641f, 0.960449f, 0.974121f, 0.981445f, 0.986328f, 0.989258f,
+ 0.991211f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000121f, 0.000356f, 0.000488f, 0.000609f, 0.000944f, 0.001339f, 0.002296f,
+ 0.002964f, 0.003880f, 0.005676f, 0.008476f, 0.012909f, 0.020874f, 0.036926f, 0.075500f,
+ 0.187988f, 0.474854f, 0.774414f, 0.900391f, 0.946289f, 0.966309f, 0.978027f, 0.983887f,
+ 0.987793f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
+ 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000244f, 0.000483f, 0.000488f, 0.000731f, 0.001070f, 0.001551f,
+ 0.002024f, 0.002520f, 0.003990f, 0.004738f, 0.007584f, 0.010834f, 0.016800f, 0.028763f,
+ 0.054535f, 0.120728f, 0.309082f, 0.642090f, 0.848145f, 0.926270f, 0.957031f, 0.971191f,
+ 0.980469f, 0.985352f, 0.988770f, 0.990723f, 0.992188f, 0.993652f, 0.994629f, 0.995605f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000242f, 0.000485f, 0.000608f, 0.000731f, 0.001091f,
+ 0.001339f, 0.001943f, 0.002602f, 0.003466f, 0.004845f, 0.006649f, 0.009529f, 0.014824f,
+ 0.023407f, 0.041351f, 0.083496f, 0.199951f, 0.482422f, 0.770996f, 0.896484f, 0.944336f,
+ 0.965332f, 0.976562f, 0.982910f, 0.986816f, 0.990234f, 0.991699f, 0.993164f, 0.994141f,
+ 0.995117f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000243f, 0.000243f, 0.000602f, 0.000609f, 0.000799f,
+ 0.001088f, 0.001459f, 0.001822f, 0.002432f, 0.003033f, 0.004375f, 0.006042f, 0.008560f,
+ 0.012810f, 0.019791f, 0.032715f, 0.061584f, 0.135254f, 0.335693f, 0.660156f, 0.853027f,
+ 0.926758f, 0.956543f, 0.972168f, 0.980469f, 0.984863f, 0.988281f, 0.991211f, 0.992676f,
+ 0.993652f, 0.994141f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000243f, 0.000366f, 0.000605f, 0.000730f,
+ 0.000731f, 0.001201f, 0.001458f, 0.001804f, 0.002428f, 0.003593f, 0.004234f, 0.005745f,
+ 0.007755f, 0.011139f, 0.016754f, 0.027054f, 0.047424f, 0.097107f, 0.231323f, 0.525879f,
+ 0.791016f, 0.902832f, 0.945801f, 0.966797f, 0.977051f, 0.982910f, 0.987793f, 0.990234f,
+ 0.991699f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000365f, 0.000244f, 0.000602f,
+ 0.000721f, 0.000730f, 0.000852f, 0.001451f, 0.001842f, 0.002518f, 0.002993f, 0.004097f,
+ 0.005253f, 0.007099f, 0.009865f, 0.014908f, 0.022827f, 0.038879f, 0.072815f, 0.163940f,
+ 0.396484f, 0.707031f, 0.869141f, 0.932129f, 0.960449f, 0.973145f, 0.980957f, 0.986328f,
+ 0.988770f, 0.991211f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f,
+ 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000361f, 0.000242f, 0.000244f,
+ 0.000602f, 0.000728f, 0.000853f, 0.001260f, 0.001569f, 0.001704f, 0.002287f, 0.003103f,
+ 0.003857f, 0.004848f, 0.006680f, 0.009003f, 0.012978f, 0.019897f, 0.032135f, 0.057983f,
+ 0.121033f, 0.291504f, 0.604980f, 0.827148f, 0.915039f, 0.953125f, 0.969238f, 0.978516f,
+ 0.984375f, 0.988281f, 0.991211f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
+ 0.996582f, 0.996582f, 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000241f, 0.000241f, 0.000365f,
+ 0.000365f, 0.000589f, 0.000852f, 0.000852f, 0.001246f, 0.001562f, 0.001812f, 0.002241f,
+ 0.002794f, 0.003633f, 0.004669f, 0.006069f, 0.008202f, 0.011772f, 0.016891f, 0.027618f,
+ 0.047089f, 0.093506f, 0.216309f, 0.495605f, 0.771484f, 0.894531f, 0.942383f, 0.965332f,
+ 0.976074f, 0.982910f, 0.987305f, 0.989746f, 0.991699f, 0.993164f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000364f,
+ 0.000242f, 0.000487f, 0.000737f, 0.000730f, 0.000974f, 0.001083f, 0.001520f, 0.001701f,
+ 0.001938f, 0.002768f, 0.003658f, 0.004227f, 0.005741f, 0.007671f, 0.010796f, 0.015511f,
+ 0.023529f, 0.040009f, 0.074158f, 0.165405f, 0.395264f, 0.703613f, 0.868164f, 0.932129f,
+ 0.959473f, 0.973633f, 0.980957f, 0.985840f, 0.988770f, 0.991699f, 0.992676f, 0.994141f,
+ 0.995117f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f, 0.000000f, 0.000241f,
+ 0.000224f, 0.000487f, 0.000488f, 0.000710f, 0.000972f, 0.000848f, 0.001181f, 0.001333f,
+ 0.001910f, 0.001830f, 0.002661f, 0.003298f, 0.004154f, 0.005386f, 0.007271f, 0.009735f,
+ 0.013908f, 0.021149f, 0.034149f, 0.062042f, 0.130371f, 0.313477f, 0.627930f, 0.837402f,
+ 0.919922f, 0.954590f, 0.970215f, 0.979492f, 0.985352f, 0.988770f, 0.991211f, 0.992676f,
+ 0.993652f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000049f,
+ 0.000242f, 0.000483f, 0.000606f, 0.000487f, 0.000695f, 0.000970f, 0.000974f, 0.001136f,
+ 0.001328f, 0.001694f, 0.002028f, 0.002617f, 0.002953f, 0.003847f, 0.004951f, 0.006653f,
+ 0.009193f, 0.012672f, 0.018661f, 0.029968f, 0.052673f, 0.106689f, 0.250977f, 0.549805f,
+ 0.801758f, 0.907227f, 0.948242f, 0.967773f, 0.978027f, 0.984375f, 0.987793f, 0.990723f,
+ 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000166f, 0.000243f, 0.000485f, 0.000487f, 0.000487f, 0.000945f, 0.000834f, 0.000974f,
+ 0.000974f, 0.001300f, 0.001810f, 0.002058f, 0.002573f, 0.002703f, 0.003761f, 0.004887f,
+ 0.006393f, 0.008514f, 0.011818f, 0.016937f, 0.026672f, 0.046051f, 0.089478f, 0.204712f,
+ 0.476807f, 0.762207f, 0.891602f, 0.942383f, 0.965820f, 0.976562f, 0.983398f, 0.987793f,
+ 0.990234f, 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000224f, 0.000358f, 0.000477f, 0.000486f, 0.000487f, 0.000580f, 0.000841f,
+ 0.000973f, 0.001079f, 0.001255f, 0.001649f, 0.002045f, 0.002241f, 0.002995f, 0.003841f,
+ 0.004826f, 0.005920f, 0.007866f, 0.010925f, 0.015930f, 0.024109f, 0.040619f, 0.077454f,
+ 0.171509f, 0.412354f, 0.720215f, 0.876953f, 0.936035f, 0.962402f, 0.975098f, 0.982422f,
+ 0.987305f, 0.990234f, 0.992188f, 0.993164f, 0.994629f, 0.995117f, 0.996094f, 0.996582f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000165f, 0.000205f, 0.000411f, 0.000480f, 0.000486f, 0.000608f, 0.000688f,
+ 0.000966f, 0.000968f, 0.000974f, 0.001421f, 0.001489f, 0.001695f, 0.002090f, 0.002886f,
+ 0.003326f, 0.004608f, 0.005604f, 0.007317f, 0.010414f, 0.014862f, 0.022232f, 0.036469f,
+ 0.067810f, 0.146973f, 0.359375f, 0.680664f, 0.861816f, 0.931152f, 0.959961f, 0.974609f,
+ 0.981934f, 0.986816f, 0.989746f, 0.991699f, 0.993652f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000453f, 0.000539f, 0.000486f, 0.000487f,
+ 0.000487f, 0.000957f, 0.000969f, 0.001202f, 0.001139f, 0.001393f, 0.001986f, 0.002045f,
+ 0.002863f, 0.003216f, 0.004128f, 0.005417f, 0.007378f, 0.009689f, 0.013466f, 0.020432f,
+ 0.033722f, 0.060883f, 0.129395f, 0.318115f, 0.642090f, 0.847656f, 0.926270f, 0.958008f,
+ 0.973145f, 0.981934f, 0.986328f, 0.989746f, 0.992188f, 0.993164f, 0.994629f, 0.995605f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000380f, 0.000482f, 0.000606f,
+ 0.000607f, 0.000608f, 0.000829f, 0.000970f, 0.000972f, 0.001070f, 0.001402f, 0.001812f,
+ 0.002138f, 0.002619f, 0.003246f, 0.004082f, 0.005318f, 0.006699f, 0.009262f, 0.012764f,
+ 0.019318f, 0.031052f, 0.055878f, 0.116821f, 0.286621f, 0.610352f, 0.835938f, 0.922852f,
+ 0.956543f, 0.973145f, 0.981445f, 0.986328f, 0.989746f, 0.991699f, 0.993652f, 0.995117f,
+ 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000350f, 0.000480f,
+ 0.000605f, 0.000596f, 0.000608f, 0.000890f, 0.000963f, 0.000972f, 0.000974f, 0.001316f,
+ 0.001798f, 0.002058f, 0.002560f, 0.002811f, 0.003983f, 0.005108f, 0.006489f, 0.008888f,
+ 0.012314f, 0.018021f, 0.029495f, 0.051941f, 0.107422f, 0.263428f, 0.585449f, 0.827148f,
+ 0.919434f, 0.956055f, 0.971680f, 0.981445f, 0.986816f, 0.989746f, 0.992188f, 0.994141f,
+ 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f, 0.000176f, 0.000462f,
+ 0.000483f, 0.000604f, 0.000607f, 0.000638f, 0.000922f, 0.000965f, 0.000971f, 0.001235f,
+ 0.001376f, 0.001769f, 0.002041f, 0.002575f, 0.003130f, 0.003487f, 0.004936f, 0.006264f,
+ 0.008415f, 0.012047f, 0.017517f, 0.027786f, 0.049164f, 0.101257f, 0.249512f, 0.568848f,
+ 0.821777f, 0.918945f, 0.956055f, 0.972168f, 0.981445f, 0.986816f, 0.990234f, 0.992188f,
+ 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f, 0.000122f, 0.000242f,
+ 0.000352f, 0.000560f, 0.000602f, 0.000604f, 0.000606f, 0.000767f, 0.001046f, 0.001089f,
+ 0.000973f, 0.001327f, 0.001583f, 0.002033f, 0.002272f, 0.002657f, 0.003563f, 0.004589f,
+ 0.006138f, 0.008194f, 0.011299f, 0.016861f, 0.026718f, 0.047119f, 0.097656f, 0.240967f,
+ 0.562500f, 0.821289f, 0.919922f, 0.957031f, 0.973145f, 0.981934f, 0.987305f, 0.990234f,
+ 0.992676f, 0.994141f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000241f, 0.000314f, 0.000459f, 0.000600f, 0.000605f, 0.000598f, 0.000804f, 0.000958f,
+ 0.001084f, 0.001104f, 0.001389f, 0.001709f, 0.002041f, 0.002211f, 0.002645f, 0.003635f,
+ 0.004467f, 0.005718f, 0.008072f, 0.011185f, 0.016846f, 0.026184f, 0.046112f, 0.094971f,
+ 0.239014f, 0.565430f, 0.825684f, 0.922363f, 0.958496f, 0.973633f, 0.983398f, 0.987793f,
+ 0.990723f, 0.992676f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f,
+ 0.000122f, 0.000173f, 0.000246f, 0.000387f, 0.000480f, 0.000604f, 0.000604f, 0.000701f,
+ 0.000951f, 0.000968f, 0.001184f, 0.001315f, 0.001597f, 0.001899f, 0.002268f, 0.002813f,
+ 0.003716f, 0.004372f, 0.005886f, 0.007759f, 0.010918f, 0.015915f, 0.025726f, 0.045685f,
+ 0.095459f, 0.243774f, 0.579102f, 0.833984f, 0.926270f, 0.960449f, 0.976074f, 0.983887f,
+ 0.988770f, 0.991211f, 0.993164f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000238f, 0.000237f, 0.000242f, 0.000463f, 0.000585f, 0.000587f, 0.000718f,
+ 0.000607f, 0.000885f, 0.001081f, 0.001087f, 0.001299f, 0.001553f, 0.001982f, 0.002104f,
+ 0.002777f, 0.003494f, 0.004406f, 0.005798f, 0.007645f, 0.010750f, 0.016159f, 0.025467f,
+ 0.045959f, 0.097778f, 0.256104f, 0.603516f, 0.847168f, 0.931152f, 0.963379f, 0.977539f,
+ 0.985352f, 0.989258f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.996582f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000231f, 0.000122f, 0.000242f, 0.000242f, 0.000400f, 0.000525f, 0.000495f,
+ 0.000605f, 0.000607f, 0.000898f, 0.001075f, 0.001191f, 0.001133f, 0.001420f, 0.001794f,
+ 0.002041f, 0.002733f, 0.003548f, 0.004448f, 0.005585f, 0.007656f, 0.010735f, 0.015671f,
+ 0.025589f, 0.047363f, 0.102783f, 0.276855f, 0.637695f, 0.862793f, 0.938477f, 0.966797f,
+ 0.979004f, 0.985840f, 0.990234f, 0.992676f, 0.994141f, 0.995117f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f, 0.000242f, 0.000470f, 0.000469f,
+ 0.000547f, 0.000711f, 0.000723f, 0.000829f, 0.001024f, 0.001188f, 0.001081f, 0.001415f,
+ 0.001765f, 0.002048f, 0.002708f, 0.003252f, 0.004448f, 0.005711f, 0.007557f, 0.010780f,
+ 0.016220f, 0.026398f, 0.048950f, 0.111267f, 0.309082f, 0.680664f, 0.880371f, 0.945801f,
+ 0.970703f, 0.980957f, 0.986816f, 0.990723f, 0.993164f, 0.994629f, 0.995605f, 0.996582f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000204f, 0.000239f, 0.000242f, 0.000283f,
+ 0.000479f, 0.000594f, 0.000603f, 0.000606f, 0.000779f, 0.001068f, 0.001084f, 0.001118f,
+ 0.001515f, 0.001926f, 0.002098f, 0.002674f, 0.002975f, 0.004040f, 0.005478f, 0.007488f,
+ 0.010651f, 0.016327f, 0.027222f, 0.052460f, 0.123718f, 0.355713f, 0.729980f, 0.899902f,
+ 0.952637f, 0.973145f, 0.983887f, 0.988770f, 0.991699f, 0.994141f, 0.995117f, 0.996094f,
+ 0.997070f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000122f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000236f, 0.000207f, 0.000240f,
+ 0.000435f, 0.000534f, 0.000594f, 0.000602f, 0.000722f, 0.000727f, 0.000947f, 0.001081f,
+ 0.001090f, 0.001471f, 0.001829f, 0.002010f, 0.002478f, 0.002956f, 0.004051f, 0.005753f,
+ 0.007717f, 0.011040f, 0.017105f, 0.028748f, 0.057159f, 0.142944f, 0.421387f, 0.780762f,
+ 0.916992f, 0.960449f, 0.976562f, 0.985352f, 0.989746f, 0.992676f, 0.994629f, 0.996094f,
+ 0.997070f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000232f,
+ 0.000230f, 0.000382f, 0.000472f, 0.000576f, 0.000715f, 0.000721f, 0.000727f, 0.001046f,
+ 0.001078f, 0.001186f, 0.001434f, 0.001674f, 0.002066f, 0.002546f, 0.003407f, 0.004181f,
+ 0.005634f, 0.007542f, 0.011330f, 0.017609f, 0.031189f, 0.064392f, 0.172729f, 0.506836f,
+ 0.828125f, 0.933105f, 0.966309f, 0.980469f, 0.987305f, 0.991211f, 0.993652f, 0.995117f,
+ 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000232f, 0.000234f, 0.000352f, 0.000461f, 0.000535f, 0.000594f, 0.000722f, 0.000725f,
+ 0.000921f, 0.001116f, 0.001192f, 0.001416f, 0.001637f, 0.001911f, 0.002380f, 0.002949f,
+ 0.003948f, 0.005589f, 0.007942f, 0.011650f, 0.018631f, 0.034302f, 0.075867f, 0.219238f,
+ 0.607422f, 0.870605f, 0.946777f, 0.972656f, 0.983887f, 0.989258f, 0.992676f, 0.995117f,
+ 0.996094f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000239f, 0.000302f, 0.000396f, 0.000564f, 0.000674f, 0.000617f,
+ 0.000722f, 0.001003f, 0.001068f, 0.001084f, 0.001302f, 0.001598f, 0.001929f, 0.002375f,
+ 0.002935f, 0.004349f, 0.005714f, 0.007957f, 0.012306f, 0.020493f, 0.039001f, 0.092590f,
+ 0.293213f, 0.711426f, 0.905762f, 0.958984f, 0.978027f, 0.986328f, 0.990723f, 0.994141f,
+ 0.995605f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000232f, 0.000227f, 0.000240f, 0.000282f, 0.000542f, 0.000703f,
+ 0.000718f, 0.000724f, 0.000833f, 0.001069f, 0.001184f, 0.001346f, 0.001464f, 0.001898f,
+ 0.002649f, 0.003164f, 0.004467f, 0.005863f, 0.008400f, 0.013199f, 0.022614f, 0.046051f,
+ 0.120605f, 0.406738f, 0.801270f, 0.931641f, 0.968262f, 0.982422f, 0.988770f, 0.992676f,
+ 0.994629f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000219f, 0.000237f, 0.000235f, 0.000241f, 0.000480f,
+ 0.000584f, 0.000715f, 0.000723f, 0.000775f, 0.001061f, 0.000959f, 0.001139f, 0.001526f,
+ 0.001770f, 0.002546f, 0.003151f, 0.004250f, 0.006195f, 0.009071f, 0.014595f, 0.026413f,
+ 0.056763f, 0.169067f, 0.557617f, 0.869141f, 0.951172f, 0.976074f, 0.986328f, 0.990723f,
+ 0.994141f, 0.995605f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000216f, 0.000228f, 0.000285f, 0.000339f,
+ 0.000454f, 0.000572f, 0.000595f, 0.000721f, 0.000604f, 0.000930f, 0.000958f, 0.001171f,
+ 0.001431f, 0.001888f, 0.002663f, 0.003256f, 0.004402f, 0.006527f, 0.009964f, 0.016281f,
+ 0.031189f, 0.074524f, 0.258301f, 0.714355f, 0.916016f, 0.965332f, 0.982422f, 0.989746f,
+ 0.992676f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000063f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000184f, 0.000228f,
+ 0.000340f, 0.000396f, 0.000668f, 0.000571f, 0.000478f, 0.000602f, 0.000919f, 0.000956f,
+ 0.001061f, 0.001497f, 0.001888f, 0.002565f, 0.003523f, 0.004578f, 0.006935f, 0.010765f,
+ 0.018417f, 0.038635f, 0.107727f, 0.416260f, 0.832520f, 0.946289f, 0.975586f, 0.986328f,
+ 0.991699f, 0.994629f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000045f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000234f, 0.000294f, 0.000220f, 0.000486f, 0.000579f, 0.000588f, 0.000669f, 0.000878f,
+ 0.001038f, 0.001135f, 0.001451f, 0.001820f, 0.002529f, 0.003551f, 0.005199f, 0.007542f,
+ 0.012230f, 0.022369f, 0.051910f, 0.174927f, 0.630859f, 0.905273f, 0.965332f, 0.982910f,
+ 0.990234f, 0.993652f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000091f, 0.000117f, 0.000120f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000171f, 0.000151f, 0.000166f, 0.000195f, 0.000342f, 0.000452f, 0.000594f, 0.000599f,
+ 0.000862f, 0.001019f, 0.001135f, 0.001465f, 0.002031f, 0.002676f, 0.003714f, 0.005497f,
+ 0.008286f, 0.014320f, 0.028854f, 0.077332f, 0.322754f, 0.809082f, 0.946289f, 0.977051f,
+ 0.987793f, 0.993164f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998535f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000079f, 0.000105f, 0.000120f,
+ 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000008f, 0.000006f, 0.000098f, 0.000137f, 0.000233f, 0.000324f, 0.000566f, 0.000589f,
+ 0.000618f, 0.000874f, 0.000941f, 0.001108f, 0.001621f, 0.001880f, 0.002726f, 0.003788f,
+ 0.005840f, 0.009583f, 0.017563f, 0.039368f, 0.133545f, 0.582520f, 0.906738f, 0.968262f,
+ 0.984863f, 0.992188f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000069f, 0.000114f,
+ 0.000117f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000021f,
+ 0.000013f, 0.000009f, 0.000006f, 0.000004f, 0.000090f, 0.000206f, 0.000305f, 0.000538f,
+ 0.000585f, 0.000596f, 0.000869f, 0.000941f, 0.001149f, 0.001516f, 0.002150f, 0.002729f,
+ 0.004475f, 0.006660f, 0.011360f, 0.022690f, 0.061401f, 0.281494f, 0.813965f, 0.952148f,
+ 0.980957f, 0.990723f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f,
+ 0.000085f, 0.000114f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000077f, 0.000041f,
+ 0.000022f, 0.000013f, 0.000009f, 0.000006f, 0.000066f, 0.000107f, 0.000223f, 0.000250f,
+ 0.000532f, 0.000576f, 0.000593f, 0.000784f, 0.000937f, 0.001126f, 0.001523f, 0.002306f,
+ 0.003193f, 0.004574f, 0.007717f, 0.014191f, 0.032410f, 0.116577f, 0.595215f, 0.921875f,
+ 0.974609f, 0.988770f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000056f, 0.000112f, 0.000114f, 0.000118f, 0.000119f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000074f,
+ 0.000038f, 0.000021f, 0.000013f, 0.000009f, 0.000006f, 0.000004f, 0.000003f, 0.000179f,
+ 0.000258f, 0.000367f, 0.000469f, 0.000583f, 0.000770f, 0.000932f, 0.001131f, 0.001758f,
+ 0.002483f, 0.003517f, 0.005432f, 0.009232f, 0.019302f, 0.054504f, 0.293457f, 0.853516f,
+ 0.964844f, 0.986816f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000015f, 0.000084f, 0.000107f, 0.000113f, 0.000117f,
+ 0.000118f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000076f, 0.000042f, 0.000023f, 0.000015f, 0.000009f, 0.000007f, 0.000005f, 0.000004f,
+ 0.000147f, 0.000238f, 0.000457f, 0.000545f, 0.000586f, 0.000821f, 0.000936f, 0.001139f,
+ 0.001849f, 0.002665f, 0.003687f, 0.006367f, 0.011810f, 0.028931f, 0.120605f, 0.687988f,
+ 0.947754f, 0.982910f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000082f, 0.000095f,
+ 0.000111f, 0.000115f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000083f, 0.000042f, 0.000026f, 0.000015f, 0.000010f, 0.000007f, 0.000005f,
+ 0.000013f, 0.000086f, 0.000185f, 0.000309f, 0.000552f, 0.000577f, 0.000796f, 0.000925f,
+ 0.001251f, 0.001838f, 0.002878f, 0.004509f, 0.007572f, 0.016617f, 0.054932f, 0.391602f,
+ 0.912109f, 0.978516f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000095f, 0.000106f, 0.000112f, 0.000113f, 0.000115f, 0.000118f, 0.000118f,
+ 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000099f, 0.000048f, 0.000027f, 0.000017f, 0.000011f, 0.000008f,
+ 0.000006f, 0.000004f, 0.000089f, 0.000182f, 0.000347f, 0.000495f, 0.000570f, 0.000777f,
+ 0.000922f, 0.001316f, 0.001831f, 0.003004f, 0.005028f, 0.010078f, 0.028183f, 0.161865f,
+ 0.833496f, 0.972168f, 0.995117f, 0.995605f, 0.995605f, 0.995117f, 0.995117f, 0.995605f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000074f, 0.000093f, 0.000107f, 0.000111f, 0.000115f,
+ 0.000116f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000057f, 0.000032f, 0.000021f, 0.000013f,
+ 0.000008f, 0.000006f, 0.000005f, 0.000034f, 0.000159f, 0.000267f, 0.000514f, 0.000566f,
+ 0.000714f, 0.000888f, 0.001348f, 0.001995f, 0.003302f, 0.006447f, 0.015945f, 0.069153f,
+ 0.646484f, 0.960449f, 0.994629f, 0.995117f, 0.994629f, 0.995117f, 0.994629f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000095f,
+ 0.000102f, 0.000109f, 0.000114f, 0.000115f, 0.000116f, 0.000118f, 0.000118f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000077f, 0.000044f, 0.000025f,
+ 0.000015f, 0.000011f, 0.000007f, 0.000005f, 0.000004f, 0.000106f, 0.000244f, 0.000476f,
+ 0.000561f, 0.000622f, 0.000893f, 0.001266f, 0.001968f, 0.003990f, 0.009476f, 0.033234f,
+ 0.342529f, 0.940918f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000046f, 0.000079f, 0.000093f, 0.000104f, 0.000110f, 0.000111f, 0.000113f, 0.000116f,
+ 0.000117f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000092f, 0.000050f,
+ 0.000029f, 0.000019f, 0.000012f, 0.000009f, 0.000006f, 0.000004f, 0.000061f, 0.000188f,
+ 0.000324f, 0.000456f, 0.000525f, 0.000657f, 0.001371f, 0.002445f, 0.005634f, 0.017563f,
+ 0.135986f, 0.902832f, 0.992188f, 0.992188f, 0.992676f, 0.992188f, 0.992676f, 0.992188f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000038f, 0.000075f, 0.000092f, 0.000100f, 0.000105f,
+ 0.000111f, 0.000112f, 0.000114f, 0.000116f, 0.000117f, 0.000117f, 0.000118f, 0.000118f,
+ 0.000074f, 0.000041f, 0.000024f, 0.000016f, 0.000010f, 0.000007f, 0.000005f, 0.000033f,
+ 0.000167f, 0.000423f, 0.000410f, 0.000413f, 0.000575f, 0.001446f, 0.003387f, 0.009644f,
+ 0.056183f, 0.817383f, 0.990234f, 0.990234f, 0.990234f, 0.990723f, 0.990234f, 0.990723f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f, 0.000067f,
+ 0.000084f, 0.000096f, 0.000103f, 0.000108f, 0.000110f, 0.000113f, 0.000115f, 0.000115f,
+ 0.000116f, 0.000104f, 0.000057f, 0.000035f, 0.000021f, 0.000013f, 0.000009f, 0.000006f,
+ 0.000054f, 0.000161f, 0.000317f, 0.000332f, 0.000393f, 0.000723f, 0.001760f, 0.005203f,
+ 0.025345f, 0.617676f, 0.987793f, 0.987793f, 0.987793f, 0.988281f, 0.988281f, 0.988281f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000017f, 0.000052f, 0.000075f, 0.000091f, 0.000097f, 0.000105f, 0.000108f,
+ 0.000111f, 0.000113f, 0.000114f, 0.000085f, 0.000050f, 0.000031f, 0.000018f, 0.000012f,
+ 0.000008f, 0.000005f, 0.000095f, 0.000314f, 0.000306f, 0.000363f, 0.000813f, 0.002583f,
+ 0.011734f, 0.308105f, 0.983887f, 0.984375f, 0.984375f, 0.984375f, 0.983887f, 0.983887f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f, 0.000065f, 0.000083f,
+ 0.000093f, 0.000099f, 0.000105f, 0.000108f, 0.000110f, 0.000082f, 0.000045f, 0.000027f,
+ 0.000017f, 0.000011f, 0.000007f, 0.000114f, 0.000245f, 0.000209f, 0.000379f, 0.001151f,
+ 0.005260f, 0.107971f, 0.977539f, 0.979004f, 0.978027f, 0.978027f, 0.978027f, 0.978027f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000007f, 0.000045f, 0.000069f, 0.000084f, 0.000093f, 0.000099f, 0.000104f, 0.000076f,
+ 0.000044f, 0.000026f, 0.000016f, 0.000010f, 0.000012f, 0.000152f, 0.000179f, 0.000373f,
+ 0.001760f, 0.035522f, 0.969238f, 0.968750f, 0.968750f, 0.968750f, 0.968750f, 0.968750f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000050f, 0.000070f, 0.000082f,
+ 0.000092f, 0.000075f, 0.000044f, 0.000026f, 0.000015f, 0.000009f, 0.000121f, 0.000117f,
+ 0.000611f, 0.010231f, 0.951172f, 0.951172f, 0.951172f, 0.951172f, 0.950684f, 0.951660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000020f, 0.000047f, 0.000069f, 0.000077f, 0.000042f, 0.000024f, 0.000013f, 0.000078f,
+ 0.000130f, 0.001914f, 0.915039f, 0.915527f, 0.915039f, 0.915527f, 0.916016f, 0.915039f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.000047f, 0.000040f, 0.000019f,
+ 0.000035f, 0.000188f, 0.833984f, 0.833496f, 0.833496f, 0.834473f, 0.834473f, 0.833984f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000014f, 0.000007f, 0.642578f, 0.643555f, 0.643066f, 0.643555f, 0.642578f, 0.642578f,
+ },
+ {
+ 0.113464f, 0.797852f, 0.930176f, 0.961914f, 0.974609f, 0.980469f, 0.984863f, 0.987793f,
+ 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.007183f, 0.058716f, 0.349609f, 0.784668f, 0.912598f, 0.952148f, 0.968262f, 0.977539f,
+ 0.981934f, 0.985352f, 0.988281f, 0.990234f, 0.991211f, 0.992188f, 0.993652f, 0.993652f,
+ 0.994141f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.002432f, 0.011818f, 0.039581f, 0.143677f, 0.482910f, 0.800293f, 0.908691f, 0.947266f,
+ 0.964844f, 0.974609f, 0.980469f, 0.984375f, 0.987305f, 0.989258f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001096f, 0.005062f, 0.012482f, 0.030151f, 0.079956f, 0.239014f, 0.581055f, 0.819824f,
+ 0.909180f, 0.946289f, 0.963379f, 0.973145f, 0.979492f, 0.983398f, 0.986328f, 0.988281f,
+ 0.990234f, 0.991699f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000610f, 0.002434f, 0.005779f, 0.012207f, 0.023972f, 0.052765f, 0.129883f, 0.342773f,
+ 0.660156f, 0.841309f, 0.914062f, 0.947266f, 0.963379f, 0.973145f, 0.979004f, 0.982910f,
+ 0.985840f, 0.987793f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000397f, 0.001559f, 0.003397f, 0.006058f, 0.011177f, 0.020355f, 0.039307f, 0.083130f,
+ 0.196777f, 0.452148f, 0.724121f, 0.862305f, 0.920410f, 0.949219f, 0.964355f, 0.973145f,
+ 0.979004f, 0.982910f, 0.985840f, 0.988770f, 0.989258f, 0.991211f, 0.992188f, 0.993164f,
+ 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000366f, 0.001097f, 0.002163f, 0.003523f, 0.006268f, 0.010941f, 0.017487f, 0.030930f,
+ 0.058411f, 0.122925f, 0.281738f, 0.556152f, 0.776367f, 0.881348f, 0.928223f, 0.951660f,
+ 0.966309f, 0.973633f, 0.979492f, 0.983398f, 0.986328f, 0.988281f, 0.989746f, 0.991211f,
+ 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000728f, 0.001340f, 0.002533f, 0.003813f, 0.006081f, 0.009750f, 0.015419f,
+ 0.025177f, 0.044067f, 0.084473f, 0.179077f, 0.384033f, 0.649902f, 0.818848f, 0.897949f,
+ 0.935547f, 0.956055f, 0.967285f, 0.975098f, 0.980957f, 0.983887f, 0.986328f, 0.988281f,
+ 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000609f, 0.000854f, 0.001898f, 0.002781f, 0.004246f, 0.006218f, 0.008835f,
+ 0.013504f, 0.021362f, 0.035400f, 0.062347f, 0.121460f, 0.255127f, 0.495361f, 0.726562f,
+ 0.852539f, 0.912598f, 0.943359f, 0.959473f, 0.969238f, 0.976562f, 0.981445f, 0.984375f,
+ 0.987305f, 0.988770f, 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000244f, 0.000731f, 0.001295f, 0.002159f, 0.003092f, 0.004051f, 0.005836f,
+ 0.008560f, 0.011925f, 0.018585f, 0.029373f, 0.048950f, 0.088013f, 0.174194f, 0.354980f,
+ 0.604492f, 0.788086f, 0.880371f, 0.925293f, 0.950195f, 0.963867f, 0.972168f, 0.978027f,
+ 0.982422f, 0.985840f, 0.987793f, 0.990234f, 0.991699f, 0.992188f, 0.993164f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000114f, 0.000244f, 0.000709f, 0.001089f, 0.001580f, 0.002100f, 0.002848f, 0.004028f,
+ 0.005646f, 0.008232f, 0.011276f, 0.016647f, 0.024948f, 0.039215f, 0.067566f, 0.125244f,
+ 0.249878f, 0.471436f, 0.698242f, 0.834961f, 0.902344f, 0.937012f, 0.955078f, 0.967773f,
+ 0.974609f, 0.979492f, 0.983887f, 0.987305f, 0.988770f, 0.990723f, 0.991699f, 0.992676f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000244f, 0.000480f, 0.001081f, 0.001216f, 0.001684f, 0.002287f, 0.003113f,
+ 0.004246f, 0.005711f, 0.007412f, 0.010658f, 0.014900f, 0.021408f, 0.033173f, 0.053711f,
+ 0.094299f, 0.179688f, 0.351807f, 0.591309f, 0.774902f, 0.871582f, 0.919922f, 0.946289f,
+ 0.961426f, 0.971191f, 0.977051f, 0.981934f, 0.984863f, 0.987305f, 0.989258f, 0.991211f,
+ 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000364f, 0.000366f, 0.000729f, 0.001195f, 0.001218f, 0.001693f, 0.002209f,
+ 0.003038f, 0.004192f, 0.005249f, 0.006981f, 0.009926f, 0.013405f, 0.019165f, 0.028473f,
+ 0.044250f, 0.073975f, 0.134521f, 0.260010f, 0.476562f, 0.696289f, 0.830566f, 0.898438f,
+ 0.933594f, 0.954102f, 0.966309f, 0.974609f, 0.979492f, 0.982910f, 0.986328f, 0.988281f,
+ 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000226f, 0.000365f, 0.000488f, 0.000731f, 0.001090f, 0.001245f, 0.002028f,
+ 0.002169f, 0.003023f, 0.003952f, 0.005043f, 0.006790f, 0.009026f, 0.012276f, 0.016754f,
+ 0.024628f, 0.037384f, 0.060120f, 0.104431f, 0.196045f, 0.372803f, 0.604980f, 0.779785f,
+ 0.872070f, 0.919922f, 0.945312f, 0.960938f, 0.970703f, 0.977539f, 0.980957f, 0.984863f,
+ 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000364f, 0.000487f, 0.000488f, 0.000608f, 0.001092f, 0.001323f,
+ 0.001909f, 0.002028f, 0.002829f, 0.003754f, 0.004940f, 0.006329f, 0.008850f, 0.011353f,
+ 0.015572f, 0.022110f, 0.032196f, 0.050293f, 0.083984f, 0.151978f, 0.288574f, 0.507812f,
+ 0.715332f, 0.839844f, 0.902832f, 0.936035f, 0.955566f, 0.966797f, 0.974609f, 0.979492f,
+ 0.983887f, 0.986816f, 0.988281f, 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995605f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000341f, 0.000486f, 0.000487f, 0.000591f, 0.000846f, 0.001213f,
+ 0.001407f, 0.002018f, 0.002306f, 0.003119f, 0.003736f, 0.004700f, 0.005936f, 0.007858f,
+ 0.010498f, 0.013939f, 0.019913f, 0.028564f, 0.043060f, 0.069275f, 0.120972f, 0.225830f,
+ 0.416748f, 0.642090f, 0.798828f, 0.881836f, 0.924805f, 0.948730f, 0.962891f, 0.971191f,
+ 0.978516f, 0.982422f, 0.985352f, 0.987793f, 0.989746f, 0.991211f, 0.992676f, 0.993164f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000121f, 0.000122f, 0.000475f, 0.000486f, 0.000487f, 0.000714f, 0.000913f,
+ 0.001296f, 0.001350f, 0.001884f, 0.002163f, 0.002871f, 0.003702f, 0.004578f, 0.005573f,
+ 0.007278f, 0.009819f, 0.013039f, 0.017883f, 0.025589f, 0.037445f, 0.058655f, 0.099243f,
+ 0.180542f, 0.338867f, 0.563965f, 0.751465f, 0.857422f, 0.912109f, 0.941406f, 0.958496f,
+ 0.968262f, 0.976074f, 0.980957f, 0.984375f, 0.986816f, 0.989258f, 0.990723f, 0.992188f,
+ 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000242f, 0.000417f, 0.000607f, 0.000602f, 0.000644f,
+ 0.001016f, 0.001223f, 0.001337f, 0.002010f, 0.002087f, 0.002752f, 0.003380f, 0.004486f,
+ 0.005760f, 0.007523f, 0.009048f, 0.012169f, 0.016312f, 0.022949f, 0.033295f, 0.050812f,
+ 0.082886f, 0.146851f, 0.275635f, 0.486572f, 0.696777f, 0.828613f, 0.896484f, 0.933594f,
+ 0.953613f, 0.965820f, 0.973633f, 0.979980f, 0.983887f, 0.986328f, 0.988770f, 0.990723f,
+ 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
+ 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000262f, 0.000463f, 0.000603f, 0.000665f,
+ 0.000716f, 0.001069f, 0.001322f, 0.001538f, 0.001895f, 0.002293f, 0.003120f, 0.003323f,
+ 0.004166f, 0.005638f, 0.006828f, 0.008942f, 0.011368f, 0.015465f, 0.021057f, 0.029663f,
+ 0.044861f, 0.070923f, 0.123169f, 0.228149f, 0.416504f, 0.640137f, 0.797363f, 0.880859f,
+ 0.924805f, 0.948730f, 0.963379f, 0.971680f, 0.978516f, 0.982422f, 0.985840f, 0.988281f,
+ 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000172f, 0.000243f, 0.000365f, 0.000475f, 0.000607f,
+ 0.000608f, 0.000609f, 0.001013f, 0.001424f, 0.001456f, 0.001904f, 0.002411f, 0.002903f,
+ 0.003145f, 0.004314f, 0.004944f, 0.006607f, 0.008156f, 0.010719f, 0.014297f, 0.018906f,
+ 0.027069f, 0.040070f, 0.062103f, 0.104858f, 0.191162f, 0.355469f, 0.581543f, 0.762695f,
+ 0.863281f, 0.915039f, 0.943848f, 0.960449f, 0.970703f, 0.977051f, 0.981445f, 0.985840f,
+ 0.987793f, 0.989746f, 0.991211f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.997070f, 0.997070f, 0.998047f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000096f, 0.000239f, 0.000241f, 0.000336f, 0.000482f,
+ 0.000719f, 0.000729f, 0.000831f, 0.001049f, 0.001552f, 0.001576f, 0.001710f, 0.002373f,
+ 0.002846f, 0.003254f, 0.004051f, 0.005035f, 0.006405f, 0.007706f, 0.009987f, 0.013092f,
+ 0.017715f, 0.024872f, 0.035980f, 0.055328f, 0.091248f, 0.163330f, 0.305664f, 0.524902f,
+ 0.726562f, 0.845215f, 0.906250f, 0.938965f, 0.957031f, 0.969238f, 0.976074f, 0.981445f,
+ 0.984863f, 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000120f, 0.000351f, 0.000364f, 0.000421f,
+ 0.000480f, 0.000606f, 0.000728f, 0.000852f, 0.001175f, 0.001535f, 0.001673f, 0.001671f,
+ 0.002277f, 0.002743f, 0.003220f, 0.003922f, 0.004868f, 0.005951f, 0.007488f, 0.009430f,
+ 0.012527f, 0.016266f, 0.022964f, 0.033142f, 0.049805f, 0.080688f, 0.141846f, 0.265625f,
+ 0.473145f, 0.688477f, 0.825684f, 0.897949f, 0.934082f, 0.954102f, 0.966797f, 0.975098f,
+ 0.980469f, 0.984375f, 0.987305f, 0.989258f, 0.991211f, 0.992676f, 0.993164f, 0.993652f,
+ 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000058f, 0.000235f, 0.000360f, 0.000243f,
+ 0.000440f, 0.000583f, 0.000847f, 0.000851f, 0.000852f, 0.001189f, 0.001411f, 0.001645f,
+ 0.001898f, 0.002417f, 0.002617f, 0.003435f, 0.003695f, 0.004616f, 0.005733f, 0.007278f,
+ 0.009216f, 0.012016f, 0.015701f, 0.021561f, 0.030396f, 0.045746f, 0.073120f, 0.125732f,
+ 0.233521f, 0.428223f, 0.653320f, 0.807617f, 0.887695f, 0.929688f, 0.951660f, 0.965820f,
+ 0.974121f, 0.980469f, 0.984375f, 0.986816f, 0.989746f, 0.991211f, 0.992676f, 0.993164f,
+ 0.994141f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000237f, 0.000237f, 0.000362f,
+ 0.000365f, 0.000558f, 0.000814f, 0.000727f, 0.000729f, 0.000935f, 0.001189f, 0.001403f,
+ 0.001569f, 0.001989f, 0.002216f, 0.002533f, 0.003307f, 0.003906f, 0.004463f, 0.005646f,
+ 0.006908f, 0.008980f, 0.011230f, 0.014755f, 0.020020f, 0.028320f, 0.041931f, 0.065979f,
+ 0.113098f, 0.209229f, 0.389648f, 0.620605f, 0.789551f, 0.879395f, 0.924805f, 0.950684f,
+ 0.964844f, 0.974121f, 0.979980f, 0.983398f, 0.987305f, 0.989258f, 0.991211f, 0.992676f,
+ 0.993652f, 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000121f,
+ 0.000241f, 0.000486f, 0.000575f, 0.000707f, 0.000726f, 0.000971f, 0.000849f, 0.000966f,
+ 0.001350f, 0.001660f, 0.001678f, 0.002224f, 0.002483f, 0.003197f, 0.003611f, 0.004200f,
+ 0.005318f, 0.006744f, 0.008476f, 0.010506f, 0.014145f, 0.019089f, 0.026627f, 0.039001f,
+ 0.061096f, 0.103333f, 0.189819f, 0.358887f, 0.591309f, 0.773438f, 0.872559f, 0.922363f,
+ 0.948730f, 0.963867f, 0.973145f, 0.979492f, 0.983887f, 0.986816f, 0.989258f, 0.991211f,
+ 0.992188f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000175f, 0.000361f,
+ 0.000481f, 0.000485f, 0.000364f, 0.000562f, 0.000703f, 0.000827f, 0.000842f, 0.000972f,
+ 0.001172f, 0.001321f, 0.001675f, 0.001684f, 0.002153f, 0.002455f, 0.003122f, 0.003391f,
+ 0.004177f, 0.005314f, 0.006325f, 0.007896f, 0.010368f, 0.013527f, 0.018082f, 0.025162f,
+ 0.037140f, 0.057343f, 0.095886f, 0.175659f, 0.334473f, 0.567871f, 0.760742f, 0.866699f,
+ 0.919922f, 0.947754f, 0.963379f, 0.972656f, 0.979492f, 0.984375f, 0.987305f, 0.989258f,
+ 0.991211f, 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997070f,
+ 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000325f,
+ 0.000311f, 0.000243f, 0.000484f, 0.000486f, 0.000536f, 0.000698f, 0.000723f, 0.000844f,
+ 0.000972f, 0.001081f, 0.001312f, 0.001658f, 0.001914f, 0.001932f, 0.002390f, 0.003017f,
+ 0.003668f, 0.004353f, 0.005199f, 0.006336f, 0.007812f, 0.009972f, 0.012802f, 0.017029f,
+ 0.024200f, 0.035034f, 0.053833f, 0.090027f, 0.164185f, 0.316162f, 0.549805f, 0.751465f,
+ 0.863281f, 0.918457f, 0.947266f, 0.963379f, 0.974121f, 0.979492f, 0.984375f, 0.987793f,
+ 0.989746f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.997070f,
+ 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
+ 0.000231f, 0.000453f, 0.000480f, 0.000484f, 0.000485f, 0.000486f, 0.000917f, 0.000963f,
+ 0.000969f, 0.000970f, 0.001043f, 0.001288f, 0.001523f, 0.001684f, 0.001885f, 0.002464f,
+ 0.002531f, 0.003565f, 0.004124f, 0.004745f, 0.006077f, 0.007580f, 0.009605f, 0.012634f,
+ 0.016953f, 0.023346f, 0.033386f, 0.051697f, 0.085632f, 0.156250f, 0.303955f, 0.537598f,
+ 0.746582f, 0.860840f, 0.918457f, 0.947754f, 0.963867f, 0.973633f, 0.979980f, 0.984863f,
+ 0.987793f, 0.990234f, 0.991699f, 0.993652f, 0.994141f, 0.995117f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000235f, 0.000239f, 0.000359f, 0.000484f, 0.000485f, 0.000486f, 0.000628f,
+ 0.000957f, 0.000967f, 0.000969f, 0.001065f, 0.001288f, 0.001602f, 0.001850f, 0.001995f,
+ 0.002409f, 0.002523f, 0.003462f, 0.003838f, 0.004993f, 0.005917f, 0.007233f, 0.009338f,
+ 0.012230f, 0.015610f, 0.022415f, 0.032288f, 0.049805f, 0.082947f, 0.151489f, 0.296631f,
+ 0.532715f, 0.745117f, 0.862793f, 0.919434f, 0.948242f, 0.964844f, 0.974609f, 0.980957f,
+ 0.985352f, 0.988281f, 0.990723f, 0.992676f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000187f, 0.000437f, 0.000473f, 0.000483f, 0.000485f, 0.000606f,
+ 0.000583f, 0.000711f, 0.000772f, 0.000968f, 0.001107f, 0.001287f, 0.001434f, 0.001662f,
+ 0.001984f, 0.002449f, 0.002634f, 0.003145f, 0.003777f, 0.004410f, 0.005722f, 0.007114f,
+ 0.008926f, 0.011696f, 0.016006f, 0.021683f, 0.031342f, 0.048309f, 0.080750f, 0.149170f,
+ 0.294678f, 0.534668f, 0.749512f, 0.866211f, 0.922363f, 0.950684f, 0.966309f, 0.975586f,
+ 0.981934f, 0.985840f, 0.989258f, 0.991699f, 0.992676f, 0.994141f, 0.994629f, 0.996094f,
+ 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000247f, 0.000238f, 0.000407f, 0.000482f, 0.000484f,
+ 0.000604f, 0.000869f, 0.000909f, 0.000721f, 0.000955f, 0.001000f, 0.001241f, 0.001342f,
+ 0.001655f, 0.001721f, 0.002329f, 0.002623f, 0.003086f, 0.003677f, 0.004349f, 0.005600f,
+ 0.006962f, 0.008835f, 0.011581f, 0.015274f, 0.021286f, 0.030884f, 0.047760f, 0.079895f,
+ 0.148926f, 0.298584f, 0.543945f, 0.758301f, 0.872559f, 0.925781f, 0.953125f, 0.967773f,
+ 0.977051f, 0.982910f, 0.986816f, 0.989258f, 0.991211f, 0.993164f, 0.994629f, 0.995605f,
+ 0.996094f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000237f, 0.000410f, 0.000472f, 0.000481f,
+ 0.000483f, 0.000485f, 0.000687f, 0.000913f, 0.000956f, 0.000966f, 0.000997f, 0.001341f,
+ 0.001415f, 0.001813f, 0.002029f, 0.002043f, 0.002594f, 0.003210f, 0.003641f, 0.004734f,
+ 0.005356f, 0.006882f, 0.008675f, 0.011360f, 0.014816f, 0.020920f, 0.030380f, 0.047485f,
+ 0.080200f, 0.151733f, 0.308105f, 0.561523f, 0.772949f, 0.881348f, 0.931152f, 0.956055f,
+ 0.969727f, 0.978516f, 0.983887f, 0.987793f, 0.990234f, 0.992188f, 0.993652f, 0.994629f,
+ 0.995605f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000254f, 0.000345f, 0.000468f,
+ 0.000585f, 0.000482f, 0.000603f, 0.000485f, 0.000862f, 0.000928f, 0.000965f, 0.001174f,
+ 0.001162f, 0.001405f, 0.001761f, 0.002016f, 0.002182f, 0.002733f, 0.002831f, 0.003504f,
+ 0.004456f, 0.005440f, 0.006775f, 0.008553f, 0.011055f, 0.014694f, 0.020859f, 0.030334f,
+ 0.047852f, 0.081970f, 0.157593f, 0.325439f, 0.586914f, 0.790527f, 0.890137f, 0.936523f,
+ 0.959473f, 0.973145f, 0.980469f, 0.985352f, 0.988770f, 0.990723f, 0.992676f, 0.994141f,
+ 0.995117f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000237f, 0.000340f,
+ 0.000457f, 0.000580f, 0.000481f, 0.000601f, 0.000605f, 0.000742f, 0.000951f, 0.000953f,
+ 0.001131f, 0.001257f, 0.001396f, 0.001730f, 0.001936f, 0.002102f, 0.002682f, 0.002762f,
+ 0.003733f, 0.004425f, 0.005344f, 0.006516f, 0.008354f, 0.010971f, 0.014793f, 0.020859f,
+ 0.030640f, 0.048859f, 0.085144f, 0.167358f, 0.350586f, 0.620117f, 0.811035f, 0.900391f,
+ 0.942383f, 0.963379f, 0.975098f, 0.981934f, 0.986816f, 0.989746f, 0.992188f, 0.993164f,
+ 0.994629f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000131f,
+ 0.000301f, 0.000430f, 0.000470f, 0.000593f, 0.000571f, 0.000587f, 0.000693f, 0.000906f,
+ 0.000959f, 0.000965f, 0.001094f, 0.001364f, 0.001522f, 0.001783f, 0.002094f, 0.002615f,
+ 0.003038f, 0.003365f, 0.004307f, 0.005135f, 0.006493f, 0.008347f, 0.011055f, 0.014824f,
+ 0.020844f, 0.031204f, 0.050507f, 0.090027f, 0.182129f, 0.385498f, 0.659668f, 0.834473f,
+ 0.913086f, 0.949219f, 0.967285f, 0.978027f, 0.983887f, 0.987793f, 0.991211f, 0.992188f,
+ 0.994141f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000189f, 0.000122f, 0.000122f,
+ 0.000241f, 0.000295f, 0.000425f, 0.000457f, 0.000592f, 0.000481f, 0.000603f, 0.000697f,
+ 0.000926f, 0.000943f, 0.000960f, 0.001022f, 0.001435f, 0.001632f, 0.001658f, 0.002024f,
+ 0.002468f, 0.003010f, 0.003210f, 0.004124f, 0.005219f, 0.006351f, 0.008163f, 0.010933f,
+ 0.015030f, 0.021271f, 0.032257f, 0.053009f, 0.097534f, 0.203003f, 0.432373f, 0.704102f,
+ 0.858887f, 0.924805f, 0.955566f, 0.970703f, 0.979492f, 0.985840f, 0.989258f, 0.991699f,
+ 0.993164f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000214f,
+ 0.000201f, 0.000239f, 0.000241f, 0.000383f, 0.000461f, 0.000474f, 0.000479f, 0.000598f,
+ 0.000736f, 0.000905f, 0.000947f, 0.001072f, 0.001180f, 0.001376f, 0.001572f, 0.001752f,
+ 0.001900f, 0.002258f, 0.002792f, 0.003487f, 0.004055f, 0.005161f, 0.006424f, 0.008209f,
+ 0.010933f, 0.015030f, 0.021942f, 0.033630f, 0.056671f, 0.107666f, 0.233276f, 0.492188f,
+ 0.752441f, 0.881836f, 0.937012f, 0.961914f, 0.975098f, 0.982910f, 0.987305f, 0.990234f,
+ 0.992676f, 0.994629f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000132f,
+ 0.000224f, 0.000129f, 0.000237f, 0.000240f, 0.000337f, 0.000430f, 0.000468f, 0.000579f,
+ 0.000593f, 0.000602f, 0.000881f, 0.000936f, 0.000956f, 0.000963f, 0.001282f, 0.001519f,
+ 0.001607f, 0.001852f, 0.002150f, 0.002737f, 0.003508f, 0.003990f, 0.005077f, 0.006516f,
+ 0.008179f, 0.011185f, 0.015511f, 0.022446f, 0.035614f, 0.061859f, 0.122681f, 0.275879f,
+ 0.563965f, 0.798828f, 0.903809f, 0.946777f, 0.967773f, 0.978516f, 0.984863f, 0.988770f,
+ 0.991699f, 0.993652f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000149f, 0.000122f, 0.000207f, 0.000371f, 0.000430f, 0.000573f,
+ 0.000591f, 0.000598f, 0.000597f, 0.000804f, 0.000901f, 0.000948f, 0.001053f, 0.001083f,
+ 0.001376f, 0.001584f, 0.001878f, 0.002331f, 0.002529f, 0.003376f, 0.003944f, 0.005230f,
+ 0.006504f, 0.008537f, 0.011459f, 0.015747f, 0.024002f, 0.038361f, 0.069458f, 0.144409f,
+ 0.336914f, 0.644043f, 0.841797f, 0.922363f, 0.957520f, 0.972656f, 0.981934f, 0.987305f,
+ 0.990234f, 0.993164f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000230f, 0.000234f, 0.000235f, 0.000268f, 0.000400f,
+ 0.000448f, 0.000585f, 0.000590f, 0.000599f, 0.000641f, 0.000788f, 0.000930f, 0.000968f,
+ 0.001107f, 0.001251f, 0.001656f, 0.001701f, 0.002047f, 0.002691f, 0.003437f, 0.003998f,
+ 0.004829f, 0.006329f, 0.008492f, 0.011757f, 0.016525f, 0.025345f, 0.042297f, 0.080200f,
+ 0.177490f, 0.420654f, 0.724121f, 0.878906f, 0.938965f, 0.964355f, 0.977539f, 0.984863f,
+ 0.989746f, 0.992188f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000214f, 0.000235f, 0.000228f, 0.000240f,
+ 0.000429f, 0.000439f, 0.000574f, 0.000654f, 0.000583f, 0.000493f, 0.000788f, 0.000813f,
+ 0.000947f, 0.001062f, 0.001225f, 0.001569f, 0.001721f, 0.002048f, 0.002844f, 0.002979f,
+ 0.003902f, 0.004997f, 0.006454f, 0.008698f, 0.012192f, 0.018143f, 0.027634f, 0.047913f,
+ 0.095886f, 0.228394f, 0.526855f, 0.796875f, 0.910156f, 0.953125f, 0.973145f, 0.982422f,
+ 0.987793f, 0.991699f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000236f,
+ 0.000232f, 0.000299f, 0.000446f, 0.000417f, 0.000466f, 0.000580f, 0.000508f, 0.000710f,
+ 0.000800f, 0.000940f, 0.000954f, 0.001228f, 0.001496f, 0.001631f, 0.002043f, 0.002798f,
+ 0.003359f, 0.004139f, 0.004951f, 0.006680f, 0.008995f, 0.012764f, 0.018860f, 0.030823f,
+ 0.056061f, 0.120911f, 0.307617f, 0.645508f, 0.855957f, 0.934082f, 0.964355f, 0.978516f,
+ 0.985840f, 0.990234f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f,
+ 0.000122f, 0.000226f, 0.000373f, 0.000272f, 0.000325f, 0.000460f, 0.000471f, 0.000477f,
+ 0.000673f, 0.000877f, 0.000929f, 0.000951f, 0.001129f, 0.001446f, 0.001614f, 0.002096f,
+ 0.002619f, 0.002939f, 0.003941f, 0.005363f, 0.006844f, 0.009491f, 0.013596f, 0.020905f,
+ 0.035370f, 0.068420f, 0.161743f, 0.426270f, 0.755859f, 0.900879f, 0.952148f, 0.973145f,
+ 0.983398f, 0.989746f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000111f, 0.000236f, 0.000297f, 0.000368f, 0.000449f, 0.000467f,
+ 0.000588f, 0.000641f, 0.000813f, 0.000924f, 0.001035f, 0.001124f, 0.001348f, 0.001764f,
+ 0.001922f, 0.002439f, 0.003160f, 0.004005f, 0.005280f, 0.007107f, 0.010109f, 0.014748f,
+ 0.023148f, 0.041595f, 0.088440f, 0.232910f, 0.578125f, 0.841797f, 0.933594f, 0.965820f,
+ 0.980469f, 0.987305f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000014f, 0.000011f, 0.000116f, 0.000148f, 0.000128f, 0.000369f, 0.000418f,
+ 0.000563f, 0.000470f, 0.000592f, 0.000776f, 0.000901f, 0.000937f, 0.001112f, 0.001348f,
+ 0.001743f, 0.001904f, 0.002470f, 0.003187f, 0.003986f, 0.005360f, 0.007557f, 0.010674f,
+ 0.016068f, 0.026871f, 0.051666f, 0.122925f, 0.356445f, 0.729492f, 0.901855f, 0.955078f,
+ 0.976074f, 0.985840f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
+ 0.000122f, 0.000122f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000028f, 0.000019f, 0.000014f, 0.000011f, 0.000033f, 0.000118f, 0.000247f, 0.000305f,
+ 0.000412f, 0.000447f, 0.000576f, 0.000587f, 0.000693f, 0.000850f, 0.000949f, 0.001083f,
+ 0.001319f, 0.001557f, 0.001957f, 0.002424f, 0.003340f, 0.004417f, 0.005688f, 0.007774f,
+ 0.011497f, 0.017731f, 0.032257f, 0.068604f, 0.189575f, 0.541992f, 0.843262f, 0.938477f,
+ 0.970703f, 0.983887f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000121f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000067f,
+ 0.000042f, 0.000028f, 0.000020f, 0.000015f, 0.000066f, 0.000009f, 0.000101f, 0.000118f,
+ 0.000260f, 0.000358f, 0.000520f, 0.000456f, 0.000563f, 0.000711f, 0.000872f, 0.000980f,
+ 0.001059f, 0.001309f, 0.001699f, 0.002066f, 0.002708f, 0.003248f, 0.004166f, 0.005836f,
+ 0.008224f, 0.012619f, 0.021484f, 0.041260f, 0.101074f, 0.323486f, 0.733887f, 0.912109f,
+ 0.962402f, 0.980957f, 0.995117f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000119f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000105f,
+ 0.000067f, 0.000042f, 0.000029f, 0.000022f, 0.000015f, 0.000011f, 0.000040f, 0.000033f,
+ 0.000153f, 0.000204f, 0.000313f, 0.000501f, 0.000554f, 0.000575f, 0.000585f, 0.000778f,
+ 0.000925f, 0.000980f, 0.001245f, 0.001634f, 0.001989f, 0.002413f, 0.003433f, 0.004028f,
+ 0.005989f, 0.008911f, 0.014374f, 0.026443f, 0.057495f, 0.170166f, 0.549805f, 0.864746f,
+ 0.951172f, 0.977051f, 0.994629f, 0.994629f, 0.994629f, 0.994629f, 0.995605f, 0.994629f,
+ 0.000000f, 0.000046f, 0.000088f, 0.000118f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000108f, 0.000069f, 0.000047f, 0.000030f, 0.000022f, 0.000016f, 0.000012f, 0.000052f,
+ 0.000081f, 0.000100f, 0.000184f, 0.000226f, 0.000400f, 0.000467f, 0.000452f, 0.000597f,
+ 0.000807f, 0.000895f, 0.000942f, 0.001219f, 0.001611f, 0.002022f, 0.002352f, 0.003222f,
+ 0.004177f, 0.006481f, 0.009850f, 0.017517f, 0.034668f, 0.090637f, 0.331055f, 0.776367f,
+ 0.932129f, 0.972656f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994629f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000107f, 0.000115f, 0.000112f, 0.000119f, 0.000118f,
+ 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000117f, 0.000072f, 0.000049f, 0.000032f, 0.000023f, 0.000017f, 0.000013f,
+ 0.000011f, 0.000008f, 0.000075f, 0.000151f, 0.000207f, 0.000305f, 0.000509f, 0.000499f,
+ 0.000560f, 0.000704f, 0.000863f, 0.000917f, 0.001220f, 0.001505f, 0.001740f, 0.002174f,
+ 0.003153f, 0.004559f, 0.007095f, 0.011826f, 0.022247f, 0.051147f, 0.173462f, 0.618652f,
+ 0.902344f, 0.966309f, 0.993164f, 0.993652f, 0.992676f, 0.992676f, 0.993164f, 0.993164f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000060f, 0.000102f, 0.000113f,
+ 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000078f, 0.000052f, 0.000038f, 0.000027f, 0.000019f,
+ 0.000015f, 0.000011f, 0.000054f, 0.000007f, 0.000085f, 0.000108f, 0.000258f, 0.000466f,
+ 0.000533f, 0.000560f, 0.000662f, 0.000849f, 0.000856f, 0.000965f, 0.001180f, 0.001678f,
+ 0.002075f, 0.003193f, 0.005016f, 0.008095f, 0.014343f, 0.030899f, 0.090820f, 0.401367f,
+ 0.848145f, 0.956543f, 0.992188f, 0.992188f, 0.992188f, 0.992676f, 0.991699f, 0.992188f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000059f, 0.000096f,
+ 0.000107f, 0.000112f, 0.000115f, 0.000116f, 0.000117f, 0.000118f, 0.000118f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000088f, 0.000059f, 0.000041f, 0.000031f,
+ 0.000022f, 0.000017f, 0.000013f, 0.000010f, 0.000056f, 0.000091f, 0.000183f, 0.000201f,
+ 0.000309f, 0.000506f, 0.000547f, 0.000525f, 0.000629f, 0.000613f, 0.000817f, 0.001012f,
+ 0.001640f, 0.002420f, 0.003588f, 0.005520f, 0.009453f, 0.019119f, 0.050415f, 0.214722f,
+ 0.751465f, 0.943848f, 0.990723f, 0.990723f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000055f, 0.000095f, 0.000103f, 0.000105f, 0.000112f, 0.000114f, 0.000115f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000105f, 0.000069f, 0.000048f,
+ 0.000035f, 0.000025f, 0.000019f, 0.000015f, 0.000011f, 0.000014f, 0.000008f, 0.000071f,
+ 0.000193f, 0.000311f, 0.000315f, 0.000524f, 0.000483f, 0.000558f, 0.000591f, 0.000705f,
+ 0.000950f, 0.001389f, 0.002428f, 0.003494f, 0.006321f, 0.012306f, 0.029480f, 0.108948f,
+ 0.581543f, 0.924316f, 0.989746f, 0.989746f, 0.989258f, 0.989746f, 0.989258f, 0.989746f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000069f, 0.000096f, 0.000103f, 0.000107f,
+ 0.000109f, 0.000112f, 0.000113f, 0.000115f, 0.000115f, 0.000116f, 0.000117f, 0.000117f,
+ 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000084f,
+ 0.000061f, 0.000042f, 0.000031f, 0.000023f, 0.000018f, 0.000014f, 0.000011f, 0.000009f,
+ 0.000095f, 0.000127f, 0.000223f, 0.000402f, 0.000432f, 0.000399f, 0.000494f, 0.000535f,
+ 0.000557f, 0.000933f, 0.001474f, 0.002300f, 0.004192f, 0.007919f, 0.017838f, 0.057068f,
+ 0.360840f, 0.890625f, 0.986816f, 0.987793f, 0.987305f, 0.987305f, 0.987793f, 0.987305f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000035f, 0.000041f,
+ 0.000088f, 0.000098f, 0.000103f, 0.000106f, 0.000110f, 0.000110f, 0.000113f, 0.000113f,
+ 0.000115f, 0.000116f, 0.000116f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000118f,
+ 0.000111f, 0.000074f, 0.000053f, 0.000038f, 0.000029f, 0.000022f, 0.000016f, 0.000013f,
+ 0.000010f, 0.000008f, 0.000073f, 0.000152f, 0.000296f, 0.000369f, 0.000365f, 0.000437f,
+ 0.000507f, 0.000661f, 0.000876f, 0.001451f, 0.002531f, 0.004898f, 0.010384f, 0.031113f,
+ 0.183838f, 0.833008f, 0.984375f, 0.984863f, 0.984863f, 0.984375f, 0.984863f, 0.984863f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000024f, 0.000044f, 0.000073f, 0.000087f, 0.000097f, 0.000102f, 0.000105f,
+ 0.000108f, 0.000110f, 0.000111f, 0.000113f, 0.000114f, 0.000114f, 0.000115f, 0.000115f,
+ 0.000116f, 0.000116f, 0.000101f, 0.000070f, 0.000052f, 0.000037f, 0.000027f, 0.000021f,
+ 0.000016f, 0.000013f, 0.000010f, 0.000008f, 0.000083f, 0.000183f, 0.000352f, 0.000355f,
+ 0.000362f, 0.000365f, 0.000528f, 0.000790f, 0.001469f, 0.003029f, 0.005970f, 0.017242f,
+ 0.089050f, 0.728516f, 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.980957f, 0.981445f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000033f, 0.000041f, 0.000073f,
+ 0.000083f, 0.000088f, 0.000097f, 0.000102f, 0.000105f, 0.000108f, 0.000108f, 0.000111f,
+ 0.000112f, 0.000113f, 0.000113f, 0.000114f, 0.000097f, 0.000068f, 0.000049f, 0.000038f,
+ 0.000028f, 0.000021f, 0.000016f, 0.000013f, 0.000010f, 0.000056f, 0.000151f, 0.000243f,
+ 0.000264f, 0.000221f, 0.000328f, 0.000449f, 0.000850f, 0.001612f, 0.003340f, 0.009361f,
+ 0.043121f, 0.548340f, 0.976074f, 0.976562f, 0.975586f, 0.976074f, 0.976074f, 0.976562f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000019f, 0.000052f, 0.000065f, 0.000077f, 0.000088f, 0.000094f, 0.000098f,
+ 0.000100f, 0.000104f, 0.000106f, 0.000108f, 0.000109f, 0.000110f, 0.000095f, 0.000069f,
+ 0.000052f, 0.000037f, 0.000028f, 0.000021f, 0.000017f, 0.000013f, 0.000025f, 0.000063f,
+ 0.000195f, 0.000233f, 0.000205f, 0.000264f, 0.000401f, 0.000789f, 0.001532f, 0.004520f,
+ 0.020844f, 0.321289f, 0.969238f, 0.968750f, 0.969238f, 0.968750f, 0.969238f, 0.969238f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000018f, 0.000039f, 0.000053f,
+ 0.000066f, 0.000079f, 0.000086f, 0.000090f, 0.000096f, 0.000100f, 0.000102f, 0.000105f,
+ 0.000098f, 0.000074f, 0.000053f, 0.000041f, 0.000031f, 0.000023f, 0.000017f, 0.000013f,
+ 0.000028f, 0.000139f, 0.000189f, 0.000179f, 0.000219f, 0.000333f, 0.000840f, 0.002119f,
+ 0.009193f, 0.144775f, 0.958496f, 0.958496f, 0.958008f, 0.958496f, 0.958008f, 0.958008f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000025f, 0.000040f, 0.000052f, 0.000067f, 0.000077f, 0.000082f,
+ 0.000089f, 0.000093f, 0.000097f, 0.000079f, 0.000059f, 0.000044f, 0.000033f, 0.000024f,
+ 0.000018f, 0.000014f, 0.000034f, 0.000084f, 0.000157f, 0.000199f, 0.000309f, 0.000817f,
+ 0.003424f, 0.054901f, 0.940918f, 0.940918f, 0.940918f, 0.940918f, 0.941406f, 0.940430f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000021f,
+ 0.000040f, 0.000054f, 0.000063f, 0.000072f, 0.000078f, 0.000085f, 0.000065f, 0.000049f,
+ 0.000036f, 0.000026f, 0.000019f, 0.000014f, 0.000042f, 0.000114f, 0.000122f, 0.000276f,
+ 0.001024f, 0.016357f, 0.912109f, 0.912598f, 0.911621f, 0.912598f, 0.911621f, 0.913086f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000016f, 0.000032f, 0.000045f, 0.000056f,
+ 0.000065f, 0.000054f, 0.000039f, 0.000028f, 0.000019f, 0.000013f, 0.000049f, 0.000079f,
+ 0.000226f, 0.003199f, 0.860840f, 0.859863f, 0.860352f, 0.860840f, 0.860840f, 0.860352f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000004f, 0.000021f, 0.000035f, 0.000040f, 0.000027f, 0.000018f, 0.000013f,
+ 0.000033f, 0.000333f, 0.764160f, 0.765137f, 0.764648f, 0.764648f, 0.764648f, 0.765137f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f,
+ 0.000011f, 0.000009f, 0.600586f, 0.602051f, 0.602051f, 0.601562f, 0.601074f, 0.601074f,
+ },
+ {
+ 0.142456f, 0.713867f, 0.883789f, 0.933105f, 0.953613f, 0.964844f, 0.972168f, 0.977539f,
+ 0.980957f, 0.983398f, 0.985352f, 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
+ 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.012886f, 0.087646f, 0.360840f, 0.709473f, 0.859863f, 0.916992f, 0.943848f, 0.958496f,
+ 0.967773f, 0.973633f, 0.978516f, 0.980957f, 0.984375f, 0.986328f, 0.987793f, 0.988770f,
+ 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.994629f,
+ 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.003895f, 0.020126f, 0.063599f, 0.188721f, 0.464844f, 0.727539f, 0.853027f, 0.909668f,
+ 0.938477f, 0.954590f, 0.965332f, 0.971680f, 0.976562f, 0.979980f, 0.982910f, 0.985840f,
+ 0.986816f, 0.988770f, 0.990234f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
+ 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.002062f, 0.008438f, 0.021774f, 0.049713f, 0.117676f, 0.279541f, 0.541016f, 0.751465f,
+ 0.855469f, 0.909180f, 0.936035f, 0.952637f, 0.963379f, 0.970703f, 0.975098f, 0.979492f,
+ 0.982910f, 0.984863f, 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.990723f, 0.992188f,
+ 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f,
+ 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001335f, 0.004597f, 0.010628f, 0.020844f, 0.040283f, 0.082764f, 0.177612f, 0.366211f,
+ 0.605469f, 0.773926f, 0.863281f, 0.910156f, 0.936035f, 0.952148f, 0.962402f, 0.969727f,
+ 0.975098f, 0.979004f, 0.982422f, 0.984863f, 0.986328f, 0.988281f, 0.988770f, 0.989746f,
+ 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.996582f, 0.997070f, 0.997559f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000851f, 0.002769f, 0.006130f, 0.010994f, 0.019394f, 0.034943f, 0.063293f, 0.122253f,
+ 0.244019f, 0.448242f, 0.660156f, 0.798828f, 0.872559f, 0.914062f, 0.937988f, 0.954102f,
+ 0.961914f, 0.970215f, 0.974609f, 0.978516f, 0.981934f, 0.984375f, 0.986328f, 0.987793f,
+ 0.988770f, 0.989746f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000466f, 0.001933f, 0.003809f, 0.007095f, 0.011353f, 0.018204f, 0.030029f, 0.050568f,
+ 0.090759f, 0.170898f, 0.318848f, 0.526367f, 0.708496f, 0.820801f, 0.884277f, 0.918457f,
+ 0.940918f, 0.954102f, 0.963867f, 0.970215f, 0.975098f, 0.978516f, 0.981934f, 0.984863f,
+ 0.986328f, 0.988281f, 0.988770f, 0.990234f, 0.991211f, 0.991699f, 0.993164f, 0.993652f,
+ 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000487f, 0.001685f, 0.002766f, 0.004467f, 0.007305f, 0.011215f, 0.017136f, 0.026489f,
+ 0.042419f, 0.071716f, 0.125244f, 0.228271f, 0.399658f, 0.599609f, 0.751953f, 0.842773f,
+ 0.894531f, 0.924805f, 0.943359f, 0.955566f, 0.965820f, 0.971191f, 0.976562f, 0.979980f,
+ 0.981934f, 0.984863f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000965f, 0.002024f, 0.003202f, 0.005009f, 0.007050f, 0.011070f, 0.015869f,
+ 0.023987f, 0.036835f, 0.058563f, 0.097168f, 0.169800f, 0.297852f, 0.484131f, 0.664062f,
+ 0.789062f, 0.861816f, 0.905273f, 0.930176f, 0.947266f, 0.958984f, 0.967285f, 0.972168f,
+ 0.976562f, 0.980469f, 0.982910f, 0.984863f, 0.986816f, 0.988770f, 0.989746f, 0.990723f,
+ 0.992188f, 0.992188f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000974f, 0.001576f, 0.002403f, 0.003510f, 0.005344f, 0.007332f, 0.010567f,
+ 0.015099f, 0.022064f, 0.032104f, 0.048706f, 0.078003f, 0.130249f, 0.224243f, 0.378174f,
+ 0.566406f, 0.720703f, 0.820312f, 0.879883f, 0.915039f, 0.936523f, 0.951660f, 0.961426f,
+ 0.968262f, 0.974121f, 0.978027f, 0.980957f, 0.983887f, 0.985840f, 0.987793f, 0.989258f,
+ 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000240f, 0.000609f, 0.001096f, 0.001580f, 0.002674f, 0.004131f, 0.005245f, 0.007660f,
+ 0.010757f, 0.014221f, 0.019775f, 0.028381f, 0.041870f, 0.064697f, 0.103638f, 0.173706f,
+ 0.293945f, 0.466553f, 0.642090f, 0.769531f, 0.849121f, 0.895996f, 0.924316f, 0.942871f,
+ 0.956055f, 0.963867f, 0.970703f, 0.975098f, 0.979004f, 0.981934f, 0.984863f, 0.986328f,
+ 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f,
+ 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000000f, 0.000608f, 0.001062f, 0.001268f, 0.002001f, 0.003099f, 0.003937f, 0.005379f,
+ 0.007595f, 0.010078f, 0.013176f, 0.018524f, 0.025787f, 0.036896f, 0.054932f, 0.085327f,
+ 0.137573f, 0.229980f, 0.376953f, 0.555664f, 0.708984f, 0.810547f, 0.873047f, 0.909180f,
+ 0.933594f, 0.948730f, 0.959961f, 0.967285f, 0.973145f, 0.977539f, 0.980469f, 0.983398f,
+ 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000606f, 0.000609f, 0.001317f, 0.001564f, 0.002674f, 0.003273f, 0.004402f,
+ 0.005630f, 0.007141f, 0.009514f, 0.012398f, 0.016678f, 0.023331f, 0.032776f, 0.047363f,
+ 0.071594f, 0.112610f, 0.183960f, 0.303711f, 0.470215f, 0.639648f, 0.766113f, 0.844727f,
+ 0.892090f, 0.921875f, 0.941895f, 0.954590f, 0.963379f, 0.970215f, 0.975098f, 0.979004f,
+ 0.981934f, 0.984863f, 0.986328f, 0.987793f, 0.989746f, 0.991211f, 0.991699f, 0.992676f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000244f, 0.000727f, 0.000803f, 0.001575f, 0.002035f, 0.002821f, 0.003527f,
+ 0.004475f, 0.005421f, 0.007023f, 0.009491f, 0.011879f, 0.015976f, 0.021530f, 0.029587f,
+ 0.041809f, 0.061737f, 0.094360f, 0.150146f, 0.246460f, 0.393066f, 0.566406f, 0.712891f,
+ 0.812500f, 0.872070f, 0.909180f, 0.933105f, 0.948242f, 0.959961f, 0.967773f, 0.972656f,
+ 0.977539f, 0.980957f, 0.982910f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.991211f,
+ 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000244f, 0.000244f, 0.000471f, 0.000727f, 0.000967f, 0.001572f, 0.002161f, 0.002680f,
+ 0.003246f, 0.004337f, 0.005241f, 0.006950f, 0.009087f, 0.011497f, 0.015038f, 0.019913f,
+ 0.026688f, 0.037537f, 0.054352f, 0.080383f, 0.125122f, 0.202515f, 0.327148f, 0.493652f,
+ 0.656250f, 0.774414f, 0.849609f, 0.895508f, 0.923828f, 0.942383f, 0.954590f, 0.963867f,
+ 0.971191f, 0.975586f, 0.979004f, 0.982422f, 0.984863f, 0.987305f, 0.988281f, 0.989746f,
+ 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.000121f, 0.000244f, 0.000244f, 0.000715f, 0.001089f, 0.001278f, 0.001781f, 0.002275f,
+ 0.002548f, 0.003334f, 0.004150f, 0.005314f, 0.006824f, 0.008430f, 0.011200f, 0.014145f,
+ 0.018631f, 0.024750f, 0.033905f, 0.047760f, 0.069885f, 0.106445f, 0.169312f, 0.273682f,
+ 0.426270f, 0.596191f, 0.732422f, 0.823242f, 0.879883f, 0.914062f, 0.936035f, 0.950684f,
+ 0.960938f, 0.968750f, 0.973633f, 0.978516f, 0.981934f, 0.984375f, 0.986328f, 0.988281f,
+ 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999023f,
+ 0.000241f, 0.000244f, 0.000365f, 0.000600f, 0.000961f, 0.000972f, 0.001621f, 0.001697f,
+ 0.002274f, 0.002684f, 0.003359f, 0.004238f, 0.005573f, 0.006691f, 0.008057f, 0.010529f,
+ 0.013832f, 0.017593f, 0.022812f, 0.031174f, 0.042786f, 0.061462f, 0.092407f, 0.143799f,
+ 0.231201f, 0.366943f, 0.535645f, 0.688477f, 0.794922f, 0.861816f, 0.902832f, 0.928711f,
+ 0.945801f, 0.957520f, 0.966797f, 0.972656f, 0.976562f, 0.980469f, 0.983398f, 0.985840f,
+ 0.987793f, 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000243f, 0.000365f, 0.000365f, 0.000798f, 0.000968f, 0.001249f, 0.001528f,
+ 0.001798f, 0.002457f, 0.002798f, 0.003494f, 0.004353f, 0.005306f, 0.006363f, 0.008141f,
+ 0.010147f, 0.012596f, 0.016006f, 0.021423f, 0.028503f, 0.039185f, 0.055420f, 0.081116f,
+ 0.124390f, 0.198120f, 0.316895f, 0.478516f, 0.641113f, 0.763672f, 0.842773f, 0.891113f,
+ 0.921387f, 0.941406f, 0.954590f, 0.963867f, 0.970215f, 0.975586f, 0.979492f, 0.982910f,
+ 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000238f, 0.000365f, 0.000365f, 0.000598f, 0.000820f, 0.001200f, 0.001279f,
+ 0.001631f, 0.001736f, 0.002172f, 0.002874f, 0.003576f, 0.004391f, 0.005096f, 0.006176f,
+ 0.007545f, 0.009674f, 0.012505f, 0.015945f, 0.020187f, 0.026550f, 0.035706f, 0.049835f,
+ 0.072510f, 0.109253f, 0.171631f, 0.275391f, 0.426514f, 0.594238f, 0.730469f, 0.822754f,
+ 0.877930f, 0.913574f, 0.936523f, 0.951172f, 0.961426f, 0.969727f, 0.974609f, 0.978027f,
+ 0.982422f, 0.984863f, 0.986816f, 0.988770f, 0.989746f, 0.991699f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.997070f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000364f, 0.000486f, 0.000487f, 0.000562f, 0.000822f, 0.000967f,
+ 0.001213f, 0.001871f, 0.001803f, 0.002485f, 0.002796f, 0.003410f, 0.004242f, 0.005070f,
+ 0.006153f, 0.007698f, 0.009262f, 0.011635f, 0.014709f, 0.019104f, 0.024521f, 0.033295f,
+ 0.045746f, 0.065674f, 0.096741f, 0.150635f, 0.241455f, 0.380127f, 0.548828f, 0.698242f,
+ 0.802246f, 0.867188f, 0.906738f, 0.931152f, 0.948242f, 0.959473f, 0.967285f, 0.973633f,
+ 0.978516f, 0.981445f, 0.984375f, 0.986328f, 0.988281f, 0.989258f, 0.990723f, 0.992188f,
+ 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000350f, 0.000483f, 0.000486f, 0.000604f, 0.000743f, 0.001093f,
+ 0.001187f, 0.001297f, 0.001601f, 0.001921f, 0.002501f, 0.002922f, 0.003296f, 0.004200f,
+ 0.005211f, 0.006054f, 0.007603f, 0.008904f, 0.011169f, 0.014091f, 0.017685f, 0.023331f,
+ 0.030991f, 0.042358f, 0.059326f, 0.087646f, 0.134521f, 0.213867f, 0.341309f, 0.506348f,
+ 0.665039f, 0.780762f, 0.854492f, 0.899414f, 0.927246f, 0.945312f, 0.957520f, 0.966309f,
+ 0.973145f, 0.977539f, 0.981445f, 0.984375f, 0.986328f, 0.988770f, 0.989746f, 0.991211f,
+ 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000360f, 0.000485f, 0.000486f, 0.000487f, 0.000604f,
+ 0.000947f, 0.001201f, 0.001374f, 0.001715f, 0.002127f, 0.002239f, 0.002876f, 0.003426f,
+ 0.004063f, 0.005276f, 0.005810f, 0.006744f, 0.008713f, 0.010597f, 0.013680f, 0.016754f,
+ 0.021744f, 0.028778f, 0.039093f, 0.054901f, 0.079956f, 0.121399f, 0.191895f, 0.307861f,
+ 0.468262f, 0.633301f, 0.760742f, 0.842285f, 0.892090f, 0.923340f, 0.942383f, 0.956543f,
+ 0.965332f, 0.972168f, 0.977539f, 0.980469f, 0.983887f, 0.985840f, 0.988281f, 0.989746f,
+ 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000219f, 0.000474f, 0.000484f, 0.000486f, 0.000487f,
+ 0.000720f, 0.001108f, 0.001199f, 0.001209f, 0.001689f, 0.002253f, 0.002489f, 0.002916f,
+ 0.003714f, 0.004040f, 0.005054f, 0.006001f, 0.006737f, 0.008713f, 0.010376f, 0.012665f,
+ 0.016251f, 0.020615f, 0.027145f, 0.036499f, 0.050720f, 0.073181f, 0.110474f, 0.174072f,
+ 0.280518f, 0.434570f, 0.604980f, 0.742188f, 0.830566f, 0.885742f, 0.918945f, 0.940918f,
+ 0.954102f, 0.964355f, 0.971680f, 0.977051f, 0.980957f, 0.984375f, 0.986816f, 0.988281f,
+ 0.989746f, 0.990723f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000000f, 0.000120f, 0.000239f, 0.000319f, 0.000475f, 0.000484f, 0.000485f,
+ 0.000618f, 0.000844f, 0.001094f, 0.001201f, 0.001570f, 0.001782f, 0.002010f, 0.002407f,
+ 0.003046f, 0.003099f, 0.004208f, 0.004700f, 0.005882f, 0.006878f, 0.007980f, 0.009949f,
+ 0.012344f, 0.015358f, 0.019821f, 0.026047f, 0.034271f, 0.047455f, 0.067993f, 0.102112f,
+ 0.160034f, 0.258057f, 0.406494f, 0.578613f, 0.723633f, 0.820312f, 0.880371f, 0.916016f,
+ 0.938965f, 0.953125f, 0.963867f, 0.971191f, 0.976562f, 0.980469f, 0.983887f, 0.985840f,
+ 0.988770f, 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996582f, 0.999023f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000242f, 0.000455f, 0.000481f, 0.000583f,
+ 0.000601f, 0.000804f, 0.000912f, 0.001247f, 0.001319f, 0.001571f, 0.001793f, 0.002337f,
+ 0.002464f, 0.003099f, 0.003164f, 0.003809f, 0.004627f, 0.005764f, 0.006397f, 0.008118f,
+ 0.009605f, 0.011917f, 0.015083f, 0.018692f, 0.024384f, 0.032806f, 0.044983f, 0.063477f,
+ 0.095337f, 0.148560f, 0.240112f, 0.382324f, 0.556641f, 0.708984f, 0.812500f, 0.875488f,
+ 0.913574f, 0.937500f, 0.953125f, 0.963867f, 0.971191f, 0.977051f, 0.980957f, 0.983887f,
+ 0.986816f, 0.988281f, 0.990234f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995605f,
+ 0.995605f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000240f, 0.000242f, 0.000524f, 0.000597f,
+ 0.000604f, 0.000606f, 0.000674f, 0.001040f, 0.001238f, 0.001427f, 0.001637f, 0.001670f,
+ 0.002104f, 0.002432f, 0.002775f, 0.003416f, 0.003860f, 0.004482f, 0.005573f, 0.006374f,
+ 0.007828f, 0.009384f, 0.011635f, 0.014175f, 0.018219f, 0.023224f, 0.031052f, 0.042603f,
+ 0.060730f, 0.089661f, 0.139526f, 0.225464f, 0.363525f, 0.538574f, 0.696289f, 0.806152f,
+ 0.872559f, 0.912109f, 0.937012f, 0.952637f, 0.963867f, 0.971191f, 0.976562f, 0.981445f,
+ 0.984863f, 0.987305f, 0.988770f, 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995117f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000192f, 0.000240f, 0.000242f, 0.000535f,
+ 0.000478f, 0.000600f, 0.000843f, 0.000925f, 0.001027f, 0.001236f, 0.001502f, 0.001490f,
+ 0.001658f, 0.002256f, 0.002430f, 0.002880f, 0.003056f, 0.003983f, 0.004292f, 0.005333f,
+ 0.006264f, 0.007393f, 0.009064f, 0.011131f, 0.013741f, 0.017242f, 0.022690f, 0.029922f,
+ 0.040680f, 0.057831f, 0.085022f, 0.132446f, 0.214844f, 0.349121f, 0.524414f, 0.688477f,
+ 0.801758f, 0.871094f, 0.912109f, 0.937500f, 0.953125f, 0.964355f, 0.971680f, 0.977539f,
+ 0.981445f, 0.985352f, 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993652f, 0.994629f,
+ 0.995117f, 0.995605f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000232f, 0.000233f, 0.000363f,
+ 0.000457f, 0.000714f, 0.000724f, 0.000727f, 0.000847f, 0.000992f, 0.001177f, 0.001525f,
+ 0.001560f, 0.001740f, 0.002090f, 0.002329f, 0.002718f, 0.003372f, 0.003902f, 0.004307f,
+ 0.005184f, 0.005886f, 0.007446f, 0.008667f, 0.010574f, 0.013588f, 0.016556f, 0.021744f,
+ 0.028854f, 0.039124f, 0.055176f, 0.081726f, 0.127075f, 0.206421f, 0.338867f, 0.515625f,
+ 0.683105f, 0.800293f, 0.870605f, 0.912598f, 0.937500f, 0.954590f, 0.965332f, 0.973145f,
+ 0.978516f, 0.982422f, 0.985840f, 0.988281f, 0.989746f, 0.991211f, 0.992676f, 0.993652f,
+ 0.994141f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000103f, 0.000120f, 0.000240f, 0.000240f,
+ 0.000484f, 0.000574f, 0.000596f, 0.000837f, 0.000820f, 0.000859f, 0.000985f, 0.001070f,
+ 0.001509f, 0.001554f, 0.001785f, 0.002214f, 0.002476f, 0.002754f, 0.002991f, 0.003487f,
+ 0.004303f, 0.005074f, 0.005920f, 0.007126f, 0.008743f, 0.010361f, 0.013023f, 0.016403f,
+ 0.021011f, 0.027817f, 0.037811f, 0.053375f, 0.079041f, 0.123291f, 0.201172f, 0.333252f,
+ 0.511719f, 0.682129f, 0.801270f, 0.872070f, 0.914062f, 0.939941f, 0.955078f, 0.966309f,
+ 0.973633f, 0.979004f, 0.982910f, 0.986328f, 0.988770f, 0.990234f, 0.991699f, 0.992676f,
+ 0.993652f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000079f, 0.000053f, 0.000118f, 0.000418f,
+ 0.000358f, 0.000363f, 0.000678f, 0.000708f, 0.000825f, 0.000838f, 0.000878f, 0.001146f,
+ 0.000978f, 0.001483f, 0.001541f, 0.001769f, 0.001812f, 0.002434f, 0.002699f, 0.003225f,
+ 0.003298f, 0.004002f, 0.004948f, 0.005932f, 0.007084f, 0.008461f, 0.010414f, 0.012665f,
+ 0.015915f, 0.020615f, 0.027023f, 0.036743f, 0.051941f, 0.077332f, 0.120789f, 0.198608f,
+ 0.331543f, 0.512695f, 0.686523f, 0.805664f, 0.875488f, 0.917480f, 0.941406f, 0.957031f,
+ 0.968262f, 0.975098f, 0.980469f, 0.983887f, 0.986816f, 0.989258f, 0.990723f, 0.992188f,
+ 0.993164f, 0.994629f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000109f, 0.000232f, 0.000349f,
+ 0.000478f, 0.000483f, 0.000483f, 0.000609f, 0.000795f, 0.000835f, 0.000806f, 0.000726f,
+ 0.001022f, 0.001222f, 0.001442f, 0.001536f, 0.001650f, 0.001714f, 0.002377f, 0.002588f,
+ 0.003159f, 0.003643f, 0.004036f, 0.004929f, 0.005718f, 0.006813f, 0.008072f, 0.009880f,
+ 0.012527f, 0.015854f, 0.020035f, 0.026352f, 0.035950f, 0.051178f, 0.076416f, 0.119751f,
+ 0.198730f, 0.334229f, 0.519531f, 0.694824f, 0.812988f, 0.880859f, 0.920898f, 0.944336f,
+ 0.958984f, 0.969727f, 0.976562f, 0.980957f, 0.984863f, 0.987793f, 0.989746f, 0.991211f,
+ 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000068f, 0.000265f,
+ 0.000361f, 0.000478f, 0.000480f, 0.000479f, 0.000568f, 0.000693f, 0.000714f, 0.000806f,
+ 0.000843f, 0.000919f, 0.001222f, 0.001376f, 0.001531f, 0.001554f, 0.001987f, 0.002342f,
+ 0.002558f, 0.002798f, 0.003132f, 0.004021f, 0.004864f, 0.005455f, 0.006664f, 0.008110f,
+ 0.009613f, 0.011955f, 0.015335f, 0.019608f, 0.025879f, 0.035522f, 0.050629f, 0.075623f,
+ 0.120239f, 0.201416f, 0.342041f, 0.533203f, 0.707031f, 0.821777f, 0.887695f, 0.925293f,
+ 0.946777f, 0.961914f, 0.971680f, 0.977539f, 0.982422f, 0.985352f, 0.988281f, 0.989746f,
+ 0.992188f, 0.993164f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f,
+ 0.000322f, 0.000241f, 0.000478f, 0.000480f, 0.000480f, 0.000510f, 0.000695f, 0.000710f,
+ 0.000958f, 0.000765f, 0.001075f, 0.001116f, 0.001318f, 0.001606f, 0.001546f, 0.001916f,
+ 0.002306f, 0.002499f, 0.002905f, 0.003202f, 0.003914f, 0.004498f, 0.005459f, 0.006611f,
+ 0.007687f, 0.009331f, 0.011757f, 0.014923f, 0.019241f, 0.025833f, 0.035492f, 0.050507f,
+ 0.076233f, 0.122131f, 0.207153f, 0.355225f, 0.551758f, 0.724609f, 0.833496f, 0.894531f,
+ 0.930664f, 0.951660f, 0.964844f, 0.973145f, 0.979492f, 0.983887f, 0.986816f, 0.989258f,
+ 0.991211f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000351f, 0.000458f, 0.000476f, 0.000480f, 0.000482f, 0.000528f, 0.000650f,
+ 0.000704f, 0.000956f, 0.000828f, 0.000963f, 0.001111f, 0.001265f, 0.001474f, 0.001806f,
+ 0.001872f, 0.002308f, 0.002445f, 0.002701f, 0.003229f, 0.003851f, 0.004375f, 0.005356f,
+ 0.006317f, 0.007458f, 0.009300f, 0.011574f, 0.014725f, 0.019165f, 0.025696f, 0.035461f,
+ 0.050812f, 0.077637f, 0.125977f, 0.216797f, 0.374756f, 0.576660f, 0.745117f, 0.848145f,
+ 0.904785f, 0.936523f, 0.956055f, 0.967773f, 0.975586f, 0.980957f, 0.984863f, 0.987793f,
+ 0.990234f, 0.992188f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000292f, 0.000224f, 0.000452f, 0.000453f, 0.000479f, 0.000480f, 0.000517f,
+ 0.000614f, 0.000902f, 0.000712f, 0.000959f, 0.000978f, 0.001100f, 0.001276f, 0.001461f,
+ 0.001524f, 0.001651f, 0.002041f, 0.002350f, 0.002853f, 0.003433f, 0.003622f, 0.004166f,
+ 0.005043f, 0.006187f, 0.007534f, 0.009209f, 0.011551f, 0.014908f, 0.019012f, 0.025406f,
+ 0.035461f, 0.051575f, 0.079651f, 0.131714f, 0.230957f, 0.401367f, 0.607910f, 0.769531f,
+ 0.863281f, 0.914062f, 0.942871f, 0.959961f, 0.970703f, 0.978027f, 0.982910f, 0.986816f,
+ 0.988770f, 0.991699f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000238f, 0.000355f, 0.000449f, 0.000462f, 0.000474f, 0.000477f,
+ 0.000482f, 0.000846f, 0.000726f, 0.000706f, 0.000953f, 0.000889f, 0.001012f, 0.001259f,
+ 0.001390f, 0.001755f, 0.001658f, 0.002060f, 0.002369f, 0.002539f, 0.003170f, 0.003460f,
+ 0.004131f, 0.004993f, 0.006008f, 0.007431f, 0.009109f, 0.011444f, 0.014252f, 0.019058f,
+ 0.025574f, 0.036011f, 0.053162f, 0.083435f, 0.140381f, 0.250488f, 0.436035f, 0.645996f,
+ 0.795898f, 0.880371f, 0.924316f, 0.949219f, 0.963867f, 0.973145f, 0.980469f, 0.984863f,
+ 0.988281f, 0.990723f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000239f, 0.000306f, 0.000440f, 0.000437f, 0.000474f,
+ 0.000478f, 0.000481f, 0.000523f, 0.000664f, 0.000731f, 0.000802f, 0.000935f, 0.001022f,
+ 0.001173f, 0.001314f, 0.001504f, 0.001831f, 0.001984f, 0.002317f, 0.002472f, 0.003199f,
+ 0.003370f, 0.004189f, 0.004868f, 0.005924f, 0.007320f, 0.008926f, 0.011421f, 0.014595f,
+ 0.019119f, 0.026260f, 0.036987f, 0.055176f, 0.088440f, 0.152466f, 0.277832f, 0.479980f,
+ 0.686523f, 0.823242f, 0.895508f, 0.933105f, 0.955566f, 0.969238f, 0.976562f, 0.982422f,
+ 0.986816f, 0.989746f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000280f, 0.000417f, 0.000448f,
+ 0.000468f, 0.000476f, 0.000479f, 0.000490f, 0.000845f, 0.000688f, 0.000740f, 0.000945f,
+ 0.000998f, 0.001148f, 0.001266f, 0.001414f, 0.001475f, 0.001667f, 0.002262f, 0.002537f,
+ 0.003019f, 0.003288f, 0.004223f, 0.004768f, 0.005890f, 0.007259f, 0.009026f, 0.011360f,
+ 0.014297f, 0.019272f, 0.026474f, 0.038116f, 0.058197f, 0.095032f, 0.168945f, 0.313965f,
+ 0.533203f, 0.731445f, 0.850098f, 0.911133f, 0.942871f, 0.961914f, 0.972656f, 0.979980f,
+ 0.984863f, 0.988770f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000187f, 0.000233f, 0.000141f, 0.000271f, 0.000341f,
+ 0.000380f, 0.000465f, 0.000473f, 0.000590f, 0.000605f, 0.000798f, 0.000847f, 0.000934f,
+ 0.000946f, 0.000836f, 0.001009f, 0.001142f, 0.001430f, 0.001495f, 0.001850f, 0.002111f,
+ 0.002541f, 0.003035f, 0.003300f, 0.004139f, 0.004913f, 0.005718f, 0.007141f, 0.008934f,
+ 0.011475f, 0.014832f, 0.019653f, 0.027573f, 0.039917f, 0.062225f, 0.104919f, 0.192017f,
+ 0.362305f, 0.594238f, 0.775879f, 0.875977f, 0.925293f, 0.952148f, 0.967773f, 0.977051f,
+ 0.983398f, 0.988281f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f, 0.000243f,
+ 0.000238f, 0.000424f, 0.000453f, 0.000467f, 0.000475f, 0.000581f, 0.000689f, 0.000795f,
+ 0.000634f, 0.000823f, 0.001014f, 0.000900f, 0.001083f, 0.001485f, 0.001731f, 0.001851f,
+ 0.002056f, 0.002373f, 0.002621f, 0.003445f, 0.004082f, 0.004578f, 0.005821f, 0.007217f,
+ 0.008881f, 0.011330f, 0.014778f, 0.020416f, 0.028473f, 0.042419f, 0.067993f, 0.118286f,
+ 0.225342f, 0.425293f, 0.661621f, 0.818848f, 0.899902f, 0.939453f, 0.960449f, 0.973145f,
+ 0.980957f, 0.985840f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000224f, 0.000122f,
+ 0.000231f, 0.000245f, 0.000411f, 0.000520f, 0.000463f, 0.000470f, 0.000587f, 0.000361f,
+ 0.000712f, 0.000694f, 0.000815f, 0.000978f, 0.001055f, 0.001105f, 0.001390f, 0.001438f,
+ 0.001705f, 0.001984f, 0.002333f, 0.002546f, 0.003408f, 0.003876f, 0.004627f, 0.005783f,
+ 0.007198f, 0.008995f, 0.011383f, 0.015396f, 0.020828f, 0.030029f, 0.045654f, 0.075439f,
+ 0.137451f, 0.271973f, 0.503418f, 0.728516f, 0.857910f, 0.920410f, 0.951172f, 0.968262f,
+ 0.977539f, 0.984375f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000173f, 0.000150f, 0.000278f, 0.000376f, 0.000427f, 0.000470f, 0.000352f, 0.000356f,
+ 0.000475f, 0.000441f, 0.000709f, 0.000774f, 0.000970f, 0.001013f, 0.000998f, 0.001193f,
+ 0.001397f, 0.001677f, 0.001957f, 0.002268f, 0.002529f, 0.003353f, 0.003874f, 0.004555f,
+ 0.005692f, 0.007160f, 0.008987f, 0.011543f, 0.015732f, 0.021896f, 0.032135f, 0.050140f,
+ 0.086548f, 0.165894f, 0.337646f, 0.593750f, 0.791504f, 0.892090f, 0.938477f, 0.961914f,
+ 0.974609f, 0.982422f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995605f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000187f, 0.000130f, 0.000231f, 0.000315f, 0.000298f, 0.000332f, 0.000343f,
+ 0.000465f, 0.000472f, 0.000579f, 0.000717f, 0.000839f, 0.000932f, 0.000817f, 0.001086f,
+ 0.001090f, 0.001545f, 0.001735f, 0.001837f, 0.002485f, 0.002493f, 0.003288f, 0.003828f,
+ 0.004520f, 0.005833f, 0.007156f, 0.009193f, 0.012123f, 0.015839f, 0.022934f, 0.034760f,
+ 0.056488f, 0.102600f, 0.208862f, 0.427734f, 0.687988f, 0.846191f, 0.919434f, 0.952637f,
+ 0.969727f, 0.979980f, 0.993652f, 0.994629f, 0.994141f, 0.994629f, 0.994629f, 0.994629f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000133f, 0.000141f, 0.000234f, 0.000300f, 0.000397f,
+ 0.000436f, 0.000456f, 0.000465f, 0.000534f, 0.000663f, 0.000810f, 0.000796f, 0.000812f,
+ 0.001062f, 0.001237f, 0.001428f, 0.001565f, 0.001818f, 0.002182f, 0.002783f, 0.002943f,
+ 0.003773f, 0.004715f, 0.005482f, 0.007195f, 0.009285f, 0.012207f, 0.016922f, 0.024567f,
+ 0.038483f, 0.066101f, 0.127563f, 0.274170f, 0.540527f, 0.774414f, 0.891113f, 0.940430f,
+ 0.965332f, 0.977539f, 0.993652f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994141f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000124f, 0.000116f, 0.000119f, 0.000125f, 0.000121f, 0.000197f,
+ 0.000323f, 0.000418f, 0.000446f, 0.000433f, 0.000467f, 0.000612f, 0.000710f, 0.000783f,
+ 0.000911f, 0.000817f, 0.001161f, 0.001343f, 0.001514f, 0.001707f, 0.002081f, 0.002386f,
+ 0.002882f, 0.003609f, 0.004627f, 0.005478f, 0.007011f, 0.009384f, 0.012695f, 0.017960f,
+ 0.026901f, 0.044067f, 0.080078f, 0.167114f, 0.374023f, 0.664062f, 0.845703f, 0.923340f,
+ 0.957031f, 0.974121f, 0.992676f, 0.993652f, 0.993164f, 0.993652f, 0.993652f, 0.993164f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000121f, 0.000121f, 0.000052f, 0.000039f, 0.000029f, 0.000054f, 0.000045f, 0.000118f,
+ 0.000128f, 0.000231f, 0.000387f, 0.000429f, 0.000446f, 0.000544f, 0.000539f, 0.000648f,
+ 0.000749f, 0.000790f, 0.000978f, 0.001102f, 0.001195f, 0.001501f, 0.001761f, 0.001978f,
+ 0.002661f, 0.003170f, 0.003519f, 0.004509f, 0.005344f, 0.007004f, 0.009361f, 0.013229f,
+ 0.019196f, 0.030258f, 0.052002f, 0.102661f, 0.234131f, 0.511230f, 0.774902f, 0.898438f,
+ 0.947754f, 0.970215f, 0.992188f, 0.992676f, 0.993164f, 0.992676f, 0.992188f, 0.992188f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000070f, 0.000052f, 0.000038f, 0.000030f, 0.000023f, 0.000060f,
+ 0.000116f, 0.000121f, 0.000252f, 0.000337f, 0.000306f, 0.000435f, 0.000450f, 0.000562f,
+ 0.000584f, 0.000722f, 0.000858f, 0.000888f, 0.000969f, 0.001230f, 0.001429f, 0.001576f,
+ 0.001827f, 0.002361f, 0.002863f, 0.003267f, 0.004047f, 0.005394f, 0.007256f, 0.009781f,
+ 0.013855f, 0.021439f, 0.035034f, 0.065063f, 0.141724f, 0.346680f, 0.665527f, 0.859375f,
+ 0.934570f, 0.965820f, 0.991699f, 0.991699f, 0.991699f, 0.992188f, 0.991699f, 0.991699f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000099f, 0.000069f, 0.000051f, 0.000039f, 0.000030f, 0.000023f,
+ 0.000024f, 0.000115f, 0.000103f, 0.000224f, 0.000204f, 0.000339f, 0.000407f, 0.000437f,
+ 0.000452f, 0.000489f, 0.000663f, 0.000821f, 0.000922f, 0.001004f, 0.001086f, 0.001279f,
+ 0.001554f, 0.001651f, 0.001997f, 0.002390f, 0.003136f, 0.004223f, 0.005508f, 0.007339f,
+ 0.010094f, 0.014854f, 0.024048f, 0.042664f, 0.087036f, 0.213867f, 0.516113f, 0.799805f,
+ 0.915527f, 0.958984f, 0.990723f, 0.991211f, 0.990723f, 0.990723f, 0.990723f, 0.991211f,
+ 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000096f, 0.000073f, 0.000053f, 0.000040f, 0.000031f,
+ 0.000025f, 0.000020f, 0.000017f, 0.000105f, 0.000110f, 0.000135f, 0.000235f, 0.000380f,
+ 0.000462f, 0.000513f, 0.000556f, 0.000638f, 0.000804f, 0.000868f, 0.000897f, 0.001002f,
+ 0.001079f, 0.001246f, 0.001596f, 0.002153f, 0.002213f, 0.003094f, 0.004158f, 0.005306f,
+ 0.007458f, 0.010887f, 0.017166f, 0.028748f, 0.055176f, 0.128174f, 0.350586f, 0.703613f,
+ 0.888184f, 0.951172f, 0.988770f, 0.989746f, 0.989746f, 0.989746f, 0.989746f, 0.989746f,
+ 0.000122f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000101f, 0.000073f, 0.000057f, 0.000043f,
+ 0.000033f, 0.000027f, 0.000021f, 0.000018f, 0.000105f, 0.000112f, 0.000111f, 0.000161f,
+ 0.000320f, 0.000390f, 0.000421f, 0.000438f, 0.000559f, 0.000665f, 0.000735f, 0.000719f,
+ 0.000704f, 0.000887f, 0.001223f, 0.001384f, 0.001867f, 0.002462f, 0.003216f, 0.004032f,
+ 0.005367f, 0.007988f, 0.012054f, 0.019943f, 0.035919f, 0.078064f, 0.215332f, 0.566895f,
+ 0.845703f, 0.939941f, 0.987793f, 0.988281f, 0.987793f, 0.987793f, 0.988281f, 0.988281f,
+ 0.000000f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000103f, 0.000077f, 0.000061f,
+ 0.000046f, 0.000037f, 0.000030f, 0.000023f, 0.000019f, 0.000016f, 0.000039f, 0.000094f,
+ 0.000181f, 0.000205f, 0.000350f, 0.000392f, 0.000423f, 0.000510f, 0.000619f, 0.000672f,
+ 0.000705f, 0.000632f, 0.000807f, 0.001038f, 0.001278f, 0.001894f, 0.002245f, 0.002758f,
+ 0.003883f, 0.005863f, 0.008636f, 0.013672f, 0.023880f, 0.048828f, 0.127441f, 0.400879f,
+ 0.779297f, 0.925781f, 0.985840f, 0.986328f, 0.986328f, 0.985840f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000100f, 0.000108f, 0.000118f, 0.000119f, 0.000118f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000111f, 0.000086f,
+ 0.000066f, 0.000051f, 0.000041f, 0.000032f, 0.000026f, 0.000021f, 0.000018f, 0.000015f,
+ 0.000086f, 0.000131f, 0.000190f, 0.000293f, 0.000419f, 0.000481f, 0.000477f, 0.000438f,
+ 0.000542f, 0.000564f, 0.000599f, 0.000700f, 0.000916f, 0.001122f, 0.001589f, 0.001997f,
+ 0.002678f, 0.004017f, 0.005814f, 0.009361f, 0.015808f, 0.031250f, 0.075989f, 0.250732f,
+ 0.676758f, 0.904297f, 0.983887f, 0.983887f, 0.983887f, 0.984375f, 0.984375f, 0.983887f,
+ 0.000000f, 0.000000f, 0.000077f, 0.000112f, 0.000104f, 0.000115f, 0.000115f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000119f, 0.000118f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000097f, 0.000076f, 0.000060f, 0.000046f, 0.000037f, 0.000030f, 0.000024f, 0.000020f,
+ 0.000045f, 0.000063f, 0.000091f, 0.000140f, 0.000202f, 0.000333f, 0.000305f, 0.000399f,
+ 0.000462f, 0.000452f, 0.000535f, 0.000531f, 0.000631f, 0.000866f, 0.000858f, 0.001307f,
+ 0.001844f, 0.002823f, 0.004070f, 0.006264f, 0.010536f, 0.020035f, 0.045990f, 0.145996f,
+ 0.532227f, 0.874023f, 0.980957f, 0.981445f, 0.980957f, 0.981445f, 0.980957f, 0.981445f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000091f, 0.000103f, 0.000105f, 0.000106f,
+ 0.000111f, 0.000113f, 0.000115f, 0.000114f, 0.000116f, 0.000116f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000118f,
+ 0.000118f, 0.000112f, 0.000084f, 0.000069f, 0.000055f, 0.000043f, 0.000036f, 0.000028f,
+ 0.000024f, 0.000020f, 0.000028f, 0.000039f, 0.000083f, 0.000141f, 0.000211f, 0.000262f,
+ 0.000413f, 0.000305f, 0.000370f, 0.000358f, 0.000489f, 0.000564f, 0.000599f, 0.000893f,
+ 0.001084f, 0.001696f, 0.002697f, 0.004074f, 0.006836f, 0.012878f, 0.028122f, 0.083496f,
+ 0.364014f, 0.826660f, 0.976562f, 0.977539f, 0.977051f, 0.977539f, 0.978027f, 0.977051f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000015f, 0.000086f,
+ 0.000077f, 0.000103f, 0.000100f, 0.000109f, 0.000110f, 0.000111f, 0.000112f, 0.000112f,
+ 0.000114f, 0.000114f, 0.000115f, 0.000115f, 0.000116f, 0.000115f, 0.000116f, 0.000116f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000100f, 0.000079f, 0.000066f, 0.000053f, 0.000041f,
+ 0.000035f, 0.000028f, 0.000023f, 0.000019f, 0.000017f, 0.000034f, 0.000113f, 0.000174f,
+ 0.000257f, 0.000325f, 0.000356f, 0.000324f, 0.000409f, 0.000454f, 0.000474f, 0.000659f,
+ 0.000778f, 0.001243f, 0.001575f, 0.002472f, 0.004105f, 0.007957f, 0.016800f, 0.047852f,
+ 0.217529f, 0.755371f, 0.972656f, 0.973145f, 0.973145f, 0.973145f, 0.973145f, 0.973145f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000028f, 0.000049f, 0.000085f, 0.000081f, 0.000096f, 0.000101f, 0.000104f,
+ 0.000106f, 0.000108f, 0.000109f, 0.000110f, 0.000111f, 0.000112f, 0.000113f, 0.000113f,
+ 0.000114f, 0.000114f, 0.000114f, 0.000115f, 0.000115f, 0.000096f, 0.000078f, 0.000064f,
+ 0.000051f, 0.000043f, 0.000035f, 0.000029f, 0.000024f, 0.000020f, 0.000026f, 0.000055f,
+ 0.000087f, 0.000135f, 0.000248f, 0.000261f, 0.000274f, 0.000258f, 0.000296f, 0.000359f,
+ 0.000474f, 0.000627f, 0.001012f, 0.001484f, 0.002630f, 0.004536f, 0.010277f, 0.027405f,
+ 0.119507f, 0.645996f, 0.966797f, 0.967285f, 0.967285f, 0.967285f, 0.966797f, 0.966797f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000021f, 0.000065f, 0.000074f,
+ 0.000077f, 0.000091f, 0.000091f, 0.000099f, 0.000098f, 0.000103f, 0.000103f, 0.000106f,
+ 0.000107f, 0.000108f, 0.000109f, 0.000110f, 0.000111f, 0.000111f, 0.000112f, 0.000096f,
+ 0.000079f, 0.000064f, 0.000053f, 0.000043f, 0.000036f, 0.000030f, 0.000024f, 0.000021f,
+ 0.000018f, 0.000028f, 0.000072f, 0.000125f, 0.000233f, 0.000243f, 0.000220f, 0.000258f,
+ 0.000320f, 0.000353f, 0.000630f, 0.000932f, 0.001324f, 0.002357f, 0.005402f, 0.014534f,
+ 0.062561f, 0.493164f, 0.958008f, 0.958008f, 0.958984f, 0.958496f, 0.958496f, 0.958008f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000011f, 0.000035f, 0.000041f, 0.000064f, 0.000074f, 0.000081f, 0.000082f, 0.000090f,
+ 0.000092f, 0.000096f, 0.000099f, 0.000100f, 0.000102f, 0.000104f, 0.000105f, 0.000106f,
+ 0.000107f, 0.000099f, 0.000082f, 0.000067f, 0.000055f, 0.000047f, 0.000038f, 0.000031f,
+ 0.000026f, 0.000022f, 0.000018f, 0.000037f, 0.000071f, 0.000111f, 0.000190f, 0.000204f,
+ 0.000153f, 0.000245f, 0.000299f, 0.000482f, 0.000790f, 0.001330f, 0.002619f, 0.007282f,
+ 0.031097f, 0.318115f, 0.946289f, 0.946777f, 0.946777f, 0.946777f, 0.946777f, 0.946777f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000008f, 0.000029f, 0.000044f,
+ 0.000055f, 0.000063f, 0.000073f, 0.000075f, 0.000081f, 0.000087f, 0.000090f, 0.000092f,
+ 0.000094f, 0.000097f, 0.000099f, 0.000100f, 0.000087f, 0.000071f, 0.000059f, 0.000049f,
+ 0.000040f, 0.000034f, 0.000028f, 0.000024f, 0.000020f, 0.000016f, 0.000072f, 0.000114f,
+ 0.000169f, 0.000147f, 0.000181f, 0.000246f, 0.000367f, 0.000626f, 0.001325f, 0.003117f,
+ 0.013741f, 0.167480f, 0.929688f, 0.929688f, 0.929688f, 0.930176f, 0.930664f, 0.930176f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000019f, 0.000030f, 0.000044f, 0.000049f, 0.000062f,
+ 0.000068f, 0.000072f, 0.000078f, 0.000081f, 0.000084f, 0.000087f, 0.000090f, 0.000079f,
+ 0.000065f, 0.000054f, 0.000044f, 0.000037f, 0.000030f, 0.000025f, 0.000021f, 0.000017f,
+ 0.000052f, 0.000100f, 0.000132f, 0.000130f, 0.000164f, 0.000297f, 0.000552f, 0.001273f,
+ 0.005009f, 0.071594f, 0.903809f, 0.905273f, 0.904297f, 0.904785f, 0.904785f, 0.904785f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000013f, 0.000028f, 0.000036f, 0.000045f, 0.000053f, 0.000060f, 0.000066f,
+ 0.000071f, 0.000075f, 0.000071f, 0.000058f, 0.000049f, 0.000040f, 0.000033f, 0.000027f,
+ 0.000022f, 0.000018f, 0.000032f, 0.000078f, 0.000090f, 0.000123f, 0.000175f, 0.000441f,
+ 0.001637f, 0.022537f, 0.865234f, 0.865234f, 0.865723f, 0.865723f, 0.865234f, 0.864746f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f,
+ 0.000017f, 0.000027f, 0.000036f, 0.000042f, 0.000050f, 0.000056f, 0.000052f, 0.000043f,
+ 0.000035f, 0.000028f, 0.000022f, 0.000018f, 0.000049f, 0.000055f, 0.000047f, 0.000108f,
+ 0.000342f, 0.004566f, 0.802734f, 0.803711f, 0.803711f, 0.803711f, 0.803711f, 0.803711f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f,
+ 0.000022f, 0.000030f, 0.000033f, 0.000027f, 0.000021f, 0.000015f, 0.000011f, 0.000031f,
+ 0.000045f, 0.000449f, 0.708496f, 0.707520f, 0.708984f, 0.708496f, 0.707520f, 0.708008f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000011f,
+ 0.000006f, 0.000007f, 0.575195f, 0.575195f, 0.575195f, 0.575195f, 0.575195f, 0.575195f,
+ },
+ {
+ 0.158813f, 0.632812f, 0.824219f, 0.891602f, 0.924805f, 0.942383f, 0.954102f, 0.962402f,
+ 0.968262f, 0.972656f, 0.976074f, 0.978516f, 0.980957f, 0.982910f, 0.984375f, 0.985840f,
+ 0.986816f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
+ 0.993652f, 0.993652f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f,
+ 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.019775f, 0.115845f, 0.361084f, 0.642578f, 0.798340f, 0.872559f, 0.911133f, 0.933594f,
+ 0.947266f, 0.957031f, 0.964355f, 0.968750f, 0.973145f, 0.976562f, 0.979492f, 0.981934f,
+ 0.983398f, 0.984863f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.990234f, 0.991211f,
+ 0.991699f, 0.992676f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995117f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.006638f, 0.031082f, 0.089661f, 0.222168f, 0.448242f, 0.663086f, 0.794434f, 0.864258f,
+ 0.903320f, 0.926758f, 0.942383f, 0.953613f, 0.961426f, 0.966797f, 0.972168f, 0.975586f,
+ 0.978027f, 0.980469f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989258f,
+ 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.003246f, 0.013367f, 0.032806f, 0.072754f, 0.152954f, 0.304199f, 0.509766f, 0.687500f,
+ 0.797852f, 0.862305f, 0.900391f, 0.923828f, 0.940430f, 0.950684f, 0.959473f, 0.965820f,
+ 0.970703f, 0.974121f, 0.977051f, 0.979492f, 0.981934f, 0.983887f, 0.985840f, 0.987305f,
+ 0.987793f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992188f, 0.993164f,
+ 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f,
+ 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.002029f, 0.007267f, 0.016678f, 0.032288f, 0.061462f, 0.115051f, 0.215088f, 0.376709f,
+ 0.562988f, 0.712891f, 0.807617f, 0.865234f, 0.901367f, 0.923828f, 0.939453f, 0.950684f,
+ 0.958984f, 0.965332f, 0.970215f, 0.974609f, 0.977051f, 0.979980f, 0.981934f, 0.983887f,
+ 0.984863f, 0.986328f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.990723f, 0.991699f,
+ 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001274f, 0.004623f, 0.009880f, 0.017792f, 0.030869f, 0.052673f, 0.091431f, 0.160645f,
+ 0.277832f, 0.442383f, 0.610352f, 0.737793f, 0.819824f, 0.870605f, 0.902832f, 0.924805f,
+ 0.939941f, 0.950195f, 0.958496f, 0.964844f, 0.970215f, 0.973633f, 0.977051f, 0.979980f,
+ 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990723f,
+ 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000943f, 0.003231f, 0.006317f, 0.011040f, 0.018051f, 0.029190f, 0.046936f, 0.075867f,
+ 0.125488f, 0.210449f, 0.341797f, 0.503906f, 0.652344f, 0.761230f, 0.832031f, 0.877441f,
+ 0.906738f, 0.927734f, 0.940918f, 0.951172f, 0.959473f, 0.965820f, 0.970703f, 0.974121f,
+ 0.977051f, 0.979492f, 0.981934f, 0.983398f, 0.985352f, 0.987305f, 0.988281f, 0.989258f,
+ 0.990234f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998535f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000731f, 0.001970f, 0.004425f, 0.007351f, 0.011627f, 0.017975f, 0.027161f, 0.041779f,
+ 0.064270f, 0.101685f, 0.164917f, 0.265137f, 0.406494f, 0.561035f, 0.692383f, 0.785156f,
+ 0.845703f, 0.884766f, 0.911621f, 0.930176f, 0.942871f, 0.953125f, 0.959961f, 0.965332f,
+ 0.970703f, 0.974121f, 0.977539f, 0.979492f, 0.982422f, 0.983887f, 0.985840f, 0.987305f,
+ 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f,
+ 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000487f, 0.001872f, 0.003445f, 0.005367f, 0.008400f, 0.012405f, 0.017822f, 0.025345f,
+ 0.037964f, 0.056244f, 0.085327f, 0.132935f, 0.210327f, 0.325928f, 0.471924f, 0.615723f,
+ 0.729004f, 0.807617f, 0.859375f, 0.894043f, 0.916504f, 0.934570f, 0.945801f, 0.955078f,
+ 0.961426f, 0.967285f, 0.972168f, 0.975586f, 0.978516f, 0.980957f, 0.982422f, 0.984863f,
+ 0.985840f, 0.986816f, 0.988770f, 0.989258f, 0.990723f, 0.991699f, 0.992188f, 0.992676f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996094f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.000363f, 0.001300f, 0.002499f, 0.003784f, 0.006153f, 0.008896f, 0.012367f, 0.017227f,
+ 0.024185f, 0.034241f, 0.049591f, 0.072754f, 0.111023f, 0.170776f, 0.263184f, 0.391113f,
+ 0.535645f, 0.665527f, 0.761719f, 0.828613f, 0.871582f, 0.902344f, 0.922852f, 0.937988f,
+ 0.949219f, 0.957031f, 0.963867f, 0.968750f, 0.972656f, 0.976074f, 0.979004f, 0.981445f,
+ 0.983887f, 0.984863f, 0.986328f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.991699f,
+ 0.992676f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f,
+ 0.000365f, 0.000972f, 0.001874f, 0.003323f, 0.004669f, 0.006599f, 0.008919f, 0.012360f,
+ 0.016785f, 0.022720f, 0.031616f, 0.044647f, 0.064026f, 0.094055f, 0.141235f, 0.215332f,
+ 0.323486f, 0.459229f, 0.597168f, 0.710449f, 0.791992f, 0.847656f, 0.885254f, 0.910645f,
+ 0.929199f, 0.941895f, 0.952148f, 0.960449f, 0.965332f, 0.970703f, 0.974121f, 0.977539f,
+ 0.979980f, 0.981934f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.989746f, 0.990723f,
+ 0.991211f, 0.992188f, 0.993164f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999023f,
+ 0.000244f, 0.000764f, 0.001375f, 0.002415f, 0.003582f, 0.004963f, 0.006973f, 0.008751f,
+ 0.011726f, 0.016113f, 0.021683f, 0.029129f, 0.040283f, 0.057098f, 0.081421f, 0.119019f,
+ 0.178955f, 0.268311f, 0.390625f, 0.528809f, 0.654785f, 0.751465f, 0.820312f, 0.866211f,
+ 0.896973f, 0.919434f, 0.935547f, 0.946777f, 0.956055f, 0.962402f, 0.968262f, 0.972168f,
+ 0.975098f, 0.979004f, 0.981445f, 0.983398f, 0.985352f, 0.986816f, 0.987793f, 0.989258f,
+ 0.990723f, 0.991211f, 0.992188f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000122f, 0.000606f, 0.001439f, 0.002058f, 0.002743f, 0.004169f, 0.005035f, 0.006775f,
+ 0.009010f, 0.012085f, 0.015717f, 0.020813f, 0.027573f, 0.037170f, 0.050812f, 0.071472f,
+ 0.102905f, 0.151489f, 0.225708f, 0.332031f, 0.463623f, 0.596191f, 0.707031f, 0.787598f,
+ 0.844238f, 0.881348f, 0.908691f, 0.927246f, 0.940918f, 0.951660f, 0.958984f, 0.965820f,
+ 0.970215f, 0.974121f, 0.977539f, 0.979980f, 0.982422f, 0.984375f, 0.985840f, 0.987305f,
+ 0.988281f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000118f, 0.000846f, 0.001303f, 0.001593f, 0.002180f, 0.003050f, 0.004353f, 0.005577f,
+ 0.006954f, 0.009331f, 0.011826f, 0.015007f, 0.019653f, 0.025391f, 0.034119f, 0.046112f,
+ 0.063660f, 0.090210f, 0.130737f, 0.192139f, 0.283203f, 0.404053f, 0.537598f, 0.658691f,
+ 0.753418f, 0.818848f, 0.865234f, 0.896973f, 0.918945f, 0.934570f, 0.946289f, 0.955566f,
+ 0.962402f, 0.967285f, 0.972168f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.985840f,
+ 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992676f, 0.993164f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000117f, 0.000487f, 0.000957f, 0.001514f, 0.002008f, 0.002619f, 0.003424f, 0.004551f,
+ 0.005836f, 0.007381f, 0.009155f, 0.011459f, 0.014366f, 0.018646f, 0.024017f, 0.031281f,
+ 0.042664f, 0.057068f, 0.080139f, 0.113586f, 0.165894f, 0.243164f, 0.352051f, 0.481934f,
+ 0.610840f, 0.716309f, 0.793945f, 0.847168f, 0.884766f, 0.910645f, 0.928223f, 0.942383f,
+ 0.952637f, 0.959961f, 0.965332f, 0.970703f, 0.975098f, 0.978027f, 0.980957f, 0.983398f,
+ 0.984863f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992188f, 0.992676f,
+ 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
+ 0.997559f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000608f, 0.000952f, 0.001111f, 0.001660f, 0.002102f, 0.002817f, 0.003517f,
+ 0.004742f, 0.005585f, 0.007080f, 0.008980f, 0.011078f, 0.014191f, 0.017838f, 0.022614f,
+ 0.029404f, 0.038940f, 0.052551f, 0.071533f, 0.100769f, 0.145020f, 0.211548f, 0.307373f,
+ 0.430176f, 0.561523f, 0.676758f, 0.764648f, 0.828613f, 0.872070f, 0.900879f, 0.921875f,
+ 0.937012f, 0.948730f, 0.957520f, 0.964355f, 0.969238f, 0.973633f, 0.977539f, 0.979980f,
+ 0.982422f, 0.984863f, 0.986328f, 0.987793f, 0.988770f, 0.990234f, 0.991211f, 0.991699f,
+ 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000244f, 0.000576f, 0.000727f, 0.001083f, 0.001186f, 0.001810f, 0.002558f, 0.002968f,
+ 0.003725f, 0.004913f, 0.005955f, 0.007011f, 0.008759f, 0.010918f, 0.013718f, 0.016953f,
+ 0.021423f, 0.027832f, 0.035980f, 0.047913f, 0.064941f, 0.090332f, 0.128174f, 0.185791f,
+ 0.270264f, 0.384033f, 0.514160f, 0.638184f, 0.736328f, 0.807617f, 0.856934f, 0.891602f,
+ 0.915039f, 0.932617f, 0.945801f, 0.954102f, 0.962402f, 0.968262f, 0.972168f, 0.976562f,
+ 0.979492f, 0.981445f, 0.983887f, 0.985840f, 0.987305f, 0.988281f, 0.990234f, 0.990723f,
+ 0.992188f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000000f, 0.000244f, 0.000708f, 0.000903f, 0.001129f, 0.001511f, 0.002031f, 0.002565f,
+ 0.003189f, 0.004112f, 0.004696f, 0.005989f, 0.006954f, 0.008865f, 0.010826f, 0.013031f,
+ 0.016312f, 0.020493f, 0.026154f, 0.033966f, 0.044159f, 0.059845f, 0.081665f, 0.114929f,
+ 0.164917f, 0.239624f, 0.343750f, 0.469971f, 0.598145f, 0.706055f, 0.786133f, 0.842773f,
+ 0.881348f, 0.908203f, 0.927246f, 0.941895f, 0.952148f, 0.959961f, 0.966797f, 0.971191f,
+ 0.976074f, 0.978516f, 0.981445f, 0.983887f, 0.985352f, 0.987305f, 0.988281f, 0.989258f,
+ 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996094f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000122f, 0.000244f, 0.000482f, 0.000674f, 0.001029f, 0.001440f, 0.001746f, 0.002153f,
+ 0.002804f, 0.003206f, 0.003859f, 0.004948f, 0.005722f, 0.007206f, 0.008568f, 0.010498f,
+ 0.012413f, 0.015793f, 0.019989f, 0.024826f, 0.031799f, 0.041382f, 0.054932f, 0.074768f,
+ 0.103882f, 0.147949f, 0.213867f, 0.308838f, 0.429932f, 0.560059f, 0.675781f, 0.765625f,
+ 0.827148f, 0.871582f, 0.901367f, 0.923340f, 0.937988f, 0.949707f, 0.958496f, 0.965820f,
+ 0.969727f, 0.974609f, 0.978027f, 0.980469f, 0.983398f, 0.985840f, 0.986816f, 0.988281f,
+ 0.989258f, 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.000244f, 0.000363f, 0.000604f, 0.000834f, 0.001020f, 0.001548f, 0.001970f,
+ 0.002262f, 0.002548f, 0.003157f, 0.003914f, 0.004681f, 0.005962f, 0.006943f, 0.008263f,
+ 0.010277f, 0.012589f, 0.015144f, 0.018951f, 0.023788f, 0.030014f, 0.039001f, 0.051056f,
+ 0.069092f, 0.094666f, 0.133911f, 0.192993f, 0.279053f, 0.394287f, 0.524414f, 0.646484f,
+ 0.743652f, 0.812988f, 0.861328f, 0.895020f, 0.917969f, 0.935547f, 0.947754f, 0.957520f,
+ 0.963867f, 0.969238f, 0.974121f, 0.978027f, 0.980469f, 0.983398f, 0.984863f, 0.987305f,
+ 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f,
+ 0.995117f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000118f, 0.000244f, 0.000244f, 0.000584f, 0.000837f, 0.000847f, 0.001295f, 0.001681f,
+ 0.002018f, 0.002348f, 0.003014f, 0.003157f, 0.004124f, 0.004547f, 0.005432f, 0.006607f,
+ 0.008163f, 0.010071f, 0.011925f, 0.014786f, 0.017990f, 0.022659f, 0.028824f, 0.036621f,
+ 0.047882f, 0.063477f, 0.087158f, 0.122559f, 0.175781f, 0.254639f, 0.363037f, 0.492188f,
+ 0.618652f, 0.722168f, 0.799805f, 0.852051f, 0.889648f, 0.914551f, 0.932129f, 0.944824f,
+ 0.955078f, 0.962891f, 0.968262f, 0.973633f, 0.977051f, 0.980469f, 0.982910f, 0.984863f,
+ 0.987305f, 0.988281f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f,
+ 0.995117f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000242f, 0.000243f, 0.000243f, 0.000481f, 0.000742f, 0.000843f, 0.000969f, 0.001348f,
+ 0.001726f, 0.001791f, 0.002348f, 0.002853f, 0.003452f, 0.003735f, 0.004757f, 0.005516f,
+ 0.006744f, 0.008102f, 0.009621f, 0.011948f, 0.014320f, 0.017365f, 0.021698f, 0.027298f,
+ 0.034546f, 0.044891f, 0.059875f, 0.081055f, 0.112915f, 0.161255f, 0.234009f, 0.335693f,
+ 0.462646f, 0.592285f, 0.702637f, 0.785645f, 0.843750f, 0.883301f, 0.911133f, 0.929688f,
+ 0.944336f, 0.954590f, 0.961914f, 0.967773f, 0.973633f, 0.977539f, 0.980469f, 0.982910f,
+ 0.985352f, 0.986816f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994629f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000100f, 0.000216f, 0.000243f, 0.000365f, 0.000517f, 0.000836f, 0.000964f, 0.001148f,
+ 0.001472f, 0.001674f, 0.001785f, 0.002438f, 0.002815f, 0.003490f, 0.004070f, 0.004837f,
+ 0.005608f, 0.006630f, 0.008095f, 0.009483f, 0.011551f, 0.013847f, 0.016953f, 0.020584f,
+ 0.025879f, 0.033051f, 0.042664f, 0.055817f, 0.075500f, 0.105103f, 0.149536f, 0.216553f,
+ 0.312988f, 0.436768f, 0.568359f, 0.685059f, 0.773926f, 0.835449f, 0.878418f, 0.907227f,
+ 0.927734f, 0.943359f, 0.953125f, 0.962402f, 0.967285f, 0.973145f, 0.977051f, 0.980469f,
+ 0.983887f, 0.985352f, 0.987305f, 0.989258f, 0.990234f, 0.991699f, 0.992188f, 0.993164f,
+ 0.994141f, 0.994629f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000150f, 0.000242f, 0.000364f, 0.000441f, 0.000627f, 0.000916f, 0.000959f,
+ 0.000968f, 0.001463f, 0.001671f, 0.002222f, 0.002577f, 0.002714f, 0.003479f, 0.004208f,
+ 0.004723f, 0.005669f, 0.006886f, 0.007637f, 0.009315f, 0.011154f, 0.013596f, 0.016205f,
+ 0.019821f, 0.024963f, 0.031250f, 0.040375f, 0.053009f, 0.071167f, 0.098511f, 0.139648f,
+ 0.202271f, 0.293457f, 0.414307f, 0.548340f, 0.669434f, 0.762695f, 0.829590f, 0.874512f,
+ 0.904785f, 0.926758f, 0.941895f, 0.953613f, 0.961914f, 0.968262f, 0.973633f, 0.977539f,
+ 0.980957f, 0.983398f, 0.985352f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.992188f,
+ 0.993164f, 0.994629f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000231f, 0.000232f, 0.000363f, 0.000486f, 0.000503f, 0.000724f, 0.001104f,
+ 0.001080f, 0.001271f, 0.001509f, 0.001976f, 0.002247f, 0.002476f, 0.002895f, 0.003553f,
+ 0.004192f, 0.004871f, 0.005623f, 0.006332f, 0.007584f, 0.008957f, 0.010849f, 0.012917f,
+ 0.015396f, 0.019226f, 0.023941f, 0.030060f, 0.038513f, 0.050385f, 0.067627f, 0.093140f,
+ 0.131714f, 0.190674f, 0.278076f, 0.395752f, 0.530273f, 0.655762f, 0.753906f, 0.823242f,
+ 0.870605f, 0.903320f, 0.925781f, 0.941406f, 0.953125f, 0.961914f, 0.969238f, 0.974121f,
+ 0.978027f, 0.980957f, 0.983887f, 0.985840f, 0.988281f, 0.989258f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000009f, 0.000116f, 0.000360f, 0.000484f, 0.000485f, 0.000536f, 0.000827f,
+ 0.000935f, 0.001077f, 0.001204f, 0.001561f, 0.001974f, 0.002136f, 0.002777f, 0.002964f,
+ 0.003517f, 0.004192f, 0.004711f, 0.005505f, 0.006283f, 0.007408f, 0.008713f, 0.010674f,
+ 0.012375f, 0.015099f, 0.018677f, 0.022797f, 0.028732f, 0.036835f, 0.047974f, 0.064270f,
+ 0.088318f, 0.124634f, 0.180664f, 0.264893f, 0.380615f, 0.516113f, 0.645020f, 0.747559f,
+ 0.819824f, 0.870117f, 0.902344f, 0.925293f, 0.941406f, 0.953613f, 0.962402f, 0.969238f,
+ 0.974121f, 0.978027f, 0.981934f, 0.984375f, 0.986328f, 0.988281f, 0.989746f, 0.990723f,
+ 0.992676f, 0.993164f, 0.997559f, 0.998047f, 0.998047f, 0.997559f, 0.998047f, 0.998047f,
+ 0.000000f, 0.000000f, 0.000074f, 0.000337f, 0.000481f, 0.000484f, 0.000485f, 0.000556f,
+ 0.000823f, 0.001143f, 0.001187f, 0.001391f, 0.001781f, 0.002155f, 0.002327f, 0.002760f,
+ 0.003008f, 0.003433f, 0.004101f, 0.004681f, 0.005417f, 0.006443f, 0.007393f, 0.008560f,
+ 0.010345f, 0.012177f, 0.014496f, 0.018127f, 0.022125f, 0.027740f, 0.035736f, 0.046173f,
+ 0.061920f, 0.084717f, 0.119324f, 0.173218f, 0.254883f, 0.368652f, 0.505371f, 0.637207f,
+ 0.742676f, 0.818359f, 0.868164f, 0.902832f, 0.925781f, 0.942383f, 0.953613f, 0.963379f,
+ 0.970215f, 0.975098f, 0.979004f, 0.982422f, 0.984863f, 0.986328f, 0.988770f, 0.990723f,
+ 0.991699f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000188f, 0.000358f, 0.000481f, 0.000484f, 0.000484f,
+ 0.000704f, 0.000852f, 0.001165f, 0.001316f, 0.001500f, 0.001685f, 0.001933f, 0.002079f,
+ 0.002720f, 0.003136f, 0.003727f, 0.003723f, 0.004513f, 0.005207f, 0.006275f, 0.007236f,
+ 0.008453f, 0.010056f, 0.011848f, 0.014191f, 0.017212f, 0.021652f, 0.026978f, 0.034241f,
+ 0.044678f, 0.058990f, 0.081421f, 0.114929f, 0.167236f, 0.247070f, 0.360596f, 0.498291f,
+ 0.632812f, 0.741211f, 0.818359f, 0.869629f, 0.903809f, 0.927734f, 0.943848f, 0.955566f,
+ 0.964355f, 0.970703f, 0.976074f, 0.979492f, 0.982422f, 0.985840f, 0.987793f, 0.989258f,
+ 0.990723f, 0.992188f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000120f, 0.000288f, 0.000357f, 0.000479f, 0.000483f,
+ 0.000535f, 0.000711f, 0.000862f, 0.001256f, 0.001351f, 0.001502f, 0.001719f, 0.002146f,
+ 0.002037f, 0.002653f, 0.003248f, 0.003222f, 0.003820f, 0.004456f, 0.005173f, 0.006008f,
+ 0.007072f, 0.008247f, 0.009758f, 0.011826f, 0.013771f, 0.016861f, 0.020935f, 0.025986f,
+ 0.032928f, 0.043030f, 0.057587f, 0.078918f, 0.111755f, 0.162964f, 0.241943f, 0.355713f,
+ 0.495117f, 0.632324f, 0.742676f, 0.819336f, 0.871582f, 0.905762f, 0.929688f, 0.945312f,
+ 0.957031f, 0.965332f, 0.972168f, 0.976562f, 0.980957f, 0.983887f, 0.986328f, 0.988281f,
+ 0.990234f, 0.991699f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000200f, 0.000412f, 0.000471f, 0.000599f,
+ 0.000598f, 0.000596f, 0.000805f, 0.001099f, 0.001334f, 0.001417f, 0.001456f, 0.001723f,
+ 0.002102f, 0.002283f, 0.002579f, 0.003208f, 0.003233f, 0.003740f, 0.004574f, 0.005287f,
+ 0.006012f, 0.006870f, 0.008018f, 0.009354f, 0.011208f, 0.013542f, 0.016495f, 0.020370f,
+ 0.025284f, 0.032410f, 0.041901f, 0.056183f, 0.077087f, 0.109558f, 0.160278f, 0.239380f,
+ 0.354492f, 0.496094f, 0.635254f, 0.747070f, 0.823730f, 0.875488f, 0.908691f, 0.931641f,
+ 0.947266f, 0.958008f, 0.966309f, 0.972656f, 0.978027f, 0.981445f, 0.984863f, 0.986816f,
+ 0.989258f, 0.990723f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000237f, 0.000239f, 0.000430f, 0.000465f,
+ 0.000599f, 0.000724f, 0.000716f, 0.000815f, 0.000981f, 0.001334f, 0.001299f, 0.001545f,
+ 0.001617f, 0.001935f, 0.002110f, 0.002501f, 0.002823f, 0.003408f, 0.003790f, 0.004467f,
+ 0.005112f, 0.005848f, 0.006718f, 0.007942f, 0.009514f, 0.011093f, 0.013092f, 0.015945f,
+ 0.019608f, 0.024689f, 0.031494f, 0.041046f, 0.054901f, 0.075989f, 0.108032f, 0.158936f,
+ 0.239014f, 0.356201f, 0.500488f, 0.642090f, 0.753418f, 0.830566f, 0.880859f, 0.912598f,
+ 0.935059f, 0.950195f, 0.960449f, 0.968262f, 0.975098f, 0.979980f, 0.982910f, 0.985352f,
+ 0.987793f, 0.990234f, 0.996582f, 0.997070f, 0.997070f, 0.996582f, 0.997070f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000120f, 0.000121f, 0.000312f, 0.000407f,
+ 0.000707f, 0.000597f, 0.000648f, 0.000720f, 0.000941f, 0.001008f, 0.001229f, 0.001289f,
+ 0.001423f, 0.001726f, 0.002060f, 0.002211f, 0.002506f, 0.002985f, 0.003036f, 0.003683f,
+ 0.004066f, 0.004833f, 0.005592f, 0.006611f, 0.007675f, 0.008965f, 0.010811f, 0.012833f,
+ 0.015854f, 0.019485f, 0.024429f, 0.031036f, 0.040466f, 0.054108f, 0.074890f, 0.107727f,
+ 0.159180f, 0.241699f, 0.362549f, 0.510742f, 0.653809f, 0.763184f, 0.837891f, 0.887207f,
+ 0.917480f, 0.938477f, 0.953613f, 0.962891f, 0.970703f, 0.976562f, 0.980469f, 0.984375f,
+ 0.986816f, 0.988770f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000118f, 0.000120f, 0.000129f, 0.000434f,
+ 0.000536f, 0.000613f, 0.000716f, 0.000799f, 0.000720f, 0.000768f, 0.001024f, 0.001202f,
+ 0.001501f, 0.001530f, 0.001568f, 0.001897f, 0.002190f, 0.002502f, 0.002893f, 0.003105f,
+ 0.003551f, 0.004021f, 0.004791f, 0.005405f, 0.006313f, 0.007309f, 0.008720f, 0.010712f,
+ 0.012657f, 0.015472f, 0.018982f, 0.023697f, 0.030579f, 0.040009f, 0.054138f, 0.075012f,
+ 0.107849f, 0.161377f, 0.247070f, 0.373047f, 0.525391f, 0.667969f, 0.776855f, 0.847656f,
+ 0.894043f, 0.923340f, 0.942871f, 0.956543f, 0.965820f, 0.973145f, 0.978027f, 0.982422f,
+ 0.985352f, 0.987793f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000081f, 0.000116f, 0.000227f, 0.000360f,
+ 0.000366f, 0.000642f, 0.000691f, 0.000711f, 0.000806f, 0.000721f, 0.000925f, 0.000947f,
+ 0.001155f, 0.001478f, 0.001554f, 0.001612f, 0.001929f, 0.002354f, 0.002291f, 0.002712f,
+ 0.003029f, 0.003441f, 0.003876f, 0.004452f, 0.005276f, 0.006256f, 0.007149f, 0.008568f,
+ 0.010040f, 0.012566f, 0.015160f, 0.018677f, 0.023376f, 0.030411f, 0.039642f, 0.053986f,
+ 0.075134f, 0.109436f, 0.165527f, 0.255127f, 0.387695f, 0.544434f, 0.686523f, 0.791016f,
+ 0.858398f, 0.901367f, 0.928711f, 0.947266f, 0.959961f, 0.968262f, 0.975098f, 0.980469f,
+ 0.983887f, 0.987305f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000088f, 0.000085f, 0.000338f, 0.000351f,
+ 0.000359f, 0.000480f, 0.000539f, 0.000698f, 0.000798f, 0.000793f, 0.000834f, 0.000891f,
+ 0.000941f, 0.001143f, 0.001422f, 0.001512f, 0.001833f, 0.001955f, 0.002144f, 0.002426f,
+ 0.002716f, 0.003262f, 0.003572f, 0.003860f, 0.004456f, 0.005173f, 0.006191f, 0.006939f,
+ 0.008545f, 0.010162f, 0.012375f, 0.014969f, 0.018555f, 0.023376f, 0.029953f, 0.039673f,
+ 0.054077f, 0.076477f, 0.112000f, 0.171509f, 0.268066f, 0.408203f, 0.569336f, 0.709961f,
+ 0.808105f, 0.872070f, 0.910645f, 0.935059f, 0.951660f, 0.963379f, 0.971680f, 0.977539f,
+ 0.982422f, 0.985840f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000116f, 0.000340f,
+ 0.000353f, 0.000349f, 0.000480f, 0.000576f, 0.000668f, 0.000700f, 0.000818f, 0.000833f,
+ 0.000787f, 0.001125f, 0.001110f, 0.001407f, 0.001489f, 0.001563f, 0.001804f, 0.002073f,
+ 0.002285f, 0.002409f, 0.002985f, 0.003052f, 0.003853f, 0.004433f, 0.005100f, 0.006046f,
+ 0.007046f, 0.008156f, 0.009827f, 0.012138f, 0.014740f, 0.018311f, 0.023071f, 0.029770f,
+ 0.040009f, 0.054810f, 0.078003f, 0.116150f, 0.180176f, 0.284668f, 0.434570f, 0.599121f,
+ 0.735352f, 0.827637f, 0.885254f, 0.919922f, 0.941895f, 0.957031f, 0.967285f, 0.975098f,
+ 0.979980f, 0.984375f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995605f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000235f,
+ 0.000320f, 0.000351f, 0.000353f, 0.000478f, 0.000602f, 0.000651f, 0.000793f, 0.000706f,
+ 0.000816f, 0.000814f, 0.000898f, 0.001062f, 0.001259f, 0.001441f, 0.001564f, 0.001772f,
+ 0.001743f, 0.002134f, 0.002512f, 0.002668f, 0.003193f, 0.003746f, 0.004341f, 0.004902f,
+ 0.005909f, 0.006920f, 0.008125f, 0.009605f, 0.011711f, 0.014549f, 0.018280f, 0.023163f,
+ 0.030334f, 0.040375f, 0.055939f, 0.080566f, 0.122070f, 0.192383f, 0.307373f, 0.467773f,
+ 0.634277f, 0.763184f, 0.846191f, 0.897461f, 0.928711f, 0.948730f, 0.962402f, 0.971680f,
+ 0.978516f, 0.982422f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995117f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000185f, 0.000190f,
+ 0.000272f, 0.000281f, 0.000464f, 0.000466f, 0.000476f, 0.000521f, 0.000654f, 0.000680f,
+ 0.000699f, 0.000815f, 0.000814f, 0.000890f, 0.001110f, 0.001283f, 0.001311f, 0.001590f,
+ 0.001727f, 0.001801f, 0.002020f, 0.002312f, 0.002897f, 0.003267f, 0.003592f, 0.004143f,
+ 0.004810f, 0.005844f, 0.006618f, 0.008018f, 0.009697f, 0.011597f, 0.014374f, 0.018127f,
+ 0.023056f, 0.030258f, 0.041107f, 0.057373f, 0.084045f, 0.129517f, 0.208618f, 0.337646f,
+ 0.508789f, 0.673828f, 0.793457f, 0.866211f, 0.911133f, 0.938965f, 0.955566f, 0.967285f,
+ 0.975586f, 0.980469f, 0.994141f, 0.994141f, 0.994629f, 0.994629f, 0.994629f, 0.994141f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000226f, 0.000431f, 0.000456f, 0.000467f, 0.000352f, 0.000496f, 0.000588f,
+ 0.000891f, 0.000771f, 0.000803f, 0.000947f, 0.000972f, 0.001078f, 0.001033f, 0.001279f,
+ 0.001436f, 0.001483f, 0.001831f, 0.002033f, 0.002264f, 0.002710f, 0.002996f, 0.003582f,
+ 0.004032f, 0.004665f, 0.005592f, 0.006527f, 0.007820f, 0.009323f, 0.011581f, 0.014328f,
+ 0.018219f, 0.023239f, 0.030777f, 0.042084f, 0.059448f, 0.089233f, 0.140869f, 0.230713f,
+ 0.375977f, 0.556641f, 0.715332f, 0.822266f, 0.885742f, 0.924316f, 0.947266f, 0.962402f,
+ 0.972656f, 0.978516f, 0.993164f, 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000283f, 0.000229f, 0.000425f, 0.000303f, 0.000336f, 0.000469f, 0.000474f,
+ 0.000728f, 0.000663f, 0.000883f, 0.000695f, 0.000679f, 0.000858f, 0.000919f, 0.000980f,
+ 0.001218f, 0.001330f, 0.001665f, 0.001637f, 0.002054f, 0.002335f, 0.002508f, 0.002880f,
+ 0.003323f, 0.004055f, 0.004730f, 0.005463f, 0.006485f, 0.007740f, 0.009293f, 0.011566f,
+ 0.014175f, 0.017944f, 0.023346f, 0.031433f, 0.043304f, 0.063232f, 0.096313f, 0.155518f,
+ 0.260498f, 0.424561f, 0.611328f, 0.758789f, 0.852051f, 0.904785f, 0.937012f, 0.955566f,
+ 0.968262f, 0.977051f, 0.992676f, 0.992676f, 0.993164f, 0.993652f, 0.993164f, 0.993652f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000256f, 0.000216f, 0.000406f, 0.000426f, 0.000457f, 0.000453f,
+ 0.000472f, 0.000651f, 0.000593f, 0.000876f, 0.000571f, 0.000590f, 0.000819f, 0.000809f,
+ 0.001000f, 0.001224f, 0.001293f, 0.001637f, 0.001790f, 0.001863f, 0.002298f, 0.002550f,
+ 0.002995f, 0.003201f, 0.003933f, 0.004677f, 0.005360f, 0.006447f, 0.007763f, 0.009377f,
+ 0.011330f, 0.014420f, 0.017944f, 0.023560f, 0.032196f, 0.045380f, 0.067383f, 0.105469f,
+ 0.175659f, 0.301025f, 0.484375f, 0.669922f, 0.801270f, 0.879395f, 0.922852f, 0.948242f,
+ 0.963379f, 0.974121f, 0.992188f, 0.992188f, 0.992188f, 0.993164f, 0.992188f, 0.993164f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000230f, 0.000206f, 0.000355f, 0.000335f, 0.000305f,
+ 0.000461f, 0.000565f, 0.000474f, 0.000429f, 0.000520f, 0.000758f, 0.000777f, 0.000668f,
+ 0.000821f, 0.001013f, 0.001089f, 0.001325f, 0.001570f, 0.001787f, 0.001707f, 0.002037f,
+ 0.002457f, 0.002892f, 0.003359f, 0.003881f, 0.004616f, 0.005203f, 0.006336f, 0.007477f,
+ 0.009048f, 0.011345f, 0.014015f, 0.018356f, 0.024307f, 0.033661f, 0.048279f, 0.073303f,
+ 0.118774f, 0.204102f, 0.354492f, 0.554688f, 0.729492f, 0.840332f, 0.902832f, 0.937988f,
+ 0.958008f, 0.971191f, 0.991699f, 0.992188f, 0.992188f, 0.991699f, 0.992188f, 0.991699f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000248f, 0.000213f, 0.000344f,
+ 0.000437f, 0.000351f, 0.000352f, 0.000359f, 0.000389f, 0.000482f, 0.000676f, 0.000560f,
+ 0.000806f, 0.000813f, 0.000927f, 0.001230f, 0.001392f, 0.001526f, 0.001627f, 0.001629f,
+ 0.002047f, 0.002321f, 0.002661f, 0.003317f, 0.003752f, 0.004406f, 0.005119f, 0.005936f,
+ 0.007156f, 0.009003f, 0.010941f, 0.013985f, 0.018539f, 0.025131f, 0.035248f, 0.051880f,
+ 0.081543f, 0.137207f, 0.244507f, 0.424561f, 0.632812f, 0.787598f, 0.876465f, 0.924805f,
+ 0.951172f, 0.966797f, 0.990723f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000171f, 0.000276f,
+ 0.000278f, 0.000288f, 0.000329f, 0.000365f, 0.000459f, 0.000483f, 0.000626f, 0.000716f,
+ 0.000767f, 0.000793f, 0.000800f, 0.000897f, 0.000976f, 0.001156f, 0.001322f, 0.001427f,
+ 0.001799f, 0.001997f, 0.002256f, 0.002773f, 0.002806f, 0.003515f, 0.004040f, 0.004910f,
+ 0.005730f, 0.007046f, 0.008858f, 0.011124f, 0.014374f, 0.018982f, 0.026123f, 0.037659f,
+ 0.057129f, 0.093445f, 0.164062f, 0.301514f, 0.511230f, 0.712402f, 0.838867f, 0.906738f,
+ 0.942383f, 0.961914f, 0.989746f, 0.990234f, 0.989746f, 0.990234f, 0.989746f, 0.990234f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000173f, 0.000140f,
+ 0.000138f, 0.000232f, 0.000291f, 0.000318f, 0.000338f, 0.000346f, 0.000422f, 0.000368f,
+ 0.000680f, 0.000722f, 0.000765f, 0.000766f, 0.000803f, 0.001069f, 0.001103f, 0.001185f,
+ 0.001611f, 0.001593f, 0.001939f, 0.002211f, 0.002569f, 0.003008f, 0.003239f, 0.003952f,
+ 0.004681f, 0.005630f, 0.007008f, 0.008720f, 0.011200f, 0.014587f, 0.019653f, 0.027527f,
+ 0.040955f, 0.064514f, 0.110413f, 0.204224f, 0.381104f, 0.609863f, 0.785645f, 0.881836f,
+ 0.931152f, 0.956543f, 0.988770f, 0.989258f, 0.989258f, 0.989258f, 0.989258f, 0.988770f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000123f, 0.000121f, 0.000090f,
+ 0.000102f, 0.000063f, 0.000156f, 0.000248f, 0.000333f, 0.000321f, 0.000431f, 0.000392f,
+ 0.000349f, 0.000434f, 0.000674f, 0.000741f, 0.000776f, 0.000936f, 0.000888f, 0.001049f,
+ 0.001179f, 0.001326f, 0.001686f, 0.001732f, 0.002050f, 0.002150f, 0.002453f, 0.003016f,
+ 0.003601f, 0.004444f, 0.005692f, 0.006741f, 0.008324f, 0.011093f, 0.014709f, 0.020752f,
+ 0.029800f, 0.045654f, 0.074951f, 0.136108f, 0.264893f, 0.486816f, 0.710938f, 0.848145f,
+ 0.916992f, 0.950684f, 0.987305f, 0.987793f, 0.987793f, 0.988281f, 0.987793f, 0.987793f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000100f,
+ 0.000049f, 0.000039f, 0.000125f, 0.000121f, 0.000184f, 0.000280f, 0.000366f, 0.000392f,
+ 0.000333f, 0.000341f, 0.000477f, 0.000597f, 0.000607f, 0.000747f, 0.000767f, 0.000961f,
+ 0.000936f, 0.001056f, 0.001306f, 0.001388f, 0.001633f, 0.001836f, 0.001997f, 0.002348f,
+ 0.002878f, 0.003332f, 0.004131f, 0.005165f, 0.006519f, 0.008568f, 0.011444f, 0.015419f,
+ 0.021881f, 0.032532f, 0.052032f, 0.091187f, 0.177246f, 0.357910f, 0.610352f, 0.800781f,
+ 0.897461f, 0.942871f, 0.985352f, 0.986328f, 0.986816f, 0.986328f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000099f, 0.000076f,
+ 0.000060f, 0.000108f, 0.000040f, 0.000127f, 0.000127f, 0.000121f, 0.000200f, 0.000265f,
+ 0.000360f, 0.000316f, 0.000428f, 0.000455f, 0.000456f, 0.000583f, 0.000682f, 0.000750f,
+ 0.000773f, 0.000824f, 0.000937f, 0.001220f, 0.001262f, 0.001384f, 0.001622f, 0.001862f,
+ 0.002157f, 0.002817f, 0.003414f, 0.004082f, 0.004993f, 0.006561f, 0.008560f, 0.011696f,
+ 0.016022f, 0.023529f, 0.036469f, 0.062286f, 0.117126f, 0.245605f, 0.487549f, 0.732910f,
+ 0.870605f, 0.933105f, 0.983887f, 0.984863f, 0.984863f, 0.984863f, 0.984375f, 0.984863f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000096f,
+ 0.000075f, 0.000061f, 0.000083f, 0.000096f, 0.000034f, 0.000101f, 0.000121f, 0.000137f,
+ 0.000211f, 0.000324f, 0.000381f, 0.000373f, 0.000420f, 0.000472f, 0.000494f, 0.000690f,
+ 0.000793f, 0.000768f, 0.000853f, 0.000867f, 0.000978f, 0.001003f, 0.001145f, 0.001416f,
+ 0.001888f, 0.002125f, 0.002491f, 0.003004f, 0.003864f, 0.005028f, 0.006500f, 0.008682f,
+ 0.011856f, 0.016922f, 0.025757f, 0.042603f, 0.078247f, 0.161743f, 0.358398f, 0.641602f,
+ 0.833496f, 0.920410f, 0.981934f, 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
+ 0.000122f, 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f,
+ 0.000097f, 0.000078f, 0.000062f, 0.000051f, 0.000043f, 0.000072f, 0.000030f, 0.000060f,
+ 0.000109f, 0.000206f, 0.000216f, 0.000333f, 0.000347f, 0.000395f, 0.000415f, 0.000458f,
+ 0.000568f, 0.000664f, 0.000709f, 0.000598f, 0.000781f, 0.000628f, 0.001053f, 0.001046f,
+ 0.001179f, 0.001579f, 0.001649f, 0.002386f, 0.002857f, 0.003727f, 0.004894f, 0.006363f,
+ 0.008789f, 0.012314f, 0.018616f, 0.029709f, 0.052429f, 0.105652f, 0.244385f, 0.524414f,
+ 0.782715f, 0.904785f, 0.979492f, 0.980957f, 0.979980f, 0.979980f, 0.980469f, 0.980469f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000097f, 0.000079f, 0.000065f, 0.000054f, 0.000045f, 0.000073f, 0.000032f,
+ 0.000089f, 0.000038f, 0.000134f, 0.000138f, 0.000211f, 0.000333f, 0.000370f, 0.000400f,
+ 0.000420f, 0.000496f, 0.000566f, 0.000494f, 0.000584f, 0.000714f, 0.000708f, 0.000843f,
+ 0.001056f, 0.001019f, 0.001327f, 0.001812f, 0.001908f, 0.002798f, 0.003479f, 0.004578f,
+ 0.006195f, 0.008881f, 0.012901f, 0.020599f, 0.035339f, 0.069214f, 0.159058f, 0.394531f,
+ 0.709961f, 0.882812f, 0.977051f, 0.978027f, 0.977539f, 0.976562f, 0.977051f, 0.977539f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000119f, 0.000120f, 0.000102f, 0.000084f, 0.000071f, 0.000059f, 0.000048f, 0.000041f,
+ 0.000035f, 0.000062f, 0.000026f, 0.000098f, 0.000103f, 0.000136f, 0.000230f, 0.000327f,
+ 0.000356f, 0.000338f, 0.000387f, 0.000499f, 0.000577f, 0.000627f, 0.000669f, 0.000611f,
+ 0.000699f, 0.000904f, 0.000893f, 0.001340f, 0.001666f, 0.002068f, 0.002377f, 0.003105f,
+ 0.004345f, 0.006218f, 0.009178f, 0.013962f, 0.024170f, 0.045441f, 0.101868f, 0.271973f,
+ 0.612305f, 0.853027f, 0.973145f, 0.974121f, 0.973633f, 0.974121f, 0.973633f, 0.974121f,
+ 0.000121f, 0.000120f, 0.000119f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000108f, 0.000091f, 0.000075f, 0.000063f, 0.000053f,
+ 0.000045f, 0.000039f, 0.000034f, 0.000040f, 0.000090f, 0.000068f, 0.000104f, 0.000127f,
+ 0.000220f, 0.000302f, 0.000412f, 0.000316f, 0.000444f, 0.000495f, 0.000428f, 0.000510f,
+ 0.000463f, 0.000614f, 0.000726f, 0.000719f, 0.001164f, 0.001533f, 0.001707f, 0.002079f,
+ 0.002848f, 0.004189f, 0.006142f, 0.009491f, 0.016113f, 0.029343f, 0.064758f, 0.175415f,
+ 0.490723f, 0.812012f, 0.968750f, 0.969727f, 0.969238f, 0.969727f, 0.969727f, 0.969727f,
+ 0.000000f, 0.000117f, 0.000117f, 0.000115f, 0.000118f, 0.000118f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000100f, 0.000082f, 0.000070f,
+ 0.000060f, 0.000051f, 0.000043f, 0.000038f, 0.000033f, 0.000053f, 0.000027f, 0.000089f,
+ 0.000105f, 0.000137f, 0.000227f, 0.000277f, 0.000293f, 0.000284f, 0.000300f, 0.000420f,
+ 0.000367f, 0.000473f, 0.000467f, 0.000555f, 0.000625f, 0.000870f, 0.001177f, 0.001563f,
+ 0.001982f, 0.002714f, 0.004051f, 0.006134f, 0.010384f, 0.018967f, 0.040314f, 0.108887f,
+ 0.358643f, 0.755859f, 0.962891f, 0.963867f, 0.964355f, 0.963867f, 0.963379f, 0.963379f,
+ 0.000000f, 0.000000f, 0.000098f, 0.000103f, 0.000111f, 0.000112f, 0.000112f, 0.000114f,
+ 0.000113f, 0.000115f, 0.000114f, 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000115f,
+ 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000109f, 0.000094f,
+ 0.000078f, 0.000067f, 0.000058f, 0.000050f, 0.000043f, 0.000038f, 0.000033f, 0.000054f,
+ 0.000025f, 0.000078f, 0.000091f, 0.000173f, 0.000203f, 0.000252f, 0.000331f, 0.000277f,
+ 0.000264f, 0.000407f, 0.000342f, 0.000444f, 0.000470f, 0.000542f, 0.000773f, 0.001081f,
+ 0.001245f, 0.001682f, 0.002602f, 0.003744f, 0.006248f, 0.011566f, 0.025040f, 0.065491f,
+ 0.236938f, 0.678223f, 0.956055f, 0.956543f, 0.956543f, 0.956543f, 0.957031f, 0.957031f,
+ 0.000000f, 0.000000f, 0.000021f, 0.000080f, 0.000072f, 0.000089f, 0.000100f, 0.000099f,
+ 0.000105f, 0.000107f, 0.000107f, 0.000110f, 0.000109f, 0.000110f, 0.000111f, 0.000111f,
+ 0.000112f, 0.000112f, 0.000112f, 0.000113f, 0.000113f, 0.000113f, 0.000113f, 0.000113f,
+ 0.000105f, 0.000090f, 0.000078f, 0.000067f, 0.000057f, 0.000050f, 0.000043f, 0.000038f,
+ 0.000033f, 0.000029f, 0.000025f, 0.000055f, 0.000091f, 0.000130f, 0.000225f, 0.000275f,
+ 0.000254f, 0.000290f, 0.000259f, 0.000378f, 0.000333f, 0.000362f, 0.000458f, 0.000587f,
+ 0.000876f, 0.001062f, 0.001382f, 0.002398f, 0.003763f, 0.006603f, 0.014496f, 0.038300f,
+ 0.143677f, 0.573730f, 0.946777f, 0.947266f, 0.947266f, 0.947266f, 0.948242f, 0.947266f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000036f, 0.000072f,
+ 0.000082f, 0.000080f, 0.000094f, 0.000096f, 0.000099f, 0.000098f, 0.000103f, 0.000103f,
+ 0.000103f, 0.000106f, 0.000105f, 0.000107f, 0.000107f, 0.000108f, 0.000108f, 0.000109f,
+ 0.000109f, 0.000109f, 0.000105f, 0.000090f, 0.000078f, 0.000067f, 0.000059f, 0.000051f,
+ 0.000045f, 0.000039f, 0.000034f, 0.000030f, 0.000026f, 0.000045f, 0.000086f, 0.000108f,
+ 0.000143f, 0.000212f, 0.000227f, 0.000204f, 0.000231f, 0.000263f, 0.000315f, 0.000354f,
+ 0.000481f, 0.000702f, 0.000888f, 0.001257f, 0.002018f, 0.003738f, 0.007675f, 0.021317f,
+ 0.080933f, 0.444336f, 0.934082f, 0.935059f, 0.935059f, 0.935059f, 0.935059f, 0.935059f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000024f, 0.000038f, 0.000059f, 0.000063f, 0.000076f, 0.000080f, 0.000085f,
+ 0.000089f, 0.000091f, 0.000092f, 0.000095f, 0.000097f, 0.000099f, 0.000098f, 0.000101f,
+ 0.000101f, 0.000102f, 0.000103f, 0.000104f, 0.000104f, 0.000091f, 0.000080f, 0.000069f,
+ 0.000062f, 0.000053f, 0.000046f, 0.000041f, 0.000035f, 0.000032f, 0.000027f, 0.000039f,
+ 0.000052f, 0.000103f, 0.000139f, 0.000178f, 0.000190f, 0.000178f, 0.000185f, 0.000247f,
+ 0.000274f, 0.000368f, 0.000528f, 0.000637f, 0.001027f, 0.001937f, 0.003853f, 0.010445f,
+ 0.041718f, 0.304199f, 0.917480f, 0.917480f, 0.917969f, 0.917480f, 0.918457f, 0.917969f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000023f, 0.000037f,
+ 0.000048f, 0.000048f, 0.000063f, 0.000063f, 0.000074f, 0.000077f, 0.000080f, 0.000083f,
+ 0.000086f, 0.000088f, 0.000090f, 0.000091f, 0.000092f, 0.000094f, 0.000095f, 0.000096f,
+ 0.000084f, 0.000073f, 0.000064f, 0.000057f, 0.000049f, 0.000043f, 0.000037f, 0.000033f,
+ 0.000029f, 0.000025f, 0.000060f, 0.000061f, 0.000087f, 0.000118f, 0.000156f, 0.000131f,
+ 0.000175f, 0.000226f, 0.000230f, 0.000373f, 0.000507f, 0.000992f, 0.001814f, 0.004639f,
+ 0.018799f, 0.176758f, 0.894043f, 0.894531f, 0.895508f, 0.895020f, 0.895020f, 0.895996f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000019f, 0.000028f, 0.000034f, 0.000043f,
+ 0.000052f, 0.000057f, 0.000062f, 0.000067f, 0.000070f, 0.000074f, 0.000075f, 0.000079f,
+ 0.000081f, 0.000083f, 0.000085f, 0.000076f, 0.000068f, 0.000059f, 0.000051f, 0.000046f,
+ 0.000040f, 0.000035f, 0.000030f, 0.000026f, 0.000028f, 0.000038f, 0.000072f, 0.000100f,
+ 0.000120f, 0.000107f, 0.000152f, 0.000156f, 0.000254f, 0.000436f, 0.000722f, 0.001875f,
+ 0.007088f, 0.083069f, 0.863281f, 0.862305f, 0.863281f, 0.862305f, 0.863281f, 0.862793f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000005f, 0.000015f, 0.000022f, 0.000030f, 0.000037f, 0.000042f,
+ 0.000048f, 0.000053f, 0.000058f, 0.000060f, 0.000064f, 0.000067f, 0.000069f, 0.000061f,
+ 0.000053f, 0.000047f, 0.000041f, 0.000036f, 0.000031f, 0.000027f, 0.000023f, 0.000020f,
+ 0.000036f, 0.000063f, 0.000082f, 0.000081f, 0.000104f, 0.000149f, 0.000263f, 0.000616f,
+ 0.002337f, 0.028168f, 0.816406f, 0.816895f, 0.816895f, 0.816895f, 0.817383f, 0.816895f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000003f, 0.000011f, 0.000019f, 0.000026f, 0.000031f, 0.000036f,
+ 0.000041f, 0.000045f, 0.000050f, 0.000047f, 0.000041f, 0.000036f, 0.000031f, 0.000027f,
+ 0.000023f, 0.000019f, 0.000028f, 0.000029f, 0.000053f, 0.000052f, 0.000072f, 0.000165f,
+ 0.000511f, 0.006050f, 0.751465f, 0.752441f, 0.752930f, 0.752441f, 0.752441f, 0.752930f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000011f, 0.000017f, 0.000021f, 0.000027f,
+ 0.000028f, 0.000024f, 0.000020f, 0.000017f, 0.000013f, 0.000020f, 0.000021f, 0.000029f,
+ 0.000057f, 0.000588f, 0.665039f, 0.664551f, 0.665527f, 0.665039f, 0.665039f, 0.665039f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000009f, 0.000006f,
+ 0.000004f, 0.000007f, 0.557129f, 0.558105f, 0.557617f, 0.557617f, 0.558594f, 0.558105f,
+ },
+ {
+ 0.163818f, 0.558105f, 0.755859f, 0.841797f, 0.886230f, 0.912109f, 0.929199f, 0.941406f,
+ 0.950195f, 0.957031f, 0.961914f, 0.966309f, 0.970215f, 0.972656f, 0.975586f, 0.978027f,
+ 0.979492f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f,
+ 0.989258f, 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
+ 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.027023f, 0.138184f, 0.353760f, 0.583984f, 0.735352f, 0.819336f, 0.868652f, 0.898926f,
+ 0.918945f, 0.933594f, 0.943848f, 0.952148f, 0.958984f, 0.963867f, 0.967773f, 0.971680f,
+ 0.974121f, 0.976562f, 0.978516f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986328f,
+ 0.986816f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.990723f, 0.991699f, 0.992676f,
+ 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.009819f, 0.044250f, 0.113525f, 0.244995f, 0.430420f, 0.608887f, 0.733887f, 0.810547f,
+ 0.860352f, 0.892578f, 0.913086f, 0.929688f, 0.940918f, 0.949219f, 0.956055f, 0.961426f,
+ 0.966309f, 0.970215f, 0.972656f, 0.975586f, 0.977539f, 0.979980f, 0.980957f, 0.983398f,
+ 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.988281f, 0.989746f, 0.989746f, 0.991211f,
+ 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f,
+ 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.004848f, 0.020447f, 0.046814f, 0.096313f, 0.183228f, 0.319092f, 0.484375f, 0.631836f,
+ 0.739258f, 0.810547f, 0.857422f, 0.888672f, 0.910645f, 0.925781f, 0.938965f, 0.947754f,
+ 0.954590f, 0.960449f, 0.964355f, 0.968750f, 0.971191f, 0.974609f, 0.977051f, 0.979004f,
+ 0.980957f, 0.982422f, 0.983887f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.989258f,
+ 0.990234f, 0.990723f, 0.991211f, 0.991699f, 0.992676f, 0.992676f, 0.993652f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.003096f, 0.011017f, 0.024399f, 0.046600f, 0.083191f, 0.145386f, 0.243774f, 0.379395f,
+ 0.529297f, 0.656738f, 0.750977f, 0.813965f, 0.857910f, 0.887695f, 0.909668f, 0.925293f,
+ 0.937500f, 0.946289f, 0.953613f, 0.959473f, 0.964355f, 0.968262f, 0.971191f, 0.974121f,
+ 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987793f,
+ 0.988281f, 0.989258f, 0.989746f, 0.991211f, 0.991699f, 0.991699f, 0.992676f, 0.993164f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
+ 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001808f, 0.006992f, 0.014923f, 0.026413f, 0.044403f, 0.073120f, 0.119446f, 0.193115f,
+ 0.300537f, 0.433594f, 0.568848f, 0.680664f, 0.763184f, 0.821289f, 0.860840f, 0.890137f,
+ 0.909668f, 0.925293f, 0.937500f, 0.945801f, 0.953613f, 0.959473f, 0.963867f, 0.968262f,
+ 0.971680f, 0.974609f, 0.977051f, 0.979004f, 0.980957f, 0.982422f, 0.983887f, 0.984863f,
+ 0.986816f, 0.987305f, 0.987793f, 0.989746f, 0.989746f, 0.991211f, 0.991699f, 0.992188f,
+ 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996094f,
+ 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.001668f, 0.005253f, 0.010010f, 0.016602f, 0.026459f, 0.042023f, 0.065369f, 0.101868f,
+ 0.158081f, 0.241455f, 0.354248f, 0.483887f, 0.606934f, 0.706055f, 0.777832f, 0.830566f,
+ 0.867188f, 0.893066f, 0.912109f, 0.926270f, 0.938477f, 0.946289f, 0.953125f, 0.959473f,
+ 0.964355f, 0.968750f, 0.971680f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.982910f,
+ 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990234f, 0.991211f,
+ 0.992188f, 0.993164f, 0.993164f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.001086f, 0.003477f, 0.006756f, 0.011604f, 0.018066f, 0.027222f, 0.039978f, 0.059448f,
+ 0.088257f, 0.132690f, 0.198120f, 0.291504f, 0.408447f, 0.531250f, 0.641602f, 0.728516f,
+ 0.793457f, 0.839844f, 0.873047f, 0.896973f, 0.915527f, 0.929199f, 0.939941f, 0.948730f,
+ 0.955566f, 0.960938f, 0.965332f, 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979492f,
+ 0.981445f, 0.983398f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.989746f,
+ 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.994629f,
+ 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f,
+ 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000982f, 0.002764f, 0.004925f, 0.008194f, 0.012703f, 0.018417f, 0.026154f, 0.037964f,
+ 0.053894f, 0.078552f, 0.113770f, 0.166626f, 0.242310f, 0.343262f, 0.460449f, 0.576660f,
+ 0.675293f, 0.753418f, 0.809570f, 0.851074f, 0.879883f, 0.902344f, 0.919434f, 0.931152f,
+ 0.941895f, 0.950195f, 0.956055f, 0.960938f, 0.965820f, 0.969727f, 0.973145f, 0.976074f,
+ 0.978027f, 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.988770f,
+ 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000723f, 0.002268f, 0.003639f, 0.006371f, 0.009392f, 0.013046f, 0.018570f, 0.026016f,
+ 0.035919f, 0.049957f, 0.070618f, 0.099609f, 0.142212f, 0.204590f, 0.290039f, 0.396973f,
+ 0.512207f, 0.619141f, 0.707520f, 0.775391f, 0.825195f, 0.860352f, 0.887207f, 0.907715f,
+ 0.923340f, 0.935547f, 0.944824f, 0.951660f, 0.958496f, 0.963379f, 0.967773f, 0.971191f,
+ 0.974121f, 0.977051f, 0.979492f, 0.980957f, 0.982910f, 0.984375f, 0.985352f, 0.987305f,
+ 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993164f,
+ 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000364f, 0.001690f, 0.003056f, 0.004982f, 0.007217f, 0.010124f, 0.013931f, 0.018738f,
+ 0.025177f, 0.034332f, 0.045990f, 0.063599f, 0.088501f, 0.124146f, 0.175781f, 0.248047f,
+ 0.341797f, 0.451416f, 0.562012f, 0.659668f, 0.738281f, 0.797852f, 0.841797f, 0.872559f,
+ 0.896484f, 0.914062f, 0.928711f, 0.938477f, 0.947266f, 0.954590f, 0.959473f, 0.964844f,
+ 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979980f, 0.981934f, 0.983398f, 0.985352f,
+ 0.986816f, 0.987793f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
+ 0.997070f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000365f, 0.001221f, 0.002531f, 0.003979f, 0.005829f, 0.007874f, 0.010475f, 0.013962f,
+ 0.018402f, 0.024368f, 0.032257f, 0.042847f, 0.057983f, 0.079346f, 0.109375f, 0.153198f,
+ 0.214233f, 0.295898f, 0.397705f, 0.506836f, 0.609863f, 0.698730f, 0.767578f, 0.817871f,
+ 0.854980f, 0.883301f, 0.903809f, 0.920410f, 0.933105f, 0.942871f, 0.950195f, 0.957031f,
+ 0.962402f, 0.966797f, 0.970703f, 0.973633f, 0.976562f, 0.979004f, 0.981445f, 0.982910f,
+ 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989746f, 0.989746f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000343f, 0.001357f, 0.002039f, 0.003130f, 0.004398f, 0.006432f, 0.008141f, 0.010925f,
+ 0.014008f, 0.018326f, 0.023331f, 0.030655f, 0.040558f, 0.053680f, 0.071960f, 0.098206f,
+ 0.134644f, 0.187012f, 0.258057f, 0.349854f, 0.455566f, 0.562012f, 0.656738f, 0.734863f,
+ 0.792969f, 0.836914f, 0.868652f, 0.894043f, 0.912598f, 0.926758f, 0.937988f, 0.947266f,
+ 0.954590f, 0.960449f, 0.964355f, 0.968750f, 0.972656f, 0.975586f, 0.978027f, 0.980469f,
+ 0.981934f, 0.983398f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.990723f,
+ 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.001185f, 0.001561f, 0.002504f, 0.003990f, 0.005272f, 0.006573f, 0.008606f,
+ 0.010933f, 0.013878f, 0.017715f, 0.022415f, 0.029068f, 0.038086f, 0.049774f, 0.066162f,
+ 0.088257f, 0.120361f, 0.164917f, 0.227173f, 0.308838f, 0.407959f, 0.515137f, 0.615723f,
+ 0.700684f, 0.767090f, 0.817383f, 0.854492f, 0.882812f, 0.904297f, 0.920898f, 0.932617f,
+ 0.943359f, 0.951172f, 0.957520f, 0.962891f, 0.967773f, 0.971191f, 0.974121f, 0.977539f,
+ 0.979492f, 0.981445f, 0.983887f, 0.985352f, 0.986816f, 0.988281f, 0.988770f, 0.989258f,
+ 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
+ 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000243f, 0.000847f, 0.001555f, 0.002224f, 0.003141f, 0.004093f, 0.005264f, 0.006817f,
+ 0.008850f, 0.010948f, 0.014053f, 0.017456f, 0.022339f, 0.028351f, 0.036011f, 0.046326f,
+ 0.060791f, 0.080444f, 0.107788f, 0.146851f, 0.201660f, 0.274658f, 0.366699f, 0.470215f,
+ 0.574707f, 0.666016f, 0.740234f, 0.797363f, 0.839355f, 0.871094f, 0.895508f, 0.913574f,
+ 0.927734f, 0.938965f, 0.947754f, 0.955566f, 0.960449f, 0.965332f, 0.969727f, 0.973145f,
+ 0.976074f, 0.979004f, 0.981445f, 0.982910f, 0.984863f, 0.986328f, 0.987305f, 0.988770f,
+ 0.989258f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f,
+ 0.995117f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.000767f, 0.001042f, 0.001934f, 0.002502f, 0.003588f, 0.004292f, 0.005558f,
+ 0.006824f, 0.008667f, 0.010872f, 0.013802f, 0.017426f, 0.021637f, 0.027176f, 0.033936f,
+ 0.043304f, 0.056549f, 0.073914f, 0.098083f, 0.132446f, 0.180664f, 0.245239f, 0.330078f,
+ 0.429199f, 0.533203f, 0.631348f, 0.711914f, 0.775879f, 0.823242f, 0.860352f, 0.886230f,
+ 0.907227f, 0.923340f, 0.935059f, 0.944824f, 0.952148f, 0.958984f, 0.964844f, 0.968750f,
+ 0.972168f, 0.975586f, 0.978516f, 0.980957f, 0.982422f, 0.983887f, 0.985840f, 0.987305f,
+ 0.988770f, 0.989746f, 0.990234f, 0.992188f, 0.992676f, 0.992676f, 0.994141f, 0.994141f,
+ 0.995117f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000000f, 0.000485f, 0.001062f, 0.001658f, 0.002398f, 0.002998f, 0.003805f, 0.004723f,
+ 0.006004f, 0.007084f, 0.009102f, 0.011093f, 0.013489f, 0.016876f, 0.020813f, 0.025803f,
+ 0.032257f, 0.040924f, 0.052673f, 0.068298f, 0.090149f, 0.120239f, 0.162598f, 0.221313f,
+ 0.298096f, 0.392822f, 0.496582f, 0.597656f, 0.684082f, 0.754883f, 0.807617f, 0.848145f,
+ 0.877930f, 0.900391f, 0.917969f, 0.931641f, 0.941406f, 0.950684f, 0.957031f, 0.962402f,
+ 0.967773f, 0.971680f, 0.974609f, 0.978027f, 0.980469f, 0.982422f, 0.984375f, 0.985840f,
+ 0.987305f, 0.988281f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
+ 0.994141f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.000477f, 0.000852f, 0.001439f, 0.002045f, 0.002424f, 0.003101f, 0.004093f,
+ 0.004887f, 0.005989f, 0.007751f, 0.008606f, 0.011002f, 0.013420f, 0.016251f, 0.020035f,
+ 0.024628f, 0.030579f, 0.039093f, 0.049255f, 0.063599f, 0.083191f, 0.109924f, 0.148071f,
+ 0.200928f, 0.270996f, 0.359863f, 0.461670f, 0.564453f, 0.656738f, 0.732910f, 0.791992f,
+ 0.836426f, 0.869629f, 0.894531f, 0.913086f, 0.928223f, 0.939453f, 0.949219f, 0.956055f,
+ 0.961914f, 0.966797f, 0.970703f, 0.975098f, 0.977051f, 0.979492f, 0.982422f, 0.983887f,
+ 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f,
+ 0.993652f, 0.994629f, 0.998047f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.998535f,
+ 0.000242f, 0.000650f, 0.000847f, 0.001138f, 0.001621f, 0.002239f, 0.002527f, 0.003325f,
+ 0.004227f, 0.005165f, 0.006462f, 0.007389f, 0.008904f, 0.011024f, 0.013130f, 0.015915f,
+ 0.019272f, 0.023819f, 0.029205f, 0.036652f, 0.046417f, 0.059418f, 0.077209f, 0.101562f,
+ 0.136230f, 0.183350f, 0.248047f, 0.331055f, 0.429688f, 0.533203f, 0.630859f, 0.711426f,
+ 0.776367f, 0.824219f, 0.861328f, 0.887695f, 0.908691f, 0.924805f, 0.937500f, 0.946777f,
+ 0.954102f, 0.960938f, 0.966309f, 0.970215f, 0.974121f, 0.977539f, 0.979492f, 0.981934f,
+ 0.983887f, 0.985840f, 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992676f,
+ 0.993164f, 0.994141f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000089f, 0.000243f, 0.000827f, 0.000964f, 0.001418f, 0.001579f, 0.002296f, 0.002914f,
+ 0.003632f, 0.004280f, 0.005344f, 0.006130f, 0.007545f, 0.008949f, 0.010498f, 0.012733f,
+ 0.015686f, 0.018646f, 0.023010f, 0.028229f, 0.034851f, 0.044098f, 0.056122f, 0.072388f,
+ 0.094788f, 0.125610f, 0.168945f, 0.228271f, 0.306396f, 0.401123f, 0.504883f, 0.604492f,
+ 0.691895f, 0.760742f, 0.813477f, 0.853027f, 0.881836f, 0.904297f, 0.921387f, 0.934570f,
+ 0.944824f, 0.953125f, 0.959961f, 0.964844f, 0.969727f, 0.973633f, 0.976562f, 0.979492f,
+ 0.981934f, 0.983887f, 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000069f, 0.000461f, 0.000609f, 0.000933f, 0.001088f, 0.001488f, 0.001900f, 0.002378f,
+ 0.003101f, 0.003687f, 0.004547f, 0.005276f, 0.006233f, 0.007282f, 0.008820f, 0.010239f,
+ 0.012581f, 0.015312f, 0.018341f, 0.022095f, 0.027344f, 0.034027f, 0.041687f, 0.053467f,
+ 0.067810f, 0.088440f, 0.117126f, 0.156616f, 0.211426f, 0.284180f, 0.375977f, 0.478760f,
+ 0.581543f, 0.672363f, 0.746094f, 0.802734f, 0.845703f, 0.877441f, 0.900879f, 0.918457f,
+ 0.933105f, 0.943848f, 0.951660f, 0.959473f, 0.964355f, 0.968750f, 0.974121f, 0.977051f,
+ 0.979492f, 0.982422f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.990234f, 0.991211f,
+ 0.992188f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000244f, 0.000348f, 0.000606f, 0.000737f, 0.001079f, 0.001458f, 0.001783f, 0.002192f,
+ 0.002924f, 0.003231f, 0.003862f, 0.004551f, 0.005169f, 0.006367f, 0.007381f, 0.008682f,
+ 0.010590f, 0.012199f, 0.014900f, 0.017761f, 0.021530f, 0.026108f, 0.032349f, 0.039642f,
+ 0.050446f, 0.064392f, 0.083313f, 0.109436f, 0.145996f, 0.197021f, 0.266357f, 0.354248f,
+ 0.455811f, 0.560059f, 0.654785f, 0.732910f, 0.793457f, 0.837891f, 0.873047f, 0.897461f,
+ 0.917480f, 0.931641f, 0.941895f, 0.951172f, 0.958984f, 0.964844f, 0.969727f, 0.973633f,
+ 0.977051f, 0.979980f, 0.981934f, 0.984375f, 0.985840f, 0.988281f, 0.989258f, 0.990234f,
+ 0.991211f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000244f, 0.000520f, 0.000592f, 0.000720f, 0.000812f, 0.001174f, 0.001500f, 0.001884f,
+ 0.002178f, 0.002831f, 0.003321f, 0.003885f, 0.004471f, 0.005436f, 0.006275f, 0.007584f,
+ 0.008675f, 0.010521f, 0.012238f, 0.014557f, 0.017197f, 0.020874f, 0.025467f, 0.030960f,
+ 0.038208f, 0.047821f, 0.061249f, 0.078552f, 0.103149f, 0.136841f, 0.184937f, 0.249878f,
+ 0.334473f, 0.435059f, 0.539551f, 0.638184f, 0.720215f, 0.784668f, 0.832031f, 0.868164f,
+ 0.894531f, 0.914062f, 0.929688f, 0.942383f, 0.950684f, 0.958984f, 0.964844f, 0.970215f,
+ 0.974121f, 0.977539f, 0.979980f, 0.982422f, 0.984863f, 0.985840f, 0.988281f, 0.989258f,
+ 0.990723f, 0.992188f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000243f, 0.000351f, 0.000603f, 0.000708f, 0.001079f, 0.001493f, 0.001752f,
+ 0.001936f, 0.002171f, 0.002911f, 0.003382f, 0.003906f, 0.004578f, 0.005222f, 0.006161f,
+ 0.007362f, 0.008850f, 0.010010f, 0.011971f, 0.014145f, 0.016983f, 0.020477f, 0.024582f,
+ 0.029739f, 0.036804f, 0.045837f, 0.057648f, 0.074829f, 0.097534f, 0.130127f, 0.174438f,
+ 0.236572f, 0.318604f, 0.416992f, 0.523926f, 0.624023f, 0.709961f, 0.777344f, 0.827148f,
+ 0.865234f, 0.893066f, 0.914062f, 0.929688f, 0.941406f, 0.951660f, 0.958496f, 0.965820f,
+ 0.969238f, 0.974609f, 0.977539f, 0.980469f, 0.983398f, 0.985352f, 0.986816f, 0.988281f,
+ 0.989746f, 0.990723f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000243f, 0.000244f, 0.000456f, 0.000592f, 0.000602f, 0.001025f, 0.001282f, 0.001656f,
+ 0.001856f, 0.002073f, 0.002535f, 0.002768f, 0.003487f, 0.003822f, 0.004574f, 0.005589f,
+ 0.006519f, 0.007336f, 0.008453f, 0.009911f, 0.011581f, 0.013985f, 0.016373f, 0.019638f,
+ 0.023819f, 0.028473f, 0.035339f, 0.043945f, 0.055939f, 0.071350f, 0.093140f, 0.123474f,
+ 0.165771f, 0.225342f, 0.304199f, 0.402344f, 0.509277f, 0.612305f, 0.702148f, 0.771973f,
+ 0.824219f, 0.863281f, 0.891113f, 0.913086f, 0.930176f, 0.942383f, 0.951660f, 0.959473f,
+ 0.965820f, 0.970215f, 0.974609f, 0.977539f, 0.980957f, 0.983887f, 0.985352f, 0.987305f,
+ 0.988770f, 0.990723f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000000f, 0.000243f, 0.000276f, 0.000557f, 0.000594f, 0.000849f, 0.000845f, 0.001282f,
+ 0.001520f, 0.001774f, 0.002119f, 0.002499f, 0.002840f, 0.003252f, 0.004005f, 0.004555f,
+ 0.005245f, 0.006168f, 0.007233f, 0.008301f, 0.009911f, 0.011330f, 0.013748f, 0.015945f,
+ 0.019089f, 0.023071f, 0.027786f, 0.034058f, 0.042542f, 0.053619f, 0.068237f, 0.089539f,
+ 0.117798f, 0.158325f, 0.215698f, 0.293213f, 0.389893f, 0.498291f, 0.603027f, 0.694824f,
+ 0.767090f, 0.821777f, 0.862305f, 0.891113f, 0.914062f, 0.930176f, 0.942383f, 0.952148f,
+ 0.959473f, 0.965820f, 0.971680f, 0.975098f, 0.978516f, 0.981445f, 0.983887f, 0.985840f,
+ 0.988281f, 0.989258f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996094f, 0.996582f,
+ 0.000240f, 0.000240f, 0.000242f, 0.000365f, 0.000678f, 0.000779f, 0.000957f, 0.001003f,
+ 0.001390f, 0.001656f, 0.001828f, 0.002274f, 0.002455f, 0.003210f, 0.003704f, 0.004097f,
+ 0.004616f, 0.005409f, 0.006180f, 0.007092f, 0.008453f, 0.009521f, 0.011154f, 0.013397f,
+ 0.015656f, 0.018509f, 0.022247f, 0.026810f, 0.032928f, 0.041046f, 0.051727f, 0.065613f,
+ 0.085205f, 0.113098f, 0.152832f, 0.208496f, 0.284424f, 0.380371f, 0.489258f, 0.596680f,
+ 0.690918f, 0.764648f, 0.821777f, 0.862305f, 0.892578f, 0.914551f, 0.931152f, 0.943848f,
+ 0.953613f, 0.960938f, 0.967773f, 0.971680f, 0.976074f, 0.979492f, 0.982422f, 0.984863f,
+ 0.986816f, 0.988281f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f,
+ 0.000000f, 0.000242f, 0.000242f, 0.000364f, 0.000465f, 0.000803f, 0.000927f, 0.000956f,
+ 0.001275f, 0.001335f, 0.001570f, 0.001968f, 0.002184f, 0.002726f, 0.003069f, 0.003294f,
+ 0.003906f, 0.004662f, 0.005245f, 0.006027f, 0.007191f, 0.008202f, 0.009460f, 0.010735f,
+ 0.012970f, 0.015404f, 0.018051f, 0.021484f, 0.026321f, 0.032135f, 0.039581f, 0.049805f,
+ 0.063538f, 0.082458f, 0.109497f, 0.147827f, 0.202393f, 0.277344f, 0.373535f, 0.483887f,
+ 0.593262f, 0.688477f, 0.764648f, 0.821289f, 0.863281f, 0.894043f, 0.916016f, 0.932129f,
+ 0.944336f, 0.954590f, 0.962402f, 0.968262f, 0.973633f, 0.977051f, 0.980957f, 0.983398f,
+ 0.985352f, 0.987793f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996582f,
+ 0.000000f, 0.000239f, 0.000360f, 0.000362f, 0.000363f, 0.000475f, 0.000767f, 0.000931f,
+ 0.000951f, 0.001211f, 0.001491f, 0.001634f, 0.002129f, 0.002457f, 0.002678f, 0.002995f,
+ 0.003393f, 0.003922f, 0.004711f, 0.005135f, 0.005955f, 0.006935f, 0.008072f, 0.009270f,
+ 0.010841f, 0.012558f, 0.014618f, 0.017502f, 0.020828f, 0.025269f, 0.030884f, 0.038269f,
+ 0.048218f, 0.061554f, 0.080505f, 0.106567f, 0.144287f, 0.197998f, 0.272705f, 0.369141f,
+ 0.480469f, 0.591797f, 0.690430f, 0.767090f, 0.824707f, 0.866699f, 0.896484f, 0.918457f,
+ 0.934570f, 0.946777f, 0.956543f, 0.963379f, 0.969727f, 0.974609f, 0.978027f, 0.981934f,
+ 0.984375f, 0.986328f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000000f, 0.000208f, 0.000238f, 0.000362f, 0.000363f, 0.000555f, 0.000600f, 0.000888f,
+ 0.001140f, 0.001140f, 0.001272f, 0.001661f, 0.001811f, 0.002041f, 0.002550f, 0.002636f,
+ 0.002941f, 0.003492f, 0.004032f, 0.004593f, 0.005062f, 0.005875f, 0.007015f, 0.007965f,
+ 0.009079f, 0.010300f, 0.012291f, 0.014229f, 0.016937f, 0.020248f, 0.024689f, 0.030151f,
+ 0.037354f, 0.047028f, 0.060211f, 0.078491f, 0.104431f, 0.141602f, 0.195068f, 0.270264f,
+ 0.367676f, 0.480957f, 0.594238f, 0.693848f, 0.770996f, 0.828613f, 0.869629f, 0.898438f,
+ 0.921875f, 0.937012f, 0.949219f, 0.958008f, 0.964844f, 0.971680f, 0.976074f, 0.979980f,
+ 0.982422f, 0.985840f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.995117f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000229f, 0.000358f, 0.000479f, 0.000362f, 0.000498f, 0.000634f,
+ 0.000836f, 0.000927f, 0.001288f, 0.001244f, 0.001605f, 0.001732f, 0.002106f, 0.002478f,
+ 0.002613f, 0.003183f, 0.003510f, 0.004021f, 0.004528f, 0.005047f, 0.005768f, 0.006859f,
+ 0.007759f, 0.008865f, 0.009933f, 0.011742f, 0.013741f, 0.016678f, 0.019897f, 0.024017f,
+ 0.029297f, 0.036469f, 0.045990f, 0.058990f, 0.077026f, 0.102722f, 0.140015f, 0.193604f,
+ 0.269531f, 0.369141f, 0.485107f, 0.600098f, 0.700195f, 0.777344f, 0.833984f, 0.873535f,
+ 0.903809f, 0.924316f, 0.940430f, 0.951172f, 0.960938f, 0.968262f, 0.973145f, 0.978027f,
+ 0.980957f, 0.983887f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995117f,
+ 0.000000f, 0.000000f, 0.000078f, 0.000353f, 0.000354f, 0.000360f, 0.000482f, 0.000573f,
+ 0.000757f, 0.000923f, 0.001230f, 0.001266f, 0.001485f, 0.001679f, 0.001963f, 0.002161f,
+ 0.002235f, 0.002739f, 0.003115f, 0.003563f, 0.003933f, 0.004436f, 0.004917f, 0.005623f,
+ 0.006599f, 0.007469f, 0.008484f, 0.010101f, 0.011665f, 0.013695f, 0.016403f, 0.019531f,
+ 0.023300f, 0.028870f, 0.035889f, 0.045135f, 0.058014f, 0.075928f, 0.101746f, 0.139160f,
+ 0.193848f, 0.271729f, 0.374023f, 0.492920f, 0.609863f, 0.709473f, 0.786133f, 0.842285f,
+ 0.880859f, 0.908691f, 0.928711f, 0.943848f, 0.954102f, 0.963867f, 0.969727f, 0.975098f,
+ 0.979004f, 0.982422f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994629f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000330f, 0.000336f, 0.000352f, 0.000478f, 0.000481f,
+ 0.000676f, 0.000822f, 0.001072f, 0.001228f, 0.001283f, 0.001417f, 0.001621f, 0.001938f,
+ 0.001953f, 0.002377f, 0.002737f, 0.002914f, 0.003624f, 0.003721f, 0.004555f, 0.004845f,
+ 0.005531f, 0.006325f, 0.007244f, 0.008255f, 0.009911f, 0.011467f, 0.013496f, 0.016068f,
+ 0.018951f, 0.022888f, 0.028183f, 0.035126f, 0.044617f, 0.057220f, 0.075134f, 0.101501f,
+ 0.139526f, 0.195679f, 0.276123f, 0.381592f, 0.503418f, 0.622070f, 0.721680f, 0.796387f,
+ 0.850098f, 0.887207f, 0.914551f, 0.933594f, 0.947266f, 0.957520f, 0.966797f, 0.972656f,
+ 0.977539f, 0.980957f, 0.993164f, 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000243f, 0.000466f, 0.000474f, 0.000475f,
+ 0.000600f, 0.000740f, 0.000796f, 0.001130f, 0.001333f, 0.001339f, 0.001440f, 0.001575f,
+ 0.001961f, 0.002031f, 0.002388f, 0.002563f, 0.003174f, 0.003345f, 0.003555f, 0.004143f,
+ 0.004681f, 0.005333f, 0.006191f, 0.007111f, 0.008278f, 0.009666f, 0.011177f, 0.013451f,
+ 0.015511f, 0.018707f, 0.022629f, 0.027847f, 0.034515f, 0.043976f, 0.056671f, 0.075012f,
+ 0.101685f, 0.140869f, 0.199341f, 0.282959f, 0.393311f, 0.519043f, 0.639160f, 0.736328f,
+ 0.809082f, 0.860352f, 0.896484f, 0.920898f, 0.939453f, 0.951660f, 0.961914f, 0.969238f,
+ 0.975098f, 0.979492f, 0.993164f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.993652f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000120f, 0.000367f, 0.000448f, 0.000589f,
+ 0.000595f, 0.000719f, 0.000707f, 0.000809f, 0.000966f, 0.001217f, 0.001369f, 0.001405f,
+ 0.001579f, 0.001786f, 0.002100f, 0.002260f, 0.002600f, 0.002762f, 0.003023f, 0.003531f,
+ 0.004219f, 0.004810f, 0.005409f, 0.006092f, 0.007053f, 0.008064f, 0.009163f, 0.010941f,
+ 0.012733f, 0.015251f, 0.018280f, 0.022202f, 0.027573f, 0.034271f, 0.043732f, 0.056458f,
+ 0.075134f, 0.102661f, 0.143433f, 0.205078f, 0.293701f, 0.409668f, 0.538574f, 0.658203f,
+ 0.753418f, 0.823242f, 0.870605f, 0.905273f, 0.927734f, 0.943848f, 0.956055f, 0.964844f,
+ 0.972168f, 0.977539f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.993164f, 0.992676f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000224f, 0.000231f, 0.000314f, 0.000562f,
+ 0.000589f, 0.000699f, 0.000717f, 0.000776f, 0.000926f, 0.000968f, 0.001242f, 0.001360f,
+ 0.001487f, 0.001564f, 0.001713f, 0.002073f, 0.002169f, 0.002380f, 0.002941f, 0.003229f,
+ 0.003534f, 0.003914f, 0.004509f, 0.005127f, 0.005939f, 0.006596f, 0.007812f, 0.009354f,
+ 0.010559f, 0.012581f, 0.015007f, 0.018021f, 0.022079f, 0.027191f, 0.034119f, 0.043427f,
+ 0.057190f, 0.075623f, 0.104492f, 0.147949f, 0.213135f, 0.308105f, 0.430664f, 0.562500f,
+ 0.681641f, 0.772949f, 0.839355f, 0.884277f, 0.913574f, 0.934570f, 0.950195f, 0.961426f,
+ 0.969238f, 0.975098f, 0.991211f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992188f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000084f, 0.000117f, 0.000119f, 0.000367f, 0.000473f,
+ 0.000555f, 0.000576f, 0.000674f, 0.000713f, 0.000816f, 0.000913f, 0.001049f, 0.001168f,
+ 0.001263f, 0.001473f, 0.001580f, 0.001781f, 0.002005f, 0.002123f, 0.002316f, 0.002674f,
+ 0.003094f, 0.003475f, 0.003967f, 0.004318f, 0.004833f, 0.005798f, 0.006699f, 0.007801f,
+ 0.008888f, 0.010429f, 0.012268f, 0.014824f, 0.017792f, 0.021790f, 0.026978f, 0.033844f,
+ 0.043518f, 0.057068f, 0.077148f, 0.107605f, 0.154053f, 0.224609f, 0.326904f, 0.456543f,
+ 0.591797f, 0.708984f, 0.795410f, 0.855957f, 0.895508f, 0.923340f, 0.942383f, 0.955566f,
+ 0.965332f, 0.973145f, 0.991211f, 0.991699f, 0.992188f, 0.992188f, 0.992188f, 0.991699f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000092f, 0.000070f, 0.000236f, 0.000119f, 0.000376f,
+ 0.000433f, 0.000561f, 0.000688f, 0.000586f, 0.000742f, 0.000842f, 0.000881f, 0.000937f,
+ 0.001141f, 0.001300f, 0.001434f, 0.001464f, 0.001598f, 0.001829f, 0.002062f, 0.002338f,
+ 0.002583f, 0.003036f, 0.003460f, 0.003704f, 0.004383f, 0.004986f, 0.005615f, 0.006439f,
+ 0.007267f, 0.008797f, 0.010330f, 0.012146f, 0.014473f, 0.017532f, 0.021622f, 0.026535f,
+ 0.033539f, 0.043579f, 0.058044f, 0.079041f, 0.111572f, 0.162109f, 0.239746f, 0.350830f,
+ 0.488770f, 0.625000f, 0.737305f, 0.817871f, 0.871582f, 0.908203f, 0.932129f, 0.949219f,
+ 0.961914f, 0.970215f, 0.990234f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000100f, 0.000115f, 0.000335f, 0.000350f,
+ 0.000355f, 0.000473f, 0.000633f, 0.000678f, 0.000695f, 0.000694f, 0.000812f, 0.000733f,
+ 0.001109f, 0.001098f, 0.001260f, 0.001452f, 0.001377f, 0.001534f, 0.001972f, 0.001982f,
+ 0.002232f, 0.002567f, 0.002764f, 0.003273f, 0.003542f, 0.004181f, 0.004738f, 0.005466f,
+ 0.006268f, 0.007126f, 0.008614f, 0.010170f, 0.012093f, 0.014359f, 0.017075f, 0.021042f,
+ 0.026459f, 0.033722f, 0.044159f, 0.059113f, 0.082092f, 0.117249f, 0.173218f, 0.259766f,
+ 0.382080f, 0.526367f, 0.662598f, 0.768066f, 0.840332f, 0.889648f, 0.920410f, 0.940918f,
+ 0.956543f, 0.966309f, 0.989746f, 0.990234f, 0.990723f, 0.990723f, 0.990723f, 0.990723f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000191f, 0.000236f, 0.000335f,
+ 0.000337f, 0.000466f, 0.000399f, 0.000608f, 0.000626f, 0.000669f, 0.000696f, 0.000808f,
+ 0.000859f, 0.000915f, 0.000903f, 0.001168f, 0.001245f, 0.001500f, 0.001525f, 0.001863f,
+ 0.001941f, 0.002121f, 0.002399f, 0.002861f, 0.002953f, 0.003632f, 0.004105f, 0.004745f,
+ 0.005333f, 0.006317f, 0.007236f, 0.008255f, 0.009857f, 0.011414f, 0.014015f, 0.016922f,
+ 0.020828f, 0.026321f, 0.034149f, 0.044861f, 0.061279f, 0.085571f, 0.124878f, 0.187866f,
+ 0.285645f, 0.420654f, 0.570801f, 0.703125f, 0.799805f, 0.864258f, 0.905273f, 0.932129f,
+ 0.950684f, 0.963379f, 0.988770f, 0.989258f, 0.989746f, 0.989746f, 0.989746f, 0.989746f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000125f, 0.000232f,
+ 0.000360f, 0.000342f, 0.000463f, 0.000388f, 0.000569f, 0.000638f, 0.000671f, 0.000791f,
+ 0.000774f, 0.000943f, 0.000774f, 0.001018f, 0.001044f, 0.001245f, 0.001377f, 0.001410f,
+ 0.001643f, 0.001970f, 0.002041f, 0.002316f, 0.002758f, 0.003023f, 0.003433f, 0.003859f,
+ 0.004444f, 0.005180f, 0.006134f, 0.006920f, 0.008102f, 0.009354f, 0.011475f, 0.013649f,
+ 0.016739f, 0.021011f, 0.026566f, 0.034454f, 0.046051f, 0.063843f, 0.090942f, 0.135498f,
+ 0.207642f, 0.319580f, 0.467529f, 0.620605f, 0.745605f, 0.830566f, 0.886230f, 0.920898f,
+ 0.943848f, 0.958984f, 0.987793f, 0.988281f, 0.988770f, 0.988770f, 0.988281f, 0.988770f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000188f, 0.000200f,
+ 0.000332f, 0.000417f, 0.000338f, 0.000459f, 0.000349f, 0.000558f, 0.000642f, 0.000636f,
+ 0.000629f, 0.000807f, 0.000695f, 0.000747f, 0.000827f, 0.001058f, 0.001182f, 0.001269f,
+ 0.001422f, 0.001472f, 0.001921f, 0.002100f, 0.002337f, 0.002462f, 0.003073f, 0.003374f,
+ 0.003708f, 0.004265f, 0.004826f, 0.005646f, 0.006596f, 0.007710f, 0.008926f, 0.011063f,
+ 0.013580f, 0.016495f, 0.020737f, 0.026459f, 0.035126f, 0.047791f, 0.066833f, 0.097778f,
+ 0.149170f, 0.233887f, 0.363037f, 0.523438f, 0.674805f, 0.788086f, 0.860352f, 0.906250f,
+ 0.935547f, 0.954102f, 0.986328f, 0.987305f, 0.987305f, 0.987305f, 0.987305f, 0.987793f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000175f,
+ 0.000155f, 0.000319f, 0.000241f, 0.000318f, 0.000455f, 0.000462f, 0.000496f, 0.000593f,
+ 0.000516f, 0.000564f, 0.000667f, 0.000668f, 0.000715f, 0.000749f, 0.000925f, 0.001111f,
+ 0.001246f, 0.001381f, 0.001443f, 0.001856f, 0.001997f, 0.002264f, 0.002363f, 0.002880f,
+ 0.003212f, 0.003727f, 0.004208f, 0.004673f, 0.005394f, 0.006367f, 0.007404f, 0.009003f,
+ 0.010651f, 0.013138f, 0.016312f, 0.020767f, 0.027054f, 0.036377f, 0.050262f, 0.071655f,
+ 0.107361f, 0.167969f, 0.269287f, 0.418457f, 0.587402f, 0.730957f, 0.828125f, 0.888184f,
+ 0.924805f, 0.948242f, 0.984863f, 0.986328f, 0.986328f, 0.985840f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000202f, 0.000133f, 0.000215f, 0.000263f, 0.000304f, 0.000442f, 0.000332f, 0.000365f,
+ 0.000403f, 0.000549f, 0.000607f, 0.000750f, 0.000788f, 0.000802f, 0.000841f, 0.000958f,
+ 0.001049f, 0.001188f, 0.001354f, 0.001318f, 0.001582f, 0.001928f, 0.002064f, 0.002321f,
+ 0.002594f, 0.003042f, 0.003222f, 0.003796f, 0.004440f, 0.005112f, 0.006081f, 0.007259f,
+ 0.008736f, 0.010612f, 0.013077f, 0.016464f, 0.020950f, 0.027664f, 0.037506f, 0.052795f,
+ 0.077698f, 0.120361f, 0.194336f, 0.317627f, 0.486572f, 0.657227f, 0.785156f, 0.865234f,
+ 0.913086f, 0.942871f, 0.983887f, 0.984863f, 0.984375f, 0.984863f, 0.984375f, 0.984863f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000122f, 0.000152f, 0.000257f, 0.000243f, 0.000288f, 0.000345f, 0.000228f,
+ 0.000358f, 0.000363f, 0.000432f, 0.000494f, 0.000530f, 0.000582f, 0.000762f, 0.000771f,
+ 0.000913f, 0.000978f, 0.001100f, 0.001305f, 0.001373f, 0.001706f, 0.001712f, 0.001922f,
+ 0.002155f, 0.002569f, 0.002573f, 0.003094f, 0.003401f, 0.004272f, 0.004978f, 0.005829f,
+ 0.006924f, 0.008453f, 0.010452f, 0.012871f, 0.016617f, 0.021072f, 0.028427f, 0.039429f,
+ 0.056732f, 0.086243f, 0.138916f, 0.231812f, 0.381592f, 0.566406f, 0.726562f, 0.833496f,
+ 0.896973f, 0.933594f, 0.981934f, 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
+ 0.000122f, 0.000121f, 0.000127f, 0.000215f, 0.000159f, 0.000233f, 0.000284f, 0.000326f,
+ 0.000339f, 0.000339f, 0.000352f, 0.000394f, 0.000623f, 0.000622f, 0.000731f, 0.000730f,
+ 0.000741f, 0.000829f, 0.000914f, 0.001017f, 0.001151f, 0.001469f, 0.001263f, 0.001480f,
+ 0.001740f, 0.002069f, 0.002104f, 0.002443f, 0.002831f, 0.003519f, 0.003929f, 0.004627f,
+ 0.005455f, 0.006634f, 0.008316f, 0.009949f, 0.012596f, 0.016495f, 0.021729f, 0.029877f,
+ 0.042084f, 0.062805f, 0.098694f, 0.165283f, 0.284668f, 0.465088f, 0.654297f, 0.793945f,
+ 0.877930f, 0.924805f, 0.979980f, 0.980957f, 0.980957f, 0.981445f, 0.981445f, 0.980957f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000150f, 0.000163f, 0.000069f, 0.000057f, 0.000121f, 0.000231f,
+ 0.000291f, 0.000304f, 0.000334f, 0.000339f, 0.000346f, 0.000569f, 0.000648f, 0.000674f,
+ 0.000649f, 0.000697f, 0.000772f, 0.000834f, 0.000972f, 0.001005f, 0.001189f, 0.001359f,
+ 0.001237f, 0.001567f, 0.001794f, 0.001963f, 0.002378f, 0.002712f, 0.002867f, 0.003853f,
+ 0.004330f, 0.005196f, 0.006516f, 0.008026f, 0.009888f, 0.012703f, 0.016479f, 0.022110f,
+ 0.031158f, 0.045746f, 0.070557f, 0.117004f, 0.204956f, 0.360596f, 0.564453f, 0.740723f,
+ 0.852051f, 0.912598f, 0.977539f, 0.979492f, 0.979492f, 0.979004f, 0.979492f, 0.979004f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000098f, 0.000082f, 0.000067f, 0.000056f, 0.000124f,
+ 0.000193f, 0.000240f, 0.000258f, 0.000310f, 0.000326f, 0.000335f, 0.000341f, 0.000471f,
+ 0.000613f, 0.000494f, 0.000716f, 0.000742f, 0.000804f, 0.000873f, 0.000832f, 0.001070f,
+ 0.001120f, 0.001146f, 0.001225f, 0.001696f, 0.001814f, 0.002041f, 0.002419f, 0.002941f,
+ 0.003433f, 0.004154f, 0.004818f, 0.006077f, 0.007652f, 0.009521f, 0.012444f, 0.017029f,
+ 0.023193f, 0.033539f, 0.050690f, 0.082092f, 0.144043f, 0.265869f, 0.463379f, 0.672363f,
+ 0.818848f, 0.898438f, 0.975586f, 0.976562f, 0.976562f, 0.976562f, 0.976074f, 0.976562f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000114f, 0.000096f, 0.000079f, 0.000125f, 0.000056f,
+ 0.000142f, 0.000120f, 0.000195f, 0.000246f, 0.000321f, 0.000305f, 0.000319f, 0.000395f,
+ 0.000442f, 0.000540f, 0.000642f, 0.000638f, 0.000696f, 0.000674f, 0.000687f, 0.000857f,
+ 0.000955f, 0.001128f, 0.001224f, 0.001364f, 0.001347f, 0.001555f, 0.001910f, 0.002245f,
+ 0.002714f, 0.003229f, 0.003824f, 0.004673f, 0.005676f, 0.007225f, 0.009293f, 0.012802f,
+ 0.017273f, 0.024368f, 0.036682f, 0.058075f, 0.100952f, 0.188721f, 0.358154f, 0.587891f,
+ 0.775879f, 0.881348f, 0.972168f, 0.972656f, 0.972656f, 0.973145f, 0.973145f, 0.973633f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000112f, 0.000093f, 0.000079f, 0.000067f,
+ 0.000057f, 0.000049f, 0.000133f, 0.000137f, 0.000163f, 0.000244f, 0.000328f, 0.000366f,
+ 0.000356f, 0.000415f, 0.000436f, 0.000543f, 0.000555f, 0.000638f, 0.000597f, 0.000702f,
+ 0.000786f, 0.000648f, 0.000891f, 0.000804f, 0.001218f, 0.001070f, 0.001355f, 0.001731f,
+ 0.002171f, 0.002352f, 0.002796f, 0.003546f, 0.004189f, 0.005558f, 0.006939f, 0.009209f,
+ 0.012337f, 0.017776f, 0.026016f, 0.040833f, 0.069946f, 0.130981f, 0.262207f, 0.489258f,
+ 0.719238f, 0.859375f, 0.968262f, 0.969238f, 0.969727f, 0.969727f, 0.969727f, 0.969727f,
+ 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000110f, 0.000093f, 0.000080f,
+ 0.000068f, 0.000094f, 0.000119f, 0.000117f, 0.000120f, 0.000123f, 0.000173f, 0.000263f,
+ 0.000263f, 0.000359f, 0.000386f, 0.000390f, 0.000401f, 0.000556f, 0.000549f, 0.000573f,
+ 0.000502f, 0.000707f, 0.000789f, 0.000629f, 0.000847f, 0.001003f, 0.001024f, 0.001242f,
+ 0.001423f, 0.001877f, 0.002012f, 0.002571f, 0.003071f, 0.003925f, 0.005131f, 0.006767f,
+ 0.009140f, 0.012672f, 0.018509f, 0.028992f, 0.048309f, 0.089233f, 0.183838f, 0.383545f,
+ 0.646973f, 0.830078f, 0.963867f, 0.964844f, 0.964844f, 0.965820f, 0.965820f, 0.965820f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000113f, 0.000095f,
+ 0.000083f, 0.000070f, 0.000061f, 0.000054f, 0.000048f, 0.000042f, 0.000115f, 0.000112f,
+ 0.000151f, 0.000213f, 0.000309f, 0.000298f, 0.000359f, 0.000337f, 0.000382f, 0.000440f,
+ 0.000576f, 0.000477f, 0.000453f, 0.000690f, 0.000687f, 0.000795f, 0.000776f, 0.000911f,
+ 0.001117f, 0.001119f, 0.001352f, 0.002001f, 0.002140f, 0.002832f, 0.003609f, 0.004715f,
+ 0.006302f, 0.008835f, 0.013115f, 0.020004f, 0.032867f, 0.060333f, 0.124512f, 0.281982f,
+ 0.557617f, 0.794434f, 0.959473f, 0.959961f, 0.960449f, 0.960449f, 0.960449f, 0.959961f,
+ 0.000122f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000116f,
+ 0.000098f, 0.000087f, 0.000076f, 0.000065f, 0.000057f, 0.000050f, 0.000045f, 0.000091f,
+ 0.000074f, 0.000106f, 0.000185f, 0.000193f, 0.000228f, 0.000328f, 0.000323f, 0.000399f,
+ 0.000429f, 0.000498f, 0.000552f, 0.000432f, 0.000542f, 0.000592f, 0.000599f, 0.000729f,
+ 0.000734f, 0.000885f, 0.001304f, 0.001273f, 0.001756f, 0.001931f, 0.002445f, 0.003120f,
+ 0.004456f, 0.006165f, 0.008751f, 0.013466f, 0.022141f, 0.040192f, 0.082397f, 0.195679f,
+ 0.455322f, 0.745117f, 0.952637f, 0.953613f, 0.953613f, 0.954102f, 0.952637f, 0.953613f,
+ 0.000000f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
+ 0.000118f, 0.000118f, 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000117f,
+ 0.000117f, 0.000104f, 0.000092f, 0.000079f, 0.000071f, 0.000062f, 0.000055f, 0.000049f,
+ 0.000044f, 0.000039f, 0.000099f, 0.000106f, 0.000158f, 0.000169f, 0.000241f, 0.000274f,
+ 0.000293f, 0.000389f, 0.000360f, 0.000399f, 0.000387f, 0.000446f, 0.000401f, 0.000530f,
+ 0.000565f, 0.000691f, 0.000722f, 0.000848f, 0.001147f, 0.001418f, 0.001677f, 0.002087f,
+ 0.002972f, 0.004169f, 0.005623f, 0.008835f, 0.014404f, 0.026077f, 0.053467f, 0.129395f,
+ 0.346924f, 0.685059f, 0.943848f, 0.945801f, 0.945801f, 0.945312f, 0.945801f, 0.945801f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000116f, 0.000117f, 0.000117f, 0.000116f, 0.000116f,
+ 0.000115f, 0.000116f, 0.000115f, 0.000116f, 0.000115f, 0.000115f, 0.000115f, 0.000115f,
+ 0.000115f, 0.000115f, 0.000110f, 0.000097f, 0.000086f, 0.000077f, 0.000067f, 0.000060f,
+ 0.000053f, 0.000048f, 0.000043f, 0.000061f, 0.000090f, 0.000083f, 0.000139f, 0.000139f,
+ 0.000216f, 0.000254f, 0.000307f, 0.000358f, 0.000269f, 0.000377f, 0.000324f, 0.000369f,
+ 0.000405f, 0.000455f, 0.000524f, 0.000706f, 0.000701f, 0.001012f, 0.001206f, 0.001316f,
+ 0.001663f, 0.002350f, 0.003571f, 0.005505f, 0.008873f, 0.016006f, 0.033234f, 0.081848f,
+ 0.244751f, 0.605469f, 0.934082f, 0.935059f, 0.936035f, 0.935547f, 0.935547f, 0.935547f,
+ 0.000105f, 0.000114f, 0.000113f, 0.000113f, 0.000111f, 0.000111f, 0.000112f, 0.000111f,
+ 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000111f, 0.000112f, 0.000112f, 0.000112f,
+ 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000105f, 0.000093f, 0.000083f, 0.000074f,
+ 0.000066f, 0.000059f, 0.000053f, 0.000048f, 0.000043f, 0.000062f, 0.000052f, 0.000063f,
+ 0.000092f, 0.000146f, 0.000176f, 0.000216f, 0.000227f, 0.000263f, 0.000244f, 0.000267f,
+ 0.000370f, 0.000326f, 0.000360f, 0.000391f, 0.000505f, 0.000618f, 0.000726f, 0.000969f,
+ 0.001117f, 0.001651f, 0.002131f, 0.003090f, 0.005188f, 0.009499f, 0.019836f, 0.049042f,
+ 0.159180f, 0.509766f, 0.921875f, 0.922852f, 0.922852f, 0.922363f, 0.923340f, 0.922852f,
+ 0.000000f, 0.000000f, 0.000065f, 0.000098f, 0.000096f, 0.000101f, 0.000100f, 0.000104f,
+ 0.000104f, 0.000103f, 0.000106f, 0.000106f, 0.000106f, 0.000105f, 0.000107f, 0.000107f,
+ 0.000106f, 0.000107f, 0.000107f, 0.000108f, 0.000107f, 0.000108f, 0.000104f, 0.000092f,
+ 0.000082f, 0.000075f, 0.000067f, 0.000059f, 0.000054f, 0.000048f, 0.000044f, 0.000039f,
+ 0.000037f, 0.000058f, 0.000066f, 0.000122f, 0.000137f, 0.000175f, 0.000208f, 0.000194f,
+ 0.000208f, 0.000240f, 0.000270f, 0.000281f, 0.000323f, 0.000364f, 0.000479f, 0.000591f,
+ 0.000712f, 0.000986f, 0.001224f, 0.001896f, 0.002996f, 0.005196f, 0.010506f, 0.027527f,
+ 0.095581f, 0.399658f, 0.905762f, 0.906738f, 0.906250f, 0.905762f, 0.905762f, 0.907227f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.000030f, 0.000054f, 0.000061f, 0.000081f,
+ 0.000087f, 0.000088f, 0.000089f, 0.000093f, 0.000093f, 0.000096f, 0.000096f, 0.000097f,
+ 0.000098f, 0.000099f, 0.000098f, 0.000100f, 0.000100f, 0.000101f, 0.000100f, 0.000101f,
+ 0.000101f, 0.000092f, 0.000082f, 0.000074f, 0.000067f, 0.000060f, 0.000054f, 0.000049f,
+ 0.000045f, 0.000040f, 0.000036f, 0.000037f, 0.000059f, 0.000077f, 0.000093f, 0.000143f,
+ 0.000155f, 0.000188f, 0.000178f, 0.000184f, 0.000231f, 0.000234f, 0.000272f, 0.000352f,
+ 0.000420f, 0.000525f, 0.000764f, 0.001091f, 0.001653f, 0.002705f, 0.005474f, 0.013939f,
+ 0.051880f, 0.283691f, 0.883789f, 0.884766f, 0.885254f, 0.885254f, 0.885742f, 0.885254f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f,
+ 0.000032f, 0.000046f, 0.000050f, 0.000060f, 0.000065f, 0.000065f, 0.000075f, 0.000078f,
+ 0.000080f, 0.000079f, 0.000084f, 0.000083f, 0.000087f, 0.000087f, 0.000089f, 0.000090f,
+ 0.000091f, 0.000091f, 0.000092f, 0.000092f, 0.000083f, 0.000075f, 0.000068f, 0.000062f,
+ 0.000056f, 0.000050f, 0.000046f, 0.000042f, 0.000037f, 0.000039f, 0.000044f, 0.000072f,
+ 0.000068f, 0.000089f, 0.000125f, 0.000124f, 0.000126f, 0.000153f, 0.000183f, 0.000212f,
+ 0.000219f, 0.000311f, 0.000363f, 0.000566f, 0.000846f, 0.001332f, 0.002522f, 0.006252f,
+ 0.023834f, 0.175415f, 0.855957f, 0.856934f, 0.856934f, 0.856934f, 0.857422f, 0.856934f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000024f, 0.000028f,
+ 0.000040f, 0.000044f, 0.000051f, 0.000053f, 0.000060f, 0.000063f, 0.000064f, 0.000067f,
+ 0.000071f, 0.000072f, 0.000074f, 0.000076f, 0.000077f, 0.000079f, 0.000079f, 0.000075f,
+ 0.000068f, 0.000062f, 0.000056f, 0.000051f, 0.000046f, 0.000042f, 0.000038f, 0.000034f,
+ 0.000031f, 0.000030f, 0.000045f, 0.000079f, 0.000081f, 0.000107f, 0.000114f, 0.000106f,
+ 0.000144f, 0.000136f, 0.000171f, 0.000254f, 0.000377f, 0.000531f, 0.001037f, 0.002504f,
+ 0.009140f, 0.088379f, 0.818848f, 0.820801f, 0.819824f, 0.820312f, 0.819336f, 0.820801f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000014f, 0.000021f, 0.000028f,
+ 0.000034f, 0.000036f, 0.000042f, 0.000046f, 0.000049f, 0.000052f, 0.000054f, 0.000056f,
+ 0.000059f, 0.000061f, 0.000064f, 0.000061f, 0.000055f, 0.000050f, 0.000045f, 0.000041f,
+ 0.000037f, 0.000033f, 0.000030f, 0.000027f, 0.000024f, 0.000033f, 0.000060f, 0.000059f,
+ 0.000075f, 0.000073f, 0.000101f, 0.000089f, 0.000144f, 0.000226f, 0.000384f, 0.000847f,
+ 0.003033f, 0.031860f, 0.770020f, 0.770996f, 0.772461f, 0.771973f, 0.772461f, 0.771973f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000016f,
+ 0.000021f, 0.000023f, 0.000029f, 0.000032f, 0.000036f, 0.000039f, 0.000042f, 0.000044f,
+ 0.000042f, 0.000038f, 0.000035f, 0.000031f, 0.000028f, 0.000025f, 0.000022f, 0.000020f,
+ 0.000017f, 0.000024f, 0.000040f, 0.000047f, 0.000053f, 0.000063f, 0.000087f, 0.000190f,
+ 0.000666f, 0.007278f, 0.708496f, 0.709961f, 0.710449f, 0.710938f, 0.710938f, 0.710449f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000005f, 0.000010f, 0.000014f, 0.000018f, 0.000021f, 0.000024f, 0.000024f, 0.000021f,
+ 0.000018f, 0.000016f, 0.000014f, 0.000012f, 0.000008f, 0.000020f, 0.000022f, 0.000025f,
+ 0.000073f, 0.000744f, 0.632324f, 0.632812f, 0.633789f, 0.633789f, 0.633301f, 0.632812f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000007f, 0.000006f, 0.000004f,
+ 0.000005f, 0.000007f, 0.543945f, 0.545410f, 0.545410f, 0.545410f, 0.546387f, 0.545898f,
+ },
+ {
+ 0.159546f, 0.492676f, 0.684570f, 0.783203f, 0.838379f, 0.873535f, 0.897949f, 0.913574f,
+ 0.926270f, 0.936035f, 0.943359f, 0.950195f, 0.955566f, 0.959473f, 0.963379f, 0.966797f,
+ 0.969238f, 0.972168f, 0.973633f, 0.976562f, 0.978027f, 0.979492f, 0.980957f, 0.982422f,
+ 0.983887f, 0.984863f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.989746f,
+ 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
+ 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.034119f, 0.154175f, 0.341309f, 0.532227f, 0.672363f, 0.763184f, 0.820801f, 0.858398f,
+ 0.885742f, 0.904297f, 0.918945f, 0.929199f, 0.938965f, 0.945801f, 0.951660f, 0.956543f,
+ 0.961426f, 0.964355f, 0.968262f, 0.970703f, 0.973145f, 0.975586f, 0.977539f, 0.979004f,
+ 0.980469f, 0.981934f, 0.983398f, 0.984375f, 0.985352f, 0.986328f, 0.987305f, 0.988281f,
+ 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993164f,
+ 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.013390f, 0.056915f, 0.134155f, 0.257080f, 0.412109f, 0.560547f, 0.675781f, 0.755859f,
+ 0.812012f, 0.851074f, 0.877930f, 0.898926f, 0.913574f, 0.925781f, 0.935059f, 0.942871f,
+ 0.949707f, 0.954590f, 0.959473f, 0.963379f, 0.966797f, 0.969238f, 0.971680f, 0.975098f,
+ 0.976562f, 0.978516f, 0.979980f, 0.980957f, 0.982422f, 0.984375f, 0.985352f, 0.985840f,
+ 0.987305f, 0.987793f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.991699f, 0.992188f,
+ 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.995605f,
+ 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.006939f, 0.027863f, 0.061951f, 0.117859f, 0.204834f, 0.324707f, 0.460205f, 0.585449f,
+ 0.684570f, 0.757324f, 0.810059f, 0.847168f, 0.874023f, 0.895996f, 0.910645f, 0.922852f,
+ 0.933105f, 0.940918f, 0.947754f, 0.953613f, 0.958496f, 0.961914f, 0.965820f, 0.968750f,
+ 0.971680f, 0.974121f, 0.976074f, 0.978027f, 0.979492f, 0.981445f, 0.982910f, 0.983887f,
+ 0.984863f, 0.986328f, 0.987305f, 0.988281f, 0.988770f, 0.989746f, 0.990234f, 0.990723f,
+ 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
+ 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
+ 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
+ 0.004211f, 0.016022f, 0.034119f, 0.061432f, 0.104797f, 0.170288f, 0.262695f, 0.377686f,
+ 0.499756f, 0.608887f, 0.696777f, 0.762207f, 0.810547f, 0.847168f, 0.873535f, 0.893066f,
+ 0.910156f, 0.922852f, 0.932617f, 0.939941f, 0.946777f, 0.953125f, 0.958496f, 0.961914f,
+ 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.975586f, 0.977539f, 0.979492f, 0.981445f,
+ 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987793f, 0.987793f, 0.989258f, 0.989746f,
+ 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.992676f, 0.993652f, 0.994141f, 0.994629f,
+ 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999023f,
+ 0.002724f, 0.010384f, 0.020813f, 0.036285f, 0.059784f, 0.093933f, 0.145508f, 0.218018f,
+ 0.313232f, 0.424072f, 0.534180f, 0.632812f, 0.709961f, 0.769531f, 0.815918f, 0.848145f,
+ 0.874512f, 0.894043f, 0.909668f, 0.922363f, 0.932129f, 0.939941f, 0.946777f, 0.953125f,
+ 0.958008f, 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.976562f, 0.978516f,
+ 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.985352f, 0.986816f, 0.987793f, 0.988281f,
+ 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.002113f, 0.007004f, 0.014091f, 0.023895f, 0.037811f, 0.057373f, 0.085632f, 0.127075f,
+ 0.185425f, 0.263672f, 0.360596f, 0.465576f, 0.566895f, 0.655762f, 0.725586f, 0.779297f,
+ 0.822266f, 0.853516f, 0.877441f, 0.895996f, 0.911621f, 0.923828f, 0.933105f, 0.940918f,
+ 0.947754f, 0.953613f, 0.957520f, 0.962402f, 0.965820f, 0.968750f, 0.972168f, 0.974121f,
+ 0.976074f, 0.978027f, 0.980469f, 0.981934f, 0.983398f, 0.984863f, 0.985352f, 0.986328f,
+ 0.988281f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993164f,
+ 0.993652f, 0.994629f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.001575f, 0.005211f, 0.010040f, 0.016220f, 0.025665f, 0.037415f, 0.054138f, 0.078491f,
+ 0.112915f, 0.160156f, 0.225464f, 0.308594f, 0.405029f, 0.506348f, 0.599121f, 0.678711f,
+ 0.743164f, 0.791016f, 0.829590f, 0.859375f, 0.881836f, 0.899414f, 0.913086f, 0.924805f,
+ 0.934570f, 0.942383f, 0.948730f, 0.955078f, 0.958984f, 0.963379f, 0.966797f, 0.970215f,
+ 0.972168f, 0.974609f, 0.977051f, 0.979004f, 0.980957f, 0.981934f, 0.983398f, 0.984863f,
+ 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992188f,
+ 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.000985f, 0.004086f, 0.007362f, 0.011887f, 0.018127f, 0.026199f, 0.036804f, 0.052002f,
+ 0.072754f, 0.101318f, 0.140747f, 0.195190f, 0.266113f, 0.352539f, 0.448730f, 0.543945f,
+ 0.630371f, 0.702637f, 0.759277f, 0.803711f, 0.839355f, 0.865234f, 0.886719f, 0.903320f,
+ 0.916504f, 0.927734f, 0.936523f, 0.944336f, 0.950195f, 0.955566f, 0.959961f, 0.964355f,
+ 0.967773f, 0.970215f, 0.973145f, 0.975586f, 0.978027f, 0.979004f, 0.980957f, 0.982910f,
+ 0.984375f, 0.985352f, 0.987305f, 0.987305f, 0.988770f, 0.990234f, 0.990234f, 0.991699f,
+ 0.991699f, 0.993164f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.999023f,
+ 0.000829f, 0.002878f, 0.005596f, 0.009109f, 0.013359f, 0.019089f, 0.026901f, 0.036774f,
+ 0.049347f, 0.067200f, 0.091736f, 0.125854f, 0.171631f, 0.232544f, 0.308594f, 0.397461f,
+ 0.491455f, 0.581055f, 0.659668f, 0.724609f, 0.775879f, 0.817383f, 0.848633f, 0.873047f,
+ 0.892090f, 0.907715f, 0.920410f, 0.930664f, 0.939453f, 0.946289f, 0.951660f, 0.957520f,
+ 0.960938f, 0.965820f, 0.968750f, 0.972168f, 0.974609f, 0.976562f, 0.978516f, 0.980469f,
+ 0.981934f, 0.983887f, 0.984863f, 0.986328f, 0.986816f, 0.988770f, 0.989746f, 0.990234f,
+ 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f,
+ 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000836f, 0.002403f, 0.004837f, 0.006950f, 0.010269f, 0.014679f, 0.019699f, 0.026291f,
+ 0.035431f, 0.046875f, 0.062744f, 0.084045f, 0.113403f, 0.152588f, 0.204712f, 0.271729f,
+ 0.353271f, 0.443115f, 0.532715f, 0.617188f, 0.688477f, 0.748047f, 0.793945f, 0.829102f,
+ 0.857422f, 0.880371f, 0.898438f, 0.912598f, 0.924316f, 0.934082f, 0.941406f, 0.948242f,
+ 0.954590f, 0.959473f, 0.963379f, 0.967285f, 0.970215f, 0.973145f, 0.975586f, 0.977539f,
+ 0.979980f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988281f, 0.988770f,
+ 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000698f, 0.002052f, 0.003618f, 0.005703f, 0.008430f, 0.011230f, 0.015083f, 0.019821f,
+ 0.026474f, 0.034393f, 0.044922f, 0.059204f, 0.077698f, 0.102661f, 0.136963f, 0.182373f,
+ 0.241089f, 0.314941f, 0.398926f, 0.489014f, 0.575195f, 0.652344f, 0.717285f, 0.769043f,
+ 0.810059f, 0.842773f, 0.869141f, 0.888672f, 0.904785f, 0.917969f, 0.928711f, 0.936523f,
+ 0.945312f, 0.951660f, 0.957031f, 0.961426f, 0.964844f, 0.968750f, 0.971680f, 0.974121f,
+ 0.976562f, 0.979004f, 0.980469f, 0.982422f, 0.983887f, 0.985352f, 0.986816f, 0.987793f,
+ 0.988770f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994141f,
+ 0.994629f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.000244f, 0.001565f, 0.002975f, 0.004433f, 0.006596f, 0.008957f, 0.012215f, 0.015533f,
+ 0.020294f, 0.026062f, 0.033722f, 0.042816f, 0.055237f, 0.071960f, 0.094543f, 0.124023f,
+ 0.164185f, 0.216309f, 0.281738f, 0.360352f, 0.446533f, 0.534180f, 0.615234f, 0.686523f,
+ 0.743652f, 0.790527f, 0.825684f, 0.855957f, 0.878418f, 0.895996f, 0.911133f, 0.923340f,
+ 0.933105f, 0.941406f, 0.948242f, 0.953613f, 0.959473f, 0.963379f, 0.966797f, 0.970703f,
+ 0.973145f, 0.976074f, 0.978516f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986328f,
+ 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f,
+ 0.994141f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f,
+ 0.000365f, 0.001394f, 0.002546f, 0.004055f, 0.005394f, 0.007465f, 0.009674f, 0.012070f,
+ 0.015556f, 0.019913f, 0.025696f, 0.032623f, 0.041046f, 0.052643f, 0.067383f, 0.087463f,
+ 0.113708f, 0.148315f, 0.194946f, 0.254395f, 0.326416f, 0.408691f, 0.495117f, 0.579102f,
+ 0.654297f, 0.716797f, 0.768066f, 0.809570f, 0.843262f, 0.868652f, 0.888184f, 0.904785f,
+ 0.918457f, 0.929199f, 0.937500f, 0.945801f, 0.951660f, 0.957520f, 0.961914f, 0.965820f,
+ 0.969238f, 0.972656f, 0.975098f, 0.978027f, 0.979492f, 0.981934f, 0.983398f, 0.984863f,
+ 0.986328f, 0.987793f, 0.989258f, 0.989746f, 0.991211f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994629f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000596f, 0.001077f, 0.001882f, 0.003033f, 0.004559f, 0.006241f, 0.007805f, 0.010002f,
+ 0.012840f, 0.015900f, 0.019974f, 0.025131f, 0.031250f, 0.039337f, 0.049988f, 0.063843f,
+ 0.080933f, 0.105164f, 0.135986f, 0.176880f, 0.230103f, 0.296631f, 0.374268f, 0.459961f,
+ 0.544434f, 0.623535f, 0.691895f, 0.748535f, 0.792969f, 0.829102f, 0.857422f, 0.880371f,
+ 0.897949f, 0.913086f, 0.924805f, 0.934570f, 0.942383f, 0.949219f, 0.955566f, 0.960938f,
+ 0.964844f, 0.968750f, 0.971191f, 0.974121f, 0.977051f, 0.979004f, 0.980957f, 0.982910f,
+ 0.984863f, 0.985840f, 0.987305f, 0.989258f, 0.989746f, 0.991211f, 0.991211f, 0.992676f,
+ 0.993164f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.000243f, 0.001173f, 0.001889f, 0.002661f, 0.003933f, 0.005131f, 0.006496f, 0.008324f,
+ 0.010574f, 0.013115f, 0.015839f, 0.019913f, 0.024445f, 0.030609f, 0.037781f, 0.047333f,
+ 0.059906f, 0.075928f, 0.097229f, 0.124939f, 0.161743f, 0.209595f, 0.271240f, 0.343994f,
+ 0.426758f, 0.511719f, 0.592773f, 0.666504f, 0.727051f, 0.776855f, 0.815918f, 0.847656f,
+ 0.871582f, 0.892090f, 0.907715f, 0.920898f, 0.931152f, 0.940918f, 0.947754f, 0.953613f,
+ 0.958496f, 0.963867f, 0.967773f, 0.970703f, 0.974121f, 0.976074f, 0.979004f, 0.980469f,
+ 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.990234f, 0.990234f, 0.992188f,
+ 0.992188f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000351f, 0.000842f, 0.001560f, 0.002363f, 0.003258f, 0.004131f, 0.005272f, 0.007179f,
+ 0.008682f, 0.010643f, 0.013016f, 0.016037f, 0.019516f, 0.024078f, 0.029602f, 0.036591f,
+ 0.045044f, 0.056641f, 0.071350f, 0.090576f, 0.116211f, 0.149414f, 0.193237f, 0.248779f,
+ 0.317871f, 0.396973f, 0.481201f, 0.564453f, 0.640137f, 0.705566f, 0.759766f, 0.802734f,
+ 0.836914f, 0.863281f, 0.885742f, 0.902832f, 0.916992f, 0.927734f, 0.937012f, 0.945801f,
+ 0.952637f, 0.958008f, 0.961914f, 0.966309f, 0.970703f, 0.974121f, 0.976074f, 0.978516f,
+ 0.980957f, 0.982910f, 0.984863f, 0.985840f, 0.987305f, 0.988281f, 0.989746f, 0.990723f,
+ 0.991211f, 0.992676f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
+ 0.000000f, 0.000886f, 0.001405f, 0.001915f, 0.002651f, 0.003870f, 0.004845f, 0.006035f,
+ 0.006912f, 0.008812f, 0.010887f, 0.013229f, 0.016022f, 0.019196f, 0.023590f, 0.028992f,
+ 0.035248f, 0.043304f, 0.053711f, 0.066956f, 0.085083f, 0.107727f, 0.138428f, 0.178589f,
+ 0.229980f, 0.293945f, 0.370117f, 0.453369f, 0.537109f, 0.616699f, 0.685059f, 0.743164f,
+ 0.790039f, 0.826660f, 0.856445f, 0.878906f, 0.897949f, 0.913574f, 0.925293f, 0.935547f,
+ 0.943848f, 0.951172f, 0.957031f, 0.961914f, 0.966797f, 0.970215f, 0.973145f, 0.976562f,
+ 0.979004f, 0.980469f, 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.989746f,
+ 0.991211f, 0.992188f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000104f, 0.000719f, 0.001065f, 0.001970f, 0.002544f, 0.003149f, 0.004230f, 0.005138f,
+ 0.006119f, 0.007580f, 0.009201f, 0.010902f, 0.013260f, 0.015526f, 0.019272f, 0.022858f,
+ 0.027512f, 0.033569f, 0.041199f, 0.050873f, 0.063782f, 0.079895f, 0.101135f, 0.128906f,
+ 0.165771f, 0.213745f, 0.273193f, 0.345703f, 0.427002f, 0.511719f, 0.592773f, 0.666016f,
+ 0.727051f, 0.776367f, 0.817871f, 0.848633f, 0.875000f, 0.894531f, 0.909668f, 0.922852f,
+ 0.934082f, 0.942383f, 0.949707f, 0.956055f, 0.961914f, 0.966309f, 0.970215f, 0.973145f,
+ 0.976562f, 0.978516f, 0.980957f, 0.982910f, 0.984375f, 0.986328f, 0.987305f, 0.988281f,
+ 0.989746f, 0.991211f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000240f, 0.000686f, 0.001052f, 0.001375f, 0.002308f, 0.002735f, 0.003510f, 0.004269f,
+ 0.005173f, 0.006649f, 0.007442f, 0.009109f, 0.011246f, 0.012886f, 0.015732f, 0.018829f,
+ 0.022354f, 0.026672f, 0.032867f, 0.039764f, 0.048492f, 0.060455f, 0.075806f, 0.095276f,
+ 0.121033f, 0.155273f, 0.199097f, 0.255859f, 0.324463f, 0.404053f, 0.488525f, 0.571289f,
+ 0.646484f, 0.711426f, 0.765625f, 0.808105f, 0.841797f, 0.869141f, 0.890137f, 0.907227f,
+ 0.920898f, 0.931641f, 0.940918f, 0.948730f, 0.955078f, 0.960449f, 0.965820f, 0.969727f,
+ 0.972656f, 0.976562f, 0.978516f, 0.980957f, 0.982910f, 0.984863f, 0.986328f, 0.987793f,
+ 0.989746f, 0.990723f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
+ 0.000244f, 0.000597f, 0.000939f, 0.001369f, 0.001999f, 0.002329f, 0.003105f, 0.003786f,
+ 0.004395f, 0.005413f, 0.006474f, 0.007793f, 0.009254f, 0.010971f, 0.012970f, 0.015526f,
+ 0.018112f, 0.022049f, 0.026581f, 0.031586f, 0.038666f, 0.046967f, 0.057617f, 0.071777f,
+ 0.089783f, 0.113953f, 0.145264f, 0.186646f, 0.239990f, 0.305908f, 0.383301f, 0.467285f,
+ 0.551270f, 0.629883f, 0.697266f, 0.754883f, 0.799805f, 0.835938f, 0.864258f, 0.886719f,
+ 0.905273f, 0.918945f, 0.931152f, 0.940918f, 0.948242f, 0.955078f, 0.961426f, 0.965332f,
+ 0.969727f, 0.973633f, 0.976074f, 0.979004f, 0.980957f, 0.983398f, 0.984863f, 0.987305f,
+ 0.988281f, 0.989258f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000000f, 0.000475f, 0.000891f, 0.001390f, 0.001730f, 0.002060f, 0.002501f, 0.003109f,
+ 0.003836f, 0.004837f, 0.005852f, 0.006859f, 0.007740f, 0.009216f, 0.010918f, 0.012863f,
+ 0.014915f, 0.017731f, 0.021317f, 0.025482f, 0.030930f, 0.037262f, 0.044891f, 0.055115f,
+ 0.068298f, 0.085510f, 0.107910f, 0.137207f, 0.176025f, 0.226929f, 0.289551f, 0.364746f,
+ 0.447998f, 0.532715f, 0.613770f, 0.685547f, 0.744629f, 0.791992f, 0.830078f, 0.860352f,
+ 0.884277f, 0.903320f, 0.917969f, 0.930176f, 0.939941f, 0.947754f, 0.954590f, 0.961426f,
+ 0.966309f, 0.970215f, 0.973145f, 0.976562f, 0.979492f, 0.981445f, 0.983398f, 0.985352f,
+ 0.987793f, 0.988281f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996094f,
+ 0.000102f, 0.000243f, 0.000844f, 0.001124f, 0.001554f, 0.002077f, 0.002098f, 0.002682f,
+ 0.003357f, 0.004280f, 0.005035f, 0.005764f, 0.006805f, 0.007633f, 0.009354f, 0.010872f,
+ 0.012665f, 0.015099f, 0.017258f, 0.020599f, 0.024887f, 0.029495f, 0.035522f, 0.042999f,
+ 0.053070f, 0.065125f, 0.081299f, 0.102661f, 0.130371f, 0.166992f, 0.215088f, 0.275635f,
+ 0.348877f, 0.431641f, 0.517578f, 0.600098f, 0.672852f, 0.735352f, 0.785645f, 0.826172f,
+ 0.856934f, 0.881836f, 0.900879f, 0.916992f, 0.930176f, 0.940430f, 0.947754f, 0.955078f,
+ 0.960938f, 0.966309f, 0.969238f, 0.973633f, 0.977051f, 0.979492f, 0.981934f, 0.983887f,
+ 0.986328f, 0.987793f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000241f, 0.000242f, 0.000823f, 0.000956f, 0.001225f, 0.001549f, 0.002031f, 0.002613f,
+ 0.003124f, 0.003574f, 0.004467f, 0.004955f, 0.005672f, 0.006752f, 0.007603f, 0.009186f,
+ 0.010704f, 0.012741f, 0.014366f, 0.017487f, 0.020142f, 0.024002f, 0.028915f, 0.034943f,
+ 0.041656f, 0.050964f, 0.062622f, 0.077881f, 0.097961f, 0.124207f, 0.158936f, 0.204590f,
+ 0.263184f, 0.334961f, 0.416748f, 0.502930f, 0.587891f, 0.664062f, 0.728516f, 0.780762f,
+ 0.822266f, 0.854492f, 0.879395f, 0.900879f, 0.916504f, 0.928711f, 0.940430f, 0.948730f,
+ 0.955566f, 0.961914f, 0.967285f, 0.970215f, 0.974121f, 0.977539f, 0.979980f, 0.982422f,
+ 0.984863f, 0.986816f, 0.994629f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000000f, 0.000473f, 0.000607f, 0.000921f, 0.000957f, 0.001448f, 0.001884f, 0.002270f,
+ 0.002703f, 0.002998f, 0.003862f, 0.004307f, 0.005074f, 0.005665f, 0.006737f, 0.007851f,
+ 0.009216f, 0.010735f, 0.012459f, 0.014572f, 0.016998f, 0.019821f, 0.023605f, 0.027969f,
+ 0.033783f, 0.040192f, 0.049286f, 0.060303f, 0.074829f, 0.093750f, 0.118774f, 0.152222f,
+ 0.195801f, 0.252441f, 0.322754f, 0.404053f, 0.491943f, 0.577637f, 0.655273f, 0.722168f,
+ 0.776367f, 0.820312f, 0.854004f, 0.878906f, 0.900879f, 0.916992f, 0.929688f, 0.940430f,
+ 0.949707f, 0.956055f, 0.962402f, 0.967285f, 0.971191f, 0.975586f, 0.978516f, 0.980957f,
+ 0.983398f, 0.985352f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995605f,
+ 0.000000f, 0.000444f, 0.000605f, 0.000649f, 0.000926f, 0.001096f, 0.001624f, 0.001669f,
+ 0.002373f, 0.002716f, 0.003231f, 0.003769f, 0.004395f, 0.005005f, 0.005878f, 0.006710f,
+ 0.007793f, 0.008957f, 0.010712f, 0.012230f, 0.014244f, 0.016693f, 0.019531f, 0.022827f,
+ 0.027100f, 0.032318f, 0.038971f, 0.047302f, 0.058105f, 0.072021f, 0.089966f, 0.114319f,
+ 0.146362f, 0.188965f, 0.244019f, 0.312988f, 0.394287f, 0.482178f, 0.569824f, 0.650391f,
+ 0.718262f, 0.774414f, 0.819336f, 0.853027f, 0.880371f, 0.900879f, 0.917969f, 0.930664f,
+ 0.940918f, 0.950684f, 0.957031f, 0.962891f, 0.968262f, 0.972656f, 0.976562f, 0.979004f,
+ 0.981934f, 0.984375f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.994629f, 0.995117f,
+ 0.000000f, 0.000336f, 0.000601f, 0.000712f, 0.000810f, 0.001174f, 0.001286f, 0.001618f,
+ 0.002037f, 0.002592f, 0.002920f, 0.003223f, 0.003847f, 0.004463f, 0.005119f, 0.006020f,
+ 0.006783f, 0.007957f, 0.008888f, 0.010590f, 0.012230f, 0.013885f, 0.016220f, 0.019318f,
+ 0.022278f, 0.026474f, 0.031403f, 0.037781f, 0.046021f, 0.055969f, 0.069397f, 0.086975f,
+ 0.110413f, 0.140991f, 0.182739f, 0.236694f, 0.304932f, 0.385986f, 0.475586f, 0.563965f,
+ 0.646484f, 0.716797f, 0.772461f, 0.818359f, 0.853027f, 0.880859f, 0.901855f, 0.918945f,
+ 0.932129f, 0.942383f, 0.951172f, 0.958496f, 0.964355f, 0.969238f, 0.973633f, 0.977051f,
+ 0.979980f, 0.982910f, 0.993652f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994629f,
+ 0.000000f, 0.000244f, 0.000418f, 0.000597f, 0.000600f, 0.001085f, 0.001236f, 0.001535f,
+ 0.001970f, 0.002096f, 0.002354f, 0.002834f, 0.003323f, 0.003822f, 0.004463f, 0.005146f,
+ 0.005798f, 0.006859f, 0.007587f, 0.008827f, 0.009956f, 0.011833f, 0.013725f, 0.015945f,
+ 0.018585f, 0.021988f, 0.025665f, 0.030807f, 0.036774f, 0.044373f, 0.054108f, 0.067383f,
+ 0.084229f, 0.106812f, 0.137207f, 0.177734f, 0.230835f, 0.299072f, 0.380127f, 0.470215f,
+ 0.560547f, 0.644531f, 0.715820f, 0.774414f, 0.820312f, 0.854980f, 0.882324f, 0.903809f,
+ 0.921387f, 0.933594f, 0.944824f, 0.952637f, 0.960449f, 0.965820f, 0.971191f, 0.974609f,
+ 0.978027f, 0.981934f, 0.993164f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000000f, 0.000244f, 0.000411f, 0.000589f, 0.000820f, 0.000729f, 0.001086f, 0.001301f,
+ 0.001677f, 0.001935f, 0.002312f, 0.002678f, 0.002846f, 0.003590f, 0.003914f, 0.004578f,
+ 0.005020f, 0.005753f, 0.006706f, 0.007710f, 0.008911f, 0.010155f, 0.011528f, 0.013504f,
+ 0.015747f, 0.018036f, 0.021408f, 0.024994f, 0.029816f, 0.035858f, 0.043152f, 0.053009f,
+ 0.065491f, 0.082031f, 0.104065f, 0.133789f, 0.174072f, 0.226929f, 0.294434f, 0.376465f,
+ 0.467773f, 0.560059f, 0.644531f, 0.717285f, 0.777344f, 0.823242f, 0.857910f, 0.885742f,
+ 0.906738f, 0.922852f, 0.936523f, 0.947266f, 0.955078f, 0.961426f, 0.967285f, 0.972656f,
+ 0.976562f, 0.979980f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
+ 0.000000f, 0.000243f, 0.000243f, 0.000442f, 0.000695f, 0.000759f, 0.000837f, 0.001089f,
+ 0.001625f, 0.001702f, 0.002045f, 0.002176f, 0.002756f, 0.003063f, 0.003687f, 0.003893f,
+ 0.004456f, 0.005337f, 0.006062f, 0.006523f, 0.007572f, 0.008430f, 0.009880f, 0.011612f,
+ 0.013237f, 0.015114f, 0.017487f, 0.020584f, 0.024445f, 0.028931f, 0.034729f, 0.042023f,
+ 0.051788f, 0.063843f, 0.079956f, 0.102295f, 0.131592f, 0.171021f, 0.223877f, 0.292236f,
+ 0.375000f, 0.468018f, 0.562012f, 0.648438f, 0.721191f, 0.781250f, 0.826660f, 0.862305f,
+ 0.888672f, 0.909668f, 0.926270f, 0.938965f, 0.949707f, 0.957520f, 0.964355f, 0.969727f,
+ 0.974121f, 0.978027f, 0.992676f, 0.993164f, 0.993164f, 0.992676f, 0.993164f, 0.993164f,
+ 0.000000f, 0.000242f, 0.000242f, 0.000242f, 0.000564f, 0.000692f, 0.000826f, 0.001094f,
+ 0.001280f, 0.001457f, 0.001673f, 0.002232f, 0.002411f, 0.002789f, 0.003174f, 0.003649f,
+ 0.003859f, 0.004349f, 0.004990f, 0.005898f, 0.006622f, 0.007496f, 0.008209f, 0.009583f,
+ 0.011284f, 0.013062f, 0.014763f, 0.017120f, 0.020020f, 0.023804f, 0.028412f, 0.033905f,
+ 0.041016f, 0.050140f, 0.062469f, 0.078552f, 0.100159f, 0.129272f, 0.169067f, 0.222290f,
+ 0.291504f, 0.376465f, 0.470703f, 0.566406f, 0.653320f, 0.728027f, 0.786621f, 0.832031f,
+ 0.866699f, 0.893555f, 0.914062f, 0.929688f, 0.942383f, 0.952148f, 0.959961f, 0.966797f,
+ 0.972168f, 0.976074f, 0.991211f, 0.992188f, 0.992676f, 0.992188f, 0.992676f, 0.992676f,
+ 0.000241f, 0.000241f, 0.000240f, 0.000242f, 0.000486f, 0.000637f, 0.000916f, 0.000933f,
+ 0.001003f, 0.001284f, 0.001584f, 0.001925f, 0.002134f, 0.002502f, 0.002731f, 0.003134f,
+ 0.003435f, 0.004036f, 0.004379f, 0.005077f, 0.005688f, 0.006557f, 0.007347f, 0.007942f,
+ 0.009506f, 0.010712f, 0.012527f, 0.014603f, 0.016693f, 0.019592f, 0.023285f, 0.027512f,
+ 0.033173f, 0.040283f, 0.049347f, 0.061432f, 0.077271f, 0.098938f, 0.128052f, 0.168091f,
+ 0.222168f, 0.292725f, 0.379150f, 0.476807f, 0.573730f, 0.662598f, 0.735840f, 0.794434f,
+ 0.839844f, 0.873535f, 0.898926f, 0.918945f, 0.934082f, 0.945312f, 0.955566f, 0.962402f,
+ 0.969238f, 0.974609f, 0.990723f, 0.991699f, 0.992188f, 0.992188f, 0.992188f, 0.992188f,
+ 0.000000f, 0.000238f, 0.000240f, 0.000362f, 0.000362f, 0.000521f, 0.000631f, 0.000909f,
+ 0.000937f, 0.001249f, 0.001373f, 0.001693f, 0.001746f, 0.002184f, 0.002436f, 0.002680f,
+ 0.003094f, 0.003576f, 0.003828f, 0.004463f, 0.004990f, 0.005589f, 0.006439f, 0.006943f,
+ 0.008217f, 0.009384f, 0.010719f, 0.012184f, 0.014130f, 0.016373f, 0.019241f, 0.022675f,
+ 0.027161f, 0.032379f, 0.039307f, 0.048645f, 0.060455f, 0.076416f, 0.097778f, 0.127441f,
+ 0.168213f, 0.223633f, 0.296387f, 0.385986f, 0.485107f, 0.583984f, 0.673340f, 0.746582f,
+ 0.804199f, 0.848633f, 0.880371f, 0.905273f, 0.923828f, 0.938477f, 0.949707f, 0.958984f,
+ 0.965820f, 0.972656f, 0.990234f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
+ 0.000000f, 0.000234f, 0.000238f, 0.000236f, 0.000360f, 0.000482f, 0.000614f, 0.000786f,
+ 0.000900f, 0.001056f, 0.001336f, 0.001466f, 0.001671f, 0.001907f, 0.002333f, 0.002546f,
+ 0.002871f, 0.003067f, 0.003500f, 0.003813f, 0.004425f, 0.004574f, 0.005459f, 0.006092f,
+ 0.006660f, 0.007660f, 0.008987f, 0.010071f, 0.011841f, 0.013847f, 0.016022f, 0.018829f,
+ 0.022339f, 0.026779f, 0.031677f, 0.038910f, 0.047913f, 0.059601f, 0.075684f, 0.097290f,
+ 0.127319f, 0.169189f, 0.226807f, 0.302490f, 0.394775f, 0.497314f, 0.598633f, 0.686523f,
+ 0.759766f, 0.814941f, 0.857422f, 0.888672f, 0.912109f, 0.930176f, 0.943359f, 0.954102f,
+ 0.962402f, 0.968750f, 0.988770f, 0.990234f, 0.990234f, 0.990234f, 0.991211f, 0.990723f,
+ 0.000000f, 0.000036f, 0.000166f, 0.000357f, 0.000356f, 0.000478f, 0.000566f, 0.000638f,
+ 0.000893f, 0.001146f, 0.001242f, 0.001330f, 0.001502f, 0.001773f, 0.001918f, 0.002024f,
+ 0.002501f, 0.002604f, 0.003067f, 0.003334f, 0.003708f, 0.004044f, 0.004646f, 0.005268f,
+ 0.006241f, 0.006931f, 0.007774f, 0.008911f, 0.010277f, 0.011475f, 0.013542f, 0.015732f,
+ 0.018417f, 0.022049f, 0.026154f, 0.031189f, 0.038269f, 0.047119f, 0.059265f, 0.075256f,
+ 0.097534f, 0.128906f, 0.172119f, 0.231934f, 0.311035f, 0.407715f, 0.513184f, 0.615723f,
+ 0.703613f, 0.773926f, 0.827637f, 0.867188f, 0.897461f, 0.919434f, 0.936035f, 0.948730f,
+ 0.958984f, 0.966309f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.989746f, 0.989746f,
+ 0.000000f, 0.000028f, 0.000093f, 0.000334f, 0.000465f, 0.000472f, 0.000373f, 0.000685f,
+ 0.000695f, 0.001027f, 0.001128f, 0.001155f, 0.001419f, 0.001435f, 0.001760f, 0.001850f,
+ 0.002241f, 0.002373f, 0.002604f, 0.002821f, 0.003334f, 0.003666f, 0.004139f, 0.004627f,
+ 0.005207f, 0.005886f, 0.006596f, 0.007580f, 0.008705f, 0.009911f, 0.011520f, 0.013237f,
+ 0.015427f, 0.017944f, 0.021423f, 0.025497f, 0.030945f, 0.037537f, 0.046692f, 0.058624f,
+ 0.075317f, 0.098267f, 0.130493f, 0.176025f, 0.239136f, 0.323242f, 0.424561f, 0.533691f,
+ 0.636230f, 0.723145f, 0.790039f, 0.841797f, 0.880371f, 0.906738f, 0.926758f, 0.941406f,
+ 0.953613f, 0.963379f, 0.987793f, 0.988770f, 0.988770f, 0.989258f, 0.989258f, 0.989258f,
+ 0.000000f, 0.000000f, 0.000047f, 0.000321f, 0.000332f, 0.000351f, 0.000470f, 0.000596f,
+ 0.000655f, 0.000727f, 0.001008f, 0.001112f, 0.001350f, 0.001379f, 0.001380f, 0.001751f,
+ 0.002008f, 0.002151f, 0.002327f, 0.002548f, 0.002691f, 0.003056f, 0.003475f, 0.003925f,
+ 0.004749f, 0.005161f, 0.005863f, 0.006538f, 0.007153f, 0.008453f, 0.009789f, 0.010986f,
+ 0.013168f, 0.015121f, 0.017563f, 0.020966f, 0.025009f, 0.030151f, 0.037048f, 0.046570f,
+ 0.058624f, 0.075623f, 0.099243f, 0.133667f, 0.181641f, 0.249756f, 0.338623f, 0.445312f,
+ 0.556641f, 0.659180f, 0.744141f, 0.808594f, 0.855957f, 0.890137f, 0.916992f, 0.934570f,
+ 0.949219f, 0.959473f, 0.986816f, 0.987793f, 0.987793f, 0.987793f, 0.987793f, 0.988281f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000244f, 0.000429f, 0.000440f, 0.000348f, 0.000592f,
+ 0.000606f, 0.000755f, 0.000690f, 0.000935f, 0.001172f, 0.001257f, 0.001368f, 0.001458f,
+ 0.001786f, 0.001809f, 0.002060f, 0.002274f, 0.002478f, 0.002642f, 0.002987f, 0.003435f,
+ 0.003866f, 0.004337f, 0.005066f, 0.005409f, 0.006355f, 0.007111f, 0.008011f, 0.009392f,
+ 0.011032f, 0.012321f, 0.014717f, 0.017319f, 0.020432f, 0.024551f, 0.029953f, 0.036835f,
+ 0.045929f, 0.058716f, 0.076416f, 0.101562f, 0.137695f, 0.189453f, 0.262451f, 0.358154f,
+ 0.470215f, 0.584961f, 0.686523f, 0.767578f, 0.828125f, 0.871582f, 0.903809f, 0.926270f,
+ 0.941895f, 0.956055f, 0.985352f, 0.986328f, 0.986816f, 0.986816f, 0.986816f, 0.986816f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000237f, 0.000314f, 0.000570f, 0.000575f,
+ 0.000583f, 0.000632f, 0.000651f, 0.000789f, 0.000947f, 0.001097f, 0.001300f, 0.001320f,
+ 0.001384f, 0.001443f, 0.001641f, 0.001869f, 0.002047f, 0.002396f, 0.002634f, 0.003025f,
+ 0.003412f, 0.003757f, 0.004238f, 0.004620f, 0.005463f, 0.006168f, 0.007072f, 0.008080f,
+ 0.009155f, 0.010590f, 0.012306f, 0.014175f, 0.016769f, 0.020081f, 0.023972f, 0.029495f,
+ 0.036560f, 0.045959f, 0.059265f, 0.078125f, 0.104797f, 0.143677f, 0.199951f, 0.279785f,
+ 0.382812f, 0.500977f, 0.616699f, 0.716309f, 0.791992f, 0.847168f, 0.887207f, 0.915527f,
+ 0.936523f, 0.950684f, 0.984375f, 0.985352f, 0.986328f, 0.985840f, 0.986328f, 0.985840f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000205f, 0.000239f, 0.000299f, 0.000537f,
+ 0.000574f, 0.000696f, 0.000583f, 0.000740f, 0.000778f, 0.000867f, 0.001013f, 0.001257f,
+ 0.001325f, 0.001277f, 0.001416f, 0.001718f, 0.001965f, 0.002079f, 0.002356f, 0.002577f,
+ 0.002771f, 0.003305f, 0.003693f, 0.004028f, 0.004593f, 0.005234f, 0.005905f, 0.006802f,
+ 0.007698f, 0.008553f, 0.009995f, 0.011635f, 0.013824f, 0.016174f, 0.019547f, 0.023544f,
+ 0.029114f, 0.036377f, 0.046417f, 0.060211f, 0.080017f, 0.108643f, 0.151611f, 0.213379f,
+ 0.301758f, 0.414062f, 0.537598f, 0.653320f, 0.748047f, 0.817871f, 0.868164f, 0.903320f,
+ 0.928711f, 0.945801f, 0.982910f, 0.983887f, 0.984375f, 0.984375f, 0.984863f, 0.984375f,
+ 0.000000f, 0.000000f, 0.000045f, 0.000105f, 0.000114f, 0.000340f, 0.000371f, 0.000501f,
+ 0.000639f, 0.000554f, 0.000687f, 0.000675f, 0.000711f, 0.000738f, 0.000824f, 0.001092f,
+ 0.001040f, 0.001185f, 0.001212f, 0.001408f, 0.001624f, 0.001813f, 0.001982f, 0.002182f,
+ 0.002634f, 0.002748f, 0.003252f, 0.003540f, 0.004089f, 0.004505f, 0.005001f, 0.005657f,
+ 0.006500f, 0.007195f, 0.008286f, 0.009750f, 0.011208f, 0.013420f, 0.015762f, 0.019226f,
+ 0.023209f, 0.029144f, 0.036591f, 0.047150f, 0.061615f, 0.082947f, 0.114014f, 0.161621f,
+ 0.231323f, 0.329834f, 0.451416f, 0.579590f, 0.692871f, 0.780273f, 0.844238f, 0.888184f,
+ 0.917969f, 0.939453f, 0.981445f, 0.982422f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000208f, 0.000311f, 0.000238f, 0.000337f,
+ 0.000524f, 0.000617f, 0.000533f, 0.000675f, 0.000665f, 0.000776f, 0.000840f, 0.000819f,
+ 0.000902f, 0.001169f, 0.001130f, 0.001178f, 0.001382f, 0.001571f, 0.001941f, 0.001932f,
+ 0.002138f, 0.002306f, 0.002586f, 0.002937f, 0.003468f, 0.003740f, 0.004292f, 0.004704f,
+ 0.005444f, 0.006081f, 0.007019f, 0.008255f, 0.009521f, 0.010796f, 0.012840f, 0.015503f,
+ 0.018784f, 0.023178f, 0.029129f, 0.036774f, 0.047699f, 0.063416f, 0.086548f, 0.121399f,
+ 0.175293f, 0.254883f, 0.365234f, 0.496582f, 0.626953f, 0.733398f, 0.813477f, 0.869629f,
+ 0.906738f, 0.933105f, 0.979980f, 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.981445f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000208f, 0.000312f, 0.000236f,
+ 0.000343f, 0.000475f, 0.000496f, 0.000528f, 0.000659f, 0.000582f, 0.000685f, 0.000710f,
+ 0.000761f, 0.000784f, 0.000941f, 0.001013f, 0.001117f, 0.001339f, 0.001500f, 0.001623f,
+ 0.001769f, 0.002039f, 0.002298f, 0.002565f, 0.002802f, 0.003119f, 0.003471f, 0.003857f,
+ 0.004658f, 0.005177f, 0.005836f, 0.006752f, 0.007324f, 0.008911f, 0.010422f, 0.012527f,
+ 0.015373f, 0.018585f, 0.022964f, 0.029037f, 0.037231f, 0.049072f, 0.066345f, 0.091492f,
+ 0.131470f, 0.193359f, 0.285645f, 0.409912f, 0.548828f, 0.676758f, 0.776367f, 0.845703f,
+ 0.893066f, 0.924805f, 0.978027f, 0.979492f, 0.979492f, 0.979004f, 0.979492f, 0.979492f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000166f, 0.000228f, 0.000227f,
+ 0.000369f, 0.000337f, 0.000368f, 0.000452f, 0.000500f, 0.000547f, 0.000543f, 0.000575f,
+ 0.000623f, 0.000723f, 0.000783f, 0.000874f, 0.001141f, 0.001226f, 0.001279f, 0.001336f,
+ 0.001499f, 0.001655f, 0.001922f, 0.002090f, 0.002453f, 0.002298f, 0.003139f, 0.003181f,
+ 0.003674f, 0.004166f, 0.004814f, 0.005447f, 0.006348f, 0.007179f, 0.008736f, 0.010406f,
+ 0.012321f, 0.014984f, 0.018219f, 0.022934f, 0.028824f, 0.037598f, 0.050476f, 0.069397f,
+ 0.098694f, 0.144775f, 0.218018f, 0.325439f, 0.464111f, 0.607910f, 0.729492f, 0.817383f,
+ 0.876953f, 0.915527f, 0.976562f, 0.977539f, 0.977539f, 0.977051f, 0.977051f, 0.977539f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000154f, 0.000200f,
+ 0.000267f, 0.000316f, 0.000324f, 0.000449f, 0.000319f, 0.000379f, 0.000515f, 0.000519f,
+ 0.000558f, 0.000628f, 0.000645f, 0.000690f, 0.000777f, 0.000940f, 0.001096f, 0.001204f,
+ 0.001278f, 0.001485f, 0.001670f, 0.001929f, 0.001961f, 0.002016f, 0.002367f, 0.002785f,
+ 0.003025f, 0.003248f, 0.003805f, 0.004539f, 0.004845f, 0.005733f, 0.006851f, 0.008278f,
+ 0.010017f, 0.011841f, 0.014542f, 0.017807f, 0.022705f, 0.029190f, 0.038544f, 0.052612f,
+ 0.073853f, 0.108093f, 0.162842f, 0.250977f, 0.377930f, 0.529785f, 0.672363f, 0.782715f,
+ 0.855957f, 0.904297f, 0.973145f, 0.974121f, 0.974609f, 0.975586f, 0.974609f, 0.975098f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000158f, 0.000121f,
+ 0.000190f, 0.000238f, 0.000397f, 0.000354f, 0.000364f, 0.000365f, 0.000440f, 0.000474f,
+ 0.000509f, 0.000612f, 0.000611f, 0.000648f, 0.000804f, 0.000755f, 0.000943f, 0.001050f,
+ 0.001221f, 0.001340f, 0.001338f, 0.001443f, 0.001635f, 0.001822f, 0.002083f, 0.002226f,
+ 0.002480f, 0.002682f, 0.003185f, 0.003609f, 0.003948f, 0.005074f, 0.005558f, 0.006741f,
+ 0.007904f, 0.009384f, 0.011360f, 0.014000f, 0.017883f, 0.022675f, 0.029648f, 0.039917f,
+ 0.055695f, 0.080261f, 0.120728f, 0.188354f, 0.296143f, 0.443848f, 0.603027f, 0.737793f,
+ 0.831055f, 0.891113f, 0.970703f, 0.971680f, 0.972168f, 0.972656f, 0.971680f, 0.972168f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000251f, 0.000260f, 0.000278f, 0.000315f, 0.000334f, 0.000235f, 0.000357f,
+ 0.000442f, 0.000513f, 0.000504f, 0.000598f, 0.000556f, 0.000771f, 0.000831f, 0.000886f,
+ 0.000977f, 0.001145f, 0.001105f, 0.001244f, 0.001281f, 0.001431f, 0.001544f, 0.001850f,
+ 0.001986f, 0.002131f, 0.002537f, 0.002737f, 0.003252f, 0.003826f, 0.004555f, 0.005184f,
+ 0.006199f, 0.007195f, 0.009041f, 0.011337f, 0.013878f, 0.017395f, 0.022552f, 0.030502f,
+ 0.041962f, 0.059875f, 0.089111f, 0.139404f, 0.224609f, 0.357910f, 0.524902f, 0.684082f,
+ 0.800781f, 0.875977f, 0.967773f, 0.968750f, 0.968262f, 0.968750f, 0.969238f, 0.969238f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000095f, 0.000081f, 0.000217f, 0.000149f, 0.000204f, 0.000212f, 0.000338f,
+ 0.000345f, 0.000348f, 0.000456f, 0.000463f, 0.000495f, 0.000570f, 0.000583f, 0.000748f,
+ 0.000799f, 0.000731f, 0.000965f, 0.001041f, 0.001071f, 0.001210f, 0.001318f, 0.001238f,
+ 0.001410f, 0.001631f, 0.001932f, 0.002327f, 0.002577f, 0.003057f, 0.003452f, 0.003956f,
+ 0.004639f, 0.005714f, 0.006817f, 0.008446f, 0.010605f, 0.013443f, 0.017319f, 0.022964f,
+ 0.031021f, 0.044281f, 0.065857f, 0.102112f, 0.166504f, 0.277344f, 0.439941f, 0.617188f,
+ 0.762207f, 0.856445f, 0.963379f, 0.964355f, 0.965332f, 0.964844f, 0.965332f, 0.965332f,
+ 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000121f, 0.000107f, 0.000091f, 0.000161f, 0.000119f, 0.000184f, 0.000266f, 0.000284f,
+ 0.000314f, 0.000319f, 0.000334f, 0.000344f, 0.000565f, 0.000455f, 0.000488f, 0.000667f,
+ 0.000710f, 0.000713f, 0.000787f, 0.000755f, 0.000849f, 0.000972f, 0.001097f, 0.001286f,
+ 0.001427f, 0.001556f, 0.001667f, 0.001687f, 0.002155f, 0.002369f, 0.002674f, 0.003086f,
+ 0.003710f, 0.004536f, 0.005585f, 0.006783f, 0.007957f, 0.010262f, 0.013115f, 0.017212f,
+ 0.023102f, 0.032715f, 0.047943f, 0.074158f, 0.121155f, 0.207520f, 0.353027f, 0.541504f,
+ 0.715332f, 0.834473f, 0.959473f, 0.960449f, 0.960938f, 0.960938f, 0.960938f, 0.961426f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000120f, 0.000120f, 0.000103f, 0.000089f, 0.000077f, 0.000080f, 0.000121f, 0.000218f,
+ 0.000209f, 0.000245f, 0.000303f, 0.000316f, 0.000388f, 0.000341f, 0.000549f, 0.000594f,
+ 0.000604f, 0.000679f, 0.000625f, 0.000628f, 0.000795f, 0.000883f, 0.000857f, 0.000991f,
+ 0.001166f, 0.000955f, 0.001194f, 0.001347f, 0.001548f, 0.001804f, 0.002048f, 0.002388f,
+ 0.002911f, 0.003130f, 0.003933f, 0.004845f, 0.006031f, 0.007385f, 0.009705f, 0.012688f,
+ 0.017044f, 0.023788f, 0.034882f, 0.053284f, 0.086670f, 0.151123f, 0.271484f, 0.457031f,
+ 0.658203f, 0.805176f, 0.954102f, 0.955078f, 0.956055f, 0.956055f, 0.956055f, 0.955566f,
+ 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000120f, 0.000116f, 0.000101f, 0.000088f, 0.000077f, 0.000131f, 0.000071f,
+ 0.000146f, 0.000200f, 0.000237f, 0.000270f, 0.000289f, 0.000302f, 0.000311f, 0.000441f,
+ 0.000396f, 0.000588f, 0.000630f, 0.000570f, 0.000575f, 0.000537f, 0.000589f, 0.000750f,
+ 0.000721f, 0.001048f, 0.001122f, 0.000951f, 0.001243f, 0.001346f, 0.001703f, 0.001592f,
+ 0.001880f, 0.002340f, 0.002804f, 0.003637f, 0.004356f, 0.005329f, 0.006805f, 0.009094f,
+ 0.012566f, 0.017181f, 0.025040f, 0.038147f, 0.061249f, 0.107788f, 0.200195f, 0.369629f,
+ 0.587891f, 0.771973f, 0.948242f, 0.949707f, 0.950195f, 0.949707f, 0.950195f, 0.950195f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000120f, 0.000119f, 0.000119f, 0.000114f, 0.000101f, 0.000088f, 0.000079f, 0.000070f,
+ 0.000063f, 0.000136f, 0.000136f, 0.000183f, 0.000207f, 0.000277f, 0.000271f, 0.000291f,
+ 0.000369f, 0.000344f, 0.000494f, 0.000459f, 0.000515f, 0.000509f, 0.000532f, 0.000504f,
+ 0.000716f, 0.000589f, 0.000691f, 0.000902f, 0.000972f, 0.000968f, 0.001067f, 0.001483f,
+ 0.001780f, 0.001652f, 0.002090f, 0.002602f, 0.003113f, 0.003738f, 0.004738f, 0.006420f,
+ 0.008522f, 0.012100f, 0.017334f, 0.026489f, 0.042786f, 0.074524f, 0.142578f, 0.283936f,
+ 0.509277f, 0.729492f, 0.940918f, 0.941895f, 0.942383f, 0.942383f, 0.942383f, 0.942871f,
+ 0.000122f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f,
+ 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000116f, 0.000102f, 0.000090f, 0.000081f,
+ 0.000091f, 0.000066f, 0.000059f, 0.000110f, 0.000109f, 0.000155f, 0.000184f, 0.000227f,
+ 0.000297f, 0.000333f, 0.000355f, 0.000349f, 0.000344f, 0.000421f, 0.000459f, 0.000561f,
+ 0.000600f, 0.000563f, 0.000630f, 0.000563f, 0.000682f, 0.000737f, 0.000892f, 0.001037f,
+ 0.001026f, 0.001163f, 0.001743f, 0.001782f, 0.002117f, 0.002573f, 0.003389f, 0.004429f,
+ 0.005871f, 0.007942f, 0.011841f, 0.018066f, 0.029190f, 0.050842f, 0.098511f, 0.207397f,
+ 0.422363f, 0.677734f, 0.932129f, 0.933594f, 0.933594f, 0.934082f, 0.934082f, 0.934082f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
+ 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000116f, 0.000104f, 0.000093f,
+ 0.000084f, 0.000076f, 0.000069f, 0.000091f, 0.000057f, 0.000051f, 0.000112f, 0.000120f,
+ 0.000179f, 0.000232f, 0.000225f, 0.000283f, 0.000301f, 0.000308f, 0.000353f, 0.000437f,
+ 0.000395f, 0.000523f, 0.000486f, 0.000504f, 0.000469f, 0.000614f, 0.000581f, 0.000755f,
+ 0.000789f, 0.001121f, 0.000981f, 0.001218f, 0.001565f, 0.001795f, 0.002296f, 0.002958f,
+ 0.003866f, 0.005329f, 0.007675f, 0.011658f, 0.019043f, 0.033478f, 0.065430f, 0.144043f,
+ 0.331299f, 0.613770f, 0.921387f, 0.922852f, 0.923340f, 0.923340f, 0.923340f, 0.923340f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000116f, 0.000116f,
+ 0.000116f, 0.000116f, 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000114f, 0.000108f,
+ 0.000097f, 0.000087f, 0.000079f, 0.000072f, 0.000065f, 0.000060f, 0.000094f, 0.000050f,
+ 0.000104f, 0.000104f, 0.000121f, 0.000164f, 0.000195f, 0.000247f, 0.000265f, 0.000328f,
+ 0.000290f, 0.000355f, 0.000395f, 0.000356f, 0.000361f, 0.000459f, 0.000470f, 0.000515f,
+ 0.000580f, 0.000624f, 0.000751f, 0.000964f, 0.001105f, 0.001279f, 0.001413f, 0.001823f,
+ 0.002441f, 0.003407f, 0.004852f, 0.007210f, 0.011803f, 0.021225f, 0.041473f, 0.095032f,
+ 0.244019f, 0.537598f, 0.907715f, 0.910156f, 0.910156f, 0.909180f, 0.909668f, 0.911133f,
+ 0.000120f, 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000114f, 0.000114f, 0.000113f,
+ 0.000113f, 0.000112f, 0.000112f, 0.000112f, 0.000111f, 0.000112f, 0.000111f, 0.000111f,
+ 0.000111f, 0.000101f, 0.000093f, 0.000084f, 0.000077f, 0.000070f, 0.000064f, 0.000059f,
+ 0.000074f, 0.000079f, 0.000059f, 0.000087f, 0.000097f, 0.000128f, 0.000185f, 0.000213f,
+ 0.000265f, 0.000235f, 0.000239f, 0.000288f, 0.000299f, 0.000371f, 0.000341f, 0.000369f,
+ 0.000460f, 0.000446f, 0.000490f, 0.000602f, 0.000694f, 0.000904f, 0.001012f, 0.001234f,
+ 0.001544f, 0.002096f, 0.002989f, 0.004299f, 0.006840f, 0.012383f, 0.024948f, 0.059204f,
+ 0.166626f, 0.452637f, 0.892578f, 0.894043f, 0.894043f, 0.894531f, 0.894531f, 0.894043f,
+ 0.000115f, 0.000107f, 0.000108f, 0.000111f, 0.000108f, 0.000109f, 0.000108f, 0.000108f,
+ 0.000108f, 0.000107f, 0.000108f, 0.000107f, 0.000107f, 0.000106f, 0.000107f, 0.000107f,
+ 0.000106f, 0.000107f, 0.000106f, 0.000097f, 0.000090f, 0.000082f, 0.000075f, 0.000069f,
+ 0.000063f, 0.000058f, 0.000053f, 0.000070f, 0.000073f, 0.000085f, 0.000077f, 0.000088f,
+ 0.000136f, 0.000168f, 0.000190f, 0.000204f, 0.000199f, 0.000252f, 0.000233f, 0.000270f,
+ 0.000325f, 0.000295f, 0.000348f, 0.000383f, 0.000435f, 0.000534f, 0.000581f, 0.000803f,
+ 0.001004f, 0.001330f, 0.001812f, 0.002489f, 0.003944f, 0.006832f, 0.013748f, 0.033997f,
+ 0.104858f, 0.356689f, 0.873047f, 0.873047f, 0.875000f, 0.874023f, 0.874023f, 0.874023f,
+ 0.000000f, 0.000071f, 0.000063f, 0.000094f, 0.000092f, 0.000094f, 0.000093f, 0.000098f,
+ 0.000098f, 0.000098f, 0.000098f, 0.000099f, 0.000098f, 0.000099f, 0.000099f, 0.000099f,
+ 0.000099f, 0.000099f, 0.000099f, 0.000100f, 0.000100f, 0.000094f, 0.000087f, 0.000080f,
+ 0.000074f, 0.000068f, 0.000062f, 0.000058f, 0.000053f, 0.000049f, 0.000059f, 0.000059f,
+ 0.000045f, 0.000078f, 0.000082f, 0.000118f, 0.000155f, 0.000160f, 0.000174f, 0.000180f,
+ 0.000226f, 0.000213f, 0.000248f, 0.000258f, 0.000288f, 0.000352f, 0.000396f, 0.000465f,
+ 0.000566f, 0.000789f, 0.000941f, 0.001343f, 0.002199f, 0.003616f, 0.006912f, 0.017380f,
+ 0.058960f, 0.259521f, 0.847656f, 0.849121f, 0.850586f, 0.850098f, 0.849121f, 0.850586f,
+ 0.000000f, 0.000000f, 0.000019f, 0.000044f, 0.000048f, 0.000061f, 0.000071f, 0.000073f,
+ 0.000076f, 0.000079f, 0.000079f, 0.000082f, 0.000082f, 0.000082f, 0.000085f, 0.000086f,
+ 0.000087f, 0.000086f, 0.000088f, 0.000087f, 0.000089f, 0.000089f, 0.000089f, 0.000090f,
+ 0.000084f, 0.000078f, 0.000072f, 0.000067f, 0.000062f, 0.000057f, 0.000052f, 0.000049f,
+ 0.000045f, 0.000041f, 0.000038f, 0.000040f, 0.000062f, 0.000092f, 0.000100f, 0.000121f,
+ 0.000144f, 0.000133f, 0.000137f, 0.000170f, 0.000181f, 0.000168f, 0.000215f, 0.000286f,
+ 0.000327f, 0.000397f, 0.000504f, 0.000738f, 0.001039f, 0.001729f, 0.003317f, 0.007721f,
+ 0.028458f, 0.166626f, 0.815430f, 0.818359f, 0.818359f, 0.817383f, 0.818848f, 0.818359f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000008f,
+ 0.000016f, 0.000031f, 0.000035f, 0.000048f, 0.000050f, 0.000053f, 0.000058f, 0.000059f,
+ 0.000063f, 0.000064f, 0.000067f, 0.000067f, 0.000070f, 0.000071f, 0.000072f, 0.000073f,
+ 0.000075f, 0.000075f, 0.000076f, 0.000075f, 0.000069f, 0.000064f, 0.000060f, 0.000055f,
+ 0.000051f, 0.000047f, 0.000043f, 0.000040f, 0.000037f, 0.000034f, 0.000040f, 0.000041f,
+ 0.000054f, 0.000069f, 0.000096f, 0.000111f, 0.000109f, 0.000113f, 0.000142f, 0.000136f,
+ 0.000158f, 0.000196f, 0.000237f, 0.000349f, 0.000423f, 0.000744f, 0.001380f, 0.003214f,
+ 0.011124f, 0.088135f, 0.777344f, 0.779297f, 0.780273f, 0.779785f, 0.779785f, 0.779785f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000007f,
+ 0.000021f, 0.000023f, 0.000031f, 0.000034f, 0.000038f, 0.000041f, 0.000043f, 0.000047f,
+ 0.000049f, 0.000050f, 0.000053f, 0.000055f, 0.000056f, 0.000057f, 0.000059f, 0.000060f,
+ 0.000055f, 0.000051f, 0.000048f, 0.000044f, 0.000041f, 0.000038f, 0.000035f, 0.000032f,
+ 0.000029f, 0.000028f, 0.000028f, 0.000037f, 0.000044f, 0.000064f, 0.000078f, 0.000072f,
+ 0.000089f, 0.000098f, 0.000104f, 0.000146f, 0.000200f, 0.000272f, 0.000479f, 0.001077f,
+ 0.003733f, 0.033752f, 0.729492f, 0.730957f, 0.732422f, 0.731934f, 0.732422f, 0.732422f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f,
+ 0.000006f, 0.000009f, 0.000013f, 0.000019f, 0.000021f, 0.000025f, 0.000027f, 0.000030f,
+ 0.000033f, 0.000034f, 0.000037f, 0.000039f, 0.000041f, 0.000039f, 0.000036f, 0.000033f,
+ 0.000031f, 0.000028f, 0.000026f, 0.000024f, 0.000021f, 0.000019f, 0.000017f, 0.000023f,
+ 0.000033f, 0.000041f, 0.000043f, 0.000058f, 0.000061f, 0.000081f, 0.000121f, 0.000248f,
+ 0.000821f, 0.008255f, 0.673340f, 0.674805f, 0.674316f, 0.674805f, 0.674805f, 0.673828f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000006f, 0.000010f, 0.000013f,
+ 0.000015f, 0.000017f, 0.000020f, 0.000022f, 0.000021f, 0.000019f, 0.000017f, 0.000015f,
+ 0.000013f, 0.000012f, 0.000010f, 0.000011f, 0.000016f, 0.000019f, 0.000019f, 0.000036f,
+ 0.000090f, 0.000897f, 0.606934f, 0.609863f, 0.609375f, 0.609863f, 0.609863f, 0.610352f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000003f, 0.000006f, 0.000005f, 0.000004f, 0.000003f,
+ 0.000004f, 0.000008f, 0.534668f, 0.536621f, 0.537109f, 0.537109f, 0.536621f, 0.536621f,
+ },
+ {
+ 0.149292f, 0.432373f, 0.614258f, 0.719238f, 0.784180f, 0.826660f, 0.856934f, 0.879883f,
+ 0.896484f, 0.909180f, 0.919922f, 0.928711f, 0.936035f, 0.942383f, 0.947266f, 0.952148f,
+ 0.956055f, 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.970703f, 0.972656f, 0.974609f,
+ 0.976562f, 0.978027f, 0.979492f, 0.980469f, 0.981934f, 0.983398f, 0.984863f, 0.985352f,
+ 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.989746f, 0.990234f, 0.990723f, 0.991699f,
+ 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.040161f, 0.161255f, 0.324951f, 0.486572f, 0.612305f, 0.704590f, 0.767090f, 0.811523f,
+ 0.844238f, 0.868652f, 0.887695f, 0.902344f, 0.913574f, 0.924316f, 0.932129f, 0.937988f,
+ 0.944336f, 0.949707f, 0.954102f, 0.957520f, 0.960938f, 0.964355f, 0.966797f, 0.969727f,
+ 0.971191f, 0.973633f, 0.975586f, 0.977539f, 0.979004f, 0.980469f, 0.981445f, 0.982910f,
+ 0.983887f, 0.985352f, 0.985840f, 0.987305f, 0.987793f, 0.988770f, 0.989258f, 0.990234f,
+ 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
+ 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.017395f, 0.068542f, 0.149292f, 0.262451f, 0.392822f, 0.518066f, 0.621582f, 0.700195f,
+ 0.759766f, 0.803711f, 0.836426f, 0.862305f, 0.880859f, 0.896484f, 0.909668f, 0.919434f,
+ 0.929199f, 0.935547f, 0.941895f, 0.947754f, 0.952637f, 0.956055f, 0.959961f, 0.963867f,
+ 0.965820f, 0.968750f, 0.970703f, 0.973145f, 0.975098f, 0.977051f, 0.979004f, 0.979980f,
+ 0.981934f, 0.983398f, 0.983887f, 0.984863f, 0.985840f, 0.986816f, 0.987793f, 0.989258f,
+ 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.992676f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
+ 0.009125f, 0.035492f, 0.075806f, 0.135864f, 0.219971f, 0.324707f, 0.437012f, 0.543457f,
+ 0.633789f, 0.704102f, 0.758789f, 0.802246f, 0.833496f, 0.857910f, 0.878418f, 0.894043f,
+ 0.906738f, 0.917480f, 0.925781f, 0.933594f, 0.940918f, 0.946777f, 0.951172f, 0.954590f,
+ 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.971191f, 0.973145f, 0.975098f, 0.976562f,
+ 0.978516f, 0.979980f, 0.981445f, 0.982422f, 0.983887f, 0.985840f, 0.986328f, 0.987305f,
+ 0.988281f, 0.988770f, 0.989746f, 0.990234f, 0.991699f, 0.992188f, 0.992676f, 0.993652f,
+ 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997559f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.005848f, 0.021225f, 0.043640f, 0.076782f, 0.124084f, 0.189575f, 0.274414f, 0.372559f,
+ 0.473633f, 0.567383f, 0.646973f, 0.711426f, 0.761230f, 0.801758f, 0.833496f, 0.857422f,
+ 0.876953f, 0.893066f, 0.905273f, 0.916504f, 0.925293f, 0.932617f, 0.939941f, 0.945801f,
+ 0.950684f, 0.955566f, 0.958984f, 0.962402f, 0.965820f, 0.968262f, 0.970703f, 0.972656f,
+ 0.975098f, 0.977051f, 0.978516f, 0.980469f, 0.981934f, 0.982422f, 0.983887f, 0.985840f,
+ 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992188f,
+ 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f, 0.997070f,
+ 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
+ 0.003937f, 0.014107f, 0.027664f, 0.047211f, 0.075195f, 0.113953f, 0.166748f, 0.236328f,
+ 0.320312f, 0.412354f, 0.504395f, 0.589844f, 0.661621f, 0.719727f, 0.768066f, 0.805664f,
+ 0.834961f, 0.858398f, 0.877441f, 0.893066f, 0.906738f, 0.916992f, 0.926270f, 0.933105f,
+ 0.940430f, 0.946289f, 0.951172f, 0.955566f, 0.959473f, 0.962891f, 0.965820f, 0.968262f,
+ 0.970703f, 0.973145f, 0.975098f, 0.977051f, 0.979004f, 0.980469f, 0.981934f, 0.983398f,
+ 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991211f,
+ 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.995605f,
+ 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
+ 0.002962f, 0.009674f, 0.019348f, 0.031708f, 0.049255f, 0.072754f, 0.105164f, 0.149048f,
+ 0.206665f, 0.278076f, 0.361572f, 0.448730f, 0.534668f, 0.611816f, 0.677734f, 0.730957f,
+ 0.775879f, 0.809570f, 0.837891f, 0.861328f, 0.879395f, 0.894531f, 0.907227f, 0.916992f,
+ 0.926270f, 0.934082f, 0.940918f, 0.946289f, 0.951172f, 0.956055f, 0.959473f, 0.962891f,
+ 0.966797f, 0.969238f, 0.971191f, 0.973633f, 0.976074f, 0.977539f, 0.979492f, 0.980957f,
+ 0.982422f, 0.983398f, 0.984863f, 0.986328f, 0.986816f, 0.988281f, 0.989746f, 0.989746f,
+ 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.994629f, 0.995605f,
+ 0.996094f, 0.997070f, 0.998535f, 0.999023f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.001900f, 0.007225f, 0.013733f, 0.022552f, 0.033661f, 0.049164f, 0.070374f, 0.097534f,
+ 0.135132f, 0.183350f, 0.244507f, 0.317871f, 0.400146f, 0.483643f, 0.562988f, 0.633301f,
+ 0.693848f, 0.743652f, 0.784180f, 0.816895f, 0.842773f, 0.865234f, 0.882812f, 0.896973f,
+ 0.908691f, 0.919434f, 0.927734f, 0.935547f, 0.942383f, 0.947266f, 0.952637f, 0.957031f,
+ 0.960938f, 0.964355f, 0.967285f, 0.969727f, 0.971680f, 0.974609f, 0.976074f, 0.978027f,
+ 0.979980f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.988281f, 0.988770f,
+ 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f,
+ 0.001921f, 0.005543f, 0.010223f, 0.016312f, 0.024918f, 0.035217f, 0.049164f, 0.067017f,
+ 0.091125f, 0.122986f, 0.164673f, 0.217896f, 0.282471f, 0.356934f, 0.436768f, 0.516602f,
+ 0.590820f, 0.656250f, 0.711426f, 0.757812f, 0.794922f, 0.825684f, 0.850098f, 0.870605f,
+ 0.885742f, 0.900879f, 0.912109f, 0.921387f, 0.929688f, 0.937500f, 0.943848f, 0.949219f,
+ 0.953125f, 0.958496f, 0.961426f, 0.964844f, 0.967773f, 0.970703f, 0.973145f, 0.975098f,
+ 0.977539f, 0.979004f, 0.980957f, 0.982422f, 0.983887f, 0.985352f, 0.986328f, 0.987793f,
+ 0.988770f, 0.989258f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f,
+ 0.001360f, 0.004257f, 0.007988f, 0.013092f, 0.018753f, 0.026352f, 0.035645f, 0.048096f,
+ 0.064270f, 0.085449f, 0.113770f, 0.149292f, 0.195190f, 0.251953f, 0.320557f, 0.395020f,
+ 0.474121f, 0.549316f, 0.618652f, 0.678223f, 0.729492f, 0.770996f, 0.805176f, 0.833496f,
+ 0.855957f, 0.875977f, 0.891113f, 0.904785f, 0.915039f, 0.924316f, 0.933105f, 0.939453f,
+ 0.945312f, 0.950684f, 0.955078f, 0.959473f, 0.962891f, 0.966309f, 0.969727f, 0.972168f,
+ 0.974121f, 0.976562f, 0.978516f, 0.979980f, 0.981934f, 0.983398f, 0.984375f, 0.986328f,
+ 0.986816f, 0.988281f, 0.989746f, 0.990234f, 0.991699f, 0.992188f, 0.992676f, 0.994141f,
+ 0.994141f, 0.994629f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f,
+ 0.001075f, 0.003492f, 0.006275f, 0.010223f, 0.014473f, 0.019821f, 0.026581f, 0.035492f,
+ 0.046967f, 0.061829f, 0.080750f, 0.105164f, 0.136475f, 0.177246f, 0.227783f, 0.288818f,
+ 0.358154f, 0.433594f, 0.509277f, 0.581543f, 0.645508f, 0.701172f, 0.747070f, 0.783691f,
+ 0.817383f, 0.842773f, 0.864258f, 0.881836f, 0.896484f, 0.908691f, 0.918945f, 0.928223f,
+ 0.935547f, 0.941895f, 0.948730f, 0.952637f, 0.957031f, 0.962402f, 0.964844f, 0.967773f,
+ 0.970703f, 0.973633f, 0.975586f, 0.977539f, 0.979492f, 0.981445f, 0.982910f, 0.984375f,
+ 0.985840f, 0.986816f, 0.988281f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
+ 0.993164f, 0.994141f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.997559f, 0.998047f,
+ 0.000967f, 0.002928f, 0.005283f, 0.007759f, 0.011612f, 0.015823f, 0.020966f, 0.027802f,
+ 0.035461f, 0.045959f, 0.059235f, 0.075928f, 0.097778f, 0.126099f, 0.162598f, 0.207153f,
+ 0.261963f, 0.326416f, 0.398193f, 0.471680f, 0.543945f, 0.612305f, 0.671875f, 0.722656f,
+ 0.765137f, 0.799805f, 0.828125f, 0.854004f, 0.872070f, 0.888184f, 0.902344f, 0.914062f,
+ 0.923340f, 0.931641f, 0.938965f, 0.945312f, 0.950684f, 0.955566f, 0.958984f, 0.962891f,
+ 0.966309f, 0.969727f, 0.972168f, 0.974609f, 0.977051f, 0.978516f, 0.980469f, 0.982422f,
+ 0.984375f, 0.985352f, 0.987305f, 0.987793f, 0.988770f, 0.990234f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993164f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f,
+ 0.000602f, 0.002605f, 0.004345f, 0.006706f, 0.009590f, 0.012650f, 0.016617f, 0.021423f,
+ 0.027893f, 0.035004f, 0.044495f, 0.056610f, 0.072327f, 0.092285f, 0.116821f, 0.148926f,
+ 0.189697f, 0.238892f, 0.298340f, 0.365723f, 0.437988f, 0.511230f, 0.579590f, 0.642090f,
+ 0.698242f, 0.744141f, 0.781738f, 0.814453f, 0.840332f, 0.861816f, 0.880371f, 0.895996f,
+ 0.907715f, 0.918945f, 0.928223f, 0.935547f, 0.942871f, 0.948730f, 0.953125f, 0.958008f,
+ 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.976562f, 0.978516f, 0.979980f,
+ 0.981934f, 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.988770f, 0.989746f, 0.990723f,
+ 0.991699f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000607f, 0.001955f, 0.003616f, 0.005772f, 0.007656f, 0.010269f, 0.013496f, 0.017273f,
+ 0.022018f, 0.027466f, 0.034729f, 0.043488f, 0.054932f, 0.068359f, 0.086365f, 0.108765f,
+ 0.137939f, 0.174316f, 0.219360f, 0.273926f, 0.336670f, 0.406494f, 0.478516f, 0.549316f,
+ 0.614746f, 0.673340f, 0.722656f, 0.765137f, 0.800293f, 0.828125f, 0.853516f, 0.872070f,
+ 0.888672f, 0.902832f, 0.914551f, 0.924316f, 0.932129f, 0.940430f, 0.946289f, 0.951660f,
+ 0.956055f, 0.960449f, 0.964355f, 0.967773f, 0.970703f, 0.972656f, 0.975586f, 0.978027f,
+ 0.980469f, 0.981934f, 0.983398f, 0.985352f, 0.986328f, 0.988281f, 0.988770f, 0.990234f,
+ 0.990723f, 0.992188f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000600f, 0.001813f, 0.003101f, 0.004559f, 0.006580f, 0.008873f, 0.011047f, 0.014091f,
+ 0.017639f, 0.022049f, 0.027557f, 0.033997f, 0.042297f, 0.052704f, 0.065369f, 0.081238f,
+ 0.101929f, 0.127930f, 0.161255f, 0.202515f, 0.252686f, 0.311523f, 0.378174f, 0.449707f,
+ 0.519531f, 0.587891f, 0.647949f, 0.701660f, 0.746582f, 0.784668f, 0.817383f, 0.843262f,
+ 0.864746f, 0.882324f, 0.896973f, 0.910156f, 0.920898f, 0.929688f, 0.937012f, 0.943848f,
+ 0.949707f, 0.955078f, 0.959473f, 0.963379f, 0.966797f, 0.970215f, 0.973145f, 0.975098f,
+ 0.978027f, 0.980469f, 0.982422f, 0.983887f, 0.984863f, 0.986328f, 0.987793f, 0.988770f,
+ 0.989746f, 0.991211f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.000604f, 0.001429f, 0.002676f, 0.003708f, 0.005745f, 0.006973f, 0.009270f, 0.011452f,
+ 0.014503f, 0.018295f, 0.022369f, 0.027222f, 0.033417f, 0.040833f, 0.050171f, 0.062744f,
+ 0.077454f, 0.095886f, 0.119995f, 0.150391f, 0.187622f, 0.234253f, 0.289307f, 0.353027f,
+ 0.421631f, 0.492676f, 0.561523f, 0.625488f, 0.681152f, 0.730469f, 0.770996f, 0.806152f,
+ 0.833984f, 0.857422f, 0.876465f, 0.893066f, 0.906250f, 0.916992f, 0.926758f, 0.935059f,
+ 0.942871f, 0.948242f, 0.954102f, 0.958496f, 0.962891f, 0.966309f, 0.969727f, 0.972168f,
+ 0.975098f, 0.977539f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987793f,
+ 0.989258f, 0.990234f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000365f, 0.001367f, 0.002123f, 0.003353f, 0.004692f, 0.006054f, 0.007675f, 0.009819f,
+ 0.012314f, 0.014862f, 0.018066f, 0.022064f, 0.026901f, 0.032471f, 0.039764f, 0.048584f,
+ 0.060089f, 0.073730f, 0.090698f, 0.112854f, 0.140381f, 0.175415f, 0.218018f, 0.269775f,
+ 0.329834f, 0.396240f, 0.467285f, 0.537598f, 0.603516f, 0.662109f, 0.712891f, 0.757324f,
+ 0.793945f, 0.823730f, 0.849121f, 0.869629f, 0.887695f, 0.902344f, 0.914062f, 0.924805f,
+ 0.932129f, 0.940430f, 0.947266f, 0.952148f, 0.957031f, 0.962402f, 0.966309f, 0.969238f,
+ 0.972656f, 0.975586f, 0.977051f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
+ 0.988281f, 0.988770f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000356f, 0.001341f, 0.001913f, 0.002897f, 0.003983f, 0.005322f, 0.006607f, 0.008514f,
+ 0.010399f, 0.012451f, 0.015282f, 0.018356f, 0.021912f, 0.026443f, 0.031982f, 0.038635f,
+ 0.047150f, 0.057495f, 0.070007f, 0.086609f, 0.106689f, 0.131714f, 0.164429f, 0.203613f,
+ 0.252441f, 0.310059f, 0.374512f, 0.444092f, 0.514160f, 0.582031f, 0.643066f, 0.697266f,
+ 0.743652f, 0.783691f, 0.814941f, 0.842773f, 0.865234f, 0.882812f, 0.897949f, 0.910645f,
+ 0.922363f, 0.931152f, 0.938965f, 0.945801f, 0.952148f, 0.957520f, 0.961426f, 0.965820f,
+ 0.969727f, 0.972168f, 0.975098f, 0.977539f, 0.979980f, 0.981934f, 0.983887f, 0.985352f,
+ 0.986816f, 0.988281f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000243f, 0.000937f, 0.001662f, 0.002617f, 0.003527f, 0.004555f, 0.005642f, 0.007217f,
+ 0.008820f, 0.010483f, 0.012383f, 0.015175f, 0.018341f, 0.022049f, 0.026245f, 0.031067f,
+ 0.037903f, 0.045563f, 0.054962f, 0.066956f, 0.082092f, 0.101074f, 0.124939f, 0.154663f,
+ 0.191528f, 0.237305f, 0.291992f, 0.354492f, 0.422852f, 0.492676f, 0.562012f, 0.625488f,
+ 0.682617f, 0.731934f, 0.772949f, 0.807129f, 0.835449f, 0.859863f, 0.878906f, 0.895020f,
+ 0.908203f, 0.920898f, 0.929199f, 0.937988f, 0.945312f, 0.951660f, 0.957031f, 0.961914f,
+ 0.965332f, 0.968750f, 0.972656f, 0.975098f, 0.977539f, 0.979980f, 0.982422f, 0.983887f,
+ 0.986328f, 0.987793f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000362f, 0.000970f, 0.001489f, 0.002251f, 0.002892f, 0.003727f, 0.004978f, 0.006264f,
+ 0.007530f, 0.009125f, 0.010551f, 0.012756f, 0.015259f, 0.018097f, 0.021637f, 0.025986f,
+ 0.030594f, 0.036804f, 0.044006f, 0.053162f, 0.064148f, 0.078003f, 0.096130f, 0.118042f,
+ 0.146118f, 0.181030f, 0.224487f, 0.276123f, 0.336670f, 0.403320f, 0.473633f, 0.543457f,
+ 0.609375f, 0.667480f, 0.719238f, 0.763184f, 0.799316f, 0.829590f, 0.854492f, 0.875488f,
+ 0.892578f, 0.906738f, 0.918945f, 0.928711f, 0.937012f, 0.944336f, 0.951172f, 0.956543f,
+ 0.961426f, 0.965820f, 0.968750f, 0.972656f, 0.975098f, 0.978027f, 0.980469f, 0.982910f,
+ 0.984375f, 0.985840f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995117f,
+ 0.000346f, 0.000923f, 0.001273f, 0.002010f, 0.002619f, 0.003689f, 0.004452f, 0.005177f,
+ 0.006290f, 0.007561f, 0.009033f, 0.010902f, 0.012970f, 0.015495f, 0.018280f, 0.021576f,
+ 0.024948f, 0.030304f, 0.035400f, 0.042480f, 0.051086f, 0.061401f, 0.074890f, 0.091187f,
+ 0.112427f, 0.138794f, 0.171631f, 0.212158f, 0.262451f, 0.320557f, 0.385986f, 0.456055f,
+ 0.525391f, 0.593262f, 0.654297f, 0.708984f, 0.754883f, 0.792969f, 0.824707f, 0.850098f,
+ 0.872070f, 0.890137f, 0.904785f, 0.917480f, 0.927734f, 0.937012f, 0.944336f, 0.951172f,
+ 0.956055f, 0.961914f, 0.966309f, 0.969727f, 0.973145f, 0.976074f, 0.978516f, 0.980469f,
+ 0.982910f, 0.984863f, 0.993652f, 0.995117f, 0.994629f, 0.994629f, 0.994629f, 0.994629f,
+ 0.000242f, 0.000666f, 0.001081f, 0.001806f, 0.002512f, 0.003397f, 0.003866f, 0.004894f,
+ 0.005566f, 0.006859f, 0.007957f, 0.009506f, 0.011009f, 0.013046f, 0.015266f, 0.018173f,
+ 0.021027f, 0.024811f, 0.029526f, 0.034790f, 0.041443f, 0.049835f, 0.059265f, 0.071899f,
+ 0.087769f, 0.107422f, 0.132202f, 0.163208f, 0.201782f, 0.249512f, 0.305908f, 0.370361f,
+ 0.440430f, 0.511230f, 0.578613f, 0.642090f, 0.698730f, 0.746582f, 0.787109f, 0.819824f,
+ 0.848145f, 0.869141f, 0.888672f, 0.903809f, 0.916992f, 0.927246f, 0.936523f, 0.943848f,
+ 0.951660f, 0.957031f, 0.961426f, 0.965820f, 0.970215f, 0.973145f, 0.976074f, 0.979004f,
+ 0.981445f, 0.983398f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994141f,
+ 0.000242f, 0.000709f, 0.000917f, 0.001194f, 0.002018f, 0.002634f, 0.003504f, 0.003918f,
+ 0.005020f, 0.005726f, 0.006935f, 0.008141f, 0.009666f, 0.011040f, 0.012848f, 0.014961f,
+ 0.017624f, 0.020660f, 0.024368f, 0.028381f, 0.033905f, 0.040283f, 0.047760f, 0.057312f,
+ 0.069214f, 0.083984f, 0.102539f, 0.126221f, 0.155640f, 0.193359f, 0.238892f, 0.293701f,
+ 0.356689f, 0.425537f, 0.497070f, 0.568359f, 0.632812f, 0.690918f, 0.739746f, 0.782227f,
+ 0.816406f, 0.845703f, 0.868652f, 0.887695f, 0.903320f, 0.916992f, 0.927734f, 0.937012f,
+ 0.944824f, 0.951660f, 0.957031f, 0.962891f, 0.966797f, 0.971191f, 0.973633f, 0.976562f,
+ 0.979492f, 0.981934f, 0.992676f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.994141f,
+ 0.000244f, 0.000660f, 0.000918f, 0.001343f, 0.002117f, 0.002407f, 0.002779f, 0.003626f,
+ 0.004246f, 0.005207f, 0.005913f, 0.007145f, 0.008163f, 0.009438f, 0.011101f, 0.012871f,
+ 0.014999f, 0.017426f, 0.020096f, 0.024185f, 0.027725f, 0.032623f, 0.038910f, 0.046387f,
+ 0.055298f, 0.066467f, 0.080627f, 0.098328f, 0.120972f, 0.149658f, 0.184814f, 0.229492f,
+ 0.282715f, 0.344727f, 0.414062f, 0.486084f, 0.556641f, 0.624023f, 0.683594f, 0.735352f,
+ 0.778320f, 0.814453f, 0.843750f, 0.867188f, 0.887207f, 0.903320f, 0.916504f, 0.928223f,
+ 0.937500f, 0.945312f, 0.953125f, 0.958008f, 0.964355f, 0.967285f, 0.971680f, 0.975098f,
+ 0.978516f, 0.980957f, 0.992676f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
+ 0.000200f, 0.000480f, 0.000808f, 0.001303f, 0.001680f, 0.002104f, 0.002510f, 0.002934f,
+ 0.003468f, 0.004429f, 0.005539f, 0.006046f, 0.006889f, 0.008438f, 0.009415f, 0.011108f,
+ 0.012787f, 0.014572f, 0.017517f, 0.020279f, 0.023483f, 0.027359f, 0.031860f, 0.037964f,
+ 0.045227f, 0.053711f, 0.064148f, 0.077759f, 0.095093f, 0.116272f, 0.143311f, 0.177856f,
+ 0.221191f, 0.273193f, 0.334473f, 0.403320f, 0.476318f, 0.548828f, 0.617188f, 0.677734f,
+ 0.730957f, 0.775879f, 0.812500f, 0.842285f, 0.866699f, 0.887695f, 0.903809f, 0.916992f,
+ 0.928711f, 0.938477f, 0.946777f, 0.953125f, 0.959473f, 0.963867f, 0.968750f, 0.972656f,
+ 0.976074f, 0.979004f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.992676f, 0.993164f,
+ 0.000243f, 0.000469f, 0.000878f, 0.001158f, 0.001382f, 0.001801f, 0.002220f, 0.002699f,
+ 0.003273f, 0.004063f, 0.004715f, 0.005447f, 0.005917f, 0.007099f, 0.008385f, 0.009521f,
+ 0.011032f, 0.012627f, 0.014870f, 0.016922f, 0.019836f, 0.023010f, 0.026642f, 0.031174f,
+ 0.036926f, 0.043549f, 0.051941f, 0.062561f, 0.075317f, 0.091553f, 0.112427f, 0.138428f,
+ 0.172485f, 0.213867f, 0.265381f, 0.326172f, 0.394775f, 0.467773f, 0.541504f, 0.610840f,
+ 0.673340f, 0.728516f, 0.774414f, 0.812012f, 0.842773f, 0.867676f, 0.887695f, 0.904297f,
+ 0.918457f, 0.929688f, 0.939453f, 0.948242f, 0.955078f, 0.959961f, 0.965820f, 0.970215f,
+ 0.974121f, 0.977051f, 0.991211f, 0.993164f, 0.993164f, 0.992188f, 0.993164f, 0.992188f,
+ 0.000000f, 0.000242f, 0.000799f, 0.000998f, 0.001273f, 0.001671f, 0.002069f, 0.002485f,
+ 0.003212f, 0.003578f, 0.003948f, 0.004559f, 0.005524f, 0.006321f, 0.007046f, 0.008438f,
+ 0.009438f, 0.010986f, 0.012390f, 0.014320f, 0.016663f, 0.019165f, 0.022476f, 0.025833f,
+ 0.030487f, 0.035675f, 0.042358f, 0.050018f, 0.060211f, 0.072693f, 0.088379f, 0.108948f,
+ 0.134766f, 0.166626f, 0.208008f, 0.258545f, 0.318848f, 0.387451f, 0.461670f, 0.536621f,
+ 0.606934f, 0.671387f, 0.727539f, 0.773438f, 0.811523f, 0.843750f, 0.868164f, 0.889160f,
+ 0.906250f, 0.920410f, 0.932617f, 0.941895f, 0.949707f, 0.956055f, 0.962402f, 0.967285f,
+ 0.971680f, 0.975586f, 0.990723f, 0.991699f, 0.991699f, 0.992188f, 0.992188f, 0.991699f,
+ 0.000237f, 0.000482f, 0.000772f, 0.000877f, 0.001109f, 0.001494f, 0.001991f, 0.002041f,
+ 0.002537f, 0.002975f, 0.003469f, 0.004128f, 0.004841f, 0.005550f, 0.006306f, 0.007359f,
+ 0.008369f, 0.009415f, 0.010788f, 0.012306f, 0.014160f, 0.016571f, 0.018921f, 0.021896f,
+ 0.025497f, 0.029587f, 0.034576f, 0.041260f, 0.049011f, 0.058319f, 0.070557f, 0.086060f,
+ 0.105774f, 0.130737f, 0.162720f, 0.203247f, 0.252930f, 0.313477f, 0.382568f, 0.457275f,
+ 0.532715f, 0.605469f, 0.671387f, 0.728027f, 0.774902f, 0.814453f, 0.844727f, 0.870605f,
+ 0.891113f, 0.909180f, 0.922852f, 0.934082f, 0.943359f, 0.951660f, 0.958008f, 0.964355f,
+ 0.968750f, 0.973145f, 0.990234f, 0.990723f, 0.991699f, 0.991211f, 0.991211f, 0.991211f,
+ 0.000235f, 0.000461f, 0.000484f, 0.000891f, 0.001105f, 0.001346f, 0.001634f, 0.001936f,
+ 0.002438f, 0.002874f, 0.003353f, 0.003925f, 0.004189f, 0.004887f, 0.005684f, 0.006279f,
+ 0.007298f, 0.008339f, 0.009384f, 0.010674f, 0.012360f, 0.013901f, 0.016113f, 0.018677f,
+ 0.021469f, 0.024841f, 0.029144f, 0.033783f, 0.039948f, 0.047272f, 0.056915f, 0.068726f,
+ 0.083801f, 0.102905f, 0.127563f, 0.159058f, 0.199341f, 0.248901f, 0.309570f, 0.379395f,
+ 0.454834f, 0.532715f, 0.606934f, 0.672852f, 0.729980f, 0.778320f, 0.817383f, 0.849121f,
+ 0.874512f, 0.895020f, 0.911621f, 0.924805f, 0.937012f, 0.946289f, 0.954102f, 0.960938f,
+ 0.965820f, 0.971191f, 0.989258f, 0.990234f, 0.990723f, 0.991211f, 0.990723f, 0.990723f,
+ 0.000000f, 0.000360f, 0.000477f, 0.000756f, 0.000896f, 0.001065f, 0.001570f, 0.001622f,
+ 0.002064f, 0.002525f, 0.002819f, 0.003004f, 0.003700f, 0.004356f, 0.005077f, 0.005428f,
+ 0.006283f, 0.007370f, 0.008339f, 0.009323f, 0.010567f, 0.012070f, 0.013672f, 0.015839f,
+ 0.018066f, 0.020844f, 0.024002f, 0.028183f, 0.033051f, 0.039246f, 0.046417f, 0.055450f,
+ 0.067200f, 0.082031f, 0.100586f, 0.125122f, 0.156250f, 0.196167f, 0.245972f, 0.307129f,
+ 0.378174f, 0.454834f, 0.533203f, 0.608398f, 0.675781f, 0.734375f, 0.782715f, 0.821777f,
+ 0.853516f, 0.878906f, 0.898926f, 0.915039f, 0.929199f, 0.939941f, 0.948730f, 0.956055f,
+ 0.963379f, 0.968262f, 0.988770f, 0.989746f, 0.990234f, 0.989746f, 0.989746f, 0.990234f,
+ 0.000000f, 0.000256f, 0.000467f, 0.000590f, 0.000772f, 0.001095f, 0.001356f, 0.001781f,
+ 0.001984f, 0.002161f, 0.002546f, 0.002956f, 0.003338f, 0.003899f, 0.004440f, 0.004986f,
+ 0.005486f, 0.006310f, 0.006969f, 0.008148f, 0.009148f, 0.010284f, 0.011902f, 0.013573f,
+ 0.015465f, 0.017853f, 0.020340f, 0.023590f, 0.027298f, 0.032227f, 0.038208f, 0.045563f,
+ 0.054047f, 0.065796f, 0.080322f, 0.098999f, 0.122864f, 0.153809f, 0.193970f, 0.244629f,
+ 0.306396f, 0.378662f, 0.457031f, 0.536621f, 0.613770f, 0.681641f, 0.740723f, 0.788574f,
+ 0.827637f, 0.858398f, 0.884277f, 0.903320f, 0.919922f, 0.932129f, 0.942871f, 0.951660f,
+ 0.959961f, 0.965820f, 0.987305f, 0.988281f, 0.989258f, 0.989258f, 0.989258f, 0.989258f,
+ 0.000244f, 0.000243f, 0.000583f, 0.000585f, 0.000822f, 0.001073f, 0.001159f, 0.001452f,
+ 0.001525f, 0.002001f, 0.002201f, 0.002714f, 0.002932f, 0.003525f, 0.003904f, 0.004482f,
+ 0.004997f, 0.005581f, 0.006233f, 0.006954f, 0.007820f, 0.008949f, 0.009941f, 0.011482f,
+ 0.013168f, 0.015099f, 0.017151f, 0.020111f, 0.022949f, 0.026947f, 0.031647f, 0.037354f,
+ 0.044342f, 0.053375f, 0.064331f, 0.078857f, 0.097351f, 0.121033f, 0.152588f, 0.192749f,
+ 0.244263f, 0.307129f, 0.380615f, 0.461426f, 0.543457f, 0.621582f, 0.690430f, 0.748047f,
+ 0.796387f, 0.834961f, 0.865723f, 0.889160f, 0.908691f, 0.924316f, 0.937500f, 0.946777f,
+ 0.955078f, 0.962891f, 0.986328f, 0.987793f, 0.988770f, 0.988770f, 0.988770f, 0.988770f,
+ 0.000000f, 0.000243f, 0.000308f, 0.000541f, 0.000801f, 0.000827f, 0.001057f, 0.001280f,
+ 0.001460f, 0.001781f, 0.002090f, 0.002481f, 0.002756f, 0.003054f, 0.003321f, 0.003948f,
+ 0.004303f, 0.004898f, 0.005306f, 0.006405f, 0.006954f, 0.007851f, 0.008537f, 0.009918f,
+ 0.011208f, 0.012825f, 0.014534f, 0.016861f, 0.019379f, 0.022629f, 0.026276f, 0.030838f,
+ 0.036407f, 0.043488f, 0.051819f, 0.063416f, 0.077209f, 0.095825f, 0.119812f, 0.151489f,
+ 0.192749f, 0.245361f, 0.309814f, 0.385986f, 0.469238f, 0.552246f, 0.630859f, 0.699707f,
+ 0.757324f, 0.805176f, 0.842773f, 0.873047f, 0.895508f, 0.914062f, 0.929688f, 0.941406f,
+ 0.952148f, 0.959473f, 0.985840f, 0.986816f, 0.987305f, 0.987305f, 0.987305f, 0.987305f,
+ 0.000000f, 0.000243f, 0.000242f, 0.000548f, 0.000695f, 0.000803f, 0.001053f, 0.001198f,
+ 0.001363f, 0.001513f, 0.001886f, 0.002069f, 0.002447f, 0.002676f, 0.003138f, 0.003551f,
+ 0.003868f, 0.004261f, 0.004936f, 0.005337f, 0.005852f, 0.006615f, 0.007519f, 0.008575f,
+ 0.009705f, 0.010872f, 0.012688f, 0.014397f, 0.016479f, 0.019119f, 0.022064f, 0.025589f,
+ 0.030304f, 0.035828f, 0.042603f, 0.050812f, 0.062012f, 0.076355f, 0.094971f, 0.119263f,
+ 0.151367f, 0.193726f, 0.247925f, 0.314941f, 0.393311f, 0.478271f, 0.563965f, 0.642578f,
+ 0.711914f, 0.769043f, 0.815430f, 0.851562f, 0.881348f, 0.902832f, 0.921387f, 0.934570f,
+ 0.945801f, 0.955078f, 0.984375f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f,
+ 0.000000f, 0.000234f, 0.000239f, 0.000308f, 0.000597f, 0.000690f, 0.000868f, 0.000937f,
+ 0.001189f, 0.001404f, 0.001696f, 0.001854f, 0.002180f, 0.002249f, 0.002672f, 0.002979f,
+ 0.003494f, 0.003761f, 0.004257f, 0.004745f, 0.005154f, 0.005821f, 0.006561f, 0.007557f,
+ 0.008575f, 0.009575f, 0.010963f, 0.012238f, 0.014130f, 0.016113f, 0.018539f, 0.021545f,
+ 0.025162f, 0.029404f, 0.034851f, 0.041626f, 0.050354f, 0.061218f, 0.075562f, 0.094482f,
+ 0.119507f, 0.152344f, 0.196167f, 0.252197f, 0.322266f, 0.404053f, 0.490967f, 0.577637f,
+ 0.658203f, 0.726074f, 0.782715f, 0.827637f, 0.861816f, 0.889648f, 0.910645f, 0.926758f,
+ 0.940918f, 0.950684f, 0.983398f, 0.985352f, 0.984863f, 0.985352f, 0.985840f, 0.985352f,
+ 0.000000f, 0.000240f, 0.000237f, 0.000239f, 0.000436f, 0.000648f, 0.000661f, 0.000892f,
+ 0.001089f, 0.001484f, 0.001446f, 0.001586f, 0.001896f, 0.002176f, 0.002325f, 0.002634f,
+ 0.003057f, 0.003315f, 0.003561f, 0.004150f, 0.004578f, 0.005180f, 0.005768f, 0.006485f,
+ 0.007286f, 0.008400f, 0.009453f, 0.010429f, 0.011795f, 0.013680f, 0.015671f, 0.018005f,
+ 0.020981f, 0.024521f, 0.028748f, 0.034119f, 0.040863f, 0.049622f, 0.060303f, 0.074829f,
+ 0.094116f, 0.119995f, 0.154297f, 0.199341f, 0.258301f, 0.331787f, 0.416504f, 0.507812f,
+ 0.595703f, 0.675781f, 0.743164f, 0.797852f, 0.840820f, 0.873535f, 0.899414f, 0.919434f,
+ 0.934082f, 0.947266f, 0.982422f, 0.983887f, 0.983887f, 0.984375f, 0.984375f, 0.983887f,
+ 0.000136f, 0.000115f, 0.000237f, 0.000238f, 0.000358f, 0.000452f, 0.000759f, 0.000961f,
+ 0.001026f, 0.001113f, 0.001433f, 0.001564f, 0.001659f, 0.001955f, 0.002024f, 0.002384f,
+ 0.002647f, 0.002974f, 0.003267f, 0.003611f, 0.003971f, 0.004498f, 0.005043f, 0.005539f,
+ 0.006344f, 0.007168f, 0.007942f, 0.009010f, 0.010353f, 0.011711f, 0.013458f, 0.015213f,
+ 0.017548f, 0.020279f, 0.023926f, 0.028061f, 0.033356f, 0.040283f, 0.048615f, 0.060455f,
+ 0.074890f, 0.094727f, 0.121216f, 0.156860f, 0.204102f, 0.266846f, 0.344238f, 0.433105f,
+ 0.526855f, 0.616699f, 0.696289f, 0.761230f, 0.813965f, 0.854492f, 0.884766f, 0.909180f,
+ 0.927734f, 0.941895f, 0.980957f, 0.982422f, 0.982910f, 0.982422f, 0.982422f, 0.982910f,
+ 0.000000f, 0.000103f, 0.000208f, 0.000356f, 0.000355f, 0.000400f, 0.000454f, 0.000861f,
+ 0.000922f, 0.001202f, 0.001088f, 0.001401f, 0.001493f, 0.001779f, 0.001881f, 0.002180f,
+ 0.002329f, 0.002483f, 0.002846f, 0.003178f, 0.003542f, 0.003914f, 0.004406f, 0.004871f,
+ 0.005352f, 0.006119f, 0.006927f, 0.007904f, 0.008759f, 0.009972f, 0.011284f, 0.013046f,
+ 0.014938f, 0.016998f, 0.019943f, 0.023224f, 0.027161f, 0.032776f, 0.039917f, 0.048218f,
+ 0.059937f, 0.075134f, 0.095642f, 0.123169f, 0.160767f, 0.211670f, 0.278320f, 0.360352f,
+ 0.454102f, 0.550293f, 0.640625f, 0.718262f, 0.781738f, 0.831055f, 0.869141f, 0.897461f,
+ 0.919434f, 0.936035f, 0.979492f, 0.980957f, 0.980957f, 0.981934f, 0.981445f, 0.981445f,
+ 0.000000f, 0.000192f, 0.000191f, 0.000350f, 0.000352f, 0.000354f, 0.000599f, 0.000721f,
+ 0.000835f, 0.001044f, 0.000988f, 0.001141f, 0.001255f, 0.001479f, 0.001705f, 0.001815f,
+ 0.001843f, 0.002151f, 0.002369f, 0.002831f, 0.003067f, 0.003431f, 0.003698f, 0.004295f,
+ 0.004738f, 0.005352f, 0.005859f, 0.006615f, 0.007587f, 0.008583f, 0.009682f, 0.010735f,
+ 0.012405f, 0.014381f, 0.016708f, 0.018921f, 0.022736f, 0.026947f, 0.032104f, 0.039032f,
+ 0.048004f, 0.059784f, 0.075500f, 0.096924f, 0.125977f, 0.166626f, 0.221069f, 0.292969f,
+ 0.380371f, 0.479004f, 0.577637f, 0.667969f, 0.743164f, 0.803711f, 0.849609f, 0.883789f,
+ 0.910645f, 0.930176f, 0.977539f, 0.979492f, 0.979492f, 0.979492f, 0.979980f, 0.979492f,
+ 0.000000f, 0.000000f, 0.000191f, 0.000214f, 0.000441f, 0.000465f, 0.000351f, 0.000656f,
+ 0.000672f, 0.000957f, 0.000881f, 0.001092f, 0.001209f, 0.001259f, 0.001315f, 0.001583f,
+ 0.001630f, 0.001834f, 0.002033f, 0.002367f, 0.002596f, 0.002924f, 0.003387f, 0.003693f,
+ 0.004063f, 0.004601f, 0.004986f, 0.005676f, 0.006557f, 0.006973f, 0.007801f, 0.008781f,
+ 0.010475f, 0.012100f, 0.013817f, 0.015625f, 0.018784f, 0.021927f, 0.026260f, 0.031677f,
+ 0.038879f, 0.048004f, 0.059845f, 0.076233f, 0.098633f, 0.130005f, 0.173950f, 0.233032f,
+ 0.311035f, 0.405518f, 0.507812f, 0.608887f, 0.698242f, 0.769531f, 0.826172f, 0.868164f,
+ 0.899414f, 0.922852f, 0.976074f, 0.977539f, 0.977539f, 0.977051f, 0.978027f, 0.978027f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000211f, 0.000326f, 0.000573f, 0.000574f, 0.000583f,
+ 0.000584f, 0.000659f, 0.000901f, 0.001014f, 0.001064f, 0.001033f, 0.001163f, 0.001234f,
+ 0.001546f, 0.001585f, 0.001894f, 0.002085f, 0.002361f, 0.002504f, 0.003023f, 0.003147f,
+ 0.003580f, 0.004032f, 0.004314f, 0.004936f, 0.005215f, 0.006081f, 0.006725f, 0.007927f,
+ 0.008743f, 0.009918f, 0.011642f, 0.013367f, 0.015404f, 0.018219f, 0.021545f, 0.025787f,
+ 0.031174f, 0.038361f, 0.047577f, 0.060425f, 0.077881f, 0.102051f, 0.135376f, 0.182861f,
+ 0.249023f, 0.333984f, 0.436035f, 0.542969f, 0.644043f, 0.730469f, 0.798340f, 0.848633f,
+ 0.886719f, 0.914062f, 0.973633f, 0.974609f, 0.975098f, 0.976074f, 0.975098f, 0.976074f,
+ 0.000000f, 0.000000f, 0.000114f, 0.000112f, 0.000271f, 0.000510f, 0.000450f, 0.000565f,
+ 0.000572f, 0.000581f, 0.000654f, 0.000825f, 0.000954f, 0.001085f, 0.001050f, 0.001087f,
+ 0.001282f, 0.001547f, 0.001585f, 0.001825f, 0.002066f, 0.002182f, 0.002384f, 0.002659f,
+ 0.003172f, 0.003357f, 0.003721f, 0.004238f, 0.004505f, 0.005024f, 0.005878f, 0.006512f,
+ 0.007324f, 0.008293f, 0.009201f, 0.011040f, 0.012993f, 0.015007f, 0.017639f, 0.020920f,
+ 0.025131f, 0.030899f, 0.038269f, 0.047760f, 0.061188f, 0.079651f, 0.105469f, 0.142944f,
+ 0.195801f, 0.268799f, 0.363525f, 0.472168f, 0.582520f, 0.683594f, 0.765137f, 0.826660f,
+ 0.872070f, 0.905273f, 0.972168f, 0.973633f, 0.973145f, 0.973633f, 0.973633f, 0.973633f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000224f, 0.000412f, 0.000494f, 0.000543f,
+ 0.000561f, 0.000680f, 0.000665f, 0.000675f, 0.000679f, 0.000797f, 0.000926f, 0.001122f,
+ 0.001132f, 0.001207f, 0.001375f, 0.001606f, 0.001838f, 0.001963f, 0.002163f, 0.002314f,
+ 0.002480f, 0.002956f, 0.003189f, 0.003489f, 0.003744f, 0.004311f, 0.004749f, 0.005276f,
+ 0.005867f, 0.006962f, 0.008186f, 0.008987f, 0.010498f, 0.012283f, 0.014374f, 0.017075f,
+ 0.020355f, 0.024719f, 0.030640f, 0.037720f, 0.048309f, 0.062134f, 0.082336f, 0.110840f,
+ 0.151978f, 0.212891f, 0.294922f, 0.399170f, 0.515137f, 0.628418f, 0.724609f, 0.799805f,
+ 0.854980f, 0.894043f, 0.968750f, 0.970215f, 0.970703f, 0.971191f, 0.970703f, 0.970703f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000228f, 0.000233f, 0.000436f, 0.000457f,
+ 0.000621f, 0.000546f, 0.000622f, 0.000633f, 0.000576f, 0.000644f, 0.000717f, 0.000909f,
+ 0.000994f, 0.001127f, 0.001179f, 0.001267f, 0.001513f, 0.001628f, 0.001742f, 0.001974f,
+ 0.002111f, 0.002403f, 0.002810f, 0.003139f, 0.003231f, 0.003466f, 0.004021f, 0.004459f,
+ 0.004971f, 0.005581f, 0.006809f, 0.007568f, 0.008759f, 0.010002f, 0.011665f, 0.013847f,
+ 0.016342f, 0.019714f, 0.024368f, 0.030106f, 0.037811f, 0.048706f, 0.063843f, 0.085327f,
+ 0.118042f, 0.164917f, 0.234131f, 0.328125f, 0.443359f, 0.565430f, 0.677246f, 0.767578f,
+ 0.833496f, 0.882812f, 0.965820f, 0.967285f, 0.967773f, 0.968262f, 0.967773f, 0.968262f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000214f, 0.000210f, 0.000296f, 0.000309f, 0.000386f,
+ 0.000462f, 0.000482f, 0.000525f, 0.000572f, 0.000525f, 0.000558f, 0.000689f, 0.000685f,
+ 0.000841f, 0.000934f, 0.001008f, 0.001182f, 0.001271f, 0.001412f, 0.001757f, 0.001787f,
+ 0.001769f, 0.002110f, 0.002321f, 0.002331f, 0.002737f, 0.002951f, 0.003189f, 0.003588f,
+ 0.004253f, 0.004627f, 0.005505f, 0.006119f, 0.006969f, 0.008018f, 0.009583f, 0.010971f,
+ 0.013245f, 0.015915f, 0.019257f, 0.023651f, 0.030014f, 0.038086f, 0.049683f, 0.066406f,
+ 0.091125f, 0.127441f, 0.182617f, 0.262939f, 0.370605f, 0.497070f, 0.623047f, 0.729004f,
+ 0.810547f, 0.867188f, 0.962891f, 0.963867f, 0.964844f, 0.964844f, 0.964355f, 0.964355f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000200f, 0.000215f, 0.000229f, 0.000319f,
+ 0.000330f, 0.000411f, 0.000491f, 0.000527f, 0.000547f, 0.000560f, 0.000634f, 0.000648f,
+ 0.000716f, 0.000778f, 0.000855f, 0.000998f, 0.001182f, 0.001111f, 0.001274f, 0.001625f,
+ 0.001584f, 0.001559f, 0.001864f, 0.002037f, 0.002296f, 0.002438f, 0.002600f, 0.002993f,
+ 0.003290f, 0.003801f, 0.004467f, 0.005085f, 0.005508f, 0.006519f, 0.007645f, 0.008743f,
+ 0.010757f, 0.012558f, 0.014946f, 0.018661f, 0.023422f, 0.029556f, 0.038574f, 0.050964f,
+ 0.069702f, 0.097351f, 0.140015f, 0.205566f, 0.301025f, 0.424561f, 0.559082f, 0.683594f,
+ 0.781250f, 0.852051f, 0.958496f, 0.960449f, 0.960938f, 0.960938f, 0.960938f, 0.960449f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000214f, 0.000251f,
+ 0.000302f, 0.000365f, 0.000370f, 0.000429f, 0.000495f, 0.000521f, 0.000504f, 0.000547f,
+ 0.000632f, 0.000656f, 0.000695f, 0.000795f, 0.000922f, 0.001074f, 0.001125f, 0.001192f,
+ 0.001166f, 0.001303f, 0.001555f, 0.001575f, 0.001763f, 0.001970f, 0.002232f, 0.002560f,
+ 0.002657f, 0.003082f, 0.003559f, 0.003799f, 0.004620f, 0.005241f, 0.006081f, 0.007103f,
+ 0.008385f, 0.009796f, 0.012192f, 0.014702f, 0.018234f, 0.022934f, 0.029556f, 0.039307f,
+ 0.053009f, 0.073547f, 0.106628f, 0.157715f, 0.237793f, 0.351318f, 0.490479f, 0.629883f,
+ 0.746094f, 0.832031f, 0.954590f, 0.956055f, 0.956055f, 0.957031f, 0.956543f, 0.956055f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000146f, 0.000191f, 0.000200f,
+ 0.000255f, 0.000232f, 0.000252f, 0.000359f, 0.000291f, 0.000342f, 0.000406f, 0.000498f,
+ 0.000520f, 0.000533f, 0.000632f, 0.000605f, 0.000689f, 0.000768f, 0.000908f, 0.001013f,
+ 0.001087f, 0.001030f, 0.001211f, 0.001318f, 0.001497f, 0.001609f, 0.001753f, 0.001957f,
+ 0.002234f, 0.002352f, 0.002663f, 0.003040f, 0.003635f, 0.004082f, 0.004723f, 0.005516f,
+ 0.006367f, 0.007675f, 0.009224f, 0.011360f, 0.013695f, 0.017868f, 0.022598f, 0.029724f,
+ 0.040222f, 0.055542f, 0.080078f, 0.119202f, 0.182617f, 0.281738f, 0.417725f, 0.568848f,
+ 0.705566f, 0.807129f, 0.948730f, 0.951172f, 0.951172f, 0.951172f, 0.951660f, 0.951660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
+ 0.000203f, 0.000186f, 0.000184f, 0.000321f, 0.000231f, 0.000337f, 0.000359f, 0.000430f,
+ 0.000455f, 0.000531f, 0.000502f, 0.000517f, 0.000728f, 0.000643f, 0.000673f, 0.000816f,
+ 0.000930f, 0.000991f, 0.001028f, 0.001161f, 0.001284f, 0.001369f, 0.001474f, 0.001719f,
+ 0.001781f, 0.001883f, 0.002258f, 0.002518f, 0.002831f, 0.003201f, 0.003744f, 0.004349f,
+ 0.005127f, 0.006130f, 0.007210f, 0.008423f, 0.010696f, 0.013405f, 0.017136f, 0.022522f,
+ 0.030029f, 0.041321f, 0.059631f, 0.089050f, 0.138062f, 0.218994f, 0.343750f, 0.500488f,
+ 0.657227f, 0.780762f, 0.943848f, 0.945312f, 0.945312f, 0.945801f, 0.945801f, 0.946289f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f,
+ 0.000118f, 0.000137f, 0.000139f, 0.000241f, 0.000202f, 0.000304f, 0.000313f, 0.000332f,
+ 0.000357f, 0.000420f, 0.000435f, 0.000463f, 0.000645f, 0.000544f, 0.000700f, 0.000717f,
+ 0.000669f, 0.000834f, 0.000865f, 0.000916f, 0.001109f, 0.001193f, 0.001246f, 0.001300f,
+ 0.001488f, 0.001538f, 0.001806f, 0.001929f, 0.002001f, 0.002462f, 0.002666f, 0.003260f,
+ 0.003904f, 0.004364f, 0.005325f, 0.006306f, 0.008041f, 0.009720f, 0.012718f, 0.016525f,
+ 0.022217f, 0.030579f, 0.043854f, 0.065247f, 0.101929f, 0.166016f, 0.273193f, 0.428223f,
+ 0.600586f, 0.748047f, 0.936523f, 0.938477f, 0.938965f, 0.939453f, 0.938965f, 0.938965f,
+ 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f,
+ 0.000114f, 0.000102f, 0.000090f, 0.000096f, 0.000131f, 0.000245f, 0.000276f, 0.000257f,
+ 0.000307f, 0.000316f, 0.000322f, 0.000373f, 0.000411f, 0.000440f, 0.000433f, 0.000650f,
+ 0.000578f, 0.000704f, 0.000746f, 0.000723f, 0.000819f, 0.000756f, 0.000758f, 0.000878f,
+ 0.001009f, 0.001270f, 0.001399f, 0.001530f, 0.001798f, 0.001803f, 0.002151f, 0.002317f,
+ 0.002728f, 0.003222f, 0.003782f, 0.004612f, 0.005951f, 0.006985f, 0.009308f, 0.011955f,
+ 0.016052f, 0.022324f, 0.031525f, 0.047272f, 0.073853f, 0.122192f, 0.209717f, 0.352783f,
+ 0.537109f, 0.709473f, 0.928223f, 0.930664f, 0.931152f, 0.930664f, 0.931641f, 0.931152f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f,
+ 0.000119f, 0.000111f, 0.000100f, 0.000139f, 0.000082f, 0.000154f, 0.000121f, 0.000216f,
+ 0.000147f, 0.000271f, 0.000288f, 0.000298f, 0.000386f, 0.000463f, 0.000370f, 0.000485f,
+ 0.000555f, 0.000530f, 0.000578f, 0.000574f, 0.000612f, 0.000712f, 0.000776f, 0.000716f,
+ 0.000931f, 0.000831f, 0.000967f, 0.001154f, 0.001176f, 0.001284f, 0.001497f, 0.001884f,
+ 0.002270f, 0.002415f, 0.002947f, 0.003412f, 0.004032f, 0.005066f, 0.006485f, 0.008400f,
+ 0.011215f, 0.015404f, 0.022079f, 0.033264f, 0.052124f, 0.087646f, 0.155029f, 0.279297f,
+ 0.465820f, 0.664062f, 0.918945f, 0.921387f, 0.921875f, 0.922363f, 0.922363f, 0.921875f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000119f,
+ 0.000118f, 0.000118f, 0.000110f, 0.000100f, 0.000091f, 0.000082f, 0.000075f, 0.000095f,
+ 0.000166f, 0.000113f, 0.000163f, 0.000248f, 0.000258f, 0.000277f, 0.000336f, 0.000301f,
+ 0.000445f, 0.000495f, 0.000473f, 0.000505f, 0.000494f, 0.000470f, 0.000584f, 0.000752f,
+ 0.000821f, 0.000814f, 0.000845f, 0.000807f, 0.000932f, 0.000996f, 0.001380f, 0.001481f,
+ 0.001507f, 0.001757f, 0.002146f, 0.002443f, 0.002869f, 0.003546f, 0.004559f, 0.005878f,
+ 0.007561f, 0.010475f, 0.015320f, 0.022675f, 0.036133f, 0.060883f, 0.110352f, 0.211670f,
+ 0.389160f, 0.610352f, 0.908691f, 0.909180f, 0.910645f, 0.912109f, 0.909668f, 0.910156f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000117f,
+ 0.000117f, 0.000117f, 0.000116f, 0.000110f, 0.000100f, 0.000099f, 0.000083f, 0.000077f,
+ 0.000071f, 0.000081f, 0.000087f, 0.000166f, 0.000177f, 0.000233f, 0.000238f, 0.000273f,
+ 0.000325f, 0.000357f, 0.000292f, 0.000406f, 0.000418f, 0.000440f, 0.000428f, 0.000568f,
+ 0.000459f, 0.000628f, 0.000678f, 0.000688f, 0.000647f, 0.000830f, 0.000925f, 0.001111f,
+ 0.001011f, 0.001420f, 0.001504f, 0.001771f, 0.001997f, 0.002495f, 0.003147f, 0.003944f,
+ 0.005077f, 0.006958f, 0.010040f, 0.015053f, 0.023727f, 0.040680f, 0.075989f, 0.153076f,
+ 0.312012f, 0.547363f, 0.894531f, 0.897461f, 0.897949f, 0.897949f, 0.897949f, 0.898438f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000116f, 0.000116f,
+ 0.000115f, 0.000115f, 0.000114f, 0.000114f, 0.000111f, 0.000101f, 0.000093f, 0.000086f,
+ 0.000079f, 0.000095f, 0.000095f, 0.000090f, 0.000117f, 0.000109f, 0.000158f, 0.000199f,
+ 0.000207f, 0.000223f, 0.000286f, 0.000288f, 0.000267f, 0.000347f, 0.000368f, 0.000450f,
+ 0.000377f, 0.000460f, 0.000504f, 0.000498f, 0.000494f, 0.000616f, 0.000632f, 0.000699f,
+ 0.000755f, 0.000938f, 0.000978f, 0.001222f, 0.001355f, 0.001673f, 0.002016f, 0.002539f,
+ 0.003258f, 0.004410f, 0.006332f, 0.009285f, 0.014847f, 0.025864f, 0.049042f, 0.104736f,
+ 0.236572f, 0.477295f, 0.879395f, 0.881348f, 0.882324f, 0.881836f, 0.882324f, 0.882324f,
+ 0.000000f, 0.000119f, 0.000118f, 0.000116f, 0.000115f, 0.000114f, 0.000114f, 0.000113f,
+ 0.000112f, 0.000112f, 0.000111f, 0.000111f, 0.000110f, 0.000110f, 0.000103f, 0.000095f,
+ 0.000088f, 0.000081f, 0.000076f, 0.000070f, 0.000065f, 0.000100f, 0.000104f, 0.000099f,
+ 0.000120f, 0.000145f, 0.000190f, 0.000204f, 0.000213f, 0.000230f, 0.000241f, 0.000279f,
+ 0.000325f, 0.000322f, 0.000328f, 0.000381f, 0.000351f, 0.000466f, 0.000452f, 0.000516f,
+ 0.000591f, 0.000622f, 0.000733f, 0.000882f, 0.000895f, 0.001092f, 0.001456f, 0.001765f,
+ 0.002069f, 0.002821f, 0.003851f, 0.005558f, 0.008865f, 0.015579f, 0.029999f, 0.066895f,
+ 0.167480f, 0.400391f, 0.860352f, 0.862793f, 0.863281f, 0.864258f, 0.863281f, 0.863770f,
+ 0.000119f, 0.000114f, 0.000113f, 0.000113f, 0.000111f, 0.000110f, 0.000109f, 0.000109f,
+ 0.000108f, 0.000107f, 0.000107f, 0.000107f, 0.000106f, 0.000105f, 0.000106f, 0.000105f,
+ 0.000098f, 0.000090f, 0.000084f, 0.000078f, 0.000073f, 0.000068f, 0.000063f, 0.000063f,
+ 0.000066f, 0.000053f, 0.000080f, 0.000107f, 0.000126f, 0.000150f, 0.000188f, 0.000187f,
+ 0.000206f, 0.000205f, 0.000235f, 0.000242f, 0.000277f, 0.000340f, 0.000323f, 0.000308f,
+ 0.000417f, 0.000411f, 0.000445f, 0.000536f, 0.000622f, 0.000673f, 0.000887f, 0.000985f,
+ 0.001289f, 0.001623f, 0.002337f, 0.003241f, 0.004929f, 0.008560f, 0.016739f, 0.039307f,
+ 0.109619f, 0.317383f, 0.837402f, 0.840332f, 0.841309f, 0.840820f, 0.840820f, 0.841309f,
+ 0.000000f, 0.000106f, 0.000099f, 0.000104f, 0.000102f, 0.000101f, 0.000100f, 0.000101f,
+ 0.000101f, 0.000100f, 0.000099f, 0.000100f, 0.000099f, 0.000099f, 0.000099f, 0.000098f,
+ 0.000098f, 0.000098f, 0.000093f, 0.000086f, 0.000080f, 0.000075f, 0.000070f, 0.000065f,
+ 0.000061f, 0.000057f, 0.000059f, 0.000054f, 0.000061f, 0.000080f, 0.000087f, 0.000101f,
+ 0.000136f, 0.000147f, 0.000163f, 0.000171f, 0.000179f, 0.000205f, 0.000223f, 0.000237f,
+ 0.000281f, 0.000272f, 0.000299f, 0.000364f, 0.000373f, 0.000448f, 0.000507f, 0.000643f,
+ 0.000801f, 0.001000f, 0.001276f, 0.001765f, 0.002712f, 0.004585f, 0.008492f, 0.020462f,
+ 0.063721f, 0.233643f, 0.811035f, 0.813477f, 0.814453f, 0.813965f, 0.813965f, 0.814453f,
+ 0.000000f, 0.000057f, 0.000085f, 0.000085f, 0.000083f, 0.000085f, 0.000087f, 0.000086f,
+ 0.000087f, 0.000087f, 0.000086f, 0.000087f, 0.000087f, 0.000086f, 0.000087f, 0.000087f,
+ 0.000088f, 0.000086f, 0.000088f, 0.000087f, 0.000087f, 0.000081f, 0.000076f, 0.000071f,
+ 0.000067f, 0.000063f, 0.000058f, 0.000055f, 0.000051f, 0.000048f, 0.000046f, 0.000042f,
+ 0.000051f, 0.000063f, 0.000081f, 0.000101f, 0.000122f, 0.000137f, 0.000147f, 0.000143f,
+ 0.000157f, 0.000183f, 0.000205f, 0.000188f, 0.000196f, 0.000249f, 0.000310f, 0.000329f,
+ 0.000413f, 0.000534f, 0.000679f, 0.000944f, 0.001365f, 0.002199f, 0.004150f, 0.009369f,
+ 0.031677f, 0.153564f, 0.779297f, 0.781250f, 0.782227f, 0.782715f, 0.781738f, 0.781250f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000009f, 0.000030f, 0.000048f, 0.000051f, 0.000054f,
+ 0.000055f, 0.000059f, 0.000060f, 0.000065f, 0.000065f, 0.000066f, 0.000068f, 0.000068f,
+ 0.000070f, 0.000070f, 0.000071f, 0.000071f, 0.000072f, 0.000073f, 0.000073f, 0.000073f,
+ 0.000071f, 0.000066f, 0.000062f, 0.000058f, 0.000055f, 0.000051f, 0.000048f, 0.000045f,
+ 0.000042f, 0.000039f, 0.000044f, 0.000036f, 0.000046f, 0.000056f, 0.000067f, 0.000085f,
+ 0.000099f, 0.000108f, 0.000107f, 0.000113f, 0.000139f, 0.000144f, 0.000165f, 0.000169f,
+ 0.000196f, 0.000266f, 0.000311f, 0.000426f, 0.000598f, 0.000948f, 0.001744f, 0.003975f,
+ 0.012856f, 0.084351f, 0.739746f, 0.743164f, 0.743652f, 0.743652f, 0.743652f, 0.743164f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000012f, 0.000012f, 0.000020f, 0.000028f, 0.000030f, 0.000033f, 0.000034f,
+ 0.000041f, 0.000041f, 0.000045f, 0.000047f, 0.000048f, 0.000049f, 0.000051f, 0.000052f,
+ 0.000054f, 0.000054f, 0.000056f, 0.000057f, 0.000056f, 0.000052f, 0.000049f, 0.000046f,
+ 0.000043f, 0.000041f, 0.000038f, 0.000035f, 0.000033f, 0.000031f, 0.000029f, 0.000029f,
+ 0.000036f, 0.000055f, 0.000048f, 0.000067f, 0.000067f, 0.000073f, 0.000075f, 0.000097f,
+ 0.000085f, 0.000111f, 0.000137f, 0.000191f, 0.000233f, 0.000371f, 0.000609f, 0.001319f,
+ 0.004341f, 0.033844f, 0.696289f, 0.698730f, 0.699219f, 0.698242f, 0.698730f, 0.698730f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000003f, 0.000007f, 0.000009f, 0.000012f, 0.000015f, 0.000020f,
+ 0.000022f, 0.000023f, 0.000026f, 0.000029f, 0.000030f, 0.000032f, 0.000033f, 0.000035f,
+ 0.000037f, 0.000037f, 0.000036f, 0.000034f, 0.000032f, 0.000030f, 0.000028f, 0.000026f,
+ 0.000024f, 0.000022f, 0.000021f, 0.000019f, 0.000024f, 0.000024f, 0.000029f, 0.000037f,
+ 0.000043f, 0.000046f, 0.000059f, 0.000058f, 0.000075f, 0.000095f, 0.000160f, 0.000306f,
+ 0.001006f, 0.008865f, 0.643066f, 0.647461f, 0.647949f, 0.647461f, 0.647949f, 0.648438f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000003f, 0.000005f, 0.000007f, 0.000010f, 0.000012f, 0.000013f, 0.000015f, 0.000017f,
+ 0.000019f, 0.000020f, 0.000018f, 0.000017f, 0.000015f, 0.000014f, 0.000013f, 0.000012f,
+ 0.000010f, 0.000012f, 0.000014f, 0.000018f, 0.000018f, 0.000025f, 0.000028f, 0.000045f,
+ 0.000110f, 0.001030f, 0.586914f, 0.589844f, 0.590820f, 0.591309f, 0.591309f, 0.590820f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000002f, 0.000004f, 0.000005f, 0.000004f, 0.000004f, 0.000003f, 0.000003f,
+ 0.000004f, 0.000009f, 0.527344f, 0.529785f, 0.529785f, 0.530273f, 0.530762f, 0.530762f,
+ },
+ {
+ 0.135132f, 0.377441f, 0.544434f, 0.653320f, 0.724609f, 0.773926f, 0.811035f, 0.838867f,
+ 0.860840f, 0.876465f, 0.891113f, 0.902832f, 0.912109f, 0.920898f, 0.928223f, 0.934082f,
+ 0.938965f, 0.943848f, 0.948242f, 0.952637f, 0.955566f, 0.958984f, 0.961914f, 0.964844f,
+ 0.966797f, 0.969238f, 0.971191f, 0.973145f, 0.975098f, 0.976562f, 0.978027f, 0.979492f,
+ 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.985840f, 0.986328f, 0.987793f, 0.988770f,
+ 0.989746f, 0.989746f, 0.990234f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
+ 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f,
+ 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
+ 0.044891f, 0.163330f, 0.306885f, 0.444336f, 0.559570f, 0.645020f, 0.710938f, 0.760742f,
+ 0.797852f, 0.827148f, 0.850098f, 0.868652f, 0.883789f, 0.895996f, 0.907227f, 0.916016f,
+ 0.923340f, 0.930176f, 0.936523f, 0.941406f, 0.946777f, 0.950684f, 0.954102f, 0.957031f,
+ 0.960938f, 0.963379f, 0.965820f, 0.968262f, 0.970703f, 0.972168f, 0.974609f, 0.976562f,
+ 0.977539f, 0.979492f, 0.980469f, 0.981934f, 0.982910f, 0.984375f, 0.985840f, 0.986816f,
+ 0.987793f, 0.988770f, 0.988770f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f,
+ 0.993164f, 0.994141f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
+ 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f, 0.999023f,
+ 0.020325f, 0.077820f, 0.158936f, 0.260498f, 0.372314f, 0.479736f, 0.572754f, 0.648438f,
+ 0.707520f, 0.754883f, 0.791016f, 0.820312f, 0.843750f, 0.862793f, 0.878906f, 0.891602f,
+ 0.903320f, 0.912598f, 0.920898f, 0.928223f, 0.933594f, 0.939941f, 0.944824f, 0.949219f,
+ 0.952637f, 0.956543f, 0.959961f, 0.962402f, 0.965332f, 0.967773f, 0.970215f, 0.971680f,
+ 0.974121f, 0.976074f, 0.977539f, 0.979004f, 0.980957f, 0.981445f, 0.983398f, 0.984375f,
+ 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.992188f,
+ 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
+ 0.012032f, 0.042908f, 0.088196f, 0.149292f, 0.228027f, 0.319824f, 0.415527f, 0.506348f,
+ 0.586914f, 0.653809f, 0.709473f, 0.752441f, 0.787598f, 0.817383f, 0.840820f, 0.860352f,
+ 0.876465f, 0.889648f, 0.900879f, 0.910156f, 0.918945f, 0.926270f, 0.933105f, 0.938965f,
+ 0.944336f, 0.948730f, 0.952637f, 0.956055f, 0.958984f, 0.962402f, 0.965332f, 0.967773f,
+ 0.970215f, 0.972656f, 0.974609f, 0.976562f, 0.978027f, 0.979492f, 0.980957f, 0.982422f,
+ 0.983887f, 0.984375f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.989746f, 0.990234f,
+ 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996094f,
+ 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
+ 0.007637f, 0.026825f, 0.053436f, 0.090759f, 0.140137f, 0.203125f, 0.279053f, 0.363281f,
+ 0.449463f, 0.529785f, 0.601562f, 0.663574f, 0.713379f, 0.756348f, 0.789551f, 0.816895f,
+ 0.840332f, 0.858887f, 0.875488f, 0.887695f, 0.900391f, 0.909668f, 0.918945f, 0.926270f,
+ 0.932617f, 0.938477f, 0.943848f, 0.948242f, 0.952148f, 0.955566f, 0.959473f, 0.962402f,
+ 0.965332f, 0.967773f, 0.970215f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979492f,
+ 0.980957f, 0.981934f, 0.984375f, 0.985352f, 0.985840f, 0.987793f, 0.988281f, 0.989258f,
+ 0.990723f, 0.991211f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f,
+ 0.996094f, 0.997070f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f,
+ 0.004784f, 0.018082f, 0.035400f, 0.058868f, 0.089783f, 0.130981f, 0.183716f, 0.248047f,
+ 0.321289f, 0.400391f, 0.478760f, 0.552734f, 0.617188f, 0.673828f, 0.720703f, 0.759766f,
+ 0.792480f, 0.818359f, 0.840820f, 0.859863f, 0.875000f, 0.888184f, 0.899902f, 0.910645f,
+ 0.918945f, 0.926270f, 0.931641f, 0.938965f, 0.943848f, 0.948242f, 0.952148f, 0.957031f,
+ 0.959473f, 0.962891f, 0.965332f, 0.968262f, 0.970215f, 0.972656f, 0.975098f, 0.977051f,
+ 0.978516f, 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.985352f, 0.986328f, 0.987305f,
+ 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
+ 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.004044f, 0.012550f, 0.024628f, 0.040466f, 0.060760f, 0.087708f, 0.122742f, 0.167236f,
+ 0.222534f, 0.287109f, 0.358643f, 0.432617f, 0.506348f, 0.573242f, 0.632812f, 0.685059f,
+ 0.728516f, 0.766602f, 0.797363f, 0.822266f, 0.843750f, 0.861328f, 0.877441f, 0.890625f,
+ 0.901367f, 0.910645f, 0.919434f, 0.926758f, 0.933105f, 0.940430f, 0.944824f, 0.948730f,
+ 0.953125f, 0.957520f, 0.960449f, 0.963867f, 0.966309f, 0.969238f, 0.970703f, 0.973633f,
+ 0.976074f, 0.977539f, 0.979004f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986816f,
+ 0.986816f, 0.988281f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.994141f,
+ 0.994629f, 0.995117f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
+ 0.002975f, 0.009315f, 0.017868f, 0.029129f, 0.043243f, 0.062012f, 0.084961f, 0.115540f,
+ 0.154419f, 0.201660f, 0.257812f, 0.322754f, 0.391846f, 0.463135f, 0.530762f, 0.594727f,
+ 0.650391f, 0.698730f, 0.739258f, 0.773926f, 0.803711f, 0.826660f, 0.847656f, 0.865723f,
+ 0.879883f, 0.892090f, 0.903809f, 0.913086f, 0.921387f, 0.928223f, 0.935059f, 0.940918f,
+ 0.945801f, 0.950684f, 0.954102f, 0.958008f, 0.961426f, 0.964844f, 0.967285f, 0.970215f,
+ 0.972168f, 0.974609f, 0.976074f, 0.978027f, 0.979980f, 0.981934f, 0.983398f, 0.984375f,
+ 0.985352f, 0.987305f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f,
+ 0.993652f, 0.994629f, 0.997559f, 0.998047f, 0.998047f, 0.997559f, 0.997559f, 0.997559f,
+ 0.002329f, 0.007256f, 0.013611f, 0.021790f, 0.032043f, 0.044617f, 0.061554f, 0.082336f,
+ 0.108765f, 0.142578f, 0.184448f, 0.234375f, 0.292725f, 0.357422f, 0.424805f, 0.493164f,
+ 0.556641f, 0.615723f, 0.666504f, 0.711914f, 0.750977f, 0.782715f, 0.809570f, 0.832520f,
+ 0.853516f, 0.868652f, 0.882812f, 0.895508f, 0.905762f, 0.916016f, 0.923340f, 0.931152f,
+ 0.936523f, 0.942383f, 0.947266f, 0.951172f, 0.956055f, 0.958984f, 0.962402f, 0.965820f,
+ 0.968750f, 0.971191f, 0.973633f, 0.975586f, 0.977539f, 0.979980f, 0.980957f, 0.982422f,
+ 0.983887f, 0.985352f, 0.985840f, 0.988281f, 0.989746f, 0.990234f, 0.991211f, 0.991699f,
+ 0.993164f, 0.993652f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
+ 0.001871f, 0.006084f, 0.010963f, 0.016953f, 0.024277f, 0.033722f, 0.046234f, 0.060669f,
+ 0.079224f, 0.103638f, 0.132812f, 0.169678f, 0.214478f, 0.267090f, 0.326172f, 0.390137f,
+ 0.456543f, 0.519531f, 0.581543f, 0.636230f, 0.685547f, 0.726562f, 0.762207f, 0.792969f,
+ 0.818359f, 0.839844f, 0.858398f, 0.874023f, 0.887695f, 0.898926f, 0.909668f, 0.918945f,
+ 0.926270f, 0.933105f, 0.938965f, 0.944336f, 0.949219f, 0.953613f, 0.958008f, 0.961426f,
+ 0.964844f, 0.967773f, 0.969727f, 0.972168f, 0.974609f, 0.976074f, 0.979004f, 0.979980f,
+ 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.989746f, 0.989746f, 0.990723f,
+ 0.991211f, 0.992676f, 0.996582f, 0.997070f, 0.997559f, 0.997070f, 0.997070f, 0.997070f,
+ 0.001322f, 0.004795f, 0.008530f, 0.013504f, 0.018921f, 0.026154f, 0.035065f, 0.045807f,
+ 0.059662f, 0.076416f, 0.098267f, 0.124512f, 0.157715f, 0.197388f, 0.244873f, 0.299805f,
+ 0.359619f, 0.423096f, 0.487549f, 0.549316f, 0.605957f, 0.657715f, 0.703125f, 0.741211f,
+ 0.774902f, 0.802734f, 0.827148f, 0.847656f, 0.865234f, 0.879883f, 0.893066f, 0.903320f,
+ 0.913086f, 0.920898f, 0.929199f, 0.935547f, 0.941406f, 0.947266f, 0.951172f, 0.956055f,
+ 0.959473f, 0.962891f, 0.965332f, 0.969238f, 0.971191f, 0.974121f, 0.976562f, 0.977539f,
+ 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.986328f, 0.988281f, 0.988281f, 0.989746f,
+ 0.990723f, 0.991699f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.996582f,
+ 0.001077f, 0.003971f, 0.006985f, 0.010750f, 0.015579f, 0.020920f, 0.027420f, 0.035522f,
+ 0.045776f, 0.058228f, 0.074097f, 0.093140f, 0.117310f, 0.146851f, 0.182495f, 0.225952f,
+ 0.276611f, 0.332764f, 0.394287f, 0.456543f, 0.518555f, 0.577637f, 0.630371f, 0.679199f,
+ 0.720703f, 0.756836f, 0.787598f, 0.813477f, 0.836426f, 0.855469f, 0.872070f, 0.885742f,
+ 0.897949f, 0.908203f, 0.917480f, 0.925293f, 0.933105f, 0.939453f, 0.944336f, 0.949219f,
+ 0.954590f, 0.957520f, 0.961426f, 0.964844f, 0.968262f, 0.970703f, 0.974121f, 0.975586f,
+ 0.978027f, 0.979492f, 0.981445f, 0.983398f, 0.984863f, 0.986328f, 0.987793f, 0.988770f,
+ 0.989746f, 0.991211f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
+ 0.000954f, 0.003330f, 0.005733f, 0.008904f, 0.012505f, 0.016617f, 0.022446f, 0.028351f,
+ 0.036041f, 0.045807f, 0.056854f, 0.071350f, 0.088867f, 0.110596f, 0.137451f, 0.170654f,
+ 0.209717f, 0.256592f, 0.309326f, 0.366943f, 0.427979f, 0.489502f, 0.549316f, 0.604980f,
+ 0.655762f, 0.700195f, 0.738770f, 0.772461f, 0.801270f, 0.825195f, 0.845703f, 0.864258f,
+ 0.879395f, 0.893066f, 0.903809f, 0.914062f, 0.922363f, 0.929688f, 0.936523f, 0.942871f,
+ 0.947266f, 0.952148f, 0.956055f, 0.960449f, 0.963867f, 0.966797f, 0.969727f, 0.972656f,
+ 0.975586f, 0.976562f, 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f,
+ 0.988770f, 0.989746f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
+ 0.000949f, 0.002804f, 0.004730f, 0.007236f, 0.010384f, 0.014160f, 0.018478f, 0.023102f,
+ 0.028992f, 0.036346f, 0.044647f, 0.055542f, 0.068481f, 0.085144f, 0.105286f, 0.130005f,
+ 0.159668f, 0.195557f, 0.238647f, 0.287842f, 0.343018f, 0.402588f, 0.463135f, 0.522949f,
+ 0.580566f, 0.632812f, 0.680664f, 0.721680f, 0.757812f, 0.788574f, 0.814453f, 0.836914f,
+ 0.856934f, 0.872070f, 0.887207f, 0.899414f, 0.909668f, 0.918945f, 0.926758f, 0.933594f,
+ 0.940430f, 0.946289f, 0.950684f, 0.954590f, 0.959473f, 0.963379f, 0.966797f, 0.969238f,
+ 0.972168f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.982910f, 0.984375f, 0.986328f,
+ 0.987793f, 0.988770f, 0.995117f, 0.996094f, 0.995605f, 0.996094f, 0.996094f, 0.995605f,
+ 0.000828f, 0.002361f, 0.004116f, 0.006119f, 0.008797f, 0.011391f, 0.014854f, 0.018890f,
+ 0.023666f, 0.029083f, 0.036011f, 0.044434f, 0.053986f, 0.066589f, 0.081543f, 0.100159f,
+ 0.122314f, 0.149536f, 0.183350f, 0.222900f, 0.269043f, 0.321533f, 0.378418f, 0.438477f,
+ 0.499023f, 0.556641f, 0.611328f, 0.661133f, 0.703613f, 0.742188f, 0.775391f, 0.804199f,
+ 0.828613f, 0.849121f, 0.866211f, 0.881348f, 0.894043f, 0.905762f, 0.916016f, 0.924316f,
+ 0.931641f, 0.938477f, 0.944336f, 0.949707f, 0.954590f, 0.958496f, 0.962402f, 0.966309f,
+ 0.969238f, 0.972168f, 0.974121f, 0.977051f, 0.979004f, 0.980957f, 0.982910f, 0.984863f,
+ 0.985840f, 0.987793f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.000606f, 0.001948f, 0.003483f, 0.005394f, 0.007290f, 0.009735f, 0.012352f, 0.015747f,
+ 0.019485f, 0.023788f, 0.029358f, 0.035706f, 0.043732f, 0.053162f, 0.064331f, 0.077942f,
+ 0.094971f, 0.116089f, 0.140991f, 0.172485f, 0.209473f, 0.252686f, 0.302002f, 0.356934f,
+ 0.415283f, 0.475830f, 0.534180f, 0.589844f, 0.641602f, 0.687500f, 0.728516f, 0.763184f,
+ 0.792969f, 0.819336f, 0.841309f, 0.860840f, 0.876953f, 0.890625f, 0.902344f, 0.913086f,
+ 0.921875f, 0.930176f, 0.937012f, 0.943359f, 0.948242f, 0.954102f, 0.958008f, 0.961914f,
+ 0.965820f, 0.969238f, 0.971680f, 0.974609f, 0.977051f, 0.979004f, 0.981445f, 0.983398f,
+ 0.984863f, 0.986816f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
+ 0.000672f, 0.001569f, 0.002895f, 0.004528f, 0.006180f, 0.008324f, 0.010864f, 0.013161f,
+ 0.016357f, 0.020096f, 0.024216f, 0.029327f, 0.035583f, 0.042664f, 0.051453f, 0.062073f,
+ 0.075012f, 0.091125f, 0.110291f, 0.134155f, 0.162476f, 0.197266f, 0.238037f, 0.285156f,
+ 0.337646f, 0.395020f, 0.454590f, 0.513672f, 0.570312f, 0.624023f, 0.672363f, 0.714844f,
+ 0.750977f, 0.783691f, 0.811035f, 0.834473f, 0.854004f, 0.872070f, 0.886230f, 0.899414f,
+ 0.911133f, 0.918945f, 0.928223f, 0.936035f, 0.942871f, 0.948242f, 0.953613f, 0.957031f,
+ 0.961426f, 0.965820f, 0.968750f, 0.972168f, 0.974121f, 0.976562f, 0.979492f, 0.981445f,
+ 0.983398f, 0.985352f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
+ 0.000413f, 0.001430f, 0.002577f, 0.004269f, 0.005703f, 0.007137f, 0.008888f, 0.011124f,
+ 0.013885f, 0.016891f, 0.020355f, 0.024384f, 0.029221f, 0.035217f, 0.041748f, 0.049988f,
+ 0.060059f, 0.072083f, 0.086914f, 0.105286f, 0.126953f, 0.154175f, 0.186523f, 0.224731f,
+ 0.269287f, 0.320557f, 0.375732f, 0.434570f, 0.493896f, 0.552246f, 0.606934f, 0.655762f,
+ 0.701660f, 0.740723f, 0.774902f, 0.803711f, 0.827637f, 0.848633f, 0.867188f, 0.882812f,
+ 0.895996f, 0.908203f, 0.917969f, 0.926758f, 0.934570f, 0.941895f, 0.947266f, 0.952637f,
+ 0.957520f, 0.960938f, 0.965820f, 0.968750f, 0.971680f, 0.974609f, 0.977051f, 0.979980f,
+ 0.981934f, 0.983887f, 0.993652f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
+ 0.000240f, 0.001406f, 0.002373f, 0.003283f, 0.004620f, 0.006264f, 0.007744f, 0.009552f,
+ 0.011711f, 0.014069f, 0.017273f, 0.020584f, 0.024429f, 0.028946f, 0.034393f, 0.041046f,
+ 0.048798f, 0.058289f, 0.070312f, 0.083618f, 0.100403f, 0.121338f, 0.146118f, 0.177002f,
+ 0.213257f, 0.255371f, 0.304443f, 0.358887f, 0.416504f, 0.476562f, 0.534668f, 0.590332f,
+ 0.642090f, 0.688965f, 0.729492f, 0.766113f, 0.796387f, 0.822754f, 0.844727f, 0.862305f,
+ 0.880371f, 0.894043f, 0.905762f, 0.916992f, 0.926270f, 0.934082f, 0.940918f, 0.946777f,
+ 0.953125f, 0.956543f, 0.961426f, 0.964844f, 0.969238f, 0.972656f, 0.974609f, 0.977539f,
+ 0.979980f, 0.982422f, 0.992676f, 0.994141f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
+ 0.000242f, 0.001257f, 0.001991f, 0.003138f, 0.004299f, 0.005302f, 0.006584f, 0.008308f,
+ 0.010048f, 0.012283f, 0.014526f, 0.017578f, 0.020340f, 0.023972f, 0.028671f, 0.033661f,
+ 0.040161f, 0.047821f, 0.056213f, 0.067261f, 0.080444f, 0.096191f, 0.115784f, 0.139771f,
+ 0.168457f, 0.203125f, 0.243286f, 0.290527f, 0.343506f, 0.400879f, 0.459473f, 0.519043f,
+ 0.576172f, 0.629395f, 0.678223f, 0.721191f, 0.757324f, 0.789062f, 0.816895f, 0.839844f,
+ 0.859863f, 0.877930f, 0.892578f, 0.904297f, 0.915527f, 0.925293f, 0.933105f, 0.940430f,
+ 0.946777f, 0.952148f, 0.957031f, 0.961914f, 0.965820f, 0.969238f, 0.973145f, 0.975586f,
+ 0.978516f, 0.980469f, 0.992188f, 0.993652f, 0.993164f, 0.993164f, 0.993652f, 0.993164f,
+ 0.000434f, 0.001172f, 0.001865f, 0.002825f, 0.003633f, 0.004757f, 0.005722f, 0.007175f,
+ 0.009010f, 0.010651f, 0.012520f, 0.014412f, 0.017532f, 0.020599f, 0.024139f, 0.028488f,
+ 0.033356f, 0.039001f, 0.046295f, 0.054749f, 0.064758f, 0.077209f, 0.092834f, 0.111084f,
+ 0.134033f, 0.160767f, 0.193604f, 0.233032f, 0.278320f, 0.329590f, 0.386230f, 0.445068f,
+ 0.504395f, 0.563477f, 0.617188f, 0.666504f, 0.711426f, 0.750000f, 0.783691f, 0.812500f,
+ 0.836426f, 0.857422f, 0.875488f, 0.891113f, 0.903809f, 0.915039f, 0.924805f, 0.933105f,
+ 0.940430f, 0.947266f, 0.953125f, 0.958496f, 0.962402f, 0.966309f, 0.969727f, 0.973145f,
+ 0.976562f, 0.978516f, 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.992676f,
+ 0.000358f, 0.000835f, 0.001738f, 0.002270f, 0.002996f, 0.004078f, 0.005157f, 0.006416f,
+ 0.007904f, 0.009331f, 0.010826f, 0.012245f, 0.014938f, 0.017303f, 0.020233f, 0.023926f,
+ 0.027954f, 0.032715f, 0.038147f, 0.045166f, 0.053070f, 0.062561f, 0.074768f, 0.089661f,
+ 0.106689f, 0.128052f, 0.154175f, 0.185547f, 0.223022f, 0.266846f, 0.317383f, 0.373047f,
+ 0.431152f, 0.491943f, 0.550293f, 0.606445f, 0.658203f, 0.704102f, 0.744141f, 0.779297f,
+ 0.809082f, 0.833984f, 0.855957f, 0.875000f, 0.889648f, 0.903320f, 0.915039f, 0.924805f,
+ 0.933594f, 0.940918f, 0.947754f, 0.954102f, 0.958984f, 0.962402f, 0.966797f, 0.970703f,
+ 0.974121f, 0.977539f, 0.990723f, 0.992188f, 0.992676f, 0.992676f, 0.992188f, 0.992676f,
+ 0.000428f, 0.000789f, 0.001460f, 0.002172f, 0.002695f, 0.003561f, 0.004608f, 0.005848f,
+ 0.006886f, 0.007736f, 0.009560f, 0.011078f, 0.012817f, 0.015015f, 0.017563f, 0.020157f,
+ 0.023666f, 0.027145f, 0.031891f, 0.037384f, 0.044189f, 0.051788f, 0.061188f, 0.072327f,
+ 0.085999f, 0.102966f, 0.123413f, 0.148071f, 0.178101f, 0.214478f, 0.256836f, 0.306396f,
+ 0.360840f, 0.419678f, 0.479736f, 0.540527f, 0.597656f, 0.649902f, 0.697754f, 0.738770f,
+ 0.775391f, 0.805664f, 0.831543f, 0.854004f, 0.873535f, 0.889160f, 0.902832f, 0.915039f,
+ 0.925293f, 0.934082f, 0.941895f, 0.948730f, 0.954102f, 0.959961f, 0.963867f, 0.968262f,
+ 0.971680f, 0.975586f, 0.990723f, 0.991699f, 0.991699f, 0.991699f, 0.991699f, 0.991211f,
+ 0.000237f, 0.000782f, 0.001245f, 0.001923f, 0.002417f, 0.003225f, 0.004101f, 0.005062f,
+ 0.005920f, 0.007030f, 0.008102f, 0.009743f, 0.011009f, 0.013054f, 0.015190f, 0.017380f,
+ 0.020126f, 0.023346f, 0.027161f, 0.031464f, 0.036316f, 0.042664f, 0.050110f, 0.058807f,
+ 0.069946f, 0.083191f, 0.099121f, 0.118835f, 0.142822f, 0.171997f, 0.206665f, 0.248413f,
+ 0.296143f, 0.350586f, 0.408936f, 0.469727f, 0.530762f, 0.589844f, 0.643555f, 0.691895f,
+ 0.734375f, 0.772461f, 0.803223f, 0.830566f, 0.854492f, 0.873047f, 0.889648f, 0.903809f,
+ 0.916016f, 0.926270f, 0.935059f, 0.943359f, 0.949219f, 0.955566f, 0.960938f, 0.965332f,
+ 0.969727f, 0.973145f, 0.989746f, 0.990723f, 0.990723f, 0.990723f, 0.991211f, 0.990723f,
+ 0.000243f, 0.000793f, 0.001210f, 0.001616f, 0.002260f, 0.003069f, 0.003649f, 0.004444f,
+ 0.005322f, 0.006088f, 0.006954f, 0.008278f, 0.009766f, 0.011139f, 0.012970f, 0.014908f,
+ 0.016968f, 0.019897f, 0.023193f, 0.026962f, 0.030792f, 0.035522f, 0.041931f, 0.048920f,
+ 0.057404f, 0.067993f, 0.080383f, 0.095825f, 0.114929f, 0.137695f, 0.165771f, 0.199585f,
+ 0.241089f, 0.287842f, 0.341553f, 0.400391f, 0.462402f, 0.523438f, 0.583008f, 0.638184f,
+ 0.687988f, 0.732422f, 0.770020f, 0.802246f, 0.830566f, 0.854004f, 0.873047f, 0.891113f,
+ 0.904785f, 0.916992f, 0.926758f, 0.936523f, 0.943848f, 0.951172f, 0.956543f, 0.961914f,
+ 0.966797f, 0.971191f, 0.989258f, 0.990234f, 0.990234f, 0.990234f, 0.990234f, 0.989746f,
+ 0.000000f, 0.000484f, 0.000973f, 0.001453f, 0.001999f, 0.002689f, 0.003359f, 0.003864f,
+ 0.004726f, 0.005444f, 0.006516f, 0.007404f, 0.008461f, 0.009720f, 0.011261f, 0.012985f,
+ 0.014908f, 0.017120f, 0.019699f, 0.022614f, 0.026093f, 0.030228f, 0.034668f, 0.040619f,
+ 0.047699f, 0.055756f, 0.066284f, 0.078308f, 0.092834f, 0.111328f, 0.133423f, 0.160889f,
+ 0.194214f, 0.233765f, 0.281006f, 0.334473f, 0.392822f, 0.455078f, 0.517090f, 0.578125f,
+ 0.634766f, 0.686035f, 0.730957f, 0.768555f, 0.803223f, 0.831055f, 0.854492f, 0.875488f,
+ 0.892090f, 0.906250f, 0.918457f, 0.929688f, 0.937988f, 0.945801f, 0.952148f, 0.958496f,
+ 0.963867f, 0.968750f, 0.988281f, 0.989258f, 0.989746f, 0.989258f, 0.989746f, 0.989258f,
+ 0.000241f, 0.000699f, 0.000835f, 0.001354f, 0.002066f, 0.002405f, 0.003073f, 0.003466f,
+ 0.003847f, 0.004868f, 0.005798f, 0.006325f, 0.007446f, 0.008553f, 0.009789f, 0.011375f,
+ 0.013031f, 0.014702f, 0.016937f, 0.019455f, 0.022171f, 0.025467f, 0.029541f, 0.034271f,
+ 0.039734f, 0.046295f, 0.054291f, 0.063904f, 0.075745f, 0.089966f, 0.107727f, 0.129395f,
+ 0.156250f, 0.188965f, 0.228394f, 0.274658f, 0.327637f, 0.386963f, 0.449219f, 0.512695f,
+ 0.574707f, 0.632324f, 0.684570f, 0.730469f, 0.770508f, 0.804688f, 0.832520f, 0.857422f,
+ 0.876953f, 0.893066f, 0.908691f, 0.920410f, 0.931152f, 0.940430f, 0.947754f, 0.954590f,
+ 0.960938f, 0.965820f, 0.986816f, 0.988770f, 0.988770f, 0.988770f, 0.988770f, 0.988770f,
+ 0.000122f, 0.000480f, 0.000793f, 0.001184f, 0.001847f, 0.002220f, 0.002459f, 0.003109f,
+ 0.003740f, 0.004234f, 0.005127f, 0.005730f, 0.006557f, 0.007458f, 0.008469f, 0.009911f,
+ 0.011162f, 0.012848f, 0.014519f, 0.016693f, 0.019135f, 0.021820f, 0.025024f, 0.028931f,
+ 0.033508f, 0.038757f, 0.045135f, 0.052856f, 0.062042f, 0.073547f, 0.087646f, 0.104736f,
+ 0.126099f, 0.152588f, 0.184570f, 0.223511f, 0.269775f, 0.323242f, 0.382324f, 0.445801f,
+ 0.510254f, 0.573242f, 0.631348f, 0.685059f, 0.731934f, 0.772461f, 0.806641f, 0.834961f,
+ 0.859375f, 0.879883f, 0.897461f, 0.911133f, 0.923828f, 0.933594f, 0.942383f, 0.950195f,
+ 0.956055f, 0.962402f, 0.985840f, 0.987305f, 0.987793f, 0.987793f, 0.988281f, 0.987793f,
+ 0.000244f, 0.000471f, 0.000666f, 0.001267f, 0.001592f, 0.001838f, 0.002251f, 0.002855f,
+ 0.003225f, 0.003828f, 0.004372f, 0.005112f, 0.005695f, 0.006340f, 0.007534f, 0.008797f,
+ 0.009895f, 0.011215f, 0.012604f, 0.014503f, 0.016602f, 0.018738f, 0.021408f, 0.024567f,
+ 0.028305f, 0.032654f, 0.037872f, 0.043732f, 0.051239f, 0.060669f, 0.071716f, 0.085510f,
+ 0.102356f, 0.123230f, 0.149170f, 0.180664f, 0.219849f, 0.265869f, 0.319092f, 0.379150f,
+ 0.443604f, 0.508789f, 0.572754f, 0.633301f, 0.686523f, 0.734863f, 0.775391f, 0.809570f,
+ 0.838379f, 0.862305f, 0.883301f, 0.900391f, 0.914551f, 0.926270f, 0.937012f, 0.944824f,
+ 0.953125f, 0.959473f, 0.985352f, 0.986816f, 0.986816f, 0.986816f, 0.986816f, 0.986816f,
+ 0.000242f, 0.000346f, 0.000827f, 0.001065f, 0.001428f, 0.001572f, 0.001984f, 0.002367f,
+ 0.002851f, 0.003277f, 0.003786f, 0.004501f, 0.005253f, 0.005955f, 0.006573f, 0.007736f,
+ 0.008659f, 0.009880f, 0.011177f, 0.012459f, 0.014153f, 0.016403f, 0.018173f, 0.020859f,
+ 0.024017f, 0.027496f, 0.031708f, 0.036682f, 0.042877f, 0.050446f, 0.059174f, 0.070068f,
+ 0.083374f, 0.100159f, 0.120728f, 0.145874f, 0.177612f, 0.216187f, 0.262695f, 0.316650f,
+ 0.377686f, 0.443115f, 0.509766f, 0.575195f, 0.635742f, 0.691406f, 0.738281f, 0.779785f,
+ 0.813965f, 0.843750f, 0.866699f, 0.887207f, 0.904297f, 0.918945f, 0.930176f, 0.940918f,
+ 0.948730f, 0.956055f, 0.984375f, 0.985840f, 0.985840f, 0.985840f, 0.986328f, 0.985840f,
+ 0.000242f, 0.000540f, 0.000708f, 0.000830f, 0.001143f, 0.001451f, 0.001861f, 0.002249f,
+ 0.002661f, 0.003010f, 0.003435f, 0.003922f, 0.004707f, 0.005165f, 0.005787f, 0.006840f,
+ 0.007374f, 0.008545f, 0.009651f, 0.011147f, 0.012581f, 0.014084f, 0.015991f, 0.017899f,
+ 0.020325f, 0.023392f, 0.026978f, 0.031113f, 0.035919f, 0.042023f, 0.049103f, 0.057831f,
+ 0.068420f, 0.081543f, 0.098145f, 0.118530f, 0.143921f, 0.175293f, 0.213989f, 0.260742f,
+ 0.316162f, 0.377441f, 0.444336f, 0.512207f, 0.579590f, 0.641113f, 0.696289f, 0.744629f,
+ 0.786621f, 0.820801f, 0.849609f, 0.872559f, 0.892578f, 0.908691f, 0.922363f, 0.934570f,
+ 0.944336f, 0.951660f, 0.982910f, 0.984375f, 0.984863f, 0.984863f, 0.985352f, 0.984863f,
+ 0.000106f, 0.000477f, 0.000649f, 0.000901f, 0.001110f, 0.001206f, 0.001630f, 0.002121f,
+ 0.002192f, 0.002743f, 0.003128f, 0.003538f, 0.003941f, 0.004688f, 0.005276f, 0.005905f,
+ 0.006546f, 0.007568f, 0.008461f, 0.009483f, 0.010674f, 0.011864f, 0.013649f, 0.015549f,
+ 0.017731f, 0.020111f, 0.023010f, 0.026199f, 0.030304f, 0.035278f, 0.040833f, 0.047821f,
+ 0.056580f, 0.066895f, 0.079895f, 0.096191f, 0.116760f, 0.141968f, 0.173584f, 0.212646f,
+ 0.260498f, 0.316162f, 0.379883f, 0.447754f, 0.517578f, 0.584961f, 0.647949f, 0.704102f,
+ 0.752930f, 0.792969f, 0.827148f, 0.855957f, 0.877930f, 0.898438f, 0.914062f, 0.928223f,
+ 0.938965f, 0.948242f, 0.981445f, 0.983398f, 0.983887f, 0.983887f, 0.983887f, 0.983398f,
+ 0.000208f, 0.000456f, 0.000582f, 0.000788f, 0.001016f, 0.001428f, 0.001507f, 0.001769f,
+ 0.002203f, 0.002525f, 0.002718f, 0.003187f, 0.003761f, 0.004238f, 0.004635f, 0.005348f,
+ 0.005901f, 0.006805f, 0.007500f, 0.008545f, 0.009270f, 0.010437f, 0.011742f, 0.013344f,
+ 0.015198f, 0.017242f, 0.019516f, 0.022430f, 0.025665f, 0.029922f, 0.034180f, 0.040161f,
+ 0.046936f, 0.055420f, 0.065735f, 0.078552f, 0.094666f, 0.114563f, 0.140503f, 0.172485f,
+ 0.212646f, 0.260986f, 0.318359f, 0.383545f, 0.453125f, 0.524414f, 0.593750f, 0.656738f,
+ 0.712891f, 0.761230f, 0.801270f, 0.835938f, 0.862305f, 0.885742f, 0.904785f, 0.919922f,
+ 0.933594f, 0.943359f, 0.980469f, 0.982422f, 0.982422f, 0.981934f, 0.982422f, 0.982422f,
+ 0.000170f, 0.000350f, 0.000583f, 0.000682f, 0.000845f, 0.001036f, 0.001265f, 0.001821f,
+ 0.001953f, 0.002163f, 0.002525f, 0.002771f, 0.003418f, 0.003729f, 0.004040f, 0.004871f,
+ 0.005188f, 0.005726f, 0.006512f, 0.007130f, 0.008087f, 0.009018f, 0.010216f, 0.011490f,
+ 0.013084f, 0.014565f, 0.016891f, 0.019073f, 0.021851f, 0.025253f, 0.029022f, 0.033539f,
+ 0.039124f, 0.045563f, 0.054230f, 0.064270f, 0.077271f, 0.093323f, 0.113403f, 0.139648f,
+ 0.172485f, 0.213379f, 0.262939f, 0.322266f, 0.389404f, 0.461426f, 0.534180f, 0.604492f,
+ 0.668457f, 0.724609f, 0.772461f, 0.812500f, 0.845703f, 0.872070f, 0.894043f, 0.911621f,
+ 0.926758f, 0.938477f, 0.979004f, 0.980469f, 0.980957f, 0.980957f, 0.980957f, 0.980957f,
+ 0.000000f, 0.000332f, 0.000583f, 0.000583f, 0.000848f, 0.000959f, 0.001125f, 0.001425f,
+ 0.001810f, 0.001899f, 0.002300f, 0.002529f, 0.002996f, 0.003162f, 0.003607f, 0.004150f,
+ 0.004761f, 0.005146f, 0.005791f, 0.006329f, 0.007099f, 0.008110f, 0.008949f, 0.009941f,
+ 0.011253f, 0.012756f, 0.014565f, 0.016434f, 0.018707f, 0.021271f, 0.024475f, 0.028290f,
+ 0.032745f, 0.037964f, 0.044769f, 0.052795f, 0.063416f, 0.076050f, 0.092102f, 0.113464f,
+ 0.139526f, 0.172974f, 0.214600f, 0.266602f, 0.327637f, 0.397461f, 0.471191f, 0.546387f,
+ 0.617188f, 0.682129f, 0.737793f, 0.784668f, 0.823730f, 0.854980f, 0.881348f, 0.902344f,
+ 0.918945f, 0.933105f, 0.977539f, 0.979492f, 0.979492f, 0.979492f, 0.979492f, 0.979492f,
+ 0.000000f, 0.000243f, 0.000553f, 0.000575f, 0.000591f, 0.000798f, 0.000991f, 0.001234f,
+ 0.001419f, 0.001812f, 0.001935f, 0.002186f, 0.002518f, 0.002975f, 0.003202f, 0.003614f,
+ 0.004047f, 0.004425f, 0.005013f, 0.005718f, 0.006172f, 0.007046f, 0.007740f, 0.008835f,
+ 0.009819f, 0.011192f, 0.012444f, 0.014114f, 0.015884f, 0.018204f, 0.020844f, 0.023392f,
+ 0.027420f, 0.031921f, 0.037170f, 0.043610f, 0.052032f, 0.062408f, 0.075256f, 0.091675f,
+ 0.112610f, 0.140015f, 0.173950f, 0.217651f, 0.271973f, 0.335693f, 0.407715f, 0.484619f,
+ 0.561035f, 0.633789f, 0.698242f, 0.752930f, 0.798828f, 0.836426f, 0.867676f, 0.891602f,
+ 0.911621f, 0.926270f, 0.975098f, 0.977539f, 0.978516f, 0.977539f, 0.977539f, 0.978027f,
+ 0.000121f, 0.000121f, 0.000241f, 0.000385f, 0.000684f, 0.000693f, 0.000932f, 0.001156f,
+ 0.001410f, 0.001648f, 0.001893f, 0.002184f, 0.002367f, 0.002579f, 0.002872f, 0.003319f,
+ 0.003653f, 0.003922f, 0.004425f, 0.004925f, 0.005436f, 0.006180f, 0.006836f, 0.007645f,
+ 0.008278f, 0.009476f, 0.010788f, 0.012169f, 0.013695f, 0.015305f, 0.017319f, 0.020111f,
+ 0.022858f, 0.026718f, 0.030975f, 0.036255f, 0.042938f, 0.051270f, 0.061493f, 0.074768f,
+ 0.091187f, 0.112976f, 0.140747f, 0.176392f, 0.222168f, 0.278809f, 0.345703f, 0.421387f,
+ 0.500488f, 0.578613f, 0.651855f, 0.715820f, 0.769531f, 0.813965f, 0.850586f, 0.878418f,
+ 0.901855f, 0.920410f, 0.973633f, 0.975586f, 0.976074f, 0.976562f, 0.976562f, 0.975098f,
+ 0.000240f, 0.000120f, 0.000281f, 0.000333f, 0.000498f, 0.000680f, 0.000684f, 0.001083f,
+ 0.001312f, 0.001618f, 0.001606f, 0.001834f, 0.002087f, 0.002316f, 0.002735f, 0.002792f,
+ 0.003084f, 0.003386f, 0.003944f, 0.004353f, 0.004761f, 0.005390f, 0.005997f, 0.006615f,
+ 0.007389f, 0.008324f, 0.008987f, 0.010284f, 0.011703f, 0.013382f, 0.014717f, 0.016953f,
+ 0.019424f, 0.022278f, 0.026047f, 0.030029f, 0.035492f, 0.042145f, 0.050446f, 0.060608f,
+ 0.073975f, 0.091187f, 0.113831f, 0.142700f, 0.180176f, 0.228271f, 0.288086f, 0.359131f,
+ 0.437988f, 0.519531f, 0.600098f, 0.673340f, 0.735352f, 0.787598f, 0.830566f, 0.865234f,
+ 0.891602f, 0.913086f, 0.971680f, 0.974121f, 0.974121f, 0.974121f, 0.974121f, 0.974609f,
+ 0.000000f, 0.000239f, 0.000236f, 0.000425f, 0.000487f, 0.000608f, 0.000850f, 0.001012f,
+ 0.001140f, 0.001260f, 0.001410f, 0.001640f, 0.001953f, 0.002003f, 0.002342f, 0.002434f,
+ 0.002686f, 0.002934f, 0.003305f, 0.003771f, 0.004169f, 0.004692f, 0.005028f, 0.005817f,
+ 0.006371f, 0.007179f, 0.007919f, 0.008965f, 0.009857f, 0.011261f, 0.012703f, 0.014229f,
+ 0.016312f, 0.018494f, 0.021744f, 0.025024f, 0.029633f, 0.034790f, 0.041199f, 0.049561f,
+ 0.060242f, 0.073608f, 0.091675f, 0.114502f, 0.144897f, 0.185547f, 0.236328f, 0.300049f,
+ 0.375732f, 0.458496f, 0.542969f, 0.624023f, 0.696289f, 0.758301f, 0.808105f, 0.847656f,
+ 0.879395f, 0.903809f, 0.968750f, 0.971191f, 0.972168f, 0.971680f, 0.972168f, 0.971680f,
+ 0.000000f, 0.000217f, 0.000235f, 0.000235f, 0.000321f, 0.000560f, 0.000588f, 0.000897f,
+ 0.001034f, 0.001040f, 0.001246f, 0.001369f, 0.001611f, 0.001692f, 0.001942f, 0.002153f,
+ 0.002337f, 0.002638f, 0.002878f, 0.003330f, 0.003672f, 0.003986f, 0.004498f, 0.004826f,
+ 0.005535f, 0.006176f, 0.006561f, 0.007538f, 0.008362f, 0.009544f, 0.010612f, 0.011879f,
+ 0.013794f, 0.015839f, 0.018326f, 0.020889f, 0.024567f, 0.028625f, 0.033783f, 0.040527f,
+ 0.049133f, 0.059998f, 0.073608f, 0.092041f, 0.116394f, 0.148682f, 0.191528f, 0.246582f,
+ 0.315186f, 0.395508f, 0.482910f, 0.570312f, 0.651367f, 0.722168f, 0.781738f, 0.828613f,
+ 0.866211f, 0.895508f, 0.966797f, 0.968750f, 0.969238f, 0.969727f, 0.969238f, 0.969238f,
+ 0.000000f, 0.000108f, 0.000215f, 0.000346f, 0.000352f, 0.000501f, 0.000783f, 0.000828f,
+ 0.000954f, 0.000980f, 0.001130f, 0.001353f, 0.001429f, 0.001522f, 0.001690f, 0.001760f,
+ 0.002172f, 0.002363f, 0.002522f, 0.002777f, 0.003202f, 0.003550f, 0.004040f, 0.004364f,
+ 0.004734f, 0.005192f, 0.005909f, 0.006271f, 0.007015f, 0.007957f, 0.008774f, 0.010185f,
+ 0.011681f, 0.013306f, 0.015327f, 0.017517f, 0.020264f, 0.023636f, 0.027740f, 0.033234f,
+ 0.039856f, 0.048340f, 0.059387f, 0.074097f, 0.093567f, 0.118896f, 0.153931f, 0.200073f,
+ 0.260254f, 0.334473f, 0.420410f, 0.511719f, 0.601562f, 0.682129f, 0.750488f, 0.807617f,
+ 0.851074f, 0.884277f, 0.963867f, 0.966309f, 0.966797f, 0.966797f, 0.966797f, 0.966797f,
+ 0.000000f, 0.000059f, 0.000292f, 0.000331f, 0.000344f, 0.000613f, 0.000532f, 0.000703f,
+ 0.000853f, 0.000915f, 0.000936f, 0.001102f, 0.001284f, 0.001430f, 0.001417f, 0.001475f,
+ 0.001791f, 0.001989f, 0.002161f, 0.002388f, 0.002775f, 0.003017f, 0.003357f, 0.003763f,
+ 0.004124f, 0.004383f, 0.004917f, 0.005436f, 0.005840f, 0.006733f, 0.007511f, 0.008667f,
+ 0.009567f, 0.011032f, 0.012474f, 0.014610f, 0.016739f, 0.019379f, 0.022873f, 0.027252f,
+ 0.032410f, 0.039062f, 0.048065f, 0.059296f, 0.074646f, 0.094971f, 0.123108f, 0.161011f,
+ 0.211426f, 0.277344f, 0.358154f, 0.450195f, 0.545410f, 0.636230f, 0.715332f, 0.781250f,
+ 0.832520f, 0.872070f, 0.960449f, 0.962402f, 0.963867f, 0.963379f, 0.962891f, 0.963379f,
+ 0.000000f, 0.000000f, 0.000098f, 0.000301f, 0.000315f, 0.000566f, 0.000587f, 0.000627f,
+ 0.000643f, 0.000795f, 0.000974f, 0.001023f, 0.000987f, 0.001031f, 0.001245f, 0.001470f,
+ 0.001637f, 0.001820f, 0.001884f, 0.002146f, 0.002357f, 0.002630f, 0.002913f, 0.003164f,
+ 0.003380f, 0.003824f, 0.004189f, 0.004353f, 0.004940f, 0.005688f, 0.006409f, 0.007347f,
+ 0.008018f, 0.009163f, 0.010559f, 0.012039f, 0.013695f, 0.016144f, 0.018723f, 0.022354f,
+ 0.026337f, 0.031433f, 0.038818f, 0.047546f, 0.059662f, 0.075623f, 0.097473f, 0.127808f,
+ 0.169556f, 0.225830f, 0.299072f, 0.387451f, 0.486084f, 0.583984f, 0.674805f, 0.751465f,
+ 0.812012f, 0.859375f, 0.957031f, 0.958984f, 0.959473f, 0.959961f, 0.959961f, 0.959961f,
+ 0.000000f, 0.000000f, 0.000004f, 0.000078f, 0.000408f, 0.000432f, 0.000563f, 0.000560f,
+ 0.000566f, 0.000623f, 0.000782f, 0.000829f, 0.000896f, 0.000956f, 0.001056f, 0.001249f,
+ 0.001414f, 0.001473f, 0.001646f, 0.001764f, 0.002066f, 0.002230f, 0.002436f, 0.002651f,
+ 0.003012f, 0.003252f, 0.003414f, 0.004055f, 0.004143f, 0.004784f, 0.005356f, 0.006077f,
+ 0.006870f, 0.007538f, 0.008728f, 0.009834f, 0.011322f, 0.013130f, 0.015427f, 0.017914f,
+ 0.021271f, 0.025436f, 0.030960f, 0.038086f, 0.047485f, 0.060303f, 0.077087f, 0.101196f,
+ 0.134521f, 0.180786f, 0.244507f, 0.326172f, 0.423584f, 0.527832f, 0.628418f, 0.716797f,
+ 0.788086f, 0.843262f, 0.953125f, 0.955566f, 0.955566f, 0.956543f, 0.956055f, 0.956543f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000236f, 0.000320f, 0.000484f, 0.000521f, 0.000549f,
+ 0.000556f, 0.000584f, 0.000574f, 0.000690f, 0.000758f, 0.000841f, 0.001003f, 0.001013f,
+ 0.001169f, 0.001292f, 0.001437f, 0.001658f, 0.001830f, 0.002001f, 0.002081f, 0.002146f,
+ 0.002434f, 0.002712f, 0.002964f, 0.003220f, 0.003513f, 0.003963f, 0.004410f, 0.004875f,
+ 0.005608f, 0.006245f, 0.007179f, 0.008118f, 0.009201f, 0.010582f, 0.012360f, 0.014343f,
+ 0.016968f, 0.020401f, 0.024628f, 0.030365f, 0.037567f, 0.047455f, 0.060913f, 0.079529f,
+ 0.105774f, 0.143555f, 0.196167f, 0.268799f, 0.361084f, 0.467041f, 0.576172f, 0.676758f,
+ 0.760254f, 0.825195f, 0.948242f, 0.951660f, 0.951660f, 0.951660f, 0.951660f, 0.951660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000257f, 0.000334f, 0.000390f, 0.000496f,
+ 0.000520f, 0.000539f, 0.000590f, 0.000602f, 0.000646f, 0.000725f, 0.000909f, 0.000949f,
+ 0.001023f, 0.001121f, 0.001181f, 0.001308f, 0.001474f, 0.001457f, 0.001714f, 0.002007f,
+ 0.001929f, 0.002039f, 0.002468f, 0.002672f, 0.003025f, 0.003317f, 0.003635f, 0.004047f,
+ 0.004433f, 0.004864f, 0.005756f, 0.006493f, 0.007515f, 0.008331f, 0.009697f, 0.011383f,
+ 0.014000f, 0.016235f, 0.019653f, 0.024185f, 0.029465f, 0.037109f, 0.047699f, 0.062164f,
+ 0.082642f, 0.112488f, 0.155151f, 0.216919f, 0.300049f, 0.404541f, 0.520020f, 0.631836f,
+ 0.728516f, 0.805664f, 0.943848f, 0.946289f, 0.946777f, 0.946777f, 0.947266f, 0.947266f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000088f, 0.000219f, 0.000229f, 0.000355f, 0.000414f,
+ 0.000482f, 0.000545f, 0.000559f, 0.000568f, 0.000481f, 0.000668f, 0.000636f, 0.000728f,
+ 0.000924f, 0.000980f, 0.001017f, 0.001109f, 0.001258f, 0.001353f, 0.001451f, 0.001564f,
+ 0.001621f, 0.001740f, 0.002066f, 0.002289f, 0.002459f, 0.002621f, 0.002975f, 0.003349f,
+ 0.003588f, 0.003998f, 0.004723f, 0.005116f, 0.006035f, 0.006859f, 0.007957f, 0.009064f,
+ 0.010658f, 0.012711f, 0.015511f, 0.018555f, 0.023026f, 0.028854f, 0.037140f, 0.048035f,
+ 0.064026f, 0.086914f, 0.121033f, 0.171387f, 0.244141f, 0.341797f, 0.458740f, 0.580078f,
+ 0.691895f, 0.780762f, 0.937988f, 0.940430f, 0.941406f, 0.940918f, 0.941895f, 0.941406f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000211f, 0.000221f, 0.000225f, 0.000192f,
+ 0.000352f, 0.000368f, 0.000397f, 0.000529f, 0.000510f, 0.000504f, 0.000540f, 0.000671f,
+ 0.000694f, 0.000763f, 0.000902f, 0.000998f, 0.001063f, 0.001074f, 0.001128f, 0.001407f,
+ 0.001370f, 0.001449f, 0.001682f, 0.001635f, 0.001976f, 0.002108f, 0.002335f, 0.002558f,
+ 0.002905f, 0.003176f, 0.003637f, 0.003948f, 0.004650f, 0.005341f, 0.006237f, 0.007034f,
+ 0.008415f, 0.009811f, 0.012032f, 0.014565f, 0.017731f, 0.022324f, 0.028427f, 0.036713f,
+ 0.048859f, 0.066406f, 0.092957f, 0.133057f, 0.193848f, 0.281250f, 0.395508f, 0.524902f,
+ 0.648926f, 0.754395f, 0.931152f, 0.934570f, 0.934570f, 0.934570f, 0.935547f, 0.935059f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000181f, 0.000196f, 0.000236f, 0.000250f,
+ 0.000226f, 0.000281f, 0.000335f, 0.000457f, 0.000406f, 0.000511f, 0.000522f, 0.000593f,
+ 0.000539f, 0.000663f, 0.000661f, 0.000779f, 0.000978f, 0.000855f, 0.000937f, 0.001128f,
+ 0.001163f, 0.001253f, 0.001241f, 0.001531f, 0.001595f, 0.001796f, 0.001888f, 0.002226f,
+ 0.002350f, 0.002609f, 0.002787f, 0.003260f, 0.003656f, 0.004303f, 0.004910f, 0.005577f,
+ 0.006683f, 0.007603f, 0.009102f, 0.011017f, 0.013603f, 0.016968f, 0.021652f, 0.027939f,
+ 0.037109f, 0.050262f, 0.070374f, 0.101624f, 0.150391f, 0.225220f, 0.331543f, 0.463867f,
+ 0.601074f, 0.723145f, 0.923828f, 0.927246f, 0.927246f, 0.928223f, 0.927734f, 0.928223f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000174f, 0.000156f, 0.000204f,
+ 0.000180f, 0.000221f, 0.000246f, 0.000346f, 0.000313f, 0.000426f, 0.000468f, 0.000482f,
+ 0.000559f, 0.000582f, 0.000536f, 0.000611f, 0.000770f, 0.000666f, 0.000919f, 0.000947f,
+ 0.001013f, 0.000948f, 0.001129f, 0.001169f, 0.001463f, 0.001579f, 0.001540f, 0.001555f,
+ 0.001888f, 0.002007f, 0.002390f, 0.002623f, 0.002708f, 0.003235f, 0.003584f, 0.004223f,
+ 0.005001f, 0.005791f, 0.006905f, 0.008118f, 0.010117f, 0.012512f, 0.015961f, 0.020798f,
+ 0.027374f, 0.037628f, 0.052673f, 0.076172f, 0.114197f, 0.175659f, 0.270752f, 0.399658f,
+ 0.546875f, 0.687012f, 0.915527f, 0.918457f, 0.919434f, 0.919434f, 0.919434f, 0.919434f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000139f, 0.000141f,
+ 0.000152f, 0.000186f, 0.000209f, 0.000222f, 0.000297f, 0.000330f, 0.000367f, 0.000403f,
+ 0.000433f, 0.000456f, 0.000457f, 0.000484f, 0.000521f, 0.000544f, 0.000594f, 0.000807f,
+ 0.000790f, 0.000841f, 0.000784f, 0.001025f, 0.001112f, 0.001014f, 0.001146f, 0.001287f,
+ 0.001485f, 0.001541f, 0.001740f, 0.002014f, 0.002264f, 0.002460f, 0.002825f, 0.003124f,
+ 0.003683f, 0.004177f, 0.005024f, 0.006004f, 0.007454f, 0.009041f, 0.011833f, 0.014839f,
+ 0.019791f, 0.027283f, 0.038361f, 0.055817f, 0.084656f, 0.133057f, 0.213013f, 0.334717f,
+ 0.488770f, 0.645996f, 0.905762f, 0.909668f, 0.909668f, 0.909180f, 0.910645f, 0.908691f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000115f,
+ 0.000104f, 0.000105f, 0.000203f, 0.000235f, 0.000185f, 0.000290f, 0.000201f, 0.000306f,
+ 0.000259f, 0.000370f, 0.000401f, 0.000428f, 0.000596f, 0.000617f, 0.000474f, 0.000593f,
+ 0.000641f, 0.000676f, 0.000682f, 0.000826f, 0.000897f, 0.000934f, 0.000972f, 0.000972f,
+ 0.001213f, 0.001281f, 0.001410f, 0.001451f, 0.001562f, 0.001786f, 0.002031f, 0.002417f,
+ 0.002764f, 0.003162f, 0.003763f, 0.004406f, 0.005310f, 0.006454f, 0.008156f, 0.010849f,
+ 0.014305f, 0.019318f, 0.027328f, 0.039856f, 0.061310f, 0.097717f, 0.162354f, 0.270752f,
+ 0.424805f, 0.599609f, 0.894043f, 0.897949f, 0.898438f, 0.898438f, 0.898926f, 0.898438f,
+ 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
+ 0.000112f, 0.000102f, 0.000094f, 0.000109f, 0.000131f, 0.000145f, 0.000232f, 0.000171f,
+ 0.000278f, 0.000230f, 0.000347f, 0.000331f, 0.000379f, 0.000381f, 0.000512f, 0.000427f,
+ 0.000541f, 0.000566f, 0.000547f, 0.000613f, 0.000706f, 0.000660f, 0.000809f, 0.000941f,
+ 0.000950f, 0.001035f, 0.001069f, 0.001220f, 0.001149f, 0.001314f, 0.001603f, 0.001801f,
+ 0.002062f, 0.002394f, 0.002737f, 0.003057f, 0.003771f, 0.004471f, 0.005875f, 0.007217f,
+ 0.009651f, 0.013344f, 0.018829f, 0.027710f, 0.043091f, 0.069214f, 0.119141f, 0.210571f,
+ 0.358398f, 0.544922f, 0.881348f, 0.883789f, 0.885254f, 0.885742f, 0.885254f, 0.885254f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000117f, 0.000116f,
+ 0.000116f, 0.000110f, 0.000101f, 0.000094f, 0.000087f, 0.000157f, 0.000151f, 0.000168f,
+ 0.000146f, 0.000219f, 0.000214f, 0.000261f, 0.000313f, 0.000363f, 0.000311f, 0.000415f,
+ 0.000476f, 0.000448f, 0.000429f, 0.000460f, 0.000481f, 0.000560f, 0.000544f, 0.000695f,
+ 0.000626f, 0.000789f, 0.000877f, 0.000894f, 0.000948f, 0.001177f, 0.001175f, 0.001366f,
+ 0.001487f, 0.001738f, 0.002008f, 0.002304f, 0.002663f, 0.003250f, 0.004002f, 0.004932f,
+ 0.006416f, 0.008636f, 0.012344f, 0.018127f, 0.028610f, 0.047150f, 0.083923f, 0.156860f,
+ 0.291260f, 0.487305f, 0.866211f, 0.869141f, 0.870605f, 0.870117f, 0.871094f, 0.870117f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000117f, 0.000116f, 0.000115f, 0.000115f,
+ 0.000114f, 0.000114f, 0.000109f, 0.000101f, 0.000094f, 0.000087f, 0.000081f, 0.000085f,
+ 0.000129f, 0.000150f, 0.000176f, 0.000193f, 0.000216f, 0.000257f, 0.000241f, 0.000302f,
+ 0.000259f, 0.000299f, 0.000397f, 0.000403f, 0.000384f, 0.000402f, 0.000425f, 0.000582f,
+ 0.000467f, 0.000614f, 0.000660f, 0.000625f, 0.000650f, 0.000819f, 0.000790f, 0.000879f,
+ 0.001001f, 0.001140f, 0.001403f, 0.001555f, 0.001844f, 0.002213f, 0.002636f, 0.003235f,
+ 0.004082f, 0.005604f, 0.007896f, 0.011292f, 0.018005f, 0.030472f, 0.055786f, 0.109985f,
+ 0.224976f, 0.421875f, 0.848145f, 0.852539f, 0.853027f, 0.852539f, 0.852539f, 0.853027f,
+ 0.000000f, 0.000119f, 0.000118f, 0.000116f, 0.000115f, 0.000114f, 0.000113f, 0.000112f,
+ 0.000111f, 0.000111f, 0.000110f, 0.000108f, 0.000101f, 0.000094f, 0.000088f, 0.000082f,
+ 0.000077f, 0.000109f, 0.000068f, 0.000102f, 0.000127f, 0.000158f, 0.000177f, 0.000192f,
+ 0.000207f, 0.000214f, 0.000249f, 0.000278f, 0.000296f, 0.000320f, 0.000330f, 0.000342f,
+ 0.000415f, 0.000371f, 0.000389f, 0.000508f, 0.000463f, 0.000586f, 0.000606f, 0.000649f,
+ 0.000724f, 0.000841f, 0.000910f, 0.001065f, 0.001236f, 0.001475f, 0.001807f, 0.002138f,
+ 0.002716f, 0.003622f, 0.004921f, 0.006950f, 0.010574f, 0.018433f, 0.034607f, 0.072449f,
+ 0.163818f, 0.352295f, 0.827637f, 0.831055f, 0.831543f, 0.832031f, 0.833008f, 0.832520f,
+ 0.000120f, 0.000116f, 0.000114f, 0.000113f, 0.000111f, 0.000110f, 0.000109f, 0.000108f,
+ 0.000107f, 0.000106f, 0.000106f, 0.000105f, 0.000104f, 0.000101f, 0.000094f, 0.000088f,
+ 0.000083f, 0.000078f, 0.000073f, 0.000092f, 0.000064f, 0.000097f, 0.000073f, 0.000105f,
+ 0.000125f, 0.000162f, 0.000179f, 0.000177f, 0.000191f, 0.000221f, 0.000241f, 0.000235f,
+ 0.000270f, 0.000277f, 0.000287f, 0.000329f, 0.000319f, 0.000428f, 0.000417f, 0.000409f,
+ 0.000524f, 0.000537f, 0.000612f, 0.000750f, 0.000770f, 0.000961f, 0.001153f, 0.001347f,
+ 0.001702f, 0.002081f, 0.002903f, 0.003956f, 0.006184f, 0.010368f, 0.019592f, 0.043427f,
+ 0.109924f, 0.280518f, 0.803223f, 0.806152f, 0.807617f, 0.808594f, 0.809082f, 0.808105f,
+ 0.000000f, 0.000111f, 0.000106f, 0.000107f, 0.000104f, 0.000103f, 0.000101f, 0.000101f,
+ 0.000101f, 0.000100f, 0.000099f, 0.000098f, 0.000097f, 0.000097f, 0.000097f, 0.000094f,
+ 0.000088f, 0.000083f, 0.000078f, 0.000073f, 0.000069f, 0.000070f, 0.000061f, 0.000068f,
+ 0.000059f, 0.000067f, 0.000084f, 0.000097f, 0.000128f, 0.000137f, 0.000165f, 0.000160f,
+ 0.000176f, 0.000185f, 0.000217f, 0.000239f, 0.000237f, 0.000238f, 0.000272f, 0.000281f,
+ 0.000314f, 0.000372f, 0.000395f, 0.000430f, 0.000504f, 0.000578f, 0.000665f, 0.000856f,
+ 0.000969f, 0.001210f, 0.001594f, 0.002216f, 0.003370f, 0.005527f, 0.010170f, 0.023239f,
+ 0.066101f, 0.207275f, 0.775391f, 0.779785f, 0.780273f, 0.780762f, 0.780273f, 0.780762f,
+ 0.000000f, 0.000094f, 0.000097f, 0.000095f, 0.000092f, 0.000091f, 0.000091f, 0.000090f,
+ 0.000089f, 0.000089f, 0.000088f, 0.000088f, 0.000087f, 0.000086f, 0.000087f, 0.000086f,
+ 0.000086f, 0.000085f, 0.000081f, 0.000076f, 0.000072f, 0.000068f, 0.000064f, 0.000060f,
+ 0.000057f, 0.000054f, 0.000058f, 0.000048f, 0.000048f, 0.000069f, 0.000068f, 0.000092f,
+ 0.000110f, 0.000122f, 0.000133f, 0.000136f, 0.000146f, 0.000154f, 0.000175f, 0.000194f,
+ 0.000204f, 0.000206f, 0.000238f, 0.000262f, 0.000266f, 0.000338f, 0.000361f, 0.000432f,
+ 0.000527f, 0.000659f, 0.000848f, 0.001183f, 0.001713f, 0.002661f, 0.004921f, 0.010887f,
+ 0.033936f, 0.138428f, 0.743652f, 0.747559f, 0.748047f, 0.748535f, 0.749512f, 0.749023f,
+ 0.000045f, 0.000047f, 0.000059f, 0.000059f, 0.000063f, 0.000068f, 0.000068f, 0.000068f,
+ 0.000067f, 0.000069f, 0.000068f, 0.000070f, 0.000070f, 0.000070f, 0.000071f, 0.000070f,
+ 0.000071f, 0.000071f, 0.000071f, 0.000071f, 0.000071f, 0.000069f, 0.000065f, 0.000062f,
+ 0.000058f, 0.000055f, 0.000052f, 0.000049f, 0.000046f, 0.000044f, 0.000041f, 0.000050f,
+ 0.000051f, 0.000048f, 0.000061f, 0.000070f, 0.000084f, 0.000095f, 0.000107f, 0.000104f,
+ 0.000111f, 0.000128f, 0.000143f, 0.000154f, 0.000157f, 0.000186f, 0.000198f, 0.000216f,
+ 0.000268f, 0.000315f, 0.000414f, 0.000537f, 0.000735f, 0.001149f, 0.002075f, 0.004669f,
+ 0.014175f, 0.077881f, 0.707031f, 0.710449f, 0.712402f, 0.711914f, 0.712891f, 0.712402f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000013f, 0.000029f,
+ 0.000028f, 0.000037f, 0.000035f, 0.000039f, 0.000043f, 0.000043f, 0.000045f, 0.000045f,
+ 0.000048f, 0.000048f, 0.000050f, 0.000051f, 0.000052f, 0.000052f, 0.000053f, 0.000054f,
+ 0.000054f, 0.000053f, 0.000050f, 0.000048f, 0.000045f, 0.000043f, 0.000040f, 0.000038f,
+ 0.000036f, 0.000034f, 0.000032f, 0.000030f, 0.000028f, 0.000030f, 0.000038f, 0.000043f,
+ 0.000057f, 0.000069f, 0.000072f, 0.000073f, 0.000082f, 0.000095f, 0.000101f, 0.000099f,
+ 0.000116f, 0.000130f, 0.000184f, 0.000211f, 0.000301f, 0.000443f, 0.000737f, 0.001601f,
+ 0.004978f, 0.032593f, 0.666504f, 0.669922f, 0.669922f, 0.672363f, 0.670898f, 0.670410f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f,
+ 0.000012f, 0.000015f, 0.000018f, 0.000021f, 0.000022f, 0.000023f, 0.000025f, 0.000028f,
+ 0.000029f, 0.000029f, 0.000031f, 0.000033f, 0.000033f, 0.000035f, 0.000035f, 0.000035f,
+ 0.000033f, 0.000031f, 0.000029f, 0.000028f, 0.000026f, 0.000024f, 0.000023f, 0.000021f,
+ 0.000020f, 0.000019f, 0.000022f, 0.000022f, 0.000030f, 0.000038f, 0.000042f, 0.000041f,
+ 0.000052f, 0.000047f, 0.000064f, 0.000072f, 0.000078f, 0.000129f, 0.000201f, 0.000382f,
+ 0.001180f, 0.009117f, 0.620605f, 0.624512f, 0.625000f, 0.625000f, 0.625000f, 0.625488f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000005f, 0.000007f, 0.000008f,
+ 0.000010f, 0.000011f, 0.000012f, 0.000014f, 0.000016f, 0.000016f, 0.000018f, 0.000017f,
+ 0.000016f, 0.000015f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000010f, 0.000009f,
+ 0.000011f, 0.000014f, 0.000018f, 0.000018f, 0.000021f, 0.000028f, 0.000035f, 0.000053f,
+ 0.000136f, 0.001152f, 0.571777f, 0.575684f, 0.575684f, 0.576172f, 0.576660f, 0.576660f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000002f, 0.000004f, 0.000004f, 0.000004f, 0.000003f, 0.000003f, 0.000002f, 0.000004f,
+ 0.000003f, 0.000011f, 0.520020f, 0.523926f, 0.524902f, 0.524902f, 0.524902f, 0.524902f,
+ },
+ {
+ 0.119934f, 0.328857f, 0.480713f, 0.586914f, 0.663086f, 0.717773f, 0.759766f, 0.791504f,
+ 0.818359f, 0.838867f, 0.856934f, 0.871094f, 0.883301f, 0.894043f, 0.902832f, 0.911621f,
+ 0.917969f, 0.924805f, 0.930664f, 0.936035f, 0.939941f, 0.944824f, 0.948242f, 0.951660f,
+ 0.954590f, 0.958008f, 0.961426f, 0.962891f, 0.966309f, 0.967285f, 0.970215f, 0.972656f,
+ 0.973633f, 0.975586f, 0.977539f, 0.978516f, 0.979980f, 0.981445f, 0.982910f, 0.984375f,
+ 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.990234f, 0.991699f, 0.992676f,
+ 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997559f, 0.998047f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999023f, 0.998535f, 0.998535f, 0.998047f,
+ 0.046875f, 0.160400f, 0.286621f, 0.405518f, 0.507812f, 0.590820f, 0.656250f, 0.708008f,
+ 0.748535f, 0.781250f, 0.809082f, 0.830566f, 0.848633f, 0.864258f, 0.877441f, 0.888672f,
+ 0.898926f, 0.906738f, 0.915039f, 0.921387f, 0.928223f, 0.933105f, 0.937988f, 0.942871f,
+ 0.946777f, 0.950684f, 0.954102f, 0.957031f, 0.959961f, 0.962402f, 0.965332f, 0.966797f,
+ 0.969727f, 0.971191f, 0.973145f, 0.975098f, 0.977539f, 0.978027f, 0.980469f, 0.981934f,
+ 0.982910f, 0.984375f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.990723f,
+ 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995605f, 0.996582f, 0.996582f,
+ 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f, 0.998047f,
+ 0.023788f, 0.084473f, 0.163696f, 0.255615f, 0.351807f, 0.445312f, 0.527832f, 0.597656f,
+ 0.656738f, 0.703613f, 0.742676f, 0.775879f, 0.802734f, 0.824707f, 0.843262f, 0.858887f,
+ 0.873047f, 0.884766f, 0.895508f, 0.903809f, 0.913086f, 0.919434f, 0.925781f, 0.931641f,
+ 0.937012f, 0.941406f, 0.945801f, 0.949707f, 0.953125f, 0.956543f, 0.959473f, 0.962402f,
+ 0.964844f, 0.967285f, 0.969238f, 0.972168f, 0.973633f, 0.975098f, 0.977539f, 0.979492f,
+ 0.980469f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.988770f,
+ 0.989746f, 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996094f,
+ 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.997559f,
+ 0.014595f, 0.050110f, 0.097717f, 0.158569f, 0.230347f, 0.311523f, 0.394531f, 0.473145f,
+ 0.544922f, 0.606934f, 0.660645f, 0.705566f, 0.743164f, 0.775391f, 0.800781f, 0.822266f,
+ 0.841309f, 0.856934f, 0.870605f, 0.883301f, 0.894043f, 0.902832f, 0.911133f, 0.918945f,
+ 0.925293f, 0.931152f, 0.936035f, 0.941406f, 0.945801f, 0.949707f, 0.953125f, 0.956055f,
+ 0.959473f, 0.962402f, 0.964844f, 0.967285f, 0.970215f, 0.972168f, 0.974121f, 0.975098f,
+ 0.977539f, 0.979004f, 0.980957f, 0.981934f, 0.983398f, 0.984375f, 0.985840f, 0.987305f,
+ 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f,
+ 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.997559f,
+ 0.009178f, 0.032379f, 0.062561f, 0.102417f, 0.151611f, 0.210938f, 0.279785f, 0.352783f,
+ 0.426758f, 0.496826f, 0.561035f, 0.618164f, 0.666992f, 0.708496f, 0.744141f, 0.773926f,
+ 0.800781f, 0.821777f, 0.840820f, 0.856445f, 0.870117f, 0.882324f, 0.893066f, 0.901855f,
+ 0.910645f, 0.918457f, 0.925293f, 0.930176f, 0.935547f, 0.941406f, 0.946289f, 0.949707f,
+ 0.953125f, 0.956543f, 0.959961f, 0.962891f, 0.965332f, 0.967773f, 0.969727f, 0.972656f,
+ 0.974121f, 0.976074f, 0.977539f, 0.979492f, 0.981445f, 0.982422f, 0.984375f, 0.985840f,
+ 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994141f,
+ 0.994629f, 0.995605f, 0.998047f, 0.998047f, 0.998047f, 0.997559f, 0.997559f, 0.997559f,
+ 0.006382f, 0.022430f, 0.042908f, 0.068970f, 0.102844f, 0.144653f, 0.195557f, 0.253906f,
+ 0.318848f, 0.386230f, 0.454590f, 0.518066f, 0.577148f, 0.628906f, 0.675293f, 0.714844f,
+ 0.748535f, 0.777344f, 0.802246f, 0.823730f, 0.841797f, 0.856934f, 0.871094f, 0.882812f,
+ 0.893555f, 0.902832f, 0.911133f, 0.918457f, 0.925293f, 0.930176f, 0.937012f, 0.940918f,
+ 0.945801f, 0.950195f, 0.953613f, 0.957031f, 0.960449f, 0.963379f, 0.966309f, 0.968262f,
+ 0.970703f, 0.973145f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.983398f,
+ 0.984375f, 0.985840f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f,
+ 0.993652f, 0.994629f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997070f,
+ 0.004585f, 0.015961f, 0.030930f, 0.049133f, 0.072144f, 0.101013f, 0.137451f, 0.181519f,
+ 0.232544f, 0.290039f, 0.352539f, 0.416748f, 0.479736f, 0.538574f, 0.592773f, 0.641602f,
+ 0.684570f, 0.723145f, 0.754395f, 0.782715f, 0.805176f, 0.825195f, 0.843750f, 0.859863f,
+ 0.872559f, 0.884766f, 0.895020f, 0.904297f, 0.912109f, 0.919922f, 0.926270f, 0.932129f,
+ 0.937500f, 0.942383f, 0.946289f, 0.950195f, 0.955078f, 0.958008f, 0.961426f, 0.964355f,
+ 0.967285f, 0.969238f, 0.971680f, 0.974121f, 0.975586f, 0.977539f, 0.979492f, 0.980957f,
+ 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.988281f, 0.989746f, 0.990723f, 0.992188f,
+ 0.992676f, 0.993164f, 0.997559f, 0.997559f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
+ 0.003483f, 0.012291f, 0.023209f, 0.036041f, 0.052429f, 0.073486f, 0.099182f, 0.131226f,
+ 0.169678f, 0.214844f, 0.266846f, 0.323242f, 0.383545f, 0.444580f, 0.503418f, 0.559082f,
+ 0.609375f, 0.655762f, 0.695312f, 0.730957f, 0.760254f, 0.788086f, 0.810059f, 0.829590f,
+ 0.847168f, 0.862793f, 0.875488f, 0.886719f, 0.896973f, 0.906250f, 0.914551f, 0.921387f,
+ 0.927734f, 0.933594f, 0.938965f, 0.944336f, 0.948242f, 0.952148f, 0.956543f, 0.958984f,
+ 0.961914f, 0.965332f, 0.968262f, 0.970703f, 0.972656f, 0.974609f, 0.977051f, 0.979004f,
+ 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.989746f, 0.990234f,
+ 0.991699f, 0.992676f, 0.996582f, 0.997070f, 0.997070f, 0.996582f, 0.996582f, 0.996094f,
+ 0.002962f, 0.009613f, 0.017792f, 0.027481f, 0.039429f, 0.055176f, 0.073914f, 0.096985f,
+ 0.125610f, 0.159180f, 0.199707f, 0.246216f, 0.297607f, 0.353760f, 0.412842f, 0.470215f,
+ 0.526367f, 0.578613f, 0.626953f, 0.669434f, 0.707031f, 0.740723f, 0.769043f, 0.794922f,
+ 0.814941f, 0.835449f, 0.851074f, 0.866699f, 0.879395f, 0.890137f, 0.899902f, 0.909180f,
+ 0.916992f, 0.924316f, 0.929688f, 0.936035f, 0.941406f, 0.945312f, 0.950195f, 0.953613f,
+ 0.957520f, 0.960938f, 0.963867f, 0.966797f, 0.969238f, 0.971680f, 0.974121f, 0.976562f,
+ 0.979004f, 0.979980f, 0.981934f, 0.982910f, 0.984375f, 0.986816f, 0.987793f, 0.988770f,
+ 0.990234f, 0.991699f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996094f, 0.996094f,
+ 0.002077f, 0.007637f, 0.013802f, 0.021606f, 0.031006f, 0.042419f, 0.055969f, 0.073242f,
+ 0.094055f, 0.119446f, 0.150513f, 0.186401f, 0.228638f, 0.276123f, 0.328857f, 0.384277f,
+ 0.440674f, 0.496338f, 0.549805f, 0.598633f, 0.644043f, 0.683594f, 0.719727f, 0.750977f,
+ 0.779297f, 0.802246f, 0.823730f, 0.840820f, 0.855957f, 0.871582f, 0.882324f, 0.893555f,
+ 0.903809f, 0.911621f, 0.920410f, 0.926758f, 0.932617f, 0.938477f, 0.943359f, 0.947754f,
+ 0.953125f, 0.955566f, 0.959473f, 0.962402f, 0.965332f, 0.968262f, 0.970703f, 0.972656f,
+ 0.976074f, 0.977051f, 0.979492f, 0.981445f, 0.983398f, 0.984863f, 0.986328f, 0.987793f,
+ 0.989258f, 0.990723f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.995605f,
+ 0.002014f, 0.006035f, 0.011299f, 0.017410f, 0.024368f, 0.033020f, 0.043701f, 0.056458f,
+ 0.072205f, 0.091431f, 0.114807f, 0.141968f, 0.174316f, 0.213257f, 0.256836f, 0.306152f,
+ 0.358887f, 0.413330f, 0.468018f, 0.520996f, 0.572266f, 0.618652f, 0.661621f, 0.699707f,
+ 0.732910f, 0.762695f, 0.788574f, 0.810547f, 0.830078f, 0.848145f, 0.862305f, 0.875977f,
+ 0.887695f, 0.898438f, 0.907227f, 0.915527f, 0.922852f, 0.929199f, 0.936035f, 0.940918f,
+ 0.946289f, 0.950684f, 0.953613f, 0.958496f, 0.960938f, 0.964355f, 0.967285f, 0.970215f,
+ 0.972656f, 0.975586f, 0.977539f, 0.979492f, 0.980957f, 0.982910f, 0.984863f, 0.986328f,
+ 0.987793f, 0.988770f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
+ 0.001496f, 0.005196f, 0.009201f, 0.013985f, 0.019806f, 0.026413f, 0.034943f, 0.044647f,
+ 0.056641f, 0.070923f, 0.088623f, 0.109680f, 0.135254f, 0.164795f, 0.200073f, 0.240845f,
+ 0.285645f, 0.335449f, 0.387939f, 0.441650f, 0.495850f, 0.546875f, 0.595215f, 0.639160f,
+ 0.679199f, 0.715820f, 0.746582f, 0.774414f, 0.798828f, 0.819824f, 0.837402f, 0.854492f,
+ 0.869629f, 0.881348f, 0.893066f, 0.902832f, 0.912109f, 0.918945f, 0.926758f, 0.933105f,
+ 0.938477f, 0.943359f, 0.948730f, 0.952637f, 0.956055f, 0.960449f, 0.963379f, 0.966797f,
+ 0.969238f, 0.972656f, 0.975098f, 0.977051f, 0.979004f, 0.981445f, 0.982910f, 0.984375f,
+ 0.986328f, 0.987305f, 0.994629f, 0.995605f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
+ 0.001187f, 0.004314f, 0.007740f, 0.011337f, 0.016373f, 0.021759f, 0.028198f, 0.035889f,
+ 0.045197f, 0.056580f, 0.069946f, 0.085938f, 0.105408f, 0.128784f, 0.155884f, 0.187866f,
+ 0.225830f, 0.268066f, 0.315186f, 0.365479f, 0.418213f, 0.471680f, 0.522949f, 0.572754f,
+ 0.617676f, 0.659668f, 0.697754f, 0.730957f, 0.760742f, 0.787109f, 0.809570f, 0.830078f,
+ 0.846680f, 0.862793f, 0.875488f, 0.888184f, 0.898926f, 0.907715f, 0.916016f, 0.923340f,
+ 0.930664f, 0.936523f, 0.941895f, 0.947754f, 0.951660f, 0.955566f, 0.959473f, 0.963867f,
+ 0.966309f, 0.969238f, 0.972168f, 0.974121f, 0.976562f, 0.979004f, 0.980957f, 0.982910f,
+ 0.984863f, 0.986816f, 0.994141f, 0.994629f, 0.994629f, 0.994629f, 0.994629f, 0.994141f,
+ 0.001187f, 0.003733f, 0.006496f, 0.009918f, 0.013634f, 0.017899f, 0.023026f, 0.029343f,
+ 0.036621f, 0.045227f, 0.055786f, 0.068298f, 0.083740f, 0.101135f, 0.122314f, 0.147827f,
+ 0.177612f, 0.212891f, 0.252686f, 0.297119f, 0.345215f, 0.395996f, 0.448730f, 0.500488f,
+ 0.550781f, 0.597656f, 0.641113f, 0.680664f, 0.716309f, 0.747559f, 0.774414f, 0.799316f,
+ 0.820312f, 0.838867f, 0.855957f, 0.870117f, 0.883301f, 0.894531f, 0.904785f, 0.913086f,
+ 0.920898f, 0.928223f, 0.935059f, 0.940430f, 0.945312f, 0.950684f, 0.955566f, 0.958496f,
+ 0.962891f, 0.965820f, 0.968750f, 0.971680f, 0.974609f, 0.976562f, 0.978516f, 0.980957f,
+ 0.982910f, 0.984863f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994629f,
+ 0.000998f, 0.003178f, 0.005444f, 0.008179f, 0.011337f, 0.015091f, 0.019058f, 0.024368f,
+ 0.029587f, 0.037140f, 0.045197f, 0.055115f, 0.066772f, 0.080688f, 0.097229f, 0.117371f,
+ 0.140869f, 0.169312f, 0.201538f, 0.238770f, 0.280762f, 0.326660f, 0.376709f, 0.427490f,
+ 0.479248f, 0.530273f, 0.578613f, 0.623535f, 0.664551f, 0.701660f, 0.733887f, 0.763672f,
+ 0.790039f, 0.812500f, 0.832520f, 0.849121f, 0.865234f, 0.878906f, 0.890625f, 0.901367f,
+ 0.910645f, 0.919434f, 0.926758f, 0.933105f, 0.939453f, 0.944824f, 0.949707f, 0.954590f,
+ 0.958008f, 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.974121f, 0.977051f, 0.979004f,
+ 0.980957f, 0.982910f, 0.993164f, 0.993164f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
+ 0.000948f, 0.002638f, 0.004784f, 0.007153f, 0.009590f, 0.012505f, 0.016388f, 0.020599f,
+ 0.025299f, 0.031097f, 0.037323f, 0.045197f, 0.054047f, 0.065002f, 0.078674f, 0.094055f,
+ 0.112305f, 0.134399f, 0.160889f, 0.191040f, 0.226318f, 0.265869f, 0.310303f, 0.358154f,
+ 0.409180f, 0.459473f, 0.510254f, 0.559082f, 0.606445f, 0.648926f, 0.687500f, 0.722168f,
+ 0.753418f, 0.781250f, 0.804199f, 0.825684f, 0.843262f, 0.860840f, 0.874512f, 0.886719f,
+ 0.898926f, 0.907227f, 0.916992f, 0.924805f, 0.932129f, 0.937988f, 0.943848f, 0.949219f,
+ 0.954102f, 0.958496f, 0.961426f, 0.965332f, 0.968750f, 0.972168f, 0.974609f, 0.977051f,
+ 0.979492f, 0.981445f, 0.992188f, 0.993164f, 0.993164f, 0.993164f, 0.993164f, 0.992676f,
+ 0.000696f, 0.002352f, 0.004002f, 0.006138f, 0.008446f, 0.010826f, 0.013840f, 0.017258f,
+ 0.021194f, 0.025970f, 0.031128f, 0.037140f, 0.044281f, 0.053436f, 0.063660f, 0.076050f,
+ 0.090271f, 0.107727f, 0.128662f, 0.152832f, 0.182007f, 0.214111f, 0.252930f, 0.295166f,
+ 0.341553f, 0.390625f, 0.442139f, 0.492676f, 0.541992f, 0.589844f, 0.633301f, 0.674316f,
+ 0.710938f, 0.743652f, 0.772461f, 0.796875f, 0.819824f, 0.839355f, 0.854980f, 0.870605f,
+ 0.884277f, 0.895508f, 0.906738f, 0.915527f, 0.923828f, 0.931152f, 0.937500f, 0.944336f,
+ 0.949219f, 0.953613f, 0.958008f, 0.962402f, 0.965332f, 0.968750f, 0.972168f, 0.974609f,
+ 0.977051f, 0.979980f, 0.991211f, 0.992676f, 0.992188f, 0.992188f, 0.992188f, 0.992676f,
+ 0.000838f, 0.002033f, 0.003664f, 0.005077f, 0.007282f, 0.009415f, 0.011749f, 0.014931f,
+ 0.017853f, 0.021606f, 0.025864f, 0.031219f, 0.037231f, 0.044464f, 0.052338f, 0.062500f,
+ 0.073853f, 0.087463f, 0.104065f, 0.123230f, 0.146362f, 0.173340f, 0.205078f, 0.240845f,
+ 0.281982f, 0.326660f, 0.374756f, 0.425049f, 0.476807f, 0.526855f, 0.574219f, 0.620117f,
+ 0.662598f, 0.699219f, 0.733398f, 0.764160f, 0.791016f, 0.813965f, 0.833984f, 0.851074f,
+ 0.867676f, 0.880859f, 0.893555f, 0.904785f, 0.914062f, 0.922852f, 0.930176f, 0.937012f,
+ 0.942383f, 0.948242f, 0.953125f, 0.957520f, 0.962402f, 0.966309f, 0.969238f, 0.973145f,
+ 0.975098f, 0.978027f, 0.991699f, 0.991699f, 0.992676f, 0.992188f, 0.991699f, 0.992188f,
+ 0.000600f, 0.001687f, 0.003023f, 0.004963f, 0.006405f, 0.008163f, 0.010368f, 0.012718f,
+ 0.015480f, 0.018311f, 0.022064f, 0.026169f, 0.031097f, 0.036926f, 0.043457f, 0.051392f,
+ 0.060669f, 0.071350f, 0.084473f, 0.100220f, 0.118103f, 0.140259f, 0.166016f, 0.195679f,
+ 0.230469f, 0.269531f, 0.313232f, 0.360596f, 0.410156f, 0.460693f, 0.511719f, 0.560547f,
+ 0.607422f, 0.650879f, 0.689941f, 0.724609f, 0.756348f, 0.784180f, 0.808594f, 0.828613f,
+ 0.847656f, 0.864258f, 0.879395f, 0.892090f, 0.903320f, 0.912598f, 0.921875f, 0.929688f,
+ 0.936523f, 0.942871f, 0.947754f, 0.953125f, 0.957520f, 0.961914f, 0.966309f, 0.969238f,
+ 0.972656f, 0.975586f, 0.990234f, 0.991211f, 0.991211f, 0.991699f, 0.991211f, 0.991211f,
+ 0.000269f, 0.001538f, 0.002800f, 0.003868f, 0.005524f, 0.007179f, 0.008987f, 0.011063f,
+ 0.013084f, 0.015747f, 0.019211f, 0.022324f, 0.026474f, 0.031311f, 0.036530f, 0.042969f,
+ 0.050201f, 0.059174f, 0.069641f, 0.081543f, 0.096680f, 0.114075f, 0.134644f, 0.158691f,
+ 0.187622f, 0.220581f, 0.258301f, 0.300781f, 0.347168f, 0.395996f, 0.447266f, 0.498291f,
+ 0.547852f, 0.595215f, 0.640625f, 0.680176f, 0.717285f, 0.749512f, 0.778320f, 0.803223f,
+ 0.825684f, 0.845215f, 0.862793f, 0.877441f, 0.890625f, 0.901855f, 0.912109f, 0.920898f,
+ 0.929688f, 0.937012f, 0.942871f, 0.949707f, 0.954102f, 0.958496f, 0.962402f, 0.966309f,
+ 0.970215f, 0.974121f, 0.989746f, 0.990234f, 0.990723f, 0.990723f, 0.990723f, 0.990234f,
+ 0.000341f, 0.001337f, 0.002573f, 0.003475f, 0.004765f, 0.006329f, 0.007717f, 0.009499f,
+ 0.011642f, 0.014107f, 0.016556f, 0.019470f, 0.022491f, 0.026169f, 0.030945f, 0.036011f,
+ 0.042389f, 0.049042f, 0.057678f, 0.067993f, 0.079468f, 0.093384f, 0.110046f, 0.129883f,
+ 0.152710f, 0.180420f, 0.212158f, 0.248291f, 0.289551f, 0.334961f, 0.383301f, 0.434570f,
+ 0.485596f, 0.536133f, 0.584473f, 0.630371f, 0.671875f, 0.710449f, 0.743652f, 0.773926f,
+ 0.799316f, 0.823242f, 0.843262f, 0.860352f, 0.875977f, 0.889648f, 0.901367f, 0.911621f,
+ 0.921387f, 0.929688f, 0.937012f, 0.943848f, 0.950195f, 0.955078f, 0.959473f, 0.963379f,
+ 0.967773f, 0.971191f, 0.988770f, 0.989746f, 0.990234f, 0.990234f, 0.990234f, 0.990234f,
+ 0.000564f, 0.001324f, 0.002092f, 0.003191f, 0.004471f, 0.005348f, 0.007069f, 0.008438f,
+ 0.010201f, 0.011810f, 0.014297f, 0.016586f, 0.019470f, 0.022644f, 0.026428f, 0.030579f,
+ 0.035797f, 0.041718f, 0.048248f, 0.056213f, 0.065857f, 0.076782f, 0.090271f, 0.106262f,
+ 0.125122f, 0.147095f, 0.173462f, 0.204224f, 0.239746f, 0.279785f, 0.323730f, 0.372314f,
+ 0.422607f, 0.474121f, 0.526367f, 0.575195f, 0.621582f, 0.664062f, 0.703613f, 0.738770f,
+ 0.769043f, 0.796387f, 0.820312f, 0.841797f, 0.858887f, 0.875488f, 0.889648f, 0.900879f,
+ 0.912598f, 0.921875f, 0.930664f, 0.937500f, 0.944336f, 0.950195f, 0.955566f, 0.959961f,
+ 0.964844f, 0.968750f, 0.987305f, 0.989258f, 0.989258f, 0.989258f, 0.989258f, 0.988770f,
+ 0.000369f, 0.001128f, 0.001871f, 0.002792f, 0.003712f, 0.004723f, 0.006016f, 0.007542f,
+ 0.008896f, 0.010773f, 0.012421f, 0.014381f, 0.016632f, 0.019791f, 0.022354f, 0.025955f,
+ 0.030609f, 0.035065f, 0.040924f, 0.047333f, 0.055084f, 0.064209f, 0.075012f, 0.087769f,
+ 0.102966f, 0.120911f, 0.142456f, 0.167358f, 0.197144f, 0.231812f, 0.270752f, 0.314209f,
+ 0.362549f, 0.412598f, 0.464844f, 0.515625f, 0.566895f, 0.614258f, 0.657715f, 0.698730f,
+ 0.734863f, 0.766602f, 0.794922f, 0.818848f, 0.839844f, 0.858887f, 0.875000f, 0.889648f,
+ 0.901855f, 0.912598f, 0.922852f, 0.931152f, 0.938965f, 0.945312f, 0.951660f, 0.957520f,
+ 0.961426f, 0.966309f, 0.986816f, 0.988281f, 0.988281f, 0.988770f, 0.988281f, 0.988281f,
+ 0.000466f, 0.000900f, 0.001792f, 0.002695f, 0.003458f, 0.004204f, 0.005356f, 0.006512f,
+ 0.007896f, 0.009300f, 0.010895f, 0.012459f, 0.014786f, 0.016739f, 0.019424f, 0.022461f,
+ 0.026062f, 0.029831f, 0.034851f, 0.039764f, 0.046417f, 0.053711f, 0.062164f, 0.072388f,
+ 0.085205f, 0.099365f, 0.117004f, 0.137573f, 0.162231f, 0.190674f, 0.224121f, 0.262451f,
+ 0.305664f, 0.353027f, 0.403809f, 0.456055f, 0.508301f, 0.559082f, 0.608398f, 0.652832f,
+ 0.694824f, 0.731445f, 0.764160f, 0.793945f, 0.817871f, 0.839355f, 0.858398f, 0.875488f,
+ 0.890137f, 0.902832f, 0.913574f, 0.923828f, 0.932617f, 0.940918f, 0.946777f, 0.953613f,
+ 0.958984f, 0.963379f, 0.985840f, 0.987305f, 0.987305f, 0.987793f, 0.987305f, 0.987305f,
+ 0.000234f, 0.001040f, 0.001661f, 0.002392f, 0.003101f, 0.003681f, 0.004944f, 0.005844f,
+ 0.007065f, 0.008217f, 0.009247f, 0.010925f, 0.012894f, 0.014549f, 0.017090f, 0.019455f,
+ 0.022385f, 0.025650f, 0.029449f, 0.033936f, 0.039215f, 0.045135f, 0.052612f, 0.060944f,
+ 0.070312f, 0.082397f, 0.096924f, 0.113525f, 0.133179f, 0.156860f, 0.184814f, 0.217773f,
+ 0.255127f, 0.298340f, 0.345215f, 0.395996f, 0.448242f, 0.501953f, 0.553223f, 0.603516f,
+ 0.649414f, 0.691895f, 0.729980f, 0.763184f, 0.792480f, 0.818359f, 0.841309f, 0.858887f,
+ 0.877441f, 0.891113f, 0.904785f, 0.915527f, 0.925781f, 0.933594f, 0.941895f, 0.949219f,
+ 0.955566f, 0.960449f, 0.984863f, 0.985840f, 0.986328f, 0.986816f, 0.986328f, 0.986816f,
+ 0.000241f, 0.000808f, 0.001395f, 0.001986f, 0.002731f, 0.003429f, 0.004131f, 0.005402f,
+ 0.006077f, 0.007347f, 0.008522f, 0.009544f, 0.011345f, 0.013046f, 0.014534f, 0.016953f,
+ 0.019241f, 0.022339f, 0.025208f, 0.029175f, 0.033691f, 0.038300f, 0.044067f, 0.051331f,
+ 0.059143f, 0.068726f, 0.080322f, 0.093567f, 0.109802f, 0.129883f, 0.152466f, 0.179810f,
+ 0.211792f, 0.249390f, 0.291748f, 0.338623f, 0.389404f, 0.442139f, 0.496338f, 0.548340f,
+ 0.599121f, 0.645996f, 0.689941f, 0.728516f, 0.762695f, 0.792969f, 0.818848f, 0.842285f,
+ 0.862793f, 0.878906f, 0.894043f, 0.906250f, 0.917969f, 0.927734f, 0.935547f, 0.944336f,
+ 0.951172f, 0.957031f, 0.983398f, 0.985352f, 0.985840f, 0.985352f, 0.985840f, 0.985352f,
+ 0.000340f, 0.000735f, 0.001377f, 0.001853f, 0.002382f, 0.003159f, 0.004021f, 0.004642f,
+ 0.005604f, 0.006340f, 0.007298f, 0.008591f, 0.009895f, 0.011154f, 0.012871f, 0.014580f,
+ 0.016876f, 0.019180f, 0.022141f, 0.024979f, 0.028748f, 0.032745f, 0.037964f, 0.043213f,
+ 0.050171f, 0.057831f, 0.066833f, 0.078247f, 0.091553f, 0.107178f, 0.125977f, 0.148315f,
+ 0.175415f, 0.207153f, 0.244019f, 0.286377f, 0.333008f, 0.383789f, 0.437744f, 0.491943f,
+ 0.545410f, 0.597168f, 0.645508f, 0.688965f, 0.729004f, 0.764160f, 0.794434f, 0.821289f,
+ 0.843750f, 0.864258f, 0.881348f, 0.895996f, 0.909180f, 0.920898f, 0.929199f, 0.938965f,
+ 0.946777f, 0.952637f, 0.982910f, 0.983887f, 0.984863f, 0.984863f, 0.984375f, 0.984863f,
+ 0.000236f, 0.000605f, 0.001135f, 0.001415f, 0.002329f, 0.002747f, 0.003551f, 0.004158f,
+ 0.004723f, 0.005535f, 0.006687f, 0.007534f, 0.008545f, 0.009979f, 0.011375f, 0.012993f,
+ 0.014656f, 0.016754f, 0.018921f, 0.021759f, 0.024506f, 0.028183f, 0.032043f, 0.036743f,
+ 0.042236f, 0.048645f, 0.056030f, 0.065125f, 0.075928f, 0.089050f, 0.104370f, 0.122681f,
+ 0.145142f, 0.171509f, 0.202759f, 0.239258f, 0.281250f, 0.328369f, 0.379639f, 0.433838f,
+ 0.489014f, 0.543945f, 0.596191f, 0.645020f, 0.690430f, 0.730957f, 0.766113f, 0.797852f,
+ 0.824219f, 0.846680f, 0.867188f, 0.884766f, 0.899414f, 0.912109f, 0.923828f, 0.933105f,
+ 0.942383f, 0.949707f, 0.980957f, 0.982910f, 0.983398f, 0.983398f, 0.983887f, 0.982910f,
+ 0.000214f, 0.000710f, 0.001021f, 0.001429f, 0.001858f, 0.002607f, 0.003220f, 0.003738f,
+ 0.004459f, 0.005032f, 0.005726f, 0.006748f, 0.007748f, 0.008659f, 0.010002f, 0.011368f,
+ 0.012985f, 0.014656f, 0.016525f, 0.018921f, 0.021286f, 0.024231f, 0.027649f, 0.031464f,
+ 0.035858f, 0.041321f, 0.047363f, 0.054840f, 0.063538f, 0.074097f, 0.086609f, 0.101990f,
+ 0.120117f, 0.141846f, 0.168213f, 0.199219f, 0.235352f, 0.277344f, 0.324707f, 0.376953f,
+ 0.432373f, 0.488037f, 0.543457f, 0.597168f, 0.646973f, 0.692871f, 0.732910f, 0.769531f,
+ 0.801270f, 0.828125f, 0.850586f, 0.871582f, 0.888184f, 0.903809f, 0.915527f, 0.927246f,
+ 0.936523f, 0.946289f, 0.979492f, 0.981445f, 0.981934f, 0.982422f, 0.981934f, 0.981934f,
+ 0.000000f, 0.000468f, 0.001076f, 0.001489f, 0.002048f, 0.002413f, 0.002853f, 0.003468f,
+ 0.003952f, 0.004444f, 0.005211f, 0.005917f, 0.006733f, 0.007763f, 0.008713f, 0.010262f,
+ 0.011368f, 0.012733f, 0.014458f, 0.016296f, 0.018478f, 0.021072f, 0.023666f, 0.026810f,
+ 0.030746f, 0.035278f, 0.040131f, 0.046295f, 0.053711f, 0.062195f, 0.072327f, 0.084717f,
+ 0.099487f, 0.117371f, 0.139038f, 0.164795f, 0.195923f, 0.232422f, 0.274414f, 0.322266f,
+ 0.374756f, 0.431641f, 0.488525f, 0.545410f, 0.599121f, 0.650879f, 0.697754f, 0.738770f,
+ 0.774414f, 0.806641f, 0.832520f, 0.856445f, 0.875488f, 0.893555f, 0.907715f, 0.920410f,
+ 0.931152f, 0.940918f, 0.978027f, 0.980469f, 0.980469f, 0.980957f, 0.980957f, 0.980957f,
+ 0.000279f, 0.000497f, 0.000763f, 0.001353f, 0.001794f, 0.002079f, 0.002451f, 0.002956f,
+ 0.003498f, 0.004150f, 0.004589f, 0.005310f, 0.006130f, 0.006958f, 0.007828f, 0.008888f,
+ 0.009895f, 0.011124f, 0.012772f, 0.014282f, 0.016235f, 0.018127f, 0.020630f, 0.022873f,
+ 0.026321f, 0.029938f, 0.034241f, 0.039368f, 0.045319f, 0.052338f, 0.060852f, 0.070801f,
+ 0.082947f, 0.097595f, 0.115051f, 0.136353f, 0.162231f, 0.193481f, 0.229858f, 0.272217f,
+ 0.321777f, 0.375000f, 0.432373f, 0.490479f, 0.548340f, 0.604004f, 0.655762f, 0.702637f,
+ 0.743652f, 0.780273f, 0.812500f, 0.838867f, 0.862305f, 0.881348f, 0.897949f, 0.912598f,
+ 0.925293f, 0.935547f, 0.976562f, 0.978516f, 0.979492f, 0.979980f, 0.979492f, 0.979004f,
+ 0.000110f, 0.000473f, 0.000781f, 0.001262f, 0.001584f, 0.001890f, 0.002270f, 0.002607f,
+ 0.003241f, 0.003704f, 0.004055f, 0.004795f, 0.005356f, 0.005997f, 0.006760f, 0.007896f,
+ 0.008896f, 0.009918f, 0.011200f, 0.012451f, 0.013802f, 0.015556f, 0.017838f, 0.020065f,
+ 0.022751f, 0.025864f, 0.029358f, 0.033600f, 0.038574f, 0.044342f, 0.050995f, 0.059296f,
+ 0.069214f, 0.081116f, 0.095459f, 0.113159f, 0.133911f, 0.160400f, 0.191406f, 0.228638f,
+ 0.272217f, 0.321289f, 0.375732f, 0.434326f, 0.493896f, 0.552734f, 0.609863f, 0.662109f,
+ 0.709961f, 0.750977f, 0.787598f, 0.819336f, 0.846680f, 0.868164f, 0.887695f, 0.904297f,
+ 0.917969f, 0.930176f, 0.975098f, 0.977539f, 0.977051f, 0.977539f, 0.977539f, 0.977539f,
+ 0.000242f, 0.000464f, 0.000831f, 0.001027f, 0.001271f, 0.001722f, 0.001965f, 0.002243f,
+ 0.002714f, 0.003036f, 0.003651f, 0.004025f, 0.004902f, 0.005638f, 0.006176f, 0.006943f,
+ 0.007763f, 0.008789f, 0.009804f, 0.010872f, 0.012070f, 0.013695f, 0.015381f, 0.017395f,
+ 0.019608f, 0.022232f, 0.025009f, 0.028885f, 0.032623f, 0.037659f, 0.043182f, 0.050018f,
+ 0.058167f, 0.067810f, 0.079224f, 0.093811f, 0.111328f, 0.132324f, 0.158569f, 0.190063f,
+ 0.228149f, 0.271973f, 0.322510f, 0.378906f, 0.438477f, 0.499756f, 0.560059f, 0.618164f,
+ 0.671387f, 0.718750f, 0.760742f, 0.796875f, 0.826660f, 0.854492f, 0.875000f, 0.894531f,
+ 0.911133f, 0.923828f, 0.973145f, 0.976074f, 0.975586f, 0.976074f, 0.976074f, 0.977051f,
+ 0.000242f, 0.000552f, 0.000701f, 0.001063f, 0.001186f, 0.001462f, 0.001690f, 0.002340f,
+ 0.002703f, 0.002728f, 0.003325f, 0.003828f, 0.004333f, 0.004913f, 0.005474f, 0.006077f,
+ 0.006943f, 0.007607f, 0.008553f, 0.009460f, 0.010582f, 0.011871f, 0.013451f, 0.015091f,
+ 0.016983f, 0.019165f, 0.021637f, 0.024673f, 0.027863f, 0.031525f, 0.036713f, 0.041962f,
+ 0.048615f, 0.056396f, 0.066162f, 0.077942f, 0.092590f, 0.110046f, 0.130981f, 0.157593f,
+ 0.189331f, 0.228394f, 0.273926f, 0.325684f, 0.383301f, 0.444580f, 0.507324f, 0.569824f,
+ 0.627441f, 0.682129f, 0.729980f, 0.770508f, 0.807129f, 0.837402f, 0.863281f, 0.884766f,
+ 0.902832f, 0.917969f, 0.971191f, 0.973633f, 0.974609f, 0.974121f, 0.974609f, 0.974609f,
+ 0.000239f, 0.000239f, 0.000658f, 0.000899f, 0.001204f, 0.001252f, 0.001629f, 0.001815f,
+ 0.002470f, 0.002430f, 0.003134f, 0.003321f, 0.003925f, 0.004238f, 0.004856f, 0.005341f,
+ 0.006161f, 0.006615f, 0.007511f, 0.008224f, 0.009277f, 0.010445f, 0.011818f, 0.013046f,
+ 0.014473f, 0.016510f, 0.018814f, 0.021057f, 0.023834f, 0.027237f, 0.030853f, 0.035675f,
+ 0.040894f, 0.047241f, 0.055145f, 0.064758f, 0.076782f, 0.090942f, 0.108398f, 0.130371f,
+ 0.157104f, 0.189819f, 0.229248f, 0.276367f, 0.329834f, 0.390137f, 0.453125f, 0.517578f,
+ 0.580566f, 0.640625f, 0.694336f, 0.741699f, 0.782715f, 0.817871f, 0.848145f, 0.872559f,
+ 0.893555f, 0.910645f, 0.969727f, 0.971191f, 0.972656f, 0.972168f, 0.972168f, 0.972168f,
+ 0.000222f, 0.000463f, 0.000620f, 0.000837f, 0.000900f, 0.001048f, 0.001381f, 0.001820f,
+ 0.001957f, 0.002329f, 0.002747f, 0.002964f, 0.003330f, 0.003986f, 0.004322f, 0.004677f,
+ 0.005302f, 0.005760f, 0.006569f, 0.007359f, 0.008141f, 0.009293f, 0.010101f, 0.011452f,
+ 0.012779f, 0.014496f, 0.016144f, 0.018097f, 0.020157f, 0.023148f, 0.026611f, 0.029785f,
+ 0.034515f, 0.039856f, 0.046478f, 0.054016f, 0.063843f, 0.075378f, 0.089233f, 0.107666f,
+ 0.129639f, 0.156860f, 0.190674f, 0.231445f, 0.280518f, 0.336426f, 0.398193f, 0.463379f,
+ 0.530273f, 0.595215f, 0.654785f, 0.708984f, 0.755371f, 0.796875f, 0.831543f, 0.860352f,
+ 0.883789f, 0.903809f, 0.966797f, 0.968750f, 0.969727f, 0.970215f, 0.970215f, 0.969727f,
+ 0.000000f, 0.000345f, 0.000464f, 0.000686f, 0.000782f, 0.001030f, 0.001139f, 0.001598f,
+ 0.001846f, 0.002237f, 0.002489f, 0.002684f, 0.003067f, 0.003344f, 0.003895f, 0.004158f,
+ 0.004845f, 0.005131f, 0.005886f, 0.006561f, 0.007195f, 0.007912f, 0.008965f, 0.009941f,
+ 0.010956f, 0.012383f, 0.013893f, 0.015602f, 0.017303f, 0.019623f, 0.022156f, 0.025452f,
+ 0.028976f, 0.033722f, 0.038910f, 0.045288f, 0.052887f, 0.062561f, 0.074097f, 0.088623f,
+ 0.106812f, 0.129639f, 0.157715f, 0.192261f, 0.235107f, 0.285889f, 0.344482f, 0.408691f,
+ 0.476807f, 0.545410f, 0.610840f, 0.671387f, 0.725098f, 0.771484f, 0.811035f, 0.843750f,
+ 0.871582f, 0.894043f, 0.964355f, 0.967285f, 0.967285f, 0.967773f, 0.967773f, 0.967773f,
+ 0.000000f, 0.000320f, 0.000576f, 0.000572f, 0.000767f, 0.000945f, 0.001066f, 0.001375f,
+ 0.001848f, 0.001980f, 0.002190f, 0.002399f, 0.002695f, 0.002943f, 0.003397f, 0.003664f,
+ 0.004063f, 0.004566f, 0.005119f, 0.005688f, 0.006130f, 0.007057f, 0.007778f, 0.008675f,
+ 0.009590f, 0.010666f, 0.011971f, 0.013443f, 0.015129f, 0.016953f, 0.018875f, 0.021576f,
+ 0.024658f, 0.028488f, 0.032959f, 0.037811f, 0.043793f, 0.051819f, 0.061371f, 0.073181f,
+ 0.088257f, 0.106506f, 0.129883f, 0.159180f, 0.195679f, 0.240479f, 0.293457f, 0.355225f,
+ 0.422852f, 0.492432f, 0.563477f, 0.629883f, 0.690918f, 0.743652f, 0.789062f, 0.827148f,
+ 0.858398f, 0.884277f, 0.961914f, 0.964844f, 0.964355f, 0.964844f, 0.964355f, 0.965332f,
+ 0.000000f, 0.000242f, 0.000435f, 0.000547f, 0.000688f, 0.000803f, 0.001175f, 0.001318f,
+ 0.001593f, 0.001652f, 0.001961f, 0.002209f, 0.002481f, 0.002716f, 0.002911f, 0.003210f,
+ 0.003595f, 0.004005f, 0.004490f, 0.004894f, 0.005508f, 0.006107f, 0.006714f, 0.007462f,
+ 0.008438f, 0.009277f, 0.010170f, 0.011436f, 0.012756f, 0.014145f, 0.016205f, 0.018433f,
+ 0.020966f, 0.023819f, 0.027405f, 0.031464f, 0.036713f, 0.043152f, 0.050842f, 0.060577f,
+ 0.071960f, 0.087219f, 0.106689f, 0.130371f, 0.161377f, 0.199585f, 0.246948f, 0.303467f,
+ 0.367920f, 0.439697f, 0.512207f, 0.584473f, 0.651855f, 0.712402f, 0.764160f, 0.808105f,
+ 0.844727f, 0.875000f, 0.958008f, 0.961426f, 0.961914f, 0.961914f, 0.962402f, 0.961914f,
+ 0.000000f, 0.000237f, 0.000266f, 0.000387f, 0.000557f, 0.000691f, 0.000774f, 0.001221f,
+ 0.001455f, 0.001492f, 0.001769f, 0.001896f, 0.002151f, 0.002386f, 0.002529f, 0.002911f,
+ 0.003147f, 0.003523f, 0.003862f, 0.004311f, 0.004848f, 0.005260f, 0.005795f, 0.006416f,
+ 0.007114f, 0.007942f, 0.008667f, 0.009666f, 0.010818f, 0.012184f, 0.013718f, 0.015541f,
+ 0.017685f, 0.020126f, 0.023056f, 0.026306f, 0.030853f, 0.035797f, 0.042053f, 0.049683f,
+ 0.059784f, 0.072144f, 0.086914f, 0.106873f, 0.132202f, 0.164429f, 0.205200f, 0.255615f,
+ 0.315918f, 0.384521f, 0.458984f, 0.534668f, 0.607910f, 0.676758f, 0.735840f, 0.785645f,
+ 0.828125f, 0.862305f, 0.955566f, 0.958008f, 0.958984f, 0.958496f, 0.958984f, 0.958984f,
+ 0.000000f, 0.000119f, 0.000234f, 0.000484f, 0.000603f, 0.000758f, 0.000934f, 0.000999f,
+ 0.001200f, 0.001343f, 0.001534f, 0.001725f, 0.001860f, 0.002056f, 0.002235f, 0.002445f,
+ 0.002783f, 0.003115f, 0.003448f, 0.003757f, 0.004192f, 0.004723f, 0.005077f, 0.005653f,
+ 0.006172f, 0.006527f, 0.007328f, 0.008247f, 0.009140f, 0.010368f, 0.011711f, 0.013351f,
+ 0.014702f, 0.016937f, 0.019226f, 0.022156f, 0.025604f, 0.029877f, 0.034668f, 0.040710f,
+ 0.048920f, 0.058624f, 0.071289f, 0.087219f, 0.107727f, 0.134521f, 0.168701f, 0.212769f,
+ 0.267090f, 0.331543f, 0.404785f, 0.482910f, 0.561523f, 0.635742f, 0.702637f, 0.760742f,
+ 0.809570f, 0.849121f, 0.951660f, 0.954590f, 0.955566f, 0.955566f, 0.956055f, 0.955566f,
+ 0.000238f, 0.000218f, 0.000229f, 0.000242f, 0.000313f, 0.000859f, 0.000623f, 0.000978f,
+ 0.001021f, 0.001150f, 0.001320f, 0.001431f, 0.001546f, 0.001746f, 0.001895f, 0.002106f,
+ 0.002502f, 0.002630f, 0.002926f, 0.003296f, 0.003651f, 0.003918f, 0.004391f, 0.004910f,
+ 0.005249f, 0.005558f, 0.006413f, 0.007114f, 0.007866f, 0.008789f, 0.009872f, 0.011093f,
+ 0.012413f, 0.013939f, 0.015945f, 0.018692f, 0.021225f, 0.024643f, 0.028687f, 0.033936f,
+ 0.040192f, 0.047791f, 0.058014f, 0.070923f, 0.087585f, 0.109131f, 0.137573f, 0.174683f,
+ 0.222290f, 0.280762f, 0.350830f, 0.428955f, 0.511230f, 0.592285f, 0.666992f, 0.733398f,
+ 0.789062f, 0.834473f, 0.947754f, 0.951172f, 0.951660f, 0.951172f, 0.951660f, 0.951172f,
+ 0.000000f, 0.000205f, 0.000222f, 0.000344f, 0.000301f, 0.000775f, 0.000827f, 0.000719f,
+ 0.000944f, 0.000976f, 0.001306f, 0.001249f, 0.001404f, 0.001569f, 0.001604f, 0.001819f,
+ 0.002182f, 0.002354f, 0.002569f, 0.002857f, 0.003113f, 0.003426f, 0.003649f, 0.004112f,
+ 0.004307f, 0.004925f, 0.005508f, 0.005802f, 0.006565f, 0.007450f, 0.008125f, 0.009079f,
+ 0.010269f, 0.011665f, 0.013565f, 0.015213f, 0.017410f, 0.020203f, 0.023743f, 0.028168f,
+ 0.032684f, 0.039062f, 0.047058f, 0.057404f, 0.070984f, 0.088623f, 0.111389f, 0.142090f,
+ 0.182373f, 0.234253f, 0.298828f, 0.375000f, 0.458008f, 0.543945f, 0.627441f, 0.702148f,
+ 0.765137f, 0.818359f, 0.942871f, 0.946289f, 0.947266f, 0.947266f, 0.946777f, 0.947266f,
+ 0.000064f, 0.000095f, 0.000197f, 0.000213f, 0.000459f, 0.000491f, 0.000647f, 0.000696f,
+ 0.000884f, 0.000911f, 0.001121f, 0.001115f, 0.001234f, 0.001371f, 0.001410f, 0.001743f,
+ 0.001905f, 0.002016f, 0.002207f, 0.002438f, 0.002714f, 0.002939f, 0.003183f, 0.003323f,
+ 0.003727f, 0.004143f, 0.004555f, 0.005276f, 0.005531f, 0.006264f, 0.006702f, 0.007572f,
+ 0.008705f, 0.009712f, 0.011238f, 0.012650f, 0.014320f, 0.016815f, 0.019516f, 0.022400f,
+ 0.026566f, 0.031799f, 0.038055f, 0.046417f, 0.057037f, 0.071350f, 0.089722f, 0.114868f,
+ 0.148193f, 0.192749f, 0.249878f, 0.321045f, 0.404053f, 0.493408f, 0.583008f, 0.666016f,
+ 0.739258f, 0.799316f, 0.937988f, 0.941406f, 0.941895f, 0.942383f, 0.942383f, 0.942383f,
+ 0.000000f, 0.000007f, 0.000144f, 0.000427f, 0.000443f, 0.000566f, 0.000589f, 0.000615f,
+ 0.000725f, 0.000731f, 0.000896f, 0.000953f, 0.001062f, 0.001167f, 0.001344f, 0.001345f,
+ 0.001636f, 0.001774f, 0.001893f, 0.002069f, 0.002350f, 0.002457f, 0.002678f, 0.002743f,
+ 0.003105f, 0.003513f, 0.003830f, 0.004227f, 0.004589f, 0.005047f, 0.005669f, 0.006176f,
+ 0.007153f, 0.007896f, 0.008911f, 0.010231f, 0.011818f, 0.013618f, 0.015465f, 0.018188f,
+ 0.021576f, 0.025452f, 0.030533f, 0.037048f, 0.045685f, 0.056915f, 0.071533f, 0.091675f,
+ 0.118958f, 0.156006f, 0.205444f, 0.270020f, 0.349609f, 0.439941f, 0.533691f, 0.625977f,
+ 0.708984f, 0.778320f, 0.931641f, 0.936035f, 0.936523f, 0.937012f, 0.937012f, 0.937012f,
+ 0.000000f, 0.000000f, 0.000137f, 0.000262f, 0.000432f, 0.000437f, 0.000444f, 0.000590f,
+ 0.000558f, 0.000606f, 0.000817f, 0.000877f, 0.000909f, 0.000951f, 0.001191f, 0.001244f,
+ 0.001373f, 0.001506f, 0.001702f, 0.001690f, 0.001955f, 0.001940f, 0.002283f, 0.002340f,
+ 0.002571f, 0.002871f, 0.003265f, 0.003475f, 0.003910f, 0.004181f, 0.004608f, 0.005112f,
+ 0.005833f, 0.006416f, 0.007145f, 0.008209f, 0.009636f, 0.010750f, 0.012642f, 0.014481f,
+ 0.017197f, 0.020203f, 0.024353f, 0.029694f, 0.036041f, 0.045105f, 0.056702f, 0.072388f,
+ 0.094482f, 0.124329f, 0.166504f, 0.223022f, 0.295898f, 0.384766f, 0.482910f, 0.582031f,
+ 0.675293f, 0.754883f, 0.926270f, 0.929688f, 0.930664f, 0.930664f, 0.931152f, 0.930664f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000232f, 0.000357f, 0.000411f, 0.000513f, 0.000527f,
+ 0.000490f, 0.000504f, 0.000653f, 0.000750f, 0.000780f, 0.000976f, 0.000942f, 0.000967f,
+ 0.001180f, 0.001252f, 0.001385f, 0.001425f, 0.001559f, 0.001801f, 0.001886f, 0.002144f,
+ 0.002111f, 0.002354f, 0.002645f, 0.002827f, 0.003187f, 0.003414f, 0.003792f, 0.004360f,
+ 0.004662f, 0.005146f, 0.005875f, 0.006783f, 0.007610f, 0.008797f, 0.010033f, 0.011566f,
+ 0.013565f, 0.016006f, 0.019165f, 0.023163f, 0.028320f, 0.035400f, 0.044647f, 0.057129f,
+ 0.074402f, 0.098572f, 0.132812f, 0.180542f, 0.245728f, 0.330078f, 0.428955f, 0.535156f,
+ 0.638184f, 0.728516f, 0.919434f, 0.922852f, 0.923828f, 0.923828f, 0.923828f, 0.924316f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.000248f, 0.000359f, 0.000386f, 0.000342f,
+ 0.000465f, 0.000461f, 0.000490f, 0.000609f, 0.000638f, 0.000694f, 0.000807f, 0.000923f,
+ 0.000961f, 0.001074f, 0.001123f, 0.001268f, 0.001311f, 0.001494f, 0.001537f, 0.001754f,
+ 0.001899f, 0.001917f, 0.002199f, 0.002241f, 0.002583f, 0.002769f, 0.003101f, 0.003441f,
+ 0.003775f, 0.004200f, 0.004787f, 0.005272f, 0.006062f, 0.006702f, 0.007732f, 0.009102f,
+ 0.010582f, 0.012466f, 0.014984f, 0.017990f, 0.021957f, 0.027222f, 0.034332f, 0.044128f,
+ 0.057434f, 0.076538f, 0.104126f, 0.143799f, 0.199829f, 0.275879f, 0.373047f, 0.482422f,
+ 0.594727f, 0.698730f, 0.910645f, 0.914551f, 0.916504f, 0.916016f, 0.916504f, 0.915527f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000221f, 0.000222f, 0.000392f, 0.000402f,
+ 0.000396f, 0.000434f, 0.000476f, 0.000548f, 0.000536f, 0.000644f, 0.000642f, 0.000793f,
+ 0.000795f, 0.000912f, 0.000953f, 0.000989f, 0.001164f, 0.001197f, 0.001285f, 0.001480f,
+ 0.001511f, 0.001674f, 0.001703f, 0.001901f, 0.002075f, 0.002340f, 0.002499f, 0.002800f,
+ 0.003019f, 0.003296f, 0.003695f, 0.004093f, 0.004780f, 0.005260f, 0.006207f, 0.006939f,
+ 0.008034f, 0.009598f, 0.011353f, 0.013702f, 0.016678f, 0.020874f, 0.026062f, 0.033539f,
+ 0.044006f, 0.058746f, 0.080139f, 0.111877f, 0.158447f, 0.226318f, 0.317627f, 0.428711f,
+ 0.548828f, 0.665039f, 0.901367f, 0.907227f, 0.907715f, 0.908203f, 0.908203f, 0.907227f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000173f, 0.000191f, 0.000215f, 0.000224f, 0.000261f,
+ 0.000340f, 0.000374f, 0.000380f, 0.000496f, 0.000416f, 0.000535f, 0.000592f, 0.000622f,
+ 0.000701f, 0.000772f, 0.000742f, 0.000774f, 0.000990f, 0.000945f, 0.001088f, 0.001105f,
+ 0.001348f, 0.001231f, 0.001460f, 0.001620f, 0.001758f, 0.001941f, 0.002008f, 0.002092f,
+ 0.002430f, 0.002615f, 0.002886f, 0.003208f, 0.003519f, 0.004112f, 0.004704f, 0.005371f,
+ 0.006149f, 0.007351f, 0.008659f, 0.010201f, 0.012550f, 0.015549f, 0.019577f, 0.025436f,
+ 0.032928f, 0.044220f, 0.060608f, 0.084961f, 0.123474f, 0.180664f, 0.263184f, 0.372314f,
+ 0.498291f, 0.626465f, 0.892578f, 0.895996f, 0.896973f, 0.896973f, 0.897949f, 0.897949f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000192f, 0.000201f, 0.000222f,
+ 0.000222f, 0.000276f, 0.000295f, 0.000344f, 0.000433f, 0.000470f, 0.000485f, 0.000549f,
+ 0.000555f, 0.000558f, 0.000566f, 0.000639f, 0.000678f, 0.000757f, 0.000840f, 0.000905f,
+ 0.000999f, 0.000946f, 0.001018f, 0.001309f, 0.001402f, 0.001417f, 0.001624f, 0.001692f,
+ 0.001869f, 0.002003f, 0.002184f, 0.002602f, 0.002851f, 0.003157f, 0.003595f, 0.004063f,
+ 0.004734f, 0.005398f, 0.006275f, 0.007542f, 0.009148f, 0.011383f, 0.014275f, 0.018250f,
+ 0.024063f, 0.032135f, 0.044922f, 0.063721f, 0.093811f, 0.139648f, 0.211914f, 0.314697f,
+ 0.444092f, 0.584961f, 0.879883f, 0.884766f, 0.885254f, 0.885742f, 0.886230f, 0.885742f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000120f, 0.000154f, 0.000150f, 0.000160f,
+ 0.000202f, 0.000217f, 0.000308f, 0.000319f, 0.000278f, 0.000392f, 0.000362f, 0.000432f,
+ 0.000416f, 0.000448f, 0.000495f, 0.000526f, 0.000710f, 0.000754f, 0.000657f, 0.000755f,
+ 0.000806f, 0.000919f, 0.000815f, 0.001080f, 0.001152f, 0.001207f, 0.001218f, 0.001373f,
+ 0.001320f, 0.001685f, 0.001764f, 0.001819f, 0.002068f, 0.002380f, 0.002668f, 0.003033f,
+ 0.003584f, 0.003979f, 0.004829f, 0.005402f, 0.006630f, 0.008080f, 0.010254f, 0.013069f,
+ 0.017044f, 0.023422f, 0.031647f, 0.046417f, 0.068604f, 0.104919f, 0.165161f, 0.258789f,
+ 0.387207f, 0.537598f, 0.867188f, 0.871582f, 0.872559f, 0.872559f, 0.872559f, 0.873047f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000118f, 0.000122f, 0.000108f,
+ 0.000143f, 0.000149f, 0.000184f, 0.000194f, 0.000189f, 0.000210f, 0.000321f, 0.000282f,
+ 0.000376f, 0.000420f, 0.000533f, 0.000437f, 0.000467f, 0.000477f, 0.000587f, 0.000519f,
+ 0.000673f, 0.000662f, 0.000679f, 0.000845f, 0.000881f, 0.000863f, 0.001016f, 0.001093f,
+ 0.001176f, 0.001191f, 0.001336f, 0.001561f, 0.001573f, 0.001754f, 0.001919f, 0.002264f,
+ 0.002596f, 0.002911f, 0.003372f, 0.003870f, 0.004723f, 0.005733f, 0.007092f, 0.008965f,
+ 0.011650f, 0.015701f, 0.022339f, 0.032043f, 0.048370f, 0.076050f, 0.124084f, 0.204834f,
+ 0.328369f, 0.485596f, 0.852539f, 0.856934f, 0.858887f, 0.858887f, 0.858887f, 0.858398f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000118f, 0.000117f, 0.000116f, 0.000114f,
+ 0.000105f, 0.000110f, 0.000165f, 0.000133f, 0.000157f, 0.000240f, 0.000256f, 0.000257f,
+ 0.000249f, 0.000303f, 0.000342f, 0.000346f, 0.000485f, 0.000510f, 0.000398f, 0.000493f,
+ 0.000492f, 0.000524f, 0.000590f, 0.000585f, 0.000601f, 0.000740f, 0.000647f, 0.000871f,
+ 0.000834f, 0.000969f, 0.001020f, 0.001190f, 0.001244f, 0.001432f, 0.001393f, 0.001702f,
+ 0.001912f, 0.002171f, 0.002445f, 0.002958f, 0.003330f, 0.004025f, 0.004860f, 0.006161f,
+ 0.007896f, 0.010742f, 0.014671f, 0.021378f, 0.032928f, 0.052612f, 0.089050f, 0.155884f,
+ 0.268555f, 0.430664f, 0.836426f, 0.841309f, 0.841309f, 0.842285f, 0.842773f, 0.842285f,
+ 0.000000f, 0.000000f, 0.000119f, 0.000117f, 0.000116f, 0.000115f, 0.000114f, 0.000114f,
+ 0.000111f, 0.000103f, 0.000097f, 0.000118f, 0.000115f, 0.000130f, 0.000176f, 0.000130f,
+ 0.000223f, 0.000235f, 0.000244f, 0.000252f, 0.000274f, 0.000389f, 0.000309f, 0.000430f,
+ 0.000340f, 0.000399f, 0.000408f, 0.000459f, 0.000514f, 0.000501f, 0.000519f, 0.000657f,
+ 0.000588f, 0.000775f, 0.000813f, 0.000789f, 0.000904f, 0.001076f, 0.001027f, 0.001170f,
+ 0.001342f, 0.001425f, 0.001662f, 0.002005f, 0.002298f, 0.002699f, 0.003227f, 0.003990f,
+ 0.005062f, 0.006855f, 0.009415f, 0.013504f, 0.020905f, 0.034424f, 0.060333f, 0.112000f,
+ 0.210693f, 0.371094f, 0.816406f, 0.822754f, 0.822754f, 0.823242f, 0.823242f, 0.823730f,
+ 0.000000f, 0.000119f, 0.000117f, 0.000116f, 0.000114f, 0.000113f, 0.000112f, 0.000111f,
+ 0.000110f, 0.000109f, 0.000102f, 0.000095f, 0.000090f, 0.000084f, 0.000093f, 0.000103f,
+ 0.000118f, 0.000165f, 0.000162f, 0.000190f, 0.000204f, 0.000218f, 0.000223f, 0.000237f,
+ 0.000256f, 0.000272f, 0.000344f, 0.000365f, 0.000365f, 0.000396f, 0.000386f, 0.000412f,
+ 0.000530f, 0.000466f, 0.000492f, 0.000615f, 0.000611f, 0.000748f, 0.000712f, 0.000795f,
+ 0.000908f, 0.000971f, 0.001106f, 0.001353f, 0.001572f, 0.001822f, 0.002251f, 0.002676f,
+ 0.003290f, 0.004349f, 0.005951f, 0.008316f, 0.012543f, 0.021149f, 0.038025f, 0.075500f,
+ 0.156006f, 0.308838f, 0.794922f, 0.800293f, 0.800781f, 0.801270f, 0.801758f, 0.802246f,
+ 0.000121f, 0.000116f, 0.000114f, 0.000113f, 0.000111f, 0.000109f, 0.000108f, 0.000107f,
+ 0.000106f, 0.000104f, 0.000104f, 0.000100f, 0.000094f, 0.000088f, 0.000083f, 0.000078f,
+ 0.000074f, 0.000105f, 0.000078f, 0.000122f, 0.000113f, 0.000153f, 0.000174f, 0.000175f,
+ 0.000207f, 0.000216f, 0.000225f, 0.000215f, 0.000262f, 0.000308f, 0.000297f, 0.000287f,
+ 0.000307f, 0.000342f, 0.000363f, 0.000411f, 0.000401f, 0.000453f, 0.000522f, 0.000555f,
+ 0.000680f, 0.000701f, 0.000751f, 0.000873f, 0.000966f, 0.001181f, 0.001445f, 0.001666f,
+ 0.002077f, 0.002512f, 0.003359f, 0.004856f, 0.007347f, 0.012001f, 0.022049f, 0.046417f,
+ 0.107117f, 0.245361f, 0.770508f, 0.775879f, 0.776367f, 0.776855f, 0.777344f, 0.777832f,
+ 0.000000f, 0.000113f, 0.000108f, 0.000107f, 0.000104f, 0.000103f, 0.000101f, 0.000100f,
+ 0.000099f, 0.000098f, 0.000097f, 0.000096f, 0.000095f, 0.000091f, 0.000086f, 0.000081f,
+ 0.000077f, 0.000073f, 0.000069f, 0.000079f, 0.000084f, 0.000091f, 0.000074f, 0.000100f,
+ 0.000117f, 0.000140f, 0.000144f, 0.000166f, 0.000174f, 0.000178f, 0.000225f, 0.000197f,
+ 0.000234f, 0.000239f, 0.000273f, 0.000289f, 0.000283f, 0.000293f, 0.000338f, 0.000386f,
+ 0.000386f, 0.000432f, 0.000459f, 0.000525f, 0.000625f, 0.000691f, 0.000800f, 0.001004f,
+ 0.001227f, 0.001479f, 0.001984f, 0.002745f, 0.003983f, 0.006413f, 0.011642f, 0.025269f,
+ 0.066040f, 0.182495f, 0.743164f, 0.748535f, 0.749023f, 0.749512f, 0.750000f, 0.749512f,
+ 0.000000f, 0.000102f, 0.000101f, 0.000098f, 0.000094f, 0.000093f, 0.000092f, 0.000090f,
+ 0.000089f, 0.000088f, 0.000087f, 0.000086f, 0.000085f, 0.000084f, 0.000085f, 0.000082f,
+ 0.000078f, 0.000074f, 0.000070f, 0.000066f, 0.000063f, 0.000060f, 0.000057f, 0.000056f,
+ 0.000061f, 0.000060f, 0.000073f, 0.000087f, 0.000100f, 0.000105f, 0.000124f, 0.000136f,
+ 0.000140f, 0.000140f, 0.000159f, 0.000179f, 0.000186f, 0.000205f, 0.000214f, 0.000229f,
+ 0.000248f, 0.000267f, 0.000299f, 0.000344f, 0.000367f, 0.000422f, 0.000496f, 0.000557f,
+ 0.000639f, 0.000837f, 0.001037f, 0.001419f, 0.002081f, 0.003202f, 0.005730f, 0.012199f,
+ 0.034943f, 0.122925f, 0.711426f, 0.716797f, 0.718750f, 0.718262f, 0.718262f, 0.718750f,
+ 0.000094f, 0.000079f, 0.000078f, 0.000074f, 0.000074f, 0.000075f, 0.000074f, 0.000073f,
+ 0.000071f, 0.000072f, 0.000070f, 0.000071f, 0.000071f, 0.000070f, 0.000070f, 0.000069f,
+ 0.000070f, 0.000069f, 0.000068f, 0.000065f, 0.000062f, 0.000059f, 0.000056f, 0.000053f,
+ 0.000050f, 0.000048f, 0.000045f, 0.000044f, 0.000041f, 0.000050f, 0.000050f, 0.000061f,
+ 0.000068f, 0.000085f, 0.000091f, 0.000101f, 0.000102f, 0.000107f, 0.000119f, 0.000129f,
+ 0.000144f, 0.000151f, 0.000160f, 0.000184f, 0.000212f, 0.000213f, 0.000235f, 0.000294f,
+ 0.000315f, 0.000392f, 0.000505f, 0.000637f, 0.000880f, 0.001400f, 0.002462f, 0.005333f,
+ 0.015160f, 0.070312f, 0.678223f, 0.683105f, 0.684082f, 0.684570f, 0.684570f, 0.684570f,
+ 0.000000f, 0.000000f, 0.000023f, 0.000034f, 0.000032f, 0.000038f, 0.000037f, 0.000044f,
+ 0.000043f, 0.000047f, 0.000045f, 0.000047f, 0.000049f, 0.000049f, 0.000049f, 0.000048f,
+ 0.000051f, 0.000050f, 0.000051f, 0.000051f, 0.000052f, 0.000052f, 0.000052f, 0.000049f,
+ 0.000047f, 0.000045f, 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000035f, 0.000033f,
+ 0.000031f, 0.000029f, 0.000038f, 0.000037f, 0.000042f, 0.000051f, 0.000055f, 0.000067f,
+ 0.000074f, 0.000073f, 0.000083f, 0.000093f, 0.000088f, 0.000102f, 0.000122f, 0.000122f,
+ 0.000142f, 0.000169f, 0.000206f, 0.000265f, 0.000355f, 0.000531f, 0.000897f, 0.001822f,
+ 0.005493f, 0.030579f, 0.640137f, 0.644531f, 0.647461f, 0.647949f, 0.647461f, 0.648438f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000000f, 0.000008f, 0.000012f, 0.000014f, 0.000014f, 0.000019f, 0.000021f,
+ 0.000022f, 0.000024f, 0.000026f, 0.000027f, 0.000027f, 0.000028f, 0.000029f, 0.000031f,
+ 0.000031f, 0.000032f, 0.000032f, 0.000033f, 0.000033f, 0.000032f, 0.000030f, 0.000029f,
+ 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000019f, 0.000018f,
+ 0.000021f, 0.000024f, 0.000028f, 0.000033f, 0.000043f, 0.000041f, 0.000046f, 0.000053f,
+ 0.000050f, 0.000059f, 0.000068f, 0.000094f, 0.000096f, 0.000140f, 0.000239f, 0.000447f,
+ 0.001340f, 0.009087f, 0.600098f, 0.605957f, 0.606934f, 0.606934f, 0.607422f, 0.606934f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000002f, 0.000004f, 0.000006f, 0.000006f, 0.000009f, 0.000010f, 0.000011f, 0.000012f,
+ 0.000013f, 0.000014f, 0.000015f, 0.000016f, 0.000017f, 0.000016f, 0.000015f, 0.000014f,
+ 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000010f, 0.000009f, 0.000008f, 0.000012f,
+ 0.000014f, 0.000018f, 0.000017f, 0.000022f, 0.000022f, 0.000026f, 0.000040f, 0.000060f,
+ 0.000157f, 0.001244f, 0.557129f, 0.563477f, 0.563477f, 0.564941f, 0.564941f, 0.564941f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000002f, 0.000003f,
+ 0.000003f, 0.000004f, 0.000003f, 0.000003f, 0.000003f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000003f, 0.000012f, 0.513672f, 0.520020f, 0.520020f, 0.520508f, 0.521484f, 0.521484f,
+ },
+ {
+ 0.103943f, 0.284912f, 0.422119f, 0.523438f, 0.600586f, 0.659668f, 0.705078f, 0.741699f,
+ 0.771484f, 0.795898f, 0.816895f, 0.834961f, 0.850586f, 0.862793f, 0.874512f, 0.884277f,
+ 0.894043f, 0.901855f, 0.909180f, 0.915039f, 0.921387f, 0.926270f, 0.932129f, 0.936035f,
+ 0.940430f, 0.944336f, 0.948242f, 0.951660f, 0.954590f, 0.957520f, 0.959961f, 0.962891f,
+ 0.965332f, 0.967285f, 0.969727f, 0.971680f, 0.973145f, 0.975586f, 0.977051f, 0.979004f,
+ 0.979980f, 0.981934f, 0.983887f, 0.984375f, 0.985840f, 0.986816f, 0.988770f, 0.989258f,
+ 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996582f, 0.997559f,
+ 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.998535f, 0.998047f, 0.997559f, 0.997070f,
+ 0.046997f, 0.153564f, 0.264160f, 0.369385f, 0.460205f, 0.538574f, 0.602051f, 0.654785f,
+ 0.697754f, 0.733398f, 0.762695f, 0.787598f, 0.809082f, 0.827637f, 0.843262f, 0.856934f,
+ 0.868652f, 0.880859f, 0.889648f, 0.898438f, 0.906738f, 0.912598f, 0.918945f, 0.924805f,
+ 0.929688f, 0.935059f, 0.938965f, 0.943359f, 0.947266f, 0.951172f, 0.954102f, 0.956543f,
+ 0.959961f, 0.961914f, 0.964844f, 0.966797f, 0.969727f, 0.971191f, 0.974121f, 0.975098f,
+ 0.977051f, 0.979492f, 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.985840f, 0.987305f,
+ 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.995117f, 0.996094f,
+ 0.996582f, 0.997559f, 0.999023f, 0.998535f, 0.998047f, 0.997559f, 0.997070f, 0.997070f,
+ 0.025940f, 0.088501f, 0.162964f, 0.246094f, 0.331055f, 0.411865f, 0.486328f, 0.550293f,
+ 0.606934f, 0.655762f, 0.695312f, 0.729980f, 0.758301f, 0.783691f, 0.804199f, 0.823730f,
+ 0.838867f, 0.853027f, 0.865723f, 0.877441f, 0.887207f, 0.895996f, 0.904785f, 0.911133f,
+ 0.916992f, 0.923828f, 0.928223f, 0.933594f, 0.937988f, 0.942871f, 0.946777f, 0.950195f,
+ 0.953613f, 0.956543f, 0.959473f, 0.962402f, 0.964844f, 0.967285f, 0.970215f, 0.971680f,
+ 0.973633f, 0.976074f, 0.977539f, 0.979492f, 0.980469f, 0.982422f, 0.984863f, 0.985352f,
+ 0.986816f, 0.987793f, 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.994141f, 0.995117f,
+ 0.995605f, 0.996582f, 0.998535f, 0.998047f, 0.998047f, 0.997559f, 0.997070f, 0.996582f,
+ 0.016159f, 0.055176f, 0.104126f, 0.162720f, 0.229126f, 0.300781f, 0.372803f, 0.442871f,
+ 0.506836f, 0.563477f, 0.613281f, 0.657715f, 0.696289f, 0.729004f, 0.757324f, 0.782227f,
+ 0.802734f, 0.821289f, 0.837402f, 0.852539f, 0.865234f, 0.875977f, 0.885742f, 0.895508f,
+ 0.903320f, 0.910156f, 0.917480f, 0.922852f, 0.928711f, 0.934082f, 0.937988f, 0.942871f,
+ 0.947266f, 0.950195f, 0.954102f, 0.957031f, 0.959473f, 0.962402f, 0.964844f, 0.968262f,
+ 0.969727f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979980f, 0.981934f, 0.982910f,
+ 0.983887f, 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993652f,
+ 0.994141f, 0.995117f, 0.998047f, 0.997559f, 0.997559f, 0.997070f, 0.996582f, 0.996582f,
+ 0.010841f, 0.036865f, 0.070007f, 0.110962f, 0.159546f, 0.214355f, 0.276367f, 0.340576f,
+ 0.405029f, 0.465820f, 0.523926f, 0.576172f, 0.623535f, 0.664062f, 0.699707f, 0.731445f,
+ 0.758301f, 0.782227f, 0.803223f, 0.821289f, 0.837891f, 0.852051f, 0.864258f, 0.875488f,
+ 0.884766f, 0.894531f, 0.903320f, 0.910156f, 0.916992f, 0.923828f, 0.928223f, 0.933594f,
+ 0.938477f, 0.943359f, 0.947266f, 0.950684f, 0.954102f, 0.957520f, 0.960449f, 0.962891f,
+ 0.965820f, 0.968750f, 0.971191f, 0.973145f, 0.975586f, 0.977539f, 0.978516f, 0.980957f,
+ 0.982422f, 0.984375f, 0.985352f, 0.987305f, 0.988281f, 0.989746f, 0.990723f, 0.992188f,
+ 0.993164f, 0.994141f, 0.997559f, 0.997559f, 0.997070f, 0.996582f, 0.996582f, 0.996094f,
+ 0.007637f, 0.026566f, 0.049896f, 0.078247f, 0.113403f, 0.154663f, 0.202637f, 0.255371f,
+ 0.313232f, 0.372314f, 0.431152f, 0.488037f, 0.540039f, 0.588867f, 0.633301f, 0.670898f,
+ 0.704102f, 0.734375f, 0.761230f, 0.785156f, 0.804688f, 0.822754f, 0.838867f, 0.852539f,
+ 0.864746f, 0.876953f, 0.886230f, 0.895996f, 0.903320f, 0.910645f, 0.917480f, 0.923828f,
+ 0.929199f, 0.935059f, 0.938965f, 0.943359f, 0.948730f, 0.952148f, 0.954590f, 0.958496f,
+ 0.961426f, 0.964355f, 0.966797f, 0.969238f, 0.971680f, 0.974121f, 0.976074f, 0.978027f,
+ 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.986816f, 0.987793f, 0.989258f, 0.990723f,
+ 0.991699f, 0.993164f, 0.996582f, 0.996582f, 0.996094f, 0.996094f, 0.996094f, 0.995605f,
+ 0.005714f, 0.019485f, 0.036194f, 0.056976f, 0.082336f, 0.113342f, 0.149048f, 0.191284f,
+ 0.238770f, 0.290039f, 0.344727f, 0.400391f, 0.454590f, 0.507324f, 0.557129f, 0.602539f,
+ 0.642578f, 0.679199f, 0.711426f, 0.740234f, 0.766602f, 0.788574f, 0.807617f, 0.825195f,
+ 0.841309f, 0.854980f, 0.867676f, 0.877930f, 0.888184f, 0.896484f, 0.904785f, 0.912109f,
+ 0.918945f, 0.925293f, 0.930176f, 0.935547f, 0.940918f, 0.944336f, 0.948730f, 0.952637f,
+ 0.956055f, 0.959473f, 0.962402f, 0.965332f, 0.967773f, 0.970703f, 0.972656f, 0.975098f,
+ 0.977051f, 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.987793f, 0.989258f,
+ 0.990234f, 0.991211f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.995605f, 0.995117f,
+ 0.004505f, 0.014908f, 0.027634f, 0.043274f, 0.061707f, 0.084045f, 0.111694f, 0.143921f,
+ 0.180542f, 0.223877f, 0.270996f, 0.320557f, 0.373291f, 0.425781f, 0.478027f, 0.526855f,
+ 0.573242f, 0.615723f, 0.654785f, 0.688965f, 0.720215f, 0.747559f, 0.771973f, 0.793457f,
+ 0.812500f, 0.829102f, 0.844238f, 0.858398f, 0.870117f, 0.881348f, 0.890625f, 0.898926f,
+ 0.906738f, 0.914062f, 0.921387f, 0.926758f, 0.932617f, 0.937500f, 0.942383f, 0.945801f,
+ 0.950684f, 0.954102f, 0.958008f, 0.960938f, 0.964355f, 0.966797f, 0.969727f, 0.972656f,
+ 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.984375f, 0.985840f, 0.987793f,
+ 0.988281f, 0.990234f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995117f, 0.994629f,
+ 0.003691f, 0.011925f, 0.021622f, 0.033203f, 0.047241f, 0.065247f, 0.085266f, 0.109558f,
+ 0.138550f, 0.172363f, 0.210205f, 0.253418f, 0.299805f, 0.348877f, 0.400146f, 0.450195f,
+ 0.499512f, 0.546387f, 0.589844f, 0.629883f, 0.666016f, 0.700195f, 0.728516f, 0.755371f,
+ 0.778320f, 0.798828f, 0.817383f, 0.833984f, 0.848145f, 0.861816f, 0.874023f, 0.883789f,
+ 0.893555f, 0.902344f, 0.910645f, 0.916992f, 0.922852f, 0.929688f, 0.934570f, 0.938965f,
+ 0.944336f, 0.948730f, 0.951660f, 0.956543f, 0.959473f, 0.962891f, 0.965820f, 0.968262f,
+ 0.970703f, 0.974121f, 0.976074f, 0.978516f, 0.979980f, 0.981934f, 0.983887f, 0.985840f,
+ 0.987305f, 0.988281f, 0.994629f, 0.995117f, 0.995117f, 0.994629f, 0.994629f, 0.994141f,
+ 0.002726f, 0.009560f, 0.017136f, 0.026871f, 0.037415f, 0.050079f, 0.066406f, 0.084717f,
+ 0.107849f, 0.133423f, 0.164062f, 0.198853f, 0.238281f, 0.281250f, 0.327148f, 0.375977f,
+ 0.424805f, 0.473877f, 0.521973f, 0.564941f, 0.606934f, 0.644531f, 0.679199f, 0.710449f,
+ 0.738770f, 0.764160f, 0.786133f, 0.805664f, 0.824219f, 0.838867f, 0.853516f, 0.866211f,
+ 0.876953f, 0.887695f, 0.896484f, 0.905762f, 0.912598f, 0.919922f, 0.925781f, 0.932129f,
+ 0.937500f, 0.942383f, 0.946777f, 0.951660f, 0.955078f, 0.958984f, 0.961426f, 0.965332f,
+ 0.967773f, 0.970703f, 0.972656f, 0.975586f, 0.978027f, 0.979492f, 0.981934f, 0.983887f,
+ 0.984863f, 0.986816f, 0.994629f, 0.994629f, 0.994629f, 0.994141f, 0.994141f, 0.993652f,
+ 0.002487f, 0.007553f, 0.013863f, 0.021439f, 0.029755f, 0.040771f, 0.052643f, 0.067444f,
+ 0.084473f, 0.104980f, 0.128784f, 0.157227f, 0.189087f, 0.224609f, 0.265381f, 0.308838f,
+ 0.354004f, 0.401611f, 0.450439f, 0.496582f, 0.541992f, 0.583984f, 0.623047f, 0.660645f,
+ 0.693359f, 0.722168f, 0.749512f, 0.772949f, 0.793457f, 0.812988f, 0.830078f, 0.845215f,
+ 0.859375f, 0.871094f, 0.882812f, 0.892090f, 0.900879f, 0.908691f, 0.916504f, 0.922852f,
+ 0.930176f, 0.935547f, 0.940430f, 0.944824f, 0.949219f, 0.952637f, 0.956543f, 0.960449f,
+ 0.963867f, 0.967285f, 0.970215f, 0.972656f, 0.974609f, 0.977539f, 0.979492f, 0.981934f,
+ 0.983887f, 0.985352f, 0.993652f, 0.994141f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
+ 0.001893f, 0.006641f, 0.011551f, 0.017319f, 0.024612f, 0.032959f, 0.042023f, 0.053772f,
+ 0.067444f, 0.083435f, 0.102356f, 0.123840f, 0.150024f, 0.179688f, 0.213501f, 0.250488f,
+ 0.291992f, 0.335938f, 0.381592f, 0.427246f, 0.473877f, 0.518555f, 0.563477f, 0.603027f,
+ 0.640625f, 0.676270f, 0.707031f, 0.735352f, 0.760254f, 0.782715f, 0.802734f, 0.821777f,
+ 0.838379f, 0.851562f, 0.865234f, 0.876953f, 0.886719f, 0.896484f, 0.905273f, 0.913086f,
+ 0.921387f, 0.927734f, 0.933105f, 0.938477f, 0.942871f, 0.948242f, 0.951660f, 0.955566f,
+ 0.959961f, 0.963867f, 0.966309f, 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979492f,
+ 0.981934f, 0.983887f, 0.993164f, 0.993652f, 0.993164f, 0.993164f, 0.993164f, 0.992676f,
+ 0.001740f, 0.005634f, 0.009407f, 0.014992f, 0.020157f, 0.026840f, 0.035156f, 0.043793f,
+ 0.054718f, 0.067505f, 0.082092f, 0.099731f, 0.120239f, 0.143921f, 0.171265f, 0.202393f,
+ 0.237915f, 0.276367f, 0.318848f, 0.362793f, 0.407959f, 0.454346f, 0.499023f, 0.542480f,
+ 0.583984f, 0.623535f, 0.659180f, 0.691895f, 0.721680f, 0.748047f, 0.772461f, 0.793457f,
+ 0.812988f, 0.829102f, 0.845215f, 0.859863f, 0.872559f, 0.883789f, 0.893555f, 0.902344f,
+ 0.911133f, 0.918457f, 0.924805f, 0.930664f, 0.937012f, 0.941895f, 0.947266f, 0.951172f,
+ 0.956055f, 0.959473f, 0.962402f, 0.966309f, 0.968750f, 0.972168f, 0.974609f, 0.977051f,
+ 0.979492f, 0.981934f, 0.992188f, 0.992676f, 0.992676f, 0.992676f, 0.992188f, 0.992676f,
+ 0.001502f, 0.004482f, 0.008278f, 0.012276f, 0.016800f, 0.022644f, 0.029129f, 0.036194f,
+ 0.045197f, 0.055298f, 0.067017f, 0.080750f, 0.096863f, 0.115906f, 0.138184f, 0.163940f,
+ 0.192993f, 0.225952f, 0.262695f, 0.302490f, 0.344971f, 0.389648f, 0.434814f, 0.480469f,
+ 0.523926f, 0.566406f, 0.605957f, 0.643066f, 0.677246f, 0.708496f, 0.736816f, 0.761719f,
+ 0.784668f, 0.804688f, 0.823242f, 0.840332f, 0.854004f, 0.867188f, 0.878906f, 0.890137f,
+ 0.898438f, 0.907715f, 0.916016f, 0.922852f, 0.930176f, 0.935547f, 0.940918f, 0.946289f,
+ 0.950684f, 0.955078f, 0.959473f, 0.961914f, 0.966309f, 0.969238f, 0.972168f, 0.974609f,
+ 0.977539f, 0.979492f, 0.991211f, 0.992188f, 0.991699f, 0.992188f, 0.991699f, 0.991211f,
+ 0.001411f, 0.003645f, 0.007160f, 0.010414f, 0.014397f, 0.018677f, 0.024338f, 0.030426f,
+ 0.037384f, 0.045654f, 0.055054f, 0.066101f, 0.079529f, 0.094543f, 0.112793f, 0.133057f,
+ 0.157227f, 0.183960f, 0.215210f, 0.250488f, 0.288086f, 0.329102f, 0.372314f, 0.416992f,
+ 0.461914f, 0.505859f, 0.549316f, 0.589355f, 0.627930f, 0.664062f, 0.695801f, 0.725098f,
+ 0.752441f, 0.775879f, 0.797363f, 0.815918f, 0.833984f, 0.849121f, 0.863281f, 0.875488f,
+ 0.886230f, 0.895996f, 0.904785f, 0.914062f, 0.920898f, 0.928223f, 0.935059f, 0.940918f,
+ 0.945312f, 0.950195f, 0.954102f, 0.958984f, 0.962402f, 0.966309f, 0.969238f, 0.972656f,
+ 0.974609f, 0.977539f, 0.990234f, 0.992188f, 0.991211f, 0.991211f, 0.990723f, 0.991211f,
+ 0.000926f, 0.003523f, 0.006207f, 0.008949f, 0.012718f, 0.016312f, 0.020447f, 0.025467f,
+ 0.031128f, 0.037994f, 0.045532f, 0.054901f, 0.065430f, 0.077576f, 0.091797f, 0.109131f,
+ 0.128418f, 0.151245f, 0.176636f, 0.206055f, 0.238525f, 0.275146f, 0.314697f, 0.357178f,
+ 0.400391f, 0.445312f, 0.489746f, 0.531738f, 0.574219f, 0.613281f, 0.650391f, 0.683594f,
+ 0.714355f, 0.742188f, 0.768066f, 0.790039f, 0.810059f, 0.828125f, 0.843262f, 0.858398f,
+ 0.871582f, 0.883789f, 0.893555f, 0.903809f, 0.912598f, 0.919434f, 0.926758f, 0.933594f,
+ 0.939453f, 0.944336f, 0.950195f, 0.954590f, 0.958008f, 0.962402f, 0.966309f, 0.969727f,
+ 0.972656f, 0.975586f, 0.989746f, 0.990723f, 0.990723f, 0.990234f, 0.990234f, 0.990234f,
+ 0.001140f, 0.003021f, 0.005527f, 0.008102f, 0.010445f, 0.013977f, 0.017349f, 0.021637f,
+ 0.026535f, 0.031677f, 0.038330f, 0.045776f, 0.054382f, 0.064392f, 0.076233f, 0.089844f,
+ 0.105713f, 0.123840f, 0.145020f, 0.169556f, 0.196899f, 0.229248f, 0.263672f, 0.302002f,
+ 0.342529f, 0.385986f, 0.429932f, 0.473877f, 0.517578f, 0.560547f, 0.600586f, 0.638184f,
+ 0.672852f, 0.704590f, 0.733398f, 0.759277f, 0.782715f, 0.803711f, 0.823242f, 0.840820f,
+ 0.854980f, 0.869141f, 0.881348f, 0.892090f, 0.902344f, 0.910645f, 0.919922f, 0.927246f,
+ 0.933105f, 0.938965f, 0.944824f, 0.949707f, 0.954102f, 0.959473f, 0.962891f, 0.966309f,
+ 0.969727f, 0.972168f, 0.988770f, 0.990234f, 0.989746f, 0.989746f, 0.989746f, 0.989258f,
+ 0.000870f, 0.002666f, 0.004578f, 0.006737f, 0.009430f, 0.012077f, 0.015381f, 0.018463f,
+ 0.022293f, 0.027313f, 0.032654f, 0.038727f, 0.045746f, 0.053619f, 0.063232f, 0.074524f,
+ 0.087219f, 0.102356f, 0.119324f, 0.139648f, 0.162842f, 0.189941f, 0.219482f, 0.253174f,
+ 0.289795f, 0.329346f, 0.372070f, 0.415039f, 0.459717f, 0.503418f, 0.546387f, 0.587402f,
+ 0.625977f, 0.661621f, 0.694336f, 0.725586f, 0.752441f, 0.776855f, 0.798828f, 0.818359f,
+ 0.837402f, 0.852539f, 0.866699f, 0.878906f, 0.891113f, 0.900879f, 0.910156f, 0.918457f,
+ 0.926270f, 0.932617f, 0.938965f, 0.944824f, 0.950195f, 0.955078f, 0.958984f, 0.962891f,
+ 0.966797f, 0.970703f, 0.987793f, 0.988770f, 0.989258f, 0.989258f, 0.988770f, 0.988770f,
+ 0.000835f, 0.002302f, 0.004078f, 0.005802f, 0.008026f, 0.010490f, 0.013153f, 0.016235f,
+ 0.019485f, 0.023636f, 0.027847f, 0.033081f, 0.038849f, 0.045441f, 0.053253f, 0.062500f,
+ 0.072571f, 0.085205f, 0.098999f, 0.115662f, 0.135254f, 0.156860f, 0.182373f, 0.211060f,
+ 0.243042f, 0.279053f, 0.318115f, 0.359619f, 0.402832f, 0.447021f, 0.490234f, 0.533691f,
+ 0.575195f, 0.615234f, 0.651855f, 0.686035f, 0.717285f, 0.746094f, 0.771484f, 0.793945f,
+ 0.813965f, 0.833496f, 0.848633f, 0.864258f, 0.877930f, 0.889648f, 0.900391f, 0.909180f,
+ 0.918945f, 0.926270f, 0.932129f, 0.939453f, 0.945312f, 0.950684f, 0.955566f, 0.959473f,
+ 0.963867f, 0.967773f, 0.987305f, 0.988281f, 0.988281f, 0.988281f, 0.988281f, 0.987793f,
+ 0.000815f, 0.001984f, 0.003475f, 0.005302f, 0.007103f, 0.009354f, 0.011528f, 0.013977f,
+ 0.017197f, 0.020111f, 0.023788f, 0.027771f, 0.033447f, 0.038452f, 0.045013f, 0.052704f,
+ 0.061066f, 0.071228f, 0.082886f, 0.096313f, 0.112488f, 0.130737f, 0.151245f, 0.175659f,
+ 0.203125f, 0.234619f, 0.269043f, 0.306885f, 0.347656f, 0.390381f, 0.434570f, 0.478760f,
+ 0.522461f, 0.564453f, 0.605957f, 0.644043f, 0.678223f, 0.710449f, 0.739746f, 0.766602f,
+ 0.791016f, 0.811035f, 0.831055f, 0.847168f, 0.862793f, 0.875977f, 0.888672f, 0.899414f,
+ 0.909180f, 0.917480f, 0.926270f, 0.933105f, 0.939941f, 0.945801f, 0.950684f, 0.955566f,
+ 0.960938f, 0.964844f, 0.985840f, 0.987305f, 0.987793f, 0.987305f, 0.987305f, 0.987305f,
+ 0.000587f, 0.002005f, 0.003122f, 0.004707f, 0.006283f, 0.007778f, 0.009972f, 0.012581f,
+ 0.014435f, 0.017426f, 0.020691f, 0.024475f, 0.028519f, 0.033203f, 0.038513f, 0.044708f,
+ 0.051727f, 0.060028f, 0.069763f, 0.080627f, 0.093506f, 0.109009f, 0.125977f, 0.146362f,
+ 0.169678f, 0.196533f, 0.226685f, 0.259766f, 0.297119f, 0.337646f, 0.380127f, 0.424072f,
+ 0.468018f, 0.512207f, 0.555176f, 0.596680f, 0.635254f, 0.671387f, 0.704590f, 0.734863f,
+ 0.762207f, 0.787109f, 0.809082f, 0.828613f, 0.846191f, 0.860840f, 0.875977f, 0.888184f,
+ 0.899902f, 0.908691f, 0.918457f, 0.926270f, 0.934082f, 0.940430f, 0.947266f, 0.951660f,
+ 0.958008f, 0.961914f, 0.984863f, 0.986328f, 0.986816f, 0.986816f, 0.986328f, 0.986328f,
+ 0.000475f, 0.001671f, 0.003019f, 0.004379f, 0.005592f, 0.006882f, 0.008682f, 0.010757f,
+ 0.012856f, 0.015343f, 0.018112f, 0.021164f, 0.024353f, 0.028595f, 0.033020f, 0.038086f,
+ 0.044006f, 0.050812f, 0.058594f, 0.067993f, 0.078735f, 0.091248f, 0.105530f, 0.122009f,
+ 0.142212f, 0.164062f, 0.189697f, 0.219238f, 0.251953f, 0.288330f, 0.328125f, 0.369629f,
+ 0.413818f, 0.458008f, 0.503418f, 0.547363f, 0.588867f, 0.628418f, 0.665039f, 0.699707f,
+ 0.730469f, 0.758301f, 0.784668f, 0.807129f, 0.826660f, 0.844727f, 0.862305f, 0.875977f,
+ 0.888672f, 0.900879f, 0.910156f, 0.919434f, 0.927734f, 0.935059f, 0.941406f, 0.947754f,
+ 0.953125f, 0.958496f, 0.983887f, 0.985352f, 0.985352f, 0.985352f, 0.984863f, 0.985352f,
+ 0.000325f, 0.001517f, 0.002554f, 0.003811f, 0.004990f, 0.006638f, 0.007706f, 0.009399f,
+ 0.011177f, 0.013580f, 0.015671f, 0.018478f, 0.021393f, 0.024612f, 0.028442f, 0.032990f,
+ 0.037750f, 0.043427f, 0.050354f, 0.057861f, 0.066101f, 0.076294f, 0.088684f, 0.102417f,
+ 0.119080f, 0.137451f, 0.159058f, 0.183838f, 0.212524f, 0.244385f, 0.280273f, 0.319336f,
+ 0.361084f, 0.405029f, 0.449707f, 0.494873f, 0.539551f, 0.582031f, 0.622559f, 0.660156f,
+ 0.695801f, 0.727539f, 0.756348f, 0.782715f, 0.805664f, 0.826172f, 0.845215f, 0.861328f,
+ 0.875977f, 0.889648f, 0.901367f, 0.910645f, 0.920410f, 0.928711f, 0.937012f, 0.942871f,
+ 0.949219f, 0.955078f, 0.982422f, 0.983887f, 0.984375f, 0.984375f, 0.983887f, 0.983887f,
+ 0.000349f, 0.001533f, 0.002413f, 0.003326f, 0.004463f, 0.005524f, 0.006954f, 0.008202f,
+ 0.010025f, 0.011864f, 0.013924f, 0.015884f, 0.018478f, 0.021484f, 0.024658f, 0.028671f,
+ 0.032562f, 0.037170f, 0.042969f, 0.049194f, 0.056641f, 0.065063f, 0.074951f, 0.086182f,
+ 0.099731f, 0.115662f, 0.133789f, 0.154175f, 0.178589f, 0.206421f, 0.237671f, 0.272949f,
+ 0.312012f, 0.352783f, 0.396973f, 0.442627f, 0.487793f, 0.532227f, 0.576660f, 0.617188f,
+ 0.657227f, 0.692383f, 0.725586f, 0.754395f, 0.780762f, 0.805664f, 0.826172f, 0.845215f,
+ 0.861816f, 0.876465f, 0.890137f, 0.902344f, 0.912598f, 0.921875f, 0.930176f, 0.937988f,
+ 0.945312f, 0.952148f, 0.981445f, 0.982910f, 0.982910f, 0.983398f, 0.983398f, 0.983398f,
+ 0.000475f, 0.001141f, 0.002058f, 0.002846f, 0.004120f, 0.005013f, 0.006207f, 0.007664f,
+ 0.009193f, 0.010368f, 0.012222f, 0.014404f, 0.016403f, 0.018799f, 0.021439f, 0.024567f,
+ 0.028076f, 0.032379f, 0.036652f, 0.042145f, 0.048157f, 0.055389f, 0.063660f, 0.073059f,
+ 0.083740f, 0.097046f, 0.112366f, 0.129517f, 0.149780f, 0.173584f, 0.200684f, 0.231812f,
+ 0.266357f, 0.304688f, 0.346680f, 0.390137f, 0.435547f, 0.481445f, 0.526367f, 0.572266f,
+ 0.613770f, 0.653320f, 0.690430f, 0.723633f, 0.754395f, 0.781250f, 0.806152f, 0.826172f,
+ 0.847168f, 0.862793f, 0.878906f, 0.892090f, 0.904297f, 0.914551f, 0.924316f, 0.933105f,
+ 0.940430f, 0.947754f, 0.979492f, 0.981934f, 0.981934f, 0.981934f, 0.981445f, 0.981445f,
+ 0.000239f, 0.000882f, 0.001744f, 0.002878f, 0.003819f, 0.004532f, 0.005550f, 0.006653f,
+ 0.007942f, 0.009277f, 0.010628f, 0.012421f, 0.014397f, 0.016312f, 0.018845f, 0.021576f,
+ 0.024536f, 0.027817f, 0.031860f, 0.036346f, 0.041595f, 0.047333f, 0.054138f, 0.062317f,
+ 0.071350f, 0.081970f, 0.094299f, 0.109070f, 0.126221f, 0.146118f, 0.169067f, 0.195801f,
+ 0.226196f, 0.260742f, 0.298584f, 0.340088f, 0.384277f, 0.429688f, 0.476807f, 0.522461f,
+ 0.568359f, 0.611328f, 0.651855f, 0.689453f, 0.723633f, 0.754395f, 0.782715f, 0.807617f,
+ 0.829590f, 0.848145f, 0.865723f, 0.880859f, 0.894531f, 0.906738f, 0.917969f, 0.927246f,
+ 0.936035f, 0.943359f, 0.978027f, 0.979980f, 0.980469f, 0.980469f, 0.980469f, 0.980469f,
+ 0.000240f, 0.000948f, 0.001495f, 0.002592f, 0.003241f, 0.004055f, 0.004856f, 0.006111f,
+ 0.007133f, 0.008125f, 0.009445f, 0.011108f, 0.012474f, 0.014374f, 0.016586f, 0.018784f,
+ 0.021286f, 0.024475f, 0.027481f, 0.031403f, 0.035828f, 0.040710f, 0.046204f, 0.052704f,
+ 0.060577f, 0.069519f, 0.079651f, 0.092224f, 0.106506f, 0.122986f, 0.142456f, 0.165161f,
+ 0.191284f, 0.221924f, 0.255615f, 0.293457f, 0.335205f, 0.379395f, 0.425537f, 0.472900f,
+ 0.519531f, 0.566406f, 0.610840f, 0.652344f, 0.689941f, 0.724609f, 0.755371f, 0.784180f,
+ 0.808594f, 0.831055f, 0.851562f, 0.869141f, 0.884277f, 0.897461f, 0.909668f, 0.920410f,
+ 0.930176f, 0.937988f, 0.976562f, 0.979004f, 0.979492f, 0.979492f, 0.979492f, 0.979492f,
+ 0.000302f, 0.000863f, 0.001315f, 0.002195f, 0.002905f, 0.003592f, 0.004784f, 0.005478f,
+ 0.006199f, 0.007389f, 0.008545f, 0.009811f, 0.011185f, 0.012787f, 0.014603f, 0.016342f,
+ 0.018784f, 0.021347f, 0.024033f, 0.027496f, 0.031006f, 0.034790f, 0.039856f, 0.045288f,
+ 0.051636f, 0.059052f, 0.067566f, 0.078003f, 0.089905f, 0.103760f, 0.119934f, 0.139282f,
+ 0.161865f, 0.187622f, 0.217407f, 0.251221f, 0.288818f, 0.330811f, 0.375244f, 0.422607f,
+ 0.470703f, 0.518066f, 0.565430f, 0.609863f, 0.651855f, 0.691406f, 0.726562f, 0.758301f,
+ 0.787109f, 0.812500f, 0.835449f, 0.855957f, 0.872559f, 0.887695f, 0.901367f, 0.913574f,
+ 0.923828f, 0.933105f, 0.975098f, 0.977539f, 0.977539f, 0.977539f, 0.978027f, 0.977051f,
+ 0.000240f, 0.000808f, 0.001537f, 0.002106f, 0.002493f, 0.003729f, 0.004036f, 0.004982f,
+ 0.005539f, 0.006454f, 0.007526f, 0.008690f, 0.009987f, 0.011421f, 0.012894f, 0.014618f,
+ 0.016464f, 0.018539f, 0.021118f, 0.023865f, 0.026794f, 0.030487f, 0.034241f, 0.038879f,
+ 0.044067f, 0.050690f, 0.057678f, 0.066040f, 0.076111f, 0.087524f, 0.101379f, 0.117737f,
+ 0.136353f, 0.158325f, 0.183594f, 0.213501f, 0.247192f, 0.284912f, 0.327393f, 0.372803f,
+ 0.420410f, 0.468750f, 0.518066f, 0.565430f, 0.611328f, 0.654297f, 0.694336f, 0.729980f,
+ 0.762207f, 0.791504f, 0.817383f, 0.839844f, 0.859863f, 0.876953f, 0.891602f, 0.905762f,
+ 0.917480f, 0.928711f, 0.973633f, 0.975098f, 0.976562f, 0.975586f, 0.976562f, 0.976562f,
+ 0.000240f, 0.000587f, 0.001223f, 0.001691f, 0.002499f, 0.003008f, 0.003643f, 0.004295f,
+ 0.004795f, 0.005726f, 0.006649f, 0.007671f, 0.008766f, 0.010002f, 0.011307f, 0.012764f,
+ 0.014465f, 0.016388f, 0.018387f, 0.020599f, 0.023453f, 0.026291f, 0.029572f, 0.033417f,
+ 0.037964f, 0.043427f, 0.049316f, 0.056519f, 0.064819f, 0.074219f, 0.085693f, 0.099121f,
+ 0.115112f, 0.133301f, 0.155273f, 0.180420f, 0.210205f, 0.244751f, 0.282715f, 0.324951f,
+ 0.371338f, 0.419434f, 0.468994f, 0.518555f, 0.566895f, 0.613770f, 0.658203f, 0.698242f,
+ 0.735352f, 0.766602f, 0.796875f, 0.821289f, 0.844238f, 0.863770f, 0.881836f, 0.896973f,
+ 0.910156f, 0.922363f, 0.971191f, 0.974121f, 0.974609f, 0.974121f, 0.974609f, 0.974609f,
+ 0.000228f, 0.000671f, 0.001122f, 0.001607f, 0.002291f, 0.002836f, 0.003319f, 0.003817f,
+ 0.004509f, 0.005253f, 0.005894f, 0.006840f, 0.007820f, 0.008972f, 0.010086f, 0.011391f,
+ 0.012848f, 0.014328f, 0.016266f, 0.018158f, 0.020447f, 0.022720f, 0.026031f, 0.029053f,
+ 0.032593f, 0.037109f, 0.042236f, 0.048340f, 0.055115f, 0.063049f, 0.072632f, 0.083801f,
+ 0.097351f, 0.112488f, 0.130493f, 0.152222f, 0.178101f, 0.208008f, 0.241943f, 0.280762f,
+ 0.323730f, 0.370117f, 0.419434f, 0.470459f, 0.520996f, 0.570801f, 0.617676f, 0.663086f,
+ 0.704102f, 0.740234f, 0.773438f, 0.802246f, 0.829102f, 0.850098f, 0.870117f, 0.887695f,
+ 0.902832f, 0.916016f, 0.969238f, 0.972168f, 0.972168f, 0.972656f, 0.972656f, 0.972168f,
+ 0.000121f, 0.000526f, 0.001092f, 0.001670f, 0.001744f, 0.002420f, 0.002945f, 0.003237f,
+ 0.004013f, 0.004894f, 0.005421f, 0.005932f, 0.006996f, 0.007904f, 0.008873f, 0.009995f,
+ 0.011391f, 0.012756f, 0.014053f, 0.015884f, 0.017715f, 0.019775f, 0.022324f, 0.025406f,
+ 0.028290f, 0.032349f, 0.036560f, 0.041412f, 0.047058f, 0.053772f, 0.061493f, 0.070862f,
+ 0.081848f, 0.094666f, 0.110229f, 0.128662f, 0.150024f, 0.175903f, 0.205566f, 0.239990f,
+ 0.279785f, 0.323486f, 0.370850f, 0.421143f, 0.473633f, 0.524902f, 0.576172f, 0.625000f,
+ 0.668457f, 0.710938f, 0.748535f, 0.781250f, 0.810059f, 0.835449f, 0.857910f, 0.877441f,
+ 0.894531f, 0.908691f, 0.966797f, 0.970215f, 0.970703f, 0.970703f, 0.970703f, 0.970215f,
+ 0.000127f, 0.000521f, 0.001083f, 0.001460f, 0.001684f, 0.002111f, 0.002563f, 0.003048f,
+ 0.003618f, 0.004124f, 0.004936f, 0.005543f, 0.006340f, 0.007111f, 0.008049f, 0.008774f,
+ 0.009865f, 0.011162f, 0.012360f, 0.013840f, 0.015465f, 0.017181f, 0.019531f, 0.021973f,
+ 0.024582f, 0.027847f, 0.031342f, 0.035706f, 0.040100f, 0.045990f, 0.052521f, 0.060089f,
+ 0.069214f, 0.080017f, 0.093079f, 0.108521f, 0.126709f, 0.148071f, 0.174072f, 0.204224f,
+ 0.239502f, 0.279541f, 0.324219f, 0.373047f, 0.424805f, 0.477295f, 0.530762f, 0.583008f,
+ 0.632324f, 0.677246f, 0.719727f, 0.756348f, 0.789551f, 0.819336f, 0.842773f, 0.866211f,
+ 0.885742f, 0.901855f, 0.965332f, 0.967773f, 0.968262f, 0.967773f, 0.968750f, 0.968262f,
+ 0.000244f, 0.000397f, 0.001001f, 0.001181f, 0.001642f, 0.001872f, 0.002460f, 0.002712f,
+ 0.003061f, 0.003723f, 0.004520f, 0.005043f, 0.005547f, 0.006451f, 0.007057f, 0.007828f,
+ 0.008942f, 0.009872f, 0.010857f, 0.012131f, 0.013557f, 0.015198f, 0.017059f, 0.019241f,
+ 0.021454f, 0.024048f, 0.027069f, 0.030594f, 0.034332f, 0.039001f, 0.044952f, 0.050873f,
+ 0.058716f, 0.067505f, 0.078369f, 0.091309f, 0.106506f, 0.124695f, 0.146484f, 0.172852f,
+ 0.203369f, 0.239014f, 0.280273f, 0.326172f, 0.376465f, 0.429443f, 0.483643f, 0.538574f,
+ 0.591309f, 0.641602f, 0.687500f, 0.729492f, 0.766602f, 0.800293f, 0.828613f, 0.854004f,
+ 0.874512f, 0.893555f, 0.961914f, 0.965332f, 0.965820f, 0.966309f, 0.966309f, 0.965820f,
+ 0.000243f, 0.000453f, 0.000888f, 0.001245f, 0.001342f, 0.001847f, 0.002060f, 0.002541f,
+ 0.002991f, 0.003355f, 0.003679f, 0.004379f, 0.005177f, 0.005413f, 0.006283f, 0.007038f,
+ 0.007896f, 0.008507f, 0.009552f, 0.010628f, 0.011909f, 0.013306f, 0.015038f, 0.016388f,
+ 0.018433f, 0.020752f, 0.023254f, 0.026413f, 0.029617f, 0.033447f, 0.037842f, 0.043701f,
+ 0.049896f, 0.057190f, 0.066101f, 0.076660f, 0.089600f, 0.104553f, 0.123230f, 0.145386f,
+ 0.171387f, 0.202637f, 0.239624f, 0.281982f, 0.329346f, 0.380859f, 0.436035f, 0.491943f,
+ 0.547852f, 0.602539f, 0.653809f, 0.699707f, 0.741699f, 0.778320f, 0.811035f, 0.838867f,
+ 0.862793f, 0.884766f, 0.959961f, 0.963379f, 0.963379f, 0.963379f, 0.964355f, 0.963379f,
+ 0.000241f, 0.000452f, 0.000798f, 0.001119f, 0.001220f, 0.001430f, 0.001902f, 0.002277f,
+ 0.002737f, 0.002893f, 0.003624f, 0.003937f, 0.004436f, 0.005089f, 0.005669f, 0.006226f,
+ 0.006680f, 0.007519f, 0.008568f, 0.009384f, 0.010422f, 0.011795f, 0.012840f, 0.014526f,
+ 0.016235f, 0.017929f, 0.020218f, 0.022736f, 0.025146f, 0.028580f, 0.032684f, 0.036896f,
+ 0.042511f, 0.048431f, 0.055634f, 0.064453f, 0.075317f, 0.088196f, 0.103333f, 0.121948f,
+ 0.144287f, 0.171143f, 0.203491f, 0.241577f, 0.285156f, 0.334229f, 0.387939f, 0.444580f,
+ 0.501953f, 0.559570f, 0.614746f, 0.666504f, 0.712402f, 0.755371f, 0.791504f, 0.823242f,
+ 0.851074f, 0.875000f, 0.956543f, 0.959961f, 0.960938f, 0.960449f, 0.960449f, 0.960449f,
+ 0.000000f, 0.000263f, 0.000693f, 0.000873f, 0.001183f, 0.001447f, 0.001476f, 0.002068f,
+ 0.002171f, 0.002857f, 0.003164f, 0.003542f, 0.003778f, 0.004326f, 0.004906f, 0.005436f,
+ 0.006126f, 0.006687f, 0.007229f, 0.008377f, 0.009232f, 0.010223f, 0.011436f, 0.012527f,
+ 0.013832f, 0.015747f, 0.017365f, 0.019363f, 0.021667f, 0.024231f, 0.027695f, 0.031769f,
+ 0.035889f, 0.041016f, 0.047028f, 0.054504f, 0.063110f, 0.073975f, 0.086487f, 0.101807f,
+ 0.120972f, 0.143555f, 0.171753f, 0.204956f, 0.244263f, 0.289551f, 0.340576f, 0.396484f,
+ 0.455078f, 0.514648f, 0.573730f, 0.630371f, 0.681152f, 0.729004f, 0.770020f, 0.806641f,
+ 0.837402f, 0.863770f, 0.953613f, 0.956543f, 0.957520f, 0.957031f, 0.957031f, 0.958008f,
+ 0.000000f, 0.000356f, 0.000641f, 0.000870f, 0.000998f, 0.001134f, 0.001495f, 0.001724f,
+ 0.002436f, 0.002478f, 0.002775f, 0.003113f, 0.003435f, 0.003864f, 0.004314f, 0.004704f,
+ 0.005276f, 0.005886f, 0.006599f, 0.007309f, 0.008003f, 0.008987f, 0.009987f, 0.010941f,
+ 0.012192f, 0.013466f, 0.015030f, 0.016708f, 0.018906f, 0.021103f, 0.023788f, 0.026886f,
+ 0.030457f, 0.034943f, 0.040009f, 0.045959f, 0.053162f, 0.061920f, 0.072144f, 0.085205f,
+ 0.101257f, 0.120422f, 0.143555f, 0.172363f, 0.206909f, 0.248047f, 0.295410f, 0.349121f,
+ 0.407715f, 0.468750f, 0.530762f, 0.589844f, 0.647949f, 0.699707f, 0.746094f, 0.786621f,
+ 0.823242f, 0.852051f, 0.950195f, 0.953125f, 0.954102f, 0.954102f, 0.954102f, 0.954102f,
+ 0.000231f, 0.000449f, 0.000516f, 0.000760f, 0.000868f, 0.001152f, 0.001403f, 0.001773f,
+ 0.002165f, 0.002245f, 0.002550f, 0.002783f, 0.003277f, 0.003660f, 0.003782f, 0.004120f,
+ 0.004631f, 0.005268f, 0.005795f, 0.006344f, 0.007053f, 0.007835f, 0.008598f, 0.009460f,
+ 0.010689f, 0.011551f, 0.012726f, 0.014359f, 0.016052f, 0.017975f, 0.020218f, 0.022812f,
+ 0.025803f, 0.029251f, 0.033386f, 0.038574f, 0.044556f, 0.051941f, 0.060577f, 0.071045f,
+ 0.084106f, 0.100342f, 0.119751f, 0.144043f, 0.174194f, 0.209961f, 0.253418f, 0.303467f,
+ 0.359619f, 0.420898f, 0.483887f, 0.547852f, 0.609375f, 0.667480f, 0.719727f, 0.765625f,
+ 0.804688f, 0.839844f, 0.946289f, 0.949707f, 0.950195f, 0.950684f, 0.950684f, 0.950195f,
+ 0.000201f, 0.000336f, 0.000452f, 0.000627f, 0.000793f, 0.000966f, 0.001134f, 0.001578f,
+ 0.001790f, 0.001896f, 0.002254f, 0.002464f, 0.002825f, 0.003012f, 0.003414f, 0.003626f,
+ 0.004131f, 0.004608f, 0.005058f, 0.005642f, 0.006191f, 0.006771f, 0.007378f, 0.008057f,
+ 0.009132f, 0.009918f, 0.010826f, 0.012314f, 0.013794f, 0.015381f, 0.017197f, 0.019257f,
+ 0.021912f, 0.024841f, 0.028259f, 0.032318f, 0.037262f, 0.043427f, 0.050537f, 0.059021f,
+ 0.070007f, 0.083191f, 0.099609f, 0.120239f, 0.145508f, 0.176636f, 0.214600f, 0.260254f,
+ 0.313232f, 0.372803f, 0.437012f, 0.503418f, 0.568359f, 0.631836f, 0.688965f, 0.741211f,
+ 0.786621f, 0.825195f, 0.941406f, 0.946289f, 0.946289f, 0.946777f, 0.946289f, 0.947266f,
+ 0.000000f, 0.000317f, 0.000445f, 0.000453f, 0.000781f, 0.000794f, 0.001183f, 0.001289f,
+ 0.001479f, 0.001832f, 0.001874f, 0.002256f, 0.002270f, 0.002716f, 0.002960f, 0.003273f,
+ 0.003630f, 0.003948f, 0.004467f, 0.004833f, 0.005451f, 0.005962f, 0.006367f, 0.007088f,
+ 0.007717f, 0.008400f, 0.009506f, 0.010445f, 0.011658f, 0.012993f, 0.014618f, 0.016357f,
+ 0.018524f, 0.021210f, 0.023712f, 0.027252f, 0.031219f, 0.036041f, 0.041962f, 0.049194f,
+ 0.057892f, 0.068604f, 0.082642f, 0.099304f, 0.120728f, 0.147217f, 0.180054f, 0.221191f,
+ 0.269287f, 0.325928f, 0.388916f, 0.457275f, 0.525391f, 0.593262f, 0.657715f, 0.714355f,
+ 0.766113f, 0.809082f, 0.937500f, 0.940918f, 0.941895f, 0.941895f, 0.941895f, 0.942383f,
+ 0.000243f, 0.000238f, 0.000411f, 0.000532f, 0.000530f, 0.000764f, 0.000853f, 0.001171f,
+ 0.001417f, 0.001545f, 0.001799f, 0.001900f, 0.002094f, 0.002354f, 0.002577f, 0.002703f,
+ 0.003155f, 0.003428f, 0.003809f, 0.004227f, 0.004677f, 0.004997f, 0.005386f, 0.005913f,
+ 0.006741f, 0.007225f, 0.008057f, 0.008873f, 0.009819f, 0.011101f, 0.012253f, 0.013725f,
+ 0.015488f, 0.017410f, 0.019791f, 0.022598f, 0.025635f, 0.030014f, 0.034973f, 0.040527f,
+ 0.047729f, 0.056702f, 0.067505f, 0.081848f, 0.099609f, 0.121521f, 0.149902f, 0.185181f,
+ 0.228516f, 0.280762f, 0.341553f, 0.408936f, 0.480225f, 0.552246f, 0.622070f, 0.686035f,
+ 0.742188f, 0.792480f, 0.932129f, 0.935547f, 0.937012f, 0.937012f, 0.936523f, 0.937500f,
+ 0.000000f, 0.000232f, 0.000330f, 0.000512f, 0.000523f, 0.000907f, 0.000953f, 0.001018f,
+ 0.001234f, 0.001344f, 0.001610f, 0.001612f, 0.001845f, 0.002054f, 0.002218f, 0.002453f,
+ 0.002829f, 0.003105f, 0.003300f, 0.003712f, 0.003853f, 0.004280f, 0.004631f, 0.005112f,
+ 0.005665f, 0.006279f, 0.006779f, 0.007481f, 0.008362f, 0.009270f, 0.010338f, 0.011505f,
+ 0.012848f, 0.014549f, 0.016403f, 0.018936f, 0.021622f, 0.024750f, 0.028900f, 0.033447f,
+ 0.039185f, 0.046448f, 0.055603f, 0.067078f, 0.081238f, 0.100037f, 0.123230f, 0.153564f,
+ 0.191284f, 0.238525f, 0.295166f, 0.361084f, 0.432861f, 0.507812f, 0.582520f, 0.653320f,
+ 0.717285f, 0.772461f, 0.926270f, 0.931152f, 0.931152f, 0.932129f, 0.932129f, 0.932129f,
+ 0.000118f, 0.000219f, 0.000227f, 0.000405f, 0.000689f, 0.000726f, 0.000910f, 0.000847f,
+ 0.001072f, 0.001114f, 0.001388f, 0.001447f, 0.001656f, 0.001811f, 0.001897f, 0.002253f,
+ 0.002373f, 0.002617f, 0.002796f, 0.003054f, 0.003414f, 0.003681f, 0.003929f, 0.004353f,
+ 0.004902f, 0.005322f, 0.005863f, 0.006424f, 0.007000f, 0.007755f, 0.008675f, 0.009506f,
+ 0.010704f, 0.012215f, 0.013557f, 0.015686f, 0.017807f, 0.020630f, 0.023376f, 0.027328f,
+ 0.032013f, 0.038177f, 0.045288f, 0.054626f, 0.066284f, 0.081543f, 0.100891f, 0.125977f,
+ 0.158447f, 0.199951f, 0.251465f, 0.313965f, 0.384521f, 0.461670f, 0.540527f, 0.617188f,
+ 0.688965f, 0.750977f, 0.920410f, 0.924805f, 0.925781f, 0.926270f, 0.926758f, 0.925781f,
+ 0.000230f, 0.000198f, 0.000217f, 0.000338f, 0.000584f, 0.000786f, 0.000699f, 0.000893f,
+ 0.000954f, 0.000959f, 0.001153f, 0.001165f, 0.001375f, 0.001545f, 0.001752f, 0.001752f,
+ 0.002062f, 0.002235f, 0.002399f, 0.002699f, 0.002853f, 0.002995f, 0.003372f, 0.003603f,
+ 0.003944f, 0.004513f, 0.004704f, 0.005226f, 0.005878f, 0.006527f, 0.006992f, 0.007889f,
+ 0.008919f, 0.010002f, 0.011124f, 0.012604f, 0.014526f, 0.016510f, 0.019104f, 0.022308f,
+ 0.026077f, 0.030701f, 0.036774f, 0.044098f, 0.053558f, 0.065735f, 0.081299f, 0.101990f,
+ 0.129517f, 0.164917f, 0.210938f, 0.268066f, 0.336914f, 0.413818f, 0.496094f, 0.579102f,
+ 0.657227f, 0.727539f, 0.913574f, 0.917969f, 0.918945f, 0.919434f, 0.919922f, 0.919922f,
+ 0.000000f, 0.000101f, 0.000214f, 0.000208f, 0.000339f, 0.000461f, 0.000577f, 0.000780f,
+ 0.000777f, 0.000840f, 0.000853f, 0.001064f, 0.001198f, 0.001327f, 0.001489f, 0.001687f,
+ 0.001809f, 0.001884f, 0.002008f, 0.002129f, 0.002434f, 0.002514f, 0.002949f, 0.003000f,
+ 0.003351f, 0.003674f, 0.003918f, 0.004356f, 0.004875f, 0.005310f, 0.005768f, 0.006458f,
+ 0.007244f, 0.008255f, 0.008949f, 0.010361f, 0.011589f, 0.013290f, 0.015335f, 0.017776f,
+ 0.020828f, 0.024521f, 0.029236f, 0.035431f, 0.042694f, 0.052490f, 0.065369f, 0.082336f,
+ 0.104492f, 0.134277f, 0.173828f, 0.225464f, 0.290039f, 0.365234f, 0.449707f, 0.536133f,
+ 0.623047f, 0.702637f, 0.905273f, 0.911133f, 0.912598f, 0.913086f, 0.913086f, 0.913086f,
+ 0.000000f, 0.000167f, 0.000167f, 0.000316f, 0.000432f, 0.000444f, 0.000608f, 0.000611f,
+ 0.000678f, 0.000750f, 0.000899f, 0.000925f, 0.001043f, 0.001125f, 0.001222f, 0.001343f,
+ 0.001470f, 0.001608f, 0.001679f, 0.001804f, 0.001976f, 0.002234f, 0.002361f, 0.002710f,
+ 0.002748f, 0.003035f, 0.003290f, 0.003647f, 0.003990f, 0.004295f, 0.004745f, 0.005318f,
+ 0.005920f, 0.006618f, 0.007347f, 0.008270f, 0.009361f, 0.010719f, 0.012291f, 0.014221f,
+ 0.016693f, 0.019592f, 0.023239f, 0.027969f, 0.033752f, 0.041534f, 0.051666f, 0.065369f,
+ 0.083618f, 0.108276f, 0.141357f, 0.186035f, 0.244141f, 0.316650f, 0.400635f, 0.491699f,
+ 0.585938f, 0.672852f, 0.897461f, 0.903320f, 0.904297f, 0.903809f, 0.903809f, 0.904297f,
+ 0.000000f, 0.000098f, 0.000145f, 0.000289f, 0.000399f, 0.000424f, 0.000429f, 0.000382f,
+ 0.000529f, 0.000613f, 0.000660f, 0.000836f, 0.000907f, 0.000940f, 0.001005f, 0.001188f,
+ 0.001306f, 0.001451f, 0.001420f, 0.001554f, 0.001667f, 0.001783f, 0.001955f, 0.002125f,
+ 0.002357f, 0.002493f, 0.002760f, 0.002867f, 0.003298f, 0.003626f, 0.003878f, 0.004341f,
+ 0.004704f, 0.005356f, 0.005905f, 0.006512f, 0.007435f, 0.008377f, 0.009598f, 0.011055f,
+ 0.012978f, 0.015388f, 0.018036f, 0.021698f, 0.026337f, 0.032532f, 0.040192f, 0.050995f,
+ 0.065125f, 0.085510f, 0.113037f, 0.150513f, 0.201538f, 0.268799f, 0.351318f, 0.444824f,
+ 0.543457f, 0.641602f, 0.888672f, 0.894043f, 0.894531f, 0.895508f, 0.895020f, 0.895508f,
+ 0.000000f, 0.000000f, 0.000032f, 0.000169f, 0.000338f, 0.000372f, 0.000468f, 0.000471f,
+ 0.000460f, 0.000493f, 0.000588f, 0.000715f, 0.000762f, 0.000912f, 0.000831f, 0.001001f,
+ 0.001043f, 0.001133f, 0.001242f, 0.001312f, 0.001446f, 0.001529f, 0.001647f, 0.001829f,
+ 0.001982f, 0.002121f, 0.002165f, 0.002438f, 0.002628f, 0.002865f, 0.003113f, 0.003424f,
+ 0.003622f, 0.004131f, 0.004639f, 0.005222f, 0.005875f, 0.006622f, 0.007496f, 0.008575f,
+ 0.009987f, 0.011665f, 0.013985f, 0.016617f, 0.019913f, 0.024704f, 0.030960f, 0.039185f,
+ 0.050323f, 0.066284f, 0.088196f, 0.119568f, 0.163208f, 0.223511f, 0.302002f, 0.395752f,
+ 0.499756f, 0.605957f, 0.878418f, 0.883301f, 0.884766f, 0.884766f, 0.885254f, 0.885254f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000216f, 0.000237f, 0.000338f, 0.000387f, 0.000341f,
+ 0.000435f, 0.000441f, 0.000461f, 0.000577f, 0.000544f, 0.000720f, 0.000813f, 0.000823f,
+ 0.000912f, 0.000936f, 0.000994f, 0.001026f, 0.001240f, 0.001268f, 0.001365f, 0.001415f,
+ 0.001590f, 0.001565f, 0.001870f, 0.001929f, 0.002123f, 0.002377f, 0.002430f, 0.002565f,
+ 0.002947f, 0.003384f, 0.003662f, 0.004105f, 0.004513f, 0.005047f, 0.005741f, 0.006550f,
+ 0.007549f, 0.008865f, 0.010612f, 0.012466f, 0.015350f, 0.018677f, 0.023270f, 0.029800f,
+ 0.038361f, 0.050323f, 0.067932f, 0.092590f, 0.129395f, 0.181274f, 0.253418f, 0.345459f,
+ 0.452637f, 0.567383f, 0.866699f, 0.872559f, 0.873047f, 0.873535f, 0.873047f, 0.873535f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000182f, 0.000187f, 0.000237f, 0.000264f, 0.000360f,
+ 0.000360f, 0.000397f, 0.000398f, 0.000412f, 0.000432f, 0.000546f, 0.000575f, 0.000690f,
+ 0.000731f, 0.000727f, 0.000807f, 0.000843f, 0.000924f, 0.001034f, 0.001093f, 0.001111f,
+ 0.001251f, 0.001249f, 0.001334f, 0.001612f, 0.001717f, 0.001820f, 0.002090f, 0.002161f,
+ 0.002354f, 0.002600f, 0.002787f, 0.003119f, 0.003586f, 0.003878f, 0.004452f, 0.004913f,
+ 0.005772f, 0.006508f, 0.007679f, 0.009285f, 0.011086f, 0.013840f, 0.016968f, 0.021820f,
+ 0.028259f, 0.037628f, 0.050812f, 0.070129f, 0.099670f, 0.143433f, 0.207031f, 0.294922f,
+ 0.403076f, 0.525879f, 0.853516f, 0.859375f, 0.860840f, 0.860352f, 0.862305f, 0.861328f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000181f, 0.000198f, 0.000181f, 0.000240f,
+ 0.000275f, 0.000311f, 0.000427f, 0.000447f, 0.000395f, 0.000472f, 0.000456f, 0.000557f,
+ 0.000518f, 0.000562f, 0.000635f, 0.000664f, 0.000868f, 0.000887f, 0.000865f, 0.001025f,
+ 0.001014f, 0.001164f, 0.001096f, 0.001317f, 0.001382f, 0.001432f, 0.001445f, 0.001765f,
+ 0.001744f, 0.002100f, 0.002144f, 0.002350f, 0.002655f, 0.002947f, 0.003294f, 0.003780f,
+ 0.004265f, 0.004971f, 0.005699f, 0.006786f, 0.007957f, 0.009636f, 0.011932f, 0.015823f,
+ 0.020142f, 0.026749f, 0.036530f, 0.051392f, 0.073792f, 0.109375f, 0.164185f, 0.244629f,
+ 0.351562f, 0.479980f, 0.839355f, 0.844727f, 0.846680f, 0.847656f, 0.847168f, 0.846680f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000162f, 0.000133f, 0.000170f, 0.000201f,
+ 0.000204f, 0.000222f, 0.000258f, 0.000285f, 0.000324f, 0.000327f, 0.000422f, 0.000395f,
+ 0.000431f, 0.000517f, 0.000632f, 0.000529f, 0.000589f, 0.000592f, 0.000735f, 0.000714f,
+ 0.000795f, 0.000778f, 0.000823f, 0.001063f, 0.001080f, 0.001141f, 0.001154f, 0.001308f,
+ 0.001439f, 0.001546f, 0.001689f, 0.001886f, 0.001978f, 0.002174f, 0.002377f, 0.002798f,
+ 0.003277f, 0.003519f, 0.004181f, 0.004780f, 0.005768f, 0.006863f, 0.008644f, 0.010750f,
+ 0.014030f, 0.018448f, 0.025635f, 0.036194f, 0.053223f, 0.080811f, 0.125610f, 0.196533f,
+ 0.299316f, 0.430176f, 0.822754f, 0.830078f, 0.831055f, 0.831543f, 0.832031f, 0.831543f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000118f, 0.000117f, 0.000120f, 0.000123f, 0.000151f,
+ 0.000154f, 0.000175f, 0.000254f, 0.000190f, 0.000211f, 0.000306f, 0.000335f, 0.000358f,
+ 0.000394f, 0.000417f, 0.000443f, 0.000410f, 0.000565f, 0.000565f, 0.000491f, 0.000623f,
+ 0.000616f, 0.000631f, 0.000738f, 0.000676f, 0.000759f, 0.000924f, 0.000895f, 0.001030f,
+ 0.001064f, 0.001176f, 0.001267f, 0.001438f, 0.001518f, 0.001704f, 0.001742f, 0.002028f,
+ 0.002384f, 0.002703f, 0.002972f, 0.003393f, 0.004051f, 0.004959f, 0.005993f, 0.007271f,
+ 0.009277f, 0.012390f, 0.016968f, 0.024368f, 0.036560f, 0.056610f, 0.091797f, 0.151245f,
+ 0.246460f, 0.379639f, 0.805664f, 0.812500f, 0.813477f, 0.813965f, 0.813965f, 0.813965f,
+ 0.000000f, 0.000000f, 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000113f, 0.000108f,
+ 0.000127f, 0.000153f, 0.000133f, 0.000202f, 0.000217f, 0.000223f, 0.000242f, 0.000186f,
+ 0.000280f, 0.000304f, 0.000318f, 0.000342f, 0.000338f, 0.000473f, 0.000360f, 0.000484f,
+ 0.000422f, 0.000514f, 0.000527f, 0.000571f, 0.000633f, 0.000568f, 0.000639f, 0.000816f,
+ 0.000789f, 0.000889f, 0.000891f, 0.000966f, 0.001125f, 0.001276f, 0.001316f, 0.001496f,
+ 0.001658f, 0.001818f, 0.002047f, 0.002502f, 0.002781f, 0.003201f, 0.003914f, 0.004795f,
+ 0.006096f, 0.007996f, 0.010918f, 0.015617f, 0.023697f, 0.037567f, 0.063477f, 0.111084f,
+ 0.194824f, 0.324951f, 0.786133f, 0.792969f, 0.794434f, 0.793945f, 0.794922f, 0.794434f,
+ 0.000000f, 0.000119f, 0.000117f, 0.000115f, 0.000113f, 0.000112f, 0.000110f, 0.000109f,
+ 0.000104f, 0.000098f, 0.000099f, 0.000136f, 0.000112f, 0.000126f, 0.000175f, 0.000189f,
+ 0.000196f, 0.000220f, 0.000216f, 0.000247f, 0.000258f, 0.000274f, 0.000285f, 0.000309f,
+ 0.000308f, 0.000321f, 0.000381f, 0.000390f, 0.000475f, 0.000511f, 0.000485f, 0.000501f,
+ 0.000641f, 0.000588f, 0.000652f, 0.000764f, 0.000808f, 0.000952f, 0.000906f, 0.001037f,
+ 0.001110f, 0.001249f, 0.001411f, 0.001647f, 0.001894f, 0.002159f, 0.002687f, 0.003223f,
+ 0.004036f, 0.005150f, 0.006989f, 0.009644f, 0.014420f, 0.023361f, 0.040802f, 0.076050f,
+ 0.146362f, 0.269287f, 0.763184f, 0.770996f, 0.771973f, 0.771973f, 0.772461f, 0.772461f,
+ 0.000121f, 0.000116f, 0.000114f, 0.000112f, 0.000109f, 0.000108f, 0.000106f, 0.000105f,
+ 0.000104f, 0.000101f, 0.000095f, 0.000090f, 0.000085f, 0.000083f, 0.000104f, 0.000097f,
+ 0.000094f, 0.000154f, 0.000127f, 0.000178f, 0.000197f, 0.000194f, 0.000233f, 0.000213f,
+ 0.000279f, 0.000294f, 0.000293f, 0.000258f, 0.000319f, 0.000394f, 0.000344f, 0.000369f,
+ 0.000394f, 0.000410f, 0.000438f, 0.000509f, 0.000514f, 0.000580f, 0.000617f, 0.000684f,
+ 0.000807f, 0.000812f, 0.000914f, 0.001094f, 0.001183f, 0.001436f, 0.001639f, 0.002033f,
+ 0.002523f, 0.003073f, 0.004063f, 0.005680f, 0.008560f, 0.013466f, 0.024109f, 0.047791f,
+ 0.102051f, 0.213867f, 0.740234f, 0.746582f, 0.748047f, 0.748535f, 0.749023f, 0.749023f,
+ 0.000000f, 0.000113f, 0.000108f, 0.000107f, 0.000104f, 0.000102f, 0.000099f, 0.000099f,
+ 0.000097f, 0.000096f, 0.000095f, 0.000091f, 0.000086f, 0.000081f, 0.000077f, 0.000073f,
+ 0.000085f, 0.000091f, 0.000070f, 0.000102f, 0.000117f, 0.000131f, 0.000145f, 0.000148f,
+ 0.000171f, 0.000178f, 0.000178f, 0.000207f, 0.000225f, 0.000209f, 0.000285f, 0.000238f,
+ 0.000260f, 0.000298f, 0.000331f, 0.000360f, 0.000371f, 0.000346f, 0.000407f, 0.000443f,
+ 0.000494f, 0.000516f, 0.000578f, 0.000662f, 0.000767f, 0.000847f, 0.001004f, 0.001149f,
+ 0.001451f, 0.001783f, 0.002310f, 0.003262f, 0.004593f, 0.007309f, 0.012985f, 0.026703f,
+ 0.064026f, 0.158813f, 0.712891f, 0.719238f, 0.722168f, 0.721680f, 0.722168f, 0.722656f,
+ 0.000000f, 0.000105f, 0.000102f, 0.000098f, 0.000094f, 0.000092f, 0.000091f, 0.000089f,
+ 0.000088f, 0.000086f, 0.000085f, 0.000084f, 0.000083f, 0.000080f, 0.000076f, 0.000073f,
+ 0.000069f, 0.000065f, 0.000062f, 0.000059f, 0.000068f, 0.000063f, 0.000069f, 0.000074f,
+ 0.000087f, 0.000102f, 0.000112f, 0.000130f, 0.000137f, 0.000129f, 0.000143f, 0.000168f,
+ 0.000180f, 0.000178f, 0.000189f, 0.000198f, 0.000222f, 0.000240f, 0.000262f, 0.000285f,
+ 0.000304f, 0.000317f, 0.000339f, 0.000399f, 0.000439f, 0.000490f, 0.000570f, 0.000658f,
+ 0.000781f, 0.000988f, 0.001235f, 0.001674f, 0.002407f, 0.003725f, 0.006485f, 0.013199f,
+ 0.034546f, 0.107605f, 0.682129f, 0.691406f, 0.692871f, 0.691406f, 0.692871f, 0.692871f,
+ 0.000105f, 0.000089f, 0.000085f, 0.000080f, 0.000078f, 0.000078f, 0.000075f, 0.000074f,
+ 0.000072f, 0.000072f, 0.000070f, 0.000071f, 0.000069f, 0.000069f, 0.000069f, 0.000068f,
+ 0.000066f, 0.000063f, 0.000060f, 0.000057f, 0.000054f, 0.000052f, 0.000049f, 0.000047f,
+ 0.000046f, 0.000045f, 0.000048f, 0.000055f, 0.000060f, 0.000068f, 0.000083f, 0.000087f,
+ 0.000092f, 0.000103f, 0.000109f, 0.000117f, 0.000130f, 0.000150f, 0.000148f, 0.000142f,
+ 0.000167f, 0.000186f, 0.000210f, 0.000213f, 0.000232f, 0.000280f, 0.000292f, 0.000329f,
+ 0.000391f, 0.000456f, 0.000596f, 0.000764f, 0.001065f, 0.001633f, 0.002806f, 0.005909f,
+ 0.015488f, 0.062378f, 0.651367f, 0.659668f, 0.661133f, 0.661133f, 0.660645f, 0.661621f,
+ 0.000034f, 0.000037f, 0.000048f, 0.000051f, 0.000047f, 0.000049f, 0.000047f, 0.000051f,
+ 0.000049f, 0.000051f, 0.000049f, 0.000050f, 0.000051f, 0.000050f, 0.000050f, 0.000049f,
+ 0.000051f, 0.000050f, 0.000051f, 0.000050f, 0.000049f, 0.000047f, 0.000045f, 0.000043f,
+ 0.000041f, 0.000039f, 0.000037f, 0.000035f, 0.000033f, 0.000032f, 0.000030f, 0.000029f,
+ 0.000034f, 0.000041f, 0.000046f, 0.000057f, 0.000063f, 0.000067f, 0.000065f, 0.000072f,
+ 0.000083f, 0.000093f, 0.000096f, 0.000102f, 0.000102f, 0.000135f, 0.000134f, 0.000151f,
+ 0.000184f, 0.000198f, 0.000245f, 0.000306f, 0.000425f, 0.000607f, 0.001032f, 0.002081f,
+ 0.005886f, 0.027924f, 0.617188f, 0.625977f, 0.627441f, 0.627930f, 0.626953f, 0.628418f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000014f,
+ 0.000016f, 0.000014f, 0.000019f, 0.000022f, 0.000022f, 0.000022f, 0.000025f, 0.000026f,
+ 0.000027f, 0.000028f, 0.000029f, 0.000029f, 0.000029f, 0.000030f, 0.000030f, 0.000031f,
+ 0.000032f, 0.000032f, 0.000031f, 0.000030f, 0.000028f, 0.000027f, 0.000026f, 0.000024f,
+ 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000022f, 0.000024f,
+ 0.000027f, 0.000035f, 0.000041f, 0.000034f, 0.000041f, 0.000052f, 0.000051f, 0.000051f,
+ 0.000058f, 0.000070f, 0.000074f, 0.000103f, 0.000119f, 0.000169f, 0.000277f, 0.000510f,
+ 0.001495f, 0.008766f, 0.583008f, 0.590332f, 0.591797f, 0.591797f, 0.592285f, 0.592285f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000003f, 0.000005f, 0.000006f,
+ 0.000008f, 0.000009f, 0.000010f, 0.000010f, 0.000012f, 0.000012f, 0.000013f, 0.000014f,
+ 0.000015f, 0.000015f, 0.000015f, 0.000015f, 0.000014f, 0.000013f, 0.000013f, 0.000012f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000014f, 0.000011f, 0.000015f,
+ 0.000017f, 0.000017f, 0.000021f, 0.000020f, 0.000026f, 0.000026f, 0.000042f, 0.000069f,
+ 0.000178f, 0.001302f, 0.544434f, 0.553711f, 0.554688f, 0.554688f, 0.556152f, 0.556641f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000003f, 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000001f, 0.000003f, 0.000003f,
+ 0.000004f, 0.000014f, 0.506836f, 0.515137f, 0.516113f, 0.516602f, 0.517090f, 0.517578f,
+ },
+ {
+ 0.089539f, 0.244873f, 0.368164f, 0.464355f, 0.539551f, 0.599121f, 0.648438f, 0.688477f,
+ 0.721680f, 0.749512f, 0.772461f, 0.793945f, 0.811523f, 0.826172f, 0.841309f, 0.854004f,
+ 0.863770f, 0.874512f, 0.883301f, 0.891602f, 0.898438f, 0.906250f, 0.912109f, 0.917969f,
+ 0.922852f, 0.928223f, 0.932617f, 0.937012f, 0.940918f, 0.944336f, 0.948242f, 0.951660f,
+ 0.954590f, 0.957520f, 0.960449f, 0.962891f, 0.965820f, 0.967773f, 0.970215f, 0.972656f,
+ 0.974609f, 0.976074f, 0.978516f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
+ 0.987793f, 0.988770f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.996582f,
+ 0.997559f, 0.998535f, 0.999023f, 0.998535f, 0.997559f, 0.997070f, 0.996582f, 0.995605f,
+ 0.045563f, 0.143921f, 0.242798f, 0.334717f, 0.417969f, 0.489258f, 0.550293f, 0.602051f,
+ 0.646484f, 0.683594f, 0.715820f, 0.743652f, 0.767090f, 0.788086f, 0.805664f, 0.822266f,
+ 0.836426f, 0.849609f, 0.861328f, 0.870117f, 0.879883f, 0.889160f, 0.896973f, 0.903320f,
+ 0.909668f, 0.916016f, 0.921875f, 0.926758f, 0.931641f, 0.936523f, 0.940430f, 0.943848f,
+ 0.947266f, 0.951172f, 0.954102f, 0.957520f, 0.960449f, 0.962891f, 0.965820f, 0.968262f,
+ 0.970215f, 0.973145f, 0.974121f, 0.976074f, 0.979004f, 0.980469f, 0.982422f, 0.983887f,
+ 0.985352f, 0.986816f, 0.988281f, 0.989746f, 0.991211f, 0.992188f, 0.994141f, 0.995117f,
+ 0.996094f, 0.997070f, 0.998535f, 0.997559f, 0.997070f, 0.996582f, 0.996094f, 0.995117f,
+ 0.026855f, 0.089233f, 0.159790f, 0.234619f, 0.308838f, 0.381348f, 0.447754f, 0.507812f,
+ 0.561035f, 0.606934f, 0.646484f, 0.683105f, 0.712402f, 0.740234f, 0.763184f, 0.784668f,
+ 0.802246f, 0.819336f, 0.833984f, 0.846680f, 0.857910f, 0.868652f, 0.878418f, 0.886719f,
+ 0.895508f, 0.903320f, 0.909668f, 0.915527f, 0.920410f, 0.926270f, 0.931152f, 0.935547f,
+ 0.940430f, 0.943848f, 0.947754f, 0.951172f, 0.954590f, 0.958008f, 0.960449f, 0.963379f,
+ 0.966309f, 0.968750f, 0.971191f, 0.973145f, 0.975586f, 0.977051f, 0.979004f, 0.981445f,
+ 0.982910f, 0.983887f, 0.985840f, 0.987305f, 0.988770f, 0.990723f, 0.992188f, 0.993164f,
+ 0.994629f, 0.996094f, 0.998047f, 0.997070f, 0.996582f, 0.996094f, 0.995605f, 0.995117f,
+ 0.017746f, 0.058746f, 0.108276f, 0.163818f, 0.224365f, 0.288086f, 0.351562f, 0.413086f,
+ 0.470947f, 0.522949f, 0.569824f, 0.612793f, 0.650879f, 0.684570f, 0.713867f, 0.739258f,
+ 0.762695f, 0.783203f, 0.800781f, 0.817871f, 0.833008f, 0.845215f, 0.857422f, 0.868164f,
+ 0.877441f, 0.886230f, 0.894043f, 0.902832f, 0.908691f, 0.915039f, 0.921387f, 0.925781f,
+ 0.930664f, 0.936035f, 0.939941f, 0.944336f, 0.948242f, 0.951660f, 0.955078f, 0.957520f,
+ 0.961426f, 0.964355f, 0.967285f, 0.968750f, 0.971680f, 0.974121f, 0.975586f, 0.978027f,
+ 0.979980f, 0.981934f, 0.983887f, 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.991211f,
+ 0.992676f, 0.993652f, 0.997070f, 0.996582f, 0.996582f, 0.996094f, 0.995117f, 0.994629f,
+ 0.012337f, 0.041229f, 0.075928f, 0.117065f, 0.163208f, 0.214478f, 0.270020f, 0.327148f,
+ 0.383301f, 0.437500f, 0.490234f, 0.536621f, 0.581543f, 0.621094f, 0.656250f, 0.688477f,
+ 0.716797f, 0.741699f, 0.763672f, 0.784668f, 0.802246f, 0.818359f, 0.832520f, 0.845703f,
+ 0.857422f, 0.868164f, 0.877930f, 0.886230f, 0.895020f, 0.902344f, 0.909668f, 0.915039f,
+ 0.921875f, 0.926758f, 0.931641f, 0.937012f, 0.940430f, 0.946289f, 0.949219f, 0.952637f,
+ 0.956055f, 0.958984f, 0.961914f, 0.964844f, 0.967773f, 0.970215f, 0.972656f, 0.974609f,
+ 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984863f, 0.986816f, 0.987793f, 0.989746f,
+ 0.990723f, 0.992676f, 0.996582f, 0.996094f, 0.995605f, 0.995117f, 0.994629f, 0.994141f,
+ 0.009315f, 0.030411f, 0.055756f, 0.085632f, 0.121094f, 0.160889f, 0.206055f, 0.254150f,
+ 0.305664f, 0.357422f, 0.408447f, 0.459717f, 0.506836f, 0.551270f, 0.592773f, 0.629395f,
+ 0.662598f, 0.692871f, 0.719727f, 0.745117f, 0.767090f, 0.786133f, 0.804688f, 0.819336f,
+ 0.834473f, 0.847168f, 0.858398f, 0.869629f, 0.879395f, 0.888672f, 0.895020f, 0.903320f,
+ 0.910156f, 0.916016f, 0.922363f, 0.928223f, 0.933105f, 0.937012f, 0.941406f, 0.946289f,
+ 0.950195f, 0.954102f, 0.957031f, 0.960449f, 0.963379f, 0.965820f, 0.969238f, 0.971191f,
+ 0.974121f, 0.976074f, 0.978027f, 0.979980f, 0.982422f, 0.984375f, 0.985840f, 0.987793f,
+ 0.989258f, 0.990723f, 0.995605f, 0.995605f, 0.995117f, 0.994629f, 0.994629f, 0.993652f,
+ 0.006634f, 0.022736f, 0.041962f, 0.064026f, 0.090759f, 0.122192f, 0.157593f, 0.197510f,
+ 0.240356f, 0.287354f, 0.335693f, 0.384766f, 0.432373f, 0.479736f, 0.523438f, 0.565430f,
+ 0.604004f, 0.639160f, 0.670898f, 0.699219f, 0.726562f, 0.749023f, 0.770508f, 0.790527f,
+ 0.806641f, 0.822754f, 0.836426f, 0.848633f, 0.859863f, 0.871582f, 0.881348f, 0.889160f,
+ 0.897949f, 0.905273f, 0.912598f, 0.918945f, 0.924316f, 0.929199f, 0.935059f, 0.938965f,
+ 0.943848f, 0.947266f, 0.951660f, 0.955078f, 0.958496f, 0.961914f, 0.964844f, 0.967773f,
+ 0.970703f, 0.973145f, 0.975098f, 0.977539f, 0.979492f, 0.981445f, 0.983887f, 0.985352f,
+ 0.987305f, 0.989258f, 0.995117f, 0.994629f, 0.994141f, 0.994141f, 0.993652f, 0.993164f,
+ 0.005428f, 0.017807f, 0.032166f, 0.049652f, 0.070007f, 0.093811f, 0.121765f, 0.153564f,
+ 0.189087f, 0.228516f, 0.270752f, 0.316162f, 0.362061f, 0.408936f, 0.453857f, 0.498779f,
+ 0.540527f, 0.579590f, 0.615723f, 0.649902f, 0.679688f, 0.707520f, 0.732422f, 0.755371f,
+ 0.775391f, 0.794922f, 0.811035f, 0.826172f, 0.839844f, 0.852051f, 0.864258f, 0.875000f,
+ 0.883301f, 0.892578f, 0.899902f, 0.907715f, 0.914062f, 0.920410f, 0.926270f, 0.931641f,
+ 0.936035f, 0.940918f, 0.945312f, 0.949219f, 0.954102f, 0.957031f, 0.960938f, 0.963379f,
+ 0.966797f, 0.969238f, 0.972168f, 0.974609f, 0.977051f, 0.979492f, 0.980957f, 0.983398f,
+ 0.985352f, 0.987305f, 0.994141f, 0.994141f, 0.994141f, 0.993652f, 0.993164f, 0.992676f,
+ 0.004223f, 0.014046f, 0.025452f, 0.039062f, 0.055115f, 0.073608f, 0.095642f, 0.120239f,
+ 0.149292f, 0.182251f, 0.217529f, 0.257080f, 0.298828f, 0.342773f, 0.387207f, 0.431152f,
+ 0.474609f, 0.516602f, 0.556641f, 0.593750f, 0.628418f, 0.660156f, 0.689453f, 0.715820f,
+ 0.740723f, 0.762207f, 0.782227f, 0.799805f, 0.816406f, 0.830566f, 0.844727f, 0.855469f,
+ 0.867188f, 0.877441f, 0.886230f, 0.895020f, 0.903809f, 0.910645f, 0.917480f, 0.923340f,
+ 0.928711f, 0.934570f, 0.939453f, 0.943848f, 0.948242f, 0.952148f, 0.956055f, 0.959473f,
+ 0.961914f, 0.965820f, 0.968750f, 0.971680f, 0.974121f, 0.975586f, 0.979004f, 0.980957f,
+ 0.983398f, 0.985352f, 0.993652f, 0.993652f, 0.993164f, 0.993164f, 0.992676f, 0.991699f,
+ 0.003532f, 0.011536f, 0.020645f, 0.031342f, 0.044098f, 0.058624f, 0.075989f, 0.096252f,
+ 0.119141f, 0.145386f, 0.175049f, 0.208130f, 0.244385f, 0.283203f, 0.324463f, 0.367432f,
+ 0.410400f, 0.453369f, 0.495361f, 0.534668f, 0.572266f, 0.607910f, 0.641602f, 0.672852f,
+ 0.700195f, 0.725098f, 0.748047f, 0.769531f, 0.789062f, 0.806152f, 0.821777f, 0.835938f,
+ 0.848633f, 0.860352f, 0.872070f, 0.881836f, 0.890625f, 0.898926f, 0.906738f, 0.913086f,
+ 0.919922f, 0.925781f, 0.931641f, 0.936523f, 0.941406f, 0.946289f, 0.950684f, 0.954590f,
+ 0.958008f, 0.961426f, 0.964844f, 0.968262f, 0.970703f, 0.973633f, 0.976074f, 0.978516f,
+ 0.980469f, 0.982910f, 0.992676f, 0.992676f, 0.992188f, 0.992188f, 0.991699f, 0.990723f,
+ 0.002850f, 0.009483f, 0.016647f, 0.025833f, 0.035889f, 0.047424f, 0.061646f, 0.076660f,
+ 0.095642f, 0.117065f, 0.141113f, 0.168457f, 0.198975f, 0.233032f, 0.269775f, 0.308838f,
+ 0.349854f, 0.391357f, 0.432861f, 0.474121f, 0.515625f, 0.552734f, 0.589355f, 0.622559f,
+ 0.654785f, 0.683594f, 0.710938f, 0.735352f, 0.757812f, 0.777344f, 0.795898f, 0.812988f,
+ 0.827637f, 0.842285f, 0.854492f, 0.866211f, 0.876953f, 0.886719f, 0.895508f, 0.902832f,
+ 0.911133f, 0.917969f, 0.924316f, 0.929688f, 0.935059f, 0.940430f, 0.945312f, 0.949219f,
+ 0.953125f, 0.958008f, 0.961426f, 0.964844f, 0.967285f, 0.970703f, 0.973633f, 0.975586f,
+ 0.978516f, 0.981445f, 0.991699f, 0.992188f, 0.991699f, 0.991211f, 0.991211f, 0.990723f,
+ 0.002628f, 0.007713f, 0.014069f, 0.021484f, 0.029709f, 0.038910f, 0.050201f, 0.063171f,
+ 0.078186f, 0.094849f, 0.114563f, 0.137329f, 0.162720f, 0.190918f, 0.222656f, 0.257568f,
+ 0.293945f, 0.332764f, 0.372803f, 0.414551f, 0.455078f, 0.495361f, 0.533691f, 0.571289f,
+ 0.606445f, 0.639160f, 0.668457f, 0.697754f, 0.723633f, 0.746094f, 0.767090f, 0.787598f,
+ 0.804199f, 0.820801f, 0.834473f, 0.848633f, 0.860352f, 0.872559f, 0.882324f, 0.891602f,
+ 0.899902f, 0.907715f, 0.915039f, 0.921387f, 0.927734f, 0.934082f, 0.938965f, 0.944824f,
+ 0.948730f, 0.953125f, 0.956543f, 0.960938f, 0.963867f, 0.967285f, 0.970215f, 0.973145f,
+ 0.976074f, 0.978516f, 0.990234f, 0.990723f, 0.990723f, 0.991211f, 0.990234f, 0.990234f,
+ 0.002131f, 0.006535f, 0.012016f, 0.017670f, 0.024780f, 0.032837f, 0.041199f, 0.051819f,
+ 0.063904f, 0.077759f, 0.093689f, 0.112610f, 0.133057f, 0.156860f, 0.183472f, 0.213257f,
+ 0.245605f, 0.281006f, 0.318115f, 0.357422f, 0.397217f, 0.437500f, 0.478271f, 0.516602f,
+ 0.554688f, 0.589844f, 0.623535f, 0.654785f, 0.684082f, 0.710938f, 0.734375f, 0.757812f,
+ 0.777832f, 0.795898f, 0.813477f, 0.828613f, 0.843262f, 0.855957f, 0.867676f, 0.878906f,
+ 0.888184f, 0.897461f, 0.905273f, 0.912598f, 0.919922f, 0.926758f, 0.932129f, 0.937988f,
+ 0.942871f, 0.947754f, 0.951660f, 0.955566f, 0.960449f, 0.964355f, 0.967285f, 0.970215f,
+ 0.973145f, 0.976074f, 0.989746f, 0.990234f, 0.990234f, 0.990234f, 0.989746f, 0.988770f,
+ 0.001566f, 0.005798f, 0.010231f, 0.015259f, 0.020920f, 0.027176f, 0.034607f, 0.043335f,
+ 0.052887f, 0.064392f, 0.077576f, 0.092712f, 0.109802f, 0.129639f, 0.151611f, 0.176758f,
+ 0.204346f, 0.235474f, 0.269043f, 0.304688f, 0.342529f, 0.381836f, 0.421143f, 0.460449f,
+ 0.500488f, 0.538086f, 0.574219f, 0.608887f, 0.640625f, 0.670898f, 0.699219f, 0.725098f,
+ 0.748535f, 0.769043f, 0.788574f, 0.807129f, 0.823242f, 0.837402f, 0.850586f, 0.863281f,
+ 0.874512f, 0.885254f, 0.894043f, 0.902832f, 0.910645f, 0.917969f, 0.924805f, 0.931152f,
+ 0.936523f, 0.941895f, 0.947266f, 0.951172f, 0.955566f, 0.960449f, 0.963867f, 0.966797f,
+ 0.970703f, 0.973145f, 0.988281f, 0.989258f, 0.989258f, 0.989258f, 0.988770f, 0.988281f,
+ 0.001427f, 0.004749f, 0.008934f, 0.012833f, 0.017670f, 0.023483f, 0.029114f, 0.036438f,
+ 0.044556f, 0.054047f, 0.064453f, 0.077148f, 0.091309f, 0.107544f, 0.125854f, 0.146729f,
+ 0.170776f, 0.197266f, 0.226440f, 0.257568f, 0.292236f, 0.329346f, 0.367188f, 0.405762f,
+ 0.445557f, 0.484619f, 0.522949f, 0.559570f, 0.595215f, 0.627441f, 0.659180f, 0.687012f,
+ 0.714355f, 0.739258f, 0.761719f, 0.781738f, 0.800781f, 0.817383f, 0.833984f, 0.847168f,
+ 0.859375f, 0.872070f, 0.882324f, 0.891602f, 0.900879f, 0.909668f, 0.916504f, 0.923828f,
+ 0.930176f, 0.936523f, 0.941895f, 0.946777f, 0.951172f, 0.956055f, 0.960449f, 0.963867f,
+ 0.967285f, 0.970703f, 0.987305f, 0.988770f, 0.988281f, 0.987793f, 0.987793f, 0.987793f,
+ 0.001357f, 0.004501f, 0.007557f, 0.011284f, 0.015236f, 0.019791f, 0.025101f, 0.030838f,
+ 0.037628f, 0.045532f, 0.054596f, 0.064636f, 0.076355f, 0.089905f, 0.105042f, 0.122498f,
+ 0.142334f, 0.164307f, 0.189697f, 0.217896f, 0.248413f, 0.281494f, 0.316406f, 0.354004f,
+ 0.391846f, 0.430664f, 0.469971f, 0.508301f, 0.545898f, 0.582031f, 0.615723f, 0.647461f,
+ 0.677734f, 0.704590f, 0.731445f, 0.754395f, 0.775391f, 0.794922f, 0.811523f, 0.829102f,
+ 0.842773f, 0.856934f, 0.868652f, 0.880371f, 0.891113f, 0.899414f, 0.908203f, 0.915527f,
+ 0.922852f, 0.930176f, 0.936035f, 0.941406f, 0.947266f, 0.951660f, 0.957031f, 0.960449f,
+ 0.963867f, 0.968262f, 0.986328f, 0.987305f, 0.987793f, 0.987305f, 0.987305f, 0.986816f,
+ 0.001239f, 0.003864f, 0.006699f, 0.009621f, 0.013008f, 0.017059f, 0.021805f, 0.026703f,
+ 0.032562f, 0.039185f, 0.045807f, 0.054352f, 0.064514f, 0.075439f, 0.088257f, 0.102478f,
+ 0.119263f, 0.138306f, 0.159546f, 0.183228f, 0.209961f, 0.239258f, 0.271484f, 0.305176f,
+ 0.341797f, 0.379639f, 0.417480f, 0.456787f, 0.495605f, 0.532227f, 0.570801f, 0.604980f,
+ 0.637207f, 0.666992f, 0.696289f, 0.722656f, 0.746582f, 0.768555f, 0.789062f, 0.808105f,
+ 0.824219f, 0.839844f, 0.854492f, 0.865723f, 0.878418f, 0.888672f, 0.897461f, 0.906738f,
+ 0.915039f, 0.922363f, 0.929199f, 0.935547f, 0.941895f, 0.946289f, 0.952148f, 0.956543f,
+ 0.960449f, 0.964844f, 0.985352f, 0.986816f, 0.986816f, 0.986328f, 0.986328f, 0.985840f,
+ 0.001151f, 0.003429f, 0.005753f, 0.008400f, 0.011391f, 0.014877f, 0.018494f, 0.022858f,
+ 0.028046f, 0.033112f, 0.039642f, 0.046661f, 0.054565f, 0.064026f, 0.074280f, 0.086243f,
+ 0.100403f, 0.116150f, 0.133789f, 0.154053f, 0.176636f, 0.202393f, 0.230957f, 0.261719f,
+ 0.295166f, 0.330322f, 0.367432f, 0.405518f, 0.445312f, 0.483398f, 0.520996f, 0.558105f,
+ 0.594238f, 0.626465f, 0.659668f, 0.688477f, 0.714844f, 0.740723f, 0.763672f, 0.784180f,
+ 0.804199f, 0.821289f, 0.837402f, 0.852051f, 0.864258f, 0.876465f, 0.886719f, 0.897949f,
+ 0.906250f, 0.915039f, 0.922363f, 0.929199f, 0.935547f, 0.941406f, 0.946777f, 0.952637f,
+ 0.958008f, 0.961914f, 0.983887f, 0.985840f, 0.985352f, 0.985352f, 0.984863f, 0.984863f,
+ 0.001000f, 0.002768f, 0.005127f, 0.007515f, 0.010155f, 0.013283f, 0.016205f, 0.019714f,
+ 0.023987f, 0.028854f, 0.033905f, 0.040161f, 0.046814f, 0.054199f, 0.063110f, 0.073303f,
+ 0.084839f, 0.098145f, 0.112854f, 0.129883f, 0.149292f, 0.171387f, 0.195435f, 0.222778f,
+ 0.252686f, 0.285400f, 0.320312f, 0.356689f, 0.394531f, 0.433105f, 0.471924f, 0.510742f,
+ 0.547852f, 0.584473f, 0.617676f, 0.650879f, 0.680664f, 0.708984f, 0.734375f, 0.759277f,
+ 0.780762f, 0.799805f, 0.817383f, 0.834473f, 0.849121f, 0.862793f, 0.875488f, 0.886719f,
+ 0.896484f, 0.906250f, 0.915039f, 0.923828f, 0.930176f, 0.936035f, 0.942871f, 0.948242f,
+ 0.953613f, 0.958008f, 0.982910f, 0.983887f, 0.984375f, 0.983887f, 0.984375f, 0.983398f,
+ 0.000799f, 0.002705f, 0.004459f, 0.006573f, 0.008842f, 0.011375f, 0.014099f, 0.017487f,
+ 0.020798f, 0.024963f, 0.029465f, 0.034637f, 0.039703f, 0.046478f, 0.054047f, 0.062256f,
+ 0.072388f, 0.082947f, 0.095764f, 0.110229f, 0.126099f, 0.144775f, 0.165771f, 0.189697f,
+ 0.216187f, 0.244995f, 0.276123f, 0.310303f, 0.346191f, 0.384521f, 0.422607f, 0.461670f,
+ 0.500000f, 0.538574f, 0.575195f, 0.609863f, 0.643555f, 0.673828f, 0.702637f, 0.730469f,
+ 0.754395f, 0.777344f, 0.797363f, 0.815430f, 0.833008f, 0.848633f, 0.861328f, 0.875000f,
+ 0.886719f, 0.896973f, 0.906738f, 0.915039f, 0.923340f, 0.930176f, 0.936523f, 0.943848f,
+ 0.948730f, 0.954102f, 0.981445f, 0.983398f, 0.982910f, 0.983398f, 0.982910f, 0.982910f,
+ 0.000774f, 0.002554f, 0.003899f, 0.005875f, 0.007759f, 0.009949f, 0.012733f, 0.015060f,
+ 0.018280f, 0.021667f, 0.025574f, 0.029678f, 0.034698f, 0.040405f, 0.046570f, 0.053650f,
+ 0.061462f, 0.071106f, 0.081360f, 0.093323f, 0.107300f, 0.122864f, 0.140747f, 0.160522f,
+ 0.183960f, 0.209229f, 0.237305f, 0.268799f, 0.302002f, 0.337402f, 0.374023f, 0.413330f,
+ 0.451904f, 0.490967f, 0.529785f, 0.567383f, 0.603027f, 0.636719f, 0.668457f, 0.698242f,
+ 0.725586f, 0.750977f, 0.773926f, 0.793945f, 0.813965f, 0.831543f, 0.847656f, 0.861816f,
+ 0.874512f, 0.886719f, 0.897461f, 0.906738f, 0.915527f, 0.923828f, 0.931641f, 0.937988f,
+ 0.944824f, 0.949707f, 0.979980f, 0.981934f, 0.981934f, 0.981934f, 0.981934f, 0.981445f,
+ 0.000657f, 0.001934f, 0.003330f, 0.005280f, 0.006748f, 0.009079f, 0.010994f, 0.013763f,
+ 0.015945f, 0.019150f, 0.022003f, 0.026001f, 0.030350f, 0.034790f, 0.040253f, 0.045898f,
+ 0.052795f, 0.060852f, 0.069641f, 0.079346f, 0.091187f, 0.104492f, 0.119751f, 0.136963f,
+ 0.156372f, 0.178345f, 0.203247f, 0.230957f, 0.260742f, 0.294189f, 0.328613f, 0.365723f,
+ 0.403564f, 0.443115f, 0.482910f, 0.521484f, 0.559570f, 0.596680f, 0.630859f, 0.664062f,
+ 0.694336f, 0.722168f, 0.747559f, 0.771484f, 0.793457f, 0.813477f, 0.830078f, 0.846191f,
+ 0.861816f, 0.874023f, 0.887207f, 0.898438f, 0.908691f, 0.916992f, 0.925293f, 0.933594f,
+ 0.939941f, 0.946777f, 0.978516f, 0.980469f, 0.980469f, 0.980469f, 0.980469f, 0.980469f,
+ 0.000818f, 0.001935f, 0.003246f, 0.004658f, 0.006229f, 0.007912f, 0.010017f, 0.012093f,
+ 0.014259f, 0.016586f, 0.019653f, 0.022659f, 0.026413f, 0.030289f, 0.034790f, 0.039917f,
+ 0.045441f, 0.052338f, 0.059479f, 0.068115f, 0.077759f, 0.089050f, 0.102051f, 0.116272f,
+ 0.133179f, 0.152344f, 0.173340f, 0.197876f, 0.224243f, 0.254150f, 0.286621f, 0.321533f,
+ 0.357666f, 0.396729f, 0.436279f, 0.475830f, 0.514648f, 0.553711f, 0.590332f, 0.626465f,
+ 0.659180f, 0.689941f, 0.719238f, 0.746094f, 0.770020f, 0.792480f, 0.812500f, 0.830566f,
+ 0.846680f, 0.862305f, 0.875977f, 0.888184f, 0.899414f, 0.910156f, 0.918945f, 0.927246f,
+ 0.935059f, 0.941895f, 0.977051f, 0.979004f, 0.979492f, 0.979004f, 0.979492f, 0.979004f,
+ 0.000583f, 0.001696f, 0.003044f, 0.004276f, 0.005394f, 0.007111f, 0.009048f, 0.010727f,
+ 0.012802f, 0.014549f, 0.017319f, 0.019943f, 0.023132f, 0.026459f, 0.030212f, 0.034576f,
+ 0.039612f, 0.045105f, 0.051422f, 0.058594f, 0.066833f, 0.076416f, 0.087341f, 0.099792f,
+ 0.113647f, 0.130005f, 0.147827f, 0.168945f, 0.192261f, 0.218750f, 0.247803f, 0.280029f,
+ 0.314209f, 0.351074f, 0.389404f, 0.429199f, 0.468750f, 0.508301f, 0.547852f, 0.585938f,
+ 0.622070f, 0.655762f, 0.687988f, 0.718262f, 0.744629f, 0.769531f, 0.792480f, 0.812500f,
+ 0.832520f, 0.848633f, 0.863770f, 0.877441f, 0.890137f, 0.901367f, 0.912109f, 0.921387f,
+ 0.929199f, 0.937500f, 0.975586f, 0.978027f, 0.978027f, 0.977539f, 0.977539f, 0.977051f,
+ 0.000463f, 0.001634f, 0.002899f, 0.003574f, 0.004932f, 0.006233f, 0.007866f, 0.009644f,
+ 0.011055f, 0.012894f, 0.015518f, 0.017792f, 0.020279f, 0.023178f, 0.026657f, 0.030136f,
+ 0.034271f, 0.039062f, 0.044586f, 0.050446f, 0.057739f, 0.065613f, 0.074646f, 0.084900f,
+ 0.097107f, 0.111023f, 0.126099f, 0.143921f, 0.164673f, 0.187500f, 0.213257f, 0.242065f,
+ 0.273926f, 0.308594f, 0.344971f, 0.383301f, 0.423340f, 0.463623f, 0.503906f, 0.543945f,
+ 0.582520f, 0.619629f, 0.653809f, 0.686523f, 0.717285f, 0.744629f, 0.770020f, 0.792969f,
+ 0.814453f, 0.833496f, 0.850098f, 0.866211f, 0.879395f, 0.893066f, 0.904297f, 0.914551f,
+ 0.923828f, 0.932129f, 0.973145f, 0.976074f, 0.976562f, 0.976074f, 0.976074f, 0.976074f,
+ 0.000472f, 0.001289f, 0.002508f, 0.003481f, 0.004459f, 0.005894f, 0.007042f, 0.008232f,
+ 0.009972f, 0.011719f, 0.013435f, 0.015884f, 0.017899f, 0.020386f, 0.023422f, 0.026428f,
+ 0.030411f, 0.034180f, 0.038757f, 0.043854f, 0.049652f, 0.056549f, 0.064270f, 0.073303f,
+ 0.083252f, 0.095093f, 0.107910f, 0.123169f, 0.141113f, 0.160645f, 0.183472f, 0.208618f,
+ 0.237305f, 0.268799f, 0.302734f, 0.339600f, 0.377930f, 0.418457f, 0.459473f, 0.500000f,
+ 0.540527f, 0.579102f, 0.617188f, 0.652832f, 0.685547f, 0.716309f, 0.745117f, 0.771484f,
+ 0.794922f, 0.815918f, 0.834961f, 0.853027f, 0.868652f, 0.882324f, 0.895996f, 0.907227f,
+ 0.916992f, 0.927246f, 0.972168f, 0.974121f, 0.975098f, 0.973633f, 0.974609f, 0.973633f,
+ 0.000238f, 0.001453f, 0.002047f, 0.002985f, 0.004227f, 0.005272f, 0.006096f, 0.007309f,
+ 0.008957f, 0.010437f, 0.012184f, 0.014214f, 0.015793f, 0.018082f, 0.020538f, 0.023270f,
+ 0.026505f, 0.029648f, 0.033813f, 0.038300f, 0.043457f, 0.049042f, 0.055298f, 0.062744f,
+ 0.070984f, 0.081299f, 0.092590f, 0.105591f, 0.120361f, 0.137695f, 0.156982f, 0.179443f,
+ 0.204346f, 0.232788f, 0.263672f, 0.297363f, 0.334229f, 0.373047f, 0.414307f, 0.455322f,
+ 0.497314f, 0.538086f, 0.578613f, 0.616211f, 0.653320f, 0.686523f, 0.718262f, 0.747559f,
+ 0.773438f, 0.797363f, 0.818848f, 0.838867f, 0.856934f, 0.871582f, 0.885742f, 0.898926f,
+ 0.910645f, 0.920410f, 0.970215f, 0.971680f, 0.972656f, 0.972656f, 0.972168f, 0.972168f,
+ 0.000376f, 0.001075f, 0.002052f, 0.002823f, 0.003603f, 0.004509f, 0.005619f, 0.007008f,
+ 0.008064f, 0.009132f, 0.010849f, 0.012314f, 0.013817f, 0.015945f, 0.018188f, 0.020676f,
+ 0.022995f, 0.026230f, 0.029587f, 0.033234f, 0.037598f, 0.042328f, 0.048004f, 0.054230f,
+ 0.061188f, 0.069824f, 0.079468f, 0.090454f, 0.103271f, 0.117493f, 0.134644f, 0.153931f,
+ 0.175293f, 0.200806f, 0.228149f, 0.259277f, 0.293945f, 0.330566f, 0.370117f, 0.410889f,
+ 0.453369f, 0.495605f, 0.537109f, 0.578125f, 0.616699f, 0.653809f, 0.689453f, 0.721191f,
+ 0.750000f, 0.776855f, 0.800293f, 0.822754f, 0.841309f, 0.859863f, 0.876465f, 0.890137f,
+ 0.902832f, 0.914062f, 0.967773f, 0.970703f, 0.970703f, 0.970703f, 0.970703f, 0.970703f,
+ 0.000237f, 0.000972f, 0.001674f, 0.002413f, 0.003336f, 0.003956f, 0.005093f, 0.006039f,
+ 0.007069f, 0.008202f, 0.009613f, 0.011017f, 0.012520f, 0.014282f, 0.016068f, 0.017853f,
+ 0.020508f, 0.023117f, 0.025986f, 0.029160f, 0.032898f, 0.036865f, 0.041565f, 0.046997f,
+ 0.052887f, 0.060089f, 0.068176f, 0.077515f, 0.088257f, 0.100586f, 0.114929f, 0.131592f,
+ 0.150635f, 0.172241f, 0.196411f, 0.224731f, 0.255859f, 0.290039f, 0.327393f, 0.367188f,
+ 0.409180f, 0.451172f, 0.493896f, 0.536621f, 0.578613f, 0.618164f, 0.655762f, 0.691406f,
+ 0.724121f, 0.753906f, 0.781738f, 0.805176f, 0.827637f, 0.847656f, 0.864746f, 0.880859f,
+ 0.895508f, 0.907715f, 0.965332f, 0.968262f, 0.968750f, 0.969238f, 0.967773f, 0.967773f,
+ 0.000450f, 0.001033f, 0.001554f, 0.002131f, 0.002939f, 0.003662f, 0.004551f, 0.005722f,
+ 0.006405f, 0.007542f, 0.008484f, 0.009750f, 0.011017f, 0.012596f, 0.014046f, 0.015854f,
+ 0.017975f, 0.020264f, 0.022736f, 0.025497f, 0.028671f, 0.031952f, 0.036011f, 0.040741f,
+ 0.045746f, 0.051910f, 0.058868f, 0.066772f, 0.075867f, 0.086304f, 0.098328f, 0.112244f,
+ 0.128784f, 0.147217f, 0.168945f, 0.193848f, 0.221558f, 0.252441f, 0.287109f, 0.324951f,
+ 0.365234f, 0.407715f, 0.450684f, 0.494629f, 0.539062f, 0.580566f, 0.621094f, 0.659668f,
+ 0.695801f, 0.729004f, 0.758789f, 0.786133f, 0.810547f, 0.833008f, 0.852539f, 0.870117f,
+ 0.886719f, 0.900879f, 0.962891f, 0.966309f, 0.966309f, 0.966797f, 0.966797f, 0.966309f,
+ 0.000304f, 0.001050f, 0.001257f, 0.002295f, 0.002689f, 0.003885f, 0.004284f, 0.004726f,
+ 0.005547f, 0.006721f, 0.007595f, 0.008667f, 0.009811f, 0.011330f, 0.012642f, 0.014130f,
+ 0.016098f, 0.017975f, 0.019867f, 0.022247f, 0.024811f, 0.028030f, 0.031403f, 0.035461f,
+ 0.039642f, 0.044800f, 0.050720f, 0.057495f, 0.065002f, 0.073914f, 0.084290f, 0.095947f,
+ 0.109985f, 0.126343f, 0.144409f, 0.166138f, 0.190918f, 0.218750f, 0.250244f, 0.285400f,
+ 0.323730f, 0.364258f, 0.407471f, 0.452148f, 0.496338f, 0.540527f, 0.584473f, 0.625977f,
+ 0.665039f, 0.701172f, 0.735352f, 0.765137f, 0.792480f, 0.817383f, 0.840332f, 0.859863f,
+ 0.876953f, 0.893066f, 0.959961f, 0.963379f, 0.963867f, 0.964355f, 0.963867f, 0.963867f,
+ 0.000228f, 0.000682f, 0.001293f, 0.001717f, 0.002352f, 0.003160f, 0.003626f, 0.004360f,
+ 0.005348f, 0.005871f, 0.006870f, 0.007660f, 0.008957f, 0.010002f, 0.011299f, 0.012375f,
+ 0.014099f, 0.015900f, 0.017670f, 0.019363f, 0.022034f, 0.024216f, 0.027420f, 0.030930f,
+ 0.034454f, 0.038910f, 0.044006f, 0.049530f, 0.055878f, 0.063477f, 0.072083f, 0.082275f,
+ 0.094177f, 0.107666f, 0.123840f, 0.142090f, 0.163452f, 0.188477f, 0.216919f, 0.248047f,
+ 0.283447f, 0.322754f, 0.364990f, 0.408447f, 0.453613f, 0.500000f, 0.544922f, 0.589355f,
+ 0.631348f, 0.671387f, 0.708008f, 0.742188f, 0.773438f, 0.800781f, 0.824219f, 0.846680f,
+ 0.866699f, 0.884277f, 0.958008f, 0.960938f, 0.961426f, 0.962402f, 0.961914f, 0.960938f,
+ 0.000239f, 0.000731f, 0.001204f, 0.001637f, 0.002144f, 0.002913f, 0.003521f, 0.003828f,
+ 0.004517f, 0.005291f, 0.006203f, 0.006954f, 0.007740f, 0.008911f, 0.010239f, 0.011017f,
+ 0.012413f, 0.013863f, 0.015396f, 0.017181f, 0.019196f, 0.021439f, 0.024078f, 0.026993f,
+ 0.030182f, 0.033752f, 0.038055f, 0.042664f, 0.048004f, 0.054657f, 0.061920f, 0.070312f,
+ 0.080688f, 0.092041f, 0.105774f, 0.121094f, 0.140015f, 0.161255f, 0.186523f, 0.214966f,
+ 0.246948f, 0.283203f, 0.322998f, 0.365967f, 0.410400f, 0.457275f, 0.503906f, 0.550781f,
+ 0.596191f, 0.638672f, 0.678711f, 0.716797f, 0.750488f, 0.781738f, 0.809082f, 0.833496f,
+ 0.855469f, 0.874512f, 0.954590f, 0.958008f, 0.958984f, 0.958984f, 0.958984f, 0.958984f,
+ 0.000226f, 0.000663f, 0.001073f, 0.001420f, 0.002163f, 0.002567f, 0.003052f, 0.003433f,
+ 0.004181f, 0.004734f, 0.005516f, 0.006424f, 0.007050f, 0.008003f, 0.008659f, 0.009827f,
+ 0.011086f, 0.012398f, 0.013649f, 0.015266f, 0.016891f, 0.018921f, 0.021118f, 0.023560f,
+ 0.026505f, 0.029556f, 0.032715f, 0.036865f, 0.041077f, 0.046570f, 0.053314f, 0.060150f,
+ 0.068787f, 0.078552f, 0.090027f, 0.103638f, 0.119690f, 0.138184f, 0.159546f, 0.184692f,
+ 0.213745f, 0.245972f, 0.283203f, 0.324219f, 0.367920f, 0.414062f, 0.461914f, 0.509766f,
+ 0.557129f, 0.604492f, 0.647461f, 0.688965f, 0.727051f, 0.761230f, 0.791504f, 0.819824f,
+ 0.844238f, 0.865234f, 0.951660f, 0.955566f, 0.955566f, 0.956055f, 0.955078f, 0.956543f,
+ 0.000156f, 0.000587f, 0.001056f, 0.001499f, 0.001647f, 0.002380f, 0.002594f, 0.003469f,
+ 0.003777f, 0.004112f, 0.004925f, 0.005699f, 0.006180f, 0.007019f, 0.007957f, 0.008942f,
+ 0.009560f, 0.010727f, 0.011963f, 0.013123f, 0.014885f, 0.016556f, 0.018494f, 0.020355f,
+ 0.022766f, 0.025330f, 0.028320f, 0.031830f, 0.035736f, 0.040161f, 0.045532f, 0.052032f,
+ 0.059113f, 0.066833f, 0.076782f, 0.088501f, 0.101868f, 0.117310f, 0.136108f, 0.157959f,
+ 0.183105f, 0.212769f, 0.247070f, 0.284424f, 0.326660f, 0.371338f, 0.419189f, 0.468994f,
+ 0.518066f, 0.567383f, 0.613770f, 0.658691f, 0.700684f, 0.738770f, 0.771973f, 0.803223f,
+ 0.829590f, 0.854492f, 0.947266f, 0.952637f, 0.952637f, 0.952637f, 0.953125f, 0.952637f,
+ 0.000155f, 0.000358f, 0.000859f, 0.001402f, 0.001830f, 0.002092f, 0.002499f, 0.002672f,
+ 0.003410f, 0.003763f, 0.004375f, 0.005077f, 0.005535f, 0.006554f, 0.007004f, 0.007874f,
+ 0.008537f, 0.009529f, 0.010742f, 0.011749f, 0.013016f, 0.014427f, 0.015945f, 0.017929f,
+ 0.019775f, 0.022018f, 0.024460f, 0.027618f, 0.030640f, 0.034668f, 0.039154f, 0.044250f,
+ 0.050293f, 0.057068f, 0.065491f, 0.074951f, 0.086487f, 0.099670f, 0.115906f, 0.134277f,
+ 0.156860f, 0.182495f, 0.213135f, 0.248047f, 0.286621f, 0.329834f, 0.376709f, 0.426025f,
+ 0.476562f, 0.527832f, 0.577637f, 0.626465f, 0.671387f, 0.713379f, 0.752441f, 0.784668f,
+ 0.815430f, 0.841797f, 0.944336f, 0.948242f, 0.949219f, 0.949219f, 0.949219f, 0.949707f,
+ 0.000233f, 0.000639f, 0.000930f, 0.001277f, 0.001579f, 0.001916f, 0.002041f, 0.002625f,
+ 0.003035f, 0.003571f, 0.004124f, 0.004375f, 0.004978f, 0.005379f, 0.006348f, 0.006886f,
+ 0.007526f, 0.008430f, 0.009216f, 0.010262f, 0.011436f, 0.012779f, 0.014160f, 0.015549f,
+ 0.017120f, 0.019089f, 0.021164f, 0.023621f, 0.026352f, 0.029724f, 0.033447f, 0.037842f,
+ 0.042603f, 0.048737f, 0.055573f, 0.063721f, 0.073364f, 0.084778f, 0.098206f, 0.114197f,
+ 0.133423f, 0.155762f, 0.182739f, 0.213623f, 0.249512f, 0.289795f, 0.335205f, 0.383789f,
+ 0.434814f, 0.487305f, 0.540039f, 0.591797f, 0.640137f, 0.686035f, 0.727539f, 0.765137f,
+ 0.800293f, 0.830078f, 0.940430f, 0.944336f, 0.945312f, 0.946289f, 0.945801f, 0.945312f,
+ 0.000217f, 0.000519f, 0.000848f, 0.001180f, 0.001366f, 0.001589f, 0.001986f, 0.002354f,
+ 0.002987f, 0.003170f, 0.003576f, 0.003901f, 0.004440f, 0.004738f, 0.005543f, 0.006058f,
+ 0.006508f, 0.007511f, 0.008163f, 0.009132f, 0.010078f, 0.011246f, 0.012390f, 0.013412f,
+ 0.014938f, 0.016632f, 0.018433f, 0.020676f, 0.022995f, 0.025726f, 0.028702f, 0.032227f,
+ 0.036377f, 0.041992f, 0.047394f, 0.053986f, 0.062195f, 0.071716f, 0.082825f, 0.096802f,
+ 0.112732f, 0.132202f, 0.155273f, 0.182861f, 0.215210f, 0.252441f, 0.294678f, 0.341553f,
+ 0.392090f, 0.445557f, 0.499512f, 0.553711f, 0.606445f, 0.656250f, 0.703125f, 0.745605f,
+ 0.782715f, 0.816895f, 0.935547f, 0.939941f, 0.941406f, 0.941406f, 0.941406f, 0.940918f,
+ 0.000242f, 0.000678f, 0.000781f, 0.000928f, 0.001200f, 0.001592f, 0.001694f, 0.002096f,
+ 0.002703f, 0.002903f, 0.003170f, 0.003531f, 0.003918f, 0.004433f, 0.004955f, 0.005390f,
+ 0.005939f, 0.006454f, 0.007298f, 0.007782f, 0.008759f, 0.009567f, 0.010559f, 0.011650f,
+ 0.013046f, 0.014420f, 0.015793f, 0.017715f, 0.019699f, 0.021774f, 0.024460f, 0.027481f,
+ 0.031082f, 0.035065f, 0.039917f, 0.045715f, 0.052246f, 0.060486f, 0.070129f, 0.081482f,
+ 0.095093f, 0.111755f, 0.131714f, 0.155273f, 0.183838f, 0.217285f, 0.256348f, 0.300781f,
+ 0.350342f, 0.403076f, 0.458252f, 0.514160f, 0.570312f, 0.624512f, 0.675781f, 0.722168f,
+ 0.763672f, 0.800293f, 0.930664f, 0.935547f, 0.937500f, 0.937012f, 0.937500f, 0.937012f,
+ 0.000239f, 0.000297f, 0.000667f, 0.000785f, 0.001044f, 0.001269f, 0.001569f, 0.001950f,
+ 0.002224f, 0.002419f, 0.002810f, 0.003063f, 0.003626f, 0.003895f, 0.004261f, 0.004749f,
+ 0.005066f, 0.005726f, 0.006260f, 0.007019f, 0.007771f, 0.008369f, 0.008919f, 0.009941f,
+ 0.011101f, 0.012375f, 0.013519f, 0.015190f, 0.016891f, 0.018631f, 0.021011f, 0.023590f,
+ 0.026581f, 0.029892f, 0.033875f, 0.038757f, 0.044281f, 0.051147f, 0.058746f, 0.068481f,
+ 0.079834f, 0.094116f, 0.110779f, 0.131348f, 0.155884f, 0.185669f, 0.220825f, 0.261963f,
+ 0.308594f, 0.360352f, 0.416260f, 0.473877f, 0.532715f, 0.589844f, 0.645508f, 0.696289f,
+ 0.743652f, 0.784668f, 0.925781f, 0.930664f, 0.932129f, 0.932129f, 0.932129f, 0.932129f,
+ 0.000226f, 0.000351f, 0.000434f, 0.000624f, 0.000887f, 0.001040f, 0.001246f, 0.001665f,
+ 0.001856f, 0.002384f, 0.002420f, 0.002842f, 0.002874f, 0.003471f, 0.003735f, 0.004078f,
+ 0.004639f, 0.004910f, 0.005531f, 0.006065f, 0.006664f, 0.007370f, 0.007690f, 0.008690f,
+ 0.009544f, 0.010536f, 0.011795f, 0.012833f, 0.014183f, 0.015900f, 0.017899f, 0.019684f,
+ 0.022430f, 0.025253f, 0.028412f, 0.032410f, 0.037201f, 0.042633f, 0.049316f, 0.057159f,
+ 0.066772f, 0.078186f, 0.092590f, 0.110107f, 0.131348f, 0.156982f, 0.188232f, 0.225342f,
+ 0.269043f, 0.318604f, 0.373535f, 0.431641f, 0.492188f, 0.554199f, 0.613281f, 0.668945f,
+ 0.720703f, 0.766602f, 0.919922f, 0.925781f, 0.926758f, 0.926758f, 0.927246f, 0.926758f,
+ 0.000000f, 0.000340f, 0.000458f, 0.000715f, 0.000823f, 0.000895f, 0.001165f, 0.001518f,
+ 0.001636f, 0.001876f, 0.002190f, 0.002472f, 0.002640f, 0.002964f, 0.003340f, 0.003527f,
+ 0.004005f, 0.004227f, 0.004803f, 0.005260f, 0.005878f, 0.006042f, 0.006805f, 0.007500f,
+ 0.008469f, 0.009132f, 0.009949f, 0.011009f, 0.012077f, 0.013687f, 0.014938f, 0.016785f,
+ 0.018997f, 0.021194f, 0.023895f, 0.027283f, 0.030945f, 0.035583f, 0.040955f, 0.047760f,
+ 0.055573f, 0.065247f, 0.077209f, 0.091736f, 0.109619f, 0.131470f, 0.159058f, 0.192017f,
+ 0.231812f, 0.278076f, 0.331543f, 0.389404f, 0.450928f, 0.513672f, 0.577637f, 0.638672f,
+ 0.695801f, 0.746582f, 0.914062f, 0.919922f, 0.920898f, 0.921387f, 0.921387f, 0.921387f,
+ 0.000146f, 0.000319f, 0.000443f, 0.000458f, 0.000704f, 0.000894f, 0.001199f, 0.001324f,
+ 0.001549f, 0.001592f, 0.002081f, 0.002092f, 0.002237f, 0.002604f, 0.002815f, 0.003159f,
+ 0.003510f, 0.003937f, 0.004147f, 0.004425f, 0.004814f, 0.005318f, 0.005878f, 0.006413f,
+ 0.006924f, 0.007782f, 0.008408f, 0.009239f, 0.010414f, 0.011505f, 0.012642f, 0.014015f,
+ 0.015884f, 0.017563f, 0.019852f, 0.022598f, 0.025650f, 0.029663f, 0.033875f, 0.039307f,
+ 0.045898f, 0.053955f, 0.063782f, 0.075928f, 0.090820f, 0.109497f, 0.132690f, 0.161621f,
+ 0.196777f, 0.239624f, 0.290039f, 0.346436f, 0.408203f, 0.473633f, 0.540527f, 0.605957f,
+ 0.667969f, 0.725586f, 0.907715f, 0.914062f, 0.914062f, 0.915039f, 0.915039f, 0.915039f,
+ 0.000121f, 0.000251f, 0.000506f, 0.000532f, 0.000665f, 0.000830f, 0.001190f, 0.001164f,
+ 0.001290f, 0.001413f, 0.001755f, 0.001900f, 0.002157f, 0.002319f, 0.002422f, 0.002853f,
+ 0.003042f, 0.003254f, 0.003529f, 0.003725f, 0.004288f, 0.004585f, 0.005043f, 0.005539f,
+ 0.005970f, 0.006386f, 0.007126f, 0.007812f, 0.008652f, 0.009598f, 0.010651f, 0.011803f,
+ 0.013130f, 0.014702f, 0.016510f, 0.018814f, 0.021011f, 0.024368f, 0.028122f, 0.032379f,
+ 0.037506f, 0.044128f, 0.052277f, 0.062042f, 0.075073f, 0.090088f, 0.110107f, 0.134766f,
+ 0.165405f, 0.203613f, 0.249268f, 0.303955f, 0.365234f, 0.431396f, 0.501465f, 0.571777f,
+ 0.638672f, 0.702148f, 0.900879f, 0.906738f, 0.907227f, 0.908203f, 0.907227f, 0.908203f,
+ 0.000241f, 0.000122f, 0.000417f, 0.000505f, 0.000741f, 0.000782f, 0.000916f, 0.001145f,
+ 0.001189f, 0.001289f, 0.001331f, 0.001565f, 0.001779f, 0.002020f, 0.002171f, 0.002228f,
+ 0.002623f, 0.002752f, 0.002949f, 0.003157f, 0.003515f, 0.003847f, 0.004082f, 0.004429f,
+ 0.004990f, 0.005405f, 0.006008f, 0.006603f, 0.007103f, 0.007889f, 0.008789f, 0.009766f,
+ 0.010605f, 0.012177f, 0.013672f, 0.015305f, 0.017487f, 0.019913f, 0.022781f, 0.026245f,
+ 0.030670f, 0.035980f, 0.042389f, 0.050812f, 0.060883f, 0.073792f, 0.090088f, 0.111145f,
+ 0.138062f, 0.171143f, 0.212524f, 0.262695f, 0.322266f, 0.388184f, 0.460205f, 0.533203f,
+ 0.606445f, 0.676758f, 0.893066f, 0.898926f, 0.899414f, 0.899414f, 0.900879f, 0.900391f,
+ 0.000000f, 0.000114f, 0.000227f, 0.000407f, 0.000532f, 0.000732f, 0.000714f, 0.000922f,
+ 0.000993f, 0.001072f, 0.001190f, 0.001412f, 0.001569f, 0.001726f, 0.001959f, 0.002071f,
+ 0.002159f, 0.002350f, 0.002565f, 0.002729f, 0.003090f, 0.003248f, 0.003702f, 0.003761f,
+ 0.004192f, 0.004585f, 0.004925f, 0.005272f, 0.005966f, 0.006405f, 0.007275f, 0.007965f,
+ 0.008850f, 0.009872f, 0.011017f, 0.012383f, 0.014275f, 0.015900f, 0.018463f, 0.021194f,
+ 0.024673f, 0.028870f, 0.034271f, 0.040955f, 0.048981f, 0.059723f, 0.073059f, 0.090149f,
+ 0.112549f, 0.141357f, 0.178467f, 0.223755f, 0.280029f, 0.345215f, 0.417969f, 0.494385f,
+ 0.572266f, 0.648438f, 0.884277f, 0.890137f, 0.891602f, 0.891602f, 0.893066f, 0.892090f,
+ 0.000000f, 0.000219f, 0.000211f, 0.000333f, 0.000559f, 0.000609f, 0.000788f, 0.000805f,
+ 0.000869f, 0.000903f, 0.001101f, 0.001166f, 0.001302f, 0.001399f, 0.001456f, 0.001668f,
+ 0.001853f, 0.001999f, 0.002102f, 0.002256f, 0.002447f, 0.002728f, 0.002943f, 0.003178f,
+ 0.003515f, 0.003836f, 0.004074f, 0.004475f, 0.004745f, 0.005325f, 0.005970f, 0.006569f,
+ 0.007248f, 0.008102f, 0.008888f, 0.010132f, 0.011169f, 0.012947f, 0.014763f, 0.016891f,
+ 0.019760f, 0.023087f, 0.027176f, 0.032562f, 0.038940f, 0.047516f, 0.058167f, 0.072754f,
+ 0.090698f, 0.114929f, 0.146851f, 0.187744f, 0.239258f, 0.301514f, 0.373291f, 0.452637f,
+ 0.535645f, 0.617676f, 0.874512f, 0.880859f, 0.882324f, 0.883301f, 0.883301f, 0.882324f,
+ 0.000204f, 0.000207f, 0.000204f, 0.000322f, 0.000435f, 0.000480f, 0.000556f, 0.000615f,
+ 0.000747f, 0.000782f, 0.000844f, 0.001006f, 0.001159f, 0.001191f, 0.001231f, 0.001450f,
+ 0.001585f, 0.001633f, 0.001790f, 0.001919f, 0.002117f, 0.002298f, 0.002432f, 0.002651f,
+ 0.002939f, 0.003172f, 0.003399f, 0.003614f, 0.003944f, 0.004421f, 0.004704f, 0.005203f,
+ 0.005886f, 0.006454f, 0.007160f, 0.008049f, 0.009041f, 0.010201f, 0.011627f, 0.013237f,
+ 0.015404f, 0.018097f, 0.021469f, 0.025284f, 0.030884f, 0.036987f, 0.045990f, 0.056915f,
+ 0.072083f, 0.092163f, 0.119141f, 0.154419f, 0.200928f, 0.259277f, 0.328857f, 0.409424f,
+ 0.495605f, 0.584473f, 0.864258f, 0.871094f, 0.872070f, 0.873047f, 0.872559f, 0.873047f,
+ 0.000000f, 0.000044f, 0.000176f, 0.000290f, 0.000410f, 0.000390f, 0.000513f, 0.000546f,
+ 0.000647f, 0.000680f, 0.000827f, 0.000858f, 0.000958f, 0.001131f, 0.001102f, 0.001223f,
+ 0.001367f, 0.001401f, 0.001525f, 0.001610f, 0.001826f, 0.001821f, 0.002039f, 0.002253f,
+ 0.002459f, 0.002617f, 0.002708f, 0.003036f, 0.003279f, 0.003431f, 0.003805f, 0.004219f,
+ 0.004471f, 0.004929f, 0.005569f, 0.006310f, 0.007107f, 0.007988f, 0.009003f, 0.010384f,
+ 0.011856f, 0.014015f, 0.016418f, 0.019669f, 0.023666f, 0.028809f, 0.035583f, 0.044159f,
+ 0.056458f, 0.072571f, 0.094604f, 0.124329f, 0.164917f, 0.218018f, 0.284912f, 0.364746f,
+ 0.454102f, 0.549316f, 0.853027f, 0.859863f, 0.861328f, 0.861816f, 0.861816f, 0.861816f,
+ 0.000000f, 0.000069f, 0.000120f, 0.000345f, 0.000371f, 0.000398f, 0.000452f, 0.000396f,
+ 0.000498f, 0.000530f, 0.000596f, 0.000648f, 0.000781f, 0.000921f, 0.000995f, 0.001007f,
+ 0.001101f, 0.001146f, 0.001282f, 0.001278f, 0.001471f, 0.001554f, 0.001710f, 0.001811f,
+ 0.001995f, 0.001986f, 0.002314f, 0.002399f, 0.002499f, 0.002903f, 0.002975f, 0.003305f,
+ 0.003605f, 0.004086f, 0.004425f, 0.005081f, 0.005402f, 0.006035f, 0.006889f, 0.007755f,
+ 0.009041f, 0.010422f, 0.012672f, 0.014885f, 0.017746f, 0.021530f, 0.026733f, 0.033691f,
+ 0.043060f, 0.055847f, 0.073181f, 0.097473f, 0.132324f, 0.179077f, 0.241821f, 0.320068f,
+ 0.410400f, 0.510742f, 0.839844f, 0.847656f, 0.849121f, 0.849609f, 0.849121f, 0.849609f,
+ 0.000000f, 0.000000f, 0.000121f, 0.000243f, 0.000321f, 0.000354f, 0.000341f, 0.000431f,
+ 0.000423f, 0.000444f, 0.000473f, 0.000508f, 0.000595f, 0.000706f, 0.000737f, 0.000861f,
+ 0.000869f, 0.000926f, 0.001055f, 0.001104f, 0.001199f, 0.001306f, 0.001360f, 0.001433f,
+ 0.001530f, 0.001555f, 0.001673f, 0.001942f, 0.002138f, 0.002247f, 0.002562f, 0.002609f,
+ 0.002911f, 0.003204f, 0.003466f, 0.003757f, 0.004192f, 0.004845f, 0.005482f, 0.006008f,
+ 0.006874f, 0.007904f, 0.009171f, 0.011124f, 0.013260f, 0.015839f, 0.019821f, 0.024872f,
+ 0.031982f, 0.041534f, 0.055054f, 0.075012f, 0.103516f, 0.143677f, 0.199951f, 0.273438f,
+ 0.364502f, 0.469482f, 0.825684f, 0.834473f, 0.834961f, 0.835938f, 0.835938f, 0.835938f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000199f, 0.000272f, 0.000265f, 0.000363f,
+ 0.000379f, 0.000388f, 0.000489f, 0.000500f, 0.000488f, 0.000569f, 0.000604f, 0.000700f,
+ 0.000683f, 0.000720f, 0.000784f, 0.000844f, 0.001009f, 0.001047f, 0.001108f, 0.001258f,
+ 0.001276f, 0.001388f, 0.001410f, 0.001565f, 0.001592f, 0.001814f, 0.001800f, 0.002167f,
+ 0.002192f, 0.002556f, 0.002665f, 0.002905f, 0.003195f, 0.003574f, 0.004028f, 0.004513f,
+ 0.005127f, 0.005859f, 0.006847f, 0.008018f, 0.009491f, 0.011452f, 0.014099f, 0.017792f,
+ 0.022995f, 0.030258f, 0.040588f, 0.055878f, 0.078308f, 0.111450f, 0.160278f, 0.229248f,
+ 0.318359f, 0.425781f, 0.810547f, 0.818359f, 0.820312f, 0.821777f, 0.821777f, 0.820801f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000172f, 0.000195f, 0.000171f, 0.000208f, 0.000272f,
+ 0.000316f, 0.000333f, 0.000348f, 0.000355f, 0.000412f, 0.000410f, 0.000515f, 0.000485f,
+ 0.000545f, 0.000656f, 0.000777f, 0.000659f, 0.000705f, 0.000762f, 0.000874f, 0.000927f,
+ 0.000959f, 0.000978f, 0.001045f, 0.001228f, 0.001294f, 0.001398f, 0.001443f, 0.001637f,
+ 0.001752f, 0.001925f, 0.002005f, 0.002230f, 0.002407f, 0.002670f, 0.002895f, 0.003267f,
+ 0.003933f, 0.004280f, 0.005051f, 0.005772f, 0.006718f, 0.008141f, 0.010117f, 0.012383f,
+ 0.015930f, 0.020920f, 0.028671f, 0.039673f, 0.056702f, 0.083313f, 0.124695f, 0.185791f,
+ 0.270996f, 0.379639f, 0.793457f, 0.801270f, 0.803711f, 0.803711f, 0.804688f, 0.804688f,
+ 0.000000f, 0.000121f, 0.000119f, 0.000144f, 0.000149f, 0.000166f, 0.000173f, 0.000167f,
+ 0.000214f, 0.000245f, 0.000334f, 0.000287f, 0.000303f, 0.000391f, 0.000401f, 0.000440f,
+ 0.000469f, 0.000493f, 0.000534f, 0.000513f, 0.000690f, 0.000682f, 0.000645f, 0.000712f,
+ 0.000715f, 0.000747f, 0.000842f, 0.000849f, 0.000967f, 0.000995f, 0.001178f, 0.001167f,
+ 0.001273f, 0.001395f, 0.001586f, 0.001748f, 0.001796f, 0.001986f, 0.002132f, 0.002476f,
+ 0.002893f, 0.003294f, 0.003653f, 0.004086f, 0.004890f, 0.005821f, 0.006927f, 0.008553f,
+ 0.010857f, 0.014137f, 0.019211f, 0.027084f, 0.039642f, 0.059448f, 0.092468f, 0.144775f,
+ 0.224487f, 0.332764f, 0.775391f, 0.784668f, 0.786133f, 0.786133f, 0.787109f, 0.786621f,
+ 0.000000f, 0.000000f, 0.000118f, 0.000116f, 0.000115f, 0.000113f, 0.000140f, 0.000140f,
+ 0.000149f, 0.000220f, 0.000171f, 0.000255f, 0.000274f, 0.000292f, 0.000318f, 0.000295f,
+ 0.000346f, 0.000352f, 0.000380f, 0.000406f, 0.000401f, 0.000533f, 0.000490f, 0.000551f,
+ 0.000558f, 0.000648f, 0.000628f, 0.000723f, 0.000788f, 0.000749f, 0.000836f, 0.000941f,
+ 0.000997f, 0.001065f, 0.001112f, 0.001207f, 0.001328f, 0.001535f, 0.001621f, 0.001840f,
+ 0.002022f, 0.002163f, 0.002522f, 0.002825f, 0.003391f, 0.003830f, 0.004616f, 0.005665f,
+ 0.007172f, 0.009247f, 0.012482f, 0.017532f, 0.025970f, 0.040161f, 0.064941f, 0.107422f,
+ 0.178833f, 0.283447f, 0.754883f, 0.764648f, 0.766113f, 0.767090f, 0.767578f, 0.767090f,
+ 0.000000f, 0.000119f, 0.000116f, 0.000114f, 0.000112f, 0.000110f, 0.000109f, 0.000117f,
+ 0.000114f, 0.000117f, 0.000125f, 0.000193f, 0.000141f, 0.000196f, 0.000221f, 0.000235f,
+ 0.000259f, 0.000278f, 0.000308f, 0.000316f, 0.000323f, 0.000315f, 0.000329f, 0.000351f,
+ 0.000388f, 0.000422f, 0.000465f, 0.000512f, 0.000571f, 0.000568f, 0.000588f, 0.000633f,
+ 0.000747f, 0.000751f, 0.000829f, 0.000958f, 0.000914f, 0.001104f, 0.001145f, 0.001255f,
+ 0.001337f, 0.001499f, 0.001701f, 0.001966f, 0.002275f, 0.002609f, 0.003119f, 0.003773f,
+ 0.004658f, 0.005920f, 0.007935f, 0.010948f, 0.015900f, 0.025284f, 0.042511f, 0.075012f,
+ 0.135010f, 0.234619f, 0.733398f, 0.743164f, 0.744629f, 0.745117f, 0.745605f, 0.745605f,
+ 0.000000f, 0.000116f, 0.000113f, 0.000111f, 0.000108f, 0.000106f, 0.000104f, 0.000103f,
+ 0.000098f, 0.000092f, 0.000099f, 0.000085f, 0.000098f, 0.000105f, 0.000163f, 0.000162f,
+ 0.000128f, 0.000193f, 0.000203f, 0.000214f, 0.000284f, 0.000239f, 0.000303f, 0.000268f,
+ 0.000327f, 0.000326f, 0.000329f, 0.000330f, 0.000407f, 0.000486f, 0.000406f, 0.000454f,
+ 0.000465f, 0.000495f, 0.000535f, 0.000592f, 0.000648f, 0.000727f, 0.000753f, 0.000807f,
+ 0.000956f, 0.000992f, 0.001108f, 0.001294f, 0.001418f, 0.001703f, 0.001978f, 0.002390f,
+ 0.002930f, 0.003643f, 0.004753f, 0.006519f, 0.009499f, 0.014824f, 0.025497f, 0.048065f,
+ 0.095154f, 0.185425f, 0.709961f, 0.719727f, 0.721191f, 0.721191f, 0.721680f, 0.721680f,
+ 0.000000f, 0.000113f, 0.000107f, 0.000106f, 0.000102f, 0.000100f, 0.000097f, 0.000096f,
+ 0.000095f, 0.000092f, 0.000087f, 0.000083f, 0.000078f, 0.000098f, 0.000077f, 0.000091f,
+ 0.000114f, 0.000128f, 0.000114f, 0.000147f, 0.000154f, 0.000162f, 0.000186f, 0.000174f,
+ 0.000220f, 0.000233f, 0.000235f, 0.000245f, 0.000250f, 0.000253f, 0.000321f, 0.000296f,
+ 0.000311f, 0.000354f, 0.000417f, 0.000419f, 0.000438f, 0.000443f, 0.000495f, 0.000513f,
+ 0.000585f, 0.000634f, 0.000705f, 0.000778f, 0.000912f, 0.001002f, 0.001163f, 0.001379f,
+ 0.001745f, 0.002092f, 0.002697f, 0.003721f, 0.005230f, 0.008194f, 0.013870f, 0.027359f,
+ 0.061066f, 0.138062f, 0.685547f, 0.694336f, 0.696777f, 0.696289f, 0.697754f, 0.697754f,
+ 0.000000f, 0.000106f, 0.000102f, 0.000097f, 0.000093f, 0.000091f, 0.000089f, 0.000087f,
+ 0.000085f, 0.000084f, 0.000082f, 0.000080f, 0.000076f, 0.000072f, 0.000069f, 0.000074f,
+ 0.000076f, 0.000059f, 0.000075f, 0.000062f, 0.000085f, 0.000091f, 0.000103f, 0.000111f,
+ 0.000121f, 0.000135f, 0.000128f, 0.000159f, 0.000171f, 0.000160f, 0.000178f, 0.000193f,
+ 0.000196f, 0.000202f, 0.000220f, 0.000230f, 0.000273f, 0.000289f, 0.000312f, 0.000330f,
+ 0.000335f, 0.000397f, 0.000408f, 0.000463f, 0.000517f, 0.000577f, 0.000691f, 0.000771f,
+ 0.000919f, 0.001150f, 0.001436f, 0.001955f, 0.002737f, 0.004185f, 0.007103f, 0.013863f,
+ 0.033661f, 0.093628f, 0.657227f, 0.667480f, 0.668945f, 0.669434f, 0.670898f, 0.669922f,
+ 0.000108f, 0.000093f, 0.000087f, 0.000082f, 0.000079f, 0.000078f, 0.000075f, 0.000073f,
+ 0.000071f, 0.000070f, 0.000069f, 0.000069f, 0.000067f, 0.000066f, 0.000064f, 0.000061f,
+ 0.000059f, 0.000056f, 0.000053f, 0.000051f, 0.000053f, 0.000049f, 0.000044f, 0.000047f,
+ 0.000055f, 0.000058f, 0.000071f, 0.000077f, 0.000093f, 0.000094f, 0.000103f, 0.000102f,
+ 0.000110f, 0.000126f, 0.000130f, 0.000138f, 0.000143f, 0.000166f, 0.000166f, 0.000178f,
+ 0.000194f, 0.000217f, 0.000228f, 0.000231f, 0.000265f, 0.000330f, 0.000341f, 0.000411f,
+ 0.000459f, 0.000549f, 0.000705f, 0.000867f, 0.001228f, 0.001863f, 0.003143f, 0.006283f,
+ 0.015594f, 0.054993f, 0.628418f, 0.638184f, 0.640137f, 0.640137f, 0.641602f, 0.641602f,
+ 0.000071f, 0.000058f, 0.000059f, 0.000058f, 0.000054f, 0.000054f, 0.000051f, 0.000053f,
+ 0.000051f, 0.000052f, 0.000050f, 0.000050f, 0.000051f, 0.000050f, 0.000049f, 0.000049f,
+ 0.000049f, 0.000049f, 0.000047f, 0.000045f, 0.000043f, 0.000041f, 0.000039f, 0.000038f,
+ 0.000036f, 0.000034f, 0.000035f, 0.000037f, 0.000033f, 0.000034f, 0.000038f, 0.000047f,
+ 0.000054f, 0.000061f, 0.000064f, 0.000068f, 0.000069f, 0.000076f, 0.000083f, 0.000092f,
+ 0.000098f, 0.000103f, 0.000112f, 0.000129f, 0.000113f, 0.000139f, 0.000152f, 0.000185f,
+ 0.000204f, 0.000238f, 0.000282f, 0.000365f, 0.000503f, 0.000685f, 0.001178f, 0.002274f,
+ 0.006100f, 0.025162f, 0.597656f, 0.607910f, 0.610840f, 0.611816f, 0.610352f, 0.611328f,
+ 0.000000f, 0.000000f, 0.000004f, 0.000012f, 0.000014f, 0.000020f, 0.000022f, 0.000023f,
+ 0.000024f, 0.000022f, 0.000025f, 0.000027f, 0.000027f, 0.000026f, 0.000028f, 0.000029f,
+ 0.000029f, 0.000029f, 0.000030f, 0.000030f, 0.000030f, 0.000030f, 0.000030f, 0.000030f,
+ 0.000029f, 0.000028f, 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000021f,
+ 0.000020f, 0.000019f, 0.000018f, 0.000019f, 0.000023f, 0.000024f, 0.000027f, 0.000032f,
+ 0.000038f, 0.000040f, 0.000041f, 0.000045f, 0.000054f, 0.000052f, 0.000055f, 0.000060f,
+ 0.000068f, 0.000089f, 0.000089f, 0.000115f, 0.000146f, 0.000198f, 0.000318f, 0.000586f,
+ 0.001614f, 0.008278f, 0.565918f, 0.576660f, 0.578125f, 0.579102f, 0.579590f, 0.580078f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000003f, 0.000003f, 0.000005f, 0.000005f, 0.000006f, 0.000007f, 0.000009f, 0.000009f,
+ 0.000010f, 0.000011f, 0.000012f, 0.000012f, 0.000013f, 0.000014f, 0.000014f, 0.000015f,
+ 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f,
+ 0.000009f, 0.000009f, 0.000008f, 0.000010f, 0.000013f, 0.000013f, 0.000013f, 0.000017f,
+ 0.000017f, 0.000022f, 0.000021f, 0.000023f, 0.000031f, 0.000032f, 0.000049f, 0.000079f,
+ 0.000204f, 0.001328f, 0.533203f, 0.543945f, 0.545410f, 0.546387f, 0.546875f, 0.546875f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f,
+ 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000004f, 0.000016f, 0.499756f, 0.510254f, 0.513184f, 0.513672f, 0.514160f, 0.514160f,
+ },
+ {
+ 0.076172f, 0.209839f, 0.320312f, 0.408691f, 0.481689f, 0.541016f, 0.591309f, 0.633789f,
+ 0.668945f, 0.699707f, 0.727051f, 0.749512f, 0.770020f, 0.788086f, 0.803711f, 0.817871f,
+ 0.832520f, 0.843750f, 0.854492f, 0.864258f, 0.873535f, 0.881836f, 0.889160f, 0.895996f,
+ 0.903320f, 0.909180f, 0.914551f, 0.920410f, 0.925781f, 0.929199f, 0.933594f, 0.938965f,
+ 0.942383f, 0.946289f, 0.949219f, 0.953125f, 0.955566f, 0.959473f, 0.961914f, 0.964355f,
+ 0.967285f, 0.970215f, 0.971680f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.982422f,
+ 0.984375f, 0.986328f, 0.987793f, 0.989746f, 0.990723f, 0.992676f, 0.993652f, 0.995117f,
+ 0.996582f, 0.998047f, 0.999023f, 0.997559f, 0.996582f, 0.995605f, 0.994629f, 0.993652f,
+ 0.043396f, 0.133301f, 0.221313f, 0.303223f, 0.377441f, 0.442871f, 0.500000f, 0.550781f,
+ 0.595215f, 0.632812f, 0.666992f, 0.696777f, 0.723145f, 0.745605f, 0.765137f, 0.783691f,
+ 0.799805f, 0.815430f, 0.828613f, 0.839844f, 0.851562f, 0.861328f, 0.871582f, 0.879395f,
+ 0.887207f, 0.894531f, 0.901855f, 0.907227f, 0.914062f, 0.919434f, 0.924316f, 0.928711f,
+ 0.933594f, 0.937988f, 0.942383f, 0.945801f, 0.949219f, 0.953125f, 0.956055f, 0.959473f,
+ 0.962402f, 0.964355f, 0.967773f, 0.970215f, 0.972656f, 0.975098f, 0.977051f, 0.979492f,
+ 0.980957f, 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.990234f, 0.991699f, 0.993652f,
+ 0.995117f, 0.996094f, 0.998047f, 0.997070f, 0.996094f, 0.995117f, 0.994141f, 0.993164f,
+ 0.027832f, 0.088440f, 0.153198f, 0.221313f, 0.288086f, 0.352051f, 0.411621f, 0.466797f,
+ 0.515625f, 0.561523f, 0.601074f, 0.637207f, 0.667969f, 0.695312f, 0.721680f, 0.743652f,
+ 0.763184f, 0.781738f, 0.797852f, 0.812500f, 0.826172f, 0.838867f, 0.850098f, 0.859863f,
+ 0.869141f, 0.877930f, 0.886230f, 0.893555f, 0.900879f, 0.907227f, 0.912598f, 0.918457f,
+ 0.922852f, 0.928711f, 0.934082f, 0.938477f, 0.942383f, 0.946289f, 0.950195f, 0.953125f,
+ 0.956543f, 0.959961f, 0.962402f, 0.965820f, 0.968262f, 0.970703f, 0.973145f, 0.975586f,
+ 0.978027f, 0.979980f, 0.982422f, 0.984375f, 0.985840f, 0.987793f, 0.989746f, 0.991211f,
+ 0.993164f, 0.994141f, 0.997559f, 0.996582f, 0.995605f, 0.994629f, 0.993652f, 0.993164f,
+ 0.018921f, 0.061493f, 0.109497f, 0.161987f, 0.217041f, 0.273438f, 0.330811f, 0.384521f,
+ 0.437500f, 0.486084f, 0.530273f, 0.570312f, 0.607910f, 0.640137f, 0.670410f, 0.697266f,
+ 0.722656f, 0.743652f, 0.763672f, 0.781250f, 0.797363f, 0.812012f, 0.825684f, 0.837891f,
+ 0.848633f, 0.859863f, 0.869141f, 0.878418f, 0.886719f, 0.893066f, 0.900879f, 0.906738f,
+ 0.913574f, 0.919434f, 0.924316f, 0.930176f, 0.934082f, 0.939453f, 0.942871f, 0.946777f,
+ 0.950684f, 0.954590f, 0.958008f, 0.960449f, 0.963379f, 0.966797f, 0.969238f, 0.971680f,
+ 0.974121f, 0.977051f, 0.978516f, 0.980957f, 0.983398f, 0.985352f, 0.987305f, 0.989258f,
+ 0.991211f, 0.992676f, 0.996094f, 0.995605f, 0.994629f, 0.993652f, 0.993164f, 0.992188f,
+ 0.013596f, 0.044495f, 0.080017f, 0.119873f, 0.164307f, 0.211670f, 0.261475f, 0.311523f,
+ 0.362793f, 0.410645f, 0.458008f, 0.501953f, 0.542969f, 0.580078f, 0.614746f, 0.645996f,
+ 0.674805f, 0.701172f, 0.723633f, 0.745117f, 0.765625f, 0.782227f, 0.798828f, 0.812988f,
+ 0.826172f, 0.838867f, 0.849609f, 0.861328f, 0.870605f, 0.878906f, 0.887695f, 0.895020f,
+ 0.901855f, 0.907715f, 0.914551f, 0.920898f, 0.925781f, 0.930664f, 0.934570f, 0.940918f,
+ 0.943848f, 0.947754f, 0.951660f, 0.955566f, 0.958984f, 0.961914f, 0.964844f, 0.967773f,
+ 0.970703f, 0.973145f, 0.975586f, 0.978027f, 0.979980f, 0.982422f, 0.984863f, 0.986328f,
+ 0.988770f, 0.990234f, 0.995117f, 0.995117f, 0.994141f, 0.993652f, 0.992676f, 0.991699f,
+ 0.010414f, 0.033203f, 0.060364f, 0.090942f, 0.125610f, 0.163818f, 0.206421f, 0.250488f,
+ 0.295898f, 0.341797f, 0.388428f, 0.433350f, 0.475830f, 0.517090f, 0.555176f, 0.589844f,
+ 0.622559f, 0.652344f, 0.680176f, 0.704590f, 0.729004f, 0.748535f, 0.767578f, 0.784668f,
+ 0.800293f, 0.814941f, 0.828125f, 0.839844f, 0.852051f, 0.861816f, 0.871582f, 0.879883f,
+ 0.888672f, 0.895996f, 0.903320f, 0.909180f, 0.916016f, 0.921387f, 0.927246f, 0.931641f,
+ 0.937012f, 0.940918f, 0.946289f, 0.950195f, 0.953125f, 0.957520f, 0.960449f, 0.963867f,
+ 0.966309f, 0.969238f, 0.972168f, 0.975098f, 0.976562f, 0.979492f, 0.981934f, 0.983887f,
+ 0.985840f, 0.988281f, 0.994629f, 0.994141f, 0.993652f, 0.992676f, 0.991699f, 0.990723f,
+ 0.007889f, 0.025772f, 0.046539f, 0.070312f, 0.097168f, 0.128540f, 0.162354f, 0.200195f,
+ 0.239868f, 0.281738f, 0.325195f, 0.368896f, 0.411621f, 0.453125f, 0.493652f, 0.531738f,
+ 0.566406f, 0.601074f, 0.631836f, 0.659668f, 0.687988f, 0.709961f, 0.732422f, 0.753418f,
+ 0.770996f, 0.788086f, 0.804199f, 0.818359f, 0.831543f, 0.843750f, 0.854492f, 0.864746f,
+ 0.873535f, 0.882812f, 0.890137f, 0.898438f, 0.905273f, 0.912598f, 0.917969f, 0.923828f,
+ 0.929199f, 0.934570f, 0.938477f, 0.942871f, 0.948242f, 0.951660f, 0.955078f, 0.958496f,
+ 0.961914f, 0.965332f, 0.968262f, 0.971680f, 0.973633f, 0.976562f, 0.979492f, 0.981445f,
+ 0.983398f, 0.985352f, 0.993164f, 0.993164f, 0.992676f, 0.991699f, 0.991211f, 0.990234f,
+ 0.006332f, 0.020325f, 0.036438f, 0.055573f, 0.077026f, 0.101562f, 0.129028f, 0.160278f,
+ 0.194458f, 0.230347f, 0.268555f, 0.309326f, 0.350830f, 0.391846f, 0.432373f, 0.472412f,
+ 0.509277f, 0.545410f, 0.579102f, 0.611816f, 0.640625f, 0.668945f, 0.693848f, 0.716797f,
+ 0.739258f, 0.758789f, 0.775879f, 0.793945f, 0.807617f, 0.821777f, 0.834961f, 0.846680f,
+ 0.857422f, 0.867676f, 0.877441f, 0.885742f, 0.893555f, 0.900391f, 0.908203f, 0.915039f,
+ 0.920898f, 0.926270f, 0.931152f, 0.937012f, 0.940918f, 0.946289f, 0.949219f, 0.954102f,
+ 0.958008f, 0.960938f, 0.964355f, 0.967773f, 0.970703f, 0.973145f, 0.975586f, 0.978516f,
+ 0.981445f, 0.983398f, 0.992188f, 0.992188f, 0.991699f, 0.990723f, 0.990723f, 0.989746f,
+ 0.005226f, 0.016647f, 0.029556f, 0.044434f, 0.061523f, 0.081543f, 0.103760f, 0.129150f,
+ 0.157837f, 0.188477f, 0.221924f, 0.257812f, 0.295654f, 0.334473f, 0.374023f, 0.412842f,
+ 0.451904f, 0.489990f, 0.525391f, 0.560059f, 0.593262f, 0.623047f, 0.651855f, 0.678223f,
+ 0.702148f, 0.725098f, 0.745605f, 0.764160f, 0.781738f, 0.799316f, 0.812500f, 0.827148f,
+ 0.838867f, 0.851074f, 0.861328f, 0.871582f, 0.880371f, 0.889648f, 0.896973f, 0.904297f,
+ 0.911621f, 0.917480f, 0.923340f, 0.929688f, 0.934570f, 0.939941f, 0.943848f, 0.948242f,
+ 0.951660f, 0.957031f, 0.959473f, 0.963379f, 0.966797f, 0.969727f, 0.972656f, 0.976074f,
+ 0.979004f, 0.980957f, 0.991699f, 0.991211f, 0.990723f, 0.990234f, 0.989746f, 0.988770f,
+ 0.004108f, 0.013542f, 0.023819f, 0.036194f, 0.050262f, 0.066223f, 0.084717f, 0.104797f,
+ 0.128174f, 0.153809f, 0.182861f, 0.213989f, 0.247437f, 0.282471f, 0.319580f, 0.357422f,
+ 0.395508f, 0.433350f, 0.470947f, 0.506348f, 0.542480f, 0.575684f, 0.605957f, 0.635254f,
+ 0.662109f, 0.687988f, 0.711426f, 0.732910f, 0.753418f, 0.771973f, 0.789062f, 0.804688f,
+ 0.819336f, 0.831543f, 0.843750f, 0.855469f, 0.866211f, 0.875488f, 0.884766f, 0.893066f,
+ 0.901367f, 0.907715f, 0.914062f, 0.921387f, 0.927246f, 0.932129f, 0.937012f, 0.942383f,
+ 0.946777f, 0.951660f, 0.956055f, 0.959473f, 0.962891f, 0.966309f, 0.969238f, 0.972168f,
+ 0.975098f, 0.978027f, 0.989746f, 0.990234f, 0.990234f, 0.989258f, 0.989258f, 0.988281f,
+ 0.003597f, 0.011330f, 0.020065f, 0.029938f, 0.041412f, 0.054504f, 0.068970f, 0.086182f,
+ 0.105469f, 0.126709f, 0.151123f, 0.177612f, 0.206909f, 0.237915f, 0.271484f, 0.305664f,
+ 0.342529f, 0.378906f, 0.416748f, 0.453125f, 0.489502f, 0.524414f, 0.558105f, 0.589844f,
+ 0.619629f, 0.646973f, 0.673828f, 0.698242f, 0.721191f, 0.742676f, 0.761230f, 0.778809f,
+ 0.796387f, 0.810547f, 0.824707f, 0.837891f, 0.850098f, 0.861328f, 0.871094f, 0.881348f,
+ 0.889648f, 0.896973f, 0.904785f, 0.912109f, 0.919434f, 0.924316f, 0.931152f, 0.936523f,
+ 0.941895f, 0.946289f, 0.951172f, 0.955078f, 0.959473f, 0.962402f, 0.965820f, 0.969238f,
+ 0.972656f, 0.975586f, 0.988770f, 0.989258f, 0.989258f, 0.988770f, 0.987793f, 0.987305f,
+ 0.002836f, 0.009857f, 0.016693f, 0.025208f, 0.034668f, 0.045288f, 0.057617f, 0.071106f,
+ 0.087463f, 0.104858f, 0.125000f, 0.147461f, 0.172119f, 0.199829f, 0.229248f, 0.260742f,
+ 0.294434f, 0.329102f, 0.365479f, 0.400879f, 0.437012f, 0.472656f, 0.508301f, 0.541992f,
+ 0.574219f, 0.604980f, 0.634766f, 0.660645f, 0.686523f, 0.709473f, 0.731445f, 0.751953f,
+ 0.770996f, 0.789062f, 0.804199f, 0.817871f, 0.832520f, 0.844727f, 0.856445f, 0.867188f,
+ 0.876953f, 0.886719f, 0.895020f, 0.902832f, 0.909668f, 0.916504f, 0.923340f, 0.929688f,
+ 0.935547f, 0.939941f, 0.944824f, 0.949707f, 0.954102f, 0.958496f, 0.961914f, 0.965820f,
+ 0.969238f, 0.972656f, 0.987793f, 0.988281f, 0.988281f, 0.987793f, 0.986816f, 0.986328f,
+ 0.002541f, 0.008118f, 0.014244f, 0.021194f, 0.029480f, 0.037811f, 0.048584f, 0.060028f,
+ 0.073242f, 0.088196f, 0.104370f, 0.123047f, 0.144531f, 0.167114f, 0.193237f, 0.220947f,
+ 0.250977f, 0.282227f, 0.316162f, 0.351074f, 0.386719f, 0.422119f, 0.457520f, 0.492432f,
+ 0.526367f, 0.559082f, 0.590332f, 0.621094f, 0.648438f, 0.674316f, 0.698730f, 0.721191f,
+ 0.742188f, 0.762207f, 0.780762f, 0.797363f, 0.812500f, 0.826172f, 0.840332f, 0.852051f,
+ 0.863770f, 0.873535f, 0.883301f, 0.892090f, 0.900391f, 0.908203f, 0.915039f, 0.922363f,
+ 0.928711f, 0.933594f, 0.939453f, 0.944824f, 0.950195f, 0.953125f, 0.958008f, 0.962402f,
+ 0.965332f, 0.969238f, 0.986816f, 0.987305f, 0.986816f, 0.986328f, 0.985840f, 0.984863f,
+ 0.002115f, 0.007030f, 0.012138f, 0.017944f, 0.024521f, 0.032318f, 0.040955f, 0.050476f,
+ 0.061676f, 0.073914f, 0.087769f, 0.103271f, 0.121033f, 0.140747f, 0.162598f, 0.187256f,
+ 0.213379f, 0.242065f, 0.272705f, 0.305176f, 0.338623f, 0.373047f, 0.408691f, 0.443848f,
+ 0.478760f, 0.512695f, 0.545898f, 0.577637f, 0.607910f, 0.636719f, 0.663086f, 0.688965f,
+ 0.712402f, 0.734863f, 0.754395f, 0.774414f, 0.791016f, 0.806641f, 0.822266f, 0.835449f,
+ 0.848145f, 0.859863f, 0.870605f, 0.880371f, 0.890137f, 0.898438f, 0.906250f, 0.914551f,
+ 0.921387f, 0.926758f, 0.933594f, 0.938965f, 0.944336f, 0.949219f, 0.954102f, 0.958984f,
+ 0.961914f, 0.965820f, 0.985840f, 0.986328f, 0.985840f, 0.985352f, 0.985352f, 0.984375f,
+ 0.001999f, 0.006226f, 0.010384f, 0.015594f, 0.021027f, 0.027435f, 0.034637f, 0.042969f,
+ 0.052124f, 0.062469f, 0.074097f, 0.087646f, 0.102173f, 0.119141f, 0.137695f, 0.158203f,
+ 0.181396f, 0.206543f, 0.233643f, 0.263184f, 0.295166f, 0.327148f, 0.360596f, 0.395264f,
+ 0.430420f, 0.464600f, 0.499023f, 0.532227f, 0.564941f, 0.595703f, 0.625000f, 0.651855f,
+ 0.679199f, 0.703613f, 0.726074f, 0.747559f, 0.766602f, 0.784668f, 0.801758f, 0.816895f,
+ 0.831055f, 0.843750f, 0.856934f, 0.867188f, 0.878418f, 0.887207f, 0.896484f, 0.904785f,
+ 0.913086f, 0.919922f, 0.926270f, 0.932617f, 0.938477f, 0.944336f, 0.949707f, 0.953613f,
+ 0.958496f, 0.962891f, 0.983887f, 0.984863f, 0.984863f, 0.984375f, 0.983887f, 0.983398f,
+ 0.001891f, 0.004959f, 0.009300f, 0.013786f, 0.018433f, 0.023560f, 0.029892f, 0.037018f,
+ 0.044586f, 0.053284f, 0.062805f, 0.074341f, 0.086975f, 0.100586f, 0.116760f, 0.133789f,
+ 0.154175f, 0.176025f, 0.200317f, 0.226318f, 0.254395f, 0.284424f, 0.316650f, 0.349365f,
+ 0.383301f, 0.418213f, 0.452393f, 0.487061f, 0.520508f, 0.553223f, 0.584473f, 0.613770f,
+ 0.643066f, 0.668945f, 0.695312f, 0.718262f, 0.740234f, 0.761230f, 0.778809f, 0.797363f,
+ 0.812988f, 0.827148f, 0.840332f, 0.854004f, 0.865723f, 0.875977f, 0.886230f, 0.895020f,
+ 0.904297f, 0.912598f, 0.919922f, 0.926270f, 0.932617f, 0.938965f, 0.943359f, 0.949219f,
+ 0.955078f, 0.958984f, 0.982422f, 0.983887f, 0.983398f, 0.982910f, 0.982910f, 0.981934f,
+ 0.001368f, 0.004715f, 0.008041f, 0.011948f, 0.016235f, 0.020889f, 0.025848f, 0.031921f,
+ 0.038391f, 0.045563f, 0.054108f, 0.063477f, 0.074036f, 0.085815f, 0.099304f, 0.114563f,
+ 0.131104f, 0.150146f, 0.170654f, 0.193970f, 0.219360f, 0.246338f, 0.275146f, 0.306396f,
+ 0.338867f, 0.372559f, 0.406494f, 0.440918f, 0.474609f, 0.508789f, 0.541992f, 0.574219f,
+ 0.604492f, 0.634277f, 0.661133f, 0.687500f, 0.710938f, 0.733887f, 0.754883f, 0.774414f,
+ 0.792480f, 0.809570f, 0.824707f, 0.838379f, 0.852051f, 0.862793f, 0.874023f, 0.885254f,
+ 0.895020f, 0.903320f, 0.912109f, 0.919434f, 0.926758f, 0.932617f, 0.939941f, 0.945312f,
+ 0.951172f, 0.955078f, 0.980957f, 0.982910f, 0.982422f, 0.982422f, 0.981445f, 0.981445f,
+ 0.001393f, 0.004227f, 0.007011f, 0.010323f, 0.014107f, 0.018234f, 0.022766f, 0.027649f,
+ 0.032898f, 0.039581f, 0.046539f, 0.054230f, 0.063293f, 0.073608f, 0.085144f, 0.097961f,
+ 0.112305f, 0.127930f, 0.146362f, 0.166260f, 0.188599f, 0.212524f, 0.238647f, 0.266846f,
+ 0.297363f, 0.328369f, 0.361816f, 0.395752f, 0.429932f, 0.464844f, 0.498535f, 0.531250f,
+ 0.564453f, 0.596191f, 0.625488f, 0.653320f, 0.680176f, 0.704590f, 0.728027f, 0.750977f,
+ 0.770020f, 0.788574f, 0.805176f, 0.821289f, 0.835449f, 0.849609f, 0.862793f, 0.874023f,
+ 0.884277f, 0.894043f, 0.903320f, 0.911621f, 0.919434f, 0.926758f, 0.933594f, 0.939453f,
+ 0.945312f, 0.951172f, 0.979492f, 0.980957f, 0.980957f, 0.980957f, 0.980469f, 0.979980f,
+ 0.001163f, 0.003527f, 0.006229f, 0.009323f, 0.012199f, 0.015808f, 0.019928f, 0.024200f,
+ 0.028870f, 0.033997f, 0.040161f, 0.046967f, 0.054871f, 0.063477f, 0.073181f, 0.083618f,
+ 0.096252f, 0.109863f, 0.125122f, 0.142334f, 0.161743f, 0.182739f, 0.206421f, 0.232300f,
+ 0.259277f, 0.288086f, 0.320068f, 0.352783f, 0.386475f, 0.420410f, 0.454590f, 0.489258f,
+ 0.521973f, 0.555176f, 0.586914f, 0.617188f, 0.646484f, 0.673828f, 0.699707f, 0.723633f,
+ 0.746094f, 0.766113f, 0.785645f, 0.803223f, 0.819336f, 0.834961f, 0.848633f, 0.861328f,
+ 0.873535f, 0.884766f, 0.893555f, 0.903809f, 0.911621f, 0.920410f, 0.928223f, 0.934082f,
+ 0.939941f, 0.946777f, 0.978027f, 0.979492f, 0.979492f, 0.979004f, 0.979004f, 0.978516f,
+ 0.000981f, 0.002987f, 0.005329f, 0.008186f, 0.010895f, 0.013832f, 0.017532f, 0.021149f,
+ 0.025253f, 0.029999f, 0.035034f, 0.040985f, 0.047485f, 0.054993f, 0.063049f, 0.072510f,
+ 0.082581f, 0.094421f, 0.107727f, 0.122498f, 0.138794f, 0.157471f, 0.178467f, 0.200562f,
+ 0.225586f, 0.251953f, 0.281250f, 0.311279f, 0.343750f, 0.377197f, 0.411621f, 0.445557f,
+ 0.479736f, 0.513672f, 0.546875f, 0.579590f, 0.610352f, 0.640625f, 0.668457f, 0.694336f,
+ 0.718750f, 0.742188f, 0.762695f, 0.782715f, 0.801270f, 0.817871f, 0.833496f, 0.847168f,
+ 0.860840f, 0.872559f, 0.884277f, 0.894531f, 0.904297f, 0.912598f, 0.920898f, 0.928711f,
+ 0.935547f, 0.942383f, 0.976074f, 0.978027f, 0.978516f, 0.978027f, 0.977539f, 0.977051f,
+ 0.000880f, 0.002707f, 0.005089f, 0.007305f, 0.010147f, 0.012596f, 0.015160f, 0.018616f,
+ 0.022507f, 0.026230f, 0.030777f, 0.035767f, 0.041351f, 0.047455f, 0.054565f, 0.062256f,
+ 0.071289f, 0.081299f, 0.092346f, 0.105408f, 0.119812f, 0.135620f, 0.153320f, 0.173462f,
+ 0.195068f, 0.219482f, 0.245361f, 0.273682f, 0.303711f, 0.335938f, 0.368896f, 0.402588f,
+ 0.437500f, 0.472168f, 0.505859f, 0.539551f, 0.573242f, 0.604492f, 0.634766f, 0.663086f,
+ 0.689453f, 0.714844f, 0.738770f, 0.760254f, 0.780762f, 0.799316f, 0.817383f, 0.833496f,
+ 0.847168f, 0.860840f, 0.873535f, 0.884766f, 0.895508f, 0.905273f, 0.914062f, 0.922363f,
+ 0.930176f, 0.937012f, 0.974609f, 0.976074f, 0.976074f, 0.976562f, 0.976074f, 0.975586f,
+ 0.000851f, 0.002659f, 0.004692f, 0.006466f, 0.008545f, 0.011055f, 0.013649f, 0.016403f,
+ 0.019714f, 0.023056f, 0.026962f, 0.031235f, 0.035828f, 0.041656f, 0.047699f, 0.054077f,
+ 0.061859f, 0.070496f, 0.080200f, 0.091125f, 0.103088f, 0.116882f, 0.132446f, 0.149780f,
+ 0.168701f, 0.190430f, 0.213379f, 0.239258f, 0.267334f, 0.296631f, 0.328369f, 0.360840f,
+ 0.395020f, 0.429932f, 0.464355f, 0.499512f, 0.533203f, 0.566406f, 0.599121f, 0.629883f,
+ 0.658203f, 0.687012f, 0.712402f, 0.735840f, 0.758789f, 0.779297f, 0.798828f, 0.816406f,
+ 0.832520f, 0.847168f, 0.861328f, 0.874023f, 0.886230f, 0.896973f, 0.907227f, 0.915527f,
+ 0.924805f, 0.931641f, 0.972168f, 0.975586f, 0.975586f, 0.974609f, 0.974121f, 0.973633f,
+ 0.000762f, 0.002214f, 0.004040f, 0.005859f, 0.007790f, 0.009689f, 0.012161f, 0.014786f,
+ 0.017441f, 0.020493f, 0.023956f, 0.027618f, 0.031860f, 0.036255f, 0.041595f, 0.047394f,
+ 0.053894f, 0.061188f, 0.069214f, 0.078735f, 0.089050f, 0.101135f, 0.114441f, 0.129150f,
+ 0.145874f, 0.164673f, 0.185303f, 0.208862f, 0.233765f, 0.260742f, 0.290283f, 0.321045f,
+ 0.354248f, 0.388184f, 0.422607f, 0.457764f, 0.493652f, 0.526855f, 0.561523f, 0.594238f,
+ 0.625977f, 0.655273f, 0.683594f, 0.710449f, 0.734863f, 0.758301f, 0.779297f, 0.798828f,
+ 0.817383f, 0.833984f, 0.848145f, 0.862793f, 0.875488f, 0.887207f, 0.899414f, 0.908691f,
+ 0.917969f, 0.926270f, 0.970215f, 0.972656f, 0.974121f, 0.973145f, 0.972656f, 0.972168f,
+ 0.000732f, 0.001928f, 0.003513f, 0.005234f, 0.007042f, 0.008629f, 0.010620f, 0.012985f,
+ 0.015244f, 0.018158f, 0.020935f, 0.024475f, 0.027908f, 0.032013f, 0.036316f, 0.041290f,
+ 0.046661f, 0.053040f, 0.060089f, 0.068115f, 0.077087f, 0.087463f, 0.099121f, 0.111633f,
+ 0.126221f, 0.142578f, 0.160767f, 0.181396f, 0.203003f, 0.228149f, 0.255127f, 0.284180f,
+ 0.315186f, 0.347900f, 0.381836f, 0.416748f, 0.451904f, 0.487549f, 0.522949f, 0.556641f,
+ 0.590332f, 0.623047f, 0.652832f, 0.682129f, 0.708984f, 0.733887f, 0.757324f, 0.779785f,
+ 0.799316f, 0.818359f, 0.835449f, 0.850586f, 0.865234f, 0.877441f, 0.890137f, 0.901367f,
+ 0.912109f, 0.920410f, 0.968262f, 0.970703f, 0.971191f, 0.970703f, 0.971191f, 0.971191f,
+ 0.000524f, 0.001758f, 0.003185f, 0.004864f, 0.006081f, 0.007820f, 0.009705f, 0.011467f,
+ 0.013634f, 0.016068f, 0.018707f, 0.021378f, 0.024597f, 0.028030f, 0.032135f, 0.036224f,
+ 0.041016f, 0.046692f, 0.052399f, 0.059265f, 0.067505f, 0.076050f, 0.085510f, 0.096558f,
+ 0.109253f, 0.123657f, 0.138794f, 0.157227f, 0.176880f, 0.198730f, 0.223267f, 0.250000f,
+ 0.278809f, 0.309326f, 0.342041f, 0.375977f, 0.410889f, 0.447021f, 0.483154f, 0.518555f,
+ 0.554199f, 0.586914f, 0.620117f, 0.650879f, 0.681641f, 0.708496f, 0.734375f, 0.757324f,
+ 0.780762f, 0.801270f, 0.819336f, 0.837891f, 0.852539f, 0.867188f, 0.880371f, 0.893066f,
+ 0.903809f, 0.914551f, 0.966309f, 0.968750f, 0.969238f, 0.969727f, 0.968750f, 0.968750f,
+ 0.000503f, 0.001896f, 0.002653f, 0.004128f, 0.005627f, 0.007004f, 0.008797f, 0.010361f,
+ 0.012230f, 0.014175f, 0.016647f, 0.019348f, 0.021454f, 0.024872f, 0.028290f, 0.031830f,
+ 0.036163f, 0.040649f, 0.045715f, 0.051941f, 0.058319f, 0.065979f, 0.074402f, 0.083618f,
+ 0.094360f, 0.106812f, 0.120239f, 0.135742f, 0.153320f, 0.172974f, 0.194824f, 0.218506f,
+ 0.245117f, 0.273926f, 0.304688f, 0.336426f, 0.371094f, 0.406982f, 0.442627f, 0.479492f,
+ 0.514648f, 0.550781f, 0.584961f, 0.618652f, 0.650879f, 0.681152f, 0.709473f, 0.735352f,
+ 0.760742f, 0.782715f, 0.803711f, 0.821777f, 0.838867f, 0.855957f, 0.870605f, 0.884277f,
+ 0.895996f, 0.906738f, 0.964355f, 0.966309f, 0.967285f, 0.966797f, 0.966309f, 0.966309f,
+ 0.000636f, 0.001421f, 0.002768f, 0.003761f, 0.004944f, 0.006462f, 0.007889f, 0.009262f,
+ 0.010780f, 0.013000f, 0.014946f, 0.017029f, 0.019516f, 0.022049f, 0.024933f, 0.028091f,
+ 0.031616f, 0.035553f, 0.040161f, 0.045380f, 0.051239f, 0.057281f, 0.064270f, 0.072693f,
+ 0.081970f, 0.092468f, 0.104736f, 0.117859f, 0.132690f, 0.150391f, 0.169189f, 0.190796f,
+ 0.214233f, 0.240601f, 0.268555f, 0.299561f, 0.332520f, 0.367188f, 0.402344f, 0.438965f,
+ 0.476074f, 0.512695f, 0.549805f, 0.584473f, 0.619141f, 0.651367f, 0.681152f, 0.709961f,
+ 0.737305f, 0.762695f, 0.785156f, 0.806641f, 0.826172f, 0.843262f, 0.859375f, 0.874023f,
+ 0.888184f, 0.900391f, 0.961426f, 0.964355f, 0.965332f, 0.964844f, 0.964355f, 0.964844f,
+ 0.000295f, 0.001419f, 0.002342f, 0.003471f, 0.004539f, 0.005821f, 0.006882f, 0.008354f,
+ 0.010155f, 0.011574f, 0.013283f, 0.015129f, 0.017090f, 0.019333f, 0.022125f, 0.024643f,
+ 0.028122f, 0.031586f, 0.035522f, 0.039825f, 0.044586f, 0.050110f, 0.056091f, 0.063354f,
+ 0.071045f, 0.080078f, 0.090637f, 0.102112f, 0.115479f, 0.130127f, 0.147217f, 0.165649f,
+ 0.186768f, 0.210571f, 0.236694f, 0.265137f, 0.295654f, 0.328857f, 0.363770f, 0.399902f,
+ 0.436523f, 0.474365f, 0.511230f, 0.548828f, 0.584961f, 0.619141f, 0.652344f, 0.684082f,
+ 0.712891f, 0.741211f, 0.766113f, 0.789062f, 0.810547f, 0.830078f, 0.848633f, 0.864258f,
+ 0.879395f, 0.892578f, 0.958496f, 0.962402f, 0.962402f, 0.962402f, 0.961914f, 0.962402f,
+ 0.000464f, 0.001313f, 0.002159f, 0.003134f, 0.004463f, 0.005001f, 0.006466f, 0.007595f,
+ 0.008842f, 0.010277f, 0.011971f, 0.013550f, 0.015434f, 0.017242f, 0.019348f, 0.021805f,
+ 0.024734f, 0.027817f, 0.031174f, 0.034821f, 0.039124f, 0.043823f, 0.049164f, 0.055237f,
+ 0.062164f, 0.069336f, 0.078430f, 0.088501f, 0.099976f, 0.112854f, 0.127319f, 0.143555f,
+ 0.162354f, 0.183350f, 0.207031f, 0.233032f, 0.260986f, 0.291992f, 0.325195f, 0.361084f,
+ 0.397217f, 0.435059f, 0.473389f, 0.510742f, 0.549316f, 0.586426f, 0.620605f, 0.654785f,
+ 0.686523f, 0.716797f, 0.744629f, 0.769043f, 0.793945f, 0.815918f, 0.834961f, 0.852539f,
+ 0.869141f, 0.884277f, 0.955078f, 0.959473f, 0.959473f, 0.959473f, 0.959961f, 0.959961f,
+ 0.000541f, 0.001223f, 0.002172f, 0.002886f, 0.003679f, 0.004681f, 0.005512f, 0.006683f,
+ 0.008049f, 0.009346f, 0.010704f, 0.012024f, 0.013626f, 0.015213f, 0.017227f, 0.019516f,
+ 0.022079f, 0.024612f, 0.027313f, 0.030731f, 0.034180f, 0.038239f, 0.042969f, 0.048187f,
+ 0.053864f, 0.060516f, 0.068298f, 0.076843f, 0.086670f, 0.097473f, 0.110107f, 0.124268f,
+ 0.140869f, 0.159302f, 0.180420f, 0.203613f, 0.229614f, 0.258057f, 0.289062f, 0.323486f,
+ 0.358398f, 0.395996f, 0.434082f, 0.472900f, 0.511719f, 0.550293f, 0.587402f, 0.624023f,
+ 0.658203f, 0.690918f, 0.721191f, 0.749512f, 0.774902f, 0.799316f, 0.821289f, 0.840820f,
+ 0.859375f, 0.875488f, 0.952637f, 0.956543f, 0.957520f, 0.957520f, 0.957520f, 0.957031f,
+ 0.000252f, 0.001056f, 0.001923f, 0.002523f, 0.003414f, 0.003960f, 0.005146f, 0.006172f,
+ 0.007130f, 0.008179f, 0.009567f, 0.010735f, 0.012077f, 0.013878f, 0.015640f, 0.017456f,
+ 0.019638f, 0.021622f, 0.024170f, 0.026978f, 0.030121f, 0.033630f, 0.037445f, 0.042053f,
+ 0.047119f, 0.052826f, 0.059174f, 0.066711f, 0.075012f, 0.084473f, 0.095276f, 0.107727f,
+ 0.122070f, 0.138184f, 0.156250f, 0.177246f, 0.200928f, 0.226929f, 0.255371f, 0.286865f,
+ 0.321289f, 0.356934f, 0.395264f, 0.434326f, 0.473877f, 0.514160f, 0.553711f, 0.591797f,
+ 0.628418f, 0.663574f, 0.696777f, 0.728027f, 0.755859f, 0.782715f, 0.806152f, 0.829102f,
+ 0.847656f, 0.867188f, 0.949707f, 0.954102f, 0.954590f, 0.954590f, 0.954102f, 0.954590f,
+ 0.000365f, 0.000963f, 0.001581f, 0.002337f, 0.002996f, 0.003952f, 0.004608f, 0.005459f,
+ 0.006489f, 0.007351f, 0.008484f, 0.009544f, 0.011108f, 0.012413f, 0.013901f, 0.015388f,
+ 0.017181f, 0.019012f, 0.021439f, 0.023727f, 0.026520f, 0.029449f, 0.032898f, 0.036835f,
+ 0.041046f, 0.045868f, 0.051575f, 0.058075f, 0.064758f, 0.073120f, 0.082520f, 0.093079f,
+ 0.105652f, 0.119385f, 0.135620f, 0.153687f, 0.174683f, 0.198364f, 0.224365f, 0.253662f,
+ 0.285400f, 0.320557f, 0.357178f, 0.395752f, 0.435791f, 0.476318f, 0.516602f, 0.557129f,
+ 0.596191f, 0.633789f, 0.669434f, 0.703613f, 0.734375f, 0.763672f, 0.790039f, 0.812988f,
+ 0.836914f, 0.855957f, 0.946289f, 0.949707f, 0.951172f, 0.951172f, 0.951172f, 0.951172f,
+ 0.000404f, 0.001028f, 0.001410f, 0.002098f, 0.002657f, 0.003445f, 0.004391f, 0.005039f,
+ 0.005665f, 0.006569f, 0.007549f, 0.008614f, 0.009743f, 0.011108f, 0.012390f, 0.013611f,
+ 0.015396f, 0.017044f, 0.018921f, 0.020874f, 0.023453f, 0.025833f, 0.028809f, 0.032501f,
+ 0.036011f, 0.040161f, 0.044952f, 0.050018f, 0.056091f, 0.063477f, 0.071533f, 0.080200f,
+ 0.091064f, 0.103027f, 0.117065f, 0.133057f, 0.151489f, 0.171997f, 0.196045f, 0.222290f,
+ 0.251709f, 0.284424f, 0.319824f, 0.357422f, 0.397217f, 0.438232f, 0.479492f, 0.521484f,
+ 0.562500f, 0.602051f, 0.641113f, 0.677734f, 0.711914f, 0.743164f, 0.772461f, 0.799316f,
+ 0.822754f, 0.845215f, 0.942383f, 0.946777f, 0.947754f, 0.947754f, 0.948242f, 0.948242f,
+ 0.000406f, 0.000992f, 0.001447f, 0.001986f, 0.002499f, 0.003149f, 0.003769f, 0.004272f,
+ 0.005016f, 0.005981f, 0.006924f, 0.007675f, 0.008766f, 0.009727f, 0.010765f, 0.011986f,
+ 0.013588f, 0.014915f, 0.016724f, 0.018478f, 0.020508f, 0.022873f, 0.025497f, 0.028336f,
+ 0.031525f, 0.034882f, 0.038818f, 0.043243f, 0.048615f, 0.054626f, 0.061707f, 0.069214f,
+ 0.078430f, 0.089111f, 0.101013f, 0.115112f, 0.130859f, 0.148926f, 0.170166f, 0.193604f,
+ 0.220947f, 0.250732f, 0.283936f, 0.320068f, 0.358887f, 0.400391f, 0.442139f, 0.483887f,
+ 0.527344f, 0.569824f, 0.610352f, 0.649414f, 0.686523f, 0.722168f, 0.753906f, 0.782227f,
+ 0.809570f, 0.833496f, 0.938477f, 0.942871f, 0.944824f, 0.944336f, 0.943848f, 0.943848f,
+ 0.000235f, 0.000984f, 0.001204f, 0.001706f, 0.002239f, 0.002998f, 0.003462f, 0.004093f,
+ 0.004372f, 0.005371f, 0.006149f, 0.006962f, 0.007736f, 0.008766f, 0.009804f, 0.010780f,
+ 0.011887f, 0.013336f, 0.014618f, 0.016159f, 0.018158f, 0.020050f, 0.022232f, 0.024597f,
+ 0.027313f, 0.030334f, 0.033752f, 0.037872f, 0.042389f, 0.047516f, 0.053192f, 0.059937f,
+ 0.067749f, 0.076599f, 0.086975f, 0.098755f, 0.112610f, 0.128662f, 0.146973f, 0.168091f,
+ 0.192383f, 0.220215f, 0.250732f, 0.284668f, 0.322021f, 0.361572f, 0.403564f, 0.446777f,
+ 0.490723f, 0.534668f, 0.577637f, 0.619629f, 0.660156f, 0.697754f, 0.731934f, 0.764648f,
+ 0.794922f, 0.820312f, 0.934082f, 0.939453f, 0.939941f, 0.941406f, 0.940430f, 0.940918f,
+ 0.000237f, 0.000591f, 0.001098f, 0.001619f, 0.002241f, 0.002636f, 0.003176f, 0.003521f,
+ 0.004101f, 0.004631f, 0.005398f, 0.006378f, 0.007000f, 0.007767f, 0.008713f, 0.009758f,
+ 0.010475f, 0.011734f, 0.013016f, 0.014404f, 0.015762f, 0.017517f, 0.019440f, 0.021469f,
+ 0.023651f, 0.026199f, 0.029495f, 0.033112f, 0.036499f, 0.040955f, 0.045959f, 0.051849f,
+ 0.058197f, 0.065552f, 0.074585f, 0.085022f, 0.096680f, 0.110535f, 0.126709f, 0.145264f,
+ 0.166626f, 0.191406f, 0.219482f, 0.250488f, 0.286133f, 0.323975f, 0.365723f, 0.408447f,
+ 0.453125f, 0.498779f, 0.542969f, 0.588379f, 0.631836f, 0.671387f, 0.709473f, 0.745117f,
+ 0.777344f, 0.807617f, 0.930176f, 0.935059f, 0.936523f, 0.936523f, 0.936523f, 0.936035f,
+ 0.000242f, 0.000761f, 0.000943f, 0.001624f, 0.001858f, 0.002390f, 0.002638f, 0.003054f,
+ 0.003805f, 0.004559f, 0.005035f, 0.005493f, 0.006157f, 0.006878f, 0.007687f, 0.008530f,
+ 0.009178f, 0.010406f, 0.011406f, 0.012520f, 0.014053f, 0.015579f, 0.017105f, 0.018661f,
+ 0.020737f, 0.022903f, 0.025650f, 0.028259f, 0.031433f, 0.035065f, 0.039581f, 0.044342f,
+ 0.049988f, 0.056366f, 0.064026f, 0.072632f, 0.082825f, 0.094666f, 0.108582f, 0.124634f,
+ 0.143799f, 0.165405f, 0.190796f, 0.219360f, 0.251953f, 0.287842f, 0.328125f, 0.370605f,
+ 0.415283f, 0.461670f, 0.507812f, 0.555176f, 0.600586f, 0.645020f, 0.685547f, 0.724121f,
+ 0.759277f, 0.792969f, 0.924805f, 0.931152f, 0.931641f, 0.932129f, 0.932129f, 0.931641f,
+ 0.000240f, 0.000685f, 0.000955f, 0.001395f, 0.001768f, 0.002157f, 0.002533f, 0.002970f,
+ 0.003223f, 0.003813f, 0.004601f, 0.004993f, 0.005428f, 0.005981f, 0.006878f, 0.007484f,
+ 0.008110f, 0.009132f, 0.009964f, 0.011208f, 0.012138f, 0.013374f, 0.015099f, 0.016190f,
+ 0.018112f, 0.020187f, 0.022202f, 0.024780f, 0.027573f, 0.030411f, 0.034119f, 0.037964f,
+ 0.042755f, 0.048553f, 0.054474f, 0.061890f, 0.070984f, 0.080688f, 0.092590f, 0.106812f,
+ 0.123291f, 0.142456f, 0.164551f, 0.190430f, 0.220459f, 0.253418f, 0.291504f, 0.332520f,
+ 0.376709f, 0.423340f, 0.471436f, 0.520508f, 0.567383f, 0.614746f, 0.660156f, 0.702148f,
+ 0.741211f, 0.776367f, 0.920410f, 0.925293f, 0.926270f, 0.926758f, 0.927246f, 0.926758f,
+ 0.000244f, 0.000431f, 0.000799f, 0.001309f, 0.001587f, 0.001945f, 0.002317f, 0.002514f,
+ 0.003290f, 0.003548f, 0.004082f, 0.004349f, 0.004707f, 0.005348f, 0.006027f, 0.006565f,
+ 0.007141f, 0.008011f, 0.008850f, 0.009552f, 0.010757f, 0.011650f, 0.012794f, 0.014145f,
+ 0.015778f, 0.017303f, 0.019028f, 0.021088f, 0.023575f, 0.026169f, 0.029175f, 0.032562f,
+ 0.036713f, 0.041382f, 0.046448f, 0.052948f, 0.060303f, 0.068787f, 0.079041f, 0.090942f,
+ 0.105103f, 0.121643f, 0.141113f, 0.164185f, 0.190308f, 0.221191f, 0.256836f, 0.295898f,
+ 0.339355f, 0.385010f, 0.433838f, 0.484619f, 0.534668f, 0.583496f, 0.631348f, 0.678223f,
+ 0.719727f, 0.759766f, 0.913574f, 0.920410f, 0.921387f, 0.921875f, 0.921875f, 0.921387f,
+ 0.000243f, 0.000496f, 0.000847f, 0.001157f, 0.001426f, 0.001634f, 0.002020f, 0.002338f,
+ 0.002607f, 0.003035f, 0.003502f, 0.003872f, 0.004459f, 0.004726f, 0.005402f, 0.005779f,
+ 0.006325f, 0.007095f, 0.007767f, 0.008568f, 0.009331f, 0.010086f, 0.011009f, 0.012314f,
+ 0.013611f, 0.015060f, 0.016312f, 0.018158f, 0.020401f, 0.022476f, 0.024979f, 0.027863f,
+ 0.031036f, 0.034943f, 0.039581f, 0.044830f, 0.050903f, 0.058289f, 0.066895f, 0.076782f,
+ 0.088989f, 0.103210f, 0.120422f, 0.140259f, 0.164185f, 0.191772f, 0.223877f, 0.260742f,
+ 0.301758f, 0.347168f, 0.395508f, 0.446533f, 0.497803f, 0.551270f, 0.601562f, 0.651855f,
+ 0.697754f, 0.741211f, 0.908203f, 0.915039f, 0.916016f, 0.916016f, 0.916504f, 0.915527f,
+ 0.000239f, 0.000345f, 0.000690f, 0.000913f, 0.001250f, 0.001343f, 0.001579f, 0.002050f,
+ 0.002331f, 0.002861f, 0.003048f, 0.003616f, 0.003696f, 0.004211f, 0.004723f, 0.005074f,
+ 0.005657f, 0.006100f, 0.006893f, 0.007290f, 0.008118f, 0.008659f, 0.009552f, 0.010704f,
+ 0.011681f, 0.012764f, 0.014114f, 0.015533f, 0.017227f, 0.018982f, 0.021286f, 0.023560f,
+ 0.026489f, 0.029861f, 0.033417f, 0.037933f, 0.043121f, 0.049286f, 0.056519f, 0.065002f,
+ 0.075073f, 0.087158f, 0.101624f, 0.118835f, 0.139648f, 0.164185f, 0.193481f, 0.226929f,
+ 0.265625f, 0.309570f, 0.356934f, 0.408203f, 0.461426f, 0.516113f, 0.569824f, 0.623047f,
+ 0.674316f, 0.720703f, 0.902344f, 0.908203f, 0.909668f, 0.910645f, 0.910645f, 0.911133f,
+ 0.000000f, 0.000281f, 0.000560f, 0.000977f, 0.001063f, 0.001171f, 0.001569f, 0.001903f,
+ 0.002075f, 0.002413f, 0.002695f, 0.003004f, 0.003399f, 0.003553f, 0.003998f, 0.004333f,
+ 0.004971f, 0.005314f, 0.005806f, 0.006340f, 0.007015f, 0.007492f, 0.008377f, 0.009186f,
+ 0.010094f, 0.010910f, 0.012199f, 0.013351f, 0.014618f, 0.016266f, 0.018082f, 0.019852f,
+ 0.022491f, 0.025085f, 0.028168f, 0.031799f, 0.036041f, 0.041107f, 0.047394f, 0.054321f,
+ 0.062866f, 0.073181f, 0.085327f, 0.100525f, 0.118408f, 0.139648f, 0.165527f, 0.196411f,
+ 0.231812f, 0.273193f, 0.318848f, 0.369629f, 0.423828f, 0.480225f, 0.536621f, 0.592773f,
+ 0.647949f, 0.699707f, 0.894043f, 0.900879f, 0.903809f, 0.903320f, 0.903320f, 0.902832f,
+ 0.000232f, 0.000227f, 0.000555f, 0.000656f, 0.000937f, 0.000985f, 0.001351f, 0.001723f,
+ 0.001925f, 0.002010f, 0.002445f, 0.002625f, 0.002760f, 0.003220f, 0.003551f, 0.003870f,
+ 0.004303f, 0.004826f, 0.005028f, 0.005451f, 0.005985f, 0.006523f, 0.007000f, 0.007744f,
+ 0.008499f, 0.009361f, 0.010109f, 0.011185f, 0.012413f, 0.013603f, 0.015121f, 0.016891f,
+ 0.018753f, 0.020920f, 0.023407f, 0.026764f, 0.030197f, 0.034302f, 0.039429f, 0.044891f,
+ 0.052368f, 0.060822f, 0.071167f, 0.083557f, 0.098877f, 0.117493f, 0.139893f, 0.167725f,
+ 0.200195f, 0.238037f, 0.281982f, 0.331543f, 0.385010f, 0.442627f, 0.501465f, 0.561523f,
+ 0.620605f, 0.675781f, 0.887207f, 0.894531f, 0.895020f, 0.896484f, 0.896484f, 0.895996f,
+ 0.000000f, 0.000332f, 0.000577f, 0.000723f, 0.000720f, 0.001210f, 0.001469f, 0.001456f,
+ 0.001546f, 0.001775f, 0.002159f, 0.002291f, 0.002659f, 0.002916f, 0.003046f, 0.003439f,
+ 0.003752f, 0.003883f, 0.004375f, 0.004635f, 0.005241f, 0.005638f, 0.006054f, 0.006630f,
+ 0.007191f, 0.007744f, 0.008545f, 0.009178f, 0.010498f, 0.011536f, 0.012802f, 0.013931f,
+ 0.015808f, 0.017548f, 0.019379f, 0.022110f, 0.025040f, 0.028473f, 0.032471f, 0.037323f,
+ 0.043152f, 0.050476f, 0.058807f, 0.069214f, 0.082520f, 0.098145f, 0.116821f, 0.141602f,
+ 0.170044f, 0.204834f, 0.245728f, 0.293213f, 0.346436f, 0.403564f, 0.464111f, 0.527832f,
+ 0.589844f, 0.650879f, 0.878418f, 0.886719f, 0.888184f, 0.887695f, 0.888672f, 0.888672f,
+ 0.000243f, 0.000307f, 0.000526f, 0.000561f, 0.000923f, 0.000980f, 0.001143f, 0.001386f,
+ 0.001414f, 0.001683f, 0.001735f, 0.001972f, 0.002232f, 0.002481f, 0.002657f, 0.002754f,
+ 0.003193f, 0.003359f, 0.003603f, 0.003956f, 0.004368f, 0.004692f, 0.005119f, 0.005596f,
+ 0.005955f, 0.006634f, 0.007256f, 0.007881f, 0.008652f, 0.009552f, 0.010376f, 0.011719f,
+ 0.012634f, 0.014595f, 0.016113f, 0.018219f, 0.020554f, 0.023254f, 0.026520f, 0.030502f,
+ 0.035553f, 0.041168f, 0.048065f, 0.057190f, 0.067261f, 0.080811f, 0.097107f, 0.117737f,
+ 0.143066f, 0.173950f, 0.211182f, 0.256592f, 0.307129f, 0.364502f, 0.427002f, 0.491943f,
+ 0.557617f, 0.624023f, 0.869629f, 0.877930f, 0.879883f, 0.879883f, 0.879883f, 0.880371f,
+ 0.000000f, 0.000270f, 0.000342f, 0.000509f, 0.000668f, 0.000989f, 0.000945f, 0.001105f,
+ 0.001230f, 0.001335f, 0.001492f, 0.001757f, 0.001917f, 0.002140f, 0.002386f, 0.002501f,
+ 0.002644f, 0.002884f, 0.003199f, 0.003441f, 0.003620f, 0.003891f, 0.004337f, 0.004631f,
+ 0.005119f, 0.005520f, 0.006100f, 0.006504f, 0.007301f, 0.007771f, 0.008751f, 0.009521f,
+ 0.010658f, 0.011765f, 0.013145f, 0.014641f, 0.016785f, 0.018829f, 0.021545f, 0.024719f,
+ 0.028381f, 0.033203f, 0.038849f, 0.046112f, 0.055084f, 0.065552f, 0.079529f, 0.096985f,
+ 0.118530f, 0.145630f, 0.179321f, 0.220337f, 0.269287f, 0.325439f, 0.387207f, 0.454102f,
+ 0.524414f, 0.595215f, 0.859863f, 0.868652f, 0.870605f, 0.869629f, 0.870117f, 0.870605f,
+ 0.000000f, 0.000230f, 0.000334f, 0.000416f, 0.000700f, 0.000726f, 0.000921f, 0.001008f,
+ 0.001065f, 0.001186f, 0.001365f, 0.001471f, 0.001627f, 0.001796f, 0.001843f, 0.002069f,
+ 0.002266f, 0.002438f, 0.002596f, 0.002831f, 0.003000f, 0.003298f, 0.003597f, 0.003887f,
+ 0.004265f, 0.004581f, 0.004986f, 0.005505f, 0.005947f, 0.006454f, 0.007069f, 0.007801f,
+ 0.008621f, 0.009575f, 0.010612f, 0.011848f, 0.013321f, 0.015259f, 0.017410f, 0.019775f,
+ 0.022934f, 0.026550f, 0.031464f, 0.036713f, 0.043945f, 0.052887f, 0.064209f, 0.078735f,
+ 0.096924f, 0.120361f, 0.149536f, 0.186768f, 0.232422f, 0.285889f, 0.347656f, 0.415527f,
+ 0.488281f, 0.563965f, 0.849121f, 0.857910f, 0.859375f, 0.860840f, 0.860840f, 0.860352f,
+ 0.000233f, 0.000225f, 0.000219f, 0.000431f, 0.000579f, 0.000648f, 0.000671f, 0.000744f,
+ 0.000946f, 0.000994f, 0.001091f, 0.001307f, 0.001364f, 0.001490f, 0.001561f, 0.001712f,
+ 0.001892f, 0.001999f, 0.002190f, 0.002369f, 0.002512f, 0.002733f, 0.003014f, 0.003145f,
+ 0.003553f, 0.003822f, 0.004135f, 0.004326f, 0.004799f, 0.005344f, 0.005718f, 0.006378f,
+ 0.007008f, 0.007721f, 0.008400f, 0.009537f, 0.010597f, 0.011917f, 0.013542f, 0.015579f,
+ 0.018051f, 0.020889f, 0.024765f, 0.029236f, 0.034668f, 0.041779f, 0.051056f, 0.062439f,
+ 0.077576f, 0.097595f, 0.122864f, 0.155273f, 0.196655f, 0.247437f, 0.307617f, 0.375977f,
+ 0.450684f, 0.531250f, 0.837891f, 0.847168f, 0.848633f, 0.849609f, 0.849121f, 0.849609f,
+ 0.000202f, 0.000180f, 0.000206f, 0.000339f, 0.000479f, 0.000536f, 0.000687f, 0.000739f,
+ 0.000771f, 0.000849f, 0.001051f, 0.001060f, 0.001154f, 0.001219f, 0.001389f, 0.001505f,
+ 0.001469f, 0.001729f, 0.001858f, 0.001980f, 0.002209f, 0.002243f, 0.002483f, 0.002695f,
+ 0.002951f, 0.003149f, 0.003374f, 0.003654f, 0.004002f, 0.004154f, 0.004539f, 0.005032f,
+ 0.005428f, 0.005989f, 0.006760f, 0.007549f, 0.008423f, 0.009499f, 0.010620f, 0.012016f,
+ 0.013992f, 0.016434f, 0.019135f, 0.022583f, 0.026840f, 0.032501f, 0.039551f, 0.048828f,
+ 0.061066f, 0.077393f, 0.098755f, 0.127075f, 0.163208f, 0.209717f, 0.267578f, 0.334961f,
+ 0.411133f, 0.494629f, 0.825684f, 0.834473f, 0.836426f, 0.837402f, 0.837402f, 0.837402f,
+ 0.000000f, 0.000185f, 0.000184f, 0.000404f, 0.000408f, 0.000454f, 0.000480f, 0.000506f,
+ 0.000660f, 0.000694f, 0.000742f, 0.000801f, 0.000989f, 0.001111f, 0.001167f, 0.001250f,
+ 0.001311f, 0.001424f, 0.001541f, 0.001574f, 0.001712f, 0.001930f, 0.001982f, 0.002201f,
+ 0.002375f, 0.002439f, 0.002792f, 0.002905f, 0.003065f, 0.003412f, 0.003653f, 0.003952f,
+ 0.004463f, 0.004723f, 0.005230f, 0.005936f, 0.006386f, 0.007092f, 0.008240f, 0.009247f,
+ 0.010765f, 0.012344f, 0.014420f, 0.017090f, 0.020493f, 0.024551f, 0.030014f, 0.037689f,
+ 0.047302f, 0.060028f, 0.077820f, 0.100830f, 0.132812f, 0.174561f, 0.228516f, 0.294434f,
+ 0.371582f, 0.457031f, 0.812012f, 0.820801f, 0.823730f, 0.824219f, 0.824707f, 0.824219f,
+ 0.000000f, 0.000053f, 0.000206f, 0.000360f, 0.000379f, 0.000391f, 0.000379f, 0.000478f,
+ 0.000549f, 0.000589f, 0.000626f, 0.000674f, 0.000762f, 0.000832f, 0.000894f, 0.001050f,
+ 0.001111f, 0.001155f, 0.001286f, 0.001345f, 0.001449f, 0.001564f, 0.001666f, 0.001750f,
+ 0.001856f, 0.001925f, 0.002056f, 0.002359f, 0.002542f, 0.002728f, 0.003042f, 0.003164f,
+ 0.003460f, 0.003786f, 0.004116f, 0.004578f, 0.005116f, 0.005688f, 0.006508f, 0.007229f,
+ 0.008125f, 0.009232f, 0.010796f, 0.012741f, 0.015137f, 0.018158f, 0.022186f, 0.028030f,
+ 0.035248f, 0.045593f, 0.059052f, 0.078308f, 0.105042f, 0.141602f, 0.190308f, 0.252930f,
+ 0.329102f, 0.417969f, 0.797852f, 0.807129f, 0.810059f, 0.810547f, 0.811035f, 0.810547f,
+ 0.000000f, 0.000000f, 0.000082f, 0.000195f, 0.000309f, 0.000336f, 0.000324f, 0.000414f,
+ 0.000439f, 0.000460f, 0.000599f, 0.000643f, 0.000637f, 0.000690f, 0.000733f, 0.000834f,
+ 0.000821f, 0.000922f, 0.000989f, 0.001067f, 0.001207f, 0.001293f, 0.001327f, 0.001476f,
+ 0.001581f, 0.001663f, 0.001725f, 0.001906f, 0.001934f, 0.002180f, 0.002258f, 0.002602f,
+ 0.002701f, 0.003019f, 0.003229f, 0.003502f, 0.003847f, 0.004261f, 0.004795f, 0.005318f,
+ 0.006130f, 0.007008f, 0.008118f, 0.009277f, 0.011024f, 0.013229f, 0.016205f, 0.020203f,
+ 0.025620f, 0.033020f, 0.043854f, 0.059021f, 0.080383f, 0.111206f, 0.154419f, 0.212646f,
+ 0.287354f, 0.378418f, 0.781250f, 0.792480f, 0.793457f, 0.795410f, 0.795898f, 0.794922f,
+ 0.000000f, 0.000121f, 0.000120f, 0.000198f, 0.000275f, 0.000249f, 0.000290f, 0.000360f,
+ 0.000375f, 0.000379f, 0.000391f, 0.000438f, 0.000505f, 0.000534f, 0.000669f, 0.000629f,
+ 0.000659f, 0.000754f, 0.000890f, 0.000833f, 0.000849f, 0.000975f, 0.001029f, 0.001117f,
+ 0.001193f, 0.001203f, 0.001269f, 0.001424f, 0.001594f, 0.001675f, 0.001737f, 0.001957f,
+ 0.002094f, 0.002319f, 0.002342f, 0.002609f, 0.002928f, 0.003248f, 0.003523f, 0.003967f,
+ 0.004547f, 0.005138f, 0.005871f, 0.006760f, 0.007912f, 0.009430f, 0.011528f, 0.014236f,
+ 0.017899f, 0.023346f, 0.031235f, 0.042694f, 0.059235f, 0.084229f, 0.120972f, 0.173950f,
+ 0.245239f, 0.334473f, 0.764160f, 0.775391f, 0.777344f, 0.778809f, 0.777832f, 0.778809f,
+ 0.000000f, 0.000121f, 0.000119f, 0.000182f, 0.000177f, 0.000179f, 0.000262f, 0.000239f,
+ 0.000309f, 0.000322f, 0.000404f, 0.000370f, 0.000361f, 0.000430f, 0.000458f, 0.000540f,
+ 0.000589f, 0.000615f, 0.000648f, 0.000632f, 0.000777f, 0.000782f, 0.000798f, 0.000871f,
+ 0.000857f, 0.000925f, 0.001000f, 0.001045f, 0.001191f, 0.001223f, 0.001426f, 0.001419f,
+ 0.001512f, 0.001635f, 0.001884f, 0.002092f, 0.002100f, 0.002293f, 0.002577f, 0.003012f,
+ 0.003258f, 0.003761f, 0.004253f, 0.004814f, 0.005619f, 0.006676f, 0.008064f, 0.009750f,
+ 0.012268f, 0.015854f, 0.021255f, 0.029282f, 0.041687f, 0.061005f, 0.091370f, 0.136230f,
+ 0.202759f, 0.291504f, 0.746582f, 0.757324f, 0.759277f, 0.760254f, 0.760254f, 0.760254f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000126f, 0.000113f, 0.000146f, 0.000158f, 0.000155f,
+ 0.000189f, 0.000288f, 0.000254f, 0.000336f, 0.000347f, 0.000353f, 0.000370f, 0.000355f,
+ 0.000390f, 0.000417f, 0.000456f, 0.000480f, 0.000525f, 0.000587f, 0.000596f, 0.000620f,
+ 0.000676f, 0.000740f, 0.000758f, 0.000852f, 0.000907f, 0.000947f, 0.001057f, 0.001122f,
+ 0.001170f, 0.001293f, 0.001316f, 0.001437f, 0.001531f, 0.001813f, 0.001952f, 0.002090f,
+ 0.002346f, 0.002560f, 0.002974f, 0.003334f, 0.003899f, 0.004547f, 0.005360f, 0.006516f,
+ 0.008179f, 0.010468f, 0.013947f, 0.019241f, 0.027832f, 0.041443f, 0.064941f, 0.102600f,
+ 0.162231f, 0.247437f, 0.726074f, 0.737793f, 0.739258f, 0.740723f, 0.741211f, 0.741211f,
+ 0.000000f, 0.000118f, 0.000115f, 0.000113f, 0.000110f, 0.000126f, 0.000121f, 0.000139f,
+ 0.000147f, 0.000160f, 0.000161f, 0.000233f, 0.000199f, 0.000266f, 0.000286f, 0.000297f,
+ 0.000329f, 0.000313f, 0.000347f, 0.000358f, 0.000364f, 0.000394f, 0.000435f, 0.000446f,
+ 0.000489f, 0.000506f, 0.000546f, 0.000625f, 0.000648f, 0.000674f, 0.000723f, 0.000782f,
+ 0.000865f, 0.000918f, 0.000979f, 0.001104f, 0.001100f, 0.001196f, 0.001352f, 0.001488f,
+ 0.001586f, 0.001749f, 0.001955f, 0.002275f, 0.002644f, 0.003054f, 0.003563f, 0.004322f,
+ 0.005314f, 0.006786f, 0.008980f, 0.012115f, 0.017319f, 0.026520f, 0.043121f, 0.072693f,
+ 0.123535f, 0.203613f, 0.705566f, 0.716797f, 0.719238f, 0.719727f, 0.720703f, 0.721191f,
+ 0.000000f, 0.000000f, 0.000112f, 0.000109f, 0.000106f, 0.000104f, 0.000102f, 0.000096f,
+ 0.000091f, 0.000113f, 0.000147f, 0.000129f, 0.000155f, 0.000134f, 0.000196f, 0.000205f,
+ 0.000181f, 0.000239f, 0.000297f, 0.000255f, 0.000317f, 0.000273f, 0.000335f, 0.000299f,
+ 0.000379f, 0.000385f, 0.000398f, 0.000402f, 0.000473f, 0.000552f, 0.000489f, 0.000543f,
+ 0.000557f, 0.000606f, 0.000662f, 0.000698f, 0.000747f, 0.000810f, 0.000902f, 0.000961f,
+ 0.001063f, 0.001166f, 0.001312f, 0.001523f, 0.001662f, 0.001908f, 0.002298f, 0.002758f,
+ 0.003365f, 0.004135f, 0.005394f, 0.007290f, 0.010490f, 0.015991f, 0.026215f, 0.047180f,
+ 0.087646f, 0.160645f, 0.682617f, 0.695801f, 0.697266f, 0.697266f, 0.697266f, 0.698730f,
+ 0.000000f, 0.000112f, 0.000106f, 0.000104f, 0.000100f, 0.000098f, 0.000095f, 0.000094f,
+ 0.000090f, 0.000085f, 0.000080f, 0.000081f, 0.000085f, 0.000123f, 0.000123f, 0.000138f,
+ 0.000151f, 0.000158f, 0.000147f, 0.000171f, 0.000183f, 0.000192f, 0.000242f, 0.000215f,
+ 0.000253f, 0.000256f, 0.000269f, 0.000278f, 0.000293f, 0.000315f, 0.000377f, 0.000357f,
+ 0.000357f, 0.000423f, 0.000479f, 0.000493f, 0.000489f, 0.000535f, 0.000579f, 0.000628f,
+ 0.000683f, 0.000731f, 0.000833f, 0.000935f, 0.001068f, 0.001200f, 0.001347f, 0.001581f,
+ 0.001995f, 0.002419f, 0.003109f, 0.004147f, 0.005829f, 0.008919f, 0.014641f, 0.027405f,
+ 0.056885f, 0.119385f, 0.658691f, 0.669922f, 0.673828f, 0.673828f, 0.675293f, 0.675293f,
+ 0.000000f, 0.000105f, 0.000101f, 0.000096f, 0.000092f, 0.000089f, 0.000087f, 0.000085f,
+ 0.000083f, 0.000081f, 0.000077f, 0.000073f, 0.000070f, 0.000066f, 0.000080f, 0.000084f,
+ 0.000089f, 0.000068f, 0.000101f, 0.000094f, 0.000116f, 0.000118f, 0.000125f, 0.000129f,
+ 0.000150f, 0.000168f, 0.000153f, 0.000192f, 0.000195f, 0.000185f, 0.000200f, 0.000217f,
+ 0.000226f, 0.000247f, 0.000257f, 0.000262f, 0.000319f, 0.000334f, 0.000347f, 0.000376f,
+ 0.000395f, 0.000447f, 0.000504f, 0.000544f, 0.000590f, 0.000670f, 0.000789f, 0.000887f,
+ 0.001069f, 0.001345f, 0.001670f, 0.002167f, 0.003065f, 0.004562f, 0.007660f, 0.014290f,
+ 0.032135f, 0.081299f, 0.632812f, 0.645996f, 0.648926f, 0.649414f, 0.648926f, 0.649902f,
+ 0.000109f, 0.000094f, 0.000087f, 0.000082f, 0.000078f, 0.000076f, 0.000074f, 0.000071f,
+ 0.000069f, 0.000068f, 0.000067f, 0.000066f, 0.000064f, 0.000061f, 0.000058f, 0.000055f,
+ 0.000053f, 0.000050f, 0.000051f, 0.000046f, 0.000059f, 0.000056f, 0.000057f, 0.000068f,
+ 0.000078f, 0.000088f, 0.000096f, 0.000096f, 0.000105f, 0.000107f, 0.000128f, 0.000121f,
+ 0.000133f, 0.000141f, 0.000156f, 0.000151f, 0.000160f, 0.000200f, 0.000209f, 0.000198f,
+ 0.000222f, 0.000242f, 0.000258f, 0.000275f, 0.000314f, 0.000352f, 0.000410f, 0.000468f,
+ 0.000537f, 0.000639f, 0.000799f, 0.001002f, 0.001390f, 0.002092f, 0.003466f, 0.006653f,
+ 0.015305f, 0.048004f, 0.606934f, 0.618652f, 0.622559f, 0.623047f, 0.623535f, 0.624023f,
+ 0.000084f, 0.000067f, 0.000064f, 0.000062f, 0.000057f, 0.000056f, 0.000053f, 0.000054f,
+ 0.000051f, 0.000052f, 0.000050f, 0.000050f, 0.000050f, 0.000049f, 0.000048f, 0.000047f,
+ 0.000046f, 0.000044f, 0.000042f, 0.000040f, 0.000039f, 0.000037f, 0.000035f, 0.000036f,
+ 0.000037f, 0.000031f, 0.000040f, 0.000041f, 0.000042f, 0.000051f, 0.000058f, 0.000063f,
+ 0.000067f, 0.000069f, 0.000072f, 0.000079f, 0.000085f, 0.000092f, 0.000093f, 0.000101f,
+ 0.000107f, 0.000123f, 0.000125f, 0.000139f, 0.000147f, 0.000154f, 0.000181f, 0.000204f,
+ 0.000229f, 0.000270f, 0.000327f, 0.000425f, 0.000559f, 0.000772f, 0.001265f, 0.002462f,
+ 0.006191f, 0.022415f, 0.578613f, 0.592285f, 0.595215f, 0.596191f, 0.596191f, 0.597656f,
+ 0.000008f, 0.000022f, 0.000022f, 0.000024f, 0.000024f, 0.000027f, 0.000028f, 0.000028f,
+ 0.000028f, 0.000026f, 0.000028f, 0.000029f, 0.000029f, 0.000028f, 0.000029f, 0.000029f,
+ 0.000029f, 0.000029f, 0.000030f, 0.000030f, 0.000030f, 0.000029f, 0.000028f, 0.000027f,
+ 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f,
+ 0.000021f, 0.000020f, 0.000022f, 0.000026f, 0.000028f, 0.000033f, 0.000037f, 0.000036f,
+ 0.000039f, 0.000045f, 0.000051f, 0.000046f, 0.000056f, 0.000059f, 0.000061f, 0.000071f,
+ 0.000084f, 0.000098f, 0.000110f, 0.000133f, 0.000169f, 0.000223f, 0.000356f, 0.000648f,
+ 0.001702f, 0.007713f, 0.550293f, 0.564453f, 0.566895f, 0.567871f, 0.568359f, 0.568848f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000003f, 0.000004f, 0.000006f,
+ 0.000007f, 0.000007f, 0.000008f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000011f,
+ 0.000012f, 0.000012f, 0.000013f, 0.000013f, 0.000013f, 0.000014f, 0.000014f, 0.000013f,
+ 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
+ 0.000008f, 0.000008f, 0.000009f, 0.000011f, 0.000014f, 0.000017f, 0.000015f, 0.000018f,
+ 0.000021f, 0.000022f, 0.000023f, 0.000026f, 0.000035f, 0.000040f, 0.000056f, 0.000089f,
+ 0.000225f, 0.001332f, 0.520996f, 0.535156f, 0.538086f, 0.540039f, 0.540039f, 0.540039f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000003f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000004f, 0.000017f, 0.491211f, 0.506348f, 0.508789f, 0.510254f, 0.510254f, 0.510742f,
+ },
+ {
+ 0.064758f, 0.179688f, 0.277344f, 0.358398f, 0.427002f, 0.485107f, 0.535156f, 0.578613f,
+ 0.615234f, 0.647949f, 0.677734f, 0.703125f, 0.725586f, 0.745605f, 0.763672f, 0.780273f,
+ 0.795410f, 0.810059f, 0.821777f, 0.833496f, 0.843750f, 0.854004f, 0.862793f, 0.871582f,
+ 0.879883f, 0.886719f, 0.894043f, 0.900879f, 0.906250f, 0.912109f, 0.917969f, 0.922852f,
+ 0.927246f, 0.932129f, 0.936523f, 0.940918f, 0.944824f, 0.948242f, 0.951660f, 0.955078f,
+ 0.958496f, 0.961426f, 0.964844f, 0.967773f, 0.970215f, 0.973145f, 0.975586f, 0.977539f,
+ 0.979980f, 0.982422f, 0.984863f, 0.986328f, 0.988770f, 0.990234f, 0.992676f, 0.993652f,
+ 0.995605f, 0.997559f, 0.998535f, 0.996582f, 0.995117f, 0.993652f, 0.992188f, 0.990723f,
+ 0.040344f, 0.121460f, 0.199341f, 0.272949f, 0.339600f, 0.401123f, 0.455078f, 0.501953f,
+ 0.546875f, 0.583984f, 0.618164f, 0.648926f, 0.676270f, 0.700195f, 0.723145f, 0.743164f,
+ 0.761230f, 0.776855f, 0.793457f, 0.806641f, 0.819336f, 0.831543f, 0.842285f, 0.852051f,
+ 0.861328f, 0.869629f, 0.877930f, 0.886230f, 0.892578f, 0.899902f, 0.905273f, 0.911621f,
+ 0.917480f, 0.922852f, 0.927246f, 0.932129f, 0.936035f, 0.940430f, 0.945312f, 0.949219f,
+ 0.952148f, 0.956055f, 0.958984f, 0.961914f, 0.965332f, 0.967773f, 0.970703f, 0.973633f,
+ 0.976074f, 0.978516f, 0.980957f, 0.983398f, 0.985840f, 0.987305f, 0.989258f, 0.991699f,
+ 0.993652f, 0.995117f, 0.997070f, 0.995605f, 0.994141f, 0.993164f, 0.991699f, 0.990234f,
+ 0.027191f, 0.084961f, 0.145630f, 0.206177f, 0.266113f, 0.323242f, 0.377930f, 0.428711f,
+ 0.474609f, 0.517090f, 0.554688f, 0.591309f, 0.621582f, 0.650391f, 0.676758f, 0.700684f,
+ 0.723145f, 0.741699f, 0.760254f, 0.776855f, 0.791504f, 0.805664f, 0.818359f, 0.830566f,
+ 0.841309f, 0.851074f, 0.861816f, 0.870117f, 0.878418f, 0.885254f, 0.892090f, 0.899414f,
+ 0.906250f, 0.912598f, 0.916992f, 0.922363f, 0.928223f, 0.932617f, 0.937500f, 0.941895f,
+ 0.945801f, 0.949219f, 0.953613f, 0.957031f, 0.960449f, 0.963379f, 0.966797f, 0.969727f,
+ 0.971680f, 0.974609f, 0.977539f, 0.979980f, 0.981934f, 0.984375f, 0.986328f, 0.989258f,
+ 0.991211f, 0.992676f, 0.996094f, 0.994629f, 0.993652f, 0.992188f, 0.990723f, 0.989746f,
+ 0.019577f, 0.061340f, 0.108337f, 0.156860f, 0.207153f, 0.258789f, 0.310059f, 0.358887f,
+ 0.405762f, 0.450928f, 0.491211f, 0.530273f, 0.565430f, 0.597656f, 0.627441f, 0.654297f,
+ 0.680176f, 0.702637f, 0.724121f, 0.743164f, 0.760742f, 0.776855f, 0.791992f, 0.806152f,
+ 0.817871f, 0.830078f, 0.841797f, 0.852539f, 0.861816f, 0.870117f, 0.878906f, 0.886230f,
+ 0.893066f, 0.900391f, 0.906738f, 0.912598f, 0.918457f, 0.923340f, 0.928223f, 0.933594f,
+ 0.938477f, 0.942871f, 0.946777f, 0.950684f, 0.954590f, 0.958496f, 0.960938f, 0.964844f,
+ 0.967773f, 0.970703f, 0.973633f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.985840f,
+ 0.987793f, 0.990234f, 0.995117f, 0.993652f, 0.992676f, 0.991699f, 0.990234f, 0.989258f,
+ 0.014397f, 0.046295f, 0.081543f, 0.120728f, 0.162842f, 0.206177f, 0.250977f, 0.296143f,
+ 0.342041f, 0.385986f, 0.427979f, 0.468262f, 0.506348f, 0.542480f, 0.575195f, 0.605469f,
+ 0.633789f, 0.660156f, 0.684570f, 0.706543f, 0.727539f, 0.745117f, 0.763184f, 0.778809f,
+ 0.793945f, 0.807617f, 0.820312f, 0.833008f, 0.842773f, 0.852539f, 0.862305f, 0.872070f,
+ 0.879395f, 0.887207f, 0.894531f, 0.900879f, 0.907227f, 0.914551f, 0.919922f, 0.925293f,
+ 0.930176f, 0.935547f, 0.938965f, 0.943359f, 0.948730f, 0.952637f, 0.956055f, 0.959473f,
+ 0.962891f, 0.966309f, 0.969238f, 0.972656f, 0.975098f, 0.977539f, 0.980957f, 0.982910f,
+ 0.984863f, 0.987793f, 0.994141f, 0.993164f, 0.991699f, 0.990723f, 0.989746f, 0.988281f,
+ 0.010925f, 0.035828f, 0.063660f, 0.094360f, 0.128174f, 0.164551f, 0.203247f, 0.244385f,
+ 0.285645f, 0.326416f, 0.367432f, 0.409424f, 0.447998f, 0.484131f, 0.520508f, 0.553711f,
+ 0.584473f, 0.614258f, 0.641113f, 0.666016f, 0.689453f, 0.710938f, 0.730469f, 0.750488f,
+ 0.766602f, 0.781250f, 0.796387f, 0.809570f, 0.822266f, 0.833496f, 0.844727f, 0.854980f,
+ 0.864258f, 0.873047f, 0.881348f, 0.889648f, 0.895996f, 0.903809f, 0.910156f, 0.916504f,
+ 0.921387f, 0.926758f, 0.932129f, 0.937500f, 0.941895f, 0.946777f, 0.950684f, 0.954102f,
+ 0.958008f, 0.960938f, 0.965332f, 0.968262f, 0.971680f, 0.975098f, 0.977539f, 0.979492f,
+ 0.982422f, 0.984863f, 0.992676f, 0.991699f, 0.990723f, 0.989746f, 0.988770f, 0.987793f,
+ 0.008698f, 0.028244f, 0.049866f, 0.074463f, 0.102295f, 0.132935f, 0.165161f, 0.200073f,
+ 0.236206f, 0.275391f, 0.313477f, 0.352051f, 0.391113f, 0.428955f, 0.465088f, 0.500977f,
+ 0.534180f, 0.565430f, 0.593750f, 0.622559f, 0.648438f, 0.671875f, 0.694824f, 0.715820f,
+ 0.734863f, 0.753906f, 0.771484f, 0.784668f, 0.799805f, 0.813477f, 0.825195f, 0.836914f,
+ 0.847656f, 0.857910f, 0.866699f, 0.875488f, 0.884766f, 0.892090f, 0.898438f, 0.906250f,
+ 0.913086f, 0.918457f, 0.923828f, 0.929688f, 0.935059f, 0.939941f, 0.944336f, 0.948730f,
+ 0.952637f, 0.956055f, 0.959961f, 0.963379f, 0.967285f, 0.970703f, 0.973633f, 0.976074f,
+ 0.979492f, 0.982422f, 0.991211f, 0.990723f, 0.990234f, 0.988770f, 0.987793f, 0.986328f,
+ 0.007210f, 0.022797f, 0.040039f, 0.060181f, 0.082153f, 0.107300f, 0.134155f, 0.164673f,
+ 0.196167f, 0.229492f, 0.265381f, 0.301025f, 0.338379f, 0.374756f, 0.411133f, 0.446533f,
+ 0.481201f, 0.515625f, 0.546387f, 0.576660f, 0.605957f, 0.631348f, 0.656738f, 0.681152f,
+ 0.702148f, 0.722168f, 0.741699f, 0.758789f, 0.775391f, 0.791016f, 0.803711f, 0.817383f,
+ 0.829102f, 0.840820f, 0.851562f, 0.860840f, 0.871094f, 0.879395f, 0.887695f, 0.895020f,
+ 0.901855f, 0.909180f, 0.915527f, 0.921387f, 0.927734f, 0.932129f, 0.937500f, 0.941895f,
+ 0.947266f, 0.950684f, 0.955078f, 0.958984f, 0.962891f, 0.966797f, 0.969727f, 0.973145f,
+ 0.976562f, 0.979004f, 0.990234f, 0.989746f, 0.988770f, 0.987793f, 0.986816f, 0.985840f,
+ 0.005863f, 0.018936f, 0.032898f, 0.049377f, 0.067261f, 0.088257f, 0.110535f, 0.135254f,
+ 0.162231f, 0.191895f, 0.223389f, 0.255371f, 0.290039f, 0.324707f, 0.359863f, 0.395996f,
+ 0.429932f, 0.464355f, 0.497314f, 0.529297f, 0.559570f, 0.587891f, 0.616699f, 0.642090f,
+ 0.665527f, 0.688965f, 0.709961f, 0.729492f, 0.747559f, 0.765625f, 0.780762f, 0.794922f,
+ 0.809082f, 0.822754f, 0.833984f, 0.844727f, 0.855957f, 0.864746f, 0.875000f, 0.883789f,
+ 0.891113f, 0.898926f, 0.906250f, 0.912598f, 0.918457f, 0.925293f, 0.930664f, 0.935059f,
+ 0.940918f, 0.945312f, 0.950195f, 0.954590f, 0.958496f, 0.962402f, 0.965820f, 0.969238f,
+ 0.972656f, 0.976074f, 0.988770f, 0.988770f, 0.987793f, 0.986816f, 0.985840f, 0.984863f,
+ 0.004925f, 0.015518f, 0.027451f, 0.041199f, 0.055786f, 0.072998f, 0.091492f, 0.112427f,
+ 0.135254f, 0.160767f, 0.187500f, 0.216919f, 0.247314f, 0.280273f, 0.313477f, 0.346680f,
+ 0.381592f, 0.415283f, 0.448730f, 0.481201f, 0.513184f, 0.543945f, 0.573242f, 0.601562f,
+ 0.627441f, 0.652344f, 0.675293f, 0.697754f, 0.718262f, 0.737793f, 0.754883f, 0.771973f,
+ 0.787109f, 0.800781f, 0.815430f, 0.828125f, 0.839844f, 0.851074f, 0.860840f, 0.870117f,
+ 0.879883f, 0.887695f, 0.896484f, 0.902832f, 0.911133f, 0.916992f, 0.922852f, 0.928711f,
+ 0.934082f, 0.939941f, 0.944336f, 0.948730f, 0.954102f, 0.958008f, 0.961426f, 0.965332f,
+ 0.969238f, 0.972168f, 0.987305f, 0.987305f, 0.986816f, 0.985840f, 0.984863f, 0.983887f,
+ 0.004139f, 0.012955f, 0.022781f, 0.034088f, 0.046997f, 0.061005f, 0.076538f, 0.094360f,
+ 0.113464f, 0.134888f, 0.158203f, 0.183716f, 0.210693f, 0.239990f, 0.270264f, 0.302734f,
+ 0.334961f, 0.367676f, 0.400635f, 0.434082f, 0.467041f, 0.497803f, 0.528809f, 0.558105f,
+ 0.586426f, 0.614258f, 0.638672f, 0.663574f, 0.686035f, 0.707520f, 0.728027f, 0.745605f,
+ 0.762695f, 0.779297f, 0.794434f, 0.808594f, 0.821777f, 0.834473f, 0.845215f, 0.855957f,
+ 0.866699f, 0.876465f, 0.884766f, 0.892090f, 0.900391f, 0.908203f, 0.915039f, 0.920898f,
+ 0.927246f, 0.932617f, 0.937988f, 0.943848f, 0.948730f, 0.952637f, 0.957520f, 0.961426f,
+ 0.965820f, 0.968750f, 0.985840f, 0.985840f, 0.985840f, 0.984375f, 0.983887f, 0.982910f,
+ 0.003492f, 0.011307f, 0.019608f, 0.028793f, 0.039246f, 0.051544f, 0.064392f, 0.078796f,
+ 0.095337f, 0.113953f, 0.134033f, 0.155396f, 0.179688f, 0.205200f, 0.232300f, 0.261475f,
+ 0.291748f, 0.323730f, 0.355225f, 0.387939f, 0.420410f, 0.452637f, 0.483887f, 0.514648f,
+ 0.544922f, 0.573730f, 0.601074f, 0.626953f, 0.651367f, 0.675293f, 0.697266f, 0.717285f,
+ 0.736816f, 0.755371f, 0.771973f, 0.786621f, 0.803223f, 0.815430f, 0.828613f, 0.840820f,
+ 0.851562f, 0.863281f, 0.873047f, 0.880859f, 0.890625f, 0.898438f, 0.905762f, 0.913086f,
+ 0.919434f, 0.925781f, 0.931641f, 0.937500f, 0.942871f, 0.947754f, 0.952637f, 0.957520f,
+ 0.960938f, 0.965820f, 0.984375f, 0.984863f, 0.984375f, 0.983398f, 0.982422f, 0.981445f,
+ 0.002977f, 0.009415f, 0.016708f, 0.024811f, 0.033356f, 0.043457f, 0.054535f, 0.067017f,
+ 0.080322f, 0.096130f, 0.113708f, 0.132080f, 0.152710f, 0.175415f, 0.199829f, 0.226440f,
+ 0.253662f, 0.282959f, 0.313232f, 0.343750f, 0.375000f, 0.406982f, 0.439453f, 0.471191f,
+ 0.501465f, 0.531738f, 0.560547f, 0.587891f, 0.615234f, 0.640625f, 0.664062f, 0.687500f,
+ 0.708496f, 0.728516f, 0.747559f, 0.765137f, 0.781738f, 0.795898f, 0.811523f, 0.824707f,
+ 0.836426f, 0.847656f, 0.858887f, 0.869141f, 0.878906f, 0.887695f, 0.895996f, 0.904297f,
+ 0.911133f, 0.917969f, 0.925293f, 0.931152f, 0.937012f, 0.942383f, 0.947266f, 0.953125f,
+ 0.957031f, 0.961426f, 0.982910f, 0.983398f, 0.982910f, 0.982422f, 0.981445f, 0.980957f,
+ 0.002743f, 0.008568f, 0.014305f, 0.021378f, 0.028732f, 0.037201f, 0.046387f, 0.057068f,
+ 0.068848f, 0.082336f, 0.096924f, 0.113159f, 0.130859f, 0.150146f, 0.171509f, 0.194824f,
+ 0.219482f, 0.246338f, 0.273926f, 0.302734f, 0.333496f, 0.364502f, 0.395752f, 0.426758f,
+ 0.458252f, 0.489990f, 0.519531f, 0.548340f, 0.576660f, 0.604004f, 0.630859f, 0.654297f,
+ 0.678223f, 0.700684f, 0.720215f, 0.740234f, 0.758301f, 0.775391f, 0.790527f, 0.805176f,
+ 0.818848f, 0.833008f, 0.844238f, 0.855469f, 0.866699f, 0.876953f, 0.886230f, 0.894043f,
+ 0.902832f, 0.910645f, 0.917480f, 0.924316f, 0.930664f, 0.937012f, 0.941895f, 0.947266f,
+ 0.952148f, 0.957031f, 0.981445f, 0.982422f, 0.981445f, 0.980957f, 0.980469f, 0.979004f,
+ 0.002504f, 0.007004f, 0.012634f, 0.018555f, 0.024933f, 0.032654f, 0.040283f, 0.048920f,
+ 0.059357f, 0.070007f, 0.082642f, 0.096741f, 0.112122f, 0.128906f, 0.147339f, 0.167603f,
+ 0.189697f, 0.213257f, 0.238770f, 0.265869f, 0.293701f, 0.323242f, 0.354004f, 0.384766f,
+ 0.415283f, 0.447021f, 0.478516f, 0.507812f, 0.536621f, 0.565918f, 0.593750f, 0.620605f,
+ 0.645508f, 0.668945f, 0.692383f, 0.712891f, 0.733398f, 0.751465f, 0.769531f, 0.785156f,
+ 0.801270f, 0.814941f, 0.828125f, 0.841797f, 0.853516f, 0.864746f, 0.874512f, 0.883789f,
+ 0.893555f, 0.900879f, 0.910156f, 0.917480f, 0.923340f, 0.930664f, 0.936523f, 0.942383f,
+ 0.947754f, 0.952637f, 0.979492f, 0.980469f, 0.980469f, 0.979492f, 0.978516f, 0.978027f,
+ 0.002039f, 0.006287f, 0.010864f, 0.016129f, 0.021637f, 0.027786f, 0.034485f, 0.042450f,
+ 0.051331f, 0.060760f, 0.071594f, 0.082886f, 0.096313f, 0.110840f, 0.126587f, 0.145020f,
+ 0.164185f, 0.185181f, 0.207520f, 0.232300f, 0.258301f, 0.285889f, 0.314941f, 0.344238f,
+ 0.374268f, 0.405029f, 0.436035f, 0.466797f, 0.498291f, 0.527344f, 0.555664f, 0.583984f,
+ 0.611328f, 0.636230f, 0.661133f, 0.684082f, 0.705566f, 0.726562f, 0.745605f, 0.764648f,
+ 0.781250f, 0.797852f, 0.812500f, 0.825195f, 0.838867f, 0.851074f, 0.862305f, 0.873535f,
+ 0.883301f, 0.892578f, 0.901367f, 0.908203f, 0.916992f, 0.923828f, 0.931152f, 0.937012f,
+ 0.942383f, 0.947266f, 0.978027f, 0.978516f, 0.979004f, 0.978027f, 0.977051f, 0.977051f,
+ 0.001762f, 0.005489f, 0.009804f, 0.013931f, 0.019028f, 0.024445f, 0.030518f, 0.036865f,
+ 0.044189f, 0.052460f, 0.061432f, 0.071960f, 0.083008f, 0.095642f, 0.109558f, 0.124756f,
+ 0.141602f, 0.160156f, 0.180664f, 0.202148f, 0.225952f, 0.250977f, 0.278076f, 0.305664f,
+ 0.334961f, 0.364990f, 0.394775f, 0.425537f, 0.456543f, 0.487061f, 0.517090f, 0.546387f,
+ 0.575195f, 0.602539f, 0.627930f, 0.653809f, 0.676758f, 0.699707f, 0.721191f, 0.740723f,
+ 0.759766f, 0.777832f, 0.793945f, 0.809082f, 0.823242f, 0.836426f, 0.849609f, 0.861328f,
+ 0.872070f, 0.881836f, 0.892578f, 0.900391f, 0.908691f, 0.916992f, 0.924316f, 0.931152f,
+ 0.937500f, 0.943359f, 0.976074f, 0.977051f, 0.977051f, 0.976562f, 0.976074f, 0.975098f,
+ 0.001675f, 0.005020f, 0.008400f, 0.012253f, 0.016724f, 0.021469f, 0.026428f, 0.032104f,
+ 0.039062f, 0.045563f, 0.053741f, 0.062103f, 0.072205f, 0.082947f, 0.094666f, 0.107727f,
+ 0.122681f, 0.139038f, 0.156250f, 0.176514f, 0.197388f, 0.220581f, 0.244629f, 0.270752f,
+ 0.297607f, 0.326172f, 0.355957f, 0.386475f, 0.416748f, 0.447754f, 0.478027f, 0.507812f,
+ 0.538086f, 0.566406f, 0.594727f, 0.621582f, 0.647461f, 0.671387f, 0.694336f, 0.716797f,
+ 0.737305f, 0.755859f, 0.773438f, 0.791016f, 0.807129f, 0.820801f, 0.834961f, 0.848145f,
+ 0.860352f, 0.871582f, 0.881836f, 0.891602f, 0.901367f, 0.909180f, 0.917480f, 0.925293f,
+ 0.932129f, 0.938965f, 0.974609f, 0.975586f, 0.976074f, 0.974609f, 0.974121f, 0.973633f,
+ 0.001437f, 0.004513f, 0.007427f, 0.010994f, 0.014526f, 0.018829f, 0.023331f, 0.028229f,
+ 0.034058f, 0.040192f, 0.046844f, 0.054321f, 0.062683f, 0.071716f, 0.082397f, 0.093933f,
+ 0.106567f, 0.120728f, 0.136230f, 0.153320f, 0.172485f, 0.192627f, 0.214233f, 0.237915f,
+ 0.263672f, 0.290527f, 0.318115f, 0.347412f, 0.377197f, 0.408203f, 0.438477f, 0.469482f,
+ 0.499512f, 0.529785f, 0.558594f, 0.586914f, 0.614258f, 0.641602f, 0.665527f, 0.689941f,
+ 0.711914f, 0.732422f, 0.752930f, 0.771484f, 0.789062f, 0.805664f, 0.819824f, 0.833984f,
+ 0.847656f, 0.860840f, 0.871094f, 0.881836f, 0.891602f, 0.902344f, 0.910156f, 0.918457f,
+ 0.926270f, 0.932617f, 0.972168f, 0.973633f, 0.973633f, 0.973145f, 0.973145f, 0.971680f,
+ 0.001390f, 0.003952f, 0.006779f, 0.009941f, 0.013062f, 0.017029f, 0.020905f, 0.024994f,
+ 0.029877f, 0.035187f, 0.041077f, 0.047119f, 0.055145f, 0.062500f, 0.071594f, 0.081543f,
+ 0.092712f, 0.104736f, 0.118530f, 0.133179f, 0.150024f, 0.168091f, 0.187378f, 0.209717f,
+ 0.232178f, 0.256836f, 0.283447f, 0.311279f, 0.339844f, 0.369873f, 0.399658f, 0.429932f,
+ 0.461426f, 0.492188f, 0.521973f, 0.551758f, 0.580566f, 0.608887f, 0.635254f, 0.660645f,
+ 0.685059f, 0.708008f, 0.729492f, 0.750488f, 0.769043f, 0.786621f, 0.802734f, 0.818848f,
+ 0.832520f, 0.846680f, 0.860352f, 0.871582f, 0.882324f, 0.892578f, 0.902832f, 0.911133f,
+ 0.919922f, 0.926758f, 0.970703f, 0.971680f, 0.971680f, 0.971680f, 0.971680f, 0.969238f,
+ 0.001328f, 0.003641f, 0.006138f, 0.008690f, 0.011444f, 0.014786f, 0.018311f, 0.022125f,
+ 0.026337f, 0.031403f, 0.036011f, 0.041809f, 0.047943f, 0.054901f, 0.062622f, 0.071106f,
+ 0.081299f, 0.091614f, 0.103455f, 0.116333f, 0.130493f, 0.146484f, 0.164307f, 0.183228f,
+ 0.204224f, 0.226685f, 0.251221f, 0.277100f, 0.303711f, 0.332764f, 0.361572f, 0.391846f,
+ 0.422852f, 0.454102f, 0.485352f, 0.515625f, 0.545410f, 0.574707f, 0.603027f, 0.630371f,
+ 0.656250f, 0.681641f, 0.705078f, 0.726562f, 0.747070f, 0.767578f, 0.784668f, 0.803223f,
+ 0.818848f, 0.833008f, 0.847656f, 0.860352f, 0.872559f, 0.883301f, 0.894043f, 0.903809f,
+ 0.913574f, 0.921387f, 0.967773f, 0.970215f, 0.970215f, 0.968750f, 0.969238f, 0.968750f,
+ 0.001053f, 0.002905f, 0.005432f, 0.007912f, 0.010658f, 0.012901f, 0.016464f, 0.019363f,
+ 0.023376f, 0.027237f, 0.031799f, 0.036346f, 0.042145f, 0.048248f, 0.054871f, 0.062256f,
+ 0.070618f, 0.079834f, 0.089844f, 0.101440f, 0.113831f, 0.128174f, 0.143433f, 0.160156f,
+ 0.179077f, 0.199707f, 0.222046f, 0.245483f, 0.271240f, 0.297363f, 0.325684f, 0.355469f,
+ 0.385254f, 0.416016f, 0.447754f, 0.479004f, 0.508789f, 0.539551f, 0.570312f, 0.598145f,
+ 0.626465f, 0.652344f, 0.678223f, 0.702148f, 0.725098f, 0.746094f, 0.765625f, 0.785645f,
+ 0.803223f, 0.819336f, 0.834961f, 0.848145f, 0.861328f, 0.873535f, 0.884766f, 0.895508f,
+ 0.905762f, 0.915527f, 0.965332f, 0.967773f, 0.968262f, 0.967773f, 0.967285f, 0.966309f,
+ 0.001106f, 0.002684f, 0.004913f, 0.006733f, 0.009300f, 0.011955f, 0.014435f, 0.017700f,
+ 0.020477f, 0.024124f, 0.028091f, 0.032532f, 0.037231f, 0.042511f, 0.048309f, 0.054596f,
+ 0.061798f, 0.069885f, 0.078857f, 0.089050f, 0.099915f, 0.112183f, 0.125488f, 0.140503f,
+ 0.157104f, 0.175293f, 0.195068f, 0.216309f, 0.240356f, 0.265381f, 0.291748f, 0.319580f,
+ 0.348633f, 0.379150f, 0.410156f, 0.441406f, 0.472900f, 0.503418f, 0.534668f, 0.565430f,
+ 0.594727f, 0.622070f, 0.649902f, 0.676270f, 0.700195f, 0.723633f, 0.746094f, 0.766602f,
+ 0.786133f, 0.802734f, 0.819824f, 0.835449f, 0.849609f, 0.863281f, 0.875977f, 0.887695f,
+ 0.898438f, 0.908203f, 0.962891f, 0.965820f, 0.966309f, 0.965332f, 0.964844f, 0.964355f,
+ 0.000782f, 0.002707f, 0.004574f, 0.006184f, 0.008286f, 0.010681f, 0.012878f, 0.015640f,
+ 0.018478f, 0.021912f, 0.025208f, 0.028976f, 0.032867f, 0.037598f, 0.042938f, 0.048370f,
+ 0.054443f, 0.061432f, 0.069214f, 0.077515f, 0.087402f, 0.098145f, 0.109497f, 0.122803f,
+ 0.137329f, 0.153564f, 0.171509f, 0.190918f, 0.212158f, 0.235352f, 0.259766f, 0.286133f,
+ 0.314209f, 0.343262f, 0.373535f, 0.404297f, 0.436279f, 0.467773f, 0.499512f, 0.530273f,
+ 0.561523f, 0.590820f, 0.620117f, 0.647461f, 0.674316f, 0.699219f, 0.722656f, 0.745605f,
+ 0.766602f, 0.785645f, 0.804688f, 0.821777f, 0.836426f, 0.852051f, 0.865234f, 0.878418f,
+ 0.890625f, 0.901855f, 0.959961f, 0.962891f, 0.963867f, 0.963379f, 0.962402f, 0.962402f,
+ 0.000787f, 0.002195f, 0.004250f, 0.005775f, 0.007774f, 0.009445f, 0.011795f, 0.013725f,
+ 0.016678f, 0.019531f, 0.022018f, 0.025665f, 0.029495f, 0.033142f, 0.037598f, 0.042664f,
+ 0.048248f, 0.053772f, 0.060699f, 0.067993f, 0.076416f, 0.085815f, 0.095764f, 0.107422f,
+ 0.120239f, 0.134277f, 0.150269f, 0.167358f, 0.186646f, 0.207764f, 0.230347f, 0.255127f,
+ 0.281250f, 0.308838f, 0.337891f, 0.368408f, 0.399414f, 0.431396f, 0.463135f, 0.495605f,
+ 0.526855f, 0.558594f, 0.588379f, 0.618652f, 0.646973f, 0.673828f, 0.699707f, 0.723633f,
+ 0.746094f, 0.767090f, 0.788086f, 0.806641f, 0.823730f, 0.840332f, 0.854980f, 0.869141f,
+ 0.881836f, 0.893555f, 0.957520f, 0.960938f, 0.960938f, 0.961426f, 0.960449f, 0.959961f,
+ 0.000765f, 0.002207f, 0.003666f, 0.005177f, 0.006973f, 0.008301f, 0.010704f, 0.012794f,
+ 0.015015f, 0.017303f, 0.020309f, 0.022568f, 0.026123f, 0.029587f, 0.033325f, 0.037659f,
+ 0.042206f, 0.047516f, 0.053223f, 0.059814f, 0.067017f, 0.075195f, 0.083801f, 0.094055f,
+ 0.105042f, 0.117737f, 0.131470f, 0.146851f, 0.163940f, 0.182739f, 0.203369f, 0.225952f,
+ 0.250244f, 0.276367f, 0.304199f, 0.333008f, 0.364258f, 0.395264f, 0.427002f, 0.459961f,
+ 0.491699f, 0.524414f, 0.555664f, 0.586914f, 0.617676f, 0.645996f, 0.673340f, 0.699707f,
+ 0.724121f, 0.748047f, 0.770020f, 0.790039f, 0.809082f, 0.827148f, 0.842773f, 0.858398f,
+ 0.873047f, 0.885742f, 0.954102f, 0.958008f, 0.958496f, 0.958496f, 0.958496f, 0.957520f,
+ 0.000586f, 0.001937f, 0.003107f, 0.004745f, 0.006168f, 0.007610f, 0.009590f, 0.011345f,
+ 0.013321f, 0.015587f, 0.017593f, 0.020294f, 0.023346f, 0.026154f, 0.029205f, 0.033234f,
+ 0.037415f, 0.041962f, 0.046906f, 0.052673f, 0.058533f, 0.065796f, 0.073669f, 0.082642f,
+ 0.092346f, 0.103027f, 0.115234f, 0.128784f, 0.143799f, 0.160889f, 0.179199f, 0.199585f,
+ 0.221802f, 0.246094f, 0.271973f, 0.299805f, 0.329102f, 0.359863f, 0.391357f, 0.423340f,
+ 0.456299f, 0.490234f, 0.522949f, 0.555176f, 0.586426f, 0.617188f, 0.645996f, 0.675293f,
+ 0.701660f, 0.726074f, 0.750488f, 0.773926f, 0.793945f, 0.812988f, 0.831543f, 0.847656f,
+ 0.862793f, 0.877441f, 0.951660f, 0.955078f, 0.955566f, 0.955566f, 0.955078f, 0.954590f,
+ 0.000678f, 0.001864f, 0.003138f, 0.004333f, 0.005707f, 0.006893f, 0.008224f, 0.009850f,
+ 0.012215f, 0.013954f, 0.015747f, 0.018219f, 0.020584f, 0.023148f, 0.026047f, 0.029434f,
+ 0.033020f, 0.037018f, 0.041626f, 0.046509f, 0.051910f, 0.058105f, 0.064636f, 0.072510f,
+ 0.080750f, 0.090149f, 0.100891f, 0.112549f, 0.126343f, 0.141113f, 0.157593f, 0.175537f,
+ 0.195801f, 0.218018f, 0.242554f, 0.268311f, 0.295898f, 0.325195f, 0.355713f, 0.388184f,
+ 0.421143f, 0.454834f, 0.488281f, 0.522949f, 0.554199f, 0.587402f, 0.618164f, 0.648438f,
+ 0.676758f, 0.704102f, 0.730957f, 0.754395f, 0.776855f, 0.798340f, 0.817871f, 0.836426f,
+ 0.852051f, 0.868164f, 0.948242f, 0.952637f, 0.953125f, 0.952637f, 0.952148f, 0.951660f,
+ 0.000470f, 0.001578f, 0.002934f, 0.003838f, 0.005032f, 0.006310f, 0.007725f, 0.008972f,
+ 0.010826f, 0.012657f, 0.014359f, 0.015991f, 0.018402f, 0.020721f, 0.023102f, 0.026230f,
+ 0.029495f, 0.032867f, 0.036743f, 0.040680f, 0.045654f, 0.050812f, 0.056763f, 0.063477f,
+ 0.071045f, 0.078918f, 0.088440f, 0.098938f, 0.110657f, 0.123535f, 0.138062f, 0.154175f,
+ 0.172363f, 0.192627f, 0.214478f, 0.238770f, 0.264404f, 0.292236f, 0.322266f, 0.353271f,
+ 0.385742f, 0.419189f, 0.453857f, 0.487549f, 0.521484f, 0.555664f, 0.588867f, 0.621094f,
+ 0.651367f, 0.680176f, 0.708008f, 0.733887f, 0.759766f, 0.780762f, 0.802734f, 0.821289f,
+ 0.840820f, 0.858398f, 0.943848f, 0.949219f, 0.949707f, 0.949707f, 0.949707f, 0.949219f,
+ 0.000485f, 0.001689f, 0.002386f, 0.003698f, 0.004547f, 0.005936f, 0.006851f, 0.008217f,
+ 0.009834f, 0.011055f, 0.012810f, 0.014473f, 0.016449f, 0.018509f, 0.020950f, 0.023209f,
+ 0.025940f, 0.029114f, 0.032410f, 0.036133f, 0.040161f, 0.044861f, 0.050018f, 0.055664f,
+ 0.061859f, 0.069153f, 0.077515f, 0.086365f, 0.096680f, 0.108093f, 0.120605f, 0.135132f,
+ 0.151489f, 0.169556f, 0.189209f, 0.211426f, 0.235352f, 0.261475f, 0.289307f, 0.319580f,
+ 0.351074f, 0.384521f, 0.418701f, 0.452881f, 0.487549f, 0.522461f, 0.556641f, 0.591309f,
+ 0.623535f, 0.653809f, 0.684570f, 0.712891f, 0.739258f, 0.764160f, 0.787109f, 0.809570f,
+ 0.829102f, 0.847168f, 0.940918f, 0.945801f, 0.946289f, 0.946777f, 0.946777f, 0.945312f,
+ 0.000620f, 0.001351f, 0.002413f, 0.003273f, 0.004307f, 0.004971f, 0.006138f, 0.007542f,
+ 0.008835f, 0.009972f, 0.011581f, 0.013069f, 0.014717f, 0.016495f, 0.018738f, 0.020691f,
+ 0.023315f, 0.025879f, 0.028793f, 0.031860f, 0.035309f, 0.039246f, 0.043762f, 0.048950f,
+ 0.054474f, 0.060669f, 0.067932f, 0.075378f, 0.084351f, 0.094055f, 0.105774f, 0.118469f,
+ 0.132690f, 0.148315f, 0.166504f, 0.186401f, 0.208130f, 0.232544f, 0.258789f, 0.287109f,
+ 0.317627f, 0.349854f, 0.383057f, 0.417725f, 0.453125f, 0.488770f, 0.523926f, 0.559082f,
+ 0.594238f, 0.627441f, 0.659180f, 0.689941f, 0.719238f, 0.745117f, 0.770508f, 0.794434f,
+ 0.815430f, 0.836914f, 0.936523f, 0.941895f, 0.942871f, 0.942871f, 0.942871f, 0.942383f,
+ 0.000404f, 0.001095f, 0.002087f, 0.002983f, 0.003986f, 0.004673f, 0.005844f, 0.006878f,
+ 0.007740f, 0.008873f, 0.010323f, 0.011757f, 0.013176f, 0.014915f, 0.016586f, 0.018585f,
+ 0.020523f, 0.022720f, 0.025391f, 0.028244f, 0.031219f, 0.034821f, 0.038788f, 0.042908f,
+ 0.047943f, 0.053040f, 0.058960f, 0.066162f, 0.073547f, 0.082397f, 0.092285f, 0.102844f,
+ 0.115234f, 0.129883f, 0.146118f, 0.163452f, 0.183350f, 0.205688f, 0.229614f, 0.256592f,
+ 0.285156f, 0.316162f, 0.348633f, 0.383057f, 0.418457f, 0.454590f, 0.490967f, 0.526855f,
+ 0.563477f, 0.598633f, 0.632812f, 0.665527f, 0.696777f, 0.726074f, 0.752930f, 0.779297f,
+ 0.803223f, 0.825684f, 0.933105f, 0.938477f, 0.938477f, 0.938965f, 0.938477f, 0.938477f,
+ 0.000415f, 0.000864f, 0.001907f, 0.002775f, 0.003519f, 0.004204f, 0.005352f, 0.006237f,
+ 0.007019f, 0.008064f, 0.009239f, 0.010483f, 0.011742f, 0.013130f, 0.014877f, 0.016571f,
+ 0.018494f, 0.020126f, 0.022537f, 0.024826f, 0.027649f, 0.030701f, 0.033875f, 0.037964f,
+ 0.042114f, 0.046356f, 0.051605f, 0.057587f, 0.064209f, 0.071777f, 0.080261f, 0.089722f,
+ 0.100952f, 0.113220f, 0.127075f, 0.143066f, 0.160767f, 0.180664f, 0.202759f, 0.227417f,
+ 0.254395f, 0.284180f, 0.315674f, 0.348633f, 0.383789f, 0.420166f, 0.457275f, 0.494385f,
+ 0.531250f, 0.569336f, 0.605469f, 0.639160f, 0.672363f, 0.705078f, 0.735352f, 0.762207f,
+ 0.788574f, 0.811523f, 0.928711f, 0.934082f, 0.934570f, 0.935059f, 0.935059f, 0.935059f,
+ 0.000236f, 0.001136f, 0.001664f, 0.002502f, 0.003187f, 0.004082f, 0.004631f, 0.005386f,
+ 0.006275f, 0.007385f, 0.008217f, 0.009453f, 0.010567f, 0.011787f, 0.013115f, 0.014420f,
+ 0.016083f, 0.017944f, 0.019867f, 0.022079f, 0.024414f, 0.026962f, 0.029755f, 0.033112f,
+ 0.036926f, 0.040771f, 0.045258f, 0.050232f, 0.056183f, 0.062500f, 0.069946f, 0.078430f,
+ 0.087708f, 0.098389f, 0.110779f, 0.124634f, 0.140259f, 0.158203f, 0.178223f, 0.200928f,
+ 0.225708f, 0.253174f, 0.282715f, 0.315430f, 0.349365f, 0.385254f, 0.422363f, 0.460938f,
+ 0.499023f, 0.537109f, 0.574707f, 0.612305f, 0.646484f, 0.682129f, 0.713867f, 0.745117f,
+ 0.772461f, 0.799316f, 0.923828f, 0.930176f, 0.930664f, 0.931152f, 0.930664f, 0.930664f,
+ 0.000229f, 0.000964f, 0.001582f, 0.002182f, 0.002838f, 0.003653f, 0.004341f, 0.004921f,
+ 0.005615f, 0.006626f, 0.007423f, 0.008545f, 0.009483f, 0.010666f, 0.011612f, 0.013000f,
+ 0.014275f, 0.015900f, 0.017487f, 0.019333f, 0.021484f, 0.023773f, 0.026276f, 0.028992f,
+ 0.032135f, 0.035492f, 0.039398f, 0.044037f, 0.049072f, 0.054443f, 0.061035f, 0.067871f,
+ 0.076111f, 0.085632f, 0.096252f, 0.108154f, 0.122253f, 0.138306f, 0.156006f, 0.175903f,
+ 0.199219f, 0.224243f, 0.251953f, 0.282715f, 0.315918f, 0.350830f, 0.387451f, 0.425781f,
+ 0.465332f, 0.504395f, 0.544434f, 0.583008f, 0.620117f, 0.657715f, 0.692383f, 0.725098f,
+ 0.755371f, 0.783691f, 0.919434f, 0.925781f, 0.926270f, 0.926758f, 0.926758f, 0.925781f,
+ 0.000410f, 0.000856f, 0.001542f, 0.001844f, 0.002565f, 0.003380f, 0.003971f, 0.004246f,
+ 0.005047f, 0.005863f, 0.006653f, 0.007744f, 0.008568f, 0.009407f, 0.010529f, 0.011482f,
+ 0.012657f, 0.013924f, 0.015602f, 0.017105f, 0.018997f, 0.020859f, 0.022980f, 0.025192f,
+ 0.028030f, 0.031036f, 0.034515f, 0.038300f, 0.042236f, 0.047180f, 0.052795f, 0.059113f,
+ 0.065857f, 0.074097f, 0.083374f, 0.094360f, 0.105896f, 0.119873f, 0.135620f, 0.154175f,
+ 0.174072f, 0.197632f, 0.223267f, 0.251465f, 0.283447f, 0.317139f, 0.353760f, 0.391113f,
+ 0.431152f, 0.470703f, 0.512207f, 0.552734f, 0.592285f, 0.631348f, 0.669434f, 0.704590f,
+ 0.737793f, 0.768555f, 0.913574f, 0.919922f, 0.920898f, 0.920898f, 0.921387f, 0.921387f,
+ 0.000214f, 0.000619f, 0.001172f, 0.001941f, 0.002228f, 0.002960f, 0.003490f, 0.003994f,
+ 0.004761f, 0.005180f, 0.005806f, 0.006622f, 0.007565f, 0.008301f, 0.009262f, 0.010170f,
+ 0.011208f, 0.012482f, 0.013855f, 0.015060f, 0.016739f, 0.018311f, 0.020248f, 0.022034f,
+ 0.024597f, 0.027084f, 0.030045f, 0.033051f, 0.036743f, 0.041016f, 0.045807f, 0.050964f,
+ 0.056946f, 0.063904f, 0.071899f, 0.080994f, 0.091675f, 0.103699f, 0.117920f, 0.133667f,
+ 0.151978f, 0.172729f, 0.196533f, 0.222534f, 0.252197f, 0.284424f, 0.319580f, 0.356689f,
+ 0.396973f, 0.437500f, 0.479492f, 0.521484f, 0.562500f, 0.604004f, 0.644043f, 0.682129f,
+ 0.718262f, 0.751465f, 0.907715f, 0.915039f, 0.916016f, 0.916504f, 0.916504f, 0.916504f,
+ 0.000405f, 0.000760f, 0.001116f, 0.001688f, 0.002180f, 0.002670f, 0.003313f, 0.003569f,
+ 0.003979f, 0.004543f, 0.005466f, 0.005985f, 0.006699f, 0.007359f, 0.008102f, 0.009094f,
+ 0.009949f, 0.011055f, 0.012047f, 0.013412f, 0.014488f, 0.016068f, 0.017532f, 0.019348f,
+ 0.021210f, 0.023834f, 0.025986f, 0.028854f, 0.031891f, 0.035339f, 0.039490f, 0.043976f,
+ 0.049347f, 0.055084f, 0.061951f, 0.069763f, 0.078918f, 0.089478f, 0.101379f, 0.115479f,
+ 0.131592f, 0.150024f, 0.171387f, 0.195068f, 0.222900f, 0.252686f, 0.286621f, 0.323242f,
+ 0.362061f, 0.402588f, 0.445312f, 0.488770f, 0.532715f, 0.575684f, 0.618652f, 0.659180f,
+ 0.698242f, 0.734375f, 0.901367f, 0.909180f, 0.911133f, 0.910645f, 0.911133f, 0.910645f,
+ 0.000218f, 0.000539f, 0.001187f, 0.001617f, 0.001987f, 0.002316f, 0.002666f, 0.003176f,
+ 0.003841f, 0.004425f, 0.004917f, 0.005402f, 0.005768f, 0.006462f, 0.007233f, 0.008018f,
+ 0.008575f, 0.009758f, 0.010582f, 0.011520f, 0.012756f, 0.013832f, 0.015312f, 0.016968f,
+ 0.018509f, 0.020279f, 0.022644f, 0.024857f, 0.027740f, 0.030472f, 0.033783f, 0.037567f,
+ 0.042175f, 0.047150f, 0.052979f, 0.059601f, 0.067505f, 0.076538f, 0.087158f, 0.099243f,
+ 0.113281f, 0.129272f, 0.148315f, 0.170532f, 0.194702f, 0.223267f, 0.254639f, 0.289795f,
+ 0.327393f, 0.368408f, 0.410889f, 0.455322f, 0.499756f, 0.544434f, 0.590332f, 0.633789f,
+ 0.676270f, 0.716309f, 0.895508f, 0.902344f, 0.903809f, 0.905762f, 0.903809f, 0.904297f,
+ 0.000184f, 0.000612f, 0.001122f, 0.001464f, 0.001848f, 0.002150f, 0.002514f, 0.002651f,
+ 0.003391f, 0.003666f, 0.004368f, 0.004677f, 0.005219f, 0.005882f, 0.006531f, 0.007019f,
+ 0.007675f, 0.008530f, 0.009224f, 0.010269f, 0.011017f, 0.012146f, 0.013321f, 0.014626f,
+ 0.016098f, 0.017639f, 0.019440f, 0.021317f, 0.023773f, 0.026123f, 0.029144f, 0.032410f,
+ 0.036072f, 0.040314f, 0.045013f, 0.051086f, 0.057587f, 0.065308f, 0.074402f, 0.084961f,
+ 0.097107f, 0.111267f, 0.127930f, 0.147217f, 0.169556f, 0.195312f, 0.224365f, 0.257568f,
+ 0.294189f, 0.333496f, 0.375977f, 0.420166f, 0.467041f, 0.514160f, 0.561035f, 0.607422f,
+ 0.652344f, 0.695312f, 0.888672f, 0.896484f, 0.897461f, 0.897461f, 0.897949f, 0.897949f,
+ 0.000159f, 0.000537f, 0.000830f, 0.001206f, 0.001578f, 0.001760f, 0.002050f, 0.002504f,
+ 0.002951f, 0.003397f, 0.003674f, 0.004238f, 0.004520f, 0.005245f, 0.005692f, 0.006138f,
+ 0.006748f, 0.007240f, 0.008087f, 0.008728f, 0.009636f, 0.010437f, 0.011543f, 0.012611f,
+ 0.013763f, 0.015266f, 0.016617f, 0.018433f, 0.020248f, 0.022354f, 0.024887f, 0.027390f,
+ 0.030716f, 0.034454f, 0.038422f, 0.043365f, 0.048950f, 0.055511f, 0.062988f, 0.072021f,
+ 0.082336f, 0.094727f, 0.109375f, 0.125977f, 0.145874f, 0.169556f, 0.195679f, 0.226929f,
+ 0.260986f, 0.299805f, 0.341309f, 0.385498f, 0.432129f, 0.480957f, 0.529297f, 0.579102f,
+ 0.627441f, 0.673828f, 0.881348f, 0.889160f, 0.890625f, 0.891113f, 0.891602f, 0.891113f,
+ 0.000204f, 0.000566f, 0.000741f, 0.001033f, 0.001378f, 0.001599f, 0.001961f, 0.002354f,
+ 0.002609f, 0.002974f, 0.003300f, 0.003609f, 0.004101f, 0.004463f, 0.004906f, 0.005337f,
+ 0.006020f, 0.006290f, 0.007023f, 0.007656f, 0.008301f, 0.009140f, 0.009918f, 0.010933f,
+ 0.011940f, 0.013107f, 0.014252f, 0.015656f, 0.017136f, 0.019058f, 0.021057f, 0.023209f,
+ 0.025940f, 0.029190f, 0.032715f, 0.036591f, 0.041138f, 0.046661f, 0.053253f, 0.060944f,
+ 0.069702f, 0.080444f, 0.092651f, 0.107788f, 0.124695f, 0.145630f, 0.169189f, 0.197632f,
+ 0.229736f, 0.266113f, 0.306396f, 0.350586f, 0.397217f, 0.447021f, 0.497803f, 0.549805f,
+ 0.600586f, 0.650391f, 0.872559f, 0.881836f, 0.882812f, 0.883301f, 0.884277f, 0.884277f,
+ 0.000240f, 0.000349f, 0.000795f, 0.000892f, 0.001151f, 0.001377f, 0.001773f, 0.001984f,
+ 0.002415f, 0.002602f, 0.002932f, 0.003168f, 0.003483f, 0.003906f, 0.004257f, 0.004681f,
+ 0.005173f, 0.005596f, 0.006119f, 0.006550f, 0.007126f, 0.007759f, 0.008522f, 0.009270f,
+ 0.010086f, 0.011108f, 0.012138f, 0.013199f, 0.014549f, 0.015884f, 0.017776f, 0.019623f,
+ 0.022003f, 0.024384f, 0.027237f, 0.030624f, 0.034515f, 0.039215f, 0.044342f, 0.050873f,
+ 0.058411f, 0.067017f, 0.078003f, 0.090332f, 0.105530f, 0.123718f, 0.144775f, 0.170410f,
+ 0.200195f, 0.234131f, 0.272461f, 0.315674f, 0.362305f, 0.412354f, 0.465332f, 0.518555f,
+ 0.572754f, 0.626465f, 0.863770f, 0.873047f, 0.875488f, 0.875488f, 0.875977f, 0.875977f,
+ 0.000102f, 0.000298f, 0.000604f, 0.000950f, 0.001089f, 0.001472f, 0.001760f, 0.001823f,
+ 0.001903f, 0.002325f, 0.002611f, 0.002775f, 0.003185f, 0.003405f, 0.003674f, 0.004005f,
+ 0.004406f, 0.004814f, 0.005203f, 0.005665f, 0.006062f, 0.006702f, 0.007317f, 0.007881f,
+ 0.008560f, 0.009239f, 0.010193f, 0.010994f, 0.012161f, 0.013588f, 0.015068f, 0.016479f,
+ 0.018250f, 0.020386f, 0.022781f, 0.025665f, 0.028809f, 0.032501f, 0.037048f, 0.042297f,
+ 0.048553f, 0.055908f, 0.065491f, 0.075378f, 0.088501f, 0.104248f, 0.122742f, 0.145874f,
+ 0.171997f, 0.203247f, 0.239990f, 0.281250f, 0.326904f, 0.376953f, 0.430176f, 0.486328f,
+ 0.542480f, 0.600586f, 0.855469f, 0.864746f, 0.866211f, 0.867188f, 0.867188f, 0.867188f,
+ 0.000000f, 0.000357f, 0.000576f, 0.000692f, 0.001013f, 0.001069f, 0.001383f, 0.001702f,
+ 0.001789f, 0.002102f, 0.002182f, 0.002377f, 0.002686f, 0.002985f, 0.003347f, 0.003359f,
+ 0.003782f, 0.004036f, 0.004436f, 0.004749f, 0.005169f, 0.005672f, 0.006145f, 0.006649f,
+ 0.007187f, 0.007828f, 0.008644f, 0.009529f, 0.010269f, 0.011200f, 0.012337f, 0.013596f,
+ 0.015038f, 0.017044f, 0.018784f, 0.021011f, 0.023727f, 0.026871f, 0.030457f, 0.034637f,
+ 0.039978f, 0.046478f, 0.053436f, 0.062622f, 0.073730f, 0.086792f, 0.102661f, 0.122437f,
+ 0.146240f, 0.174561f, 0.208252f, 0.247437f, 0.291748f, 0.341064f, 0.395020f, 0.451904f,
+ 0.511230f, 0.571777f, 0.844238f, 0.854980f, 0.857422f, 0.858887f, 0.857910f, 0.857910f,
+ 0.000101f, 0.000326f, 0.000535f, 0.000683f, 0.000848f, 0.001161f, 0.001184f, 0.001284f,
+ 0.001576f, 0.001701f, 0.001839f, 0.002167f, 0.002321f, 0.002584f, 0.002645f, 0.002941f,
+ 0.003141f, 0.003538f, 0.003817f, 0.004112f, 0.004395f, 0.004646f, 0.005165f, 0.005531f,
+ 0.006096f, 0.006496f, 0.007217f, 0.007767f, 0.008629f, 0.009163f, 0.010239f, 0.011276f,
+ 0.012611f, 0.013779f, 0.015213f, 0.017120f, 0.019379f, 0.021606f, 0.024994f, 0.028351f,
+ 0.032379f, 0.037201f, 0.043640f, 0.050903f, 0.060120f, 0.071045f, 0.084900f, 0.101868f,
+ 0.122559f, 0.147827f, 0.178223f, 0.214722f, 0.257080f, 0.305664f, 0.358887f, 0.416992f,
+ 0.478027f, 0.542969f, 0.834473f, 0.845215f, 0.847656f, 0.847656f, 0.847656f, 0.848633f,
+ 0.000092f, 0.000316f, 0.000410f, 0.000556f, 0.000808f, 0.000918f, 0.001094f, 0.001287f,
+ 0.001309f, 0.001411f, 0.001671f, 0.001780f, 0.001909f, 0.002092f, 0.002274f, 0.002523f,
+ 0.002733f, 0.002974f, 0.003101f, 0.003401f, 0.003677f, 0.003956f, 0.004311f, 0.004551f,
+ 0.004940f, 0.005444f, 0.005768f, 0.006451f, 0.006977f, 0.007568f, 0.008270f, 0.009201f,
+ 0.010170f, 0.011230f, 0.012566f, 0.013939f, 0.015503f, 0.017761f, 0.020111f, 0.022873f,
+ 0.025940f, 0.029938f, 0.035217f, 0.040985f, 0.048431f, 0.057770f, 0.069092f, 0.083618f,
+ 0.100891f, 0.123047f, 0.150146f, 0.183838f, 0.223633f, 0.269531f, 0.322510f, 0.381348f,
+ 0.444824f, 0.511719f, 0.823730f, 0.834473f, 0.835938f, 0.836914f, 0.836914f, 0.837402f,
+ 0.000240f, 0.000273f, 0.000326f, 0.000564f, 0.000682f, 0.000807f, 0.000854f, 0.000949f,
+ 0.001139f, 0.001238f, 0.001404f, 0.001548f, 0.001637f, 0.001840f, 0.001893f, 0.002077f,
+ 0.002321f, 0.002434f, 0.002642f, 0.002821f, 0.003044f, 0.003271f, 0.003649f, 0.003763f,
+ 0.004208f, 0.004448f, 0.004986f, 0.005169f, 0.005657f, 0.006279f, 0.006680f, 0.007442f,
+ 0.008194f, 0.008881f, 0.009895f, 0.010918f, 0.012138f, 0.013924f, 0.015915f, 0.018112f,
+ 0.020645f, 0.023743f, 0.027817f, 0.032745f, 0.038361f, 0.045990f, 0.055481f, 0.066895f,
+ 0.082031f, 0.100769f, 0.124573f, 0.154541f, 0.190796f, 0.235107f, 0.286133f, 0.344238f,
+ 0.408936f, 0.478271f, 0.810547f, 0.822266f, 0.824707f, 0.825195f, 0.825684f, 0.825684f,
+ 0.000115f, 0.000222f, 0.000252f, 0.000524f, 0.000574f, 0.000673f, 0.000869f, 0.000928f,
+ 0.000963f, 0.001022f, 0.001246f, 0.001292f, 0.001404f, 0.001477f, 0.001652f, 0.001811f,
+ 0.001822f, 0.002058f, 0.002237f, 0.002371f, 0.002588f, 0.002645f, 0.003019f, 0.003080f,
+ 0.003506f, 0.003689f, 0.003904f, 0.004383f, 0.004707f, 0.005020f, 0.005386f, 0.006023f,
+ 0.006451f, 0.007038f, 0.007809f, 0.008911f, 0.009949f, 0.011200f, 0.012222f, 0.014137f,
+ 0.016068f, 0.018692f, 0.021683f, 0.025314f, 0.029861f, 0.035889f, 0.043335f, 0.052582f,
+ 0.065186f, 0.080627f, 0.101501f, 0.127441f, 0.159912f, 0.200806f, 0.250000f, 0.307129f,
+ 0.371582f, 0.444580f, 0.798340f, 0.809570f, 0.811523f, 0.812988f, 0.812988f, 0.812988f,
+ 0.000000f, 0.000211f, 0.000204f, 0.000474f, 0.000555f, 0.000583f, 0.000600f, 0.000593f,
+ 0.000812f, 0.000865f, 0.000941f, 0.001013f, 0.001162f, 0.001348f, 0.001418f, 0.001465f,
+ 0.001616f, 0.001722f, 0.001856f, 0.001888f, 0.002048f, 0.002321f, 0.002396f, 0.002632f,
+ 0.002821f, 0.002974f, 0.003265f, 0.003477f, 0.003632f, 0.004051f, 0.004299f, 0.004700f,
+ 0.005238f, 0.005592f, 0.006199f, 0.006756f, 0.007614f, 0.008324f, 0.009727f, 0.010811f,
+ 0.012337f, 0.014168f, 0.016434f, 0.019257f, 0.022858f, 0.027451f, 0.033295f, 0.040619f,
+ 0.050690f, 0.063416f, 0.080261f, 0.102295f, 0.131104f, 0.168335f, 0.214355f, 0.270508f,
+ 0.334717f, 0.408936f, 0.783691f, 0.795898f, 0.798340f, 0.799316f, 0.800293f, 0.800293f,
+ 0.000174f, 0.000090f, 0.000281f, 0.000397f, 0.000401f, 0.000450f, 0.000488f, 0.000640f,
+ 0.000674f, 0.000713f, 0.000753f, 0.000845f, 0.000872f, 0.001020f, 0.001115f, 0.001264f,
+ 0.001327f, 0.001373f, 0.001520f, 0.001616f, 0.001767f, 0.001875f, 0.001968f, 0.002090f,
+ 0.002232f, 0.002333f, 0.002472f, 0.002802f, 0.002926f, 0.003189f, 0.003569f, 0.003752f,
+ 0.004009f, 0.004513f, 0.004860f, 0.005375f, 0.005997f, 0.006561f, 0.007378f, 0.008347f,
+ 0.009384f, 0.010612f, 0.012466f, 0.014526f, 0.017075f, 0.020447f, 0.024887f, 0.030533f,
+ 0.038300f, 0.048584f, 0.062042f, 0.080383f, 0.104736f, 0.137329f, 0.180176f, 0.232544f,
+ 0.296875f, 0.371338f, 0.769043f, 0.781250f, 0.784180f, 0.784668f, 0.786133f, 0.786133f,
+ 0.000025f, 0.000135f, 0.000154f, 0.000260f, 0.000353f, 0.000364f, 0.000380f, 0.000520f,
+ 0.000548f, 0.000587f, 0.000712f, 0.000735f, 0.000772f, 0.000822f, 0.000886f, 0.001004f,
+ 0.000946f, 0.001115f, 0.001177f, 0.001266f, 0.001454f, 0.001527f, 0.001575f, 0.001680f,
+ 0.001883f, 0.001961f, 0.002043f, 0.002193f, 0.002281f, 0.002520f, 0.002712f, 0.003021f,
+ 0.003147f, 0.003561f, 0.003786f, 0.004116f, 0.004570f, 0.005058f, 0.005634f, 0.006165f,
+ 0.007095f, 0.008049f, 0.009201f, 0.010674f, 0.012550f, 0.014854f, 0.018051f, 0.022385f,
+ 0.027908f, 0.035522f, 0.046295f, 0.061035f, 0.081238f, 0.109131f, 0.146729f, 0.197021f,
+ 0.258301f, 0.333008f, 0.752441f, 0.766113f, 0.768555f, 0.769531f, 0.770020f, 0.769531f,
+ 0.000000f, 0.000121f, 0.000209f, 0.000291f, 0.000337f, 0.000307f, 0.000324f, 0.000415f,
+ 0.000426f, 0.000453f, 0.000491f, 0.000573f, 0.000644f, 0.000650f, 0.000781f, 0.000746f,
+ 0.000830f, 0.000803f, 0.000997f, 0.001017f, 0.001020f, 0.001158f, 0.001241f, 0.001317f,
+ 0.001375f, 0.001432f, 0.001524f, 0.001656f, 0.001858f, 0.001955f, 0.002050f, 0.002274f,
+ 0.002460f, 0.002724f, 0.002831f, 0.003050f, 0.003441f, 0.003790f, 0.004162f, 0.004623f,
+ 0.005219f, 0.005951f, 0.006721f, 0.007729f, 0.008926f, 0.010620f, 0.013000f, 0.015686f,
+ 0.019852f, 0.025436f, 0.033295f, 0.044617f, 0.060608f, 0.083313f, 0.116211f, 0.161499f,
+ 0.220093f, 0.293945f, 0.734863f, 0.749512f, 0.752441f, 0.752930f, 0.753906f, 0.753906f,
+ 0.000000f, 0.000121f, 0.000118f, 0.000246f, 0.000233f, 0.000252f, 0.000338f, 0.000282f,
+ 0.000353f, 0.000355f, 0.000448f, 0.000435f, 0.000464f, 0.000530f, 0.000578f, 0.000649f,
+ 0.000677f, 0.000710f, 0.000749f, 0.000792f, 0.000881f, 0.000903f, 0.000967f, 0.001049f,
+ 0.001041f, 0.001100f, 0.001176f, 0.001254f, 0.001402f, 0.001451f, 0.001697f, 0.001674f,
+ 0.001804f, 0.001914f, 0.002195f, 0.002451f, 0.002474f, 0.002758f, 0.003029f, 0.003483f,
+ 0.003824f, 0.004272f, 0.004833f, 0.005573f, 0.006477f, 0.007629f, 0.009041f, 0.010918f,
+ 0.013573f, 0.017319f, 0.022842f, 0.031036f, 0.043030f, 0.061096f, 0.088440f, 0.127563f,
+ 0.182861f, 0.254395f, 0.717285f, 0.731934f, 0.734863f, 0.735352f, 0.735840f, 0.736328f,
+ 0.000000f, 0.000000f, 0.000117f, 0.000163f, 0.000109f, 0.000208f, 0.000212f, 0.000208f,
+ 0.000270f, 0.000356f, 0.000324f, 0.000377f, 0.000391f, 0.000420f, 0.000449f, 0.000440f,
+ 0.000484f, 0.000504f, 0.000534f, 0.000561f, 0.000639f, 0.000667f, 0.000715f, 0.000722f,
+ 0.000799f, 0.000845f, 0.000939f, 0.000945f, 0.001053f, 0.001149f, 0.001252f, 0.001310f,
+ 0.001392f, 0.001507f, 0.001526f, 0.001710f, 0.001773f, 0.002111f, 0.002300f, 0.002443f,
+ 0.002661f, 0.002996f, 0.003376f, 0.003880f, 0.004482f, 0.005150f, 0.006115f, 0.007401f,
+ 0.009132f, 0.011696f, 0.015076f, 0.020416f, 0.029236f, 0.042389f, 0.063782f, 0.096802f,
+ 0.146362f, 0.215576f, 0.698242f, 0.712891f, 0.715332f, 0.716797f, 0.717285f, 0.717285f,
+ 0.000000f, 0.000118f, 0.000115f, 0.000133f, 0.000144f, 0.000147f, 0.000162f, 0.000150f,
+ 0.000194f, 0.000215f, 0.000228f, 0.000299f, 0.000271f, 0.000313f, 0.000328f, 0.000358f,
+ 0.000378f, 0.000360f, 0.000407f, 0.000438f, 0.000441f, 0.000488f, 0.000515f, 0.000544f,
+ 0.000576f, 0.000617f, 0.000659f, 0.000715f, 0.000741f, 0.000773f, 0.000850f, 0.000921f,
+ 0.000979f, 0.001066f, 0.001128f, 0.001292f, 0.001279f, 0.001400f, 0.001572f, 0.001668f,
+ 0.001869f, 0.002029f, 0.002295f, 0.002607f, 0.002985f, 0.003464f, 0.004066f, 0.004913f,
+ 0.006023f, 0.007519f, 0.009827f, 0.013016f, 0.018524f, 0.027481f, 0.042847f, 0.068970f,
+ 0.111938f, 0.176392f, 0.675781f, 0.692871f, 0.695801f, 0.696777f, 0.698242f, 0.697754f,
+ 0.000000f, 0.000000f, 0.000111f, 0.000108f, 0.000104f, 0.000102f, 0.000118f, 0.000120f,
+ 0.000134f, 0.000128f, 0.000188f, 0.000154f, 0.000197f, 0.000188f, 0.000245f, 0.000256f,
+ 0.000233f, 0.000266f, 0.000345f, 0.000281f, 0.000355f, 0.000322f, 0.000392f, 0.000358f,
+ 0.000437f, 0.000425f, 0.000458f, 0.000477f, 0.000564f, 0.000636f, 0.000578f, 0.000607f,
+ 0.000668f, 0.000719f, 0.000769f, 0.000832f, 0.000880f, 0.000953f, 0.001060f, 0.001116f,
+ 0.001226f, 0.001363f, 0.001486f, 0.001760f, 0.001944f, 0.002216f, 0.002605f, 0.003107f,
+ 0.003778f, 0.004715f, 0.005989f, 0.007942f, 0.011292f, 0.016632f, 0.026550f, 0.045532f,
+ 0.079956f, 0.138550f, 0.655762f, 0.671875f, 0.674805f, 0.675293f, 0.675781f, 0.678223f,
+ 0.000000f, 0.000112f, 0.000105f, 0.000102f, 0.000098f, 0.000095f, 0.000093f, 0.000088f,
+ 0.000089f, 0.000085f, 0.000095f, 0.000126f, 0.000109f, 0.000154f, 0.000153f, 0.000162f,
+ 0.000176f, 0.000190f, 0.000202f, 0.000204f, 0.000212f, 0.000214f, 0.000266f, 0.000239f,
+ 0.000279f, 0.000293f, 0.000329f, 0.000329f, 0.000339f, 0.000365f, 0.000437f, 0.000424f,
+ 0.000429f, 0.000474f, 0.000525f, 0.000596f, 0.000572f, 0.000612f, 0.000666f, 0.000723f,
+ 0.000791f, 0.000850f, 0.000977f, 0.001066f, 0.001225f, 0.001351f, 0.001555f, 0.001837f,
+ 0.002279f, 0.002760f, 0.003445f, 0.004612f, 0.006386f, 0.009438f, 0.015221f, 0.027008f,
+ 0.052551f, 0.102966f, 0.633789f, 0.649414f, 0.652832f, 0.653809f, 0.655273f, 0.655273f,
+ 0.000000f, 0.000105f, 0.000099f, 0.000094f, 0.000090f, 0.000087f, 0.000084f, 0.000082f,
+ 0.000079f, 0.000075f, 0.000071f, 0.000068f, 0.000064f, 0.000072f, 0.000096f, 0.000105f,
+ 0.000112f, 0.000088f, 0.000123f, 0.000129f, 0.000132f, 0.000140f, 0.000147f, 0.000170f,
+ 0.000188f, 0.000192f, 0.000171f, 0.000210f, 0.000217f, 0.000223f, 0.000237f, 0.000251f,
+ 0.000258f, 0.000294f, 0.000298f, 0.000316f, 0.000350f, 0.000382f, 0.000400f, 0.000437f,
+ 0.000479f, 0.000514f, 0.000576f, 0.000620f, 0.000688f, 0.000782f, 0.000916f, 0.001026f,
+ 0.001219f, 0.001502f, 0.001892f, 0.002424f, 0.003359f, 0.004974f, 0.008118f, 0.014343f,
+ 0.030075f, 0.070068f, 0.610352f, 0.626953f, 0.629883f, 0.631348f, 0.632324f, 0.632324f,
+ 0.000110f, 0.000094f, 0.000087f, 0.000081f, 0.000077f, 0.000075f, 0.000072f, 0.000069f,
+ 0.000067f, 0.000066f, 0.000064f, 0.000062f, 0.000058f, 0.000056f, 0.000053f, 0.000051f,
+ 0.000054f, 0.000047f, 0.000057f, 0.000055f, 0.000075f, 0.000078f, 0.000086f, 0.000093f,
+ 0.000093f, 0.000102f, 0.000112f, 0.000113f, 0.000130f, 0.000128f, 0.000142f, 0.000145f,
+ 0.000156f, 0.000153f, 0.000180f, 0.000178f, 0.000183f, 0.000223f, 0.000230f, 0.000240f,
+ 0.000265f, 0.000276f, 0.000300f, 0.000332f, 0.000357f, 0.000411f, 0.000449f, 0.000540f,
+ 0.000615f, 0.000741f, 0.000916f, 0.001144f, 0.001566f, 0.002310f, 0.003731f, 0.006905f,
+ 0.014793f, 0.041779f, 0.585938f, 0.603027f, 0.605957f, 0.608398f, 0.608398f, 0.609375f,
+ 0.000090f, 0.000071f, 0.000066f, 0.000062f, 0.000058f, 0.000056f, 0.000053f, 0.000053f,
+ 0.000051f, 0.000051f, 0.000049f, 0.000048f, 0.000048f, 0.000047f, 0.000045f, 0.000043f,
+ 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000036f, 0.000033f, 0.000034f, 0.000040f,
+ 0.000040f, 0.000040f, 0.000048f, 0.000053f, 0.000060f, 0.000064f, 0.000067f, 0.000070f,
+ 0.000075f, 0.000081f, 0.000085f, 0.000090f, 0.000091f, 0.000103f, 0.000106f, 0.000120f,
+ 0.000134f, 0.000138f, 0.000142f, 0.000156f, 0.000174f, 0.000180f, 0.000212f, 0.000239f,
+ 0.000253f, 0.000310f, 0.000377f, 0.000479f, 0.000627f, 0.000875f, 0.001396f, 0.002623f,
+ 0.006184f, 0.019897f, 0.560547f, 0.578125f, 0.581543f, 0.583008f, 0.583984f, 0.583984f,
+ 0.000038f, 0.000035f, 0.000031f, 0.000031f, 0.000030f, 0.000031f, 0.000031f, 0.000030f,
+ 0.000030f, 0.000028f, 0.000029f, 0.000030f, 0.000029f, 0.000028f, 0.000029f, 0.000029f,
+ 0.000029f, 0.000029f, 0.000029f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f,
+ 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000019f, 0.000022f,
+ 0.000023f, 0.000027f, 0.000031f, 0.000035f, 0.000037f, 0.000039f, 0.000039f, 0.000043f,
+ 0.000049f, 0.000052f, 0.000056f, 0.000050f, 0.000068f, 0.000062f, 0.000070f, 0.000087f,
+ 0.000094f, 0.000107f, 0.000122f, 0.000140f, 0.000191f, 0.000247f, 0.000388f, 0.000710f,
+ 0.001781f, 0.007076f, 0.535156f, 0.553223f, 0.556152f, 0.558105f, 0.559082f, 0.559082f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000003f, 0.000003f, 0.000005f, 0.000006f, 0.000007f, 0.000007f, 0.000009f,
+ 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000013f, 0.000013f, 0.000013f, 0.000013f, 0.000012f, 0.000012f, 0.000011f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000009f,
+ 0.000009f, 0.000010f, 0.000011f, 0.000015f, 0.000017f, 0.000016f, 0.000018f, 0.000021f,
+ 0.000020f, 0.000024f, 0.000024f, 0.000032f, 0.000035f, 0.000045f, 0.000065f, 0.000105f,
+ 0.000246f, 0.001313f, 0.508789f, 0.527344f, 0.530762f, 0.531738f, 0.532715f, 0.533691f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000005f, 0.000018f, 0.481934f, 0.500977f, 0.504883f, 0.505859f, 0.507324f, 0.507812f,
+ },
+ {
+ 0.053833f, 0.152832f, 0.239014f, 0.313477f, 0.377686f, 0.433838f, 0.481689f, 0.524414f,
+ 0.562988f, 0.596680f, 0.626953f, 0.654785f, 0.678711f, 0.700684f, 0.720703f, 0.739746f,
+ 0.755859f, 0.771973f, 0.787109f, 0.798828f, 0.812012f, 0.823730f, 0.833984f, 0.844238f,
+ 0.853027f, 0.862793f, 0.870605f, 0.878418f, 0.885254f, 0.892090f, 0.898926f, 0.904297f,
+ 0.910645f, 0.916504f, 0.921875f, 0.926270f, 0.931641f, 0.936035f, 0.939941f, 0.944336f,
+ 0.948242f, 0.952148f, 0.955566f, 0.959961f, 0.962402f, 0.966309f, 0.969238f, 0.972168f,
+ 0.975098f, 0.978027f, 0.980957f, 0.983398f, 0.985840f, 0.988281f, 0.990723f, 0.992676f,
+ 0.995117f, 0.996582f, 0.998047f, 0.995117f, 0.993164f, 0.990723f, 0.988770f, 0.986816f,
+ 0.036804f, 0.109497f, 0.178589f, 0.244751f, 0.305908f, 0.361084f, 0.411621f, 0.457275f,
+ 0.498535f, 0.536133f, 0.569824f, 0.601562f, 0.629883f, 0.655273f, 0.679688f, 0.700195f,
+ 0.720215f, 0.737793f, 0.755859f, 0.770508f, 0.785645f, 0.798340f, 0.811035f, 0.822754f,
+ 0.833008f, 0.843750f, 0.852539f, 0.861328f, 0.869629f, 0.877441f, 0.885742f, 0.892578f,
+ 0.898926f, 0.905273f, 0.911133f, 0.916504f, 0.921875f, 0.926758f, 0.931641f, 0.936523f,
+ 0.940430f, 0.945312f, 0.949219f, 0.953613f, 0.956543f, 0.960449f, 0.963867f, 0.967285f,
+ 0.970703f, 0.973633f, 0.976562f, 0.979004f, 0.981934f, 0.984375f, 0.986816f, 0.989746f,
+ 0.992188f, 0.994141f, 0.996582f, 0.994141f, 0.992188f, 0.990234f, 0.988281f, 0.986328f,
+ 0.025787f, 0.080383f, 0.136230f, 0.191650f, 0.245239f, 0.297119f, 0.345947f, 0.392822f,
+ 0.436035f, 0.476807f, 0.513184f, 0.547363f, 0.578125f, 0.607910f, 0.634766f, 0.658203f,
+ 0.681152f, 0.702637f, 0.721191f, 0.738770f, 0.755371f, 0.770508f, 0.784668f, 0.798828f,
+ 0.810547f, 0.821777f, 0.833984f, 0.843262f, 0.852539f, 0.861816f, 0.869629f, 0.877930f,
+ 0.885254f, 0.893555f, 0.898926f, 0.906250f, 0.911621f, 0.917969f, 0.923340f, 0.928223f,
+ 0.933105f, 0.937500f, 0.941406f, 0.946289f, 0.950195f, 0.954102f, 0.958496f, 0.961914f,
+ 0.965820f, 0.968750f, 0.971680f, 0.975098f, 0.978027f, 0.980469f, 0.983887f, 0.985840f,
+ 0.988770f, 0.991211f, 0.995117f, 0.993164f, 0.991211f, 0.989258f, 0.987305f, 0.985352f,
+ 0.019455f, 0.060944f, 0.104553f, 0.150513f, 0.196411f, 0.243164f, 0.289062f, 0.333740f,
+ 0.376709f, 0.417725f, 0.454346f, 0.491211f, 0.524414f, 0.556641f, 0.585938f, 0.613770f,
+ 0.639160f, 0.662598f, 0.682617f, 0.703613f, 0.723633f, 0.740723f, 0.756836f, 0.771973f,
+ 0.787109f, 0.798828f, 0.812012f, 0.823242f, 0.833984f, 0.844238f, 0.853516f, 0.863281f,
+ 0.871094f, 0.879395f, 0.886719f, 0.893555f, 0.899902f, 0.907227f, 0.913086f, 0.918945f,
+ 0.924805f, 0.928711f, 0.934082f, 0.938965f, 0.943848f, 0.947754f, 0.952637f, 0.955566f,
+ 0.959961f, 0.963867f, 0.966797f, 0.970215f, 0.973633f, 0.977051f, 0.979004f, 0.982422f,
+ 0.985840f, 0.987793f, 0.993652f, 0.991699f, 0.989746f, 0.988281f, 0.986328f, 0.984375f,
+ 0.015221f, 0.047363f, 0.082092f, 0.119202f, 0.159058f, 0.199219f, 0.239380f, 0.280762f,
+ 0.321533f, 0.362061f, 0.400146f, 0.436768f, 0.472900f, 0.504883f, 0.536621f, 0.566406f,
+ 0.594238f, 0.621094f, 0.645508f, 0.667969f, 0.688477f, 0.707520f, 0.726562f, 0.742676f,
+ 0.759277f, 0.773926f, 0.787598f, 0.800781f, 0.812988f, 0.825195f, 0.835938f, 0.846191f,
+ 0.856445f, 0.865234f, 0.872559f, 0.880859f, 0.888672f, 0.895020f, 0.902832f, 0.908203f,
+ 0.914551f, 0.919922f, 0.926758f, 0.931152f, 0.937012f, 0.941406f, 0.945312f, 0.949707f,
+ 0.954102f, 0.958496f, 0.962402f, 0.965820f, 0.969238f, 0.972168f, 0.976074f, 0.978516f,
+ 0.981934f, 0.984863f, 0.992188f, 0.990723f, 0.988770f, 0.987305f, 0.985352f, 0.983887f,
+ 0.011658f, 0.037170f, 0.065430f, 0.096008f, 0.128784f, 0.162842f, 0.198975f, 0.235596f,
+ 0.273926f, 0.310791f, 0.348145f, 0.385010f, 0.420410f, 0.454834f, 0.488037f, 0.519043f,
+ 0.548828f, 0.577148f, 0.603516f, 0.627441f, 0.650879f, 0.672363f, 0.693848f, 0.712402f,
+ 0.729980f, 0.748535f, 0.762207f, 0.778809f, 0.791504f, 0.804199f, 0.815918f, 0.827637f,
+ 0.838867f, 0.848145f, 0.857910f, 0.866211f, 0.875977f, 0.883301f, 0.891602f, 0.898438f,
+ 0.905273f, 0.911133f, 0.917480f, 0.923340f, 0.928711f, 0.933594f, 0.938477f, 0.942871f,
+ 0.948242f, 0.952637f, 0.956543f, 0.960449f, 0.964355f, 0.968262f, 0.971191f, 0.974609f,
+ 0.978027f, 0.980957f, 0.990723f, 0.989258f, 0.987793f, 0.985840f, 0.984375f, 0.983398f,
+ 0.009758f, 0.030121f, 0.052490f, 0.077576f, 0.104309f, 0.134277f, 0.164917f, 0.197510f,
+ 0.231812f, 0.266113f, 0.301025f, 0.336426f, 0.372070f, 0.405762f, 0.438721f, 0.471436f,
+ 0.502441f, 0.531738f, 0.560059f, 0.587402f, 0.612793f, 0.634766f, 0.658691f, 0.679199f,
+ 0.699219f, 0.718262f, 0.735352f, 0.751953f, 0.767090f, 0.780762f, 0.794922f, 0.808105f,
+ 0.820801f, 0.831055f, 0.842285f, 0.851562f, 0.861328f, 0.870117f, 0.878906f, 0.886719f,
+ 0.893555f, 0.900879f, 0.907715f, 0.913574f, 0.919434f, 0.926270f, 0.932129f, 0.936523f,
+ 0.941895f, 0.945801f, 0.951172f, 0.955078f, 0.959473f, 0.963867f, 0.966797f, 0.970703f,
+ 0.974121f, 0.977539f, 0.989746f, 0.988281f, 0.986328f, 0.984863f, 0.983398f, 0.982422f,
+ 0.007744f, 0.024567f, 0.043365f, 0.063782f, 0.086487f, 0.111389f, 0.137451f, 0.166260f,
+ 0.195435f, 0.226929f, 0.259033f, 0.291748f, 0.324951f, 0.358398f, 0.391113f, 0.424316f,
+ 0.456299f, 0.486328f, 0.516113f, 0.543945f, 0.571289f, 0.597656f, 0.621094f, 0.644531f,
+ 0.666504f, 0.686523f, 0.705078f, 0.724121f, 0.741211f, 0.757324f, 0.773438f, 0.786621f,
+ 0.801270f, 0.812988f, 0.823730f, 0.835938f, 0.846191f, 0.855957f, 0.865723f, 0.873047f,
+ 0.882324f, 0.889648f, 0.897949f, 0.905762f, 0.911133f, 0.917969f, 0.923828f, 0.929199f,
+ 0.934082f, 0.940430f, 0.944824f, 0.949707f, 0.954102f, 0.958008f, 0.962891f, 0.966309f,
+ 0.970215f, 0.974121f, 0.987793f, 0.986816f, 0.985352f, 0.983887f, 0.981934f, 0.980469f,
+ 0.006672f, 0.020828f, 0.035950f, 0.053345f, 0.071594f, 0.092834f, 0.114624f, 0.139282f,
+ 0.165649f, 0.192627f, 0.222290f, 0.252197f, 0.283203f, 0.314941f, 0.346680f, 0.377930f,
+ 0.409668f, 0.441650f, 0.471680f, 0.500977f, 0.529297f, 0.557129f, 0.583008f, 0.607422f,
+ 0.630859f, 0.654297f, 0.674805f, 0.694824f, 0.713867f, 0.731445f, 0.748535f, 0.763672f,
+ 0.778320f, 0.791992f, 0.805664f, 0.817871f, 0.829590f, 0.840332f, 0.850098f, 0.860352f,
+ 0.869141f, 0.878906f, 0.886719f, 0.894043f, 0.901855f, 0.909180f, 0.915527f, 0.920898f,
+ 0.927246f, 0.933105f, 0.938477f, 0.943848f, 0.948730f, 0.953125f, 0.957520f, 0.961914f,
+ 0.965820f, 0.970215f, 0.985840f, 0.985352f, 0.983887f, 0.981934f, 0.980957f, 0.979492f,
+ 0.005592f, 0.017181f, 0.030457f, 0.044739f, 0.060638f, 0.077454f, 0.097046f, 0.117981f,
+ 0.140625f, 0.164673f, 0.190552f, 0.217896f, 0.246582f, 0.275635f, 0.305176f, 0.336426f,
+ 0.366943f, 0.397949f, 0.428711f, 0.457764f, 0.487061f, 0.515137f, 0.542480f, 0.568848f,
+ 0.593750f, 0.619141f, 0.641602f, 0.662598f, 0.683594f, 0.703613f, 0.721191f, 0.738281f,
+ 0.755859f, 0.770996f, 0.784180f, 0.799316f, 0.811035f, 0.823730f, 0.833984f, 0.845703f,
+ 0.855957f, 0.865234f, 0.875000f, 0.883301f, 0.891602f, 0.898926f, 0.906738f, 0.912598f,
+ 0.919922f, 0.926270f, 0.931152f, 0.937988f, 0.942871f, 0.948242f, 0.952148f, 0.957520f,
+ 0.961914f, 0.966309f, 0.984375f, 0.983398f, 0.982422f, 0.981445f, 0.979492f, 0.978027f,
+ 0.004829f, 0.014816f, 0.025711f, 0.037964f, 0.051300f, 0.065796f, 0.082458f, 0.100037f,
+ 0.120178f, 0.141357f, 0.163330f, 0.187622f, 0.213013f, 0.240601f, 0.268311f, 0.296387f,
+ 0.325928f, 0.356445f, 0.385742f, 0.415771f, 0.445557f, 0.474121f, 0.501465f, 0.530762f,
+ 0.556152f, 0.581543f, 0.606445f, 0.630859f, 0.651855f, 0.672852f, 0.693359f, 0.712402f,
+ 0.730469f, 0.746582f, 0.762695f, 0.777832f, 0.791992f, 0.806152f, 0.818359f, 0.830566f,
+ 0.840820f, 0.852051f, 0.862305f, 0.871094f, 0.880371f, 0.888184f, 0.896484f, 0.904297f,
+ 0.910645f, 0.917969f, 0.924316f, 0.931152f, 0.936035f, 0.942383f, 0.947266f, 0.951660f,
+ 0.957031f, 0.960938f, 0.982422f, 0.982422f, 0.981445f, 0.979492f, 0.978516f, 0.977051f,
+ 0.004040f, 0.012436f, 0.022064f, 0.032440f, 0.044006f, 0.056549f, 0.070068f, 0.085999f,
+ 0.102539f, 0.120239f, 0.140625f, 0.161621f, 0.184448f, 0.208496f, 0.234253f, 0.260742f,
+ 0.288086f, 0.316406f, 0.345215f, 0.374512f, 0.404297f, 0.433350f, 0.462402f, 0.490234f,
+ 0.518066f, 0.543945f, 0.570312f, 0.594727f, 0.618652f, 0.642090f, 0.663086f, 0.683594f,
+ 0.703613f, 0.721680f, 0.739258f, 0.755859f, 0.772461f, 0.786621f, 0.798828f, 0.812500f,
+ 0.825195f, 0.836914f, 0.848633f, 0.858887f, 0.869141f, 0.877441f, 0.886230f, 0.894531f,
+ 0.902832f, 0.909668f, 0.916992f, 0.923340f, 0.929688f, 0.935547f, 0.941406f, 0.947266f,
+ 0.951660f, 0.957031f, 0.980469f, 0.980469f, 0.979492f, 0.978516f, 0.977051f, 0.976074f,
+ 0.003536f, 0.010872f, 0.018829f, 0.027893f, 0.037872f, 0.048492f, 0.060883f, 0.073425f,
+ 0.088074f, 0.103638f, 0.120789f, 0.139038f, 0.159912f, 0.181274f, 0.204102f, 0.227905f,
+ 0.253906f, 0.280518f, 0.307861f, 0.335938f, 0.364746f, 0.393311f, 0.421631f, 0.451416f,
+ 0.479004f, 0.505859f, 0.533203f, 0.560059f, 0.584473f, 0.608398f, 0.631836f, 0.653320f,
+ 0.674805f, 0.695801f, 0.714355f, 0.731934f, 0.749512f, 0.765137f, 0.781250f, 0.794434f,
+ 0.808594f, 0.821289f, 0.833496f, 0.844238f, 0.855469f, 0.866211f, 0.875000f, 0.883789f,
+ 0.892578f, 0.901855f, 0.908691f, 0.915527f, 0.922852f, 0.929199f, 0.935059f, 0.941406f,
+ 0.947266f, 0.951172f, 0.978516f, 0.979004f, 0.978027f, 0.977051f, 0.975586f, 0.974121f,
+ 0.002989f, 0.009476f, 0.016785f, 0.024246f, 0.032745f, 0.041809f, 0.052246f, 0.063782f,
+ 0.076111f, 0.089722f, 0.104675f, 0.120605f, 0.138306f, 0.157959f, 0.178101f, 0.200073f,
+ 0.223145f, 0.247192f, 0.273193f, 0.300293f, 0.327148f, 0.354736f, 0.383545f, 0.411621f,
+ 0.439941f, 0.468018f, 0.495605f, 0.522949f, 0.548828f, 0.574219f, 0.598145f, 0.622559f,
+ 0.645508f, 0.666016f, 0.687500f, 0.706543f, 0.725586f, 0.743164f, 0.759766f, 0.775391f,
+ 0.791016f, 0.803711f, 0.817871f, 0.829590f, 0.841797f, 0.852539f, 0.863281f, 0.873047f,
+ 0.882812f, 0.891113f, 0.900391f, 0.906738f, 0.915039f, 0.922852f, 0.929688f, 0.936035f,
+ 0.941895f, 0.946777f, 0.976074f, 0.977051f, 0.976074f, 0.975586f, 0.974121f, 0.972656f,
+ 0.002846f, 0.008568f, 0.014557f, 0.021484f, 0.028442f, 0.036377f, 0.045074f, 0.055054f,
+ 0.066101f, 0.077759f, 0.090759f, 0.104797f, 0.120483f, 0.136719f, 0.155029f, 0.175171f,
+ 0.196045f, 0.218262f, 0.241943f, 0.266357f, 0.292480f, 0.319336f, 0.345703f, 0.373535f,
+ 0.402100f, 0.429932f, 0.457764f, 0.484863f, 0.512207f, 0.539062f, 0.564941f, 0.589844f,
+ 0.613281f, 0.636719f, 0.659180f, 0.680664f, 0.700684f, 0.718750f, 0.736816f, 0.754883f,
+ 0.770508f, 0.785645f, 0.799805f, 0.813965f, 0.826172f, 0.838867f, 0.850586f, 0.861328f,
+ 0.871582f, 0.881836f, 0.890625f, 0.898926f, 0.906738f, 0.915039f, 0.922363f, 0.928711f,
+ 0.936035f, 0.941895f, 0.974609f, 0.975098f, 0.974609f, 0.973633f, 0.972656f, 0.971191f,
+ 0.002285f, 0.007290f, 0.012634f, 0.018280f, 0.024918f, 0.032074f, 0.039673f, 0.048157f,
+ 0.057220f, 0.067810f, 0.078735f, 0.091248f, 0.104370f, 0.119873f, 0.135742f, 0.152344f,
+ 0.171631f, 0.191650f, 0.213501f, 0.236206f, 0.260010f, 0.285156f, 0.310547f, 0.338135f,
+ 0.364746f, 0.392578f, 0.420410f, 0.448242f, 0.476562f, 0.502441f, 0.529785f, 0.555664f,
+ 0.581543f, 0.605469f, 0.629395f, 0.652344f, 0.673340f, 0.693848f, 0.713867f, 0.732910f,
+ 0.750000f, 0.767090f, 0.782715f, 0.797852f, 0.811035f, 0.825195f, 0.836914f, 0.848633f,
+ 0.860840f, 0.870605f, 0.880371f, 0.890137f, 0.898926f, 0.907227f, 0.915527f, 0.923340f,
+ 0.929688f, 0.936523f, 0.972168f, 0.973145f, 0.972656f, 0.972168f, 0.970703f, 0.969727f,
+ 0.002064f, 0.006584f, 0.011154f, 0.016266f, 0.022263f, 0.028397f, 0.034973f, 0.042145f,
+ 0.050232f, 0.059235f, 0.069031f, 0.079346f, 0.091736f, 0.104553f, 0.118652f, 0.133789f,
+ 0.150635f, 0.168457f, 0.188110f, 0.208984f, 0.230225f, 0.253906f, 0.278076f, 0.303955f,
+ 0.329346f, 0.356689f, 0.384033f, 0.411865f, 0.439941f, 0.467285f, 0.493896f, 0.520996f,
+ 0.547363f, 0.573730f, 0.597168f, 0.622559f, 0.645508f, 0.667969f, 0.688965f, 0.709473f,
+ 0.728027f, 0.746094f, 0.762695f, 0.778809f, 0.794922f, 0.809082f, 0.822754f, 0.834961f,
+ 0.847168f, 0.858887f, 0.870117f, 0.880371f, 0.889648f, 0.898926f, 0.907227f, 0.915039f,
+ 0.923828f, 0.930176f, 0.970215f, 0.971680f, 0.970215f, 0.970215f, 0.968750f, 0.968262f,
+ 0.001935f, 0.005634f, 0.010078f, 0.014389f, 0.019669f, 0.024658f, 0.030716f, 0.037201f,
+ 0.044098f, 0.051941f, 0.060333f, 0.070129f, 0.080383f, 0.091370f, 0.103638f, 0.116943f,
+ 0.131714f, 0.148193f, 0.165161f, 0.183838f, 0.203979f, 0.225220f, 0.247803f, 0.271240f,
+ 0.296631f, 0.322510f, 0.349121f, 0.376221f, 0.403076f, 0.431152f, 0.458984f, 0.485596f,
+ 0.513672f, 0.540039f, 0.564941f, 0.590820f, 0.616211f, 0.638672f, 0.662109f, 0.683105f,
+ 0.704102f, 0.723633f, 0.741699f, 0.759766f, 0.776855f, 0.792480f, 0.807617f, 0.821777f,
+ 0.833496f, 0.847168f, 0.858887f, 0.870117f, 0.880859f, 0.889648f, 0.899414f, 0.908203f,
+ 0.916992f, 0.924316f, 0.967285f, 0.968262f, 0.968750f, 0.968262f, 0.967285f, 0.966309f,
+ 0.001805f, 0.005119f, 0.009079f, 0.013023f, 0.017487f, 0.022278f, 0.027130f, 0.032684f,
+ 0.038666f, 0.045959f, 0.052826f, 0.061401f, 0.070801f, 0.080139f, 0.090698f, 0.102844f,
+ 0.115845f, 0.130005f, 0.145264f, 0.162476f, 0.180176f, 0.199951f, 0.220459f, 0.242188f,
+ 0.265869f, 0.290283f, 0.315430f, 0.341309f, 0.368652f, 0.395752f, 0.423584f, 0.451416f,
+ 0.479248f, 0.505859f, 0.532227f, 0.559082f, 0.584961f, 0.609863f, 0.634277f, 0.656738f,
+ 0.678711f, 0.700195f, 0.720703f, 0.738281f, 0.757324f, 0.774414f, 0.790527f, 0.805664f,
+ 0.820312f, 0.834473f, 0.846680f, 0.858887f, 0.869629f, 0.880859f, 0.890625f, 0.899902f,
+ 0.909668f, 0.917969f, 0.964844f, 0.966797f, 0.967285f, 0.965820f, 0.964844f, 0.963867f,
+ 0.001437f, 0.004662f, 0.007919f, 0.011681f, 0.015404f, 0.019272f, 0.024261f, 0.029205f,
+ 0.034515f, 0.040619f, 0.046967f, 0.054138f, 0.061737f, 0.070496f, 0.080200f, 0.090271f,
+ 0.101807f, 0.114136f, 0.127686f, 0.143188f, 0.159058f, 0.176514f, 0.195190f, 0.215454f,
+ 0.237305f, 0.260010f, 0.283936f, 0.309326f, 0.334717f, 0.361328f, 0.389160f, 0.416260f,
+ 0.444336f, 0.471436f, 0.499512f, 0.525879f, 0.552734f, 0.579590f, 0.604004f, 0.628906f,
+ 0.651855f, 0.674805f, 0.696777f, 0.717773f, 0.737305f, 0.755859f, 0.772949f, 0.789551f,
+ 0.805664f, 0.819336f, 0.833984f, 0.847168f, 0.859375f, 0.871094f, 0.881836f, 0.892090f,
+ 0.902344f, 0.910156f, 0.962402f, 0.964355f, 0.964355f, 0.963867f, 0.962891f, 0.961914f,
+ 0.001264f, 0.004036f, 0.007088f, 0.010170f, 0.013672f, 0.017365f, 0.021423f, 0.025955f,
+ 0.030533f, 0.035614f, 0.041321f, 0.047791f, 0.054626f, 0.062195f, 0.070679f, 0.080017f,
+ 0.089600f, 0.100769f, 0.112854f, 0.125977f, 0.139893f, 0.156128f, 0.172852f, 0.191650f,
+ 0.211060f, 0.232056f, 0.254883f, 0.278076f, 0.302979f, 0.328125f, 0.355225f, 0.381836f,
+ 0.409912f, 0.437256f, 0.464844f, 0.492676f, 0.520508f, 0.547852f, 0.573242f, 0.599609f,
+ 0.625000f, 0.649414f, 0.672363f, 0.694336f, 0.714844f, 0.734863f, 0.753418f, 0.771484f,
+ 0.788574f, 0.804688f, 0.820312f, 0.833496f, 0.847656f, 0.859863f, 0.873047f, 0.883301f,
+ 0.894043f, 0.903809f, 0.959961f, 0.961914f, 0.962402f, 0.960938f, 0.960449f, 0.959961f,
+ 0.001297f, 0.003721f, 0.006397f, 0.009308f, 0.012260f, 0.015808f, 0.019302f, 0.023010f,
+ 0.027267f, 0.032013f, 0.037109f, 0.042419f, 0.048523f, 0.054962f, 0.061920f, 0.070435f,
+ 0.079407f, 0.088318f, 0.099121f, 0.111084f, 0.124023f, 0.137695f, 0.152832f, 0.169434f,
+ 0.187378f, 0.206421f, 0.227783f, 0.249268f, 0.272461f, 0.297363f, 0.322754f, 0.348389f,
+ 0.376221f, 0.403809f, 0.431396f, 0.459229f, 0.487305f, 0.515137f, 0.542480f, 0.569336f,
+ 0.595215f, 0.621094f, 0.645996f, 0.669434f, 0.691406f, 0.712891f, 0.733887f, 0.753418f,
+ 0.770996f, 0.789062f, 0.805176f, 0.820801f, 0.835449f, 0.849121f, 0.861328f, 0.874512f,
+ 0.885742f, 0.895508f, 0.956543f, 0.959473f, 0.958984f, 0.958984f, 0.958008f, 0.957031f,
+ 0.001267f, 0.003481f, 0.005955f, 0.008568f, 0.011185f, 0.014030f, 0.017151f, 0.020294f,
+ 0.024246f, 0.028427f, 0.032654f, 0.037476f, 0.042603f, 0.048523f, 0.054871f, 0.062408f,
+ 0.070129f, 0.078552f, 0.087769f, 0.097534f, 0.109192f, 0.121399f, 0.135010f, 0.150513f,
+ 0.165894f, 0.183960f, 0.202881f, 0.222656f, 0.244385f, 0.267334f, 0.291260f, 0.317139f,
+ 0.343506f, 0.370605f, 0.397949f, 0.426025f, 0.454346f, 0.482666f, 0.511230f, 0.538086f,
+ 0.565918f, 0.592285f, 0.618164f, 0.642578f, 0.667480f, 0.690918f, 0.711914f, 0.732910f,
+ 0.752930f, 0.771484f, 0.790039f, 0.806641f, 0.821777f, 0.837402f, 0.850586f, 0.864746f,
+ 0.875977f, 0.887695f, 0.953613f, 0.956543f, 0.957031f, 0.956055f, 0.956055f, 0.955078f,
+ 0.001068f, 0.003025f, 0.005283f, 0.007442f, 0.009857f, 0.012665f, 0.015930f, 0.018570f,
+ 0.021820f, 0.025314f, 0.028931f, 0.033325f, 0.038147f, 0.042908f, 0.049011f, 0.055176f,
+ 0.061859f, 0.069397f, 0.077637f, 0.086792f, 0.096252f, 0.107117f, 0.119385f, 0.132690f,
+ 0.147095f, 0.162720f, 0.180054f, 0.198486f, 0.218384f, 0.239990f, 0.262207f, 0.287109f,
+ 0.311523f, 0.337891f, 0.364990f, 0.392822f, 0.420654f, 0.449219f, 0.478027f, 0.505859f,
+ 0.535156f, 0.562012f, 0.588867f, 0.615723f, 0.641602f, 0.666016f, 0.688965f, 0.711914f,
+ 0.732910f, 0.753906f, 0.773438f, 0.791016f, 0.808594f, 0.823730f, 0.839355f, 0.854004f,
+ 0.867188f, 0.879883f, 0.950195f, 0.954102f, 0.954102f, 0.953125f, 0.952637f, 0.952148f,
+ 0.000884f, 0.003082f, 0.004631f, 0.006931f, 0.008942f, 0.011513f, 0.013779f, 0.016663f,
+ 0.019806f, 0.022934f, 0.026215f, 0.029999f, 0.033813f, 0.038544f, 0.043365f, 0.048615f,
+ 0.054352f, 0.061005f, 0.068420f, 0.076477f, 0.085022f, 0.095032f, 0.105469f, 0.117432f,
+ 0.130127f, 0.143799f, 0.159790f, 0.176270f, 0.194580f, 0.214478f, 0.235229f, 0.257568f,
+ 0.281982f, 0.306641f, 0.332764f, 0.359863f, 0.388184f, 0.416016f, 0.445557f, 0.474854f,
+ 0.502441f, 0.531738f, 0.559570f, 0.586914f, 0.614258f, 0.640625f, 0.665039f, 0.689453f,
+ 0.712891f, 0.734863f, 0.755371f, 0.774902f, 0.793945f, 0.810547f, 0.827637f, 0.842773f,
+ 0.857910f, 0.871094f, 0.946777f, 0.950684f, 0.951172f, 0.950684f, 0.949707f, 0.949707f,
+ 0.000848f, 0.002630f, 0.004330f, 0.006386f, 0.008148f, 0.010437f, 0.012436f, 0.014977f,
+ 0.017731f, 0.020645f, 0.023529f, 0.026413f, 0.030289f, 0.034302f, 0.038391f, 0.043365f,
+ 0.048737f, 0.054413f, 0.060455f, 0.067383f, 0.075134f, 0.083801f, 0.093262f, 0.103821f,
+ 0.114746f, 0.127441f, 0.140991f, 0.156372f, 0.172729f, 0.190918f, 0.210449f, 0.231201f,
+ 0.253662f, 0.277344f, 0.302734f, 0.328857f, 0.355225f, 0.384033f, 0.413086f, 0.440918f,
+ 0.471191f, 0.500488f, 0.529785f, 0.558594f, 0.586426f, 0.613770f, 0.640137f, 0.666016f,
+ 0.689453f, 0.714355f, 0.736328f, 0.757812f, 0.777832f, 0.796875f, 0.813965f, 0.831543f,
+ 0.847168f, 0.860840f, 0.943848f, 0.948242f, 0.947754f, 0.948242f, 0.946777f, 0.946777f,
+ 0.000747f, 0.002462f, 0.004192f, 0.005573f, 0.007454f, 0.009430f, 0.011253f, 0.013588f,
+ 0.015762f, 0.018112f, 0.020859f, 0.023758f, 0.027084f, 0.030426f, 0.034332f, 0.038635f,
+ 0.042999f, 0.048340f, 0.053772f, 0.060028f, 0.066589f, 0.074402f, 0.082764f, 0.091553f,
+ 0.101685f, 0.112854f, 0.125122f, 0.138184f, 0.153320f, 0.169556f, 0.187500f, 0.206543f,
+ 0.227539f, 0.249512f, 0.273193f, 0.298340f, 0.324463f, 0.351562f, 0.379883f, 0.409424f,
+ 0.438477f, 0.468750f, 0.498047f, 0.527832f, 0.556641f, 0.585449f, 0.614258f, 0.641113f,
+ 0.666992f, 0.692383f, 0.716309f, 0.738281f, 0.760742f, 0.780273f, 0.799805f, 0.818848f,
+ 0.834473f, 0.851074f, 0.939941f, 0.944824f, 0.944336f, 0.944336f, 0.944336f, 0.943359f,
+ 0.000670f, 0.002079f, 0.003538f, 0.005146f, 0.006508f, 0.008247f, 0.010223f, 0.012260f,
+ 0.014153f, 0.016479f, 0.018677f, 0.021515f, 0.024323f, 0.027313f, 0.030518f, 0.034302f,
+ 0.038422f, 0.042725f, 0.047760f, 0.053101f, 0.059113f, 0.065613f, 0.072937f, 0.080444f,
+ 0.089722f, 0.099426f, 0.110596f, 0.122314f, 0.135742f, 0.150513f, 0.166260f, 0.183716f,
+ 0.202759f, 0.223633f, 0.245728f, 0.269287f, 0.294189f, 0.320557f, 0.348633f, 0.376709f,
+ 0.406494f, 0.436523f, 0.467285f, 0.497070f, 0.528320f, 0.557129f, 0.586426f, 0.614746f,
+ 0.642090f, 0.668945f, 0.694824f, 0.718750f, 0.742676f, 0.764648f, 0.786133f, 0.805176f,
+ 0.823242f, 0.840820f, 0.936035f, 0.940918f, 0.941406f, 0.941406f, 0.940430f, 0.939941f,
+ 0.000645f, 0.001963f, 0.003384f, 0.004719f, 0.006042f, 0.007614f, 0.009384f, 0.011192f,
+ 0.012665f, 0.015083f, 0.016861f, 0.019165f, 0.021393f, 0.024445f, 0.027451f, 0.030716f,
+ 0.034149f, 0.038116f, 0.042389f, 0.047028f, 0.052277f, 0.058014f, 0.064270f, 0.071289f,
+ 0.079041f, 0.087830f, 0.097351f, 0.108337f, 0.119995f, 0.132812f, 0.147217f, 0.163452f,
+ 0.180420f, 0.199585f, 0.219849f, 0.242065f, 0.265625f, 0.291260f, 0.318115f, 0.345703f,
+ 0.375000f, 0.404541f, 0.434326f, 0.465820f, 0.496582f, 0.526855f, 0.557617f, 0.587402f,
+ 0.616699f, 0.645508f, 0.672363f, 0.698242f, 0.723145f, 0.747559f, 0.770020f, 0.791504f,
+ 0.810059f, 0.828613f, 0.931641f, 0.937012f, 0.937500f, 0.937500f, 0.937012f, 0.936523f,
+ 0.000692f, 0.001705f, 0.003000f, 0.004238f, 0.005798f, 0.006805f, 0.008659f, 0.009933f,
+ 0.011681f, 0.013191f, 0.015259f, 0.017166f, 0.019379f, 0.021729f, 0.024796f, 0.027328f,
+ 0.030380f, 0.033661f, 0.037598f, 0.041718f, 0.046539f, 0.051270f, 0.056946f, 0.062988f,
+ 0.069885f, 0.077271f, 0.085999f, 0.095398f, 0.105652f, 0.117859f, 0.129883f, 0.144409f,
+ 0.159912f, 0.177002f, 0.196045f, 0.216553f, 0.239014f, 0.262451f, 0.288086f, 0.314941f,
+ 0.343262f, 0.372314f, 0.403076f, 0.433594f, 0.465332f, 0.496826f, 0.527832f, 0.559082f,
+ 0.589355f, 0.619629f, 0.648926f, 0.676758f, 0.703125f, 0.728516f, 0.752930f, 0.775391f,
+ 0.797363f, 0.817871f, 0.927246f, 0.933105f, 0.934082f, 0.933594f, 0.933594f, 0.933105f,
+ 0.000460f, 0.001622f, 0.002705f, 0.003983f, 0.004925f, 0.006363f, 0.007652f, 0.008965f,
+ 0.010521f, 0.011963f, 0.013664f, 0.015480f, 0.017258f, 0.019440f, 0.021912f, 0.024338f,
+ 0.027084f, 0.030212f, 0.033356f, 0.037018f, 0.040833f, 0.045380f, 0.050110f, 0.055573f,
+ 0.061829f, 0.068359f, 0.075928f, 0.083984f, 0.093140f, 0.103333f, 0.115112f, 0.127441f,
+ 0.141602f, 0.156982f, 0.174316f, 0.192871f, 0.213257f, 0.235596f, 0.259766f, 0.285400f,
+ 0.312256f, 0.341797f, 0.371094f, 0.402100f, 0.434082f, 0.465332f, 0.497314f, 0.529297f,
+ 0.562012f, 0.592773f, 0.623535f, 0.652832f, 0.681641f, 0.709473f, 0.735352f, 0.759766f,
+ 0.783203f, 0.803711f, 0.922363f, 0.929199f, 0.929688f, 0.929199f, 0.929688f, 0.928711f,
+ 0.000341f, 0.001686f, 0.002537f, 0.003769f, 0.004745f, 0.005764f, 0.007034f, 0.008286f,
+ 0.009369f, 0.010742f, 0.012161f, 0.013931f, 0.015671f, 0.017563f, 0.019440f, 0.021851f,
+ 0.024231f, 0.026672f, 0.029556f, 0.032776f, 0.036255f, 0.040283f, 0.044464f, 0.049194f,
+ 0.054413f, 0.060059f, 0.066589f, 0.074036f, 0.081909f, 0.091187f, 0.100769f, 0.112000f,
+ 0.124512f, 0.139038f, 0.154297f, 0.171265f, 0.189819f, 0.210571f, 0.232788f, 0.257324f,
+ 0.283203f, 0.311035f, 0.339844f, 0.370850f, 0.402100f, 0.433838f, 0.466797f, 0.499268f,
+ 0.532227f, 0.565430f, 0.598145f, 0.628418f, 0.659180f, 0.687988f, 0.715820f, 0.742188f,
+ 0.767090f, 0.791504f, 0.917969f, 0.924805f, 0.925293f, 0.925293f, 0.924805f, 0.924805f,
+ 0.000405f, 0.001282f, 0.002298f, 0.003269f, 0.004448f, 0.005043f, 0.006294f, 0.007233f,
+ 0.008606f, 0.009727f, 0.010849f, 0.012421f, 0.013885f, 0.015465f, 0.017426f, 0.019394f,
+ 0.021667f, 0.023819f, 0.026154f, 0.029175f, 0.032227f, 0.035706f, 0.039062f, 0.043427f,
+ 0.047913f, 0.052856f, 0.058502f, 0.064880f, 0.071960f, 0.079895f, 0.088867f, 0.098633f,
+ 0.109619f, 0.122192f, 0.135742f, 0.151489f, 0.168457f, 0.187134f, 0.207764f, 0.230835f,
+ 0.254883f, 0.281494f, 0.310059f, 0.339355f, 0.370361f, 0.402588f, 0.435547f, 0.468994f,
+ 0.502930f, 0.537109f, 0.569824f, 0.602051f, 0.634766f, 0.665527f, 0.695801f, 0.724121f,
+ 0.750488f, 0.776855f, 0.912598f, 0.919434f, 0.920410f, 0.920410f, 0.919922f, 0.920410f,
+ 0.000529f, 0.001217f, 0.002171f, 0.003035f, 0.003790f, 0.004784f, 0.005711f, 0.006756f,
+ 0.007782f, 0.008987f, 0.009773f, 0.011185f, 0.012650f, 0.013771f, 0.015656f, 0.017181f,
+ 0.018890f, 0.021057f, 0.023239f, 0.025848f, 0.028488f, 0.031525f, 0.034607f, 0.038147f,
+ 0.042023f, 0.046539f, 0.051605f, 0.056793f, 0.063049f, 0.069946f, 0.078064f, 0.086548f,
+ 0.096313f, 0.107117f, 0.119446f, 0.133301f, 0.148560f, 0.165405f, 0.184570f, 0.205811f,
+ 0.228394f, 0.253174f, 0.280029f, 0.308594f, 0.339111f, 0.370605f, 0.404053f, 0.437988f,
+ 0.471680f, 0.506348f, 0.541504f, 0.576172f, 0.609375f, 0.642578f, 0.674316f, 0.705078f,
+ 0.734375f, 0.761719f, 0.907227f, 0.914062f, 0.915527f, 0.915527f, 0.916016f, 0.915039f,
+ 0.000402f, 0.001247f, 0.001841f, 0.002651f, 0.003414f, 0.004200f, 0.005337f, 0.005821f,
+ 0.006733f, 0.008041f, 0.008942f, 0.010201f, 0.011261f, 0.012749f, 0.013893f, 0.015472f,
+ 0.016663f, 0.018829f, 0.020615f, 0.022873f, 0.025299f, 0.027893f, 0.030533f, 0.033600f,
+ 0.037140f, 0.040924f, 0.044983f, 0.049927f, 0.055359f, 0.061340f, 0.068176f, 0.075500f,
+ 0.084106f, 0.093933f, 0.104370f, 0.116638f, 0.130249f, 0.145996f, 0.162842f, 0.181885f,
+ 0.203735f, 0.226562f, 0.251465f, 0.279297f, 0.308594f, 0.339355f, 0.373047f, 0.406982f,
+ 0.440918f, 0.477051f, 0.511719f, 0.548340f, 0.583496f, 0.618164f, 0.652344f, 0.684570f,
+ 0.715332f, 0.745605f, 0.901855f, 0.909180f, 0.910156f, 0.910645f, 0.910156f, 0.910156f,
+ 0.000371f, 0.001090f, 0.001752f, 0.002409f, 0.003042f, 0.003963f, 0.004898f, 0.005295f,
+ 0.006077f, 0.006992f, 0.008102f, 0.009338f, 0.010101f, 0.011078f, 0.012375f, 0.013718f,
+ 0.015099f, 0.016403f, 0.018402f, 0.020203f, 0.022354f, 0.024475f, 0.026825f, 0.029388f,
+ 0.032623f, 0.035522f, 0.039429f, 0.043762f, 0.048462f, 0.053558f, 0.059265f, 0.065552f,
+ 0.073120f, 0.081787f, 0.091431f, 0.102112f, 0.114136f, 0.127930f, 0.143066f, 0.160767f,
+ 0.179810f, 0.200928f, 0.224854f, 0.250732f, 0.279053f, 0.308838f, 0.340820f, 0.374756f,
+ 0.410156f, 0.446045f, 0.482666f, 0.520020f, 0.556152f, 0.593262f, 0.628906f, 0.663574f,
+ 0.695801f, 0.728027f, 0.895508f, 0.903809f, 0.904297f, 0.904297f, 0.904297f, 0.904785f,
+ 0.000425f, 0.000937f, 0.001529f, 0.002129f, 0.002674f, 0.003696f, 0.004257f, 0.004990f,
+ 0.005726f, 0.006161f, 0.007118f, 0.007919f, 0.009109f, 0.009941f, 0.011055f, 0.011993f,
+ 0.013191f, 0.014832f, 0.016281f, 0.017868f, 0.019562f, 0.021362f, 0.023514f, 0.025909f,
+ 0.028549f, 0.031189f, 0.034637f, 0.037994f, 0.042145f, 0.046570f, 0.051453f, 0.057129f,
+ 0.063965f, 0.070984f, 0.079285f, 0.088806f, 0.099426f, 0.111267f, 0.125366f, 0.140747f,
+ 0.158203f, 0.178101f, 0.199585f, 0.223755f, 0.250732f, 0.279297f, 0.310059f, 0.343994f,
+ 0.377686f, 0.414307f, 0.451904f, 0.489258f, 0.527832f, 0.565918f, 0.603027f, 0.640137f,
+ 0.675781f, 0.710449f, 0.888672f, 0.897461f, 0.899902f, 0.900391f, 0.899414f, 0.899414f,
+ 0.000317f, 0.000823f, 0.001386f, 0.002108f, 0.002684f, 0.003239f, 0.003883f, 0.004303f,
+ 0.004730f, 0.005569f, 0.006626f, 0.007214f, 0.008003f, 0.008865f, 0.009590f, 0.010948f,
+ 0.011856f, 0.012871f, 0.014381f, 0.015640f, 0.017075f, 0.018799f, 0.020569f, 0.022537f,
+ 0.024704f, 0.027405f, 0.030090f, 0.033142f, 0.036346f, 0.040436f, 0.044830f, 0.049835f,
+ 0.055450f, 0.061584f, 0.068665f, 0.076904f, 0.086060f, 0.096741f, 0.109192f, 0.122559f,
+ 0.138428f, 0.155762f, 0.176270f, 0.198242f, 0.223145f, 0.250244f, 0.280518f, 0.312500f,
+ 0.346680f, 0.382324f, 0.420410f, 0.458740f, 0.498779f, 0.538086f, 0.577637f, 0.616211f,
+ 0.654297f, 0.690918f, 0.881348f, 0.890625f, 0.892578f, 0.893066f, 0.893066f, 0.892578f,
+ 0.000385f, 0.000766f, 0.001544f, 0.001925f, 0.002359f, 0.002947f, 0.003176f, 0.003691f,
+ 0.004288f, 0.005215f, 0.005917f, 0.006214f, 0.007019f, 0.007843f, 0.008469f, 0.009598f,
+ 0.010345f, 0.011559f, 0.012497f, 0.013634f, 0.014992f, 0.016373f, 0.017853f, 0.019608f,
+ 0.021515f, 0.023788f, 0.026260f, 0.028931f, 0.031860f, 0.034912f, 0.038635f, 0.042633f,
+ 0.047638f, 0.053070f, 0.059540f, 0.066284f, 0.074524f, 0.083679f, 0.094177f, 0.106445f,
+ 0.120361f, 0.135620f, 0.154053f, 0.174072f, 0.197144f, 0.222900f, 0.251221f, 0.281982f,
+ 0.315430f, 0.351318f, 0.388672f, 0.427734f, 0.468506f, 0.508301f, 0.549805f, 0.591309f,
+ 0.631348f, 0.670410f, 0.874512f, 0.884766f, 0.885742f, 0.886230f, 0.886230f, 0.886230f,
+ 0.000230f, 0.000832f, 0.001281f, 0.001865f, 0.002207f, 0.002605f, 0.003212f, 0.003284f,
+ 0.004124f, 0.004597f, 0.005222f, 0.005703f, 0.006260f, 0.007095f, 0.007790f, 0.008377f,
+ 0.009010f, 0.010078f, 0.011009f, 0.011925f, 0.013153f, 0.014282f, 0.015610f, 0.017151f,
+ 0.018951f, 0.020416f, 0.022583f, 0.024826f, 0.027328f, 0.030136f, 0.033508f, 0.036835f,
+ 0.040985f, 0.045410f, 0.050812f, 0.056854f, 0.063965f, 0.071777f, 0.081177f, 0.091858f,
+ 0.103699f, 0.117615f, 0.133423f, 0.152588f, 0.172974f, 0.196777f, 0.222900f, 0.252686f,
+ 0.284912f, 0.319824f, 0.356934f, 0.395996f, 0.436768f, 0.478516f, 0.521484f, 0.564453f,
+ 0.607422f, 0.649414f, 0.866699f, 0.876953f, 0.877930f, 0.879395f, 0.879883f, 0.878418f,
+ 0.000228f, 0.000734f, 0.000993f, 0.001416f, 0.001935f, 0.002293f, 0.002541f, 0.003174f,
+ 0.003508f, 0.004040f, 0.004337f, 0.005039f, 0.005505f, 0.006054f, 0.006840f, 0.007366f,
+ 0.008041f, 0.008644f, 0.009544f, 0.010460f, 0.011238f, 0.012329f, 0.013542f, 0.014755f,
+ 0.016083f, 0.017624f, 0.019424f, 0.021408f, 0.023422f, 0.025803f, 0.028366f, 0.031311f,
+ 0.034912f, 0.039124f, 0.043304f, 0.048492f, 0.054291f, 0.061188f, 0.069397f, 0.078552f,
+ 0.089233f, 0.101074f, 0.115540f, 0.131226f, 0.150757f, 0.172119f, 0.196533f, 0.224243f,
+ 0.254883f, 0.288574f, 0.324707f, 0.364014f, 0.405029f, 0.447510f, 0.491699f, 0.536133f,
+ 0.581543f, 0.627441f, 0.858398f, 0.869141f, 0.870605f, 0.871582f, 0.871094f, 0.871582f,
+ 0.000118f, 0.000713f, 0.000985f, 0.001328f, 0.001612f, 0.001999f, 0.002399f, 0.002913f,
+ 0.003139f, 0.003567f, 0.004055f, 0.004406f, 0.004986f, 0.005226f, 0.005856f, 0.006332f,
+ 0.007042f, 0.007553f, 0.008286f, 0.009064f, 0.009834f, 0.010696f, 0.011658f, 0.012726f,
+ 0.013817f, 0.015289f, 0.016693f, 0.018265f, 0.019699f, 0.021835f, 0.024307f, 0.026642f,
+ 0.029770f, 0.033234f, 0.037048f, 0.041351f, 0.046478f, 0.052032f, 0.058960f, 0.066589f,
+ 0.075745f, 0.086182f, 0.099121f, 0.113037f, 0.129517f, 0.149048f, 0.171387f, 0.196899f,
+ 0.225464f, 0.257812f, 0.293457f, 0.331787f, 0.373291f, 0.416748f, 0.460938f, 0.507812f,
+ 0.554688f, 0.602051f, 0.849609f, 0.859863f, 0.862793f, 0.863281f, 0.862793f, 0.862793f,
+ 0.000211f, 0.000522f, 0.000877f, 0.001204f, 0.001507f, 0.001724f, 0.002062f, 0.002426f,
+ 0.002867f, 0.003157f, 0.003443f, 0.003752f, 0.004192f, 0.004753f, 0.005154f, 0.005428f,
+ 0.006065f, 0.006546f, 0.007210f, 0.007725f, 0.008530f, 0.009247f, 0.010025f, 0.010887f,
+ 0.011909f, 0.012970f, 0.014069f, 0.015335f, 0.017105f, 0.018433f, 0.020554f, 0.022552f,
+ 0.025116f, 0.027802f, 0.031158f, 0.034485f, 0.038971f, 0.044037f, 0.049469f, 0.055847f,
+ 0.063843f, 0.072815f, 0.083618f, 0.095947f, 0.110840f, 0.128174f, 0.147949f, 0.171387f,
+ 0.198242f, 0.228271f, 0.262207f, 0.299805f, 0.340332f, 0.384277f, 0.430176f, 0.477295f,
+ 0.527344f, 0.577637f, 0.839844f, 0.851074f, 0.853516f, 0.854492f, 0.854980f, 0.854980f,
+ 0.000218f, 0.000479f, 0.000706f, 0.001109f, 0.001245f, 0.001763f, 0.001800f, 0.002211f,
+ 0.002377f, 0.002783f, 0.003103f, 0.003223f, 0.003782f, 0.004089f, 0.004326f, 0.004711f,
+ 0.005306f, 0.005569f, 0.006199f, 0.006653f, 0.007168f, 0.007919f, 0.008560f, 0.009254f,
+ 0.009979f, 0.010872f, 0.012054f, 0.012810f, 0.014221f, 0.015793f, 0.017181f, 0.018967f,
+ 0.021088f, 0.023361f, 0.026001f, 0.028915f, 0.032257f, 0.036469f, 0.040924f, 0.046875f,
+ 0.053375f, 0.061218f, 0.070435f, 0.080811f, 0.093628f, 0.108704f, 0.126709f, 0.147461f,
+ 0.172241f, 0.199951f, 0.232788f, 0.268799f, 0.308594f, 0.351562f, 0.397705f, 0.447266f,
+ 0.498291f, 0.550293f, 0.830078f, 0.841797f, 0.843750f, 0.845215f, 0.845215f, 0.845703f,
+ 0.000139f, 0.000379f, 0.000704f, 0.000896f, 0.001095f, 0.001392f, 0.001649f, 0.002058f,
+ 0.002235f, 0.002483f, 0.002621f, 0.002878f, 0.003214f, 0.003580f, 0.003820f, 0.004055f,
+ 0.004498f, 0.004791f, 0.005173f, 0.005692f, 0.006145f, 0.006691f, 0.007175f, 0.007874f,
+ 0.008499f, 0.009239f, 0.010117f, 0.011032f, 0.011864f, 0.012901f, 0.014282f, 0.015701f,
+ 0.017242f, 0.019516f, 0.021469f, 0.024002f, 0.026749f, 0.029953f, 0.034027f, 0.038727f,
+ 0.044250f, 0.050568f, 0.058136f, 0.067139f, 0.078247f, 0.091614f, 0.106689f, 0.125366f,
+ 0.147339f, 0.172974f, 0.202881f, 0.237671f, 0.275879f, 0.318359f, 0.365234f, 0.415283f,
+ 0.468018f, 0.521973f, 0.819336f, 0.832031f, 0.834473f, 0.834961f, 0.835449f, 0.835938f,
+ 0.000115f, 0.000396f, 0.000688f, 0.000885f, 0.000917f, 0.001393f, 0.001478f, 0.001590f,
+ 0.001944f, 0.002123f, 0.002291f, 0.002644f, 0.002666f, 0.003023f, 0.003197f, 0.003546f,
+ 0.003714f, 0.004246f, 0.004551f, 0.004837f, 0.005108f, 0.005577f, 0.006054f, 0.006504f,
+ 0.007023f, 0.007633f, 0.008362f, 0.009148f, 0.009926f, 0.010742f, 0.011917f, 0.013062f,
+ 0.014351f, 0.015991f, 0.017639f, 0.019455f, 0.021729f, 0.024689f, 0.027740f, 0.031708f,
+ 0.036102f, 0.041260f, 0.047882f, 0.055450f, 0.064392f, 0.075500f, 0.088928f, 0.104797f,
+ 0.124756f, 0.147949f, 0.175415f, 0.207275f, 0.244507f, 0.286133f, 0.332520f, 0.381836f,
+ 0.436279f, 0.492432f, 0.808105f, 0.821289f, 0.822754f, 0.824707f, 0.825195f, 0.824219f,
+ 0.000209f, 0.000435f, 0.000493f, 0.000669f, 0.001040f, 0.001076f, 0.001254f, 0.001398f,
+ 0.001603f, 0.001697f, 0.001987f, 0.002140f, 0.002268f, 0.002472f, 0.002769f, 0.002991f,
+ 0.003302f, 0.003572f, 0.003685f, 0.004002f, 0.004337f, 0.004654f, 0.005062f, 0.005379f,
+ 0.005871f, 0.006363f, 0.006733f, 0.007416f, 0.008102f, 0.008812f, 0.009727f, 0.010689f,
+ 0.011566f, 0.013145f, 0.014053f, 0.015762f, 0.017899f, 0.020096f, 0.022552f, 0.025528f,
+ 0.028992f, 0.033325f, 0.038635f, 0.044952f, 0.052582f, 0.061554f, 0.072998f, 0.086670f,
+ 0.103577f, 0.124329f, 0.148804f, 0.178467f, 0.213501f, 0.253174f, 0.298828f, 0.348877f,
+ 0.403076f, 0.461914f, 0.795898f, 0.809570f, 0.812012f, 0.813477f, 0.813477f, 0.814453f,
+ 0.000243f, 0.000322f, 0.000466f, 0.000710f, 0.000863f, 0.000942f, 0.001051f, 0.001182f,
+ 0.001369f, 0.001451f, 0.001716f, 0.001851f, 0.001968f, 0.002192f, 0.002323f, 0.002470f,
+ 0.002773f, 0.002850f, 0.003056f, 0.003399f, 0.003624f, 0.003832f, 0.004192f, 0.004467f,
+ 0.004955f, 0.005276f, 0.005772f, 0.006084f, 0.006672f, 0.007191f, 0.007828f, 0.008720f,
+ 0.009575f, 0.010292f, 0.011505f, 0.012535f, 0.014114f, 0.016006f, 0.017838f, 0.020462f,
+ 0.023193f, 0.026489f, 0.030807f, 0.035858f, 0.041840f, 0.049652f, 0.059174f, 0.070435f,
+ 0.084839f, 0.102783f, 0.124146f, 0.151489f, 0.183472f, 0.221802f, 0.265137f, 0.315186f,
+ 0.369629f, 0.430664f, 0.782715f, 0.796875f, 0.799805f, 0.800293f, 0.801758f, 0.801758f,
+ 0.000119f, 0.000369f, 0.000340f, 0.000595f, 0.000667f, 0.000841f, 0.001010f, 0.001086f,
+ 0.001179f, 0.001225f, 0.001494f, 0.001555f, 0.001654f, 0.001754f, 0.001965f, 0.002142f,
+ 0.002197f, 0.002432f, 0.002619f, 0.002811f, 0.003021f, 0.003139f, 0.003567f, 0.003708f,
+ 0.004066f, 0.004360f, 0.004612f, 0.005123f, 0.005489f, 0.005878f, 0.006306f, 0.006824f,
+ 0.007576f, 0.008286f, 0.008949f, 0.010155f, 0.011322f, 0.012756f, 0.014046f, 0.015976f,
+ 0.018250f, 0.020874f, 0.024094f, 0.027878f, 0.032867f, 0.039154f, 0.046509f, 0.055908f,
+ 0.068054f, 0.082886f, 0.102356f, 0.125732f, 0.155029f, 0.190674f, 0.232422f, 0.281006f,
+ 0.335693f, 0.397949f, 0.770020f, 0.783691f, 0.786621f, 0.787598f, 0.788086f, 0.789551f,
+ 0.000000f, 0.000220f, 0.000275f, 0.000562f, 0.000618f, 0.000683f, 0.000733f, 0.000761f,
+ 0.000966f, 0.001022f, 0.001184f, 0.001237f, 0.001382f, 0.001552f, 0.001688f, 0.001724f,
+ 0.001918f, 0.002024f, 0.002115f, 0.002243f, 0.002403f, 0.002718f, 0.002840f, 0.003052f,
+ 0.003330f, 0.003508f, 0.003860f, 0.004097f, 0.004314f, 0.004719f, 0.005074f, 0.005535f,
+ 0.006058f, 0.006584f, 0.007168f, 0.007874f, 0.008759f, 0.009651f, 0.011086f, 0.012459f,
+ 0.013992f, 0.015945f, 0.018433f, 0.021408f, 0.025192f, 0.029861f, 0.035950f, 0.043396f,
+ 0.053406f, 0.065735f, 0.082031f, 0.102234f, 0.128052f, 0.160645f, 0.200073f, 0.247192f,
+ 0.301025f, 0.363281f, 0.755371f, 0.770996f, 0.772949f, 0.773926f, 0.775879f, 0.775879f,
+ 0.000216f, 0.000102f, 0.000381f, 0.000487f, 0.000429f, 0.000552f, 0.000579f, 0.000788f,
+ 0.000804f, 0.000854f, 0.000937f, 0.000996f, 0.001078f, 0.001218f, 0.001315f, 0.001499f,
+ 0.001532f, 0.001642f, 0.001805f, 0.001825f, 0.002077f, 0.002178f, 0.002312f, 0.002396f,
+ 0.002575f, 0.002735f, 0.002947f, 0.003317f, 0.003428f, 0.003721f, 0.004185f, 0.004379f,
+ 0.004704f, 0.005253f, 0.005650f, 0.006145f, 0.006870f, 0.007515f, 0.008415f, 0.009430f,
+ 0.010612f, 0.012093f, 0.013954f, 0.016052f, 0.018967f, 0.022476f, 0.027115f, 0.032898f,
+ 0.040649f, 0.050690f, 0.063599f, 0.080811f, 0.103210f, 0.132202f, 0.168823f, 0.213501f,
+ 0.266602f, 0.329102f, 0.740234f, 0.756348f, 0.758789f, 0.760254f, 0.761230f, 0.761230f,
+ 0.000179f, 0.000181f, 0.000180f, 0.000289f, 0.000413f, 0.000458f, 0.000497f, 0.000620f,
+ 0.000646f, 0.000688f, 0.000830f, 0.000868f, 0.000904f, 0.000981f, 0.001024f, 0.001178f,
+ 0.001146f, 0.001302f, 0.001382f, 0.001523f, 0.001679f, 0.001737f, 0.001824f, 0.001959f,
+ 0.002195f, 0.002283f, 0.002438f, 0.002579f, 0.002703f, 0.002939f, 0.003181f, 0.003454f,
+ 0.003677f, 0.004051f, 0.004395f, 0.004738f, 0.005283f, 0.005783f, 0.006420f, 0.007095f,
+ 0.007988f, 0.009094f, 0.010384f, 0.011955f, 0.013939f, 0.016434f, 0.019836f, 0.024292f,
+ 0.030029f, 0.037659f, 0.048065f, 0.061890f, 0.080811f, 0.105774f, 0.138672f, 0.180542f,
+ 0.231934f, 0.293213f, 0.724121f, 0.740234f, 0.744141f, 0.745117f, 0.745605f, 0.746094f,
+ 0.000000f, 0.000056f, 0.000263f, 0.000339f, 0.000369f, 0.000357f, 0.000376f, 0.000508f,
+ 0.000519f, 0.000558f, 0.000581f, 0.000678f, 0.000767f, 0.000775f, 0.000905f, 0.000849f,
+ 0.000992f, 0.000942f, 0.001192f, 0.001169f, 0.001204f, 0.001375f, 0.001439f, 0.001532f,
+ 0.001634f, 0.001676f, 0.001799f, 0.001904f, 0.002165f, 0.002262f, 0.002377f, 0.002611f,
+ 0.002836f, 0.003103f, 0.003321f, 0.003550f, 0.004005f, 0.004356f, 0.004772f, 0.005295f,
+ 0.005962f, 0.006756f, 0.007690f, 0.008690f, 0.010078f, 0.011871f, 0.014252f, 0.017242f,
+ 0.021393f, 0.027100f, 0.034851f, 0.046051f, 0.060455f, 0.081848f, 0.110474f, 0.148682f,
+ 0.197632f, 0.257568f, 0.706543f, 0.724121f, 0.727539f, 0.729492f, 0.729980f, 0.729492f,
+ 0.000000f, 0.000130f, 0.000174f, 0.000312f, 0.000290f, 0.000293f, 0.000372f, 0.000319f,
+ 0.000397f, 0.000433f, 0.000550f, 0.000552f, 0.000564f, 0.000593f, 0.000638f, 0.000758f,
+ 0.000784f, 0.000797f, 0.000842f, 0.000937f, 0.001011f, 0.001068f, 0.001125f, 0.001231f,
+ 0.001228f, 0.001288f, 0.001409f, 0.001465f, 0.001644f, 0.001697f, 0.001965f, 0.001924f,
+ 0.002136f, 0.002270f, 0.002436f, 0.002697f, 0.002916f, 0.003202f, 0.003492f, 0.003929f,
+ 0.004391f, 0.004887f, 0.005516f, 0.006233f, 0.007240f, 0.008461f, 0.010094f, 0.012070f,
+ 0.014854f, 0.018585f, 0.024338f, 0.032379f, 0.043884f, 0.060516f, 0.084656f, 0.118469f,
+ 0.164185f, 0.222168f, 0.689941f, 0.708008f, 0.710449f, 0.711914f, 0.712891f, 0.712402f,
+ 0.000000f, 0.000000f, 0.000122f, 0.000226f, 0.000145f, 0.000282f, 0.000255f, 0.000247f,
+ 0.000323f, 0.000389f, 0.000379f, 0.000435f, 0.000461f, 0.000509f, 0.000535f, 0.000517f,
+ 0.000557f, 0.000604f, 0.000649f, 0.000690f, 0.000757f, 0.000773f, 0.000836f, 0.000865f,
+ 0.000924f, 0.000957f, 0.001095f, 0.001104f, 0.001243f, 0.001361f, 0.001458f, 0.001486f,
+ 0.001619f, 0.001745f, 0.001791f, 0.001993f, 0.002100f, 0.002321f, 0.002539f, 0.002771f,
+ 0.003084f, 0.003412f, 0.003866f, 0.004368f, 0.005062f, 0.005821f, 0.006882f, 0.008278f,
+ 0.010071f, 0.012756f, 0.016327f, 0.021774f, 0.029785f, 0.042206f, 0.061462f, 0.090149f,
+ 0.131348f, 0.187378f, 0.669434f, 0.688965f, 0.692383f, 0.694824f, 0.695801f, 0.695312f,
+ 0.000000f, 0.000118f, 0.000113f, 0.000158f, 0.000158f, 0.000176f, 0.000224f, 0.000202f,
+ 0.000251f, 0.000260f, 0.000280f, 0.000332f, 0.000316f, 0.000365f, 0.000389f, 0.000419f,
+ 0.000454f, 0.000435f, 0.000476f, 0.000494f, 0.000516f, 0.000576f, 0.000609f, 0.000656f,
+ 0.000678f, 0.000712f, 0.000792f, 0.000800f, 0.000852f, 0.000919f, 0.000961f, 0.001070f,
+ 0.001120f, 0.001238f, 0.001300f, 0.001480f, 0.001459f, 0.001634f, 0.001798f, 0.001947f,
+ 0.002111f, 0.002377f, 0.002615f, 0.002966f, 0.003410f, 0.003933f, 0.004585f, 0.005489f,
+ 0.006706f, 0.008148f, 0.010757f, 0.013962f, 0.019257f, 0.027771f, 0.041931f, 0.065125f,
+ 0.101135f, 0.152832f, 0.650391f, 0.670898f, 0.674316f, 0.675293f, 0.675781f, 0.677246f,
+ 0.000000f, 0.000000f, 0.000109f, 0.000106f, 0.000121f, 0.000117f, 0.000130f, 0.000151f,
+ 0.000161f, 0.000174f, 0.000234f, 0.000197f, 0.000205f, 0.000236f, 0.000272f, 0.000296f,
+ 0.000267f, 0.000296f, 0.000397f, 0.000344f, 0.000413f, 0.000395f, 0.000433f, 0.000434f,
+ 0.000504f, 0.000488f, 0.000532f, 0.000550f, 0.000602f, 0.000711f, 0.000675f, 0.000704f,
+ 0.000752f, 0.000817f, 0.000896f, 0.000955f, 0.001009f, 0.001091f, 0.001223f, 0.001271f,
+ 0.001415f, 0.001560f, 0.001721f, 0.001989f, 0.002214f, 0.002508f, 0.002930f, 0.003504f,
+ 0.004208f, 0.005169f, 0.006603f, 0.008606f, 0.011864f, 0.017090f, 0.026367f, 0.043396f,
+ 0.072571f, 0.119751f, 0.630859f, 0.650879f, 0.653809f, 0.656250f, 0.657227f, 0.657227f,
+ 0.000000f, 0.000111f, 0.000104f, 0.000100f, 0.000096f, 0.000094f, 0.000105f, 0.000096f,
+ 0.000101f, 0.000115f, 0.000119f, 0.000155f, 0.000129f, 0.000180f, 0.000186f, 0.000199f,
+ 0.000208f, 0.000214f, 0.000232f, 0.000230f, 0.000237f, 0.000247f, 0.000303f, 0.000276f,
+ 0.000324f, 0.000332f, 0.000381f, 0.000371f, 0.000393f, 0.000428f, 0.000490f, 0.000468f,
+ 0.000512f, 0.000540f, 0.000598f, 0.000670f, 0.000673f, 0.000711f, 0.000767f, 0.000842f,
+ 0.000894f, 0.000985f, 0.001120f, 0.001200f, 0.001416f, 0.001544f, 0.001768f, 0.002052f,
+ 0.002510f, 0.003044f, 0.003796f, 0.005016f, 0.006870f, 0.009918f, 0.015335f, 0.026077f,
+ 0.048004f, 0.088745f, 0.610352f, 0.630859f, 0.634277f, 0.636230f, 0.637207f, 0.638184f,
+ 0.000000f, 0.000104f, 0.000098f, 0.000092f, 0.000087f, 0.000084f, 0.000081f, 0.000078f,
+ 0.000074f, 0.000070f, 0.000073f, 0.000075f, 0.000081f, 0.000081f, 0.000119f, 0.000124f,
+ 0.000129f, 0.000115f, 0.000142f, 0.000169f, 0.000155f, 0.000169f, 0.000172f, 0.000196f,
+ 0.000209f, 0.000211f, 0.000203f, 0.000238f, 0.000245f, 0.000260f, 0.000282f, 0.000281f,
+ 0.000297f, 0.000333f, 0.000343f, 0.000374f, 0.000398f, 0.000428f, 0.000473f, 0.000494f,
+ 0.000534f, 0.000591f, 0.000643f, 0.000708f, 0.000790f, 0.000893f, 0.001040f, 0.001169f,
+ 0.001381f, 0.001676f, 0.002123f, 0.002686f, 0.003658f, 0.005329f, 0.008347f, 0.014244f,
+ 0.027954f, 0.060638f, 0.587891f, 0.609375f, 0.613281f, 0.614746f, 0.616699f, 0.616211f,
+ 0.000110f, 0.000094f, 0.000085f, 0.000079f, 0.000075f, 0.000072f, 0.000069f, 0.000067f,
+ 0.000065f, 0.000063f, 0.000059f, 0.000059f, 0.000054f, 0.000051f, 0.000055f, 0.000051f,
+ 0.000066f, 0.000066f, 0.000078f, 0.000074f, 0.000089f, 0.000091f, 0.000102f, 0.000109f,
+ 0.000114f, 0.000126f, 0.000133f, 0.000130f, 0.000141f, 0.000141f, 0.000156f, 0.000172f,
+ 0.000180f, 0.000179f, 0.000206f, 0.000199f, 0.000214f, 0.000254f, 0.000247f, 0.000282f,
+ 0.000300f, 0.000324f, 0.000349f, 0.000374f, 0.000413f, 0.000459f, 0.000513f, 0.000619f,
+ 0.000711f, 0.000823f, 0.001030f, 0.001269f, 0.001724f, 0.002487f, 0.003948f, 0.007015f,
+ 0.014122f, 0.036346f, 0.565430f, 0.586426f, 0.592285f, 0.592773f, 0.594238f, 0.594727f,
+ 0.000092f, 0.000073f, 0.000067f, 0.000062f, 0.000057f, 0.000055f, 0.000052f, 0.000052f,
+ 0.000049f, 0.000049f, 0.000047f, 0.000046f, 0.000046f, 0.000043f, 0.000041f, 0.000039f,
+ 0.000038f, 0.000036f, 0.000039f, 0.000036f, 0.000039f, 0.000037f, 0.000039f, 0.000047f,
+ 0.000051f, 0.000057f, 0.000059f, 0.000060f, 0.000067f, 0.000071f, 0.000078f, 0.000085f,
+ 0.000087f, 0.000091f, 0.000098f, 0.000095f, 0.000102f, 0.000122f, 0.000122f, 0.000137f,
+ 0.000143f, 0.000145f, 0.000168f, 0.000171f, 0.000197f, 0.000209f, 0.000234f, 0.000264f,
+ 0.000295f, 0.000349f, 0.000418f, 0.000520f, 0.000678f, 0.000958f, 0.001512f, 0.002745f,
+ 0.006092f, 0.017456f, 0.542969f, 0.565430f, 0.568848f, 0.569824f, 0.572266f, 0.572266f,
+ 0.000052f, 0.000042f, 0.000037f, 0.000035f, 0.000033f, 0.000033f, 0.000032f, 0.000031f,
+ 0.000031f, 0.000029f, 0.000030f, 0.000030f, 0.000029f, 0.000028f, 0.000028f, 0.000028f,
+ 0.000028f, 0.000028f, 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000022f,
+ 0.000021f, 0.000020f, 0.000019f, 0.000022f, 0.000020f, 0.000023f, 0.000024f, 0.000026f,
+ 0.000028f, 0.000035f, 0.000037f, 0.000038f, 0.000039f, 0.000043f, 0.000048f, 0.000050f,
+ 0.000053f, 0.000055f, 0.000062f, 0.000059f, 0.000072f, 0.000070f, 0.000087f, 0.000099f,
+ 0.000100f, 0.000119f, 0.000142f, 0.000162f, 0.000217f, 0.000283f, 0.000425f, 0.000760f,
+ 0.001818f, 0.006405f, 0.519043f, 0.541504f, 0.546387f, 0.548828f, 0.549316f, 0.550781f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f,
+ 0.000004f, 0.000006f, 0.000006f, 0.000008f, 0.000009f, 0.000009f, 0.000009f, 0.000010f,
+ 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
+ 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000008f, 0.000011f,
+ 0.000011f, 0.000012f, 0.000015f, 0.000016f, 0.000016f, 0.000018f, 0.000018f, 0.000020f,
+ 0.000022f, 0.000024f, 0.000028f, 0.000035f, 0.000036f, 0.000052f, 0.000071f, 0.000117f,
+ 0.000260f, 0.001269f, 0.495605f, 0.518555f, 0.523926f, 0.525879f, 0.526855f, 0.527344f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f,
+ 0.000005f, 0.000021f, 0.473145f, 0.495605f, 0.500000f, 0.502441f, 0.503418f, 0.503906f,
+ },
+ {
+ 0.045868f, 0.130493f, 0.205322f, 0.272705f, 0.331787f, 0.384521f, 0.431885f, 0.473389f,
+ 0.511719f, 0.545898f, 0.576660f, 0.605469f, 0.631348f, 0.654785f, 0.676758f, 0.696289f,
+ 0.714355f, 0.732422f, 0.749023f, 0.763184f, 0.777832f, 0.790527f, 0.802734f, 0.813477f,
+ 0.824219f, 0.834961f, 0.844238f, 0.853027f, 0.862305f, 0.869629f, 0.877441f, 0.884277f,
+ 0.892090f, 0.898926f, 0.904297f, 0.910645f, 0.916992f, 0.921875f, 0.926758f, 0.931641f,
+ 0.937012f, 0.941406f, 0.945801f, 0.950195f, 0.954102f, 0.958496f, 0.962402f, 0.966309f,
+ 0.969238f, 0.973145f, 0.976074f, 0.979492f, 0.982422f, 0.985352f, 0.988281f, 0.991211f,
+ 0.993652f, 0.996094f, 0.997070f, 0.993164f, 0.990234f, 0.987305f, 0.984375f, 0.981445f,
+ 0.033447f, 0.097717f, 0.160400f, 0.219238f, 0.273438f, 0.323486f, 0.371582f, 0.414062f,
+ 0.454834f, 0.491211f, 0.524414f, 0.555176f, 0.583984f, 0.610840f, 0.635254f, 0.658203f,
+ 0.678223f, 0.697754f, 0.716309f, 0.732422f, 0.749023f, 0.763184f, 0.776855f, 0.790527f,
+ 0.802734f, 0.812988f, 0.824707f, 0.834473f, 0.844238f, 0.853516f, 0.862305f, 0.870117f,
+ 0.877930f, 0.884766f, 0.892090f, 0.897949f, 0.905762f, 0.910645f, 0.917480f, 0.923340f,
+ 0.927734f, 0.933105f, 0.937988f, 0.942871f, 0.947266f, 0.951172f, 0.955566f, 0.960449f,
+ 0.963379f, 0.967285f, 0.970703f, 0.974609f, 0.978027f, 0.981445f, 0.984863f, 0.986816f,
+ 0.989746f, 0.993164f, 0.995605f, 0.992188f, 0.988770f, 0.986328f, 0.983398f, 0.980957f,
+ 0.024796f, 0.075195f, 0.126221f, 0.176025f, 0.224976f, 0.271729f, 0.317383f, 0.359375f,
+ 0.399902f, 0.437744f, 0.472656f, 0.505371f, 0.536133f, 0.565430f, 0.591797f, 0.615723f,
+ 0.639648f, 0.660156f, 0.681152f, 0.699219f, 0.718262f, 0.734375f, 0.749512f, 0.764648f,
+ 0.777832f, 0.791016f, 0.802734f, 0.813965f, 0.825195f, 0.835449f, 0.844727f, 0.854004f,
+ 0.862305f, 0.871094f, 0.878418f, 0.886230f, 0.893555f, 0.900391f, 0.906738f, 0.912598f,
+ 0.917969f, 0.923828f, 0.929688f, 0.935059f, 0.939941f, 0.943848f, 0.949219f, 0.953613f,
+ 0.958008f, 0.961914f, 0.965332f, 0.969238f, 0.972656f, 0.976074f, 0.979492f, 0.982910f,
+ 0.986328f, 0.989258f, 0.993652f, 0.990723f, 0.987793f, 0.985352f, 0.982910f, 0.979980f,
+ 0.019119f, 0.058624f, 0.100220f, 0.142578f, 0.185303f, 0.227417f, 0.269287f, 0.310059f,
+ 0.348877f, 0.385254f, 0.421875f, 0.455566f, 0.489014f, 0.518555f, 0.546875f, 0.574707f,
+ 0.598633f, 0.624023f, 0.645508f, 0.666016f, 0.684082f, 0.702637f, 0.720703f, 0.736816f,
+ 0.751465f, 0.766113f, 0.779785f, 0.792969f, 0.804199f, 0.815918f, 0.826660f, 0.836426f,
+ 0.846191f, 0.855957f, 0.864746f, 0.872559f, 0.880371f, 0.888184f, 0.895508f, 0.902344f,
+ 0.908691f, 0.914062f, 0.919922f, 0.925293f, 0.932129f, 0.936035f, 0.941895f, 0.946289f,
+ 0.951172f, 0.955566f, 0.959473f, 0.963867f, 0.967773f, 0.970703f, 0.975586f, 0.978516f,
+ 0.981934f, 0.985352f, 0.991699f, 0.988770f, 0.986328f, 0.983887f, 0.981445f, 0.979004f,
+ 0.015175f, 0.046997f, 0.080688f, 0.116028f, 0.152466f, 0.189819f, 0.227417f, 0.264404f,
+ 0.301758f, 0.338623f, 0.374268f, 0.407471f, 0.439941f, 0.471924f, 0.501465f, 0.529785f,
+ 0.556641f, 0.582031f, 0.606445f, 0.629395f, 0.649902f, 0.670898f, 0.688965f, 0.708496f,
+ 0.725098f, 0.740723f, 0.755371f, 0.769531f, 0.782715f, 0.795410f, 0.807129f, 0.818848f,
+ 0.829590f, 0.839844f, 0.849121f, 0.857910f, 0.866699f, 0.875488f, 0.882812f, 0.890625f,
+ 0.897461f, 0.904297f, 0.910645f, 0.916992f, 0.922363f, 0.928223f, 0.933594f, 0.938477f,
+ 0.944824f, 0.949707f, 0.953613f, 0.958008f, 0.962402f, 0.966309f, 0.970703f, 0.974121f,
+ 0.977539f, 0.981934f, 0.990234f, 0.987793f, 0.984863f, 0.982910f, 0.980469f, 0.978516f,
+ 0.012215f, 0.038452f, 0.066101f, 0.095825f, 0.126831f, 0.159180f, 0.192749f, 0.226685f,
+ 0.260986f, 0.294922f, 0.328857f, 0.363037f, 0.394531f, 0.426270f, 0.457520f, 0.486572f,
+ 0.514648f, 0.541016f, 0.567871f, 0.590820f, 0.614746f, 0.636230f, 0.657227f, 0.676270f,
+ 0.694336f, 0.711914f, 0.729492f, 0.744141f, 0.759277f, 0.773438f, 0.786621f, 0.798340f,
+ 0.811523f, 0.822266f, 0.833496f, 0.842773f, 0.851562f, 0.861816f, 0.869629f, 0.878418f,
+ 0.885742f, 0.893066f, 0.900879f, 0.907715f, 0.913574f, 0.919922f, 0.925781f, 0.932129f,
+ 0.937012f, 0.942871f, 0.946777f, 0.951660f, 0.957031f, 0.960938f, 0.965332f, 0.969727f,
+ 0.973633f, 0.977051f, 0.988281f, 0.986328f, 0.983887f, 0.981445f, 0.979492f, 0.976562f,
+ 0.009903f, 0.031525f, 0.054626f, 0.078979f, 0.105408f, 0.133789f, 0.162720f, 0.192993f,
+ 0.224976f, 0.256592f, 0.288330f, 0.320312f, 0.352295f, 0.383545f, 0.414062f, 0.443848f,
+ 0.473389f, 0.500488f, 0.526367f, 0.553223f, 0.577637f, 0.600586f, 0.622070f, 0.644043f,
+ 0.664551f, 0.683105f, 0.701660f, 0.718262f, 0.734375f, 0.750000f, 0.764648f, 0.778320f,
+ 0.791016f, 0.802734f, 0.815430f, 0.826172f, 0.836426f, 0.845703f, 0.855957f, 0.864258f,
+ 0.874023f, 0.881348f, 0.889648f, 0.896973f, 0.904297f, 0.911621f, 0.917480f, 0.922852f,
+ 0.929199f, 0.935059f, 0.939941f, 0.944824f, 0.950195f, 0.954590f, 0.959961f, 0.964355f,
+ 0.968262f, 0.972656f, 0.986328f, 0.984375f, 0.981934f, 0.979980f, 0.978027f, 0.975586f,
+ 0.008385f, 0.026154f, 0.045319f, 0.066467f, 0.089111f, 0.113220f, 0.138916f, 0.165405f,
+ 0.192871f, 0.222290f, 0.252197f, 0.281494f, 0.311279f, 0.342285f, 0.372314f, 0.402832f,
+ 0.431641f, 0.459473f, 0.486572f, 0.513672f, 0.539062f, 0.562988f, 0.587402f, 0.609863f,
+ 0.631348f, 0.652344f, 0.671875f, 0.689941f, 0.708008f, 0.724609f, 0.740234f, 0.755371f,
+ 0.768066f, 0.783203f, 0.795410f, 0.808105f, 0.819336f, 0.830078f, 0.840332f, 0.851074f,
+ 0.860352f, 0.869141f, 0.877930f, 0.885742f, 0.893555f, 0.900879f, 0.907715f, 0.915039f,
+ 0.920410f, 0.926758f, 0.933105f, 0.938965f, 0.944336f, 0.949707f, 0.953613f, 0.958984f,
+ 0.962891f, 0.967285f, 0.984375f, 0.982910f, 0.980957f, 0.978516f, 0.976562f, 0.974609f,
+ 0.006992f, 0.022324f, 0.038544f, 0.056396f, 0.075317f, 0.095947f, 0.117981f, 0.141968f,
+ 0.166504f, 0.192627f, 0.219238f, 0.246704f, 0.275879f, 0.304443f, 0.333252f, 0.362305f,
+ 0.390869f, 0.419678f, 0.447266f, 0.474121f, 0.500977f, 0.525879f, 0.551270f, 0.574219f,
+ 0.597656f, 0.620117f, 0.641602f, 0.661133f, 0.680664f, 0.698242f, 0.715332f, 0.731934f,
+ 0.746582f, 0.761230f, 0.775391f, 0.789551f, 0.802246f, 0.813477f, 0.825195f, 0.835938f,
+ 0.846191f, 0.855957f, 0.865723f, 0.873535f, 0.882324f, 0.890625f, 0.898438f, 0.905762f,
+ 0.912598f, 0.918945f, 0.925781f, 0.931641f, 0.937012f, 0.943848f, 0.948730f, 0.954102f,
+ 0.957520f, 0.963379f, 0.981934f, 0.980957f, 0.979004f, 0.977051f, 0.975098f, 0.973145f,
+ 0.006260f, 0.018387f, 0.032684f, 0.047821f, 0.064636f, 0.082153f, 0.101318f, 0.122009f,
+ 0.143921f, 0.166870f, 0.191406f, 0.216187f, 0.243164f, 0.269287f, 0.297119f, 0.324951f,
+ 0.352783f, 0.380859f, 0.408691f, 0.435547f, 0.462402f, 0.489258f, 0.514160f, 0.540039f,
+ 0.563965f, 0.585938f, 0.608398f, 0.629395f, 0.649414f, 0.669434f, 0.689453f, 0.705566f,
+ 0.722656f, 0.739258f, 0.753418f, 0.769043f, 0.783203f, 0.795898f, 0.807617f, 0.819824f,
+ 0.830566f, 0.842285f, 0.852051f, 0.862305f, 0.871094f, 0.878906f, 0.888184f, 0.895996f,
+ 0.902832f, 0.910645f, 0.917480f, 0.924316f, 0.930176f, 0.936523f, 0.942383f, 0.946777f,
+ 0.953613f, 0.958496f, 0.979980f, 0.979004f, 0.977539f, 0.975586f, 0.973633f, 0.972168f,
+ 0.005268f, 0.016418f, 0.028091f, 0.041107f, 0.055420f, 0.070435f, 0.087341f, 0.105347f,
+ 0.124512f, 0.144531f, 0.166260f, 0.189453f, 0.213989f, 0.238037f, 0.263184f, 0.290039f,
+ 0.317139f, 0.344238f, 0.370850f, 0.398438f, 0.425293f, 0.451660f, 0.477539f, 0.503418f,
+ 0.528320f, 0.551270f, 0.576172f, 0.598145f, 0.619629f, 0.640137f, 0.659668f, 0.680176f,
+ 0.697754f, 0.714844f, 0.731934f, 0.748047f, 0.762695f, 0.776367f, 0.790039f, 0.803223f,
+ 0.814453f, 0.827148f, 0.837891f, 0.847656f, 0.858398f, 0.868164f, 0.876953f, 0.885742f,
+ 0.893066f, 0.901855f, 0.908691f, 0.916504f, 0.922852f, 0.929199f, 0.935059f, 0.941895f,
+ 0.947754f, 0.953125f, 0.978027f, 0.977539f, 0.975586f, 0.973633f, 0.971680f, 0.969727f,
+ 0.004372f, 0.013802f, 0.024185f, 0.036011f, 0.047729f, 0.060944f, 0.075684f, 0.090820f,
+ 0.107788f, 0.125488f, 0.144653f, 0.165771f, 0.187012f, 0.210205f, 0.233643f, 0.258545f,
+ 0.283447f, 0.309326f, 0.335449f, 0.362305f, 0.388672f, 0.415771f, 0.441650f, 0.468018f,
+ 0.492920f, 0.518066f, 0.542480f, 0.564941f, 0.587891f, 0.609863f, 0.630859f, 0.651855f,
+ 0.670898f, 0.689453f, 0.707520f, 0.724609f, 0.740723f, 0.755859f, 0.770996f, 0.785156f,
+ 0.799316f, 0.809570f, 0.822754f, 0.834473f, 0.845215f, 0.855469f, 0.865723f, 0.874023f,
+ 0.883301f, 0.892090f, 0.899902f, 0.907715f, 0.915039f, 0.922363f, 0.928711f, 0.935059f,
+ 0.941406f, 0.947266f, 0.975586f, 0.975098f, 0.973633f, 0.971680f, 0.969727f, 0.968262f,
+ 0.003809f, 0.012253f, 0.021240f, 0.030884f, 0.041473f, 0.052887f, 0.065308f, 0.079224f,
+ 0.094177f, 0.109558f, 0.126709f, 0.145142f, 0.163940f, 0.184814f, 0.207397f, 0.229736f,
+ 0.252686f, 0.276855f, 0.302246f, 0.327881f, 0.353271f, 0.380127f, 0.405762f, 0.432129f,
+ 0.457520f, 0.482422f, 0.507324f, 0.531250f, 0.556152f, 0.578125f, 0.600586f, 0.622559f,
+ 0.642578f, 0.662109f, 0.681641f, 0.700195f, 0.716797f, 0.734375f, 0.750000f, 0.766113f,
+ 0.779297f, 0.793457f, 0.807129f, 0.819336f, 0.830078f, 0.842285f, 0.853027f, 0.862793f,
+ 0.872559f, 0.881348f, 0.890625f, 0.899414f, 0.907227f, 0.914551f, 0.920898f, 0.928223f,
+ 0.935059f, 0.941406f, 0.973633f, 0.973145f, 0.971680f, 0.970215f, 0.968262f, 0.966797f,
+ 0.003462f, 0.010796f, 0.018646f, 0.026962f, 0.036377f, 0.046173f, 0.057190f, 0.068665f,
+ 0.081726f, 0.095520f, 0.110962f, 0.127563f, 0.144897f, 0.162476f, 0.182373f, 0.202881f,
+ 0.225342f, 0.248291f, 0.271729f, 0.294922f, 0.320312f, 0.345459f, 0.370850f, 0.397217f,
+ 0.422607f, 0.447998f, 0.473145f, 0.498291f, 0.522461f, 0.546875f, 0.569824f, 0.591797f,
+ 0.614258f, 0.635742f, 0.655273f, 0.674805f, 0.693359f, 0.711426f, 0.729492f, 0.745605f,
+ 0.760742f, 0.775391f, 0.789551f, 0.803223f, 0.816406f, 0.828125f, 0.839844f, 0.850586f,
+ 0.861328f, 0.871094f, 0.880371f, 0.889648f, 0.898438f, 0.906250f, 0.915039f, 0.921875f,
+ 0.928223f, 0.935547f, 0.970703f, 0.970215f, 0.970215f, 0.967773f, 0.966309f, 0.965332f,
+ 0.002872f, 0.009338f, 0.016174f, 0.024231f, 0.031525f, 0.040558f, 0.050140f, 0.060455f,
+ 0.071472f, 0.084167f, 0.097168f, 0.111450f, 0.127197f, 0.143433f, 0.160889f, 0.179565f,
+ 0.199463f, 0.220825f, 0.242554f, 0.265625f, 0.288818f, 0.312744f, 0.338135f, 0.362793f,
+ 0.387939f, 0.414307f, 0.439453f, 0.464355f, 0.489014f, 0.514648f, 0.537598f, 0.561523f,
+ 0.583984f, 0.606445f, 0.627930f, 0.648926f, 0.667480f, 0.687988f, 0.705566f, 0.723633f,
+ 0.740234f, 0.756348f, 0.771484f, 0.786621f, 0.799805f, 0.812012f, 0.825195f, 0.836426f,
+ 0.849121f, 0.859375f, 0.870605f, 0.879883f, 0.888672f, 0.897461f, 0.905762f, 0.915039f,
+ 0.921387f, 0.928711f, 0.967773f, 0.969238f, 0.966797f, 0.966797f, 0.964355f, 0.963379f,
+ 0.002750f, 0.008202f, 0.014519f, 0.021301f, 0.028183f, 0.035828f, 0.044342f, 0.053375f,
+ 0.063354f, 0.074219f, 0.085876f, 0.098083f, 0.111938f, 0.126343f, 0.142212f, 0.158936f,
+ 0.177124f, 0.196411f, 0.216553f, 0.237427f, 0.260010f, 0.282715f, 0.306641f, 0.330811f,
+ 0.355957f, 0.381104f, 0.405518f, 0.431152f, 0.456543f, 0.480957f, 0.504883f, 0.529785f,
+ 0.553223f, 0.577148f, 0.599121f, 0.620605f, 0.642090f, 0.662598f, 0.682617f, 0.701172f,
+ 0.718750f, 0.735352f, 0.751953f, 0.768066f, 0.783691f, 0.796875f, 0.810547f, 0.822754f,
+ 0.835938f, 0.847656f, 0.858398f, 0.869141f, 0.879395f, 0.888672f, 0.897949f, 0.906250f,
+ 0.914551f, 0.922363f, 0.965820f, 0.966797f, 0.965820f, 0.963867f, 0.963379f, 0.961426f,
+ 0.002264f, 0.007446f, 0.012741f, 0.018494f, 0.024536f, 0.031769f, 0.039154f, 0.047424f,
+ 0.056122f, 0.065308f, 0.075623f, 0.087219f, 0.098755f, 0.111328f, 0.125854f, 0.140869f,
+ 0.157349f, 0.174805f, 0.193115f, 0.212402f, 0.233643f, 0.254883f, 0.276855f, 0.300293f,
+ 0.324463f, 0.348389f, 0.374023f, 0.398193f, 0.423340f, 0.448242f, 0.473877f, 0.498291f,
+ 0.521973f, 0.545898f, 0.569824f, 0.592773f, 0.614258f, 0.635742f, 0.657227f, 0.676270f,
+ 0.695801f, 0.714844f, 0.731445f, 0.749512f, 0.765137f, 0.779785f, 0.793945f, 0.808594f,
+ 0.821777f, 0.833496f, 0.846191f, 0.858398f, 0.868652f, 0.879395f, 0.888672f, 0.897949f,
+ 0.906738f, 0.916016f, 0.962402f, 0.963867f, 0.962891f, 0.961914f, 0.960938f, 0.958984f,
+ 0.002377f, 0.006668f, 0.011467f, 0.016693f, 0.021820f, 0.028091f, 0.034485f, 0.041748f,
+ 0.049347f, 0.057678f, 0.066589f, 0.076538f, 0.086975f, 0.098816f, 0.111816f, 0.125366f,
+ 0.139404f, 0.155151f, 0.171875f, 0.190186f, 0.208496f, 0.228760f, 0.250244f, 0.271973f,
+ 0.294189f, 0.317871f, 0.341797f, 0.365479f, 0.391357f, 0.415771f, 0.440430f, 0.466797f,
+ 0.491699f, 0.515625f, 0.539551f, 0.563477f, 0.585938f, 0.608887f, 0.630371f, 0.651855f,
+ 0.672363f, 0.692383f, 0.710449f, 0.729492f, 0.745605f, 0.762695f, 0.778320f, 0.792480f,
+ 0.807129f, 0.820801f, 0.833984f, 0.846680f, 0.857910f, 0.869141f, 0.879395f, 0.889648f,
+ 0.899414f, 0.907715f, 0.959473f, 0.961426f, 0.960449f, 0.959961f, 0.958496f, 0.957031f,
+ 0.002062f, 0.006180f, 0.010201f, 0.015053f, 0.019531f, 0.025116f, 0.030960f, 0.037292f,
+ 0.043915f, 0.051117f, 0.059570f, 0.067749f, 0.076843f, 0.087708f, 0.099060f, 0.110352f,
+ 0.123413f, 0.138062f, 0.153198f, 0.169067f, 0.186768f, 0.204956f, 0.224487f, 0.244873f,
+ 0.265625f, 0.288330f, 0.311768f, 0.335205f, 0.359863f, 0.384521f, 0.409668f, 0.434082f,
+ 0.459717f, 0.483887f, 0.508789f, 0.533203f, 0.557617f, 0.580566f, 0.603516f, 0.626465f,
+ 0.646484f, 0.667969f, 0.687500f, 0.708008f, 0.726074f, 0.744141f, 0.760742f, 0.776367f,
+ 0.791504f, 0.806641f, 0.820312f, 0.833496f, 0.846191f, 0.858398f, 0.869629f, 0.879883f,
+ 0.890625f, 0.900879f, 0.956543f, 0.958496f, 0.958008f, 0.956543f, 0.955566f, 0.954102f,
+ 0.001774f, 0.005459f, 0.009155f, 0.013290f, 0.017807f, 0.022537f, 0.027527f, 0.033081f,
+ 0.038818f, 0.045380f, 0.052643f, 0.060516f, 0.068420f, 0.077942f, 0.087952f, 0.098572f,
+ 0.109863f, 0.122925f, 0.136230f, 0.150146f, 0.166382f, 0.183105f, 0.201172f, 0.219482f,
+ 0.240112f, 0.261230f, 0.283203f, 0.305664f, 0.329590f, 0.353027f, 0.377930f, 0.402344f,
+ 0.427490f, 0.453369f, 0.478516f, 0.502930f, 0.527832f, 0.552246f, 0.575684f, 0.598145f,
+ 0.621094f, 0.643555f, 0.664551f, 0.685547f, 0.704590f, 0.723633f, 0.742188f, 0.759277f,
+ 0.775879f, 0.791016f, 0.806152f, 0.820801f, 0.833496f, 0.847168f, 0.859375f, 0.870605f,
+ 0.881348f, 0.893066f, 0.953125f, 0.956055f, 0.955566f, 0.954102f, 0.953125f, 0.951660f,
+ 0.001655f, 0.004757f, 0.008308f, 0.011993f, 0.015808f, 0.020187f, 0.024780f, 0.029434f,
+ 0.034851f, 0.040741f, 0.046997f, 0.053650f, 0.061096f, 0.069397f, 0.078064f, 0.087280f,
+ 0.097351f, 0.108887f, 0.121033f, 0.134277f, 0.148560f, 0.163330f, 0.180054f, 0.197144f,
+ 0.215332f, 0.235718f, 0.255859f, 0.277588f, 0.300049f, 0.323730f, 0.347656f, 0.371826f,
+ 0.396729f, 0.422607f, 0.447021f, 0.472168f, 0.497803f, 0.521973f, 0.547363f, 0.571289f,
+ 0.594238f, 0.618164f, 0.640137f, 0.662109f, 0.682617f, 0.702637f, 0.722168f, 0.739746f,
+ 0.758301f, 0.774902f, 0.790527f, 0.806641f, 0.820801f, 0.834961f, 0.848633f, 0.860352f,
+ 0.872559f, 0.883789f, 0.949707f, 0.953125f, 0.952148f, 0.951172f, 0.950684f, 0.948730f,
+ 0.001418f, 0.004456f, 0.007584f, 0.010803f, 0.014450f, 0.018005f, 0.022186f, 0.026398f,
+ 0.031342f, 0.036224f, 0.041687f, 0.048126f, 0.054382f, 0.061676f, 0.069641f, 0.077759f,
+ 0.086914f, 0.097168f, 0.107910f, 0.119263f, 0.132446f, 0.145752f, 0.161011f, 0.176758f,
+ 0.193726f, 0.211914f, 0.231201f, 0.251709f, 0.272705f, 0.294922f, 0.318604f, 0.342041f,
+ 0.366455f, 0.390869f, 0.416992f, 0.441895f, 0.467285f, 0.493164f, 0.517578f, 0.541992f,
+ 0.566895f, 0.590820f, 0.614746f, 0.637207f, 0.660156f, 0.681152f, 0.701172f, 0.720703f,
+ 0.739746f, 0.758301f, 0.775391f, 0.791992f, 0.807617f, 0.821289f, 0.836426f, 0.850586f,
+ 0.863281f, 0.874512f, 0.946777f, 0.949707f, 0.949707f, 0.948730f, 0.947266f, 0.946289f,
+ 0.001213f, 0.003864f, 0.006721f, 0.009796f, 0.012932f, 0.016037f, 0.020218f, 0.024231f,
+ 0.028275f, 0.032379f, 0.037567f, 0.042603f, 0.048584f, 0.054993f, 0.061798f, 0.069519f,
+ 0.077637f, 0.086182f, 0.095703f, 0.106323f, 0.117676f, 0.130127f, 0.143555f, 0.158203f,
+ 0.173462f, 0.189941f, 0.207886f, 0.226807f, 0.247192f, 0.267822f, 0.290527f, 0.312500f,
+ 0.336670f, 0.360352f, 0.385742f, 0.410889f, 0.437256f, 0.462646f, 0.488281f, 0.513184f,
+ 0.539062f, 0.563477f, 0.588379f, 0.612305f, 0.636230f, 0.657715f, 0.679199f, 0.700195f,
+ 0.720703f, 0.740234f, 0.758301f, 0.775879f, 0.793945f, 0.809082f, 0.824219f, 0.838867f,
+ 0.852539f, 0.865234f, 0.942871f, 0.946777f, 0.946777f, 0.945312f, 0.944824f, 0.943359f,
+ 0.001063f, 0.003754f, 0.005909f, 0.008789f, 0.011780f, 0.014671f, 0.017792f, 0.021378f,
+ 0.025238f, 0.029221f, 0.033417f, 0.038300f, 0.043488f, 0.048828f, 0.054779f, 0.061554f,
+ 0.068604f, 0.076721f, 0.085388f, 0.094482f, 0.104614f, 0.115845f, 0.128296f, 0.141113f,
+ 0.155029f, 0.170044f, 0.186401f, 0.204224f, 0.222778f, 0.242188f, 0.263916f, 0.285156f,
+ 0.308350f, 0.331787f, 0.355957f, 0.381348f, 0.407227f, 0.432617f, 0.459229f, 0.484619f,
+ 0.509277f, 0.536133f, 0.560547f, 0.585938f, 0.609863f, 0.633301f, 0.657715f, 0.678711f,
+ 0.699707f, 0.721191f, 0.740723f, 0.759277f, 0.777344f, 0.794922f, 0.811035f, 0.826660f,
+ 0.841797f, 0.855469f, 0.939453f, 0.943359f, 0.943359f, 0.942871f, 0.941895f, 0.940918f,
+ 0.001175f, 0.003069f, 0.005558f, 0.007912f, 0.010712f, 0.013199f, 0.016235f, 0.019547f,
+ 0.022659f, 0.026138f, 0.030151f, 0.034424f, 0.038940f, 0.044067f, 0.049255f, 0.054993f,
+ 0.061493f, 0.068359f, 0.075928f, 0.084290f, 0.093262f, 0.103760f, 0.114319f, 0.126099f,
+ 0.138550f, 0.152466f, 0.167114f, 0.183472f, 0.200439f, 0.219238f, 0.239014f, 0.259277f,
+ 0.281250f, 0.303711f, 0.327148f, 0.351807f, 0.376709f, 0.402344f, 0.428955f, 0.453857f,
+ 0.480713f, 0.507324f, 0.533203f, 0.558594f, 0.583984f, 0.609375f, 0.633301f, 0.656738f,
+ 0.678711f, 0.700195f, 0.722168f, 0.742188f, 0.761719f, 0.780273f, 0.797852f, 0.813477f,
+ 0.830078f, 0.845703f, 0.935547f, 0.939453f, 0.939453f, 0.938965f, 0.937988f, 0.937012f,
+ 0.001089f, 0.002945f, 0.005066f, 0.007225f, 0.009575f, 0.012016f, 0.014656f, 0.017288f,
+ 0.020142f, 0.023712f, 0.026764f, 0.030640f, 0.034637f, 0.039490f, 0.043854f, 0.048706f,
+ 0.054688f, 0.060913f, 0.067871f, 0.075256f, 0.083191f, 0.092163f, 0.101868f, 0.111938f,
+ 0.123657f, 0.136108f, 0.149658f, 0.164185f, 0.179932f, 0.196777f, 0.215454f, 0.234375f,
+ 0.255371f, 0.276611f, 0.299805f, 0.323486f, 0.347656f, 0.373047f, 0.398682f, 0.425293f,
+ 0.451172f, 0.477783f, 0.504883f, 0.530762f, 0.557617f, 0.583008f, 0.607910f, 0.632812f,
+ 0.657227f, 0.680664f, 0.702637f, 0.724121f, 0.743652f, 0.764160f, 0.783691f, 0.800781f,
+ 0.818848f, 0.833984f, 0.930664f, 0.936035f, 0.936035f, 0.935547f, 0.934570f, 0.933594f,
+ 0.000847f, 0.002800f, 0.004562f, 0.006786f, 0.008804f, 0.011017f, 0.013145f, 0.015640f,
+ 0.018509f, 0.021255f, 0.024277f, 0.027603f, 0.030991f, 0.035248f, 0.039642f, 0.043854f,
+ 0.048798f, 0.054504f, 0.060516f, 0.067017f, 0.073914f, 0.082092f, 0.090515f, 0.099854f,
+ 0.109863f, 0.121521f, 0.133545f, 0.146851f, 0.161133f, 0.176514f, 0.192993f, 0.211426f,
+ 0.230957f, 0.251465f, 0.272705f, 0.295410f, 0.319092f, 0.343994f, 0.369385f, 0.395020f,
+ 0.421631f, 0.448242f, 0.475342f, 0.501953f, 0.529785f, 0.556152f, 0.582031f, 0.608887f,
+ 0.633789f, 0.658203f, 0.681152f, 0.704590f, 0.726074f, 0.748535f, 0.768555f, 0.787109f,
+ 0.804199f, 0.822754f, 0.926758f, 0.931641f, 0.932129f, 0.931641f, 0.931152f, 0.930176f,
+ 0.001035f, 0.002598f, 0.004147f, 0.006062f, 0.007942f, 0.009933f, 0.012405f, 0.014565f,
+ 0.016174f, 0.019135f, 0.021988f, 0.024811f, 0.028259f, 0.031616f, 0.035065f, 0.039429f,
+ 0.043884f, 0.048615f, 0.053833f, 0.059723f, 0.065796f, 0.072693f, 0.080383f, 0.088745f,
+ 0.098206f, 0.107727f, 0.119080f, 0.130981f, 0.143677f, 0.157959f, 0.173218f, 0.189941f,
+ 0.207642f, 0.226929f, 0.247437f, 0.269043f, 0.291748f, 0.315674f, 0.340576f, 0.366211f,
+ 0.392578f, 0.419434f, 0.446533f, 0.473877f, 0.502441f, 0.528320f, 0.556152f, 0.583008f,
+ 0.609375f, 0.635254f, 0.660156f, 0.684082f, 0.706543f, 0.729980f, 0.751953f, 0.771973f,
+ 0.792480f, 0.810547f, 0.922363f, 0.927734f, 0.928223f, 0.928223f, 0.927246f, 0.926758f,
+ 0.000775f, 0.002325f, 0.003843f, 0.005573f, 0.007397f, 0.009163f, 0.010857f, 0.012939f,
+ 0.015312f, 0.017273f, 0.019684f, 0.022537f, 0.025070f, 0.028183f, 0.031616f, 0.035461f,
+ 0.038940f, 0.043671f, 0.048096f, 0.053131f, 0.058411f, 0.064941f, 0.071777f, 0.078857f,
+ 0.086731f, 0.096130f, 0.105835f, 0.116760f, 0.128296f, 0.140747f, 0.154907f, 0.170410f,
+ 0.186646f, 0.204834f, 0.223633f, 0.243896f, 0.265625f, 0.288330f, 0.312012f, 0.337402f,
+ 0.363037f, 0.389648f, 0.417480f, 0.444824f, 0.473633f, 0.500000f, 0.529297f, 0.556641f,
+ 0.583984f, 0.610840f, 0.638184f, 0.662598f, 0.687988f, 0.711914f, 0.734375f, 0.755859f,
+ 0.777832f, 0.798828f, 0.916992f, 0.922852f, 0.923828f, 0.923828f, 0.923340f, 0.922363f,
+ 0.000617f, 0.002234f, 0.003510f, 0.005035f, 0.006397f, 0.008156f, 0.010033f, 0.011665f,
+ 0.013481f, 0.015717f, 0.017700f, 0.020004f, 0.022766f, 0.025391f, 0.028214f, 0.031586f,
+ 0.035217f, 0.038757f, 0.042999f, 0.047668f, 0.052368f, 0.057434f, 0.063538f, 0.070190f,
+ 0.077698f, 0.085449f, 0.094299f, 0.103394f, 0.113953f, 0.125610f, 0.137817f, 0.151855f,
+ 0.167236f, 0.183228f, 0.200806f, 0.219971f, 0.240479f, 0.262451f, 0.285645f, 0.309570f,
+ 0.334961f, 0.360596f, 0.387939f, 0.416016f, 0.444092f, 0.473145f, 0.501465f, 0.529785f,
+ 0.558105f, 0.585938f, 0.614258f, 0.640137f, 0.666992f, 0.692383f, 0.716797f, 0.739746f,
+ 0.763184f, 0.784180f, 0.912109f, 0.918457f, 0.919434f, 0.919434f, 0.918457f, 0.917969f,
+ 0.000665f, 0.002039f, 0.003386f, 0.004520f, 0.005989f, 0.007511f, 0.009262f, 0.010902f,
+ 0.012314f, 0.014320f, 0.015869f, 0.018127f, 0.020248f, 0.022476f, 0.025284f, 0.028122f,
+ 0.030991f, 0.034668f, 0.038239f, 0.042206f, 0.046539f, 0.051361f, 0.056610f, 0.062347f,
+ 0.068604f, 0.075623f, 0.083313f, 0.092041f, 0.101379f, 0.111572f, 0.122986f, 0.135132f,
+ 0.148926f, 0.164062f, 0.180054f, 0.197510f, 0.216797f, 0.237183f, 0.259521f, 0.282227f,
+ 0.307129f, 0.332764f, 0.358887f, 0.386475f, 0.415527f, 0.443604f, 0.473389f, 0.501465f,
+ 0.530762f, 0.560059f, 0.588867f, 0.617676f, 0.645020f, 0.671387f, 0.698242f, 0.722656f,
+ 0.746094f, 0.770020f, 0.906738f, 0.913574f, 0.915039f, 0.914551f, 0.914062f, 0.914062f,
+ 0.000661f, 0.001754f, 0.002831f, 0.004066f, 0.005333f, 0.006668f, 0.008286f, 0.009773f,
+ 0.011124f, 0.012794f, 0.014320f, 0.016357f, 0.018036f, 0.020386f, 0.022766f, 0.025192f,
+ 0.027924f, 0.030807f, 0.034027f, 0.037628f, 0.041321f, 0.045349f, 0.050262f, 0.055328f,
+ 0.060699f, 0.066833f, 0.073669f, 0.081360f, 0.089600f, 0.099060f, 0.108826f, 0.119995f,
+ 0.132324f, 0.145874f, 0.160889f, 0.176880f, 0.194702f, 0.213379f, 0.234497f, 0.256104f,
+ 0.280029f, 0.304688f, 0.330811f, 0.358154f, 0.385986f, 0.415039f, 0.444092f, 0.474609f,
+ 0.503418f, 0.534180f, 0.563965f, 0.592773f, 0.621094f, 0.650391f, 0.678223f, 0.704590f,
+ 0.730469f, 0.754883f, 0.901855f, 0.908691f, 0.910156f, 0.909668f, 0.909668f, 0.908691f,
+ 0.000653f, 0.001667f, 0.002666f, 0.003887f, 0.004986f, 0.006359f, 0.007202f, 0.008751f,
+ 0.010300f, 0.011757f, 0.012939f, 0.014595f, 0.016281f, 0.018234f, 0.020142f, 0.022415f,
+ 0.025101f, 0.027466f, 0.030182f, 0.033539f, 0.036865f, 0.040680f, 0.044342f, 0.048798f,
+ 0.053619f, 0.059479f, 0.065491f, 0.071716f, 0.079285f, 0.087341f, 0.096497f, 0.106445f,
+ 0.117615f, 0.129395f, 0.142822f, 0.157959f, 0.174194f, 0.192139f, 0.210938f, 0.231567f,
+ 0.253906f, 0.277832f, 0.302979f, 0.329590f, 0.357422f, 0.385986f, 0.415283f, 0.446045f,
+ 0.475830f, 0.506348f, 0.537109f, 0.567871f, 0.599121f, 0.628418f, 0.657227f, 0.685547f,
+ 0.712891f, 0.739746f, 0.895508f, 0.902344f, 0.904297f, 0.904785f, 0.904297f, 0.904297f,
+ 0.000372f, 0.001397f, 0.002384f, 0.003529f, 0.004509f, 0.005505f, 0.007015f, 0.008026f,
+ 0.009201f, 0.010292f, 0.011536f, 0.013130f, 0.014915f, 0.016266f, 0.018387f, 0.020218f,
+ 0.022034f, 0.024399f, 0.026901f, 0.029617f, 0.032623f, 0.035950f, 0.039032f, 0.043030f,
+ 0.047577f, 0.052612f, 0.057556f, 0.063477f, 0.070007f, 0.077209f, 0.085083f, 0.094177f,
+ 0.103821f, 0.114563f, 0.126709f, 0.140015f, 0.154785f, 0.171143f, 0.188477f, 0.208252f,
+ 0.229004f, 0.251709f, 0.275879f, 0.302002f, 0.328613f, 0.356445f, 0.385986f, 0.416504f,
+ 0.447510f, 0.478760f, 0.510254f, 0.542480f, 0.573730f, 0.604980f, 0.635742f, 0.665527f,
+ 0.694336f, 0.722656f, 0.887695f, 0.897949f, 0.898926f, 0.899414f, 0.897949f, 0.898438f,
+ 0.000661f, 0.001222f, 0.002275f, 0.003313f, 0.004181f, 0.005119f, 0.006275f, 0.007126f,
+ 0.007988f, 0.009354f, 0.010300f, 0.012062f, 0.013313f, 0.014786f, 0.016251f, 0.018021f,
+ 0.019516f, 0.021896f, 0.024017f, 0.026428f, 0.029022f, 0.031799f, 0.034698f, 0.038422f,
+ 0.042236f, 0.046265f, 0.050598f, 0.055786f, 0.061493f, 0.067871f, 0.074951f, 0.082458f,
+ 0.091187f, 0.101135f, 0.111694f, 0.123779f, 0.137207f, 0.151978f, 0.167969f, 0.186157f,
+ 0.205688f, 0.226929f, 0.249756f, 0.274658f, 0.301025f, 0.328613f, 0.357178f, 0.387207f,
+ 0.418457f, 0.450195f, 0.482422f, 0.516113f, 0.548340f, 0.580566f, 0.612305f, 0.644043f,
+ 0.674805f, 0.705566f, 0.882812f, 0.890625f, 0.892578f, 0.893066f, 0.892578f, 0.893066f,
+ 0.000379f, 0.001211f, 0.002066f, 0.003040f, 0.003834f, 0.004616f, 0.005608f, 0.006550f,
+ 0.007347f, 0.008408f, 0.009529f, 0.010452f, 0.011940f, 0.013039f, 0.014313f, 0.015961f,
+ 0.017746f, 0.019180f, 0.021210f, 0.023239f, 0.025482f, 0.028030f, 0.030640f, 0.033661f,
+ 0.036987f, 0.040466f, 0.044617f, 0.048828f, 0.053894f, 0.059235f, 0.065674f, 0.072632f,
+ 0.079956f, 0.089050f, 0.098267f, 0.109009f, 0.120789f, 0.134521f, 0.148926f, 0.165405f,
+ 0.183228f, 0.202881f, 0.224731f, 0.248779f, 0.273193f, 0.300049f, 0.329346f, 0.358887f,
+ 0.390381f, 0.421387f, 0.454590f, 0.488770f, 0.521484f, 0.555176f, 0.588379f, 0.621582f,
+ 0.654785f, 0.686523f, 0.875488f, 0.885254f, 0.886719f, 0.886230f, 0.886719f, 0.886230f,
+ 0.000282f, 0.001126f, 0.002010f, 0.002661f, 0.003340f, 0.004269f, 0.005192f, 0.005711f,
+ 0.006638f, 0.007278f, 0.008377f, 0.009483f, 0.010567f, 0.011742f, 0.012871f, 0.014061f,
+ 0.015480f, 0.017242f, 0.018799f, 0.020584f, 0.022461f, 0.024490f, 0.027100f, 0.029434f,
+ 0.032532f, 0.035706f, 0.038971f, 0.042969f, 0.047241f, 0.052094f, 0.057373f, 0.063232f,
+ 0.070007f, 0.077637f, 0.086243f, 0.095764f, 0.106323f, 0.118164f, 0.131470f, 0.146118f,
+ 0.162720f, 0.181030f, 0.200928f, 0.223022f, 0.247070f, 0.272705f, 0.300537f, 0.330322f,
+ 0.360107f, 0.393066f, 0.426270f, 0.459473f, 0.494629f, 0.529297f, 0.564453f, 0.598633f,
+ 0.633789f, 0.666504f, 0.868652f, 0.878418f, 0.879395f, 0.880371f, 0.879883f, 0.879395f,
+ 0.000340f, 0.000963f, 0.001826f, 0.002459f, 0.003307f, 0.003847f, 0.004719f, 0.004936f,
+ 0.005802f, 0.006695f, 0.007748f, 0.008522f, 0.009506f, 0.010376f, 0.011383f, 0.012787f,
+ 0.013901f, 0.015182f, 0.016663f, 0.018051f, 0.019821f, 0.021759f, 0.023590f, 0.025818f,
+ 0.028519f, 0.030975f, 0.034210f, 0.037811f, 0.040802f, 0.045349f, 0.050201f, 0.055298f,
+ 0.061310f, 0.067688f, 0.074768f, 0.083557f, 0.092590f, 0.103149f, 0.115479f, 0.128906f,
+ 0.142944f, 0.160278f, 0.178345f, 0.198975f, 0.221802f, 0.246094f, 0.272949f, 0.301514f,
+ 0.331543f, 0.363525f, 0.396729f, 0.430908f, 0.466553f, 0.501953f, 0.538086f, 0.574707f,
+ 0.610840f, 0.646973f, 0.860352f, 0.870605f, 0.873047f, 0.873047f, 0.873535f, 0.872559f,
+ 0.000225f, 0.001021f, 0.001653f, 0.002302f, 0.002827f, 0.003448f, 0.003937f, 0.004486f,
+ 0.004986f, 0.006252f, 0.007000f, 0.007416f, 0.008224f, 0.009300f, 0.009972f, 0.011322f,
+ 0.012115f, 0.013428f, 0.014557f, 0.015991f, 0.017532f, 0.018982f, 0.020706f, 0.022781f,
+ 0.024567f, 0.027161f, 0.029770f, 0.032623f, 0.035828f, 0.039551f, 0.043030f, 0.047852f,
+ 0.052795f, 0.058716f, 0.065125f, 0.072266f, 0.080566f, 0.089661f, 0.100403f, 0.112854f,
+ 0.125732f, 0.140991f, 0.157349f, 0.176514f, 0.197510f, 0.220581f, 0.245850f, 0.273438f,
+ 0.302979f, 0.334717f, 0.367676f, 0.401855f, 0.437256f, 0.474609f, 0.512695f, 0.549316f,
+ 0.588379f, 0.625000f, 0.853027f, 0.863281f, 0.866211f, 0.866211f, 0.866699f, 0.866211f,
+ 0.000324f, 0.000845f, 0.001534f, 0.002172f, 0.002474f, 0.003115f, 0.003824f, 0.003937f,
+ 0.004848f, 0.005417f, 0.006222f, 0.006760f, 0.007446f, 0.008186f, 0.009102f, 0.009888f,
+ 0.010620f, 0.011551f, 0.012878f, 0.013954f, 0.015106f, 0.016495f, 0.018143f, 0.019669f,
+ 0.021713f, 0.023468f, 0.025818f, 0.028183f, 0.031021f, 0.033783f, 0.037445f, 0.041534f,
+ 0.045532f, 0.050598f, 0.056152f, 0.062500f, 0.069580f, 0.077698f, 0.086914f, 0.097717f,
+ 0.108948f, 0.123047f, 0.138184f, 0.155273f, 0.174438f, 0.196167f, 0.219604f, 0.246094f,
+ 0.274902f, 0.305420f, 0.338379f, 0.372314f, 0.408936f, 0.445801f, 0.484131f, 0.523438f,
+ 0.562988f, 0.604492f, 0.843262f, 0.856445f, 0.857422f, 0.857910f, 0.858398f, 0.858398f,
+ 0.000331f, 0.000944f, 0.001288f, 0.001833f, 0.002388f, 0.002769f, 0.003216f, 0.003664f,
+ 0.004276f, 0.004822f, 0.005173f, 0.005951f, 0.006531f, 0.007156f, 0.007896f, 0.008438f,
+ 0.009430f, 0.010117f, 0.011208f, 0.012253f, 0.012970f, 0.014297f, 0.015572f, 0.017059f,
+ 0.018692f, 0.020264f, 0.022125f, 0.024323f, 0.026474f, 0.029343f, 0.032288f, 0.035461f,
+ 0.039062f, 0.043335f, 0.047821f, 0.053558f, 0.059509f, 0.067078f, 0.074341f, 0.083862f,
+ 0.094360f, 0.106323f, 0.120117f, 0.135254f, 0.153442f, 0.172852f, 0.195190f, 0.220337f,
+ 0.246948f, 0.276611f, 0.308594f, 0.343262f, 0.379150f, 0.416992f, 0.455811f, 0.496582f,
+ 0.537598f, 0.579590f, 0.834473f, 0.847656f, 0.850098f, 0.850098f, 0.849609f, 0.850098f,
+ 0.000316f, 0.000824f, 0.001088f, 0.001693f, 0.002062f, 0.002403f, 0.003027f, 0.003460f,
+ 0.003712f, 0.004166f, 0.004765f, 0.005138f, 0.005871f, 0.006218f, 0.006924f, 0.007431f,
+ 0.008255f, 0.008850f, 0.009781f, 0.010590f, 0.011391f, 0.012367f, 0.013474f, 0.014709f,
+ 0.015823f, 0.017685f, 0.018982f, 0.020844f, 0.022629f, 0.025070f, 0.027496f, 0.030380f,
+ 0.033447f, 0.037140f, 0.041168f, 0.045654f, 0.050720f, 0.057251f, 0.063965f, 0.071777f,
+ 0.080811f, 0.091248f, 0.103638f, 0.117126f, 0.133179f, 0.151001f, 0.171631f, 0.194580f,
+ 0.220337f, 0.248413f, 0.279785f, 0.313965f, 0.349365f, 0.386963f, 0.426514f, 0.468262f,
+ 0.510742f, 0.555176f, 0.825684f, 0.838379f, 0.839844f, 0.841309f, 0.841309f, 0.841309f,
+ 0.000210f, 0.000717f, 0.001084f, 0.001454f, 0.001882f, 0.002096f, 0.002468f, 0.002996f,
+ 0.003395f, 0.003632f, 0.004066f, 0.004467f, 0.005020f, 0.005569f, 0.005917f, 0.006474f,
+ 0.006958f, 0.007576f, 0.008453f, 0.009140f, 0.010002f, 0.010689f, 0.011520f, 0.012596f,
+ 0.013695f, 0.014938f, 0.016220f, 0.017593f, 0.019424f, 0.020996f, 0.023331f, 0.025696f,
+ 0.028427f, 0.031067f, 0.034668f, 0.038422f, 0.042908f, 0.048096f, 0.054016f, 0.060699f,
+ 0.068909f, 0.077515f, 0.088501f, 0.100464f, 0.114624f, 0.130615f, 0.149048f, 0.170654f,
+ 0.194214f, 0.222046f, 0.251465f, 0.283936f, 0.319580f, 0.357422f, 0.397461f, 0.440186f,
+ 0.484375f, 0.528320f, 0.814941f, 0.828613f, 0.830078f, 0.832031f, 0.831543f, 0.833008f,
+ 0.000234f, 0.000576f, 0.000939f, 0.001362f, 0.001481f, 0.001999f, 0.002228f, 0.002714f,
+ 0.002846f, 0.003218f, 0.003555f, 0.003933f, 0.004356f, 0.004787f, 0.005169f, 0.005604f,
+ 0.006145f, 0.006554f, 0.007275f, 0.007675f, 0.008293f, 0.009201f, 0.009979f, 0.010651f,
+ 0.011497f, 0.012527f, 0.013893f, 0.014771f, 0.016373f, 0.017975f, 0.019455f, 0.021683f,
+ 0.023895f, 0.026077f, 0.029114f, 0.032257f, 0.036072f, 0.040405f, 0.045197f, 0.050903f,
+ 0.057770f, 0.065613f, 0.074524f, 0.085388f, 0.097656f, 0.111694f, 0.128540f, 0.147949f,
+ 0.170166f, 0.195435f, 0.223389f, 0.255127f, 0.289551f, 0.327393f, 0.367432f, 0.410400f,
+ 0.455078f, 0.502441f, 0.804199f, 0.818848f, 0.821289f, 0.822266f, 0.822754f, 0.822266f,
+ 0.000213f, 0.000506f, 0.000756f, 0.001184f, 0.001396f, 0.001697f, 0.002010f, 0.002474f,
+ 0.002569f, 0.002918f, 0.003090f, 0.003496f, 0.003855f, 0.004139f, 0.004478f, 0.004852f,
+ 0.005253f, 0.005665f, 0.006100f, 0.006638f, 0.007080f, 0.007744f, 0.008293f, 0.009132f,
+ 0.009750f, 0.010658f, 0.011536f, 0.012413f, 0.013779f, 0.014908f, 0.016510f, 0.017990f,
+ 0.019623f, 0.021637f, 0.024109f, 0.026718f, 0.029922f, 0.033539f, 0.037567f, 0.042572f,
+ 0.048279f, 0.054413f, 0.062042f, 0.071472f, 0.081909f, 0.094604f, 0.109436f, 0.127075f,
+ 0.146484f, 0.170044f, 0.196533f, 0.226929f, 0.260254f, 0.296875f, 0.337402f, 0.380615f,
+ 0.426025f, 0.475342f, 0.792969f, 0.807617f, 0.811035f, 0.811523f, 0.812012f, 0.813477f,
+ 0.000119f, 0.000422f, 0.000883f, 0.001027f, 0.001189f, 0.001604f, 0.001783f, 0.001913f,
+ 0.002228f, 0.002522f, 0.002645f, 0.003086f, 0.003199f, 0.003534f, 0.003790f, 0.004105f,
+ 0.004421f, 0.004902f, 0.005283f, 0.005589f, 0.006039f, 0.006401f, 0.007088f, 0.007519f,
+ 0.008217f, 0.008812f, 0.009712f, 0.010460f, 0.011337f, 0.012413f, 0.013596f, 0.014687f,
+ 0.016159f, 0.018051f, 0.019913f, 0.022018f, 0.024551f, 0.027359f, 0.030792f, 0.035065f,
+ 0.039703f, 0.044983f, 0.051392f, 0.059204f, 0.068176f, 0.079102f, 0.092041f, 0.106873f,
+ 0.125000f, 0.145874f, 0.170532f, 0.198975f, 0.230835f, 0.267090f, 0.306641f, 0.349854f,
+ 0.395508f, 0.445801f, 0.780762f, 0.796875f, 0.799805f, 0.801270f, 0.801270f, 0.801270f,
+ 0.000227f, 0.000521f, 0.000698f, 0.000817f, 0.001236f, 0.001359f, 0.001540f, 0.001619f,
+ 0.001940f, 0.002089f, 0.002430f, 0.002552f, 0.002655f, 0.002932f, 0.003241f, 0.003532f,
+ 0.003841f, 0.004120f, 0.004292f, 0.004761f, 0.005051f, 0.005459f, 0.005886f, 0.006290f,
+ 0.006821f, 0.007320f, 0.007889f, 0.008652f, 0.009399f, 0.010063f, 0.010887f, 0.012215f,
+ 0.013206f, 0.014648f, 0.016037f, 0.017853f, 0.019958f, 0.022491f, 0.024994f, 0.028091f,
+ 0.032135f, 0.036530f, 0.041809f, 0.048096f, 0.055908f, 0.064941f, 0.076050f, 0.089050f,
+ 0.104980f, 0.123596f, 0.146118f, 0.172363f, 0.203003f, 0.237183f, 0.276123f, 0.318359f,
+ 0.365479f, 0.416504f, 0.768555f, 0.784668f, 0.788086f, 0.789551f, 0.790039f, 0.790039f,
+ 0.000000f, 0.000448f, 0.000566f, 0.000688f, 0.000985f, 0.001144f, 0.001305f, 0.001437f,
+ 0.001622f, 0.001731f, 0.001989f, 0.002174f, 0.002338f, 0.002552f, 0.002739f, 0.002924f,
+ 0.003239f, 0.003405f, 0.003628f, 0.003933f, 0.004200f, 0.004463f, 0.004948f, 0.005245f,
+ 0.005615f, 0.006138f, 0.006699f, 0.006989f, 0.007793f, 0.008247f, 0.008980f, 0.009918f,
+ 0.010857f, 0.011795f, 0.013016f, 0.014244f, 0.015930f, 0.017868f, 0.019882f, 0.022659f,
+ 0.025543f, 0.029160f, 0.033417f, 0.038635f, 0.044983f, 0.052338f, 0.061859f, 0.072693f,
+ 0.086487f, 0.102966f, 0.122864f, 0.146973f, 0.175049f, 0.207764f, 0.245605f, 0.287842f,
+ 0.334229f, 0.385986f, 0.755371f, 0.771973f, 0.775879f, 0.777344f, 0.777832f, 0.778809f,
+ 0.000000f, 0.000303f, 0.000512f, 0.000752f, 0.000828f, 0.001036f, 0.001184f, 0.001292f,
+ 0.001281f, 0.001460f, 0.001717f, 0.001843f, 0.001955f, 0.002060f, 0.002317f, 0.002476f,
+ 0.002542f, 0.002869f, 0.003088f, 0.003313f, 0.003559f, 0.003693f, 0.004082f, 0.004318f,
+ 0.004696f, 0.005070f, 0.005245f, 0.005741f, 0.006126f, 0.006771f, 0.007298f, 0.007828f,
+ 0.008583f, 0.009338f, 0.010246f, 0.011528f, 0.012794f, 0.014160f, 0.015717f, 0.017853f,
+ 0.019958f, 0.022995f, 0.026291f, 0.030533f, 0.035553f, 0.041565f, 0.048981f, 0.058350f,
+ 0.069824f, 0.083801f, 0.101685f, 0.122437f, 0.148438f, 0.178833f, 0.215454f, 0.256104f,
+ 0.302490f, 0.354736f, 0.741699f, 0.758789f, 0.762695f, 0.763672f, 0.764648f, 0.765625f,
+ 0.000097f, 0.000306f, 0.000370f, 0.000618f, 0.000713f, 0.000810f, 0.000953f, 0.000920f,
+ 0.001167f, 0.001238f, 0.001406f, 0.001483f, 0.001540f, 0.001794f, 0.001970f, 0.002028f,
+ 0.002264f, 0.002354f, 0.002459f, 0.002636f, 0.002827f, 0.003096f, 0.003342f, 0.003544f,
+ 0.003881f, 0.003948f, 0.004459f, 0.004742f, 0.005005f, 0.005394f, 0.005867f, 0.006374f,
+ 0.006901f, 0.007507f, 0.008202f, 0.008881f, 0.010017f, 0.010986f, 0.012451f, 0.013809f,
+ 0.015511f, 0.017776f, 0.020325f, 0.023453f, 0.027390f, 0.032349f, 0.038330f, 0.045624f,
+ 0.055359f, 0.067078f, 0.082275f, 0.101013f, 0.123657f, 0.151611f, 0.185791f, 0.225342f,
+ 0.270752f, 0.322754f, 0.727051f, 0.746094f, 0.749512f, 0.750977f, 0.751953f, 0.751953f,
+ 0.000228f, 0.000211f, 0.000504f, 0.000443f, 0.000523f, 0.000672f, 0.000703f, 0.000902f,
+ 0.000975f, 0.001010f, 0.001122f, 0.001178f, 0.001257f, 0.001424f, 0.001575f, 0.001631f,
+ 0.001789f, 0.001910f, 0.002090f, 0.002144f, 0.002411f, 0.002520f, 0.002703f, 0.002827f,
+ 0.003010f, 0.003195f, 0.003403f, 0.003750f, 0.003960f, 0.004276f, 0.004780f, 0.005005f,
+ 0.005432f, 0.005981f, 0.006428f, 0.007015f, 0.007812f, 0.008537f, 0.009415f, 0.010658f,
+ 0.011963f, 0.013443f, 0.015396f, 0.017731f, 0.020782f, 0.024414f, 0.029083f, 0.034912f,
+ 0.042572f, 0.052216f, 0.064392f, 0.080017f, 0.100220f, 0.126099f, 0.157227f, 0.194946f,
+ 0.239136f, 0.290283f, 0.712402f, 0.731445f, 0.734863f, 0.736816f, 0.737305f, 0.737793f,
+ 0.000211f, 0.000198f, 0.000195f, 0.000413f, 0.000517f, 0.000531f, 0.000586f, 0.000736f,
+ 0.000769f, 0.000809f, 0.000970f, 0.001007f, 0.001067f, 0.001134f, 0.001211f, 0.001348f,
+ 0.001341f, 0.001534f, 0.001617f, 0.001734f, 0.001942f, 0.002010f, 0.002110f, 0.002268f,
+ 0.002523f, 0.002607f, 0.002829f, 0.003004f, 0.003113f, 0.003403f, 0.003681f, 0.003990f,
+ 0.004257f, 0.004601f, 0.005039f, 0.005444f, 0.005993f, 0.006561f, 0.007278f, 0.008026f,
+ 0.009041f, 0.010124f, 0.011513f, 0.013222f, 0.015320f, 0.017914f, 0.021408f, 0.025833f,
+ 0.031433f, 0.039429f, 0.049255f, 0.062286f, 0.079102f, 0.101135f, 0.130005f, 0.164917f,
+ 0.207764f, 0.258057f, 0.696289f, 0.716309f, 0.720215f, 0.722168f, 0.722656f, 0.723145f,
+ 0.000000f, 0.000080f, 0.000286f, 0.000374f, 0.000434f, 0.000457f, 0.000460f, 0.000568f,
+ 0.000610f, 0.000669f, 0.000715f, 0.000773f, 0.000877f, 0.000918f, 0.001030f, 0.000998f,
+ 0.001148f, 0.001134f, 0.001305f, 0.001369f, 0.001410f, 0.001534f, 0.001688f, 0.001780f,
+ 0.001899f, 0.001963f, 0.002081f, 0.002199f, 0.002470f, 0.002563f, 0.002758f, 0.003006f,
+ 0.003273f, 0.003531f, 0.003817f, 0.004093f, 0.004532f, 0.004993f, 0.005463f, 0.006027f,
+ 0.006657f, 0.007492f, 0.008537f, 0.009689f, 0.011246f, 0.012985f, 0.015518f, 0.018539f,
+ 0.022827f, 0.028534f, 0.036072f, 0.046234f, 0.060028f, 0.078918f, 0.103943f, 0.136353f,
+ 0.176514f, 0.225952f, 0.679199f, 0.699707f, 0.703613f, 0.706055f, 0.706543f, 0.708008f,
+ 0.000089f, 0.000176f, 0.000232f, 0.000342f, 0.000317f, 0.000319f, 0.000420f, 0.000382f,
+ 0.000494f, 0.000515f, 0.000612f, 0.000650f, 0.000671f, 0.000701f, 0.000732f, 0.000859f,
+ 0.000888f, 0.000923f, 0.001002f, 0.001048f, 0.001170f, 0.001234f, 0.001292f, 0.001426f,
+ 0.001414f, 0.001476f, 0.001622f, 0.001723f, 0.001892f, 0.001976f, 0.002237f, 0.002239f,
+ 0.002476f, 0.002645f, 0.002817f, 0.003092f, 0.003355f, 0.003626f, 0.003979f, 0.004459f,
+ 0.004948f, 0.005527f, 0.006256f, 0.007027f, 0.008026f, 0.009270f, 0.010918f, 0.013184f,
+ 0.016098f, 0.019913f, 0.025253f, 0.033112f, 0.043762f, 0.059113f, 0.079956f, 0.109009f,
+ 0.146729f, 0.193726f, 0.660645f, 0.682129f, 0.688477f, 0.690430f, 0.689941f, 0.690918f,
+ 0.000000f, 0.000063f, 0.000194f, 0.000281f, 0.000187f, 0.000325f, 0.000278f, 0.000272f,
+ 0.000386f, 0.000466f, 0.000462f, 0.000510f, 0.000519f, 0.000587f, 0.000613f, 0.000603f,
+ 0.000671f, 0.000709f, 0.000744f, 0.000808f, 0.000858f, 0.000913f, 0.000963f, 0.000999f,
+ 0.001062f, 0.001106f, 0.001262f, 0.001266f, 0.001431f, 0.001562f, 0.001672f, 0.001693f,
+ 0.001810f, 0.001976f, 0.002090f, 0.002289f, 0.002422f, 0.002666f, 0.002916f, 0.003166f,
+ 0.003513f, 0.003862f, 0.004318f, 0.004936f, 0.005646f, 0.006493f, 0.007626f, 0.009048f,
+ 0.010826f, 0.013519f, 0.017166f, 0.022476f, 0.030258f, 0.041687f, 0.058807f, 0.083435f,
+ 0.117737f, 0.162598f, 0.644043f, 0.666504f, 0.670410f, 0.673340f, 0.674316f, 0.675293f,
+ 0.000000f, 0.000117f, 0.000112f, 0.000178f, 0.000216f, 0.000222f, 0.000271f, 0.000229f,
+ 0.000280f, 0.000283f, 0.000326f, 0.000376f, 0.000376f, 0.000443f, 0.000456f, 0.000470f,
+ 0.000499f, 0.000507f, 0.000547f, 0.000566f, 0.000613f, 0.000667f, 0.000692f, 0.000749f,
+ 0.000773f, 0.000803f, 0.000917f, 0.000924f, 0.000997f, 0.001055f, 0.001096f, 0.001236f,
+ 0.001261f, 0.001376f, 0.001466f, 0.001693f, 0.001695f, 0.001826f, 0.002077f, 0.002226f,
+ 0.002411f, 0.002686f, 0.002985f, 0.003368f, 0.003801f, 0.004353f, 0.005131f, 0.005974f,
+ 0.007370f, 0.008842f, 0.011345f, 0.014717f, 0.019699f, 0.027893f, 0.040619f, 0.060730f,
+ 0.090454f, 0.132080f, 0.625488f, 0.649414f, 0.653809f, 0.655273f, 0.656250f, 0.658203f,
+ 0.000000f, 0.000000f, 0.000108f, 0.000121f, 0.000136f, 0.000154f, 0.000158f, 0.000191f,
+ 0.000203f, 0.000213f, 0.000270f, 0.000223f, 0.000232f, 0.000270f, 0.000296f, 0.000342f,
+ 0.000324f, 0.000352f, 0.000453f, 0.000407f, 0.000450f, 0.000459f, 0.000486f, 0.000524f,
+ 0.000545f, 0.000565f, 0.000630f, 0.000620f, 0.000678f, 0.000803f, 0.000763f, 0.000813f,
+ 0.000860f, 0.000937f, 0.001035f, 0.001101f, 0.001141f, 0.001254f, 0.001399f, 0.001449f,
+ 0.001616f, 0.001779f, 0.001942f, 0.002220f, 0.002493f, 0.002808f, 0.003258f, 0.003895f,
+ 0.004623f, 0.005714f, 0.007111f, 0.009178f, 0.012367f, 0.017319f, 0.025879f, 0.040741f,
+ 0.065552f, 0.103577f, 0.606934f, 0.630371f, 0.635254f, 0.637695f, 0.638672f, 0.639648f,
+ 0.000000f, 0.000109f, 0.000102f, 0.000098f, 0.000105f, 0.000110f, 0.000113f, 0.000122f,
+ 0.000117f, 0.000132f, 0.000147f, 0.000189f, 0.000163f, 0.000212f, 0.000213f, 0.000222f,
+ 0.000224f, 0.000233f, 0.000258f, 0.000262f, 0.000274f, 0.000305f, 0.000340f, 0.000329f,
+ 0.000358f, 0.000376f, 0.000445f, 0.000418f, 0.000447f, 0.000478f, 0.000546f, 0.000530f,
+ 0.000594f, 0.000626f, 0.000679f, 0.000745f, 0.000763f, 0.000804f, 0.000869f, 0.000952f,
+ 0.001025f, 0.001119f, 0.001254f, 0.001359f, 0.001584f, 0.001728f, 0.001993f, 0.002295f,
+ 0.002790f, 0.003298f, 0.004135f, 0.005363f, 0.007267f, 0.010277f, 0.015350f, 0.024994f,
+ 0.043518f, 0.076599f, 0.585938f, 0.611816f, 0.616211f, 0.619141f, 0.619629f, 0.620605f,
+ 0.000000f, 0.000102f, 0.000095f, 0.000090f, 0.000085f, 0.000081f, 0.000078f, 0.000073f,
+ 0.000075f, 0.000079f, 0.000087f, 0.000092f, 0.000095f, 0.000094f, 0.000133f, 0.000143f,
+ 0.000152f, 0.000155f, 0.000161f, 0.000195f, 0.000174f, 0.000183f, 0.000188f, 0.000216f,
+ 0.000233f, 0.000241f, 0.000241f, 0.000257f, 0.000269f, 0.000302f, 0.000325f, 0.000321f,
+ 0.000350f, 0.000363f, 0.000405f, 0.000426f, 0.000456f, 0.000486f, 0.000539f, 0.000560f,
+ 0.000614f, 0.000671f, 0.000722f, 0.000811f, 0.000891f, 0.000989f, 0.001162f, 0.001312f,
+ 0.001545f, 0.001863f, 0.002340f, 0.002920f, 0.003963f, 0.005615f, 0.008499f, 0.013931f,
+ 0.025833f, 0.052094f, 0.566406f, 0.591797f, 0.597168f, 0.599609f, 0.601074f, 0.601562f,
+ 0.000110f, 0.000092f, 0.000084f, 0.000077f, 0.000073f, 0.000070f, 0.000067f, 0.000064f,
+ 0.000061f, 0.000058f, 0.000055f, 0.000064f, 0.000051f, 0.000054f, 0.000071f, 0.000059f,
+ 0.000082f, 0.000081f, 0.000090f, 0.000087f, 0.000099f, 0.000103f, 0.000127f, 0.000131f,
+ 0.000135f, 0.000139f, 0.000142f, 0.000143f, 0.000156f, 0.000162f, 0.000173f, 0.000194f,
+ 0.000206f, 0.000201f, 0.000233f, 0.000225f, 0.000246f, 0.000294f, 0.000279f, 0.000313f,
+ 0.000333f, 0.000356f, 0.000395f, 0.000432f, 0.000459f, 0.000511f, 0.000577f, 0.000664f,
+ 0.000770f, 0.000916f, 0.001114f, 0.001400f, 0.001881f, 0.002665f, 0.004093f, 0.006966f,
+ 0.013290f, 0.031525f, 0.545410f, 0.571777f, 0.577637f, 0.579102f, 0.580566f, 0.581055f,
+ 0.000093f, 0.000073f, 0.000066f, 0.000061f, 0.000056f, 0.000054f, 0.000051f, 0.000050f,
+ 0.000048f, 0.000047f, 0.000045f, 0.000044f, 0.000042f, 0.000040f, 0.000038f, 0.000036f,
+ 0.000039f, 0.000033f, 0.000041f, 0.000040f, 0.000046f, 0.000048f, 0.000051f, 0.000057f,
+ 0.000060f, 0.000066f, 0.000062f, 0.000067f, 0.000080f, 0.000085f, 0.000088f, 0.000092f,
+ 0.000092f, 0.000097f, 0.000109f, 0.000109f, 0.000117f, 0.000132f, 0.000134f, 0.000147f,
+ 0.000154f, 0.000156f, 0.000188f, 0.000197f, 0.000219f, 0.000234f, 0.000266f, 0.000286f,
+ 0.000335f, 0.000397f, 0.000472f, 0.000566f, 0.000751f, 0.001039f, 0.001626f, 0.002834f,
+ 0.005909f, 0.015411f, 0.524414f, 0.551270f, 0.557129f, 0.559570f, 0.561035f, 0.561523f,
+ 0.000060f, 0.000046f, 0.000039f, 0.000037f, 0.000034f, 0.000034f, 0.000032f, 0.000032f,
+ 0.000031f, 0.000029f, 0.000029f, 0.000029f, 0.000028f, 0.000028f, 0.000028f, 0.000027f,
+ 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000021f,
+ 0.000020f, 0.000018f, 0.000018f, 0.000023f, 0.000024f, 0.000028f, 0.000032f, 0.000033f,
+ 0.000032f, 0.000038f, 0.000039f, 0.000043f, 0.000046f, 0.000050f, 0.000052f, 0.000053f,
+ 0.000057f, 0.000067f, 0.000073f, 0.000068f, 0.000076f, 0.000083f, 0.000097f, 0.000110f,
+ 0.000116f, 0.000127f, 0.000157f, 0.000185f, 0.000246f, 0.000319f, 0.000466f, 0.000810f,
+ 0.001841f, 0.005795f, 0.503418f, 0.531250f, 0.536621f, 0.539062f, 0.540039f, 0.540527f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000005f, 0.000005f, 0.000008f,
+ 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000010f, 0.000010f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
+ 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000012f,
+ 0.000013f, 0.000014f, 0.000015f, 0.000017f, 0.000020f, 0.000021f, 0.000018f, 0.000023f,
+ 0.000023f, 0.000025f, 0.000030f, 0.000038f, 0.000043f, 0.000059f, 0.000079f, 0.000131f,
+ 0.000279f, 0.001210f, 0.481934f, 0.510254f, 0.516113f, 0.518555f, 0.520020f, 0.520508f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f,
+ 0.000006f, 0.000022f, 0.460449f, 0.489258f, 0.495850f, 0.498291f, 0.499512f, 0.500000f,
+ },
+ {
+ 0.038544f, 0.111450f, 0.177368f, 0.237061f, 0.290771f, 0.339600f, 0.384277f, 0.425293f,
+ 0.462402f, 0.497070f, 0.527344f, 0.556152f, 0.583496f, 0.607910f, 0.630859f, 0.652344f,
+ 0.672852f, 0.690918f, 0.708496f, 0.724609f, 0.740723f, 0.754883f, 0.768066f, 0.780273f,
+ 0.792480f, 0.803711f, 0.815430f, 0.825684f, 0.835449f, 0.844727f, 0.853516f, 0.861816f,
+ 0.870117f, 0.877930f, 0.885254f, 0.892578f, 0.899414f, 0.905762f, 0.912109f, 0.918945f,
+ 0.923828f, 0.928711f, 0.934082f, 0.939941f, 0.944824f, 0.949707f, 0.953613f, 0.958496f,
+ 0.962402f, 0.967285f, 0.971191f, 0.974609f, 0.979004f, 0.982422f, 0.985352f, 0.989258f,
+ 0.992188f, 0.996094f, 0.996094f, 0.990723f, 0.986328f, 0.982422f, 0.978516f, 0.975098f,
+ 0.029068f, 0.087219f, 0.142578f, 0.195190f, 0.244629f, 0.291016f, 0.334717f, 0.375000f,
+ 0.412842f, 0.446533f, 0.481201f, 0.511230f, 0.539062f, 0.565918f, 0.590820f, 0.614258f,
+ 0.636719f, 0.656250f, 0.675293f, 0.693359f, 0.710449f, 0.726562f, 0.741699f, 0.755371f,
+ 0.769043f, 0.781738f, 0.793457f, 0.805176f, 0.815918f, 0.826660f, 0.835938f, 0.845703f,
+ 0.854980f, 0.862793f, 0.871582f, 0.879395f, 0.885742f, 0.894531f, 0.900879f, 0.907227f,
+ 0.913086f, 0.919434f, 0.925293f, 0.931152f, 0.936523f, 0.941406f, 0.946777f, 0.951172f,
+ 0.956055f, 0.960449f, 0.964355f, 0.968750f, 0.972656f, 0.976562f, 0.980469f, 0.984375f,
+ 0.987793f, 0.991211f, 0.994141f, 0.989258f, 0.984863f, 0.981445f, 0.977539f, 0.974121f,
+ 0.023346f, 0.069641f, 0.115601f, 0.160767f, 0.205078f, 0.248047f, 0.289062f, 0.328125f,
+ 0.365723f, 0.401367f, 0.435059f, 0.466309f, 0.495361f, 0.523926f, 0.550781f, 0.574707f,
+ 0.597168f, 0.620117f, 0.641113f, 0.660156f, 0.679688f, 0.696777f, 0.713379f, 0.728516f,
+ 0.743652f, 0.757324f, 0.770996f, 0.784180f, 0.795410f, 0.806641f, 0.817383f, 0.828125f,
+ 0.837891f, 0.847168f, 0.855957f, 0.864258f, 0.873047f, 0.880859f, 0.888672f, 0.895996f,
+ 0.902832f, 0.909668f, 0.915039f, 0.921875f, 0.927246f, 0.934082f, 0.937988f, 0.943848f,
+ 0.948242f, 0.953613f, 0.958496f, 0.962402f, 0.967285f, 0.971191f, 0.975098f, 0.979492f,
+ 0.983398f, 0.985840f, 0.992188f, 0.987305f, 0.983398f, 0.979980f, 0.977051f, 0.973633f,
+ 0.018600f, 0.056366f, 0.094299f, 0.133545f, 0.172729f, 0.211670f, 0.249756f, 0.285889f,
+ 0.322021f, 0.356934f, 0.390869f, 0.421875f, 0.452148f, 0.481201f, 0.509277f, 0.535156f,
+ 0.560059f, 0.583496f, 0.605957f, 0.626465f, 0.647949f, 0.665527f, 0.684570f, 0.700684f,
+ 0.717285f, 0.731934f, 0.746582f, 0.760254f, 0.773926f, 0.786621f, 0.799316f, 0.809082f,
+ 0.820312f, 0.830566f, 0.840332f, 0.850098f, 0.858887f, 0.867188f, 0.875000f, 0.883789f,
+ 0.890625f, 0.898926f, 0.904297f, 0.912109f, 0.916992f, 0.924316f, 0.930176f, 0.935547f,
+ 0.941406f, 0.945801f, 0.951172f, 0.956055f, 0.960938f, 0.964844f, 0.969727f, 0.974609f,
+ 0.978516f, 0.981934f, 0.989746f, 0.985840f, 0.981934f, 0.978516f, 0.975586f, 0.972168f,
+ 0.015068f, 0.046143f, 0.077881f, 0.111816f, 0.145264f, 0.179688f, 0.214600f, 0.249023f,
+ 0.282715f, 0.316406f, 0.348389f, 0.380615f, 0.411133f, 0.440430f, 0.468018f, 0.494873f,
+ 0.520508f, 0.546387f, 0.568848f, 0.591309f, 0.613281f, 0.634277f, 0.653809f, 0.670898f,
+ 0.688477f, 0.706055f, 0.721191f, 0.736328f, 0.751465f, 0.764648f, 0.776855f, 0.789551f,
+ 0.801270f, 0.812500f, 0.823730f, 0.833496f, 0.843262f, 0.853027f, 0.861328f, 0.869629f,
+ 0.878418f, 0.885742f, 0.893555f, 0.900391f, 0.908203f, 0.914551f, 0.921387f, 0.927246f,
+ 0.932617f, 0.938965f, 0.943848f, 0.949219f, 0.953613f, 0.959473f, 0.963867f, 0.968262f,
+ 0.972656f, 0.977051f, 0.987305f, 0.983887f, 0.980957f, 0.977051f, 0.974121f, 0.970703f,
+ 0.012444f, 0.037933f, 0.065613f, 0.093811f, 0.123474f, 0.153809f, 0.185059f, 0.215820f,
+ 0.247559f, 0.279297f, 0.310547f, 0.341309f, 0.370361f, 0.399658f, 0.428467f, 0.457031f,
+ 0.482910f, 0.507812f, 0.533203f, 0.556152f, 0.579590f, 0.600098f, 0.621094f, 0.641113f,
+ 0.659668f, 0.676270f, 0.695312f, 0.710449f, 0.726074f, 0.740723f, 0.756348f, 0.769043f,
+ 0.780762f, 0.794434f, 0.805176f, 0.816895f, 0.827637f, 0.837891f, 0.847168f, 0.855957f,
+ 0.865723f, 0.873535f, 0.882324f, 0.889648f, 0.897949f, 0.904297f, 0.911133f, 0.917480f,
+ 0.924316f, 0.930176f, 0.936523f, 0.941895f, 0.947266f, 0.952637f, 0.958008f, 0.962891f,
+ 0.967285f, 0.971680f, 0.984863f, 0.981934f, 0.978516f, 0.975586f, 0.972656f, 0.969238f,
+ 0.010353f, 0.032043f, 0.055359f, 0.079529f, 0.104980f, 0.131836f, 0.159424f, 0.187866f,
+ 0.216431f, 0.245239f, 0.275146f, 0.304199f, 0.333496f, 0.362061f, 0.390869f, 0.417969f,
+ 0.445068f, 0.471191f, 0.496582f, 0.520508f, 0.543457f, 0.566895f, 0.588867f, 0.608398f,
+ 0.628906f, 0.648438f, 0.666992f, 0.684570f, 0.701660f, 0.716797f, 0.732422f, 0.746582f,
+ 0.760254f, 0.773438f, 0.786133f, 0.798340f, 0.810547f, 0.821777f, 0.832520f, 0.842773f,
+ 0.851074f, 0.860352f, 0.869629f, 0.878906f, 0.886230f, 0.894043f, 0.901855f, 0.908691f,
+ 0.915527f, 0.922363f, 0.928223f, 0.935059f, 0.939941f, 0.945312f, 0.950684f, 0.956055f,
+ 0.962402f, 0.966797f, 0.982910f, 0.979980f, 0.977051f, 0.973633f, 0.970703f, 0.968262f,
+ 0.008598f, 0.027328f, 0.046417f, 0.067871f, 0.089905f, 0.113220f, 0.137695f, 0.163330f,
+ 0.189087f, 0.216064f, 0.243164f, 0.270752f, 0.298340f, 0.326416f, 0.354004f, 0.381348f,
+ 0.407715f, 0.434082f, 0.460205f, 0.484863f, 0.508789f, 0.532227f, 0.555176f, 0.577637f,
+ 0.598145f, 0.618652f, 0.637695f, 0.657227f, 0.674805f, 0.691406f, 0.708008f, 0.723633f,
+ 0.738770f, 0.751953f, 0.766113f, 0.779785f, 0.791992f, 0.804199f, 0.815918f, 0.825684f,
+ 0.836914f, 0.846680f, 0.856934f, 0.866211f, 0.874512f, 0.882324f, 0.890625f, 0.898438f,
+ 0.905273f, 0.913086f, 0.919922f, 0.926758f, 0.933105f, 0.938477f, 0.944824f, 0.951172f,
+ 0.955566f, 0.960938f, 0.980469f, 0.978027f, 0.974609f, 0.972168f, 0.969238f, 0.966797f,
+ 0.007561f, 0.023315f, 0.040344f, 0.058228f, 0.077148f, 0.097534f, 0.119995f, 0.142212f,
+ 0.165649f, 0.190063f, 0.214722f, 0.240601f, 0.266846f, 0.293457f, 0.319824f, 0.346924f,
+ 0.372314f, 0.398438f, 0.424561f, 0.449463f, 0.474609f, 0.498535f, 0.521973f, 0.544434f,
+ 0.566895f, 0.587402f, 0.608398f, 0.628418f, 0.645996f, 0.665039f, 0.683105f, 0.699219f,
+ 0.716309f, 0.731445f, 0.745117f, 0.760254f, 0.772949f, 0.786133f, 0.799316f, 0.809570f,
+ 0.820801f, 0.832031f, 0.843262f, 0.852051f, 0.861816f, 0.871094f, 0.880371f, 0.887695f,
+ 0.895996f, 0.904297f, 0.911133f, 0.917969f, 0.924805f, 0.931641f, 0.937012f, 0.943848f,
+ 0.949707f, 0.954590f, 0.978027f, 0.976074f, 0.973145f, 0.970215f, 0.967773f, 0.965332f,
+ 0.006416f, 0.020065f, 0.034943f, 0.050537f, 0.067078f, 0.084900f, 0.104065f, 0.123962f,
+ 0.145264f, 0.166748f, 0.189575f, 0.213501f, 0.237305f, 0.262451f, 0.288574f, 0.313477f,
+ 0.338623f, 0.364502f, 0.389893f, 0.414551f, 0.440186f, 0.464600f, 0.487549f, 0.510742f,
+ 0.534668f, 0.556641f, 0.578613f, 0.598145f, 0.618652f, 0.637207f, 0.655273f, 0.674805f,
+ 0.690430f, 0.707031f, 0.724121f, 0.739258f, 0.752930f, 0.767090f, 0.779785f, 0.792969f,
+ 0.805176f, 0.816895f, 0.827637f, 0.838379f, 0.849121f, 0.858398f, 0.868652f, 0.876465f,
+ 0.885742f, 0.894043f, 0.901855f, 0.909180f, 0.916992f, 0.923828f, 0.930176f, 0.937012f,
+ 0.943359f, 0.949707f, 0.975586f, 0.973633f, 0.971191f, 0.968262f, 0.965820f, 0.963379f,
+ 0.005802f, 0.017502f, 0.030045f, 0.043823f, 0.058014f, 0.074280f, 0.090759f, 0.108459f,
+ 0.127197f, 0.146484f, 0.167725f, 0.189087f, 0.211304f, 0.234497f, 0.258301f, 0.282471f,
+ 0.307373f, 0.331299f, 0.356689f, 0.381104f, 0.405762f, 0.430420f, 0.455078f, 0.478516f,
+ 0.502441f, 0.524414f, 0.545898f, 0.568359f, 0.588867f, 0.608887f, 0.628906f, 0.646973f,
+ 0.665527f, 0.684082f, 0.701172f, 0.715820f, 0.731934f, 0.746582f, 0.760742f, 0.774414f,
+ 0.787598f, 0.800781f, 0.812500f, 0.823730f, 0.834961f, 0.845703f, 0.855469f, 0.865234f,
+ 0.874512f, 0.883789f, 0.892090f, 0.899902f, 0.908203f, 0.916016f, 0.922852f, 0.930176f,
+ 0.936523f, 0.942871f, 0.972656f, 0.971191f, 0.968750f, 0.966309f, 0.963867f, 0.961426f,
+ 0.004734f, 0.014984f, 0.026169f, 0.038177f, 0.051208f, 0.065186f, 0.079468f, 0.095276f,
+ 0.111633f, 0.129639f, 0.148071f, 0.167969f, 0.188599f, 0.208984f, 0.231689f, 0.254639f,
+ 0.277832f, 0.301025f, 0.325439f, 0.349854f, 0.373779f, 0.397705f, 0.422607f, 0.446045f,
+ 0.469727f, 0.492676f, 0.514648f, 0.537598f, 0.559570f, 0.580078f, 0.600586f, 0.620117f,
+ 0.639648f, 0.658203f, 0.676758f, 0.692871f, 0.708984f, 0.725586f, 0.740723f, 0.755859f,
+ 0.769531f, 0.783691f, 0.796875f, 0.808594f, 0.820801f, 0.832520f, 0.842285f, 0.852539f,
+ 0.862793f, 0.872070f, 0.881836f, 0.890137f, 0.898926f, 0.906738f, 0.915039f, 0.922363f,
+ 0.929199f, 0.936523f, 0.969727f, 0.968750f, 0.966797f, 0.964355f, 0.961914f, 0.959473f,
+ 0.004055f, 0.013588f, 0.023132f, 0.033722f, 0.044891f, 0.057343f, 0.069763f, 0.083923f,
+ 0.098389f, 0.114441f, 0.131226f, 0.148682f, 0.167603f, 0.186768f, 0.207031f, 0.228516f,
+ 0.250732f, 0.272949f, 0.295410f, 0.318604f, 0.342285f, 0.365967f, 0.390381f, 0.413574f,
+ 0.437744f, 0.460938f, 0.484131f, 0.506348f, 0.528320f, 0.550781f, 0.572266f, 0.592773f,
+ 0.613281f, 0.632812f, 0.651367f, 0.669922f, 0.687500f, 0.704102f, 0.720215f, 0.735840f,
+ 0.751465f, 0.764160f, 0.778809f, 0.792480f, 0.803711f, 0.816895f, 0.829102f, 0.840332f,
+ 0.850586f, 0.860352f, 0.870605f, 0.880371f, 0.889648f, 0.897949f, 0.905762f, 0.914551f,
+ 0.922363f, 0.929199f, 0.967285f, 0.966797f, 0.964844f, 0.961426f, 0.959473f, 0.958008f,
+ 0.003611f, 0.011971f, 0.020401f, 0.030029f, 0.039185f, 0.050415f, 0.061737f, 0.074341f,
+ 0.086975f, 0.101074f, 0.115845f, 0.131958f, 0.148682f, 0.166626f, 0.185059f, 0.205200f,
+ 0.224854f, 0.245483f, 0.267334f, 0.290771f, 0.312988f, 0.335449f, 0.359619f, 0.382080f,
+ 0.406250f, 0.429443f, 0.452881f, 0.475830f, 0.498779f, 0.520996f, 0.542480f, 0.563477f,
+ 0.584473f, 0.604980f, 0.625977f, 0.643555f, 0.663086f, 0.681152f, 0.698242f, 0.714355f,
+ 0.729980f, 0.746582f, 0.760742f, 0.774902f, 0.788086f, 0.801758f, 0.814941f, 0.826660f,
+ 0.838867f, 0.848633f, 0.859863f, 0.869141f, 0.879395f, 0.889160f, 0.897949f, 0.906250f,
+ 0.914551f, 0.922363f, 0.963867f, 0.964355f, 0.961914f, 0.959961f, 0.957520f, 0.955078f,
+ 0.003393f, 0.010361f, 0.018494f, 0.026337f, 0.035187f, 0.044556f, 0.054596f, 0.065186f,
+ 0.077515f, 0.089783f, 0.102783f, 0.117249f, 0.132446f, 0.148071f, 0.165649f, 0.183838f,
+ 0.202026f, 0.221313f, 0.241943f, 0.262939f, 0.285156f, 0.307129f, 0.329102f, 0.352539f,
+ 0.375977f, 0.398438f, 0.421875f, 0.445312f, 0.468750f, 0.490723f, 0.512695f, 0.534668f,
+ 0.556641f, 0.577637f, 0.598633f, 0.619141f, 0.637695f, 0.656738f, 0.674805f, 0.692383f,
+ 0.709473f, 0.726074f, 0.742188f, 0.756836f, 0.771973f, 0.786133f, 0.799316f, 0.812012f,
+ 0.824707f, 0.835938f, 0.848145f, 0.858887f, 0.868164f, 0.878906f, 0.888184f, 0.897949f,
+ 0.906250f, 0.914551f, 0.960938f, 0.960938f, 0.959473f, 0.957520f, 0.955078f, 0.953125f,
+ 0.003084f, 0.009521f, 0.016144f, 0.023346f, 0.031204f, 0.039520f, 0.048523f, 0.057953f,
+ 0.068359f, 0.079895f, 0.091309f, 0.104126f, 0.117920f, 0.132324f, 0.147949f, 0.164062f,
+ 0.181396f, 0.199219f, 0.218872f, 0.238403f, 0.258545f, 0.279541f, 0.301758f, 0.323486f,
+ 0.346191f, 0.368408f, 0.391846f, 0.414795f, 0.437256f, 0.460693f, 0.483643f, 0.505371f,
+ 0.527832f, 0.550293f, 0.571289f, 0.591797f, 0.612305f, 0.632324f, 0.651855f, 0.670898f,
+ 0.687500f, 0.705566f, 0.722168f, 0.737793f, 0.753418f, 0.768555f, 0.783691f, 0.796875f,
+ 0.811035f, 0.823242f, 0.834473f, 0.846191f, 0.857422f, 0.868652f, 0.878418f, 0.887695f,
+ 0.897949f, 0.906250f, 0.958008f, 0.958008f, 0.957031f, 0.954590f, 0.952637f, 0.950684f,
+ 0.002666f, 0.008293f, 0.014297f, 0.021225f, 0.027847f, 0.035156f, 0.043274f, 0.051666f,
+ 0.060791f, 0.070801f, 0.081543f, 0.092407f, 0.104858f, 0.118530f, 0.131836f, 0.146606f,
+ 0.162598f, 0.179443f, 0.196777f, 0.215210f, 0.234375f, 0.254150f, 0.274414f, 0.295898f,
+ 0.317871f, 0.340088f, 0.362549f, 0.385010f, 0.407959f, 0.430664f, 0.454590f, 0.476562f,
+ 0.499268f, 0.521484f, 0.543945f, 0.564941f, 0.585938f, 0.606934f, 0.626465f, 0.646484f,
+ 0.665527f, 0.683594f, 0.701660f, 0.717773f, 0.735352f, 0.751465f, 0.766113f, 0.781738f,
+ 0.794922f, 0.808105f, 0.821289f, 0.833496f, 0.846191f, 0.857910f, 0.868164f, 0.878906f,
+ 0.889160f, 0.899414f, 0.954102f, 0.955566f, 0.953613f, 0.952148f, 0.950195f, 0.948730f,
+ 0.002396f, 0.007427f, 0.012978f, 0.018646f, 0.025024f, 0.031403f, 0.038788f, 0.046112f,
+ 0.054260f, 0.063354f, 0.072693f, 0.082886f, 0.093689f, 0.105469f, 0.118164f, 0.130859f,
+ 0.145996f, 0.161011f, 0.177124f, 0.193359f, 0.211670f, 0.230225f, 0.249634f, 0.270020f,
+ 0.290771f, 0.311768f, 0.333740f, 0.356201f, 0.378906f, 0.401855f, 0.424561f, 0.447754f,
+ 0.470215f, 0.493408f, 0.515137f, 0.537109f, 0.559570f, 0.580078f, 0.601074f, 0.621582f,
+ 0.642090f, 0.661621f, 0.679688f, 0.697754f, 0.715820f, 0.732422f, 0.749512f, 0.765137f,
+ 0.779785f, 0.794434f, 0.808594f, 0.821289f, 0.833496f, 0.846191f, 0.857910f, 0.869141f,
+ 0.879883f, 0.889648f, 0.950195f, 0.952637f, 0.950684f, 0.948730f, 0.947266f, 0.945801f,
+ 0.002029f, 0.006672f, 0.011658f, 0.016937f, 0.022476f, 0.028305f, 0.034332f, 0.041351f,
+ 0.048584f, 0.056671f, 0.064697f, 0.073853f, 0.083923f, 0.094482f, 0.105225f, 0.117798f,
+ 0.130615f, 0.144287f, 0.159302f, 0.174683f, 0.190430f, 0.208740f, 0.226318f, 0.245483f,
+ 0.264893f, 0.285400f, 0.307129f, 0.328369f, 0.350342f, 0.372803f, 0.395264f, 0.418701f,
+ 0.441650f, 0.462891f, 0.486816f, 0.509277f, 0.532227f, 0.553711f, 0.575684f, 0.596680f,
+ 0.617676f, 0.638672f, 0.657715f, 0.676758f, 0.695312f, 0.712402f, 0.729492f, 0.746582f,
+ 0.762695f, 0.778320f, 0.793457f, 0.807129f, 0.820801f, 0.833984f, 0.846191f, 0.858887f,
+ 0.869629f, 0.881836f, 0.947266f, 0.949219f, 0.947754f, 0.946289f, 0.944824f, 0.942871f,
+ 0.002142f, 0.006401f, 0.010841f, 0.015251f, 0.019760f, 0.025055f, 0.031113f, 0.037201f,
+ 0.043671f, 0.050598f, 0.057892f, 0.066101f, 0.075012f, 0.084351f, 0.093994f, 0.105164f,
+ 0.117432f, 0.129517f, 0.142822f, 0.157104f, 0.172119f, 0.188110f, 0.204956f, 0.223145f,
+ 0.241577f, 0.260498f, 0.280762f, 0.301758f, 0.322998f, 0.345215f, 0.366943f, 0.389893f,
+ 0.412842f, 0.435791f, 0.458008f, 0.482178f, 0.504395f, 0.526855f, 0.548828f, 0.571289f,
+ 0.592285f, 0.612793f, 0.634277f, 0.654297f, 0.673340f, 0.692383f, 0.710938f, 0.729004f,
+ 0.745117f, 0.762207f, 0.777832f, 0.792480f, 0.807129f, 0.821289f, 0.834961f, 0.847168f,
+ 0.859863f, 0.871582f, 0.943359f, 0.946289f, 0.944824f, 0.943359f, 0.941895f, 0.940430f,
+ 0.001760f, 0.005562f, 0.009621f, 0.013710f, 0.018417f, 0.022736f, 0.027939f, 0.033264f,
+ 0.039185f, 0.045166f, 0.052460f, 0.059143f, 0.067261f, 0.075745f, 0.084106f, 0.094177f,
+ 0.104980f, 0.116455f, 0.128174f, 0.141113f, 0.155151f, 0.169922f, 0.184937f, 0.201660f,
+ 0.219238f, 0.237549f, 0.256348f, 0.276367f, 0.296875f, 0.317871f, 0.339844f, 0.361572f,
+ 0.383789f, 0.407227f, 0.430908f, 0.453857f, 0.476807f, 0.498779f, 0.521973f, 0.543945f,
+ 0.567383f, 0.589355f, 0.609863f, 0.631348f, 0.651855f, 0.671875f, 0.690918f, 0.709961f,
+ 0.727539f, 0.744141f, 0.761719f, 0.777344f, 0.793457f, 0.808594f, 0.823242f, 0.835449f,
+ 0.848633f, 0.861328f, 0.938965f, 0.941895f, 0.941406f, 0.940430f, 0.938477f, 0.937012f,
+ 0.001594f, 0.005283f, 0.008789f, 0.012383f, 0.016342f, 0.020523f, 0.025284f, 0.029968f,
+ 0.035217f, 0.040741f, 0.046417f, 0.052948f, 0.060120f, 0.067566f, 0.076294f, 0.084534f,
+ 0.093750f, 0.104614f, 0.115173f, 0.126831f, 0.139160f, 0.152832f, 0.166748f, 0.181885f,
+ 0.198853f, 0.215698f, 0.233521f, 0.252197f, 0.271973f, 0.291992f, 0.313477f, 0.334717f,
+ 0.357178f, 0.379395f, 0.401855f, 0.425537f, 0.448242f, 0.471924f, 0.495361f, 0.517578f,
+ 0.541016f, 0.562988f, 0.585938f, 0.607422f, 0.627930f, 0.649414f, 0.670410f, 0.688965f,
+ 0.708496f, 0.727539f, 0.744629f, 0.761719f, 0.778809f, 0.794922f, 0.809082f, 0.824219f,
+ 0.838379f, 0.851074f, 0.935059f, 0.938965f, 0.937988f, 0.937012f, 0.936035f, 0.933594f,
+ 0.001564f, 0.004665f, 0.007973f, 0.011276f, 0.014908f, 0.018600f, 0.022675f, 0.027176f,
+ 0.031464f, 0.036621f, 0.042023f, 0.047974f, 0.054108f, 0.060822f, 0.068237f, 0.075684f,
+ 0.084229f, 0.093567f, 0.103210f, 0.113892f, 0.125000f, 0.137329f, 0.150269f, 0.164307f,
+ 0.179810f, 0.194946f, 0.212158f, 0.229248f, 0.247925f, 0.267578f, 0.287842f, 0.308350f,
+ 0.330322f, 0.352051f, 0.374756f, 0.397461f, 0.420654f, 0.444092f, 0.466797f, 0.490723f,
+ 0.514160f, 0.537109f, 0.560059f, 0.582031f, 0.604980f, 0.626953f, 0.648926f, 0.668457f,
+ 0.688477f, 0.708008f, 0.727539f, 0.745117f, 0.763672f, 0.779297f, 0.795410f, 0.811523f,
+ 0.826660f, 0.840332f, 0.930664f, 0.934570f, 0.934082f, 0.933594f, 0.932129f, 0.930664f,
+ 0.001424f, 0.004261f, 0.007122f, 0.010239f, 0.013374f, 0.016693f, 0.020401f, 0.024368f,
+ 0.028595f, 0.033325f, 0.037964f, 0.043152f, 0.048340f, 0.054962f, 0.060730f, 0.067749f,
+ 0.075684f, 0.083862f, 0.092041f, 0.102051f, 0.112305f, 0.123657f, 0.135376f, 0.148071f,
+ 0.161987f, 0.176270f, 0.192139f, 0.208252f, 0.226196f, 0.244141f, 0.263672f, 0.283447f,
+ 0.304199f, 0.325195f, 0.346924f, 0.370605f, 0.392822f, 0.416260f, 0.439209f, 0.463623f,
+ 0.486084f, 0.511230f, 0.534180f, 0.558105f, 0.580566f, 0.603516f, 0.625000f, 0.647461f,
+ 0.668457f, 0.688965f, 0.708496f, 0.727539f, 0.746582f, 0.764160f, 0.781738f, 0.798340f,
+ 0.813477f, 0.829590f, 0.926758f, 0.931152f, 0.930664f, 0.929199f, 0.928223f, 0.927246f,
+ 0.001294f, 0.004196f, 0.006538f, 0.009346f, 0.012306f, 0.015335f, 0.018845f, 0.022003f,
+ 0.025558f, 0.029816f, 0.034149f, 0.038605f, 0.043915f, 0.049042f, 0.054810f, 0.061188f,
+ 0.067993f, 0.075256f, 0.083130f, 0.091553f, 0.100769f, 0.110779f, 0.121643f, 0.133057f,
+ 0.145630f, 0.159058f, 0.173218f, 0.188721f, 0.204590f, 0.222290f, 0.240234f, 0.259277f,
+ 0.279053f, 0.299561f, 0.321533f, 0.343506f, 0.365723f, 0.389404f, 0.412354f, 0.436035f,
+ 0.459961f, 0.484131f, 0.508301f, 0.532227f, 0.555176f, 0.579102f, 0.601562f, 0.624512f,
+ 0.646484f, 0.668457f, 0.688965f, 0.709473f, 0.729004f, 0.748047f, 0.766602f, 0.784668f,
+ 0.800293f, 0.817383f, 0.921875f, 0.926270f, 0.926270f, 0.925781f, 0.924316f, 0.923340f,
+ 0.001081f, 0.003603f, 0.006027f, 0.008575f, 0.010979f, 0.013847f, 0.016937f, 0.020020f,
+ 0.023315f, 0.026917f, 0.030930f, 0.035156f, 0.039429f, 0.044098f, 0.049622f, 0.054779f,
+ 0.060791f, 0.067566f, 0.074341f, 0.082336f, 0.090515f, 0.099548f, 0.109070f, 0.119263f,
+ 0.130981f, 0.143188f, 0.156250f, 0.170288f, 0.185303f, 0.201294f, 0.218262f, 0.236450f,
+ 0.255615f, 0.275391f, 0.295654f, 0.316895f, 0.339111f, 0.362061f, 0.385498f, 0.408936f,
+ 0.432861f, 0.457275f, 0.481689f, 0.505371f, 0.529785f, 0.553711f, 0.577637f, 0.601074f,
+ 0.624023f, 0.646484f, 0.669434f, 0.689941f, 0.711426f, 0.731445f, 0.750977f, 0.770020f,
+ 0.787598f, 0.804688f, 0.916992f, 0.922363f, 0.922363f, 0.921875f, 0.920898f, 0.918945f,
+ 0.001064f, 0.003231f, 0.005322f, 0.007710f, 0.010323f, 0.012489f, 0.015244f, 0.018051f,
+ 0.020798f, 0.024338f, 0.027893f, 0.031738f, 0.035553f, 0.039795f, 0.044495f, 0.049133f,
+ 0.054657f, 0.060608f, 0.066895f, 0.073792f, 0.081421f, 0.089050f, 0.097717f, 0.106934f,
+ 0.117554f, 0.128540f, 0.140503f, 0.153442f, 0.167236f, 0.182129f, 0.197998f, 0.214966f,
+ 0.232422f, 0.251465f, 0.271240f, 0.291992f, 0.313232f, 0.335693f, 0.358643f, 0.382080f,
+ 0.406006f, 0.430176f, 0.454590f, 0.479004f, 0.503906f, 0.528320f, 0.552734f, 0.577637f,
+ 0.601562f, 0.625000f, 0.648438f, 0.670898f, 0.691895f, 0.713867f, 0.733887f, 0.754883f,
+ 0.774414f, 0.791992f, 0.912109f, 0.917969f, 0.918457f, 0.916992f, 0.916016f, 0.915039f,
+ 0.000998f, 0.003012f, 0.005123f, 0.007114f, 0.009438f, 0.011360f, 0.013763f, 0.016510f,
+ 0.018951f, 0.022171f, 0.025101f, 0.028305f, 0.031830f, 0.035736f, 0.039795f, 0.044067f,
+ 0.048950f, 0.053864f, 0.059601f, 0.066345f, 0.072815f, 0.079956f, 0.087402f, 0.096375f,
+ 0.105835f, 0.115479f, 0.126343f, 0.138184f, 0.150635f, 0.164062f, 0.178711f, 0.194214f,
+ 0.210815f, 0.229004f, 0.247314f, 0.267090f, 0.288330f, 0.309570f, 0.332275f, 0.355469f,
+ 0.378418f, 0.402832f, 0.427490f, 0.452637f, 0.477783f, 0.501953f, 0.527832f, 0.552734f,
+ 0.577637f, 0.602051f, 0.626465f, 0.649902f, 0.672852f, 0.695312f, 0.717773f, 0.737793f,
+ 0.758789f, 0.778809f, 0.906250f, 0.913086f, 0.913574f, 0.912598f, 0.911621f, 0.910645f,
+ 0.001059f, 0.002985f, 0.004475f, 0.006496f, 0.008545f, 0.010300f, 0.012581f, 0.014969f,
+ 0.017471f, 0.019852f, 0.022507f, 0.025864f, 0.028824f, 0.032135f, 0.036041f, 0.039795f,
+ 0.043884f, 0.048706f, 0.053680f, 0.059113f, 0.064819f, 0.071472f, 0.078491f, 0.086365f,
+ 0.094360f, 0.103577f, 0.113403f, 0.124023f, 0.135620f, 0.147705f, 0.160889f, 0.175537f,
+ 0.191284f, 0.207764f, 0.225464f, 0.244263f, 0.264160f, 0.284912f, 0.306641f, 0.329102f,
+ 0.352295f, 0.376465f, 0.400635f, 0.426025f, 0.451416f, 0.476562f, 0.502930f, 0.527344f,
+ 0.553711f, 0.579102f, 0.603027f, 0.627930f, 0.652344f, 0.675781f, 0.700195f, 0.722168f,
+ 0.742676f, 0.764648f, 0.901367f, 0.907715f, 0.908691f, 0.908203f, 0.907227f, 0.906250f,
+ 0.000988f, 0.002577f, 0.004124f, 0.006042f, 0.007603f, 0.009506f, 0.011299f, 0.013680f,
+ 0.015778f, 0.017883f, 0.020554f, 0.023102f, 0.025940f, 0.028946f, 0.031891f, 0.035431f,
+ 0.039825f, 0.043671f, 0.048157f, 0.053009f, 0.058075f, 0.063782f, 0.069885f, 0.077087f,
+ 0.084839f, 0.092712f, 0.101379f, 0.110779f, 0.121155f, 0.132446f, 0.144775f, 0.157837f,
+ 0.172363f, 0.187744f, 0.204590f, 0.222290f, 0.240601f, 0.260254f, 0.281494f, 0.303223f,
+ 0.325439f, 0.349609f, 0.373535f, 0.399170f, 0.424561f, 0.450439f, 0.475586f, 0.501953f,
+ 0.528320f, 0.554688f, 0.580566f, 0.605957f, 0.630859f, 0.656250f, 0.680176f, 0.704102f,
+ 0.727051f, 0.749512f, 0.895508f, 0.902344f, 0.903320f, 0.902832f, 0.901855f, 0.901855f,
+ 0.000842f, 0.002253f, 0.003597f, 0.005352f, 0.007195f, 0.008804f, 0.010460f, 0.012100f,
+ 0.014130f, 0.016281f, 0.018341f, 0.021057f, 0.023193f, 0.025742f, 0.029022f, 0.031830f,
+ 0.035278f, 0.039246f, 0.042999f, 0.047211f, 0.052032f, 0.056946f, 0.062744f, 0.068848f,
+ 0.075195f, 0.082642f, 0.090332f, 0.099060f, 0.108215f, 0.118469f, 0.129517f, 0.141724f,
+ 0.154907f, 0.169434f, 0.184448f, 0.201172f, 0.218506f, 0.237427f, 0.257324f, 0.278320f,
+ 0.300293f, 0.323242f, 0.347412f, 0.372070f, 0.397217f, 0.423340f, 0.449707f, 0.476807f,
+ 0.502930f, 0.529785f, 0.556641f, 0.582520f, 0.609863f, 0.635254f, 0.660645f, 0.686035f,
+ 0.710938f, 0.733887f, 0.889648f, 0.897461f, 0.898926f, 0.896973f, 0.896973f, 0.896484f,
+ 0.000660f, 0.002014f, 0.003531f, 0.004951f, 0.006424f, 0.007935f, 0.009392f, 0.011322f,
+ 0.012924f, 0.014824f, 0.016754f, 0.018906f, 0.020935f, 0.023376f, 0.026245f, 0.028809f,
+ 0.031860f, 0.034821f, 0.038330f, 0.042236f, 0.046387f, 0.050812f, 0.056061f, 0.061279f,
+ 0.066956f, 0.073547f, 0.080566f, 0.088074f, 0.096802f, 0.106079f, 0.116089f, 0.127075f,
+ 0.138672f, 0.151855f, 0.165649f, 0.180908f, 0.197754f, 0.215332f, 0.234375f, 0.254150f,
+ 0.275391f, 0.298096f, 0.321533f, 0.344971f, 0.370361f, 0.396973f, 0.422852f, 0.449219f,
+ 0.477295f, 0.504395f, 0.532227f, 0.558594f, 0.586914f, 0.614258f, 0.640625f, 0.666016f,
+ 0.692871f, 0.718262f, 0.882812f, 0.891602f, 0.892578f, 0.892090f, 0.892090f, 0.890625f,
+ 0.000623f, 0.002073f, 0.003298f, 0.004292f, 0.005589f, 0.007401f, 0.008377f, 0.010315f,
+ 0.011871f, 0.013596f, 0.015213f, 0.016632f, 0.018829f, 0.020920f, 0.023239f, 0.025726f,
+ 0.028381f, 0.031250f, 0.034241f, 0.037781f, 0.041473f, 0.045349f, 0.049469f, 0.054199f,
+ 0.059448f, 0.065186f, 0.071716f, 0.078613f, 0.085999f, 0.093872f, 0.103516f, 0.112976f,
+ 0.123840f, 0.135620f, 0.148804f, 0.162720f, 0.178223f, 0.194824f, 0.212280f, 0.231079f,
+ 0.251953f, 0.273193f, 0.295410f, 0.319580f, 0.343994f, 0.370117f, 0.396729f, 0.422852f,
+ 0.450684f, 0.478516f, 0.507324f, 0.534668f, 0.562988f, 0.591797f, 0.619629f, 0.646484f,
+ 0.674316f, 0.700195f, 0.875488f, 0.885254f, 0.886719f, 0.886719f, 0.885742f, 0.885254f,
+ 0.000583f, 0.001746f, 0.002840f, 0.004143f, 0.005234f, 0.006516f, 0.007835f, 0.009460f,
+ 0.010788f, 0.012062f, 0.013428f, 0.015053f, 0.017349f, 0.018753f, 0.021271f, 0.023163f,
+ 0.025284f, 0.027924f, 0.030655f, 0.033478f, 0.036957f, 0.040527f, 0.044037f, 0.048309f,
+ 0.053223f, 0.058319f, 0.063660f, 0.069763f, 0.076172f, 0.083679f, 0.091431f, 0.100647f,
+ 0.110229f, 0.120667f, 0.132690f, 0.145386f, 0.159668f, 0.174805f, 0.191284f, 0.208984f,
+ 0.228516f, 0.248535f, 0.270996f, 0.293701f, 0.317383f, 0.342529f, 0.369629f, 0.396240f,
+ 0.424072f, 0.452148f, 0.480957f, 0.509277f, 0.539551f, 0.567871f, 0.596680f, 0.625977f,
+ 0.654785f, 0.682129f, 0.868652f, 0.878906f, 0.880371f, 0.879883f, 0.879883f, 0.879395f,
+ 0.000535f, 0.001538f, 0.002930f, 0.003725f, 0.004986f, 0.005920f, 0.006973f, 0.008247f,
+ 0.009575f, 0.010841f, 0.012115f, 0.013550f, 0.015343f, 0.016983f, 0.018814f, 0.020523f,
+ 0.022568f, 0.024887f, 0.027206f, 0.029907f, 0.032959f, 0.035828f, 0.039185f, 0.042877f,
+ 0.046967f, 0.051605f, 0.056213f, 0.061432f, 0.067749f, 0.073730f, 0.081238f, 0.089111f,
+ 0.097656f, 0.107300f, 0.118042f, 0.129883f, 0.142334f, 0.156250f, 0.171875f, 0.187866f,
+ 0.206665f, 0.225708f, 0.246704f, 0.268799f, 0.291992f, 0.316650f, 0.342529f, 0.369629f,
+ 0.397217f, 0.425537f, 0.454590f, 0.484131f, 0.513672f, 0.544434f, 0.574219f, 0.604492f,
+ 0.633789f, 0.664062f, 0.861328f, 0.871582f, 0.873535f, 0.874512f, 0.873047f, 0.872559f,
+ 0.000581f, 0.001668f, 0.002563f, 0.003471f, 0.004494f, 0.005562f, 0.006580f, 0.007782f,
+ 0.008690f, 0.009766f, 0.011261f, 0.012314f, 0.013901f, 0.014969f, 0.016479f, 0.018265f,
+ 0.020294f, 0.022156f, 0.024353f, 0.026505f, 0.029053f, 0.031799f, 0.034607f, 0.037964f,
+ 0.041382f, 0.045471f, 0.049591f, 0.054047f, 0.059326f, 0.065186f, 0.071411f, 0.078735f,
+ 0.086304f, 0.094971f, 0.104126f, 0.114807f, 0.126587f, 0.138916f, 0.153564f, 0.169067f,
+ 0.185669f, 0.203613f, 0.223389f, 0.244629f, 0.266602f, 0.291260f, 0.316406f, 0.342773f,
+ 0.370361f, 0.398926f, 0.427734f, 0.458008f, 0.488770f, 0.520020f, 0.550293f, 0.582031f,
+ 0.613281f, 0.645020f, 0.854004f, 0.865234f, 0.866699f, 0.867188f, 0.866699f, 0.866699f,
+ 0.000571f, 0.001365f, 0.002483f, 0.003033f, 0.004120f, 0.005054f, 0.005981f, 0.006737f,
+ 0.007603f, 0.008675f, 0.009789f, 0.011078f, 0.012413f, 0.013626f, 0.014908f, 0.016174f,
+ 0.017792f, 0.019699f, 0.021591f, 0.023499f, 0.025635f, 0.028000f, 0.030533f, 0.033417f,
+ 0.036499f, 0.039948f, 0.043762f, 0.047943f, 0.052460f, 0.057465f, 0.062622f, 0.068848f,
+ 0.076111f, 0.083557f, 0.092102f, 0.101562f, 0.111816f, 0.123230f, 0.135864f, 0.150024f,
+ 0.165771f, 0.182373f, 0.200806f, 0.221191f, 0.242920f, 0.265869f, 0.290283f, 0.316406f,
+ 0.343262f, 0.371582f, 0.400879f, 0.431396f, 0.463623f, 0.494629f, 0.526367f, 0.558105f,
+ 0.591309f, 0.624023f, 0.845215f, 0.856934f, 0.859375f, 0.859375f, 0.859863f, 0.860352f,
+ 0.000411f, 0.001296f, 0.002012f, 0.002808f, 0.003754f, 0.004543f, 0.005215f, 0.006012f,
+ 0.006725f, 0.007851f, 0.008888f, 0.009979f, 0.010994f, 0.012009f, 0.013062f, 0.014549f,
+ 0.016113f, 0.017441f, 0.019073f, 0.020767f, 0.022598f, 0.024689f, 0.026764f, 0.029358f,
+ 0.032043f, 0.034760f, 0.038391f, 0.041779f, 0.045380f, 0.050110f, 0.055054f, 0.060394f,
+ 0.066650f, 0.073120f, 0.080688f, 0.089233f, 0.098450f, 0.108582f, 0.120178f, 0.133057f,
+ 0.146973f, 0.162354f, 0.179565f, 0.198364f, 0.218750f, 0.240967f, 0.264648f, 0.290039f,
+ 0.316650f, 0.344971f, 0.374023f, 0.404541f, 0.435791f, 0.467773f, 0.500977f, 0.535156f,
+ 0.569336f, 0.601562f, 0.836914f, 0.850098f, 0.852051f, 0.852539f, 0.852539f, 0.852051f,
+ 0.000408f, 0.001071f, 0.001857f, 0.002573f, 0.003338f, 0.004078f, 0.004692f, 0.005379f,
+ 0.006046f, 0.007275f, 0.007957f, 0.008606f, 0.009598f, 0.010864f, 0.011658f, 0.013084f,
+ 0.013977f, 0.015366f, 0.016724f, 0.018402f, 0.019669f, 0.021759f, 0.023697f, 0.025726f,
+ 0.027954f, 0.030640f, 0.033356f, 0.036530f, 0.039948f, 0.043701f, 0.047791f, 0.052704f,
+ 0.057770f, 0.063782f, 0.070129f, 0.077881f, 0.085999f, 0.095337f, 0.105591f, 0.116882f,
+ 0.130005f, 0.143921f, 0.159302f, 0.177246f, 0.196411f, 0.217163f, 0.239746f, 0.263916f,
+ 0.290039f, 0.317871f, 0.346924f, 0.377441f, 0.408936f, 0.442139f, 0.476074f, 0.509766f,
+ 0.545410f, 0.580078f, 0.828613f, 0.841309f, 0.843262f, 0.844238f, 0.843750f, 0.844238f,
+ 0.000322f, 0.001009f, 0.001674f, 0.002262f, 0.002949f, 0.003633f, 0.004250f, 0.004780f,
+ 0.005478f, 0.006256f, 0.007248f, 0.007919f, 0.008720f, 0.009552f, 0.010277f, 0.011391f,
+ 0.012291f, 0.013466f, 0.014786f, 0.015976f, 0.017288f, 0.019043f, 0.020477f, 0.022385f,
+ 0.024292f, 0.026276f, 0.029175f, 0.031769f, 0.034546f, 0.037842f, 0.041626f, 0.045868f,
+ 0.050293f, 0.055084f, 0.060669f, 0.067688f, 0.074585f, 0.083008f, 0.092102f, 0.102234f,
+ 0.113525f, 0.126587f, 0.140869f, 0.156860f, 0.174805f, 0.194214f, 0.215698f, 0.239014f,
+ 0.264404f, 0.291016f, 0.320068f, 0.350098f, 0.382080f, 0.414551f, 0.449463f, 0.485107f,
+ 0.520996f, 0.557617f, 0.818848f, 0.833496f, 0.836426f, 0.836914f, 0.836426f, 0.835938f,
+ 0.000483f, 0.000841f, 0.001632f, 0.002142f, 0.002678f, 0.003359f, 0.003830f, 0.004333f,
+ 0.005077f, 0.005527f, 0.006104f, 0.006908f, 0.007675f, 0.008392f, 0.009216f, 0.009789f,
+ 0.010880f, 0.011719f, 0.012817f, 0.013809f, 0.015068f, 0.016357f, 0.017883f, 0.019485f,
+ 0.021271f, 0.022995f, 0.025162f, 0.027359f, 0.029755f, 0.032806f, 0.036133f, 0.039459f,
+ 0.043091f, 0.047821f, 0.052368f, 0.058258f, 0.064514f, 0.071472f, 0.079224f, 0.088623f,
+ 0.098694f, 0.109924f, 0.123230f, 0.137817f, 0.154053f, 0.172363f, 0.192261f, 0.214478f,
+ 0.238647f, 0.265137f, 0.292725f, 0.322998f, 0.354492f, 0.387695f, 0.422363f, 0.458740f,
+ 0.495605f, 0.533691f, 0.809570f, 0.824219f, 0.826660f, 0.827148f, 0.828125f, 0.827148f,
+ 0.000240f, 0.000906f, 0.001379f, 0.001807f, 0.002495f, 0.002916f, 0.003490f, 0.004139f,
+ 0.004471f, 0.004898f, 0.005638f, 0.005978f, 0.006874f, 0.007313f, 0.007957f, 0.008698f,
+ 0.009560f, 0.010178f, 0.011345f, 0.012177f, 0.012985f, 0.014214f, 0.015274f, 0.016708f,
+ 0.017929f, 0.019882f, 0.021393f, 0.023560f, 0.025406f, 0.028137f, 0.030472f, 0.033752f,
+ 0.036896f, 0.040619f, 0.044952f, 0.049622f, 0.055298f, 0.061249f, 0.068420f, 0.075928f,
+ 0.084900f, 0.095398f, 0.107300f, 0.119934f, 0.134766f, 0.151733f, 0.170410f, 0.191284f,
+ 0.213867f, 0.238647f, 0.265869f, 0.295654f, 0.326660f, 0.359863f, 0.394775f, 0.432129f,
+ 0.469482f, 0.508789f, 0.798340f, 0.814941f, 0.817871f, 0.818359f, 0.818848f, 0.818848f,
+ 0.000376f, 0.000870f, 0.001291f, 0.001619f, 0.002251f, 0.002520f, 0.003016f, 0.003502f,
+ 0.004036f, 0.004299f, 0.004723f, 0.005234f, 0.005840f, 0.006512f, 0.006908f, 0.007595f,
+ 0.008003f, 0.008797f, 0.009773f, 0.010536f, 0.011284f, 0.012161f, 0.013237f, 0.014465f,
+ 0.015579f, 0.016968f, 0.018402f, 0.019882f, 0.021759f, 0.023621f, 0.026138f, 0.028488f,
+ 0.031738f, 0.034668f, 0.038239f, 0.042389f, 0.046783f, 0.052094f, 0.058319f, 0.064941f,
+ 0.072815f, 0.081726f, 0.092102f, 0.103516f, 0.117188f, 0.132202f, 0.149048f, 0.168091f,
+ 0.189941f, 0.213745f, 0.239990f, 0.268311f, 0.299316f, 0.332275f, 0.367188f, 0.403076f,
+ 0.442871f, 0.483398f, 0.788086f, 0.805176f, 0.808105f, 0.808594f, 0.809082f, 0.809082f,
+ 0.000386f, 0.000765f, 0.000998f, 0.001537f, 0.001833f, 0.002407f, 0.002529f, 0.003113f,
+ 0.003334f, 0.003841f, 0.004192f, 0.004585f, 0.005096f, 0.005543f, 0.006073f, 0.006405f,
+ 0.007118f, 0.007641f, 0.008278f, 0.008957f, 0.009651f, 0.010498f, 0.011307f, 0.012184f,
+ 0.013199f, 0.014343f, 0.015671f, 0.016678f, 0.018585f, 0.019852f, 0.021881f, 0.023987f,
+ 0.026398f, 0.029099f, 0.032227f, 0.035339f, 0.039246f, 0.043915f, 0.048859f, 0.054688f,
+ 0.061554f, 0.069519f, 0.078247f, 0.088379f, 0.100037f, 0.113770f, 0.129272f, 0.146606f,
+ 0.166626f, 0.189575f, 0.214111f, 0.241577f, 0.271973f, 0.304199f, 0.339844f, 0.375977f,
+ 0.415527f, 0.457275f, 0.776855f, 0.794434f, 0.797363f, 0.797852f, 0.798828f, 0.799316f,
+ 0.000232f, 0.000636f, 0.000996f, 0.001201f, 0.001721f, 0.002029f, 0.002340f, 0.002802f,
+ 0.003012f, 0.003462f, 0.003693f, 0.004059f, 0.004295f, 0.004822f, 0.005077f, 0.005623f,
+ 0.006126f, 0.006653f, 0.007027f, 0.007561f, 0.008049f, 0.008904f, 0.009399f, 0.010300f,
+ 0.011200f, 0.012115f, 0.013092f, 0.014221f, 0.015671f, 0.016891f, 0.018433f, 0.020294f,
+ 0.022064f, 0.024277f, 0.026688f, 0.029678f, 0.032654f, 0.036499f, 0.040955f, 0.045715f,
+ 0.051514f, 0.058014f, 0.065674f, 0.074707f, 0.084717f, 0.096802f, 0.111023f, 0.126709f,
+ 0.144775f, 0.165771f, 0.189209f, 0.215820f, 0.244385f, 0.275879f, 0.310547f, 0.348145f,
+ 0.387695f, 0.429932f, 0.765137f, 0.783203f, 0.787109f, 0.788574f, 0.788574f, 0.789551f,
+ 0.000171f, 0.000518f, 0.001106f, 0.001242f, 0.001475f, 0.001939f, 0.002092f, 0.002254f,
+ 0.002607f, 0.002930f, 0.003084f, 0.003382f, 0.003674f, 0.004040f, 0.004395f, 0.004780f,
+ 0.005157f, 0.005653f, 0.006088f, 0.006355f, 0.006870f, 0.007420f, 0.008057f, 0.008667f,
+ 0.009361f, 0.010040f, 0.011101f, 0.011803f, 0.012711f, 0.013962f, 0.015343f, 0.016586f,
+ 0.018036f, 0.020142f, 0.022079f, 0.024399f, 0.027023f, 0.030075f, 0.033569f, 0.037750f,
+ 0.042603f, 0.048096f, 0.054718f, 0.062134f, 0.071045f, 0.081299f, 0.093445f, 0.107605f,
+ 0.124268f, 0.142944f, 0.165405f, 0.189941f, 0.218262f, 0.249268f, 0.282227f, 0.319336f,
+ 0.359375f, 0.402832f, 0.752930f, 0.771973f, 0.775879f, 0.776855f, 0.777832f, 0.777832f,
+ 0.000204f, 0.000608f, 0.000865f, 0.001011f, 0.001362f, 0.001632f, 0.001817f, 0.001930f,
+ 0.002274f, 0.002491f, 0.002796f, 0.002932f, 0.003139f, 0.003429f, 0.003736f, 0.004055f,
+ 0.004448f, 0.004829f, 0.004971f, 0.005497f, 0.005859f, 0.006298f, 0.006741f, 0.007080f,
+ 0.007687f, 0.008308f, 0.009087f, 0.009880f, 0.010735f, 0.011528f, 0.012375f, 0.013664f,
+ 0.014862f, 0.016464f, 0.017868f, 0.019852f, 0.022156f, 0.024490f, 0.027435f, 0.030853f,
+ 0.034637f, 0.039154f, 0.044495f, 0.050964f, 0.058441f, 0.067383f, 0.077759f, 0.090332f,
+ 0.104797f, 0.121826f, 0.142334f, 0.164795f, 0.191528f, 0.221313f, 0.254150f, 0.290771f,
+ 0.330078f, 0.374268f, 0.740234f, 0.759277f, 0.763672f, 0.766113f, 0.766602f, 0.766113f,
+ 0.000150f, 0.000514f, 0.000666f, 0.000865f, 0.001163f, 0.001389f, 0.001540f, 0.001672f,
+ 0.001940f, 0.002110f, 0.002302f, 0.002419f, 0.002745f, 0.002974f, 0.003120f, 0.003366f,
+ 0.003695f, 0.003815f, 0.004173f, 0.004574f, 0.004879f, 0.005165f, 0.005646f, 0.006058f,
+ 0.006481f, 0.006969f, 0.007626f, 0.007881f, 0.008751f, 0.009445f, 0.010231f, 0.011246f,
+ 0.012222f, 0.013268f, 0.014641f, 0.015976f, 0.017792f, 0.019867f, 0.021912f, 0.024704f,
+ 0.027786f, 0.031494f, 0.036011f, 0.041229f, 0.047363f, 0.054962f, 0.063904f, 0.074463f,
+ 0.087036f, 0.102295f, 0.120483f, 0.141113f, 0.166260f, 0.194214f, 0.226196f, 0.261719f,
+ 0.301514f, 0.345459f, 0.727051f, 0.747070f, 0.751953f, 0.753418f, 0.754395f, 0.754883f,
+ 0.000103f, 0.000251f, 0.000628f, 0.000912f, 0.000978f, 0.001191f, 0.001365f, 0.001507f,
+ 0.001513f, 0.001757f, 0.001980f, 0.002121f, 0.002316f, 0.002373f, 0.002645f, 0.002909f,
+ 0.003012f, 0.003305f, 0.003538f, 0.003775f, 0.004070f, 0.004246f, 0.004642f, 0.004986f,
+ 0.005394f, 0.005802f, 0.006031f, 0.006565f, 0.006969f, 0.007618f, 0.008293f, 0.008980f,
+ 0.009766f, 0.010612f, 0.011528f, 0.012802f, 0.014198f, 0.015671f, 0.017517f, 0.019592f,
+ 0.021957f, 0.024918f, 0.028442f, 0.032562f, 0.037567f, 0.043762f, 0.051025f, 0.059753f,
+ 0.071045f, 0.084412f, 0.099792f, 0.119385f, 0.141846f, 0.167969f, 0.199341f, 0.233521f,
+ 0.272461f, 0.315674f, 0.712891f, 0.733887f, 0.738770f, 0.740234f, 0.741211f, 0.741699f,
+ 0.000185f, 0.000434f, 0.000489f, 0.000732f, 0.000874f, 0.000968f, 0.001122f, 0.001124f,
+ 0.001371f, 0.001423f, 0.001639f, 0.001693f, 0.001805f, 0.002094f, 0.002241f, 0.002356f,
+ 0.002567f, 0.002691f, 0.002871f, 0.003063f, 0.003195f, 0.003582f, 0.003790f, 0.004089f,
+ 0.004372f, 0.004536f, 0.005085f, 0.005314f, 0.005699f, 0.006153f, 0.006672f, 0.007202f,
+ 0.007805f, 0.008522f, 0.009216f, 0.010071f, 0.011086f, 0.012184f, 0.013596f, 0.015297f,
+ 0.017014f, 0.019363f, 0.021988f, 0.025299f, 0.029282f, 0.033936f, 0.040070f, 0.047028f,
+ 0.056519f, 0.067932f, 0.080872f, 0.098083f, 0.118469f, 0.143188f, 0.171753f, 0.205200f,
+ 0.243286f, 0.286133f, 0.698730f, 0.721680f, 0.725098f, 0.727051f, 0.728027f, 0.728516f,
+ 0.000116f, 0.000267f, 0.000565f, 0.000505f, 0.000648f, 0.000772f, 0.000813f, 0.001031f,
+ 0.001107f, 0.001184f, 0.001335f, 0.001391f, 0.001451f, 0.001633f, 0.001798f, 0.001874f,
+ 0.002090f, 0.002192f, 0.002392f, 0.002464f, 0.002707f, 0.002895f, 0.003044f, 0.003206f,
+ 0.003468f, 0.003666f, 0.003887f, 0.004261f, 0.004524f, 0.004898f, 0.005379f, 0.005711f,
+ 0.006130f, 0.006721f, 0.007267f, 0.007912f, 0.008659f, 0.009575f, 0.010475f, 0.011749f,
+ 0.013252f, 0.014717f, 0.016815f, 0.019302f, 0.022369f, 0.025955f, 0.030502f, 0.036285f,
+ 0.043579f, 0.052795f, 0.064453f, 0.078735f, 0.096497f, 0.118591f, 0.145508f, 0.177368f,
+ 0.213989f, 0.256592f, 0.683105f, 0.707031f, 0.710938f, 0.713379f, 0.714844f, 0.714844f,
+ 0.000223f, 0.000239f, 0.000286f, 0.000476f, 0.000580f, 0.000647f, 0.000715f, 0.000843f,
+ 0.000914f, 0.000950f, 0.001090f, 0.001163f, 0.001259f, 0.001328f, 0.001392f, 0.001560f,
+ 0.001549f, 0.001775f, 0.001868f, 0.001999f, 0.002199f, 0.002235f, 0.002436f, 0.002575f,
+ 0.002842f, 0.002892f, 0.003111f, 0.003401f, 0.003563f, 0.003887f, 0.004196f, 0.004505f,
+ 0.004791f, 0.005142f, 0.005684f, 0.006153f, 0.006710f, 0.007378f, 0.008064f, 0.008881f,
+ 0.009979f, 0.011177f, 0.012779f, 0.014435f, 0.016647f, 0.019150f, 0.022583f, 0.027252f,
+ 0.033051f, 0.040039f, 0.049561f, 0.061340f, 0.076843f, 0.096313f, 0.120544f, 0.150513f,
+ 0.185547f, 0.227173f, 0.668457f, 0.692383f, 0.696289f, 0.698242f, 0.699219f, 0.701172f,
+ 0.000000f, 0.000109f, 0.000315f, 0.000449f, 0.000511f, 0.000507f, 0.000538f, 0.000653f,
+ 0.000724f, 0.000749f, 0.000830f, 0.000893f, 0.001007f, 0.001079f, 0.001189f, 0.001163f,
+ 0.001335f, 0.001307f, 0.001502f, 0.001575f, 0.001627f, 0.001778f, 0.001933f, 0.002029f,
+ 0.002155f, 0.002254f, 0.002401f, 0.002535f, 0.002829f, 0.002943f, 0.003143f, 0.003422f,
+ 0.003710f, 0.003990f, 0.004318f, 0.004627f, 0.005108f, 0.005585f, 0.006142f, 0.006641f,
+ 0.007378f, 0.008354f, 0.009430f, 0.010628f, 0.012123f, 0.014015f, 0.016541f, 0.019836f,
+ 0.023849f, 0.029312f, 0.036774f, 0.046356f, 0.058868f, 0.075562f, 0.097107f, 0.124634f,
+ 0.157837f, 0.197754f, 0.653320f, 0.677734f, 0.682129f, 0.684082f, 0.685547f, 0.684570f,
+ 0.000166f, 0.000195f, 0.000256f, 0.000372f, 0.000386f, 0.000415f, 0.000515f, 0.000432f,
+ 0.000579f, 0.000606f, 0.000706f, 0.000745f, 0.000764f, 0.000837f, 0.000853f, 0.000993f,
+ 0.001034f, 0.001066f, 0.001156f, 0.001203f, 0.001339f, 0.001418f, 0.001470f, 0.001612f,
+ 0.001614f, 0.001707f, 0.001850f, 0.001986f, 0.002151f, 0.002254f, 0.002499f, 0.002560f,
+ 0.002794f, 0.003000f, 0.003212f, 0.003510f, 0.003761f, 0.004086f, 0.004475f, 0.004967f,
+ 0.005428f, 0.006134f, 0.006840f, 0.007786f, 0.008858f, 0.010033f, 0.011909f, 0.014137f,
+ 0.016907f, 0.020767f, 0.025894f, 0.033386f, 0.043274f, 0.056854f, 0.075439f, 0.099548f,
+ 0.130737f, 0.169434f, 0.634277f, 0.661133f, 0.667480f, 0.668945f, 0.669922f, 0.670898f,
+ 0.000115f, 0.000119f, 0.000230f, 0.000304f, 0.000221f, 0.000380f, 0.000322f, 0.000351f,
+ 0.000453f, 0.000527f, 0.000535f, 0.000558f, 0.000595f, 0.000675f, 0.000707f, 0.000670f,
+ 0.000776f, 0.000812f, 0.000839f, 0.000911f, 0.000974f, 0.001033f, 0.001082f, 0.001154f,
+ 0.001209f, 0.001268f, 0.001416f, 0.001432f, 0.001607f, 0.001775f, 0.001877f, 0.001911f,
+ 0.002041f, 0.002207f, 0.002380f, 0.002563f, 0.002741f, 0.002956f, 0.003281f, 0.003513f,
+ 0.003902f, 0.004353f, 0.004803f, 0.005405f, 0.006256f, 0.007072f, 0.008263f, 0.009659f,
+ 0.011627f, 0.014221f, 0.017792f, 0.022919f, 0.030075f, 0.040497f, 0.055878f, 0.076721f,
+ 0.104980f, 0.141357f, 0.618652f, 0.644531f, 0.650391f, 0.652832f, 0.653320f, 0.654785f,
+ 0.000000f, 0.000122f, 0.000142f, 0.000227f, 0.000248f, 0.000246f, 0.000296f, 0.000254f,
+ 0.000308f, 0.000329f, 0.000387f, 0.000437f, 0.000443f, 0.000504f, 0.000515f, 0.000535f,
+ 0.000566f, 0.000592f, 0.000618f, 0.000641f, 0.000706f, 0.000746f, 0.000787f, 0.000839f,
+ 0.000878f, 0.000920f, 0.001043f, 0.001041f, 0.001136f, 0.001199f, 0.001258f, 0.001393f,
+ 0.001428f, 0.001549f, 0.001632f, 0.001856f, 0.001945f, 0.002079f, 0.002310f, 0.002489f,
+ 0.002708f, 0.002996f, 0.003315f, 0.003759f, 0.004177f, 0.004803f, 0.005619f, 0.006527f,
+ 0.007793f, 0.009468f, 0.011917f, 0.015152f, 0.019897f, 0.027298f, 0.038910f, 0.055908f,
+ 0.080811f, 0.114563f, 0.600586f, 0.628906f, 0.634277f, 0.636719f, 0.637207f, 0.638672f,
+ 0.000000f, 0.000000f, 0.000106f, 0.000137f, 0.000172f, 0.000211f, 0.000189f, 0.000226f,
+ 0.000230f, 0.000248f, 0.000293f, 0.000251f, 0.000264f, 0.000321f, 0.000343f, 0.000399f,
+ 0.000368f, 0.000401f, 0.000499f, 0.000479f, 0.000498f, 0.000526f, 0.000550f, 0.000595f,
+ 0.000631f, 0.000645f, 0.000726f, 0.000717f, 0.000786f, 0.000902f, 0.000865f, 0.000916f,
+ 0.000989f, 0.001059f, 0.001165f, 0.001246f, 0.001279f, 0.001408f, 0.001566f, 0.001628f,
+ 0.001808f, 0.001991f, 0.002165f, 0.002466f, 0.002766f, 0.003084f, 0.003534f, 0.004250f,
+ 0.005016f, 0.006130f, 0.007584f, 0.009605f, 0.012718f, 0.017395f, 0.025131f, 0.038269f,
+ 0.058899f, 0.089661f, 0.582031f, 0.611328f, 0.616699f, 0.620117f, 0.621094f, 0.622559f,
+ 0.000000f, 0.000108f, 0.000104f, 0.000095f, 0.000117f, 0.000117f, 0.000122f, 0.000143f,
+ 0.000147f, 0.000164f, 0.000174f, 0.000216f, 0.000191f, 0.000227f, 0.000241f, 0.000250f,
+ 0.000257f, 0.000271f, 0.000301f, 0.000298f, 0.000317f, 0.000344f, 0.000370f, 0.000392f,
+ 0.000404f, 0.000427f, 0.000491f, 0.000491f, 0.000519f, 0.000535f, 0.000611f, 0.000601f,
+ 0.000668f, 0.000698f, 0.000767f, 0.000838f, 0.000865f, 0.000895f, 0.000993f, 0.001066f,
+ 0.001161f, 0.001242f, 0.001415f, 0.001521f, 0.001743f, 0.001901f, 0.002209f, 0.002523f,
+ 0.003038f, 0.003601f, 0.004478f, 0.005699f, 0.007545f, 0.010437f, 0.015175f, 0.023682f,
+ 0.039429f, 0.066406f, 0.563477f, 0.593262f, 0.598633f, 0.602051f, 0.602539f, 0.603516f,
+ 0.000000f, 0.000101f, 0.000093f, 0.000087f, 0.000082f, 0.000078f, 0.000084f, 0.000087f,
+ 0.000093f, 0.000094f, 0.000099f, 0.000104f, 0.000114f, 0.000123f, 0.000158f, 0.000163f,
+ 0.000166f, 0.000178f, 0.000177f, 0.000214f, 0.000191f, 0.000208f, 0.000212f, 0.000247f,
+ 0.000268f, 0.000263f, 0.000272f, 0.000287f, 0.000310f, 0.000336f, 0.000353f, 0.000368f,
+ 0.000396f, 0.000408f, 0.000453f, 0.000476f, 0.000511f, 0.000540f, 0.000615f, 0.000635f,
+ 0.000682f, 0.000751f, 0.000812f, 0.000908f, 0.000987f, 0.001116f, 0.001278f, 0.001431f,
+ 0.001702f, 0.002047f, 0.002512f, 0.003126f, 0.004181f, 0.005817f, 0.008553f, 0.013489f,
+ 0.023697f, 0.045288f, 0.544922f, 0.575684f, 0.581543f, 0.584473f, 0.585938f, 0.587402f,
+ 0.000109f, 0.000091f, 0.000081f, 0.000075f, 0.000070f, 0.000067f, 0.000064f, 0.000061f,
+ 0.000057f, 0.000054f, 0.000058f, 0.000075f, 0.000062f, 0.000064f, 0.000085f, 0.000068f,
+ 0.000092f, 0.000094f, 0.000103f, 0.000110f, 0.000113f, 0.000119f, 0.000141f, 0.000141f,
+ 0.000148f, 0.000152f, 0.000159f, 0.000164f, 0.000175f, 0.000188f, 0.000184f, 0.000218f,
+ 0.000233f, 0.000223f, 0.000253f, 0.000265f, 0.000282f, 0.000321f, 0.000322f, 0.000351f,
+ 0.000371f, 0.000405f, 0.000443f, 0.000478f, 0.000515f, 0.000571f, 0.000652f, 0.000733f,
+ 0.000856f, 0.001011f, 0.001227f, 0.001531f, 0.002029f, 0.002817f, 0.004215f, 0.006874f,
+ 0.012390f, 0.027405f, 0.525879f, 0.557129f, 0.563477f, 0.566895f, 0.568848f, 0.569824f,
+ 0.000094f, 0.000073f, 0.000065f, 0.000060f, 0.000055f, 0.000052f, 0.000049f, 0.000048f,
+ 0.000046f, 0.000045f, 0.000042f, 0.000040f, 0.000040f, 0.000037f, 0.000035f, 0.000035f,
+ 0.000042f, 0.000036f, 0.000049f, 0.000051f, 0.000055f, 0.000056f, 0.000059f, 0.000062f,
+ 0.000064f, 0.000078f, 0.000071f, 0.000079f, 0.000088f, 0.000091f, 0.000093f, 0.000099f,
+ 0.000103f, 0.000110f, 0.000125f, 0.000123f, 0.000127f, 0.000151f, 0.000151f, 0.000161f,
+ 0.000169f, 0.000179f, 0.000204f, 0.000219f, 0.000240f, 0.000267f, 0.000294f, 0.000321f,
+ 0.000378f, 0.000438f, 0.000524f, 0.000628f, 0.000818f, 0.001125f, 0.001693f, 0.002888f,
+ 0.005638f, 0.013580f, 0.505859f, 0.539062f, 0.544922f, 0.548340f, 0.550293f, 0.550781f,
+ 0.000064f, 0.000048f, 0.000041f, 0.000037f, 0.000035f, 0.000034f, 0.000032f, 0.000031f,
+ 0.000030f, 0.000029f, 0.000028f, 0.000028f, 0.000027f, 0.000027f, 0.000026f, 0.000025f,
+ 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000019f, 0.000023f,
+ 0.000021f, 0.000022f, 0.000026f, 0.000029f, 0.000032f, 0.000031f, 0.000036f, 0.000037f,
+ 0.000036f, 0.000044f, 0.000046f, 0.000048f, 0.000052f, 0.000054f, 0.000056f, 0.000061f,
+ 0.000070f, 0.000073f, 0.000076f, 0.000081f, 0.000082f, 0.000095f, 0.000105f, 0.000120f,
+ 0.000126f, 0.000143f, 0.000173f, 0.000203f, 0.000267f, 0.000346f, 0.000505f, 0.000853f,
+ 0.001829f, 0.005222f, 0.487061f, 0.519531f, 0.527344f, 0.529785f, 0.531738f, 0.532715f,
+ 0.000000f, 0.000002f, 0.000003f, 0.000004f, 0.000008f, 0.000008f, 0.000008f, 0.000010f,
+ 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000012f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000011f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f,
+ 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000010f, 0.000012f, 0.000012f, 0.000015f,
+ 0.000013f, 0.000015f, 0.000018f, 0.000020f, 0.000021f, 0.000022f, 0.000022f, 0.000024f,
+ 0.000026f, 0.000027f, 0.000034f, 0.000043f, 0.000049f, 0.000065f, 0.000089f, 0.000138f,
+ 0.000293f, 0.001143f, 0.466553f, 0.500488f, 0.508301f, 0.510742f, 0.512207f, 0.513672f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f,
+ 0.000006f, 0.000023f, 0.446777f, 0.482178f, 0.489746f, 0.492676f, 0.494629f, 0.496094f,
+ },
+ {
+ 0.032318f, 0.095032f, 0.152344f, 0.205322f, 0.254883f, 0.299316f, 0.342041f, 0.380859f,
+ 0.416504f, 0.449707f, 0.481201f, 0.508789f, 0.537109f, 0.562012f, 0.584961f, 0.608398f,
+ 0.628418f, 0.648926f, 0.666504f, 0.684570f, 0.701172f, 0.716797f, 0.731934f, 0.746094f,
+ 0.759766f, 0.770996f, 0.784668f, 0.795898f, 0.806641f, 0.817871f, 0.827637f, 0.837402f,
+ 0.846680f, 0.855469f, 0.863770f, 0.872559f, 0.879883f, 0.887695f, 0.895508f, 0.901367f,
+ 0.909180f, 0.915527f, 0.921387f, 0.927734f, 0.934082f, 0.939453f, 0.944824f, 0.950684f,
+ 0.955566f, 0.960449f, 0.965332f, 0.969238f, 0.974121f, 0.978516f, 0.982910f, 0.986816f,
+ 0.990723f, 0.994629f, 0.994629f, 0.987793f, 0.981934f, 0.976562f, 0.971680f, 0.966797f,
+ 0.025833f, 0.076965f, 0.125854f, 0.173096f, 0.217896f, 0.259766f, 0.299561f, 0.338135f,
+ 0.372559f, 0.407471f, 0.437500f, 0.468262f, 0.496582f, 0.522949f, 0.547852f, 0.571289f,
+ 0.593750f, 0.614746f, 0.633789f, 0.652832f, 0.671387f, 0.687988f, 0.705078f, 0.719727f,
+ 0.734863f, 0.749023f, 0.761719f, 0.774414f, 0.786621f, 0.797363f, 0.808594f, 0.818848f,
+ 0.829590f, 0.838867f, 0.848633f, 0.858398f, 0.865723f, 0.874512f, 0.881836f, 0.890137f,
+ 0.897949f, 0.904297f, 0.910645f, 0.917480f, 0.923828f, 0.929688f, 0.935547f, 0.941895f,
+ 0.947266f, 0.952637f, 0.957520f, 0.962402f, 0.967285f, 0.971680f, 0.976562f, 0.980957f,
+ 0.984863f, 0.989258f, 0.992676f, 0.985840f, 0.979980f, 0.975098f, 0.970703f, 0.966309f,
+ 0.020828f, 0.063049f, 0.104797f, 0.146606f, 0.187134f, 0.225464f, 0.263916f, 0.299072f,
+ 0.333252f, 0.366943f, 0.398438f, 0.429199f, 0.457031f, 0.484131f, 0.509766f, 0.534668f,
+ 0.559082f, 0.579590f, 0.600586f, 0.622070f, 0.640625f, 0.659180f, 0.676758f, 0.692383f,
+ 0.708984f, 0.722656f, 0.737793f, 0.751465f, 0.764648f, 0.776367f, 0.789062f, 0.801270f,
+ 0.811523f, 0.821289f, 0.832031f, 0.841309f, 0.850586f, 0.860352f, 0.868652f, 0.876953f,
+ 0.884766f, 0.892090f, 0.899902f, 0.906738f, 0.913086f, 0.920410f, 0.927246f, 0.933105f,
+ 0.938477f, 0.944336f, 0.950195f, 0.955078f, 0.959961f, 0.965332f, 0.970215f, 0.975098f,
+ 0.979492f, 0.983887f, 0.989746f, 0.983398f, 0.978516f, 0.973633f, 0.969238f, 0.964844f,
+ 0.017273f, 0.052429f, 0.088745f, 0.124207f, 0.160034f, 0.195068f, 0.230103f, 0.263916f,
+ 0.297119f, 0.329102f, 0.360596f, 0.390625f, 0.418945f, 0.446289f, 0.472656f, 0.498535f,
+ 0.521973f, 0.545898f, 0.567871f, 0.588867f, 0.609375f, 0.629395f, 0.646973f, 0.664551f,
+ 0.681641f, 0.698242f, 0.712402f, 0.727539f, 0.741699f, 0.755371f, 0.768555f, 0.780762f,
+ 0.792480f, 0.803711f, 0.814941f, 0.825195f, 0.834961f, 0.844727f, 0.854004f, 0.863281f,
+ 0.871094f, 0.879883f, 0.887695f, 0.895508f, 0.902832f, 0.909668f, 0.916504f, 0.923828f,
+ 0.929688f, 0.936035f, 0.941895f, 0.947754f, 0.952637f, 0.958496f, 0.963379f, 0.968750f,
+ 0.973633f, 0.978027f, 0.986816f, 0.980957f, 0.976562f, 0.972168f, 0.967285f, 0.963379f,
+ 0.014076f, 0.043915f, 0.074951f, 0.106140f, 0.137573f, 0.169189f, 0.201416f, 0.233154f,
+ 0.264648f, 0.295166f, 0.324707f, 0.354248f, 0.381836f, 0.410156f, 0.436279f, 0.462891f,
+ 0.487793f, 0.510742f, 0.534180f, 0.556152f, 0.576660f, 0.598145f, 0.616211f, 0.636719f,
+ 0.653320f, 0.670410f, 0.687500f, 0.703125f, 0.718262f, 0.733398f, 0.746582f, 0.760742f,
+ 0.772949f, 0.785156f, 0.796875f, 0.808105f, 0.818848f, 0.829590f, 0.838867f, 0.848145f,
+ 0.857910f, 0.867188f, 0.875977f, 0.883301f, 0.891602f, 0.899414f, 0.906738f, 0.913086f,
+ 0.919922f, 0.926270f, 0.932617f, 0.938477f, 0.944824f, 0.951660f, 0.957520f, 0.961914f,
+ 0.967285f, 0.972168f, 0.984863f, 0.979004f, 0.974609f, 0.970215f, 0.966309f, 0.961914f,
+ 0.012077f, 0.037445f, 0.063660f, 0.090881f, 0.118774f, 0.147827f, 0.176636f, 0.206055f,
+ 0.234253f, 0.262939f, 0.291504f, 0.320312f, 0.347168f, 0.374756f, 0.401367f, 0.427734f,
+ 0.451904f, 0.477051f, 0.500488f, 0.523438f, 0.545898f, 0.566406f, 0.587402f, 0.605957f,
+ 0.624512f, 0.643555f, 0.662109f, 0.676758f, 0.693848f, 0.708984f, 0.724609f, 0.738770f,
+ 0.751465f, 0.765137f, 0.777344f, 0.790039f, 0.800781f, 0.812500f, 0.823242f, 0.833984f,
+ 0.842773f, 0.853027f, 0.861816f, 0.871094f, 0.879395f, 0.887695f, 0.895508f, 0.903320f,
+ 0.910156f, 0.917969f, 0.924316f, 0.931152f, 0.937988f, 0.943848f, 0.949219f, 0.955566f,
+ 0.960449f, 0.966309f, 0.981445f, 0.977051f, 0.972168f, 0.968262f, 0.964355f, 0.960938f,
+ 0.010445f, 0.032562f, 0.054657f, 0.078613f, 0.103333f, 0.128540f, 0.153564f, 0.181274f,
+ 0.207520f, 0.234619f, 0.261475f, 0.288818f, 0.315674f, 0.342041f, 0.368408f, 0.394287f,
+ 0.418945f, 0.443604f, 0.467773f, 0.490479f, 0.512695f, 0.534180f, 0.555664f, 0.575684f,
+ 0.596191f, 0.616211f, 0.633301f, 0.651855f, 0.668457f, 0.685547f, 0.701172f, 0.714844f,
+ 0.729492f, 0.743652f, 0.758301f, 0.770996f, 0.783203f, 0.794922f, 0.806641f, 0.817383f,
+ 0.827637f, 0.838867f, 0.847656f, 0.857422f, 0.866699f, 0.875000f, 0.884277f, 0.892578f,
+ 0.900391f, 0.907227f, 0.914551f, 0.922363f, 0.929199f, 0.935059f, 0.941895f, 0.948242f,
+ 0.953125f, 0.959473f, 0.978516f, 0.974609f, 0.970215f, 0.966309f, 0.962402f, 0.958984f,
+ 0.009117f, 0.027466f, 0.047424f, 0.067871f, 0.089783f, 0.112244f, 0.135376f, 0.159668f,
+ 0.184082f, 0.209106f, 0.233887f, 0.259277f, 0.285400f, 0.311523f, 0.336182f, 0.360840f,
+ 0.385986f, 0.410889f, 0.435059f, 0.458252f, 0.480713f, 0.503418f, 0.524902f, 0.546387f,
+ 0.566895f, 0.586426f, 0.605469f, 0.624512f, 0.642578f, 0.659668f, 0.676758f, 0.692383f,
+ 0.708008f, 0.722168f, 0.736816f, 0.749512f, 0.763184f, 0.776855f, 0.789062f, 0.800781f,
+ 0.812012f, 0.823730f, 0.833496f, 0.843750f, 0.854004f, 0.863281f, 0.872559f, 0.880371f,
+ 0.889648f, 0.896973f, 0.905762f, 0.912598f, 0.919922f, 0.927734f, 0.934082f, 0.940918f,
+ 0.946289f, 0.952637f, 0.976074f, 0.972168f, 0.967773f, 0.963867f, 0.960938f, 0.957031f,
+ 0.007561f, 0.024231f, 0.041077f, 0.059631f, 0.078369f, 0.098145f, 0.119507f, 0.140747f,
+ 0.163208f, 0.185913f, 0.209839f, 0.233154f, 0.257324f, 0.281494f, 0.305908f, 0.330566f,
+ 0.354736f, 0.378906f, 0.402588f, 0.425781f, 0.449219f, 0.471924f, 0.494385f, 0.516602f,
+ 0.536621f, 0.557617f, 0.576660f, 0.596680f, 0.616211f, 0.632812f, 0.650879f, 0.668457f,
+ 0.684082f, 0.700684f, 0.715332f, 0.729492f, 0.744141f, 0.757812f, 0.771973f, 0.783691f,
+ 0.796387f, 0.807129f, 0.818359f, 0.829590f, 0.840820f, 0.850098f, 0.859375f, 0.868652f,
+ 0.877930f, 0.886719f, 0.894531f, 0.903320f, 0.910645f, 0.918945f, 0.925781f, 0.932617f,
+ 0.939453f, 0.945801f, 0.972656f, 0.969727f, 0.965820f, 0.961914f, 0.958496f, 0.955078f,
+ 0.006832f, 0.020676f, 0.036224f, 0.051758f, 0.069214f, 0.086609f, 0.105225f, 0.124146f,
+ 0.144653f, 0.165527f, 0.186646f, 0.209106f, 0.232178f, 0.254883f, 0.277588f, 0.301758f,
+ 0.325195f, 0.348633f, 0.371826f, 0.395264f, 0.418213f, 0.440674f, 0.463135f, 0.485596f,
+ 0.506348f, 0.527832f, 0.548340f, 0.567871f, 0.587891f, 0.606934f, 0.625977f, 0.642578f,
+ 0.660645f, 0.677734f, 0.692871f, 0.708008f, 0.723633f, 0.737793f, 0.752441f, 0.765137f,
+ 0.778320f, 0.791504f, 0.802734f, 0.814453f, 0.825684f, 0.835449f, 0.847168f, 0.856934f,
+ 0.866699f, 0.875488f, 0.884766f, 0.893066f, 0.901367f, 0.910156f, 0.917480f, 0.924805f,
+ 0.932129f, 0.938965f, 0.970215f, 0.966797f, 0.963379f, 0.959961f, 0.956543f, 0.953125f,
+ 0.006050f, 0.018585f, 0.031860f, 0.045807f, 0.060883f, 0.076538f, 0.093323f, 0.109985f,
+ 0.128174f, 0.147949f, 0.167480f, 0.186768f, 0.208496f, 0.230591f, 0.252441f, 0.274170f,
+ 0.297363f, 0.319824f, 0.342773f, 0.365723f, 0.388672f, 0.411133f, 0.433350f, 0.455811f,
+ 0.477295f, 0.498291f, 0.519531f, 0.539551f, 0.560059f, 0.580566f, 0.599121f, 0.617676f,
+ 0.635254f, 0.653320f, 0.669434f, 0.686523f, 0.702148f, 0.717773f, 0.732422f, 0.747070f,
+ 0.760742f, 0.773926f, 0.786621f, 0.798340f, 0.811035f, 0.822754f, 0.833008f, 0.843750f,
+ 0.854004f, 0.863770f, 0.873047f, 0.882812f, 0.891602f, 0.900879f, 0.908691f, 0.916504f,
+ 0.924316f, 0.931152f, 0.966309f, 0.964355f, 0.961426f, 0.957520f, 0.954102f, 0.951172f,
+ 0.005352f, 0.016388f, 0.027985f, 0.040222f, 0.053436f, 0.067261f, 0.082520f, 0.098022f,
+ 0.114319f, 0.131836f, 0.150146f, 0.167969f, 0.187744f, 0.208008f, 0.228271f, 0.249634f,
+ 0.270996f, 0.292969f, 0.314697f, 0.337158f, 0.359375f, 0.380859f, 0.403809f, 0.426025f,
+ 0.447510f, 0.469482f, 0.490967f, 0.511719f, 0.532227f, 0.552734f, 0.571777f, 0.591309f,
+ 0.609375f, 0.628418f, 0.645508f, 0.663086f, 0.680664f, 0.696289f, 0.711426f, 0.727051f,
+ 0.741699f, 0.755859f, 0.768555f, 0.782227f, 0.795410f, 0.807617f, 0.818359f, 0.830078f,
+ 0.841309f, 0.851074f, 0.861816f, 0.871582f, 0.880859f, 0.890625f, 0.898438f, 0.907715f,
+ 0.915527f, 0.923828f, 0.962402f, 0.961914f, 0.958496f, 0.955078f, 0.951172f, 0.948730f,
+ 0.004700f, 0.014397f, 0.025208f, 0.035675f, 0.047485f, 0.060120f, 0.073242f, 0.087097f,
+ 0.102173f, 0.117249f, 0.133789f, 0.150513f, 0.168823f, 0.186890f, 0.206665f, 0.225830f,
+ 0.246216f, 0.267334f, 0.288574f, 0.309814f, 0.331299f, 0.353271f, 0.375244f, 0.396729f,
+ 0.418701f, 0.440674f, 0.461182f, 0.483398f, 0.504883f, 0.524902f, 0.544434f, 0.564941f,
+ 0.584473f, 0.603027f, 0.621582f, 0.639648f, 0.656738f, 0.673828f, 0.690430f, 0.705566f,
+ 0.721680f, 0.736816f, 0.750977f, 0.764648f, 0.778809f, 0.791016f, 0.804688f, 0.815918f,
+ 0.826660f, 0.838867f, 0.850098f, 0.860840f, 0.870605f, 0.879883f, 0.889648f, 0.898438f,
+ 0.907227f, 0.915527f, 0.959961f, 0.958496f, 0.955078f, 0.952148f, 0.949219f, 0.946777f,
+ 0.004238f, 0.013138f, 0.022202f, 0.031769f, 0.042358f, 0.053040f, 0.065613f, 0.077637f,
+ 0.090759f, 0.104980f, 0.119995f, 0.135498f, 0.151855f, 0.167725f, 0.186646f, 0.205078f,
+ 0.224121f, 0.243042f, 0.263672f, 0.283936f, 0.305176f, 0.326416f, 0.347168f, 0.369629f,
+ 0.390625f, 0.411865f, 0.433350f, 0.454590f, 0.475830f, 0.497314f, 0.517578f, 0.537109f,
+ 0.557617f, 0.577637f, 0.596191f, 0.615723f, 0.632812f, 0.651367f, 0.668945f, 0.685059f,
+ 0.701172f, 0.716797f, 0.732422f, 0.747559f, 0.761230f, 0.775391f, 0.788574f, 0.800781f,
+ 0.813965f, 0.824707f, 0.837402f, 0.848145f, 0.859375f, 0.869141f, 0.879395f, 0.889160f,
+ 0.897949f, 0.906250f, 0.956055f, 0.955566f, 0.952148f, 0.950195f, 0.947266f, 0.943848f,
+ 0.003944f, 0.011490f, 0.019943f, 0.028748f, 0.037964f, 0.047485f, 0.058014f, 0.069702f,
+ 0.081360f, 0.093994f, 0.107361f, 0.121277f, 0.136353f, 0.151978f, 0.167480f, 0.185669f,
+ 0.202637f, 0.222168f, 0.240601f, 0.259766f, 0.279541f, 0.300293f, 0.321533f, 0.342285f,
+ 0.362549f, 0.384033f, 0.405762f, 0.427002f, 0.447998f, 0.469238f, 0.490479f, 0.510742f,
+ 0.532227f, 0.551758f, 0.570312f, 0.589844f, 0.609375f, 0.628418f, 0.645508f, 0.662598f,
+ 0.680664f, 0.696777f, 0.712402f, 0.728516f, 0.744141f, 0.757812f, 0.771973f, 0.785156f,
+ 0.798828f, 0.811523f, 0.824707f, 0.835449f, 0.847168f, 0.858887f, 0.869141f, 0.878906f,
+ 0.888672f, 0.897949f, 0.952148f, 0.952148f, 0.949219f, 0.946777f, 0.944336f, 0.941406f,
+ 0.003448f, 0.010574f, 0.017807f, 0.025558f, 0.033875f, 0.042633f, 0.052307f, 0.062134f,
+ 0.073059f, 0.084045f, 0.096375f, 0.109192f, 0.122803f, 0.136475f, 0.151367f, 0.167603f,
+ 0.183960f, 0.201416f, 0.218506f, 0.237427f, 0.256104f, 0.275635f, 0.295410f, 0.315918f,
+ 0.336426f, 0.357178f, 0.378906f, 0.399414f, 0.421143f, 0.442139f, 0.462891f, 0.484375f,
+ 0.504883f, 0.524902f, 0.544922f, 0.564941f, 0.583984f, 0.603516f, 0.622070f, 0.640625f,
+ 0.658691f, 0.675781f, 0.692871f, 0.709473f, 0.725098f, 0.740234f, 0.754883f, 0.769531f,
+ 0.783203f, 0.796875f, 0.809570f, 0.823242f, 0.834473f, 0.846191f, 0.857422f, 0.868164f,
+ 0.878906f, 0.889160f, 0.948730f, 0.948242f, 0.946289f, 0.944336f, 0.940918f, 0.938477f,
+ 0.003017f, 0.009422f, 0.015900f, 0.023041f, 0.030380f, 0.038574f, 0.047150f, 0.055969f,
+ 0.065735f, 0.075684f, 0.086426f, 0.098267f, 0.110535f, 0.123047f, 0.136841f, 0.151489f,
+ 0.166138f, 0.182495f, 0.198975f, 0.216553f, 0.233765f, 0.252930f, 0.271484f, 0.291016f,
+ 0.310547f, 0.331299f, 0.351562f, 0.372559f, 0.393555f, 0.415039f, 0.435059f, 0.457275f,
+ 0.477539f, 0.498047f, 0.519043f, 0.538574f, 0.559570f, 0.579102f, 0.598633f, 0.617188f,
+ 0.635742f, 0.654297f, 0.672363f, 0.688965f, 0.706055f, 0.721191f, 0.737793f, 0.752930f,
+ 0.768066f, 0.782227f, 0.795898f, 0.809082f, 0.821289f, 0.833496f, 0.846191f, 0.857422f,
+ 0.869141f, 0.879883f, 0.944824f, 0.945312f, 0.942871f, 0.940918f, 0.938477f, 0.936035f,
+ 0.002802f, 0.008575f, 0.014763f, 0.020844f, 0.027557f, 0.034576f, 0.042084f, 0.050476f,
+ 0.058990f, 0.067993f, 0.077942f, 0.087952f, 0.098999f, 0.111267f, 0.122803f, 0.136719f,
+ 0.150269f, 0.165527f, 0.180542f, 0.196533f, 0.213257f, 0.230591f, 0.248779f, 0.267334f,
+ 0.286865f, 0.306152f, 0.325928f, 0.346436f, 0.367188f, 0.387695f, 0.409424f, 0.429199f,
+ 0.450195f, 0.471680f, 0.492920f, 0.513184f, 0.534180f, 0.553711f, 0.573730f, 0.593750f,
+ 0.612793f, 0.631836f, 0.649414f, 0.668457f, 0.685059f, 0.703125f, 0.719238f, 0.735352f,
+ 0.750000f, 0.766113f, 0.781738f, 0.794434f, 0.808105f, 0.821777f, 0.833984f, 0.846191f,
+ 0.858398f, 0.870117f, 0.940918f, 0.941895f, 0.939941f, 0.937500f, 0.935059f, 0.932617f,
+ 0.002573f, 0.007603f, 0.013100f, 0.018799f, 0.024719f, 0.031372f, 0.038147f, 0.045105f,
+ 0.052795f, 0.061127f, 0.069519f, 0.079529f, 0.089355f, 0.099976f, 0.111084f, 0.123718f,
+ 0.136353f, 0.148926f, 0.163574f, 0.178345f, 0.194214f, 0.210083f, 0.227783f, 0.245361f,
+ 0.263672f, 0.282471f, 0.301758f, 0.321533f, 0.341797f, 0.361816f, 0.383057f, 0.403320f,
+ 0.424316f, 0.445557f, 0.466797f, 0.487061f, 0.507812f, 0.528809f, 0.549805f, 0.569336f,
+ 0.589844f, 0.608887f, 0.627930f, 0.646973f, 0.665527f, 0.682129f, 0.700195f, 0.717773f,
+ 0.732910f, 0.749512f, 0.765137f, 0.779785f, 0.794434f, 0.808105f, 0.821777f, 0.834473f,
+ 0.847168f, 0.859375f, 0.936523f, 0.937988f, 0.936035f, 0.933594f, 0.932129f, 0.929688f,
+ 0.002409f, 0.007107f, 0.011833f, 0.017075f, 0.022278f, 0.028351f, 0.034088f, 0.040558f,
+ 0.047943f, 0.055389f, 0.063232f, 0.072021f, 0.080322f, 0.090454f, 0.100220f, 0.111389f,
+ 0.122986f, 0.135010f, 0.148438f, 0.162109f, 0.176270f, 0.191772f, 0.207642f, 0.224121f,
+ 0.241699f, 0.259277f, 0.278076f, 0.297363f, 0.316650f, 0.336670f, 0.356934f, 0.377686f,
+ 0.397949f, 0.418701f, 0.439941f, 0.461914f, 0.482178f, 0.502930f, 0.524414f, 0.544922f,
+ 0.565918f, 0.585938f, 0.605957f, 0.625000f, 0.643066f, 0.662109f, 0.680176f, 0.698730f,
+ 0.715820f, 0.731934f, 0.748047f, 0.764648f, 0.780273f, 0.794434f, 0.808594f, 0.821777f,
+ 0.836914f, 0.848145f, 0.932129f, 0.934082f, 0.932617f, 0.930176f, 0.928711f, 0.926270f,
+ 0.002066f, 0.006329f, 0.010986f, 0.015541f, 0.020294f, 0.025452f, 0.030975f, 0.037201f,
+ 0.043152f, 0.049835f, 0.056824f, 0.064331f, 0.072998f, 0.081177f, 0.090637f, 0.100525f,
+ 0.110718f, 0.122131f, 0.134033f, 0.146851f, 0.159912f, 0.173584f, 0.189331f, 0.204468f,
+ 0.221191f, 0.237671f, 0.255615f, 0.273682f, 0.292969f, 0.312012f, 0.331543f, 0.352295f,
+ 0.372314f, 0.393311f, 0.413818f, 0.435547f, 0.456055f, 0.477539f, 0.499023f, 0.520508f,
+ 0.540039f, 0.561523f, 0.581543f, 0.602051f, 0.622070f, 0.641113f, 0.659668f, 0.678223f,
+ 0.697266f, 0.714844f, 0.731445f, 0.748535f, 0.765137f, 0.778809f, 0.794922f, 0.810059f,
+ 0.824219f, 0.837402f, 0.926758f, 0.930176f, 0.928711f, 0.926758f, 0.924805f, 0.922852f,
+ 0.001840f, 0.005703f, 0.009918f, 0.014099f, 0.018311f, 0.023026f, 0.028000f, 0.033508f,
+ 0.038971f, 0.045044f, 0.051880f, 0.058289f, 0.065796f, 0.073425f, 0.081482f, 0.090698f,
+ 0.100464f, 0.110413f, 0.121216f, 0.132812f, 0.145142f, 0.158203f, 0.171997f, 0.186401f,
+ 0.201538f, 0.217651f, 0.234497f, 0.251465f, 0.269287f, 0.288330f, 0.307129f, 0.327148f,
+ 0.346924f, 0.367920f, 0.388428f, 0.409668f, 0.430420f, 0.451416f, 0.474121f, 0.494873f,
+ 0.516113f, 0.537598f, 0.558105f, 0.579102f, 0.598633f, 0.619629f, 0.639160f, 0.657715f,
+ 0.677734f, 0.695801f, 0.713867f, 0.731934f, 0.748047f, 0.764160f, 0.781738f, 0.796875f,
+ 0.810547f, 0.826172f, 0.922363f, 0.925781f, 0.924805f, 0.922852f, 0.921387f, 0.919434f,
+ 0.001621f, 0.005188f, 0.008888f, 0.012939f, 0.016724f, 0.021271f, 0.025772f, 0.029984f,
+ 0.035553f, 0.040741f, 0.046417f, 0.052490f, 0.059265f, 0.066528f, 0.074097f, 0.081482f,
+ 0.090271f, 0.100220f, 0.109741f, 0.120178f, 0.131226f, 0.143188f, 0.156006f, 0.169189f,
+ 0.183716f, 0.198486f, 0.214233f, 0.230713f, 0.247925f, 0.265381f, 0.284424f, 0.303711f,
+ 0.322754f, 0.342773f, 0.363525f, 0.384277f, 0.405518f, 0.427002f, 0.447754f, 0.469727f,
+ 0.491455f, 0.512207f, 0.534180f, 0.554688f, 0.576172f, 0.597168f, 0.617188f, 0.636719f,
+ 0.657227f, 0.677734f, 0.695312f, 0.713379f, 0.731934f, 0.749512f, 0.766113f, 0.782715f,
+ 0.798340f, 0.813477f, 0.917480f, 0.920898f, 0.920410f, 0.919922f, 0.916992f, 0.915039f,
+ 0.001581f, 0.004616f, 0.008049f, 0.011917f, 0.015556f, 0.019547f, 0.023270f, 0.027908f,
+ 0.031860f, 0.036652f, 0.041992f, 0.047577f, 0.053528f, 0.060150f, 0.066772f, 0.073914f,
+ 0.082153f, 0.090088f, 0.099304f, 0.108887f, 0.118835f, 0.129517f, 0.141357f, 0.154297f,
+ 0.166992f, 0.180908f, 0.195557f, 0.210815f, 0.227173f, 0.244141f, 0.261963f, 0.279785f,
+ 0.299072f, 0.318359f, 0.338379f, 0.358887f, 0.380127f, 0.401123f, 0.422607f, 0.443848f,
+ 0.466309f, 0.487793f, 0.509277f, 0.530762f, 0.553223f, 0.573730f, 0.594727f, 0.616699f,
+ 0.636719f, 0.656250f, 0.676270f, 0.695801f, 0.713867f, 0.733398f, 0.750488f, 0.767090f,
+ 0.784180f, 0.801270f, 0.912598f, 0.916992f, 0.916504f, 0.914551f, 0.913086f, 0.911133f,
+ 0.001476f, 0.004410f, 0.007374f, 0.010620f, 0.013931f, 0.017258f, 0.021057f, 0.024979f,
+ 0.029144f, 0.033478f, 0.037872f, 0.042969f, 0.048737f, 0.053986f, 0.060150f, 0.066895f,
+ 0.074036f, 0.081665f, 0.089417f, 0.098083f, 0.107361f, 0.117371f, 0.127930f, 0.139648f,
+ 0.151489f, 0.164062f, 0.178589f, 0.192627f, 0.208130f, 0.223755f, 0.240601f, 0.258057f,
+ 0.275879f, 0.295654f, 0.314697f, 0.334961f, 0.354980f, 0.375977f, 0.396729f, 0.418945f,
+ 0.440430f, 0.462402f, 0.484619f, 0.506348f, 0.528809f, 0.550781f, 0.572266f, 0.593750f,
+ 0.615234f, 0.637207f, 0.656738f, 0.676758f, 0.696289f, 0.716309f, 0.734863f, 0.752930f,
+ 0.770508f, 0.788574f, 0.906738f, 0.911621f, 0.912109f, 0.910156f, 0.908691f, 0.907227f,
+ 0.001204f, 0.003998f, 0.006786f, 0.009850f, 0.012642f, 0.015762f, 0.019226f, 0.022751f,
+ 0.026749f, 0.030502f, 0.034698f, 0.038940f, 0.044006f, 0.048615f, 0.054352f, 0.060608f,
+ 0.066711f, 0.073059f, 0.080505f, 0.088318f, 0.097290f, 0.105835f, 0.115845f, 0.126343f,
+ 0.137085f, 0.148804f, 0.161377f, 0.175049f, 0.189331f, 0.204346f, 0.219604f, 0.236816f,
+ 0.253662f, 0.272217f, 0.291260f, 0.310547f, 0.330811f, 0.350830f, 0.372314f, 0.393799f,
+ 0.415771f, 0.437500f, 0.459717f, 0.481934f, 0.504883f, 0.527344f, 0.549316f, 0.571777f,
+ 0.593750f, 0.615723f, 0.636230f, 0.657715f, 0.678223f, 0.697754f, 0.718262f, 0.737793f,
+ 0.756348f, 0.774902f, 0.900879f, 0.907227f, 0.906738f, 0.905762f, 0.904297f, 0.902832f,
+ 0.001290f, 0.003807f, 0.006207f, 0.008652f, 0.011368f, 0.014618f, 0.017792f, 0.020813f,
+ 0.023849f, 0.027588f, 0.031036f, 0.035400f, 0.039917f, 0.044250f, 0.049408f, 0.054321f,
+ 0.059937f, 0.065918f, 0.072937f, 0.079773f, 0.087463f, 0.095703f, 0.104553f, 0.113892f,
+ 0.124146f, 0.134888f, 0.146606f, 0.159058f, 0.171753f, 0.185913f, 0.201416f, 0.216309f,
+ 0.232910f, 0.250000f, 0.268555f, 0.287354f, 0.306885f, 0.326904f, 0.347412f, 0.369141f,
+ 0.390381f, 0.412842f, 0.434570f, 0.457764f, 0.479736f, 0.502930f, 0.525879f, 0.547852f,
+ 0.570801f, 0.592773f, 0.615723f, 0.637207f, 0.659180f, 0.680176f, 0.700684f, 0.720703f,
+ 0.740234f, 0.759766f, 0.895996f, 0.901855f, 0.901855f, 0.900879f, 0.899414f, 0.897949f,
+ 0.001030f, 0.003561f, 0.005718f, 0.008301f, 0.010582f, 0.013283f, 0.015839f, 0.018753f,
+ 0.022156f, 0.025314f, 0.028427f, 0.032318f, 0.035889f, 0.040039f, 0.044434f, 0.048737f,
+ 0.054077f, 0.059723f, 0.065613f, 0.072083f, 0.079224f, 0.086426f, 0.094238f, 0.102966f,
+ 0.111938f, 0.122253f, 0.132568f, 0.143555f, 0.155884f, 0.168945f, 0.182861f, 0.197510f,
+ 0.213379f, 0.229492f, 0.246948f, 0.264648f, 0.283203f, 0.303467f, 0.322998f, 0.343994f,
+ 0.365479f, 0.387451f, 0.409912f, 0.432129f, 0.455078f, 0.478760f, 0.501465f, 0.523926f,
+ 0.547852f, 0.570801f, 0.593750f, 0.616211f, 0.639160f, 0.661133f, 0.682617f, 0.703613f,
+ 0.725098f, 0.745117f, 0.888672f, 0.896484f, 0.896973f, 0.895020f, 0.895508f, 0.893555f,
+ 0.001051f, 0.002956f, 0.005398f, 0.007523f, 0.009613f, 0.012024f, 0.014725f, 0.017059f,
+ 0.019714f, 0.022537f, 0.025681f, 0.029236f, 0.032715f, 0.036102f, 0.040100f, 0.043945f,
+ 0.048859f, 0.053772f, 0.058838f, 0.064880f, 0.070862f, 0.077576f, 0.084839f, 0.092712f,
+ 0.101013f, 0.110229f, 0.119446f, 0.130005f, 0.141113f, 0.153198f, 0.166016f, 0.179565f,
+ 0.193970f, 0.209351f, 0.225830f, 0.242920f, 0.261230f, 0.280273f, 0.299316f, 0.320068f,
+ 0.341309f, 0.363037f, 0.384521f, 0.407227f, 0.429443f, 0.453369f, 0.477051f, 0.500977f,
+ 0.524414f, 0.547852f, 0.571777f, 0.595215f, 0.619141f, 0.641602f, 0.664062f, 0.686035f,
+ 0.707520f, 0.729004f, 0.882812f, 0.891602f, 0.891113f, 0.890625f, 0.889160f, 0.888184f,
+ 0.000934f, 0.002998f, 0.004883f, 0.006859f, 0.009102f, 0.010925f, 0.012871f, 0.015656f,
+ 0.017853f, 0.020767f, 0.023422f, 0.026413f, 0.029251f, 0.032593f, 0.036011f, 0.039825f,
+ 0.044495f, 0.048645f, 0.053284f, 0.058258f, 0.063782f, 0.069885f, 0.076111f, 0.083313f,
+ 0.090881f, 0.099060f, 0.107788f, 0.117126f, 0.127075f, 0.138428f, 0.150391f, 0.162720f,
+ 0.176270f, 0.190796f, 0.206177f, 0.222290f, 0.239624f, 0.257568f, 0.276367f, 0.296387f,
+ 0.316895f, 0.338623f, 0.360352f, 0.382812f, 0.404785f, 0.428467f, 0.452148f, 0.476562f,
+ 0.500488f, 0.524902f, 0.548828f, 0.572754f, 0.597168f, 0.621094f, 0.644531f, 0.667480f,
+ 0.689941f, 0.712402f, 0.875977f, 0.883789f, 0.884766f, 0.884766f, 0.883301f, 0.883789f,
+ 0.001108f, 0.002474f, 0.004707f, 0.006248f, 0.007744f, 0.009888f, 0.011787f, 0.014244f,
+ 0.016205f, 0.018631f, 0.021286f, 0.023758f, 0.026535f, 0.029510f, 0.032654f, 0.035919f,
+ 0.039825f, 0.043762f, 0.047852f, 0.052368f, 0.057373f, 0.062561f, 0.068604f, 0.074707f,
+ 0.081360f, 0.088623f, 0.096802f, 0.105103f, 0.114624f, 0.124573f, 0.135498f, 0.147217f,
+ 0.159424f, 0.172729f, 0.187378f, 0.202881f, 0.219116f, 0.235962f, 0.254639f, 0.273438f,
+ 0.293945f, 0.314453f, 0.335449f, 0.358154f, 0.380371f, 0.403564f, 0.428223f, 0.452148f,
+ 0.476074f, 0.500977f, 0.525879f, 0.550293f, 0.575195f, 0.599609f, 0.625000f, 0.649414f,
+ 0.672852f, 0.695801f, 0.870117f, 0.879395f, 0.879883f, 0.879395f, 0.878906f, 0.877441f,
+ 0.000877f, 0.002495f, 0.003918f, 0.005669f, 0.007484f, 0.009148f, 0.010895f, 0.012634f,
+ 0.014717f, 0.017014f, 0.019302f, 0.021347f, 0.023849f, 0.026443f, 0.029388f, 0.032532f,
+ 0.035492f, 0.039185f, 0.042816f, 0.046906f, 0.051453f, 0.056122f, 0.061310f, 0.066895f,
+ 0.072937f, 0.079590f, 0.086548f, 0.094360f, 0.103027f, 0.111938f, 0.121643f, 0.132568f,
+ 0.144043f, 0.156006f, 0.169434f, 0.184204f, 0.199341f, 0.215698f, 0.233032f, 0.251221f,
+ 0.269531f, 0.290039f, 0.311768f, 0.333740f, 0.355957f, 0.379395f, 0.402344f, 0.426758f,
+ 0.451172f, 0.476562f, 0.501465f, 0.526855f, 0.552246f, 0.578613f, 0.603516f, 0.629395f,
+ 0.653809f, 0.679199f, 0.863281f, 0.872559f, 0.874023f, 0.873535f, 0.872559f, 0.871094f,
+ 0.000779f, 0.002241f, 0.003813f, 0.005371f, 0.006763f, 0.008186f, 0.009827f, 0.011574f,
+ 0.013260f, 0.015274f, 0.017303f, 0.019119f, 0.021362f, 0.023972f, 0.026505f, 0.029144f,
+ 0.031860f, 0.035126f, 0.038422f, 0.041809f, 0.045929f, 0.050323f, 0.054840f, 0.059631f,
+ 0.065002f, 0.070984f, 0.077759f, 0.084656f, 0.091736f, 0.100037f, 0.109436f, 0.118835f,
+ 0.129272f, 0.140625f, 0.152832f, 0.166138f, 0.180786f, 0.195679f, 0.211914f, 0.229736f,
+ 0.247803f, 0.267822f, 0.287598f, 0.309326f, 0.331055f, 0.354492f, 0.377686f, 0.401855f,
+ 0.426270f, 0.451660f, 0.477051f, 0.503418f, 0.529785f, 0.555664f, 0.583008f, 0.608887f,
+ 0.635254f, 0.661133f, 0.855957f, 0.865234f, 0.866699f, 0.867188f, 0.866211f, 0.865723f,
+ 0.000778f, 0.002155f, 0.003584f, 0.004871f, 0.006149f, 0.007519f, 0.008858f, 0.010498f,
+ 0.012100f, 0.013977f, 0.015511f, 0.017303f, 0.019363f, 0.021515f, 0.023880f, 0.026230f,
+ 0.028564f, 0.031555f, 0.034241f, 0.037476f, 0.041138f, 0.044983f, 0.048859f, 0.053436f,
+ 0.058014f, 0.063232f, 0.069214f, 0.075195f, 0.081848f, 0.089417f, 0.097168f, 0.106201f,
+ 0.115479f, 0.126343f, 0.137695f, 0.149658f, 0.162476f, 0.177002f, 0.192993f, 0.209473f,
+ 0.226440f, 0.245239f, 0.264404f, 0.285156f, 0.306885f, 0.330078f, 0.353271f, 0.376465f,
+ 0.402100f, 0.426758f, 0.453857f, 0.479492f, 0.505859f, 0.532715f, 0.560547f, 0.587402f,
+ 0.614258f, 0.640137f, 0.847168f, 0.858398f, 0.860352f, 0.859863f, 0.859863f, 0.858887f,
+ 0.000673f, 0.002026f, 0.003120f, 0.004242f, 0.005390f, 0.006874f, 0.008087f, 0.009346f,
+ 0.011192f, 0.012642f, 0.013855f, 0.015511f, 0.017502f, 0.019394f, 0.021301f, 0.023331f,
+ 0.025681f, 0.028137f, 0.030792f, 0.033295f, 0.036804f, 0.039917f, 0.043488f, 0.047363f,
+ 0.051880f, 0.056580f, 0.061646f, 0.066956f, 0.072998f, 0.079407f, 0.086609f, 0.094971f,
+ 0.103027f, 0.112793f, 0.122742f, 0.134399f, 0.146118f, 0.159058f, 0.173828f, 0.188599f,
+ 0.205444f, 0.223633f, 0.241943f, 0.262451f, 0.283203f, 0.304932f, 0.328369f, 0.352051f,
+ 0.376953f, 0.402100f, 0.428467f, 0.454834f, 0.481934f, 0.509766f, 0.537598f, 0.566406f,
+ 0.594238f, 0.622559f, 0.838867f, 0.852051f, 0.853516f, 0.853027f, 0.853027f, 0.852051f,
+ 0.000419f, 0.001721f, 0.003044f, 0.003881f, 0.005161f, 0.006329f, 0.007500f, 0.009117f,
+ 0.009941f, 0.011147f, 0.013023f, 0.014053f, 0.015869f, 0.017181f, 0.018906f, 0.020889f,
+ 0.023026f, 0.025085f, 0.027435f, 0.029724f, 0.032440f, 0.035492f, 0.038605f, 0.042175f,
+ 0.045898f, 0.049988f, 0.054504f, 0.059143f, 0.064697f, 0.070435f, 0.076721f, 0.083984f,
+ 0.091675f, 0.100037f, 0.109009f, 0.119629f, 0.130737f, 0.143066f, 0.156250f, 0.170654f,
+ 0.186157f, 0.202393f, 0.220825f, 0.239990f, 0.259521f, 0.281250f, 0.303467f, 0.327148f,
+ 0.351318f, 0.376953f, 0.402832f, 0.430664f, 0.458252f, 0.485596f, 0.514648f, 0.543457f,
+ 0.572754f, 0.602051f, 0.830566f, 0.844238f, 0.845703f, 0.845703f, 0.845703f, 0.845215f,
+ 0.000503f, 0.001644f, 0.002455f, 0.003765f, 0.004906f, 0.005901f, 0.006805f, 0.007744f,
+ 0.008789f, 0.009972f, 0.011314f, 0.012688f, 0.014160f, 0.015480f, 0.016953f, 0.018555f,
+ 0.020325f, 0.022232f, 0.024338f, 0.026535f, 0.028717f, 0.031403f, 0.034119f, 0.037384f,
+ 0.040680f, 0.044128f, 0.047943f, 0.052551f, 0.057098f, 0.062134f, 0.067871f, 0.074158f,
+ 0.081543f, 0.088684f, 0.097107f, 0.106262f, 0.116028f, 0.127563f, 0.139404f, 0.152344f,
+ 0.167358f, 0.182739f, 0.199951f, 0.217773f, 0.237427f, 0.257812f, 0.279541f, 0.303223f,
+ 0.327148f, 0.351807f, 0.377441f, 0.405518f, 0.433105f, 0.460449f, 0.491211f, 0.520020f,
+ 0.550293f, 0.581543f, 0.821777f, 0.835938f, 0.837891f, 0.838867f, 0.838867f, 0.837891f,
+ 0.000649f, 0.001432f, 0.002455f, 0.003469f, 0.004162f, 0.005192f, 0.006046f, 0.007053f,
+ 0.007919f, 0.009148f, 0.010185f, 0.011490f, 0.012558f, 0.013748f, 0.015083f, 0.016663f,
+ 0.018341f, 0.019897f, 0.021561f, 0.023376f, 0.025513f, 0.027725f, 0.030075f, 0.032745f,
+ 0.035583f, 0.038544f, 0.041901f, 0.045898f, 0.049896f, 0.054443f, 0.059784f, 0.065186f,
+ 0.071228f, 0.078247f, 0.085632f, 0.093872f, 0.103088f, 0.113098f, 0.123840f, 0.135986f,
+ 0.148682f, 0.163696f, 0.179321f, 0.196533f, 0.214722f, 0.234985f, 0.256104f, 0.278320f,
+ 0.302246f, 0.326660f, 0.352783f, 0.379395f, 0.406738f, 0.436279f, 0.465820f, 0.496338f,
+ 0.527344f, 0.559082f, 0.813477f, 0.827148f, 0.829590f, 0.830566f, 0.830566f, 0.829590f,
+ 0.000427f, 0.001431f, 0.002077f, 0.002947f, 0.004009f, 0.004860f, 0.005501f, 0.006416f,
+ 0.007008f, 0.008171f, 0.009155f, 0.010063f, 0.011154f, 0.012474f, 0.013336f, 0.014793f,
+ 0.016006f, 0.017471f, 0.019119f, 0.020630f, 0.022079f, 0.024078f, 0.026505f, 0.028687f,
+ 0.031128f, 0.033813f, 0.036804f, 0.040283f, 0.043732f, 0.047882f, 0.052094f, 0.057281f,
+ 0.062500f, 0.068726f, 0.075012f, 0.082581f, 0.090393f, 0.099487f, 0.109375f, 0.120728f,
+ 0.131958f, 0.145508f, 0.160278f, 0.176025f, 0.193848f, 0.212891f, 0.232788f, 0.253906f,
+ 0.277344f, 0.302002f, 0.327637f, 0.354248f, 0.382080f, 0.411621f, 0.441162f, 0.472656f,
+ 0.504395f, 0.536621f, 0.803223f, 0.818359f, 0.821777f, 0.821777f, 0.822266f, 0.821777f,
+ 0.000574f, 0.001416f, 0.001961f, 0.002621f, 0.003527f, 0.004250f, 0.004894f, 0.005653f,
+ 0.006340f, 0.007263f, 0.008255f, 0.008965f, 0.009819f, 0.010857f, 0.011864f, 0.012917f,
+ 0.014114f, 0.015358f, 0.016678f, 0.018005f, 0.019669f, 0.021347f, 0.023239f, 0.025070f,
+ 0.027267f, 0.029434f, 0.032318f, 0.035156f, 0.038269f, 0.041534f, 0.045624f, 0.049469f,
+ 0.054321f, 0.059479f, 0.065369f, 0.071655f, 0.078857f, 0.086853f, 0.095886f, 0.105652f,
+ 0.116943f, 0.128662f, 0.142090f, 0.156860f, 0.173096f, 0.190918f, 0.210327f, 0.231201f,
+ 0.253418f, 0.277100f, 0.302490f, 0.328369f, 0.356445f, 0.385254f, 0.415771f, 0.446533f,
+ 0.479736f, 0.513184f, 0.794434f, 0.810547f, 0.812500f, 0.813477f, 0.812988f, 0.813477f,
+ 0.000417f, 0.001152f, 0.002066f, 0.002480f, 0.003115f, 0.003778f, 0.004543f, 0.005001f,
+ 0.005936f, 0.006420f, 0.007130f, 0.007881f, 0.008789f, 0.009666f, 0.010605f, 0.011276f,
+ 0.012352f, 0.013367f, 0.014626f, 0.015732f, 0.017090f, 0.018509f, 0.020096f, 0.021759f,
+ 0.023895f, 0.025681f, 0.027740f, 0.030121f, 0.032776f, 0.036011f, 0.039276f, 0.042694f,
+ 0.046906f, 0.051575f, 0.056488f, 0.061951f, 0.068481f, 0.075684f, 0.083191f, 0.092102f,
+ 0.101990f, 0.112915f, 0.125122f, 0.138672f, 0.153564f, 0.170410f, 0.188477f, 0.208008f,
+ 0.229980f, 0.252441f, 0.276855f, 0.303711f, 0.331055f, 0.360596f, 0.391357f, 0.422607f,
+ 0.456299f, 0.490234f, 0.783203f, 0.799805f, 0.803223f, 0.804688f, 0.804199f, 0.805176f,
+ 0.000422f, 0.000885f, 0.001743f, 0.002075f, 0.002930f, 0.003460f, 0.004105f, 0.004696f,
+ 0.005257f, 0.005753f, 0.006550f, 0.006916f, 0.007805f, 0.008308f, 0.009109f, 0.010056f,
+ 0.010918f, 0.011627f, 0.012787f, 0.013725f, 0.014732f, 0.016113f, 0.017319f, 0.018906f,
+ 0.020264f, 0.022324f, 0.023911f, 0.026230f, 0.028183f, 0.030884f, 0.033661f, 0.036865f,
+ 0.040314f, 0.044189f, 0.048615f, 0.053284f, 0.058838f, 0.065491f, 0.072205f, 0.079651f,
+ 0.088379f, 0.098389f, 0.109314f, 0.121765f, 0.135010f, 0.150513f, 0.167358f, 0.186035f,
+ 0.206543f, 0.228516f, 0.252197f, 0.278320f, 0.305176f, 0.333496f, 0.364746f, 0.396973f,
+ 0.430176f, 0.465820f, 0.772949f, 0.790527f, 0.794434f, 0.794922f, 0.795410f, 0.794922f,
+ 0.000211f, 0.000970f, 0.001484f, 0.002035f, 0.002586f, 0.003040f, 0.003540f, 0.004086f,
+ 0.004696f, 0.005016f, 0.005508f, 0.006100f, 0.006763f, 0.007401f, 0.008011f, 0.008675f,
+ 0.009247f, 0.010071f, 0.011009f, 0.011940f, 0.012802f, 0.013870f, 0.014771f, 0.016281f,
+ 0.017487f, 0.018890f, 0.020584f, 0.022171f, 0.024200f, 0.026505f, 0.028870f, 0.031372f,
+ 0.034363f, 0.037659f, 0.041412f, 0.045685f, 0.050262f, 0.055664f, 0.061768f, 0.068359f,
+ 0.076172f, 0.084717f, 0.094666f, 0.105835f, 0.117798f, 0.131958f, 0.147095f, 0.164795f,
+ 0.184326f, 0.204956f, 0.228271f, 0.253174f, 0.279785f, 0.307861f, 0.338379f, 0.370361f,
+ 0.404785f, 0.440430f, 0.761230f, 0.780273f, 0.783691f, 0.785645f, 0.786133f, 0.785156f,
+ 0.000281f, 0.000954f, 0.001275f, 0.001745f, 0.002159f, 0.002810f, 0.003002f, 0.003622f,
+ 0.003918f, 0.004471f, 0.004776f, 0.005352f, 0.005852f, 0.006298f, 0.006989f, 0.007339f,
+ 0.008087f, 0.008698f, 0.009499f, 0.010208f, 0.010986f, 0.011871f, 0.012802f, 0.013809f,
+ 0.014923f, 0.016129f, 0.017624f, 0.018753f, 0.020645f, 0.022156f, 0.024399f, 0.026382f,
+ 0.029037f, 0.031769f, 0.034851f, 0.038513f, 0.042542f, 0.047180f, 0.052063f, 0.058136f,
+ 0.064819f, 0.072205f, 0.080933f, 0.090698f, 0.101685f, 0.114441f, 0.128784f, 0.144287f,
+ 0.162476f, 0.182617f, 0.203979f, 0.228149f, 0.253906f, 0.282227f, 0.312744f, 0.344482f,
+ 0.378418f, 0.415039f, 0.749023f, 0.770020f, 0.773438f, 0.774902f, 0.775391f, 0.776367f,
+ 0.000200f, 0.000790f, 0.001209f, 0.001475f, 0.002022f, 0.002375f, 0.002754f, 0.003136f,
+ 0.003532f, 0.003851f, 0.004253f, 0.004719f, 0.004864f, 0.005455f, 0.005749f, 0.006435f,
+ 0.007053f, 0.007557f, 0.007988f, 0.008614f, 0.009216f, 0.010101f, 0.010712f, 0.011604f,
+ 0.012596f, 0.013588f, 0.014877f, 0.016052f, 0.017334f, 0.018753f, 0.020401f, 0.022415f,
+ 0.024338f, 0.026642f, 0.029282f, 0.032196f, 0.035461f, 0.039215f, 0.043854f, 0.048706f,
+ 0.054413f, 0.060913f, 0.068237f, 0.076965f, 0.086792f, 0.097961f, 0.110657f, 0.125488f,
+ 0.141846f, 0.160278f, 0.180542f, 0.203857f, 0.229004f, 0.256348f, 0.286133f, 0.317627f,
+ 0.351807f, 0.388184f, 0.737305f, 0.757812f, 0.762695f, 0.763672f, 0.764160f, 0.764648f,
+ 0.000214f, 0.000700f, 0.001134f, 0.001480f, 0.001724f, 0.002056f, 0.002468f, 0.002672f,
+ 0.003069f, 0.003412f, 0.003618f, 0.003883f, 0.004265f, 0.004627f, 0.004971f, 0.005508f,
+ 0.005817f, 0.006397f, 0.006866f, 0.007244f, 0.007812f, 0.008446f, 0.009003f, 0.009872f,
+ 0.010544f, 0.011345f, 0.012375f, 0.013321f, 0.014275f, 0.015587f, 0.017075f, 0.018372f,
+ 0.020050f, 0.022186f, 0.024246f, 0.026596f, 0.029388f, 0.032562f, 0.036285f, 0.040344f,
+ 0.045197f, 0.050568f, 0.056946f, 0.064514f, 0.072876f, 0.082886f, 0.093933f, 0.107056f,
+ 0.122070f, 0.139404f, 0.158325f, 0.180176f, 0.204590f, 0.231201f, 0.260010f, 0.290771f,
+ 0.325195f, 0.361816f, 0.726074f, 0.747070f, 0.751465f, 0.753418f, 0.753906f, 0.754395f,
+ 0.000187f, 0.000637f, 0.001095f, 0.001133f, 0.001488f, 0.001872f, 0.002007f, 0.002253f,
+ 0.002590f, 0.002880f, 0.003010f, 0.003420f, 0.003593f, 0.003914f, 0.004322f, 0.004650f,
+ 0.005051f, 0.005424f, 0.005733f, 0.006134f, 0.006683f, 0.007183f, 0.007671f, 0.008072f,
+ 0.008720f, 0.009483f, 0.010201f, 0.011070f, 0.011871f, 0.012863f, 0.013924f, 0.015167f,
+ 0.016434f, 0.018143f, 0.019669f, 0.021851f, 0.024109f, 0.026749f, 0.029587f, 0.033020f,
+ 0.037109f, 0.041718f, 0.047119f, 0.053192f, 0.060516f, 0.068848f, 0.078857f, 0.090149f,
+ 0.104004f, 0.119202f, 0.136841f, 0.157471f, 0.180420f, 0.205322f, 0.234009f, 0.264648f,
+ 0.297852f, 0.335449f, 0.711914f, 0.735352f, 0.740234f, 0.741211f, 0.742676f, 0.742676f,
+ 0.000201f, 0.000676f, 0.000884f, 0.001044f, 0.001369f, 0.001633f, 0.001786f, 0.002001f,
+ 0.002237f, 0.002460f, 0.002680f, 0.002777f, 0.003117f, 0.003408f, 0.003632f, 0.003910f,
+ 0.004211f, 0.004375f, 0.004772f, 0.005226f, 0.005520f, 0.005909f, 0.006302f, 0.006882f,
+ 0.007385f, 0.007858f, 0.008553f, 0.008919f, 0.009827f, 0.010582f, 0.011398f, 0.012520f,
+ 0.013611f, 0.014725f, 0.016190f, 0.017593f, 0.019424f, 0.021622f, 0.023941f, 0.026703f,
+ 0.029938f, 0.033539f, 0.038055f, 0.043243f, 0.049408f, 0.056519f, 0.065002f, 0.074951f,
+ 0.086548f, 0.100403f, 0.116394f, 0.135132f, 0.156860f, 0.181030f, 0.208252f, 0.238281f,
+ 0.271240f, 0.307861f, 0.698730f, 0.722656f, 0.727539f, 0.729980f, 0.730957f, 0.730469f,
+ 0.000185f, 0.000371f, 0.000784f, 0.001028f, 0.001153f, 0.001304f, 0.001567f, 0.001792f,
+ 0.001790f, 0.002028f, 0.002283f, 0.002424f, 0.002640f, 0.002764f, 0.003044f, 0.003313f,
+ 0.003445f, 0.003748f, 0.004044f, 0.004337f, 0.004677f, 0.004879f, 0.005207f, 0.005661f,
+ 0.006027f, 0.006481f, 0.006870f, 0.007454f, 0.007874f, 0.008583f, 0.009239f, 0.009880f,
+ 0.010849f, 0.011871f, 0.012833f, 0.014153f, 0.015656f, 0.017151f, 0.018967f, 0.021118f,
+ 0.023621f, 0.026703f, 0.030197f, 0.034576f, 0.039368f, 0.045441f, 0.052460f, 0.061157f,
+ 0.070862f, 0.083069f, 0.097290f, 0.114441f, 0.134155f, 0.157104f, 0.182983f, 0.212158f,
+ 0.244507f, 0.281250f, 0.684570f, 0.710449f, 0.715332f, 0.717285f, 0.717773f, 0.718750f,
+ 0.000109f, 0.000455f, 0.000558f, 0.000757f, 0.000986f, 0.001166f, 0.001298f, 0.001310f,
+ 0.001566f, 0.001614f, 0.001852f, 0.001933f, 0.002062f, 0.002327f, 0.002571f, 0.002699f,
+ 0.002909f, 0.003057f, 0.003254f, 0.003496f, 0.003643f, 0.004066f, 0.004295f, 0.004665f,
+ 0.004822f, 0.005161f, 0.005722f, 0.006008f, 0.006424f, 0.006897f, 0.007435f, 0.008049f,
+ 0.008789f, 0.009529f, 0.010284f, 0.011177f, 0.012321f, 0.013466f, 0.014885f, 0.016586f,
+ 0.018417f, 0.020844f, 0.023575f, 0.026810f, 0.030655f, 0.035400f, 0.041412f, 0.048462f,
+ 0.056976f, 0.067322f, 0.079712f, 0.094543f, 0.112610f, 0.133789f, 0.158691f, 0.186279f,
+ 0.217896f, 0.253418f, 0.670898f, 0.696777f, 0.702148f, 0.704590f, 0.705078f, 0.705566f,
+ 0.000000f, 0.000317f, 0.000556f, 0.000619f, 0.000759f, 0.000889f, 0.001012f, 0.001163f,
+ 0.001282f, 0.001353f, 0.001531f, 0.001621f, 0.001681f, 0.001862f, 0.001976f, 0.002140f,
+ 0.002392f, 0.002502f, 0.002745f, 0.002838f, 0.003019f, 0.003311f, 0.003477f, 0.003639f,
+ 0.003889f, 0.004166f, 0.004429f, 0.004784f, 0.005119f, 0.005547f, 0.006042f, 0.006317f,
+ 0.006901f, 0.007442f, 0.008110f, 0.008751f, 0.009583f, 0.010590f, 0.011566f, 0.012894f,
+ 0.014404f, 0.015930f, 0.018158f, 0.020569f, 0.023697f, 0.027374f, 0.031830f, 0.037567f,
+ 0.044434f, 0.053009f, 0.063599f, 0.076538f, 0.092346f, 0.111511f, 0.134521f, 0.161133f,
+ 0.191772f, 0.227173f, 0.654297f, 0.684082f, 0.687988f, 0.690918f, 0.691895f, 0.691895f,
+ 0.000000f, 0.000275f, 0.000368f, 0.000572f, 0.000683f, 0.000731f, 0.000877f, 0.000979f,
+ 0.001039f, 0.001091f, 0.001234f, 0.001332f, 0.001447f, 0.001547f, 0.001601f, 0.001760f,
+ 0.001790f, 0.002007f, 0.002119f, 0.002245f, 0.002493f, 0.002565f, 0.002747f, 0.002920f,
+ 0.003168f, 0.003235f, 0.003551f, 0.003830f, 0.004040f, 0.004368f, 0.004658f, 0.005001f,
+ 0.005337f, 0.005798f, 0.006287f, 0.006794f, 0.007488f, 0.008087f, 0.008865f, 0.009773f,
+ 0.010963f, 0.012199f, 0.013649f, 0.015610f, 0.017822f, 0.020493f, 0.023849f, 0.028320f,
+ 0.033752f, 0.040466f, 0.049377f, 0.060028f, 0.073853f, 0.090698f, 0.111572f, 0.136841f,
+ 0.166016f, 0.199341f, 0.640137f, 0.667969f, 0.675781f, 0.676758f, 0.678223f, 0.678223f,
+ 0.000017f, 0.000193f, 0.000383f, 0.000487f, 0.000586f, 0.000597f, 0.000618f, 0.000733f,
+ 0.000826f, 0.000863f, 0.000902f, 0.001037f, 0.001121f, 0.001244f, 0.001342f, 0.001329f,
+ 0.001514f, 0.001506f, 0.001719f, 0.001793f, 0.001851f, 0.002016f, 0.002182f, 0.002281f,
+ 0.002432f, 0.002554f, 0.002708f, 0.002859f, 0.003168f, 0.003344f, 0.003563f, 0.003845f,
+ 0.004158f, 0.004478f, 0.004852f, 0.005154f, 0.005714f, 0.006207f, 0.006752f, 0.007370f,
+ 0.008186f, 0.009155f, 0.010193f, 0.011490f, 0.013016f, 0.015144f, 0.017517f, 0.020752f,
+ 0.024811f, 0.029922f, 0.036835f, 0.045593f, 0.056946f, 0.071533f, 0.090576f, 0.113159f,
+ 0.140991f, 0.173340f, 0.624023f, 0.653809f, 0.660156f, 0.663574f, 0.664551f, 0.664062f,
+ 0.000194f, 0.000227f, 0.000316f, 0.000451f, 0.000449f, 0.000482f, 0.000610f, 0.000511f,
+ 0.000654f, 0.000673f, 0.000804f, 0.000844f, 0.000880f, 0.000955f, 0.000961f, 0.001127f,
+ 0.001169f, 0.001210f, 0.001318f, 0.001330f, 0.001507f, 0.001592f, 0.001657f, 0.001771f,
+ 0.001839f, 0.001953f, 0.002083f, 0.002214f, 0.002399f, 0.002518f, 0.002815f, 0.002882f,
+ 0.003132f, 0.003361f, 0.003605f, 0.003925f, 0.004177f, 0.004528f, 0.004963f, 0.005527f,
+ 0.006027f, 0.006783f, 0.007381f, 0.008469f, 0.009644f, 0.010849f, 0.012772f, 0.014748f,
+ 0.017578f, 0.021332f, 0.026367f, 0.033142f, 0.042389f, 0.054413f, 0.070129f, 0.091064f,
+ 0.116943f, 0.147339f, 0.608887f, 0.640137f, 0.645996f, 0.647461f, 0.650391f, 0.651367f,
+ 0.000166f, 0.000146f, 0.000248f, 0.000320f, 0.000288f, 0.000446f, 0.000375f, 0.000407f,
+ 0.000468f, 0.000514f, 0.000629f, 0.000638f, 0.000681f, 0.000773f, 0.000806f, 0.000766f,
+ 0.000883f, 0.000927f, 0.000959f, 0.001036f, 0.001097f, 0.001172f, 0.001224f, 0.001297f,
+ 0.001392f, 0.001425f, 0.001592f, 0.001631f, 0.001793f, 0.001965f, 0.002089f, 0.002157f,
+ 0.002321f, 0.002495f, 0.002680f, 0.002874f, 0.003054f, 0.003305f, 0.003632f, 0.003902f,
+ 0.004314f, 0.004753f, 0.005306f, 0.005901f, 0.006828f, 0.007645f, 0.008896f, 0.010323f,
+ 0.012283f, 0.014816f, 0.018234f, 0.023010f, 0.029678f, 0.039276f, 0.052307f, 0.070190f,
+ 0.093811f, 0.123474f, 0.591797f, 0.623535f, 0.631348f, 0.633301f, 0.634766f, 0.635254f,
+ 0.000000f, 0.000154f, 0.000184f, 0.000257f, 0.000265f, 0.000266f, 0.000323f, 0.000291f,
+ 0.000369f, 0.000384f, 0.000450f, 0.000472f, 0.000505f, 0.000572f, 0.000577f, 0.000604f,
+ 0.000636f, 0.000675f, 0.000699f, 0.000736f, 0.000787f, 0.000840f, 0.000890f, 0.000945f,
+ 0.000988f, 0.001039f, 0.001165f, 0.001165f, 0.001266f, 0.001318f, 0.001410f, 0.001550f,
+ 0.001618f, 0.001743f, 0.001866f, 0.001997f, 0.002151f, 0.002319f, 0.002562f, 0.002779f,
+ 0.002975f, 0.003298f, 0.003674f, 0.004131f, 0.004604f, 0.005268f, 0.006065f, 0.007027f,
+ 0.008316f, 0.009949f, 0.012390f, 0.015526f, 0.019852f, 0.026733f, 0.036682f, 0.051666f,
+ 0.072449f, 0.099792f, 0.574707f, 0.608398f, 0.614746f, 0.618164f, 0.619629f, 0.621094f,
+ 0.000000f, 0.000008f, 0.000146f, 0.000181f, 0.000203f, 0.000243f, 0.000206f, 0.000250f,
+ 0.000257f, 0.000283f, 0.000335f, 0.000293f, 0.000304f, 0.000368f, 0.000373f, 0.000435f,
+ 0.000418f, 0.000468f, 0.000539f, 0.000540f, 0.000564f, 0.000598f, 0.000628f, 0.000657f,
+ 0.000716f, 0.000724f, 0.000797f, 0.000807f, 0.000883f, 0.001002f, 0.000974f, 0.001037f,
+ 0.001104f, 0.001196f, 0.001316f, 0.001394f, 0.001445f, 0.001574f, 0.001746f, 0.001829f,
+ 0.002005f, 0.002222f, 0.002401f, 0.002699f, 0.003057f, 0.003372f, 0.003874f, 0.004505f,
+ 0.005360f, 0.006500f, 0.007927f, 0.009972f, 0.012878f, 0.017258f, 0.024155f, 0.035339f,
+ 0.052795f, 0.077637f, 0.558105f, 0.592285f, 0.600586f, 0.602539f, 0.604004f, 0.605469f,
+ 0.000000f, 0.000107f, 0.000122f, 0.000093f, 0.000133f, 0.000142f, 0.000149f, 0.000174f,
+ 0.000174f, 0.000184f, 0.000190f, 0.000234f, 0.000214f, 0.000250f, 0.000273f, 0.000286f,
+ 0.000292f, 0.000302f, 0.000329f, 0.000336f, 0.000366f, 0.000391f, 0.000408f, 0.000444f,
+ 0.000452f, 0.000495f, 0.000531f, 0.000559f, 0.000578f, 0.000611f, 0.000659f, 0.000675f,
+ 0.000757f, 0.000771f, 0.000854f, 0.000906f, 0.000957f, 0.001004f, 0.001102f, 0.001187f,
+ 0.001267f, 0.001394f, 0.001546f, 0.001683f, 0.001922f, 0.002094f, 0.002420f, 0.002754f,
+ 0.003254f, 0.003878f, 0.004757f, 0.005997f, 0.007812f, 0.010544f, 0.014786f, 0.022324f,
+ 0.035522f, 0.057465f, 0.541504f, 0.576172f, 0.583984f, 0.585938f, 0.588379f, 0.590332f,
+ 0.000000f, 0.000099f, 0.000091f, 0.000084f, 0.000084f, 0.000086f, 0.000089f, 0.000101f,
+ 0.000105f, 0.000109f, 0.000122f, 0.000124f, 0.000132f, 0.000146f, 0.000171f, 0.000172f,
+ 0.000176f, 0.000198f, 0.000197f, 0.000239f, 0.000218f, 0.000235f, 0.000240f, 0.000281f,
+ 0.000309f, 0.000301f, 0.000312f, 0.000321f, 0.000347f, 0.000370f, 0.000387f, 0.000419f,
+ 0.000444f, 0.000458f, 0.000513f, 0.000536f, 0.000570f, 0.000607f, 0.000688f, 0.000703f,
+ 0.000754f, 0.000834f, 0.000890f, 0.000997f, 0.001100f, 0.001238f, 0.001410f, 0.001584f,
+ 0.001859f, 0.002207f, 0.002665f, 0.003323f, 0.004353f, 0.005947f, 0.008492f, 0.012909f,
+ 0.021606f, 0.039368f, 0.522461f, 0.559082f, 0.566406f, 0.569824f, 0.572266f, 0.572754f,
+ 0.000108f, 0.000089f, 0.000079f, 0.000072f, 0.000068f, 0.000065f, 0.000061f, 0.000057f,
+ 0.000061f, 0.000062f, 0.000063f, 0.000086f, 0.000070f, 0.000071f, 0.000095f, 0.000080f,
+ 0.000107f, 0.000113f, 0.000115f, 0.000124f, 0.000121f, 0.000130f, 0.000151f, 0.000154f,
+ 0.000164f, 0.000170f, 0.000176f, 0.000189f, 0.000193f, 0.000215f, 0.000211f, 0.000242f,
+ 0.000252f, 0.000260f, 0.000280f, 0.000293f, 0.000312f, 0.000350f, 0.000359f, 0.000389f,
+ 0.000410f, 0.000452f, 0.000481f, 0.000535f, 0.000578f, 0.000643f, 0.000718f, 0.000812f,
+ 0.000939f, 0.001107f, 0.001329f, 0.001644f, 0.002155f, 0.002930f, 0.004284f, 0.006706f,
+ 0.011452f, 0.023895f, 0.504395f, 0.542480f, 0.550293f, 0.553711f, 0.555664f, 0.557129f,
+ 0.000093f, 0.000072f, 0.000063f, 0.000058f, 0.000053f, 0.000050f, 0.000047f, 0.000046f,
+ 0.000044f, 0.000042f, 0.000039f, 0.000037f, 0.000042f, 0.000035f, 0.000036f, 0.000037f,
+ 0.000051f, 0.000046f, 0.000057f, 0.000058f, 0.000061f, 0.000062f, 0.000066f, 0.000069f,
+ 0.000072f, 0.000087f, 0.000077f, 0.000088f, 0.000093f, 0.000099f, 0.000103f, 0.000109f,
+ 0.000115f, 0.000122f, 0.000139f, 0.000134f, 0.000142f, 0.000170f, 0.000175f, 0.000179f,
+ 0.000192f, 0.000203f, 0.000228f, 0.000245f, 0.000265f, 0.000291f, 0.000326f, 0.000360f,
+ 0.000420f, 0.000481f, 0.000574f, 0.000686f, 0.000887f, 0.001203f, 0.001759f, 0.002892f,
+ 0.005318f, 0.011955f, 0.487305f, 0.524902f, 0.534180f, 0.538086f, 0.539551f, 0.540527f,
+ 0.000066f, 0.000049f, 0.000041f, 0.000037f, 0.000034f, 0.000033f, 0.000032f, 0.000030f,
+ 0.000029f, 0.000028f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f,
+ 0.000022f, 0.000021f, 0.000022f, 0.000023f, 0.000019f, 0.000018f, 0.000019f, 0.000024f,
+ 0.000026f, 0.000029f, 0.000032f, 0.000032f, 0.000036f, 0.000034f, 0.000040f, 0.000041f,
+ 0.000043f, 0.000049f, 0.000049f, 0.000050f, 0.000056f, 0.000059f, 0.000067f, 0.000067f,
+ 0.000074f, 0.000078f, 0.000082f, 0.000092f, 0.000094f, 0.000103f, 0.000120f, 0.000130f,
+ 0.000141f, 0.000163f, 0.000191f, 0.000230f, 0.000286f, 0.000374f, 0.000543f, 0.000890f,
+ 0.001802f, 0.004650f, 0.468994f, 0.507812f, 0.516602f, 0.520508f, 0.522461f, 0.523926f,
+ 0.000007f, 0.000008f, 0.000008f, 0.000008f, 0.000011f, 0.000010f, 0.000010f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000012f,
+ 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
+ 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000009f, 0.000009f,
+ 0.000009f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000014f, 0.000013f, 0.000016f,
+ 0.000015f, 0.000018f, 0.000020f, 0.000021f, 0.000022f, 0.000025f, 0.000024f, 0.000025f,
+ 0.000030f, 0.000031f, 0.000040f, 0.000046f, 0.000052f, 0.000071f, 0.000099f, 0.000147f,
+ 0.000306f, 0.001072f, 0.450439f, 0.491211f, 0.499756f, 0.503418f, 0.505859f, 0.507324f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f,
+ 0.000007f, 0.000024f, 0.432129f, 0.474121f, 0.482666f, 0.486572f, 0.489014f, 0.490234f,
+ },
+ {
+ 0.027573f, 0.080750f, 0.130981f, 0.177734f, 0.222290f, 0.263672f, 0.302002f, 0.338623f,
+ 0.373291f, 0.405029f, 0.435791f, 0.464111f, 0.490967f, 0.516602f, 0.540039f, 0.563477f,
+ 0.584961f, 0.605469f, 0.625000f, 0.644043f, 0.660645f, 0.677246f, 0.693848f, 0.708496f,
+ 0.724121f, 0.738281f, 0.751465f, 0.764648f, 0.776855f, 0.789062f, 0.799805f, 0.810547f,
+ 0.821289f, 0.831055f, 0.840820f, 0.850098f, 0.859863f, 0.867676f, 0.876953f, 0.884277f,
+ 0.892578f, 0.900391f, 0.907227f, 0.914551f, 0.921875f, 0.928223f, 0.934082f, 0.940430f,
+ 0.946777f, 0.952637f, 0.957520f, 0.964355f, 0.968262f, 0.974121f, 0.979004f, 0.983887f,
+ 0.989258f, 0.994141f, 0.993164f, 0.983398f, 0.976074f, 0.969238f, 0.962891f, 0.957031f,
+ 0.022873f, 0.067871f, 0.111511f, 0.153809f, 0.193359f, 0.232788f, 0.268799f, 0.303223f,
+ 0.337402f, 0.368652f, 0.399414f, 0.427734f, 0.455078f, 0.481201f, 0.506348f, 0.529785f,
+ 0.552246f, 0.573242f, 0.593750f, 0.613281f, 0.632324f, 0.650391f, 0.667480f, 0.683105f,
+ 0.698730f, 0.713867f, 0.728516f, 0.741211f, 0.755371f, 0.767578f, 0.779785f, 0.791504f,
+ 0.803223f, 0.813477f, 0.823242f, 0.834473f, 0.843750f, 0.853027f, 0.861816f, 0.870605f,
+ 0.878906f, 0.887695f, 0.895996f, 0.901855f, 0.910645f, 0.917480f, 0.923828f, 0.930176f,
+ 0.937012f, 0.943359f, 0.949707f, 0.955078f, 0.960938f, 0.966797f, 0.972656f, 0.977051f,
+ 0.982422f, 0.987305f, 0.989746f, 0.981445f, 0.973633f, 0.967773f, 0.961426f, 0.956055f,
+ 0.019089f, 0.057007f, 0.095215f, 0.132202f, 0.168823f, 0.204712f, 0.238281f, 0.272217f,
+ 0.304688f, 0.334717f, 0.364502f, 0.392822f, 0.420898f, 0.446533f, 0.471924f, 0.495850f,
+ 0.518555f, 0.541992f, 0.562988f, 0.582520f, 0.602539f, 0.621094f, 0.639160f, 0.655762f,
+ 0.672852f, 0.687988f, 0.703613f, 0.718262f, 0.732422f, 0.746094f, 0.758789f, 0.771484f,
+ 0.783203f, 0.795898f, 0.807129f, 0.817383f, 0.827637f, 0.837402f, 0.846680f, 0.856445f,
+ 0.865234f, 0.874023f, 0.882324f, 0.890137f, 0.898438f, 0.905273f, 0.913574f, 0.920410f,
+ 0.927246f, 0.934082f, 0.940918f, 0.946777f, 0.953125f, 0.958496f, 0.964844f, 0.969727f,
+ 0.975586f, 0.980957f, 0.986816f, 0.979004f, 0.971680f, 0.965332f, 0.959961f, 0.954590f,
+ 0.016327f, 0.048676f, 0.081787f, 0.114807f, 0.147705f, 0.180176f, 0.211426f, 0.243652f,
+ 0.273438f, 0.303223f, 0.332031f, 0.360107f, 0.386963f, 0.412598f, 0.438477f, 0.462891f,
+ 0.487305f, 0.510254f, 0.530762f, 0.552246f, 0.572754f, 0.590820f, 0.610352f, 0.629883f,
+ 0.647461f, 0.662598f, 0.679688f, 0.693848f, 0.709961f, 0.723633f, 0.737305f, 0.750977f,
+ 0.763672f, 0.776367f, 0.788086f, 0.799316f, 0.810059f, 0.820801f, 0.832031f, 0.841309f,
+ 0.851074f, 0.860352f, 0.868652f, 0.877930f, 0.886230f, 0.894531f, 0.902832f, 0.910156f,
+ 0.916504f, 0.924316f, 0.930664f, 0.937500f, 0.943848f, 0.950684f, 0.957031f, 0.962891f,
+ 0.968262f, 0.974121f, 0.983887f, 0.976074f, 0.969727f, 0.963867f, 0.958496f, 0.953125f,
+ 0.013573f, 0.041901f, 0.070801f, 0.100098f, 0.129517f, 0.159058f, 0.187866f, 0.217041f,
+ 0.246216f, 0.274414f, 0.302002f, 0.328857f, 0.354980f, 0.381592f, 0.406738f, 0.431641f,
+ 0.455322f, 0.478271f, 0.500000f, 0.521484f, 0.541992f, 0.563477f, 0.583008f, 0.600098f,
+ 0.619141f, 0.636719f, 0.653320f, 0.671387f, 0.684570f, 0.699707f, 0.715332f, 0.729492f,
+ 0.743164f, 0.755371f, 0.768555f, 0.780762f, 0.792480f, 0.804199f, 0.814453f, 0.824707f,
+ 0.835449f, 0.845215f, 0.854980f, 0.864746f, 0.874023f, 0.882812f, 0.890137f, 0.898438f,
+ 0.905762f, 0.914062f, 0.921387f, 0.928223f, 0.935059f, 0.941406f, 0.948242f, 0.955078f,
+ 0.961426f, 0.966797f, 0.980957f, 0.973633f, 0.967773f, 0.961914f, 0.956543f, 0.951660f,
+ 0.011681f, 0.036316f, 0.061584f, 0.087524f, 0.113342f, 0.140259f, 0.167358f, 0.194214f,
+ 0.220947f, 0.247437f, 0.273926f, 0.300537f, 0.325684f, 0.351074f, 0.375732f, 0.400146f,
+ 0.423828f, 0.446533f, 0.469482f, 0.491943f, 0.512695f, 0.532715f, 0.553223f, 0.573242f,
+ 0.592285f, 0.609863f, 0.627930f, 0.644531f, 0.660156f, 0.676758f, 0.691406f, 0.706055f,
+ 0.720215f, 0.734863f, 0.749023f, 0.762207f, 0.774414f, 0.786133f, 0.797852f, 0.809082f,
+ 0.820801f, 0.831055f, 0.840332f, 0.850098f, 0.859863f, 0.869629f, 0.878418f, 0.886719f,
+ 0.895508f, 0.903809f, 0.910645f, 0.918945f, 0.925781f, 0.932617f, 0.939453f, 0.947754f,
+ 0.953613f, 0.958984f, 0.977539f, 0.970703f, 0.964844f, 0.959473f, 0.954102f, 0.949707f,
+ 0.010330f, 0.031525f, 0.053406f, 0.076538f, 0.100159f, 0.124084f, 0.148193f, 0.173096f,
+ 0.197998f, 0.223267f, 0.247681f, 0.273193f, 0.297607f, 0.322021f, 0.346924f, 0.370117f,
+ 0.394043f, 0.417236f, 0.439697f, 0.462158f, 0.483887f, 0.504883f, 0.524902f, 0.545410f,
+ 0.563477f, 0.583008f, 0.602539f, 0.618652f, 0.636230f, 0.652344f, 0.669922f, 0.685059f,
+ 0.699219f, 0.714355f, 0.729004f, 0.741211f, 0.755371f, 0.767578f, 0.780762f, 0.792480f,
+ 0.803711f, 0.815918f, 0.825195f, 0.836914f, 0.846191f, 0.855957f, 0.864746f, 0.874512f,
+ 0.883301f, 0.891602f, 0.900391f, 0.908203f, 0.916016f, 0.923828f, 0.931152f, 0.937988f,
+ 0.945801f, 0.952148f, 0.974121f, 0.967773f, 0.962891f, 0.957520f, 0.952637f, 0.947754f,
+ 0.009186f, 0.027359f, 0.047302f, 0.067505f, 0.088806f, 0.109924f, 0.132202f, 0.154907f,
+ 0.177246f, 0.201050f, 0.224121f, 0.247925f, 0.271240f, 0.295410f, 0.318359f, 0.341797f,
+ 0.365234f, 0.387939f, 0.410156f, 0.432861f, 0.454590f, 0.475586f, 0.495850f, 0.517090f,
+ 0.536621f, 0.556152f, 0.575195f, 0.592773f, 0.609863f, 0.628418f, 0.645020f, 0.661133f,
+ 0.677246f, 0.692383f, 0.707520f, 0.721191f, 0.735352f, 0.748047f, 0.762207f, 0.774414f,
+ 0.786621f, 0.798828f, 0.810547f, 0.820801f, 0.831543f, 0.842285f, 0.852539f, 0.862305f,
+ 0.871094f, 0.880859f, 0.889648f, 0.898438f, 0.906738f, 0.914551f, 0.921875f, 0.929199f,
+ 0.936035f, 0.944824f, 0.971191f, 0.965332f, 0.959473f, 0.955078f, 0.950195f, 0.945801f,
+ 0.008041f, 0.024384f, 0.041321f, 0.059631f, 0.078003f, 0.097656f, 0.117554f, 0.138428f,
+ 0.159912f, 0.181152f, 0.203003f, 0.224976f, 0.247070f, 0.269531f, 0.292480f, 0.314697f,
+ 0.337891f, 0.360352f, 0.382324f, 0.403809f, 0.426025f, 0.447998f, 0.468018f, 0.488770f,
+ 0.508301f, 0.528320f, 0.547852f, 0.567383f, 0.585449f, 0.603516f, 0.620605f, 0.637695f,
+ 0.654297f, 0.670410f, 0.686523f, 0.700195f, 0.715820f, 0.729980f, 0.743164f, 0.756836f,
+ 0.769531f, 0.782715f, 0.794434f, 0.805664f, 0.816895f, 0.827637f, 0.838379f, 0.848633f,
+ 0.859375f, 0.868164f, 0.877930f, 0.887695f, 0.895996f, 0.905273f, 0.912598f, 0.920898f,
+ 0.928711f, 0.936035f, 0.966797f, 0.962402f, 0.957031f, 0.952637f, 0.947754f, 0.943848f,
+ 0.007095f, 0.021515f, 0.036926f, 0.052704f, 0.069641f, 0.087463f, 0.105347f, 0.123413f,
+ 0.143188f, 0.163452f, 0.183105f, 0.204102f, 0.225220f, 0.246704f, 0.268066f, 0.290283f,
+ 0.311768f, 0.333740f, 0.355225f, 0.376465f, 0.397949f, 0.419434f, 0.440430f, 0.461670f,
+ 0.481445f, 0.500977f, 0.520020f, 0.540527f, 0.559570f, 0.578125f, 0.595703f, 0.613770f,
+ 0.630371f, 0.646973f, 0.663086f, 0.678223f, 0.694336f, 0.709473f, 0.723145f, 0.736328f,
+ 0.750000f, 0.764648f, 0.777344f, 0.790039f, 0.801270f, 0.812988f, 0.824707f, 0.834961f,
+ 0.846191f, 0.856934f, 0.865723f, 0.875977f, 0.884766f, 0.894531f, 0.903320f, 0.911621f,
+ 0.919922f, 0.927734f, 0.962891f, 0.959473f, 0.954102f, 0.949219f, 0.945312f, 0.941406f,
+ 0.006138f, 0.019150f, 0.033051f, 0.047089f, 0.061829f, 0.077515f, 0.094299f, 0.111084f,
+ 0.128174f, 0.146729f, 0.165771f, 0.185059f, 0.205200f, 0.224731f, 0.245361f, 0.265625f,
+ 0.286865f, 0.307861f, 0.328857f, 0.350098f, 0.370605f, 0.392090f, 0.413086f, 0.433594f,
+ 0.454346f, 0.474609f, 0.493896f, 0.513672f, 0.532227f, 0.552734f, 0.569824f, 0.588867f,
+ 0.605957f, 0.623047f, 0.640625f, 0.656738f, 0.672852f, 0.688477f, 0.703613f, 0.717773f,
+ 0.732910f, 0.746582f, 0.759766f, 0.772461f, 0.786621f, 0.798340f, 0.810059f, 0.820312f,
+ 0.832520f, 0.842773f, 0.853516f, 0.863770f, 0.873535f, 0.883789f, 0.892578f, 0.901367f,
+ 0.910645f, 0.919434f, 0.958984f, 0.955566f, 0.951172f, 0.946777f, 0.942871f, 0.938965f,
+ 0.005424f, 0.017059f, 0.029541f, 0.042023f, 0.055389f, 0.069397f, 0.083984f, 0.099670f,
+ 0.115601f, 0.132324f, 0.149292f, 0.167114f, 0.185547f, 0.204468f, 0.224121f, 0.243896f,
+ 0.262939f, 0.283691f, 0.304443f, 0.323486f, 0.345459f, 0.365479f, 0.386230f, 0.407471f,
+ 0.426758f, 0.448486f, 0.467529f, 0.487061f, 0.506348f, 0.526367f, 0.545410f, 0.563965f,
+ 0.581543f, 0.600098f, 0.617676f, 0.634277f, 0.650391f, 0.666016f, 0.682617f, 0.697754f,
+ 0.712891f, 0.727539f, 0.741211f, 0.755859f, 0.769043f, 0.782227f, 0.793945f, 0.806152f,
+ 0.818848f, 0.830566f, 0.840332f, 0.851074f, 0.861328f, 0.872070f, 0.881836f, 0.892090f,
+ 0.900879f, 0.910645f, 0.955566f, 0.952637f, 0.948730f, 0.943359f, 0.939941f, 0.935547f,
+ 0.004833f, 0.015442f, 0.026169f, 0.037689f, 0.049683f, 0.062164f, 0.075806f, 0.089539f,
+ 0.103760f, 0.119263f, 0.134888f, 0.151978f, 0.168335f, 0.186646f, 0.204102f, 0.223022f,
+ 0.242065f, 0.260986f, 0.280518f, 0.300537f, 0.320801f, 0.340820f, 0.360107f, 0.381104f,
+ 0.401367f, 0.421387f, 0.441650f, 0.460449f, 0.480957f, 0.500000f, 0.519531f, 0.538574f,
+ 0.557129f, 0.575684f, 0.593262f, 0.610840f, 0.628906f, 0.645508f, 0.662109f, 0.677246f,
+ 0.692871f, 0.708008f, 0.723145f, 0.738281f, 0.751465f, 0.766113f, 0.778320f, 0.791504f,
+ 0.802246f, 0.816406f, 0.827637f, 0.838867f, 0.850098f, 0.860352f, 0.871582f, 0.881348f,
+ 0.890137f, 0.899902f, 0.951660f, 0.948730f, 0.944824f, 0.940918f, 0.937012f, 0.933594f,
+ 0.004269f, 0.013809f, 0.023911f, 0.033569f, 0.044342f, 0.056213f, 0.068054f, 0.080811f,
+ 0.093933f, 0.107910f, 0.122131f, 0.137451f, 0.152710f, 0.169434f, 0.185791f, 0.203979f,
+ 0.221436f, 0.239990f, 0.257812f, 0.277344f, 0.296631f, 0.316162f, 0.335693f, 0.355713f,
+ 0.375244f, 0.395996f, 0.416016f, 0.436035f, 0.455078f, 0.474365f, 0.494629f, 0.513184f,
+ 0.532715f, 0.550781f, 0.569336f, 0.586914f, 0.604980f, 0.622559f, 0.639648f, 0.655762f,
+ 0.672363f, 0.688477f, 0.704102f, 0.718750f, 0.733887f, 0.747559f, 0.761230f, 0.775391f,
+ 0.788574f, 0.800781f, 0.814453f, 0.825684f, 0.837402f, 0.848633f, 0.859375f, 0.870605f,
+ 0.880371f, 0.891113f, 0.947754f, 0.945312f, 0.941895f, 0.937988f, 0.934082f, 0.931152f,
+ 0.004028f, 0.012581f, 0.021133f, 0.030396f, 0.039948f, 0.050323f, 0.061523f, 0.072815f,
+ 0.084961f, 0.096985f, 0.110535f, 0.124756f, 0.138916f, 0.153687f, 0.169800f, 0.185669f,
+ 0.202881f, 0.219116f, 0.237305f, 0.255615f, 0.273926f, 0.293213f, 0.311768f, 0.331055f,
+ 0.351074f, 0.370605f, 0.390381f, 0.409668f, 0.429688f, 0.449707f, 0.468994f, 0.487549f,
+ 0.506836f, 0.526367f, 0.545898f, 0.562988f, 0.581543f, 0.599121f, 0.616699f, 0.634766f,
+ 0.651367f, 0.667480f, 0.683594f, 0.699707f, 0.714844f, 0.730957f, 0.744141f, 0.758789f,
+ 0.772949f, 0.785645f, 0.799316f, 0.812500f, 0.823730f, 0.836914f, 0.847168f, 0.859375f,
+ 0.869629f, 0.880371f, 0.942383f, 0.941406f, 0.937500f, 0.934570f, 0.931152f, 0.927734f,
+ 0.003613f, 0.011391f, 0.018875f, 0.027679f, 0.036133f, 0.045624f, 0.055420f, 0.065491f,
+ 0.076416f, 0.088135f, 0.099487f, 0.112427f, 0.126099f, 0.139771f, 0.154419f, 0.169556f,
+ 0.184814f, 0.201050f, 0.218262f, 0.234985f, 0.252441f, 0.271484f, 0.289062f, 0.308594f,
+ 0.326660f, 0.346924f, 0.365234f, 0.384521f, 0.404541f, 0.424072f, 0.443359f, 0.463135f,
+ 0.482422f, 0.501953f, 0.521484f, 0.539551f, 0.558594f, 0.576660f, 0.595215f, 0.612793f,
+ 0.629883f, 0.647949f, 0.663574f, 0.679688f, 0.695801f, 0.711426f, 0.727539f, 0.741699f,
+ 0.757324f, 0.770996f, 0.785156f, 0.798828f, 0.811035f, 0.823730f, 0.835449f, 0.848145f,
+ 0.858887f, 0.870605f, 0.937988f, 0.937988f, 0.934570f, 0.931152f, 0.927734f, 0.924805f,
+ 0.003248f, 0.010185f, 0.017395f, 0.025055f, 0.032928f, 0.041321f, 0.049957f, 0.059265f,
+ 0.069092f, 0.079407f, 0.090820f, 0.101746f, 0.113770f, 0.126953f, 0.140381f, 0.154053f,
+ 0.168701f, 0.184082f, 0.199951f, 0.216431f, 0.232788f, 0.250000f, 0.267578f, 0.285645f,
+ 0.303955f, 0.322998f, 0.341553f, 0.361084f, 0.379150f, 0.399414f, 0.418701f, 0.437988f,
+ 0.457275f, 0.477051f, 0.496094f, 0.515137f, 0.534180f, 0.553223f, 0.571289f, 0.589844f,
+ 0.606934f, 0.625488f, 0.643066f, 0.659668f, 0.676758f, 0.692871f, 0.708984f, 0.725098f,
+ 0.740234f, 0.753906f, 0.769043f, 0.782227f, 0.796387f, 0.810059f, 0.822266f, 0.834961f,
+ 0.847168f, 0.859375f, 0.933594f, 0.933594f, 0.931152f, 0.927246f, 0.923828f, 0.921387f,
+ 0.002914f, 0.009361f, 0.015793f, 0.022659f, 0.029938f, 0.037354f, 0.045593f, 0.053406f,
+ 0.062988f, 0.072083f, 0.081665f, 0.092712f, 0.103943f, 0.114990f, 0.128174f, 0.140503f,
+ 0.153809f, 0.167725f, 0.182251f, 0.198242f, 0.213623f, 0.230225f, 0.246826f, 0.263672f,
+ 0.281494f, 0.300049f, 0.318604f, 0.337158f, 0.356201f, 0.374756f, 0.394531f, 0.413574f,
+ 0.433105f, 0.451904f, 0.471680f, 0.491211f, 0.509766f, 0.529297f, 0.547852f, 0.566895f,
+ 0.584961f, 0.603516f, 0.621094f, 0.638672f, 0.656738f, 0.673340f, 0.689453f, 0.706543f,
+ 0.722656f, 0.737793f, 0.752930f, 0.767578f, 0.781250f, 0.796875f, 0.809082f, 0.823242f,
+ 0.835449f, 0.847656f, 0.929199f, 0.929199f, 0.927246f, 0.923828f, 0.920898f, 0.917969f,
+ 0.002766f, 0.008736f, 0.014442f, 0.020691f, 0.027054f, 0.033905f, 0.040924f, 0.048645f,
+ 0.056976f, 0.065674f, 0.074951f, 0.084229f, 0.094116f, 0.105225f, 0.116333f, 0.127563f,
+ 0.139771f, 0.153564f, 0.166626f, 0.181030f, 0.196411f, 0.211182f, 0.227417f, 0.243896f,
+ 0.260742f, 0.277588f, 0.295898f, 0.314209f, 0.332031f, 0.351562f, 0.370117f, 0.389404f,
+ 0.408203f, 0.428223f, 0.447266f, 0.467041f, 0.486084f, 0.505859f, 0.524414f, 0.543945f,
+ 0.562012f, 0.581543f, 0.600098f, 0.617676f, 0.636230f, 0.654297f, 0.670898f, 0.687500f,
+ 0.704102f, 0.720703f, 0.736816f, 0.751465f, 0.766113f, 0.781738f, 0.796387f, 0.809082f,
+ 0.823242f, 0.835938f, 0.923828f, 0.925781f, 0.922852f, 0.920410f, 0.916992f, 0.914551f,
+ 0.002483f, 0.007599f, 0.013161f, 0.018555f, 0.024551f, 0.030670f, 0.037476f, 0.044464f,
+ 0.051636f, 0.059174f, 0.067688f, 0.075928f, 0.085693f, 0.095093f, 0.105591f, 0.116394f,
+ 0.127441f, 0.139648f, 0.152344f, 0.165527f, 0.179565f, 0.193970f, 0.208862f, 0.224487f,
+ 0.240356f, 0.256836f, 0.274658f, 0.291748f, 0.310059f, 0.328369f, 0.346680f, 0.365234f,
+ 0.384521f, 0.404297f, 0.423340f, 0.442139f, 0.462646f, 0.481445f, 0.500977f, 0.520020f,
+ 0.540039f, 0.559082f, 0.577148f, 0.596191f, 0.614746f, 0.632812f, 0.651367f, 0.669434f,
+ 0.685059f, 0.702637f, 0.718750f, 0.734375f, 0.750488f, 0.766113f, 0.780762f, 0.795410f,
+ 0.811035f, 0.823730f, 0.919434f, 0.920898f, 0.918457f, 0.916016f, 0.913086f, 0.910645f,
+ 0.002457f, 0.007114f, 0.011757f, 0.016708f, 0.022125f, 0.027786f, 0.033752f, 0.040375f,
+ 0.046661f, 0.053864f, 0.061584f, 0.069336f, 0.077515f, 0.086365f, 0.095947f, 0.105896f,
+ 0.116638f, 0.127075f, 0.138916f, 0.151245f, 0.164062f, 0.177490f, 0.191528f, 0.206177f,
+ 0.221802f, 0.237427f, 0.253906f, 0.270508f, 0.287842f, 0.305664f, 0.323730f, 0.342285f,
+ 0.361572f, 0.379639f, 0.399170f, 0.418457f, 0.438965f, 0.458252f, 0.477295f, 0.497559f,
+ 0.516113f, 0.536133f, 0.554688f, 0.574707f, 0.593750f, 0.612305f, 0.630859f, 0.648926f,
+ 0.666504f, 0.684082f, 0.701660f, 0.717773f, 0.734863f, 0.751465f, 0.766602f, 0.781738f,
+ 0.797852f, 0.812012f, 0.913086f, 0.916016f, 0.913574f, 0.911621f, 0.909180f, 0.906250f,
+ 0.002132f, 0.006493f, 0.010750f, 0.015717f, 0.020569f, 0.025604f, 0.030823f, 0.036682f,
+ 0.043060f, 0.049286f, 0.055786f, 0.062988f, 0.070557f, 0.078918f, 0.086914f, 0.096191f,
+ 0.105530f, 0.116028f, 0.126953f, 0.138306f, 0.149902f, 0.162231f, 0.175537f, 0.189453f,
+ 0.203491f, 0.218628f, 0.234131f, 0.250000f, 0.266602f, 0.284180f, 0.301514f, 0.319580f,
+ 0.338135f, 0.356689f, 0.375977f, 0.395020f, 0.413818f, 0.434082f, 0.452881f, 0.473145f,
+ 0.492920f, 0.512207f, 0.532227f, 0.552246f, 0.570801f, 0.591309f, 0.609375f, 0.629395f,
+ 0.646973f, 0.665527f, 0.683105f, 0.700684f, 0.717773f, 0.734863f, 0.751465f, 0.767578f,
+ 0.782715f, 0.799316f, 0.908203f, 0.911133f, 0.909180f, 0.907227f, 0.904785f, 0.902832f,
+ 0.001891f, 0.006008f, 0.010025f, 0.014122f, 0.018616f, 0.023239f, 0.028442f, 0.033691f,
+ 0.038757f, 0.044556f, 0.050964f, 0.057465f, 0.064087f, 0.071167f, 0.079224f, 0.087463f,
+ 0.096008f, 0.105591f, 0.115356f, 0.125488f, 0.136597f, 0.148193f, 0.160278f, 0.173218f,
+ 0.186768f, 0.200684f, 0.215332f, 0.231323f, 0.246338f, 0.262939f, 0.279785f, 0.297607f,
+ 0.314941f, 0.333984f, 0.353271f, 0.371094f, 0.391357f, 0.409668f, 0.430420f, 0.448975f,
+ 0.469482f, 0.489746f, 0.509277f, 0.528809f, 0.549316f, 0.568848f, 0.588379f, 0.607910f,
+ 0.626953f, 0.645996f, 0.664062f, 0.683105f, 0.700684f, 0.718262f, 0.735840f, 0.751953f,
+ 0.768555f, 0.785645f, 0.902344f, 0.906250f, 0.904785f, 0.902832f, 0.900391f, 0.898438f,
+ 0.001732f, 0.005573f, 0.009193f, 0.012932f, 0.017075f, 0.021286f, 0.025406f, 0.030289f,
+ 0.035675f, 0.040344f, 0.046326f, 0.052032f, 0.058411f, 0.064575f, 0.072205f, 0.079834f,
+ 0.087708f, 0.095947f, 0.104797f, 0.114380f, 0.124451f, 0.134888f, 0.146606f, 0.158691f,
+ 0.170776f, 0.184082f, 0.197510f, 0.212524f, 0.227417f, 0.243164f, 0.259521f, 0.276367f,
+ 0.293457f, 0.311768f, 0.329590f, 0.348633f, 0.367188f, 0.386230f, 0.406006f, 0.425781f,
+ 0.446533f, 0.465332f, 0.486084f, 0.505859f, 0.526367f, 0.545898f, 0.567383f, 0.585938f,
+ 0.605957f, 0.625977f, 0.645508f, 0.664551f, 0.683105f, 0.701172f, 0.718750f, 0.736816f,
+ 0.754395f, 0.770508f, 0.896484f, 0.900879f, 0.900391f, 0.897949f, 0.895996f, 0.894043f,
+ 0.001713f, 0.004684f, 0.008339f, 0.011818f, 0.015450f, 0.019409f, 0.023605f, 0.027832f,
+ 0.032349f, 0.036865f, 0.041809f, 0.047302f, 0.052673f, 0.058838f, 0.065613f, 0.072083f,
+ 0.079407f, 0.087280f, 0.095337f, 0.104126f, 0.113037f, 0.122986f, 0.133667f, 0.144897f,
+ 0.156250f, 0.168579f, 0.181396f, 0.195068f, 0.208984f, 0.224243f, 0.239624f, 0.255859f,
+ 0.272461f, 0.289551f, 0.307617f, 0.326172f, 0.344482f, 0.363770f, 0.383301f, 0.402588f,
+ 0.422607f, 0.443115f, 0.463135f, 0.483154f, 0.503418f, 0.523926f, 0.544434f, 0.564941f,
+ 0.584473f, 0.604980f, 0.624512f, 0.645508f, 0.664551f, 0.683594f, 0.701660f, 0.721191f,
+ 0.738281f, 0.755859f, 0.889648f, 0.895996f, 0.895020f, 0.893066f, 0.891602f, 0.889160f,
+ 0.001545f, 0.004745f, 0.007710f, 0.010979f, 0.014450f, 0.017807f, 0.021469f, 0.025238f,
+ 0.029282f, 0.033661f, 0.038177f, 0.043182f, 0.048157f, 0.053436f, 0.059326f, 0.065674f,
+ 0.072205f, 0.078857f, 0.086548f, 0.094604f, 0.102905f, 0.111816f, 0.121521f, 0.131592f,
+ 0.142334f, 0.153442f, 0.165894f, 0.178345f, 0.192139f, 0.205933f, 0.220703f, 0.236084f,
+ 0.251709f, 0.268555f, 0.285645f, 0.303467f, 0.321777f, 0.340332f, 0.359619f, 0.379150f,
+ 0.398682f, 0.419189f, 0.440430f, 0.460449f, 0.480957f, 0.501465f, 0.521973f, 0.543457f,
+ 0.563477f, 0.584961f, 0.604492f, 0.625488f, 0.645508f, 0.665039f, 0.684082f, 0.704102f,
+ 0.723145f, 0.741211f, 0.885254f, 0.890137f, 0.889160f, 0.887695f, 0.886719f, 0.884277f,
+ 0.001487f, 0.004356f, 0.006828f, 0.010162f, 0.012993f, 0.016022f, 0.019333f, 0.023087f,
+ 0.026886f, 0.030518f, 0.034668f, 0.039062f, 0.043671f, 0.048370f, 0.053741f, 0.059326f,
+ 0.065308f, 0.071655f, 0.078125f, 0.085693f, 0.093323f, 0.101807f, 0.110657f, 0.119507f,
+ 0.129517f, 0.140137f, 0.151367f, 0.163330f, 0.175781f, 0.188843f, 0.202759f, 0.217163f,
+ 0.232666f, 0.248413f, 0.264893f, 0.282227f, 0.299805f, 0.318115f, 0.336914f, 0.356445f,
+ 0.375488f, 0.395996f, 0.416504f, 0.436279f, 0.457520f, 0.479004f, 0.499023f, 0.520508f,
+ 0.541504f, 0.562988f, 0.583984f, 0.604492f, 0.625488f, 0.646973f, 0.666504f, 0.687012f,
+ 0.706055f, 0.725098f, 0.877441f, 0.885254f, 0.884766f, 0.882324f, 0.881836f, 0.880371f,
+ 0.001443f, 0.003807f, 0.006336f, 0.009171f, 0.011909f, 0.015007f, 0.018097f, 0.020905f,
+ 0.024384f, 0.027893f, 0.031555f, 0.035370f, 0.039581f, 0.044128f, 0.048889f, 0.053894f,
+ 0.059174f, 0.065125f, 0.070984f, 0.077698f, 0.084656f, 0.091919f, 0.100037f, 0.108093f,
+ 0.117493f, 0.127563f, 0.137817f, 0.148438f, 0.159912f, 0.172485f, 0.185547f, 0.199585f,
+ 0.213867f, 0.229248f, 0.244995f, 0.261230f, 0.278564f, 0.296387f, 0.314697f, 0.333252f,
+ 0.353271f, 0.372314f, 0.393311f, 0.413330f, 0.433594f, 0.455078f, 0.476318f, 0.497314f,
+ 0.519531f, 0.540527f, 0.562500f, 0.583496f, 0.605469f, 0.626953f, 0.648438f, 0.669434f,
+ 0.689941f, 0.709961f, 0.870605f, 0.878906f, 0.878418f, 0.877441f, 0.875488f, 0.873535f,
+ 0.001302f, 0.003712f, 0.005859f, 0.008286f, 0.010910f, 0.013779f, 0.016235f, 0.019135f,
+ 0.021912f, 0.025345f, 0.029022f, 0.032166f, 0.036011f, 0.040131f, 0.044128f, 0.048492f,
+ 0.053528f, 0.058533f, 0.064209f, 0.070129f, 0.076355f, 0.083191f, 0.090149f, 0.098328f,
+ 0.106628f, 0.115662f, 0.124817f, 0.134766f, 0.145630f, 0.157104f, 0.169678f, 0.182495f,
+ 0.195801f, 0.210205f, 0.225342f, 0.241455f, 0.257812f, 0.274902f, 0.292725f, 0.311035f,
+ 0.330322f, 0.349365f, 0.369873f, 0.390137f, 0.411133f, 0.432373f, 0.453369f, 0.474609f,
+ 0.496826f, 0.519043f, 0.541504f, 0.563477f, 0.585449f, 0.606445f, 0.629395f, 0.650391f,
+ 0.672363f, 0.693848f, 0.863281f, 0.872070f, 0.872070f, 0.871582f, 0.869629f, 0.868164f,
+ 0.001170f, 0.003151f, 0.005295f, 0.007812f, 0.010132f, 0.012466f, 0.015076f, 0.017517f,
+ 0.019943f, 0.023178f, 0.026443f, 0.029312f, 0.032471f, 0.036041f, 0.039978f, 0.044037f,
+ 0.048828f, 0.053070f, 0.057983f, 0.063232f, 0.068909f, 0.075378f, 0.081909f, 0.088745f,
+ 0.096375f, 0.104309f, 0.113281f, 0.122437f, 0.132202f, 0.142944f, 0.154419f, 0.166138f,
+ 0.178955f, 0.192505f, 0.206421f, 0.221558f, 0.237183f, 0.253906f, 0.270996f, 0.289062f,
+ 0.308105f, 0.326904f, 0.346924f, 0.366455f, 0.387695f, 0.408936f, 0.430176f, 0.451416f,
+ 0.474365f, 0.496582f, 0.518066f, 0.541016f, 0.563965f, 0.585938f, 0.608887f, 0.630859f,
+ 0.654297f, 0.675781f, 0.856934f, 0.865234f, 0.866211f, 0.864746f, 0.863281f, 0.862793f,
+ 0.001049f, 0.003254f, 0.005234f, 0.007263f, 0.009270f, 0.011307f, 0.013596f, 0.015869f,
+ 0.018555f, 0.020844f, 0.023972f, 0.026566f, 0.029739f, 0.033020f, 0.036316f, 0.039856f,
+ 0.044159f, 0.048096f, 0.052277f, 0.057281f, 0.062439f, 0.067871f, 0.073792f, 0.079956f,
+ 0.087158f, 0.094055f, 0.102234f, 0.110535f, 0.119934f, 0.129517f, 0.140259f, 0.151245f,
+ 0.162842f, 0.175537f, 0.189209f, 0.203369f, 0.218262f, 0.233643f, 0.250488f, 0.268066f,
+ 0.285645f, 0.304443f, 0.324219f, 0.343750f, 0.364014f, 0.385254f, 0.406494f, 0.428223f,
+ 0.450928f, 0.472656f, 0.495605f, 0.519043f, 0.541504f, 0.565918f, 0.588379f, 0.612305f,
+ 0.635742f, 0.659180f, 0.850098f, 0.859863f, 0.859863f, 0.858398f, 0.857910f, 0.856934f,
+ 0.000914f, 0.002861f, 0.004742f, 0.006569f, 0.008415f, 0.010521f, 0.012596f, 0.014648f,
+ 0.016708f, 0.019089f, 0.021515f, 0.023865f, 0.026688f, 0.029572f, 0.032928f, 0.036377f,
+ 0.039337f, 0.043365f, 0.047333f, 0.051544f, 0.056305f, 0.061066f, 0.066406f, 0.071960f,
+ 0.078247f, 0.084961f, 0.092163f, 0.099426f, 0.108215f, 0.116943f, 0.126831f, 0.136719f,
+ 0.148193f, 0.159302f, 0.171875f, 0.185669f, 0.199585f, 0.214478f, 0.230469f, 0.247070f,
+ 0.264160f, 0.282471f, 0.301270f, 0.321045f, 0.341553f, 0.362061f, 0.383545f, 0.404785f,
+ 0.427734f, 0.449951f, 0.473389f, 0.496582f, 0.520020f, 0.543457f, 0.568359f, 0.592285f,
+ 0.615723f, 0.639648f, 0.840820f, 0.851074f, 0.853027f, 0.853027f, 0.852051f, 0.850586f,
+ 0.000679f, 0.002518f, 0.004173f, 0.006149f, 0.008064f, 0.009369f, 0.011551f, 0.013222f,
+ 0.015175f, 0.017212f, 0.019592f, 0.021835f, 0.024048f, 0.026932f, 0.029846f, 0.032623f,
+ 0.035675f, 0.038940f, 0.042542f, 0.046295f, 0.050354f, 0.055054f, 0.059601f, 0.064880f,
+ 0.070190f, 0.076233f, 0.082703f, 0.089661f, 0.097229f, 0.105103f, 0.113831f, 0.123474f,
+ 0.133423f, 0.144409f, 0.156006f, 0.168335f, 0.182495f, 0.196411f, 0.211304f, 0.227295f,
+ 0.243530f, 0.260986f, 0.279053f, 0.298828f, 0.318359f, 0.339111f, 0.360107f, 0.381348f,
+ 0.403809f, 0.427490f, 0.449463f, 0.473633f, 0.497803f, 0.521484f, 0.546875f, 0.570801f,
+ 0.595703f, 0.620605f, 0.833008f, 0.845215f, 0.845703f, 0.845703f, 0.845215f, 0.843750f,
+ 0.000719f, 0.002470f, 0.003975f, 0.005337f, 0.007275f, 0.008713f, 0.010376f, 0.012032f,
+ 0.013580f, 0.015793f, 0.017609f, 0.019501f, 0.021530f, 0.024277f, 0.026657f, 0.029312f,
+ 0.031982f, 0.035187f, 0.038086f, 0.041565f, 0.045288f, 0.049103f, 0.053436f, 0.058136f,
+ 0.062927f, 0.068054f, 0.073853f, 0.080383f, 0.087341f, 0.094666f, 0.102173f, 0.111084f,
+ 0.120300f, 0.130859f, 0.141235f, 0.152954f, 0.164429f, 0.178223f, 0.192749f, 0.207642f,
+ 0.223145f, 0.239868f, 0.258301f, 0.276611f, 0.295654f, 0.316162f, 0.337402f, 0.358643f,
+ 0.380859f, 0.403320f, 0.427002f, 0.450684f, 0.474609f, 0.499756f, 0.523926f, 0.550781f,
+ 0.575195f, 0.600586f, 0.824707f, 0.836914f, 0.838379f, 0.838867f, 0.837402f, 0.837402f,
+ 0.000683f, 0.002361f, 0.003649f, 0.005116f, 0.006416f, 0.008202f, 0.009460f, 0.010941f,
+ 0.012817f, 0.014099f, 0.015839f, 0.017593f, 0.019867f, 0.021988f, 0.023926f, 0.026276f,
+ 0.028824f, 0.031311f, 0.034363f, 0.036957f, 0.040375f, 0.043823f, 0.047546f, 0.051758f,
+ 0.056183f, 0.061249f, 0.066162f, 0.071777f, 0.077942f, 0.084534f, 0.091553f, 0.099487f,
+ 0.107910f, 0.116882f, 0.127075f, 0.137451f, 0.148804f, 0.161499f, 0.174805f, 0.188721f,
+ 0.203735f, 0.220093f, 0.237427f, 0.254639f, 0.273926f, 0.293457f, 0.313965f, 0.334961f,
+ 0.357666f, 0.379883f, 0.403076f, 0.427002f, 0.451660f, 0.476807f, 0.501953f, 0.527344f,
+ 0.553711f, 0.581055f, 0.815918f, 0.829102f, 0.831055f, 0.831055f, 0.831055f, 0.830566f,
+ 0.000607f, 0.001863f, 0.003416f, 0.004528f, 0.005943f, 0.007191f, 0.008781f, 0.009964f,
+ 0.011337f, 0.012939f, 0.014458f, 0.015808f, 0.018051f, 0.019394f, 0.021332f, 0.023529f,
+ 0.025803f, 0.028168f, 0.030502f, 0.033020f, 0.036072f, 0.039032f, 0.042419f, 0.046082f,
+ 0.049927f, 0.054321f, 0.058411f, 0.063538f, 0.069336f, 0.075684f, 0.081787f, 0.088562f,
+ 0.096436f, 0.104553f, 0.113281f, 0.123596f, 0.133667f, 0.145386f, 0.157471f, 0.171021f,
+ 0.185547f, 0.200562f, 0.216553f, 0.234619f, 0.251709f, 0.271240f, 0.291504f, 0.312012f,
+ 0.333496f, 0.355957f, 0.379395f, 0.403076f, 0.428223f, 0.453857f, 0.479492f, 0.506348f,
+ 0.532715f, 0.560059f, 0.805664f, 0.820801f, 0.823730f, 0.822754f, 0.822754f, 0.822266f,
+ 0.000593f, 0.001862f, 0.002966f, 0.004341f, 0.005600f, 0.006516f, 0.007626f, 0.008995f,
+ 0.010223f, 0.011292f, 0.012848f, 0.014427f, 0.016098f, 0.017532f, 0.019165f, 0.021027f,
+ 0.022842f, 0.024918f, 0.027115f, 0.029739f, 0.032013f, 0.034637f, 0.037506f, 0.040955f,
+ 0.044220f, 0.048065f, 0.051941f, 0.056305f, 0.061768f, 0.066528f, 0.072327f, 0.078979f,
+ 0.085571f, 0.092834f, 0.101135f, 0.110229f, 0.119690f, 0.130127f, 0.141602f, 0.153564f,
+ 0.167114f, 0.181763f, 0.196899f, 0.213623f, 0.230957f, 0.249268f, 0.268555f, 0.289062f,
+ 0.310059f, 0.333252f, 0.355957f, 0.379883f, 0.404541f, 0.430176f, 0.456055f, 0.483887f,
+ 0.510254f, 0.539062f, 0.797852f, 0.812988f, 0.814941f, 0.815430f, 0.815918f, 0.814453f,
+ 0.000556f, 0.001811f, 0.002998f, 0.003815f, 0.004658f, 0.005905f, 0.007099f, 0.008232f,
+ 0.009239f, 0.010483f, 0.011559f, 0.013016f, 0.014305f, 0.015671f, 0.017090f, 0.018646f,
+ 0.020370f, 0.022369f, 0.024124f, 0.026062f, 0.028458f, 0.030624f, 0.033264f, 0.036041f,
+ 0.039307f, 0.042053f, 0.045807f, 0.049530f, 0.054016f, 0.058441f, 0.063904f, 0.069641f,
+ 0.075745f, 0.082520f, 0.089539f, 0.097717f, 0.106750f, 0.116150f, 0.126587f, 0.137817f,
+ 0.150024f, 0.163452f, 0.177490f, 0.193359f, 0.209717f, 0.227539f, 0.246704f, 0.266602f,
+ 0.287598f, 0.309326f, 0.332520f, 0.355713f, 0.380371f, 0.406494f, 0.432861f, 0.459961f,
+ 0.488525f, 0.517090f, 0.787598f, 0.804199f, 0.806641f, 0.807617f, 0.807617f, 0.807129f,
+ 0.000507f, 0.001697f, 0.002468f, 0.003351f, 0.004425f, 0.005486f, 0.006325f, 0.007412f,
+ 0.008156f, 0.009270f, 0.010239f, 0.011497f, 0.012520f, 0.013954f, 0.015182f, 0.016617f,
+ 0.018036f, 0.019714f, 0.021362f, 0.022934f, 0.024704f, 0.026886f, 0.029419f, 0.031525f,
+ 0.034302f, 0.037292f, 0.040558f, 0.043701f, 0.047577f, 0.051849f, 0.056183f, 0.061249f,
+ 0.066467f, 0.072876f, 0.078918f, 0.086548f, 0.094116f, 0.102844f, 0.112427f, 0.122620f,
+ 0.133667f, 0.146362f, 0.159668f, 0.174438f, 0.190063f, 0.207153f, 0.225098f, 0.244263f,
+ 0.264648f, 0.286377f, 0.308350f, 0.332275f, 0.357178f, 0.382080f, 0.408936f, 0.436035f,
+ 0.465820f, 0.495361f, 0.776855f, 0.794922f, 0.797852f, 0.799316f, 0.798828f, 0.798340f,
+ 0.000366f, 0.001644f, 0.002289f, 0.003046f, 0.004082f, 0.005032f, 0.005550f, 0.006599f,
+ 0.007389f, 0.008369f, 0.009201f, 0.010315f, 0.011276f, 0.012405f, 0.013466f, 0.014587f,
+ 0.015991f, 0.017303f, 0.018692f, 0.020081f, 0.021851f, 0.023865f, 0.025726f, 0.027771f,
+ 0.030136f, 0.032532f, 0.035309f, 0.038422f, 0.041626f, 0.045044f, 0.048767f, 0.053375f,
+ 0.057861f, 0.063477f, 0.069031f, 0.075684f, 0.082336f, 0.090515f, 0.099182f, 0.107849f,
+ 0.118958f, 0.130005f, 0.142212f, 0.156128f, 0.170898f, 0.186890f, 0.203857f, 0.222534f,
+ 0.241821f, 0.263428f, 0.285156f, 0.308105f, 0.332275f, 0.359131f, 0.385010f, 0.413086f,
+ 0.441895f, 0.472168f, 0.767090f, 0.785645f, 0.789062f, 0.789551f, 0.790527f, 0.789551f,
+ 0.000340f, 0.001434f, 0.002129f, 0.002827f, 0.003696f, 0.004463f, 0.005112f, 0.005730f,
+ 0.006836f, 0.007465f, 0.008217f, 0.008972f, 0.009972f, 0.010887f, 0.011948f, 0.012794f,
+ 0.013947f, 0.015030f, 0.016266f, 0.017670f, 0.019165f, 0.020813f, 0.022415f, 0.024216f,
+ 0.026047f, 0.028336f, 0.030594f, 0.033142f, 0.035858f, 0.039154f, 0.042328f, 0.046265f,
+ 0.050537f, 0.055237f, 0.059998f, 0.065918f, 0.072083f, 0.078918f, 0.086243f, 0.094788f,
+ 0.104309f, 0.114807f, 0.125854f, 0.138672f, 0.152222f, 0.166992f, 0.183716f, 0.200928f,
+ 0.220459f, 0.240112f, 0.261719f, 0.284668f, 0.308838f, 0.333740f, 0.360840f, 0.388672f,
+ 0.418213f, 0.448730f, 0.756348f, 0.775391f, 0.779297f, 0.780273f, 0.781250f, 0.780273f,
+ 0.000511f, 0.001174f, 0.002163f, 0.002554f, 0.003391f, 0.003990f, 0.004547f, 0.005211f,
+ 0.005993f, 0.006653f, 0.007462f, 0.007942f, 0.008781f, 0.009476f, 0.010323f, 0.011444f,
+ 0.012207f, 0.013062f, 0.014336f, 0.015427f, 0.016464f, 0.017929f, 0.019287f, 0.021164f,
+ 0.022461f, 0.024567f, 0.026474f, 0.028885f, 0.031067f, 0.033630f, 0.036835f, 0.040070f,
+ 0.043488f, 0.047394f, 0.051910f, 0.056732f, 0.062378f, 0.068481f, 0.075073f, 0.082764f,
+ 0.090881f, 0.100403f, 0.110779f, 0.122009f, 0.134399f, 0.148560f, 0.163940f, 0.180298f,
+ 0.198120f, 0.218140f, 0.239014f, 0.260986f, 0.285645f, 0.310059f, 0.336182f, 0.364502f,
+ 0.393311f, 0.424316f, 0.744629f, 0.765137f, 0.769531f, 0.770508f, 0.771484f, 0.771484f,
+ 0.000374f, 0.000983f, 0.001696f, 0.002279f, 0.002924f, 0.003571f, 0.004139f, 0.004742f,
+ 0.005390f, 0.005817f, 0.006371f, 0.006981f, 0.007648f, 0.008354f, 0.009041f, 0.009727f,
+ 0.010536f, 0.011375f, 0.012398f, 0.013535f, 0.014389f, 0.015541f, 0.016602f, 0.018112f,
+ 0.019516f, 0.020996f, 0.022644f, 0.024582f, 0.026627f, 0.028748f, 0.031586f, 0.034210f,
+ 0.037415f, 0.040588f, 0.044464f, 0.048676f, 0.053192f, 0.058472f, 0.064880f, 0.070984f,
+ 0.078674f, 0.086914f, 0.096191f, 0.106445f, 0.117859f, 0.130859f, 0.144775f, 0.160522f,
+ 0.177490f, 0.196411f, 0.215942f, 0.237793f, 0.261475f, 0.285645f, 0.312012f, 0.339111f,
+ 0.368652f, 0.400391f, 0.733887f, 0.755371f, 0.759766f, 0.760742f, 0.761719f, 0.761719f,
+ 0.000298f, 0.000924f, 0.001542f, 0.002125f, 0.002439f, 0.003153f, 0.003502f, 0.004196f,
+ 0.004585f, 0.005039f, 0.005531f, 0.006054f, 0.006531f, 0.007217f, 0.007935f, 0.008362f,
+ 0.009171f, 0.009773f, 0.010704f, 0.011505f, 0.012207f, 0.013321f, 0.014381f, 0.015556f,
+ 0.016586f, 0.017792f, 0.019608f, 0.020844f, 0.022583f, 0.024536f, 0.026566f, 0.028885f,
+ 0.031494f, 0.034332f, 0.037689f, 0.041260f, 0.045258f, 0.049927f, 0.054901f, 0.060699f,
+ 0.067322f, 0.074768f, 0.082764f, 0.091675f, 0.102173f, 0.113831f, 0.126831f, 0.141113f,
+ 0.157104f, 0.175049f, 0.194580f, 0.215210f, 0.237305f, 0.261475f, 0.287598f, 0.314697f,
+ 0.344482f, 0.375977f, 0.721680f, 0.744629f, 0.749512f, 0.751465f, 0.751465f, 0.751465f,
+ 0.000275f, 0.001002f, 0.001335f, 0.001704f, 0.002264f, 0.002790f, 0.003202f, 0.003555f,
+ 0.004017f, 0.004368f, 0.004894f, 0.005318f, 0.005592f, 0.006241f, 0.006611f, 0.007317f,
+ 0.007851f, 0.008560f, 0.009071f, 0.009758f, 0.010429f, 0.011375f, 0.011986f, 0.013130f,
+ 0.013916f, 0.015205f, 0.016403f, 0.017624f, 0.019119f, 0.020660f, 0.022278f, 0.024582f,
+ 0.026474f, 0.029007f, 0.031738f, 0.034668f, 0.038025f, 0.041962f, 0.046417f, 0.051270f,
+ 0.056915f, 0.063110f, 0.070312f, 0.078369f, 0.087769f, 0.098145f, 0.109863f, 0.123352f,
+ 0.137451f, 0.154785f, 0.172363f, 0.192261f, 0.214233f, 0.237793f, 0.262939f, 0.289795f,
+ 0.319336f, 0.351074f, 0.708984f, 0.733398f, 0.738281f, 0.740234f, 0.741211f, 0.740723f,
+ 0.000334f, 0.000805f, 0.001231f, 0.001640f, 0.002033f, 0.002277f, 0.002871f, 0.003115f,
+ 0.003481f, 0.003895f, 0.004147f, 0.004379f, 0.004841f, 0.005306f, 0.005653f, 0.006241f,
+ 0.006630f, 0.007217f, 0.007721f, 0.008133f, 0.008842f, 0.009529f, 0.010010f, 0.011017f,
+ 0.011780f, 0.012733f, 0.013626f, 0.014824f, 0.015656f, 0.017212f, 0.018829f, 0.020248f,
+ 0.021973f, 0.023926f, 0.026306f, 0.028900f, 0.031616f, 0.034973f, 0.038605f, 0.042816f,
+ 0.047424f, 0.052765f, 0.059021f, 0.066162f, 0.074219f, 0.083435f, 0.093994f, 0.105835f,
+ 0.119385f, 0.134277f, 0.151611f, 0.170532f, 0.191284f, 0.214233f, 0.239014f, 0.265381f,
+ 0.293701f, 0.325684f, 0.696289f, 0.722168f, 0.727051f, 0.729004f, 0.729980f, 0.729980f,
+ 0.000215f, 0.000635f, 0.001184f, 0.001348f, 0.001758f, 0.002171f, 0.002249f, 0.002596f,
+ 0.003004f, 0.003325f, 0.003487f, 0.003906f, 0.004108f, 0.004494f, 0.004955f, 0.005241f,
+ 0.005726f, 0.006134f, 0.006485f, 0.006916f, 0.007496f, 0.008072f, 0.008629f, 0.009071f,
+ 0.009857f, 0.010651f, 0.011375f, 0.012283f, 0.013283f, 0.014320f, 0.015350f, 0.016739f,
+ 0.017975f, 0.019852f, 0.021454f, 0.023712f, 0.025925f, 0.028717f, 0.031769f, 0.035217f,
+ 0.038910f, 0.043396f, 0.048767f, 0.054901f, 0.061707f, 0.069824f, 0.078613f, 0.089783f,
+ 0.101685f, 0.115479f, 0.131104f, 0.149292f, 0.168823f, 0.190674f, 0.214844f, 0.241211f,
+ 0.269775f, 0.299561f, 0.683594f, 0.709961f, 0.715332f, 0.717773f, 0.718262f, 0.718750f,
+ 0.000199f, 0.000826f, 0.001047f, 0.001288f, 0.001600f, 0.001857f, 0.002014f, 0.002329f,
+ 0.002535f, 0.002785f, 0.003027f, 0.003210f, 0.003580f, 0.003788f, 0.004025f, 0.004444f,
+ 0.004791f, 0.004974f, 0.005417f, 0.005909f, 0.006248f, 0.006672f, 0.007118f, 0.007664f,
+ 0.008232f, 0.008759f, 0.009598f, 0.009964f, 0.010956f, 0.011650f, 0.012665f, 0.013702f,
+ 0.014832f, 0.016144f, 0.017654f, 0.019211f, 0.021118f, 0.023102f, 0.025681f, 0.028320f,
+ 0.031708f, 0.035370f, 0.039673f, 0.044739f, 0.050812f, 0.057800f, 0.065796f, 0.074768f,
+ 0.085510f, 0.097961f, 0.112000f, 0.128662f, 0.147217f, 0.168213f, 0.190796f, 0.216309f,
+ 0.244751f, 0.274902f, 0.669922f, 0.698730f, 0.703613f, 0.705566f, 0.707031f, 0.707031f,
+ 0.000212f, 0.000458f, 0.000959f, 0.001192f, 0.001321f, 0.001500f, 0.001823f, 0.002064f,
+ 0.002073f, 0.002293f, 0.002512f, 0.002768f, 0.002981f, 0.003138f, 0.003431f, 0.003765f,
+ 0.003918f, 0.004238f, 0.004482f, 0.004814f, 0.005245f, 0.005531f, 0.005871f, 0.006214f,
+ 0.006660f, 0.007236f, 0.007664f, 0.008331f, 0.008812f, 0.009628f, 0.010277f, 0.010979f,
+ 0.012016f, 0.012978f, 0.014084f, 0.015495f, 0.016937f, 0.018494f, 0.020386f, 0.022659f,
+ 0.025208f, 0.028183f, 0.031860f, 0.036072f, 0.040894f, 0.046326f, 0.053009f, 0.061127f,
+ 0.070374f, 0.081238f, 0.094238f, 0.109314f, 0.126343f, 0.145874f, 0.167847f, 0.192505f,
+ 0.219604f, 0.249634f, 0.656738f, 0.686035f, 0.690430f, 0.694336f, 0.694336f, 0.696777f,
+ 0.000151f, 0.000529f, 0.000692f, 0.000883f, 0.001153f, 0.001337f, 0.001380f, 0.001520f,
+ 0.001753f, 0.001886f, 0.002077f, 0.002243f, 0.002386f, 0.002556f, 0.002832f, 0.003029f,
+ 0.003277f, 0.003447f, 0.003683f, 0.003952f, 0.004135f, 0.004578f, 0.004833f, 0.005222f,
+ 0.005417f, 0.005810f, 0.006355f, 0.006718f, 0.007076f, 0.007652f, 0.008293f, 0.008980f,
+ 0.009674f, 0.010422f, 0.011276f, 0.012283f, 0.013443f, 0.014664f, 0.016113f, 0.017853f,
+ 0.019897f, 0.022156f, 0.024826f, 0.028275f, 0.032135f, 0.036865f, 0.042389f, 0.049011f,
+ 0.056732f, 0.066223f, 0.077576f, 0.090820f, 0.106384f, 0.124512f, 0.145264f, 0.169067f,
+ 0.195190f, 0.224976f, 0.642578f, 0.671387f, 0.679688f, 0.682617f, 0.682617f, 0.683594f,
+ 0.000127f, 0.000376f, 0.000600f, 0.000721f, 0.000901f, 0.001066f, 0.001180f, 0.001332f,
+ 0.001455f, 0.001549f, 0.001709f, 0.001831f, 0.001947f, 0.002150f, 0.002245f, 0.002443f,
+ 0.002682f, 0.002844f, 0.002989f, 0.003201f, 0.003403f, 0.003683f, 0.003883f, 0.004097f,
+ 0.004372f, 0.004665f, 0.004963f, 0.005348f, 0.005711f, 0.006165f, 0.006672f, 0.007004f,
+ 0.007610f, 0.008278f, 0.008873f, 0.009636f, 0.010475f, 0.011475f, 0.012634f, 0.014053f,
+ 0.015404f, 0.017242f, 0.019104f, 0.021774f, 0.024750f, 0.028458f, 0.032745f, 0.038391f,
+ 0.044861f, 0.052795f, 0.062103f, 0.073914f, 0.087830f, 0.104553f, 0.123718f, 0.145996f,
+ 0.171509f, 0.200439f, 0.627930f, 0.658691f, 0.666504f, 0.668945f, 0.671387f, 0.671387f,
+ 0.000013f, 0.000374f, 0.000443f, 0.000688f, 0.000819f, 0.000844f, 0.001004f, 0.001132f,
+ 0.001216f, 0.001259f, 0.001405f, 0.001523f, 0.001566f, 0.001753f, 0.001842f, 0.001997f,
+ 0.002022f, 0.002287f, 0.002377f, 0.002541f, 0.002787f, 0.002878f, 0.003096f, 0.003283f,
+ 0.003551f, 0.003651f, 0.003971f, 0.004272f, 0.004524f, 0.004887f, 0.005196f, 0.005527f,
+ 0.005939f, 0.006386f, 0.006977f, 0.007526f, 0.008148f, 0.008835f, 0.009689f, 0.010689f,
+ 0.011810f, 0.013000f, 0.014641f, 0.016388f, 0.018799f, 0.021469f, 0.024734f, 0.029022f,
+ 0.034210f, 0.040588f, 0.048401f, 0.058319f, 0.070435f, 0.085205f, 0.102905f, 0.123901f,
+ 0.147827f, 0.175903f, 0.612793f, 0.645508f, 0.653320f, 0.656250f, 0.657227f, 0.657227f,
+ 0.000113f, 0.000234f, 0.000465f, 0.000547f, 0.000646f, 0.000684f, 0.000711f, 0.000832f,
+ 0.000963f, 0.000999f, 0.001042f, 0.001183f, 0.001279f, 0.001402f, 0.001494f, 0.001513f,
+ 0.001688f, 0.001716f, 0.001919f, 0.001993f, 0.002081f, 0.002253f, 0.002441f, 0.002575f,
+ 0.002714f, 0.002876f, 0.003050f, 0.003214f, 0.003531f, 0.003714f, 0.003956f, 0.004276f,
+ 0.004604f, 0.004967f, 0.005386f, 0.005718f, 0.006283f, 0.006790f, 0.007290f, 0.008133f,
+ 0.008957f, 0.009987f, 0.010956f, 0.012375f, 0.013916f, 0.015991f, 0.018311f, 0.021347f,
+ 0.025253f, 0.030289f, 0.036560f, 0.044586f, 0.054779f, 0.067749f, 0.083252f, 0.102722f,
+ 0.125732f, 0.152100f, 0.597168f, 0.631836f, 0.639160f, 0.643555f, 0.643066f, 0.645508f,
+ 0.000207f, 0.000175f, 0.000364f, 0.000507f, 0.000496f, 0.000569f, 0.000683f, 0.000584f,
+ 0.000737f, 0.000764f, 0.000885f, 0.000964f, 0.000999f, 0.001076f, 0.001085f, 0.001272f,
+ 0.001327f, 0.001354f, 0.001491f, 0.001494f, 0.001677f, 0.001781f, 0.001862f, 0.001976f,
+ 0.002079f, 0.002190f, 0.002338f, 0.002481f, 0.002691f, 0.002811f, 0.003117f, 0.003214f,
+ 0.003422f, 0.003706f, 0.003990f, 0.004314f, 0.004608f, 0.004982f, 0.005379f, 0.006027f,
+ 0.006580f, 0.007351f, 0.008049f, 0.009041f, 0.010323f, 0.011551f, 0.013428f, 0.015419f,
+ 0.018219f, 0.021713f, 0.026550f, 0.032715f, 0.040833f, 0.051605f, 0.065552f, 0.082458f,
+ 0.104004f, 0.129395f, 0.582031f, 0.618652f, 0.625488f, 0.627930f, 0.630859f, 0.631348f,
+ 0.000189f, 0.000160f, 0.000272f, 0.000387f, 0.000335f, 0.000486f, 0.000424f, 0.000469f,
+ 0.000551f, 0.000589f, 0.000700f, 0.000727f, 0.000772f, 0.000859f, 0.000891f, 0.000872f,
+ 0.001000f, 0.001048f, 0.001076f, 0.001172f, 0.001224f, 0.001311f, 0.001376f, 0.001450f,
+ 0.001554f, 0.001591f, 0.001760f, 0.001838f, 0.001999f, 0.002180f, 0.002333f, 0.002388f,
+ 0.002584f, 0.002777f, 0.002907f, 0.003162f, 0.003368f, 0.003677f, 0.003979f, 0.004303f,
+ 0.004715f, 0.005188f, 0.005787f, 0.006378f, 0.007313f, 0.008194f, 0.009407f, 0.010887f,
+ 0.012779f, 0.015198f, 0.018494f, 0.022888f, 0.029037f, 0.037659f, 0.048920f, 0.064270f,
+ 0.083740f, 0.107300f, 0.565918f, 0.603516f, 0.611328f, 0.614746f, 0.617188f, 0.618164f,
+ 0.000000f, 0.000170f, 0.000207f, 0.000274f, 0.000292f, 0.000309f, 0.000381f, 0.000326f,
+ 0.000418f, 0.000439f, 0.000519f, 0.000519f, 0.000560f, 0.000574f, 0.000652f, 0.000678f,
+ 0.000717f, 0.000756f, 0.000782f, 0.000820f, 0.000893f, 0.000937f, 0.000991f, 0.001063f,
+ 0.001112f, 0.001174f, 0.001284f, 0.001302f, 0.001408f, 0.001460f, 0.001586f, 0.001711f,
+ 0.001826f, 0.001959f, 0.002058f, 0.002207f, 0.002388f, 0.002565f, 0.002836f, 0.003046f,
+ 0.003284f, 0.003567f, 0.004009f, 0.004463f, 0.005001f, 0.005661f, 0.006451f, 0.007473f,
+ 0.008751f, 0.010368f, 0.012611f, 0.015587f, 0.019730f, 0.025787f, 0.034729f, 0.047272f,
+ 0.064392f, 0.087097f, 0.550293f, 0.587891f, 0.596680f, 0.600586f, 0.602539f, 0.603516f,
+ 0.000000f, 0.000057f, 0.000175f, 0.000210f, 0.000221f, 0.000261f, 0.000224f, 0.000285f,
+ 0.000296f, 0.000329f, 0.000374f, 0.000329f, 0.000344f, 0.000416f, 0.000421f, 0.000479f,
+ 0.000455f, 0.000530f, 0.000552f, 0.000598f, 0.000640f, 0.000670f, 0.000695f, 0.000740f,
+ 0.000798f, 0.000806f, 0.000883f, 0.000908f, 0.000983f, 0.001094f, 0.001083f, 0.001169f,
+ 0.001242f, 0.001340f, 0.001440f, 0.001536f, 0.001601f, 0.001752f, 0.001893f, 0.002029f,
+ 0.002218f, 0.002424f, 0.002651f, 0.002934f, 0.003294f, 0.003681f, 0.004200f, 0.004833f,
+ 0.005688f, 0.006863f, 0.008202f, 0.010178f, 0.012955f, 0.016846f, 0.023163f, 0.032745f,
+ 0.047150f, 0.067383f, 0.534180f, 0.574219f, 0.582031f, 0.584961f, 0.586914f, 0.589844f,
+ 0.000000f, 0.000105f, 0.000145f, 0.000101f, 0.000161f, 0.000163f, 0.000165f, 0.000193f,
+ 0.000190f, 0.000202f, 0.000205f, 0.000260f, 0.000251f, 0.000281f, 0.000305f, 0.000316f,
+ 0.000323f, 0.000346f, 0.000364f, 0.000383f, 0.000413f, 0.000436f, 0.000461f, 0.000486f,
+ 0.000515f, 0.000564f, 0.000594f, 0.000616f, 0.000639f, 0.000677f, 0.000729f, 0.000748f,
+ 0.000842f, 0.000861f, 0.000943f, 0.000970f, 0.001054f, 0.001120f, 0.001219f, 0.001310f,
+ 0.001398f, 0.001534f, 0.001709f, 0.001852f, 0.002096f, 0.002291f, 0.002594f, 0.002987f,
+ 0.003481f, 0.004128f, 0.004997f, 0.006218f, 0.007950f, 0.010445f, 0.014313f, 0.020874f,
+ 0.032166f, 0.049866f, 0.517578f, 0.558105f, 0.567383f, 0.570801f, 0.573730f, 0.574707f,
+ 0.000000f, 0.000097f, 0.000089f, 0.000082f, 0.000092f, 0.000096f, 0.000092f, 0.000118f,
+ 0.000126f, 0.000130f, 0.000138f, 0.000138f, 0.000143f, 0.000163f, 0.000181f, 0.000187f,
+ 0.000195f, 0.000228f, 0.000221f, 0.000261f, 0.000243f, 0.000254f, 0.000274f, 0.000299f,
+ 0.000334f, 0.000332f, 0.000345f, 0.000362f, 0.000394f, 0.000410f, 0.000433f, 0.000463f,
+ 0.000497f, 0.000510f, 0.000562f, 0.000594f, 0.000636f, 0.000670f, 0.000731f, 0.000777f,
+ 0.000832f, 0.000927f, 0.000991f, 0.001101f, 0.001210f, 0.001350f, 0.001513f, 0.001720f,
+ 0.001999f, 0.002373f, 0.002815f, 0.003498f, 0.004478f, 0.006001f, 0.008347f, 0.012299f,
+ 0.019669f, 0.034210f, 0.501465f, 0.542969f, 0.552246f, 0.556641f, 0.559082f, 0.559570f,
+ 0.000107f, 0.000087f, 0.000077f, 0.000070f, 0.000065f, 0.000066f, 0.000059f, 0.000064f,
+ 0.000065f, 0.000071f, 0.000070f, 0.000095f, 0.000081f, 0.000085f, 0.000110f, 0.000097f,
+ 0.000117f, 0.000126f, 0.000127f, 0.000133f, 0.000132f, 0.000141f, 0.000169f, 0.000173f,
+ 0.000185f, 0.000183f, 0.000192f, 0.000215f, 0.000216f, 0.000235f, 0.000236f, 0.000265f,
+ 0.000278f, 0.000290f, 0.000313f, 0.000317f, 0.000347f, 0.000365f, 0.000400f, 0.000422f,
+ 0.000457f, 0.000494f, 0.000535f, 0.000586f, 0.000639f, 0.000700f, 0.000786f, 0.000888f,
+ 0.001019f, 0.001207f, 0.001435f, 0.001746f, 0.002258f, 0.003019f, 0.004299f, 0.006523f,
+ 0.010612f, 0.020859f, 0.484619f, 0.527344f, 0.536621f, 0.541504f, 0.542969f, 0.544922f,
+ 0.000092f, 0.000070f, 0.000062f, 0.000056f, 0.000051f, 0.000048f, 0.000045f, 0.000044f,
+ 0.000041f, 0.000039f, 0.000038f, 0.000037f, 0.000047f, 0.000039f, 0.000041f, 0.000041f,
+ 0.000058f, 0.000053f, 0.000062f, 0.000064f, 0.000068f, 0.000072f, 0.000076f, 0.000076f,
+ 0.000078f, 0.000092f, 0.000085f, 0.000101f, 0.000104f, 0.000110f, 0.000115f, 0.000118f,
+ 0.000127f, 0.000133f, 0.000152f, 0.000150f, 0.000163f, 0.000190f, 0.000190f, 0.000202f,
+ 0.000213f, 0.000225f, 0.000249f, 0.000268f, 0.000296f, 0.000321f, 0.000354f, 0.000402f,
+ 0.000458f, 0.000520f, 0.000618f, 0.000744f, 0.000950f, 0.001263f, 0.001822f, 0.002865f,
+ 0.005028f, 0.010544f, 0.468018f, 0.511230f, 0.521484f, 0.524902f, 0.529297f, 0.529785f,
+ 0.000067f, 0.000049f, 0.000041f, 0.000037f, 0.000034f, 0.000032f, 0.000031f, 0.000029f,
+ 0.000028f, 0.000027f, 0.000027f, 0.000026f, 0.000025f, 0.000023f, 0.000022f, 0.000021f,
+ 0.000020f, 0.000020f, 0.000023f, 0.000024f, 0.000021f, 0.000022f, 0.000025f, 0.000029f,
+ 0.000030f, 0.000034f, 0.000036f, 0.000034f, 0.000039f, 0.000038f, 0.000045f, 0.000045f,
+ 0.000048f, 0.000051f, 0.000053f, 0.000055f, 0.000063f, 0.000070f, 0.000073f, 0.000073f,
+ 0.000080f, 0.000084f, 0.000089f, 0.000102f, 0.000107f, 0.000115f, 0.000128f, 0.000145f,
+ 0.000156f, 0.000178f, 0.000213f, 0.000253f, 0.000311f, 0.000400f, 0.000572f, 0.000916f,
+ 0.001751f, 0.004158f, 0.450439f, 0.496338f, 0.505859f, 0.510742f, 0.513184f, 0.514648f,
+ 0.000016f, 0.000013f, 0.000011f, 0.000010f, 0.000012f, 0.000012f, 0.000011f, 0.000012f,
+ 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f,
+ 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000009f,
+ 0.000009f, 0.000011f, 0.000012f, 0.000012f, 0.000015f, 0.000014f, 0.000014f, 0.000017f,
+ 0.000018f, 0.000020f, 0.000020f, 0.000022f, 0.000026f, 0.000027f, 0.000028f, 0.000027f,
+ 0.000033f, 0.000036f, 0.000044f, 0.000051f, 0.000057f, 0.000078f, 0.000103f, 0.000159f,
+ 0.000315f, 0.000997f, 0.433350f, 0.479980f, 0.490234f, 0.495605f, 0.498291f, 0.499512f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f,
+ 0.000007f, 0.000025f, 0.416016f, 0.464111f, 0.474854f, 0.479248f, 0.481934f, 0.484375f,
+ },
+ {
+ 0.023209f, 0.069336f, 0.113037f, 0.154663f, 0.193726f, 0.231812f, 0.267578f, 0.301758f,
+ 0.333740f, 0.364258f, 0.393555f, 0.421631f, 0.447510f, 0.473145f, 0.497070f, 0.520020f,
+ 0.541992f, 0.562988f, 0.583008f, 0.602539f, 0.620605f, 0.638184f, 0.655762f, 0.671387f,
+ 0.687500f, 0.702637f, 0.716309f, 0.729980f, 0.744141f, 0.757812f, 0.769531f, 0.782227f,
+ 0.793945f, 0.804688f, 0.815918f, 0.826172f, 0.836426f, 0.846191f, 0.855957f, 0.865234f,
+ 0.874023f, 0.882812f, 0.891113f, 0.898926f, 0.907227f, 0.915039f, 0.922852f, 0.929688f,
+ 0.937012f, 0.943848f, 0.950684f, 0.956543f, 0.963379f, 0.969238f, 0.976074f, 0.981445f,
+ 0.986816f, 0.992676f, 0.991211f, 0.978516f, 0.968750f, 0.960449f, 0.952637f, 0.945312f,
+ 0.019730f, 0.059631f, 0.098206f, 0.135864f, 0.172119f, 0.206421f, 0.239624f, 0.272461f,
+ 0.304932f, 0.333984f, 0.362549f, 0.389648f, 0.416016f, 0.441406f, 0.466309f, 0.489502f,
+ 0.511230f, 0.533203f, 0.554199f, 0.573242f, 0.593262f, 0.611816f, 0.629395f, 0.645508f,
+ 0.662598f, 0.678711f, 0.693359f, 0.708496f, 0.722168f, 0.735840f, 0.750000f, 0.762207f,
+ 0.773926f, 0.786133f, 0.796875f, 0.808594f, 0.818848f, 0.829590f, 0.839355f, 0.850098f,
+ 0.859863f, 0.868652f, 0.877441f, 0.886230f, 0.895020f, 0.903809f, 0.911133f, 0.918457f,
+ 0.925781f, 0.933105f, 0.940430f, 0.946777f, 0.954590f, 0.960938f, 0.966797f, 0.973145f,
+ 0.979004f, 0.984863f, 0.987793f, 0.976074f, 0.966797f, 0.958496f, 0.951172f, 0.943848f,
+ 0.017151f, 0.051636f, 0.085510f, 0.119202f, 0.152466f, 0.184814f, 0.216187f, 0.246582f,
+ 0.276855f, 0.305664f, 0.332764f, 0.360107f, 0.385986f, 0.411621f, 0.435791f, 0.459473f,
+ 0.481445f, 0.502441f, 0.524414f, 0.546387f, 0.565430f, 0.583496f, 0.602051f, 0.619629f,
+ 0.636719f, 0.653320f, 0.669434f, 0.684082f, 0.699707f, 0.713867f, 0.728027f, 0.741211f,
+ 0.754883f, 0.767090f, 0.779297f, 0.791016f, 0.802734f, 0.813965f, 0.824219f, 0.833984f,
+ 0.843750f, 0.854492f, 0.863281f, 0.873535f, 0.882324f, 0.890137f, 0.898926f, 0.906738f,
+ 0.915039f, 0.922852f, 0.930176f, 0.937012f, 0.944336f, 0.951172f, 0.958008f, 0.964844f,
+ 0.970703f, 0.977051f, 0.983887f, 0.972656f, 0.964355f, 0.956543f, 0.949219f, 0.942383f,
+ 0.014885f, 0.044678f, 0.075195f, 0.104919f, 0.135254f, 0.165649f, 0.194702f, 0.223633f,
+ 0.251221f, 0.279053f, 0.305420f, 0.331543f, 0.357422f, 0.382568f, 0.406982f, 0.430420f,
+ 0.453369f, 0.475586f, 0.496582f, 0.517090f, 0.536133f, 0.556641f, 0.575684f, 0.592773f,
+ 0.611328f, 0.628418f, 0.643555f, 0.661621f, 0.676270f, 0.691406f, 0.705566f, 0.720215f,
+ 0.733887f, 0.746582f, 0.759766f, 0.772949f, 0.784668f, 0.795898f, 0.807129f, 0.818359f,
+ 0.828125f, 0.838867f, 0.848633f, 0.858887f, 0.867676f, 0.877441f, 0.886230f, 0.894531f,
+ 0.903320f, 0.911621f, 0.919434f, 0.927734f, 0.934570f, 0.940918f, 0.948730f, 0.956543f,
+ 0.962402f, 0.969238f, 0.979980f, 0.970215f, 0.961914f, 0.954102f, 0.947266f, 0.940918f,
+ 0.013046f, 0.038940f, 0.066162f, 0.093323f, 0.120544f, 0.147583f, 0.174683f, 0.201538f,
+ 0.228516f, 0.254639f, 0.280518f, 0.304932f, 0.330566f, 0.354492f, 0.379395f, 0.402100f,
+ 0.424561f, 0.446533f, 0.467529f, 0.488525f, 0.509277f, 0.529297f, 0.547852f, 0.566895f,
+ 0.585449f, 0.602539f, 0.620605f, 0.636230f, 0.653809f, 0.667480f, 0.684570f, 0.698242f,
+ 0.712891f, 0.726562f, 0.739746f, 0.753418f, 0.765625f, 0.777344f, 0.789551f, 0.801270f,
+ 0.812500f, 0.823730f, 0.833984f, 0.844238f, 0.854004f, 0.863770f, 0.874023f, 0.882324f,
+ 0.891113f, 0.899902f, 0.908203f, 0.916504f, 0.924805f, 0.932129f, 0.939453f, 0.947266f,
+ 0.954102f, 0.960938f, 0.976562f, 0.967285f, 0.958984f, 0.951660f, 0.944824f, 0.938965f,
+ 0.011696f, 0.034698f, 0.058807f, 0.083130f, 0.107727f, 0.132324f, 0.156982f, 0.182251f,
+ 0.207153f, 0.232178f, 0.256836f, 0.280762f, 0.304688f, 0.328369f, 0.352295f, 0.375244f,
+ 0.397461f, 0.419434f, 0.440430f, 0.461914f, 0.482178f, 0.501953f, 0.522461f, 0.540527f,
+ 0.559570f, 0.577148f, 0.595703f, 0.613281f, 0.628418f, 0.644531f, 0.661621f, 0.676270f,
+ 0.691406f, 0.705078f, 0.719727f, 0.733887f, 0.746094f, 0.759766f, 0.771973f, 0.784180f,
+ 0.795898f, 0.807617f, 0.818359f, 0.829102f, 0.839844f, 0.850098f, 0.859375f, 0.869629f,
+ 0.878906f, 0.887695f, 0.896484f, 0.905273f, 0.914062f, 0.921875f, 0.929688f, 0.937988f,
+ 0.944824f, 0.952637f, 0.973145f, 0.963379f, 0.956055f, 0.949219f, 0.942871f, 0.937012f,
+ 0.010094f, 0.030975f, 0.052063f, 0.073975f, 0.096069f, 0.118713f, 0.141479f, 0.164551f,
+ 0.187866f, 0.211182f, 0.234985f, 0.258057f, 0.280518f, 0.303467f, 0.326172f, 0.348145f,
+ 0.370117f, 0.392822f, 0.413574f, 0.434814f, 0.455322f, 0.476074f, 0.495361f, 0.515137f,
+ 0.533203f, 0.551758f, 0.569824f, 0.586426f, 0.604492f, 0.621582f, 0.637695f, 0.654297f,
+ 0.668945f, 0.683594f, 0.699219f, 0.712402f, 0.728516f, 0.741699f, 0.753906f, 0.767090f,
+ 0.778320f, 0.790527f, 0.802246f, 0.813965f, 0.824219f, 0.835449f, 0.846680f, 0.855957f,
+ 0.865723f, 0.875488f, 0.884766f, 0.894043f, 0.902832f, 0.911133f, 0.919434f, 0.927734f,
+ 0.935547f, 0.943359f, 0.968750f, 0.960449f, 0.953125f, 0.946289f, 0.940430f, 0.934570f,
+ 0.008797f, 0.027466f, 0.045959f, 0.066223f, 0.086304f, 0.106506f, 0.127441f, 0.149170f,
+ 0.170532f, 0.192261f, 0.213867f, 0.236206f, 0.258057f, 0.280273f, 0.301758f, 0.323486f,
+ 0.344727f, 0.367188f, 0.388184f, 0.408447f, 0.429443f, 0.450439f, 0.469727f, 0.489014f,
+ 0.508301f, 0.526855f, 0.545410f, 0.562500f, 0.581055f, 0.597656f, 0.613770f, 0.630859f,
+ 0.647461f, 0.663574f, 0.677734f, 0.693359f, 0.707031f, 0.720703f, 0.735352f, 0.748047f,
+ 0.760254f, 0.772461f, 0.785156f, 0.797363f, 0.810059f, 0.819824f, 0.831543f, 0.842285f,
+ 0.852051f, 0.862793f, 0.873047f, 0.882324f, 0.891113f, 0.899902f, 0.909180f, 0.917969f,
+ 0.925781f, 0.934082f, 0.964355f, 0.957031f, 0.949707f, 0.943359f, 0.937988f, 0.932129f,
+ 0.007927f, 0.024414f, 0.041077f, 0.059204f, 0.077148f, 0.095581f, 0.115479f, 0.134644f,
+ 0.154785f, 0.175293f, 0.196045f, 0.216553f, 0.236694f, 0.258057f, 0.278809f, 0.300049f,
+ 0.321289f, 0.342529f, 0.363281f, 0.383545f, 0.403564f, 0.424072f, 0.444092f, 0.463135f,
+ 0.483154f, 0.501953f, 0.519531f, 0.539062f, 0.555664f, 0.574707f, 0.591309f, 0.608398f,
+ 0.624512f, 0.640137f, 0.655762f, 0.671875f, 0.686523f, 0.701172f, 0.715820f, 0.729004f,
+ 0.742676f, 0.755859f, 0.769043f, 0.781738f, 0.792969f, 0.805176f, 0.816895f, 0.827637f,
+ 0.838867f, 0.849121f, 0.859375f, 0.870117f, 0.879395f, 0.889160f, 0.898926f, 0.906738f,
+ 0.916504f, 0.924805f, 0.960938f, 0.953125f, 0.947266f, 0.940430f, 0.935547f, 0.929688f,
+ 0.007080f, 0.022247f, 0.037445f, 0.053070f, 0.069336f, 0.086975f, 0.103577f, 0.121948f,
+ 0.140503f, 0.158936f, 0.178833f, 0.198242f, 0.217651f, 0.237793f, 0.257812f, 0.278076f,
+ 0.297607f, 0.318604f, 0.338623f, 0.358643f, 0.378662f, 0.399170f, 0.418213f, 0.438721f,
+ 0.457520f, 0.477051f, 0.495361f, 0.513672f, 0.531250f, 0.549316f, 0.567383f, 0.583984f,
+ 0.601562f, 0.617676f, 0.634277f, 0.650391f, 0.666016f, 0.680176f, 0.695801f, 0.710449f,
+ 0.723633f, 0.737305f, 0.750977f, 0.764648f, 0.776367f, 0.789551f, 0.802246f, 0.813477f,
+ 0.824219f, 0.835938f, 0.846680f, 0.857422f, 0.867188f, 0.876953f, 0.887207f, 0.895996f,
+ 0.905762f, 0.915527f, 0.955566f, 0.949707f, 0.943359f, 0.937988f, 0.932129f, 0.927246f,
+ 0.006363f, 0.019516f, 0.033691f, 0.047577f, 0.062469f, 0.078186f, 0.093933f, 0.110657f,
+ 0.127563f, 0.144653f, 0.162598f, 0.181152f, 0.199707f, 0.218384f, 0.237427f, 0.257324f,
+ 0.276367f, 0.295166f, 0.315674f, 0.335205f, 0.355225f, 0.374756f, 0.393799f, 0.413574f,
+ 0.432617f, 0.451904f, 0.470459f, 0.489258f, 0.508301f, 0.525879f, 0.543945f, 0.560059f,
+ 0.578613f, 0.595703f, 0.612793f, 0.628418f, 0.644531f, 0.659668f, 0.675293f, 0.689941f,
+ 0.704590f, 0.719238f, 0.732910f, 0.747070f, 0.759766f, 0.773438f, 0.785156f, 0.797852f,
+ 0.809570f, 0.821289f, 0.833008f, 0.843750f, 0.854980f, 0.865723f, 0.875977f, 0.886230f,
+ 0.895508f, 0.904785f, 0.951660f, 0.945801f, 0.939941f, 0.934570f, 0.929199f, 0.924805f,
+ 0.005985f, 0.017776f, 0.030212f, 0.043030f, 0.056488f, 0.070190f, 0.085205f, 0.100342f,
+ 0.115723f, 0.132446f, 0.148438f, 0.165771f, 0.183228f, 0.200684f, 0.218994f, 0.237183f,
+ 0.255859f, 0.274170f, 0.292725f, 0.313477f, 0.331299f, 0.351318f, 0.369873f, 0.389160f,
+ 0.408936f, 0.426758f, 0.446533f, 0.464844f, 0.483154f, 0.501465f, 0.519531f, 0.537598f,
+ 0.555664f, 0.572754f, 0.589844f, 0.605957f, 0.622070f, 0.639648f, 0.654297f, 0.670898f,
+ 0.685059f, 0.700195f, 0.714844f, 0.728516f, 0.742188f, 0.754883f, 0.769043f, 0.781738f,
+ 0.795410f, 0.808105f, 0.818359f, 0.830566f, 0.841797f, 0.853027f, 0.863770f, 0.874023f,
+ 0.884766f, 0.893555f, 0.947266f, 0.942383f, 0.936523f, 0.930664f, 0.926270f, 0.921387f,
+ 0.005173f, 0.016083f, 0.027359f, 0.038849f, 0.051056f, 0.063843f, 0.077026f, 0.091064f,
+ 0.105591f, 0.120422f, 0.135498f, 0.150879f, 0.167480f, 0.184326f, 0.201172f, 0.218384f,
+ 0.236084f, 0.254395f, 0.272949f, 0.291260f, 0.309570f, 0.328125f, 0.346680f, 0.365967f,
+ 0.384766f, 0.403320f, 0.422119f, 0.440918f, 0.458984f, 0.477783f, 0.496094f, 0.513672f,
+ 0.531738f, 0.548828f, 0.566406f, 0.583984f, 0.600098f, 0.617188f, 0.632812f, 0.649902f,
+ 0.665527f, 0.681152f, 0.694824f, 0.709473f, 0.724121f, 0.738770f, 0.752441f, 0.765137f,
+ 0.778809f, 0.791992f, 0.803711f, 0.815918f, 0.828125f, 0.839844f, 0.851562f, 0.862793f,
+ 0.873535f, 0.883789f, 0.941895f, 0.938477f, 0.933105f, 0.927246f, 0.922363f, 0.918457f,
+ 0.004791f, 0.014610f, 0.024475f, 0.035126f, 0.046478f, 0.057922f, 0.069885f, 0.083008f,
+ 0.096069f, 0.109253f, 0.123840f, 0.137939f, 0.153076f, 0.168701f, 0.185059f, 0.200928f,
+ 0.218262f, 0.234985f, 0.252686f, 0.270264f, 0.288086f, 0.306396f, 0.324951f, 0.343018f,
+ 0.362305f, 0.379883f, 0.398926f, 0.417236f, 0.435547f, 0.454346f, 0.472656f, 0.491211f,
+ 0.508301f, 0.526855f, 0.543457f, 0.561523f, 0.578125f, 0.595215f, 0.612305f, 0.628418f,
+ 0.644043f, 0.660645f, 0.675781f, 0.691406f, 0.706055f, 0.720215f, 0.735840f, 0.749023f,
+ 0.762695f, 0.776855f, 0.789551f, 0.800781f, 0.814941f, 0.826172f, 0.838867f, 0.851074f,
+ 0.862305f, 0.872070f, 0.937500f, 0.933594f, 0.929199f, 0.923828f, 0.919434f, 0.915527f,
+ 0.004387f, 0.013268f, 0.022385f, 0.031860f, 0.041962f, 0.052612f, 0.063171f, 0.075073f,
+ 0.086792f, 0.099854f, 0.113037f, 0.125977f, 0.140381f, 0.154663f, 0.169678f, 0.184814f,
+ 0.200562f, 0.217773f, 0.234131f, 0.250732f, 0.268066f, 0.284912f, 0.303223f, 0.321289f,
+ 0.339355f, 0.357666f, 0.375488f, 0.394043f, 0.411865f, 0.430664f, 0.448730f, 0.467041f,
+ 0.485352f, 0.503418f, 0.520508f, 0.539062f, 0.556152f, 0.573242f, 0.590820f, 0.606934f,
+ 0.624512f, 0.640625f, 0.655762f, 0.672363f, 0.687500f, 0.702148f, 0.718750f, 0.731934f,
+ 0.746582f, 0.759766f, 0.772949f, 0.787109f, 0.800781f, 0.813477f, 0.825195f, 0.838379f,
+ 0.850098f, 0.861816f, 0.932617f, 0.929688f, 0.925293f, 0.919922f, 0.915527f, 0.912109f,
+ 0.003941f, 0.011986f, 0.020630f, 0.029144f, 0.038544f, 0.048035f, 0.058075f, 0.068542f,
+ 0.079590f, 0.090942f, 0.102661f, 0.115295f, 0.128296f, 0.141602f, 0.155518f, 0.170654f,
+ 0.185425f, 0.200684f, 0.216309f, 0.231812f, 0.249146f, 0.265137f, 0.282471f, 0.299072f,
+ 0.317139f, 0.334717f, 0.352783f, 0.371338f, 0.388916f, 0.406982f, 0.425537f, 0.443848f,
+ 0.461914f, 0.479980f, 0.498291f, 0.515625f, 0.533203f, 0.550293f, 0.568359f, 0.585449f,
+ 0.603027f, 0.618652f, 0.635742f, 0.652344f, 0.668457f, 0.684082f, 0.699219f, 0.713867f,
+ 0.729004f, 0.743652f, 0.757812f, 0.771484f, 0.785645f, 0.798828f, 0.812012f, 0.824219f,
+ 0.836914f, 0.850098f, 0.927246f, 0.925293f, 0.920410f, 0.916504f, 0.912598f, 0.908203f,
+ 0.003790f, 0.011009f, 0.018829f, 0.026779f, 0.035339f, 0.043762f, 0.053223f, 0.062408f,
+ 0.072693f, 0.082947f, 0.093689f, 0.105469f, 0.117554f, 0.130005f, 0.142822f, 0.156494f,
+ 0.170166f, 0.184448f, 0.198975f, 0.213745f, 0.230469f, 0.246460f, 0.262939f, 0.279541f,
+ 0.296143f, 0.313721f, 0.331299f, 0.348633f, 0.367188f, 0.384521f, 0.402344f, 0.420410f,
+ 0.438965f, 0.457275f, 0.475830f, 0.493164f, 0.510742f, 0.528809f, 0.546387f, 0.564453f,
+ 0.581055f, 0.598145f, 0.615234f, 0.631836f, 0.647461f, 0.665527f, 0.680664f, 0.696289f,
+ 0.711914f, 0.728027f, 0.741211f, 0.756836f, 0.770508f, 0.783691f, 0.798340f, 0.811523f,
+ 0.824219f, 0.837402f, 0.921387f, 0.920410f, 0.916504f, 0.913086f, 0.908691f, 0.904785f,
+ 0.003479f, 0.009949f, 0.016937f, 0.024445f, 0.031708f, 0.039948f, 0.048218f, 0.056793f,
+ 0.066223f, 0.075928f, 0.085632f, 0.096313f, 0.107178f, 0.118958f, 0.130493f, 0.143311f,
+ 0.156494f, 0.170044f, 0.183960f, 0.197876f, 0.213501f, 0.228027f, 0.244019f, 0.260010f,
+ 0.276611f, 0.293213f, 0.309814f, 0.327393f, 0.344482f, 0.363037f, 0.379883f, 0.398438f,
+ 0.416504f, 0.434082f, 0.451904f, 0.470215f, 0.488525f, 0.505859f, 0.523926f, 0.541504f,
+ 0.559570f, 0.577637f, 0.594238f, 0.611328f, 0.628418f, 0.645020f, 0.661133f, 0.677246f,
+ 0.693848f, 0.709961f, 0.725586f, 0.739746f, 0.755371f, 0.769531f, 0.783203f, 0.797852f,
+ 0.810547f, 0.824707f, 0.916016f, 0.915527f, 0.912109f, 0.908691f, 0.904785f, 0.900879f,
+ 0.003014f, 0.008842f, 0.015640f, 0.022018f, 0.028885f, 0.036163f, 0.044250f, 0.051819f,
+ 0.059967f, 0.069031f, 0.078247f, 0.088135f, 0.098267f, 0.108337f, 0.119751f, 0.131470f,
+ 0.143433f, 0.156006f, 0.169189f, 0.183105f, 0.196655f, 0.211304f, 0.226196f, 0.241211f,
+ 0.257080f, 0.273438f, 0.289307f, 0.306396f, 0.323975f, 0.340576f, 0.358398f, 0.375732f,
+ 0.393799f, 0.411133f, 0.429688f, 0.447998f, 0.466064f, 0.483887f, 0.501465f, 0.519531f,
+ 0.537598f, 0.555664f, 0.573242f, 0.590820f, 0.607910f, 0.625000f, 0.642578f, 0.658203f,
+ 0.675293f, 0.691406f, 0.707520f, 0.724121f, 0.738770f, 0.753418f, 0.769531f, 0.783203f,
+ 0.797363f, 0.811523f, 0.910156f, 0.910645f, 0.907715f, 0.904785f, 0.900879f, 0.896973f,
+ 0.002861f, 0.008591f, 0.014000f, 0.020203f, 0.026962f, 0.033203f, 0.040161f, 0.047485f,
+ 0.055237f, 0.062988f, 0.071594f, 0.080750f, 0.089905f, 0.099854f, 0.109741f, 0.120056f,
+ 0.131592f, 0.143311f, 0.155640f, 0.167969f, 0.181763f, 0.195190f, 0.209229f, 0.223877f,
+ 0.238647f, 0.254150f, 0.269531f, 0.285889f, 0.302979f, 0.319824f, 0.336426f, 0.354004f,
+ 0.372070f, 0.389893f, 0.406982f, 0.424805f, 0.443359f, 0.461182f, 0.479492f, 0.498047f,
+ 0.515625f, 0.533691f, 0.551270f, 0.569336f, 0.587402f, 0.604492f, 0.622070f, 0.639160f,
+ 0.656738f, 0.673828f, 0.689941f, 0.705566f, 0.722168f, 0.737793f, 0.753418f, 0.768066f,
+ 0.783203f, 0.798340f, 0.904297f, 0.905762f, 0.902832f, 0.899414f, 0.895996f, 0.893066f,
+ 0.002535f, 0.007812f, 0.013252f, 0.018738f, 0.024384f, 0.030548f, 0.036774f, 0.043427f,
+ 0.050476f, 0.057556f, 0.065491f, 0.073425f, 0.082458f, 0.091370f, 0.100525f, 0.110413f,
+ 0.120605f, 0.131592f, 0.142822f, 0.154663f, 0.166870f, 0.180176f, 0.193237f, 0.207031f,
+ 0.221191f, 0.236084f, 0.250732f, 0.266602f, 0.282959f, 0.299072f, 0.315430f, 0.332520f,
+ 0.350342f, 0.367676f, 0.385010f, 0.403076f, 0.421631f, 0.439209f, 0.457520f, 0.475342f,
+ 0.494141f, 0.512695f, 0.530273f, 0.547852f, 0.565918f, 0.584473f, 0.602051f, 0.619629f,
+ 0.637207f, 0.655273f, 0.671387f, 0.688965f, 0.706055f, 0.721191f, 0.737305f, 0.752930f,
+ 0.769531f, 0.784668f, 0.898438f, 0.900879f, 0.897949f, 0.894531f, 0.891602f, 0.888672f,
+ 0.002411f, 0.007103f, 0.012161f, 0.017105f, 0.022385f, 0.027985f, 0.033203f, 0.039581f,
+ 0.045532f, 0.052521f, 0.059814f, 0.067261f, 0.074768f, 0.083313f, 0.092041f, 0.101013f,
+ 0.110291f, 0.120361f, 0.130615f, 0.141724f, 0.153076f, 0.165283f, 0.177612f, 0.190918f,
+ 0.204346f, 0.218506f, 0.233154f, 0.247559f, 0.263428f, 0.279053f, 0.295166f, 0.312256f,
+ 0.328857f, 0.345947f, 0.363281f, 0.381348f, 0.398926f, 0.417236f, 0.435547f, 0.453369f,
+ 0.471191f, 0.489502f, 0.508301f, 0.525879f, 0.545410f, 0.563477f, 0.581055f, 0.600098f,
+ 0.617676f, 0.635254f, 0.653809f, 0.670410f, 0.687500f, 0.705078f, 0.720703f, 0.736816f,
+ 0.753418f, 0.769531f, 0.892090f, 0.895020f, 0.892578f, 0.889648f, 0.887207f, 0.884277f,
+ 0.002344f, 0.006565f, 0.011322f, 0.015686f, 0.020630f, 0.025574f, 0.030807f, 0.035980f,
+ 0.042084f, 0.048279f, 0.054352f, 0.061432f, 0.068848f, 0.076172f, 0.083618f, 0.092590f,
+ 0.101135f, 0.109619f, 0.120178f, 0.130249f, 0.140991f, 0.151978f, 0.163696f, 0.175781f,
+ 0.188721f, 0.202026f, 0.215820f, 0.230103f, 0.244873f, 0.259766f, 0.275635f, 0.291504f,
+ 0.307617f, 0.324219f, 0.342041f, 0.358887f, 0.376709f, 0.394775f, 0.412354f, 0.431152f,
+ 0.448975f, 0.468018f, 0.486328f, 0.504883f, 0.523438f, 0.541992f, 0.560547f, 0.579102f,
+ 0.597656f, 0.615234f, 0.633789f, 0.651855f, 0.669434f, 0.687500f, 0.704590f, 0.721680f,
+ 0.738770f, 0.755859f, 0.886719f, 0.889648f, 0.887695f, 0.884766f, 0.882812f, 0.879883f,
+ 0.002003f, 0.006268f, 0.009987f, 0.014198f, 0.018875f, 0.023605f, 0.028259f, 0.033203f,
+ 0.038513f, 0.044495f, 0.049866f, 0.056152f, 0.062500f, 0.069458f, 0.076660f, 0.084473f,
+ 0.092163f, 0.100586f, 0.109741f, 0.119324f, 0.128662f, 0.139526f, 0.150146f, 0.161499f,
+ 0.173706f, 0.185791f, 0.199341f, 0.212891f, 0.227051f, 0.241455f, 0.256592f, 0.271729f,
+ 0.288330f, 0.304199f, 0.321045f, 0.337891f, 0.355469f, 0.373291f, 0.391113f, 0.408936f,
+ 0.426758f, 0.446289f, 0.464600f, 0.483643f, 0.500977f, 0.520996f, 0.539551f, 0.558594f,
+ 0.577148f, 0.595703f, 0.614746f, 0.632324f, 0.650879f, 0.669434f, 0.687012f, 0.704590f,
+ 0.722656f, 0.740234f, 0.880371f, 0.883301f, 0.881836f, 0.879883f, 0.877441f, 0.875000f,
+ 0.001739f, 0.005779f, 0.009598f, 0.013245f, 0.017334f, 0.021637f, 0.025955f, 0.030121f,
+ 0.035217f, 0.040131f, 0.045990f, 0.051453f, 0.056915f, 0.063354f, 0.070007f, 0.076965f,
+ 0.084351f, 0.091980f, 0.100281f, 0.108826f, 0.117981f, 0.127441f, 0.137939f, 0.148315f,
+ 0.160034f, 0.171753f, 0.183594f, 0.196167f, 0.209961f, 0.223511f, 0.238037f, 0.252930f,
+ 0.268066f, 0.284180f, 0.300537f, 0.317139f, 0.333740f, 0.351074f, 0.368896f, 0.386719f,
+ 0.405273f, 0.423584f, 0.442871f, 0.460938f, 0.479736f, 0.499512f, 0.517578f, 0.537109f,
+ 0.555664f, 0.575195f, 0.594238f, 0.613770f, 0.632324f, 0.650879f, 0.669922f, 0.687988f,
+ 0.706055f, 0.724121f, 0.873047f, 0.876953f, 0.875488f, 0.874023f, 0.872559f, 0.869141f,
+ 0.001648f, 0.005039f, 0.008675f, 0.012161f, 0.015823f, 0.019760f, 0.023865f, 0.028015f,
+ 0.032318f, 0.036865f, 0.041504f, 0.046906f, 0.051758f, 0.057922f, 0.064087f, 0.070435f,
+ 0.077209f, 0.084290f, 0.091736f, 0.099243f, 0.108215f, 0.117004f, 0.126343f, 0.135620f,
+ 0.146484f, 0.157349f, 0.168823f, 0.180908f, 0.193848f, 0.206909f, 0.220459f, 0.234619f,
+ 0.249634f, 0.264404f, 0.280273f, 0.296631f, 0.313232f, 0.329834f, 0.347412f, 0.365479f,
+ 0.383545f, 0.401855f, 0.420166f, 0.438721f, 0.458252f, 0.477783f, 0.496826f, 0.516602f,
+ 0.535156f, 0.554199f, 0.574219f, 0.593750f, 0.612305f, 0.631836f, 0.651367f, 0.670410f,
+ 0.689453f, 0.708984f, 0.865234f, 0.872070f, 0.870605f, 0.868652f, 0.866699f, 0.863770f,
+ 0.001492f, 0.004704f, 0.007973f, 0.011124f, 0.014603f, 0.017792f, 0.021652f, 0.025314f,
+ 0.029526f, 0.033722f, 0.038147f, 0.042694f, 0.047668f, 0.052673f, 0.057983f, 0.064209f,
+ 0.070068f, 0.076233f, 0.083313f, 0.090942f, 0.098572f, 0.106750f, 0.115295f, 0.124512f,
+ 0.134277f, 0.144287f, 0.154663f, 0.166504f, 0.178345f, 0.190063f, 0.203247f, 0.217041f,
+ 0.231079f, 0.245850f, 0.260986f, 0.276611f, 0.293213f, 0.309570f, 0.326172f, 0.343994f,
+ 0.361816f, 0.379395f, 0.397949f, 0.417480f, 0.436523f, 0.455322f, 0.474854f, 0.493896f,
+ 0.514160f, 0.533691f, 0.553711f, 0.573730f, 0.593262f, 0.612793f, 0.632812f, 0.651855f,
+ 0.672363f, 0.690918f, 0.857910f, 0.865723f, 0.864746f, 0.863281f, 0.860352f, 0.858887f,
+ 0.001657f, 0.004684f, 0.007290f, 0.010201f, 0.013657f, 0.016541f, 0.019989f, 0.023636f,
+ 0.026932f, 0.030548f, 0.034576f, 0.039154f, 0.043793f, 0.048126f, 0.053162f, 0.058319f,
+ 0.063721f, 0.069885f, 0.076355f, 0.082947f, 0.089844f, 0.097046f, 0.105286f, 0.113281f,
+ 0.122559f, 0.131348f, 0.141357f, 0.152100f, 0.163330f, 0.175415f, 0.187256f, 0.199951f,
+ 0.213501f, 0.227051f, 0.241943f, 0.257324f, 0.273193f, 0.288818f, 0.305420f, 0.322754f,
+ 0.340576f, 0.358643f, 0.375732f, 0.394775f, 0.414307f, 0.433105f, 0.453613f, 0.472168f,
+ 0.492188f, 0.512695f, 0.532715f, 0.552246f, 0.573242f, 0.593262f, 0.613770f, 0.632812f,
+ 0.654785f, 0.673828f, 0.851074f, 0.859375f, 0.858398f, 0.856934f, 0.855469f, 0.853027f,
+ 0.001457f, 0.003944f, 0.006870f, 0.009392f, 0.012543f, 0.015190f, 0.018417f, 0.021576f,
+ 0.024811f, 0.028122f, 0.031708f, 0.035278f, 0.039398f, 0.043793f, 0.048218f, 0.052887f,
+ 0.058044f, 0.063477f, 0.069397f, 0.075256f, 0.081360f, 0.088318f, 0.095398f, 0.103210f,
+ 0.111084f, 0.120361f, 0.129150f, 0.139038f, 0.149292f, 0.160645f, 0.172241f, 0.183716f,
+ 0.196533f, 0.209595f, 0.224121f, 0.238647f, 0.253174f, 0.268799f, 0.286133f, 0.302490f,
+ 0.319092f, 0.337158f, 0.355225f, 0.373535f, 0.392090f, 0.411133f, 0.430908f, 0.450928f,
+ 0.470947f, 0.490967f, 0.511719f, 0.531250f, 0.551758f, 0.573730f, 0.594238f, 0.614746f,
+ 0.636230f, 0.656738f, 0.842773f, 0.852051f, 0.851562f, 0.851074f, 0.848633f, 0.846680f,
+ 0.001404f, 0.003891f, 0.006233f, 0.008751f, 0.011353f, 0.014175f, 0.017075f, 0.019592f,
+ 0.022842f, 0.025772f, 0.028839f, 0.032410f, 0.036011f, 0.039764f, 0.043671f, 0.048126f,
+ 0.052704f, 0.057373f, 0.062561f, 0.067688f, 0.074158f, 0.080200f, 0.086853f, 0.093445f,
+ 0.101379f, 0.109192f, 0.117432f, 0.126709f, 0.136353f, 0.146484f, 0.157227f, 0.168823f,
+ 0.180542f, 0.193115f, 0.206299f, 0.219727f, 0.234375f, 0.249756f, 0.265869f, 0.281738f,
+ 0.298096f, 0.315674f, 0.333252f, 0.352051f, 0.370850f, 0.389160f, 0.409180f, 0.428955f,
+ 0.448730f, 0.469971f, 0.489502f, 0.510742f, 0.531738f, 0.552246f, 0.574707f, 0.595215f,
+ 0.617676f, 0.639160f, 0.835449f, 0.845215f, 0.845215f, 0.844238f, 0.843262f, 0.840332f,
+ 0.001275f, 0.003536f, 0.005600f, 0.007881f, 0.010628f, 0.012878f, 0.015610f, 0.018097f,
+ 0.020996f, 0.023376f, 0.026443f, 0.029556f, 0.032867f, 0.036163f, 0.039581f, 0.043915f,
+ 0.047943f, 0.052216f, 0.056763f, 0.061981f, 0.067322f, 0.072449f, 0.078796f, 0.084717f,
+ 0.091919f, 0.098999f, 0.106995f, 0.115417f, 0.124084f, 0.133667f, 0.143433f, 0.154297f,
+ 0.165161f, 0.177124f, 0.189697f, 0.202759f, 0.216309f, 0.230713f, 0.245728f, 0.261719f,
+ 0.278320f, 0.295410f, 0.312256f, 0.330566f, 0.349365f, 0.367676f, 0.386719f, 0.406494f,
+ 0.427246f, 0.447266f, 0.468506f, 0.489746f, 0.510742f, 0.532227f, 0.553711f, 0.575684f,
+ 0.597656f, 0.619141f, 0.826172f, 0.837402f, 0.837891f, 0.837402f, 0.835449f, 0.833984f,
+ 0.001134f, 0.003105f, 0.005337f, 0.007462f, 0.009628f, 0.011833f, 0.014137f, 0.016113f,
+ 0.018875f, 0.021484f, 0.024063f, 0.026581f, 0.029709f, 0.032623f, 0.036194f, 0.039703f,
+ 0.043335f, 0.047058f, 0.051422f, 0.055908f, 0.060608f, 0.065491f, 0.071167f, 0.076843f,
+ 0.083313f, 0.089661f, 0.097168f, 0.104492f, 0.112122f, 0.121155f, 0.130615f, 0.140137f,
+ 0.150757f, 0.161499f, 0.173462f, 0.185547f, 0.199341f, 0.212524f, 0.227051f, 0.242310f,
+ 0.258057f, 0.274414f, 0.291016f, 0.309082f, 0.327148f, 0.345459f, 0.364990f, 0.384521f,
+ 0.404297f, 0.425781f, 0.445801f, 0.467285f, 0.489258f, 0.510254f, 0.533203f, 0.555664f,
+ 0.578125f, 0.601074f, 0.817871f, 0.830078f, 0.831055f, 0.830078f, 0.829102f, 0.828125f,
+ 0.001101f, 0.003019f, 0.004818f, 0.006725f, 0.008781f, 0.010864f, 0.013069f, 0.014801f,
+ 0.017151f, 0.019531f, 0.021973f, 0.024429f, 0.026917f, 0.030121f, 0.033112f, 0.036041f,
+ 0.039337f, 0.042542f, 0.046509f, 0.050537f, 0.054596f, 0.058990f, 0.064209f, 0.069519f,
+ 0.075134f, 0.080994f, 0.087158f, 0.094177f, 0.102051f, 0.109741f, 0.117981f, 0.127319f,
+ 0.136963f, 0.147095f, 0.158081f, 0.169434f, 0.182251f, 0.195557f, 0.208984f, 0.223267f,
+ 0.238281f, 0.254639f, 0.270996f, 0.288330f, 0.305908f, 0.324219f, 0.343018f, 0.362549f,
+ 0.382324f, 0.402832f, 0.424805f, 0.445312f, 0.467529f, 0.489258f, 0.511230f, 0.535645f,
+ 0.558594f, 0.582031f, 0.809082f, 0.822266f, 0.824219f, 0.823242f, 0.821777f, 0.820801f,
+ 0.000987f, 0.002644f, 0.004562f, 0.006344f, 0.008133f, 0.009918f, 0.011696f, 0.013527f,
+ 0.015572f, 0.017746f, 0.019714f, 0.021942f, 0.024155f, 0.027069f, 0.029678f, 0.032288f,
+ 0.035156f, 0.038574f, 0.041779f, 0.045319f, 0.049225f, 0.053284f, 0.057678f, 0.062225f,
+ 0.067505f, 0.072571f, 0.078613f, 0.084961f, 0.092041f, 0.098938f, 0.106506f, 0.115112f,
+ 0.123779f, 0.133667f, 0.143311f, 0.154541f, 0.165894f, 0.178345f, 0.191406f, 0.205200f,
+ 0.219238f, 0.234985f, 0.250977f, 0.267578f, 0.284912f, 0.302734f, 0.321289f, 0.340332f,
+ 0.360352f, 0.380615f, 0.401611f, 0.423340f, 0.445312f, 0.467529f, 0.490967f, 0.514160f,
+ 0.537598f, 0.561035f, 0.800293f, 0.814453f, 0.815918f, 0.815918f, 0.814941f, 0.813965f,
+ 0.000932f, 0.002567f, 0.004009f, 0.005722f, 0.007538f, 0.008812f, 0.010864f, 0.012413f,
+ 0.014290f, 0.015991f, 0.018051f, 0.019836f, 0.022247f, 0.024506f, 0.026520f, 0.029175f,
+ 0.031769f, 0.034332f, 0.037689f, 0.040466f, 0.043945f, 0.047607f, 0.051605f, 0.055817f,
+ 0.060486f, 0.065125f, 0.070557f, 0.076111f, 0.081909f, 0.088806f, 0.095886f, 0.103210f,
+ 0.111755f, 0.120422f, 0.130249f, 0.140137f, 0.150513f, 0.162109f, 0.174561f, 0.187256f,
+ 0.200928f, 0.215698f, 0.231323f, 0.246582f, 0.264160f, 0.281982f, 0.299561f, 0.319092f,
+ 0.338623f, 0.358643f, 0.379883f, 0.400879f, 0.423096f, 0.445557f, 0.468750f, 0.492188f,
+ 0.516113f, 0.541504f, 0.791016f, 0.805664f, 0.808105f, 0.808594f, 0.807129f, 0.806641f,
+ 0.000871f, 0.002337f, 0.003727f, 0.005474f, 0.006641f, 0.008377f, 0.009567f, 0.011154f,
+ 0.012848f, 0.014610f, 0.016235f, 0.017960f, 0.019958f, 0.021729f, 0.023926f, 0.026154f,
+ 0.028351f, 0.030975f, 0.033722f, 0.036407f, 0.039459f, 0.042694f, 0.046082f, 0.049896f,
+ 0.053833f, 0.058167f, 0.062744f, 0.067932f, 0.073608f, 0.079468f, 0.085632f, 0.092651f,
+ 0.100098f, 0.108521f, 0.116699f, 0.126099f, 0.136108f, 0.146606f, 0.157959f, 0.170410f,
+ 0.183594f, 0.197510f, 0.212280f, 0.227295f, 0.243652f, 0.260986f, 0.278564f, 0.297607f,
+ 0.316406f, 0.336426f, 0.357178f, 0.378662f, 0.400146f, 0.422852f, 0.446045f, 0.470215f,
+ 0.494873f, 0.520020f, 0.781250f, 0.796875f, 0.800293f, 0.800781f, 0.799805f, 0.799316f,
+ 0.000782f, 0.002131f, 0.003649f, 0.004715f, 0.006054f, 0.007458f, 0.008759f, 0.010269f,
+ 0.011711f, 0.012970f, 0.014664f, 0.016327f, 0.017914f, 0.019699f, 0.021423f, 0.023499f,
+ 0.025391f, 0.027374f, 0.029999f, 0.032501f, 0.035156f, 0.037872f, 0.040710f, 0.044403f,
+ 0.047791f, 0.051880f, 0.055969f, 0.060364f, 0.065247f, 0.070496f, 0.076172f, 0.082825f,
+ 0.089294f, 0.096497f, 0.104431f, 0.112854f, 0.122375f, 0.132202f, 0.142700f, 0.153931f,
+ 0.166260f, 0.179565f, 0.193481f, 0.208008f, 0.223877f, 0.240479f, 0.257568f, 0.275879f,
+ 0.294922f, 0.314453f, 0.334961f, 0.355957f, 0.377686f, 0.400391f, 0.423828f, 0.448730f,
+ 0.472900f, 0.498535f, 0.771484f, 0.789062f, 0.791504f, 0.792480f, 0.791016f, 0.791016f,
+ 0.000742f, 0.001822f, 0.003183f, 0.004444f, 0.005600f, 0.006550f, 0.008087f, 0.009247f,
+ 0.010559f, 0.011650f, 0.013184f, 0.014565f, 0.016083f, 0.017548f, 0.019119f, 0.020737f,
+ 0.022644f, 0.024597f, 0.026627f, 0.028809f, 0.031281f, 0.033539f, 0.036469f, 0.039429f,
+ 0.042480f, 0.045654f, 0.049561f, 0.053406f, 0.057739f, 0.062469f, 0.067749f, 0.073364f,
+ 0.079773f, 0.086121f, 0.093262f, 0.100647f, 0.109253f, 0.118042f, 0.128174f, 0.138550f,
+ 0.150024f, 0.162231f, 0.175171f, 0.189087f, 0.204468f, 0.220215f, 0.236938f, 0.254639f,
+ 0.273438f, 0.292236f, 0.312012f, 0.333252f, 0.355957f, 0.377686f, 0.401367f, 0.425781f,
+ 0.451416f, 0.476318f, 0.761230f, 0.779785f, 0.782227f, 0.782715f, 0.782715f, 0.782715f,
+ 0.000632f, 0.001970f, 0.003042f, 0.004025f, 0.005173f, 0.006435f, 0.007343f, 0.008522f,
+ 0.009369f, 0.010475f, 0.011726f, 0.012962f, 0.014145f, 0.015411f, 0.016922f, 0.018478f,
+ 0.020111f, 0.021835f, 0.023682f, 0.025253f, 0.027466f, 0.029678f, 0.032196f, 0.034607f,
+ 0.037415f, 0.040497f, 0.043610f, 0.047089f, 0.051178f, 0.055573f, 0.059845f, 0.064758f,
+ 0.070068f, 0.076111f, 0.082275f, 0.089417f, 0.096863f, 0.105286f, 0.114441f, 0.123535f,
+ 0.134399f, 0.145508f, 0.157959f, 0.171387f, 0.185425f, 0.200806f, 0.216919f, 0.233521f,
+ 0.251953f, 0.270508f, 0.290527f, 0.310791f, 0.332275f, 0.355469f, 0.378418f, 0.403564f,
+ 0.428223f, 0.455322f, 0.750977f, 0.770996f, 0.774414f, 0.774414f, 0.774902f, 0.773926f,
+ 0.000517f, 0.001554f, 0.002741f, 0.003695f, 0.004669f, 0.005417f, 0.006466f, 0.007545f,
+ 0.008453f, 0.009499f, 0.010468f, 0.011490f, 0.012718f, 0.013985f, 0.014977f, 0.016235f,
+ 0.017868f, 0.019211f, 0.020630f, 0.022263f, 0.024078f, 0.026291f, 0.028275f, 0.030380f,
+ 0.032928f, 0.035675f, 0.038513f, 0.041656f, 0.044769f, 0.048523f, 0.052216f, 0.057007f,
+ 0.061493f, 0.066711f, 0.072510f, 0.078735f, 0.085327f, 0.093201f, 0.101135f, 0.109619f,
+ 0.119690f, 0.130371f, 0.141602f, 0.154053f, 0.167480f, 0.181396f, 0.197021f, 0.213623f,
+ 0.230835f, 0.248901f, 0.268066f, 0.289062f, 0.310303f, 0.332520f, 0.355225f, 0.379639f,
+ 0.405273f, 0.432373f, 0.740234f, 0.760742f, 0.763672f, 0.765625f, 0.765625f, 0.765625f,
+ 0.000588f, 0.001405f, 0.002306f, 0.003370f, 0.004375f, 0.005116f, 0.005817f, 0.006630f,
+ 0.007797f, 0.008507f, 0.009216f, 0.010254f, 0.011246f, 0.012154f, 0.013191f, 0.014366f,
+ 0.015503f, 0.016785f, 0.018127f, 0.019562f, 0.021072f, 0.022919f, 0.024643f, 0.026749f,
+ 0.028564f, 0.031006f, 0.033203f, 0.036072f, 0.039032f, 0.042114f, 0.045654f, 0.049561f,
+ 0.053650f, 0.058380f, 0.063049f, 0.068848f, 0.075256f, 0.081543f, 0.088562f, 0.096924f,
+ 0.105652f, 0.115173f, 0.125977f, 0.137207f, 0.149902f, 0.163208f, 0.177979f, 0.193726f,
+ 0.210205f, 0.228027f, 0.247070f, 0.266602f, 0.287842f, 0.309326f, 0.333008f, 0.356934f,
+ 0.382568f, 0.408691f, 0.729004f, 0.751953f, 0.755371f, 0.756348f, 0.757324f, 0.756348f,
+ 0.000431f, 0.001562f, 0.002253f, 0.003088f, 0.003944f, 0.004536f, 0.005066f, 0.006020f,
+ 0.006840f, 0.007542f, 0.008347f, 0.008949f, 0.009827f, 0.010719f, 0.011696f, 0.012756f,
+ 0.013649f, 0.014679f, 0.015808f, 0.017288f, 0.018356f, 0.019913f, 0.021332f, 0.023148f,
+ 0.024719f, 0.026840f, 0.029007f, 0.031250f, 0.033661f, 0.036469f, 0.039490f, 0.042969f,
+ 0.046326f, 0.050293f, 0.054901f, 0.059845f, 0.064941f, 0.071289f, 0.077454f, 0.084656f,
+ 0.092529f, 0.101562f, 0.111145f, 0.121460f, 0.132935f, 0.145386f, 0.159302f, 0.174438f,
+ 0.190186f, 0.206909f, 0.225098f, 0.244751f, 0.265381f, 0.287109f, 0.310059f, 0.333984f,
+ 0.359131f, 0.386230f, 0.716797f, 0.740723f, 0.744629f, 0.746582f, 0.747070f, 0.747070f,
+ 0.000576f, 0.001266f, 0.002028f, 0.002766f, 0.003317f, 0.004051f, 0.004742f, 0.005459f,
+ 0.006054f, 0.006641f, 0.007240f, 0.007919f, 0.008644f, 0.009300f, 0.010170f, 0.010925f,
+ 0.011795f, 0.012733f, 0.013855f, 0.014885f, 0.015900f, 0.017212f, 0.018326f, 0.019684f,
+ 0.021469f, 0.023178f, 0.024734f, 0.026794f, 0.028946f, 0.031204f, 0.033844f, 0.036682f,
+ 0.039948f, 0.043335f, 0.047150f, 0.051422f, 0.055969f, 0.061066f, 0.067139f, 0.073242f,
+ 0.080444f, 0.088440f, 0.096985f, 0.106445f, 0.116943f, 0.128906f, 0.141479f, 0.154907f,
+ 0.170410f, 0.186523f, 0.204102f, 0.222900f, 0.243774f, 0.264160f, 0.286865f, 0.310791f,
+ 0.336182f, 0.362793f, 0.705078f, 0.730469f, 0.735352f, 0.736816f, 0.737793f, 0.736816f,
+ 0.000307f, 0.001126f, 0.001758f, 0.002436f, 0.002911f, 0.003540f, 0.004047f, 0.004711f,
+ 0.005245f, 0.005749f, 0.006302f, 0.006844f, 0.007355f, 0.008095f, 0.008835f, 0.009438f,
+ 0.010139f, 0.010941f, 0.011963f, 0.012878f, 0.013519f, 0.014847f, 0.015945f, 0.017029f,
+ 0.018250f, 0.019669f, 0.021362f, 0.022675f, 0.024750f, 0.026657f, 0.028854f, 0.031219f,
+ 0.033844f, 0.036804f, 0.040222f, 0.043793f, 0.047791f, 0.052185f, 0.057251f, 0.062866f,
+ 0.069275f, 0.075867f, 0.083923f, 0.092407f, 0.102295f, 0.112366f, 0.124207f, 0.137085f,
+ 0.151489f, 0.167114f, 0.183838f, 0.202148f, 0.221558f, 0.242065f, 0.263916f, 0.287842f,
+ 0.312256f, 0.339111f, 0.693848f, 0.719727f, 0.724609f, 0.726074f, 0.727539f, 0.727051f,
+ 0.000428f, 0.000939f, 0.001581f, 0.002033f, 0.002665f, 0.003222f, 0.003660f, 0.004059f,
+ 0.004475f, 0.004997f, 0.005554f, 0.006031f, 0.006371f, 0.007080f, 0.007511f, 0.008263f,
+ 0.008820f, 0.009552f, 0.010124f, 0.010948f, 0.011665f, 0.012550f, 0.013397f, 0.014526f,
+ 0.015388f, 0.016754f, 0.017960f, 0.019257f, 0.020844f, 0.022583f, 0.024246f, 0.026642f,
+ 0.028656f, 0.031128f, 0.033783f, 0.036865f, 0.040253f, 0.044312f, 0.048523f, 0.053314f,
+ 0.058655f, 0.064880f, 0.071594f, 0.079102f, 0.087891f, 0.097107f, 0.108276f, 0.119751f,
+ 0.133179f, 0.148071f, 0.163818f, 0.180908f, 0.199951f, 0.219849f, 0.241699f, 0.264160f,
+ 0.288818f, 0.315918f, 0.680176f, 0.708496f, 0.713867f, 0.716309f, 0.716797f, 0.717285f,
+ 0.000467f, 0.001054f, 0.001476f, 0.001825f, 0.002386f, 0.002644f, 0.003218f, 0.003553f,
+ 0.003866f, 0.004433f, 0.004700f, 0.004948f, 0.005505f, 0.006023f, 0.006405f, 0.006920f,
+ 0.007484f, 0.008057f, 0.008598f, 0.009178f, 0.009857f, 0.010551f, 0.011169f, 0.012199f,
+ 0.013092f, 0.014084f, 0.015091f, 0.016205f, 0.017303f, 0.018845f, 0.020538f, 0.021957f,
+ 0.023773f, 0.025833f, 0.028152f, 0.030716f, 0.033661f, 0.036896f, 0.040405f, 0.044708f,
+ 0.049286f, 0.054321f, 0.060333f, 0.067322f, 0.074890f, 0.083435f, 0.092651f, 0.103516f,
+ 0.115784f, 0.129028f, 0.144287f, 0.160278f, 0.178345f, 0.197632f, 0.218994f, 0.241089f,
+ 0.265869f, 0.292725f, 0.667969f, 0.697266f, 0.702637f, 0.704590f, 0.706055f, 0.707031f,
+ 0.000348f, 0.000841f, 0.001292f, 0.001580f, 0.001961f, 0.002508f, 0.002630f, 0.002993f,
+ 0.003458f, 0.003738f, 0.003952f, 0.004425f, 0.004639f, 0.005070f, 0.005547f, 0.005840f,
+ 0.006462f, 0.006844f, 0.007214f, 0.007698f, 0.008339f, 0.008980f, 0.009560f, 0.010094f,
+ 0.010941f, 0.011711f, 0.012550f, 0.013565f, 0.014404f, 0.015579f, 0.016754f, 0.018082f,
+ 0.019592f, 0.021439f, 0.023209f, 0.025375f, 0.027863f, 0.030411f, 0.033478f, 0.037018f,
+ 0.040680f, 0.045105f, 0.050476f, 0.056183f, 0.062805f, 0.070251f, 0.078613f, 0.088196f,
+ 0.099060f, 0.111450f, 0.125122f, 0.140869f, 0.158203f, 0.176880f, 0.197266f, 0.218506f,
+ 0.242798f, 0.268555f, 0.655273f, 0.686035f, 0.691406f, 0.694336f, 0.695312f, 0.695801f,
+ 0.000170f, 0.000976f, 0.001161f, 0.001441f, 0.001846f, 0.002144f, 0.002367f, 0.002632f,
+ 0.002892f, 0.003178f, 0.003435f, 0.003618f, 0.004021f, 0.004292f, 0.004562f, 0.005028f,
+ 0.005405f, 0.005623f, 0.006069f, 0.006577f, 0.006973f, 0.007431f, 0.007904f, 0.008484f,
+ 0.009018f, 0.009659f, 0.010559f, 0.010994f, 0.012009f, 0.012840f, 0.013901f, 0.014915f,
+ 0.016129f, 0.017502f, 0.019089f, 0.020676f, 0.022568f, 0.024673f, 0.027252f, 0.029984f,
+ 0.033234f, 0.037079f, 0.041016f, 0.045868f, 0.051758f, 0.058014f, 0.065613f, 0.073853f,
+ 0.083801f, 0.094727f, 0.107483f, 0.121826f, 0.137573f, 0.156006f, 0.175049f, 0.196167f,
+ 0.219482f, 0.245850f, 0.641113f, 0.673340f, 0.679688f, 0.681641f, 0.683594f, 0.684082f,
+ 0.000293f, 0.000601f, 0.001049f, 0.001358f, 0.001532f, 0.001719f, 0.001882f, 0.002298f,
+ 0.002317f, 0.002628f, 0.002750f, 0.003143f, 0.003363f, 0.003559f, 0.003866f, 0.004204f,
+ 0.004383f, 0.004753f, 0.005028f, 0.005348f, 0.005863f, 0.006176f, 0.006569f, 0.006954f,
+ 0.007401f, 0.008057f, 0.008537f, 0.009178f, 0.009735f, 0.010521f, 0.011208f, 0.011978f,
+ 0.013130f, 0.014099f, 0.015289f, 0.016739f, 0.018219f, 0.019821f, 0.021713f, 0.024200f,
+ 0.026749f, 0.029785f, 0.033386f, 0.036987f, 0.041840f, 0.047089f, 0.053253f, 0.060760f,
+ 0.069214f, 0.079224f, 0.090515f, 0.103638f, 0.118652f, 0.135376f, 0.154175f, 0.174561f,
+ 0.196777f, 0.222534f, 0.628906f, 0.660645f, 0.668457f, 0.670410f, 0.672852f, 0.673340f,
+ 0.000258f, 0.000656f, 0.000811f, 0.001049f, 0.001288f, 0.001462f, 0.001599f, 0.001740f,
+ 0.002012f, 0.002171f, 0.002367f, 0.002535f, 0.002705f, 0.002880f, 0.003115f, 0.003429f,
+ 0.003666f, 0.003897f, 0.004116f, 0.004398f, 0.004635f, 0.005066f, 0.005341f, 0.005779f,
+ 0.006042f, 0.006454f, 0.006954f, 0.007450f, 0.007835f, 0.008400f, 0.009132f, 0.009819f,
+ 0.010536f, 0.011307f, 0.012245f, 0.013229f, 0.014580f, 0.015900f, 0.017303f, 0.019119f,
+ 0.021103f, 0.023468f, 0.026123f, 0.029495f, 0.033112f, 0.037628f, 0.042938f, 0.048859f,
+ 0.056152f, 0.064941f, 0.074829f, 0.086548f, 0.100281f, 0.115967f, 0.133545f, 0.153198f,
+ 0.175171f, 0.199341f, 0.613770f, 0.648926f, 0.655273f, 0.658691f, 0.660645f, 0.662598f,
+ 0.000176f, 0.000474f, 0.000602f, 0.000854f, 0.001030f, 0.001240f, 0.001349f, 0.001505f,
+ 0.001580f, 0.001738f, 0.001957f, 0.002068f, 0.002230f, 0.002420f, 0.002556f, 0.002705f,
+ 0.002998f, 0.003178f, 0.003345f, 0.003567f, 0.003811f, 0.004105f, 0.004284f, 0.004593f,
+ 0.004848f, 0.005173f, 0.005527f, 0.005939f, 0.006306f, 0.006817f, 0.007366f, 0.007729f,
+ 0.008339f, 0.008995f, 0.009644f, 0.010551f, 0.011360f, 0.012344f, 0.013710f, 0.015030f,
+ 0.016510f, 0.018143f, 0.020279f, 0.022751f, 0.025650f, 0.029144f, 0.033508f, 0.038452f,
+ 0.044556f, 0.052032f, 0.060364f, 0.070923f, 0.082642f, 0.097290f, 0.113525f, 0.132446f,
+ 0.153442f, 0.176880f, 0.600586f, 0.636719f, 0.644531f, 0.647461f, 0.648926f, 0.649414f,
+ 0.000121f, 0.000426f, 0.000509f, 0.000778f, 0.000931f, 0.000992f, 0.001135f, 0.001303f,
+ 0.001359f, 0.001410f, 0.001519f, 0.001722f, 0.001751f, 0.001951f, 0.002060f, 0.002218f,
+ 0.002287f, 0.002487f, 0.002670f, 0.002848f, 0.003061f, 0.003233f, 0.003452f, 0.003664f,
+ 0.003883f, 0.004078f, 0.004379f, 0.004692f, 0.004982f, 0.005329f, 0.005756f, 0.006081f,
+ 0.006504f, 0.007019f, 0.007599f, 0.008217f, 0.008850f, 0.009628f, 0.010437f, 0.011597f,
+ 0.012650f, 0.013931f, 0.015480f, 0.017380f, 0.019577f, 0.022247f, 0.025513f, 0.029617f,
+ 0.034363f, 0.040314f, 0.047241f, 0.056274f, 0.066711f, 0.079773f, 0.094482f, 0.112488f,
+ 0.132446f, 0.154907f, 0.585449f, 0.624023f, 0.630371f, 0.634277f, 0.636230f, 0.637207f,
+ 0.000161f, 0.000263f, 0.000526f, 0.000627f, 0.000723f, 0.000775f, 0.000856f, 0.000960f,
+ 0.001079f, 0.001158f, 0.001208f, 0.001272f, 0.001441f, 0.001557f, 0.001657f, 0.001702f,
+ 0.001897f, 0.001918f, 0.002151f, 0.002232f, 0.002337f, 0.002522f, 0.002720f, 0.002865f,
+ 0.003029f, 0.003193f, 0.003387f, 0.003601f, 0.003887f, 0.004124f, 0.004356f, 0.004639f,
+ 0.005070f, 0.005466f, 0.005863f, 0.006298f, 0.006874f, 0.007290f, 0.007965f, 0.008774f,
+ 0.009560f, 0.010666f, 0.011719f, 0.013077f, 0.014679f, 0.016693f, 0.019058f, 0.021881f,
+ 0.025528f, 0.030121f, 0.036011f, 0.043396f, 0.052460f, 0.063477f, 0.076721f, 0.093079f,
+ 0.112305f, 0.133667f, 0.572266f, 0.609375f, 0.618164f, 0.622070f, 0.623535f, 0.625488f,
+ 0.000109f, 0.000212f, 0.000404f, 0.000578f, 0.000567f, 0.000655f, 0.000763f, 0.000676f,
+ 0.000824f, 0.000869f, 0.000971f, 0.001064f, 0.001132f, 0.001210f, 0.001212f, 0.001398f,
+ 0.001486f, 0.001525f, 0.001653f, 0.001676f, 0.001867f, 0.001953f, 0.002062f, 0.002199f,
+ 0.002295f, 0.002443f, 0.002586f, 0.002766f, 0.002979f, 0.003128f, 0.003429f, 0.003551f,
+ 0.003763f, 0.004074f, 0.004349f, 0.004688f, 0.005032f, 0.005470f, 0.005894f, 0.006519f,
+ 0.007092f, 0.007896f, 0.008629f, 0.009659f, 0.010910f, 0.012215f, 0.013962f, 0.015991f,
+ 0.018646f, 0.021881f, 0.026428f, 0.032074f, 0.039276f, 0.048645f, 0.060455f, 0.075256f,
+ 0.092773f, 0.113220f, 0.554688f, 0.596191f, 0.605957f, 0.608887f, 0.610352f, 0.612305f,
+ 0.000202f, 0.000186f, 0.000312f, 0.000433f, 0.000382f, 0.000543f, 0.000482f, 0.000546f,
+ 0.000621f, 0.000666f, 0.000789f, 0.000802f, 0.000859f, 0.000950f, 0.000970f, 0.000975f,
+ 0.001113f, 0.001162f, 0.001207f, 0.001312f, 0.001362f, 0.001433f, 0.001541f, 0.001618f,
+ 0.001720f, 0.001791f, 0.001966f, 0.002035f, 0.002199f, 0.002413f, 0.002546f, 0.002626f,
+ 0.002855f, 0.003063f, 0.003204f, 0.003448f, 0.003693f, 0.003986f, 0.004364f, 0.004684f,
+ 0.005127f, 0.005619f, 0.006271f, 0.006870f, 0.007748f, 0.008713f, 0.009911f, 0.011368f,
+ 0.013191f, 0.015518f, 0.018646f, 0.022644f, 0.028107f, 0.035645f, 0.045471f, 0.058502f,
+ 0.074646f, 0.093994f, 0.541016f, 0.583008f, 0.591797f, 0.596191f, 0.599121f, 0.600098f,
+ 0.000000f, 0.000179f, 0.000242f, 0.000318f, 0.000341f, 0.000345f, 0.000432f, 0.000364f,
+ 0.000475f, 0.000483f, 0.000572f, 0.000576f, 0.000619f, 0.000640f, 0.000716f, 0.000737f,
+ 0.000791f, 0.000845f, 0.000871f, 0.000907f, 0.000998f, 0.001025f, 0.001107f, 0.001181f,
+ 0.001244f, 0.001303f, 0.001391f, 0.001462f, 0.001549f, 0.001631f, 0.001756f, 0.001906f,
+ 0.001984f, 0.002161f, 0.002264f, 0.002419f, 0.002613f, 0.002825f, 0.003103f, 0.003321f,
+ 0.003584f, 0.003893f, 0.004349f, 0.004799f, 0.005383f, 0.006020f, 0.006836f, 0.007858f,
+ 0.009117f, 0.010674f, 0.012825f, 0.015533f, 0.019363f, 0.024780f, 0.032593f, 0.043274f,
+ 0.057770f, 0.076111f, 0.525879f, 0.569336f, 0.578613f, 0.583008f, 0.585449f, 0.586426f,
+ 0.000000f, 0.000088f, 0.000192f, 0.000227f, 0.000230f, 0.000286f, 0.000255f, 0.000317f,
+ 0.000321f, 0.000371f, 0.000401f, 0.000373f, 0.000391f, 0.000457f, 0.000474f, 0.000530f,
+ 0.000509f, 0.000585f, 0.000625f, 0.000664f, 0.000707f, 0.000746f, 0.000772f, 0.000817f,
+ 0.000877f, 0.000887f, 0.000978f, 0.001007f, 0.001069f, 0.001202f, 0.001192f, 0.001290f,
+ 0.001356f, 0.001464f, 0.001583f, 0.001678f, 0.001771f, 0.001929f, 0.002050f, 0.002230f,
+ 0.002424f, 0.002651f, 0.002888f, 0.003176f, 0.003534f, 0.003967f, 0.004475f, 0.005154f,
+ 0.005993f, 0.007118f, 0.008469f, 0.010338f, 0.012794f, 0.016403f, 0.021957f, 0.030090f,
+ 0.042419f, 0.059052f, 0.510254f, 0.554199f, 0.564453f, 0.570312f, 0.572754f, 0.573242f,
+ 0.000000f, 0.000126f, 0.000180f, 0.000121f, 0.000178f, 0.000176f, 0.000177f, 0.000212f,
+ 0.000210f, 0.000228f, 0.000238f, 0.000291f, 0.000280f, 0.000298f, 0.000336f, 0.000350f,
+ 0.000369f, 0.000387f, 0.000395f, 0.000427f, 0.000460f, 0.000476f, 0.000515f, 0.000536f,
+ 0.000573f, 0.000619f, 0.000650f, 0.000670f, 0.000703f, 0.000746f, 0.000798f, 0.000836f,
+ 0.000902f, 0.000949f, 0.001031f, 0.001062f, 0.001162f, 0.001227f, 0.001349f, 0.001442f,
+ 0.001533f, 0.001690f, 0.001865f, 0.001995f, 0.002228f, 0.002495f, 0.002800f, 0.003191f,
+ 0.003653f, 0.004349f, 0.005203f, 0.006393f, 0.008026f, 0.010307f, 0.013710f, 0.019379f,
+ 0.028854f, 0.043457f, 0.494873f, 0.541016f, 0.550781f, 0.555664f, 0.558105f, 0.559570f,
+ 0.000000f, 0.000095f, 0.000086f, 0.000079f, 0.000105f, 0.000124f, 0.000111f, 0.000137f,
+ 0.000141f, 0.000142f, 0.000147f, 0.000151f, 0.000160f, 0.000181f, 0.000202f, 0.000207f,
+ 0.000214f, 0.000248f, 0.000244f, 0.000282f, 0.000273f, 0.000283f, 0.000306f, 0.000334f,
+ 0.000367f, 0.000378f, 0.000376f, 0.000399f, 0.000437f, 0.000459f, 0.000474f, 0.000516f,
+ 0.000552f, 0.000567f, 0.000616f, 0.000649f, 0.000693f, 0.000743f, 0.000805f, 0.000851f,
+ 0.000918f, 0.000999f, 0.001085f, 0.001195f, 0.001309f, 0.001466f, 0.001644f, 0.001850f,
+ 0.002151f, 0.002487f, 0.002974f, 0.003654f, 0.004574f, 0.006001f, 0.008156f, 0.011452f,
+ 0.017853f, 0.029739f, 0.478271f, 0.526367f, 0.537109f, 0.541504f, 0.544434f, 0.545898f,
+ 0.000106f, 0.000085f, 0.000074f, 0.000067f, 0.000066f, 0.000070f, 0.000069f, 0.000073f,
+ 0.000073f, 0.000080f, 0.000084f, 0.000109f, 0.000093f, 0.000098f, 0.000119f, 0.000108f,
+ 0.000128f, 0.000135f, 0.000137f, 0.000149f, 0.000150f, 0.000157f, 0.000182f, 0.000185f,
+ 0.000207f, 0.000206f, 0.000214f, 0.000234f, 0.000237f, 0.000253f, 0.000267f, 0.000289f,
+ 0.000306f, 0.000313f, 0.000344f, 0.000352f, 0.000384f, 0.000406f, 0.000445f, 0.000467f,
+ 0.000503f, 0.000543f, 0.000593f, 0.000634f, 0.000697f, 0.000764f, 0.000850f, 0.000963f,
+ 0.001105f, 0.001298f, 0.001536f, 0.001856f, 0.002333f, 0.003069f, 0.004299f, 0.006271f,
+ 0.009789f, 0.018234f, 0.462402f, 0.511719f, 0.522949f, 0.527344f, 0.530762f, 0.532715f,
+ 0.000091f, 0.000069f, 0.000060f, 0.000054f, 0.000049f, 0.000046f, 0.000043f, 0.000041f,
+ 0.000040f, 0.000044f, 0.000040f, 0.000040f, 0.000054f, 0.000044f, 0.000045f, 0.000044f,
+ 0.000062f, 0.000062f, 0.000069f, 0.000071f, 0.000074f, 0.000079f, 0.000081f, 0.000081f,
+ 0.000085f, 0.000099f, 0.000098f, 0.000115f, 0.000115f, 0.000119f, 0.000125f, 0.000130f,
+ 0.000140f, 0.000144f, 0.000165f, 0.000172f, 0.000178f, 0.000191f, 0.000205f, 0.000222f,
+ 0.000234f, 0.000251f, 0.000276f, 0.000293f, 0.000327f, 0.000354f, 0.000392f, 0.000437f,
+ 0.000494f, 0.000562f, 0.000662f, 0.000800f, 0.001005f, 0.001315f, 0.001852f, 0.002825f,
+ 0.004723f, 0.009285f, 0.446533f, 0.497803f, 0.508301f, 0.514160f, 0.516602f, 0.519043f,
+ 0.000067f, 0.000048f, 0.000040f, 0.000036f, 0.000033f, 0.000031f, 0.000030f, 0.000028f,
+ 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f,
+ 0.000019f, 0.000020f, 0.000024f, 0.000026f, 0.000025f, 0.000027f, 0.000031f, 0.000032f,
+ 0.000032f, 0.000037f, 0.000041f, 0.000038f, 0.000045f, 0.000042f, 0.000048f, 0.000049f,
+ 0.000053f, 0.000055f, 0.000059f, 0.000062f, 0.000071f, 0.000074f, 0.000077f, 0.000081f,
+ 0.000086f, 0.000091f, 0.000098f, 0.000109f, 0.000116f, 0.000125f, 0.000137f, 0.000158f,
+ 0.000173f, 0.000193f, 0.000230f, 0.000273f, 0.000335f, 0.000425f, 0.000603f, 0.000935f,
+ 0.001694f, 0.003727f, 0.431396f, 0.481934f, 0.493652f, 0.499512f, 0.502930f, 0.504883f,
+ 0.000021f, 0.000016f, 0.000013f, 0.000012f, 0.000013f, 0.000012f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f,
+ 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000009f, 0.000010f,
+ 0.000010f, 0.000013f, 0.000014f, 0.000013f, 0.000015f, 0.000016f, 0.000017f, 0.000019f,
+ 0.000019f, 0.000020f, 0.000023f, 0.000026f, 0.000027f, 0.000027f, 0.000032f, 0.000030f,
+ 0.000036f, 0.000039f, 0.000050f, 0.000056f, 0.000063f, 0.000082f, 0.000109f, 0.000168f,
+ 0.000317f, 0.000922f, 0.415283f, 0.467773f, 0.479980f, 0.486328f, 0.489014f, 0.490723f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000005f,
+ 0.000008f, 0.000026f, 0.398926f, 0.452881f, 0.465576f, 0.471436f, 0.474854f, 0.477051f,
+ },
+ {
+ 0.019653f, 0.058990f, 0.097473f, 0.134277f, 0.169189f, 0.203491f, 0.236450f, 0.267578f,
+ 0.297852f, 0.326416f, 0.354004f, 0.380859f, 0.406250f, 0.431641f, 0.455078f, 0.477539f,
+ 0.500000f, 0.520996f, 0.541504f, 0.560547f, 0.580566f, 0.598633f, 0.615723f, 0.633301f,
+ 0.649902f, 0.666016f, 0.681641f, 0.695801f, 0.709961f, 0.724609f, 0.738770f, 0.751953f,
+ 0.765137f, 0.775879f, 0.788574f, 0.799805f, 0.812012f, 0.822754f, 0.833496f, 0.844238f,
+ 0.854004f, 0.864258f, 0.874023f, 0.883301f, 0.891602f, 0.900391f, 0.909668f, 0.917969f,
+ 0.925781f, 0.934570f, 0.941895f, 0.949707f, 0.956543f, 0.963379f, 0.970703f, 0.977539f,
+ 0.984863f, 0.991211f, 0.988770f, 0.972656f, 0.960449f, 0.949707f, 0.940430f, 0.931641f,
+ 0.017303f, 0.052399f, 0.086548f, 0.119446f, 0.153076f, 0.183594f, 0.214722f, 0.245117f,
+ 0.273193f, 0.301270f, 0.328613f, 0.354492f, 0.379883f, 0.404541f, 0.427979f, 0.450195f,
+ 0.472656f, 0.494629f, 0.515137f, 0.534668f, 0.554199f, 0.573242f, 0.591309f, 0.608887f,
+ 0.625977f, 0.642578f, 0.658203f, 0.672852f, 0.688477f, 0.704102f, 0.717285f, 0.731445f,
+ 0.744629f, 0.756836f, 0.769531f, 0.782715f, 0.793945f, 0.805664f, 0.816406f, 0.828125f,
+ 0.838379f, 0.849121f, 0.858887f, 0.868652f, 0.877930f, 0.888184f, 0.896973f, 0.905762f,
+ 0.915039f, 0.921875f, 0.930176f, 0.937988f, 0.946777f, 0.954102f, 0.960938f, 0.968750f,
+ 0.975586f, 0.982422f, 0.984375f, 0.969238f, 0.957520f, 0.947754f, 0.938477f, 0.930176f,
+ 0.015221f, 0.045837f, 0.076843f, 0.107666f, 0.136719f, 0.166504f, 0.196045f, 0.223999f,
+ 0.250244f, 0.278320f, 0.303711f, 0.329346f, 0.353271f, 0.378906f, 0.401367f, 0.424316f,
+ 0.447266f, 0.468018f, 0.487793f, 0.508301f, 0.529297f, 0.547363f, 0.566406f, 0.583984f,
+ 0.601562f, 0.618652f, 0.634766f, 0.650879f, 0.666016f, 0.681641f, 0.695801f, 0.710449f,
+ 0.724121f, 0.737305f, 0.750488f, 0.762695f, 0.775391f, 0.788086f, 0.799316f, 0.811035f,
+ 0.821777f, 0.833008f, 0.844238f, 0.854004f, 0.864258f, 0.874023f, 0.882812f, 0.892578f,
+ 0.901367f, 0.910156f, 0.918457f, 0.926758f, 0.936035f, 0.942871f, 0.950684f, 0.958496f,
+ 0.965820f, 0.973145f, 0.980469f, 0.965820f, 0.955078f, 0.945312f, 0.936523f, 0.928223f,
+ 0.013420f, 0.041138f, 0.068359f, 0.096436f, 0.124023f, 0.150879f, 0.177246f, 0.204224f,
+ 0.230103f, 0.255859f, 0.281494f, 0.305420f, 0.329834f, 0.352783f, 0.376709f, 0.398682f,
+ 0.420654f, 0.442627f, 0.462646f, 0.483887f, 0.502441f, 0.521484f, 0.540527f, 0.559082f,
+ 0.576172f, 0.595703f, 0.611328f, 0.627930f, 0.644043f, 0.659668f, 0.674316f, 0.688965f,
+ 0.703613f, 0.717285f, 0.730957f, 0.744629f, 0.756836f, 0.770020f, 0.781738f, 0.793945f,
+ 0.805176f, 0.816895f, 0.828125f, 0.838379f, 0.849121f, 0.859375f, 0.869141f, 0.878418f,
+ 0.888184f, 0.897461f, 0.906738f, 0.915039f, 0.923828f, 0.932129f, 0.940430f, 0.947754f,
+ 0.956543f, 0.963867f, 0.976074f, 0.962402f, 0.951660f, 0.942383f, 0.934082f, 0.926758f,
+ 0.012001f, 0.036591f, 0.061737f, 0.086670f, 0.112000f, 0.136719f, 0.161743f, 0.186768f,
+ 0.211792f, 0.235840f, 0.259521f, 0.283203f, 0.307129f, 0.329590f, 0.352295f, 0.374268f,
+ 0.395996f, 0.416992f, 0.437744f, 0.457520f, 0.477295f, 0.497314f, 0.515625f, 0.534180f,
+ 0.553223f, 0.570312f, 0.588379f, 0.604492f, 0.621582f, 0.636719f, 0.653320f, 0.666992f,
+ 0.683105f, 0.697266f, 0.710449f, 0.724609f, 0.737793f, 0.750977f, 0.764160f, 0.775879f,
+ 0.788086f, 0.799805f, 0.812012f, 0.823242f, 0.833496f, 0.844238f, 0.854492f, 0.864746f,
+ 0.875000f, 0.884277f, 0.894043f, 0.902832f, 0.911621f, 0.920898f, 0.929688f, 0.937500f,
+ 0.945801f, 0.953613f, 0.971191f, 0.958984f, 0.949219f, 0.939941f, 0.932129f, 0.924316f,
+ 0.010612f, 0.032684f, 0.054810f, 0.077759f, 0.100952f, 0.124023f, 0.146851f, 0.171021f,
+ 0.193604f, 0.217163f, 0.239380f, 0.261963f, 0.284424f, 0.307129f, 0.328613f, 0.351318f,
+ 0.371826f, 0.392334f, 0.413574f, 0.432617f, 0.453613f, 0.472656f, 0.491943f, 0.510254f,
+ 0.528320f, 0.546387f, 0.563965f, 0.580078f, 0.598633f, 0.613770f, 0.629883f, 0.645996f,
+ 0.661621f, 0.675293f, 0.688965f, 0.705078f, 0.718262f, 0.731934f, 0.745605f, 0.757812f,
+ 0.770996f, 0.782715f, 0.795410f, 0.807129f, 0.818359f, 0.829102f, 0.839844f, 0.851074f,
+ 0.860840f, 0.871094f, 0.880859f, 0.891113f, 0.900391f, 0.909668f, 0.917969f, 0.927246f,
+ 0.935547f, 0.943848f, 0.966797f, 0.955566f, 0.945801f, 0.937012f, 0.929199f, 0.921875f,
+ 0.009483f, 0.029556f, 0.050140f, 0.070129f, 0.091797f, 0.112549f, 0.134155f, 0.156372f,
+ 0.177368f, 0.198975f, 0.220825f, 0.243286f, 0.263916f, 0.285645f, 0.306885f, 0.327393f,
+ 0.348145f, 0.368896f, 0.389404f, 0.409424f, 0.429199f, 0.448730f, 0.467529f, 0.486572f,
+ 0.505371f, 0.522461f, 0.540039f, 0.558105f, 0.574219f, 0.591309f, 0.607422f, 0.623535f,
+ 0.639648f, 0.654785f, 0.669922f, 0.685547f, 0.698730f, 0.712891f, 0.726074f, 0.740234f,
+ 0.752441f, 0.765625f, 0.778320f, 0.789551f, 0.802246f, 0.813477f, 0.825195f, 0.836426f,
+ 0.847168f, 0.856934f, 0.868164f, 0.877930f, 0.888184f, 0.897461f, 0.906738f, 0.915527f,
+ 0.925293f, 0.935059f, 0.962402f, 0.951660f, 0.942383f, 0.933594f, 0.926270f, 0.919434f,
+ 0.008934f, 0.026581f, 0.044708f, 0.063354f, 0.082825f, 0.102844f, 0.122437f, 0.141968f,
+ 0.162720f, 0.183105f, 0.202515f, 0.224609f, 0.244995f, 0.265381f, 0.285645f, 0.306152f,
+ 0.326416f, 0.346680f, 0.365967f, 0.385498f, 0.406006f, 0.425293f, 0.444092f, 0.461914f,
+ 0.480225f, 0.499268f, 0.517090f, 0.535156f, 0.552246f, 0.568359f, 0.585449f, 0.601562f,
+ 0.616699f, 0.633789f, 0.649414f, 0.663574f, 0.678711f, 0.693848f, 0.706543f, 0.721680f,
+ 0.734375f, 0.746582f, 0.760742f, 0.773438f, 0.786133f, 0.797852f, 0.809082f, 0.821777f,
+ 0.832031f, 0.843262f, 0.854492f, 0.864746f, 0.875000f, 0.884766f, 0.895020f, 0.904785f,
+ 0.914062f, 0.922852f, 0.957520f, 0.947266f, 0.938965f, 0.930664f, 0.923340f, 0.916992f,
+ 0.007668f, 0.024017f, 0.040405f, 0.057831f, 0.075195f, 0.093079f, 0.111694f, 0.130127f,
+ 0.148926f, 0.168213f, 0.187500f, 0.206543f, 0.226440f, 0.246460f, 0.265869f, 0.285400f,
+ 0.305176f, 0.324707f, 0.344238f, 0.363281f, 0.383057f, 0.401123f, 0.420166f, 0.439941f,
+ 0.457764f, 0.475586f, 0.493164f, 0.511719f, 0.528809f, 0.545898f, 0.562988f, 0.579590f,
+ 0.596191f, 0.612305f, 0.627441f, 0.643555f, 0.658203f, 0.672363f, 0.687988f, 0.702637f,
+ 0.715332f, 0.728516f, 0.742676f, 0.756348f, 0.768555f, 0.781250f, 0.794434f, 0.806152f,
+ 0.818359f, 0.828613f, 0.840332f, 0.851074f, 0.861816f, 0.872559f, 0.882812f, 0.892578f,
+ 0.903320f, 0.912598f, 0.952637f, 0.943848f, 0.935059f, 0.927246f, 0.920410f, 0.914062f,
+ 0.007263f, 0.021530f, 0.037048f, 0.052429f, 0.068909f, 0.084961f, 0.102112f, 0.119568f,
+ 0.136475f, 0.154541f, 0.172852f, 0.191528f, 0.209717f, 0.228638f, 0.246948f, 0.265869f,
+ 0.284912f, 0.304199f, 0.322510f, 0.341309f, 0.360596f, 0.379639f, 0.397461f, 0.416504f,
+ 0.434570f, 0.452881f, 0.470947f, 0.489014f, 0.505859f, 0.523438f, 0.541016f, 0.557129f,
+ 0.574219f, 0.590332f, 0.606445f, 0.622070f, 0.637695f, 0.653809f, 0.667969f, 0.682129f,
+ 0.697754f, 0.711426f, 0.724609f, 0.737793f, 0.750977f, 0.765625f, 0.777832f, 0.790039f,
+ 0.801270f, 0.813477f, 0.825684f, 0.837402f, 0.848145f, 0.859375f, 0.870117f, 0.880859f,
+ 0.891602f, 0.900391f, 0.947754f, 0.938965f, 0.931152f, 0.923828f, 0.917480f, 0.911133f,
+ 0.006401f, 0.019730f, 0.033813f, 0.047729f, 0.062561f, 0.077515f, 0.093140f, 0.108948f,
+ 0.125366f, 0.141968f, 0.159058f, 0.175781f, 0.193726f, 0.212036f, 0.229980f, 0.247681f,
+ 0.265869f, 0.284424f, 0.302734f, 0.320557f, 0.339111f, 0.357910f, 0.376221f, 0.394287f,
+ 0.412109f, 0.429688f, 0.448486f, 0.466064f, 0.483398f, 0.500977f, 0.517090f, 0.535156f,
+ 0.552246f, 0.568359f, 0.583984f, 0.600586f, 0.616699f, 0.632324f, 0.647949f, 0.662598f,
+ 0.677246f, 0.692383f, 0.706543f, 0.719727f, 0.734375f, 0.747070f, 0.761230f, 0.773926f,
+ 0.786621f, 0.797852f, 0.811523f, 0.823242f, 0.834961f, 0.846680f, 0.857422f, 0.868652f,
+ 0.879395f, 0.890137f, 0.942383f, 0.934082f, 0.927246f, 0.919922f, 0.913574f, 0.908203f,
+ 0.005836f, 0.018158f, 0.030746f, 0.043335f, 0.057007f, 0.070801f, 0.085754f, 0.099548f,
+ 0.115112f, 0.130127f, 0.146362f, 0.162354f, 0.178711f, 0.195801f, 0.212769f, 0.230103f,
+ 0.247925f, 0.264893f, 0.283203f, 0.300293f, 0.318604f, 0.336426f, 0.354492f, 0.372314f,
+ 0.390137f, 0.408203f, 0.425537f, 0.443848f, 0.461182f, 0.478271f, 0.496094f, 0.513184f,
+ 0.529297f, 0.546387f, 0.563477f, 0.580566f, 0.595703f, 0.611816f, 0.626465f, 0.642090f,
+ 0.658691f, 0.671875f, 0.686523f, 0.702148f, 0.716797f, 0.729980f, 0.744629f, 0.757324f,
+ 0.770020f, 0.783203f, 0.796875f, 0.808105f, 0.820312f, 0.832520f, 0.844727f, 0.855957f,
+ 0.867188f, 0.877930f, 0.937012f, 0.930176f, 0.922852f, 0.916504f, 0.910645f, 0.904785f,
+ 0.005486f, 0.016525f, 0.028030f, 0.039612f, 0.052185f, 0.064636f, 0.077576f, 0.091553f,
+ 0.105347f, 0.119568f, 0.134521f, 0.149536f, 0.164917f, 0.180664f, 0.197388f, 0.213623f,
+ 0.230347f, 0.246826f, 0.264160f, 0.280518f, 0.298584f, 0.315674f, 0.334229f, 0.350830f,
+ 0.369141f, 0.386963f, 0.404053f, 0.422119f, 0.438477f, 0.456299f, 0.474121f, 0.491211f,
+ 0.507812f, 0.524902f, 0.541504f, 0.557617f, 0.574707f, 0.590820f, 0.606934f, 0.622559f,
+ 0.637207f, 0.652832f, 0.668945f, 0.683105f, 0.698730f, 0.711914f, 0.726074f, 0.740723f,
+ 0.753906f, 0.766602f, 0.780273f, 0.792969f, 0.805664f, 0.818848f, 0.830566f, 0.842285f,
+ 0.854492f, 0.866211f, 0.931641f, 0.925781f, 0.918945f, 0.913086f, 0.907227f, 0.900879f,
+ 0.004810f, 0.014847f, 0.025604f, 0.036621f, 0.047577f, 0.059174f, 0.071472f, 0.084106f,
+ 0.096985f, 0.109863f, 0.124146f, 0.137939f, 0.152954f, 0.167358f, 0.182495f, 0.197754f,
+ 0.213745f, 0.230103f, 0.246216f, 0.262939f, 0.279297f, 0.296387f, 0.313477f, 0.329834f,
+ 0.348145f, 0.365479f, 0.382080f, 0.399658f, 0.417480f, 0.434082f, 0.452148f, 0.469238f,
+ 0.486084f, 0.502441f, 0.520020f, 0.536621f, 0.552734f, 0.569336f, 0.585938f, 0.601562f,
+ 0.617676f, 0.632812f, 0.648438f, 0.664062f, 0.679688f, 0.693848f, 0.708008f, 0.722656f,
+ 0.735840f, 0.750488f, 0.765137f, 0.777832f, 0.791016f, 0.803711f, 0.816895f, 0.829102f,
+ 0.841309f, 0.853027f, 0.925781f, 0.921387f, 0.914551f, 0.908203f, 0.903320f, 0.897461f,
+ 0.004494f, 0.013809f, 0.023331f, 0.033264f, 0.043549f, 0.053833f, 0.065369f, 0.076660f,
+ 0.088684f, 0.100708f, 0.113464f, 0.127075f, 0.140381f, 0.154419f, 0.169067f, 0.183472f,
+ 0.198975f, 0.213623f, 0.229370f, 0.245117f, 0.261475f, 0.277832f, 0.294678f, 0.311523f,
+ 0.327148f, 0.344727f, 0.362061f, 0.378418f, 0.395996f, 0.413086f, 0.430176f, 0.447021f,
+ 0.464111f, 0.481689f, 0.498047f, 0.514648f, 0.531738f, 0.547363f, 0.565430f, 0.582031f,
+ 0.597656f, 0.612793f, 0.628418f, 0.644043f, 0.660645f, 0.674805f, 0.689941f, 0.705078f,
+ 0.718750f, 0.734375f, 0.747559f, 0.761719f, 0.775391f, 0.788086f, 0.803223f, 0.814453f,
+ 0.828125f, 0.840332f, 0.919434f, 0.916504f, 0.909668f, 0.904785f, 0.898926f, 0.894043f,
+ 0.004120f, 0.012512f, 0.021423f, 0.030655f, 0.039673f, 0.049500f, 0.059845f, 0.070374f,
+ 0.081543f, 0.093323f, 0.104614f, 0.116577f, 0.129395f, 0.142456f, 0.156250f, 0.169434f,
+ 0.183594f, 0.198364f, 0.213257f, 0.228638f, 0.244141f, 0.259766f, 0.275635f, 0.291748f,
+ 0.308105f, 0.324707f, 0.341309f, 0.359131f, 0.375244f, 0.391846f, 0.408447f, 0.426025f,
+ 0.442871f, 0.459473f, 0.477051f, 0.494141f, 0.510254f, 0.527344f, 0.543457f, 0.560059f,
+ 0.577148f, 0.592773f, 0.608887f, 0.625977f, 0.640625f, 0.656738f, 0.671875f, 0.686523f,
+ 0.702637f, 0.716797f, 0.731445f, 0.746582f, 0.759277f, 0.773926f, 0.787598f, 0.800293f,
+ 0.814453f, 0.827148f, 0.914062f, 0.911133f, 0.905273f, 0.899902f, 0.895508f, 0.890625f,
+ 0.004120f, 0.011566f, 0.019180f, 0.027969f, 0.036255f, 0.045746f, 0.054901f, 0.064941f,
+ 0.074707f, 0.085327f, 0.096436f, 0.107239f, 0.119324f, 0.131470f, 0.144165f, 0.157104f,
+ 0.169922f, 0.183594f, 0.198242f, 0.212769f, 0.227295f, 0.242188f, 0.257568f, 0.273193f,
+ 0.289307f, 0.305420f, 0.321289f, 0.337891f, 0.354492f, 0.371094f, 0.387451f, 0.405029f,
+ 0.421143f, 0.438477f, 0.455322f, 0.472656f, 0.488525f, 0.505859f, 0.521973f, 0.539551f,
+ 0.555664f, 0.572754f, 0.588867f, 0.605469f, 0.621582f, 0.637207f, 0.653320f, 0.668945f,
+ 0.684570f, 0.698242f, 0.714844f, 0.729492f, 0.745117f, 0.758301f, 0.771973f, 0.787109f,
+ 0.800781f, 0.813477f, 0.907715f, 0.905762f, 0.900879f, 0.895508f, 0.890625f, 0.886719f,
+ 0.003464f, 0.010536f, 0.018143f, 0.025604f, 0.033600f, 0.041992f, 0.050659f, 0.059631f,
+ 0.068481f, 0.078552f, 0.088196f, 0.099060f, 0.110107f, 0.121033f, 0.133057f, 0.145020f,
+ 0.157349f, 0.170166f, 0.183838f, 0.197632f, 0.210938f, 0.225464f, 0.241089f, 0.255371f,
+ 0.270508f, 0.286377f, 0.302246f, 0.317871f, 0.334229f, 0.349854f, 0.367188f, 0.383789f,
+ 0.399414f, 0.417236f, 0.433838f, 0.450928f, 0.468018f, 0.484131f, 0.501465f, 0.519043f,
+ 0.535156f, 0.551758f, 0.568359f, 0.585449f, 0.601074f, 0.617676f, 0.634277f, 0.649902f,
+ 0.666016f, 0.681152f, 0.695801f, 0.711914f, 0.727539f, 0.741699f, 0.756836f, 0.770508f,
+ 0.785645f, 0.800293f, 0.901855f, 0.900391f, 0.895996f, 0.891113f, 0.886230f, 0.881836f,
+ 0.003197f, 0.009903f, 0.016525f, 0.023849f, 0.030853f, 0.038605f, 0.046265f, 0.054657f,
+ 0.063232f, 0.072266f, 0.081543f, 0.090881f, 0.100769f, 0.112061f, 0.123047f, 0.134155f,
+ 0.145752f, 0.157471f, 0.170166f, 0.182861f, 0.196289f, 0.210327f, 0.223755f, 0.238525f,
+ 0.253418f, 0.268066f, 0.283203f, 0.299316f, 0.314697f, 0.330811f, 0.346680f, 0.363281f,
+ 0.379639f, 0.396484f, 0.412842f, 0.429443f, 0.446289f, 0.462891f, 0.480225f, 0.497559f,
+ 0.514648f, 0.531250f, 0.547852f, 0.564453f, 0.581055f, 0.598145f, 0.615234f, 0.631836f,
+ 0.646484f, 0.663086f, 0.679199f, 0.694824f, 0.710449f, 0.726074f, 0.740234f, 0.755859f,
+ 0.770508f, 0.784668f, 0.895020f, 0.894531f, 0.890625f, 0.886719f, 0.881836f, 0.877441f,
+ 0.003071f, 0.009163f, 0.015602f, 0.021729f, 0.028412f, 0.035522f, 0.042755f, 0.050598f,
+ 0.057983f, 0.066284f, 0.075317f, 0.083862f, 0.092773f, 0.102905f, 0.113342f, 0.123840f,
+ 0.134399f, 0.145752f, 0.157593f, 0.169556f, 0.182129f, 0.194702f, 0.207886f, 0.222046f,
+ 0.235840f, 0.250977f, 0.265137f, 0.280273f, 0.295898f, 0.311279f, 0.326660f, 0.342773f,
+ 0.359375f, 0.375732f, 0.392090f, 0.409180f, 0.425049f, 0.441895f, 0.459473f, 0.476318f,
+ 0.493652f, 0.510742f, 0.527344f, 0.544434f, 0.561035f, 0.578125f, 0.595215f, 0.611328f,
+ 0.628418f, 0.645020f, 0.661133f, 0.677246f, 0.693359f, 0.708496f, 0.724609f, 0.740723f,
+ 0.755859f, 0.771484f, 0.889160f, 0.889160f, 0.885254f, 0.881348f, 0.876953f, 0.873047f,
+ 0.002748f, 0.008171f, 0.014084f, 0.019638f, 0.026108f, 0.032318f, 0.039154f, 0.045990f,
+ 0.053619f, 0.061066f, 0.068665f, 0.076477f, 0.085632f, 0.094727f, 0.104187f, 0.113831f,
+ 0.123535f, 0.134888f, 0.145508f, 0.157104f, 0.168701f, 0.181030f, 0.193481f, 0.206665f,
+ 0.220093f, 0.233398f, 0.248169f, 0.262695f, 0.277344f, 0.292236f, 0.307617f, 0.322998f,
+ 0.339355f, 0.355469f, 0.371582f, 0.388184f, 0.404541f, 0.420410f, 0.438477f, 0.455322f,
+ 0.472656f, 0.489014f, 0.506348f, 0.523926f, 0.541016f, 0.557617f, 0.575195f, 0.591309f,
+ 0.608887f, 0.625977f, 0.643555f, 0.659180f, 0.674805f, 0.691406f, 0.707520f, 0.724121f,
+ 0.739746f, 0.755371f, 0.882812f, 0.883789f, 0.879883f, 0.875977f, 0.872559f, 0.868652f,
+ 0.002491f, 0.007809f, 0.012764f, 0.018448f, 0.024094f, 0.029861f, 0.036102f, 0.042572f,
+ 0.049500f, 0.056091f, 0.063293f, 0.070984f, 0.079285f, 0.087036f, 0.095825f, 0.104858f,
+ 0.114441f, 0.124084f, 0.133789f, 0.144653f, 0.156250f, 0.167480f, 0.179199f, 0.191650f,
+ 0.204102f, 0.217896f, 0.231445f, 0.245239f, 0.259521f, 0.274170f, 0.289307f, 0.304199f,
+ 0.319580f, 0.334961f, 0.351074f, 0.367676f, 0.384277f, 0.400635f, 0.417480f, 0.434570f,
+ 0.451660f, 0.468994f, 0.485352f, 0.502441f, 0.520508f, 0.537109f, 0.554688f, 0.571777f,
+ 0.588867f, 0.605957f, 0.623047f, 0.639648f, 0.656738f, 0.673828f, 0.690430f, 0.708008f,
+ 0.723633f, 0.739746f, 0.874023f, 0.876953f, 0.874023f, 0.871582f, 0.867188f, 0.862793f,
+ 0.002279f, 0.007130f, 0.012291f, 0.016922f, 0.022171f, 0.027847f, 0.033325f, 0.039185f,
+ 0.045349f, 0.051849f, 0.058411f, 0.064880f, 0.072144f, 0.080017f, 0.087891f, 0.096313f,
+ 0.105103f, 0.114197f, 0.123779f, 0.134155f, 0.144043f, 0.155151f, 0.166016f, 0.177246f,
+ 0.189697f, 0.202271f, 0.214722f, 0.228271f, 0.242310f, 0.256592f, 0.270752f, 0.285400f,
+ 0.300537f, 0.315674f, 0.331543f, 0.347656f, 0.363525f, 0.379639f, 0.396729f, 0.414307f,
+ 0.430908f, 0.447754f, 0.465088f, 0.482178f, 0.499512f, 0.517090f, 0.533203f, 0.552246f,
+ 0.568848f, 0.586426f, 0.603516f, 0.621582f, 0.639648f, 0.656250f, 0.673828f, 0.690918f,
+ 0.707520f, 0.724121f, 0.867676f, 0.870605f, 0.868164f, 0.865723f, 0.861328f, 0.857910f,
+ 0.002220f, 0.006565f, 0.011238f, 0.015961f, 0.020401f, 0.025558f, 0.030853f, 0.036133f,
+ 0.041199f, 0.047180f, 0.053436f, 0.059723f, 0.066162f, 0.073853f, 0.080688f, 0.088440f,
+ 0.096436f, 0.105042f, 0.114319f, 0.123047f, 0.132446f, 0.142822f, 0.153198f, 0.164062f,
+ 0.175659f, 0.187378f, 0.199463f, 0.212402f, 0.225464f, 0.239014f, 0.252686f, 0.266846f,
+ 0.281494f, 0.296631f, 0.312500f, 0.328369f, 0.343750f, 0.359863f, 0.376221f, 0.393066f,
+ 0.409668f, 0.426514f, 0.444336f, 0.461670f, 0.478760f, 0.496826f, 0.513672f, 0.532227f,
+ 0.549316f, 0.567383f, 0.584961f, 0.602051f, 0.620605f, 0.637207f, 0.655273f, 0.672363f,
+ 0.689941f, 0.708008f, 0.860840f, 0.864746f, 0.862793f, 0.859375f, 0.855957f, 0.853027f,
+ 0.002190f, 0.005993f, 0.010117f, 0.014420f, 0.018738f, 0.023361f, 0.028015f, 0.033142f,
+ 0.037781f, 0.043732f, 0.048920f, 0.054840f, 0.061218f, 0.067810f, 0.074219f, 0.081299f,
+ 0.088562f, 0.096130f, 0.104614f, 0.113098f, 0.122253f, 0.131714f, 0.141113f, 0.151245f,
+ 0.162109f, 0.173462f, 0.184692f, 0.196899f, 0.209473f, 0.222534f, 0.236206f, 0.249634f,
+ 0.263672f, 0.277588f, 0.293213f, 0.308350f, 0.323975f, 0.339844f, 0.355957f, 0.372070f,
+ 0.389404f, 0.405762f, 0.422852f, 0.439941f, 0.458008f, 0.475098f, 0.492920f, 0.510742f,
+ 0.528320f, 0.546875f, 0.564453f, 0.583496f, 0.601074f, 0.619141f, 0.636719f, 0.654785f,
+ 0.672852f, 0.691406f, 0.852539f, 0.858398f, 0.856445f, 0.853516f, 0.850586f, 0.847656f,
+ 0.001787f, 0.005753f, 0.009300f, 0.013611f, 0.017410f, 0.021576f, 0.025665f, 0.030533f,
+ 0.035126f, 0.040039f, 0.044952f, 0.050446f, 0.055817f, 0.061890f, 0.068054f, 0.074707f,
+ 0.081482f, 0.088501f, 0.095764f, 0.103943f, 0.112183f, 0.120850f, 0.130249f, 0.139526f,
+ 0.149658f, 0.160400f, 0.171021f, 0.182007f, 0.194336f, 0.206421f, 0.219360f, 0.232666f,
+ 0.245850f, 0.260010f, 0.274170f, 0.289307f, 0.304443f, 0.319580f, 0.335693f, 0.352295f,
+ 0.369141f, 0.385498f, 0.402344f, 0.419189f, 0.437012f, 0.454346f, 0.472412f, 0.490234f,
+ 0.507812f, 0.525879f, 0.545410f, 0.562500f, 0.581055f, 0.600098f, 0.618164f, 0.636719f,
+ 0.655273f, 0.674316f, 0.845703f, 0.852051f, 0.849609f, 0.847168f, 0.845215f, 0.841309f,
+ 0.001766f, 0.005241f, 0.008881f, 0.012024f, 0.016129f, 0.020233f, 0.024124f, 0.027664f,
+ 0.032135f, 0.036835f, 0.041321f, 0.046173f, 0.051392f, 0.056946f, 0.062225f, 0.068604f,
+ 0.074524f, 0.080933f, 0.088135f, 0.095398f, 0.103210f, 0.110779f, 0.119263f, 0.128296f,
+ 0.137695f, 0.147217f, 0.157349f, 0.168091f, 0.179688f, 0.191284f, 0.203613f, 0.215942f,
+ 0.228882f, 0.242554f, 0.255859f, 0.270508f, 0.285400f, 0.300537f, 0.316406f, 0.331787f,
+ 0.348877f, 0.364746f, 0.382080f, 0.398682f, 0.415771f, 0.434082f, 0.451416f, 0.469482f,
+ 0.487793f, 0.505859f, 0.524414f, 0.542969f, 0.562012f, 0.580566f, 0.598145f, 0.618652f,
+ 0.637695f, 0.657227f, 0.837891f, 0.844727f, 0.843750f, 0.841309f, 0.838379f, 0.836426f,
+ 0.001598f, 0.004887f, 0.008217f, 0.011497f, 0.014786f, 0.018326f, 0.021652f, 0.025513f,
+ 0.029541f, 0.033813f, 0.038086f, 0.042236f, 0.046844f, 0.052032f, 0.057251f, 0.062622f,
+ 0.068237f, 0.074280f, 0.080505f, 0.086975f, 0.094116f, 0.101074f, 0.109314f, 0.117554f,
+ 0.126587f, 0.135254f, 0.144775f, 0.155029f, 0.165405f, 0.176392f, 0.187744f, 0.199829f,
+ 0.212646f, 0.224976f, 0.238647f, 0.252441f, 0.267090f, 0.281738f, 0.296631f, 0.312256f,
+ 0.328369f, 0.344971f, 0.361328f, 0.377686f, 0.395264f, 0.412842f, 0.430908f, 0.448730f,
+ 0.467041f, 0.485596f, 0.503906f, 0.522461f, 0.541504f, 0.561523f, 0.580078f, 0.599121f,
+ 0.618164f, 0.639648f, 0.828613f, 0.837891f, 0.836914f, 0.834473f, 0.833008f, 0.830566f,
+ 0.001709f, 0.004494f, 0.007416f, 0.010628f, 0.013680f, 0.016785f, 0.020203f, 0.023712f,
+ 0.027435f, 0.031006f, 0.034424f, 0.038635f, 0.043182f, 0.047668f, 0.052307f, 0.057159f,
+ 0.062042f, 0.067749f, 0.073730f, 0.079956f, 0.086182f, 0.092773f, 0.100159f, 0.107727f,
+ 0.115479f, 0.123962f, 0.132935f, 0.142578f, 0.151978f, 0.162476f, 0.173340f, 0.184570f,
+ 0.196411f, 0.208740f, 0.221436f, 0.235229f, 0.248779f, 0.262939f, 0.277832f, 0.293213f,
+ 0.308105f, 0.324219f, 0.341309f, 0.357178f, 0.374756f, 0.391846f, 0.409424f, 0.427490f,
+ 0.446533f, 0.464844f, 0.483643f, 0.501953f, 0.521484f, 0.541504f, 0.561035f, 0.579590f,
+ 0.599609f, 0.620605f, 0.821289f, 0.830566f, 0.830078f, 0.828125f, 0.825684f, 0.823242f,
+ 0.001367f, 0.004105f, 0.007023f, 0.009552f, 0.012611f, 0.015289f, 0.018341f, 0.021652f,
+ 0.024857f, 0.027878f, 0.031769f, 0.035614f, 0.039276f, 0.043610f, 0.047333f, 0.052155f,
+ 0.056549f, 0.061401f, 0.066895f, 0.072449f, 0.078613f, 0.084778f, 0.091309f, 0.098083f,
+ 0.105774f, 0.113281f, 0.121399f, 0.130371f, 0.139648f, 0.148926f, 0.159546f, 0.169922f,
+ 0.180908f, 0.192749f, 0.204834f, 0.217651f, 0.231567f, 0.244385f, 0.259277f, 0.273926f,
+ 0.289307f, 0.304688f, 0.320557f, 0.336914f, 0.354248f, 0.371338f, 0.388184f, 0.406982f,
+ 0.424316f, 0.443115f, 0.462646f, 0.481445f, 0.501465f, 0.520508f, 0.541016f, 0.559570f,
+ 0.580078f, 0.601074f, 0.812988f, 0.823242f, 0.823242f, 0.821289f, 0.819824f, 0.817383f,
+ 0.001398f, 0.003883f, 0.006351f, 0.008911f, 0.011559f, 0.014343f, 0.017212f, 0.020035f,
+ 0.022797f, 0.026062f, 0.028793f, 0.031891f, 0.035858f, 0.039368f, 0.043213f, 0.047607f,
+ 0.051483f, 0.056030f, 0.060883f, 0.065979f, 0.071350f, 0.076843f, 0.083130f, 0.089172f,
+ 0.096069f, 0.103333f, 0.111023f, 0.119019f, 0.127319f, 0.136719f, 0.145996f, 0.156128f,
+ 0.166138f, 0.177368f, 0.189453f, 0.201416f, 0.213745f, 0.227295f, 0.240601f, 0.255371f,
+ 0.269287f, 0.285400f, 0.301270f, 0.317139f, 0.333740f, 0.350586f, 0.367920f, 0.385986f,
+ 0.404297f, 0.422852f, 0.442383f, 0.460938f, 0.479980f, 0.500488f, 0.520508f, 0.541016f,
+ 0.560547f, 0.582520f, 0.803711f, 0.814941f, 0.815430f, 0.814453f, 0.812500f, 0.810547f,
+ 0.001259f, 0.003464f, 0.006332f, 0.008286f, 0.010384f, 0.013000f, 0.015587f, 0.018234f,
+ 0.021027f, 0.023422f, 0.026566f, 0.029480f, 0.032379f, 0.035919f, 0.039215f, 0.043060f,
+ 0.046997f, 0.050995f, 0.055267f, 0.059998f, 0.065002f, 0.069946f, 0.075317f, 0.081299f,
+ 0.087280f, 0.094116f, 0.101135f, 0.108276f, 0.116150f, 0.124695f, 0.133545f, 0.142700f,
+ 0.152222f, 0.162720f, 0.173950f, 0.185303f, 0.197754f, 0.210205f, 0.223022f, 0.237061f,
+ 0.250732f, 0.265869f, 0.281250f, 0.297119f, 0.313477f, 0.330322f, 0.347656f, 0.364746f,
+ 0.383301f, 0.401367f, 0.420898f, 0.440186f, 0.459229f, 0.479736f, 0.499512f, 0.520996f,
+ 0.541016f, 0.562988f, 0.794434f, 0.807129f, 0.807617f, 0.807129f, 0.805176f, 0.803711f,
+ 0.001070f, 0.003237f, 0.005432f, 0.007359f, 0.009857f, 0.012337f, 0.014191f, 0.016586f,
+ 0.019257f, 0.021561f, 0.024094f, 0.026901f, 0.029724f, 0.032745f, 0.035675f, 0.039368f,
+ 0.042572f, 0.045990f, 0.050354f, 0.054535f, 0.058746f, 0.063232f, 0.068420f, 0.073608f,
+ 0.079529f, 0.085266f, 0.091370f, 0.098083f, 0.105835f, 0.113159f, 0.121094f, 0.129639f,
+ 0.139038f, 0.148926f, 0.159058f, 0.169678f, 0.181274f, 0.193481f, 0.205811f, 0.219482f,
+ 0.233032f, 0.247192f, 0.262207f, 0.277100f, 0.293213f, 0.309814f, 0.326660f, 0.344238f,
+ 0.361816f, 0.380615f, 0.398926f, 0.418945f, 0.438477f, 0.458008f, 0.479004f, 0.499512f,
+ 0.520996f, 0.543945f, 0.784668f, 0.798828f, 0.800293f, 0.799805f, 0.797852f, 0.796875f,
+ 0.001074f, 0.002916f, 0.004955f, 0.007149f, 0.009033f, 0.011055f, 0.013268f, 0.015495f,
+ 0.017365f, 0.019485f, 0.022095f, 0.024002f, 0.026688f, 0.029633f, 0.032593f, 0.035370f,
+ 0.038361f, 0.041870f, 0.045319f, 0.049225f, 0.052948f, 0.057068f, 0.061676f, 0.066345f,
+ 0.071167f, 0.076782f, 0.082581f, 0.088867f, 0.095886f, 0.102539f, 0.109802f, 0.118042f,
+ 0.126709f, 0.135132f, 0.144897f, 0.155151f, 0.165771f, 0.177368f, 0.189209f, 0.201904f,
+ 0.215210f, 0.229370f, 0.242798f, 0.258057f, 0.274170f, 0.290039f, 0.306885f, 0.323242f,
+ 0.341309f, 0.359375f, 0.378418f, 0.397461f, 0.416260f, 0.437500f, 0.457031f, 0.479004f,
+ 0.501465f, 0.522461f, 0.775391f, 0.790527f, 0.791992f, 0.791504f, 0.791016f, 0.789551f,
+ 0.000837f, 0.002916f, 0.004738f, 0.006477f, 0.008575f, 0.010170f, 0.012161f, 0.014023f,
+ 0.015808f, 0.017792f, 0.020111f, 0.022064f, 0.024414f, 0.026794f, 0.029251f, 0.032074f,
+ 0.034698f, 0.037598f, 0.040741f, 0.043915f, 0.047577f, 0.051361f, 0.055389f, 0.059692f,
+ 0.064209f, 0.068787f, 0.074585f, 0.079712f, 0.085632f, 0.092346f, 0.099487f, 0.106323f,
+ 0.114929f, 0.122925f, 0.131958f, 0.141235f, 0.151123f, 0.161865f, 0.172974f, 0.184937f,
+ 0.197632f, 0.210693f, 0.224854f, 0.239136f, 0.254395f, 0.269531f, 0.285889f, 0.302979f,
+ 0.320557f, 0.338623f, 0.356689f, 0.375977f, 0.395752f, 0.415527f, 0.436523f, 0.458252f,
+ 0.479248f, 0.501465f, 0.765137f, 0.781738f, 0.783691f, 0.784180f, 0.783203f, 0.781250f,
+ 0.000854f, 0.002817f, 0.004089f, 0.005684f, 0.007675f, 0.009277f, 0.010864f, 0.012413f,
+ 0.014427f, 0.016235f, 0.017838f, 0.019913f, 0.021805f, 0.023987f, 0.026276f, 0.028915f,
+ 0.030960f, 0.033875f, 0.036652f, 0.039551f, 0.042816f, 0.045837f, 0.049591f, 0.053589f,
+ 0.057526f, 0.061829f, 0.066650f, 0.071655f, 0.077393f, 0.083008f, 0.088989f, 0.096008f,
+ 0.103210f, 0.110657f, 0.119141f, 0.127930f, 0.137085f, 0.146973f, 0.157593f, 0.169312f,
+ 0.181274f, 0.193481f, 0.207031f, 0.220581f, 0.235229f, 0.250732f, 0.266357f, 0.282227f,
+ 0.299805f, 0.317627f, 0.335449f, 0.354736f, 0.374268f, 0.394531f, 0.415527f, 0.436279f,
+ 0.458252f, 0.481689f, 0.754883f, 0.773438f, 0.775391f, 0.775879f, 0.774902f, 0.773926f,
+ 0.000852f, 0.002520f, 0.003937f, 0.005527f, 0.006836f, 0.008408f, 0.009773f, 0.011620f,
+ 0.013039f, 0.014687f, 0.016327f, 0.017944f, 0.019760f, 0.021774f, 0.023697f, 0.025894f,
+ 0.027969f, 0.030121f, 0.032501f, 0.035370f, 0.038208f, 0.041046f, 0.044098f, 0.047791f,
+ 0.051453f, 0.055176f, 0.059570f, 0.064026f, 0.068787f, 0.074158f, 0.079834f, 0.085938f,
+ 0.092590f, 0.099304f, 0.106873f, 0.114990f, 0.124023f, 0.133301f, 0.143066f, 0.153687f,
+ 0.164551f, 0.176392f, 0.189209f, 0.202637f, 0.216553f, 0.231323f, 0.246704f, 0.262451f,
+ 0.279297f, 0.296387f, 0.314697f, 0.333496f, 0.353516f, 0.373047f, 0.394775f, 0.415039f,
+ 0.437500f, 0.460449f, 0.745117f, 0.763672f, 0.766602f, 0.767090f, 0.767090f, 0.765625f,
+ 0.000762f, 0.002342f, 0.003563f, 0.004787f, 0.006447f, 0.007648f, 0.009193f, 0.010353f,
+ 0.012016f, 0.013138f, 0.014557f, 0.016312f, 0.017929f, 0.019470f, 0.021103f, 0.023056f,
+ 0.024918f, 0.026886f, 0.029099f, 0.031586f, 0.034058f, 0.036499f, 0.039307f, 0.042450f,
+ 0.045685f, 0.049072f, 0.052826f, 0.056915f, 0.061096f, 0.065918f, 0.070984f, 0.076538f,
+ 0.082520f, 0.088928f, 0.095520f, 0.102905f, 0.111206f, 0.119629f, 0.128662f, 0.138184f,
+ 0.148682f, 0.160156f, 0.171997f, 0.184937f, 0.198364f, 0.212524f, 0.227173f, 0.243042f,
+ 0.259277f, 0.276611f, 0.294189f, 0.312500f, 0.331055f, 0.350830f, 0.372070f, 0.392334f,
+ 0.415771f, 0.438232f, 0.734375f, 0.754395f, 0.758789f, 0.758789f, 0.758789f, 0.757812f,
+ 0.000848f, 0.002024f, 0.003553f, 0.004646f, 0.005726f, 0.007050f, 0.008362f, 0.009438f,
+ 0.010536f, 0.011810f, 0.013123f, 0.014481f, 0.015778f, 0.017242f, 0.018753f, 0.020447f,
+ 0.022278f, 0.023819f, 0.025940f, 0.027771f, 0.029999f, 0.032410f, 0.034851f, 0.037354f,
+ 0.040375f, 0.043610f, 0.046631f, 0.050354f, 0.054108f, 0.058563f, 0.062805f, 0.067871f,
+ 0.073242f, 0.078796f, 0.085083f, 0.091797f, 0.098816f, 0.106689f, 0.115540f, 0.124207f,
+ 0.134155f, 0.144409f, 0.155762f, 0.167725f, 0.180664f, 0.193848f, 0.208618f, 0.223389f,
+ 0.239746f, 0.256104f, 0.273438f, 0.291260f, 0.310059f, 0.330078f, 0.349854f, 0.370850f,
+ 0.393555f, 0.416992f, 0.724121f, 0.744629f, 0.748535f, 0.750000f, 0.749512f, 0.749512f,
+ 0.000736f, 0.001780f, 0.002937f, 0.004314f, 0.005211f, 0.006214f, 0.007423f, 0.008537f,
+ 0.009392f, 0.010773f, 0.011726f, 0.012970f, 0.014183f, 0.015373f, 0.016724f, 0.017990f,
+ 0.019730f, 0.021194f, 0.022644f, 0.024368f, 0.026443f, 0.028610f, 0.030685f, 0.032898f,
+ 0.035583f, 0.038300f, 0.041351f, 0.044556f, 0.047638f, 0.051422f, 0.055359f, 0.059875f,
+ 0.064392f, 0.069580f, 0.075195f, 0.080872f, 0.087646f, 0.094849f, 0.102173f, 0.110596f,
+ 0.119690f, 0.129761f, 0.139893f, 0.151367f, 0.163452f, 0.176147f, 0.190063f, 0.204590f,
+ 0.219238f, 0.235718f, 0.252441f, 0.270264f, 0.289062f, 0.307861f, 0.328613f, 0.350098f,
+ 0.372314f, 0.395020f, 0.712402f, 0.734863f, 0.739746f, 0.740723f, 0.740723f, 0.740234f,
+ 0.000589f, 0.001616f, 0.002674f, 0.003841f, 0.004940f, 0.005676f, 0.006554f, 0.007442f,
+ 0.008812f, 0.009537f, 0.010277f, 0.011528f, 0.012634f, 0.013527f, 0.014671f, 0.016037f,
+ 0.017136f, 0.018631f, 0.019943f, 0.021530f, 0.023071f, 0.025146f, 0.026825f, 0.029037f,
+ 0.030853f, 0.033447f, 0.035736f, 0.038849f, 0.041656f, 0.044922f, 0.048462f, 0.052277f,
+ 0.056519f, 0.061127f, 0.065796f, 0.071411f, 0.077148f, 0.083435f, 0.090393f, 0.097900f,
+ 0.106079f, 0.115356f, 0.125122f, 0.135132f, 0.146729f, 0.158936f, 0.171509f, 0.185059f,
+ 0.200439f, 0.215576f, 0.232056f, 0.249756f, 0.267822f, 0.286621f, 0.306885f, 0.328125f,
+ 0.349854f, 0.373291f, 0.701172f, 0.725586f, 0.729980f, 0.730957f, 0.731934f, 0.730957f,
+ 0.000547f, 0.001666f, 0.002367f, 0.003559f, 0.004238f, 0.005028f, 0.005852f, 0.006859f,
+ 0.007755f, 0.008530f, 0.009163f, 0.010056f, 0.010956f, 0.011978f, 0.013062f, 0.014076f,
+ 0.015053f, 0.016251f, 0.017471f, 0.018921f, 0.020233f, 0.021774f, 0.023315f, 0.025162f,
+ 0.026871f, 0.029007f, 0.031204f, 0.033661f, 0.036102f, 0.039062f, 0.042053f, 0.045380f,
+ 0.048859f, 0.053040f, 0.057343f, 0.062225f, 0.067261f, 0.073120f, 0.079407f, 0.086243f,
+ 0.093567f, 0.101868f, 0.110596f, 0.120239f, 0.130859f, 0.141968f, 0.154053f, 0.167358f,
+ 0.181274f, 0.196045f, 0.212158f, 0.229248f, 0.247192f, 0.265381f, 0.285400f, 0.305664f,
+ 0.327637f, 0.350586f, 0.689453f, 0.715820f, 0.720215f, 0.722168f, 0.722168f, 0.722168f,
+ 0.000492f, 0.001634f, 0.002342f, 0.003111f, 0.003866f, 0.004574f, 0.005417f, 0.005928f,
+ 0.006588f, 0.007393f, 0.008041f, 0.008873f, 0.009689f, 0.010391f, 0.011375f, 0.012146f,
+ 0.013100f, 0.014183f, 0.015274f, 0.016479f, 0.017456f, 0.018768f, 0.020157f, 0.021606f,
+ 0.023300f, 0.024933f, 0.026855f, 0.028885f, 0.031143f, 0.033417f, 0.036133f, 0.039032f,
+ 0.042236f, 0.045776f, 0.049713f, 0.053680f, 0.058228f, 0.063232f, 0.069092f, 0.074829f,
+ 0.081482f, 0.089050f, 0.096924f, 0.105591f, 0.115417f, 0.126221f, 0.137329f, 0.149658f,
+ 0.162964f, 0.176880f, 0.192505f, 0.208740f, 0.226318f, 0.244873f, 0.263428f, 0.283936f,
+ 0.306396f, 0.329346f, 0.676270f, 0.705078f, 0.709961f, 0.711914f, 0.712891f, 0.711914f,
+ 0.000506f, 0.001342f, 0.002157f, 0.002813f, 0.003353f, 0.004105f, 0.004658f, 0.005344f,
+ 0.005871f, 0.006538f, 0.007050f, 0.007751f, 0.008247f, 0.009109f, 0.009865f, 0.010559f,
+ 0.011269f, 0.012169f, 0.013290f, 0.014191f, 0.015015f, 0.016312f, 0.017395f, 0.018570f,
+ 0.019989f, 0.021439f, 0.023102f, 0.024536f, 0.026535f, 0.028702f, 0.030899f, 0.033356f,
+ 0.035980f, 0.039093f, 0.042328f, 0.046051f, 0.049927f, 0.054199f, 0.059052f, 0.064575f,
+ 0.070496f, 0.076782f, 0.084412f, 0.092285f, 0.100708f, 0.110779f, 0.121399f, 0.132690f,
+ 0.145508f, 0.158813f, 0.173584f, 0.189453f, 0.205688f, 0.223755f, 0.242554f, 0.263184f,
+ 0.284180f, 0.306641f, 0.664551f, 0.693848f, 0.699707f, 0.702148f, 0.702637f, 0.703125f,
+ 0.000500f, 0.001122f, 0.001810f, 0.002363f, 0.002987f, 0.003576f, 0.004158f, 0.004620f,
+ 0.005032f, 0.005627f, 0.006161f, 0.006721f, 0.007179f, 0.007790f, 0.008385f, 0.009163f,
+ 0.009758f, 0.010536f, 0.011284f, 0.011986f, 0.012878f, 0.013710f, 0.014725f, 0.015823f,
+ 0.016937f, 0.018326f, 0.019547f, 0.020874f, 0.022522f, 0.024399f, 0.026077f, 0.028427f,
+ 0.030609f, 0.032990f, 0.035736f, 0.038788f, 0.042236f, 0.045990f, 0.050354f, 0.054901f,
+ 0.059967f, 0.065918f, 0.072205f, 0.079468f, 0.087219f, 0.096252f, 0.105713f, 0.116272f,
+ 0.128174f, 0.140747f, 0.154419f, 0.169556f, 0.186279f, 0.203125f, 0.221313f, 0.240601f,
+ 0.261719f, 0.284424f, 0.652344f, 0.683105f, 0.688965f, 0.691406f, 0.692383f, 0.693359f,
+ 0.000482f, 0.001184f, 0.001604f, 0.002171f, 0.002562f, 0.003029f, 0.003656f, 0.003941f,
+ 0.004410f, 0.004948f, 0.005325f, 0.005577f, 0.006157f, 0.006702f, 0.007172f, 0.007751f,
+ 0.008331f, 0.008904f, 0.009514f, 0.010063f, 0.010925f, 0.011719f, 0.012306f, 0.013321f,
+ 0.014275f, 0.015465f, 0.016510f, 0.017593f, 0.018845f, 0.020401f, 0.022095f, 0.023682f,
+ 0.025513f, 0.027679f, 0.029968f, 0.032593f, 0.035461f, 0.038757f, 0.042175f, 0.046326f,
+ 0.050873f, 0.055939f, 0.061462f, 0.067444f, 0.074402f, 0.082520f, 0.091125f, 0.100830f,
+ 0.111572f, 0.123413f, 0.136719f, 0.150513f, 0.165894f, 0.182251f, 0.200684f, 0.219727f,
+ 0.240234f, 0.261963f, 0.640137f, 0.671387f, 0.679199f, 0.680664f, 0.682617f, 0.683105f,
+ 0.000501f, 0.000919f, 0.001424f, 0.001853f, 0.002266f, 0.002789f, 0.002998f, 0.003397f,
+ 0.003902f, 0.004192f, 0.004417f, 0.004974f, 0.005207f, 0.005676f, 0.006134f, 0.006527f,
+ 0.007179f, 0.007465f, 0.008018f, 0.008537f, 0.009178f, 0.009888f, 0.010544f, 0.011093f,
+ 0.011986f, 0.012794f, 0.013664f, 0.014717f, 0.015747f, 0.016983f, 0.018127f, 0.019470f,
+ 0.021103f, 0.022919f, 0.024826f, 0.026962f, 0.029358f, 0.031769f, 0.035065f, 0.038239f,
+ 0.042297f, 0.046570f, 0.051422f, 0.056671f, 0.062805f, 0.069763f, 0.077698f, 0.086182f,
+ 0.095825f, 0.106812f, 0.119080f, 0.132568f, 0.147217f, 0.162598f, 0.180176f, 0.198730f,
+ 0.218628f, 0.241211f, 0.627441f, 0.660156f, 0.668457f, 0.669922f, 0.672363f, 0.671875f,
+ 0.000235f, 0.001120f, 0.001356f, 0.001651f, 0.002117f, 0.002441f, 0.002678f, 0.002993f,
+ 0.003244f, 0.003519f, 0.003876f, 0.004086f, 0.004505f, 0.004787f, 0.005085f, 0.005604f,
+ 0.005985f, 0.006271f, 0.006783f, 0.007145f, 0.007679f, 0.008217f, 0.008728f, 0.009277f,
+ 0.009956f, 0.010605f, 0.011490f, 0.012062f, 0.013084f, 0.013962f, 0.014984f, 0.016113f,
+ 0.017395f, 0.018829f, 0.020416f, 0.022125f, 0.023972f, 0.025955f, 0.028625f, 0.031616f,
+ 0.034515f, 0.038147f, 0.042114f, 0.046783f, 0.052094f, 0.058075f, 0.065002f, 0.072510f,
+ 0.081604f, 0.091125f, 0.102539f, 0.114807f, 0.128662f, 0.143921f, 0.160034f, 0.178467f,
+ 0.198364f, 0.218750f, 0.613281f, 0.648926f, 0.657227f, 0.659668f, 0.661621f, 0.661621f,
+ 0.000382f, 0.000704f, 0.001099f, 0.001557f, 0.001774f, 0.001976f, 0.002132f, 0.002575f,
+ 0.002634f, 0.002916f, 0.003103f, 0.003494f, 0.003754f, 0.003956f, 0.004269f, 0.004684f,
+ 0.004902f, 0.005234f, 0.005569f, 0.005890f, 0.006416f, 0.006786f, 0.007160f, 0.007645f,
+ 0.008118f, 0.008781f, 0.009346f, 0.010025f, 0.010658f, 0.011475f, 0.012230f, 0.013016f,
+ 0.014122f, 0.015251f, 0.016342f, 0.017807f, 0.019424f, 0.021103f, 0.023026f, 0.025436f,
+ 0.027817f, 0.030914f, 0.034210f, 0.037750f, 0.042450f, 0.047455f, 0.053101f, 0.059998f,
+ 0.067688f, 0.076660f, 0.086670f, 0.097961f, 0.110779f, 0.125366f, 0.140747f, 0.158081f,
+ 0.176880f, 0.197632f, 0.600098f, 0.637207f, 0.644531f, 0.647949f, 0.649414f, 0.651855f,
+ 0.000182f, 0.000738f, 0.000942f, 0.001220f, 0.001469f, 0.001634f, 0.001820f, 0.002005f,
+ 0.002291f, 0.002441f, 0.002636f, 0.002832f, 0.003019f, 0.003242f, 0.003502f, 0.003824f,
+ 0.004017f, 0.004333f, 0.004570f, 0.004883f, 0.005173f, 0.005615f, 0.005909f, 0.006317f,
+ 0.006649f, 0.007160f, 0.007656f, 0.008156f, 0.008583f, 0.009209f, 0.009857f, 0.010696f,
+ 0.011322f, 0.012367f, 0.013229f, 0.014259f, 0.015686f, 0.016815f, 0.018402f, 0.020126f,
+ 0.022095f, 0.024414f, 0.027176f, 0.030273f, 0.033722f, 0.038086f, 0.042969f, 0.048645f,
+ 0.055237f, 0.063171f, 0.071960f, 0.082031f, 0.093994f, 0.107300f, 0.122131f, 0.138550f,
+ 0.156494f, 0.177002f, 0.586426f, 0.625488f, 0.633789f, 0.637207f, 0.638672f, 0.639648f,
+ 0.000199f, 0.000534f, 0.000745f, 0.000995f, 0.001190f, 0.001387f, 0.001516f, 0.001691f,
+ 0.001790f, 0.001941f, 0.002214f, 0.002346f, 0.002449f, 0.002686f, 0.002832f, 0.003042f,
+ 0.003304f, 0.003531f, 0.003662f, 0.003952f, 0.004181f, 0.004517f, 0.004704f, 0.005074f,
+ 0.005352f, 0.005718f, 0.006096f, 0.006481f, 0.006947f, 0.007454f, 0.007988f, 0.008484f,
+ 0.009140f, 0.009804f, 0.010475f, 0.011307f, 0.012299f, 0.013268f, 0.014511f, 0.015823f,
+ 0.017410f, 0.018936f, 0.021225f, 0.023621f, 0.026367f, 0.029770f, 0.033661f, 0.038452f,
+ 0.044067f, 0.050812f, 0.058411f, 0.067444f, 0.077942f, 0.090149f, 0.104187f, 0.119812f,
+ 0.137085f, 0.156372f, 0.572754f, 0.613770f, 0.621582f, 0.625977f, 0.627441f, 0.628906f,
+ 0.000165f, 0.000486f, 0.000618f, 0.000880f, 0.001063f, 0.001140f, 0.001258f, 0.001464f,
+ 0.001498f, 0.001561f, 0.001707f, 0.001899f, 0.001976f, 0.002171f, 0.002285f, 0.002474f,
+ 0.002571f, 0.002764f, 0.002968f, 0.003170f, 0.003389f, 0.003580f, 0.003822f, 0.004036f,
+ 0.004269f, 0.004505f, 0.004738f, 0.005157f, 0.005474f, 0.005821f, 0.006279f, 0.006649f,
+ 0.007107f, 0.007610f, 0.008240f, 0.008835f, 0.009598f, 0.010361f, 0.011276f, 0.012299f,
+ 0.013466f, 0.014740f, 0.016251f, 0.018021f, 0.020294f, 0.022797f, 0.025833f, 0.029739f,
+ 0.034058f, 0.039612f, 0.046021f, 0.053833f, 0.063110f, 0.074158f, 0.086914f, 0.101562f,
+ 0.118164f, 0.136841f, 0.558594f, 0.601074f, 0.608887f, 0.613281f, 0.615234f, 0.617188f,
+ 0.000096f, 0.000348f, 0.000585f, 0.000707f, 0.000837f, 0.000866f, 0.000972f, 0.001095f,
+ 0.001198f, 0.001309f, 0.001355f, 0.001417f, 0.001615f, 0.001740f, 0.001863f, 0.001880f,
+ 0.002048f, 0.002159f, 0.002380f, 0.002487f, 0.002613f, 0.002777f, 0.003000f, 0.003143f,
+ 0.003353f, 0.003521f, 0.003748f, 0.003963f, 0.004265f, 0.004490f, 0.004776f, 0.005093f,
+ 0.005577f, 0.005966f, 0.006321f, 0.006828f, 0.007320f, 0.007904f, 0.008575f, 0.009392f,
+ 0.010231f, 0.011276f, 0.012321f, 0.013832f, 0.015343f, 0.017242f, 0.019501f, 0.022247f,
+ 0.025696f, 0.029922f, 0.035187f, 0.041779f, 0.049683f, 0.059387f, 0.070801f, 0.084106f,
+ 0.100037f, 0.117798f, 0.544434f, 0.588867f, 0.597656f, 0.602539f, 0.604492f, 0.605469f,
+ 0.000123f, 0.000248f, 0.000443f, 0.000625f, 0.000663f, 0.000733f, 0.000843f, 0.000780f,
+ 0.000921f, 0.000986f, 0.001081f, 0.001178f, 0.001254f, 0.001348f, 0.001364f, 0.001515f,
+ 0.001565f, 0.001705f, 0.001824f, 0.001870f, 0.002066f, 0.002155f, 0.002274f, 0.002422f,
+ 0.002525f, 0.002695f, 0.002863f, 0.003038f, 0.003271f, 0.003441f, 0.003736f, 0.003901f,
+ 0.004112f, 0.004478f, 0.004719f, 0.005093f, 0.005482f, 0.005913f, 0.006413f, 0.007019f,
+ 0.007626f, 0.008408f, 0.009201f, 0.010201f, 0.011436f, 0.012749f, 0.014389f, 0.016373f,
+ 0.018906f, 0.022034f, 0.025909f, 0.031082f, 0.037628f, 0.045715f, 0.055939f, 0.068176f,
+ 0.082764f, 0.099365f, 0.529785f, 0.574707f, 0.584961f, 0.589844f, 0.591797f, 0.593750f,
+ 0.000210f, 0.000212f, 0.000365f, 0.000494f, 0.000438f, 0.000597f, 0.000538f, 0.000623f,
+ 0.000638f, 0.000736f, 0.000866f, 0.000882f, 0.000954f, 0.001040f, 0.001070f, 0.001086f,
+ 0.001220f, 0.001274f, 0.001341f, 0.001457f, 0.001513f, 0.001598f, 0.001697f, 0.001781f,
+ 0.001898f, 0.001970f, 0.002131f, 0.002241f, 0.002401f, 0.002645f, 0.002783f, 0.002892f,
+ 0.003120f, 0.003347f, 0.003508f, 0.003757f, 0.004032f, 0.004314f, 0.004688f, 0.005066f,
+ 0.005520f, 0.006012f, 0.006702f, 0.007332f, 0.008171f, 0.009140f, 0.010399f, 0.011787f,
+ 0.013496f, 0.015732f, 0.018509f, 0.022278f, 0.027267f, 0.033813f, 0.042328f, 0.053070f,
+ 0.066406f, 0.082825f, 0.516602f, 0.562500f, 0.573242f, 0.577637f, 0.580078f, 0.581543f,
+ 0.000000f, 0.000216f, 0.000281f, 0.000346f, 0.000374f, 0.000388f, 0.000491f, 0.000416f,
+ 0.000516f, 0.000535f, 0.000635f, 0.000625f, 0.000681f, 0.000719f, 0.000790f, 0.000813f,
+ 0.000879f, 0.000926f, 0.000968f, 0.001004f, 0.001097f, 0.001135f, 0.001229f, 0.001300f,
+ 0.001361f, 0.001431f, 0.001541f, 0.001610f, 0.001711f, 0.001802f, 0.001922f, 0.002094f,
+ 0.002169f, 0.002346f, 0.002468f, 0.002644f, 0.002844f, 0.003094f, 0.003368f, 0.003586f,
+ 0.003883f, 0.004223f, 0.004662f, 0.005093f, 0.005680f, 0.006348f, 0.007206f, 0.008202f,
+ 0.009392f, 0.010895f, 0.012939f, 0.015465f, 0.018906f, 0.023682f, 0.030502f, 0.039825f,
+ 0.051331f, 0.066528f, 0.500977f, 0.548828f, 0.560059f, 0.564453f, 0.567871f, 0.569336f,
+ 0.000000f, 0.000106f, 0.000201f, 0.000252f, 0.000251f, 0.000322f, 0.000281f, 0.000340f,
+ 0.000359f, 0.000428f, 0.000443f, 0.000419f, 0.000444f, 0.000500f, 0.000524f, 0.000590f,
+ 0.000574f, 0.000650f, 0.000693f, 0.000732f, 0.000778f, 0.000821f, 0.000848f, 0.000900f,
+ 0.000965f, 0.000982f, 0.001072f, 0.001109f, 0.001169f, 0.001307f, 0.001301f, 0.001409f,
+ 0.001483f, 0.001610f, 0.001734f, 0.001835f, 0.001940f, 0.002098f, 0.002241f, 0.002426f,
+ 0.002634f, 0.002865f, 0.003136f, 0.003431f, 0.003763f, 0.004211f, 0.004742f, 0.005417f,
+ 0.006229f, 0.007298f, 0.008621f, 0.010330f, 0.012650f, 0.015808f, 0.020569f, 0.027908f,
+ 0.037994f, 0.051514f, 0.485840f, 0.536133f, 0.547363f, 0.551758f, 0.554688f, 0.557617f,
+ 0.000026f, 0.000156f, 0.000201f, 0.000136f, 0.000188f, 0.000187f, 0.000192f, 0.000240f,
+ 0.000245f, 0.000254f, 0.000262f, 0.000311f, 0.000309f, 0.000331f, 0.000374f, 0.000385f,
+ 0.000411f, 0.000431f, 0.000443f, 0.000461f, 0.000507f, 0.000522f, 0.000562f, 0.000596f,
+ 0.000634f, 0.000684f, 0.000718f, 0.000735f, 0.000776f, 0.000815f, 0.000875f, 0.000927f,
+ 0.000982f, 0.001053f, 0.001123f, 0.001162f, 0.001271f, 0.001346f, 0.001473f, 0.001577f,
+ 0.001670f, 0.001838f, 0.002005f, 0.002161f, 0.002405f, 0.002670f, 0.002993f, 0.003399f,
+ 0.003860f, 0.004528f, 0.005386f, 0.006523f, 0.008003f, 0.010063f, 0.013206f, 0.017990f,
+ 0.026031f, 0.038086f, 0.471191f, 0.522949f, 0.534668f, 0.540039f, 0.543457f, 0.544922f,
+ 0.000000f, 0.000093f, 0.000084f, 0.000085f, 0.000124f, 0.000145f, 0.000122f, 0.000149f,
+ 0.000152f, 0.000152f, 0.000158f, 0.000167f, 0.000186f, 0.000209f, 0.000217f, 0.000225f,
+ 0.000231f, 0.000272f, 0.000273f, 0.000301f, 0.000303f, 0.000310f, 0.000338f, 0.000361f,
+ 0.000387f, 0.000423f, 0.000413f, 0.000436f, 0.000478f, 0.000503f, 0.000525f, 0.000570f,
+ 0.000608f, 0.000626f, 0.000677f, 0.000706f, 0.000753f, 0.000813f, 0.000884f, 0.000929f,
+ 0.001000f, 0.001094f, 0.001183f, 0.001302f, 0.001412f, 0.001563f, 0.001769f, 0.001974f,
+ 0.002277f, 0.002626f, 0.003124f, 0.003761f, 0.004665f, 0.005993f, 0.007935f, 0.010818f,
+ 0.016205f, 0.026138f, 0.456299f, 0.509277f, 0.520996f, 0.527344f, 0.530762f, 0.532715f,
+ 0.000105f, 0.000083f, 0.000072f, 0.000065f, 0.000071f, 0.000072f, 0.000077f, 0.000084f,
+ 0.000088f, 0.000093f, 0.000095f, 0.000120f, 0.000100f, 0.000108f, 0.000126f, 0.000118f,
+ 0.000139f, 0.000149f, 0.000153f, 0.000165f, 0.000169f, 0.000172f, 0.000194f, 0.000203f,
+ 0.000233f, 0.000225f, 0.000233f, 0.000253f, 0.000266f, 0.000275f, 0.000299f, 0.000319f,
+ 0.000338f, 0.000345f, 0.000374f, 0.000384f, 0.000415f, 0.000448f, 0.000483f, 0.000511f,
+ 0.000543f, 0.000585f, 0.000647f, 0.000692f, 0.000755f, 0.000827f, 0.000924f, 0.001041f,
+ 0.001186f, 0.001372f, 0.001608f, 0.001953f, 0.002411f, 0.003098f, 0.004238f, 0.005989f,
+ 0.009003f, 0.016006f, 0.441406f, 0.495361f, 0.508301f, 0.514160f, 0.518066f, 0.520508f,
+ 0.000090f, 0.000067f, 0.000058f, 0.000052f, 0.000047f, 0.000044f, 0.000044f, 0.000040f,
+ 0.000042f, 0.000049f, 0.000042f, 0.000045f, 0.000059f, 0.000047f, 0.000050f, 0.000054f,
+ 0.000071f, 0.000073f, 0.000075f, 0.000078f, 0.000079f, 0.000084f, 0.000087f, 0.000090f,
+ 0.000097f, 0.000109f, 0.000108f, 0.000124f, 0.000124f, 0.000131f, 0.000138f, 0.000143f,
+ 0.000155f, 0.000164f, 0.000178f, 0.000182f, 0.000192f, 0.000209f, 0.000225f, 0.000244f,
+ 0.000259f, 0.000274f, 0.000303f, 0.000321f, 0.000357f, 0.000385f, 0.000429f, 0.000470f,
+ 0.000537f, 0.000608f, 0.000710f, 0.000852f, 0.001052f, 0.001371f, 0.001877f, 0.002762f,
+ 0.004406f, 0.008202f, 0.426270f, 0.483154f, 0.495605f, 0.500977f, 0.505371f, 0.507324f,
+ 0.000067f, 0.000047f, 0.000039f, 0.000035f, 0.000032f, 0.000030f, 0.000029f, 0.000027f,
+ 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000021f, 0.000020f, 0.000019f, 0.000021f,
+ 0.000020f, 0.000024f, 0.000028f, 0.000030f, 0.000029f, 0.000032f, 0.000035f, 0.000034f,
+ 0.000036f, 0.000044f, 0.000046f, 0.000040f, 0.000048f, 0.000047f, 0.000051f, 0.000053f,
+ 0.000059f, 0.000059f, 0.000064f, 0.000066f, 0.000077f, 0.000079f, 0.000081f, 0.000091f,
+ 0.000094f, 0.000100f, 0.000108f, 0.000119f, 0.000129f, 0.000137f, 0.000148f, 0.000173f,
+ 0.000191f, 0.000210f, 0.000249f, 0.000292f, 0.000357f, 0.000448f, 0.000629f, 0.000943f,
+ 0.001630f, 0.003332f, 0.411377f, 0.468506f, 0.482910f, 0.488770f, 0.492188f, 0.495117f,
+ 0.000025f, 0.000018f, 0.000015f, 0.000013f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f,
+ 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000010f, 0.000010f, 0.000010f,
+ 0.000012f, 0.000014f, 0.000014f, 0.000014f, 0.000016f, 0.000018f, 0.000019f, 0.000021f,
+ 0.000020f, 0.000023f, 0.000025f, 0.000027f, 0.000027f, 0.000029f, 0.000035f, 0.000033f,
+ 0.000040f, 0.000044f, 0.000052f, 0.000061f, 0.000069f, 0.000087f, 0.000117f, 0.000174f,
+ 0.000319f, 0.000847f, 0.395996f, 0.454834f, 0.468750f, 0.475586f, 0.479004f, 0.481689f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000005f,
+ 0.000009f, 0.000027f, 0.381348f, 0.441406f, 0.455566f, 0.462891f, 0.466309f, 0.468994f,
+ },
+ {
+ 0.016769f, 0.050629f, 0.083740f, 0.116638f, 0.148071f, 0.178955f, 0.208374f, 0.236938f,
+ 0.265137f, 0.291992f, 0.317871f, 0.343994f, 0.368164f, 0.391846f, 0.415527f, 0.437988f,
+ 0.459717f, 0.480469f, 0.501465f, 0.520996f, 0.540527f, 0.559082f, 0.577637f, 0.594727f,
+ 0.612305f, 0.628418f, 0.644531f, 0.661133f, 0.676270f, 0.691406f, 0.705566f, 0.719727f,
+ 0.734375f, 0.747070f, 0.760254f, 0.773438f, 0.786133f, 0.798828f, 0.810059f, 0.821777f,
+ 0.833008f, 0.843262f, 0.854492f, 0.865234f, 0.875488f, 0.885254f, 0.895508f, 0.904297f,
+ 0.913574f, 0.923340f, 0.932617f, 0.940918f, 0.949707f, 0.958008f, 0.966309f, 0.974609f,
+ 0.981934f, 0.990234f, 0.985352f, 0.965332f, 0.950195f, 0.937500f, 0.926270f, 0.915527f,
+ 0.015083f, 0.045929f, 0.075806f, 0.105408f, 0.135254f, 0.163208f, 0.191772f, 0.219238f,
+ 0.245239f, 0.271973f, 0.297363f, 0.321045f, 0.345947f, 0.369141f, 0.391846f, 0.414062f,
+ 0.435791f, 0.456787f, 0.477295f, 0.497314f, 0.516113f, 0.535645f, 0.554199f, 0.571777f,
+ 0.588867f, 0.606445f, 0.623047f, 0.639160f, 0.654785f, 0.669434f, 0.685059f, 0.699219f,
+ 0.713379f, 0.728027f, 0.741211f, 0.754883f, 0.767578f, 0.780273f, 0.792480f, 0.804688f,
+ 0.815918f, 0.826660f, 0.838867f, 0.850098f, 0.859863f, 0.871094f, 0.880859f, 0.891113f,
+ 0.900879f, 0.909180f, 0.919434f, 0.929688f, 0.937500f, 0.946289f, 0.954590f, 0.963379f,
+ 0.971191f, 0.979004f, 0.980469f, 0.961426f, 0.947266f, 0.935059f, 0.924316f, 0.914062f,
+ 0.013573f, 0.040955f, 0.068848f, 0.096313f, 0.123169f, 0.150635f, 0.175537f, 0.202026f,
+ 0.228271f, 0.251709f, 0.276367f, 0.300781f, 0.323730f, 0.347168f, 0.369385f, 0.390625f,
+ 0.412354f, 0.433594f, 0.454346f, 0.473145f, 0.491943f, 0.512207f, 0.529785f, 0.549316f,
+ 0.566406f, 0.583008f, 0.600586f, 0.616211f, 0.633301f, 0.648438f, 0.663574f, 0.679199f,
+ 0.693359f, 0.708008f, 0.721680f, 0.735840f, 0.748535f, 0.762207f, 0.773926f, 0.786621f,
+ 0.798340f, 0.811035f, 0.822754f, 0.833984f, 0.845215f, 0.855957f, 0.865723f, 0.876465f,
+ 0.886719f, 0.895508f, 0.906738f, 0.916016f, 0.925293f, 0.934570f, 0.943848f, 0.952148f,
+ 0.960449f, 0.969238f, 0.976074f, 0.958008f, 0.944336f, 0.932617f, 0.921875f, 0.912109f,
+ 0.012329f, 0.037201f, 0.062164f, 0.087646f, 0.112488f, 0.137451f, 0.161865f, 0.187134f,
+ 0.210938f, 0.234253f, 0.258301f, 0.281006f, 0.303467f, 0.325195f, 0.347656f, 0.368652f,
+ 0.389648f, 0.410400f, 0.430664f, 0.450928f, 0.470215f, 0.488770f, 0.507812f, 0.525391f,
+ 0.543457f, 0.560059f, 0.579102f, 0.593750f, 0.611816f, 0.627441f, 0.643066f, 0.658203f,
+ 0.672363f, 0.687500f, 0.702148f, 0.715820f, 0.729004f, 0.742676f, 0.755371f, 0.768066f,
+ 0.781738f, 0.792969f, 0.805176f, 0.816895f, 0.829102f, 0.839844f, 0.850586f, 0.861816f,
+ 0.872559f, 0.882812f, 0.893066f, 0.902832f, 0.912109f, 0.921875f, 0.930664f, 0.940430f,
+ 0.948242f, 0.958008f, 0.970703f, 0.953613f, 0.940430f, 0.929199f, 0.919434f, 0.910156f,
+ 0.010979f, 0.033752f, 0.056763f, 0.080139f, 0.103516f, 0.126221f, 0.149414f, 0.172485f,
+ 0.195435f, 0.218262f, 0.240356f, 0.261719f, 0.284180f, 0.306396f, 0.326416f, 0.347900f,
+ 0.368408f, 0.389160f, 0.408691f, 0.427979f, 0.447754f, 0.467041f, 0.484863f, 0.502441f,
+ 0.520996f, 0.538086f, 0.555664f, 0.573242f, 0.589355f, 0.604980f, 0.622559f, 0.637207f,
+ 0.652832f, 0.666992f, 0.680664f, 0.695801f, 0.710938f, 0.724121f, 0.737305f, 0.750977f,
+ 0.763672f, 0.776855f, 0.789062f, 0.799805f, 0.812012f, 0.824219f, 0.835449f, 0.846680f,
+ 0.857910f, 0.868164f, 0.878418f, 0.889160f, 0.898926f, 0.909180f, 0.917969f, 0.928223f,
+ 0.937012f, 0.946777f, 0.965820f, 0.949707f, 0.937012f, 0.926270f, 0.916504f, 0.907715f,
+ 0.009941f, 0.030746f, 0.051514f, 0.073181f, 0.094116f, 0.116028f, 0.137817f, 0.158691f,
+ 0.180664f, 0.202637f, 0.223511f, 0.244873f, 0.265869f, 0.285889f, 0.307129f, 0.327881f,
+ 0.347412f, 0.367188f, 0.387207f, 0.405762f, 0.425537f, 0.444092f, 0.462646f, 0.481201f,
+ 0.499756f, 0.516602f, 0.533691f, 0.550781f, 0.567383f, 0.583984f, 0.599609f, 0.616211f,
+ 0.630859f, 0.647461f, 0.661621f, 0.676758f, 0.689453f, 0.704590f, 0.718750f, 0.731934f,
+ 0.745117f, 0.757812f, 0.770996f, 0.783691f, 0.796387f, 0.807617f, 0.819824f, 0.831543f,
+ 0.842773f, 0.854004f, 0.864258f, 0.875488f, 0.885742f, 0.895508f, 0.905762f, 0.915527f,
+ 0.925781f, 0.934570f, 0.960449f, 0.945312f, 0.933594f, 0.922852f, 0.913574f, 0.905273f,
+ 0.009003f, 0.027756f, 0.046997f, 0.066711f, 0.085999f, 0.106506f, 0.127075f, 0.146973f,
+ 0.166992f, 0.187500f, 0.207886f, 0.228149f, 0.248169f, 0.268311f, 0.287842f, 0.307861f,
+ 0.327393f, 0.347656f, 0.365967f, 0.385010f, 0.404541f, 0.422363f, 0.441162f, 0.458740f,
+ 0.477783f, 0.495117f, 0.512207f, 0.529297f, 0.546387f, 0.562012f, 0.578613f, 0.595215f,
+ 0.610840f, 0.625977f, 0.641113f, 0.656738f, 0.670410f, 0.685059f, 0.699707f, 0.714355f,
+ 0.727051f, 0.741699f, 0.752441f, 0.767090f, 0.778809f, 0.791504f, 0.803711f, 0.815430f,
+ 0.827148f, 0.838867f, 0.850098f, 0.860840f, 0.872070f, 0.881836f, 0.893066f, 0.903809f,
+ 0.913574f, 0.923828f, 0.955078f, 0.940918f, 0.929199f, 0.919922f, 0.911133f, 0.902344f,
+ 0.008469f, 0.025375f, 0.043121f, 0.060944f, 0.079468f, 0.097961f, 0.116394f, 0.135620f,
+ 0.154541f, 0.174072f, 0.193115f, 0.212280f, 0.231689f, 0.250732f, 0.270264f, 0.289307f,
+ 0.307861f, 0.327148f, 0.345215f, 0.364990f, 0.382812f, 0.401123f, 0.418945f, 0.437012f,
+ 0.455811f, 0.472900f, 0.490234f, 0.507812f, 0.524414f, 0.541016f, 0.558105f, 0.573242f,
+ 0.590332f, 0.605469f, 0.620117f, 0.636230f, 0.651367f, 0.665039f, 0.679688f, 0.694336f,
+ 0.708496f, 0.722168f, 0.735840f, 0.750000f, 0.762695f, 0.774902f, 0.787598f, 0.798828f,
+ 0.811523f, 0.823730f, 0.834473f, 0.846191f, 0.857910f, 0.868652f, 0.879883f, 0.891113f,
+ 0.900391f, 0.911133f, 0.949219f, 0.937012f, 0.925293f, 0.916016f, 0.907227f, 0.899414f,
+ 0.007618f, 0.023178f, 0.039490f, 0.055542f, 0.072937f, 0.090271f, 0.107605f, 0.125122f,
+ 0.142944f, 0.160889f, 0.178955f, 0.197510f, 0.216553f, 0.234497f, 0.252686f, 0.271240f,
+ 0.289795f, 0.307861f, 0.326172f, 0.344238f, 0.362549f, 0.380859f, 0.398438f, 0.416504f,
+ 0.433838f, 0.452393f, 0.468994f, 0.485840f, 0.502930f, 0.519531f, 0.536133f, 0.553223f,
+ 0.569336f, 0.584473f, 0.599609f, 0.615234f, 0.631348f, 0.646484f, 0.659668f, 0.675293f,
+ 0.689941f, 0.703125f, 0.716797f, 0.730957f, 0.744141f, 0.756836f, 0.771484f, 0.782227f,
+ 0.795898f, 0.807617f, 0.819824f, 0.831543f, 0.843750f, 0.854980f, 0.866211f, 0.877441f,
+ 0.888672f, 0.898438f, 0.943359f, 0.931641f, 0.921387f, 0.912109f, 0.903809f, 0.896484f,
+ 0.007118f, 0.021255f, 0.035889f, 0.051514f, 0.066895f, 0.083191f, 0.098999f, 0.115540f,
+ 0.132324f, 0.149292f, 0.166260f, 0.183716f, 0.200928f, 0.218628f, 0.236084f, 0.253906f,
+ 0.272217f, 0.289795f, 0.307617f, 0.325439f, 0.342529f, 0.360596f, 0.378906f, 0.395996f,
+ 0.413330f, 0.430908f, 0.447510f, 0.465332f, 0.481934f, 0.497803f, 0.514648f, 0.531738f,
+ 0.547852f, 0.562988f, 0.579102f, 0.595215f, 0.610840f, 0.625977f, 0.641113f, 0.655273f,
+ 0.670410f, 0.685059f, 0.698730f, 0.712891f, 0.726074f, 0.739258f, 0.753418f, 0.766113f,
+ 0.779785f, 0.791992f, 0.803711f, 0.816406f, 0.829102f, 0.839844f, 0.852539f, 0.863770f,
+ 0.874512f, 0.886719f, 0.937988f, 0.926758f, 0.917480f, 0.908203f, 0.900391f, 0.893066f,
+ 0.006481f, 0.019775f, 0.032928f, 0.047272f, 0.061371f, 0.076233f, 0.091064f, 0.107117f,
+ 0.122559f, 0.138062f, 0.154663f, 0.170532f, 0.187256f, 0.204346f, 0.220947f, 0.237915f,
+ 0.254883f, 0.272217f, 0.289062f, 0.306641f, 0.323730f, 0.341064f, 0.358643f, 0.375732f,
+ 0.393555f, 0.410645f, 0.426758f, 0.444580f, 0.461182f, 0.477783f, 0.494141f, 0.510254f,
+ 0.526855f, 0.543457f, 0.559082f, 0.574219f, 0.590332f, 0.605957f, 0.621094f, 0.634766f,
+ 0.650879f, 0.665039f, 0.679688f, 0.694824f, 0.708008f, 0.722656f, 0.736816f, 0.749023f,
+ 0.762695f, 0.775391f, 0.788086f, 0.801270f, 0.813965f, 0.826172f, 0.838379f, 0.849121f,
+ 0.861328f, 0.873535f, 0.932129f, 0.921875f, 0.912598f, 0.904297f, 0.896484f, 0.889160f,
+ 0.005924f, 0.017899f, 0.030426f, 0.043427f, 0.056824f, 0.070435f, 0.084106f, 0.098755f,
+ 0.112976f, 0.128052f, 0.143311f, 0.158936f, 0.174072f, 0.189575f, 0.206421f, 0.222534f,
+ 0.238403f, 0.255615f, 0.271729f, 0.288818f, 0.305908f, 0.322021f, 0.339355f, 0.356445f,
+ 0.373291f, 0.390137f, 0.407227f, 0.423584f, 0.440430f, 0.457031f, 0.472900f, 0.489502f,
+ 0.506836f, 0.521973f, 0.538574f, 0.554688f, 0.570312f, 0.585449f, 0.601074f, 0.616211f,
+ 0.631348f, 0.646484f, 0.661621f, 0.675781f, 0.690430f, 0.704590f, 0.717285f, 0.731934f,
+ 0.746094f, 0.759277f, 0.771973f, 0.785156f, 0.798340f, 0.810547f, 0.823242f, 0.835938f,
+ 0.848145f, 0.860352f, 0.925781f, 0.916504f, 0.908203f, 0.900391f, 0.893066f, 0.886719f,
+ 0.005573f, 0.016693f, 0.028366f, 0.040192f, 0.052277f, 0.064880f, 0.078064f, 0.090698f,
+ 0.105042f, 0.118591f, 0.133057f, 0.147461f, 0.162231f, 0.177612f, 0.192383f, 0.207886f,
+ 0.223633f, 0.239502f, 0.255615f, 0.272217f, 0.288330f, 0.304932f, 0.320312f, 0.337646f,
+ 0.354004f, 0.369873f, 0.386719f, 0.403320f, 0.419922f, 0.437012f, 0.453369f, 0.469482f,
+ 0.485596f, 0.501465f, 0.517578f, 0.534180f, 0.549316f, 0.565918f, 0.581055f, 0.595703f,
+ 0.611328f, 0.626953f, 0.641602f, 0.657227f, 0.671387f, 0.686523f, 0.699707f, 0.714355f,
+ 0.729004f, 0.742676f, 0.756348f, 0.769043f, 0.782715f, 0.795410f, 0.809082f, 0.821289f,
+ 0.833984f, 0.846680f, 0.919434f, 0.911133f, 0.903320f, 0.895508f, 0.888672f, 0.882324f,
+ 0.005016f, 0.015396f, 0.026169f, 0.037231f, 0.048126f, 0.059937f, 0.071716f, 0.084167f,
+ 0.096680f, 0.109558f, 0.123169f, 0.136719f, 0.150269f, 0.164917f, 0.179077f, 0.194580f,
+ 0.208984f, 0.223877f, 0.239746f, 0.255127f, 0.270996f, 0.286377f, 0.302490f, 0.319336f,
+ 0.335205f, 0.351318f, 0.367432f, 0.383545f, 0.399902f, 0.415771f, 0.432373f, 0.448975f,
+ 0.465088f, 0.481934f, 0.497314f, 0.513672f, 0.529785f, 0.544434f, 0.561035f, 0.576660f,
+ 0.592285f, 0.607422f, 0.622559f, 0.638184f, 0.652344f, 0.667480f, 0.681641f, 0.696777f,
+ 0.711426f, 0.725586f, 0.738770f, 0.753418f, 0.766602f, 0.779297f, 0.793945f, 0.807129f,
+ 0.819824f, 0.833008f, 0.913086f, 0.906738f, 0.898438f, 0.890625f, 0.884277f, 0.878418f,
+ 0.004738f, 0.014053f, 0.024017f, 0.033752f, 0.044495f, 0.055328f, 0.066467f, 0.078064f,
+ 0.089661f, 0.102051f, 0.114258f, 0.126831f, 0.139771f, 0.153564f, 0.167114f, 0.181030f,
+ 0.195190f, 0.209839f, 0.224731f, 0.239136f, 0.253906f, 0.269531f, 0.285156f, 0.300293f,
+ 0.317139f, 0.332520f, 0.348145f, 0.364990f, 0.380859f, 0.396240f, 0.412109f, 0.428711f,
+ 0.444336f, 0.460938f, 0.477295f, 0.492676f, 0.509277f, 0.524902f, 0.540527f, 0.556641f,
+ 0.572266f, 0.587402f, 0.604004f, 0.618164f, 0.633301f, 0.648438f, 0.664062f, 0.678223f,
+ 0.693359f, 0.708008f, 0.722656f, 0.736328f, 0.750000f, 0.764160f, 0.777832f, 0.791016f,
+ 0.805176f, 0.817871f, 0.907227f, 0.900879f, 0.894043f, 0.886719f, 0.880371f, 0.874512f,
+ 0.004105f, 0.012741f, 0.022491f, 0.031769f, 0.041107f, 0.051208f, 0.061249f, 0.071777f,
+ 0.083069f, 0.093811f, 0.105896f, 0.117554f, 0.129761f, 0.142212f, 0.155273f, 0.168579f,
+ 0.182251f, 0.196167f, 0.210449f, 0.223755f, 0.238525f, 0.253662f, 0.268799f, 0.283447f,
+ 0.298828f, 0.313965f, 0.329834f, 0.344971f, 0.361328f, 0.376953f, 0.393066f, 0.408691f,
+ 0.424561f, 0.441406f, 0.457031f, 0.472656f, 0.488770f, 0.504883f, 0.520996f, 0.536133f,
+ 0.551758f, 0.567871f, 0.583496f, 0.599121f, 0.614258f, 0.629395f, 0.645996f, 0.660156f,
+ 0.675781f, 0.689453f, 0.704102f, 0.719727f, 0.733398f, 0.747559f, 0.761719f, 0.776367f,
+ 0.789062f, 0.803223f, 0.899902f, 0.895020f, 0.888184f, 0.881836f, 0.875488f, 0.870117f,
+ 0.003925f, 0.011978f, 0.020538f, 0.028763f, 0.038269f, 0.047028f, 0.056732f, 0.066223f,
+ 0.076904f, 0.086731f, 0.097900f, 0.109314f, 0.120483f, 0.132324f, 0.144653f, 0.156982f,
+ 0.169678f, 0.183228f, 0.196289f, 0.209961f, 0.223633f, 0.237427f, 0.251953f, 0.266602f,
+ 0.281982f, 0.296875f, 0.312012f, 0.326660f, 0.342041f, 0.357910f, 0.373779f, 0.389404f,
+ 0.404785f, 0.420166f, 0.436768f, 0.452637f, 0.468506f, 0.484863f, 0.500977f, 0.516602f,
+ 0.531738f, 0.546875f, 0.563965f, 0.579102f, 0.595215f, 0.610840f, 0.625977f, 0.641602f,
+ 0.657227f, 0.671387f, 0.687500f, 0.702148f, 0.716309f, 0.731445f, 0.746094f, 0.760742f,
+ 0.774414f, 0.788086f, 0.893066f, 0.889648f, 0.882812f, 0.876953f, 0.870605f, 0.865723f,
+ 0.003704f, 0.011169f, 0.019165f, 0.026550f, 0.035339f, 0.043488f, 0.052277f, 0.061066f,
+ 0.071045f, 0.080933f, 0.090576f, 0.101074f, 0.111877f, 0.122925f, 0.134277f, 0.146118f,
+ 0.157837f, 0.170288f, 0.183105f, 0.195557f, 0.209351f, 0.222900f, 0.236328f, 0.250732f,
+ 0.264893f, 0.279297f, 0.294189f, 0.308838f, 0.323975f, 0.339844f, 0.354736f, 0.370117f,
+ 0.385986f, 0.401367f, 0.416504f, 0.432861f, 0.448486f, 0.463867f, 0.480469f, 0.497070f,
+ 0.511719f, 0.527832f, 0.544434f, 0.559570f, 0.575684f, 0.591797f, 0.606934f, 0.623047f,
+ 0.638184f, 0.654297f, 0.668945f, 0.684570f, 0.699219f, 0.714355f, 0.729492f, 0.744629f,
+ 0.758789f, 0.773926f, 0.886230f, 0.883301f, 0.877441f, 0.871582f, 0.866211f, 0.860840f,
+ 0.003500f, 0.010292f, 0.017395f, 0.024963f, 0.032440f, 0.040344f, 0.048462f, 0.057098f,
+ 0.065063f, 0.074646f, 0.083679f, 0.093445f, 0.103882f, 0.114136f, 0.124451f, 0.135498f,
+ 0.146606f, 0.158447f, 0.170410f, 0.182739f, 0.195435f, 0.208008f, 0.221558f, 0.234863f,
+ 0.248657f, 0.262695f, 0.276855f, 0.291748f, 0.306152f, 0.320801f, 0.335693f, 0.350830f,
+ 0.365967f, 0.382080f, 0.396973f, 0.413330f, 0.429199f, 0.444336f, 0.459473f, 0.476074f,
+ 0.492188f, 0.507812f, 0.524414f, 0.540039f, 0.555664f, 0.571777f, 0.586914f, 0.604004f,
+ 0.619629f, 0.635742f, 0.650391f, 0.666504f, 0.682129f, 0.697754f, 0.712891f, 0.728027f,
+ 0.743164f, 0.758301f, 0.878906f, 0.877441f, 0.871582f, 0.866699f, 0.860840f, 0.856445f,
+ 0.003084f, 0.009697f, 0.016403f, 0.022659f, 0.029892f, 0.037354f, 0.044281f, 0.052338f,
+ 0.060516f, 0.068970f, 0.077515f, 0.086243f, 0.096069f, 0.105713f, 0.115356f, 0.125610f,
+ 0.136353f, 0.147339f, 0.158081f, 0.170410f, 0.181396f, 0.194458f, 0.207275f, 0.219482f,
+ 0.232910f, 0.246704f, 0.260010f, 0.274170f, 0.288330f, 0.302979f, 0.317383f, 0.332764f,
+ 0.347656f, 0.363037f, 0.378174f, 0.392578f, 0.408936f, 0.424316f, 0.440430f, 0.456299f,
+ 0.472656f, 0.488525f, 0.503906f, 0.519531f, 0.535645f, 0.552734f, 0.568359f, 0.584961f,
+ 0.600586f, 0.616699f, 0.633301f, 0.648438f, 0.663574f, 0.679199f, 0.694824f, 0.710938f,
+ 0.726074f, 0.742188f, 0.872559f, 0.870605f, 0.865723f, 0.860840f, 0.855957f, 0.851074f,
+ 0.002913f, 0.008781f, 0.014938f, 0.021759f, 0.027878f, 0.034393f, 0.041412f, 0.048737f,
+ 0.055969f, 0.063599f, 0.072021f, 0.080200f, 0.088928f, 0.097839f, 0.106934f, 0.116150f,
+ 0.126587f, 0.136353f, 0.147095f, 0.157715f, 0.169189f, 0.181519f, 0.193481f, 0.205933f,
+ 0.217773f, 0.231323f, 0.244629f, 0.257812f, 0.271240f, 0.285400f, 0.299561f, 0.314453f,
+ 0.329590f, 0.343506f, 0.358887f, 0.373779f, 0.389648f, 0.405029f, 0.420410f, 0.437012f,
+ 0.452393f, 0.468262f, 0.484375f, 0.500000f, 0.516113f, 0.532227f, 0.548828f, 0.564941f,
+ 0.581055f, 0.597168f, 0.612793f, 0.629883f, 0.645508f, 0.662109f, 0.678223f, 0.694336f,
+ 0.709473f, 0.726074f, 0.863770f, 0.864258f, 0.859863f, 0.854980f, 0.850586f, 0.846191f,
+ 0.002815f, 0.008194f, 0.013954f, 0.019653f, 0.025696f, 0.031982f, 0.038177f, 0.044830f,
+ 0.051819f, 0.058502f, 0.066162f, 0.073792f, 0.082031f, 0.090393f, 0.098999f, 0.107605f,
+ 0.117493f, 0.126709f, 0.137207f, 0.146729f, 0.157593f, 0.168579f, 0.179810f, 0.191772f,
+ 0.203369f, 0.215820f, 0.228882f, 0.241455f, 0.254395f, 0.268311f, 0.282227f, 0.296631f,
+ 0.310303f, 0.325439f, 0.339844f, 0.354736f, 0.370361f, 0.385742f, 0.400879f, 0.416504f,
+ 0.432617f, 0.448486f, 0.464355f, 0.479980f, 0.496094f, 0.513184f, 0.528809f, 0.545410f,
+ 0.561035f, 0.578613f, 0.594727f, 0.611328f, 0.626953f, 0.643555f, 0.660156f, 0.676270f,
+ 0.693359f, 0.709473f, 0.856445f, 0.858398f, 0.854492f, 0.849121f, 0.845215f, 0.841309f,
+ 0.002583f, 0.007492f, 0.012878f, 0.018417f, 0.023941f, 0.029495f, 0.035339f, 0.041779f,
+ 0.047577f, 0.054047f, 0.061523f, 0.068787f, 0.075562f, 0.083313f, 0.091858f, 0.099792f,
+ 0.108521f, 0.117615f, 0.126709f, 0.136108f, 0.146851f, 0.156860f, 0.166992f, 0.178345f,
+ 0.189819f, 0.202148f, 0.213623f, 0.225830f, 0.238892f, 0.252197f, 0.265137f, 0.278809f,
+ 0.292480f, 0.306885f, 0.321045f, 0.336914f, 0.350830f, 0.366943f, 0.381348f, 0.396240f,
+ 0.412354f, 0.428223f, 0.444336f, 0.460449f, 0.476318f, 0.493408f, 0.509277f, 0.525879f,
+ 0.542480f, 0.559082f, 0.574707f, 0.591797f, 0.608398f, 0.625488f, 0.642090f, 0.659180f,
+ 0.675781f, 0.691406f, 0.848145f, 0.851562f, 0.848145f, 0.843750f, 0.838867f, 0.835449f,
+ 0.002512f, 0.007374f, 0.012115f, 0.016983f, 0.022064f, 0.027359f, 0.032715f, 0.038147f,
+ 0.044373f, 0.050354f, 0.056641f, 0.063293f, 0.070190f, 0.077026f, 0.084717f, 0.092041f,
+ 0.100342f, 0.108398f, 0.117554f, 0.126221f, 0.135742f, 0.145142f, 0.155151f, 0.165771f,
+ 0.176758f, 0.187988f, 0.199341f, 0.210815f, 0.223389f, 0.236206f, 0.249023f, 0.261719f,
+ 0.275879f, 0.289062f, 0.303467f, 0.317627f, 0.332520f, 0.347412f, 0.361816f, 0.377197f,
+ 0.393066f, 0.407959f, 0.424072f, 0.440186f, 0.457031f, 0.473145f, 0.489502f, 0.505859f,
+ 0.522461f, 0.540039f, 0.555664f, 0.572754f, 0.589844f, 0.606445f, 0.623535f, 0.640625f,
+ 0.658203f, 0.675781f, 0.840820f, 0.843750f, 0.841309f, 0.836914f, 0.833984f, 0.830566f,
+ 0.002369f, 0.006668f, 0.011093f, 0.015778f, 0.020523f, 0.025223f, 0.030701f, 0.035339f,
+ 0.040710f, 0.046600f, 0.051971f, 0.058075f, 0.064819f, 0.071228f, 0.077942f, 0.085205f,
+ 0.092224f, 0.100464f, 0.108398f, 0.116882f, 0.125610f, 0.134155f, 0.143555f, 0.153564f,
+ 0.164062f, 0.174316f, 0.185303f, 0.196899f, 0.208496f, 0.220093f, 0.232666f, 0.245239f,
+ 0.258057f, 0.271729f, 0.285645f, 0.299561f, 0.313721f, 0.328613f, 0.342773f, 0.358154f,
+ 0.373535f, 0.388916f, 0.405518f, 0.419922f, 0.437012f, 0.453125f, 0.469238f, 0.486328f,
+ 0.502930f, 0.519531f, 0.536133f, 0.553223f, 0.571289f, 0.588379f, 0.605469f, 0.623047f,
+ 0.640137f, 0.656250f, 0.833008f, 0.837402f, 0.834473f, 0.831055f, 0.827637f, 0.824219f,
+ 0.002188f, 0.006027f, 0.010582f, 0.014297f, 0.018921f, 0.023270f, 0.028183f, 0.032593f,
+ 0.037781f, 0.042999f, 0.048584f, 0.053650f, 0.059601f, 0.065369f, 0.071899f, 0.078369f,
+ 0.085449f, 0.092407f, 0.099609f, 0.107788f, 0.115601f, 0.124451f, 0.133301f, 0.142212f,
+ 0.151978f, 0.161865f, 0.172363f, 0.182617f, 0.193970f, 0.205566f, 0.217407f, 0.229858f,
+ 0.241943f, 0.254639f, 0.268311f, 0.281494f, 0.295654f, 0.310059f, 0.324219f, 0.339600f,
+ 0.353760f, 0.369629f, 0.385010f, 0.400879f, 0.417725f, 0.433594f, 0.449219f, 0.465820f,
+ 0.482910f, 0.499512f, 0.517090f, 0.534180f, 0.551270f, 0.568848f, 0.586426f, 0.604004f,
+ 0.622559f, 0.639160f, 0.824219f, 0.830078f, 0.827637f, 0.824707f, 0.821777f, 0.818359f,
+ 0.002098f, 0.005634f, 0.009354f, 0.013557f, 0.017685f, 0.021576f, 0.025604f, 0.030380f,
+ 0.034943f, 0.039429f, 0.044281f, 0.049255f, 0.055023f, 0.060577f, 0.066101f, 0.072144f,
+ 0.078491f, 0.085083f, 0.091858f, 0.098999f, 0.106873f, 0.114502f, 0.122498f, 0.131592f,
+ 0.140137f, 0.149536f, 0.159424f, 0.169556f, 0.180054f, 0.191162f, 0.202026f, 0.213989f,
+ 0.226318f, 0.239136f, 0.250977f, 0.264648f, 0.278320f, 0.291748f, 0.305908f, 0.320557f,
+ 0.334961f, 0.350342f, 0.365479f, 0.381592f, 0.397461f, 0.413818f, 0.429199f, 0.446289f,
+ 0.462891f, 0.479736f, 0.496338f, 0.514160f, 0.530762f, 0.548828f, 0.566406f, 0.584473f,
+ 0.602539f, 0.621582f, 0.815918f, 0.823730f, 0.821289f, 0.817871f, 0.815430f, 0.812500f,
+ 0.001772f, 0.005249f, 0.008995f, 0.012260f, 0.016251f, 0.020020f, 0.024216f, 0.027603f,
+ 0.032196f, 0.036377f, 0.041199f, 0.045410f, 0.050110f, 0.055603f, 0.061005f, 0.066406f,
+ 0.072327f, 0.077820f, 0.084290f, 0.090942f, 0.098083f, 0.105164f, 0.113037f, 0.120789f,
+ 0.129272f, 0.138062f, 0.147339f, 0.156982f, 0.166626f, 0.176758f, 0.187866f, 0.199097f,
+ 0.210449f, 0.222412f, 0.234985f, 0.247559f, 0.260742f, 0.273682f, 0.287598f, 0.302002f,
+ 0.316650f, 0.331299f, 0.346191f, 0.362061f, 0.377686f, 0.393066f, 0.409668f, 0.426514f,
+ 0.443115f, 0.459717f, 0.476807f, 0.494629f, 0.511230f, 0.529785f, 0.547852f, 0.565430f,
+ 0.583984f, 0.602539f, 0.806152f, 0.814453f, 0.813965f, 0.811035f, 0.809082f, 0.806641f,
+ 0.001631f, 0.005131f, 0.008186f, 0.011673f, 0.014938f, 0.018463f, 0.021957f, 0.025635f,
+ 0.029083f, 0.033325f, 0.037445f, 0.041840f, 0.046478f, 0.050751f, 0.055634f, 0.060760f,
+ 0.065979f, 0.071472f, 0.077515f, 0.083801f, 0.090027f, 0.096802f, 0.104065f, 0.110840f,
+ 0.119080f, 0.127197f, 0.135498f, 0.144775f, 0.153931f, 0.163574f, 0.173462f, 0.184570f,
+ 0.195312f, 0.207153f, 0.218506f, 0.230591f, 0.243652f, 0.256348f, 0.270020f, 0.283691f,
+ 0.297852f, 0.312744f, 0.326904f, 0.342529f, 0.357910f, 0.373535f, 0.389404f, 0.406494f,
+ 0.421875f, 0.439941f, 0.457275f, 0.474365f, 0.492432f, 0.509766f, 0.527832f, 0.546875f,
+ 0.564941f, 0.584473f, 0.797852f, 0.807129f, 0.807129f, 0.804199f, 0.801758f, 0.799316f,
+ 0.001632f, 0.004704f, 0.007912f, 0.010788f, 0.013870f, 0.017105f, 0.020187f, 0.023483f,
+ 0.026932f, 0.030563f, 0.034332f, 0.038086f, 0.042694f, 0.046631f, 0.050995f, 0.055725f,
+ 0.060486f, 0.065674f, 0.070862f, 0.076721f, 0.082825f, 0.088623f, 0.094910f, 0.102112f,
+ 0.109070f, 0.116516f, 0.124695f, 0.133057f, 0.141968f, 0.151001f, 0.160522f, 0.170776f,
+ 0.181030f, 0.191650f, 0.202881f, 0.214722f, 0.227417f, 0.239624f, 0.252686f, 0.265625f,
+ 0.279785f, 0.293213f, 0.308350f, 0.323242f, 0.338867f, 0.354248f, 0.370117f, 0.386475f,
+ 0.403076f, 0.420410f, 0.437012f, 0.454102f, 0.471924f, 0.490234f, 0.508789f, 0.526855f,
+ 0.545410f, 0.564453f, 0.788086f, 0.799316f, 0.798828f, 0.797852f, 0.794434f, 0.791992f,
+ 0.001594f, 0.004177f, 0.007122f, 0.010201f, 0.012344f, 0.015839f, 0.018372f, 0.021683f,
+ 0.024857f, 0.028534f, 0.031464f, 0.035034f, 0.038879f, 0.042572f, 0.046295f, 0.051056f,
+ 0.055389f, 0.059723f, 0.064697f, 0.069763f, 0.075073f, 0.080750f, 0.087219f, 0.093445f,
+ 0.099548f, 0.107056f, 0.114136f, 0.121887f, 0.130249f, 0.138794f, 0.147217f, 0.157104f,
+ 0.166748f, 0.177124f, 0.187988f, 0.199097f, 0.210693f, 0.222778f, 0.235352f, 0.248169f,
+ 0.261719f, 0.275635f, 0.289062f, 0.303955f, 0.319336f, 0.334717f, 0.350098f, 0.365479f,
+ 0.382324f, 0.398926f, 0.416016f, 0.433594f, 0.451904f, 0.469238f, 0.487549f, 0.506348f,
+ 0.525391f, 0.544922f, 0.779297f, 0.791504f, 0.791504f, 0.789551f, 0.788086f, 0.786133f,
+ 0.001365f, 0.004173f, 0.006222f, 0.008842f, 0.011703f, 0.014366f, 0.017242f, 0.020218f,
+ 0.022903f, 0.025787f, 0.028824f, 0.032227f, 0.035522f, 0.038818f, 0.042511f, 0.046326f,
+ 0.050507f, 0.054657f, 0.058594f, 0.063660f, 0.068359f, 0.073914f, 0.078918f, 0.085083f,
+ 0.091125f, 0.097534f, 0.104126f, 0.111511f, 0.118896f, 0.126831f, 0.135742f, 0.144043f,
+ 0.153564f, 0.163330f, 0.173462f, 0.184082f, 0.195068f, 0.206787f, 0.218628f, 0.231079f,
+ 0.243896f, 0.257080f, 0.270996f, 0.285645f, 0.300049f, 0.314941f, 0.330322f, 0.346191f,
+ 0.362305f, 0.379395f, 0.395508f, 0.412842f, 0.431641f, 0.448975f, 0.468262f, 0.487549f,
+ 0.505371f, 0.525391f, 0.769531f, 0.783691f, 0.783691f, 0.782715f, 0.781250f, 0.778809f,
+ 0.001230f, 0.003925f, 0.006268f, 0.008659f, 0.010796f, 0.013145f, 0.015617f, 0.018234f,
+ 0.021133f, 0.023682f, 0.026215f, 0.029251f, 0.032349f, 0.035400f, 0.038696f, 0.042206f,
+ 0.045807f, 0.049377f, 0.053925f, 0.057953f, 0.062500f, 0.067078f, 0.071777f, 0.077271f,
+ 0.082703f, 0.088806f, 0.094910f, 0.101379f, 0.109192f, 0.115967f, 0.123779f, 0.131470f,
+ 0.140259f, 0.149536f, 0.159302f, 0.169312f, 0.180054f, 0.190674f, 0.202515f, 0.214722f,
+ 0.226562f, 0.239624f, 0.253174f, 0.266602f, 0.281738f, 0.295898f, 0.311035f, 0.326904f,
+ 0.342529f, 0.359131f, 0.375732f, 0.393066f, 0.410400f, 0.428467f, 0.447510f, 0.466064f,
+ 0.485596f, 0.504883f, 0.759277f, 0.774902f, 0.775879f, 0.774902f, 0.773438f, 0.771973f,
+ 0.001031f, 0.003601f, 0.005604f, 0.007858f, 0.009880f, 0.012146f, 0.014549f, 0.016998f,
+ 0.019043f, 0.021362f, 0.024475f, 0.026566f, 0.029358f, 0.032196f, 0.035248f, 0.038391f,
+ 0.041656f, 0.045044f, 0.048553f, 0.052582f, 0.056213f, 0.060669f, 0.065186f, 0.070068f,
+ 0.074768f, 0.080322f, 0.086060f, 0.092102f, 0.098877f, 0.105408f, 0.112366f, 0.120239f,
+ 0.128540f, 0.136597f, 0.145874f, 0.155396f, 0.165283f, 0.175537f, 0.186401f, 0.198120f,
+ 0.210083f, 0.222534f, 0.235229f, 0.248657f, 0.262451f, 0.277344f, 0.291504f, 0.307617f,
+ 0.322998f, 0.339111f, 0.354980f, 0.372559f, 0.390625f, 0.408936f, 0.426758f, 0.445312f,
+ 0.466064f, 0.485840f, 0.749512f, 0.765137f, 0.767578f, 0.767090f, 0.765137f, 0.764648f,
+ 0.001161f, 0.003078f, 0.005310f, 0.007282f, 0.009201f, 0.011330f, 0.013214f, 0.015404f,
+ 0.017273f, 0.019409f, 0.021988f, 0.024078f, 0.026550f, 0.029358f, 0.032043f, 0.034454f,
+ 0.037415f, 0.040710f, 0.043854f, 0.047272f, 0.050659f, 0.054840f, 0.058777f, 0.063293f,
+ 0.067566f, 0.072449f, 0.077759f, 0.083069f, 0.088928f, 0.095886f, 0.102478f, 0.109070f,
+ 0.116760f, 0.124390f, 0.132935f, 0.141479f, 0.151123f, 0.161011f, 0.171143f, 0.182007f,
+ 0.193726f, 0.205688f, 0.218018f, 0.230835f, 0.244507f, 0.258789f, 0.272949f, 0.287109f,
+ 0.303467f, 0.319336f, 0.335449f, 0.352539f, 0.369873f, 0.387939f, 0.406250f, 0.425049f,
+ 0.444824f, 0.464844f, 0.739258f, 0.756348f, 0.758789f, 0.758789f, 0.757324f, 0.756836f,
+ 0.001004f, 0.002939f, 0.005005f, 0.006779f, 0.008453f, 0.010323f, 0.012177f, 0.013870f,
+ 0.016052f, 0.018051f, 0.019638f, 0.022141f, 0.023956f, 0.026413f, 0.028870f, 0.031281f,
+ 0.033661f, 0.036591f, 0.039429f, 0.042542f, 0.045776f, 0.049011f, 0.053009f, 0.056885f,
+ 0.061035f, 0.065186f, 0.069885f, 0.075134f, 0.080505f, 0.085999f, 0.091858f, 0.098633f,
+ 0.105591f, 0.112732f, 0.120667f, 0.128662f, 0.137573f, 0.146729f, 0.156372f, 0.166748f,
+ 0.177490f, 0.189331f, 0.201294f, 0.213501f, 0.226807f, 0.239746f, 0.254150f, 0.268555f,
+ 0.283936f, 0.298828f, 0.316162f, 0.332275f, 0.349609f, 0.367432f, 0.385498f, 0.404053f,
+ 0.423828f, 0.443848f, 0.728516f, 0.747559f, 0.750488f, 0.750488f, 0.749512f, 0.748047f,
+ 0.000970f, 0.002523f, 0.004665f, 0.006203f, 0.007759f, 0.009491f, 0.011070f, 0.012802f,
+ 0.014336f, 0.016266f, 0.017944f, 0.019852f, 0.021805f, 0.023911f, 0.025818f, 0.028137f,
+ 0.030579f, 0.032837f, 0.035248f, 0.038055f, 0.041046f, 0.044189f, 0.047333f, 0.050842f,
+ 0.054504f, 0.058502f, 0.062866f, 0.067383f, 0.071960f, 0.077393f, 0.082642f, 0.088928f,
+ 0.095093f, 0.101685f, 0.108765f, 0.116272f, 0.124451f, 0.133423f, 0.142212f, 0.152100f,
+ 0.162354f, 0.172729f, 0.184692f, 0.196411f, 0.209106f, 0.221802f, 0.235718f, 0.250000f,
+ 0.265137f, 0.280029f, 0.296143f, 0.312012f, 0.329346f, 0.346924f, 0.364990f, 0.384277f,
+ 0.403564f, 0.423340f, 0.718262f, 0.738770f, 0.741211f, 0.742188f, 0.741211f, 0.740234f,
+ 0.000785f, 0.002600f, 0.004028f, 0.005390f, 0.007275f, 0.008774f, 0.010124f, 0.011620f,
+ 0.013306f, 0.014427f, 0.015991f, 0.017838f, 0.019577f, 0.021469f, 0.023254f, 0.024902f,
+ 0.027115f, 0.029190f, 0.031677f, 0.034088f, 0.036682f, 0.039307f, 0.042175f, 0.045410f,
+ 0.048553f, 0.052002f, 0.055908f, 0.060028f, 0.064270f, 0.068909f, 0.074097f, 0.079163f,
+ 0.085022f, 0.091309f, 0.097473f, 0.104797f, 0.112183f, 0.120239f, 0.128662f, 0.137451f,
+ 0.146973f, 0.157471f, 0.168213f, 0.179810f, 0.191650f, 0.204468f, 0.217529f, 0.231201f,
+ 0.245605f, 0.260254f, 0.275879f, 0.292236f, 0.308838f, 0.326416f, 0.344238f, 0.363037f,
+ 0.382080f, 0.403076f, 0.707031f, 0.729980f, 0.732422f, 0.733398f, 0.733398f, 0.732910f,
+ 0.000775f, 0.002190f, 0.003696f, 0.005081f, 0.006397f, 0.007858f, 0.009239f, 0.010323f,
+ 0.011803f, 0.012978f, 0.014328f, 0.015915f, 0.017349f, 0.019058f, 0.020630f, 0.022339f,
+ 0.024445f, 0.025909f, 0.028275f, 0.030151f, 0.032532f, 0.035065f, 0.037476f, 0.040283f,
+ 0.042969f, 0.046448f, 0.049469f, 0.053314f, 0.056976f, 0.061371f, 0.065613f, 0.070435f,
+ 0.075623f, 0.081360f, 0.087341f, 0.093628f, 0.100220f, 0.107788f, 0.115845f, 0.123901f,
+ 0.133057f, 0.142456f, 0.152832f, 0.163574f, 0.174561f, 0.187012f, 0.199463f, 0.212646f,
+ 0.226562f, 0.241455f, 0.256836f, 0.272705f, 0.288818f, 0.305664f, 0.323486f, 0.341797f,
+ 0.362305f, 0.382080f, 0.695312f, 0.719238f, 0.722656f, 0.724121f, 0.724121f, 0.723633f,
+ 0.000906f, 0.002022f, 0.003521f, 0.004963f, 0.005756f, 0.006847f, 0.008446f, 0.009392f,
+ 0.010437f, 0.012039f, 0.012863f, 0.014343f, 0.015457f, 0.016876f, 0.018295f, 0.019730f,
+ 0.021484f, 0.023102f, 0.024689f, 0.026581f, 0.028717f, 0.030945f, 0.032928f, 0.035370f,
+ 0.037872f, 0.040894f, 0.043915f, 0.047028f, 0.050415f, 0.054169f, 0.058167f, 0.062286f,
+ 0.067078f, 0.071960f, 0.077209f, 0.082947f, 0.089417f, 0.096008f, 0.103271f, 0.110718f,
+ 0.119324f, 0.128052f, 0.137817f, 0.147705f, 0.158691f, 0.169922f, 0.181519f, 0.195435f,
+ 0.208496f, 0.222534f, 0.237305f, 0.252441f, 0.268799f, 0.285645f, 0.302979f, 0.322266f,
+ 0.340332f, 0.360840f, 0.683594f, 0.708984f, 0.714355f, 0.715332f, 0.715820f, 0.715332f,
+ 0.000700f, 0.002043f, 0.003139f, 0.004219f, 0.005417f, 0.006477f, 0.007442f, 0.008415f,
+ 0.009499f, 0.010475f, 0.011497f, 0.012619f, 0.013824f, 0.014969f, 0.016190f, 0.017639f,
+ 0.018799f, 0.020386f, 0.021896f, 0.023560f, 0.025131f, 0.027176f, 0.028900f, 0.031067f,
+ 0.033295f, 0.035919f, 0.038239f, 0.041229f, 0.044373f, 0.047394f, 0.050934f, 0.054871f,
+ 0.058838f, 0.063293f, 0.068115f, 0.073303f, 0.078857f, 0.084839f, 0.091309f, 0.098328f,
+ 0.106079f, 0.114136f, 0.123230f, 0.132690f, 0.143066f, 0.153442f, 0.165161f, 0.177368f,
+ 0.190186f, 0.203979f, 0.218262f, 0.232910f, 0.248901f, 0.265381f, 0.282227f, 0.301025f,
+ 0.319580f, 0.339355f, 0.672852f, 0.699707f, 0.704590f, 0.706055f, 0.706543f, 0.706055f,
+ 0.000762f, 0.001804f, 0.002762f, 0.003914f, 0.004791f, 0.005764f, 0.006542f, 0.007622f,
+ 0.008606f, 0.009232f, 0.010178f, 0.011093f, 0.012108f, 0.013191f, 0.014412f, 0.015289f,
+ 0.016510f, 0.017731f, 0.019119f, 0.020615f, 0.022049f, 0.023483f, 0.025345f, 0.027100f,
+ 0.028885f, 0.031067f, 0.033417f, 0.035797f, 0.038422f, 0.041382f, 0.044495f, 0.047638f,
+ 0.051178f, 0.055267f, 0.059387f, 0.064026f, 0.069092f, 0.074585f, 0.080566f, 0.087097f,
+ 0.093811f, 0.101624f, 0.109619f, 0.117798f, 0.127319f, 0.137817f, 0.148682f, 0.160278f,
+ 0.172607f, 0.185669f, 0.199097f, 0.214233f, 0.229492f, 0.245850f, 0.261963f, 0.280273f,
+ 0.299316f, 0.319580f, 0.660645f, 0.689453f, 0.694824f, 0.696777f, 0.697266f, 0.697266f,
+ 0.000499f, 0.001527f, 0.002565f, 0.003622f, 0.004429f, 0.005138f, 0.005955f, 0.006691f,
+ 0.007317f, 0.008156f, 0.008949f, 0.009903f, 0.010635f, 0.011452f, 0.012512f, 0.013451f,
+ 0.014503f, 0.015610f, 0.016632f, 0.017746f, 0.019073f, 0.020355f, 0.021957f, 0.023453f,
+ 0.025208f, 0.026932f, 0.028732f, 0.030945f, 0.033142f, 0.035614f, 0.038300f, 0.041199f,
+ 0.044464f, 0.047760f, 0.051514f, 0.055573f, 0.059998f, 0.064819f, 0.070312f, 0.075867f,
+ 0.082275f, 0.088806f, 0.096436f, 0.104797f, 0.113342f, 0.122559f, 0.132568f, 0.143799f,
+ 0.155396f, 0.167725f, 0.181274f, 0.195068f, 0.209961f, 0.225708f, 0.242310f, 0.259766f,
+ 0.277832f, 0.297363f, 0.648926f, 0.678711f, 0.685059f, 0.687500f, 0.687500f, 0.687988f,
+ 0.000653f, 0.001627f, 0.002562f, 0.003166f, 0.003872f, 0.004562f, 0.005287f, 0.005905f,
+ 0.006557f, 0.007309f, 0.007835f, 0.008621f, 0.009140f, 0.010109f, 0.010773f, 0.011627f,
+ 0.012428f, 0.013351f, 0.014488f, 0.015472f, 0.016479f, 0.017578f, 0.018845f, 0.020157f,
+ 0.021591f, 0.023132f, 0.024765f, 0.026337f, 0.028473f, 0.030594f, 0.032867f, 0.035309f,
+ 0.037933f, 0.041107f, 0.044403f, 0.047852f, 0.051666f, 0.055756f, 0.060455f, 0.065552f,
+ 0.070740f, 0.077454f, 0.083862f, 0.091125f, 0.099304f, 0.107971f, 0.117859f, 0.127808f,
+ 0.139038f, 0.150757f, 0.163574f, 0.176880f, 0.191162f, 0.206665f, 0.222656f, 0.239258f,
+ 0.257568f, 0.277100f, 0.636230f, 0.667969f, 0.675293f, 0.677734f, 0.678223f, 0.678711f,
+ 0.000393f, 0.001375f, 0.002174f, 0.002773f, 0.003334f, 0.004070f, 0.004692f, 0.005047f,
+ 0.005672f, 0.006298f, 0.006893f, 0.007454f, 0.007957f, 0.008636f, 0.009171f, 0.010002f,
+ 0.010674f, 0.011574f, 0.012451f, 0.013145f, 0.014091f, 0.014893f, 0.016083f, 0.017151f,
+ 0.018402f, 0.019714f, 0.021042f, 0.022415f, 0.024155f, 0.026108f, 0.027786f, 0.030212f,
+ 0.032379f, 0.034698f, 0.037415f, 0.040436f, 0.043793f, 0.047455f, 0.051727f, 0.056030f,
+ 0.061218f, 0.066284f, 0.072571f, 0.079041f, 0.086121f, 0.094299f, 0.102844f, 0.112305f,
+ 0.122925f, 0.134033f, 0.145752f, 0.158569f, 0.172729f, 0.187378f, 0.203003f, 0.219238f,
+ 0.237671f, 0.255859f, 0.624023f, 0.657227f, 0.664062f, 0.666992f, 0.668457f, 0.668457f,
+ 0.000379f, 0.001404f, 0.001893f, 0.002403f, 0.002840f, 0.003458f, 0.004021f, 0.004459f,
+ 0.004894f, 0.005527f, 0.005844f, 0.006256f, 0.006866f, 0.007423f, 0.007957f, 0.008476f,
+ 0.009155f, 0.009735f, 0.010422f, 0.011078f, 0.011925f, 0.012787f, 0.013458f, 0.014526f,
+ 0.015541f, 0.016632f, 0.017838f, 0.019028f, 0.020248f, 0.021851f, 0.023514f, 0.024979f,
+ 0.027054f, 0.029236f, 0.031555f, 0.034180f, 0.036713f, 0.040375f, 0.043854f, 0.047607f,
+ 0.051727f, 0.056549f, 0.061768f, 0.067627f, 0.073792f, 0.081116f, 0.089111f, 0.097595f,
+ 0.107056f, 0.117371f, 0.128906f, 0.141113f, 0.154053f, 0.168579f, 0.183960f, 0.199585f,
+ 0.216309f, 0.235352f, 0.612793f, 0.647949f, 0.652832f, 0.656250f, 0.658691f, 0.658203f,
+ 0.000506f, 0.001164f, 0.001575f, 0.002136f, 0.002600f, 0.003054f, 0.003405f, 0.003735f,
+ 0.004364f, 0.004681f, 0.004944f, 0.005569f, 0.005810f, 0.006187f, 0.006813f, 0.007233f,
+ 0.007881f, 0.008217f, 0.008850f, 0.009293f, 0.010109f, 0.010788f, 0.011543f, 0.012161f,
+ 0.012993f, 0.013931f, 0.014809f, 0.015945f, 0.016983f, 0.018234f, 0.019440f, 0.020813f,
+ 0.022491f, 0.024261f, 0.026169f, 0.028458f, 0.030701f, 0.033295f, 0.036560f, 0.039520f,
+ 0.043121f, 0.047333f, 0.052032f, 0.056885f, 0.062561f, 0.068909f, 0.076111f, 0.083496f,
+ 0.092407f, 0.101929f, 0.112671f, 0.124451f, 0.136719f, 0.150146f, 0.165039f, 0.180786f,
+ 0.197510f, 0.215210f, 0.597656f, 0.636230f, 0.642578f, 0.647461f, 0.647949f, 0.649902f,
+ 0.000344f, 0.001057f, 0.001456f, 0.001907f, 0.002377f, 0.002735f, 0.002983f, 0.003359f,
+ 0.003651f, 0.003960f, 0.004311f, 0.004471f, 0.005009f, 0.005283f, 0.005653f, 0.006145f,
+ 0.006592f, 0.006889f, 0.007469f, 0.007889f, 0.008423f, 0.008911f, 0.009567f, 0.010124f,
+ 0.010788f, 0.011574f, 0.012466f, 0.013123f, 0.014053f, 0.015091f, 0.016159f, 0.017288f,
+ 0.018539f, 0.020111f, 0.021698f, 0.023285f, 0.025024f, 0.027405f, 0.029800f, 0.032501f,
+ 0.035583f, 0.039001f, 0.042908f, 0.047302f, 0.052185f, 0.057465f, 0.063843f, 0.070984f,
+ 0.078857f, 0.087463f, 0.097168f, 0.108215f, 0.120117f, 0.132812f, 0.146851f, 0.161865f,
+ 0.177856f, 0.195557f, 0.585449f, 0.624023f, 0.633301f, 0.636230f, 0.637695f, 0.638672f,
+ 0.000516f, 0.000847f, 0.001210f, 0.001663f, 0.002012f, 0.002218f, 0.002424f, 0.002861f,
+ 0.002947f, 0.003275f, 0.003469f, 0.003819f, 0.004169f, 0.004337f, 0.004658f, 0.005169f,
+ 0.005424f, 0.005795f, 0.006138f, 0.006500f, 0.007057f, 0.007458f, 0.007874f, 0.008369f,
+ 0.008888f, 0.009583f, 0.010147f, 0.010864f, 0.011589f, 0.012428f, 0.013161f, 0.013931f,
+ 0.015076f, 0.016266f, 0.017456f, 0.018845f, 0.020432f, 0.022232f, 0.024094f, 0.026459f,
+ 0.028809f, 0.031586f, 0.034973f, 0.038513f, 0.042755f, 0.047485f, 0.052643f, 0.058929f,
+ 0.065796f, 0.073792f, 0.082581f, 0.092407f, 0.103516f, 0.115723f, 0.128906f, 0.142944f,
+ 0.158813f, 0.175781f, 0.572266f, 0.613770f, 0.621094f, 0.625977f, 0.626953f, 0.628418f,
+ 0.000262f, 0.000864f, 0.001096f, 0.001409f, 0.001576f, 0.001852f, 0.002047f, 0.002247f,
+ 0.002518f, 0.002741f, 0.002956f, 0.003157f, 0.003359f, 0.003597f, 0.003872f, 0.004230f,
+ 0.004406f, 0.004772f, 0.005035f, 0.005379f, 0.005695f, 0.006153f, 0.006485f, 0.006935f,
+ 0.007275f, 0.007801f, 0.008301f, 0.008789f, 0.009300f, 0.009949f, 0.010727f, 0.011482f,
+ 0.012245f, 0.013145f, 0.014236f, 0.015236f, 0.016525f, 0.017838f, 0.019348f, 0.021088f,
+ 0.023010f, 0.025253f, 0.027878f, 0.031128f, 0.034149f, 0.038269f, 0.042694f, 0.047852f,
+ 0.053833f, 0.060852f, 0.068665f, 0.077698f, 0.087891f, 0.099182f, 0.111633f, 0.125732f,
+ 0.140381f, 0.157227f, 0.558105f, 0.601562f, 0.610840f, 0.614746f, 0.617188f, 0.619141f,
+ 0.000270f, 0.000683f, 0.000851f, 0.001138f, 0.001346f, 0.001561f, 0.001701f, 0.001884f,
+ 0.001984f, 0.002193f, 0.002455f, 0.002609f, 0.002743f, 0.002993f, 0.003159f, 0.003361f,
+ 0.003593f, 0.003883f, 0.004044f, 0.004360f, 0.004532f, 0.004971f, 0.005169f, 0.005573f,
+ 0.005863f, 0.006252f, 0.006653f, 0.007095f, 0.007572f, 0.008110f, 0.008713f, 0.009056f,
+ 0.009827f, 0.010574f, 0.011307f, 0.012070f, 0.013069f, 0.014122f, 0.015297f, 0.016678f,
+ 0.018234f, 0.019775f, 0.021835f, 0.024216f, 0.026917f, 0.030151f, 0.033875f, 0.038147f,
+ 0.043121f, 0.049408f, 0.056091f, 0.064026f, 0.073059f, 0.083801f, 0.095276f, 0.108459f,
+ 0.122803f, 0.138794f, 0.545410f, 0.590332f, 0.599609f, 0.603516f, 0.606445f, 0.607422f,
+ 0.000190f, 0.000607f, 0.000724f, 0.000989f, 0.001171f, 0.001265f, 0.001416f, 0.001602f,
+ 0.001666f, 0.001761f, 0.001893f, 0.002102f, 0.002199f, 0.002413f, 0.002537f, 0.002743f,
+ 0.002850f, 0.003027f, 0.003258f, 0.003494f, 0.003729f, 0.003937f, 0.004204f, 0.004410f,
+ 0.004616f, 0.004921f, 0.005192f, 0.005604f, 0.005936f, 0.006298f, 0.006836f, 0.007233f,
+ 0.007694f, 0.008224f, 0.008827f, 0.009506f, 0.010262f, 0.011055f, 0.011978f, 0.012955f,
+ 0.014099f, 0.015434f, 0.017029f, 0.018677f, 0.020813f, 0.023193f, 0.026169f, 0.029541f,
+ 0.033783f, 0.038513f, 0.044403f, 0.051208f, 0.059387f, 0.068665f, 0.079468f, 0.091858f,
+ 0.105774f, 0.120728f, 0.530762f, 0.578125f, 0.588379f, 0.592773f, 0.595215f, 0.597168f,
+ 0.000151f, 0.000443f, 0.000673f, 0.000793f, 0.000937f, 0.000987f, 0.001092f, 0.001192f,
+ 0.001324f, 0.001460f, 0.001495f, 0.001565f, 0.001778f, 0.001944f, 0.002054f, 0.002096f,
+ 0.002254f, 0.002338f, 0.002594f, 0.002737f, 0.002886f, 0.003048f, 0.003294f, 0.003460f,
+ 0.003679f, 0.003868f, 0.004086f, 0.004322f, 0.004642f, 0.004894f, 0.005199f, 0.005554f,
+ 0.006035f, 0.006451f, 0.006836f, 0.007359f, 0.007820f, 0.008461f, 0.009163f, 0.009956f,
+ 0.010803f, 0.011871f, 0.012917f, 0.014343f, 0.015900f, 0.017670f, 0.019791f, 0.022400f,
+ 0.025589f, 0.029404f, 0.034210f, 0.039948f, 0.046936f, 0.055298f, 0.064941f, 0.076172f,
+ 0.089172f, 0.103821f, 0.517090f, 0.565918f, 0.576172f, 0.582031f, 0.584961f, 0.586426f,
+ 0.000203f, 0.000287f, 0.000531f, 0.000688f, 0.000738f, 0.000820f, 0.000915f, 0.000875f,
+ 0.001036f, 0.001117f, 0.001215f, 0.001317f, 0.001374f, 0.001476f, 0.001524f, 0.001682f,
+ 0.001726f, 0.001867f, 0.002014f, 0.002056f, 0.002209f, 0.002365f, 0.002495f, 0.002663f,
+ 0.002775f, 0.002953f, 0.003134f, 0.003325f, 0.003567f, 0.003736f, 0.004070f, 0.004261f,
+ 0.004494f, 0.004845f, 0.005116f, 0.005459f, 0.005928f, 0.006329f, 0.006863f, 0.007458f,
+ 0.008087f, 0.008873f, 0.009689f, 0.010651f, 0.011826f, 0.013130f, 0.014732f, 0.016617f,
+ 0.018890f, 0.021912f, 0.025482f, 0.029938f, 0.035736f, 0.042847f, 0.051453f, 0.061615f,
+ 0.074158f, 0.087952f, 0.504395f, 0.554199f, 0.565918f, 0.569336f, 0.573242f, 0.574219f,
+ 0.000215f, 0.000259f, 0.000423f, 0.000534f, 0.000499f, 0.000649f, 0.000622f, 0.000690f,
+ 0.000717f, 0.000817f, 0.000937f, 0.000984f, 0.001045f, 0.001148f, 0.001182f, 0.001211f,
+ 0.001339f, 0.001406f, 0.001463f, 0.001590f, 0.001666f, 0.001759f, 0.001867f, 0.001949f,
+ 0.002064f, 0.002176f, 0.002342f, 0.002453f, 0.002619f, 0.002871f, 0.003033f, 0.003101f,
+ 0.003389f, 0.003620f, 0.003794f, 0.004059f, 0.004368f, 0.004681f, 0.005035f, 0.005466f,
+ 0.005917f, 0.006405f, 0.007092f, 0.007744f, 0.008591f, 0.009506f, 0.010567f, 0.011993f,
+ 0.013710f, 0.015762f, 0.018326f, 0.021759f, 0.026077f, 0.031891f, 0.039124f, 0.048462f,
+ 0.059570f, 0.072571f, 0.489258f, 0.542480f, 0.553223f, 0.558594f, 0.562012f, 0.563965f,
+ 0.000067f, 0.000253f, 0.000305f, 0.000367f, 0.000422f, 0.000431f, 0.000530f, 0.000466f,
+ 0.000565f, 0.000590f, 0.000702f, 0.000690f, 0.000746f, 0.000795f, 0.000859f, 0.000897f,
+ 0.000962f, 0.001021f, 0.001069f, 0.001105f, 0.001207f, 0.001257f, 0.001354f, 0.001424f,
+ 0.001483f, 0.001570f, 0.001687f, 0.001750f, 0.001857f, 0.001982f, 0.002071f, 0.002281f,
+ 0.002361f, 0.002527f, 0.002684f, 0.002846f, 0.003092f, 0.003342f, 0.003622f, 0.003866f,
+ 0.004173f, 0.004520f, 0.004955f, 0.005428f, 0.006023f, 0.006687f, 0.007481f, 0.008446f,
+ 0.009628f, 0.011047f, 0.012840f, 0.015205f, 0.018326f, 0.022629f, 0.028442f, 0.036102f,
+ 0.046051f, 0.058197f, 0.476318f, 0.529785f, 0.541992f, 0.547852f, 0.550293f, 0.553223f,
+ 0.000000f, 0.000118f, 0.000216f, 0.000288f, 0.000272f, 0.000350f, 0.000312f, 0.000374f,
+ 0.000395f, 0.000470f, 0.000488f, 0.000477f, 0.000495f, 0.000548f, 0.000573f, 0.000646f,
+ 0.000636f, 0.000714f, 0.000763f, 0.000803f, 0.000852f, 0.000897f, 0.000930f, 0.000985f,
+ 0.001056f, 0.001089f, 0.001163f, 0.001210f, 0.001281f, 0.001432f, 0.001431f, 0.001548f,
+ 0.001622f, 0.001743f, 0.001869f, 0.001991f, 0.002104f, 0.002262f, 0.002428f, 0.002632f,
+ 0.002815f, 0.003077f, 0.003344f, 0.003656f, 0.004002f, 0.004478f, 0.004974f, 0.005627f,
+ 0.006435f, 0.007481f, 0.008713f, 0.010307f, 0.012291f, 0.015289f, 0.019409f, 0.025497f,
+ 0.033966f, 0.045013f, 0.461914f, 0.517090f, 0.529297f, 0.536133f, 0.539551f, 0.541504f,
+ 0.000073f, 0.000175f, 0.000165f, 0.000149f, 0.000200f, 0.000208f, 0.000215f, 0.000260f,
+ 0.000268f, 0.000277f, 0.000292f, 0.000341f, 0.000334f, 0.000370f, 0.000413f, 0.000424f,
+ 0.000449f, 0.000474f, 0.000488f, 0.000507f, 0.000555f, 0.000574f, 0.000616f, 0.000652f,
+ 0.000696f, 0.000746f, 0.000780f, 0.000804f, 0.000849f, 0.000888f, 0.000949f, 0.001011f,
+ 0.001075f, 0.001151f, 0.001225f, 0.001266f, 0.001385f, 0.001466f, 0.001596f, 0.001699f,
+ 0.001808f, 0.001980f, 0.002157f, 0.002329f, 0.002544f, 0.002850f, 0.003178f, 0.003593f,
+ 0.004047f, 0.004658f, 0.005508f, 0.006565f, 0.007935f, 0.009819f, 0.012527f, 0.016647f,
+ 0.023514f, 0.033173f, 0.447510f, 0.503906f, 0.517578f, 0.523926f, 0.527344f, 0.529297f,
+ 0.000000f, 0.000106f, 0.000097f, 0.000099f, 0.000136f, 0.000157f, 0.000129f, 0.000162f,
+ 0.000167f, 0.000172f, 0.000180f, 0.000186f, 0.000209f, 0.000227f, 0.000232f, 0.000248f,
+ 0.000260f, 0.000291f, 0.000300f, 0.000327f, 0.000335f, 0.000343f, 0.000363f, 0.000395f,
+ 0.000428f, 0.000459f, 0.000458f, 0.000477f, 0.000515f, 0.000549f, 0.000578f, 0.000621f,
+ 0.000659f, 0.000683f, 0.000741f, 0.000767f, 0.000818f, 0.000877f, 0.000952f, 0.001010f,
+ 0.001085f, 0.001177f, 0.001275f, 0.001406f, 0.001516f, 0.001664f, 0.001884f, 0.002096f,
+ 0.002415f, 0.002745f, 0.003231f, 0.003843f, 0.004715f, 0.005936f, 0.007629f, 0.010139f,
+ 0.014763f, 0.022812f, 0.433350f, 0.491455f, 0.506348f, 0.511719f, 0.515625f, 0.518066f,
+ 0.000104f, 0.000080f, 0.000069f, 0.000062f, 0.000074f, 0.000074f, 0.000089f, 0.000097f,
+ 0.000099f, 0.000102f, 0.000105f, 0.000126f, 0.000106f, 0.000119f, 0.000139f, 0.000135f,
+ 0.000154f, 0.000164f, 0.000166f, 0.000175f, 0.000188f, 0.000194f, 0.000211f, 0.000220f,
+ 0.000252f, 0.000248f, 0.000260f, 0.000272f, 0.000293f, 0.000301f, 0.000328f, 0.000347f,
+ 0.000365f, 0.000371f, 0.000401f, 0.000422f, 0.000447f, 0.000489f, 0.000524f, 0.000553f,
+ 0.000588f, 0.000635f, 0.000701f, 0.000751f, 0.000816f, 0.000897f, 0.000997f, 0.001109f,
+ 0.001265f, 0.001460f, 0.001686f, 0.002035f, 0.002457f, 0.003130f, 0.004124f, 0.005676f,
+ 0.008263f, 0.014114f, 0.418945f, 0.479492f, 0.493652f, 0.500000f, 0.503418f, 0.506836f,
+ 0.000089f, 0.000065f, 0.000056f, 0.000050f, 0.000045f, 0.000042f, 0.000046f, 0.000042f,
+ 0.000043f, 0.000055f, 0.000046f, 0.000049f, 0.000065f, 0.000055f, 0.000057f, 0.000063f,
+ 0.000075f, 0.000080f, 0.000078f, 0.000084f, 0.000085f, 0.000092f, 0.000097f, 0.000102f,
+ 0.000108f, 0.000117f, 0.000118f, 0.000138f, 0.000135f, 0.000142f, 0.000151f, 0.000160f,
+ 0.000172f, 0.000180f, 0.000195f, 0.000197f, 0.000210f, 0.000230f, 0.000244f, 0.000266f,
+ 0.000279f, 0.000299f, 0.000324f, 0.000352f, 0.000383f, 0.000414f, 0.000457f, 0.000509f,
+ 0.000575f, 0.000650f, 0.000756f, 0.000904f, 0.001103f, 0.001410f, 0.001880f, 0.002668f,
+ 0.004112f, 0.007290f, 0.404541f, 0.466309f, 0.481201f, 0.488037f, 0.492432f, 0.495361f,
+ 0.000066f, 0.000046f, 0.000038f, 0.000034f, 0.000031f, 0.000029f, 0.000027f, 0.000026f,
+ 0.000025f, 0.000023f, 0.000022f, 0.000024f, 0.000020f, 0.000021f, 0.000021f, 0.000026f,
+ 0.000024f, 0.000028f, 0.000031f, 0.000032f, 0.000032f, 0.000035f, 0.000040f, 0.000038f,
+ 0.000041f, 0.000047f, 0.000049f, 0.000043f, 0.000050f, 0.000052f, 0.000056f, 0.000059f,
+ 0.000066f, 0.000062f, 0.000067f, 0.000071f, 0.000082f, 0.000083f, 0.000089f, 0.000098f,
+ 0.000104f, 0.000107f, 0.000116f, 0.000125f, 0.000141f, 0.000149f, 0.000160f, 0.000183f,
+ 0.000207f, 0.000228f, 0.000264f, 0.000311f, 0.000376f, 0.000469f, 0.000646f, 0.000937f,
+ 0.001554f, 0.002983f, 0.390381f, 0.454346f, 0.469727f, 0.476318f, 0.480713f, 0.484131f,
+ 0.000028f, 0.000019f, 0.000015f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
+ 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f,
+ 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000012f, 0.000011f,
+ 0.000014f, 0.000015f, 0.000016f, 0.000016f, 0.000018f, 0.000019f, 0.000019f, 0.000022f,
+ 0.000023f, 0.000024f, 0.000026f, 0.000028f, 0.000029f, 0.000032f, 0.000037f, 0.000037f,
+ 0.000042f, 0.000048f, 0.000056f, 0.000066f, 0.000077f, 0.000091f, 0.000124f, 0.000183f,
+ 0.000318f, 0.000779f, 0.376465f, 0.441406f, 0.457275f, 0.464600f, 0.468994f, 0.471924f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f,
+ 0.000010f, 0.000027f, 0.363037f, 0.428223f, 0.444580f, 0.452881f, 0.457031f, 0.459961f,
+ },
+ {
+ 0.014420f, 0.043488f, 0.072388f, 0.100830f, 0.129150f, 0.156494f, 0.183350f, 0.210327f,
+ 0.235352f, 0.260986f, 0.285645f, 0.309082f, 0.332764f, 0.355713f, 0.377441f, 0.399658f,
+ 0.420898f, 0.441650f, 0.461914f, 0.481445f, 0.500977f, 0.520508f, 0.538574f, 0.556641f,
+ 0.574707f, 0.591797f, 0.608398f, 0.624512f, 0.641602f, 0.657227f, 0.672363f, 0.687500f,
+ 0.702148f, 0.717285f, 0.730957f, 0.745117f, 0.758789f, 0.772461f, 0.783203f, 0.797363f,
+ 0.810547f, 0.822266f, 0.833984f, 0.845703f, 0.857422f, 0.868652f, 0.879395f, 0.890625f,
+ 0.901367f, 0.911621f, 0.921875f, 0.932129f, 0.941895f, 0.951660f, 0.960938f, 0.970215f,
+ 0.979492f, 0.987793f, 0.981934f, 0.957031f, 0.938965f, 0.923340f, 0.909668f, 0.897461f,
+ 0.013199f, 0.039978f, 0.066284f, 0.093445f, 0.119324f, 0.145386f, 0.170410f, 0.195801f,
+ 0.220581f, 0.244019f, 0.268066f, 0.291260f, 0.314453f, 0.335938f, 0.358154f, 0.379639f,
+ 0.399902f, 0.420898f, 0.441406f, 0.460938f, 0.480225f, 0.498291f, 0.516602f, 0.535156f,
+ 0.553223f, 0.570312f, 0.587891f, 0.603516f, 0.620117f, 0.636719f, 0.652832f, 0.667480f,
+ 0.682617f, 0.696777f, 0.711914f, 0.726074f, 0.739746f, 0.753418f, 0.766602f, 0.779785f,
+ 0.791992f, 0.804688f, 0.817871f, 0.829102f, 0.841309f, 0.852539f, 0.864258f, 0.875488f,
+ 0.886230f, 0.896973f, 0.907227f, 0.917969f, 0.928223f, 0.937500f, 0.947266f, 0.957520f,
+ 0.966797f, 0.975586f, 0.976562f, 0.952637f, 0.935547f, 0.920898f, 0.907715f, 0.895996f,
+ 0.011932f, 0.036499f, 0.061554f, 0.085999f, 0.110962f, 0.135010f, 0.158813f, 0.182373f,
+ 0.206421f, 0.229004f, 0.251221f, 0.274170f, 0.295654f, 0.317871f, 0.339111f, 0.360107f,
+ 0.379395f, 0.399414f, 0.420654f, 0.440430f, 0.458252f, 0.477295f, 0.496094f, 0.513672f,
+ 0.531738f, 0.549805f, 0.566406f, 0.583984f, 0.599121f, 0.616211f, 0.631348f, 0.647461f,
+ 0.662598f, 0.677734f, 0.692383f, 0.705566f, 0.720703f, 0.734863f, 0.748047f, 0.761230f,
+ 0.774414f, 0.787598f, 0.799805f, 0.812500f, 0.824707f, 0.837402f, 0.848633f, 0.859375f,
+ 0.871094f, 0.882324f, 0.892578f, 0.904297f, 0.913574f, 0.924316f, 0.934570f, 0.943848f,
+ 0.954102f, 0.963867f, 0.970703f, 0.948242f, 0.931641f, 0.917480f, 0.905273f, 0.894043f,
+ 0.011070f, 0.033478f, 0.056396f, 0.079529f, 0.101990f, 0.125244f, 0.147705f, 0.170410f,
+ 0.192139f, 0.214111f, 0.235596f, 0.257812f, 0.279053f, 0.300293f, 0.320557f, 0.340576f,
+ 0.360596f, 0.381104f, 0.400635f, 0.420166f, 0.438965f, 0.458008f, 0.476562f, 0.493652f,
+ 0.511230f, 0.527832f, 0.545898f, 0.562012f, 0.579102f, 0.595703f, 0.610840f, 0.627930f,
+ 0.642578f, 0.657227f, 0.672363f, 0.686523f, 0.701660f, 0.715332f, 0.729492f, 0.742676f,
+ 0.756348f, 0.769531f, 0.782227f, 0.795898f, 0.807617f, 0.820312f, 0.832031f, 0.843262f,
+ 0.855469f, 0.866699f, 0.877441f, 0.889648f, 0.899414f, 0.910156f, 0.920410f, 0.930664f,
+ 0.940430f, 0.950684f, 0.964844f, 0.943848f, 0.927734f, 0.914551f, 0.902344f, 0.891602f,
+ 0.010010f, 0.031067f, 0.051880f, 0.073303f, 0.094421f, 0.116577f, 0.136963f, 0.157959f,
+ 0.180542f, 0.200684f, 0.221436f, 0.242676f, 0.262939f, 0.283447f, 0.303467f, 0.323242f,
+ 0.342529f, 0.362305f, 0.381348f, 0.399414f, 0.418701f, 0.437256f, 0.455322f, 0.472412f,
+ 0.490479f, 0.507812f, 0.524902f, 0.541992f, 0.558105f, 0.574219f, 0.591309f, 0.606445f,
+ 0.622070f, 0.637695f, 0.652344f, 0.666504f, 0.683594f, 0.695801f, 0.710449f, 0.724121f,
+ 0.737305f, 0.751465f, 0.765137f, 0.777344f, 0.790039f, 0.802734f, 0.814941f, 0.827637f,
+ 0.839355f, 0.851074f, 0.862305f, 0.874512f, 0.885254f, 0.895996f, 0.906738f, 0.917480f,
+ 0.927246f, 0.937988f, 0.958984f, 0.939453f, 0.923828f, 0.911133f, 0.899414f, 0.889160f,
+ 0.009491f, 0.028305f, 0.047699f, 0.067810f, 0.087341f, 0.107849f, 0.127686f, 0.147827f,
+ 0.167725f, 0.187744f, 0.207886f, 0.227051f, 0.247314f, 0.266846f, 0.286377f, 0.305908f,
+ 0.324463f, 0.343262f, 0.361572f, 0.380371f, 0.399658f, 0.416748f, 0.435547f, 0.452881f,
+ 0.470703f, 0.488281f, 0.503906f, 0.522461f, 0.538086f, 0.554199f, 0.571289f, 0.586914f,
+ 0.602051f, 0.617676f, 0.633789f, 0.647949f, 0.663086f, 0.677246f, 0.692871f, 0.705078f,
+ 0.718750f, 0.732910f, 0.746582f, 0.759766f, 0.773438f, 0.785645f, 0.798340f, 0.811035f,
+ 0.823242f, 0.834961f, 0.847168f, 0.859863f, 0.870117f, 0.881348f, 0.893066f, 0.903320f,
+ 0.914551f, 0.924316f, 0.953125f, 0.934082f, 0.919434f, 0.906738f, 0.896484f, 0.885742f,
+ 0.008598f, 0.026245f, 0.044495f, 0.062622f, 0.081177f, 0.100098f, 0.119019f, 0.137817f,
+ 0.156616f, 0.175903f, 0.194946f, 0.213745f, 0.232788f, 0.251221f, 0.269775f, 0.288330f,
+ 0.307129f, 0.325928f, 0.344238f, 0.362305f, 0.380371f, 0.397705f, 0.415771f, 0.433105f,
+ 0.450928f, 0.468262f, 0.484863f, 0.501953f, 0.518555f, 0.534668f, 0.550293f, 0.566406f,
+ 0.582520f, 0.598145f, 0.612305f, 0.627930f, 0.643555f, 0.657715f, 0.672852f, 0.687500f,
+ 0.700684f, 0.715332f, 0.728516f, 0.742188f, 0.755371f, 0.769531f, 0.781738f, 0.794434f,
+ 0.807129f, 0.818359f, 0.831543f, 0.843262f, 0.855469f, 0.865723f, 0.877930f, 0.889160f,
+ 0.900391f, 0.911621f, 0.946777f, 0.929199f, 0.915039f, 0.903320f, 0.892578f, 0.883301f,
+ 0.007896f, 0.024490f, 0.041138f, 0.057892f, 0.075439f, 0.092712f, 0.110229f, 0.128296f,
+ 0.146118f, 0.164429f, 0.181885f, 0.200562f, 0.218628f, 0.236572f, 0.255127f, 0.272949f,
+ 0.291016f, 0.308594f, 0.326172f, 0.343994f, 0.361816f, 0.380127f, 0.396973f, 0.414551f,
+ 0.430908f, 0.447998f, 0.465576f, 0.481445f, 0.497559f, 0.514160f, 0.529785f, 0.546387f,
+ 0.562988f, 0.578613f, 0.593262f, 0.609375f, 0.623047f, 0.638672f, 0.653809f, 0.667480f,
+ 0.681641f, 0.697266f, 0.710938f, 0.724121f, 0.737305f, 0.752441f, 0.765625f, 0.776367f,
+ 0.790527f, 0.803223f, 0.815918f, 0.827637f, 0.839844f, 0.851562f, 0.863281f, 0.875000f,
+ 0.886719f, 0.898926f, 0.940430f, 0.923828f, 0.910645f, 0.899414f, 0.889160f, 0.879883f,
+ 0.007320f, 0.022369f, 0.038055f, 0.053925f, 0.070190f, 0.086609f, 0.103027f, 0.119568f,
+ 0.136475f, 0.153320f, 0.170532f, 0.187988f, 0.204834f, 0.223022f, 0.240112f, 0.257324f,
+ 0.275391f, 0.291504f, 0.308838f, 0.326904f, 0.344727f, 0.361572f, 0.378662f, 0.395020f,
+ 0.411865f, 0.428711f, 0.445068f, 0.462646f, 0.478271f, 0.494141f, 0.510254f, 0.525879f,
+ 0.542480f, 0.557129f, 0.573242f, 0.588867f, 0.603516f, 0.618164f, 0.633789f, 0.648438f,
+ 0.663086f, 0.678223f, 0.691895f, 0.706543f, 0.720215f, 0.733398f, 0.746582f, 0.759766f,
+ 0.774414f, 0.786621f, 0.799805f, 0.811523f, 0.823730f, 0.836914f, 0.848145f, 0.860840f,
+ 0.872070f, 0.884277f, 0.933594f, 0.918945f, 0.906250f, 0.895020f, 0.885254f, 0.876953f,
+ 0.006760f, 0.021011f, 0.034973f, 0.050049f, 0.065369f, 0.080261f, 0.095337f, 0.111633f,
+ 0.127319f, 0.142822f, 0.159668f, 0.176514f, 0.192383f, 0.209106f, 0.225586f, 0.242554f,
+ 0.259277f, 0.275635f, 0.292480f, 0.309326f, 0.326904f, 0.343750f, 0.359619f, 0.376465f,
+ 0.393066f, 0.409424f, 0.426514f, 0.442871f, 0.458252f, 0.475586f, 0.490967f, 0.505859f,
+ 0.522461f, 0.539062f, 0.554199f, 0.569336f, 0.583984f, 0.600586f, 0.614258f, 0.630371f,
+ 0.643555f, 0.658691f, 0.673340f, 0.687500f, 0.702148f, 0.715332f, 0.729980f, 0.743652f,
+ 0.756348f, 0.770020f, 0.782715f, 0.796387f, 0.808105f, 0.820801f, 0.833008f, 0.846680f,
+ 0.857910f, 0.870117f, 0.927246f, 0.913574f, 0.901367f, 0.891113f, 0.881348f, 0.873047f,
+ 0.006367f, 0.019165f, 0.032379f, 0.046295f, 0.060089f, 0.074463f, 0.088867f, 0.103821f,
+ 0.118835f, 0.133911f, 0.149048f, 0.164673f, 0.180298f, 0.196289f, 0.212524f, 0.228516f,
+ 0.244385f, 0.260742f, 0.277344f, 0.293213f, 0.309570f, 0.326416f, 0.342773f, 0.358887f,
+ 0.374512f, 0.391113f, 0.406982f, 0.423340f, 0.439453f, 0.455078f, 0.470947f, 0.487793f,
+ 0.502441f, 0.519043f, 0.533691f, 0.550293f, 0.564941f, 0.580078f, 0.595703f, 0.610840f,
+ 0.625488f, 0.640137f, 0.654785f, 0.669434f, 0.683594f, 0.696777f, 0.710938f, 0.725586f,
+ 0.738770f, 0.752441f, 0.766113f, 0.778320f, 0.791016f, 0.805176f, 0.818359f, 0.830566f,
+ 0.842773f, 0.854980f, 0.920410f, 0.908203f, 0.896484f, 0.886230f, 0.877441f, 0.868652f,
+ 0.005981f, 0.017914f, 0.030350f, 0.042908f, 0.056213f, 0.069092f, 0.083008f, 0.096619f,
+ 0.111084f, 0.124634f, 0.139526f, 0.154297f, 0.169312f, 0.184570f, 0.199951f, 0.215454f,
+ 0.230713f, 0.245728f, 0.261963f, 0.277588f, 0.293213f, 0.309326f, 0.325195f, 0.340820f,
+ 0.356934f, 0.373047f, 0.388916f, 0.404785f, 0.420410f, 0.436279f, 0.452148f, 0.468506f,
+ 0.483154f, 0.499756f, 0.515137f, 0.530762f, 0.545898f, 0.560059f, 0.576172f, 0.590820f,
+ 0.606445f, 0.621094f, 0.635254f, 0.649902f, 0.663574f, 0.678223f, 0.692383f, 0.706543f,
+ 0.720703f, 0.733887f, 0.748535f, 0.762695f, 0.775391f, 0.789551f, 0.801758f, 0.814941f,
+ 0.828125f, 0.840332f, 0.913574f, 0.902344f, 0.890625f, 0.881836f, 0.872559f, 0.865234f,
+ 0.005402f, 0.016617f, 0.028061f, 0.039948f, 0.051758f, 0.064270f, 0.076782f, 0.089600f,
+ 0.102600f, 0.116455f, 0.130371f, 0.144165f, 0.158936f, 0.172607f, 0.187744f, 0.201904f,
+ 0.216431f, 0.232422f, 0.247192f, 0.261719f, 0.277100f, 0.292480f, 0.308838f, 0.323975f,
+ 0.339355f, 0.355469f, 0.371338f, 0.386230f, 0.402344f, 0.417725f, 0.433350f, 0.448486f,
+ 0.464600f, 0.480225f, 0.495361f, 0.510742f, 0.525879f, 0.541992f, 0.557129f, 0.571777f,
+ 0.586914f, 0.601562f, 0.616211f, 0.631836f, 0.645508f, 0.661621f, 0.674805f, 0.688965f,
+ 0.703125f, 0.717773f, 0.731934f, 0.745605f, 0.757812f, 0.772949f, 0.785156f, 0.799316f,
+ 0.812012f, 0.826172f, 0.906738f, 0.896484f, 0.886230f, 0.876465f, 0.868164f, 0.860840f,
+ 0.005264f, 0.015457f, 0.026474f, 0.037170f, 0.048157f, 0.059845f, 0.071594f, 0.083984f,
+ 0.096191f, 0.109070f, 0.121887f, 0.134766f, 0.148193f, 0.161255f, 0.175781f, 0.189209f,
+ 0.203369f, 0.218384f, 0.233032f, 0.247681f, 0.261963f, 0.277100f, 0.292480f, 0.307129f,
+ 0.322998f, 0.337891f, 0.352539f, 0.368652f, 0.384033f, 0.399170f, 0.414307f, 0.430420f,
+ 0.445801f, 0.460693f, 0.475342f, 0.491211f, 0.506836f, 0.521973f, 0.537598f, 0.551758f,
+ 0.567383f, 0.582520f, 0.598145f, 0.612305f, 0.627441f, 0.642090f, 0.656738f, 0.670898f,
+ 0.685059f, 0.698730f, 0.713867f, 0.728516f, 0.742188f, 0.755371f, 0.770020f, 0.782715f,
+ 0.796387f, 0.810547f, 0.899414f, 0.889648f, 0.879883f, 0.872070f, 0.863770f, 0.856445f,
+ 0.004719f, 0.014229f, 0.024384f, 0.034607f, 0.044708f, 0.055756f, 0.066895f, 0.077942f,
+ 0.089600f, 0.101624f, 0.113525f, 0.125854f, 0.138428f, 0.151245f, 0.164673f, 0.177734f,
+ 0.191650f, 0.205078f, 0.219360f, 0.233154f, 0.247925f, 0.261475f, 0.276367f, 0.291504f,
+ 0.305908f, 0.320312f, 0.335449f, 0.350098f, 0.365723f, 0.380615f, 0.395996f, 0.411133f,
+ 0.427002f, 0.441895f, 0.456543f, 0.472656f, 0.487793f, 0.502441f, 0.518555f, 0.533203f,
+ 0.547852f, 0.562988f, 0.577637f, 0.593262f, 0.607910f, 0.623535f, 0.638184f, 0.652344f,
+ 0.666992f, 0.681641f, 0.696777f, 0.711426f, 0.725098f, 0.738281f, 0.753418f, 0.766113f,
+ 0.782227f, 0.794922f, 0.892090f, 0.884277f, 0.875000f, 0.866699f, 0.858887f, 0.852539f,
+ 0.004280f, 0.013329f, 0.022476f, 0.031982f, 0.042114f, 0.051849f, 0.062225f, 0.072449f,
+ 0.083679f, 0.095032f, 0.105530f, 0.117676f, 0.129517f, 0.141357f, 0.154297f, 0.166748f,
+ 0.178711f, 0.192505f, 0.205933f, 0.219727f, 0.233521f, 0.247070f, 0.260986f, 0.275391f,
+ 0.290039f, 0.303955f, 0.319580f, 0.333740f, 0.347412f, 0.363037f, 0.377686f, 0.392822f,
+ 0.408203f, 0.422852f, 0.437988f, 0.453125f, 0.468506f, 0.483398f, 0.498779f, 0.514160f,
+ 0.527832f, 0.543945f, 0.559570f, 0.574707f, 0.588867f, 0.604492f, 0.619141f, 0.634277f,
+ 0.648438f, 0.663086f, 0.678223f, 0.692383f, 0.707520f, 0.721680f, 0.735352f, 0.749512f,
+ 0.764648f, 0.778320f, 0.884277f, 0.877441f, 0.868652f, 0.861328f, 0.854492f, 0.847656f,
+ 0.004280f, 0.012138f, 0.021103f, 0.029999f, 0.038940f, 0.048279f, 0.057831f, 0.067566f,
+ 0.077454f, 0.087524f, 0.098816f, 0.109558f, 0.120728f, 0.131958f, 0.143799f, 0.155762f,
+ 0.168091f, 0.180176f, 0.193359f, 0.206177f, 0.219360f, 0.232910f, 0.246338f, 0.260254f,
+ 0.273682f, 0.287598f, 0.302246f, 0.316650f, 0.331299f, 0.344971f, 0.359863f, 0.374268f,
+ 0.389648f, 0.404297f, 0.419434f, 0.434326f, 0.449463f, 0.464844f, 0.479492f, 0.494141f,
+ 0.509766f, 0.524414f, 0.540039f, 0.555176f, 0.569824f, 0.584961f, 0.600098f, 0.615723f,
+ 0.629883f, 0.645508f, 0.659668f, 0.675293f, 0.689453f, 0.704590f, 0.719238f, 0.732422f,
+ 0.748535f, 0.762207f, 0.876953f, 0.871582f, 0.863281f, 0.855957f, 0.849609f, 0.842773f,
+ 0.003744f, 0.011436f, 0.019348f, 0.027893f, 0.036102f, 0.044739f, 0.053711f, 0.063110f,
+ 0.072205f, 0.081970f, 0.091919f, 0.101746f, 0.112732f, 0.122864f, 0.134521f, 0.145996f,
+ 0.157715f, 0.169434f, 0.181519f, 0.193848f, 0.206665f, 0.219360f, 0.231445f, 0.245361f,
+ 0.259033f, 0.272217f, 0.286621f, 0.299805f, 0.314209f, 0.328125f, 0.342285f, 0.357178f,
+ 0.371826f, 0.386475f, 0.400635f, 0.415527f, 0.430420f, 0.445068f, 0.459717f, 0.476074f,
+ 0.490234f, 0.505371f, 0.521484f, 0.536133f, 0.551758f, 0.565430f, 0.581543f, 0.595703f,
+ 0.611816f, 0.626465f, 0.641602f, 0.656738f, 0.671875f, 0.686523f, 0.701172f, 0.715820f,
+ 0.731445f, 0.746582f, 0.868652f, 0.864746f, 0.856934f, 0.851074f, 0.844727f, 0.837891f,
+ 0.003595f, 0.011093f, 0.018265f, 0.025711f, 0.033600f, 0.041656f, 0.050140f, 0.058350f,
+ 0.067505f, 0.076416f, 0.085632f, 0.095093f, 0.104919f, 0.115295f, 0.125610f, 0.136108f,
+ 0.147583f, 0.157959f, 0.169800f, 0.181519f, 0.193359f, 0.205933f, 0.218140f, 0.231323f,
+ 0.243652f, 0.257324f, 0.270508f, 0.283447f, 0.297363f, 0.311523f, 0.325928f, 0.339111f,
+ 0.353516f, 0.367432f, 0.382812f, 0.396973f, 0.412109f, 0.426758f, 0.441406f, 0.456055f,
+ 0.471436f, 0.486328f, 0.501953f, 0.516113f, 0.531738f, 0.546875f, 0.562500f, 0.577637f,
+ 0.592773f, 0.607910f, 0.622559f, 0.638184f, 0.653809f, 0.669434f, 0.684082f, 0.699219f,
+ 0.714355f, 0.729492f, 0.860840f, 0.857422f, 0.852051f, 0.844727f, 0.839355f, 0.832520f,
+ 0.003349f, 0.009933f, 0.016754f, 0.024063f, 0.031204f, 0.038849f, 0.046356f, 0.054413f,
+ 0.062744f, 0.070984f, 0.080017f, 0.088989f, 0.097778f, 0.107361f, 0.117004f, 0.127197f,
+ 0.137451f, 0.148071f, 0.159180f, 0.169922f, 0.181519f, 0.192993f, 0.204956f, 0.217407f,
+ 0.229980f, 0.242188f, 0.254883f, 0.267578f, 0.281494f, 0.294434f, 0.307861f, 0.321533f,
+ 0.335693f, 0.350098f, 0.364258f, 0.379150f, 0.393066f, 0.407715f, 0.422607f, 0.437500f,
+ 0.452148f, 0.467041f, 0.482422f, 0.497314f, 0.512695f, 0.527832f, 0.542969f, 0.558594f,
+ 0.573730f, 0.589844f, 0.604004f, 0.619629f, 0.635254f, 0.651367f, 0.665527f, 0.681152f,
+ 0.696289f, 0.711914f, 0.852539f, 0.851562f, 0.846191f, 0.838867f, 0.832520f, 0.827637f,
+ 0.003290f, 0.009415f, 0.015976f, 0.022095f, 0.028946f, 0.036255f, 0.043396f, 0.050598f,
+ 0.058502f, 0.066284f, 0.074036f, 0.082275f, 0.091187f, 0.099731f, 0.108826f, 0.118652f,
+ 0.128296f, 0.137939f, 0.148193f, 0.159302f, 0.170166f, 0.180786f, 0.191895f, 0.203491f,
+ 0.215210f, 0.227661f, 0.240112f, 0.252686f, 0.265625f, 0.278564f, 0.291748f, 0.305176f,
+ 0.318604f, 0.332764f, 0.346924f, 0.360352f, 0.375000f, 0.389160f, 0.404297f, 0.418213f,
+ 0.433105f, 0.448486f, 0.463135f, 0.477783f, 0.493408f, 0.508301f, 0.523438f, 0.540039f,
+ 0.554199f, 0.570312f, 0.585938f, 0.601074f, 0.617188f, 0.633301f, 0.648926f, 0.664062f,
+ 0.679688f, 0.695312f, 0.844727f, 0.844238f, 0.838867f, 0.833008f, 0.827148f, 0.822266f,
+ 0.002913f, 0.008621f, 0.014595f, 0.020950f, 0.027496f, 0.033600f, 0.040558f, 0.047119f,
+ 0.054260f, 0.061615f, 0.068970f, 0.076782f, 0.084717f, 0.093140f, 0.101562f, 0.109985f,
+ 0.118591f, 0.129150f, 0.138306f, 0.148682f, 0.158447f, 0.169189f, 0.180054f, 0.191162f,
+ 0.202148f, 0.213379f, 0.225586f, 0.237305f, 0.250488f, 0.262939f, 0.275391f, 0.288086f,
+ 0.302490f, 0.315186f, 0.329346f, 0.342529f, 0.356934f, 0.370117f, 0.385742f, 0.400146f,
+ 0.414795f, 0.429199f, 0.444336f, 0.459473f, 0.473389f, 0.489258f, 0.503906f, 0.519531f,
+ 0.535645f, 0.551270f, 0.566895f, 0.582520f, 0.598145f, 0.614258f, 0.629395f, 0.645996f,
+ 0.661621f, 0.677734f, 0.837402f, 0.836914f, 0.832520f, 0.826660f, 0.821777f, 0.816406f,
+ 0.002748f, 0.008018f, 0.014168f, 0.019196f, 0.025040f, 0.031250f, 0.037506f, 0.043732f,
+ 0.050415f, 0.057098f, 0.063721f, 0.071167f, 0.078979f, 0.086609f, 0.094299f, 0.102783f,
+ 0.111145f, 0.119812f, 0.128296f, 0.138306f, 0.147583f, 0.157593f, 0.168213f, 0.178711f,
+ 0.188843f, 0.200317f, 0.211792f, 0.223511f, 0.235352f, 0.247192f, 0.259521f, 0.272461f,
+ 0.285156f, 0.298584f, 0.312012f, 0.324707f, 0.339111f, 0.352783f, 0.366943f, 0.381348f,
+ 0.395996f, 0.410889f, 0.425537f, 0.439941f, 0.454834f, 0.470459f, 0.485352f, 0.501953f,
+ 0.516113f, 0.531738f, 0.547363f, 0.563477f, 0.579102f, 0.595703f, 0.611328f, 0.626953f,
+ 0.642578f, 0.659668f, 0.828125f, 0.830566f, 0.825684f, 0.820801f, 0.815430f, 0.811035f,
+ 0.002630f, 0.007412f, 0.012978f, 0.018356f, 0.023758f, 0.028931f, 0.034729f, 0.040894f,
+ 0.046631f, 0.053101f, 0.059143f, 0.065979f, 0.073669f, 0.080200f, 0.087585f, 0.095276f,
+ 0.102844f, 0.111633f, 0.119812f, 0.128296f, 0.137573f, 0.146729f, 0.156128f, 0.166382f,
+ 0.176880f, 0.187256f, 0.197998f, 0.209351f, 0.220581f, 0.232422f, 0.244385f, 0.256592f,
+ 0.268799f, 0.281982f, 0.294922f, 0.308105f, 0.321045f, 0.334717f, 0.348633f, 0.363525f,
+ 0.378174f, 0.391846f, 0.406006f, 0.420898f, 0.436279f, 0.451660f, 0.466064f, 0.481934f,
+ 0.496826f, 0.513184f, 0.528320f, 0.543945f, 0.560059f, 0.576660f, 0.592285f, 0.608887f,
+ 0.625000f, 0.640625f, 0.819336f, 0.822266f, 0.818848f, 0.813965f, 0.810059f, 0.805664f,
+ 0.002201f, 0.007240f, 0.011803f, 0.016617f, 0.021622f, 0.027344f, 0.032288f, 0.037598f,
+ 0.043427f, 0.049194f, 0.055267f, 0.061462f, 0.067566f, 0.073853f, 0.080872f, 0.088013f,
+ 0.095703f, 0.103821f, 0.111145f, 0.119446f, 0.127563f, 0.136597f, 0.145752f, 0.155273f,
+ 0.165039f, 0.174683f, 0.185181f, 0.195801f, 0.206543f, 0.218140f, 0.229370f, 0.241455f,
+ 0.253174f, 0.265381f, 0.278564f, 0.291504f, 0.304199f, 0.317383f, 0.331299f, 0.344971f,
+ 0.358643f, 0.373291f, 0.386963f, 0.402100f, 0.416016f, 0.431641f, 0.447266f, 0.462646f,
+ 0.477295f, 0.493652f, 0.509277f, 0.524902f, 0.541504f, 0.557617f, 0.574219f, 0.589844f,
+ 0.605957f, 0.623047f, 0.810059f, 0.814453f, 0.811035f, 0.807129f, 0.803223f, 0.798828f,
+ 0.002293f, 0.006927f, 0.010994f, 0.015617f, 0.020584f, 0.025131f, 0.029663f, 0.034760f,
+ 0.040192f, 0.045532f, 0.050964f, 0.056793f, 0.062805f, 0.068726f, 0.074890f, 0.081482f,
+ 0.088806f, 0.096069f, 0.103333f, 0.110535f, 0.118896f, 0.126709f, 0.135254f, 0.144165f,
+ 0.153442f, 0.162720f, 0.172119f, 0.182495f, 0.192749f, 0.203735f, 0.214600f, 0.225952f,
+ 0.237793f, 0.250000f, 0.261719f, 0.274170f, 0.287354f, 0.300293f, 0.313477f, 0.326904f,
+ 0.340820f, 0.354980f, 0.369385f, 0.383545f, 0.396973f, 0.411865f, 0.427734f, 0.442871f,
+ 0.458740f, 0.473633f, 0.489502f, 0.505859f, 0.522461f, 0.537598f, 0.553711f, 0.572754f,
+ 0.588379f, 0.604492f, 0.802246f, 0.807617f, 0.804199f, 0.800781f, 0.797363f, 0.792969f,
+ 0.002081f, 0.006172f, 0.010460f, 0.014503f, 0.019104f, 0.023163f, 0.027832f, 0.032410f,
+ 0.037354f, 0.041992f, 0.047211f, 0.052490f, 0.057831f, 0.063232f, 0.069458f, 0.075317f,
+ 0.082153f, 0.088257f, 0.094910f, 0.102295f, 0.110107f, 0.117554f, 0.125122f, 0.133667f,
+ 0.142456f, 0.151001f, 0.160767f, 0.169922f, 0.179443f, 0.190430f, 0.200562f, 0.211914f,
+ 0.222412f, 0.234009f, 0.245850f, 0.258545f, 0.270752f, 0.283203f, 0.296387f, 0.309082f,
+ 0.322998f, 0.336670f, 0.350098f, 0.364990f, 0.378906f, 0.393311f, 0.408936f, 0.423096f,
+ 0.438965f, 0.454834f, 0.470703f, 0.486572f, 0.502441f, 0.518555f, 0.534668f, 0.551270f,
+ 0.569336f, 0.585938f, 0.792480f, 0.799316f, 0.797363f, 0.793457f, 0.790039f, 0.786621f,
+ 0.002028f, 0.005669f, 0.009705f, 0.013565f, 0.017532f, 0.021286f, 0.025574f, 0.030197f,
+ 0.034180f, 0.038757f, 0.043488f, 0.048737f, 0.053497f, 0.058594f, 0.064026f, 0.070007f,
+ 0.075623f, 0.081360f, 0.088135f, 0.094238f, 0.101379f, 0.108643f, 0.116028f, 0.123718f,
+ 0.131592f, 0.140137f, 0.149048f, 0.157715f, 0.167114f, 0.176636f, 0.187012f, 0.197388f,
+ 0.208130f, 0.219238f, 0.230347f, 0.241943f, 0.254150f, 0.266113f, 0.279053f, 0.291504f,
+ 0.304932f, 0.318848f, 0.332031f, 0.345947f, 0.360107f, 0.375000f, 0.389404f, 0.404541f,
+ 0.419922f, 0.434814f, 0.450684f, 0.466553f, 0.482910f, 0.499023f, 0.516113f, 0.533203f,
+ 0.550293f, 0.567383f, 0.783203f, 0.790527f, 0.789551f, 0.786621f, 0.783691f, 0.780762f,
+ 0.001852f, 0.005554f, 0.008957f, 0.012642f, 0.016296f, 0.020172f, 0.024033f, 0.027878f,
+ 0.031677f, 0.035919f, 0.040253f, 0.044952f, 0.049255f, 0.053955f, 0.058960f, 0.063965f,
+ 0.069336f, 0.074951f, 0.080933f, 0.087219f, 0.093201f, 0.100159f, 0.106689f, 0.114197f,
+ 0.121521f, 0.129517f, 0.137817f, 0.146118f, 0.155151f, 0.164307f, 0.173462f, 0.183472f,
+ 0.193970f, 0.204224f, 0.215210f, 0.226562f, 0.238037f, 0.250244f, 0.262451f, 0.274902f,
+ 0.287598f, 0.301025f, 0.314209f, 0.327393f, 0.342041f, 0.356445f, 0.370850f, 0.385254f,
+ 0.400879f, 0.415771f, 0.431396f, 0.446777f, 0.463379f, 0.480469f, 0.497314f, 0.514160f,
+ 0.530273f, 0.547363f, 0.774414f, 0.783203f, 0.782715f, 0.779297f, 0.776367f, 0.773438f,
+ 0.001690f, 0.005207f, 0.008278f, 0.011696f, 0.015068f, 0.018784f, 0.022186f, 0.025909f,
+ 0.029221f, 0.033508f, 0.037109f, 0.041321f, 0.045471f, 0.049774f, 0.054108f, 0.058838f,
+ 0.063843f, 0.069214f, 0.074280f, 0.080078f, 0.086243f, 0.091980f, 0.098083f, 0.105164f,
+ 0.111877f, 0.119446f, 0.126953f, 0.134888f, 0.143555f, 0.151978f, 0.161133f, 0.170532f,
+ 0.180176f, 0.189697f, 0.200684f, 0.211182f, 0.222412f, 0.234009f, 0.245972f, 0.257568f,
+ 0.270508f, 0.282959f, 0.295898f, 0.309570f, 0.323486f, 0.337158f, 0.351562f, 0.366211f,
+ 0.381104f, 0.396729f, 0.411865f, 0.427490f, 0.443604f, 0.459961f, 0.477051f, 0.494385f,
+ 0.510742f, 0.529297f, 0.763184f, 0.774902f, 0.773438f, 0.771973f, 0.769043f, 0.767578f,
+ 0.001528f, 0.004692f, 0.007587f, 0.010956f, 0.014221f, 0.016907f, 0.020218f, 0.023407f,
+ 0.027283f, 0.030273f, 0.033997f, 0.038055f, 0.041809f, 0.045959f, 0.049683f, 0.053955f,
+ 0.058838f, 0.063171f, 0.068176f, 0.073120f, 0.078491f, 0.084473f, 0.090332f, 0.096619f,
+ 0.102905f, 0.109619f, 0.116699f, 0.124207f, 0.131958f, 0.140503f, 0.148438f, 0.157349f,
+ 0.166626f, 0.176392f, 0.186157f, 0.196045f, 0.207031f, 0.218018f, 0.229736f, 0.241699f,
+ 0.253174f, 0.265381f, 0.278320f, 0.291748f, 0.305176f, 0.318848f, 0.333496f, 0.347412f,
+ 0.362305f, 0.376709f, 0.392822f, 0.407715f, 0.424072f, 0.440430f, 0.457031f, 0.473633f,
+ 0.491211f, 0.508789f, 0.753906f, 0.766602f, 0.767090f, 0.764160f, 0.761719f, 0.759766f,
+ 0.001261f, 0.004250f, 0.007389f, 0.010185f, 0.013023f, 0.015976f, 0.018692f, 0.021713f,
+ 0.024734f, 0.028183f, 0.031464f, 0.034943f, 0.038452f, 0.041870f, 0.045410f, 0.049561f,
+ 0.054047f, 0.058044f, 0.062164f, 0.067017f, 0.071838f, 0.077332f, 0.082581f, 0.088318f,
+ 0.094360f, 0.100525f, 0.107117f, 0.114258f, 0.121643f, 0.128540f, 0.136841f, 0.144897f,
+ 0.153931f, 0.162476f, 0.171875f, 0.182007f, 0.192139f, 0.202637f, 0.213623f, 0.224854f,
+ 0.237183f, 0.248657f, 0.260986f, 0.274170f, 0.287354f, 0.300781f, 0.314453f, 0.328613f,
+ 0.343018f, 0.358643f, 0.373291f, 0.388916f, 0.404785f, 0.420654f, 0.437744f, 0.454590f,
+ 0.471924f, 0.489990f, 0.744629f, 0.757812f, 0.757812f, 0.756836f, 0.754395f, 0.752441f,
+ 0.001527f, 0.004047f, 0.006680f, 0.009369f, 0.012024f, 0.014618f, 0.017288f, 0.020248f,
+ 0.022705f, 0.025803f, 0.028778f, 0.031769f, 0.034912f, 0.038330f, 0.041595f, 0.045166f,
+ 0.048737f, 0.052673f, 0.056885f, 0.061218f, 0.065552f, 0.070251f, 0.075012f, 0.080505f,
+ 0.086060f, 0.091614f, 0.097656f, 0.104065f, 0.110901f, 0.118225f, 0.125366f, 0.133179f,
+ 0.141357f, 0.149902f, 0.158569f, 0.168213f, 0.177734f, 0.187866f, 0.198364f, 0.208984f,
+ 0.220581f, 0.232422f, 0.244019f, 0.256836f, 0.269287f, 0.282471f, 0.296143f, 0.309326f,
+ 0.324463f, 0.338379f, 0.353760f, 0.368652f, 0.385498f, 0.400635f, 0.417725f, 0.434570f,
+ 0.451660f, 0.469482f, 0.733887f, 0.749023f, 0.750977f, 0.749023f, 0.747070f, 0.744629f,
+ 0.001313f, 0.003803f, 0.006126f, 0.008507f, 0.011185f, 0.013550f, 0.015839f, 0.018219f,
+ 0.021027f, 0.023438f, 0.026520f, 0.029129f, 0.031738f, 0.034821f, 0.037964f, 0.041138f,
+ 0.044434f, 0.048035f, 0.051636f, 0.055420f, 0.059540f, 0.063782f, 0.068176f, 0.073181f,
+ 0.077881f, 0.083496f, 0.088989f, 0.094849f, 0.101440f, 0.107849f, 0.114441f, 0.121887f,
+ 0.129395f, 0.137207f, 0.145874f, 0.154419f, 0.163574f, 0.173462f, 0.183228f, 0.193726f,
+ 0.204712f, 0.216064f, 0.227661f, 0.239624f, 0.251709f, 0.264648f, 0.277832f, 0.291504f,
+ 0.305664f, 0.320312f, 0.334473f, 0.349854f, 0.365479f, 0.380615f, 0.397217f, 0.414551f,
+ 0.432129f, 0.449951f, 0.722656f, 0.740234f, 0.741699f, 0.741211f, 0.739746f, 0.737793f,
+ 0.001137f, 0.003654f, 0.005871f, 0.007881f, 0.010262f, 0.012268f, 0.014496f, 0.017059f,
+ 0.018890f, 0.021317f, 0.023605f, 0.026291f, 0.029007f, 0.031494f, 0.034515f, 0.036987f,
+ 0.040375f, 0.043457f, 0.046936f, 0.050385f, 0.053925f, 0.058044f, 0.061981f, 0.066650f,
+ 0.070679f, 0.075562f, 0.080994f, 0.085938f, 0.091919f, 0.098450f, 0.104370f, 0.110840f,
+ 0.118164f, 0.125366f, 0.133301f, 0.141357f, 0.150024f, 0.159546f, 0.168457f, 0.178711f,
+ 0.189453f, 0.199707f, 0.211060f, 0.222656f, 0.234741f, 0.247314f, 0.260010f, 0.272705f,
+ 0.287354f, 0.300781f, 0.315674f, 0.330322f, 0.345947f, 0.362061f, 0.377441f, 0.394775f,
+ 0.412109f, 0.429199f, 0.712891f, 0.730957f, 0.733398f, 0.733398f, 0.731445f, 0.729492f,
+ 0.001163f, 0.003218f, 0.005329f, 0.007542f, 0.009331f, 0.011330f, 0.013367f, 0.015434f,
+ 0.017685f, 0.019714f, 0.021515f, 0.024139f, 0.026062f, 0.028763f, 0.031204f, 0.033722f,
+ 0.036163f, 0.039398f, 0.041992f, 0.045624f, 0.048553f, 0.051971f, 0.056000f, 0.059937f,
+ 0.063904f, 0.068054f, 0.072876f, 0.077820f, 0.083374f, 0.088623f, 0.094116f, 0.100830f,
+ 0.107117f, 0.114197f, 0.121399f, 0.129272f, 0.136963f, 0.145630f, 0.154785f, 0.163696f,
+ 0.173828f, 0.184204f, 0.194946f, 0.205933f, 0.217529f, 0.229614f, 0.242676f, 0.255859f,
+ 0.269043f, 0.282471f, 0.296387f, 0.311523f, 0.326172f, 0.341553f, 0.357910f, 0.374756f,
+ 0.391846f, 0.409180f, 0.701660f, 0.721680f, 0.723633f, 0.724609f, 0.723145f, 0.722656f,
+ 0.001008f, 0.003147f, 0.004818f, 0.006882f, 0.008530f, 0.010468f, 0.012390f, 0.013832f,
+ 0.016006f, 0.017899f, 0.019608f, 0.021866f, 0.023849f, 0.025940f, 0.027847f, 0.030350f,
+ 0.032806f, 0.035187f, 0.037994f, 0.040619f, 0.043732f, 0.046875f, 0.050110f, 0.053833f,
+ 0.057617f, 0.061371f, 0.065613f, 0.070068f, 0.074768f, 0.079895f, 0.085144f, 0.090637f,
+ 0.096863f, 0.103149f, 0.110107f, 0.116943f, 0.124634f, 0.132568f, 0.140991f, 0.149536f,
+ 0.159302f, 0.169189f, 0.179443f, 0.189575f, 0.201538f, 0.213013f, 0.225342f, 0.236938f,
+ 0.250244f, 0.264160f, 0.278320f, 0.292236f, 0.307617f, 0.322021f, 0.337891f, 0.354248f,
+ 0.371582f, 0.389160f, 0.689941f, 0.712891f, 0.715820f, 0.715820f, 0.715820f, 0.714355f,
+ 0.001126f, 0.002708f, 0.004486f, 0.006313f, 0.007927f, 0.009659f, 0.011238f, 0.012833f,
+ 0.014435f, 0.015823f, 0.017670f, 0.019485f, 0.021347f, 0.023453f, 0.025101f, 0.027161f,
+ 0.029160f, 0.031525f, 0.033752f, 0.036560f, 0.039154f, 0.041687f, 0.044891f, 0.047943f,
+ 0.051453f, 0.054871f, 0.058655f, 0.062622f, 0.067078f, 0.071411f, 0.076355f, 0.081665f,
+ 0.086792f, 0.092957f, 0.098877f, 0.105713f, 0.112549f, 0.119995f, 0.127563f, 0.135864f,
+ 0.144897f, 0.154297f, 0.164185f, 0.173828f, 0.185059f, 0.196045f, 0.208008f, 0.219849f,
+ 0.232666f, 0.245483f, 0.259033f, 0.273438f, 0.287842f, 0.302734f, 0.318604f, 0.334473f,
+ 0.351318f, 0.369385f, 0.679688f, 0.702637f, 0.707031f, 0.707031f, 0.707031f, 0.705566f,
+ 0.000980f, 0.002733f, 0.004021f, 0.005688f, 0.007084f, 0.008553f, 0.010345f, 0.011513f,
+ 0.012962f, 0.014297f, 0.015823f, 0.017609f, 0.019119f, 0.020721f, 0.022568f, 0.024200f,
+ 0.026291f, 0.028000f, 0.030457f, 0.032410f, 0.034912f, 0.037476f, 0.039734f, 0.042786f,
+ 0.045563f, 0.048920f, 0.052185f, 0.055817f, 0.059662f, 0.063660f, 0.067993f, 0.072632f,
+ 0.077759f, 0.083191f, 0.088623f, 0.094971f, 0.101135f, 0.107849f, 0.115479f, 0.122864f,
+ 0.131592f, 0.139893f, 0.149414f, 0.158447f, 0.169067f, 0.179443f, 0.191040f, 0.202393f,
+ 0.214478f, 0.227539f, 0.240723f, 0.255127f, 0.268555f, 0.283447f, 0.298828f, 0.315186f,
+ 0.331787f, 0.348389f, 0.667480f, 0.693359f, 0.697754f, 0.698730f, 0.698242f, 0.697754f,
+ 0.000870f, 0.002420f, 0.003994f, 0.005165f, 0.006584f, 0.007763f, 0.009209f, 0.010468f,
+ 0.011604f, 0.013336f, 0.013977f, 0.015442f, 0.016830f, 0.018509f, 0.020065f, 0.021606f,
+ 0.023224f, 0.024933f, 0.026672f, 0.028656f, 0.030914f, 0.033112f, 0.035187f, 0.037689f,
+ 0.040344f, 0.043335f, 0.046234f, 0.049438f, 0.052948f, 0.056427f, 0.060394f, 0.064331f,
+ 0.069031f, 0.073853f, 0.078735f, 0.084412f, 0.090271f, 0.096436f, 0.103455f, 0.110229f,
+ 0.118042f, 0.126099f, 0.134766f, 0.143921f, 0.153198f, 0.163696f, 0.174438f, 0.185913f,
+ 0.197754f, 0.210083f, 0.222778f, 0.235962f, 0.250000f, 0.264648f, 0.279053f, 0.294922f,
+ 0.311279f, 0.328613f, 0.655273f, 0.684082f, 0.688477f, 0.689941f, 0.689941f, 0.689941f,
+ 0.000790f, 0.002153f, 0.003576f, 0.004726f, 0.005966f, 0.007172f, 0.008186f, 0.009453f,
+ 0.010521f, 0.011482f, 0.012772f, 0.013771f, 0.015144f, 0.016434f, 0.017792f, 0.019226f,
+ 0.020355f, 0.022049f, 0.023666f, 0.025375f, 0.027145f, 0.029297f, 0.030975f, 0.033142f,
+ 0.035339f, 0.037964f, 0.040405f, 0.043365f, 0.046478f, 0.049744f, 0.053101f, 0.057068f,
+ 0.060944f, 0.065063f, 0.069763f, 0.074646f, 0.079956f, 0.085938f, 0.091675f, 0.098083f,
+ 0.105164f, 0.112732f, 0.121033f, 0.129395f, 0.138428f, 0.148560f, 0.158325f, 0.169067f,
+ 0.180664f, 0.192139f, 0.205078f, 0.217529f, 0.231934f, 0.246094f, 0.260010f, 0.275391f,
+ 0.292236f, 0.309570f, 0.644043f, 0.673340f, 0.678711f, 0.680664f, 0.680664f, 0.680176f,
+ 0.000538f, 0.002022f, 0.003185f, 0.004456f, 0.005360f, 0.006321f, 0.007286f, 0.008484f,
+ 0.009422f, 0.010185f, 0.011177f, 0.012283f, 0.013191f, 0.014435f, 0.015587f, 0.016769f,
+ 0.017914f, 0.019302f, 0.020584f, 0.022171f, 0.023819f, 0.025391f, 0.027222f, 0.028992f,
+ 0.030914f, 0.033234f, 0.035461f, 0.037903f, 0.040649f, 0.043396f, 0.046326f, 0.049561f,
+ 0.053131f, 0.056946f, 0.061279f, 0.065613f, 0.070374f, 0.075439f, 0.080811f, 0.086731f,
+ 0.093140f, 0.100037f, 0.107544f, 0.115662f, 0.124023f, 0.132935f, 0.143066f, 0.153320f,
+ 0.163696f, 0.175415f, 0.187012f, 0.200195f, 0.213013f, 0.227173f, 0.241455f, 0.256592f,
+ 0.272461f, 0.288330f, 0.632812f, 0.663574f, 0.669434f, 0.670898f, 0.671387f, 0.671875f,
+ 0.000686f, 0.001864f, 0.002884f, 0.003883f, 0.004829f, 0.005592f, 0.006504f, 0.007454f,
+ 0.008064f, 0.008995f, 0.009850f, 0.010948f, 0.011711f, 0.012581f, 0.013763f, 0.014618f,
+ 0.015701f, 0.016953f, 0.018112f, 0.019180f, 0.020691f, 0.021973f, 0.023560f, 0.025192f,
+ 0.026962f, 0.028717f, 0.030624f, 0.032959f, 0.035004f, 0.037567f, 0.040314f, 0.043121f,
+ 0.046204f, 0.049713f, 0.053284f, 0.057129f, 0.061157f, 0.065796f, 0.071167f, 0.076477f,
+ 0.082214f, 0.088379f, 0.095276f, 0.102600f, 0.110596f, 0.118652f, 0.127808f, 0.137817f,
+ 0.147705f, 0.158569f, 0.170166f, 0.182251f, 0.195068f, 0.208008f, 0.222656f, 0.237671f,
+ 0.252686f, 0.269287f, 0.620605f, 0.653320f, 0.659180f, 0.661621f, 0.663086f, 0.663574f,
+ 0.000782f, 0.001828f, 0.002949f, 0.003487f, 0.004421f, 0.005032f, 0.005878f, 0.006557f,
+ 0.007332f, 0.008110f, 0.008591f, 0.009537f, 0.010094f, 0.011147f, 0.011864f, 0.012779f,
+ 0.013573f, 0.014549f, 0.015625f, 0.016846f, 0.017822f, 0.018936f, 0.020279f, 0.021729f,
+ 0.023117f, 0.024704f, 0.026505f, 0.028183f, 0.030289f, 0.032349f, 0.034546f, 0.037109f,
+ 0.039703f, 0.042786f, 0.045837f, 0.049133f, 0.053009f, 0.056763f, 0.061584f, 0.066284f,
+ 0.071411f, 0.076843f, 0.083191f, 0.089722f, 0.097290f, 0.104919f, 0.113647f, 0.122498f,
+ 0.132324f, 0.142578f, 0.153809f, 0.164917f, 0.177612f, 0.190430f, 0.203857f, 0.218506f,
+ 0.233887f, 0.249390f, 0.606934f, 0.642578f, 0.649414f, 0.653320f, 0.652832f, 0.654785f,
+ 0.000604f, 0.001636f, 0.002550f, 0.003180f, 0.003799f, 0.004498f, 0.005051f, 0.005573f,
+ 0.006325f, 0.006836f, 0.007607f, 0.008087f, 0.008820f, 0.009483f, 0.010132f, 0.010918f,
+ 0.011665f, 0.012527f, 0.013535f, 0.014297f, 0.015251f, 0.016190f, 0.017288f, 0.018433f,
+ 0.019791f, 0.021133f, 0.022400f, 0.023865f, 0.025742f, 0.027664f, 0.029373f, 0.031677f,
+ 0.034027f, 0.036255f, 0.039032f, 0.042023f, 0.045197f, 0.048798f, 0.052643f, 0.056824f,
+ 0.061493f, 0.066467f, 0.072327f, 0.078308f, 0.084473f, 0.091858f, 0.099609f, 0.108032f,
+ 0.117249f, 0.126831f, 0.137451f, 0.148193f, 0.160034f, 0.172729f, 0.186035f, 0.199829f,
+ 0.214722f, 0.229980f, 0.596680f, 0.632812f, 0.638672f, 0.642578f, 0.644531f, 0.645020f,
+ 0.000447f, 0.001384f, 0.001986f, 0.002697f, 0.003225f, 0.003828f, 0.004501f, 0.005009f,
+ 0.005459f, 0.006027f, 0.006474f, 0.006935f, 0.007591f, 0.008217f, 0.008644f, 0.009308f,
+ 0.010025f, 0.010498f, 0.011330f, 0.012100f, 0.012909f, 0.013924f, 0.014618f, 0.015610f,
+ 0.016739f, 0.017807f, 0.019043f, 0.020340f, 0.021622f, 0.023178f, 0.024979f, 0.026520f,
+ 0.028366f, 0.030640f, 0.032959f, 0.035492f, 0.038239f, 0.041260f, 0.044495f, 0.048340f,
+ 0.052399f, 0.056732f, 0.061768f, 0.067017f, 0.072754f, 0.079224f, 0.086304f, 0.093994f,
+ 0.102478f, 0.111511f, 0.121521f, 0.132080f, 0.143311f, 0.155518f, 0.168213f, 0.181763f,
+ 0.196411f, 0.211548f, 0.583008f, 0.621094f, 0.629395f, 0.632324f, 0.634766f, 0.635742f,
+ 0.000375f, 0.001324f, 0.001728f, 0.002466f, 0.002872f, 0.003384f, 0.003685f, 0.004185f,
+ 0.004845f, 0.005184f, 0.005444f, 0.006130f, 0.006401f, 0.006844f, 0.007446f, 0.007957f,
+ 0.008636f, 0.008965f, 0.009659f, 0.010139f, 0.010971f, 0.011742f, 0.012497f, 0.013138f,
+ 0.014099f, 0.014992f, 0.015900f, 0.017166f, 0.018143f, 0.019485f, 0.020676f, 0.022156f,
+ 0.023697f, 0.025528f, 0.027374f, 0.029556f, 0.031921f, 0.034424f, 0.037445f, 0.040375f,
+ 0.044067f, 0.047577f, 0.052155f, 0.056824f, 0.062042f, 0.067688f, 0.074158f, 0.081055f,
+ 0.088745f, 0.097351f, 0.106323f, 0.116455f, 0.127075f, 0.138672f, 0.151123f, 0.164062f,
+ 0.177856f, 0.192871f, 0.570801f, 0.610840f, 0.619629f, 0.623047f, 0.625488f, 0.625977f,
+ 0.000432f, 0.000921f, 0.001664f, 0.002056f, 0.002697f, 0.003061f, 0.003326f, 0.003757f,
+ 0.004044f, 0.004379f, 0.004761f, 0.004948f, 0.005463f, 0.005791f, 0.006199f, 0.006752f,
+ 0.007229f, 0.007526f, 0.008156f, 0.008621f, 0.009193f, 0.009712f, 0.010330f, 0.010994f,
+ 0.011688f, 0.012466f, 0.013374f, 0.014153f, 0.015099f, 0.016083f, 0.017212f, 0.018250f,
+ 0.019623f, 0.021210f, 0.022614f, 0.024445f, 0.026321f, 0.028351f, 0.030762f, 0.033325f,
+ 0.036377f, 0.039642f, 0.043304f, 0.047485f, 0.051880f, 0.056885f, 0.062469f, 0.068542f,
+ 0.075623f, 0.083374f, 0.091919f, 0.101135f, 0.111389f, 0.122559f, 0.134277f, 0.146606f,
+ 0.160278f, 0.174683f, 0.557617f, 0.600098f, 0.609375f, 0.612793f, 0.615723f, 0.616699f,
+ 0.000255f, 0.000997f, 0.001393f, 0.001908f, 0.002239f, 0.002512f, 0.002720f, 0.003166f,
+ 0.003283f, 0.003616f, 0.003866f, 0.004223f, 0.004597f, 0.004795f, 0.005127f, 0.005573f,
+ 0.005939f, 0.006359f, 0.006657f, 0.007133f, 0.007687f, 0.008041f, 0.008545f, 0.009087f,
+ 0.009636f, 0.010300f, 0.010910f, 0.011757f, 0.012489f, 0.013313f, 0.014153f, 0.014954f,
+ 0.016037f, 0.017258f, 0.018555f, 0.019867f, 0.021530f, 0.023239f, 0.025055f, 0.027252f,
+ 0.029663f, 0.032379f, 0.035339f, 0.038666f, 0.042664f, 0.047058f, 0.051849f, 0.057465f,
+ 0.063416f, 0.070557f, 0.078369f, 0.086731f, 0.096313f, 0.106384f, 0.117798f, 0.129761f,
+ 0.143311f, 0.156982f, 0.544922f, 0.588867f, 0.599121f, 0.602539f, 0.605469f, 0.606445f,
+ 0.000353f, 0.000879f, 0.001276f, 0.001613f, 0.001785f, 0.002075f, 0.002300f, 0.002501f,
+ 0.002808f, 0.003010f, 0.003283f, 0.003487f, 0.003714f, 0.003967f, 0.004269f, 0.004597f,
+ 0.004837f, 0.005230f, 0.005512f, 0.005878f, 0.006203f, 0.006626f, 0.007030f, 0.007519f,
+ 0.007866f, 0.008354f, 0.009010f, 0.009468f, 0.010017f, 0.010765f, 0.011444f, 0.012291f,
+ 0.013100f, 0.014030f, 0.015030f, 0.016098f, 0.017441f, 0.018646f, 0.020157f, 0.021912f,
+ 0.023804f, 0.026047f, 0.028488f, 0.031342f, 0.034424f, 0.037994f, 0.042206f, 0.046997f,
+ 0.052338f, 0.058533f, 0.065369f, 0.073364f, 0.081787f, 0.091492f, 0.102356f, 0.113647f,
+ 0.126343f, 0.139526f, 0.531250f, 0.579102f, 0.587891f, 0.592773f, 0.595703f, 0.596680f,
+ 0.000295f, 0.000784f, 0.000912f, 0.001261f, 0.001517f, 0.001761f, 0.001893f, 0.002113f,
+ 0.002211f, 0.002432f, 0.002676f, 0.002861f, 0.002993f, 0.003294f, 0.003479f, 0.003700f,
+ 0.003933f, 0.004242f, 0.004452f, 0.004745f, 0.004974f, 0.005428f, 0.005642f, 0.006081f,
+ 0.006401f, 0.006817f, 0.007240f, 0.007641f, 0.008209f, 0.008667f, 0.009361f, 0.009720f,
+ 0.010506f, 0.011261f, 0.012024f, 0.012794f, 0.013840f, 0.014893f, 0.016113f, 0.017395f,
+ 0.018860f, 0.020493f, 0.022446f, 0.024658f, 0.027283f, 0.030228f, 0.033691f, 0.037659f,
+ 0.042145f, 0.047546f, 0.053467f, 0.060547f, 0.068359f, 0.077332f, 0.087158f, 0.098145f,
+ 0.109741f, 0.123230f, 0.517090f, 0.566895f, 0.576660f, 0.581543f, 0.584961f, 0.587402f,
+ 0.000247f, 0.000702f, 0.000849f, 0.001033f, 0.001304f, 0.001416f, 0.001576f, 0.001754f,
+ 0.001860f, 0.001953f, 0.002104f, 0.002327f, 0.002419f, 0.002651f, 0.002785f, 0.003014f,
+ 0.003134f, 0.003315f, 0.003584f, 0.003813f, 0.004078f, 0.004295f, 0.004555f, 0.004784f,
+ 0.005013f, 0.005329f, 0.005669f, 0.006069f, 0.006439f, 0.006821f, 0.007381f, 0.007797f,
+ 0.008301f, 0.008812f, 0.009430f, 0.010139f, 0.010948f, 0.011642f, 0.012573f, 0.013664f,
+ 0.014671f, 0.016052f, 0.017502f, 0.019135f, 0.021255f, 0.023438f, 0.026199f, 0.029312f,
+ 0.033203f, 0.037476f, 0.042725f, 0.048828f, 0.055695f, 0.063721f, 0.072937f, 0.082947f,
+ 0.094666f, 0.107117f, 0.504883f, 0.555664f, 0.566406f, 0.572754f, 0.574707f, 0.577148f,
+ 0.000217f, 0.000516f, 0.000750f, 0.000898f, 0.001011f, 0.001117f, 0.001203f, 0.001307f,
+ 0.001470f, 0.001604f, 0.001659f, 0.001750f, 0.001945f, 0.002121f, 0.002249f, 0.002316f,
+ 0.002478f, 0.002581f, 0.002832f, 0.003000f, 0.003164f, 0.003334f, 0.003593f, 0.003784f,
+ 0.003990f, 0.004196f, 0.004440f, 0.004673f, 0.005035f, 0.005329f, 0.005642f, 0.005981f,
+ 0.006462f, 0.006916f, 0.007313f, 0.007805f, 0.008377f, 0.008987f, 0.009727f, 0.010521f,
+ 0.011314f, 0.012421f, 0.013466f, 0.014755f, 0.016235f, 0.017914f, 0.019913f, 0.022461f,
+ 0.025330f, 0.028778f, 0.033081f, 0.038239f, 0.044189f, 0.051422f, 0.059662f, 0.069336f,
+ 0.080200f, 0.091980f, 0.492676f, 0.543945f, 0.555664f, 0.561035f, 0.564453f, 0.566406f,
+ 0.000131f, 0.000355f, 0.000605f, 0.000759f, 0.000832f, 0.000904f, 0.001018f, 0.000975f,
+ 0.001144f, 0.001235f, 0.001336f, 0.001447f, 0.001518f, 0.001620f, 0.001668f, 0.001835f,
+ 0.001901f, 0.002045f, 0.002188f, 0.002270f, 0.002424f, 0.002577f, 0.002707f, 0.002893f,
+ 0.003002f, 0.003223f, 0.003407f, 0.003572f, 0.003851f, 0.004017f, 0.004391f, 0.004608f,
+ 0.004833f, 0.005203f, 0.005497f, 0.005886f, 0.006351f, 0.006771f, 0.007278f, 0.007858f,
+ 0.008560f, 0.009315f, 0.010086f, 0.011078f, 0.012222f, 0.013443f, 0.015022f, 0.016769f,
+ 0.018967f, 0.021591f, 0.024780f, 0.028931f, 0.033875f, 0.039734f, 0.047241f, 0.056122f,
+ 0.066101f, 0.077637f, 0.477783f, 0.532715f, 0.544922f, 0.551270f, 0.553711f, 0.555664f,
+ 0.000245f, 0.000303f, 0.000473f, 0.000498f, 0.000544f, 0.000707f, 0.000700f, 0.000767f,
+ 0.000802f, 0.000892f, 0.001021f, 0.001086f, 0.001140f, 0.001260f, 0.001303f, 0.001325f,
+ 0.001462f, 0.001553f, 0.001603f, 0.001746f, 0.001816f, 0.001904f, 0.002043f, 0.002127f,
+ 0.002254f, 0.002356f, 0.002548f, 0.002672f, 0.002851f, 0.003092f, 0.003265f, 0.003374f,
+ 0.003647f, 0.003891f, 0.004097f, 0.004360f, 0.004669f, 0.004997f, 0.005390f, 0.005810f,
+ 0.006226f, 0.006756f, 0.007450f, 0.008095f, 0.008934f, 0.009827f, 0.010902f, 0.012268f,
+ 0.013840f, 0.015701f, 0.018036f, 0.021072f, 0.024948f, 0.029800f, 0.035980f, 0.043945f,
+ 0.053345f, 0.063843f, 0.465576f, 0.520996f, 0.535645f, 0.540039f, 0.543457f, 0.545898f,
+ 0.000108f, 0.000275f, 0.000332f, 0.000402f, 0.000462f, 0.000468f, 0.000580f, 0.000522f,
+ 0.000616f, 0.000657f, 0.000758f, 0.000762f, 0.000812f, 0.000870f, 0.000945f, 0.000978f,
+ 0.001054f, 0.001109f, 0.001179f, 0.001213f, 0.001311f, 0.001371f, 0.001473f, 0.001558f,
+ 0.001629f, 0.001718f, 0.001837f, 0.001903f, 0.002016f, 0.002159f, 0.002258f, 0.002478f,
+ 0.002548f, 0.002731f, 0.002909f, 0.003086f, 0.003317f, 0.003580f, 0.003885f, 0.004116f,
+ 0.004421f, 0.004818f, 0.005264f, 0.005745f, 0.006294f, 0.006966f, 0.007748f, 0.008667f,
+ 0.009766f, 0.011086f, 0.012787f, 0.014908f, 0.017746f, 0.021271f, 0.026382f, 0.032990f,
+ 0.041199f, 0.051239f, 0.452393f, 0.509277f, 0.522461f, 0.529297f, 0.533203f, 0.535156f,
+ 0.000016f, 0.000143f, 0.000244f, 0.000315f, 0.000309f, 0.000391f, 0.000344f, 0.000402f,
+ 0.000429f, 0.000517f, 0.000522f, 0.000526f, 0.000546f, 0.000606f, 0.000628f, 0.000705f,
+ 0.000692f, 0.000781f, 0.000837f, 0.000868f, 0.000923f, 0.000969f, 0.001013f, 0.001070f,
+ 0.001142f, 0.001186f, 0.001273f, 0.001326f, 0.001397f, 0.001534f, 0.001561f, 0.001685f,
+ 0.001775f, 0.001873f, 0.002024f, 0.002153f, 0.002272f, 0.002443f, 0.002611f, 0.002800f,
+ 0.003014f, 0.003250f, 0.003529f, 0.003868f, 0.004227f, 0.004692f, 0.005192f, 0.005836f,
+ 0.006603f, 0.007587f, 0.008751f, 0.010193f, 0.012001f, 0.014610f, 0.018219f, 0.023392f,
+ 0.030594f, 0.039795f, 0.437744f, 0.498291f, 0.512207f, 0.517578f, 0.521484f, 0.525391f,
+ 0.000102f, 0.000186f, 0.000171f, 0.000181f, 0.000227f, 0.000229f, 0.000231f, 0.000278f,
+ 0.000293f, 0.000304f, 0.000314f, 0.000375f, 0.000365f, 0.000411f, 0.000446f, 0.000457f,
+ 0.000496f, 0.000513f, 0.000533f, 0.000554f, 0.000603f, 0.000622f, 0.000669f, 0.000708f,
+ 0.000757f, 0.000789f, 0.000843f, 0.000875f, 0.000925f, 0.000964f, 0.001037f, 0.001094f,
+ 0.001172f, 0.001243f, 0.001324f, 0.001373f, 0.001497f, 0.001570f, 0.001712f, 0.001829f,
+ 0.001947f, 0.002123f, 0.002291f, 0.002472f, 0.002703f, 0.003008f, 0.003342f, 0.003757f,
+ 0.004204f, 0.004810f, 0.005539f, 0.006554f, 0.007828f, 0.009537f, 0.011894f, 0.015442f,
+ 0.021072f, 0.029282f, 0.424561f, 0.486084f, 0.500488f, 0.506836f, 0.512207f, 0.514648f,
+ 0.000014f, 0.000127f, 0.000112f, 0.000109f, 0.000143f, 0.000165f, 0.000141f, 0.000180f,
+ 0.000185f, 0.000191f, 0.000196f, 0.000203f, 0.000233f, 0.000252f, 0.000260f, 0.000274f,
+ 0.000288f, 0.000314f, 0.000328f, 0.000363f, 0.000362f, 0.000374f, 0.000400f, 0.000436f,
+ 0.000464f, 0.000501f, 0.000504f, 0.000521f, 0.000563f, 0.000593f, 0.000635f, 0.000671f,
+ 0.000712f, 0.000740f, 0.000800f, 0.000837f, 0.000892f, 0.000955f, 0.001030f, 0.001092f,
+ 0.001167f, 0.001270f, 0.001369f, 0.001491f, 0.001626f, 0.001769f, 0.001993f, 0.002209f,
+ 0.002523f, 0.002863f, 0.003325f, 0.003880f, 0.004715f, 0.005764f, 0.007320f, 0.009468f,
+ 0.013344f, 0.020187f, 0.410645f, 0.473877f, 0.489258f, 0.496826f, 0.500488f, 0.503906f,
+ 0.000103f, 0.000078f, 0.000067f, 0.000065f, 0.000086f, 0.000085f, 0.000101f, 0.000106f,
+ 0.000106f, 0.000107f, 0.000115f, 0.000133f, 0.000118f, 0.000133f, 0.000154f, 0.000150f,
+ 0.000167f, 0.000177f, 0.000180f, 0.000190f, 0.000207f, 0.000213f, 0.000228f, 0.000238f,
+ 0.000267f, 0.000277f, 0.000287f, 0.000298f, 0.000313f, 0.000325f, 0.000347f, 0.000375f,
+ 0.000393f, 0.000405f, 0.000440f, 0.000463f, 0.000486f, 0.000527f, 0.000562f, 0.000599f,
+ 0.000639f, 0.000688f, 0.000757f, 0.000807f, 0.000879f, 0.000961f, 0.001059f, 0.001180f,
+ 0.001342f, 0.001533f, 0.001762f, 0.002102f, 0.002502f, 0.003128f, 0.004028f, 0.005379f,
+ 0.007591f, 0.012505f, 0.397217f, 0.462891f, 0.478760f, 0.485840f, 0.490479f, 0.492676f,
+ 0.000087f, 0.000063f, 0.000054f, 0.000048f, 0.000047f, 0.000044f, 0.000046f, 0.000047f,
+ 0.000047f, 0.000060f, 0.000053f, 0.000056f, 0.000072f, 0.000060f, 0.000064f, 0.000069f,
+ 0.000078f, 0.000085f, 0.000084f, 0.000090f, 0.000094f, 0.000102f, 0.000105f, 0.000111f,
+ 0.000116f, 0.000126f, 0.000132f, 0.000150f, 0.000147f, 0.000158f, 0.000167f, 0.000178f,
+ 0.000185f, 0.000192f, 0.000211f, 0.000216f, 0.000226f, 0.000246f, 0.000265f, 0.000284f,
+ 0.000299f, 0.000325f, 0.000349f, 0.000381f, 0.000415f, 0.000448f, 0.000490f, 0.000544f,
+ 0.000612f, 0.000694f, 0.000798f, 0.000943f, 0.001139f, 0.001436f, 0.001870f, 0.002586f,
+ 0.003817f, 0.006474f, 0.383545f, 0.450195f, 0.467041f, 0.474365f, 0.478760f, 0.482422f,
+ 0.000065f, 0.000045f, 0.000037f, 0.000033f, 0.000030f, 0.000028f, 0.000026f, 0.000025f,
+ 0.000024f, 0.000022f, 0.000021f, 0.000025f, 0.000020f, 0.000021f, 0.000025f, 0.000029f,
+ 0.000028f, 0.000031f, 0.000033f, 0.000034f, 0.000036f, 0.000041f, 0.000045f, 0.000040f,
+ 0.000045f, 0.000049f, 0.000051f, 0.000048f, 0.000055f, 0.000057f, 0.000061f, 0.000066f,
+ 0.000072f, 0.000068f, 0.000073f, 0.000078f, 0.000087f, 0.000089f, 0.000097f, 0.000104f,
+ 0.000113f, 0.000115f, 0.000128f, 0.000137f, 0.000148f, 0.000160f, 0.000174f, 0.000194f,
+ 0.000221f, 0.000248f, 0.000283f, 0.000324f, 0.000396f, 0.000496f, 0.000657f, 0.000928f,
+ 0.001479f, 0.002684f, 0.371094f, 0.438477f, 0.455078f, 0.463867f, 0.468750f, 0.471191f,
+ 0.000029f, 0.000019f, 0.000016f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
+ 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f,
+ 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000007f,
+ 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000013f,
+ 0.000015f, 0.000017f, 0.000018f, 0.000018f, 0.000020f, 0.000019f, 0.000021f, 0.000024f,
+ 0.000024f, 0.000026f, 0.000028f, 0.000031f, 0.000031f, 0.000035f, 0.000040f, 0.000041f,
+ 0.000045f, 0.000052f, 0.000059f, 0.000071f, 0.000083f, 0.000099f, 0.000132f, 0.000188f,
+ 0.000315f, 0.000712f, 0.356934f, 0.426514f, 0.444824f, 0.452637f, 0.457520f, 0.460938f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000006f,
+ 0.000010f, 0.000027f, 0.343750f, 0.414795f, 0.433105f, 0.441895f, 0.446289f, 0.449951f,
+ },
+ {
+ 0.012436f, 0.037598f, 0.062805f, 0.087891f, 0.113037f, 0.137329f, 0.161621f, 0.185425f,
+ 0.209717f, 0.232544f, 0.255371f, 0.278076f, 0.300049f, 0.321289f, 0.343506f, 0.364014f,
+ 0.385010f, 0.404785f, 0.424561f, 0.444824f, 0.463623f, 0.482422f, 0.501465f, 0.520020f,
+ 0.537598f, 0.554688f, 0.572266f, 0.589355f, 0.605957f, 0.622070f, 0.639648f, 0.655273f,
+ 0.670410f, 0.685547f, 0.700684f, 0.715332f, 0.730469f, 0.744629f, 0.758301f, 0.771973f,
+ 0.785156f, 0.799316f, 0.812012f, 0.825684f, 0.837891f, 0.850586f, 0.863281f, 0.875000f,
+ 0.887207f, 0.898926f, 0.910156f, 0.921387f, 0.933105f, 0.944336f, 0.954102f, 0.964844f,
+ 0.976074f, 0.985840f, 0.978027f, 0.947266f, 0.925781f, 0.907715f, 0.892090f, 0.877930f,
+ 0.011276f, 0.034546f, 0.058289f, 0.082031f, 0.105469f, 0.128662f, 0.152344f, 0.174805f,
+ 0.197876f, 0.219604f, 0.241455f, 0.263672f, 0.284912f, 0.306152f, 0.326416f, 0.347168f,
+ 0.366699f, 0.387695f, 0.406494f, 0.426025f, 0.444824f, 0.463379f, 0.481934f, 0.500000f,
+ 0.518066f, 0.535645f, 0.552246f, 0.569824f, 0.586426f, 0.603027f, 0.619141f, 0.634766f,
+ 0.650391f, 0.666016f, 0.681152f, 0.695801f, 0.710938f, 0.725586f, 0.739258f, 0.753906f,
+ 0.768066f, 0.781250f, 0.794922f, 0.807617f, 0.821289f, 0.833496f, 0.846191f, 0.858398f,
+ 0.870605f, 0.882812f, 0.894531f, 0.906250f, 0.917480f, 0.929199f, 0.939453f, 0.951660f,
+ 0.961426f, 0.972656f, 0.971680f, 0.942871f, 0.921875f, 0.904785f, 0.889160f, 0.875977f,
+ 0.010628f, 0.032288f, 0.054932f, 0.076172f, 0.099060f, 0.121216f, 0.142700f, 0.164795f,
+ 0.186279f, 0.207642f, 0.229248f, 0.249756f, 0.269531f, 0.291016f, 0.310791f, 0.331543f,
+ 0.349609f, 0.369385f, 0.388916f, 0.409180f, 0.427246f, 0.444824f, 0.463135f, 0.480713f,
+ 0.499512f, 0.516602f, 0.533203f, 0.550293f, 0.567383f, 0.583496f, 0.599609f, 0.615723f,
+ 0.630859f, 0.646973f, 0.661621f, 0.677246f, 0.691895f, 0.705566f, 0.720703f, 0.735352f,
+ 0.749512f, 0.763184f, 0.776367f, 0.790039f, 0.803223f, 0.816406f, 0.828613f, 0.842285f,
+ 0.854492f, 0.867676f, 0.878418f, 0.890137f, 0.902832f, 0.913086f, 0.925293f, 0.936035f,
+ 0.947754f, 0.958008f, 0.964844f, 0.937500f, 0.917480f, 0.901367f, 0.886719f, 0.873535f,
+ 0.009926f, 0.030167f, 0.050995f, 0.071594f, 0.092346f, 0.113892f, 0.134399f, 0.154663f,
+ 0.175537f, 0.195679f, 0.216309f, 0.235840f, 0.256104f, 0.276611f, 0.295654f, 0.314453f,
+ 0.333496f, 0.353027f, 0.370850f, 0.389404f, 0.408936f, 0.427490f, 0.445312f, 0.462891f,
+ 0.480225f, 0.497803f, 0.513672f, 0.531250f, 0.547363f, 0.563965f, 0.580078f, 0.597168f,
+ 0.612305f, 0.627930f, 0.642578f, 0.658691f, 0.673340f, 0.687500f, 0.702637f, 0.717285f,
+ 0.731445f, 0.744629f, 0.758301f, 0.772461f, 0.786133f, 0.799316f, 0.811523f, 0.824707f,
+ 0.837891f, 0.849121f, 0.861816f, 0.874023f, 0.887207f, 0.898438f, 0.910156f, 0.920898f,
+ 0.932617f, 0.943848f, 0.958008f, 0.932129f, 0.913086f, 0.897461f, 0.883301f, 0.871094f,
+ 0.009178f, 0.028107f, 0.047729f, 0.066895f, 0.086182f, 0.106384f, 0.125977f, 0.145386f,
+ 0.165527f, 0.184937f, 0.203857f, 0.224121f, 0.242676f, 0.261475f, 0.281006f, 0.300049f,
+ 0.318604f, 0.336426f, 0.355469f, 0.372314f, 0.391113f, 0.409424f, 0.426514f, 0.444092f,
+ 0.461426f, 0.477783f, 0.495850f, 0.512207f, 0.528809f, 0.544434f, 0.561035f, 0.576660f,
+ 0.593262f, 0.608398f, 0.623047f, 0.638184f, 0.655273f, 0.668945f, 0.682617f, 0.697754f,
+ 0.712402f, 0.726562f, 0.740234f, 0.753906f, 0.768066f, 0.781250f, 0.794434f, 0.807617f,
+ 0.820312f, 0.833496f, 0.845215f, 0.858398f, 0.870605f, 0.881836f, 0.894043f, 0.906738f,
+ 0.917480f, 0.928711f, 0.951172f, 0.926758f, 0.909180f, 0.893555f, 0.880859f, 0.868164f,
+ 0.008667f, 0.025986f, 0.044922f, 0.062805f, 0.081421f, 0.099854f, 0.118347f, 0.137085f,
+ 0.155518f, 0.173828f, 0.193115f, 0.211304f, 0.229858f, 0.248413f, 0.266602f, 0.285400f,
+ 0.303223f, 0.321045f, 0.339111f, 0.357178f, 0.373779f, 0.391357f, 0.409424f, 0.426270f,
+ 0.443115f, 0.460449f, 0.476807f, 0.494141f, 0.510254f, 0.526855f, 0.541992f, 0.559082f,
+ 0.574219f, 0.589355f, 0.605469f, 0.620117f, 0.636230f, 0.649902f, 0.664551f, 0.678711f,
+ 0.693848f, 0.707031f, 0.723145f, 0.736328f, 0.750977f, 0.762695f, 0.776855f, 0.790039f,
+ 0.803223f, 0.816406f, 0.828613f, 0.842285f, 0.853516f, 0.866211f, 0.878906f, 0.890625f,
+ 0.902832f, 0.913574f, 0.944336f, 0.921875f, 0.903809f, 0.889160f, 0.876953f, 0.865234f,
+ 0.008057f, 0.024658f, 0.041321f, 0.058411f, 0.075989f, 0.093811f, 0.110535f, 0.128784f,
+ 0.146729f, 0.164307f, 0.182007f, 0.200073f, 0.217773f, 0.234619f, 0.252930f, 0.271240f,
+ 0.288086f, 0.306152f, 0.322998f, 0.341064f, 0.357910f, 0.374756f, 0.391357f, 0.409180f,
+ 0.425293f, 0.442383f, 0.458496f, 0.475342f, 0.491455f, 0.507324f, 0.523438f, 0.539551f,
+ 0.555176f, 0.570312f, 0.585938f, 0.601074f, 0.616699f, 0.631836f, 0.646484f, 0.660645f,
+ 0.676270f, 0.688477f, 0.704102f, 0.718262f, 0.731445f, 0.745117f, 0.760254f, 0.771484f,
+ 0.785156f, 0.799316f, 0.812500f, 0.824707f, 0.836914f, 0.850098f, 0.862793f, 0.874512f,
+ 0.886719f, 0.898438f, 0.937500f, 0.915527f, 0.899414f, 0.885254f, 0.872559f, 0.861816f,
+ 0.007477f, 0.022919f, 0.038971f, 0.054901f, 0.070801f, 0.087646f, 0.104065f, 0.121155f,
+ 0.137573f, 0.155029f, 0.171875f, 0.188721f, 0.206177f, 0.222778f, 0.240112f, 0.257080f,
+ 0.274170f, 0.290283f, 0.308350f, 0.324463f, 0.342041f, 0.358154f, 0.375488f, 0.391113f,
+ 0.407471f, 0.424561f, 0.440430f, 0.456787f, 0.474121f, 0.489746f, 0.505371f, 0.521484f,
+ 0.536133f, 0.552246f, 0.565918f, 0.582031f, 0.597168f, 0.613281f, 0.626953f, 0.642578f,
+ 0.656738f, 0.670898f, 0.684570f, 0.699219f, 0.712891f, 0.727539f, 0.741211f, 0.754395f,
+ 0.768066f, 0.781738f, 0.794434f, 0.808105f, 0.820312f, 0.833984f, 0.846680f, 0.858887f,
+ 0.871582f, 0.883301f, 0.930176f, 0.910156f, 0.894043f, 0.880371f, 0.868652f, 0.858398f,
+ 0.007023f, 0.021240f, 0.036224f, 0.051300f, 0.066467f, 0.082092f, 0.097900f, 0.113892f,
+ 0.129517f, 0.145752f, 0.161743f, 0.178223f, 0.194702f, 0.210327f, 0.227661f, 0.243408f,
+ 0.260986f, 0.276855f, 0.292725f, 0.309814f, 0.326172f, 0.342041f, 0.358398f, 0.375732f,
+ 0.391113f, 0.406982f, 0.422852f, 0.438965f, 0.454590f, 0.471191f, 0.486816f, 0.502441f,
+ 0.517578f, 0.533203f, 0.548340f, 0.562988f, 0.578613f, 0.593750f, 0.609375f, 0.623535f,
+ 0.638184f, 0.652832f, 0.666992f, 0.680664f, 0.695312f, 0.708984f, 0.722656f, 0.736816f,
+ 0.750000f, 0.764160f, 0.777344f, 0.789551f, 0.803223f, 0.816895f, 0.830078f, 0.842773f,
+ 0.854980f, 0.868652f, 0.922852f, 0.904297f, 0.889160f, 0.875977f, 0.864746f, 0.854492f,
+ 0.006458f, 0.019913f, 0.033691f, 0.048126f, 0.062744f, 0.077026f, 0.092224f, 0.106567f,
+ 0.122192f, 0.137207f, 0.152222f, 0.167725f, 0.183838f, 0.199951f, 0.215088f, 0.231323f,
+ 0.246826f, 0.262695f, 0.279053f, 0.294678f, 0.310547f, 0.326172f, 0.342041f, 0.358887f,
+ 0.374268f, 0.389893f, 0.405518f, 0.421143f, 0.437012f, 0.452637f, 0.467773f, 0.483643f,
+ 0.499512f, 0.513672f, 0.529785f, 0.545410f, 0.560059f, 0.575195f, 0.590332f, 0.604980f,
+ 0.618652f, 0.634277f, 0.648438f, 0.662598f, 0.676270f, 0.690918f, 0.704102f, 0.718750f,
+ 0.732422f, 0.745605f, 0.760254f, 0.773438f, 0.786621f, 0.801270f, 0.812988f, 0.826172f,
+ 0.839844f, 0.851562f, 0.915527f, 0.897949f, 0.883789f, 0.871094f, 0.860352f, 0.850586f,
+ 0.006077f, 0.018921f, 0.031464f, 0.045258f, 0.058411f, 0.072144f, 0.085999f, 0.100220f,
+ 0.114258f, 0.129028f, 0.143677f, 0.158691f, 0.173584f, 0.188477f, 0.203247f, 0.219238f,
+ 0.234497f, 0.249634f, 0.264893f, 0.280273f, 0.295410f, 0.310791f, 0.326904f, 0.342285f,
+ 0.357910f, 0.373535f, 0.388428f, 0.404053f, 0.420166f, 0.435303f, 0.450195f, 0.465332f,
+ 0.481201f, 0.496338f, 0.511230f, 0.525879f, 0.540527f, 0.556641f, 0.570312f, 0.585938f,
+ 0.600098f, 0.614746f, 0.629883f, 0.644531f, 0.657715f, 0.672363f, 0.687012f, 0.700684f,
+ 0.714355f, 0.729004f, 0.742188f, 0.755371f, 0.769531f, 0.782227f, 0.796875f, 0.810059f,
+ 0.823242f, 0.836426f, 0.907715f, 0.891602f, 0.877930f, 0.866211f, 0.855957f, 0.846680f,
+ 0.005596f, 0.017654f, 0.029587f, 0.041840f, 0.055115f, 0.067871f, 0.080566f, 0.093994f,
+ 0.107361f, 0.120911f, 0.134766f, 0.149414f, 0.163452f, 0.177979f, 0.192261f, 0.206787f,
+ 0.221191f, 0.236816f, 0.250732f, 0.266113f, 0.281250f, 0.295898f, 0.311279f, 0.326904f,
+ 0.342041f, 0.356201f, 0.371826f, 0.387451f, 0.402344f, 0.417236f, 0.432373f, 0.447266f,
+ 0.462891f, 0.477539f, 0.492432f, 0.506836f, 0.522949f, 0.536621f, 0.551758f, 0.566895f,
+ 0.582031f, 0.596191f, 0.610352f, 0.625488f, 0.640625f, 0.653320f, 0.668457f, 0.682617f,
+ 0.696777f, 0.710449f, 0.724609f, 0.739258f, 0.751465f, 0.765625f, 0.780273f, 0.792480f,
+ 0.806152f, 0.820801f, 0.899902f, 0.885742f, 0.872070f, 0.861328f, 0.851562f, 0.842285f,
+ 0.005451f, 0.016479f, 0.028259f, 0.039856f, 0.051331f, 0.063416f, 0.075867f, 0.088196f,
+ 0.100952f, 0.113770f, 0.126953f, 0.140747f, 0.153564f, 0.167847f, 0.181519f, 0.195679f,
+ 0.210083f, 0.223633f, 0.237427f, 0.252197f, 0.267334f, 0.281738f, 0.296143f, 0.311035f,
+ 0.325928f, 0.340332f, 0.355469f, 0.370361f, 0.385010f, 0.400635f, 0.415039f, 0.429688f,
+ 0.444092f, 0.459717f, 0.474121f, 0.489258f, 0.503906f, 0.519043f, 0.533203f, 0.548828f,
+ 0.562012f, 0.577637f, 0.591797f, 0.606445f, 0.621582f, 0.635742f, 0.650391f, 0.664551f,
+ 0.678223f, 0.692871f, 0.706055f, 0.721191f, 0.733887f, 0.747559f, 0.762207f, 0.775879f,
+ 0.791016f, 0.804199f, 0.892090f, 0.878906f, 0.866699f, 0.855957f, 0.846191f, 0.837891f,
+ 0.004963f, 0.015343f, 0.026169f, 0.037079f, 0.047943f, 0.059570f, 0.070801f, 0.083008f,
+ 0.095093f, 0.106750f, 0.119507f, 0.132080f, 0.145142f, 0.158569f, 0.171143f, 0.184692f,
+ 0.198730f, 0.211792f, 0.225830f, 0.239380f, 0.253662f, 0.267578f, 0.281738f, 0.295898f,
+ 0.309814f, 0.324219f, 0.340088f, 0.353760f, 0.368164f, 0.383057f, 0.397705f, 0.412842f,
+ 0.426758f, 0.441406f, 0.456787f, 0.470947f, 0.485352f, 0.500000f, 0.515137f, 0.529785f,
+ 0.543945f, 0.559082f, 0.572754f, 0.588379f, 0.602539f, 0.616699f, 0.631348f, 0.645996f,
+ 0.659180f, 0.674805f, 0.689453f, 0.703125f, 0.716797f, 0.729980f, 0.744629f, 0.758789f,
+ 0.772461f, 0.786621f, 0.883789f, 0.872070f, 0.860840f, 0.850586f, 0.841309f, 0.833008f,
+ 0.004726f, 0.014549f, 0.024109f, 0.034668f, 0.044708f, 0.055573f, 0.066467f, 0.077820f,
+ 0.088928f, 0.100342f, 0.112000f, 0.124390f, 0.136230f, 0.148804f, 0.161621f, 0.173950f,
+ 0.186768f, 0.200439f, 0.213623f, 0.226074f, 0.239868f, 0.253418f, 0.267090f, 0.281250f,
+ 0.295410f, 0.309570f, 0.323486f, 0.337891f, 0.352295f, 0.365967f, 0.381104f, 0.394775f,
+ 0.409180f, 0.423828f, 0.438477f, 0.452881f, 0.467773f, 0.481689f, 0.496582f, 0.511230f,
+ 0.525391f, 0.539551f, 0.554199f, 0.568848f, 0.583984f, 0.599121f, 0.612305f, 0.627441f,
+ 0.641113f, 0.656250f, 0.669922f, 0.684570f, 0.699219f, 0.713379f, 0.727539f, 0.741699f,
+ 0.755859f, 0.771484f, 0.875488f, 0.865723f, 0.854492f, 0.845215f, 0.836426f, 0.828613f,
+ 0.004452f, 0.013359f, 0.022690f, 0.032745f, 0.042297f, 0.051910f, 0.061920f, 0.072693f,
+ 0.083496f, 0.094177f, 0.105408f, 0.116760f, 0.128174f, 0.140137f, 0.151855f, 0.164185f,
+ 0.176758f, 0.189087f, 0.201660f, 0.214478f, 0.227173f, 0.240356f, 0.253906f, 0.267578f,
+ 0.280273f, 0.294922f, 0.307373f, 0.321045f, 0.336670f, 0.350098f, 0.363770f, 0.378174f,
+ 0.392334f, 0.406006f, 0.420410f, 0.434082f, 0.448975f, 0.463623f, 0.478271f, 0.492676f,
+ 0.506836f, 0.520996f, 0.536133f, 0.550781f, 0.565430f, 0.580078f, 0.593750f, 0.608887f,
+ 0.623047f, 0.638184f, 0.651367f, 0.666016f, 0.681152f, 0.695312f, 0.709473f, 0.723145f,
+ 0.738281f, 0.752930f, 0.867676f, 0.858398f, 0.848633f, 0.839355f, 0.831055f, 0.823730f,
+ 0.004143f, 0.012794f, 0.021713f, 0.030396f, 0.039551f, 0.048645f, 0.058563f, 0.068176f,
+ 0.078308f, 0.088928f, 0.098328f, 0.109924f, 0.120728f, 0.131592f, 0.142944f, 0.154175f,
+ 0.165771f, 0.178223f, 0.190186f, 0.202881f, 0.214844f, 0.227417f, 0.240845f, 0.253906f,
+ 0.265869f, 0.279541f, 0.293213f, 0.305908f, 0.320068f, 0.333496f, 0.347168f, 0.361816f,
+ 0.375000f, 0.389160f, 0.403320f, 0.417236f, 0.431396f, 0.444824f, 0.459473f, 0.473633f,
+ 0.488525f, 0.503418f, 0.517578f, 0.532227f, 0.545410f, 0.560547f, 0.575684f, 0.590332f,
+ 0.604004f, 0.618652f, 0.632812f, 0.647949f, 0.663086f, 0.676758f, 0.691895f, 0.706543f,
+ 0.721191f, 0.735840f, 0.859375f, 0.852539f, 0.842773f, 0.833496f, 0.824707f, 0.818848f,
+ 0.003839f, 0.012062f, 0.020126f, 0.028366f, 0.036774f, 0.045593f, 0.054718f, 0.063416f,
+ 0.073120f, 0.082825f, 0.092957f, 0.102966f, 0.113464f, 0.123535f, 0.134277f, 0.145020f,
+ 0.155762f, 0.167847f, 0.179199f, 0.190796f, 0.202393f, 0.214844f, 0.227417f, 0.239868f,
+ 0.252197f, 0.264648f, 0.277588f, 0.291016f, 0.304199f, 0.317383f, 0.330811f, 0.343750f,
+ 0.357422f, 0.371826f, 0.385254f, 0.399902f, 0.413574f, 0.427246f, 0.441162f, 0.455566f,
+ 0.469971f, 0.484375f, 0.498535f, 0.514160f, 0.527344f, 0.541992f, 0.556152f, 0.570312f,
+ 0.585449f, 0.600098f, 0.614746f, 0.629883f, 0.645508f, 0.658203f, 0.673340f, 0.688477f,
+ 0.703125f, 0.718262f, 0.851074f, 0.844727f, 0.835938f, 0.827637f, 0.820312f, 0.812988f,
+ 0.003786f, 0.011147f, 0.018921f, 0.026550f, 0.034729f, 0.042664f, 0.051117f, 0.060028f,
+ 0.068298f, 0.077454f, 0.086914f, 0.096130f, 0.105835f, 0.115662f, 0.126343f, 0.136475f,
+ 0.146606f, 0.157715f, 0.168457f, 0.180176f, 0.191528f, 0.202759f, 0.215088f, 0.226929f,
+ 0.239014f, 0.251221f, 0.263428f, 0.275391f, 0.289062f, 0.301514f, 0.314941f, 0.328369f,
+ 0.341797f, 0.354736f, 0.367676f, 0.382324f, 0.395264f, 0.409912f, 0.423340f, 0.437012f,
+ 0.451660f, 0.465576f, 0.480469f, 0.494629f, 0.508301f, 0.522949f, 0.538086f, 0.551758f,
+ 0.567383f, 0.582031f, 0.596191f, 0.610840f, 0.625977f, 0.639648f, 0.655273f, 0.670410f,
+ 0.685547f, 0.700684f, 0.842285f, 0.837402f, 0.829590f, 0.821289f, 0.813965f, 0.808105f,
+ 0.003504f, 0.010445f, 0.017609f, 0.025131f, 0.032349f, 0.040314f, 0.047485f, 0.055756f,
+ 0.064026f, 0.072571f, 0.080872f, 0.089661f, 0.099426f, 0.108459f, 0.118286f, 0.127930f,
+ 0.137817f, 0.147583f, 0.158203f, 0.169189f, 0.180908f, 0.191040f, 0.203003f, 0.214111f,
+ 0.225708f, 0.237549f, 0.249023f, 0.261475f, 0.273926f, 0.286865f, 0.299316f, 0.311768f,
+ 0.325684f, 0.338623f, 0.351562f, 0.364746f, 0.378418f, 0.392578f, 0.405518f, 0.419678f,
+ 0.433105f, 0.447998f, 0.461670f, 0.475830f, 0.490479f, 0.503906f, 0.519531f, 0.533203f,
+ 0.547852f, 0.562988f, 0.576660f, 0.591797f, 0.606445f, 0.622070f, 0.636719f, 0.652344f,
+ 0.666504f, 0.682617f, 0.833496f, 0.830078f, 0.822754f, 0.815918f, 0.808594f, 0.802734f,
+ 0.003447f, 0.009941f, 0.016373f, 0.023300f, 0.030228f, 0.037689f, 0.044128f, 0.052551f,
+ 0.059845f, 0.068115f, 0.076538f, 0.083862f, 0.092896f, 0.101440f, 0.110596f, 0.119995f,
+ 0.129028f, 0.138916f, 0.148926f, 0.158936f, 0.169189f, 0.180176f, 0.190308f, 0.201416f,
+ 0.212769f, 0.224365f, 0.235962f, 0.247192f, 0.259033f, 0.271973f, 0.283936f, 0.296631f,
+ 0.309570f, 0.321777f, 0.334961f, 0.348389f, 0.361572f, 0.374756f, 0.388184f, 0.401611f,
+ 0.415771f, 0.429443f, 0.443359f, 0.457520f, 0.471436f, 0.486084f, 0.500977f, 0.514648f,
+ 0.528809f, 0.543457f, 0.558594f, 0.573242f, 0.588867f, 0.603516f, 0.617676f, 0.633301f,
+ 0.648926f, 0.664551f, 0.824219f, 0.823242f, 0.815918f, 0.809082f, 0.802246f, 0.796387f,
+ 0.003141f, 0.009407f, 0.015251f, 0.021851f, 0.028107f, 0.034882f, 0.041779f, 0.048340f,
+ 0.056244f, 0.062988f, 0.071106f, 0.078796f, 0.087036f, 0.094910f, 0.103149f, 0.112305f,
+ 0.121460f, 0.130371f, 0.139404f, 0.149048f, 0.159180f, 0.169189f, 0.179565f, 0.189087f,
+ 0.200317f, 0.211548f, 0.222412f, 0.233765f, 0.245117f, 0.257324f, 0.269043f, 0.281006f,
+ 0.293213f, 0.305664f, 0.318848f, 0.331055f, 0.343750f, 0.358398f, 0.369873f, 0.384033f,
+ 0.397217f, 0.411865f, 0.424805f, 0.438965f, 0.453125f, 0.467529f, 0.481689f, 0.495850f,
+ 0.510254f, 0.524414f, 0.539551f, 0.554688f, 0.569824f, 0.584961f, 0.599121f, 0.614258f,
+ 0.629883f, 0.645020f, 0.815430f, 0.814453f, 0.809570f, 0.802734f, 0.796875f, 0.791504f,
+ 0.002838f, 0.008461f, 0.014236f, 0.020676f, 0.026749f, 0.032593f, 0.039032f, 0.045715f,
+ 0.052216f, 0.059479f, 0.066467f, 0.073608f, 0.080933f, 0.088623f, 0.096619f, 0.104919f,
+ 0.113098f, 0.121521f, 0.130493f, 0.139526f, 0.148560f, 0.158203f, 0.167969f, 0.177979f,
+ 0.187988f, 0.198730f, 0.208862f, 0.220093f, 0.231323f, 0.242798f, 0.253906f, 0.265869f,
+ 0.278320f, 0.289551f, 0.302246f, 0.314941f, 0.327393f, 0.340088f, 0.353516f, 0.365967f,
+ 0.379883f, 0.392822f, 0.406738f, 0.420898f, 0.434814f, 0.447998f, 0.462891f, 0.477539f,
+ 0.491455f, 0.506836f, 0.520996f, 0.536133f, 0.550781f, 0.565918f, 0.581055f, 0.596680f,
+ 0.611816f, 0.627441f, 0.806152f, 0.807617f, 0.801270f, 0.796387f, 0.790039f, 0.784668f,
+ 0.002689f, 0.008102f, 0.013618f, 0.019058f, 0.024719f, 0.030548f, 0.036560f, 0.042725f,
+ 0.048615f, 0.054779f, 0.061615f, 0.068604f, 0.075012f, 0.082703f, 0.090271f, 0.097900f,
+ 0.105530f, 0.113586f, 0.121826f, 0.130371f, 0.139282f, 0.147705f, 0.157349f, 0.166504f,
+ 0.176147f, 0.186401f, 0.196289f, 0.207520f, 0.217651f, 0.228394f, 0.239868f, 0.251465f,
+ 0.262451f, 0.274414f, 0.286377f, 0.298828f, 0.311035f, 0.323730f, 0.336670f, 0.349121f,
+ 0.362549f, 0.375244f, 0.389160f, 0.402344f, 0.417236f, 0.429932f, 0.443848f, 0.458984f,
+ 0.472168f, 0.487793f, 0.501953f, 0.517578f, 0.531738f, 0.546875f, 0.561523f, 0.576660f,
+ 0.593262f, 0.608398f, 0.797852f, 0.798828f, 0.794922f, 0.789551f, 0.784668f, 0.779297f,
+ 0.002666f, 0.007462f, 0.012596f, 0.018066f, 0.023026f, 0.028412f, 0.033813f, 0.039398f,
+ 0.045166f, 0.051239f, 0.057587f, 0.063721f, 0.070312f, 0.077148f, 0.084167f, 0.090820f,
+ 0.098267f, 0.105591f, 0.113159f, 0.121460f, 0.129761f, 0.138428f, 0.147217f, 0.156128f,
+ 0.165283f, 0.174438f, 0.183960f, 0.194092f, 0.204834f, 0.214844f, 0.225830f, 0.236816f,
+ 0.247925f, 0.259033f, 0.270752f, 0.282227f, 0.294678f, 0.306641f, 0.319336f, 0.332031f,
+ 0.344482f, 0.357910f, 0.371094f, 0.384033f, 0.398682f, 0.412109f, 0.425781f, 0.440186f,
+ 0.454102f, 0.468018f, 0.482910f, 0.497314f, 0.512207f, 0.528320f, 0.542969f, 0.558594f,
+ 0.573242f, 0.589355f, 0.787598f, 0.791016f, 0.787109f, 0.781738f, 0.777344f, 0.772461f,
+ 0.002569f, 0.007069f, 0.012199f, 0.016739f, 0.021393f, 0.026672f, 0.031189f, 0.037109f,
+ 0.042480f, 0.047729f, 0.053345f, 0.059387f, 0.065430f, 0.071838f, 0.078186f, 0.084167f,
+ 0.091492f, 0.098816f, 0.105774f, 0.112976f, 0.121155f, 0.129028f, 0.136963f, 0.145508f,
+ 0.153687f, 0.163086f, 0.172363f, 0.181885f, 0.191406f, 0.201782f, 0.211670f, 0.222412f,
+ 0.233032f, 0.244263f, 0.255371f, 0.266846f, 0.278809f, 0.290527f, 0.302734f, 0.314697f,
+ 0.327393f, 0.340820f, 0.353027f, 0.366455f, 0.380127f, 0.393799f, 0.406006f, 0.421143f,
+ 0.435059f, 0.449707f, 0.463623f, 0.479248f, 0.494141f, 0.509277f, 0.523438f, 0.539551f,
+ 0.555176f, 0.570801f, 0.778320f, 0.783203f, 0.779785f, 0.775879f, 0.770996f, 0.767090f,
+ 0.002398f, 0.006733f, 0.010918f, 0.015495f, 0.020203f, 0.024963f, 0.029663f, 0.034485f,
+ 0.039246f, 0.044678f, 0.049896f, 0.055267f, 0.060486f, 0.066345f, 0.072693f, 0.078857f,
+ 0.085083f, 0.091370f, 0.097961f, 0.105530f, 0.112244f, 0.119629f, 0.127563f, 0.135376f,
+ 0.143799f, 0.152100f, 0.160889f, 0.169922f, 0.178833f, 0.188843f, 0.198608f, 0.208496f,
+ 0.218628f, 0.229492f, 0.240479f, 0.251953f, 0.262695f, 0.274902f, 0.286377f, 0.298340f,
+ 0.310547f, 0.323242f, 0.335693f, 0.349365f, 0.362061f, 0.375000f, 0.388916f, 0.402832f,
+ 0.416748f, 0.430420f, 0.445068f, 0.459473f, 0.474854f, 0.489258f, 0.504883f, 0.519531f,
+ 0.535645f, 0.551758f, 0.769043f, 0.774902f, 0.771973f, 0.768555f, 0.764160f, 0.759766f,
+ 0.002062f, 0.006191f, 0.010384f, 0.014786f, 0.018402f, 0.023270f, 0.027435f, 0.031891f,
+ 0.036163f, 0.041199f, 0.045685f, 0.051208f, 0.056244f, 0.061371f, 0.066772f, 0.072510f,
+ 0.078369f, 0.084656f, 0.091125f, 0.097290f, 0.104309f, 0.111145f, 0.118164f, 0.126221f,
+ 0.133301f, 0.141724f, 0.149658f, 0.157837f, 0.167236f, 0.176025f, 0.185547f, 0.195190f,
+ 0.205444f, 0.215332f, 0.225830f, 0.236084f, 0.247314f, 0.259033f, 0.270020f, 0.281982f,
+ 0.293701f, 0.305908f, 0.318848f, 0.331787f, 0.344482f, 0.357178f, 0.370361f, 0.384521f,
+ 0.397461f, 0.411621f, 0.426025f, 0.440674f, 0.455322f, 0.470703f, 0.485596f, 0.500977f,
+ 0.517578f, 0.532227f, 0.759277f, 0.766602f, 0.764160f, 0.761230f, 0.757324f, 0.753418f,
+ 0.002064f, 0.005859f, 0.009613f, 0.013626f, 0.017456f, 0.021606f, 0.025574f, 0.029526f,
+ 0.034302f, 0.038422f, 0.042938f, 0.047485f, 0.052155f, 0.056763f, 0.061951f, 0.067139f,
+ 0.072754f, 0.078308f, 0.084167f, 0.090149f, 0.096191f, 0.102722f, 0.109558f, 0.116699f,
+ 0.123901f, 0.131104f, 0.139160f, 0.146729f, 0.155273f, 0.163940f, 0.173096f, 0.182129f,
+ 0.192017f, 0.201172f, 0.211060f, 0.221558f, 0.232544f, 0.243530f, 0.254150f, 0.266113f,
+ 0.277588f, 0.289307f, 0.301758f, 0.313965f, 0.326904f, 0.338867f, 0.352051f, 0.366211f,
+ 0.379150f, 0.393066f, 0.407471f, 0.421875f, 0.436768f, 0.450439f, 0.466553f, 0.481201f,
+ 0.497314f, 0.513184f, 0.749512f, 0.758301f, 0.756348f, 0.753906f, 0.750000f, 0.746582f,
+ 0.001851f, 0.005405f, 0.009109f, 0.012589f, 0.016129f, 0.020020f, 0.023926f, 0.027481f,
+ 0.031738f, 0.035492f, 0.039734f, 0.044128f, 0.048065f, 0.052765f, 0.057373f, 0.061859f,
+ 0.066711f, 0.072388f, 0.077393f, 0.083130f, 0.088745f, 0.094727f, 0.101135f, 0.107666f,
+ 0.114380f, 0.121704f, 0.128540f, 0.136108f, 0.144043f, 0.151733f, 0.160522f, 0.169678f,
+ 0.178589f, 0.187622f, 0.197998f, 0.207397f, 0.217285f, 0.227905f, 0.238892f, 0.250000f,
+ 0.261230f, 0.272461f, 0.284180f, 0.296387f, 0.308838f, 0.321533f, 0.334473f, 0.347656f,
+ 0.361328f, 0.375000f, 0.388672f, 0.402588f, 0.417969f, 0.432617f, 0.447021f, 0.461914f,
+ 0.478516f, 0.493652f, 0.739258f, 0.749512f, 0.749023f, 0.745605f, 0.742188f, 0.739746f,
+ 0.001666f, 0.005405f, 0.008575f, 0.011696f, 0.015327f, 0.018646f, 0.022293f, 0.025650f,
+ 0.029327f, 0.032776f, 0.036530f, 0.040619f, 0.044128f, 0.048828f, 0.052887f, 0.057098f,
+ 0.061829f, 0.066467f, 0.071350f, 0.076355f, 0.081909f, 0.087341f, 0.092896f, 0.099304f,
+ 0.105469f, 0.112000f, 0.118835f, 0.125977f, 0.133545f, 0.140991f, 0.148438f, 0.156982f,
+ 0.165771f, 0.174805f, 0.183960f, 0.193115f, 0.203369f, 0.212891f, 0.223389f, 0.234497f,
+ 0.244751f, 0.256348f, 0.268066f, 0.279541f, 0.291260f, 0.303955f, 0.316406f, 0.329590f,
+ 0.342529f, 0.355957f, 0.369385f, 0.384766f, 0.398926f, 0.413330f, 0.428467f, 0.442383f,
+ 0.458740f, 0.474609f, 0.728516f, 0.740723f, 0.740234f, 0.738281f, 0.735352f, 0.732910f,
+ 0.001534f, 0.004936f, 0.007980f, 0.011223f, 0.013893f, 0.017212f, 0.020294f, 0.023361f,
+ 0.026688f, 0.030182f, 0.033600f, 0.037537f, 0.040924f, 0.044495f, 0.048340f, 0.052155f,
+ 0.056732f, 0.061035f, 0.065430f, 0.069824f, 0.075073f, 0.080078f, 0.085571f, 0.091003f,
+ 0.096863f, 0.103271f, 0.109009f, 0.115723f, 0.123230f, 0.129639f, 0.137207f, 0.145264f,
+ 0.153320f, 0.161499f, 0.170410f, 0.179688f, 0.189087f, 0.198364f, 0.208740f, 0.218750f,
+ 0.229126f, 0.240356f, 0.251465f, 0.263184f, 0.274902f, 0.286621f, 0.299072f, 0.311768f,
+ 0.324463f, 0.337402f, 0.351074f, 0.364746f, 0.378662f, 0.394287f, 0.408936f, 0.423096f,
+ 0.439453f, 0.455322f, 0.716797f, 0.731934f, 0.732422f, 0.729980f, 0.728027f, 0.725586f,
+ 0.001639f, 0.004337f, 0.007439f, 0.009888f, 0.013092f, 0.015717f, 0.018921f, 0.021805f,
+ 0.024612f, 0.027542f, 0.030762f, 0.034088f, 0.037598f, 0.041107f, 0.044189f, 0.047699f,
+ 0.051666f, 0.055664f, 0.059723f, 0.064148f, 0.068542f, 0.073425f, 0.078003f, 0.083435f,
+ 0.088806f, 0.094360f, 0.100159f, 0.106079f, 0.112915f, 0.119690f, 0.125977f, 0.133667f,
+ 0.141357f, 0.149414f, 0.157349f, 0.166260f, 0.175049f, 0.184326f, 0.193970f, 0.203735f,
+ 0.214355f, 0.224609f, 0.235352f, 0.246460f, 0.257568f, 0.269287f, 0.281738f, 0.294189f,
+ 0.305908f, 0.319824f, 0.332520f, 0.346680f, 0.360596f, 0.375244f, 0.389648f, 0.404297f,
+ 0.419189f, 0.435791f, 0.707520f, 0.723145f, 0.723633f, 0.722656f, 0.720703f, 0.717773f,
+ 0.001469f, 0.004345f, 0.006844f, 0.009483f, 0.012428f, 0.014679f, 0.017166f, 0.019989f,
+ 0.022949f, 0.025574f, 0.028320f, 0.031525f, 0.034088f, 0.037323f, 0.040710f, 0.043762f,
+ 0.047119f, 0.050873f, 0.054352f, 0.058441f, 0.062561f, 0.066711f, 0.071167f, 0.075989f,
+ 0.080627f, 0.086426f, 0.091553f, 0.097473f, 0.103210f, 0.109680f, 0.115723f, 0.122986f,
+ 0.129761f, 0.137451f, 0.145142f, 0.153198f, 0.161621f, 0.170654f, 0.179688f, 0.189087f,
+ 0.198730f, 0.209229f, 0.219604f, 0.230225f, 0.241211f, 0.252197f, 0.264404f, 0.276367f,
+ 0.288574f, 0.301270f, 0.314453f, 0.328125f, 0.341309f, 0.354980f, 0.370117f, 0.385498f,
+ 0.399902f, 0.415771f, 0.696289f, 0.714355f, 0.715820f, 0.714355f, 0.712891f, 0.710449f,
+ 0.001227f, 0.003862f, 0.006245f, 0.008644f, 0.010796f, 0.013344f, 0.015823f, 0.018448f,
+ 0.020645f, 0.023331f, 0.025681f, 0.028305f, 0.030975f, 0.033722f, 0.036987f, 0.039673f,
+ 0.043121f, 0.046112f, 0.049774f, 0.053406f, 0.056854f, 0.060760f, 0.064697f, 0.069397f,
+ 0.073364f, 0.078369f, 0.083313f, 0.088257f, 0.094116f, 0.100098f, 0.105957f, 0.112122f,
+ 0.118774f, 0.125854f, 0.133057f, 0.140869f, 0.148682f, 0.157227f, 0.165405f, 0.174927f,
+ 0.184082f, 0.193726f, 0.204102f, 0.214111f, 0.225098f, 0.236328f, 0.247314f, 0.259277f,
+ 0.270752f, 0.282959f, 0.296143f, 0.309082f, 0.322510f, 0.336426f, 0.350830f, 0.365479f,
+ 0.380371f, 0.396240f, 0.684570f, 0.705078f, 0.706543f, 0.706543f, 0.705078f, 0.703125f,
+ 0.001069f, 0.003525f, 0.006062f, 0.008286f, 0.010178f, 0.012589f, 0.014542f, 0.017075f,
+ 0.019241f, 0.021179f, 0.023499f, 0.026047f, 0.028137f, 0.030762f, 0.033417f, 0.035889f,
+ 0.038757f, 0.041779f, 0.044586f, 0.048309f, 0.051056f, 0.054810f, 0.058777f, 0.062347f,
+ 0.066528f, 0.070740f, 0.075256f, 0.080261f, 0.085205f, 0.090393f, 0.095886f, 0.102478f,
+ 0.108154f, 0.114441f, 0.121399f, 0.128784f, 0.135742f, 0.144165f, 0.151978f, 0.160767f,
+ 0.169434f, 0.178833f, 0.188721f, 0.198608f, 0.208984f, 0.220215f, 0.230957f, 0.241943f,
+ 0.253906f, 0.265869f, 0.278564f, 0.291260f, 0.304443f, 0.318359f, 0.332031f, 0.346680f,
+ 0.361572f, 0.377197f, 0.673828f, 0.695801f, 0.698242f, 0.697754f, 0.697266f, 0.695312f,
+ 0.001211f, 0.003250f, 0.005112f, 0.007195f, 0.009651f, 0.011414f, 0.013641f, 0.015205f,
+ 0.017334f, 0.019608f, 0.021164f, 0.023712f, 0.025726f, 0.027863f, 0.029984f, 0.032410f,
+ 0.035034f, 0.037689f, 0.040466f, 0.042938f, 0.046478f, 0.049591f, 0.052856f, 0.056274f,
+ 0.060089f, 0.063721f, 0.068115f, 0.072266f, 0.076904f, 0.081970f, 0.087036f, 0.092285f,
+ 0.097961f, 0.104309f, 0.110535f, 0.117126f, 0.124084f, 0.131226f, 0.139038f, 0.147095f,
+ 0.155884f, 0.164429f, 0.174194f, 0.183228f, 0.192749f, 0.203491f, 0.214233f, 0.224976f,
+ 0.236206f, 0.247925f, 0.260498f, 0.272705f, 0.285889f, 0.299805f, 0.312988f, 0.327637f,
+ 0.342529f, 0.356934f, 0.662598f, 0.686523f, 0.689453f, 0.689453f, 0.688965f, 0.687500f,
+ 0.001138f, 0.003206f, 0.005180f, 0.007309f, 0.008377f, 0.010635f, 0.012352f, 0.014153f,
+ 0.015640f, 0.017487f, 0.019272f, 0.021164f, 0.023026f, 0.025314f, 0.027222f, 0.029282f,
+ 0.031433f, 0.033600f, 0.036041f, 0.038788f, 0.041626f, 0.044281f, 0.047455f, 0.050507f,
+ 0.054047f, 0.057556f, 0.061188f, 0.065063f, 0.069214f, 0.073486f, 0.078369f, 0.083191f,
+ 0.088196f, 0.093811f, 0.099609f, 0.106018f, 0.112305f, 0.119385f, 0.126343f, 0.134033f,
+ 0.142090f, 0.150635f, 0.159546f, 0.168579f, 0.177734f, 0.187500f, 0.198242f, 0.208618f,
+ 0.219604f, 0.231812f, 0.242188f, 0.254883f, 0.267578f, 0.281494f, 0.294434f, 0.308350f,
+ 0.322998f, 0.338379f, 0.651367f, 0.676758f, 0.681152f, 0.680664f, 0.680664f, 0.679688f,
+ 0.000977f, 0.002806f, 0.004559f, 0.006176f, 0.008034f, 0.009476f, 0.011131f, 0.012741f,
+ 0.014275f, 0.015732f, 0.017334f, 0.019104f, 0.020767f, 0.022293f, 0.024323f, 0.026016f,
+ 0.028198f, 0.030197f, 0.032257f, 0.034515f, 0.036957f, 0.039856f, 0.042084f, 0.044891f,
+ 0.047791f, 0.051147f, 0.054535f, 0.058197f, 0.061768f, 0.065674f, 0.069946f, 0.074585f,
+ 0.079102f, 0.084412f, 0.089600f, 0.095398f, 0.101196f, 0.107544f, 0.114258f, 0.121094f,
+ 0.128662f, 0.137085f, 0.145020f, 0.153687f, 0.162720f, 0.172607f, 0.182129f, 0.192749f,
+ 0.203125f, 0.214111f, 0.226074f, 0.237671f, 0.249878f, 0.262207f, 0.275635f, 0.289551f,
+ 0.304199f, 0.318848f, 0.639160f, 0.666992f, 0.671387f, 0.671875f, 0.671875f, 0.671387f,
+ 0.000968f, 0.002722f, 0.004318f, 0.005634f, 0.007393f, 0.008667f, 0.010139f, 0.011383f,
+ 0.012856f, 0.014389f, 0.015427f, 0.016907f, 0.018387f, 0.020081f, 0.021683f, 0.023315f,
+ 0.025085f, 0.026840f, 0.028641f, 0.030624f, 0.032837f, 0.035065f, 0.037445f, 0.039948f,
+ 0.042542f, 0.045410f, 0.048340f, 0.051514f, 0.054840f, 0.058502f, 0.062408f, 0.066223f,
+ 0.070679f, 0.075134f, 0.080078f, 0.085388f, 0.090515f, 0.096436f, 0.102722f, 0.109314f,
+ 0.116333f, 0.123352f, 0.131592f, 0.139526f, 0.147949f, 0.156860f, 0.166748f, 0.176758f,
+ 0.187134f, 0.197632f, 0.209106f, 0.220337f, 0.232666f, 0.244751f, 0.257568f, 0.270996f,
+ 0.284912f, 0.300537f, 0.627441f, 0.657227f, 0.662598f, 0.663574f, 0.663574f, 0.663086f,
+ 0.001081f, 0.002466f, 0.003862f, 0.005348f, 0.006447f, 0.007927f, 0.009018f, 0.010490f,
+ 0.011436f, 0.012627f, 0.013916f, 0.015015f, 0.016449f, 0.017563f, 0.019165f, 0.020706f,
+ 0.021973f, 0.023834f, 0.025467f, 0.027130f, 0.029175f, 0.030991f, 0.033081f, 0.035156f,
+ 0.037384f, 0.040039f, 0.042603f, 0.045502f, 0.048492f, 0.051636f, 0.054962f, 0.058716f,
+ 0.062439f, 0.066467f, 0.071045f, 0.075378f, 0.080811f, 0.085815f, 0.091492f, 0.098022f,
+ 0.103943f, 0.111023f, 0.118164f, 0.125732f, 0.133911f, 0.142456f, 0.151367f, 0.161011f,
+ 0.170898f, 0.181396f, 0.192139f, 0.203247f, 0.214844f, 0.227173f, 0.239380f, 0.252441f,
+ 0.266602f, 0.281006f, 0.616699f, 0.647949f, 0.653320f, 0.655273f, 0.654785f, 0.655273f,
+ 0.000735f, 0.002331f, 0.003601f, 0.005005f, 0.005825f, 0.007061f, 0.008049f, 0.009148f,
+ 0.010315f, 0.011131f, 0.012230f, 0.013367f, 0.014328f, 0.015541f, 0.016968f, 0.018234f,
+ 0.019257f, 0.020798f, 0.022202f, 0.023666f, 0.025452f, 0.027115f, 0.028885f, 0.030792f,
+ 0.032715f, 0.035034f, 0.037323f, 0.039825f, 0.042419f, 0.045258f, 0.048157f, 0.051422f,
+ 0.054810f, 0.058411f, 0.062378f, 0.066528f, 0.071106f, 0.076233f, 0.081116f, 0.086853f,
+ 0.092407f, 0.098938f, 0.105469f, 0.112854f, 0.120361f, 0.128418f, 0.136841f, 0.145752f,
+ 0.155273f, 0.165283f, 0.175537f, 0.186646f, 0.197510f, 0.209473f, 0.221558f, 0.234619f,
+ 0.248047f, 0.261719f, 0.603516f, 0.636719f, 0.644531f, 0.645020f, 0.645508f, 0.646484f,
+ 0.000837f, 0.002073f, 0.003357f, 0.004292f, 0.005409f, 0.006271f, 0.007271f, 0.007973f,
+ 0.008873f, 0.009956f, 0.010811f, 0.012032f, 0.012848f, 0.013664f, 0.014870f, 0.015839f,
+ 0.017090f, 0.018280f, 0.019333f, 0.020691f, 0.022186f, 0.023453f, 0.025223f, 0.026779f,
+ 0.028595f, 0.030441f, 0.032410f, 0.034729f, 0.036743f, 0.039307f, 0.042023f, 0.044434f,
+ 0.047791f, 0.050781f, 0.054413f, 0.058075f, 0.061951f, 0.066711f, 0.071106f, 0.076355f,
+ 0.081848f, 0.087341f, 0.093872f, 0.099854f, 0.107483f, 0.114441f, 0.122925f, 0.131104f,
+ 0.140381f, 0.149414f, 0.159180f, 0.170166f, 0.181152f, 0.192139f, 0.204468f, 0.216553f,
+ 0.230103f, 0.244507f, 0.592773f, 0.626953f, 0.635254f, 0.637207f, 0.636719f, 0.637695f,
+ 0.000524f, 0.001863f, 0.003014f, 0.003777f, 0.004852f, 0.005516f, 0.006428f, 0.007111f,
+ 0.008095f, 0.008888f, 0.009476f, 0.010345f, 0.011063f, 0.012016f, 0.012810f, 0.013786f,
+ 0.014648f, 0.015717f, 0.016891f, 0.017929f, 0.019150f, 0.020401f, 0.021606f, 0.023193f,
+ 0.024597f, 0.026276f, 0.027939f, 0.029770f, 0.031738f, 0.033936f, 0.036194f, 0.038574f,
+ 0.041107f, 0.043945f, 0.047180f, 0.050385f, 0.054291f, 0.057770f, 0.061981f, 0.066345f,
+ 0.071167f, 0.076355f, 0.082153f, 0.088074f, 0.094666f, 0.101685f, 0.109131f, 0.117249f,
+ 0.125610f, 0.134399f, 0.143921f, 0.154175f, 0.164795f, 0.175659f, 0.187256f, 0.199341f,
+ 0.211670f, 0.225464f, 0.580078f, 0.617676f, 0.625000f, 0.627930f, 0.628906f, 0.628906f,
+ 0.000657f, 0.001829f, 0.002909f, 0.003525f, 0.004295f, 0.005051f, 0.005592f, 0.006123f,
+ 0.006920f, 0.007553f, 0.008339f, 0.008888f, 0.009689f, 0.010262f, 0.011017f, 0.011848f,
+ 0.012634f, 0.013489f, 0.014572f, 0.015427f, 0.016449f, 0.017426f, 0.018539f, 0.019852f,
+ 0.021133f, 0.022507f, 0.023834f, 0.025375f, 0.027084f, 0.028976f, 0.030792f, 0.032959f,
+ 0.035400f, 0.037720f, 0.040405f, 0.043243f, 0.046356f, 0.049530f, 0.053314f, 0.057190f,
+ 0.061554f, 0.066223f, 0.071472f, 0.076782f, 0.082825f, 0.089417f, 0.096191f, 0.103210f,
+ 0.111633f, 0.119934f, 0.128662f, 0.138550f, 0.148315f, 0.158813f, 0.170288f, 0.182373f,
+ 0.194458f, 0.207642f, 0.567383f, 0.606445f, 0.615234f, 0.619141f, 0.620117f, 0.620117f,
+ 0.000584f, 0.001548f, 0.002333f, 0.003086f, 0.003660f, 0.004303f, 0.005020f, 0.005543f,
+ 0.006042f, 0.006538f, 0.007118f, 0.007641f, 0.008301f, 0.008919f, 0.009499f, 0.010147f,
+ 0.010918f, 0.011414f, 0.012222f, 0.013084f, 0.013901f, 0.014954f, 0.015671f, 0.016724f,
+ 0.017914f, 0.019012f, 0.020325f, 0.021698f, 0.022949f, 0.024445f, 0.026215f, 0.027954f,
+ 0.029755f, 0.032043f, 0.034210f, 0.036591f, 0.039215f, 0.042297f, 0.045441f, 0.048676f,
+ 0.052612f, 0.056580f, 0.061432f, 0.066040f, 0.071350f, 0.077332f, 0.083496f, 0.090393f,
+ 0.097717f, 0.105835f, 0.114380f, 0.123413f, 0.133301f, 0.143066f, 0.153931f, 0.165039f,
+ 0.177124f, 0.190308f, 0.555176f, 0.597656f, 0.604980f, 0.609375f, 0.609863f, 0.611328f,
+ 0.000438f, 0.001456f, 0.001925f, 0.002811f, 0.003246f, 0.003731f, 0.004108f, 0.004669f,
+ 0.005344f, 0.005535f, 0.005913f, 0.006641f, 0.007038f, 0.007473f, 0.008049f, 0.008675f,
+ 0.009361f, 0.009689f, 0.010513f, 0.011032f, 0.011894f, 0.012695f, 0.013390f, 0.014183f,
+ 0.015114f, 0.016037f, 0.016998f, 0.018280f, 0.019272f, 0.020645f, 0.022003f, 0.023361f,
+ 0.024796f, 0.026779f, 0.028656f, 0.030685f, 0.032928f, 0.035370f, 0.038147f, 0.040955f,
+ 0.044403f, 0.047821f, 0.052032f, 0.056183f, 0.060974f, 0.066162f, 0.071777f, 0.078125f,
+ 0.084656f, 0.092102f, 0.100159f, 0.109009f, 0.117981f, 0.127563f, 0.138306f, 0.148804f,
+ 0.160645f, 0.173218f, 0.542969f, 0.586914f, 0.594727f, 0.599609f, 0.601074f, 0.601074f,
+ 0.000520f, 0.001104f, 0.001921f, 0.002256f, 0.002886f, 0.003389f, 0.003689f, 0.004063f,
+ 0.004440f, 0.004829f, 0.005230f, 0.005466f, 0.005966f, 0.006332f, 0.006786f, 0.007347f,
+ 0.007835f, 0.008232f, 0.008812f, 0.009216f, 0.009865f, 0.010490f, 0.011124f, 0.011803f,
+ 0.012573f, 0.013390f, 0.014275f, 0.015121f, 0.016144f, 0.016953f, 0.018234f, 0.019257f,
+ 0.020782f, 0.022064f, 0.023743f, 0.025360f, 0.027176f, 0.029327f, 0.031616f, 0.034058f,
+ 0.036957f, 0.039917f, 0.043182f, 0.047272f, 0.051025f, 0.055695f, 0.060913f, 0.066345f,
+ 0.072693f, 0.079285f, 0.086548f, 0.094543f, 0.103271f, 0.112793f, 0.122864f, 0.132812f,
+ 0.144531f, 0.156616f, 0.530273f, 0.576660f, 0.585449f, 0.590332f, 0.592285f, 0.593262f,
+ 0.000366f, 0.001040f, 0.001583f, 0.002129f, 0.002522f, 0.002792f, 0.003012f, 0.003420f,
+ 0.003630f, 0.003967f, 0.004246f, 0.004623f, 0.005039f, 0.005253f, 0.005627f, 0.006096f,
+ 0.006447f, 0.006939f, 0.007179f, 0.007710f, 0.008324f, 0.008698f, 0.009247f, 0.009796f,
+ 0.010414f, 0.011063f, 0.011627f, 0.012543f, 0.013191f, 0.014099f, 0.014938f, 0.015930f,
+ 0.016983f, 0.018219f, 0.019440f, 0.020813f, 0.022324f, 0.024002f, 0.025818f, 0.027969f,
+ 0.030289f, 0.032898f, 0.035583f, 0.038727f, 0.042450f, 0.046234f, 0.050781f, 0.055695f,
+ 0.061157f, 0.067383f, 0.074158f, 0.081360f, 0.089478f, 0.098267f, 0.107788f, 0.117737f,
+ 0.129028f, 0.140503f, 0.517578f, 0.566406f, 0.575195f, 0.581055f, 0.582520f, 0.584473f,
+ 0.000482f, 0.001008f, 0.001481f, 0.001818f, 0.002001f, 0.002296f, 0.002569f, 0.002781f,
+ 0.002998f, 0.003319f, 0.003620f, 0.003828f, 0.004082f, 0.004364f, 0.004658f, 0.004978f,
+ 0.005257f, 0.005665f, 0.005993f, 0.006340f, 0.006725f, 0.007160f, 0.007576f, 0.008095f,
+ 0.008522f, 0.008980f, 0.009621f, 0.010170f, 0.010765f, 0.011543f, 0.012161f, 0.013023f,
+ 0.013840f, 0.014801f, 0.015869f, 0.016861f, 0.018127f, 0.019379f, 0.020859f, 0.022583f,
+ 0.024261f, 0.026596f, 0.028839f, 0.031555f, 0.034271f, 0.037628f, 0.041504f, 0.045837f,
+ 0.050598f, 0.056000f, 0.062134f, 0.068726f, 0.076172f, 0.084656f, 0.093567f, 0.103088f,
+ 0.113586f, 0.125000f, 0.504883f, 0.554688f, 0.565918f, 0.570801f, 0.573242f, 0.574219f,
+ 0.000400f, 0.000803f, 0.001046f, 0.001427f, 0.001657f, 0.001952f, 0.002033f, 0.002337f,
+ 0.002453f, 0.002678f, 0.002871f, 0.003120f, 0.003286f, 0.003605f, 0.003817f, 0.004036f,
+ 0.004299f, 0.004604f, 0.004848f, 0.005142f, 0.005428f, 0.005871f, 0.006107f, 0.006584f,
+ 0.006908f, 0.007332f, 0.007736f, 0.008186f, 0.008820f, 0.009308f, 0.009964f, 0.010422f,
+ 0.011200f, 0.011993f, 0.012726f, 0.013512f, 0.014511f, 0.015610f, 0.016724f, 0.017914f,
+ 0.019440f, 0.021057f, 0.022827f, 0.024933f, 0.027466f, 0.030197f, 0.033295f, 0.036896f,
+ 0.041077f, 0.045776f, 0.050995f, 0.056976f, 0.063721f, 0.071167f, 0.079773f, 0.089172f,
+ 0.098633f, 0.109314f, 0.491699f, 0.543457f, 0.555176f, 0.561035f, 0.563477f, 0.565430f,
+ 0.000279f, 0.000821f, 0.000974f, 0.001161f, 0.001382f, 0.001583f, 0.001670f, 0.001934f,
+ 0.002064f, 0.002153f, 0.002306f, 0.002544f, 0.002670f, 0.002909f, 0.003052f, 0.003288f,
+ 0.003429f, 0.003624f, 0.003893f, 0.004082f, 0.004406f, 0.004635f, 0.004925f, 0.005196f,
+ 0.005444f, 0.005764f, 0.006134f, 0.006546f, 0.006947f, 0.007343f, 0.007858f, 0.008270f,
+ 0.008858f, 0.009346f, 0.010010f, 0.010757f, 0.011475f, 0.012260f, 0.013206f, 0.014214f,
+ 0.015236f, 0.016479f, 0.017975f, 0.019623f, 0.021515f, 0.023590f, 0.026062f, 0.028976f,
+ 0.032471f, 0.036224f, 0.040833f, 0.046082f, 0.052094f, 0.059052f, 0.066650f, 0.075684f,
+ 0.084778f, 0.094971f, 0.479492f, 0.532715f, 0.545898f, 0.551270f, 0.553711f, 0.555664f,
+ 0.000253f, 0.000612f, 0.000835f, 0.000998f, 0.001111f, 0.001228f, 0.001334f, 0.001452f,
+ 0.001619f, 0.001757f, 0.001837f, 0.001920f, 0.002140f, 0.002321f, 0.002453f, 0.002544f,
+ 0.002670f, 0.002790f, 0.003086f, 0.003260f, 0.003422f, 0.003620f, 0.003893f, 0.004101f,
+ 0.004326f, 0.004528f, 0.004761f, 0.005051f, 0.005444f, 0.005756f, 0.006065f, 0.006435f,
+ 0.006882f, 0.007378f, 0.007763f, 0.008286f, 0.008865f, 0.009506f, 0.010162f, 0.011024f,
+ 0.011826f, 0.012917f, 0.013916f, 0.015175f, 0.016602f, 0.018204f, 0.020035f, 0.022293f,
+ 0.024948f, 0.028076f, 0.031921f, 0.036377f, 0.041565f, 0.047577f, 0.054535f, 0.062622f,
+ 0.071777f, 0.081787f, 0.465576f, 0.522461f, 0.535645f, 0.541992f, 0.544922f, 0.546875f,
+ 0.000155f, 0.000398f, 0.000680f, 0.000828f, 0.000907f, 0.000989f, 0.001113f, 0.001081f,
+ 0.001253f, 0.001350f, 0.001453f, 0.001573f, 0.001661f, 0.001777f, 0.001829f, 0.001978f,
+ 0.002062f, 0.002216f, 0.002346f, 0.002470f, 0.002644f, 0.002804f, 0.002930f, 0.003134f,
+ 0.003265f, 0.003485f, 0.003674f, 0.003866f, 0.004154f, 0.004333f, 0.004707f, 0.004910f,
+ 0.005180f, 0.005581f, 0.005875f, 0.006283f, 0.006729f, 0.007164f, 0.007713f, 0.008270f,
+ 0.008934f, 0.009727f, 0.010513f, 0.011482f, 0.012520f, 0.013710f, 0.015152f, 0.016815f,
+ 0.018799f, 0.021118f, 0.024048f, 0.027756f, 0.032104f, 0.037201f, 0.043518f, 0.050903f,
+ 0.059418f, 0.068420f, 0.453125f, 0.511719f, 0.525391f, 0.530762f, 0.535156f, 0.536621f,
+ 0.000303f, 0.000337f, 0.000498f, 0.000560f, 0.000603f, 0.000721f, 0.000782f, 0.000845f,
+ 0.000880f, 0.000988f, 0.001119f, 0.001184f, 0.001258f, 0.001377f, 0.001420f, 0.001446f,
+ 0.001590f, 0.001666f, 0.001754f, 0.001889f, 0.001980f, 0.002073f, 0.002216f, 0.002308f,
+ 0.002447f, 0.002562f, 0.002758f, 0.002899f, 0.003084f, 0.003328f, 0.003506f, 0.003641f,
+ 0.003922f, 0.004147f, 0.004391f, 0.004665f, 0.004959f, 0.005322f, 0.005695f, 0.006119f,
+ 0.006588f, 0.007072f, 0.007790f, 0.008392f, 0.009178f, 0.010056f, 0.011124f, 0.012383f,
+ 0.013832f, 0.015587f, 0.017685f, 0.020309f, 0.023926f, 0.028076f, 0.033447f, 0.039978f,
+ 0.047638f, 0.056335f, 0.440186f, 0.500000f, 0.514160f, 0.520996f, 0.524414f, 0.526855f,
+ 0.000132f, 0.000296f, 0.000368f, 0.000444f, 0.000501f, 0.000519f, 0.000631f, 0.000580f,
+ 0.000675f, 0.000735f, 0.000820f, 0.000840f, 0.000882f, 0.000946f, 0.001029f, 0.001070f,
+ 0.001164f, 0.001221f, 0.001286f, 0.001317f, 0.001416f, 0.001494f, 0.001607f, 0.001681f,
+ 0.001763f, 0.001863f, 0.001978f, 0.002069f, 0.002169f, 0.002348f, 0.002451f, 0.002661f,
+ 0.002754f, 0.002943f, 0.003130f, 0.003323f, 0.003553f, 0.003813f, 0.004124f, 0.004364f,
+ 0.004669f, 0.005062f, 0.005493f, 0.005985f, 0.006546f, 0.007172f, 0.007950f, 0.008850f,
+ 0.009857f, 0.011116f, 0.012695f, 0.014603f, 0.016983f, 0.020157f, 0.024490f, 0.029968f,
+ 0.036957f, 0.045166f, 0.426025f, 0.488770f, 0.503906f, 0.511719f, 0.515137f, 0.517578f,
+ 0.000063f, 0.000160f, 0.000267f, 0.000282f, 0.000339f, 0.000417f, 0.000377f, 0.000433f,
+ 0.000472f, 0.000570f, 0.000563f, 0.000578f, 0.000599f, 0.000663f, 0.000681f, 0.000759f,
+ 0.000760f, 0.000845f, 0.000910f, 0.000941f, 0.000997f, 0.001057f, 0.001110f, 0.001169f,
+ 0.001238f, 0.001288f, 0.001381f, 0.001441f, 0.001514f, 0.001655f, 0.001693f, 0.001815f,
+ 0.001910f, 0.002028f, 0.002153f, 0.002308f, 0.002441f, 0.002607f, 0.002783f, 0.002962f,
+ 0.003214f, 0.003458f, 0.003744f, 0.004051f, 0.004444f, 0.004883f, 0.005402f, 0.006031f,
+ 0.006699f, 0.007610f, 0.008766f, 0.009933f, 0.011688f, 0.013931f, 0.017075f, 0.021454f,
+ 0.027313f, 0.035004f, 0.414307f, 0.478271f, 0.493652f, 0.501465f, 0.505859f, 0.508301f,
+ 0.000120f, 0.000194f, 0.000194f, 0.000205f, 0.000245f, 0.000246f, 0.000251f, 0.000301f,
+ 0.000322f, 0.000332f, 0.000343f, 0.000413f, 0.000397f, 0.000448f, 0.000481f, 0.000494f,
+ 0.000545f, 0.000556f, 0.000582f, 0.000601f, 0.000653f, 0.000676f, 0.000726f, 0.000767f,
+ 0.000821f, 0.000840f, 0.000919f, 0.000952f, 0.001011f, 0.001054f, 0.001116f, 0.001186f,
+ 0.001263f, 0.001337f, 0.001418f, 0.001482f, 0.001607f, 0.001685f, 0.001842f, 0.001965f,
+ 0.002090f, 0.002235f, 0.002420f, 0.002613f, 0.002851f, 0.003159f, 0.003492f, 0.003887f,
+ 0.004345f, 0.004906f, 0.005600f, 0.006474f, 0.007645f, 0.009186f, 0.011230f, 0.014305f,
+ 0.019135f, 0.025848f, 0.400635f, 0.466797f, 0.483398f, 0.490967f, 0.495117f, 0.498047f,
+ 0.000030f, 0.000140f, 0.000121f, 0.000114f, 0.000147f, 0.000178f, 0.000159f, 0.000195f,
+ 0.000199f, 0.000204f, 0.000216f, 0.000223f, 0.000255f, 0.000271f, 0.000288f, 0.000302f,
+ 0.000314f, 0.000346f, 0.000357f, 0.000395f, 0.000397f, 0.000408f, 0.000436f, 0.000470f,
+ 0.000501f, 0.000542f, 0.000547f, 0.000566f, 0.000612f, 0.000641f, 0.000692f, 0.000722f,
+ 0.000767f, 0.000798f, 0.000861f, 0.000898f, 0.000963f, 0.001030f, 0.001107f, 0.001164f,
+ 0.001255f, 0.001361f, 0.001464f, 0.001591f, 0.001719f, 0.001871f, 0.002111f, 0.002312f,
+ 0.002617f, 0.002964f, 0.003368f, 0.003902f, 0.004654f, 0.005653f, 0.006958f, 0.008888f,
+ 0.012161f, 0.017822f, 0.388672f, 0.456543f, 0.473389f, 0.481201f, 0.486328f, 0.489014f,
+ 0.000102f, 0.000076f, 0.000076f, 0.000075f, 0.000095f, 0.000092f, 0.000109f, 0.000111f,
+ 0.000112f, 0.000113f, 0.000126f, 0.000147f, 0.000135f, 0.000144f, 0.000165f, 0.000161f,
+ 0.000179f, 0.000192f, 0.000198f, 0.000202f, 0.000224f, 0.000232f, 0.000248f, 0.000259f,
+ 0.000278f, 0.000295f, 0.000308f, 0.000320f, 0.000340f, 0.000353f, 0.000379f, 0.000402f,
+ 0.000423f, 0.000440f, 0.000472f, 0.000503f, 0.000526f, 0.000564f, 0.000610f, 0.000644f,
+ 0.000690f, 0.000741f, 0.000810f, 0.000862f, 0.000946f, 0.001024f, 0.001121f, 0.001247f,
+ 0.001407f, 0.001603f, 0.001822f, 0.002144f, 0.002539f, 0.003098f, 0.003901f, 0.005096f,
+ 0.006931f, 0.011024f, 0.375244f, 0.444092f, 0.462158f, 0.470215f, 0.475586f, 0.478760f,
+ 0.000085f, 0.000061f, 0.000052f, 0.000047f, 0.000049f, 0.000046f, 0.000047f, 0.000050f,
+ 0.000055f, 0.000069f, 0.000060f, 0.000062f, 0.000077f, 0.000066f, 0.000069f, 0.000075f,
+ 0.000084f, 0.000093f, 0.000093f, 0.000098f, 0.000102f, 0.000108f, 0.000111f, 0.000121f,
+ 0.000129f, 0.000136f, 0.000142f, 0.000154f, 0.000162f, 0.000172f, 0.000182f, 0.000187f,
+ 0.000197f, 0.000209f, 0.000225f, 0.000231f, 0.000246f, 0.000262f, 0.000290f, 0.000306f,
+ 0.000321f, 0.000349f, 0.000380f, 0.000402f, 0.000437f, 0.000480f, 0.000525f, 0.000579f,
+ 0.000649f, 0.000735f, 0.000842f, 0.000984f, 0.001173f, 0.001451f, 0.001855f, 0.002485f,
+ 0.003542f, 0.005753f, 0.362305f, 0.434326f, 0.451904f, 0.460693f, 0.465576f, 0.468506f,
+ 0.000064f, 0.000044f, 0.000036f, 0.000032f, 0.000029f, 0.000027f, 0.000025f, 0.000024f,
+ 0.000022f, 0.000023f, 0.000021f, 0.000027f, 0.000023f, 0.000022f, 0.000028f, 0.000031f,
+ 0.000030f, 0.000034f, 0.000036f, 0.000038f, 0.000040f, 0.000045f, 0.000048f, 0.000042f,
+ 0.000047f, 0.000053f, 0.000055f, 0.000054f, 0.000060f, 0.000062f, 0.000065f, 0.000072f,
+ 0.000078f, 0.000075f, 0.000079f, 0.000087f, 0.000093f, 0.000098f, 0.000106f, 0.000113f,
+ 0.000121f, 0.000126f, 0.000136f, 0.000150f, 0.000159f, 0.000173f, 0.000190f, 0.000209f,
+ 0.000235f, 0.000265f, 0.000302f, 0.000343f, 0.000416f, 0.000515f, 0.000665f, 0.000917f,
+ 0.001396f, 0.002401f, 0.349854f, 0.421875f, 0.440918f, 0.449951f, 0.455811f, 0.458008f,
+ 0.000030f, 0.000020f, 0.000016f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
+ 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
+ 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000007f, 0.000008f, 0.000008f,
+ 0.000009f, 0.000011f, 0.000011f, 0.000013f, 0.000013f, 0.000012f, 0.000013f, 0.000014f,
+ 0.000016f, 0.000018f, 0.000018f, 0.000019f, 0.000021f, 0.000021f, 0.000023f, 0.000027f,
+ 0.000025f, 0.000028f, 0.000031f, 0.000032f, 0.000033f, 0.000038f, 0.000043f, 0.000046f,
+ 0.000050f, 0.000055f, 0.000062f, 0.000074f, 0.000088f, 0.000106f, 0.000138f, 0.000191f,
+ 0.000312f, 0.000653f, 0.337402f, 0.410645f, 0.431152f, 0.438965f, 0.445068f, 0.448975f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000006f,
+ 0.000010f, 0.000026f, 0.324219f, 0.399902f, 0.419922f, 0.429688f, 0.435059f, 0.438965f,
+ },
+ {
+ 0.010521f, 0.032043f, 0.054443f, 0.076843f, 0.098572f, 0.121216f, 0.142700f, 0.164062f,
+ 0.185913f, 0.207275f, 0.229004f, 0.249268f, 0.270508f, 0.290527f, 0.311035f, 0.331055f,
+ 0.350586f, 0.370361f, 0.389648f, 0.408936f, 0.428223f, 0.446533f, 0.465088f, 0.482666f,
+ 0.500977f, 0.519043f, 0.536133f, 0.553223f, 0.570801f, 0.587891f, 0.604980f, 0.621582f,
+ 0.637207f, 0.653320f, 0.668945f, 0.685547f, 0.700684f, 0.716309f, 0.730957f, 0.745605f,
+ 0.760254f, 0.774902f, 0.789551f, 0.803711f, 0.816895f, 0.831543f, 0.845703f, 0.858887f,
+ 0.871582f, 0.885254f, 0.897949f, 0.910645f, 0.923340f, 0.936035f, 0.948242f, 0.959961f,
+ 0.972168f, 0.984375f, 0.972656f, 0.936035f, 0.910645f, 0.890137f, 0.872070f, 0.855957f,
+ 0.010048f, 0.030350f, 0.051392f, 0.072266f, 0.093506f, 0.114319f, 0.135620f, 0.155273f,
+ 0.177124f, 0.197144f, 0.217773f, 0.237915f, 0.257568f, 0.277588f, 0.298096f, 0.316895f,
+ 0.336182f, 0.355225f, 0.374268f, 0.393311f, 0.411865f, 0.430176f, 0.448486f, 0.466309f,
+ 0.483398f, 0.501465f, 0.519043f, 0.535645f, 0.552734f, 0.570312f, 0.586426f, 0.602539f,
+ 0.618652f, 0.635254f, 0.650879f, 0.666016f, 0.682129f, 0.697266f, 0.712402f, 0.727539f,
+ 0.741699f, 0.756836f, 0.770996f, 0.785645f, 0.799805f, 0.812988f, 0.826660f, 0.840332f,
+ 0.854004f, 0.867676f, 0.881348f, 0.893066f, 0.907715f, 0.919434f, 0.932617f, 0.943848f,
+ 0.955566f, 0.968262f, 0.965332f, 0.930664f, 0.906738f, 0.886719f, 0.869629f, 0.854004f,
+ 0.009254f, 0.028961f, 0.048615f, 0.068054f, 0.088562f, 0.108093f, 0.128540f, 0.147705f,
+ 0.167236f, 0.188599f, 0.207886f, 0.227295f, 0.244873f, 0.265625f, 0.284668f, 0.303955f,
+ 0.322510f, 0.340820f, 0.358887f, 0.378662f, 0.396484f, 0.414307f, 0.431885f, 0.448975f,
+ 0.466797f, 0.484619f, 0.500977f, 0.519043f, 0.535645f, 0.551758f, 0.568359f, 0.584961f,
+ 0.600586f, 0.616699f, 0.632324f, 0.647949f, 0.663086f, 0.678223f, 0.693848f, 0.708984f,
+ 0.723633f, 0.738281f, 0.752930f, 0.767578f, 0.780762f, 0.794922f, 0.809082f, 0.822754f,
+ 0.835938f, 0.849609f, 0.863770f, 0.875488f, 0.888672f, 0.902344f, 0.915527f, 0.927246f,
+ 0.939453f, 0.952637f, 0.958008f, 0.925293f, 0.901855f, 0.882812f, 0.866211f, 0.851562f,
+ 0.008736f, 0.027039f, 0.045807f, 0.064514f, 0.083801f, 0.102844f, 0.121826f, 0.140869f,
+ 0.159302f, 0.179077f, 0.197388f, 0.216064f, 0.234741f, 0.253662f, 0.271729f, 0.290283f,
+ 0.308350f, 0.327148f, 0.344238f, 0.362061f, 0.381836f, 0.398926f, 0.416016f, 0.432373f,
+ 0.450195f, 0.466797f, 0.484375f, 0.500977f, 0.517090f, 0.533691f, 0.550781f, 0.567871f,
+ 0.582031f, 0.598145f, 0.613770f, 0.629395f, 0.645020f, 0.659668f, 0.675781f, 0.689941f,
+ 0.705566f, 0.719727f, 0.734375f, 0.749512f, 0.763184f, 0.776855f, 0.791016f, 0.804688f,
+ 0.818848f, 0.832031f, 0.845215f, 0.858398f, 0.872559f, 0.884766f, 0.897949f, 0.909668f,
+ 0.922852f, 0.936035f, 0.950684f, 0.919434f, 0.896973f, 0.878906f, 0.862793f, 0.848633f,
+ 0.008339f, 0.025543f, 0.043427f, 0.060974f, 0.078979f, 0.097168f, 0.115051f, 0.133179f,
+ 0.151367f, 0.169678f, 0.187988f, 0.206055f, 0.223999f, 0.241821f, 0.260742f, 0.277832f,
+ 0.295166f, 0.313232f, 0.331299f, 0.347412f, 0.365479f, 0.383057f, 0.399902f, 0.416992f,
+ 0.433350f, 0.450195f, 0.467773f, 0.484863f, 0.499756f, 0.515625f, 0.532715f, 0.548340f,
+ 0.564941f, 0.580566f, 0.596191f, 0.610840f, 0.626953f, 0.641602f, 0.656738f, 0.671875f,
+ 0.686035f, 0.701660f, 0.714844f, 0.730469f, 0.745117f, 0.759766f, 0.772461f, 0.786621f,
+ 0.801270f, 0.814453f, 0.827637f, 0.841309f, 0.854004f, 0.867676f, 0.880859f, 0.893555f,
+ 0.907227f, 0.919434f, 0.943359f, 0.913086f, 0.891602f, 0.874512f, 0.858887f, 0.845703f,
+ 0.008102f, 0.024002f, 0.040802f, 0.057098f, 0.074768f, 0.091553f, 0.108826f, 0.126343f,
+ 0.143921f, 0.161377f, 0.179077f, 0.195923f, 0.213745f, 0.230835f, 0.248047f, 0.265869f,
+ 0.282227f, 0.299561f, 0.316895f, 0.334473f, 0.350586f, 0.367920f, 0.384277f, 0.400391f,
+ 0.417725f, 0.434326f, 0.450195f, 0.467285f, 0.482910f, 0.498291f, 0.514648f, 0.530762f,
+ 0.546387f, 0.561523f, 0.577637f, 0.593262f, 0.608398f, 0.623535f, 0.637695f, 0.654297f,
+ 0.668457f, 0.682617f, 0.698242f, 0.711914f, 0.727051f, 0.741211f, 0.754395f, 0.768066f,
+ 0.782715f, 0.796387f, 0.810547f, 0.823730f, 0.836426f, 0.849609f, 0.863770f, 0.876465f,
+ 0.889648f, 0.902344f, 0.934570f, 0.907715f, 0.887207f, 0.870117f, 0.854980f, 0.842285f,
+ 0.007504f, 0.022812f, 0.038727f, 0.054871f, 0.070312f, 0.087097f, 0.103088f, 0.119446f,
+ 0.136475f, 0.153442f, 0.169556f, 0.186523f, 0.203369f, 0.219971f, 0.236450f, 0.253418f,
+ 0.270264f, 0.287109f, 0.302979f, 0.319824f, 0.336182f, 0.353271f, 0.369141f, 0.386230f,
+ 0.402100f, 0.417725f, 0.433594f, 0.450684f, 0.466553f, 0.482178f, 0.498047f, 0.513184f,
+ 0.528809f, 0.543945f, 0.559082f, 0.575195f, 0.589844f, 0.605469f, 0.621094f, 0.634277f,
+ 0.649414f, 0.665039f, 0.679688f, 0.694824f, 0.708496f, 0.722168f, 0.736816f, 0.750000f,
+ 0.763184f, 0.778809f, 0.791504f, 0.805664f, 0.819336f, 0.832520f, 0.845703f, 0.858887f,
+ 0.872070f, 0.885742f, 0.927246f, 0.900879f, 0.881836f, 0.864746f, 0.851074f, 0.838867f,
+ 0.006836f, 0.021683f, 0.036224f, 0.051666f, 0.066772f, 0.081970f, 0.098022f, 0.113831f,
+ 0.129517f, 0.145264f, 0.161011f, 0.177856f, 0.193359f, 0.209106f, 0.226196f, 0.241821f,
+ 0.257812f, 0.274414f, 0.290283f, 0.306641f, 0.322754f, 0.338623f, 0.354492f, 0.370361f,
+ 0.386230f, 0.402100f, 0.417725f, 0.433838f, 0.449463f, 0.465088f, 0.480469f, 0.495605f,
+ 0.511719f, 0.527344f, 0.541016f, 0.556641f, 0.571777f, 0.587402f, 0.601562f, 0.617676f,
+ 0.631836f, 0.646484f, 0.660645f, 0.674805f, 0.689941f, 0.704102f, 0.718262f, 0.731934f,
+ 0.746582f, 0.760254f, 0.774414f, 0.786621f, 0.801758f, 0.815430f, 0.828125f, 0.842285f,
+ 0.854980f, 0.868652f, 0.918457f, 0.894531f, 0.875977f, 0.859863f, 0.846680f, 0.834961f,
+ 0.006672f, 0.020401f, 0.034088f, 0.048462f, 0.062927f, 0.077820f, 0.092529f, 0.107666f,
+ 0.122803f, 0.137695f, 0.152954f, 0.169067f, 0.183716f, 0.199829f, 0.214722f, 0.230347f,
+ 0.246704f, 0.262207f, 0.277832f, 0.292969f, 0.308105f, 0.324219f, 0.339600f, 0.354492f,
+ 0.371094f, 0.386963f, 0.401855f, 0.418457f, 0.432861f, 0.449219f, 0.463379f, 0.478271f,
+ 0.494385f, 0.508301f, 0.523438f, 0.539551f, 0.553711f, 0.568848f, 0.583984f, 0.598633f,
+ 0.612793f, 0.627441f, 0.642578f, 0.656250f, 0.670898f, 0.685547f, 0.698730f, 0.714355f,
+ 0.728027f, 0.742188f, 0.755859f, 0.769531f, 0.783691f, 0.795898f, 0.810059f, 0.824707f,
+ 0.838379f, 0.850586f, 0.910645f, 0.887695f, 0.870117f, 0.854980f, 0.842285f, 0.831055f,
+ 0.006207f, 0.019211f, 0.032623f, 0.046112f, 0.059662f, 0.073181f, 0.087585f, 0.102051f,
+ 0.116577f, 0.130249f, 0.145142f, 0.159790f, 0.175171f, 0.189575f, 0.205322f, 0.219238f,
+ 0.235474f, 0.249634f, 0.265137f, 0.280029f, 0.294678f, 0.310547f, 0.325928f, 0.340820f,
+ 0.356201f, 0.371094f, 0.386230f, 0.401367f, 0.416504f, 0.431885f, 0.446533f, 0.461670f,
+ 0.476074f, 0.492188f, 0.507324f, 0.520996f, 0.535645f, 0.550781f, 0.564941f, 0.580078f,
+ 0.594727f, 0.609863f, 0.623535f, 0.637695f, 0.652832f, 0.667480f, 0.681152f, 0.695312f,
+ 0.709473f, 0.723633f, 0.737793f, 0.751953f, 0.765137f, 0.779297f, 0.793945f, 0.807129f,
+ 0.819824f, 0.833496f, 0.901855f, 0.880859f, 0.864258f, 0.850098f, 0.837891f, 0.826660f,
+ 0.006020f, 0.018219f, 0.030579f, 0.043365f, 0.055908f, 0.069153f, 0.082336f, 0.096802f,
+ 0.109497f, 0.123535f, 0.137451f, 0.151855f, 0.165649f, 0.180054f, 0.194702f, 0.208252f,
+ 0.223999f, 0.238037f, 0.252930f, 0.267334f, 0.281982f, 0.296875f, 0.312012f, 0.326904f,
+ 0.340820f, 0.355957f, 0.370850f, 0.385986f, 0.400391f, 0.415039f, 0.430176f, 0.445801f,
+ 0.459229f, 0.474365f, 0.489014f, 0.502441f, 0.518066f, 0.533203f, 0.547363f, 0.562012f,
+ 0.576660f, 0.590820f, 0.605469f, 0.619629f, 0.633789f, 0.647949f, 0.663574f, 0.676758f,
+ 0.690918f, 0.705566f, 0.719238f, 0.733398f, 0.746582f, 0.760254f, 0.774414f, 0.788574f,
+ 0.802246f, 0.816406f, 0.894043f, 0.874023f, 0.858398f, 0.844238f, 0.832031f, 0.822266f,
+ 0.005520f, 0.017059f, 0.028625f, 0.040649f, 0.053131f, 0.065552f, 0.077698f, 0.091187f,
+ 0.104065f, 0.117371f, 0.130859f, 0.143677f, 0.157349f, 0.171021f, 0.184814f, 0.198730f,
+ 0.213135f, 0.226807f, 0.241211f, 0.255127f, 0.269775f, 0.283691f, 0.298096f, 0.312744f,
+ 0.326660f, 0.341553f, 0.355957f, 0.370117f, 0.384766f, 0.399170f, 0.414307f, 0.427979f,
+ 0.442627f, 0.457764f, 0.471924f, 0.486084f, 0.500488f, 0.515137f, 0.529785f, 0.543945f,
+ 0.558594f, 0.572754f, 0.587402f, 0.601074f, 0.615234f, 0.629395f, 0.644043f, 0.657715f,
+ 0.672852f, 0.685547f, 0.700684f, 0.714844f, 0.728027f, 0.743164f, 0.756348f, 0.770508f,
+ 0.785645f, 0.798340f, 0.885254f, 0.867676f, 0.852051f, 0.839355f, 0.828125f, 0.817871f,
+ 0.005241f, 0.015854f, 0.027481f, 0.038605f, 0.050171f, 0.061859f, 0.073853f, 0.085693f,
+ 0.098328f, 0.111206f, 0.123474f, 0.136475f, 0.149658f, 0.162598f, 0.175293f, 0.188477f,
+ 0.202148f, 0.216431f, 0.229858f, 0.242798f, 0.256104f, 0.270264f, 0.284668f, 0.298828f,
+ 0.312744f, 0.326904f, 0.341064f, 0.355469f, 0.369141f, 0.383057f, 0.396729f, 0.411621f,
+ 0.426025f, 0.439697f, 0.454590f, 0.468506f, 0.482666f, 0.497070f, 0.512207f, 0.525391f,
+ 0.540527f, 0.555176f, 0.567871f, 0.582031f, 0.596191f, 0.610840f, 0.625488f, 0.639648f,
+ 0.653809f, 0.668457f, 0.681641f, 0.695801f, 0.710449f, 0.724121f, 0.738770f, 0.751953f,
+ 0.766602f, 0.780273f, 0.876465f, 0.860352f, 0.845703f, 0.833984f, 0.822754f, 0.812988f,
+ 0.004982f, 0.015274f, 0.025681f, 0.036438f, 0.047119f, 0.058167f, 0.069397f, 0.081055f,
+ 0.092957f, 0.104492f, 0.116577f, 0.128418f, 0.141113f, 0.153442f, 0.166504f, 0.179321f,
+ 0.192261f, 0.205200f, 0.218506f, 0.231934f, 0.244629f, 0.258301f, 0.271729f, 0.284912f,
+ 0.299072f, 0.312988f, 0.325684f, 0.340088f, 0.353271f, 0.367676f, 0.381836f, 0.395508f,
+ 0.408936f, 0.423584f, 0.438232f, 0.451416f, 0.466309f, 0.479736f, 0.493896f, 0.507812f,
+ 0.521973f, 0.536133f, 0.550293f, 0.563965f, 0.578613f, 0.592773f, 0.606934f, 0.620605f,
+ 0.635254f, 0.649414f, 0.663086f, 0.677246f, 0.691406f, 0.706543f, 0.720703f, 0.734375f,
+ 0.748047f, 0.762695f, 0.868164f, 0.853027f, 0.839355f, 0.828125f, 0.817383f, 0.808105f,
+ 0.004745f, 0.014290f, 0.024506f, 0.034393f, 0.044617f, 0.054749f, 0.065308f, 0.076538f,
+ 0.087646f, 0.098938f, 0.110535f, 0.121582f, 0.134155f, 0.145264f, 0.157837f, 0.170166f,
+ 0.182373f, 0.194824f, 0.207153f, 0.220337f, 0.233276f, 0.245728f, 0.259277f, 0.271973f,
+ 0.285645f, 0.298584f, 0.311768f, 0.325684f, 0.338623f, 0.352539f, 0.365967f, 0.379395f,
+ 0.393066f, 0.406738f, 0.421143f, 0.434326f, 0.448730f, 0.462402f, 0.475586f, 0.490479f,
+ 0.503906f, 0.518066f, 0.532227f, 0.546387f, 0.560059f, 0.574219f, 0.588379f, 0.602539f,
+ 0.616211f, 0.630371f, 0.644531f, 0.658691f, 0.673340f, 0.686523f, 0.701660f, 0.715332f,
+ 0.730469f, 0.745117f, 0.858887f, 0.845215f, 0.833008f, 0.821777f, 0.812012f, 0.802734f,
+ 0.004494f, 0.013550f, 0.022675f, 0.032227f, 0.042145f, 0.052002f, 0.061554f, 0.072205f,
+ 0.082520f, 0.093323f, 0.104614f, 0.115112f, 0.126099f, 0.137817f, 0.149536f, 0.160767f,
+ 0.172607f, 0.184692f, 0.196167f, 0.208862f, 0.221924f, 0.233765f, 0.246216f, 0.258545f,
+ 0.272461f, 0.284424f, 0.297119f, 0.310547f, 0.323242f, 0.336914f, 0.350586f, 0.363281f,
+ 0.376953f, 0.390869f, 0.403564f, 0.416992f, 0.431152f, 0.444824f, 0.458496f, 0.472656f,
+ 0.486084f, 0.500000f, 0.513672f, 0.527832f, 0.541504f, 0.555664f, 0.569824f, 0.583496f,
+ 0.598145f, 0.611816f, 0.626465f, 0.639648f, 0.654297f, 0.668457f, 0.683594f, 0.697754f,
+ 0.711914f, 0.726562f, 0.849609f, 0.838867f, 0.826172f, 0.815918f, 0.806641f, 0.796875f,
+ 0.004288f, 0.012619f, 0.021713f, 0.030945f, 0.039368f, 0.048737f, 0.058533f, 0.067932f,
+ 0.077759f, 0.088013f, 0.098755f, 0.108398f, 0.119080f, 0.129639f, 0.141235f, 0.152466f,
+ 0.163940f, 0.174927f, 0.186768f, 0.198608f, 0.210205f, 0.222290f, 0.234131f, 0.246094f,
+ 0.258789f, 0.270508f, 0.283203f, 0.296631f, 0.309326f, 0.321777f, 0.335449f, 0.348145f,
+ 0.361084f, 0.374023f, 0.386963f, 0.400391f, 0.414062f, 0.427734f, 0.441162f, 0.455078f,
+ 0.467773f, 0.482422f, 0.495117f, 0.509277f, 0.523926f, 0.536621f, 0.550781f, 0.564941f,
+ 0.579102f, 0.593262f, 0.607422f, 0.621582f, 0.635742f, 0.649902f, 0.664551f, 0.678711f,
+ 0.693848f, 0.708008f, 0.840820f, 0.831055f, 0.819336f, 0.809570f, 0.801270f, 0.792969f,
+ 0.004013f, 0.012070f, 0.019989f, 0.029190f, 0.037415f, 0.045776f, 0.055023f, 0.064392f,
+ 0.073669f, 0.083374f, 0.092224f, 0.102295f, 0.112610f, 0.122742f, 0.133057f, 0.143799f,
+ 0.155273f, 0.165527f, 0.176880f, 0.188110f, 0.199463f, 0.210815f, 0.222534f, 0.234619f,
+ 0.245972f, 0.258301f, 0.270508f, 0.282715f, 0.294678f, 0.307129f, 0.320557f, 0.333008f,
+ 0.345947f, 0.358398f, 0.371826f, 0.384277f, 0.397461f, 0.410889f, 0.424561f, 0.437256f,
+ 0.451416f, 0.464600f, 0.477783f, 0.491455f, 0.504395f, 0.518555f, 0.532715f, 0.546875f,
+ 0.560547f, 0.574219f, 0.588379f, 0.604004f, 0.617188f, 0.631348f, 0.645020f, 0.660645f,
+ 0.674316f, 0.689941f, 0.832031f, 0.823242f, 0.813477f, 0.803711f, 0.794922f, 0.787109f,
+ 0.003790f, 0.011559f, 0.019119f, 0.027069f, 0.035034f, 0.043762f, 0.052032f, 0.060059f,
+ 0.069153f, 0.078369f, 0.087280f, 0.096741f, 0.105957f, 0.115967f, 0.125732f, 0.135620f,
+ 0.146118f, 0.156128f, 0.166992f, 0.177612f, 0.188965f, 0.199829f, 0.210815f, 0.222290f,
+ 0.233887f, 0.244873f, 0.257324f, 0.268799f, 0.281006f, 0.292969f, 0.305420f, 0.317627f,
+ 0.329834f, 0.341797f, 0.355469f, 0.368164f, 0.380859f, 0.393311f, 0.407227f, 0.419434f,
+ 0.433350f, 0.446533f, 0.459961f, 0.473633f, 0.486328f, 0.500488f, 0.515625f, 0.528320f,
+ 0.541504f, 0.556152f, 0.570312f, 0.584473f, 0.598633f, 0.612305f, 0.626465f, 0.640625f,
+ 0.655762f, 0.670410f, 0.822266f, 0.815918f, 0.805664f, 0.796387f, 0.788574f, 0.782227f,
+ 0.003599f, 0.010727f, 0.018219f, 0.025177f, 0.033203f, 0.041046f, 0.048981f, 0.057220f,
+ 0.065247f, 0.073792f, 0.082764f, 0.091064f, 0.100220f, 0.108826f, 0.118591f, 0.128052f,
+ 0.137573f, 0.147705f, 0.158081f, 0.167603f, 0.177979f, 0.188721f, 0.198975f, 0.210205f,
+ 0.221924f, 0.232544f, 0.243774f, 0.255615f, 0.267090f, 0.278564f, 0.290039f, 0.302490f,
+ 0.314941f, 0.327393f, 0.338623f, 0.352295f, 0.364014f, 0.377441f, 0.390381f, 0.403564f,
+ 0.415039f, 0.428955f, 0.441895f, 0.455078f, 0.468994f, 0.482666f, 0.496094f, 0.509277f,
+ 0.523926f, 0.537598f, 0.551270f, 0.565430f, 0.579590f, 0.594238f, 0.608887f, 0.622559f,
+ 0.637207f, 0.651855f, 0.813477f, 0.807617f, 0.798340f, 0.790527f, 0.782715f, 0.775391f,
+ 0.003355f, 0.009918f, 0.017105f, 0.023911f, 0.031281f, 0.038147f, 0.045990f, 0.053284f,
+ 0.061493f, 0.069214f, 0.077026f, 0.085571f, 0.093567f, 0.102600f, 0.111755f, 0.120728f,
+ 0.129761f, 0.138916f, 0.148804f, 0.158447f, 0.167725f, 0.177979f, 0.188965f, 0.198608f,
+ 0.209473f, 0.220215f, 0.231567f, 0.242554f, 0.253906f, 0.264160f, 0.276123f, 0.287109f,
+ 0.300049f, 0.312012f, 0.323975f, 0.336182f, 0.348145f, 0.360840f, 0.372803f, 0.385986f,
+ 0.398438f, 0.411621f, 0.424316f, 0.437256f, 0.450439f, 0.464844f, 0.478027f, 0.490723f,
+ 0.504395f, 0.518066f, 0.532715f, 0.546387f, 0.561523f, 0.575684f, 0.589355f, 0.604004f,
+ 0.618164f, 0.632324f, 0.802246f, 0.800293f, 0.792480f, 0.783691f, 0.776367f, 0.769531f,
+ 0.003265f, 0.009575f, 0.016144f, 0.022415f, 0.029510f, 0.036316f, 0.042755f, 0.050812f,
+ 0.057556f, 0.065002f, 0.072388f, 0.080200f, 0.087952f, 0.096680f, 0.104858f, 0.113281f,
+ 0.122070f, 0.130493f, 0.139771f, 0.148926f, 0.158447f, 0.168335f, 0.177612f, 0.187500f,
+ 0.198120f, 0.208130f, 0.218750f, 0.229492f, 0.240234f, 0.250732f, 0.262207f, 0.273682f,
+ 0.285156f, 0.296143f, 0.308594f, 0.320068f, 0.332520f, 0.344482f, 0.357178f, 0.368652f,
+ 0.381836f, 0.394043f, 0.406494f, 0.420410f, 0.433105f, 0.445801f, 0.459717f, 0.473633f,
+ 0.486816f, 0.500000f, 0.513672f, 0.527832f, 0.541992f, 0.556152f, 0.570312f, 0.585449f,
+ 0.598633f, 0.613770f, 0.794434f, 0.791504f, 0.784180f, 0.776855f, 0.770020f, 0.764160f,
+ 0.002954f, 0.008904f, 0.014961f, 0.021210f, 0.027420f, 0.033905f, 0.040619f, 0.047363f,
+ 0.053986f, 0.060883f, 0.068054f, 0.075378f, 0.082703f, 0.090515f, 0.098022f, 0.105896f,
+ 0.114319f, 0.122742f, 0.131592f, 0.139771f, 0.149170f, 0.157959f, 0.167480f, 0.177124f,
+ 0.186768f, 0.196411f, 0.206543f, 0.216919f, 0.227539f, 0.237671f, 0.248413f, 0.259277f,
+ 0.270264f, 0.281738f, 0.292725f, 0.304443f, 0.315918f, 0.327637f, 0.340576f, 0.352539f,
+ 0.364746f, 0.377930f, 0.390137f, 0.401855f, 0.415039f, 0.428223f, 0.441406f, 0.454834f,
+ 0.468506f, 0.481689f, 0.494873f, 0.509277f, 0.523438f, 0.537598f, 0.551758f, 0.565918f,
+ 0.580078f, 0.594727f, 0.783691f, 0.783203f, 0.776855f, 0.770508f, 0.763672f, 0.757324f,
+ 0.002836f, 0.008659f, 0.014351f, 0.019913f, 0.025772f, 0.032074f, 0.037933f, 0.044128f,
+ 0.050903f, 0.057159f, 0.064026f, 0.070496f, 0.077698f, 0.085022f, 0.091919f, 0.099426f,
+ 0.107727f, 0.114990f, 0.123169f, 0.131226f, 0.140015f, 0.148682f, 0.157349f, 0.166260f,
+ 0.175171f, 0.184692f, 0.194214f, 0.203979f, 0.214355f, 0.224487f, 0.234985f, 0.245728f,
+ 0.256104f, 0.267334f, 0.278320f, 0.288818f, 0.301025f, 0.312256f, 0.324219f, 0.335938f,
+ 0.347900f, 0.360596f, 0.372070f, 0.384521f, 0.397217f, 0.410400f, 0.423340f, 0.436279f,
+ 0.449463f, 0.463135f, 0.476807f, 0.490723f, 0.503906f, 0.517578f, 0.532227f, 0.546875f,
+ 0.561035f, 0.575684f, 0.773926f, 0.775391f, 0.769043f, 0.763672f, 0.757812f, 0.751953f,
+ 0.002506f, 0.008080f, 0.013100f, 0.018738f, 0.024384f, 0.029953f, 0.035797f, 0.041473f,
+ 0.047485f, 0.053558f, 0.059265f, 0.065918f, 0.072693f, 0.079468f, 0.086426f, 0.093384f,
+ 0.100708f, 0.108032f, 0.115417f, 0.122986f, 0.130615f, 0.139038f, 0.147827f, 0.156494f,
+ 0.165039f, 0.173828f, 0.182617f, 0.192139f, 0.201782f, 0.211426f, 0.221558f, 0.231323f,
+ 0.242188f, 0.252686f, 0.263672f, 0.274414f, 0.284912f, 0.296143f, 0.308105f, 0.319824f,
+ 0.331543f, 0.343750f, 0.355225f, 0.367432f, 0.379883f, 0.393066f, 0.405273f, 0.418457f,
+ 0.431641f, 0.444580f, 0.457764f, 0.471924f, 0.485840f, 0.499268f, 0.512695f, 0.527344f,
+ 0.542480f, 0.556641f, 0.764160f, 0.766602f, 0.761719f, 0.756348f, 0.750488f, 0.745605f,
+ 0.002640f, 0.007809f, 0.012497f, 0.017593f, 0.023102f, 0.028122f, 0.033569f, 0.038879f,
+ 0.044250f, 0.049988f, 0.055908f, 0.061615f, 0.067627f, 0.074036f, 0.080566f, 0.087524f,
+ 0.093262f, 0.100769f, 0.107910f, 0.114929f, 0.121948f, 0.130371f, 0.137939f, 0.146362f,
+ 0.154297f, 0.163208f, 0.171509f, 0.180664f, 0.189697f, 0.199341f, 0.208618f, 0.218506f,
+ 0.228394f, 0.238892f, 0.248779f, 0.259277f, 0.270752f, 0.281250f, 0.292236f, 0.303467f,
+ 0.315186f, 0.326660f, 0.338867f, 0.351074f, 0.362305f, 0.374756f, 0.387939f, 0.400146f,
+ 0.413330f, 0.426514f, 0.439209f, 0.452881f, 0.466553f, 0.480225f, 0.494141f, 0.508301f,
+ 0.522949f, 0.537109f, 0.753906f, 0.758301f, 0.754395f, 0.749023f, 0.743652f, 0.739258f,
+ 0.002441f, 0.007088f, 0.011993f, 0.016266f, 0.021255f, 0.026031f, 0.031189f, 0.036072f,
+ 0.041260f, 0.046753f, 0.052155f, 0.057587f, 0.063232f, 0.068787f, 0.075623f, 0.081055f,
+ 0.087341f, 0.094177f, 0.100647f, 0.106689f, 0.113892f, 0.121399f, 0.129028f, 0.136841f,
+ 0.144287f, 0.152222f, 0.160522f, 0.169312f, 0.178101f, 0.186523f, 0.196045f, 0.205200f,
+ 0.214966f, 0.224487f, 0.234863f, 0.244751f, 0.255371f, 0.265625f, 0.276367f, 0.287842f,
+ 0.298828f, 0.310303f, 0.321533f, 0.333984f, 0.345459f, 0.357666f, 0.370117f, 0.382568f,
+ 0.394287f, 0.407959f, 0.421875f, 0.433838f, 0.446777f, 0.461426f, 0.475098f, 0.488525f,
+ 0.504395f, 0.517578f, 0.744141f, 0.749512f, 0.746094f, 0.741699f, 0.736816f, 0.732422f,
+ 0.002172f, 0.006695f, 0.011093f, 0.015266f, 0.020081f, 0.024521f, 0.029388f, 0.033966f,
+ 0.038727f, 0.043427f, 0.048706f, 0.053772f, 0.059418f, 0.064270f, 0.069580f, 0.075500f,
+ 0.081421f, 0.087280f, 0.093262f, 0.099670f, 0.106567f, 0.113220f, 0.119995f, 0.127197f,
+ 0.134644f, 0.142212f, 0.150146f, 0.157959f, 0.166382f, 0.174927f, 0.184082f, 0.192505f,
+ 0.201904f, 0.211792f, 0.220825f, 0.230713f, 0.240601f, 0.251221f, 0.261719f, 0.272461f,
+ 0.282715f, 0.294434f, 0.305420f, 0.316650f, 0.328369f, 0.340088f, 0.352783f, 0.364746f,
+ 0.377197f, 0.389648f, 0.402832f, 0.416016f, 0.429443f, 0.442627f, 0.456055f, 0.469971f,
+ 0.484863f, 0.499268f, 0.733887f, 0.741211f, 0.737793f, 0.734375f, 0.729980f, 0.725586f,
+ 0.002045f, 0.006187f, 0.010406f, 0.014664f, 0.018570f, 0.022675f, 0.027176f, 0.031586f,
+ 0.035858f, 0.040253f, 0.045227f, 0.049774f, 0.054504f, 0.059692f, 0.065186f, 0.070374f,
+ 0.075500f, 0.080627f, 0.086792f, 0.092285f, 0.098999f, 0.104675f, 0.111816f, 0.118286f,
+ 0.125610f, 0.132324f, 0.139771f, 0.147339f, 0.155029f, 0.163696f, 0.171631f, 0.180420f,
+ 0.189087f, 0.197754f, 0.207275f, 0.216309f, 0.226440f, 0.236694f, 0.246338f, 0.256836f,
+ 0.267334f, 0.278320f, 0.289062f, 0.300537f, 0.312012f, 0.323975f, 0.335449f, 0.347168f,
+ 0.359375f, 0.372314f, 0.384521f, 0.396973f, 0.410400f, 0.423584f, 0.437500f, 0.450928f,
+ 0.465332f, 0.479736f, 0.723145f, 0.732422f, 0.729980f, 0.726562f, 0.722656f, 0.718750f,
+ 0.002148f, 0.005802f, 0.009811f, 0.013565f, 0.017578f, 0.021179f, 0.025040f, 0.029053f,
+ 0.033417f, 0.037445f, 0.042114f, 0.046112f, 0.050720f, 0.055511f, 0.060028f, 0.065002f,
+ 0.069458f, 0.075134f, 0.080078f, 0.085693f, 0.091492f, 0.097290f, 0.103394f, 0.109802f,
+ 0.116089f, 0.122925f, 0.129883f, 0.136963f, 0.144165f, 0.151733f, 0.160156f, 0.167847f,
+ 0.176392f, 0.184692f, 0.193848f, 0.203003f, 0.212402f, 0.221680f, 0.231689f, 0.242065f,
+ 0.251953f, 0.262207f, 0.273193f, 0.283936f, 0.295410f, 0.306152f, 0.318359f, 0.329590f,
+ 0.342285f, 0.354248f, 0.366455f, 0.379150f, 0.391846f, 0.405273f, 0.418701f, 0.432617f,
+ 0.446289f, 0.460205f, 0.712891f, 0.723633f, 0.722168f, 0.718750f, 0.715332f, 0.712402f,
+ 0.001963f, 0.005642f, 0.009071f, 0.012756f, 0.016006f, 0.020020f, 0.023422f, 0.027679f,
+ 0.030762f, 0.034943f, 0.038605f, 0.042969f, 0.047028f, 0.051178f, 0.055542f, 0.060120f,
+ 0.064575f, 0.069153f, 0.074280f, 0.079041f, 0.084595f, 0.089905f, 0.095276f, 0.101440f,
+ 0.107300f, 0.113586f, 0.119751f, 0.127075f, 0.134033f, 0.141357f, 0.148438f, 0.155884f,
+ 0.164062f, 0.172729f, 0.180542f, 0.190063f, 0.198364f, 0.207764f, 0.217163f, 0.226807f,
+ 0.236938f, 0.247070f, 0.257324f, 0.268066f, 0.278320f, 0.289795f, 0.301025f, 0.312744f,
+ 0.324707f, 0.336182f, 0.347900f, 0.360840f, 0.372803f, 0.386230f, 0.399902f, 0.413574f,
+ 0.427246f, 0.441162f, 0.702148f, 0.714355f, 0.713867f, 0.711426f, 0.707520f, 0.704590f,
+ 0.001995f, 0.005245f, 0.008553f, 0.011543f, 0.015015f, 0.018326f, 0.021881f, 0.025131f,
+ 0.028641f, 0.032349f, 0.035675f, 0.039520f, 0.043549f, 0.047089f, 0.051086f, 0.054962f,
+ 0.059265f, 0.063782f, 0.068054f, 0.072571f, 0.077759f, 0.082520f, 0.088013f, 0.093323f,
+ 0.098755f, 0.104858f, 0.111145f, 0.117371f, 0.123840f, 0.130615f, 0.137207f, 0.144897f,
+ 0.152344f, 0.160278f, 0.167969f, 0.176514f, 0.185425f, 0.193848f, 0.202881f, 0.212524f,
+ 0.221924f, 0.231323f, 0.241821f, 0.251953f, 0.262451f, 0.272949f, 0.284424f, 0.295166f,
+ 0.306396f, 0.319092f, 0.329590f, 0.343018f, 0.355225f, 0.368652f, 0.381348f, 0.393799f,
+ 0.408447f, 0.422852f, 0.691406f, 0.706055f, 0.706055f, 0.703125f, 0.700684f, 0.697754f,
+ 0.001692f, 0.004898f, 0.007828f, 0.011070f, 0.013992f, 0.017227f, 0.020187f, 0.023499f,
+ 0.026520f, 0.029526f, 0.033081f, 0.036377f, 0.039459f, 0.043396f, 0.047028f, 0.050323f,
+ 0.054199f, 0.058350f, 0.062317f, 0.066711f, 0.071106f, 0.075928f, 0.080750f, 0.085510f,
+ 0.090820f, 0.096497f, 0.102234f, 0.107727f, 0.114075f, 0.120300f, 0.126587f, 0.133789f,
+ 0.141113f, 0.148193f, 0.156006f, 0.163696f, 0.171753f, 0.180542f, 0.188965f, 0.198120f,
+ 0.207275f, 0.216797f, 0.226318f, 0.236206f, 0.246338f, 0.256836f, 0.267334f, 0.278809f,
+ 0.289795f, 0.300781f, 0.313232f, 0.324707f, 0.337402f, 0.349365f, 0.362305f, 0.376221f,
+ 0.389404f, 0.403809f, 0.680176f, 0.696289f, 0.697266f, 0.695312f, 0.692871f, 0.689941f,
+ 0.001606f, 0.004543f, 0.007450f, 0.010269f, 0.012962f, 0.015900f, 0.018677f, 0.021591f,
+ 0.024628f, 0.027618f, 0.030182f, 0.033783f, 0.036194f, 0.039734f, 0.042725f, 0.046478f,
+ 0.049652f, 0.053253f, 0.057251f, 0.060883f, 0.065186f, 0.069336f, 0.073730f, 0.078247f,
+ 0.083252f, 0.088501f, 0.093628f, 0.099182f, 0.104553f, 0.110718f, 0.116577f, 0.123108f,
+ 0.129883f, 0.136719f, 0.143921f, 0.151367f, 0.159302f, 0.167114f, 0.175415f, 0.183960f,
+ 0.192871f, 0.202148f, 0.210938f, 0.221436f, 0.230713f, 0.240723f, 0.250977f, 0.261963f,
+ 0.272461f, 0.283691f, 0.295166f, 0.306885f, 0.319092f, 0.331055f, 0.343750f, 0.356689f,
+ 0.370361f, 0.383545f, 0.669434f, 0.687500f, 0.688965f, 0.687500f, 0.685547f, 0.682617f,
+ 0.001701f, 0.004345f, 0.006802f, 0.009514f, 0.012283f, 0.014793f, 0.017288f, 0.019958f,
+ 0.022614f, 0.025177f, 0.027695f, 0.030487f, 0.033081f, 0.035858f, 0.039185f, 0.042236f,
+ 0.045319f, 0.048523f, 0.051941f, 0.055847f, 0.059326f, 0.063171f, 0.067139f, 0.071594f,
+ 0.075928f, 0.080566f, 0.085571f, 0.090454f, 0.095520f, 0.101196f, 0.106567f, 0.112427f,
+ 0.119019f, 0.125610f, 0.132324f, 0.139282f, 0.146973f, 0.154419f, 0.161987f, 0.170532f,
+ 0.178833f, 0.187134f, 0.196777f, 0.206177f, 0.214966f, 0.225220f, 0.235352f, 0.246094f,
+ 0.255615f, 0.266846f, 0.278320f, 0.290039f, 0.301270f, 0.313477f, 0.325195f, 0.338867f,
+ 0.352539f, 0.365234f, 0.657715f, 0.678711f, 0.679688f, 0.679199f, 0.677734f, 0.675293f,
+ 0.001310f, 0.003979f, 0.006393f, 0.008522f, 0.011223f, 0.013557f, 0.015976f, 0.018433f,
+ 0.020737f, 0.022842f, 0.025421f, 0.027649f, 0.030289f, 0.032806f, 0.035645f, 0.038025f,
+ 0.041199f, 0.044220f, 0.047058f, 0.050720f, 0.053589f, 0.057281f, 0.061157f, 0.064941f,
+ 0.068787f, 0.072998f, 0.077698f, 0.082153f, 0.086975f, 0.092102f, 0.097229f, 0.103027f,
+ 0.108826f, 0.114746f, 0.121094f, 0.127930f, 0.134521f, 0.141846f, 0.149292f, 0.157227f,
+ 0.164673f, 0.173218f, 0.182007f, 0.190552f, 0.199951f, 0.209717f, 0.219360f, 0.229004f,
+ 0.239502f, 0.250244f, 0.260986f, 0.272461f, 0.282959f, 0.295166f, 0.307373f, 0.320557f,
+ 0.333252f, 0.346436f, 0.646973f, 0.668945f, 0.670898f, 0.671387f, 0.669922f, 0.668457f,
+ 0.001348f, 0.003523f, 0.005863f, 0.008133f, 0.010338f, 0.012520f, 0.014511f, 0.016464f,
+ 0.018768f, 0.020920f, 0.022888f, 0.025665f, 0.027588f, 0.029861f, 0.032135f, 0.034485f,
+ 0.037140f, 0.040039f, 0.042725f, 0.045532f, 0.048859f, 0.051971f, 0.055237f, 0.058594f,
+ 0.062408f, 0.066101f, 0.070251f, 0.074280f, 0.078735f, 0.083435f, 0.088318f, 0.093567f,
+ 0.098633f, 0.104431f, 0.110291f, 0.116455f, 0.122986f, 0.129517f, 0.136963f, 0.143921f,
+ 0.152222f, 0.159546f, 0.167358f, 0.176514f, 0.185181f, 0.194214f, 0.203857f, 0.213623f,
+ 0.223389f, 0.233521f, 0.244385f, 0.255127f, 0.266602f, 0.277832f, 0.289307f, 0.301758f,
+ 0.314697f, 0.328613f, 0.635254f, 0.659668f, 0.663086f, 0.663086f, 0.662109f, 0.660156f,
+ 0.001084f, 0.003263f, 0.005554f, 0.007416f, 0.009445f, 0.011185f, 0.013161f, 0.015366f,
+ 0.017136f, 0.019058f, 0.020935f, 0.022781f, 0.024857f, 0.026886f, 0.029160f, 0.031097f,
+ 0.033569f, 0.035858f, 0.038361f, 0.040924f, 0.043427f, 0.046478f, 0.049500f, 0.052948f,
+ 0.056122f, 0.059418f, 0.063293f, 0.067139f, 0.070923f, 0.075073f, 0.079712f, 0.084229f,
+ 0.089233f, 0.094604f, 0.100037f, 0.105774f, 0.111694f, 0.117798f, 0.124634f, 0.131226f,
+ 0.139038f, 0.146484f, 0.154175f, 0.162231f, 0.170654f, 0.179199f, 0.188599f, 0.197754f,
+ 0.207153f, 0.217407f, 0.227295f, 0.238159f, 0.248657f, 0.260986f, 0.271973f, 0.284912f,
+ 0.296631f, 0.308838f, 0.623535f, 0.650391f, 0.653809f, 0.654297f, 0.653809f, 0.652832f,
+ 0.001070f, 0.003069f, 0.005108f, 0.006855f, 0.008522f, 0.010384f, 0.011993f, 0.013847f,
+ 0.015549f, 0.016968f, 0.018677f, 0.020660f, 0.022079f, 0.024048f, 0.026077f, 0.027954f,
+ 0.030014f, 0.032135f, 0.034210f, 0.036560f, 0.038971f, 0.041840f, 0.044434f, 0.047089f,
+ 0.049896f, 0.053284f, 0.056763f, 0.060120f, 0.063477f, 0.067505f, 0.071533f, 0.075928f,
+ 0.080261f, 0.085205f, 0.089905f, 0.095520f, 0.100830f, 0.106567f, 0.113159f, 0.119385f,
+ 0.126221f, 0.133301f, 0.140259f, 0.148560f, 0.156494f, 0.165039f, 0.173462f, 0.182861f,
+ 0.192017f, 0.201172f, 0.211548f, 0.221802f, 0.232666f, 0.243286f, 0.254639f, 0.265869f,
+ 0.278809f, 0.291260f, 0.611816f, 0.640625f, 0.645508f, 0.645996f, 0.645508f, 0.645020f,
+ 0.001057f, 0.002815f, 0.004646f, 0.006187f, 0.007935f, 0.009583f, 0.011139f, 0.012428f,
+ 0.013878f, 0.015404f, 0.016830f, 0.018433f, 0.019836f, 0.021637f, 0.023300f, 0.024857f,
+ 0.026855f, 0.028519f, 0.030533f, 0.032593f, 0.034790f, 0.037140f, 0.039520f, 0.041748f,
+ 0.044525f, 0.047302f, 0.050232f, 0.053497f, 0.056580f, 0.059998f, 0.063721f, 0.067627f,
+ 0.071777f, 0.076111f, 0.080627f, 0.085571f, 0.090698f, 0.096130f, 0.101624f, 0.107849f,
+ 0.114258f, 0.120544f, 0.127686f, 0.135132f, 0.142700f, 0.150269f, 0.158813f, 0.167725f,
+ 0.176392f, 0.185791f, 0.195312f, 0.205444f, 0.216064f, 0.226562f, 0.237793f, 0.248657f,
+ 0.260254f, 0.272949f, 0.600098f, 0.631348f, 0.636230f, 0.637207f, 0.637695f, 0.636719f,
+ 0.001022f, 0.002628f, 0.004486f, 0.005684f, 0.007179f, 0.008636f, 0.009911f, 0.011307f,
+ 0.012428f, 0.013771f, 0.015152f, 0.016342f, 0.017822f, 0.018997f, 0.020584f, 0.022263f,
+ 0.023651f, 0.025482f, 0.027191f, 0.028793f, 0.030960f, 0.032715f, 0.034912f, 0.036987f,
+ 0.039368f, 0.041840f, 0.044495f, 0.047180f, 0.050110f, 0.053314f, 0.056580f, 0.060059f,
+ 0.063660f, 0.067383f, 0.071777f, 0.075928f, 0.081055f, 0.085938f, 0.091187f, 0.096619f,
+ 0.102356f, 0.108826f, 0.115051f, 0.121948f, 0.129150f, 0.136475f, 0.144653f, 0.152832f,
+ 0.161621f, 0.170288f, 0.179932f, 0.189209f, 0.198730f, 0.209595f, 0.220459f, 0.231201f,
+ 0.242798f, 0.255615f, 0.588867f, 0.621094f, 0.626953f, 0.629883f, 0.629395f, 0.629883f,
+ 0.001016f, 0.002304f, 0.003975f, 0.005024f, 0.006584f, 0.007812f, 0.008926f, 0.009987f,
+ 0.011024f, 0.012199f, 0.013321f, 0.014595f, 0.015617f, 0.016830f, 0.018326f, 0.019577f,
+ 0.020798f, 0.022293f, 0.023758f, 0.025253f, 0.027145f, 0.028656f, 0.030640f, 0.032501f,
+ 0.034546f, 0.036682f, 0.039001f, 0.041412f, 0.044037f, 0.046875f, 0.049622f, 0.052917f,
+ 0.056030f, 0.059387f, 0.063354f, 0.067383f, 0.071655f, 0.075928f, 0.080750f, 0.085876f,
+ 0.091248f, 0.097168f, 0.102905f, 0.109497f, 0.116272f, 0.123413f, 0.130859f, 0.138550f,
+ 0.147217f, 0.155518f, 0.164551f, 0.173828f, 0.183350f, 0.193481f, 0.204102f, 0.214600f,
+ 0.225342f, 0.237915f, 0.575684f, 0.611816f, 0.617188f, 0.621094f, 0.621582f, 0.620605f,
+ 0.000768f, 0.002398f, 0.003801f, 0.004875f, 0.005848f, 0.006889f, 0.008072f, 0.008820f,
+ 0.009758f, 0.010910f, 0.011810f, 0.013023f, 0.013878f, 0.014786f, 0.016083f, 0.017166f,
+ 0.018402f, 0.019577f, 0.020691f, 0.022125f, 0.023743f, 0.025009f, 0.026779f, 0.028336f,
+ 0.030075f, 0.031921f, 0.033997f, 0.036255f, 0.038452f, 0.040833f, 0.043488f, 0.045959f,
+ 0.049011f, 0.052216f, 0.055634f, 0.059052f, 0.062744f, 0.066956f, 0.071289f, 0.075745f,
+ 0.080566f, 0.086060f, 0.091614f, 0.097351f, 0.103821f, 0.110291f, 0.117432f, 0.124939f,
+ 0.132568f, 0.140869f, 0.149414f, 0.158325f, 0.168213f, 0.177368f, 0.187744f, 0.197876f,
+ 0.208984f, 0.219849f, 0.563965f, 0.602051f, 0.608887f, 0.610840f, 0.613770f, 0.612305f,
+ 0.000764f, 0.002028f, 0.003302f, 0.004276f, 0.005325f, 0.006035f, 0.007034f, 0.007843f,
+ 0.008904f, 0.009628f, 0.010323f, 0.011192f, 0.012039f, 0.013092f, 0.013924f, 0.014854f,
+ 0.015793f, 0.016953f, 0.018036f, 0.019211f, 0.020355f, 0.021667f, 0.023010f, 0.024582f,
+ 0.026016f, 0.027771f, 0.029434f, 0.031235f, 0.033264f, 0.035217f, 0.037628f, 0.039886f,
+ 0.042084f, 0.044952f, 0.048126f, 0.051392f, 0.054779f, 0.058197f, 0.062164f, 0.066223f,
+ 0.070740f, 0.075439f, 0.080566f, 0.086182f, 0.091919f, 0.098145f, 0.104431f, 0.111633f,
+ 0.119080f, 0.126587f, 0.134888f, 0.143311f, 0.152710f, 0.162109f, 0.171631f, 0.182129f,
+ 0.192139f, 0.203491f, 0.552246f, 0.591309f, 0.599609f, 0.602539f, 0.604004f, 0.604980f,
+ 0.000782f, 0.001970f, 0.003082f, 0.003859f, 0.004635f, 0.005611f, 0.006123f, 0.006767f,
+ 0.007595f, 0.008270f, 0.009140f, 0.009674f, 0.010490f, 0.011040f, 0.011902f, 0.012749f,
+ 0.013573f, 0.014526f, 0.015656f, 0.016541f, 0.017548f, 0.018631f, 0.019730f, 0.021103f,
+ 0.022446f, 0.023758f, 0.025162f, 0.026611f, 0.028458f, 0.030441f, 0.032074f, 0.034302f,
+ 0.036316f, 0.038727f, 0.041138f, 0.044098f, 0.046997f, 0.050232f, 0.053711f, 0.057281f,
+ 0.061340f, 0.065491f, 0.070435f, 0.075256f, 0.080688f, 0.086426f, 0.092346f, 0.098694f,
+ 0.105896f, 0.113098f, 0.120911f, 0.129028f, 0.137695f, 0.146606f, 0.155884f, 0.165894f,
+ 0.175903f, 0.186768f, 0.540527f, 0.582520f, 0.590332f, 0.593750f, 0.594727f, 0.596191f,
+ 0.000711f, 0.001649f, 0.002529f, 0.003332f, 0.004036f, 0.004799f, 0.005444f, 0.006050f,
+ 0.006638f, 0.007160f, 0.007771f, 0.008331f, 0.008980f, 0.009644f, 0.010307f, 0.010887f,
+ 0.011787f, 0.012306f, 0.013176f, 0.014099f, 0.014915f, 0.015839f, 0.016708f, 0.017822f,
+ 0.019073f, 0.020233f, 0.021423f, 0.022690f, 0.024033f, 0.025589f, 0.027344f, 0.028976f,
+ 0.030930f, 0.032990f, 0.035156f, 0.037445f, 0.040131f, 0.042847f, 0.045776f, 0.049042f,
+ 0.052551f, 0.056519f, 0.060486f, 0.064941f, 0.069458f, 0.074951f, 0.080444f, 0.086487f,
+ 0.092957f, 0.099915f, 0.107361f, 0.114929f, 0.123535f, 0.131714f, 0.140747f, 0.150513f,
+ 0.160767f, 0.171265f, 0.527832f, 0.572754f, 0.581543f, 0.583496f, 0.586426f, 0.587402f,
+ 0.000504f, 0.001575f, 0.002235f, 0.003147f, 0.003641f, 0.004150f, 0.004570f, 0.005173f,
+ 0.005863f, 0.006016f, 0.006462f, 0.007111f, 0.007660f, 0.008156f, 0.008736f, 0.009354f,
+ 0.010094f, 0.010475f, 0.011253f, 0.011879f, 0.012657f, 0.013603f, 0.014267f, 0.015099f,
+ 0.016144f, 0.017014f, 0.017990f, 0.019104f, 0.020416f, 0.021652f, 0.022919f, 0.024353f,
+ 0.025986f, 0.027710f, 0.029602f, 0.031494f, 0.033722f, 0.036102f, 0.038635f, 0.041412f,
+ 0.044525f, 0.047729f, 0.051636f, 0.055511f, 0.059540f, 0.064331f, 0.069580f, 0.075073f,
+ 0.080750f, 0.087341f, 0.094116f, 0.101379f, 0.109558f, 0.117676f, 0.126221f, 0.135376f,
+ 0.145874f, 0.155518f, 0.516113f, 0.562012f, 0.571777f, 0.576172f, 0.578125f, 0.579102f,
+ 0.000445f, 0.001304f, 0.002201f, 0.002535f, 0.003126f, 0.003664f, 0.004047f, 0.004463f,
+ 0.004887f, 0.005234f, 0.005711f, 0.005997f, 0.006500f, 0.006901f, 0.007389f, 0.007904f,
+ 0.008293f, 0.008919f, 0.009499f, 0.009941f, 0.010635f, 0.011269f, 0.011948f, 0.012589f,
+ 0.013435f, 0.014252f, 0.015091f, 0.016052f, 0.017059f, 0.017960f, 0.019241f, 0.020264f,
+ 0.021667f, 0.022995f, 0.024628f, 0.026230f, 0.027985f, 0.029984f, 0.032288f, 0.034515f,
+ 0.037140f, 0.040009f, 0.043152f, 0.046722f, 0.050354f, 0.054504f, 0.059143f, 0.064026f,
+ 0.069458f, 0.075256f, 0.081726f, 0.088562f, 0.095825f, 0.103516f, 0.112000f, 0.120850f,
+ 0.130005f, 0.140381f, 0.502441f, 0.551758f, 0.562012f, 0.566406f, 0.568848f, 0.571289f,
+ 0.000396f, 0.001226f, 0.001812f, 0.002357f, 0.002796f, 0.003094f, 0.003328f, 0.003763f,
+ 0.003979f, 0.004364f, 0.004642f, 0.005051f, 0.005489f, 0.005745f, 0.006126f, 0.006611f,
+ 0.007004f, 0.007473f, 0.007771f, 0.008293f, 0.008919f, 0.009392f, 0.009941f, 0.010483f,
+ 0.011169f, 0.011765f, 0.012436f, 0.013344f, 0.014030f, 0.014908f, 0.015778f, 0.016769f,
+ 0.017838f, 0.018997f, 0.020279f, 0.021622f, 0.023056f, 0.024704f, 0.026474f, 0.028580f,
+ 0.030579f, 0.033051f, 0.035706f, 0.038605f, 0.041840f, 0.045380f, 0.049500f, 0.053986f,
+ 0.058685f, 0.063843f, 0.069885f, 0.076050f, 0.083191f, 0.090576f, 0.098511f, 0.107056f,
+ 0.115479f, 0.125122f, 0.491211f, 0.541504f, 0.552734f, 0.557617f, 0.560547f, 0.562012f,
+ 0.000559f, 0.001152f, 0.001668f, 0.001955f, 0.002234f, 0.002550f, 0.002821f, 0.003057f,
+ 0.003296f, 0.003635f, 0.003948f, 0.004189f, 0.004448f, 0.004761f, 0.005077f, 0.005417f,
+ 0.005699f, 0.006142f, 0.006458f, 0.006844f, 0.007271f, 0.007717f, 0.008156f, 0.008675f,
+ 0.009132f, 0.009590f, 0.010277f, 0.010864f, 0.011482f, 0.012131f, 0.012901f, 0.013741f,
+ 0.014595f, 0.015549f, 0.016525f, 0.017563f, 0.018799f, 0.020111f, 0.021484f, 0.023087f,
+ 0.024765f, 0.026840f, 0.028992f, 0.031403f, 0.034119f, 0.037323f, 0.040680f, 0.044464f,
+ 0.048584f, 0.053345f, 0.058838f, 0.064514f, 0.071045f, 0.078247f, 0.085571f, 0.093567f,
+ 0.101685f, 0.111023f, 0.477539f, 0.531738f, 0.542969f, 0.548340f, 0.552246f, 0.553711f,
+ 0.000459f, 0.000939f, 0.001184f, 0.001600f, 0.001761f, 0.002144f, 0.002258f, 0.002546f,
+ 0.002708f, 0.002922f, 0.003157f, 0.003414f, 0.003588f, 0.003918f, 0.004154f, 0.004387f,
+ 0.004662f, 0.004993f, 0.005249f, 0.005566f, 0.005867f, 0.006252f, 0.006573f, 0.007061f,
+ 0.007408f, 0.007858f, 0.008270f, 0.008713f, 0.009361f, 0.009911f, 0.010513f, 0.011047f,
+ 0.011841f, 0.012566f, 0.013252f, 0.014175f, 0.015182f, 0.016220f, 0.017258f, 0.018524f,
+ 0.019882f, 0.021454f, 0.023132f, 0.025146f, 0.027405f, 0.029877f, 0.032745f, 0.035919f,
+ 0.039642f, 0.043823f, 0.048492f, 0.053619f, 0.059235f, 0.065735f, 0.072693f, 0.080383f,
+ 0.088867f, 0.097412f, 0.466309f, 0.520508f, 0.533691f, 0.539062f, 0.542480f, 0.543945f,
+ 0.000369f, 0.000915f, 0.001124f, 0.001297f, 0.001534f, 0.001741f, 0.001833f, 0.002111f,
+ 0.002272f, 0.002369f, 0.002516f, 0.002766f, 0.002920f, 0.003162f, 0.003317f, 0.003551f,
+ 0.003723f, 0.003941f, 0.004211f, 0.004425f, 0.004757f, 0.004993f, 0.005306f, 0.005581f,
+ 0.005859f, 0.006203f, 0.006592f, 0.007015f, 0.007450f, 0.007828f, 0.008377f, 0.008797f,
+ 0.009361f, 0.009895f, 0.010582f, 0.011322f, 0.012016f, 0.012772f, 0.013687f, 0.014748f,
+ 0.015778f, 0.016907f, 0.018326f, 0.019821f, 0.021622f, 0.023483f, 0.025742f, 0.028473f,
+ 0.031525f, 0.034943f, 0.038910f, 0.043457f, 0.048645f, 0.054749f, 0.061279f, 0.068420f,
+ 0.076111f, 0.084778f, 0.453613f, 0.510742f, 0.523926f, 0.529785f, 0.533203f, 0.536133f,
+ 0.000186f, 0.000582f, 0.000925f, 0.001026f, 0.001228f, 0.001351f, 0.001470f, 0.001606f,
+ 0.001765f, 0.001908f, 0.001999f, 0.002104f, 0.002281f, 0.002476f, 0.002659f, 0.002766f,
+ 0.002911f, 0.003040f, 0.003344f, 0.003475f, 0.003683f, 0.003922f, 0.004185f, 0.004417f,
+ 0.004673f, 0.004890f, 0.005123f, 0.005440f, 0.005817f, 0.006126f, 0.006481f, 0.006859f,
+ 0.007275f, 0.007740f, 0.008202f, 0.008728f, 0.009315f, 0.009972f, 0.010597f, 0.011391f,
+ 0.012268f, 0.013252f, 0.014221f, 0.015388f, 0.016724f, 0.018265f, 0.020004f, 0.022049f,
+ 0.024445f, 0.027206f, 0.030762f, 0.034424f, 0.038971f, 0.044220f, 0.050262f, 0.056976f,
+ 0.064575f, 0.072083f, 0.441650f, 0.500488f, 0.514160f, 0.520020f, 0.524414f, 0.526855f,
+ 0.000194f, 0.000467f, 0.000775f, 0.000911f, 0.000994f, 0.001081f, 0.001221f, 0.001204f,
+ 0.001368f, 0.001479f, 0.001582f, 0.001707f, 0.001801f, 0.001921f, 0.001993f, 0.002146f,
+ 0.002245f, 0.002398f, 0.002531f, 0.002674f, 0.002871f, 0.003033f, 0.003172f, 0.003374f,
+ 0.003519f, 0.003742f, 0.003963f, 0.004158f, 0.004448f, 0.004650f, 0.005032f, 0.005230f,
+ 0.005550f, 0.005932f, 0.006241f, 0.006634f, 0.007088f, 0.007572f, 0.008110f, 0.008636f,
+ 0.009323f, 0.010071f, 0.010834f, 0.011757f, 0.012779f, 0.013863f, 0.015190f, 0.016769f,
+ 0.018555f, 0.020706f, 0.023331f, 0.026352f, 0.030182f, 0.034760f, 0.040039f, 0.046356f,
+ 0.053406f, 0.060638f, 0.427979f, 0.489502f, 0.504883f, 0.511719f, 0.515137f, 0.518066f,
+ 0.000339f, 0.000388f, 0.000559f, 0.000617f, 0.000667f, 0.000795f, 0.000853f, 0.000938f,
+ 0.000972f, 0.001079f, 0.001217f, 0.001274f, 0.001369f, 0.001480f, 0.001536f, 0.001581f,
+ 0.001711f, 0.001804f, 0.001900f, 0.002047f, 0.002129f, 0.002245f, 0.002394f, 0.002493f,
+ 0.002645f, 0.002773f, 0.002974f, 0.003124f, 0.003307f, 0.003559f, 0.003757f, 0.003893f,
+ 0.004169f, 0.004353f, 0.004684f, 0.004963f, 0.005272f, 0.005615f, 0.005981f, 0.006420f,
+ 0.006878f, 0.007378f, 0.008080f, 0.008682f, 0.009438f, 0.010239f, 0.011299f, 0.012459f,
+ 0.013809f, 0.015305f, 0.017212f, 0.019501f, 0.022583f, 0.026245f, 0.030838f, 0.036255f,
+ 0.042938f, 0.049988f, 0.416504f, 0.479492f, 0.495361f, 0.501465f, 0.505859f, 0.508789f,
+ 0.000148f, 0.000349f, 0.000414f, 0.000480f, 0.000554f, 0.000575f, 0.000675f, 0.000641f,
+ 0.000743f, 0.000809f, 0.000882f, 0.000919f, 0.000967f, 0.001019f, 0.001122f, 0.001156f,
+ 0.001264f, 0.001322f, 0.001392f, 0.001431f, 0.001529f, 0.001625f, 0.001735f, 0.001802f,
+ 0.001912f, 0.002007f, 0.002131f, 0.002237f, 0.002338f, 0.002525f, 0.002638f, 0.002850f,
+ 0.002962f, 0.003130f, 0.003347f, 0.003536f, 0.003784f, 0.004063f, 0.004364f, 0.004623f,
+ 0.004929f, 0.005314f, 0.005714f, 0.006191f, 0.006760f, 0.007385f, 0.008080f, 0.008919f,
+ 0.009933f, 0.011078f, 0.012390f, 0.014130f, 0.016251f, 0.019012f, 0.022720f, 0.027496f,
+ 0.033234f, 0.040192f, 0.403320f, 0.468994f, 0.485352f, 0.491943f, 0.497070f, 0.500000f,
+ 0.000093f, 0.000191f, 0.000299f, 0.000284f, 0.000367f, 0.000453f, 0.000420f, 0.000467f,
+ 0.000519f, 0.000611f, 0.000607f, 0.000626f, 0.000647f, 0.000722f, 0.000741f, 0.000815f,
+ 0.000829f, 0.000910f, 0.000967f, 0.001023f, 0.001076f, 0.001138f, 0.001197f, 0.001260f,
+ 0.001334f, 0.001393f, 0.001490f, 0.001562f, 0.001633f, 0.001772f, 0.001831f, 0.001949f,
+ 0.002056f, 0.002167f, 0.002312f, 0.002472f, 0.002607f, 0.002781f, 0.002972f, 0.003145f,
+ 0.003387f, 0.003647f, 0.003941f, 0.004253f, 0.004604f, 0.005051f, 0.005558f, 0.006165f,
+ 0.006836f, 0.007660f, 0.008652f, 0.009796f, 0.011284f, 0.013260f, 0.015945f, 0.019608f,
+ 0.024734f, 0.031082f, 0.390625f, 0.459229f, 0.475586f, 0.482910f, 0.488037f, 0.490723f,
+ 0.000132f, 0.000208f, 0.000217f, 0.000221f, 0.000267f, 0.000272f, 0.000277f, 0.000320f,
+ 0.000356f, 0.000372f, 0.000372f, 0.000446f, 0.000436f, 0.000487f, 0.000514f, 0.000531f,
+ 0.000587f, 0.000601f, 0.000629f, 0.000658f, 0.000707f, 0.000736f, 0.000784f, 0.000816f,
+ 0.000880f, 0.000909f, 0.000978f, 0.001035f, 0.001084f, 0.001135f, 0.001200f, 0.001278f,
+ 0.001357f, 0.001429f, 0.001516f, 0.001588f, 0.001724f, 0.001802f, 0.001949f, 0.002085f,
+ 0.002230f, 0.002373f, 0.002554f, 0.002743f, 0.003000f, 0.003300f, 0.003611f, 0.003963f,
+ 0.004425f, 0.004967f, 0.005630f, 0.006424f, 0.007462f, 0.008812f, 0.010551f, 0.013184f,
+ 0.017258f, 0.022980f, 0.377686f, 0.448242f, 0.465820f, 0.474121f, 0.478760f, 0.481934f,
+ 0.000041f, 0.000149f, 0.000126f, 0.000128f, 0.000158f, 0.000196f, 0.000174f, 0.000206f,
+ 0.000216f, 0.000223f, 0.000231f, 0.000244f, 0.000276f, 0.000291f, 0.000312f, 0.000326f,
+ 0.000338f, 0.000374f, 0.000387f, 0.000423f, 0.000430f, 0.000447f, 0.000471f, 0.000509f,
+ 0.000538f, 0.000583f, 0.000591f, 0.000613f, 0.000659f, 0.000688f, 0.000743f, 0.000779f,
+ 0.000833f, 0.000865f, 0.000924f, 0.000966f, 0.001033f, 0.001106f, 0.001186f, 0.001245f,
+ 0.001336f, 0.001453f, 0.001559f, 0.001685f, 0.001807f, 0.001980f, 0.002207f, 0.002417f,
+ 0.002689f, 0.003027f, 0.003418f, 0.003933f, 0.004604f, 0.005482f, 0.006641f, 0.008263f,
+ 0.011017f, 0.015778f, 0.364746f, 0.437256f, 0.456055f, 0.463623f, 0.469238f, 0.472656f,
+ 0.000100f, 0.000089f, 0.000085f, 0.000081f, 0.000101f, 0.000096f, 0.000116f, 0.000116f,
+ 0.000119f, 0.000126f, 0.000141f, 0.000157f, 0.000149f, 0.000158f, 0.000179f, 0.000176f,
+ 0.000195f, 0.000206f, 0.000216f, 0.000222f, 0.000240f, 0.000246f, 0.000269f, 0.000279f,
+ 0.000303f, 0.000320f, 0.000333f, 0.000345f, 0.000365f, 0.000379f, 0.000409f, 0.000434f,
+ 0.000453f, 0.000477f, 0.000511f, 0.000541f, 0.000569f, 0.000608f, 0.000656f, 0.000689f,
+ 0.000738f, 0.000795f, 0.000867f, 0.000918f, 0.001005f, 0.001087f, 0.001189f, 0.001312f,
+ 0.001465f, 0.001656f, 0.001873f, 0.002171f, 0.002546f, 0.003056f, 0.003767f, 0.004765f,
+ 0.006390f, 0.009811f, 0.353516f, 0.426758f, 0.446045f, 0.455078f, 0.459717f, 0.464111f,
+ 0.000084f, 0.000059f, 0.000050f, 0.000049f, 0.000049f, 0.000047f, 0.000052f, 0.000058f,
+ 0.000061f, 0.000075f, 0.000065f, 0.000066f, 0.000080f, 0.000071f, 0.000076f, 0.000082f,
+ 0.000092f, 0.000102f, 0.000100f, 0.000105f, 0.000110f, 0.000115f, 0.000121f, 0.000133f,
+ 0.000140f, 0.000146f, 0.000152f, 0.000164f, 0.000177f, 0.000185f, 0.000192f, 0.000202f,
+ 0.000213f, 0.000224f, 0.000241f, 0.000252f, 0.000268f, 0.000283f, 0.000310f, 0.000328f,
+ 0.000348f, 0.000374f, 0.000406f, 0.000431f, 0.000470f, 0.000515f, 0.000560f, 0.000614f,
+ 0.000688f, 0.000771f, 0.000884f, 0.001019f, 0.001202f, 0.001466f, 0.001827f, 0.002369f,
+ 0.003269f, 0.005184f, 0.341797f, 0.416016f, 0.435791f, 0.445557f, 0.450928f, 0.455078f,
+ 0.000062f, 0.000042f, 0.000035f, 0.000030f, 0.000028f, 0.000026f, 0.000024f, 0.000023f,
+ 0.000023f, 0.000023f, 0.000023f, 0.000030f, 0.000024f, 0.000024f, 0.000031f, 0.000034f,
+ 0.000035f, 0.000037f, 0.000039f, 0.000040f, 0.000043f, 0.000048f, 0.000050f, 0.000046f,
+ 0.000051f, 0.000057f, 0.000059f, 0.000058f, 0.000063f, 0.000068f, 0.000070f, 0.000077f,
+ 0.000082f, 0.000082f, 0.000086f, 0.000093f, 0.000100f, 0.000106f, 0.000114f, 0.000120f,
+ 0.000131f, 0.000136f, 0.000145f, 0.000161f, 0.000171f, 0.000186f, 0.000204f, 0.000222f,
+ 0.000251f, 0.000281f, 0.000318f, 0.000364f, 0.000430f, 0.000530f, 0.000672f, 0.000902f,
+ 0.001316f, 0.002153f, 0.329346f, 0.406006f, 0.426758f, 0.436035f, 0.441650f, 0.445801f,
+ 0.000031f, 0.000020f, 0.000016f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
+ 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f,
+ 0.000008f, 0.000008f, 0.000007f, 0.000007f, 0.000007f, 0.000008f, 0.000009f, 0.000010f,
+ 0.000011f, 0.000012f, 0.000012f, 0.000014f, 0.000014f, 0.000013f, 0.000015f, 0.000016f,
+ 0.000018f, 0.000019f, 0.000019f, 0.000020f, 0.000023f, 0.000023f, 0.000025f, 0.000027f,
+ 0.000028f, 0.000031f, 0.000034f, 0.000034f, 0.000037f, 0.000041f, 0.000045f, 0.000049f,
+ 0.000053f, 0.000059f, 0.000066f, 0.000079f, 0.000093f, 0.000112f, 0.000144f, 0.000196f,
+ 0.000307f, 0.000598f, 0.317383f, 0.394531f, 0.416504f, 0.425781f, 0.432129f, 0.436279f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000007f,
+ 0.000010f, 0.000026f, 0.305420f, 0.384277f, 0.405762f, 0.416504f, 0.423340f, 0.427246f,
+ },
+ {
+ 0.009338f, 0.028412f, 0.047394f, 0.066895f, 0.086548f, 0.105774f, 0.125854f, 0.145142f,
+ 0.165039f, 0.184570f, 0.204712f, 0.223389f, 0.243164f, 0.261719f, 0.280762f, 0.299805f,
+ 0.318848f, 0.338135f, 0.356445f, 0.374512f, 0.393066f, 0.412354f, 0.429932f, 0.447510f,
+ 0.465576f, 0.483887f, 0.501465f, 0.518555f, 0.536133f, 0.553711f, 0.570312f, 0.587402f,
+ 0.604492f, 0.621094f, 0.637695f, 0.653809f, 0.670898f, 0.687012f, 0.702637f, 0.719238f,
+ 0.734863f, 0.750488f, 0.765137f, 0.780762f, 0.795898f, 0.811523f, 0.825684f, 0.840820f,
+ 0.855469f, 0.870605f, 0.884277f, 0.899414f, 0.913086f, 0.926758f, 0.940918f, 0.955078f,
+ 0.967773f, 0.981934f, 0.966797f, 0.923828f, 0.894531f, 0.870605f, 0.850586f, 0.832520f,
+ 0.008652f, 0.026825f, 0.045380f, 0.063965f, 0.082703f, 0.101807f, 0.120544f, 0.139282f,
+ 0.158569f, 0.177246f, 0.196167f, 0.214722f, 0.233521f, 0.252197f, 0.270508f, 0.289062f,
+ 0.307861f, 0.325928f, 0.343994f, 0.361328f, 0.380615f, 0.397705f, 0.415771f, 0.433594f,
+ 0.450928f, 0.469238f, 0.485596f, 0.502930f, 0.520020f, 0.537598f, 0.553223f, 0.570801f,
+ 0.586914f, 0.603516f, 0.620117f, 0.636719f, 0.652832f, 0.668945f, 0.683594f, 0.700684f,
+ 0.716309f, 0.731934f, 0.746582f, 0.762695f, 0.777344f, 0.792480f, 0.807617f, 0.821777f,
+ 0.836914f, 0.850586f, 0.865723f, 0.880371f, 0.894043f, 0.908691f, 0.921875f, 0.937012f,
+ 0.950195f, 0.963867f, 0.958496f, 0.917969f, 0.889648f, 0.867188f, 0.847656f, 0.830566f,
+ 0.008293f, 0.025620f, 0.042999f, 0.061035f, 0.079163f, 0.097656f, 0.115112f, 0.132812f,
+ 0.151367f, 0.170532f, 0.188599f, 0.206787f, 0.223999f, 0.242920f, 0.259766f, 0.278809f,
+ 0.296143f, 0.313232f, 0.331055f, 0.349609f, 0.367432f, 0.385010f, 0.401611f, 0.418945f,
+ 0.435791f, 0.453369f, 0.469727f, 0.487061f, 0.503906f, 0.520508f, 0.537598f, 0.553223f,
+ 0.569824f, 0.586426f, 0.603027f, 0.619141f, 0.634277f, 0.650879f, 0.666504f, 0.682129f,
+ 0.697754f, 0.713379f, 0.729004f, 0.743164f, 0.758301f, 0.773926f, 0.789062f, 0.803711f,
+ 0.818359f, 0.833008f, 0.847168f, 0.862305f, 0.875488f, 0.890137f, 0.903809f, 0.917480f,
+ 0.931152f, 0.945801f, 0.950195f, 0.911133f, 0.884766f, 0.862793f, 0.844238f, 0.828125f,
+ 0.008148f, 0.024506f, 0.041016f, 0.058289f, 0.075256f, 0.092712f, 0.109802f, 0.127319f,
+ 0.145020f, 0.162964f, 0.180298f, 0.198120f, 0.215454f, 0.232300f, 0.250244f, 0.267822f,
+ 0.285400f, 0.302734f, 0.318848f, 0.335693f, 0.354004f, 0.371582f, 0.388672f, 0.405029f,
+ 0.421143f, 0.438965f, 0.455078f, 0.472168f, 0.487549f, 0.503906f, 0.521484f, 0.537598f,
+ 0.551758f, 0.568359f, 0.584961f, 0.601562f, 0.616211f, 0.633301f, 0.648926f, 0.664062f,
+ 0.679199f, 0.694824f, 0.709473f, 0.725098f, 0.740234f, 0.755371f, 0.770020f, 0.785156f,
+ 0.799805f, 0.813965f, 0.828125f, 0.842773f, 0.856934f, 0.871582f, 0.884766f, 0.898926f,
+ 0.912598f, 0.926270f, 0.941895f, 0.905273f, 0.879883f, 0.858887f, 0.840332f, 0.824707f,
+ 0.007523f, 0.023010f, 0.039246f, 0.055542f, 0.072021f, 0.088257f, 0.105347f, 0.122070f,
+ 0.138306f, 0.155273f, 0.172852f, 0.189575f, 0.206421f, 0.223145f, 0.240112f, 0.256592f,
+ 0.274170f, 0.291260f, 0.307617f, 0.323730f, 0.340576f, 0.358154f, 0.374023f, 0.390137f,
+ 0.406738f, 0.422852f, 0.440430f, 0.456543f, 0.472656f, 0.489014f, 0.504395f, 0.520996f,
+ 0.537109f, 0.552734f, 0.568848f, 0.584473f, 0.599121f, 0.615234f, 0.630859f, 0.645020f,
+ 0.660645f, 0.677246f, 0.690918f, 0.706055f, 0.721680f, 0.736328f, 0.750977f, 0.766113f,
+ 0.780273f, 0.794922f, 0.809570f, 0.823730f, 0.837891f, 0.852539f, 0.866211f, 0.880371f,
+ 0.894531f, 0.908691f, 0.933105f, 0.898438f, 0.874023f, 0.853516f, 0.836426f, 0.821289f,
+ 0.007339f, 0.021912f, 0.037170f, 0.052948f, 0.068665f, 0.084412f, 0.100281f, 0.116333f,
+ 0.133057f, 0.149048f, 0.164795f, 0.181274f, 0.198242f, 0.214233f, 0.230835f, 0.247314f,
+ 0.262939f, 0.279053f, 0.295898f, 0.312500f, 0.328613f, 0.344971f, 0.360107f, 0.376953f,
+ 0.392578f, 0.408691f, 0.425293f, 0.441406f, 0.456787f, 0.472656f, 0.488525f, 0.504883f,
+ 0.520020f, 0.535156f, 0.550781f, 0.567383f, 0.582520f, 0.597656f, 0.612793f, 0.628418f,
+ 0.642578f, 0.657715f, 0.673340f, 0.688477f, 0.702637f, 0.718750f, 0.731445f, 0.748047f,
+ 0.762207f, 0.775879f, 0.791016f, 0.804199f, 0.818848f, 0.833008f, 0.847656f, 0.861328f,
+ 0.875000f, 0.890625f, 0.924316f, 0.891602f, 0.868164f, 0.849121f, 0.832520f, 0.817871f,
+ 0.006817f, 0.021133f, 0.035675f, 0.050018f, 0.065186f, 0.080505f, 0.096069f, 0.111389f,
+ 0.126831f, 0.142456f, 0.158203f, 0.174194f, 0.189819f, 0.205444f, 0.220703f, 0.237183f,
+ 0.253174f, 0.268555f, 0.284668f, 0.300049f, 0.316406f, 0.332275f, 0.347656f, 0.363281f,
+ 0.379395f, 0.394775f, 0.409668f, 0.426270f, 0.442139f, 0.457275f, 0.472656f, 0.488037f,
+ 0.503906f, 0.518555f, 0.534668f, 0.548828f, 0.564941f, 0.579590f, 0.595215f, 0.610352f,
+ 0.625000f, 0.640137f, 0.654785f, 0.669434f, 0.685059f, 0.699707f, 0.713379f, 0.728027f,
+ 0.742676f, 0.758301f, 0.770996f, 0.786621f, 0.799316f, 0.813965f, 0.828613f, 0.842285f,
+ 0.856445f, 0.871094f, 0.915527f, 0.884766f, 0.862305f, 0.843750f, 0.827637f, 0.813965f,
+ 0.006611f, 0.020111f, 0.033752f, 0.047974f, 0.062378f, 0.076843f, 0.091431f, 0.106262f,
+ 0.120911f, 0.136230f, 0.151123f, 0.166382f, 0.181396f, 0.196899f, 0.211670f, 0.227295f,
+ 0.242554f, 0.257812f, 0.272705f, 0.288086f, 0.304199f, 0.318848f, 0.334473f, 0.349609f,
+ 0.365967f, 0.379883f, 0.395996f, 0.410889f, 0.426270f, 0.441895f, 0.457764f, 0.472412f,
+ 0.487061f, 0.502930f, 0.517090f, 0.532227f, 0.547363f, 0.563477f, 0.577637f, 0.592285f,
+ 0.606934f, 0.621582f, 0.636230f, 0.651367f, 0.665039f, 0.679688f, 0.694336f, 0.709473f,
+ 0.724121f, 0.738770f, 0.752930f, 0.767578f, 0.780762f, 0.795410f, 0.809082f, 0.823242f,
+ 0.837891f, 0.852539f, 0.906250f, 0.877441f, 0.855957f, 0.838379f, 0.823242f, 0.809570f,
+ 0.006153f, 0.019150f, 0.031952f, 0.045624f, 0.059326f, 0.073303f, 0.087158f, 0.101562f,
+ 0.115540f, 0.129395f, 0.144653f, 0.159180f, 0.173584f, 0.187866f, 0.203613f, 0.217651f,
+ 0.232300f, 0.247559f, 0.262207f, 0.277344f, 0.292969f, 0.307617f, 0.322021f, 0.336914f,
+ 0.352051f, 0.367188f, 0.381592f, 0.396729f, 0.411377f, 0.427002f, 0.440918f, 0.456787f,
+ 0.471436f, 0.486572f, 0.500977f, 0.514648f, 0.530273f, 0.545410f, 0.560059f, 0.574219f,
+ 0.589355f, 0.604004f, 0.618164f, 0.632324f, 0.647461f, 0.661133f, 0.676270f, 0.691406f,
+ 0.705078f, 0.719727f, 0.733887f, 0.748047f, 0.763184f, 0.777344f, 0.791016f, 0.805176f,
+ 0.819336f, 0.833496f, 0.896973f, 0.870117f, 0.849609f, 0.833008f, 0.818359f, 0.805176f,
+ 0.005947f, 0.018311f, 0.030731f, 0.043243f, 0.056732f, 0.069580f, 0.083435f, 0.096558f,
+ 0.110474f, 0.123962f, 0.137695f, 0.152100f, 0.166016f, 0.180054f, 0.194092f, 0.208862f,
+ 0.222656f, 0.236816f, 0.251465f, 0.266113f, 0.281250f, 0.294922f, 0.309814f, 0.324219f,
+ 0.338623f, 0.352783f, 0.368164f, 0.382568f, 0.397461f, 0.411377f, 0.426025f, 0.441162f,
+ 0.455078f, 0.469971f, 0.484131f, 0.499268f, 0.513672f, 0.528320f, 0.542969f, 0.557129f,
+ 0.571289f, 0.585449f, 0.599609f, 0.614258f, 0.628418f, 0.643066f, 0.657227f, 0.671875f,
+ 0.686523f, 0.700195f, 0.714355f, 0.729004f, 0.743164f, 0.756836f, 0.770996f, 0.785645f,
+ 0.800293f, 0.814453f, 0.888184f, 0.862305f, 0.843262f, 0.827148f, 0.813477f, 0.800781f,
+ 0.005646f, 0.017136f, 0.029388f, 0.041534f, 0.053802f, 0.066162f, 0.078979f, 0.092285f,
+ 0.104980f, 0.118408f, 0.130981f, 0.144897f, 0.158203f, 0.172363f, 0.185547f, 0.199951f,
+ 0.213501f, 0.226440f, 0.240356f, 0.254883f, 0.269287f, 0.283691f, 0.297607f, 0.311279f,
+ 0.325439f, 0.339600f, 0.353760f, 0.368408f, 0.382812f, 0.396973f, 0.410645f, 0.425049f,
+ 0.439697f, 0.454102f, 0.468262f, 0.482178f, 0.496094f, 0.510742f, 0.524902f, 0.539551f,
+ 0.554199f, 0.568359f, 0.582031f, 0.596191f, 0.610352f, 0.624023f, 0.639160f, 0.652832f,
+ 0.667969f, 0.681152f, 0.696289f, 0.709961f, 0.723633f, 0.738770f, 0.752441f, 0.765625f,
+ 0.780273f, 0.794922f, 0.878418f, 0.855469f, 0.836914f, 0.821289f, 0.808105f, 0.796387f,
+ 0.005478f, 0.016174f, 0.027740f, 0.038849f, 0.051270f, 0.063293f, 0.075317f, 0.087402f,
+ 0.099854f, 0.112793f, 0.125366f, 0.138184f, 0.151001f, 0.164307f, 0.177734f, 0.190918f,
+ 0.204102f, 0.217529f, 0.231079f, 0.244141f, 0.257324f, 0.271240f, 0.284668f, 0.299072f,
+ 0.312744f, 0.326660f, 0.339600f, 0.354004f, 0.368408f, 0.382324f, 0.395264f, 0.410156f,
+ 0.423096f, 0.437500f, 0.452148f, 0.465332f, 0.480469f, 0.493408f, 0.507812f, 0.521484f,
+ 0.535645f, 0.549316f, 0.563477f, 0.578125f, 0.592285f, 0.605957f, 0.620605f, 0.634766f,
+ 0.647949f, 0.662109f, 0.676758f, 0.691406f, 0.705078f, 0.718750f, 0.732910f, 0.747559f,
+ 0.762207f, 0.777344f, 0.869141f, 0.847656f, 0.830078f, 0.815430f, 0.802734f, 0.791504f,
+ 0.005005f, 0.015762f, 0.026657f, 0.037384f, 0.048218f, 0.059998f, 0.071594f, 0.083618f,
+ 0.095215f, 0.107666f, 0.119141f, 0.131958f, 0.144043f, 0.156128f, 0.169800f, 0.182129f,
+ 0.194824f, 0.207031f, 0.219849f, 0.233032f, 0.247559f, 0.260010f, 0.272949f, 0.286133f,
+ 0.300293f, 0.313477f, 0.326172f, 0.339844f, 0.353516f, 0.367188f, 0.381592f, 0.394531f,
+ 0.407959f, 0.422363f, 0.436279f, 0.449463f, 0.462891f, 0.477539f, 0.490723f, 0.504395f,
+ 0.518066f, 0.532227f, 0.545898f, 0.560059f, 0.574219f, 0.586914f, 0.602051f, 0.616211f,
+ 0.629395f, 0.644531f, 0.657227f, 0.671875f, 0.685547f, 0.699707f, 0.713867f, 0.728516f,
+ 0.742676f, 0.756836f, 0.859375f, 0.840332f, 0.823730f, 0.809082f, 0.797363f, 0.786621f,
+ 0.004894f, 0.014786f, 0.025269f, 0.035614f, 0.045990f, 0.057129f, 0.068420f, 0.079224f,
+ 0.090698f, 0.102112f, 0.113708f, 0.125610f, 0.137817f, 0.149536f, 0.161377f, 0.174316f,
+ 0.185791f, 0.198486f, 0.211670f, 0.223389f, 0.236816f, 0.249512f, 0.261230f, 0.274414f,
+ 0.287598f, 0.300537f, 0.313232f, 0.326904f, 0.340576f, 0.353027f, 0.366211f, 0.379883f,
+ 0.393066f, 0.406006f, 0.419678f, 0.433350f, 0.446289f, 0.460205f, 0.473633f, 0.487305f,
+ 0.500977f, 0.515137f, 0.528320f, 0.542480f, 0.554688f, 0.569824f, 0.583008f, 0.597656f,
+ 0.610840f, 0.625488f, 0.638672f, 0.652832f, 0.666504f, 0.681152f, 0.694824f, 0.708984f,
+ 0.723145f, 0.737793f, 0.850098f, 0.833008f, 0.817383f, 0.802734f, 0.791992f, 0.780762f,
+ 0.004536f, 0.014160f, 0.023972f, 0.033630f, 0.043823f, 0.053955f, 0.064697f, 0.075195f,
+ 0.086365f, 0.096802f, 0.108276f, 0.119751f, 0.130493f, 0.142212f, 0.153687f, 0.165405f,
+ 0.177246f, 0.189331f, 0.201538f, 0.213501f, 0.225464f, 0.237915f, 0.250244f, 0.262939f,
+ 0.274902f, 0.288086f, 0.300781f, 0.312988f, 0.326172f, 0.339600f, 0.352051f, 0.365479f,
+ 0.377930f, 0.390625f, 0.403564f, 0.417480f, 0.430420f, 0.444092f, 0.457520f, 0.470215f,
+ 0.483643f, 0.497559f, 0.510742f, 0.524414f, 0.537598f, 0.551270f, 0.564941f, 0.579102f,
+ 0.592285f, 0.605957f, 0.619629f, 0.633789f, 0.647949f, 0.661621f, 0.675293f, 0.689453f,
+ 0.704102f, 0.718262f, 0.840332f, 0.825195f, 0.809570f, 0.797363f, 0.786133f, 0.776367f,
+ 0.004433f, 0.013138f, 0.022720f, 0.032013f, 0.041199f, 0.051147f, 0.061462f, 0.071716f,
+ 0.082336f, 0.091919f, 0.102722f, 0.113586f, 0.124390f, 0.135010f, 0.145996f, 0.157837f,
+ 0.168823f, 0.180054f, 0.192383f, 0.203491f, 0.215332f, 0.227417f, 0.239502f, 0.251221f,
+ 0.263672f, 0.275635f, 0.287842f, 0.300537f, 0.312500f, 0.324707f, 0.338135f, 0.350342f,
+ 0.363037f, 0.375977f, 0.388672f, 0.401611f, 0.413818f, 0.427246f, 0.440186f, 0.453613f,
+ 0.466064f, 0.479736f, 0.492920f, 0.506836f, 0.519531f, 0.533203f, 0.546875f, 0.560059f,
+ 0.573242f, 0.587402f, 0.600098f, 0.614746f, 0.628418f, 0.642578f, 0.657227f, 0.670898f,
+ 0.685059f, 0.699707f, 0.830566f, 0.816406f, 0.802734f, 0.791016f, 0.780273f, 0.770996f,
+ 0.004372f, 0.012619f, 0.021393f, 0.030350f, 0.039276f, 0.048523f, 0.058289f, 0.067505f,
+ 0.077393f, 0.087585f, 0.097290f, 0.107727f, 0.118225f, 0.128296f, 0.138550f, 0.149414f,
+ 0.160278f, 0.171631f, 0.182739f, 0.193359f, 0.205200f, 0.216187f, 0.228027f, 0.240234f,
+ 0.251465f, 0.263428f, 0.275146f, 0.287598f, 0.298828f, 0.311523f, 0.323242f, 0.336182f,
+ 0.348633f, 0.360107f, 0.372803f, 0.385986f, 0.398682f, 0.411621f, 0.424072f, 0.436523f,
+ 0.449951f, 0.462891f, 0.475098f, 0.488525f, 0.501953f, 0.514648f, 0.527344f, 0.541992f,
+ 0.555176f, 0.569336f, 0.582031f, 0.596191f, 0.609863f, 0.623047f, 0.637695f, 0.651855f,
+ 0.665527f, 0.679688f, 0.821289f, 0.808105f, 0.795410f, 0.784180f, 0.774902f, 0.765137f,
+ 0.003937f, 0.012169f, 0.020477f, 0.028641f, 0.037781f, 0.046448f, 0.055481f, 0.064209f,
+ 0.073181f, 0.082458f, 0.092651f, 0.101990f, 0.111572f, 0.121948f, 0.132202f, 0.142212f,
+ 0.151978f, 0.162720f, 0.173340f, 0.184326f, 0.195312f, 0.206055f, 0.217163f, 0.228516f,
+ 0.239990f, 0.250977f, 0.262695f, 0.274658f, 0.285889f, 0.297363f, 0.308838f, 0.321045f,
+ 0.333496f, 0.345459f, 0.357422f, 0.370117f, 0.382324f, 0.395020f, 0.407227f, 0.419922f,
+ 0.432617f, 0.444336f, 0.458008f, 0.470703f, 0.483398f, 0.497559f, 0.510254f, 0.522949f,
+ 0.536133f, 0.550293f, 0.562988f, 0.577637f, 0.590820f, 0.603516f, 0.618164f, 0.632324f,
+ 0.645508f, 0.660645f, 0.811035f, 0.800293f, 0.788086f, 0.777832f, 0.768555f, 0.760254f,
+ 0.003868f, 0.011368f, 0.019257f, 0.027512f, 0.035431f, 0.043274f, 0.051880f, 0.060852f,
+ 0.069214f, 0.078003f, 0.087524f, 0.096924f, 0.105896f, 0.115112f, 0.124817f, 0.134766f,
+ 0.144409f, 0.154663f, 0.164673f, 0.175415f, 0.184814f, 0.196289f, 0.206299f, 0.216797f,
+ 0.228394f, 0.239380f, 0.250244f, 0.260986f, 0.273193f, 0.284424f, 0.295410f, 0.307373f,
+ 0.319092f, 0.331299f, 0.342285f, 0.354248f, 0.366455f, 0.378662f, 0.390869f, 0.403809f,
+ 0.415771f, 0.427734f, 0.440430f, 0.453369f, 0.466309f, 0.479736f, 0.492188f, 0.504883f,
+ 0.518066f, 0.531250f, 0.544922f, 0.558105f, 0.571777f, 0.584473f, 0.598633f, 0.612305f,
+ 0.626465f, 0.641602f, 0.801758f, 0.792480f, 0.781738f, 0.770508f, 0.761230f, 0.753906f,
+ 0.003616f, 0.010872f, 0.018387f, 0.026077f, 0.033875f, 0.041351f, 0.049591f, 0.057434f,
+ 0.065674f, 0.073669f, 0.082153f, 0.091064f, 0.100098f, 0.109009f, 0.117981f, 0.127563f,
+ 0.137207f, 0.146362f, 0.156494f, 0.165894f, 0.176025f, 0.186157f, 0.196655f, 0.206421f,
+ 0.216919f, 0.227539f, 0.237915f, 0.249268f, 0.260254f, 0.270752f, 0.282471f, 0.293945f,
+ 0.305176f, 0.316406f, 0.328125f, 0.338867f, 0.350342f, 0.361816f, 0.375244f, 0.387207f,
+ 0.398926f, 0.411133f, 0.423584f, 0.436523f, 0.448730f, 0.461182f, 0.474121f, 0.485840f,
+ 0.499756f, 0.513672f, 0.525391f, 0.539062f, 0.552734f, 0.565918f, 0.580566f, 0.593750f,
+ 0.608398f, 0.621094f, 0.790527f, 0.783691f, 0.773926f, 0.764160f, 0.755859f, 0.747559f,
+ 0.003450f, 0.010429f, 0.017487f, 0.024445f, 0.031860f, 0.039581f, 0.046631f, 0.054718f,
+ 0.061951f, 0.070251f, 0.078003f, 0.086121f, 0.094910f, 0.102905f, 0.111572f, 0.120300f,
+ 0.129761f, 0.138428f, 0.147217f, 0.156982f, 0.166992f, 0.176147f, 0.186157f, 0.196045f,
+ 0.206299f, 0.216187f, 0.226318f, 0.236938f, 0.247437f, 0.258301f, 0.268311f, 0.279785f,
+ 0.290527f, 0.301758f, 0.312744f, 0.324219f, 0.335449f, 0.346680f, 0.359131f, 0.370605f,
+ 0.382812f, 0.394531f, 0.406982f, 0.419189f, 0.430908f, 0.443604f, 0.456055f, 0.468506f,
+ 0.481445f, 0.494873f, 0.506836f, 0.520996f, 0.534180f, 0.547363f, 0.561035f, 0.573730f,
+ 0.588379f, 0.601074f, 0.780762f, 0.775879f, 0.766602f, 0.757324f, 0.748535f, 0.741699f,
+ 0.003281f, 0.009811f, 0.016174f, 0.023438f, 0.030060f, 0.037109f, 0.044464f, 0.051239f,
+ 0.058441f, 0.066345f, 0.073792f, 0.081238f, 0.089539f, 0.097229f, 0.105286f, 0.113647f,
+ 0.122498f, 0.130615f, 0.139526f, 0.148438f, 0.157837f, 0.166626f, 0.176636f, 0.185547f,
+ 0.195312f, 0.204956f, 0.215088f, 0.224976f, 0.234863f, 0.245239f, 0.255859f, 0.266113f,
+ 0.276367f, 0.287354f, 0.298096f, 0.309326f, 0.320801f, 0.331787f, 0.343018f, 0.355225f,
+ 0.366211f, 0.378418f, 0.389893f, 0.401611f, 0.413574f, 0.425781f, 0.438721f, 0.451416f,
+ 0.463135f, 0.476074f, 0.489014f, 0.501465f, 0.514648f, 0.528809f, 0.541992f, 0.554688f,
+ 0.568848f, 0.582520f, 0.770508f, 0.767090f, 0.758789f, 0.750488f, 0.743164f, 0.735352f,
+ 0.002901f, 0.009422f, 0.015488f, 0.021729f, 0.028290f, 0.035278f, 0.041321f, 0.048523f,
+ 0.055420f, 0.062195f, 0.069336f, 0.076477f, 0.084412f, 0.091858f, 0.099609f, 0.107361f,
+ 0.115112f, 0.123535f, 0.131592f, 0.140137f, 0.148438f, 0.157715f, 0.166382f, 0.174927f,
+ 0.184692f, 0.193970f, 0.203369f, 0.212646f, 0.222656f, 0.232910f, 0.242920f, 0.252197f,
+ 0.263184f, 0.273438f, 0.284180f, 0.294922f, 0.305664f, 0.316895f, 0.327881f, 0.338867f,
+ 0.349854f, 0.361328f, 0.373291f, 0.385254f, 0.397461f, 0.408691f, 0.420898f, 0.433350f,
+ 0.445801f, 0.458252f, 0.470703f, 0.483154f, 0.496826f, 0.510254f, 0.522461f, 0.535645f,
+ 0.549805f, 0.562988f, 0.760742f, 0.758789f, 0.750488f, 0.743652f, 0.736328f, 0.729492f,
+ 0.002861f, 0.008606f, 0.014488f, 0.021057f, 0.026810f, 0.032898f, 0.038879f, 0.045532f,
+ 0.051666f, 0.058319f, 0.065125f, 0.072449f, 0.079224f, 0.086426f, 0.093689f, 0.100830f,
+ 0.108276f, 0.116089f, 0.123962f, 0.131958f, 0.140625f, 0.148560f, 0.156494f, 0.164795f,
+ 0.174194f, 0.183228f, 0.192017f, 0.201294f, 0.210815f, 0.220093f, 0.229858f, 0.239746f,
+ 0.249390f, 0.260010f, 0.270508f, 0.280518f, 0.290771f, 0.301758f, 0.312744f, 0.323486f,
+ 0.334473f, 0.345215f, 0.356934f, 0.368408f, 0.379883f, 0.391846f, 0.403564f, 0.416016f,
+ 0.427490f, 0.439453f, 0.452881f, 0.465332f, 0.478271f, 0.490234f, 0.503906f, 0.517090f,
+ 0.529785f, 0.543945f, 0.750000f, 0.750000f, 0.743164f, 0.736328f, 0.729492f, 0.723145f,
+ 0.002977f, 0.008492f, 0.013931f, 0.019745f, 0.024948f, 0.030991f, 0.036804f, 0.042755f,
+ 0.048889f, 0.055267f, 0.061737f, 0.067932f, 0.074829f, 0.081116f, 0.087646f, 0.095215f,
+ 0.102356f, 0.109436f, 0.116760f, 0.124023f, 0.131714f, 0.139648f, 0.147461f, 0.155762f,
+ 0.164185f, 0.172485f, 0.181152f, 0.189697f, 0.198730f, 0.208130f, 0.217285f, 0.226685f,
+ 0.236572f, 0.245850f, 0.255859f, 0.265869f, 0.276367f, 0.286377f, 0.297607f, 0.307861f,
+ 0.318359f, 0.329102f, 0.340576f, 0.351807f, 0.363281f, 0.374023f, 0.386230f, 0.397949f,
+ 0.409668f, 0.422119f, 0.434082f, 0.446777f, 0.459229f, 0.471924f, 0.484863f, 0.497803f,
+ 0.511230f, 0.525391f, 0.739746f, 0.741211f, 0.735352f, 0.729004f, 0.722656f, 0.717285f,
+ 0.002441f, 0.007896f, 0.013443f, 0.018402f, 0.023911f, 0.029343f, 0.034454f, 0.040375f,
+ 0.045868f, 0.051453f, 0.057800f, 0.063721f, 0.070068f, 0.075928f, 0.082520f, 0.089233f,
+ 0.095703f, 0.102478f, 0.109314f, 0.116638f, 0.123596f, 0.131348f, 0.138550f, 0.145996f,
+ 0.153809f, 0.162109f, 0.170044f, 0.179199f, 0.187866f, 0.196045f, 0.205078f, 0.213745f,
+ 0.223389f, 0.233032f, 0.242554f, 0.252197f, 0.261963f, 0.271973f, 0.281982f, 0.292236f,
+ 0.303223f, 0.312988f, 0.324463f, 0.335693f, 0.346191f, 0.357910f, 0.368652f, 0.380371f,
+ 0.391846f, 0.404541f, 0.415527f, 0.428467f, 0.440674f, 0.453369f, 0.466553f, 0.479248f,
+ 0.491455f, 0.505371f, 0.729492f, 0.732422f, 0.727539f, 0.721191f, 0.716309f, 0.709961f,
+ 0.002457f, 0.007553f, 0.012489f, 0.017548f, 0.022217f, 0.027405f, 0.032471f, 0.037689f,
+ 0.043060f, 0.048553f, 0.054230f, 0.059631f, 0.065369f, 0.071533f, 0.077393f, 0.083069f,
+ 0.089417f, 0.096069f, 0.102356f, 0.108398f, 0.115417f, 0.122925f, 0.130127f, 0.137451f,
+ 0.144531f, 0.152100f, 0.160156f, 0.168091f, 0.176514f, 0.184570f, 0.192871f, 0.201660f,
+ 0.210571f, 0.219238f, 0.229126f, 0.238281f, 0.248413f, 0.257812f, 0.267578f, 0.277588f,
+ 0.287354f, 0.298096f, 0.308594f, 0.319336f, 0.329590f, 0.340820f, 0.351318f, 0.363770f,
+ 0.375732f, 0.386963f, 0.397949f, 0.409912f, 0.422363f, 0.434326f, 0.446533f, 0.459473f,
+ 0.473145f, 0.486084f, 0.718750f, 0.723633f, 0.719727f, 0.713867f, 0.708984f, 0.703613f,
+ 0.002436f, 0.006939f, 0.011612f, 0.016113f, 0.021072f, 0.025497f, 0.030640f, 0.035339f,
+ 0.040222f, 0.045441f, 0.050690f, 0.055725f, 0.060669f, 0.066589f, 0.072144f, 0.077881f,
+ 0.083740f, 0.089294f, 0.095215f, 0.101501f, 0.108032f, 0.114868f, 0.121643f, 0.128052f,
+ 0.135010f, 0.142334f, 0.150024f, 0.157349f, 0.164917f, 0.173340f, 0.181274f, 0.189697f,
+ 0.198120f, 0.206909f, 0.215698f, 0.224365f, 0.234497f, 0.243652f, 0.252930f, 0.262695f,
+ 0.272461f, 0.282471f, 0.292480f, 0.302979f, 0.313721f, 0.324463f, 0.335205f, 0.346436f,
+ 0.357666f, 0.369141f, 0.380859f, 0.391602f, 0.404541f, 0.416016f, 0.428467f, 0.440918f,
+ 0.454102f, 0.466553f, 0.708496f, 0.715820f, 0.711426f, 0.706055f, 0.701660f, 0.696777f,
+ 0.002188f, 0.006599f, 0.011032f, 0.015068f, 0.019897f, 0.024048f, 0.028656f, 0.033264f,
+ 0.037720f, 0.042236f, 0.047028f, 0.051941f, 0.056824f, 0.062012f, 0.067444f, 0.072449f,
+ 0.077942f, 0.083374f, 0.088867f, 0.094727f, 0.100769f, 0.106750f, 0.112732f, 0.119263f,
+ 0.126099f, 0.133179f, 0.139648f, 0.146729f, 0.154175f, 0.161987f, 0.170044f, 0.177612f,
+ 0.185791f, 0.194214f, 0.203125f, 0.211670f, 0.220581f, 0.229370f, 0.238770f, 0.248047f,
+ 0.257812f, 0.267822f, 0.277344f, 0.287109f, 0.297363f, 0.307861f, 0.318848f, 0.329590f,
+ 0.341064f, 0.351562f, 0.363037f, 0.374512f, 0.385498f, 0.397461f, 0.409668f, 0.422363f,
+ 0.434326f, 0.447021f, 0.697266f, 0.706543f, 0.703125f, 0.698730f, 0.694336f, 0.689941f,
+ 0.002024f, 0.006165f, 0.010399f, 0.014481f, 0.018555f, 0.022797f, 0.026627f, 0.030869f,
+ 0.035187f, 0.039459f, 0.043732f, 0.047943f, 0.052917f, 0.057434f, 0.062622f, 0.067261f,
+ 0.071838f, 0.077454f, 0.082581f, 0.087891f, 0.093628f, 0.099182f, 0.105469f, 0.111206f,
+ 0.117126f, 0.123779f, 0.130371f, 0.137085f, 0.143921f, 0.151001f, 0.158691f, 0.166016f,
+ 0.173950f, 0.181641f, 0.190063f, 0.198120f, 0.206909f, 0.215698f, 0.224976f, 0.233398f,
+ 0.242798f, 0.252197f, 0.262207f, 0.271973f, 0.281738f, 0.291992f, 0.302734f, 0.313477f,
+ 0.323242f, 0.334229f, 0.345459f, 0.355957f, 0.368652f, 0.380615f, 0.391602f, 0.403809f,
+ 0.415771f, 0.428467f, 0.686523f, 0.696777f, 0.695312f, 0.691895f, 0.687500f, 0.683105f,
+ 0.001931f, 0.005970f, 0.009651f, 0.013557f, 0.017136f, 0.021088f, 0.024902f, 0.028748f,
+ 0.032623f, 0.036743f, 0.040833f, 0.044983f, 0.049591f, 0.053467f, 0.057800f, 0.062500f,
+ 0.066833f, 0.071533f, 0.076538f, 0.081238f, 0.086670f, 0.092224f, 0.097290f, 0.103088f,
+ 0.108887f, 0.114990f, 0.120972f, 0.127197f, 0.134277f, 0.140503f, 0.147705f, 0.154663f,
+ 0.162231f, 0.169922f, 0.177612f, 0.185303f, 0.193604f, 0.201904f, 0.210815f, 0.219238f,
+ 0.228516f, 0.237427f, 0.247070f, 0.256592f, 0.265869f, 0.275879f, 0.285645f, 0.295898f,
+ 0.306396f, 0.317139f, 0.328369f, 0.338623f, 0.350342f, 0.362305f, 0.374023f, 0.385010f,
+ 0.397461f, 0.410156f, 0.675781f, 0.687988f, 0.687012f, 0.683594f, 0.680664f, 0.676270f,
+ 0.001725f, 0.005436f, 0.009171f, 0.012589f, 0.016190f, 0.019485f, 0.023132f, 0.026978f,
+ 0.030899f, 0.034180f, 0.037659f, 0.041565f, 0.045074f, 0.049438f, 0.053345f, 0.057739f,
+ 0.061768f, 0.065918f, 0.070679f, 0.075073f, 0.080078f, 0.084656f, 0.089966f, 0.095215f,
+ 0.100464f, 0.106445f, 0.112000f, 0.117615f, 0.124207f, 0.130737f, 0.136719f, 0.144043f,
+ 0.151123f, 0.158081f, 0.165405f, 0.173096f, 0.181152f, 0.189087f, 0.197510f, 0.205688f,
+ 0.214600f, 0.223145f, 0.232178f, 0.241699f, 0.250732f, 0.260254f, 0.270264f, 0.279785f,
+ 0.289795f, 0.300293f, 0.310791f, 0.322510f, 0.333496f, 0.344238f, 0.355713f, 0.367188f,
+ 0.379395f, 0.392090f, 0.664551f, 0.678711f, 0.678223f, 0.675781f, 0.672852f, 0.669922f,
+ 0.001741f, 0.005077f, 0.008522f, 0.011810f, 0.014946f, 0.018524f, 0.021332f, 0.024872f,
+ 0.028519f, 0.031799f, 0.034973f, 0.038727f, 0.041992f, 0.045654f, 0.049072f, 0.052856f,
+ 0.056671f, 0.060638f, 0.064819f, 0.069092f, 0.073425f, 0.078125f, 0.082886f, 0.087280f,
+ 0.092651f, 0.098206f, 0.103638f, 0.109192f, 0.114563f, 0.120667f, 0.126709f, 0.133057f,
+ 0.139771f, 0.146851f, 0.153931f, 0.160767f, 0.168457f, 0.175903f, 0.183838f, 0.192505f,
+ 0.200195f, 0.208618f, 0.217407f, 0.226562f, 0.236084f, 0.245239f, 0.254639f, 0.263672f,
+ 0.273926f, 0.283447f, 0.294189f, 0.304932f, 0.315674f, 0.326172f, 0.337402f, 0.348877f,
+ 0.360107f, 0.373291f, 0.653809f, 0.670410f, 0.669922f, 0.667480f, 0.665527f, 0.662109f,
+ 0.001639f, 0.004951f, 0.007996f, 0.010857f, 0.013779f, 0.016968f, 0.019974f, 0.023392f,
+ 0.026001f, 0.029373f, 0.032013f, 0.035370f, 0.038513f, 0.041992f, 0.044586f, 0.048706f,
+ 0.052124f, 0.055634f, 0.059723f, 0.063354f, 0.067444f, 0.071289f, 0.075745f, 0.080444f,
+ 0.085022f, 0.089722f, 0.095032f, 0.100220f, 0.105347f, 0.111206f, 0.117126f, 0.123108f,
+ 0.129395f, 0.135620f, 0.142090f, 0.148682f, 0.156372f, 0.163574f, 0.170898f, 0.178711f,
+ 0.186890f, 0.194580f, 0.203613f, 0.211426f, 0.220459f, 0.229492f, 0.238281f, 0.248169f,
+ 0.257324f, 0.267578f, 0.277832f, 0.287354f, 0.298340f, 0.308350f, 0.319824f, 0.331543f,
+ 0.342041f, 0.354248f, 0.641602f, 0.660645f, 0.662109f, 0.660645f, 0.658203f, 0.654785f,
+ 0.001569f, 0.004539f, 0.007538f, 0.010368f, 0.013359f, 0.016006f, 0.018539f, 0.021210f,
+ 0.024384f, 0.026855f, 0.029892f, 0.032471f, 0.035034f, 0.038177f, 0.041199f, 0.044434f,
+ 0.047485f, 0.050781f, 0.054321f, 0.057953f, 0.061523f, 0.065430f, 0.069275f, 0.073547f,
+ 0.077820f, 0.082092f, 0.086731f, 0.091736f, 0.096985f, 0.101990f, 0.107361f, 0.112549f,
+ 0.118774f, 0.124878f, 0.131104f, 0.137573f, 0.144409f, 0.150635f, 0.157837f, 0.165283f,
+ 0.173340f, 0.181274f, 0.188599f, 0.197510f, 0.205933f, 0.214600f, 0.223633f, 0.232056f,
+ 0.241577f, 0.251709f, 0.261230f, 0.270996f, 0.281250f, 0.291260f, 0.302246f, 0.313477f,
+ 0.323730f, 0.336182f, 0.630859f, 0.651855f, 0.652832f, 0.652344f, 0.650391f, 0.647461f,
+ 0.001558f, 0.004139f, 0.007103f, 0.009560f, 0.012077f, 0.014313f, 0.016983f, 0.019653f,
+ 0.021988f, 0.024490f, 0.027023f, 0.029526f, 0.031891f, 0.034821f, 0.037903f, 0.040192f,
+ 0.043457f, 0.046417f, 0.049316f, 0.052795f, 0.055725f, 0.059357f, 0.063354f, 0.066895f,
+ 0.070740f, 0.074890f, 0.078979f, 0.083801f, 0.088440f, 0.093018f, 0.097961f, 0.103394f,
+ 0.108704f, 0.114563f, 0.120239f, 0.126343f, 0.132690f, 0.139038f, 0.145874f, 0.152710f,
+ 0.159912f, 0.168091f, 0.175537f, 0.183228f, 0.191650f, 0.199707f, 0.208130f, 0.216797f,
+ 0.226074f, 0.235352f, 0.244507f, 0.254395f, 0.264404f, 0.274414f, 0.285156f, 0.296631f,
+ 0.307373f, 0.318604f, 0.619141f, 0.643066f, 0.644531f, 0.644043f, 0.642578f, 0.639648f,
+ 0.001314f, 0.004002f, 0.006603f, 0.009056f, 0.011490f, 0.013184f, 0.015587f, 0.017883f,
+ 0.020157f, 0.022415f, 0.024582f, 0.027206f, 0.029160f, 0.031677f, 0.034088f, 0.036530f,
+ 0.039337f, 0.042206f, 0.044891f, 0.047729f, 0.050751f, 0.053955f, 0.057312f, 0.060486f,
+ 0.064148f, 0.068054f, 0.071960f, 0.075867f, 0.079895f, 0.084595f, 0.089172f, 0.094238f,
+ 0.098999f, 0.104492f, 0.109802f, 0.115173f, 0.121338f, 0.127686f, 0.134033f, 0.140991f,
+ 0.147095f, 0.154541f, 0.161865f, 0.169800f, 0.177368f, 0.185547f, 0.193848f, 0.201904f,
+ 0.211060f, 0.219116f, 0.229004f, 0.238525f, 0.248047f, 0.257812f, 0.267822f, 0.277832f,
+ 0.289062f, 0.300537f, 0.607910f, 0.633301f, 0.636230f, 0.635742f, 0.634766f, 0.633301f,
+ 0.001217f, 0.003571f, 0.005947f, 0.008011f, 0.010391f, 0.012207f, 0.014313f, 0.016617f,
+ 0.018280f, 0.020523f, 0.022537f, 0.024475f, 0.026443f, 0.028778f, 0.030884f, 0.032867f,
+ 0.035553f, 0.037872f, 0.040375f, 0.042938f, 0.045593f, 0.048431f, 0.051605f, 0.054688f,
+ 0.057953f, 0.061279f, 0.065002f, 0.068665f, 0.072266f, 0.076294f, 0.080872f, 0.085083f,
+ 0.089783f, 0.094482f, 0.099915f, 0.104736f, 0.110901f, 0.116272f, 0.122314f, 0.128784f,
+ 0.134888f, 0.142090f, 0.148560f, 0.155884f, 0.163574f, 0.171753f, 0.179077f, 0.187500f,
+ 0.195679f, 0.204346f, 0.213745f, 0.222656f, 0.231812f, 0.241455f, 0.250977f, 0.261230f,
+ 0.272461f, 0.282959f, 0.596680f, 0.623535f, 0.627441f, 0.627930f, 0.627441f, 0.625000f,
+ 0.001111f, 0.003542f, 0.005569f, 0.007504f, 0.009338f, 0.011452f, 0.012939f, 0.015030f,
+ 0.016678f, 0.018326f, 0.020203f, 0.022217f, 0.023788f, 0.025604f, 0.027771f, 0.029877f,
+ 0.031860f, 0.033813f, 0.036102f, 0.038605f, 0.040985f, 0.043579f, 0.046448f, 0.049042f,
+ 0.051849f, 0.055054f, 0.058319f, 0.061615f, 0.065125f, 0.068909f, 0.072815f, 0.076843f,
+ 0.080872f, 0.085571f, 0.089905f, 0.095398f, 0.100159f, 0.105713f, 0.111206f, 0.116882f,
+ 0.122925f, 0.129517f, 0.135742f, 0.142822f, 0.149902f, 0.157349f, 0.165161f, 0.172852f,
+ 0.181152f, 0.189331f, 0.198120f, 0.206909f, 0.215820f, 0.225342f, 0.235474f, 0.245239f,
+ 0.254883f, 0.266602f, 0.584473f, 0.614746f, 0.619141f, 0.619629f, 0.619141f, 0.618164f,
+ 0.001149f, 0.003147f, 0.004826f, 0.006886f, 0.008629f, 0.010452f, 0.012024f, 0.013359f,
+ 0.015175f, 0.016647f, 0.018143f, 0.019882f, 0.021332f, 0.023026f, 0.024902f, 0.026550f,
+ 0.028397f, 0.030045f, 0.032318f, 0.034393f, 0.036682f, 0.038910f, 0.041107f, 0.043671f,
+ 0.046295f, 0.048950f, 0.051819f, 0.054993f, 0.058258f, 0.061523f, 0.065063f, 0.068481f,
+ 0.072510f, 0.076965f, 0.081055f, 0.085510f, 0.090393f, 0.095093f, 0.100342f, 0.105774f,
+ 0.111694f, 0.117371f, 0.124084f, 0.130371f, 0.136963f, 0.143921f, 0.151245f, 0.159058f,
+ 0.166626f, 0.174927f, 0.182983f, 0.191650f, 0.200195f, 0.209473f, 0.218750f, 0.228149f,
+ 0.238037f, 0.249146f, 0.572266f, 0.604980f, 0.609863f, 0.611328f, 0.610352f, 0.611328f,
+ 0.001009f, 0.003059f, 0.004620f, 0.006283f, 0.007881f, 0.009415f, 0.010864f, 0.011940f,
+ 0.013443f, 0.014847f, 0.016403f, 0.017700f, 0.019012f, 0.020493f, 0.021927f, 0.023697f,
+ 0.025177f, 0.026947f, 0.028732f, 0.030472f, 0.032654f, 0.034302f, 0.036591f, 0.038757f,
+ 0.041046f, 0.043488f, 0.045837f, 0.048706f, 0.051544f, 0.054810f, 0.057770f, 0.061188f,
+ 0.064331f, 0.068237f, 0.072083f, 0.076416f, 0.080872f, 0.085388f, 0.090149f, 0.095276f,
+ 0.100403f, 0.105896f, 0.111877f, 0.117798f, 0.124329f, 0.130859f, 0.138062f, 0.145020f,
+ 0.152710f, 0.160034f, 0.168335f, 0.176514f, 0.185059f, 0.193481f, 0.203125f, 0.212158f,
+ 0.221924f, 0.232178f, 0.562500f, 0.594727f, 0.601074f, 0.602539f, 0.603516f, 0.602539f,
+ 0.000865f, 0.002674f, 0.004444f, 0.005615f, 0.007233f, 0.008430f, 0.009827f, 0.010880f,
+ 0.011917f, 0.013206f, 0.014412f, 0.015717f, 0.016876f, 0.018173f, 0.019501f, 0.020950f,
+ 0.022217f, 0.023773f, 0.025284f, 0.026749f, 0.028610f, 0.030151f, 0.032166f, 0.034149f,
+ 0.036041f, 0.038330f, 0.040558f, 0.042877f, 0.045532f, 0.048157f, 0.050934f, 0.053894f,
+ 0.056946f, 0.060303f, 0.063843f, 0.067566f, 0.071472f, 0.075806f, 0.080261f, 0.084778f,
+ 0.089600f, 0.094971f, 0.100220f, 0.105896f, 0.111877f, 0.118103f, 0.125000f, 0.131348f,
+ 0.138550f, 0.146362f, 0.153687f, 0.161987f, 0.169678f, 0.178223f, 0.187134f, 0.196045f,
+ 0.205811f, 0.215698f, 0.549805f, 0.584961f, 0.592773f, 0.594238f, 0.593750f, 0.595215f,
+ 0.000951f, 0.002476f, 0.003956f, 0.005062f, 0.006268f, 0.007637f, 0.008888f, 0.009666f,
+ 0.010628f, 0.011810f, 0.012856f, 0.013878f, 0.014946f, 0.015900f, 0.017227f, 0.018356f,
+ 0.019592f, 0.020889f, 0.022003f, 0.023438f, 0.025101f, 0.026489f, 0.028122f, 0.029739f,
+ 0.031555f, 0.033295f, 0.035431f, 0.037537f, 0.039795f, 0.041962f, 0.044647f, 0.047302f,
+ 0.049957f, 0.052979f, 0.056122f, 0.059387f, 0.062927f, 0.066956f, 0.070679f, 0.074951f,
+ 0.079468f, 0.084167f, 0.089294f, 0.094482f, 0.100098f, 0.106018f, 0.112061f, 0.118835f,
+ 0.125366f, 0.132446f, 0.139893f, 0.147827f, 0.155762f, 0.163574f, 0.172607f, 0.180786f,
+ 0.190063f, 0.199951f, 0.536621f, 0.576172f, 0.583496f, 0.586914f, 0.587402f, 0.586914f,
+ 0.000788f, 0.002115f, 0.003592f, 0.004780f, 0.005939f, 0.006615f, 0.007740f, 0.008598f,
+ 0.009514f, 0.010376f, 0.011200f, 0.012138f, 0.013016f, 0.014069f, 0.014977f, 0.015961f,
+ 0.016922f, 0.018036f, 0.019043f, 0.020447f, 0.021606f, 0.022995f, 0.024323f, 0.025864f,
+ 0.027344f, 0.028946f, 0.030731f, 0.032593f, 0.034515f, 0.036530f, 0.038910f, 0.041016f,
+ 0.043274f, 0.046021f, 0.048981f, 0.051819f, 0.055176f, 0.058472f, 0.062012f, 0.065857f,
+ 0.069946f, 0.074219f, 0.078796f, 0.083801f, 0.088806f, 0.094299f, 0.100281f, 0.106018f,
+ 0.112793f, 0.119446f, 0.126343f, 0.133545f, 0.141357f, 0.149292f, 0.157104f, 0.165894f,
+ 0.174683f, 0.184326f, 0.524902f, 0.566895f, 0.575195f, 0.576660f, 0.579102f, 0.579590f,
+ 0.000661f, 0.001961f, 0.003382f, 0.004311f, 0.005161f, 0.006062f, 0.006737f, 0.007427f,
+ 0.008286f, 0.008995f, 0.009857f, 0.010368f, 0.011230f, 0.011955f, 0.012833f, 0.013786f,
+ 0.014565f, 0.015480f, 0.016647f, 0.017578f, 0.018677f, 0.019806f, 0.020950f, 0.022263f,
+ 0.023651f, 0.024994f, 0.026306f, 0.027863f, 0.029724f, 0.031525f, 0.033325f, 0.035370f,
+ 0.037292f, 0.039673f, 0.042114f, 0.044769f, 0.047546f, 0.050537f, 0.053680f, 0.057098f,
+ 0.060852f, 0.064514f, 0.069031f, 0.073303f, 0.078064f, 0.083069f, 0.088379f, 0.094238f,
+ 0.100220f, 0.106689f, 0.113342f, 0.120300f, 0.127563f, 0.135132f, 0.142700f, 0.151245f,
+ 0.160034f, 0.168823f, 0.512695f, 0.557129f, 0.566406f, 0.569824f, 0.569824f, 0.571289f,
+ 0.000757f, 0.001709f, 0.002844f, 0.003582f, 0.004448f, 0.005192f, 0.005989f, 0.006519f,
+ 0.007038f, 0.007801f, 0.008453f, 0.009071f, 0.009727f, 0.010391f, 0.011009f, 0.011726f,
+ 0.012650f, 0.013184f, 0.014107f, 0.014977f, 0.015900f, 0.016800f, 0.017776f, 0.018936f,
+ 0.020172f, 0.021271f, 0.022446f, 0.023697f, 0.025055f, 0.026703f, 0.028397f, 0.030014f,
+ 0.031921f, 0.033905f, 0.035919f, 0.038177f, 0.040680f, 0.043243f, 0.045898f, 0.049072f,
+ 0.052216f, 0.055725f, 0.059784f, 0.063538f, 0.067688f, 0.072327f, 0.077271f, 0.082764f,
+ 0.088379f, 0.094299f, 0.100708f, 0.107239f, 0.114136f, 0.121582f, 0.128906f, 0.136963f,
+ 0.145630f, 0.153564f, 0.500977f, 0.547852f, 0.556641f, 0.561523f, 0.562500f, 0.563965f,
+ 0.000704f, 0.001769f, 0.002542f, 0.003523f, 0.004036f, 0.004562f, 0.005032f, 0.005661f,
+ 0.006176f, 0.006542f, 0.007072f, 0.007698f, 0.008339f, 0.008827f, 0.009323f, 0.010094f,
+ 0.010757f, 0.011276f, 0.012093f, 0.012733f, 0.013489f, 0.014488f, 0.015244f, 0.016006f,
+ 0.017151f, 0.017975f, 0.018967f, 0.020142f, 0.021255f, 0.022552f, 0.023880f, 0.025314f,
+ 0.026840f, 0.028503f, 0.030441f, 0.032166f, 0.034424f, 0.036438f, 0.039001f, 0.041656f,
+ 0.044464f, 0.047455f, 0.050842f, 0.054443f, 0.058167f, 0.062286f, 0.066956f, 0.071899f,
+ 0.076904f, 0.082458f, 0.088501f, 0.094482f, 0.101196f, 0.108337f, 0.115662f, 0.123352f,
+ 0.130981f, 0.139282f, 0.489746f, 0.538574f, 0.547852f, 0.551270f, 0.554688f, 0.555176f,
+ 0.000579f, 0.001450f, 0.002396f, 0.002857f, 0.003454f, 0.004032f, 0.004356f, 0.004791f,
+ 0.005333f, 0.005718f, 0.006130f, 0.006485f, 0.007042f, 0.007473f, 0.007988f, 0.008476f,
+ 0.008865f, 0.009613f, 0.010086f, 0.010651f, 0.011345f, 0.012047f, 0.012764f, 0.013435f,
+ 0.014282f, 0.015144f, 0.015884f, 0.016846f, 0.017868f, 0.018814f, 0.020050f, 0.021164f,
+ 0.022507f, 0.023773f, 0.025192f, 0.026978f, 0.028564f, 0.030640f, 0.032623f, 0.034882f,
+ 0.037231f, 0.039886f, 0.042786f, 0.046143f, 0.049286f, 0.052979f, 0.057098f, 0.061279f,
+ 0.066223f, 0.071167f, 0.076660f, 0.082581f, 0.088989f, 0.095581f, 0.102661f, 0.109863f,
+ 0.117737f, 0.125488f, 0.476807f, 0.528320f, 0.538574f, 0.543945f, 0.546875f, 0.546875f,
+ 0.000510f, 0.001428f, 0.002037f, 0.002613f, 0.003086f, 0.003290f, 0.003672f, 0.004108f,
+ 0.004345f, 0.004768f, 0.005035f, 0.005470f, 0.005959f, 0.006207f, 0.006599f, 0.007095f,
+ 0.007568f, 0.008003f, 0.008377f, 0.008904f, 0.009575f, 0.010010f, 0.010643f, 0.011131f,
+ 0.011871f, 0.012535f, 0.013199f, 0.014038f, 0.014839f, 0.015640f, 0.016586f, 0.017502f,
+ 0.018585f, 0.019745f, 0.021088f, 0.022354f, 0.023727f, 0.025253f, 0.026962f, 0.028870f,
+ 0.030762f, 0.033051f, 0.035492f, 0.038177f, 0.041229f, 0.044403f, 0.048004f, 0.051880f,
+ 0.056213f, 0.060516f, 0.065857f, 0.071045f, 0.077271f, 0.083374f, 0.090027f, 0.096863f,
+ 0.104492f, 0.112183f, 0.463623f, 0.518066f, 0.529785f, 0.535156f, 0.538086f, 0.540039f,
+ 0.000473f, 0.001222f, 0.001771f, 0.002117f, 0.002323f, 0.002796f, 0.003096f, 0.003355f,
+ 0.003601f, 0.003975f, 0.004295f, 0.004543f, 0.004833f, 0.005142f, 0.005455f, 0.005848f,
+ 0.006165f, 0.006535f, 0.006947f, 0.007370f, 0.007809f, 0.008240f, 0.008690f, 0.009216f,
+ 0.009758f, 0.010223f, 0.010925f, 0.011536f, 0.012146f, 0.012833f, 0.013573f, 0.014389f,
+ 0.015244f, 0.016220f, 0.017120f, 0.018219f, 0.019379f, 0.020599f, 0.021988f, 0.023514f,
+ 0.025131f, 0.027054f, 0.029037f, 0.031311f, 0.033752f, 0.036591f, 0.039520f, 0.042999f,
+ 0.046661f, 0.050873f, 0.055603f, 0.060333f, 0.066101f, 0.071960f, 0.078491f, 0.084961f,
+ 0.091797f, 0.099426f, 0.452148f, 0.508301f, 0.520508f, 0.526367f, 0.528809f, 0.530273f,
+ 0.000299f, 0.001057f, 0.001329f, 0.001771f, 0.001957f, 0.002350f, 0.002483f, 0.002697f,
+ 0.002964f, 0.003181f, 0.003441f, 0.003653f, 0.003904f, 0.004238f, 0.004501f, 0.004738f,
+ 0.005024f, 0.005390f, 0.005657f, 0.005985f, 0.006279f, 0.006714f, 0.007053f, 0.007507f,
+ 0.007881f, 0.008369f, 0.008774f, 0.009300f, 0.009888f, 0.010483f, 0.011093f, 0.011627f,
+ 0.012398f, 0.013130f, 0.013855f, 0.014717f, 0.015686f, 0.016739f, 0.017761f, 0.018890f,
+ 0.020248f, 0.021698f, 0.023376f, 0.025131f, 0.027237f, 0.029556f, 0.032166f, 0.035004f,
+ 0.038208f, 0.041962f, 0.045868f, 0.050507f, 0.055359f, 0.060852f, 0.066772f, 0.073242f,
+ 0.080017f, 0.087097f, 0.440674f, 0.498047f, 0.511719f, 0.517090f, 0.520508f, 0.522949f,
+ 0.000427f, 0.001020f, 0.001253f, 0.001431f, 0.001690f, 0.001900f, 0.002018f, 0.002304f,
+ 0.002481f, 0.002569f, 0.002731f, 0.002998f, 0.003157f, 0.003424f, 0.003592f, 0.003838f,
+ 0.004017f, 0.004253f, 0.004551f, 0.004776f, 0.005100f, 0.005379f, 0.005699f, 0.005932f,
+ 0.006290f, 0.006630f, 0.007038f, 0.007465f, 0.007927f, 0.008286f, 0.008858f, 0.009293f,
+ 0.009888f, 0.010429f, 0.011086f, 0.011765f, 0.012482f, 0.013298f, 0.014168f, 0.015068f,
+ 0.016129f, 0.017288f, 0.018585f, 0.019943f, 0.021622f, 0.023361f, 0.025436f, 0.027847f,
+ 0.030655f, 0.033447f, 0.037079f, 0.041229f, 0.045776f, 0.050568f, 0.056061f, 0.062317f,
+ 0.068726f, 0.075684f, 0.427734f, 0.488525f, 0.502441f, 0.508789f, 0.513184f, 0.513672f,
+ 0.000255f, 0.000597f, 0.001032f, 0.001150f, 0.001353f, 0.001493f, 0.001608f, 0.001750f,
+ 0.001933f, 0.002062f, 0.002178f, 0.002302f, 0.002474f, 0.002670f, 0.002872f, 0.002995f,
+ 0.003147f, 0.003298f, 0.003565f, 0.003729f, 0.003941f, 0.004219f, 0.004436f, 0.004719f,
+ 0.005005f, 0.005230f, 0.005489f, 0.005806f, 0.006191f, 0.006496f, 0.006897f, 0.007267f,
+ 0.007671f, 0.008179f, 0.008636f, 0.009163f, 0.009766f, 0.010368f, 0.011047f, 0.011810f,
+ 0.012611f, 0.013527f, 0.014519f, 0.015640f, 0.016800f, 0.018265f, 0.019897f, 0.021698f,
+ 0.023895f, 0.026260f, 0.029175f, 0.032715f, 0.036682f, 0.041168f, 0.045929f, 0.051758f,
+ 0.057922f, 0.064575f, 0.415771f, 0.478271f, 0.493652f, 0.500000f, 0.503906f, 0.505859f,
+ 0.000255f, 0.000544f, 0.000863f, 0.000994f, 0.001086f, 0.001183f, 0.001317f, 0.001328f,
+ 0.001491f, 0.001608f, 0.001716f, 0.001851f, 0.001943f, 0.002075f, 0.002161f, 0.002319f,
+ 0.002426f, 0.002596f, 0.002741f, 0.002884f, 0.003088f, 0.003265f, 0.003391f, 0.003620f,
+ 0.003777f, 0.004005f, 0.004215f, 0.004452f, 0.004734f, 0.004963f, 0.005341f, 0.005577f,
+ 0.005875f, 0.006271f, 0.006603f, 0.006996f, 0.007450f, 0.007919f, 0.008446f, 0.009003f,
+ 0.009674f, 0.010338f, 0.011101f, 0.011909f, 0.012917f, 0.013977f, 0.015190f, 0.016495f,
+ 0.018112f, 0.020325f, 0.022415f, 0.025146f, 0.028473f, 0.032349f, 0.036804f, 0.041992f,
+ 0.047913f, 0.054077f, 0.404541f, 0.468506f, 0.484131f, 0.490967f, 0.495361f, 0.498291f,
+ 0.000377f, 0.000440f, 0.000606f, 0.000685f, 0.000735f, 0.000876f, 0.000929f, 0.001035f,
+ 0.001068f, 0.001157f, 0.001307f, 0.001381f, 0.001473f, 0.001595f, 0.001664f, 0.001708f,
+ 0.001850f, 0.001957f, 0.002043f, 0.002195f, 0.002291f, 0.002422f, 0.002571f, 0.002687f,
+ 0.002842f, 0.002979f, 0.003183f, 0.003345f, 0.003532f, 0.003794f, 0.004002f, 0.004154f,
+ 0.004429f, 0.004635f, 0.004967f, 0.005253f, 0.005573f, 0.005909f, 0.006275f, 0.006695f,
+ 0.007183f, 0.007660f, 0.008316f, 0.008934f, 0.009644f, 0.010429f, 0.011360f, 0.012497f,
+ 0.013634f, 0.014977f, 0.016663f, 0.018875f, 0.021423f, 0.024643f, 0.028549f, 0.033020f,
+ 0.038483f, 0.044525f, 0.391602f, 0.458984f, 0.474854f, 0.482178f, 0.488037f, 0.489990f,
+ 0.000159f, 0.000401f, 0.000450f, 0.000522f, 0.000605f, 0.000634f, 0.000728f, 0.000702f,
+ 0.000808f, 0.000882f, 0.000959f, 0.000991f, 0.001043f, 0.001112f, 0.001205f, 0.001245f,
+ 0.001357f, 0.001419f, 0.001513f, 0.001546f, 0.001648f, 0.001752f, 0.001863f, 0.001942f,
+ 0.002056f, 0.002159f, 0.002289f, 0.002392f, 0.002506f, 0.002697f, 0.002827f, 0.003023f,
+ 0.003172f, 0.003330f, 0.003542f, 0.003750f, 0.004017f, 0.004292f, 0.004559f, 0.004871f,
+ 0.005161f, 0.005539f, 0.005932f, 0.006416f, 0.006973f, 0.007526f, 0.008232f, 0.008980f,
+ 0.009918f, 0.010895f, 0.012085f, 0.013680f, 0.015472f, 0.017975f, 0.021103f, 0.025146f,
+ 0.029938f, 0.035645f, 0.379395f, 0.448486f, 0.465820f, 0.473633f, 0.478760f, 0.481689f,
+ 0.000112f, 0.000220f, 0.000321f, 0.000322f, 0.000401f, 0.000489f, 0.000469f, 0.000510f,
+ 0.000568f, 0.000653f, 0.000659f, 0.000676f, 0.000703f, 0.000789f, 0.000811f, 0.000886f,
+ 0.000888f, 0.000994f, 0.001048f, 0.001096f, 0.001155f, 0.001220f, 0.001289f, 0.001357f,
+ 0.001431f, 0.001496f, 0.001599f, 0.001675f, 0.001759f, 0.001894f, 0.001965f, 0.002083f,
+ 0.002193f, 0.002310f, 0.002464f, 0.002634f, 0.002758f, 0.002949f, 0.003134f, 0.003319f,
+ 0.003551f, 0.003830f, 0.004120f, 0.004440f, 0.004784f, 0.005188f, 0.005680f, 0.006222f,
+ 0.006886f, 0.007614f, 0.008461f, 0.009529f, 0.010864f, 0.012596f, 0.014961f, 0.018097f,
+ 0.022263f, 0.027466f, 0.367920f, 0.438232f, 0.456543f, 0.465332f, 0.470215f, 0.472900f,
+ 0.000140f, 0.000219f, 0.000241f, 0.000245f, 0.000290f, 0.000291f, 0.000302f, 0.000342f,
+ 0.000380f, 0.000409f, 0.000408f, 0.000485f, 0.000473f, 0.000527f, 0.000556f, 0.000575f,
+ 0.000630f, 0.000642f, 0.000673f, 0.000711f, 0.000762f, 0.000800f, 0.000852f, 0.000886f,
+ 0.000952f, 0.000982f, 0.001049f, 0.001108f, 0.001159f, 0.001220f, 0.001281f, 0.001369f,
+ 0.001454f, 0.001522f, 0.001595f, 0.001695f, 0.001839f, 0.001928f, 0.002068f, 0.002209f,
+ 0.002337f, 0.002504f, 0.002686f, 0.002876f, 0.003139f, 0.003437f, 0.003723f, 0.004078f,
+ 0.004509f, 0.005009f, 0.005615f, 0.006332f, 0.007317f, 0.008461f, 0.009926f, 0.012154f,
+ 0.015640f, 0.020325f, 0.356445f, 0.429199f, 0.447266f, 0.456299f, 0.462158f, 0.464844f,
+ 0.000048f, 0.000154f, 0.000141f, 0.000147f, 0.000174f, 0.000207f, 0.000188f, 0.000221f,
+ 0.000233f, 0.000242f, 0.000248f, 0.000271f, 0.000299f, 0.000312f, 0.000337f, 0.000350f,
+ 0.000367f, 0.000403f, 0.000416f, 0.000458f, 0.000465f, 0.000483f, 0.000507f, 0.000546f,
+ 0.000576f, 0.000625f, 0.000637f, 0.000659f, 0.000705f, 0.000742f, 0.000797f, 0.000837f,
+ 0.000890f, 0.000925f, 0.000978f, 0.001036f, 0.001103f, 0.001181f, 0.001253f, 0.001329f,
+ 0.001421f, 0.001529f, 0.001647f, 0.001782f, 0.001906f, 0.002075f, 0.002291f, 0.002483f,
+ 0.002758f, 0.003059f, 0.003450f, 0.003906f, 0.004536f, 0.005306f, 0.006325f, 0.007713f,
+ 0.010101f, 0.014084f, 0.343262f, 0.418457f, 0.437744f, 0.447510f, 0.452881f, 0.456543f,
+ 0.000099f, 0.000100f, 0.000091f, 0.000085f, 0.000105f, 0.000099f, 0.000127f, 0.000127f,
+ 0.000130f, 0.000137f, 0.000152f, 0.000164f, 0.000164f, 0.000172f, 0.000195f, 0.000186f,
+ 0.000209f, 0.000222f, 0.000231f, 0.000241f, 0.000258f, 0.000266f, 0.000290f, 0.000301f,
+ 0.000324f, 0.000343f, 0.000357f, 0.000369f, 0.000392f, 0.000409f, 0.000440f, 0.000463f,
+ 0.000484f, 0.000513f, 0.000544f, 0.000578f, 0.000607f, 0.000650f, 0.000702f, 0.000737f,
+ 0.000787f, 0.000846f, 0.000918f, 0.000977f, 0.001062f, 0.001146f, 0.001259f, 0.001379f,
+ 0.001524f, 0.001701f, 0.001924f, 0.002207f, 0.002542f, 0.003006f, 0.003628f, 0.004494f,
+ 0.005821f, 0.008774f, 0.332031f, 0.409180f, 0.428467f, 0.438965f, 0.444336f, 0.447998f,
+ 0.000082f, 0.000057f, 0.000048f, 0.000051f, 0.000055f, 0.000054f, 0.000057f, 0.000064f,
+ 0.000066f, 0.000079f, 0.000070f, 0.000070f, 0.000084f, 0.000078f, 0.000084f, 0.000091f,
+ 0.000099f, 0.000108f, 0.000108f, 0.000114f, 0.000119f, 0.000124f, 0.000129f, 0.000144f,
+ 0.000151f, 0.000158f, 0.000163f, 0.000176f, 0.000188f, 0.000196f, 0.000208f, 0.000220f,
+ 0.000227f, 0.000239f, 0.000259f, 0.000273f, 0.000290f, 0.000303f, 0.000331f, 0.000351f,
+ 0.000376f, 0.000402f, 0.000432f, 0.000460f, 0.000500f, 0.000547f, 0.000593f, 0.000648f,
+ 0.000720f, 0.000805f, 0.000918f, 0.001045f, 0.001225f, 0.001462f, 0.001788f, 0.002264f,
+ 0.003029f, 0.004623f, 0.320801f, 0.398682f, 0.419922f, 0.430420f, 0.436279f, 0.440674f,
+ 0.000061f, 0.000041f, 0.000033f, 0.000029f, 0.000026f, 0.000025f, 0.000024f, 0.000024f,
+ 0.000023f, 0.000023f, 0.000025f, 0.000032f, 0.000026f, 0.000027f, 0.000035f, 0.000037f,
+ 0.000039f, 0.000041f, 0.000041f, 0.000041f, 0.000044f, 0.000050f, 0.000054f, 0.000051f,
+ 0.000055f, 0.000060f, 0.000061f, 0.000062f, 0.000069f, 0.000074f, 0.000075f, 0.000081f,
+ 0.000087f, 0.000090f, 0.000093f, 0.000098f, 0.000108f, 0.000114f, 0.000123f, 0.000130f,
+ 0.000142f, 0.000144f, 0.000156f, 0.000173f, 0.000179f, 0.000200f, 0.000218f, 0.000237f,
+ 0.000267f, 0.000299f, 0.000335f, 0.000382f, 0.000448f, 0.000544f, 0.000677f, 0.000883f,
+ 0.001233f, 0.001933f, 0.309570f, 0.388672f, 0.410889f, 0.421143f, 0.427246f, 0.431885f,
+ 0.000031f, 0.000020f, 0.000016f, 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f,
+ 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000009f,
+ 0.000009f, 0.000007f, 0.000007f, 0.000007f, 0.000008f, 0.000009f, 0.000011f, 0.000012f,
+ 0.000012f, 0.000012f, 0.000013f, 0.000015f, 0.000015f, 0.000014f, 0.000016f, 0.000017f,
+ 0.000019f, 0.000020f, 0.000020f, 0.000022f, 0.000025f, 0.000023f, 0.000026f, 0.000029f,
+ 0.000031f, 0.000034f, 0.000036f, 0.000037f, 0.000040f, 0.000044f, 0.000048f, 0.000052f,
+ 0.000056f, 0.000063f, 0.000068f, 0.000083f, 0.000098f, 0.000117f, 0.000149f, 0.000201f,
+ 0.000301f, 0.000544f, 0.297607f, 0.379150f, 0.400879f, 0.411865f, 0.419189f, 0.423340f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000005f, 0.000007f,
+ 0.000011f, 0.000026f, 0.286621f, 0.368896f, 0.391846f, 0.402588f, 0.409912f, 0.414551f,
+ },
+ {
+ 0.007935f, 0.024429f, 0.041290f, 0.058838f, 0.076355f, 0.093933f, 0.111145f, 0.128174f,
+ 0.146606f, 0.164429f, 0.182617f, 0.200562f, 0.218750f, 0.236206f, 0.254150f, 0.271729f,
+ 0.289551f, 0.308105f, 0.325684f, 0.342773f, 0.360596f, 0.379150f, 0.396240f, 0.414795f,
+ 0.431641f, 0.450439f, 0.468018f, 0.484619f, 0.502441f, 0.520020f, 0.536621f, 0.554688f,
+ 0.571777f, 0.588379f, 0.605469f, 0.622559f, 0.640137f, 0.657227f, 0.672852f, 0.689941f,
+ 0.707031f, 0.723633f, 0.740234f, 0.756836f, 0.773926f, 0.789551f, 0.805664f, 0.821777f,
+ 0.838379f, 0.854980f, 0.870117f, 0.885742f, 0.901855f, 0.917480f, 0.932617f, 0.948730f,
+ 0.963379f, 0.979492f, 0.960449f, 0.909668f, 0.876465f, 0.850098f, 0.827637f, 0.807617f,
+ 0.007530f, 0.023422f, 0.039764f, 0.056610f, 0.073303f, 0.090149f, 0.107300f, 0.124084f,
+ 0.141968f, 0.158569f, 0.176392f, 0.193604f, 0.210815f, 0.228760f, 0.246094f, 0.262695f,
+ 0.280518f, 0.298340f, 0.315430f, 0.333252f, 0.350586f, 0.367432f, 0.384766f, 0.402344f,
+ 0.419678f, 0.436768f, 0.453613f, 0.471436f, 0.488037f, 0.504883f, 0.521973f, 0.538574f,
+ 0.556641f, 0.573242f, 0.589844f, 0.605957f, 0.623535f, 0.639160f, 0.656250f, 0.673340f,
+ 0.688477f, 0.706055f, 0.721680f, 0.738770f, 0.754883f, 0.770508f, 0.786133f, 0.803711f,
+ 0.817871f, 0.834473f, 0.850586f, 0.866211f, 0.881348f, 0.896973f, 0.913086f, 0.928223f,
+ 0.942871f, 0.958984f, 0.951172f, 0.903320f, 0.871094f, 0.845703f, 0.824219f, 0.805664f,
+ 0.007320f, 0.022552f, 0.038391f, 0.054260f, 0.070312f, 0.086792f, 0.103271f, 0.120178f,
+ 0.136841f, 0.153564f, 0.170410f, 0.187256f, 0.203735f, 0.220825f, 0.237793f, 0.255127f,
+ 0.271240f, 0.288086f, 0.305420f, 0.322021f, 0.339844f, 0.356689f, 0.373047f, 0.390137f,
+ 0.406738f, 0.423340f, 0.440186f, 0.456787f, 0.474121f, 0.490967f, 0.507324f, 0.523926f,
+ 0.540527f, 0.557129f, 0.573242f, 0.590332f, 0.606445f, 0.623047f, 0.638672f, 0.655273f,
+ 0.671875f, 0.687500f, 0.703613f, 0.720215f, 0.735840f, 0.751953f, 0.767578f, 0.783203f,
+ 0.799316f, 0.814941f, 0.830078f, 0.845703f, 0.861328f, 0.877441f, 0.892090f, 0.908203f,
+ 0.922852f, 0.938477f, 0.941895f, 0.895996f, 0.865723f, 0.841309f, 0.820801f, 0.802734f,
+ 0.007008f, 0.021667f, 0.036865f, 0.052216f, 0.067871f, 0.083862f, 0.099426f, 0.115479f,
+ 0.131470f, 0.148315f, 0.164551f, 0.180298f, 0.196899f, 0.213379f, 0.229370f, 0.246460f,
+ 0.262695f, 0.279541f, 0.295410f, 0.311523f, 0.329102f, 0.345215f, 0.360840f, 0.378174f,
+ 0.394043f, 0.410156f, 0.427246f, 0.443115f, 0.459717f, 0.476318f, 0.493652f, 0.508789f,
+ 0.524902f, 0.541016f, 0.557129f, 0.573242f, 0.589844f, 0.605469f, 0.621582f, 0.638672f,
+ 0.652832f, 0.669434f, 0.685547f, 0.701660f, 0.717285f, 0.731934f, 0.749023f, 0.764160f,
+ 0.779785f, 0.794922f, 0.810059f, 0.826172f, 0.841309f, 0.856445f, 0.872070f, 0.886719f,
+ 0.902344f, 0.917480f, 0.932129f, 0.889648f, 0.859863f, 0.835938f, 0.816895f, 0.799316f,
+ 0.006817f, 0.020645f, 0.035156f, 0.050110f, 0.065247f, 0.080383f, 0.096313f, 0.111450f,
+ 0.126587f, 0.142456f, 0.158447f, 0.174316f, 0.189819f, 0.205566f, 0.221802f, 0.237427f,
+ 0.253662f, 0.269775f, 0.285889f, 0.301514f, 0.317627f, 0.333740f, 0.349609f, 0.366211f,
+ 0.381348f, 0.397705f, 0.414307f, 0.429932f, 0.447266f, 0.462646f, 0.477539f, 0.494385f,
+ 0.509766f, 0.525879f, 0.541992f, 0.557617f, 0.571777f, 0.588379f, 0.605469f, 0.619629f,
+ 0.636230f, 0.651855f, 0.666992f, 0.681152f, 0.698242f, 0.714355f, 0.729980f, 0.745117f,
+ 0.759766f, 0.775391f, 0.790527f, 0.806152f, 0.821289f, 0.835938f, 0.850586f, 0.866211f,
+ 0.882324f, 0.896484f, 0.922363f, 0.882324f, 0.854004f, 0.831543f, 0.812500f, 0.795898f,
+ 0.006378f, 0.019989f, 0.034027f, 0.048004f, 0.062744f, 0.077148f, 0.091980f, 0.107178f,
+ 0.122192f, 0.137207f, 0.152466f, 0.167603f, 0.183960f, 0.199097f, 0.214111f, 0.229736f,
+ 0.244995f, 0.260254f, 0.276367f, 0.291504f, 0.306641f, 0.322998f, 0.338623f, 0.354248f,
+ 0.369629f, 0.385254f, 0.400879f, 0.416504f, 0.432617f, 0.447510f, 0.464111f, 0.479492f,
+ 0.494141f, 0.511230f, 0.525879f, 0.541016f, 0.556641f, 0.572754f, 0.586914f, 0.602051f,
+ 0.617676f, 0.633789f, 0.648926f, 0.665039f, 0.679688f, 0.695312f, 0.710449f, 0.726074f,
+ 0.739746f, 0.755859f, 0.771484f, 0.785645f, 0.800781f, 0.815918f, 0.831055f, 0.846680f,
+ 0.860840f, 0.875977f, 0.912598f, 0.874512f, 0.847656f, 0.826172f, 0.807617f, 0.791504f,
+ 0.006603f, 0.019287f, 0.032776f, 0.046356f, 0.060272f, 0.073914f, 0.088135f, 0.102905f,
+ 0.117554f, 0.132690f, 0.147095f, 0.161377f, 0.176636f, 0.191162f, 0.205444f, 0.221680f,
+ 0.236572f, 0.251465f, 0.267090f, 0.281250f, 0.296875f, 0.312256f, 0.327393f, 0.342285f,
+ 0.357666f, 0.373291f, 0.388184f, 0.403076f, 0.418457f, 0.433838f, 0.448975f, 0.465088f,
+ 0.479980f, 0.494385f, 0.509277f, 0.525879f, 0.540039f, 0.555176f, 0.570801f, 0.586426f,
+ 0.601074f, 0.616211f, 0.631348f, 0.646484f, 0.661133f, 0.676270f, 0.692383f, 0.705078f,
+ 0.720215f, 0.735352f, 0.751953f, 0.766602f, 0.781250f, 0.796387f, 0.810059f, 0.825684f,
+ 0.840820f, 0.855469f, 0.902344f, 0.866699f, 0.841797f, 0.820312f, 0.803223f, 0.787598f,
+ 0.006111f, 0.018433f, 0.031097f, 0.044739f, 0.057892f, 0.071472f, 0.085205f, 0.099304f,
+ 0.113037f, 0.127319f, 0.141357f, 0.156128f, 0.169678f, 0.183838f, 0.198608f, 0.213745f,
+ 0.227661f, 0.243652f, 0.257324f, 0.272705f, 0.286865f, 0.301025f, 0.316406f, 0.331543f,
+ 0.345703f, 0.360107f, 0.375000f, 0.390625f, 0.405762f, 0.420410f, 0.435303f, 0.449951f,
+ 0.465088f, 0.479492f, 0.494141f, 0.509277f, 0.523926f, 0.538574f, 0.553711f, 0.569336f,
+ 0.583496f, 0.598145f, 0.612793f, 0.628418f, 0.642578f, 0.657227f, 0.671387f, 0.687012f,
+ 0.702637f, 0.716797f, 0.731934f, 0.745605f, 0.761230f, 0.775391f, 0.790527f, 0.805176f,
+ 0.819824f, 0.834961f, 0.892578f, 0.858887f, 0.834473f, 0.814941f, 0.798340f, 0.783203f,
+ 0.005756f, 0.017761f, 0.029907f, 0.042572f, 0.055481f, 0.068420f, 0.081482f, 0.095276f,
+ 0.108826f, 0.122070f, 0.135620f, 0.149902f, 0.163330f, 0.177368f, 0.191284f, 0.206421f,
+ 0.219482f, 0.233521f, 0.247925f, 0.262451f, 0.277100f, 0.290771f, 0.304688f, 0.319580f,
+ 0.334229f, 0.348389f, 0.362549f, 0.377441f, 0.391602f, 0.406250f, 0.421143f, 0.435791f,
+ 0.450439f, 0.463867f, 0.478760f, 0.493164f, 0.507812f, 0.521973f, 0.537109f, 0.551270f,
+ 0.565430f, 0.580078f, 0.594727f, 0.609863f, 0.624023f, 0.638672f, 0.653320f, 0.668457f,
+ 0.682129f, 0.697266f, 0.711914f, 0.726562f, 0.740723f, 0.755859f, 0.770996f, 0.785156f,
+ 0.799805f, 0.814453f, 0.882812f, 0.851562f, 0.827148f, 0.808594f, 0.792969f, 0.778809f,
+ 0.005741f, 0.017166f, 0.029053f, 0.041138f, 0.053345f, 0.065796f, 0.078674f, 0.091248f,
+ 0.104614f, 0.117004f, 0.130737f, 0.143921f, 0.156860f, 0.170288f, 0.183960f, 0.197754f,
+ 0.211304f, 0.224976f, 0.238892f, 0.251953f, 0.266357f, 0.280273f, 0.294922f, 0.308594f,
+ 0.322021f, 0.336914f, 0.350098f, 0.364502f, 0.378174f, 0.393066f, 0.407471f, 0.420166f,
+ 0.435059f, 0.449219f, 0.463135f, 0.477295f, 0.491699f, 0.506348f, 0.520996f, 0.534668f,
+ 0.549316f, 0.563477f, 0.577148f, 0.591309f, 0.605469f, 0.620605f, 0.634766f, 0.648438f,
+ 0.663086f, 0.677734f, 0.691895f, 0.706543f, 0.720215f, 0.734863f, 0.750488f, 0.765137f,
+ 0.779297f, 0.793945f, 0.872559f, 0.843262f, 0.820801f, 0.803223f, 0.787598f, 0.773926f,
+ 0.005283f, 0.016052f, 0.028030f, 0.039246f, 0.050751f, 0.063232f, 0.074829f, 0.087341f,
+ 0.099976f, 0.112732f, 0.125122f, 0.138062f, 0.150757f, 0.163696f, 0.176758f, 0.189697f,
+ 0.203125f, 0.216553f, 0.229614f, 0.243286f, 0.256592f, 0.269775f, 0.283203f, 0.297119f,
+ 0.310547f, 0.324463f, 0.337891f, 0.351807f, 0.365234f, 0.378662f, 0.392822f, 0.406738f,
+ 0.419922f, 0.434814f, 0.448730f, 0.461182f, 0.476562f, 0.489746f, 0.502930f, 0.517578f,
+ 0.531738f, 0.545410f, 0.559082f, 0.573730f, 0.587402f, 0.602051f, 0.615723f, 0.629395f,
+ 0.644043f, 0.658203f, 0.672363f, 0.686523f, 0.701660f, 0.714844f, 0.729980f, 0.743652f,
+ 0.758301f, 0.774414f, 0.862305f, 0.835449f, 0.813965f, 0.796875f, 0.782227f, 0.769043f,
+ 0.005272f, 0.015427f, 0.026230f, 0.037506f, 0.049164f, 0.060516f, 0.072021f, 0.083740f,
+ 0.095825f, 0.108521f, 0.120361f, 0.132324f, 0.144897f, 0.156738f, 0.169922f, 0.182373f,
+ 0.195068f, 0.208008f, 0.220459f, 0.233887f, 0.246948f, 0.260254f, 0.272461f, 0.285889f,
+ 0.299561f, 0.312500f, 0.325684f, 0.338867f, 0.352783f, 0.365479f, 0.378906f, 0.392334f,
+ 0.406006f, 0.419189f, 0.432861f, 0.446777f, 0.460693f, 0.473877f, 0.486572f, 0.500977f,
+ 0.515137f, 0.528809f, 0.542480f, 0.555176f, 0.569824f, 0.583984f, 0.597656f, 0.611328f,
+ 0.625000f, 0.639648f, 0.653320f, 0.667480f, 0.681641f, 0.695801f, 0.709961f, 0.723633f,
+ 0.738281f, 0.752930f, 0.852539f, 0.827148f, 0.807129f, 0.790527f, 0.776367f, 0.764160f,
+ 0.004822f, 0.014885f, 0.025360f, 0.035767f, 0.046570f, 0.057587f, 0.068726f, 0.080139f,
+ 0.091736f, 0.103577f, 0.115479f, 0.126709f, 0.138672f, 0.150879f, 0.162231f, 0.174805f,
+ 0.187622f, 0.199951f, 0.212524f, 0.224854f, 0.236694f, 0.249878f, 0.262207f, 0.275391f,
+ 0.287842f, 0.300293f, 0.313477f, 0.326904f, 0.340088f, 0.353027f, 0.365479f, 0.378174f,
+ 0.391602f, 0.404541f, 0.417236f, 0.431641f, 0.444336f, 0.457764f, 0.470703f, 0.484375f,
+ 0.497803f, 0.510742f, 0.524902f, 0.537598f, 0.552246f, 0.564941f, 0.579590f, 0.592285f,
+ 0.606445f, 0.621094f, 0.634277f, 0.646973f, 0.662109f, 0.675781f, 0.689453f, 0.704102f,
+ 0.718262f, 0.733398f, 0.842285f, 0.818848f, 0.799805f, 0.784180f, 0.770996f, 0.758301f,
+ 0.004745f, 0.014427f, 0.024277f, 0.034546f, 0.044800f, 0.055176f, 0.066040f, 0.076477f,
+ 0.087341f, 0.099060f, 0.110474f, 0.121216f, 0.132690f, 0.144165f, 0.156006f, 0.167358f,
+ 0.179688f, 0.191284f, 0.203247f, 0.216187f, 0.227905f, 0.239868f, 0.252441f, 0.264648f,
+ 0.277100f, 0.289307f, 0.301270f, 0.314453f, 0.326660f, 0.338867f, 0.352539f, 0.364990f,
+ 0.377686f, 0.390137f, 0.403076f, 0.416016f, 0.428467f, 0.441406f, 0.453857f, 0.468262f,
+ 0.480957f, 0.494385f, 0.507324f, 0.520020f, 0.534180f, 0.547363f, 0.560059f, 0.573730f,
+ 0.586914f, 0.601074f, 0.615234f, 0.628418f, 0.641602f, 0.656250f, 0.669434f, 0.683594f,
+ 0.697754f, 0.712402f, 0.832520f, 0.809570f, 0.792480f, 0.778320f, 0.764160f, 0.753906f,
+ 0.004612f, 0.013840f, 0.023483f, 0.033081f, 0.042999f, 0.052490f, 0.063049f, 0.073303f,
+ 0.083801f, 0.094238f, 0.105042f, 0.115967f, 0.127319f, 0.138062f, 0.149048f, 0.160645f,
+ 0.171875f, 0.183228f, 0.194946f, 0.206665f, 0.218384f, 0.230347f, 0.241699f, 0.253906f,
+ 0.265869f, 0.277832f, 0.290039f, 0.301758f, 0.314209f, 0.326660f, 0.339111f, 0.351074f,
+ 0.363281f, 0.375977f, 0.388428f, 0.401123f, 0.413330f, 0.426270f, 0.439453f, 0.451904f,
+ 0.464111f, 0.478027f, 0.489746f, 0.503418f, 0.515625f, 0.529297f, 0.542480f, 0.556152f,
+ 0.569336f, 0.582031f, 0.595215f, 0.608887f, 0.622559f, 0.636230f, 0.649902f, 0.663574f,
+ 0.677246f, 0.691895f, 0.821289f, 0.802246f, 0.785645f, 0.771484f, 0.758789f, 0.748047f,
+ 0.004345f, 0.012985f, 0.022156f, 0.030884f, 0.040802f, 0.050568f, 0.060303f, 0.069946f,
+ 0.079956f, 0.090393f, 0.100403f, 0.111084f, 0.120667f, 0.131714f, 0.142700f, 0.153198f,
+ 0.164429f, 0.175659f, 0.186523f, 0.197876f, 0.208496f, 0.220337f, 0.231567f, 0.243286f,
+ 0.254639f, 0.266113f, 0.277832f, 0.289795f, 0.301758f, 0.313477f, 0.325439f, 0.337402f,
+ 0.349609f, 0.361328f, 0.373779f, 0.385986f, 0.398193f, 0.410889f, 0.423340f, 0.435059f,
+ 0.447998f, 0.460205f, 0.473389f, 0.486084f, 0.499023f, 0.511230f, 0.524414f, 0.537109f,
+ 0.549805f, 0.563477f, 0.576172f, 0.589355f, 0.603027f, 0.616699f, 0.629883f, 0.644531f,
+ 0.658691f, 0.670898f, 0.811035f, 0.792969f, 0.777832f, 0.764648f, 0.752441f, 0.742676f,
+ 0.004002f, 0.012718f, 0.021210f, 0.029877f, 0.039246f, 0.048431f, 0.057281f, 0.067078f,
+ 0.076538f, 0.086121f, 0.096008f, 0.105957f, 0.115540f, 0.125732f, 0.136475f, 0.146729f,
+ 0.157227f, 0.167236f, 0.177979f, 0.189819f, 0.200195f, 0.210693f, 0.221802f, 0.232788f,
+ 0.243896f, 0.255127f, 0.266602f, 0.278320f, 0.289062f, 0.300293f, 0.312012f, 0.323975f,
+ 0.335449f, 0.347168f, 0.359131f, 0.371094f, 0.382812f, 0.394775f, 0.406982f, 0.419434f,
+ 0.431152f, 0.443604f, 0.455566f, 0.468506f, 0.481445f, 0.493408f, 0.506348f, 0.519043f,
+ 0.531738f, 0.544922f, 0.558105f, 0.570801f, 0.583984f, 0.597168f, 0.610352f, 0.624512f,
+ 0.637695f, 0.651855f, 0.800293f, 0.785156f, 0.770508f, 0.757812f, 0.747070f, 0.737305f,
+ 0.003967f, 0.011940f, 0.020203f, 0.028931f, 0.037109f, 0.045898f, 0.054840f, 0.063477f,
+ 0.073059f, 0.082214f, 0.090942f, 0.100647f, 0.110535f, 0.120178f, 0.129639f, 0.139648f,
+ 0.149902f, 0.160156f, 0.170044f, 0.180786f, 0.190674f, 0.201416f, 0.211792f, 0.222412f,
+ 0.233521f, 0.244751f, 0.255615f, 0.266113f, 0.276855f, 0.288574f, 0.299561f, 0.311279f,
+ 0.322266f, 0.333984f, 0.344727f, 0.356934f, 0.368164f, 0.379395f, 0.390869f, 0.403076f,
+ 0.415283f, 0.427246f, 0.439453f, 0.451172f, 0.464111f, 0.476807f, 0.488281f, 0.500977f,
+ 0.513672f, 0.526367f, 0.538574f, 0.551758f, 0.564453f, 0.577637f, 0.590820f, 0.604492f,
+ 0.618164f, 0.631836f, 0.790039f, 0.775879f, 0.763184f, 0.750977f, 0.740723f, 0.731445f,
+ 0.003679f, 0.011749f, 0.019135f, 0.027237f, 0.035431f, 0.043884f, 0.052399f, 0.060577f,
+ 0.069153f, 0.077881f, 0.086731f, 0.095947f, 0.104797f, 0.114380f, 0.123535f, 0.133057f,
+ 0.142700f, 0.152588f, 0.162231f, 0.171753f, 0.182129f, 0.192261f, 0.202026f, 0.212524f,
+ 0.222900f, 0.233643f, 0.243896f, 0.254395f, 0.264893f, 0.276123f, 0.286621f, 0.297119f,
+ 0.308105f, 0.319336f, 0.331299f, 0.341553f, 0.353027f, 0.364258f, 0.375977f, 0.387451f,
+ 0.399414f, 0.410645f, 0.422607f, 0.434814f, 0.445801f, 0.458984f, 0.470703f, 0.482910f,
+ 0.495361f, 0.508301f, 0.520020f, 0.532227f, 0.545410f, 0.558594f, 0.570801f, 0.584961f,
+ 0.597656f, 0.611816f, 0.778809f, 0.768066f, 0.754883f, 0.743652f, 0.733887f, 0.725098f,
+ 0.003525f, 0.010956f, 0.018433f, 0.026260f, 0.033295f, 0.041870f, 0.049377f, 0.057709f,
+ 0.065735f, 0.074463f, 0.082764f, 0.091736f, 0.099976f, 0.108582f, 0.118103f, 0.126465f,
+ 0.135742f, 0.144775f, 0.154175f, 0.164307f, 0.173218f, 0.182983f, 0.192505f, 0.202759f,
+ 0.212646f, 0.221924f, 0.232910f, 0.242188f, 0.252930f, 0.262939f, 0.273926f, 0.284180f,
+ 0.294922f, 0.305420f, 0.316162f, 0.327637f, 0.338867f, 0.349609f, 0.361084f, 0.371826f,
+ 0.382812f, 0.395020f, 0.406494f, 0.417725f, 0.429688f, 0.441406f, 0.452637f, 0.465088f,
+ 0.477783f, 0.489258f, 0.501953f, 0.514160f, 0.527344f, 0.539062f, 0.551758f, 0.564941f,
+ 0.578125f, 0.591797f, 0.768555f, 0.759277f, 0.748047f, 0.736816f, 0.728027f, 0.718750f,
+ 0.003363f, 0.010353f, 0.017548f, 0.024765f, 0.032196f, 0.039673f, 0.046936f, 0.054565f,
+ 0.062561f, 0.070496f, 0.078308f, 0.086731f, 0.094910f, 0.103333f, 0.111633f, 0.120422f,
+ 0.129150f, 0.137695f, 0.146973f, 0.155762f, 0.164673f, 0.173950f, 0.183228f, 0.193359f,
+ 0.201782f, 0.212036f, 0.221436f, 0.231323f, 0.241699f, 0.251221f, 0.261719f, 0.271729f,
+ 0.281494f, 0.291992f, 0.302734f, 0.312988f, 0.323730f, 0.334961f, 0.345459f, 0.357666f,
+ 0.367432f, 0.378662f, 0.389893f, 0.401855f, 0.412842f, 0.424316f, 0.435791f, 0.447266f,
+ 0.459473f, 0.471436f, 0.482910f, 0.495605f, 0.507324f, 0.520508f, 0.533203f, 0.545898f,
+ 0.558594f, 0.570801f, 0.757812f, 0.750488f, 0.740234f, 0.729980f, 0.720703f, 0.712402f,
+ 0.003254f, 0.010048f, 0.016815f, 0.023453f, 0.030609f, 0.037537f, 0.044617f, 0.051971f,
+ 0.059265f, 0.066833f, 0.074280f, 0.082153f, 0.089905f, 0.097717f, 0.106018f, 0.113770f,
+ 0.122131f, 0.131104f, 0.139282f, 0.147705f, 0.155762f, 0.165161f, 0.173950f, 0.183228f,
+ 0.192139f, 0.200928f, 0.210693f, 0.220093f, 0.229736f, 0.239258f, 0.248657f, 0.259277f,
+ 0.268799f, 0.279053f, 0.288574f, 0.299561f, 0.309814f, 0.319580f, 0.330322f, 0.340820f,
+ 0.352783f, 0.362549f, 0.374023f, 0.385010f, 0.395752f, 0.407471f, 0.418701f, 0.429688f,
+ 0.441650f, 0.453125f, 0.465088f, 0.477539f, 0.489014f, 0.500977f, 0.513184f, 0.526855f,
+ 0.539062f, 0.552246f, 0.747559f, 0.741699f, 0.731934f, 0.722656f, 0.714355f, 0.707031f,
+ 0.003345f, 0.009262f, 0.015900f, 0.022614f, 0.029282f, 0.035522f, 0.042633f, 0.048981f,
+ 0.056000f, 0.063110f, 0.070801f, 0.077454f, 0.084839f, 0.092590f, 0.100281f, 0.107849f,
+ 0.116089f, 0.123169f, 0.131348f, 0.139648f, 0.148193f, 0.156616f, 0.164795f, 0.173584f,
+ 0.182617f, 0.191284f, 0.200073f, 0.208740f, 0.218140f, 0.227417f, 0.236694f, 0.246338f,
+ 0.255859f, 0.265381f, 0.275146f, 0.285889f, 0.294922f, 0.305420f, 0.315918f, 0.325928f,
+ 0.336670f, 0.347412f, 0.358154f, 0.368652f, 0.378662f, 0.390381f, 0.402100f, 0.412842f,
+ 0.424316f, 0.435059f, 0.447021f, 0.458984f, 0.470459f, 0.482422f, 0.494873f, 0.508301f,
+ 0.520020f, 0.532227f, 0.737305f, 0.732910f, 0.723633f, 0.715820f, 0.708008f, 0.700195f,
+ 0.003195f, 0.009010f, 0.015137f, 0.021225f, 0.027466f, 0.033844f, 0.040161f, 0.046417f,
+ 0.053497f, 0.059875f, 0.066711f, 0.073425f, 0.080505f, 0.087280f, 0.094788f, 0.102173f,
+ 0.109070f, 0.117004f, 0.124634f, 0.132446f, 0.139893f, 0.147705f, 0.155884f, 0.163940f,
+ 0.172729f, 0.180908f, 0.189697f, 0.198242f, 0.206665f, 0.215820f, 0.225220f, 0.233765f,
+ 0.243408f, 0.251953f, 0.262207f, 0.271484f, 0.281494f, 0.291260f, 0.300537f, 0.311035f,
+ 0.320801f, 0.332520f, 0.341797f, 0.352051f, 0.362305f, 0.373535f, 0.384521f, 0.395264f,
+ 0.406494f, 0.417480f, 0.429443f, 0.440430f, 0.451904f, 0.463867f, 0.476074f, 0.487793f,
+ 0.499268f, 0.513184f, 0.726562f, 0.723633f, 0.716309f, 0.708496f, 0.700684f, 0.694336f,
+ 0.002859f, 0.008507f, 0.014366f, 0.020203f, 0.026123f, 0.031891f, 0.038025f, 0.044281f,
+ 0.050354f, 0.056519f, 0.062683f, 0.069275f, 0.075195f, 0.082458f, 0.088806f, 0.095947f,
+ 0.102783f, 0.110046f, 0.117065f, 0.124878f, 0.132080f, 0.139282f, 0.146851f, 0.154907f,
+ 0.162598f, 0.171265f, 0.178833f, 0.187500f, 0.195435f, 0.204590f, 0.213013f, 0.221680f,
+ 0.231079f, 0.239502f, 0.248047f, 0.258301f, 0.267334f, 0.277100f, 0.286133f, 0.296387f,
+ 0.306641f, 0.316162f, 0.326416f, 0.336426f, 0.346924f, 0.357422f, 0.367188f, 0.378418f,
+ 0.389160f, 0.400391f, 0.411865f, 0.422852f, 0.433594f, 0.445557f, 0.457520f, 0.468994f,
+ 0.481445f, 0.493408f, 0.715332f, 0.715332f, 0.708984f, 0.700684f, 0.693848f, 0.687988f,
+ 0.002701f, 0.008080f, 0.013718f, 0.019058f, 0.024582f, 0.030197f, 0.035675f, 0.041748f,
+ 0.047302f, 0.053589f, 0.059082f, 0.065308f, 0.071777f, 0.077576f, 0.084106f, 0.090332f,
+ 0.097107f, 0.103577f, 0.110046f, 0.117493f, 0.124146f, 0.131470f, 0.138550f, 0.145508f,
+ 0.153564f, 0.161377f, 0.169067f, 0.176880f, 0.184814f, 0.192627f, 0.201294f, 0.209717f,
+ 0.218140f, 0.226929f, 0.235229f, 0.245117f, 0.253418f, 0.262939f, 0.272705f, 0.281738f,
+ 0.290771f, 0.300781f, 0.310791f, 0.321289f, 0.330566f, 0.341064f, 0.351562f, 0.361572f,
+ 0.372559f, 0.382568f, 0.393066f, 0.405273f, 0.415771f, 0.426758f, 0.438721f, 0.450439f,
+ 0.461670f, 0.474121f, 0.704102f, 0.706543f, 0.700195f, 0.693359f, 0.687012f, 0.681152f,
+ 0.002546f, 0.007771f, 0.012985f, 0.017975f, 0.023392f, 0.028976f, 0.034180f, 0.039368f,
+ 0.044556f, 0.050110f, 0.055847f, 0.061218f, 0.066895f, 0.072815f, 0.078674f, 0.085083f,
+ 0.091309f, 0.097168f, 0.103516f, 0.110107f, 0.116821f, 0.123413f, 0.130371f, 0.137329f,
+ 0.144165f, 0.151733f, 0.158813f, 0.166382f, 0.174438f, 0.182129f, 0.190063f, 0.197510f,
+ 0.206055f, 0.214355f, 0.222778f, 0.231812f, 0.240723f, 0.249023f, 0.258789f, 0.267578f,
+ 0.276855f, 0.285889f, 0.295654f, 0.305420f, 0.315430f, 0.324463f, 0.334961f, 0.345215f,
+ 0.354492f, 0.365234f, 0.376221f, 0.387451f, 0.398926f, 0.409424f, 0.419678f, 0.432129f,
+ 0.443848f, 0.455566f, 0.693848f, 0.697266f, 0.691895f, 0.686523f, 0.680176f, 0.674805f,
+ 0.002542f, 0.007271f, 0.012337f, 0.017181f, 0.021744f, 0.026840f, 0.031555f, 0.037231f,
+ 0.042236f, 0.046906f, 0.051941f, 0.057709f, 0.063049f, 0.068542f, 0.073853f, 0.079712f,
+ 0.085266f, 0.091064f, 0.096985f, 0.103027f, 0.109009f, 0.115417f, 0.122192f, 0.128540f,
+ 0.135132f, 0.141846f, 0.148926f, 0.156250f, 0.163696f, 0.171387f, 0.178223f, 0.186035f,
+ 0.194580f, 0.202271f, 0.210327f, 0.218994f, 0.227173f, 0.235596f, 0.244385f, 0.252930f,
+ 0.262451f, 0.271240f, 0.280762f, 0.290771f, 0.299805f, 0.309082f, 0.318359f, 0.329102f,
+ 0.338623f, 0.348633f, 0.358643f, 0.370117f, 0.379639f, 0.390869f, 0.401611f, 0.413330f,
+ 0.425293f, 0.436523f, 0.682129f, 0.688477f, 0.684082f, 0.678711f, 0.673340f, 0.667969f,
+ 0.002300f, 0.007076f, 0.011505f, 0.016251f, 0.020401f, 0.025665f, 0.029816f, 0.034790f,
+ 0.039368f, 0.044159f, 0.048798f, 0.053955f, 0.059174f, 0.064148f, 0.069153f, 0.074463f,
+ 0.079346f, 0.085266f, 0.090759f, 0.096191f, 0.102112f, 0.108032f, 0.114075f, 0.120117f,
+ 0.126587f, 0.133057f, 0.139648f, 0.146240f, 0.153442f, 0.160400f, 0.167725f, 0.174683f,
+ 0.182739f, 0.190308f, 0.198120f, 0.206177f, 0.214355f, 0.222656f, 0.230713f, 0.239258f,
+ 0.248413f, 0.257080f, 0.265869f, 0.274658f, 0.284424f, 0.292725f, 0.302490f, 0.313232f,
+ 0.321777f, 0.331787f, 0.341797f, 0.352295f, 0.363281f, 0.373535f, 0.383545f, 0.395264f,
+ 0.405762f, 0.416992f, 0.671387f, 0.679688f, 0.675293f, 0.670898f, 0.666016f, 0.661133f,
+ 0.002104f, 0.006474f, 0.010506f, 0.015099f, 0.018875f, 0.023911f, 0.028534f, 0.032715f,
+ 0.036652f, 0.041290f, 0.046021f, 0.050171f, 0.054535f, 0.059570f, 0.064575f, 0.069458f,
+ 0.074341f, 0.079346f, 0.084351f, 0.089844f, 0.095032f, 0.100830f, 0.106628f, 0.112122f,
+ 0.117859f, 0.124084f, 0.130249f, 0.136841f, 0.143188f, 0.149780f, 0.157349f, 0.163940f,
+ 0.171021f, 0.178345f, 0.186279f, 0.193848f, 0.201172f, 0.209717f, 0.217529f, 0.225464f,
+ 0.233765f, 0.242676f, 0.251221f, 0.260254f, 0.268311f, 0.278076f, 0.287109f, 0.296143f,
+ 0.305908f, 0.315674f, 0.325195f, 0.335449f, 0.344971f, 0.355469f, 0.365967f, 0.377441f,
+ 0.387939f, 0.398193f, 0.660645f, 0.670410f, 0.667969f, 0.663086f, 0.659180f, 0.654785f,
+ 0.002085f, 0.006306f, 0.010506f, 0.014107f, 0.018448f, 0.022293f, 0.026215f, 0.029953f,
+ 0.034515f, 0.038391f, 0.042786f, 0.046844f, 0.051361f, 0.055573f, 0.059784f, 0.064331f,
+ 0.068970f, 0.073425f, 0.078430f, 0.083313f, 0.088318f, 0.093567f, 0.098816f, 0.104126f,
+ 0.109924f, 0.115662f, 0.121521f, 0.127197f, 0.133545f, 0.139771f, 0.146729f, 0.153076f,
+ 0.160278f, 0.166992f, 0.174316f, 0.181274f, 0.188965f, 0.196045f, 0.204468f, 0.212036f,
+ 0.220459f, 0.228638f, 0.237183f, 0.245483f, 0.254150f, 0.262451f, 0.271484f, 0.281250f,
+ 0.290283f, 0.299561f, 0.308350f, 0.318115f, 0.328369f, 0.337158f, 0.349121f, 0.358887f,
+ 0.370117f, 0.380615f, 0.649414f, 0.661133f, 0.659668f, 0.655762f, 0.651855f, 0.647949f,
+ 0.001922f, 0.005867f, 0.009399f, 0.013565f, 0.017380f, 0.020859f, 0.024551f, 0.028442f,
+ 0.032318f, 0.035980f, 0.039551f, 0.043488f, 0.047333f, 0.051239f, 0.055573f, 0.059875f,
+ 0.063660f, 0.067810f, 0.072876f, 0.077087f, 0.081726f, 0.086304f, 0.091370f, 0.096863f,
+ 0.101746f, 0.107483f, 0.112732f, 0.117920f, 0.124329f, 0.130005f, 0.136108f, 0.142822f,
+ 0.149170f, 0.155396f, 0.162598f, 0.169434f, 0.176636f, 0.183838f, 0.191772f, 0.198975f,
+ 0.206665f, 0.214478f, 0.222290f, 0.230835f, 0.239258f, 0.247803f, 0.256836f, 0.264893f,
+ 0.274414f, 0.283203f, 0.292725f, 0.301758f, 0.311035f, 0.321289f, 0.332275f, 0.340820f,
+ 0.351562f, 0.363037f, 0.637695f, 0.652832f, 0.651367f, 0.647949f, 0.644531f, 0.641602f,
+ 0.002052f, 0.005253f, 0.009117f, 0.012482f, 0.016113f, 0.019302f, 0.022842f, 0.026230f,
+ 0.029831f, 0.033447f, 0.036682f, 0.040588f, 0.044189f, 0.047333f, 0.051178f, 0.055267f,
+ 0.058807f, 0.062683f, 0.067200f, 0.070984f, 0.075195f, 0.079895f, 0.084534f, 0.088806f,
+ 0.093933f, 0.098999f, 0.104309f, 0.109619f, 0.114807f, 0.120422f, 0.126587f, 0.132080f,
+ 0.138550f, 0.144775f, 0.151245f, 0.157837f, 0.164551f, 0.171387f, 0.178467f, 0.186157f,
+ 0.193359f, 0.201294f, 0.208740f, 0.216797f, 0.224854f, 0.233398f, 0.241211f, 0.250000f,
+ 0.258545f, 0.267822f, 0.276855f, 0.286133f, 0.295410f, 0.304932f, 0.314697f, 0.324463f,
+ 0.334229f, 0.344238f, 0.626953f, 0.642578f, 0.643066f, 0.641113f, 0.637695f, 0.634277f,
+ 0.001711f, 0.005424f, 0.008347f, 0.012024f, 0.014977f, 0.018066f, 0.021500f, 0.024399f,
+ 0.027756f, 0.030869f, 0.034058f, 0.037048f, 0.040558f, 0.044006f, 0.046906f, 0.050690f,
+ 0.054169f, 0.057983f, 0.061584f, 0.065247f, 0.069336f, 0.073425f, 0.077576f, 0.082092f,
+ 0.086670f, 0.091064f, 0.095886f, 0.101196f, 0.105957f, 0.111267f, 0.116943f, 0.122559f,
+ 0.128174f, 0.133789f, 0.140259f, 0.146118f, 0.153076f, 0.159424f, 0.166016f, 0.173462f,
+ 0.180542f, 0.187744f, 0.195435f, 0.203003f, 0.209961f, 0.218994f, 0.226562f, 0.234619f,
+ 0.243286f, 0.251709f, 0.260742f, 0.269531f, 0.277832f, 0.287354f, 0.297363f, 0.306885f,
+ 0.316406f, 0.326660f, 0.615234f, 0.633789f, 0.634277f, 0.632812f, 0.630371f, 0.626953f,
+ 0.001721f, 0.004829f, 0.008034f, 0.010857f, 0.013893f, 0.016953f, 0.019806f, 0.022705f,
+ 0.025589f, 0.028793f, 0.031616f, 0.034180f, 0.036926f, 0.039978f, 0.043213f, 0.046356f,
+ 0.049744f, 0.052887f, 0.056305f, 0.059906f, 0.063416f, 0.067322f, 0.070862f, 0.075134f,
+ 0.079285f, 0.083435f, 0.088074f, 0.092712f, 0.097534f, 0.102173f, 0.107544f, 0.112305f,
+ 0.118225f, 0.123657f, 0.129272f, 0.135376f, 0.141602f, 0.147705f, 0.153931f, 0.160889f,
+ 0.167847f, 0.174683f, 0.181885f, 0.189209f, 0.196533f, 0.204224f, 0.212524f, 0.219727f,
+ 0.228271f, 0.236572f, 0.245483f, 0.253418f, 0.261719f, 0.270996f, 0.280029f, 0.289307f,
+ 0.300537f, 0.309326f, 0.604004f, 0.625000f, 0.626953f, 0.625000f, 0.622559f, 0.620117f,
+ 0.001624f, 0.004730f, 0.007412f, 0.010300f, 0.013199f, 0.015717f, 0.018448f, 0.020935f,
+ 0.023163f, 0.026138f, 0.028687f, 0.031204f, 0.033875f, 0.036743f, 0.039825f, 0.042389f,
+ 0.045166f, 0.048523f, 0.051422f, 0.054535f, 0.057953f, 0.061249f, 0.064880f, 0.068542f,
+ 0.072388f, 0.076355f, 0.080505f, 0.084534f, 0.089294f, 0.093750f, 0.098389f, 0.103210f,
+ 0.108337f, 0.113647f, 0.118896f, 0.124817f, 0.130737f, 0.135986f, 0.142212f, 0.148560f,
+ 0.155151f, 0.162109f, 0.168579f, 0.175415f, 0.183105f, 0.190552f, 0.197998f, 0.205322f,
+ 0.213623f, 0.221436f, 0.229370f, 0.237915f, 0.246216f, 0.254883f, 0.264160f, 0.273438f,
+ 0.282471f, 0.292236f, 0.593262f, 0.615723f, 0.618164f, 0.617188f, 0.615234f, 0.612793f,
+ 0.001355f, 0.004463f, 0.007061f, 0.009506f, 0.011612f, 0.014381f, 0.016830f, 0.019394f,
+ 0.021576f, 0.023697f, 0.026428f, 0.028778f, 0.030975f, 0.033386f, 0.035950f, 0.038513f,
+ 0.041260f, 0.044067f, 0.046967f, 0.049622f, 0.052612f, 0.055847f, 0.059052f, 0.062164f,
+ 0.065918f, 0.069397f, 0.073242f, 0.077271f, 0.081055f, 0.085327f, 0.089661f, 0.094177f,
+ 0.098877f, 0.103455f, 0.108582f, 0.113647f, 0.119812f, 0.125000f, 0.130981f, 0.137085f,
+ 0.142944f, 0.149414f, 0.156006f, 0.162354f, 0.169434f, 0.176514f, 0.183716f, 0.191284f,
+ 0.198975f, 0.206421f, 0.214844f, 0.222412f, 0.231323f, 0.238647f, 0.247437f, 0.256592f,
+ 0.265625f, 0.276367f, 0.581055f, 0.606445f, 0.609863f, 0.608887f, 0.607910f, 0.606445f,
+ 0.001413f, 0.004128f, 0.006180f, 0.008781f, 0.010994f, 0.013496f, 0.015427f, 0.017654f,
+ 0.019684f, 0.021881f, 0.024139f, 0.025879f, 0.028137f, 0.030334f, 0.032471f, 0.034821f,
+ 0.037354f, 0.039642f, 0.042236f, 0.044708f, 0.047394f, 0.050079f, 0.053223f, 0.056244f,
+ 0.059479f, 0.062622f, 0.066223f, 0.069946f, 0.073608f, 0.077209f, 0.081604f, 0.085632f,
+ 0.089722f, 0.094360f, 0.098999f, 0.103943f, 0.108826f, 0.114319f, 0.119568f, 0.125122f,
+ 0.131104f, 0.137085f, 0.143433f, 0.150024f, 0.156494f, 0.163330f, 0.170044f, 0.177490f,
+ 0.184326f, 0.191895f, 0.199707f, 0.207764f, 0.215698f, 0.223755f, 0.231812f, 0.240845f,
+ 0.249756f, 0.258789f, 0.568848f, 0.598145f, 0.601562f, 0.600586f, 0.600586f, 0.599121f,
+ 0.001182f, 0.003773f, 0.005970f, 0.008293f, 0.010277f, 0.012512f, 0.014030f, 0.016129f,
+ 0.017929f, 0.019791f, 0.021683f, 0.023590f, 0.025452f, 0.027328f, 0.029404f, 0.031677f,
+ 0.033539f, 0.035583f, 0.037903f, 0.040314f, 0.042877f, 0.045319f, 0.048126f, 0.050690f,
+ 0.053436f, 0.056519f, 0.059723f, 0.062744f, 0.066284f, 0.069702f, 0.073608f, 0.077209f,
+ 0.081055f, 0.085754f, 0.089783f, 0.094421f, 0.099060f, 0.103821f, 0.109192f, 0.114563f,
+ 0.119934f, 0.125488f, 0.131104f, 0.137695f, 0.144043f, 0.149780f, 0.156738f, 0.163940f,
+ 0.170654f, 0.177856f, 0.185181f, 0.192871f, 0.200439f, 0.208740f, 0.216675f, 0.225342f,
+ 0.233521f, 0.242554f, 0.557617f, 0.587891f, 0.592285f, 0.592773f, 0.592285f, 0.592285f,
+ 0.001198f, 0.003677f, 0.005547f, 0.007561f, 0.009468f, 0.011253f, 0.012833f, 0.014465f,
+ 0.016205f, 0.017792f, 0.019394f, 0.021240f, 0.022751f, 0.024475f, 0.026260f, 0.028015f,
+ 0.030136f, 0.031708f, 0.034088f, 0.036102f, 0.038361f, 0.040497f, 0.042816f, 0.045288f,
+ 0.047882f, 0.050476f, 0.053284f, 0.056183f, 0.059174f, 0.062500f, 0.065796f, 0.069153f,
+ 0.072998f, 0.076904f, 0.080994f, 0.085083f, 0.089478f, 0.094116f, 0.098633f, 0.103394f,
+ 0.108704f, 0.113953f, 0.119934f, 0.125366f, 0.131348f, 0.137329f, 0.143555f, 0.150391f,
+ 0.157227f, 0.163818f, 0.170776f, 0.178467f, 0.185791f, 0.193359f, 0.201538f, 0.209717f,
+ 0.218018f, 0.226807f, 0.544922f, 0.578613f, 0.583984f, 0.584961f, 0.585449f, 0.584473f,
+ 0.001067f, 0.003101f, 0.004974f, 0.006855f, 0.008522f, 0.009949f, 0.011635f, 0.012985f,
+ 0.014595f, 0.016052f, 0.017685f, 0.019012f, 0.020264f, 0.021851f, 0.023346f, 0.025146f,
+ 0.026688f, 0.028336f, 0.030304f, 0.031860f, 0.034119f, 0.035889f, 0.038025f, 0.040283f,
+ 0.042450f, 0.044952f, 0.047302f, 0.050049f, 0.052765f, 0.055908f, 0.058594f, 0.061859f,
+ 0.064880f, 0.068481f, 0.072327f, 0.076172f, 0.080200f, 0.084290f, 0.088684f, 0.093262f,
+ 0.098145f, 0.102905f, 0.108337f, 0.113708f, 0.119080f, 0.125000f, 0.131348f, 0.137329f,
+ 0.143921f, 0.150391f, 0.157593f, 0.164551f, 0.171753f, 0.179077f, 0.186768f, 0.194702f,
+ 0.203003f, 0.210815f, 0.534180f, 0.569336f, 0.575684f, 0.577637f, 0.577637f, 0.577148f,
+ 0.001196f, 0.003178f, 0.004601f, 0.006241f, 0.007782f, 0.009262f, 0.010391f, 0.011795f,
+ 0.012955f, 0.014198f, 0.015518f, 0.016785f, 0.018097f, 0.019409f, 0.020782f, 0.022247f,
+ 0.023544f, 0.025269f, 0.026749f, 0.028152f, 0.030045f, 0.031555f, 0.033630f, 0.035645f,
+ 0.037567f, 0.039642f, 0.041992f, 0.044281f, 0.046692f, 0.049042f, 0.052094f, 0.054779f,
+ 0.057831f, 0.060760f, 0.064209f, 0.067627f, 0.071228f, 0.075256f, 0.079224f, 0.083557f,
+ 0.087891f, 0.092468f, 0.097168f, 0.102356f, 0.107605f, 0.113098f, 0.119019f, 0.124878f,
+ 0.130859f, 0.137451f, 0.144287f, 0.150635f, 0.157471f, 0.164917f, 0.171997f, 0.179932f,
+ 0.187378f, 0.196899f, 0.521973f, 0.560547f, 0.566895f, 0.569824f, 0.570312f, 0.568848f,
+ 0.001242f, 0.002674f, 0.004421f, 0.005573f, 0.006882f, 0.008354f, 0.009491f, 0.010559f,
+ 0.011406f, 0.012695f, 0.013893f, 0.014908f, 0.015854f, 0.017044f, 0.018234f, 0.019501f,
+ 0.020752f, 0.022003f, 0.023254f, 0.024689f, 0.026154f, 0.027802f, 0.029434f, 0.031113f,
+ 0.032898f, 0.034668f, 0.036774f, 0.038910f, 0.040802f, 0.043030f, 0.045593f, 0.048065f,
+ 0.050873f, 0.053680f, 0.056458f, 0.059692f, 0.062866f, 0.066467f, 0.069946f, 0.074036f,
+ 0.077942f, 0.082275f, 0.086731f, 0.091614f, 0.096313f, 0.101562f, 0.106934f, 0.112671f,
+ 0.118591f, 0.124634f, 0.130859f, 0.137207f, 0.144043f, 0.151123f, 0.157593f, 0.165283f,
+ 0.173218f, 0.180664f, 0.510254f, 0.550781f, 0.558105f, 0.561035f, 0.562012f, 0.562012f,
+ 0.000842f, 0.002552f, 0.003769f, 0.005333f, 0.006149f, 0.007298f, 0.008362f, 0.009224f,
+ 0.010254f, 0.011230f, 0.012108f, 0.013092f, 0.014000f, 0.014992f, 0.016006f, 0.016953f,
+ 0.017990f, 0.019196f, 0.020142f, 0.021622f, 0.022827f, 0.024216f, 0.025513f, 0.026993f,
+ 0.028564f, 0.030212f, 0.032013f, 0.033813f, 0.035706f, 0.037598f, 0.039703f, 0.041840f,
+ 0.044159f, 0.046539f, 0.049347f, 0.052155f, 0.055084f, 0.058228f, 0.061554f, 0.065002f,
+ 0.068909f, 0.072693f, 0.076599f, 0.081238f, 0.085388f, 0.090515f, 0.095764f, 0.100891f,
+ 0.106689f, 0.112366f, 0.118103f, 0.124634f, 0.130859f, 0.137573f, 0.144287f, 0.151855f,
+ 0.158447f, 0.166260f, 0.498535f, 0.541992f, 0.549805f, 0.553711f, 0.554199f, 0.554688f,
+ 0.000874f, 0.002186f, 0.003445f, 0.004807f, 0.005562f, 0.006607f, 0.007378f, 0.008102f,
+ 0.008919f, 0.009666f, 0.010513f, 0.011131f, 0.012039f, 0.012848f, 0.013779f, 0.014671f,
+ 0.015465f, 0.016464f, 0.017517f, 0.018585f, 0.019730f, 0.020798f, 0.022018f, 0.023300f,
+ 0.024612f, 0.026093f, 0.027374f, 0.029022f, 0.030624f, 0.032440f, 0.034180f, 0.036285f,
+ 0.038116f, 0.040344f, 0.042725f, 0.045349f, 0.047913f, 0.050476f, 0.053406f, 0.056488f,
+ 0.059998f, 0.063354f, 0.067383f, 0.071289f, 0.075562f, 0.079834f, 0.084656f, 0.089478f,
+ 0.094849f, 0.100342f, 0.106140f, 0.111877f, 0.118042f, 0.124573f, 0.130981f, 0.137451f,
+ 0.144653f, 0.152588f, 0.486816f, 0.531738f, 0.541016f, 0.545410f, 0.547363f, 0.546875f,
+ 0.000667f, 0.002001f, 0.003244f, 0.003895f, 0.004936f, 0.005608f, 0.006477f, 0.006901f,
+ 0.007648f, 0.008354f, 0.009132f, 0.009766f, 0.010490f, 0.011177f, 0.011780f, 0.012543f,
+ 0.013420f, 0.014084f, 0.015045f, 0.015961f, 0.016876f, 0.017822f, 0.018768f, 0.019958f,
+ 0.021255f, 0.022232f, 0.023560f, 0.024780f, 0.026108f, 0.027634f, 0.029221f, 0.030762f,
+ 0.032684f, 0.034576f, 0.036621f, 0.038605f, 0.040985f, 0.043488f, 0.046021f, 0.049042f,
+ 0.051727f, 0.054901f, 0.058441f, 0.061981f, 0.065552f, 0.069885f, 0.074097f, 0.078857f,
+ 0.083923f, 0.088623f, 0.094360f, 0.099854f, 0.105957f, 0.111694f, 0.118164f, 0.124817f,
+ 0.131836f, 0.138794f, 0.474365f, 0.522949f, 0.532227f, 0.536621f, 0.538574f, 0.539062f,
+ 0.000876f, 0.002020f, 0.002857f, 0.003855f, 0.004436f, 0.005009f, 0.005482f, 0.006130f,
+ 0.006588f, 0.007084f, 0.007656f, 0.008286f, 0.008949f, 0.009506f, 0.010025f, 0.010803f,
+ 0.011444f, 0.012047f, 0.012802f, 0.013512f, 0.014305f, 0.015282f, 0.016052f, 0.016846f,
+ 0.017914f, 0.018829f, 0.019882f, 0.021027f, 0.022232f, 0.023453f, 0.024689f, 0.026169f,
+ 0.027573f, 0.029327f, 0.031036f, 0.032806f, 0.034882f, 0.036743f, 0.039032f, 0.041626f,
+ 0.044312f, 0.046936f, 0.050018f, 0.053253f, 0.056610f, 0.060272f, 0.064392f, 0.068542f,
+ 0.072937f, 0.078003f, 0.082886f, 0.088318f, 0.093933f, 0.099670f, 0.106140f, 0.112000f,
+ 0.118713f, 0.125732f, 0.463135f, 0.513672f, 0.524414f, 0.528809f, 0.530762f, 0.532227f,
+ 0.000573f, 0.001698f, 0.002670f, 0.003082f, 0.003735f, 0.004318f, 0.004673f, 0.005161f,
+ 0.005779f, 0.006203f, 0.006565f, 0.007015f, 0.007591f, 0.007965f, 0.008583f, 0.009094f,
+ 0.009491f, 0.010239f, 0.010780f, 0.011353f, 0.012047f, 0.012787f, 0.013504f, 0.014206f,
+ 0.015060f, 0.015915f, 0.016708f, 0.017685f, 0.018677f, 0.019653f, 0.020828f, 0.021866f,
+ 0.023224f, 0.024445f, 0.025818f, 0.027557f, 0.029114f, 0.030991f, 0.032928f, 0.035034f,
+ 0.037201f, 0.039581f, 0.042328f, 0.045166f, 0.048157f, 0.051392f, 0.054962f, 0.058685f,
+ 0.062988f, 0.067444f, 0.072021f, 0.077148f, 0.082520f, 0.088196f, 0.093750f, 0.100403f,
+ 0.106201f, 0.112976f, 0.450928f, 0.503906f, 0.515137f, 0.520020f, 0.522949f, 0.524414f,
+ 0.000643f, 0.001637f, 0.002197f, 0.002800f, 0.003376f, 0.003613f, 0.003914f, 0.004391f,
+ 0.004742f, 0.005150f, 0.005466f, 0.005924f, 0.006344f, 0.006645f, 0.007046f, 0.007591f,
+ 0.008118f, 0.008560f, 0.008934f, 0.009529f, 0.010147f, 0.010651f, 0.011276f, 0.011787f,
+ 0.012543f, 0.013229f, 0.013916f, 0.014740f, 0.015564f, 0.016388f, 0.017258f, 0.018188f,
+ 0.019257f, 0.020355f, 0.021729f, 0.022766f, 0.024277f, 0.025696f, 0.027237f, 0.029022f,
+ 0.030945f, 0.033020f, 0.035248f, 0.037689f, 0.040405f, 0.043182f, 0.046295f, 0.049866f,
+ 0.053528f, 0.057526f, 0.061920f, 0.066284f, 0.071716f, 0.077209f, 0.082703f, 0.088196f,
+ 0.094177f, 0.101074f, 0.438965f, 0.494629f, 0.507324f, 0.512207f, 0.515137f, 0.516113f,
+ 0.000484f, 0.001272f, 0.001968f, 0.002327f, 0.002573f, 0.003054f, 0.003338f, 0.003660f,
+ 0.003906f, 0.004303f, 0.004658f, 0.004921f, 0.005222f, 0.005547f, 0.005878f, 0.006290f,
+ 0.006542f, 0.007015f, 0.007442f, 0.007851f, 0.008339f, 0.008713f, 0.009247f, 0.009811f,
+ 0.010345f, 0.010849f, 0.011490f, 0.012123f, 0.012733f, 0.013428f, 0.014183f, 0.014961f,
+ 0.015839f, 0.016815f, 0.017731f, 0.018768f, 0.019821f, 0.021072f, 0.022385f, 0.023727f,
+ 0.025345f, 0.027084f, 0.028946f, 0.030914f, 0.033295f, 0.035614f, 0.038513f, 0.041473f,
+ 0.044678f, 0.048462f, 0.052338f, 0.056671f, 0.061310f, 0.066101f, 0.071533f, 0.077148f,
+ 0.083069f, 0.089172f, 0.427246f, 0.485352f, 0.498535f, 0.503906f, 0.508301f, 0.509766f,
+ 0.000416f, 0.001121f, 0.001410f, 0.001959f, 0.002159f, 0.002558f, 0.002724f, 0.002939f,
+ 0.003220f, 0.003447f, 0.003733f, 0.003944f, 0.004219f, 0.004578f, 0.004810f, 0.005100f,
+ 0.005402f, 0.005783f, 0.006077f, 0.006382f, 0.006729f, 0.007141f, 0.007526f, 0.007965f,
+ 0.008354f, 0.008858f, 0.009300f, 0.009789f, 0.010452f, 0.010986f, 0.011658f, 0.012131f,
+ 0.012833f, 0.013702f, 0.014435f, 0.015266f, 0.016113f, 0.017136f, 0.018143f, 0.019241f,
+ 0.020493f, 0.021820f, 0.023346f, 0.025085f, 0.027023f, 0.028976f, 0.031174f, 0.033966f,
+ 0.036743f, 0.039856f, 0.043396f, 0.047180f, 0.051605f, 0.056152f, 0.061127f, 0.066284f,
+ 0.072021f, 0.078247f, 0.415283f, 0.475586f, 0.490234f, 0.496338f, 0.499756f, 0.501953f,
+ 0.000493f, 0.001126f, 0.001391f, 0.001574f, 0.001786f, 0.002073f, 0.002188f, 0.002417f,
+ 0.002657f, 0.002785f, 0.002964f, 0.003189f, 0.003384f, 0.003687f, 0.003859f, 0.004124f,
+ 0.004330f, 0.004555f, 0.004890f, 0.005119f, 0.005451f, 0.005749f, 0.006054f, 0.006348f,
+ 0.006683f, 0.007050f, 0.007458f, 0.007889f, 0.008339f, 0.008751f, 0.009323f, 0.009766f,
+ 0.010353f, 0.010887f, 0.011520f, 0.012192f, 0.012932f, 0.013748f, 0.014542f, 0.015434f,
+ 0.016434f, 0.017471f, 0.018723f, 0.019989f, 0.021500f, 0.023117f, 0.024948f, 0.027100f,
+ 0.029770f, 0.032166f, 0.035248f, 0.038696f, 0.042633f, 0.046875f, 0.051605f, 0.056427f,
+ 0.061859f, 0.067688f, 0.403320f, 0.467041f, 0.480957f, 0.487793f, 0.491699f, 0.494385f,
+ 0.000336f, 0.000673f, 0.001150f, 0.001274f, 0.001482f, 0.001630f, 0.001748f, 0.001904f,
+ 0.002087f, 0.002232f, 0.002306f, 0.002497f, 0.002672f, 0.002872f, 0.003092f, 0.003225f,
+ 0.003387f, 0.003553f, 0.003819f, 0.003979f, 0.004230f, 0.004517f, 0.004738f, 0.005016f,
+ 0.005322f, 0.005569f, 0.005848f, 0.006184f, 0.006573f, 0.006851f, 0.007271f, 0.007660f,
+ 0.008064f, 0.008568f, 0.009048f, 0.009567f, 0.010139f, 0.010788f, 0.011391f, 0.012161f,
+ 0.012939f, 0.013763f, 0.014694f, 0.015717f, 0.016815f, 0.018097f, 0.019714f, 0.021149f,
+ 0.023270f, 0.025421f, 0.028015f, 0.030991f, 0.034271f, 0.038116f, 0.042328f, 0.046997f,
+ 0.052094f, 0.057770f, 0.391113f, 0.457031f, 0.472412f, 0.479736f, 0.484375f, 0.486816f,
+ 0.000309f, 0.000612f, 0.000953f, 0.001086f, 0.001191f, 0.001281f, 0.001351f, 0.001442f,
+ 0.001610f, 0.001733f, 0.001783f, 0.001991f, 0.002087f, 0.002232f, 0.002337f, 0.002495f,
+ 0.002611f, 0.002775f, 0.002935f, 0.003101f, 0.003302f, 0.003496f, 0.003622f, 0.003839f,
+ 0.004047f, 0.004265f, 0.004494f, 0.004738f, 0.005039f, 0.005272f, 0.005650f, 0.005898f,
+ 0.006210f, 0.006588f, 0.006950f, 0.007332f, 0.007782f, 0.008240f, 0.008766f, 0.009331f,
+ 0.009964f, 0.010612f, 0.011314f, 0.012062f, 0.013023f, 0.014038f, 0.015007f, 0.016251f,
+ 0.017761f, 0.019501f, 0.021530f, 0.023926f, 0.026718f, 0.030106f, 0.033905f, 0.038361f,
+ 0.043060f, 0.048370f, 0.379395f, 0.446777f, 0.464111f, 0.471191f, 0.475586f, 0.479492f,
+ 0.000439f, 0.000476f, 0.000672f, 0.000752f, 0.000810f, 0.000949f, 0.001011f, 0.001121f,
+ 0.001160f, 0.001249f, 0.001408f, 0.001493f, 0.001591f, 0.001719f, 0.001788f, 0.001845f,
+ 0.001982f, 0.002106f, 0.002201f, 0.002357f, 0.002460f, 0.002598f, 0.002724f, 0.002869f,
+ 0.003036f, 0.003187f, 0.003397f, 0.003569f, 0.003763f, 0.004017f, 0.004211f, 0.004414f,
+ 0.004704f, 0.004890f, 0.005234f, 0.005524f, 0.005825f, 0.006187f, 0.006535f, 0.006977f,
+ 0.007423f, 0.007874f, 0.008553f, 0.009079f, 0.009857f, 0.010567f, 0.011360f, 0.012306f,
+ 0.013390f, 0.014702f, 0.016220f, 0.017960f, 0.020157f, 0.022995f, 0.026352f, 0.030212f,
+ 0.034790f, 0.039459f, 0.368408f, 0.437744f, 0.455322f, 0.463379f, 0.468018f, 0.471436f,
+ 0.000202f, 0.000437f, 0.000488f, 0.000579f, 0.000664f, 0.000692f, 0.000792f, 0.000762f,
+ 0.000875f, 0.000949f, 0.001038f, 0.001068f, 0.001116f, 0.001196f, 0.001300f, 0.001352f,
+ 0.001458f, 0.001529f, 0.001623f, 0.001667f, 0.001770f, 0.001884f, 0.001989f, 0.002071f,
+ 0.002203f, 0.002310f, 0.002445f, 0.002556f, 0.002680f, 0.002876f, 0.002991f, 0.003206f,
+ 0.003365f, 0.003531f, 0.003759f, 0.003956f, 0.004227f, 0.004513f, 0.004768f, 0.005074f,
+ 0.005402f, 0.005756f, 0.006142f, 0.006603f, 0.007160f, 0.007645f, 0.008339f, 0.008987f,
+ 0.009819f, 0.010780f, 0.011803f, 0.013153f, 0.014763f, 0.016876f, 0.019623f, 0.022995f,
+ 0.026978f, 0.031708f, 0.356445f, 0.428223f, 0.446533f, 0.455078f, 0.460449f, 0.463379f,
+ 0.000126f, 0.000241f, 0.000344f, 0.000353f, 0.000437f, 0.000522f, 0.000513f, 0.000552f,
+ 0.000613f, 0.000699f, 0.000717f, 0.000727f, 0.000763f, 0.000848f, 0.000877f, 0.000956f,
+ 0.000963f, 0.001068f, 0.001128f, 0.001170f, 0.001238f, 0.001311f, 0.001385f, 0.001454f,
+ 0.001534f, 0.001603f, 0.001714f, 0.001779f, 0.001885f, 0.002016f, 0.002092f, 0.002214f,
+ 0.002331f, 0.002460f, 0.002613f, 0.002777f, 0.002924f, 0.003120f, 0.003298f, 0.003496f,
+ 0.003708f, 0.004009f, 0.004292f, 0.004601f, 0.004951f, 0.005341f, 0.005772f, 0.006260f,
+ 0.006901f, 0.007572f, 0.008324f, 0.009300f, 0.010445f, 0.011848f, 0.013870f, 0.016678f,
+ 0.020218f, 0.024536f, 0.345703f, 0.419189f, 0.437500f, 0.447021f, 0.452393f, 0.455811f,
+ 0.000146f, 0.000240f, 0.000268f, 0.000268f, 0.000310f, 0.000311f, 0.000331f, 0.000366f,
+ 0.000410f, 0.000447f, 0.000446f, 0.000517f, 0.000511f, 0.000571f, 0.000596f, 0.000618f,
+ 0.000674f, 0.000691f, 0.000723f, 0.000762f, 0.000822f, 0.000856f, 0.000912f, 0.000950f,
+ 0.001014f, 0.001049f, 0.001128f, 0.001188f, 0.001237f, 0.001303f, 0.001371f, 0.001466f,
+ 0.001532f, 0.001623f, 0.001701f, 0.001805f, 0.001945f, 0.002035f, 0.002186f, 0.002329f,
+ 0.002460f, 0.002632f, 0.002819f, 0.003012f, 0.003271f, 0.003550f, 0.003819f, 0.004162f,
+ 0.004539f, 0.005024f, 0.005585f, 0.006233f, 0.007050f, 0.008072f, 0.009331f, 0.011269f,
+ 0.014160f, 0.018112f, 0.333740f, 0.408447f, 0.428711f, 0.438232f, 0.443359f, 0.447510f,
+ 0.000053f, 0.000163f, 0.000155f, 0.000160f, 0.000191f, 0.000228f, 0.000206f, 0.000233f,
+ 0.000248f, 0.000263f, 0.000267f, 0.000294f, 0.000324f, 0.000335f, 0.000364f, 0.000378f,
+ 0.000396f, 0.000435f, 0.000445f, 0.000490f, 0.000502f, 0.000522f, 0.000543f, 0.000582f,
+ 0.000619f, 0.000665f, 0.000679f, 0.000705f, 0.000755f, 0.000797f, 0.000856f, 0.000887f,
+ 0.000953f, 0.000988f, 0.001043f, 0.001103f, 0.001177f, 0.001256f, 0.001331f, 0.001410f,
+ 0.001508f, 0.001612f, 0.001734f, 0.001873f, 0.001999f, 0.002163f, 0.002378f, 0.002565f,
+ 0.002827f, 0.003119f, 0.003479f, 0.003899f, 0.004463f, 0.005116f, 0.005951f, 0.007153f,
+ 0.009163f, 0.012535f, 0.322510f, 0.400146f, 0.420654f, 0.430176f, 0.436523f, 0.440430f,
+ 0.000097f, 0.000107f, 0.000095f, 0.000087f, 0.000107f, 0.000110f, 0.000137f, 0.000139f,
+ 0.000140f, 0.000147f, 0.000168f, 0.000175f, 0.000177f, 0.000184f, 0.000210f, 0.000200f,
+ 0.000224f, 0.000239f, 0.000246f, 0.000258f, 0.000278f, 0.000288f, 0.000312f, 0.000324f,
+ 0.000347f, 0.000368f, 0.000382f, 0.000395f, 0.000418f, 0.000440f, 0.000471f, 0.000495f,
+ 0.000521f, 0.000547f, 0.000577f, 0.000620f, 0.000649f, 0.000695f, 0.000749f, 0.000785f,
+ 0.000838f, 0.000897f, 0.000972f, 0.001028f, 0.001118f, 0.001204f, 0.001316f, 0.001432f,
+ 0.001580f, 0.001748f, 0.001961f, 0.002207f, 0.002533f, 0.002941f, 0.003487f, 0.004223f,
+ 0.005371f, 0.007809f, 0.311523f, 0.390381f, 0.411377f, 0.421875f, 0.428467f, 0.432617f,
+ 0.000000f, 0.000055f, 0.000046f, 0.000054f, 0.000060f, 0.000058f, 0.000060f, 0.000068f,
+ 0.000068f, 0.000082f, 0.000076f, 0.000078f, 0.000092f, 0.000087f, 0.000091f, 0.000097f,
+ 0.000105f, 0.000115f, 0.000118f, 0.000124f, 0.000128f, 0.000133f, 0.000139f, 0.000154f,
+ 0.000160f, 0.000172f, 0.000175f, 0.000191f, 0.000201f, 0.000211f, 0.000221f, 0.000238f,
+ 0.000242f, 0.000257f, 0.000277f, 0.000295f, 0.000309f, 0.000326f, 0.000351f, 0.000375f,
+ 0.000400f, 0.000428f, 0.000459f, 0.000490f, 0.000535f, 0.000579f, 0.000626f, 0.000683f,
+ 0.000754f, 0.000836f, 0.000952f, 0.001064f, 0.001237f, 0.001460f, 0.001751f, 0.002157f,
+ 0.002800f, 0.004189f, 0.299561f, 0.380127f, 0.403076f, 0.413574f, 0.419922f, 0.424072f,
+ 0.000059f, 0.000039f, 0.000032f, 0.000028f, 0.000025f, 0.000025f, 0.000025f, 0.000024f,
+ 0.000023f, 0.000024f, 0.000026f, 0.000034f, 0.000029f, 0.000031f, 0.000038f, 0.000040f,
+ 0.000042f, 0.000043f, 0.000042f, 0.000043f, 0.000048f, 0.000054f, 0.000058f, 0.000056f,
+ 0.000060f, 0.000062f, 0.000066f, 0.000069f, 0.000072f, 0.000078f, 0.000082f, 0.000085f,
+ 0.000093f, 0.000096f, 0.000099f, 0.000106f, 0.000116f, 0.000123f, 0.000132f, 0.000140f,
+ 0.000150f, 0.000154f, 0.000167f, 0.000184f, 0.000192f, 0.000212f, 0.000231f, 0.000251f,
+ 0.000282f, 0.000314f, 0.000350f, 0.000401f, 0.000463f, 0.000554f, 0.000679f, 0.000861f,
+ 0.001157f, 0.001750f, 0.289307f, 0.371582f, 0.394043f, 0.406006f, 0.412109f, 0.417236f,
+ 0.000031f, 0.000020f, 0.000016f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000011f,
+ 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000009f,
+ 0.000009f, 0.000007f, 0.000008f, 0.000008f, 0.000010f, 0.000011f, 0.000012f, 0.000013f,
+ 0.000013f, 0.000013f, 0.000014f, 0.000017f, 0.000017f, 0.000016f, 0.000018f, 0.000019f,
+ 0.000021f, 0.000021f, 0.000022f, 0.000025f, 0.000027f, 0.000025f, 0.000028f, 0.000030f,
+ 0.000033f, 0.000036f, 0.000038f, 0.000040f, 0.000042f, 0.000047f, 0.000052f, 0.000057f,
+ 0.000060f, 0.000068f, 0.000073f, 0.000089f, 0.000104f, 0.000124f, 0.000153f, 0.000204f,
+ 0.000293f, 0.000497f, 0.278076f, 0.362793f, 0.385498f, 0.397705f, 0.405029f, 0.409912f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000005f, 0.000008f,
+ 0.000012f, 0.000026f, 0.267822f, 0.353027f, 0.376953f, 0.388916f, 0.395996f, 0.401367f,
+ },
+ {
+ 0.006824f, 0.021286f, 0.036285f, 0.051208f, 0.066467f, 0.082825f, 0.098694f, 0.114563f,
+ 0.130737f, 0.146973f, 0.162720f, 0.179932f, 0.196411f, 0.212646f, 0.229370f, 0.246338f,
+ 0.263184f, 0.279785f, 0.297363f, 0.314209f, 0.331055f, 0.348389f, 0.365479f, 0.383301f,
+ 0.400146f, 0.417725f, 0.435303f, 0.451904f, 0.469971f, 0.486816f, 0.503906f, 0.521484f,
+ 0.539551f, 0.556641f, 0.573730f, 0.592285f, 0.609375f, 0.627441f, 0.644531f, 0.662598f,
+ 0.679688f, 0.696777f, 0.714355f, 0.731934f, 0.749512f, 0.768066f, 0.784180f, 0.802246f,
+ 0.820312f, 0.837891f, 0.854980f, 0.871582f, 0.889648f, 0.906738f, 0.924805f, 0.941406f,
+ 0.959473f, 0.976074f, 0.953125f, 0.895020f, 0.857422f, 0.827637f, 0.803223f, 0.781738f,
+ 0.006741f, 0.020706f, 0.035187f, 0.049866f, 0.065125f, 0.079895f, 0.095581f, 0.111206f,
+ 0.126953f, 0.142822f, 0.158569f, 0.174561f, 0.190796f, 0.207031f, 0.223511f, 0.239380f,
+ 0.256104f, 0.272705f, 0.289307f, 0.305664f, 0.322754f, 0.338867f, 0.356201f, 0.372314f,
+ 0.389404f, 0.406494f, 0.423828f, 0.440430f, 0.457520f, 0.474854f, 0.491211f, 0.508789f,
+ 0.525391f, 0.541992f, 0.559082f, 0.576660f, 0.594238f, 0.610840f, 0.627930f, 0.645508f,
+ 0.662598f, 0.679199f, 0.696289f, 0.713379f, 0.731445f, 0.747559f, 0.765137f, 0.782715f,
+ 0.799805f, 0.816895f, 0.834473f, 0.851074f, 0.868164f, 0.884766f, 0.902344f, 0.919434f,
+ 0.936523f, 0.953613f, 0.942871f, 0.887695f, 0.851562f, 0.823730f, 0.799805f, 0.779297f,
+ 0.006504f, 0.020004f, 0.033875f, 0.048676f, 0.063110f, 0.077759f, 0.092712f, 0.108032f,
+ 0.123230f, 0.138672f, 0.153931f, 0.170044f, 0.185791f, 0.200806f, 0.217041f, 0.233276f,
+ 0.248901f, 0.265137f, 0.280762f, 0.297363f, 0.313721f, 0.329834f, 0.346680f, 0.363037f,
+ 0.378418f, 0.395752f, 0.411621f, 0.428467f, 0.445312f, 0.461670f, 0.479004f, 0.494873f,
+ 0.511230f, 0.527832f, 0.544434f, 0.561523f, 0.578613f, 0.594727f, 0.611328f, 0.628906f,
+ 0.645508f, 0.662109f, 0.679199f, 0.695312f, 0.712402f, 0.729004f, 0.746094f, 0.762695f,
+ 0.779297f, 0.796387f, 0.812500f, 0.829590f, 0.846191f, 0.863281f, 0.879395f, 0.896973f,
+ 0.914062f, 0.930176f, 0.932129f, 0.879395f, 0.845703f, 0.818848f, 0.795898f, 0.776367f,
+ 0.006226f, 0.019318f, 0.032959f, 0.046631f, 0.060699f, 0.075745f, 0.089966f, 0.104553f,
+ 0.119385f, 0.134277f, 0.149292f, 0.164917f, 0.179932f, 0.195190f, 0.210693f, 0.226562f,
+ 0.242188f, 0.257568f, 0.273438f, 0.289062f, 0.304932f, 0.320557f, 0.336426f, 0.352539f,
+ 0.368652f, 0.384766f, 0.400391f, 0.417236f, 0.433105f, 0.448730f, 0.465088f, 0.481689f,
+ 0.497559f, 0.513672f, 0.528809f, 0.546875f, 0.562500f, 0.578613f, 0.595215f, 0.612793f,
+ 0.627930f, 0.645508f, 0.661621f, 0.677246f, 0.693848f, 0.709961f, 0.726562f, 0.743164f,
+ 0.759766f, 0.774902f, 0.791992f, 0.808594f, 0.825195f, 0.841309f, 0.856934f, 0.874023f,
+ 0.890625f, 0.907715f, 0.921387f, 0.872070f, 0.839355f, 0.813477f, 0.791504f, 0.772461f,
+ 0.005928f, 0.018997f, 0.031830f, 0.045380f, 0.059235f, 0.072754f, 0.087463f, 0.101562f,
+ 0.115723f, 0.130371f, 0.145264f, 0.159668f, 0.175049f, 0.189453f, 0.204468f, 0.219482f,
+ 0.234497f, 0.250000f, 0.266113f, 0.280273f, 0.295410f, 0.311768f, 0.327393f, 0.343018f,
+ 0.357422f, 0.373779f, 0.389404f, 0.404785f, 0.421143f, 0.437012f, 0.452881f, 0.468262f,
+ 0.484375f, 0.499512f, 0.515137f, 0.531738f, 0.546875f, 0.562500f, 0.579102f, 0.595215f,
+ 0.610840f, 0.627441f, 0.643555f, 0.659180f, 0.674805f, 0.691406f, 0.708008f, 0.723145f,
+ 0.738770f, 0.755371f, 0.771484f, 0.787598f, 0.803711f, 0.819824f, 0.835449f, 0.851562f,
+ 0.867676f, 0.884277f, 0.910156f, 0.864258f, 0.832520f, 0.808105f, 0.787109f, 0.769043f,
+ 0.005939f, 0.018066f, 0.030991f, 0.043488f, 0.057312f, 0.070557f, 0.084473f, 0.098328f,
+ 0.112610f, 0.126587f, 0.140259f, 0.154907f, 0.169678f, 0.184326f, 0.198608f, 0.213379f,
+ 0.227783f, 0.242065f, 0.257568f, 0.272705f, 0.287109f, 0.302246f, 0.318115f, 0.333252f,
+ 0.347656f, 0.362549f, 0.378418f, 0.393555f, 0.408936f, 0.423828f, 0.439697f, 0.455078f,
+ 0.471191f, 0.484863f, 0.500488f, 0.517578f, 0.532227f, 0.547363f, 0.562500f, 0.579102f,
+ 0.594727f, 0.610352f, 0.625488f, 0.641602f, 0.657227f, 0.671875f, 0.687500f, 0.704102f,
+ 0.719238f, 0.733887f, 0.750488f, 0.767090f, 0.782715f, 0.798340f, 0.813965f, 0.830566f,
+ 0.845215f, 0.862305f, 0.899902f, 0.855469f, 0.825684f, 0.801758f, 0.782227f, 0.764648f,
+ 0.005684f, 0.017639f, 0.030334f, 0.042572f, 0.055298f, 0.068054f, 0.081787f, 0.095276f,
+ 0.108765f, 0.122192f, 0.136353f, 0.150513f, 0.164307f, 0.178467f, 0.192627f, 0.206665f,
+ 0.221436f, 0.234985f, 0.249634f, 0.264404f, 0.278564f, 0.293213f, 0.308350f, 0.321533f,
+ 0.337646f, 0.353027f, 0.367432f, 0.381592f, 0.395996f, 0.411865f, 0.426758f, 0.441895f,
+ 0.456543f, 0.471680f, 0.485840f, 0.501465f, 0.517090f, 0.531738f, 0.546387f, 0.562012f,
+ 0.576660f, 0.592773f, 0.608398f, 0.623047f, 0.638672f, 0.654297f, 0.668457f, 0.684082f,
+ 0.699707f, 0.714844f, 0.730469f, 0.745605f, 0.761230f, 0.777832f, 0.791504f, 0.807617f,
+ 0.823242f, 0.839355f, 0.889160f, 0.847656f, 0.818848f, 0.796387f, 0.776855f, 0.760254f,
+ 0.005417f, 0.017136f, 0.028778f, 0.041016f, 0.054047f, 0.066528f, 0.079590f, 0.092102f,
+ 0.105225f, 0.118652f, 0.131714f, 0.145630f, 0.158813f, 0.172607f, 0.186523f, 0.200317f,
+ 0.213745f, 0.227905f, 0.242188f, 0.256104f, 0.270020f, 0.283936f, 0.299072f, 0.312744f,
+ 0.327148f, 0.341797f, 0.355957f, 0.369629f, 0.384766f, 0.399414f, 0.413574f, 0.427490f,
+ 0.443115f, 0.457764f, 0.472656f, 0.487061f, 0.501465f, 0.516602f, 0.530762f, 0.545898f,
+ 0.560547f, 0.574707f, 0.589844f, 0.605469f, 0.619629f, 0.633301f, 0.648926f, 0.665527f,
+ 0.679688f, 0.694824f, 0.709961f, 0.725586f, 0.739746f, 0.755371f, 0.770020f, 0.786133f,
+ 0.802246f, 0.817383f, 0.877930f, 0.838867f, 0.812012f, 0.790039f, 0.771973f, 0.755371f,
+ 0.005520f, 0.016464f, 0.027695f, 0.039948f, 0.051575f, 0.063965f, 0.076660f, 0.089111f,
+ 0.101807f, 0.114319f, 0.126953f, 0.140381f, 0.153564f, 0.166992f, 0.180298f, 0.193970f,
+ 0.207153f, 0.220337f, 0.234131f, 0.248169f, 0.261475f, 0.275146f, 0.288818f, 0.302734f,
+ 0.316162f, 0.330566f, 0.345459f, 0.358887f, 0.372803f, 0.386719f, 0.401367f, 0.415527f,
+ 0.429199f, 0.443848f, 0.458008f, 0.472412f, 0.486572f, 0.500977f, 0.515137f, 0.529785f,
+ 0.544434f, 0.558105f, 0.572754f, 0.587891f, 0.601074f, 0.617188f, 0.631836f, 0.645020f,
+ 0.660645f, 0.674805f, 0.689453f, 0.704590f, 0.719727f, 0.734375f, 0.750000f, 0.764160f,
+ 0.780273f, 0.794922f, 0.866699f, 0.830566f, 0.804688f, 0.784180f, 0.766113f, 0.750977f,
+ 0.005222f, 0.016022f, 0.026962f, 0.038086f, 0.050049f, 0.061798f, 0.074158f, 0.085876f,
+ 0.098145f, 0.110718f, 0.122986f, 0.135864f, 0.148438f, 0.161133f, 0.173584f, 0.187378f,
+ 0.199707f, 0.213501f, 0.226440f, 0.240112f, 0.252441f, 0.266113f, 0.279785f, 0.292725f,
+ 0.306152f, 0.320068f, 0.333984f, 0.347900f, 0.361572f, 0.374512f, 0.387695f, 0.402344f,
+ 0.416504f, 0.429688f, 0.443604f, 0.458008f, 0.471680f, 0.485596f, 0.499023f, 0.513184f,
+ 0.527832f, 0.541016f, 0.555664f, 0.569336f, 0.583984f, 0.598633f, 0.612793f, 0.626465f,
+ 0.641602f, 0.656250f, 0.669922f, 0.684570f, 0.698730f, 0.713867f, 0.728516f, 0.742188f,
+ 0.757812f, 0.771484f, 0.855957f, 0.822266f, 0.797852f, 0.777832f, 0.760742f, 0.746094f,
+ 0.004944f, 0.015327f, 0.026230f, 0.037201f, 0.048187f, 0.059448f, 0.071167f, 0.082642f,
+ 0.094727f, 0.106506f, 0.119019f, 0.130371f, 0.143555f, 0.155640f, 0.167725f, 0.180908f,
+ 0.193604f, 0.206177f, 0.218506f, 0.231812f, 0.244873f, 0.257568f, 0.270996f, 0.283203f,
+ 0.296387f, 0.309814f, 0.322754f, 0.336670f, 0.348877f, 0.362061f, 0.376465f, 0.389893f,
+ 0.402588f, 0.415283f, 0.429443f, 0.443115f, 0.457031f, 0.470459f, 0.483887f, 0.497314f,
+ 0.511230f, 0.524414f, 0.538574f, 0.551758f, 0.565918f, 0.579590f, 0.593750f, 0.606934f,
+ 0.621094f, 0.635254f, 0.649902f, 0.664062f, 0.678223f, 0.692871f, 0.707031f, 0.721191f,
+ 0.735840f, 0.750488f, 0.846191f, 0.813477f, 0.790527f, 0.770996f, 0.754883f, 0.740723f,
+ 0.004951f, 0.014656f, 0.025253f, 0.035309f, 0.046417f, 0.057465f, 0.068665f, 0.079773f,
+ 0.091370f, 0.102844f, 0.114441f, 0.126099f, 0.138062f, 0.150391f, 0.161987f, 0.174561f,
+ 0.186523f, 0.198730f, 0.211060f, 0.223267f, 0.235352f, 0.248779f, 0.260986f, 0.274414f,
+ 0.286621f, 0.298584f, 0.312256f, 0.324463f, 0.337158f, 0.350342f, 0.363281f, 0.376953f,
+ 0.389404f, 0.402344f, 0.415283f, 0.428955f, 0.441162f, 0.455322f, 0.467285f, 0.481201f,
+ 0.493896f, 0.507324f, 0.520996f, 0.534668f, 0.547852f, 0.561035f, 0.575195f, 0.588867f,
+ 0.603027f, 0.616211f, 0.630371f, 0.643555f, 0.658203f, 0.671875f, 0.686035f, 0.699707f,
+ 0.714844f, 0.729492f, 0.833984f, 0.804688f, 0.782227f, 0.764160f, 0.749512f, 0.735352f,
+ 0.004700f, 0.014343f, 0.024200f, 0.034515f, 0.044586f, 0.055176f, 0.066162f, 0.077209f,
+ 0.087830f, 0.098816f, 0.110413f, 0.121826f, 0.132690f, 0.144897f, 0.156372f, 0.168213f,
+ 0.179443f, 0.191650f, 0.203369f, 0.215088f, 0.227661f, 0.239990f, 0.251709f, 0.263916f,
+ 0.276611f, 0.289551f, 0.301270f, 0.313965f, 0.325928f, 0.338135f, 0.350586f, 0.363037f,
+ 0.376465f, 0.388428f, 0.401123f, 0.414062f, 0.426514f, 0.439209f, 0.452393f, 0.465088f,
+ 0.478271f, 0.491455f, 0.503906f, 0.517090f, 0.530273f, 0.543457f, 0.556641f, 0.570312f,
+ 0.583008f, 0.597168f, 0.610352f, 0.624512f, 0.638184f, 0.651367f, 0.665527f, 0.679199f,
+ 0.692871f, 0.708496f, 0.823242f, 0.796387f, 0.774902f, 0.757812f, 0.742676f, 0.729980f,
+ 0.004395f, 0.013802f, 0.023499f, 0.033173f, 0.043121f, 0.053345f, 0.063538f, 0.073730f,
+ 0.085083f, 0.095581f, 0.106140f, 0.116760f, 0.127930f, 0.139160f, 0.150757f, 0.161621f,
+ 0.173096f, 0.184814f, 0.196289f, 0.207520f, 0.219971f, 0.231201f, 0.242920f, 0.254150f,
+ 0.266602f, 0.278320f, 0.290527f, 0.302490f, 0.314209f, 0.326904f, 0.338867f, 0.349854f,
+ 0.362305f, 0.375488f, 0.387451f, 0.400146f, 0.412354f, 0.424805f, 0.436768f, 0.449219f,
+ 0.461914f, 0.475098f, 0.487061f, 0.500000f, 0.512695f, 0.525391f, 0.538574f, 0.551758f,
+ 0.564453f, 0.577148f, 0.590820f, 0.604004f, 0.618164f, 0.631348f, 0.644531f, 0.658203f,
+ 0.672363f, 0.686523f, 0.812500f, 0.786621f, 0.767090f, 0.750977f, 0.736816f, 0.724609f,
+ 0.004425f, 0.013405f, 0.022385f, 0.032043f, 0.041565f, 0.051605f, 0.061340f, 0.071106f,
+ 0.081116f, 0.091125f, 0.101868f, 0.112671f, 0.123169f, 0.133667f, 0.144897f, 0.155029f,
+ 0.166748f, 0.177246f, 0.188599f, 0.199585f, 0.211182f, 0.222046f, 0.233643f, 0.245361f,
+ 0.255615f, 0.268066f, 0.279053f, 0.291260f, 0.303223f, 0.314209f, 0.325684f, 0.338379f,
+ 0.349854f, 0.361572f, 0.374023f, 0.385254f, 0.397949f, 0.409912f, 0.421143f, 0.434082f,
+ 0.445801f, 0.457764f, 0.470215f, 0.482910f, 0.495361f, 0.508301f, 0.520996f, 0.534180f,
+ 0.546387f, 0.560059f, 0.572266f, 0.584961f, 0.597168f, 0.610840f, 0.624023f, 0.638184f,
+ 0.650879f, 0.666016f, 0.801270f, 0.778320f, 0.760254f, 0.744141f, 0.730469f, 0.719238f,
+ 0.004261f, 0.012543f, 0.021591f, 0.031052f, 0.039734f, 0.049164f, 0.058838f, 0.068420f,
+ 0.077881f, 0.087402f, 0.098145f, 0.108276f, 0.118225f, 0.128784f, 0.138550f, 0.149292f,
+ 0.159790f, 0.170654f, 0.181519f, 0.191772f, 0.203003f, 0.213623f, 0.225098f, 0.235107f,
+ 0.247070f, 0.257324f, 0.269287f, 0.280273f, 0.291260f, 0.302246f, 0.313721f, 0.325439f,
+ 0.336670f, 0.348145f, 0.359619f, 0.371338f, 0.382812f, 0.395020f, 0.406738f, 0.418213f,
+ 0.429932f, 0.442139f, 0.454102f, 0.466309f, 0.479004f, 0.490723f, 0.502930f, 0.515625f,
+ 0.526855f, 0.540527f, 0.552246f, 0.565918f, 0.578613f, 0.591309f, 0.604492f, 0.617188f,
+ 0.630859f, 0.644043f, 0.790039f, 0.769531f, 0.751953f, 0.737305f, 0.724121f, 0.713379f,
+ 0.003983f, 0.012329f, 0.020538f, 0.029312f, 0.038452f, 0.047241f, 0.056244f, 0.065552f,
+ 0.075195f, 0.084290f, 0.094238f, 0.103638f, 0.113403f, 0.123413f, 0.133057f, 0.143066f,
+ 0.153076f, 0.163696f, 0.173584f, 0.184204f, 0.194580f, 0.204834f, 0.215332f, 0.225952f,
+ 0.237305f, 0.247803f, 0.258545f, 0.269531f, 0.280518f, 0.291260f, 0.301758f, 0.312988f,
+ 0.324219f, 0.335205f, 0.346191f, 0.357178f, 0.368896f, 0.380127f, 0.391113f, 0.403076f,
+ 0.414551f, 0.426270f, 0.437500f, 0.449951f, 0.460938f, 0.473389f, 0.485596f, 0.497314f,
+ 0.509277f, 0.522461f, 0.533691f, 0.546875f, 0.558594f, 0.571289f, 0.583496f, 0.596680f,
+ 0.608887f, 0.623047f, 0.778809f, 0.761230f, 0.744141f, 0.730957f, 0.718262f, 0.707031f,
+ 0.003717f, 0.012016f, 0.020142f, 0.028137f, 0.036682f, 0.045441f, 0.053711f, 0.062927f,
+ 0.071777f, 0.080627f, 0.090210f, 0.099060f, 0.108643f, 0.118164f, 0.127808f, 0.137329f,
+ 0.147095f, 0.156128f, 0.166748f, 0.175903f, 0.186157f, 0.196655f, 0.206909f, 0.216797f,
+ 0.227417f, 0.236816f, 0.247559f, 0.258301f, 0.268799f, 0.278809f, 0.289795f, 0.299805f,
+ 0.310547f, 0.321777f, 0.333008f, 0.343262f, 0.354492f, 0.365234f, 0.376953f, 0.387939f,
+ 0.398438f, 0.410400f, 0.421387f, 0.433105f, 0.444824f, 0.455811f, 0.467529f, 0.479736f,
+ 0.491943f, 0.502930f, 0.515625f, 0.527344f, 0.540039f, 0.551758f, 0.563965f, 0.576660f,
+ 0.589844f, 0.602539f, 0.767578f, 0.751465f, 0.736328f, 0.723633f, 0.711914f, 0.701660f,
+ 0.003813f, 0.011337f, 0.019028f, 0.027252f, 0.035583f, 0.043396f, 0.051849f, 0.060028f,
+ 0.068481f, 0.077026f, 0.086121f, 0.095093f, 0.103821f, 0.112610f, 0.121765f, 0.131470f,
+ 0.140503f, 0.149780f, 0.159058f, 0.168701f, 0.178711f, 0.187744f, 0.197998f, 0.207397f,
+ 0.217651f, 0.227661f, 0.236694f, 0.246704f, 0.257080f, 0.267334f, 0.277832f, 0.288330f,
+ 0.298584f, 0.308838f, 0.319336f, 0.329590f, 0.340332f, 0.351318f, 0.361816f, 0.372559f,
+ 0.383301f, 0.395020f, 0.405273f, 0.416260f, 0.427734f, 0.439209f, 0.450195f, 0.462158f,
+ 0.473389f, 0.485107f, 0.497314f, 0.508301f, 0.520996f, 0.533203f, 0.544922f, 0.557617f,
+ 0.568848f, 0.582031f, 0.757324f, 0.742676f, 0.729004f, 0.716309f, 0.705566f, 0.695801f,
+ 0.003633f, 0.011040f, 0.018280f, 0.026062f, 0.033569f, 0.041229f, 0.049591f, 0.057373f,
+ 0.065308f, 0.073975f, 0.082214f, 0.090393f, 0.099243f, 0.107544f, 0.116028f, 0.125854f,
+ 0.134155f, 0.143311f, 0.151978f, 0.160767f, 0.170410f, 0.179321f, 0.188477f, 0.198242f,
+ 0.207764f, 0.217896f, 0.227051f, 0.236328f, 0.246338f, 0.256104f, 0.265869f, 0.276123f,
+ 0.285645f, 0.295898f, 0.306152f, 0.316162f, 0.326172f, 0.336914f, 0.347412f, 0.358154f,
+ 0.368164f, 0.378906f, 0.389648f, 0.400146f, 0.410889f, 0.421631f, 0.432861f, 0.444824f,
+ 0.456055f, 0.466797f, 0.479004f, 0.490234f, 0.501465f, 0.514160f, 0.525879f, 0.537598f,
+ 0.549316f, 0.561523f, 0.745605f, 0.733887f, 0.721191f, 0.708496f, 0.699219f, 0.689453f,
+ 0.003469f, 0.010429f, 0.017609f, 0.024612f, 0.032135f, 0.039520f, 0.047516f, 0.055206f,
+ 0.062347f, 0.070618f, 0.078308f, 0.085938f, 0.094727f, 0.102417f, 0.111511f, 0.119446f,
+ 0.127441f, 0.136475f, 0.144897f, 0.154175f, 0.162476f, 0.171509f, 0.180054f, 0.189697f,
+ 0.198486f, 0.207886f, 0.216553f, 0.225830f, 0.235229f, 0.244873f, 0.254395f, 0.263428f,
+ 0.273193f, 0.283203f, 0.292969f, 0.302734f, 0.312744f, 0.322510f, 0.333008f, 0.342773f,
+ 0.353027f, 0.363037f, 0.374023f, 0.384521f, 0.395264f, 0.405762f, 0.416260f, 0.427002f,
+ 0.438232f, 0.449219f, 0.460449f, 0.471924f, 0.482910f, 0.494629f, 0.506348f, 0.517578f,
+ 0.529785f, 0.541504f, 0.734375f, 0.725098f, 0.712891f, 0.701660f, 0.692383f, 0.683594f,
+ 0.003328f, 0.009804f, 0.016373f, 0.023727f, 0.030746f, 0.037994f, 0.044952f, 0.052032f,
+ 0.059998f, 0.067383f, 0.074707f, 0.082214f, 0.089783f, 0.097961f, 0.105774f, 0.114197f,
+ 0.122131f, 0.129517f, 0.137695f, 0.146118f, 0.154419f, 0.163330f, 0.171997f, 0.180664f,
+ 0.188477f, 0.197388f, 0.206055f, 0.215332f, 0.224365f, 0.233765f, 0.242798f, 0.251709f,
+ 0.260986f, 0.270020f, 0.279785f, 0.289062f, 0.299561f, 0.308594f, 0.318115f, 0.328613f,
+ 0.338135f, 0.348877f, 0.358154f, 0.368408f, 0.378174f, 0.388916f, 0.399658f, 0.410156f,
+ 0.420898f, 0.431885f, 0.442871f, 0.453369f, 0.463867f, 0.475342f, 0.486572f, 0.498535f,
+ 0.510742f, 0.521973f, 0.723633f, 0.715820f, 0.705078f, 0.694336f, 0.686035f, 0.677246f,
+ 0.003090f, 0.009628f, 0.016129f, 0.022644f, 0.029068f, 0.036407f, 0.042633f, 0.049866f,
+ 0.056946f, 0.063904f, 0.071167f, 0.078186f, 0.085327f, 0.092896f, 0.100098f, 0.107788f,
+ 0.115662f, 0.123230f, 0.131104f, 0.139160f, 0.146973f, 0.154907f, 0.162964f, 0.171265f,
+ 0.179565f, 0.188110f, 0.196777f, 0.204834f, 0.213745f, 0.222168f, 0.231079f, 0.239868f,
+ 0.248779f, 0.258057f, 0.267090f, 0.276611f, 0.285645f, 0.294434f, 0.304688f, 0.314209f,
+ 0.323242f, 0.332520f, 0.342773f, 0.353027f, 0.362549f, 0.373047f, 0.383057f, 0.393311f,
+ 0.404053f, 0.414307f, 0.424561f, 0.435059f, 0.445801f, 0.456787f, 0.467773f, 0.479004f,
+ 0.490479f, 0.501953f, 0.712891f, 0.707031f, 0.696777f, 0.687500f, 0.679199f, 0.671387f,
+ 0.003096f, 0.009026f, 0.015450f, 0.021606f, 0.027695f, 0.034302f, 0.040833f, 0.047455f,
+ 0.054077f, 0.060669f, 0.067444f, 0.074097f, 0.081604f, 0.088501f, 0.095337f, 0.102295f,
+ 0.109375f, 0.116821f, 0.124146f, 0.131592f, 0.139404f, 0.147217f, 0.155029f, 0.162231f,
+ 0.170288f, 0.177979f, 0.186646f, 0.194092f, 0.203247f, 0.211670f, 0.219604f, 0.228149f,
+ 0.236816f, 0.245605f, 0.254639f, 0.263184f, 0.272217f, 0.281250f, 0.290527f, 0.299805f,
+ 0.308838f, 0.318604f, 0.327637f, 0.337646f, 0.347900f, 0.356934f, 0.367432f, 0.376953f,
+ 0.387451f, 0.397217f, 0.407227f, 0.417480f, 0.427979f, 0.439209f, 0.449463f, 0.459717f,
+ 0.470947f, 0.482666f, 0.701172f, 0.698242f, 0.688477f, 0.680176f, 0.671875f, 0.665039f,
+ 0.002831f, 0.008789f, 0.014702f, 0.020523f, 0.026642f, 0.032684f, 0.038757f, 0.044708f,
+ 0.051666f, 0.057312f, 0.063660f, 0.070190f, 0.076904f, 0.083435f, 0.090454f, 0.097046f,
+ 0.103821f, 0.110535f, 0.117981f, 0.124817f, 0.131714f, 0.138916f, 0.146606f, 0.153687f,
+ 0.161011f, 0.168823f, 0.176270f, 0.184570f, 0.192139f, 0.200317f, 0.208008f, 0.216309f,
+ 0.224609f, 0.233032f, 0.241821f, 0.250244f, 0.258789f, 0.268066f, 0.276611f, 0.285400f,
+ 0.294678f, 0.303223f, 0.312500f, 0.322021f, 0.331787f, 0.340088f, 0.350830f, 0.360596f,
+ 0.369385f, 0.380371f, 0.389893f, 0.399658f, 0.410645f, 0.420654f, 0.430908f, 0.442383f,
+ 0.452148f, 0.464111f, 0.690430f, 0.688965f, 0.681152f, 0.672852f, 0.665039f, 0.658691f,
+ 0.002712f, 0.008553f, 0.013878f, 0.019638f, 0.025360f, 0.030716f, 0.037231f, 0.042633f,
+ 0.048615f, 0.054810f, 0.060638f, 0.066650f, 0.072205f, 0.078796f, 0.085083f, 0.091492f,
+ 0.097961f, 0.104065f, 0.110718f, 0.117859f, 0.124207f, 0.130981f, 0.138550f, 0.145142f,
+ 0.152588f, 0.160156f, 0.166992f, 0.174561f, 0.181885f, 0.189453f, 0.197754f, 0.205444f,
+ 0.213013f, 0.220825f, 0.229004f, 0.237061f, 0.246094f, 0.254639f, 0.262939f, 0.271484f,
+ 0.280273f, 0.288818f, 0.298584f, 0.307129f, 0.316162f, 0.325195f, 0.334229f, 0.344482f,
+ 0.353516f, 0.363525f, 0.372803f, 0.382812f, 0.392822f, 0.402344f, 0.412842f, 0.423096f,
+ 0.433350f, 0.444092f, 0.679199f, 0.679688f, 0.672852f, 0.665039f, 0.658203f, 0.651855f,
+ 0.002674f, 0.007828f, 0.013290f, 0.018723f, 0.023743f, 0.029160f, 0.034790f, 0.040100f,
+ 0.045929f, 0.051544f, 0.057068f, 0.063110f, 0.068359f, 0.074280f, 0.080078f, 0.086243f,
+ 0.092346f, 0.098206f, 0.104919f, 0.110779f, 0.117493f, 0.123291f, 0.130005f, 0.136963f,
+ 0.143677f, 0.150635f, 0.157471f, 0.164307f, 0.171631f, 0.179199f, 0.186279f, 0.193604f,
+ 0.201904f, 0.209229f, 0.217163f, 0.224976f, 0.233154f, 0.240967f, 0.249634f, 0.258301f,
+ 0.266113f, 0.274414f, 0.283691f, 0.291748f, 0.301025f, 0.310059f, 0.319336f, 0.327148f,
+ 0.337402f, 0.347168f, 0.355957f, 0.364746f, 0.375488f, 0.385498f, 0.394043f, 0.405273f,
+ 0.415283f, 0.426025f, 0.667969f, 0.670410f, 0.664551f, 0.657227f, 0.651367f, 0.645508f,
+ 0.002731f, 0.007622f, 0.012627f, 0.017868f, 0.022781f, 0.028107f, 0.032959f, 0.037811f,
+ 0.043121f, 0.048615f, 0.053925f, 0.059235f, 0.064514f, 0.070007f, 0.075562f, 0.080688f,
+ 0.086914f, 0.092102f, 0.098083f, 0.104309f, 0.110107f, 0.115906f, 0.122314f, 0.128540f,
+ 0.135010f, 0.141479f, 0.147949f, 0.154663f, 0.161865f, 0.168579f, 0.175415f, 0.182739f,
+ 0.191040f, 0.197510f, 0.205200f, 0.212891f, 0.219971f, 0.228638f, 0.236328f, 0.244263f,
+ 0.252686f, 0.260498f, 0.268799f, 0.278076f, 0.286133f, 0.294434f, 0.303223f, 0.312500f,
+ 0.320801f, 0.329834f, 0.339844f, 0.347656f, 0.357910f, 0.367676f, 0.376709f, 0.386963f,
+ 0.396729f, 0.406982f, 0.656738f, 0.662598f, 0.656738f, 0.649902f, 0.644531f, 0.638672f,
+ 0.002411f, 0.007168f, 0.012238f, 0.016739f, 0.021957f, 0.026184f, 0.031311f, 0.035583f,
+ 0.041016f, 0.045685f, 0.050568f, 0.055573f, 0.060791f, 0.065735f, 0.070557f, 0.076111f,
+ 0.081238f, 0.086792f, 0.092163f, 0.097534f, 0.103271f, 0.108887f, 0.114563f, 0.120605f,
+ 0.126587f, 0.132446f, 0.139038f, 0.145508f, 0.152100f, 0.158447f, 0.165527f, 0.171997f,
+ 0.178833f, 0.186035f, 0.193481f, 0.200928f, 0.207886f, 0.215820f, 0.222900f, 0.230713f,
+ 0.238770f, 0.246948f, 0.255127f, 0.262695f, 0.271484f, 0.280029f, 0.287842f, 0.296631f,
+ 0.305420f, 0.313965f, 0.322754f, 0.331787f, 0.340576f, 0.350342f, 0.359375f, 0.369385f,
+ 0.379150f, 0.388184f, 0.645508f, 0.652832f, 0.648438f, 0.643066f, 0.637695f, 0.632324f,
+ 0.002480f, 0.006691f, 0.011452f, 0.015900f, 0.020828f, 0.024734f, 0.029327f, 0.033752f,
+ 0.038513f, 0.042999f, 0.047638f, 0.052429f, 0.056671f, 0.061859f, 0.066040f, 0.071289f,
+ 0.075684f, 0.080688f, 0.086243f, 0.091248f, 0.096436f, 0.101562f, 0.107300f, 0.112366f,
+ 0.118347f, 0.124146f, 0.130249f, 0.135864f, 0.141968f, 0.148438f, 0.155029f, 0.161377f,
+ 0.167969f, 0.174683f, 0.181641f, 0.188599f, 0.195679f, 0.203247f, 0.210449f, 0.217529f,
+ 0.225342f, 0.233398f, 0.241577f, 0.249023f, 0.256592f, 0.264893f, 0.273193f, 0.281494f,
+ 0.289795f, 0.297607f, 0.306885f, 0.315430f, 0.323730f, 0.333496f, 0.342529f, 0.351318f,
+ 0.360840f, 0.370605f, 0.634766f, 0.643555f, 0.640625f, 0.635742f, 0.630859f, 0.625488f,
+ 0.002230f, 0.006477f, 0.010582f, 0.014870f, 0.019073f, 0.023270f, 0.027893f, 0.031860f,
+ 0.036072f, 0.040253f, 0.044373f, 0.048706f, 0.052856f, 0.057312f, 0.061859f, 0.066406f,
+ 0.070984f, 0.075317f, 0.080139f, 0.084839f, 0.089661f, 0.094910f, 0.099792f, 0.104858f,
+ 0.110718f, 0.115356f, 0.121399f, 0.126831f, 0.132690f, 0.138672f, 0.145142f, 0.151001f,
+ 0.157471f, 0.164185f, 0.170532f, 0.177002f, 0.184082f, 0.191040f, 0.197876f, 0.205200f,
+ 0.212402f, 0.219604f, 0.227295f, 0.234985f, 0.242188f, 0.250244f, 0.257812f, 0.266113f,
+ 0.274170f, 0.282471f, 0.290771f, 0.299072f, 0.307373f, 0.316162f, 0.326416f, 0.333984f,
+ 0.343750f, 0.353271f, 0.622070f, 0.634277f, 0.631836f, 0.627930f, 0.623535f, 0.619141f,
+ 0.002220f, 0.006039f, 0.010353f, 0.014328f, 0.017838f, 0.022141f, 0.025742f, 0.029510f,
+ 0.033600f, 0.037781f, 0.041443f, 0.045502f, 0.049469f, 0.053436f, 0.057190f, 0.061462f,
+ 0.065735f, 0.069946f, 0.074524f, 0.078674f, 0.083069f, 0.087830f, 0.092468f, 0.097412f,
+ 0.102783f, 0.107910f, 0.112793f, 0.118164f, 0.123901f, 0.129395f, 0.135132f, 0.140991f,
+ 0.147339f, 0.152954f, 0.159302f, 0.165527f, 0.172363f, 0.178589f, 0.185425f, 0.191895f,
+ 0.199219f, 0.206665f, 0.213989f, 0.221069f, 0.228516f, 0.236206f, 0.243042f, 0.251709f,
+ 0.258789f, 0.266846f, 0.275146f, 0.283203f, 0.291260f, 0.300537f, 0.308350f, 0.317627f,
+ 0.326904f, 0.335938f, 0.611816f, 0.625000f, 0.624023f, 0.620117f, 0.616211f, 0.612793f,
+ 0.001965f, 0.005882f, 0.009613f, 0.013184f, 0.016785f, 0.020370f, 0.024384f, 0.027664f,
+ 0.031311f, 0.035126f, 0.038727f, 0.042572f, 0.046112f, 0.049347f, 0.053253f, 0.056915f,
+ 0.060883f, 0.064697f, 0.068909f, 0.072693f, 0.076843f, 0.081055f, 0.085754f, 0.090088f,
+ 0.094849f, 0.099609f, 0.104614f, 0.109741f, 0.114746f, 0.119995f, 0.125488f, 0.130981f,
+ 0.136719f, 0.142700f, 0.148315f, 0.154541f, 0.160522f, 0.166870f, 0.173828f, 0.179932f,
+ 0.186768f, 0.193604f, 0.200439f, 0.207764f, 0.214844f, 0.221802f, 0.228882f, 0.236328f,
+ 0.244385f, 0.252197f, 0.259277f, 0.268066f, 0.275635f, 0.283447f, 0.292236f, 0.301270f,
+ 0.309570f, 0.318848f, 0.600098f, 0.616211f, 0.615234f, 0.612793f, 0.609375f, 0.605469f,
+ 0.001966f, 0.005653f, 0.009109f, 0.012428f, 0.015945f, 0.018967f, 0.022537f, 0.025894f,
+ 0.029175f, 0.032440f, 0.035797f, 0.038818f, 0.042389f, 0.046051f, 0.049072f, 0.052521f,
+ 0.056335f, 0.059906f, 0.063293f, 0.067017f, 0.070923f, 0.075134f, 0.078979f, 0.083496f,
+ 0.087646f, 0.091980f, 0.096619f, 0.101196f, 0.105957f, 0.111145f, 0.116028f, 0.121277f,
+ 0.126831f, 0.132080f, 0.137817f, 0.143311f, 0.149780f, 0.155029f, 0.161621f, 0.167847f,
+ 0.173950f, 0.180786f, 0.187622f, 0.194214f, 0.201050f, 0.207764f, 0.215210f, 0.222046f,
+ 0.229370f, 0.236816f, 0.244751f, 0.251953f, 0.260010f, 0.268311f, 0.276123f, 0.284180f,
+ 0.293213f, 0.301514f, 0.588379f, 0.606934f, 0.607422f, 0.604980f, 0.602051f, 0.599609f,
+ 0.001963f, 0.005333f, 0.008377f, 0.011589f, 0.014450f, 0.017593f, 0.021133f, 0.023972f,
+ 0.027145f, 0.030075f, 0.033295f, 0.035858f, 0.038818f, 0.041992f, 0.045288f, 0.048279f,
+ 0.051849f, 0.054840f, 0.058289f, 0.061737f, 0.065186f, 0.068848f, 0.072632f, 0.076721f,
+ 0.080505f, 0.084717f, 0.088806f, 0.093079f, 0.097717f, 0.102356f, 0.106934f, 0.111755f,
+ 0.116882f, 0.121887f, 0.127319f, 0.132935f, 0.138306f, 0.144287f, 0.149902f, 0.156250f,
+ 0.162109f, 0.168579f, 0.174316f, 0.180908f, 0.187500f, 0.194458f, 0.201538f, 0.208252f,
+ 0.215210f, 0.222656f, 0.229980f, 0.237061f, 0.244629f, 0.252441f, 0.260254f, 0.267334f,
+ 0.276123f, 0.284180f, 0.576660f, 0.597656f, 0.599609f, 0.598145f, 0.595215f, 0.591797f,
+ 0.001631f, 0.004906f, 0.007805f, 0.010826f, 0.013802f, 0.016983f, 0.019485f, 0.022079f,
+ 0.024750f, 0.027939f, 0.030136f, 0.033112f, 0.035797f, 0.038727f, 0.041443f, 0.044281f,
+ 0.047058f, 0.050018f, 0.053253f, 0.056396f, 0.059662f, 0.063049f, 0.066406f, 0.069946f,
+ 0.073730f, 0.077454f, 0.081360f, 0.085388f, 0.089417f, 0.093750f, 0.098267f, 0.102844f,
+ 0.107727f, 0.112244f, 0.117615f, 0.122253f, 0.127441f, 0.133057f, 0.138550f, 0.144287f,
+ 0.150024f, 0.156250f, 0.161987f, 0.167969f, 0.174805f, 0.181274f, 0.187744f, 0.194580f,
+ 0.201294f, 0.208374f, 0.215210f, 0.222412f, 0.229736f, 0.237183f, 0.244629f, 0.252197f,
+ 0.260010f, 0.269287f, 0.566406f, 0.588867f, 0.590820f, 0.590332f, 0.587891f, 0.585938f,
+ 0.001858f, 0.004318f, 0.007465f, 0.010246f, 0.012550f, 0.015793f, 0.018143f, 0.020782f,
+ 0.022980f, 0.025116f, 0.027924f, 0.030106f, 0.032623f, 0.035126f, 0.037720f, 0.040283f,
+ 0.042847f, 0.045380f, 0.048492f, 0.051300f, 0.054321f, 0.057373f, 0.060516f, 0.063599f,
+ 0.067139f, 0.070496f, 0.074219f, 0.078003f, 0.081848f, 0.085754f, 0.089783f, 0.093994f,
+ 0.098267f, 0.102783f, 0.107239f, 0.112366f, 0.117371f, 0.122498f, 0.127686f, 0.132935f,
+ 0.138428f, 0.144043f, 0.150024f, 0.155884f, 0.161865f, 0.168091f, 0.174316f, 0.180664f,
+ 0.187622f, 0.194214f, 0.200928f, 0.207520f, 0.214966f, 0.221680f, 0.229370f, 0.236816f,
+ 0.244751f, 0.252441f, 0.553223f, 0.579102f, 0.583496f, 0.582031f, 0.581055f, 0.579590f,
+ 0.001425f, 0.004284f, 0.007019f, 0.009521f, 0.011894f, 0.014191f, 0.016632f, 0.018723f,
+ 0.021210f, 0.023209f, 0.025482f, 0.027344f, 0.029617f, 0.032043f, 0.034210f, 0.036407f,
+ 0.039001f, 0.041077f, 0.043976f, 0.046448f, 0.049133f, 0.051819f, 0.054932f, 0.057770f,
+ 0.060730f, 0.063965f, 0.067322f, 0.070862f, 0.074280f, 0.077698f, 0.082031f, 0.085571f,
+ 0.089844f, 0.093994f, 0.098022f, 0.102722f, 0.107178f, 0.111877f, 0.116821f, 0.121887f,
+ 0.127075f, 0.132446f, 0.138062f, 0.143799f, 0.149414f, 0.155518f, 0.161377f, 0.167480f,
+ 0.173950f, 0.180176f, 0.186890f, 0.193481f, 0.200562f, 0.207397f, 0.214355f, 0.221313f,
+ 0.229492f, 0.237427f, 0.541504f, 0.570801f, 0.575195f, 0.575195f, 0.573730f, 0.572266f,
+ 0.001613f, 0.004181f, 0.006252f, 0.008774f, 0.011108f, 0.013054f, 0.015152f, 0.016937f,
+ 0.019150f, 0.021011f, 0.023163f, 0.024826f, 0.026993f, 0.028793f, 0.030823f, 0.033081f,
+ 0.035156f, 0.037201f, 0.039612f, 0.041748f, 0.044464f, 0.046814f, 0.049438f, 0.052155f,
+ 0.054840f, 0.057831f, 0.060699f, 0.063599f, 0.067078f, 0.070374f, 0.073853f, 0.077087f,
+ 0.081177f, 0.085083f, 0.089111f, 0.093262f, 0.097473f, 0.101929f, 0.106689f, 0.111023f,
+ 0.116455f, 0.121277f, 0.126343f, 0.132080f, 0.137573f, 0.142700f, 0.148682f, 0.154907f,
+ 0.161133f, 0.167236f, 0.173340f, 0.179688f, 0.186768f, 0.193115f, 0.200684f, 0.207275f,
+ 0.214233f, 0.221924f, 0.530273f, 0.561523f, 0.565430f, 0.567383f, 0.564941f, 0.564941f,
+ 0.001237f, 0.003775f, 0.006348f, 0.008141f, 0.010117f, 0.012184f, 0.013763f, 0.015656f,
+ 0.017319f, 0.018967f, 0.020645f, 0.022507f, 0.023926f, 0.025757f, 0.027573f, 0.029449f,
+ 0.031677f, 0.033325f, 0.035645f, 0.037659f, 0.039734f, 0.041809f, 0.044189f, 0.046692f,
+ 0.049133f, 0.051697f, 0.054504f, 0.057251f, 0.060059f, 0.063110f, 0.066467f, 0.069763f,
+ 0.072937f, 0.076477f, 0.080505f, 0.084290f, 0.088013f, 0.092407f, 0.096436f, 0.101013f,
+ 0.105713f, 0.110352f, 0.115356f, 0.120605f, 0.125488f, 0.130981f, 0.136353f, 0.142090f,
+ 0.148438f, 0.153931f, 0.159912f, 0.166260f, 0.172485f, 0.179321f, 0.185791f, 0.193115f,
+ 0.199463f, 0.206665f, 0.520020f, 0.552246f, 0.558105f, 0.559570f, 0.559082f, 0.557617f,
+ 0.001151f, 0.003399f, 0.005611f, 0.007439f, 0.009354f, 0.010925f, 0.012489f, 0.014061f,
+ 0.015610f, 0.017258f, 0.018845f, 0.020248f, 0.021484f, 0.023193f, 0.024796f, 0.026459f,
+ 0.028183f, 0.029785f, 0.031738f, 0.033386f, 0.035309f, 0.037384f, 0.039368f, 0.041626f,
+ 0.043701f, 0.046204f, 0.048553f, 0.051178f, 0.053955f, 0.056488f, 0.059418f, 0.062256f,
+ 0.065308f, 0.068542f, 0.071899f, 0.075623f, 0.079224f, 0.082947f, 0.087097f, 0.091064f,
+ 0.095520f, 0.099854f, 0.104736f, 0.109314f, 0.114136f, 0.119324f, 0.124756f, 0.130127f,
+ 0.135498f, 0.141113f, 0.146973f, 0.153198f, 0.159180f, 0.165527f, 0.172241f, 0.178711f,
+ 0.185425f, 0.192749f, 0.507324f, 0.543945f, 0.549316f, 0.552246f, 0.551270f, 0.551270f,
+ 0.001070f, 0.002996f, 0.004986f, 0.006851f, 0.008514f, 0.009850f, 0.011330f, 0.012596f,
+ 0.014015f, 0.015259f, 0.016586f, 0.017731f, 0.019287f, 0.020676f, 0.022079f, 0.023468f,
+ 0.024765f, 0.026489f, 0.028030f, 0.029465f, 0.031311f, 0.032898f, 0.034851f, 0.036743f,
+ 0.038940f, 0.040833f, 0.043091f, 0.045074f, 0.047729f, 0.050079f, 0.052673f, 0.055389f,
+ 0.058136f, 0.061188f, 0.064087f, 0.067261f, 0.070618f, 0.074158f, 0.077942f, 0.081726f,
+ 0.085815f, 0.089783f, 0.094055f, 0.098572f, 0.103088f, 0.107971f, 0.113037f, 0.118164f,
+ 0.123413f, 0.128784f, 0.134521f, 0.140137f, 0.146118f, 0.152100f, 0.158325f, 0.164307f,
+ 0.171387f, 0.177368f, 0.496094f, 0.534668f, 0.541992f, 0.543945f, 0.544434f, 0.544434f,
+ 0.001086f, 0.003069f, 0.004463f, 0.006256f, 0.007393f, 0.009026f, 0.010178f, 0.011276f,
+ 0.012260f, 0.013542f, 0.014648f, 0.015808f, 0.016861f, 0.017899f, 0.019333f, 0.020599f,
+ 0.021942f, 0.023117f, 0.024384f, 0.025833f, 0.027344f, 0.028992f, 0.030579f, 0.032318f,
+ 0.034149f, 0.035828f, 0.037842f, 0.039764f, 0.041901f, 0.044037f, 0.046539f, 0.048645f,
+ 0.051147f, 0.053894f, 0.056641f, 0.059631f, 0.062500f, 0.065735f, 0.069031f, 0.072754f,
+ 0.076294f, 0.080139f, 0.083984f, 0.088379f, 0.092712f, 0.097229f, 0.101929f, 0.106873f,
+ 0.111694f, 0.117004f, 0.122314f, 0.127930f, 0.133789f, 0.139282f, 0.145142f, 0.151367f,
+ 0.157349f, 0.163818f, 0.484619f, 0.525391f, 0.534180f, 0.536621f, 0.536133f, 0.536621f,
+ 0.001125f, 0.002892f, 0.003883f, 0.005867f, 0.006603f, 0.007935f, 0.009026f, 0.009911f,
+ 0.010956f, 0.012077f, 0.012909f, 0.013901f, 0.014977f, 0.015671f, 0.016983f, 0.018021f,
+ 0.019058f, 0.020279f, 0.021225f, 0.022598f, 0.023941f, 0.025299f, 0.026535f, 0.028107f,
+ 0.029755f, 0.031113f, 0.033020f, 0.034668f, 0.036682f, 0.038483f, 0.040527f, 0.042511f,
+ 0.044708f, 0.046936f, 0.049744f, 0.052216f, 0.054840f, 0.057800f, 0.060791f, 0.064087f,
+ 0.067505f, 0.071045f, 0.074463f, 0.078491f, 0.082397f, 0.086609f, 0.091248f, 0.095581f,
+ 0.100342f, 0.105530f, 0.110474f, 0.116272f, 0.120972f, 0.126953f, 0.132812f, 0.138672f,
+ 0.144287f, 0.150513f, 0.472412f, 0.516113f, 0.524902f, 0.528809f, 0.529785f, 0.529785f,
+ 0.000859f, 0.002470f, 0.003815f, 0.005226f, 0.005913f, 0.007206f, 0.007942f, 0.008652f,
+ 0.009583f, 0.010406f, 0.011223f, 0.011971f, 0.012856f, 0.013664f, 0.014664f, 0.015549f,
+ 0.016464f, 0.017487f, 0.018478f, 0.019592f, 0.020767f, 0.021774f, 0.023117f, 0.024338f,
+ 0.025604f, 0.027008f, 0.028519f, 0.029953f, 0.031525f, 0.033173f, 0.034943f, 0.036865f,
+ 0.038696f, 0.040863f, 0.042969f, 0.045471f, 0.048004f, 0.050293f, 0.052979f, 0.055847f,
+ 0.058960f, 0.062042f, 0.065491f, 0.069153f, 0.072937f, 0.076660f, 0.080750f, 0.085144f,
+ 0.089539f, 0.094177f, 0.099304f, 0.104187f, 0.109741f, 0.114807f, 0.120483f, 0.125977f,
+ 0.131836f, 0.138306f, 0.460449f, 0.507812f, 0.516602f, 0.520020f, 0.522461f, 0.522949f,
+ 0.000906f, 0.002359f, 0.003643f, 0.004356f, 0.005310f, 0.005989f, 0.007030f, 0.007507f,
+ 0.008255f, 0.009010f, 0.009834f, 0.010483f, 0.011230f, 0.011887f, 0.012573f, 0.013367f,
+ 0.014252f, 0.014954f, 0.015900f, 0.016785f, 0.017776f, 0.018631f, 0.019775f, 0.020874f,
+ 0.022110f, 0.023117f, 0.024368f, 0.025589f, 0.026932f, 0.028549f, 0.029938f, 0.031525f,
+ 0.033325f, 0.035187f, 0.037109f, 0.038971f, 0.041138f, 0.043396f, 0.045715f, 0.048370f,
+ 0.051025f, 0.053772f, 0.057129f, 0.060089f, 0.063416f, 0.067261f, 0.070679f, 0.075012f,
+ 0.079285f, 0.083618f, 0.088379f, 0.093018f, 0.098083f, 0.102478f, 0.108093f, 0.114380f,
+ 0.119507f, 0.125488f, 0.448975f, 0.498291f, 0.508789f, 0.513672f, 0.514648f, 0.516113f,
+ 0.000728f, 0.001932f, 0.003067f, 0.003990f, 0.004784f, 0.005295f, 0.005974f, 0.006584f,
+ 0.007099f, 0.007652f, 0.008255f, 0.008904f, 0.009491f, 0.010109f, 0.010658f, 0.011497f,
+ 0.012131f, 0.012718f, 0.013535f, 0.014336f, 0.015083f, 0.016083f, 0.016785f, 0.017761f,
+ 0.018738f, 0.019669f, 0.020691f, 0.021805f, 0.023010f, 0.024170f, 0.025467f, 0.026794f,
+ 0.028336f, 0.029922f, 0.031555f, 0.033203f, 0.035034f, 0.036987f, 0.039062f, 0.041290f,
+ 0.043671f, 0.046143f, 0.048920f, 0.051880f, 0.054901f, 0.058228f, 0.061615f, 0.065369f,
+ 0.069214f, 0.073425f, 0.077637f, 0.082214f, 0.087097f, 0.091797f, 0.096497f, 0.102356f,
+ 0.107483f, 0.113464f, 0.437256f, 0.489746f, 0.500977f, 0.504883f, 0.507812f, 0.509277f,
+ 0.000724f, 0.001842f, 0.002728f, 0.003332f, 0.004101f, 0.004707f, 0.005020f, 0.005497f,
+ 0.006245f, 0.006603f, 0.007027f, 0.007515f, 0.008156f, 0.008537f, 0.009125f, 0.009659f,
+ 0.010101f, 0.010864f, 0.011482f, 0.012070f, 0.012756f, 0.013496f, 0.014236f, 0.014931f,
+ 0.015808f, 0.016632f, 0.017487f, 0.018433f, 0.019379f, 0.020416f, 0.021530f, 0.022583f,
+ 0.023804f, 0.024979f, 0.026443f, 0.027939f, 0.029526f, 0.031235f, 0.033020f, 0.035004f,
+ 0.037018f, 0.039185f, 0.041595f, 0.044159f, 0.046783f, 0.049866f, 0.052856f, 0.056274f,
+ 0.059906f, 0.063721f, 0.067749f, 0.072327f, 0.076172f, 0.081299f, 0.085938f, 0.091309f,
+ 0.096558f, 0.101807f, 0.426270f, 0.480469f, 0.492676f, 0.498047f, 0.500488f, 0.501953f,
+ 0.000673f, 0.001715f, 0.002426f, 0.002953f, 0.003588f, 0.003944f, 0.004200f, 0.004776f,
+ 0.005131f, 0.005527f, 0.005886f, 0.006371f, 0.006790f, 0.007076f, 0.007538f, 0.008133f,
+ 0.008644f, 0.009140f, 0.009483f, 0.010071f, 0.010689f, 0.011230f, 0.011879f, 0.012474f,
+ 0.013222f, 0.013916f, 0.014587f, 0.015411f, 0.016190f, 0.016983f, 0.017883f, 0.018845f,
+ 0.019867f, 0.020935f, 0.022141f, 0.023270f, 0.024567f, 0.026001f, 0.027481f, 0.029114f,
+ 0.030777f, 0.032684f, 0.034698f, 0.036865f, 0.039337f, 0.041748f, 0.044647f, 0.047882f,
+ 0.050964f, 0.054260f, 0.058258f, 0.062195f, 0.066528f, 0.070679f, 0.075623f, 0.080505f,
+ 0.085510f, 0.090515f, 0.414307f, 0.472168f, 0.484131f, 0.490234f, 0.492920f, 0.495850f,
+ 0.000484f, 0.001445f, 0.002169f, 0.002569f, 0.002836f, 0.003317f, 0.003569f, 0.003952f,
+ 0.004215f, 0.004623f, 0.004959f, 0.005306f, 0.005592f, 0.005951f, 0.006306f, 0.006737f,
+ 0.007004f, 0.007492f, 0.007942f, 0.008331f, 0.008865f, 0.009270f, 0.009781f, 0.010338f,
+ 0.010887f, 0.011429f, 0.012047f, 0.012726f, 0.013336f, 0.014030f, 0.014771f, 0.015572f,
+ 0.016418f, 0.017258f, 0.018234f, 0.019196f, 0.020279f, 0.021423f, 0.022675f, 0.023987f,
+ 0.025375f, 0.027039f, 0.028702f, 0.030563f, 0.032623f, 0.034698f, 0.037262f, 0.040039f,
+ 0.042664f, 0.046051f, 0.049194f, 0.052948f, 0.057129f, 0.061371f, 0.065613f, 0.070007f,
+ 0.075317f, 0.080200f, 0.402588f, 0.462402f, 0.476807f, 0.482666f, 0.485107f, 0.487061f,
+ 0.000459f, 0.001265f, 0.001572f, 0.002138f, 0.002365f, 0.002775f, 0.002920f, 0.003189f,
+ 0.003454f, 0.003723f, 0.003986f, 0.004250f, 0.004536f, 0.004906f, 0.005150f, 0.005463f,
+ 0.005787f, 0.006172f, 0.006481f, 0.006794f, 0.007156f, 0.007542f, 0.007980f, 0.008430f,
+ 0.008827f, 0.009361f, 0.009796f, 0.010300f, 0.010910f, 0.011497f, 0.012161f, 0.012672f,
+ 0.013336f, 0.014183f, 0.014893f, 0.015640f, 0.016541f, 0.017517f, 0.018448f, 0.019485f,
+ 0.020676f, 0.021912f, 0.023392f, 0.024979f, 0.026627f, 0.028351f, 0.030457f, 0.032806f,
+ 0.035034f, 0.037933f, 0.041229f, 0.044373f, 0.047821f, 0.052002f, 0.056244f, 0.060547f,
+ 0.065247f, 0.069885f, 0.390869f, 0.453857f, 0.468018f, 0.475098f, 0.478027f, 0.480469f,
+ 0.000332f, 0.001075f, 0.001464f, 0.001721f, 0.001911f, 0.002235f, 0.002375f, 0.002558f,
+ 0.002834f, 0.002998f, 0.003185f, 0.003441f, 0.003647f, 0.003952f, 0.004139f, 0.004421f,
+ 0.004631f, 0.004879f, 0.005180f, 0.005447f, 0.005795f, 0.006115f, 0.006416f, 0.006718f,
+ 0.007099f, 0.007462f, 0.007881f, 0.008331f, 0.008797f, 0.009140f, 0.009735f, 0.010223f,
+ 0.010803f, 0.011337f, 0.011986f, 0.012611f, 0.013283f, 0.014076f, 0.014847f, 0.015732f,
+ 0.016693f, 0.017700f, 0.018784f, 0.019897f, 0.021317f, 0.022873f, 0.024429f, 0.026306f,
+ 0.028473f, 0.030960f, 0.033600f, 0.036407f, 0.039856f, 0.043549f, 0.047119f, 0.051392f,
+ 0.055969f, 0.060394f, 0.379639f, 0.444580f, 0.458984f, 0.467529f, 0.470947f, 0.472900f,
+ 0.000408f, 0.000770f, 0.001271f, 0.001390f, 0.001601f, 0.001762f, 0.001848f, 0.002052f,
+ 0.002247f, 0.002401f, 0.002491f, 0.002684f, 0.002878f, 0.003086f, 0.003304f, 0.003452f,
+ 0.003626f, 0.003805f, 0.004074f, 0.004257f, 0.004513f, 0.004807f, 0.005039f, 0.005299f,
+ 0.005638f, 0.005905f, 0.006191f, 0.006516f, 0.006927f, 0.007206f, 0.007645f, 0.008034f,
+ 0.008415f, 0.008911f, 0.009384f, 0.009941f, 0.010483f, 0.011116f, 0.011711f, 0.012428f,
+ 0.013191f, 0.013969f, 0.014862f, 0.015854f, 0.016785f, 0.017975f, 0.019348f, 0.020721f,
+ 0.022461f, 0.024445f, 0.026733f, 0.029175f, 0.032227f, 0.035248f, 0.038788f, 0.042755f,
+ 0.046967f, 0.051636f, 0.367920f, 0.435059f, 0.452148f, 0.459229f, 0.463623f, 0.466797f,
+ 0.000382f, 0.000669f, 0.001037f, 0.001185f, 0.001293f, 0.001379f, 0.001470f, 0.001565f,
+ 0.001729f, 0.001864f, 0.001928f, 0.002138f, 0.002237f, 0.002398f, 0.002510f, 0.002672f,
+ 0.002802f, 0.002966f, 0.003134f, 0.003319f, 0.003517f, 0.003723f, 0.003870f, 0.004089f,
+ 0.004311f, 0.004532f, 0.004772f, 0.005013f, 0.005314f, 0.005573f, 0.005924f, 0.006203f,
+ 0.006523f, 0.006897f, 0.007240f, 0.007660f, 0.008041f, 0.008530f, 0.009048f, 0.009621f,
+ 0.010201f, 0.010841f, 0.011467f, 0.012192f, 0.013138f, 0.013969f, 0.014931f, 0.016113f,
+ 0.017380f, 0.018936f, 0.020630f, 0.022751f, 0.025208f, 0.027924f, 0.031311f, 0.034851f,
+ 0.038879f, 0.043274f, 0.356689f, 0.426270f, 0.443848f, 0.451660f, 0.456055f, 0.459473f,
+ 0.000482f, 0.000542f, 0.000723f, 0.000822f, 0.000881f, 0.001025f, 0.001100f, 0.001209f,
+ 0.001249f, 0.001355f, 0.001522f, 0.001599f, 0.001708f, 0.001836f, 0.001918f, 0.001970f,
+ 0.002129f, 0.002251f, 0.002357f, 0.002522f, 0.002636f, 0.002768f, 0.002911f, 0.003056f,
+ 0.003237f, 0.003393f, 0.003605f, 0.003771f, 0.003994f, 0.004234f, 0.004444f, 0.004635f,
+ 0.004932f, 0.005150f, 0.005486f, 0.005779f, 0.006081f, 0.006458f, 0.006775f, 0.007179f,
+ 0.007668f, 0.008110f, 0.008690f, 0.009209f, 0.009926f, 0.010551f, 0.011330f, 0.012184f,
+ 0.013184f, 0.014297f, 0.015610f, 0.017181f, 0.019165f, 0.021500f, 0.024384f, 0.027618f,
+ 0.031372f, 0.035614f, 0.345459f, 0.417236f, 0.435303f, 0.443604f, 0.448730f, 0.451904f,
+ 0.000240f, 0.000479f, 0.000533f, 0.000625f, 0.000716f, 0.000746f, 0.000857f, 0.000835f,
+ 0.000941f, 0.001024f, 0.001104f, 0.001155f, 0.001204f, 0.001282f, 0.001396f, 0.001453f,
+ 0.001554f, 0.001627f, 0.001737f, 0.001787f, 0.001894f, 0.002012f, 0.002119f, 0.002218f,
+ 0.002335f, 0.002453f, 0.002611f, 0.002714f, 0.002848f, 0.003050f, 0.003168f, 0.003395f,
+ 0.003529f, 0.003740f, 0.003963f, 0.004158f, 0.004429f, 0.004688f, 0.004982f, 0.005280f,
+ 0.005600f, 0.005959f, 0.006340f, 0.006775f, 0.007252f, 0.007748f, 0.008369f, 0.008980f,
+ 0.009705f, 0.010513f, 0.011513f, 0.012665f, 0.014069f, 0.015869f, 0.018158f, 0.020950f,
+ 0.024338f, 0.028366f, 0.335205f, 0.408203f, 0.427002f, 0.435547f, 0.441162f, 0.445312f,
+ 0.000138f, 0.000265f, 0.000381f, 0.000386f, 0.000465f, 0.000556f, 0.000558f, 0.000597f,
+ 0.000659f, 0.000748f, 0.000770f, 0.000786f, 0.000829f, 0.000904f, 0.000940f, 0.001021f,
+ 0.001043f, 0.001139f, 0.001201f, 0.001253f, 0.001327f, 0.001396f, 0.001481f, 0.001555f,
+ 0.001637f, 0.001712f, 0.001813f, 0.001899f, 0.002005f, 0.002140f, 0.002220f, 0.002348f,
+ 0.002462f, 0.002600f, 0.002733f, 0.002932f, 0.003075f, 0.003279f, 0.003452f, 0.003630f,
+ 0.003872f, 0.004166f, 0.004436f, 0.004742f, 0.005077f, 0.005459f, 0.005848f, 0.006310f,
+ 0.006874f, 0.007492f, 0.008171f, 0.009026f, 0.009995f, 0.011307f, 0.013008f, 0.015343f,
+ 0.018265f, 0.021881f, 0.323486f, 0.399170f, 0.418945f, 0.428467f, 0.434326f, 0.437988f,
+ 0.000165f, 0.000260f, 0.000287f, 0.000296f, 0.000331f, 0.000339f, 0.000360f, 0.000395f,
+ 0.000442f, 0.000482f, 0.000487f, 0.000551f, 0.000546f, 0.000611f, 0.000640f, 0.000667f,
+ 0.000711f, 0.000742f, 0.000775f, 0.000816f, 0.000876f, 0.000916f, 0.000974f, 0.001015f,
+ 0.001081f, 0.001123f, 0.001195f, 0.001267f, 0.001317f, 0.001388f, 0.001459f, 0.001558f,
+ 0.001630f, 0.001718f, 0.001804f, 0.001916f, 0.002033f, 0.002148f, 0.002295f, 0.002455f,
+ 0.002583f, 0.002754f, 0.002941f, 0.003134f, 0.003386f, 0.003639f, 0.003910f, 0.004215f,
+ 0.004597f, 0.005013f, 0.005520f, 0.006130f, 0.006821f, 0.007690f, 0.008789f, 0.010452f,
+ 0.012909f, 0.016174f, 0.312012f, 0.390381f, 0.410645f, 0.420654f, 0.426270f, 0.430664f,
+ 0.000057f, 0.000171f, 0.000164f, 0.000170f, 0.000211f, 0.000213f, 0.000229f, 0.000247f,
+ 0.000267f, 0.000279f, 0.000289f, 0.000317f, 0.000349f, 0.000364f, 0.000390f, 0.000407f,
+ 0.000427f, 0.000467f, 0.000476f, 0.000521f, 0.000537f, 0.000561f, 0.000578f, 0.000626f,
+ 0.000667f, 0.000714f, 0.000729f, 0.000753f, 0.000806f, 0.000855f, 0.000911f, 0.000945f,
+ 0.001004f, 0.001054f, 0.001112f, 0.001172f, 0.001251f, 0.001333f, 0.001406f, 0.001489f,
+ 0.001595f, 0.001694f, 0.001811f, 0.001952f, 0.002090f, 0.002243f, 0.002453f, 0.002638f,
+ 0.002888f, 0.003143f, 0.003489f, 0.003870f, 0.004353f, 0.004921f, 0.005672f, 0.006664f,
+ 0.008423f, 0.011230f, 0.301758f, 0.381104f, 0.402832f, 0.413330f, 0.418457f, 0.423828f,
+ 0.000096f, 0.000112f, 0.000097f, 0.000090f, 0.000113f, 0.000119f, 0.000144f, 0.000149f,
+ 0.000151f, 0.000158f, 0.000181f, 0.000184f, 0.000179f, 0.000201f, 0.000224f, 0.000216f,
+ 0.000237f, 0.000255f, 0.000263f, 0.000276f, 0.000297f, 0.000308f, 0.000332f, 0.000347f,
+ 0.000369f, 0.000395f, 0.000408f, 0.000422f, 0.000447f, 0.000471f, 0.000500f, 0.000531f,
+ 0.000554f, 0.000583f, 0.000617f, 0.000660f, 0.000690f, 0.000739f, 0.000795f, 0.000833f,
+ 0.000885f, 0.000948f, 0.001022f, 0.001085f, 0.001175f, 0.001262f, 0.001371f, 0.001487f,
+ 0.001633f, 0.001778f, 0.001986f, 0.002218f, 0.002502f, 0.002865f, 0.003330f, 0.003979f,
+ 0.004932f, 0.007000f, 0.291260f, 0.372070f, 0.394043f, 0.404541f, 0.412109f, 0.416260f,
+ 0.000000f, 0.000056f, 0.000049f, 0.000061f, 0.000064f, 0.000061f, 0.000062f, 0.000071f,
+ 0.000072f, 0.000088f, 0.000083f, 0.000086f, 0.000097f, 0.000094f, 0.000098f, 0.000105f,
+ 0.000116f, 0.000122f, 0.000126f, 0.000134f, 0.000137f, 0.000143f, 0.000150f, 0.000164f,
+ 0.000171f, 0.000183f, 0.000188f, 0.000204f, 0.000214f, 0.000224f, 0.000236f, 0.000255f,
+ 0.000258f, 0.000277f, 0.000293f, 0.000315f, 0.000328f, 0.000349f, 0.000376f, 0.000396f,
+ 0.000426f, 0.000454f, 0.000486f, 0.000521f, 0.000563f, 0.000605f, 0.000657f, 0.000714f,
+ 0.000791f, 0.000866f, 0.000977f, 0.001085f, 0.001243f, 0.001441f, 0.001703f, 0.002058f,
+ 0.002573f, 0.003740f, 0.280029f, 0.362793f, 0.385742f, 0.397217f, 0.404297f, 0.408936f,
+ 0.000058f, 0.000038f, 0.000031f, 0.000027f, 0.000025f, 0.000026f, 0.000025f, 0.000024f,
+ 0.000024f, 0.000027f, 0.000030f, 0.000038f, 0.000032f, 0.000035f, 0.000040f, 0.000041f,
+ 0.000044f, 0.000045f, 0.000045f, 0.000047f, 0.000052f, 0.000058f, 0.000061f, 0.000059f,
+ 0.000065f, 0.000067f, 0.000069f, 0.000073f, 0.000078f, 0.000083f, 0.000089f, 0.000091f,
+ 0.000099f, 0.000103f, 0.000106f, 0.000114f, 0.000124f, 0.000132f, 0.000141f, 0.000150f,
+ 0.000158f, 0.000164f, 0.000180f, 0.000193f, 0.000205f, 0.000225f, 0.000245f, 0.000267f,
+ 0.000297f, 0.000329f, 0.000365f, 0.000416f, 0.000479f, 0.000563f, 0.000676f, 0.000839f,
+ 0.001088f, 0.001589f, 0.270264f, 0.353760f, 0.377197f, 0.390137f, 0.396973f, 0.402100f,
+ 0.000030f, 0.000019f, 0.000016f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000011f,
+ 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000007f, 0.000009f,
+ 0.000009f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000012f, 0.000014f,
+ 0.000014f, 0.000014f, 0.000015f, 0.000018f, 0.000017f, 0.000017f, 0.000019f, 0.000020f,
+ 0.000022f, 0.000022f, 0.000023f, 0.000026f, 0.000028f, 0.000027f, 0.000030f, 0.000032f,
+ 0.000035f, 0.000038f, 0.000040f, 0.000042f, 0.000045f, 0.000049f, 0.000055f, 0.000060f,
+ 0.000065f, 0.000074f, 0.000078f, 0.000095f, 0.000109f, 0.000129f, 0.000160f, 0.000205f,
+ 0.000284f, 0.000452f, 0.259766f, 0.345703f, 0.369629f, 0.382812f, 0.390625f, 0.395264f,
+ 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
+ 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
+ 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000006f, 0.000009f,
+ 0.000012f, 0.000026f, 0.249878f, 0.336182f, 0.362061f, 0.374512f, 0.382080f, 0.387695f,
+ }};
+
+/* 4 different blue noise, one per channel */
+const float blue_noise[64 * 64][4] = {
+ {0.367188f, 0.855469f, 0.523438f, 0.375000f}, {0.242188f, 0.699219f, 0.164062f, 0.292969f},
+ {0.828125f, 0.257812f, 0.449219f, 0.679688f}, {0.128906f, 0.523438f, 0.058594f, 0.164062f},
+ {0.214844f, 0.648438f, 0.750000f, 0.492188f}, {0.535156f, 0.226562f, 0.492188f, 0.429688f},
+ {0.050781f, 0.425781f, 0.886719f, 0.019531f}, {0.199219f, 0.785156f, 0.378906f, 0.984375f},
+ {0.390625f, 0.039062f, 0.222656f, 0.777344f}, {0.574219f, 0.460938f, 0.687500f, 0.085938f},
+ {0.757812f, 0.117188f, 0.968750f, 0.343750f}, {0.109375f, 0.398438f, 0.500000f, 0.871094f},
+ {0.871094f, 0.796875f, 0.628906f, 0.132812f}, {0.289062f, 0.480469f, 0.851562f, 0.484375f},
+ {0.519531f, 0.035156f, 0.234375f, 0.832031f}, {0.390625f, 0.558594f, 0.738281f, 0.636719f},
+ {0.015625f, 0.648438f, 0.910156f, 0.507812f}, {0.199219f, 0.257812f, 0.640625f, 0.578125f},
+ {0.359375f, 0.976562f, 0.855469f, 0.726562f}, {0.523438f, 0.445312f, 0.335938f, 0.304688f},
+ {0.046875f, 0.296875f, 0.921875f, 0.687500f}, {0.476562f, 0.929688f, 0.777344f, 0.164062f},
+ {0.726562f, 0.515625f, 0.398438f, 0.781250f}, {0.652344f, 0.156250f, 0.191406f, 0.015625f},
+ {0.300781f, 0.695312f, 0.011719f, 0.417969f}, {0.433594f, 0.882812f, 0.738281f, 0.843750f},
+ {0.890625f, 0.308594f, 0.523438f, 0.496094f}, {0.589844f, 0.730469f, 0.050781f, 0.886719f},
+ {0.738281f, 0.539062f, 0.683594f, 0.640625f}, {0.421875f, 0.191406f, 0.265625f, 0.996094f},
+ {0.609375f, 0.339844f, 0.617188f, 0.066406f}, {0.371094f, 0.398438f, 0.378906f, 0.898438f},
+ {0.937500f, 0.578125f, 0.136719f, 0.136719f}, {0.453125f, 0.820312f, 0.664062f, 0.968750f},
+ {0.828125f, 0.070312f, 0.316406f, 0.328125f}, {0.558594f, 0.714844f, 0.593750f, 0.714844f},
+ {0.351562f, 0.781250f, 0.355469f, 0.804688f}, {0.203125f, 0.398438f, 0.214844f, 0.519531f},
+ {0.785156f, 0.207031f, 0.398438f, 0.453125f}, {0.617188f, 0.289062f, 0.281250f, 0.257812f},
+ {0.171875f, 0.609375f, 0.792969f, 0.027344f}, {0.539062f, 0.871094f, 0.007812f, 0.886719f},
+ {0.019531f, 0.246094f, 0.226562f, 0.363281f}, {0.988281f, 0.582031f, 0.777344f, 0.054688f},
+ {0.468750f, 0.933594f, 0.312500f, 0.246094f}, {0.218750f, 0.015625f, 0.851562f, 0.167969f},
+ {0.566406f, 0.699219f, 0.519531f, 0.902344f}, {0.125000f, 0.507812f, 0.136719f, 0.386719f},
+ {0.296875f, 0.812500f, 0.558594f, 0.203125f}, {0.402344f, 0.199219f, 0.058594f, 0.875000f},
+ {0.898438f, 0.386719f, 0.664062f, 0.660156f}, {0.027344f, 0.078125f, 0.296875f, 0.453125f},
+ {0.667969f, 0.828125f, 0.808594f, 0.171875f}, {0.257812f, 0.535156f, 0.464844f, 0.914062f},
+ {0.597656f, 0.363281f, 0.886719f, 0.718750f}, {0.332031f, 0.042969f, 0.683594f, 0.003906f},
+ {0.632812f, 0.480469f, 0.429688f, 0.425781f}, {0.226562f, 0.910156f, 0.566406f, 0.558594f},
+ {0.496094f, 0.062500f, 0.863281f, 0.226562f}, {0.105469f, 0.976562f, 0.707031f, 0.941406f},
+ {0.394531f, 0.203125f, 0.285156f, 0.277344f}, {0.003906f, 0.804688f, 0.781250f, 0.050781f},
+ {0.210938f, 0.289062f, 0.117188f, 0.601562f}, {0.972656f, 0.179688f, 0.589844f, 0.144531f},
+ {0.152344f, 0.359375f, 0.730469f, 0.449219f}, {0.765625f, 0.105469f, 0.292969f, 0.101562f},
+ {0.519531f, 0.812500f, 0.617188f, 0.976562f}, {0.988281f, 0.960938f, 0.902344f, 0.054688f},
+ {0.457031f, 0.738281f, 0.335938f, 0.875000f}, {0.871094f, 0.121094f, 0.195312f, 0.210938f},
+ {0.781250f, 0.296875f, 0.539062f, 0.585938f}, {0.636719f, 0.667969f, 0.621094f, 0.328125f},
+ {0.324219f, 0.929688f, 0.855469f, 0.148438f}, {0.984375f, 0.718750f, 0.421875f, 0.824219f},
+ {0.500000f, 0.308594f, 0.757812f, 0.699219f}, {0.664062f, 0.214844f, 0.269531f, 0.558594f},
+ {0.414062f, 0.984375f, 0.074219f, 0.757812f}, {0.589844f, 0.339844f, 0.925781f, 0.273438f},
+ {0.089844f, 0.847656f, 0.316406f, 0.398438f}, {0.695312f, 0.921875f, 0.460938f, 0.890625f},
+ {0.894531f, 0.093750f, 0.113281f, 0.347656f}, {0.562500f, 0.386719f, 0.289062f, 0.964844f},
+ {0.121094f, 0.820312f, 0.003906f, 0.214844f}, {0.765625f, 0.187500f, 0.710938f, 0.914062f},
+ {0.878906f, 0.773438f, 0.445312f, 0.078125f}, {0.218750f, 0.117188f, 0.613281f, 0.617188f},
+ {0.085938f, 0.652344f, 0.996094f, 0.339844f}, {0.863281f, 0.359375f, 0.496094f, 0.531250f},
+ {0.148438f, 0.437500f, 0.320312f, 0.695312f}, {0.503906f, 0.613281f, 0.792969f, 0.082031f},
+ {0.097656f, 0.109375f, 0.960938f, 0.238281f}, {0.246094f, 0.914062f, 0.414062f, 0.328125f},
+ {0.011719f, 0.648438f, 0.828125f, 0.738281f}, {0.980469f, 0.457031f, 0.343750f, 0.117188f},
+ {0.140625f, 0.937500f, 0.976562f, 0.601562f}, {0.234375f, 0.867188f, 0.574219f, 0.230469f},
+ {0.542969f, 0.519531f, 0.902344f, 0.402344f}, {0.027344f, 0.300781f, 0.253906f, 0.503906f},
+ {0.757812f, 0.964844f, 0.949219f, 0.058594f}, {0.152344f, 0.234375f, 0.039062f, 0.925781f},
+ {0.687500f, 0.628906f, 0.492188f, 0.386719f}, {0.929688f, 0.546875f, 0.667969f, 0.109375f},
+ {0.269531f, 0.136719f, 0.964844f, 0.617188f}, {0.320312f, 0.464844f, 0.542969f, 0.972656f},
+ {0.960938f, 0.960938f, 0.171875f, 0.093750f}, {0.355469f, 0.523438f, 0.429688f, 0.765625f},
+ {0.246094f, 0.328125f, 0.992188f, 0.496094f}, {0.648438f, 0.074219f, 0.097656f, 0.605469f},
+ {0.144531f, 0.648438f, 0.476562f, 0.808594f}, {0.855469f, 0.832031f, 0.195312f, 0.546875f},
+ {0.925781f, 0.414062f, 0.960938f, 0.675781f}, {0.000000f, 0.113281f, 0.746094f, 0.835938f},
+ {0.828125f, 0.324219f, 0.613281f, 0.500000f}, {0.699219f, 0.738281f, 0.332031f, 0.125000f},
+ {0.542969f, 0.906250f, 0.898438f, 0.250000f}, {0.105469f, 0.632812f, 0.511719f, 0.062500f},
+ {0.433594f, 0.273438f, 0.097656f, 0.816406f}, {0.511719f, 0.707031f, 0.593750f, 0.632812f},
+ {0.179688f, 0.980469f, 0.367188f, 0.335938f}, {0.882812f, 0.113281f, 0.031250f, 0.980469f},
+ {0.410156f, 0.656250f, 0.253906f, 0.675781f}, {0.039062f, 0.300781f, 0.785156f, 0.800781f},
+ {0.695312f, 0.382812f, 0.386719f, 0.156250f}, {0.847656f, 0.457031f, 0.000000f, 0.847656f},
+ {0.945312f, 0.542969f, 0.664062f, 0.683594f}, {0.730469f, 0.707031f, 0.238281f, 0.535156f},
+ {0.472656f, 0.921875f, 0.871094f, 0.910156f}, {0.867188f, 0.601562f, 0.031250f, 0.812500f},
+ {0.632812f, 0.769531f, 0.925781f, 0.625000f}, {0.433594f, 0.558594f, 0.078125f, 0.851562f},
+ {0.015625f, 0.187500f, 0.792969f, 0.515625f}, {0.343750f, 0.386719f, 0.562500f, 0.773438f},
+ {0.679688f, 0.035156f, 0.121094f, 0.347656f}, {0.300781f, 0.582031f, 0.703125f, 0.660156f},
+ {0.152344f, 0.878906f, 0.929688f, 0.902344f}, {0.433594f, 0.507812f, 0.093750f, 0.460938f},
+ {0.714844f, 0.171875f, 0.042969f, 0.531250f}, {0.828125f, 0.550781f, 0.312500f, 0.945312f},
+ {0.011719f, 0.894531f, 0.136719f, 0.417969f}, {0.257812f, 0.046875f, 0.562500f, 0.226562f},
+ {0.187500f, 0.601562f, 0.800781f, 0.929688f}, {0.949219f, 0.128906f, 0.437500f, 0.613281f},
+ {0.816406f, 0.277344f, 0.054688f, 0.035156f}, {0.226562f, 0.425781f, 0.542969f, 0.183594f},
+ {0.628906f, 0.750000f, 0.984375f, 0.113281f}, {0.839844f, 0.003906f, 0.792969f, 0.796875f},
+ {0.269531f, 0.324219f, 0.496094f, 0.003906f}, {0.683594f, 0.601562f, 0.574219f, 0.546875f},
+ {0.957031f, 0.703125f, 0.164062f, 0.378906f}, {0.605469f, 0.398438f, 0.078125f, 0.855469f},
+ {0.449219f, 0.250000f, 0.257812f, 0.988281f}, {0.367188f, 0.964844f, 0.859375f, 0.195312f},
+ {0.820312f, 0.007812f, 0.125000f, 0.753906f}, {0.625000f, 0.832031f, 0.453125f, 0.609375f},
+ {0.929688f, 0.230469f, 0.246094f, 0.925781f}, {0.394531f, 0.375000f, 0.097656f, 0.550781f},
+ {0.558594f, 0.148438f, 0.183594f, 0.191406f}, {0.480469f, 0.796875f, 0.488281f, 0.785156f},
+ {0.714844f, 0.250000f, 0.011719f, 0.296875f}, {0.660156f, 0.085938f, 0.804688f, 0.691406f},
+ {0.890625f, 0.695312f, 0.101562f, 0.855469f}, {0.320312f, 0.195312f, 0.441406f, 0.761719f},
+ {0.265625f, 0.375000f, 0.765625f, 0.191406f}, {0.996094f, 0.113281f, 0.832031f, 0.585938f},
+ {0.101562f, 0.882812f, 0.152344f, 0.285156f}, {0.468750f, 0.332031f, 0.722656f, 0.882812f},
+ {0.656250f, 0.816406f, 0.105469f, 0.339844f}, {0.035156f, 0.703125f, 0.855469f, 0.687500f},
+ {0.738281f, 0.003906f, 0.601562f, 0.566406f}, {0.441406f, 0.664062f, 0.703125f, 0.843750f},
+ {0.875000f, 0.789062f, 0.839844f, 0.187500f}, {0.781250f, 0.457031f, 0.640625f, 0.996094f},
+ {0.050781f, 0.210938f, 0.355469f, 0.332031f}, {0.363281f, 0.351562f, 0.039062f, 0.421875f},
+ {0.429688f, 0.550781f, 0.699219f, 0.089844f}, {0.753906f, 0.917969f, 0.269531f, 0.285156f},
+ {0.496094f, 0.058594f, 0.929688f, 0.980469f}, {0.343750f, 0.445312f, 0.445312f, 0.566406f},
+ {0.152344f, 0.160156f, 0.003906f, 0.750000f}, {0.738281f, 0.570312f, 0.847656f, 0.941406f},
+ {0.808594f, 0.027344f, 0.167969f, 0.292969f}, {0.992188f, 0.867188f, 0.921875f, 0.519531f},
+ {0.074219f, 0.187500f, 0.761719f, 0.199219f}, {0.750000f, 0.597656f, 0.312500f, 0.472656f},
+ {0.277344f, 0.753906f, 0.945312f, 0.089844f}, {0.796875f, 0.820312f, 0.511719f, 0.375000f},
+ {0.542969f, 0.878906f, 0.191406f, 0.503906f}, {0.175781f, 0.632812f, 0.597656f, 0.109375f},
+ {0.257812f, 0.335938f, 0.980469f, 0.339844f}, {0.664062f, 0.000000f, 0.542969f, 0.417969f},
+ {0.324219f, 0.144531f, 0.410156f, 0.078125f}, {0.062500f, 0.437500f, 0.472656f, 0.250000f},
+ {0.925781f, 0.058594f, 0.636719f, 0.332031f}, {0.269531f, 0.671875f, 0.234375f, 0.175781f},
+ {0.714844f, 0.285156f, 0.382812f, 0.574219f}, {0.570312f, 0.906250f, 0.988281f, 0.414062f},
+ {0.097656f, 0.460938f, 0.425781f, 0.257812f}, {0.953125f, 0.796875f, 0.265625f, 0.117188f},
+ {0.589844f, 0.367188f, 0.777344f, 0.746094f}, {0.035156f, 0.082031f, 0.457031f, 0.062500f},
+ {0.226562f, 0.253906f, 0.953125f, 0.628906f}, {0.527344f, 0.417969f, 0.519531f, 0.261719f},
+ {0.132812f, 0.812500f, 0.828125f, 0.000000f}, {0.906250f, 0.660156f, 0.386719f, 0.367188f},
+ {0.742188f, 0.500000f, 0.207031f, 0.093750f}, {0.359375f, 0.769531f, 0.609375f, 0.718750f},
+ {0.480469f, 0.695312f, 0.679688f, 0.539062f}, {0.144531f, 0.179688f, 0.757812f, 0.765625f},
+ {0.332031f, 0.625000f, 0.179688f, 0.679688f}, {0.445312f, 0.492188f, 0.378906f, 0.425781f},
+ {0.035156f, 0.550781f, 0.230469f, 0.476562f}, {0.402344f, 0.898438f, 0.898438f, 0.652344f},
+ {0.156250f, 0.046875f, 0.820312f, 0.132812f}, {0.328125f, 0.484375f, 0.679688f, 0.246094f},
+ {0.746094f, 0.750000f, 0.363281f, 0.453125f}, {0.238281f, 0.863281f, 0.558594f, 0.105469f},
+ {0.023438f, 0.289062f, 0.648438f, 0.292969f}, {0.683594f, 0.566406f, 0.906250f, 0.804688f},
+ {0.335938f, 0.773438f, 0.601562f, 0.375000f}, {0.781250f, 0.496094f, 0.710938f, 0.023438f},
+ {0.847656f, 0.996094f, 0.929688f, 0.425781f}, {0.308594f, 0.027344f, 0.656250f, 0.871094f},
+ {0.183594f, 0.625000f, 0.292969f, 0.480469f}, {0.089844f, 0.753906f, 0.164062f, 0.363281f},
+ {0.804688f, 0.476562f, 0.687500f, 0.011719f}, {0.503906f, 0.910156f, 0.523438f, 0.644531f},
+ {0.605469f, 0.609375f, 0.203125f, 0.441406f}, {0.417969f, 0.742188f, 0.621094f, 0.085938f},
+ {0.839844f, 0.441406f, 0.296875f, 0.679688f}, {0.531250f, 0.042969f, 0.929688f, 0.781250f},
+ {0.378906f, 0.929688f, 0.460938f, 0.148438f}, {0.902344f, 0.238281f, 0.050781f, 0.222656f},
+ {0.570312f, 0.378906f, 0.328125f, 0.390625f}, {0.105469f, 0.121094f, 0.253906f, 0.460938f},
+ {0.500000f, 0.906250f, 0.515625f, 0.281250f}, {0.296875f, 0.160156f, 0.148438f, 0.664062f},
+ {0.699219f, 0.722656f, 0.757812f, 0.007812f}, {0.539062f, 0.968750f, 0.589844f, 0.914062f},
+ {0.253906f, 0.246094f, 0.406250f, 0.769531f}, {0.609375f, 0.613281f, 0.105469f, 0.707031f},
+ {0.195312f, 0.687500f, 0.179688f, 0.031250f}, {0.949219f, 0.523438f, 0.785156f, 0.339844f},
+ {0.863281f, 0.804688f, 0.234375f, 0.433594f}, {0.230469f, 0.355469f, 0.648438f, 0.687500f},
+ {0.304688f, 0.757812f, 0.421875f, 0.378906f}, {0.375000f, 0.464844f, 0.539062f, 0.046875f},
+ {0.558594f, 0.324219f, 0.214844f, 0.761719f}, {0.679688f, 0.410156f, 0.074219f, 0.839844f},
+ {0.464844f, 0.519531f, 0.710938f, 0.281250f}, {0.968750f, 0.152344f, 0.140625f, 0.925781f},
+ {0.359375f, 0.230469f, 0.902344f, 0.609375f}, {0.593750f, 0.097656f, 0.457031f, 0.761719f},
+ {0.441406f, 0.785156f, 0.058594f, 0.960938f}, {0.125000f, 0.890625f, 0.312500f, 0.203125f},
+ {0.812500f, 0.488281f, 0.804688f, 0.878906f}, {0.558594f, 0.992188f, 0.175781f, 0.742188f},
+ {0.179688f, 0.222656f, 0.343750f, 0.039062f}, {0.789062f, 0.871094f, 0.843750f, 0.949219f},
+ {0.902344f, 0.503906f, 0.507812f, 0.718750f}, {0.402344f, 0.625000f, 0.027344f, 0.011719f},
+ {0.195312f, 0.152344f, 0.605469f, 0.929688f}, {0.753906f, 0.214844f, 0.160156f, 0.839844f},
+ {0.488281f, 0.687500f, 0.671875f, 0.390625f}, {0.851562f, 0.992188f, 0.363281f, 0.191406f},
+ {0.933594f, 0.617188f, 0.230469f, 0.308594f}, {0.375000f, 0.746094f, 0.656250f, 0.867188f},
+ {0.613281f, 0.105469f, 0.898438f, 0.671875f}, {0.316406f, 0.371094f, 0.714844f, 0.503906f},
+ {0.687500f, 0.234375f, 0.031250f, 0.808594f}, {0.550781f, 0.957031f, 0.957031f, 0.433594f},
+ {0.023438f, 0.539062f, 0.351562f, 0.308594f}, {0.964844f, 0.359375f, 0.261719f, 0.980469f},
+ {0.750000f, 0.941406f, 0.863281f, 0.234375f}, {0.906250f, 0.863281f, 0.605469f, 0.863281f},
+ {0.503906f, 0.109375f, 0.093750f, 0.289062f}, {0.582031f, 0.238281f, 0.414062f, 0.949219f},
+ {0.792969f, 0.992188f, 0.308594f, 0.757812f}, {0.062500f, 0.164062f, 0.039062f, 0.816406f},
+ {0.902344f, 0.542969f, 0.933594f, 0.675781f}, {0.554688f, 0.085938f, 0.726562f, 0.507812f},
+ {0.984375f, 0.460938f, 0.175781f, 0.890625f}, {0.468750f, 0.179688f, 0.027344f, 0.140625f},
+ {0.125000f, 0.679688f, 0.304688f, 0.468750f}, {0.203125f, 0.058594f, 0.531250f, 0.953125f},
+ {0.070312f, 0.328125f, 0.375000f, 0.667969f}, {0.746094f, 0.554688f, 0.785156f, 0.578125f},
+ {0.917969f, 0.421875f, 0.558594f, 0.089844f}, {0.445312f, 0.289062f, 0.855469f, 0.937500f},
+ {0.378906f, 0.156250f, 0.398438f, 0.539062f}, {0.066406f, 0.015625f, 0.335938f, 0.265625f},
+ {0.730469f, 0.812500f, 0.878906f, 0.820312f}, {0.191406f, 0.535156f, 0.015625f, 0.988281f},
+ {0.046875f, 0.171875f, 0.554688f, 0.484375f}, {0.777344f, 0.656250f, 0.375000f, 0.015625f},
+ {0.230469f, 0.488281f, 0.238281f, 0.535156f}, {0.144531f, 0.578125f, 0.750000f, 0.910156f},
+ {0.812500f, 0.757812f, 0.910156f, 0.714844f}, {0.207031f, 0.429688f, 0.386719f, 0.042969f},
+ {0.945312f, 0.292969f, 0.023438f, 0.136719f}, {0.597656f, 0.859375f, 0.941406f, 0.742188f},
+ {0.171875f, 0.593750f, 0.289062f, 0.519531f}, {0.914062f, 0.031250f, 0.886719f, 0.234375f},
+ {0.808594f, 0.773438f, 0.824219f, 0.160156f}, {0.082031f, 0.132812f, 0.496094f, 0.464844f},
+ {0.664062f, 0.871094f, 0.675781f, 0.597656f}, {0.042969f, 0.289062f, 0.546875f, 0.195312f},
+ {0.453125f, 0.996094f, 0.363281f, 0.859375f}, {0.585938f, 0.226562f, 0.718750f, 0.140625f},
+ {0.648438f, 0.093750f, 0.277344f, 0.609375f}, {0.035156f, 0.933594f, 0.980469f, 0.898438f},
+ {0.910156f, 0.671875f, 0.625000f, 0.410156f}, {0.210938f, 0.246094f, 0.472656f, 0.578125f},
+ {0.136719f, 0.960938f, 0.832031f, 0.031250f}, {0.066406f, 0.054688f, 0.656250f, 0.660156f},
+ {0.898438f, 0.714844f, 0.347656f, 0.218750f}, {0.765625f, 0.589844f, 0.820312f, 0.449219f},
+ {0.023438f, 0.398438f, 0.734375f, 0.011719f}, {0.960938f, 0.253906f, 0.132812f, 0.582031f},
+ {0.378906f, 0.644531f, 0.945312f, 0.480469f}, {0.496094f, 0.320312f, 0.683594f, 0.656250f},
+ {0.085938f, 0.722656f, 0.105469f, 0.386719f}, {0.316406f, 0.414062f, 0.753906f, 0.226562f},
+ {0.046875f, 0.011719f, 0.199219f, 0.464844f}, {0.621094f, 0.968750f, 0.714844f, 0.300781f},
+ {0.878906f, 0.726562f, 0.863281f, 0.593750f}, {0.257812f, 0.312500f, 0.324219f, 0.523438f},
+ {0.347656f, 0.835938f, 0.816406f, 0.687500f}, {0.074219f, 0.480469f, 0.000000f, 0.972656f},
+ {0.656250f, 0.007812f, 0.578125f, 0.785156f}, {0.792969f, 0.914062f, 0.152344f, 0.570312f},
+ {0.464844f, 0.292969f, 0.292969f, 0.152344f}, {0.863281f, 0.843750f, 0.101562f, 0.957031f},
+ {0.066406f, 0.449219f, 0.484375f, 0.199219f}, {0.437500f, 0.019531f, 0.878906f, 0.886719f},
+ {0.800781f, 0.074219f, 0.132812f, 0.136719f}, {0.296875f, 0.800781f, 0.511719f, 0.488281f},
+ {0.656250f, 0.253906f, 0.019531f, 0.371094f}, {0.101562f, 0.148438f, 0.726562f, 0.609375f},
+ {0.203125f, 0.664062f, 0.660156f, 0.089844f}, {0.976562f, 0.437500f, 0.972656f, 0.175781f},
+ {0.289062f, 0.781250f, 0.765625f, 0.578125f}, {0.660156f, 0.343750f, 0.519531f, 0.312500f},
+ {0.507812f, 0.625000f, 0.441406f, 0.019531f}, {0.175781f, 0.933594f, 0.230469f, 0.394531f},
+ {0.796875f, 0.722656f, 0.824219f, 0.570312f}, {0.277344f, 0.410156f, 0.406250f, 0.226562f},
+ {0.597656f, 0.949219f, 0.761719f, 0.707031f}, {0.949219f, 0.609375f, 0.882812f, 0.070312f},
+ {0.519531f, 0.859375f, 0.128906f, 0.273438f}, {0.632812f, 0.203125f, 0.042969f, 0.156250f},
+ {0.265625f, 0.890625f, 0.449219f, 0.812500f}, {0.585938f, 0.664062f, 0.230469f, 0.210938f},
+ {0.968750f, 0.960938f, 0.742188f, 0.726562f}, {0.226562f, 0.339844f, 0.992188f, 0.117188f},
+ {0.875000f, 0.410156f, 0.093750f, 0.894531f}, {0.640625f, 0.261719f, 0.710938f, 0.324219f},
+ {0.917969f, 0.980469f, 0.425781f, 0.234375f}, {0.308594f, 0.300781f, 0.804688f, 0.628906f},
+ {0.589844f, 0.105469f, 0.648438f, 0.421875f}, {0.714844f, 0.847656f, 0.125000f, 0.808594f},
+ {0.406250f, 0.187500f, 0.480469f, 0.300781f}, {0.667969f, 0.992188f, 0.679688f, 0.960938f},
+ {0.070312f, 0.542969f, 0.800781f, 0.859375f}, {0.835938f, 0.082031f, 0.554688f, 0.578125f},
+ {0.398438f, 0.496094f, 0.449219f, 0.402344f}, {0.113281f, 0.398438f, 0.222656f, 0.828125f},
+ {0.460938f, 0.308594f, 0.054688f, 0.625000f}, {0.976562f, 0.472656f, 0.984375f, 0.375000f},
+ {0.281250f, 0.203125f, 0.312500f, 0.937500f}, {0.386719f, 0.000000f, 0.875000f, 0.785156f},
+ {0.785156f, 0.402344f, 0.078125f, 0.527344f}, {0.117188f, 0.644531f, 0.812500f, 0.082031f},
+ {0.941406f, 0.503906f, 0.132812f, 0.972656f}, {0.488281f, 0.140625f, 0.023438f, 0.238281f},
+ {0.832031f, 0.843750f, 0.859375f, 0.167969f}, {0.335938f, 0.011719f, 0.382812f, 0.730469f},
+ {0.628906f, 0.777344f, 0.570312f, 0.875000f}, {0.527344f, 0.355469f, 0.285156f, 0.132812f},
+ {0.234375f, 0.472656f, 0.093750f, 0.312500f}, {0.308594f, 0.941406f, 0.214844f, 0.820312f},
+ {0.640625f, 0.164062f, 0.628906f, 0.714844f}, {0.871094f, 0.832031f, 0.390625f, 0.156250f},
+ {0.218750f, 0.531250f, 0.265625f, 0.289062f}, {0.699219f, 0.117188f, 0.550781f, 0.796875f},
+ {0.980469f, 0.578125f, 0.890625f, 0.125000f}, {0.523438f, 0.824219f, 0.460938f, 0.890625f},
+ {0.445312f, 0.347656f, 0.285156f, 0.675781f}, {0.816406f, 0.097656f, 0.949219f, 0.781250f},
+ {0.140625f, 0.550781f, 0.089844f, 0.160156f}, {0.675781f, 0.421875f, 0.484375f, 0.074219f},
+ {0.542969f, 0.062500f, 0.535156f, 0.230469f}, {0.421875f, 0.570312f, 0.886719f, 0.484375f},
+ {0.167969f, 0.339844f, 0.734375f, 0.035156f}, {0.277344f, 0.199219f, 0.425781f, 0.441406f},
+ {0.093750f, 0.527344f, 0.996094f, 0.714844f}, {0.214844f, 0.148438f, 0.632812f, 0.335938f},
+ {0.941406f, 0.585938f, 0.242188f, 0.593750f}, {0.160156f, 0.886719f, 0.410156f, 0.652344f},
+ {0.597656f, 0.679688f, 0.812500f, 0.019531f}, {0.242188f, 0.312500f, 0.585938f, 0.562500f},
+ {0.531250f, 0.460938f, 0.937500f, 0.921875f}, {0.375000f, 0.734375f, 0.328125f, 0.054688f},
+ {0.703125f, 0.382812f, 0.472656f, 0.734375f}, {0.824219f, 0.835938f, 0.140625f, 0.519531f},
+ {0.441406f, 0.289062f, 0.203125f, 0.414062f}, {0.121094f, 0.691406f, 0.628906f, 0.925781f},
+ {0.378906f, 0.019531f, 0.105469f, 0.082031f}, {0.714844f, 0.222656f, 0.347656f, 0.734375f},
+ {0.046875f, 0.816406f, 0.968750f, 0.976562f}, {0.421875f, 0.320312f, 0.078125f, 0.628906f},
+ {0.871094f, 0.097656f, 0.484375f, 0.835938f}, {0.695312f, 0.265625f, 0.207031f, 0.332031f},
+ {0.351562f, 0.718750f, 0.273438f, 0.761719f}, {0.406250f, 0.382812f, 0.957031f, 0.511719f},
+ {0.042969f, 0.785156f, 0.628906f, 0.980469f}, {0.832031f, 0.117188f, 0.910156f, 0.343750f},
+ {0.144531f, 0.500000f, 0.058594f, 0.421875f}, {0.699219f, 0.843750f, 0.589844f, 0.601562f},
+ {0.546875f, 0.574219f, 0.488281f, 0.164062f}, {0.363281f, 0.054688f, 0.265625f, 0.390625f},
+ {0.128906f, 0.785156f, 0.949219f, 0.746094f}, {0.492188f, 0.691406f, 0.175781f, 0.949219f},
+ {0.972656f, 0.902344f, 0.894531f, 0.183594f}, {0.027344f, 0.359375f, 0.570312f, 0.070312f},
+ {0.273438f, 0.062500f, 0.207031f, 0.500000f}, {0.472656f, 0.730469f, 0.972656f, 0.613281f},
+ {0.351562f, 0.640625f, 0.089844f, 0.363281f}, {0.742188f, 0.226562f, 0.187500f, 0.195312f},
+ {0.234375f, 0.699219f, 0.730469f, 0.945312f}, {0.625000f, 0.945312f, 0.636719f, 0.082031f},
+ {0.328125f, 0.839844f, 0.378906f, 0.312500f}, {0.707031f, 0.652344f, 0.574219f, 0.875000f},
+ {0.566406f, 0.742188f, 0.148438f, 0.050781f}, {0.882812f, 0.921875f, 0.460938f, 0.246094f},
+ {0.519531f, 0.585938f, 0.917969f, 0.656250f}, {0.730469f, 0.718750f, 0.597656f, 0.316406f},
+ {0.261719f, 0.808594f, 0.500000f, 0.460938f}, {0.171875f, 0.285156f, 0.324219f, 0.796875f},
+ {0.773438f, 0.562500f, 0.746094f, 0.546875f}, {0.433594f, 0.429688f, 0.183594f, 0.343750f},
+ {0.726562f, 0.628906f, 0.050781f, 0.488281f}, {0.859375f, 0.898438f, 0.972656f, 0.996094f},
+ {0.402344f, 0.542969f, 0.429688f, 0.402344f}, {0.101562f, 0.304688f, 0.535156f, 0.542969f},
+ {0.476562f, 0.675781f, 0.863281f, 0.902344f}, {0.734375f, 0.035156f, 0.488281f, 0.359375f},
+ {0.289062f, 0.761719f, 0.773438f, 0.976562f}, {0.589844f, 0.949219f, 0.007812f, 0.519531f},
+ {0.843750f, 0.269531f, 0.417969f, 0.835938f}, {0.664062f, 0.183594f, 0.144531f, 0.554688f},
+ {0.226562f, 0.652344f, 0.656250f, 0.085938f}, {0.367188f, 0.789062f, 0.562500f, 0.957031f},
+ {0.972656f, 0.238281f, 0.394531f, 0.433594f}, {0.000000f, 0.894531f, 0.207031f, 0.644531f},
+ {0.777344f, 0.136719f, 0.968750f, 0.820312f}, {0.910156f, 0.949219f, 0.261719f, 0.355469f},
+ {0.722656f, 0.785156f, 0.070312f, 0.917969f}, {0.996094f, 0.707031f, 0.792969f, 0.105469f},
+ {0.562500f, 0.644531f, 0.511719f, 0.246094f}, {0.648438f, 0.937500f, 0.335938f, 0.851562f},
+ {0.398438f, 0.738281f, 0.777344f, 0.078125f}, {0.832031f, 0.410156f, 0.695312f, 0.285156f},
+ {0.722656f, 0.210938f, 0.167969f, 0.785156f}, {0.042969f, 0.609375f, 0.296875f, 0.214844f},
+ {0.863281f, 0.976562f, 0.441406f, 0.824219f}, {0.167969f, 0.027344f, 0.066406f, 0.664062f},
+ {0.609375f, 0.562500f, 0.828125f, 0.347656f}, {0.000000f, 0.191406f, 0.562500f, 0.839844f},
+ {0.250000f, 0.070312f, 0.281250f, 0.207031f}, {0.875000f, 0.875000f, 0.917969f, 0.644531f},
+ {0.941406f, 0.523438f, 0.781250f, 0.867188f}, {0.617188f, 0.378906f, 0.687500f, 0.343750f},
+ {0.316406f, 0.132812f, 0.546875f, 0.171875f}, {0.542969f, 0.574219f, 0.609375f, 0.101562f},
+ {0.230469f, 0.484375f, 0.851562f, 0.433594f}, {0.007812f, 0.828125f, 0.671875f, 0.910156f},
+ {0.160156f, 0.160156f, 0.734375f, 0.605469f}, {0.890625f, 0.527344f, 0.351562f, 0.394531f},
+ {0.757812f, 0.042969f, 0.511719f, 0.039062f}, {0.507812f, 0.593750f, 0.144531f, 0.640625f},
+ {0.335938f, 0.238281f, 0.316406f, 0.781250f}, {0.464844f, 0.726562f, 0.191406f, 0.500000f},
+ {0.000000f, 0.093750f, 0.667969f, 0.707031f}, {0.273438f, 0.636719f, 0.843750f, 0.031250f},
+ {0.746094f, 0.210938f, 0.101562f, 0.570312f}, {0.437500f, 0.421875f, 0.343750f, 0.832031f},
+ {0.625000f, 0.519531f, 0.027344f, 0.355469f}, {0.824219f, 0.613281f, 0.777344f, 0.667969f},
+ {0.886719f, 0.261719f, 0.296875f, 0.121094f}, {0.554688f, 0.476562f, 0.609375f, 0.777344f},
+ {0.992188f, 0.328125f, 0.417969f, 0.253906f}, {0.007812f, 0.812500f, 0.339844f, 0.050781f},
+ {0.519531f, 0.371094f, 0.921875f, 0.476562f}, {0.867188f, 0.167969f, 0.121094f, 0.660156f},
+ {0.773438f, 0.054688f, 0.789062f, 0.718750f}, {0.066406f, 0.535156f, 0.253906f, 0.128906f},
+ {0.156250f, 0.343750f, 0.753906f, 0.503906f}, {0.218750f, 0.437500f, 0.027344f, 0.410156f},
+ {0.347656f, 0.070312f, 0.398438f, 0.839844f}, {0.019531f, 0.175781f, 0.222656f, 0.714844f},
+ {0.410156f, 0.375000f, 0.953125f, 0.011719f}, {0.605469f, 0.886719f, 0.652344f, 0.640625f},
+ {0.093750f, 0.082031f, 0.414062f, 0.097656f}, {0.289062f, 0.707031f, 0.886719f, 0.269531f},
+ {0.003906f, 0.195312f, 0.242188f, 0.691406f}, {0.980469f, 0.261719f, 0.781250f, 0.070312f},
+ {0.671875f, 0.070312f, 0.722656f, 0.621094f}, {0.820312f, 0.851562f, 0.914062f, 0.250000f},
+ {0.550781f, 0.429688f, 0.164062f, 0.097656f}, {0.140625f, 0.210938f, 0.082031f, 0.671875f},
+ {0.042969f, 0.367188f, 0.996094f, 0.054688f}, {0.394531f, 0.457031f, 0.605469f, 0.613281f},
+ {0.164062f, 0.695312f, 0.312500f, 0.417969f}, {0.109375f, 0.132812f, 0.929688f, 0.320312f},
+ {0.734375f, 0.937500f, 0.800781f, 0.207031f}, {0.578125f, 0.476562f, 0.039062f, 0.367188f},
+ {0.500000f, 0.382812f, 0.761719f, 0.859375f}, {0.304688f, 0.750000f, 0.628906f, 0.273438f},
+ {0.207031f, 0.617188f, 0.121094f, 0.730469f}, {0.597656f, 0.269531f, 0.683594f, 0.140625f},
+ {0.324219f, 0.445312f, 0.371094f, 0.613281f}, {0.027344f, 0.386719f, 0.187500f, 0.761719f},
+ {0.507812f, 0.093750f, 0.597656f, 0.546875f}, {0.769531f, 0.250000f, 0.015625f, 0.386719f},
+ {0.265625f, 0.335938f, 0.914062f, 0.472656f}, {0.335938f, 0.113281f, 0.539062f, 0.972656f},
+ {0.496094f, 0.828125f, 0.078125f, 0.730469f}, {0.980469f, 0.507812f, 0.656250f, 0.410156f},
+ {0.410156f, 0.093750f, 0.871094f, 0.148438f}, {0.777344f, 0.910156f, 0.238281f, 0.464844f},
+ {0.929688f, 0.644531f, 0.746094f, 0.253906f}, {0.343750f, 0.488281f, 0.394531f, 0.992188f},
+ {0.566406f, 0.949219f, 0.011719f, 0.117188f}, {0.476562f, 0.597656f, 0.859375f, 0.476562f},
+ {0.210938f, 0.449219f, 0.476562f, 0.273438f}, {0.816406f, 0.902344f, 0.156250f, 0.542969f},
+ {0.093750f, 0.738281f, 0.253906f, 0.773438f}, {0.964844f, 0.640625f, 0.316406f, 0.500000f},
+ {0.738281f, 0.925781f, 0.007812f, 0.257812f}, {0.828125f, 0.066406f, 0.433594f, 0.000000f},
+ {0.457031f, 0.437500f, 0.578125f, 0.187500f}, {0.667969f, 0.980469f, 0.089844f, 0.699219f},
+ {0.207031f, 0.351562f, 0.824219f, 0.886719f}, {0.105469f, 0.902344f, 0.703125f, 0.246094f},
+ {0.933594f, 0.183594f, 0.796875f, 0.070312f}, {0.796875f, 0.449219f, 0.457031f, 0.925781f},
+ {0.656250f, 0.945312f, 0.378906f, 0.289062f}, {0.957031f, 0.878906f, 0.769531f, 0.875000f},
+ {0.847656f, 0.335938f, 0.531250f, 0.097656f}, {0.089844f, 0.128906f, 0.628906f, 0.464844f},
+ {0.199219f, 0.824219f, 0.437500f, 0.273438f}, {0.335938f, 0.035156f, 0.507812f, 0.925781f},
+ {0.113281f, 0.773438f, 0.839844f, 0.554688f}, {0.160156f, 0.925781f, 0.042969f, 0.437500f},
+ {0.695312f, 0.132812f, 0.875000f, 0.687500f}, {0.300781f, 0.007812f, 0.519531f, 0.878906f},
+ {0.921875f, 0.898438f, 0.671875f, 0.800781f}, {0.187500f, 0.582031f, 0.000000f, 0.539062f},
+ {0.421875f, 0.253906f, 0.484375f, 0.265625f}, {0.503906f, 0.800781f, 0.945312f, 0.988281f},
+ {0.917969f, 0.117188f, 0.625000f, 0.753906f}, {0.812500f, 0.859375f, 0.707031f, 0.578125f},
+ {0.671875f, 0.269531f, 0.296875f, 0.171875f}, {0.984375f, 0.949219f, 0.769531f, 0.367188f},
+ {0.847656f, 0.476562f, 0.156250f, 0.957031f}, {0.703125f, 0.613281f, 0.554688f, 0.867188f},
+ {0.890625f, 0.328125f, 0.101562f, 0.421875f}, {0.503906f, 0.976562f, 0.687500f, 0.910156f},
+ {0.570312f, 0.511719f, 0.503906f, 0.777344f}, {0.156250f, 0.808594f, 0.597656f, 0.179688f},
+ {0.355469f, 0.125000f, 0.019531f, 0.839844f}, {0.199219f, 0.730469f, 0.308594f, 0.738281f},
+ {0.949219f, 0.984375f, 0.671875f, 0.496094f}, {0.429688f, 0.613281f, 0.246094f, 0.199219f},
+ {0.910156f, 0.085938f, 0.363281f, 0.765625f}, {0.769531f, 0.878906f, 0.707031f, 0.261719f},
+ {0.472656f, 0.519531f, 0.187500f, 0.000000f}, {0.894531f, 0.328125f, 0.519531f, 0.750000f},
+ {0.277344f, 0.593750f, 0.238281f, 0.632812f}, {0.058594f, 0.855469f, 0.359375f, 0.500000f},
+ {0.855469f, 0.023438f, 0.910156f, 0.027344f}, {0.699219f, 0.523438f, 0.449219f, 0.562500f},
+ {0.457031f, 0.667969f, 0.308594f, 0.980469f}, {0.125000f, 0.175781f, 0.824219f, 0.312500f},
+ {0.867188f, 0.867188f, 0.476562f, 0.414062f}, {0.375000f, 0.027344f, 0.929688f, 0.882812f},
+ {0.683594f, 0.812500f, 0.851562f, 0.175781f}, {0.117188f, 0.480469f, 0.125000f, 0.804688f},
+ {0.878906f, 0.980469f, 0.210938f, 0.679688f}, {0.058594f, 0.554688f, 0.378906f, 0.042969f},
+ {0.628906f, 0.167969f, 0.976562f, 0.527344f}, {0.132812f, 0.757812f, 0.769531f, 0.621094f},
+ {0.308594f, 0.371094f, 0.191406f, 0.312500f}, {0.464844f, 0.273438f, 0.527344f, 0.898438f},
+ {0.085938f, 0.808594f, 0.960938f, 0.007812f}, {0.734375f, 0.324219f, 0.691406f, 0.757812f},
+ {0.671875f, 0.105469f, 0.339844f, 0.593750f}, {0.058594f, 0.765625f, 0.585938f, 0.703125f},
+ {0.761719f, 0.246094f, 0.062500f, 0.031250f}, {0.156250f, 0.167969f, 0.417969f, 0.917969f},
+ {0.355469f, 0.035156f, 0.800781f, 0.382812f}, {0.644531f, 0.281250f, 0.925781f, 0.683594f},
+ {0.496094f, 0.773438f, 0.136719f, 0.957031f}, {0.121094f, 0.226562f, 0.890625f, 0.562500f},
+ {0.304688f, 0.699219f, 0.187500f, 0.824219f}, {0.992188f, 0.628906f, 0.980469f, 0.457031f},
+ {0.550781f, 0.300781f, 0.410156f, 0.308594f}, {0.621094f, 0.761719f, 0.242188f, 0.148438f},
+ {0.292969f, 0.671875f, 0.609375f, 0.816406f}, {0.414062f, 0.386719f, 0.000000f, 0.445312f},
+ {0.167969f, 0.289062f, 0.890625f, 0.207031f}, {0.238281f, 0.542969f, 0.140625f, 0.523438f},
+ {0.566406f, 0.710938f, 0.218750f, 0.625000f}, {0.382812f, 0.464844f, 0.980469f, 0.156250f},
+ {0.785156f, 0.972656f, 0.695312f, 0.730469f}, {0.535156f, 0.199219f, 0.246094f, 0.863281f},
+ {0.648438f, 0.390625f, 0.371094f, 0.210938f}, {0.425781f, 0.550781f, 0.722656f, 0.000000f},
+ {0.773438f, 0.671875f, 0.140625f, 0.980469f}, {0.585938f, 0.425781f, 0.234375f, 0.304688f},
+ {0.105469f, 0.734375f, 0.812500f, 0.164062f}, {0.656250f, 0.460938f, 0.281250f, 0.421875f},
+ {0.277344f, 0.632812f, 0.863281f, 0.351562f}, {0.031250f, 0.968750f, 0.347656f, 0.015625f},
+ {0.613281f, 0.195312f, 0.195312f, 0.214844f}, {0.445312f, 0.507812f, 0.527344f, 0.906250f},
+ {0.296875f, 0.777344f, 0.855469f, 0.093750f}, {0.132812f, 0.660156f, 0.062500f, 0.285156f},
+ {0.546875f, 0.031250f, 0.457031f, 0.496094f}, {0.195312f, 0.230469f, 0.808594f, 0.144531f},
+ {0.375000f, 0.750000f, 0.273438f, 0.210938f}, {0.933594f, 0.156250f, 0.941406f, 0.601562f},
+ {0.230469f, 0.402344f, 0.355469f, 0.367188f}, {0.753906f, 0.656250f, 0.128906f, 0.449219f},
+ {0.058594f, 0.351562f, 0.464844f, 0.015625f}, {0.597656f, 0.570312f, 0.398438f, 0.957031f},
+ {0.789062f, 0.289062f, 0.824219f, 0.386719f}, {0.246094f, 0.492188f, 0.578125f, 0.863281f},
+ {0.636719f, 0.792969f, 0.046875f, 0.457031f}, {0.332031f, 0.019531f, 0.839844f, 0.929688f},
+ {0.207031f, 0.410156f, 0.109375f, 0.707031f}, {0.617188f, 0.765625f, 0.621094f, 0.992188f},
+ {0.960938f, 0.066406f, 0.691406f, 0.132812f}, {0.417969f, 0.289062f, 0.074219f, 0.906250f},
+ {0.789062f, 0.207031f, 0.851562f, 0.769531f}, {0.093750f, 0.972656f, 0.171875f, 0.183594f},
+ {0.937500f, 0.101562f, 0.726562f, 0.066406f}, {0.253906f, 0.324219f, 0.554688f, 0.527344f},
+ {0.820312f, 0.503906f, 0.062500f, 0.656250f}, {0.476562f, 0.593750f, 0.648438f, 0.007812f},
+ {0.179688f, 0.910156f, 0.281250f, 0.289062f}, {0.957031f, 0.062500f, 0.445312f, 0.921875f},
+ {0.441406f, 0.632812f, 0.726562f, 0.128906f}, {0.574219f, 0.292969f, 0.621094f, 0.234375f},
+ {0.203125f, 0.875000f, 0.476562f, 0.363281f}, {0.679688f, 0.667969f, 0.031250f, 0.945312f},
+ {0.914062f, 0.441406f, 0.347656f, 0.097656f}, {0.546875f, 0.214844f, 0.609375f, 0.687500f},
+ {0.191406f, 0.718750f, 0.113281f, 0.550781f}, {0.269531f, 0.148438f, 0.164062f, 0.375000f},
+ {0.992188f, 0.414062f, 0.898438f, 0.164062f}, {0.398438f, 0.652344f, 0.652344f, 0.429688f},
+ {0.523438f, 0.351562f, 0.210938f, 0.800781f}, {0.863281f, 0.820312f, 0.992188f, 0.218750f},
+ {0.437500f, 0.988281f, 0.707031f, 0.066406f}, {0.261719f, 0.421875f, 0.382812f, 0.859375f},
+ {0.921875f, 0.339844f, 0.644531f, 0.132812f}, {0.585938f, 0.539062f, 0.746094f, 0.359375f},
+ {0.386719f, 0.855469f, 0.488281f, 0.738281f}, {0.804688f, 0.019531f, 0.289062f, 0.105469f},
+ {0.253906f, 0.480469f, 0.050781f, 0.539062f}, {0.027344f, 0.109375f, 0.867188f, 0.945312f},
+ {0.898438f, 0.828125f, 0.523438f, 0.582031f}, {0.718750f, 0.046875f, 0.964844f, 0.339844f},
+ {0.519531f, 0.152344f, 0.281250f, 0.675781f}, {0.062500f, 0.765625f, 0.570312f, 0.984375f},
+ {0.886719f, 0.003906f, 0.738281f, 0.792969f}, {0.687500f, 0.257812f, 0.316406f, 0.410156f},
+ {0.019531f, 0.585938f, 0.078125f, 0.039062f}, {0.964844f, 0.660156f, 0.164062f, 0.320312f},
+ {0.257812f, 0.863281f, 0.941406f, 0.597656f}, {0.906250f, 0.292969f, 0.640625f, 0.386719f},
+ {0.214844f, 0.960938f, 0.472656f, 0.746094f}, {0.464844f, 0.214844f, 0.996094f, 0.628906f},
+ {0.378906f, 0.851562f, 0.558594f, 0.097656f}, {0.820312f, 0.300781f, 0.394531f, 0.898438f},
+ {0.718750f, 0.066406f, 0.597656f, 0.566406f}, {0.968750f, 0.406250f, 0.085938f, 0.843750f},
+ {0.363281f, 0.687500f, 0.433594f, 0.683594f}, {0.750000f, 0.574219f, 0.125000f, 0.437500f},
+ {0.078125f, 0.316406f, 0.980469f, 0.617188f}, {0.636719f, 0.136719f, 0.675781f, 0.812500f},
+ {0.468750f, 0.910156f, 0.367188f, 0.757812f}, {0.324219f, 0.546875f, 0.910156f, 0.554688f},
+ {0.050781f, 0.832031f, 0.003906f, 0.671875f}, {0.808594f, 0.054688f, 0.203125f, 0.042969f},
+ {0.625000f, 0.929688f, 0.632812f, 0.937500f}, {0.460938f, 0.468750f, 0.796875f, 0.523438f},
+ {0.882812f, 0.003906f, 0.964844f, 0.292969f}, {0.304688f, 0.902344f, 0.195312f, 0.589844f},
+ {0.503906f, 0.160156f, 0.515625f, 0.128906f}, {0.011719f, 0.671875f, 0.933594f, 0.328125f},
+ {0.714844f, 0.250000f, 0.765625f, 0.570312f}, {0.539062f, 0.921875f, 0.472656f, 0.167969f},
+ {0.820312f, 0.187500f, 0.871094f, 0.355469f}, {0.031250f, 0.996094f, 0.953125f, 0.476562f},
+ {0.355469f, 0.628906f, 0.425781f, 0.289062f}, {0.554688f, 0.449219f, 0.578125f, 0.593750f},
+ {0.183594f, 0.710938f, 0.273438f, 0.398438f}, {0.644531f, 0.359375f, 0.511719f, 0.695312f},
+ {0.398438f, 0.820312f, 0.015625f, 0.464844f}, {0.535156f, 0.925781f, 0.941406f, 0.933594f},
+ {0.628906f, 0.691406f, 0.238281f, 0.222656f}, {0.074219f, 0.222656f, 0.402344f, 0.707031f},
+ {0.785156f, 0.757812f, 0.761719f, 0.496094f}, {0.242188f, 0.367188f, 0.570312f, 0.589844f},
+ {0.726562f, 0.718750f, 0.320312f, 0.445312f}, {0.925781f, 0.417969f, 0.890625f, 0.863281f},
+ {0.382812f, 0.000000f, 0.261719f, 0.753906f}, {0.753906f, 0.953125f, 0.839844f, 0.179688f},
+ {0.023438f, 0.078125f, 0.414062f, 0.832031f}, {0.843750f, 0.597656f, 0.906250f, 0.496094f},
+ {0.617188f, 0.894531f, 0.492188f, 0.792969f}, {0.886719f, 0.542969f, 0.261719f, 0.289062f},
+ {0.140625f, 0.968750f, 0.437500f, 0.960938f}, {0.296875f, 0.046875f, 0.757812f, 0.851562f},
+ {0.601562f, 0.710938f, 0.300781f, 0.324219f}, {0.699219f, 0.500000f, 0.496094f, 0.574219f},
+ {0.019531f, 0.558594f, 0.035156f, 0.648438f}, {0.785156f, 0.675781f, 0.535156f, 0.449219f},
+ {0.078125f, 0.089844f, 0.234375f, 0.300781f}, {0.191406f, 0.175781f, 0.339844f, 0.617188f},
+ {0.714844f, 0.398438f, 0.785156f, 0.222656f}, {0.054688f, 0.921875f, 0.562500f, 0.875000f},
+ {0.488281f, 0.257812f, 0.683594f, 0.652344f}, {0.765625f, 0.566406f, 0.335938f, 0.386719f},
+ {0.371094f, 0.957031f, 0.121094f, 0.750000f}, {0.117188f, 0.511719f, 0.718750f, 0.007812f},
+ {0.820312f, 0.871094f, 0.421875f, 0.125000f}, {0.453125f, 0.617188f, 0.062500f, 0.371094f},
+ {0.613281f, 0.937500f, 0.914062f, 0.246094f}, {0.300781f, 0.371094f, 0.460938f, 0.703125f},
+ {0.480469f, 0.078125f, 0.863281f, 0.957031f}, {0.730469f, 0.746094f, 0.785156f, 0.488281f},
+ {0.363281f, 0.164062f, 0.566406f, 0.812500f}, {0.074219f, 0.093750f, 0.093750f, 0.140625f},
+ {0.859375f, 0.503906f, 0.320312f, 0.527344f}, {0.039062f, 0.050781f, 0.765625f, 0.464844f},
+ {0.953125f, 0.566406f, 0.058594f, 0.222656f}, {0.531250f, 0.156250f, 0.156250f, 0.773438f},
+ {0.230469f, 0.914062f, 0.738281f, 0.644531f}, {0.117188f, 0.750000f, 0.898438f, 0.152344f},
+ {0.574219f, 0.363281f, 0.656250f, 0.484375f}, {0.179688f, 0.011719f, 0.808594f, 0.312500f},
+ {0.894531f, 0.980469f, 0.328125f, 0.941406f}, {0.246094f, 0.730469f, 0.242188f, 0.066406f},
+ {0.949219f, 0.386719f, 0.609375f, 0.398438f}, {0.781250f, 0.445312f, 0.511719f, 0.257812f},
+ {0.675781f, 0.679688f, 0.730469f, 0.843750f}, {0.121094f, 0.273438f, 0.433594f, 0.324219f},
+ {0.273438f, 0.582031f, 0.855469f, 0.726562f}, {0.390625f, 0.863281f, 0.289062f, 0.816406f},
+ {0.699219f, 0.226562f, 0.707031f, 0.218750f}, {0.925781f, 0.757812f, 0.078125f, 0.687500f},
+ {0.128906f, 0.382812f, 0.640625f, 0.906250f}, {0.382812f, 0.101562f, 0.140625f, 0.789062f},
+ {0.988281f, 0.843750f, 0.273438f, 0.074219f}, {0.093750f, 0.562500f, 0.386719f, 0.660156f},
+ {0.441406f, 0.726562f, 0.230469f, 0.218750f}, {0.746094f, 0.238281f, 0.023438f, 0.875000f},
+ {0.683594f, 0.109375f, 0.750000f, 0.042969f}, {0.238281f, 0.898438f, 0.328125f, 0.812500f},
+ {0.902344f, 0.796875f, 0.988281f, 0.230469f}, {0.335938f, 0.574219f, 0.792969f, 0.335938f},
+ {0.015625f, 0.035156f, 0.613281f, 0.835938f}, {0.738281f, 0.414062f, 0.343750f, 0.101562f},
+ {0.976562f, 0.128906f, 0.867188f, 0.789062f}, {0.308594f, 0.285156f, 0.148438f, 0.371094f},
+ {0.554688f, 0.535156f, 0.980469f, 0.964844f}, {0.351562f, 0.191406f, 0.046875f, 0.074219f},
+ {0.003906f, 0.140625f, 0.812500f, 0.324219f}, {0.515625f, 0.804688f, 0.101562f, 0.644531f},
+ {0.292969f, 0.242188f, 0.152344f, 0.546875f}, {0.816406f, 0.527344f, 0.554688f, 0.277344f},
+ {0.246094f, 0.343750f, 0.664062f, 0.050781f}, {0.425781f, 0.839844f, 0.058594f, 0.425781f},
+ {0.347656f, 0.031250f, 0.714844f, 0.207031f}, {0.496094f, 0.460938f, 0.804688f, 0.652344f},
+ {0.800781f, 0.226562f, 0.078125f, 0.058594f}, {0.039062f, 0.859375f, 0.546875f, 0.484375f},
+ {0.945312f, 0.300781f, 0.847656f, 0.109375f}, {0.226562f, 0.121094f, 0.121094f, 0.933594f},
+ {0.906250f, 0.210938f, 0.878906f, 0.746094f}, {0.546875f, 0.875000f, 0.601562f, 0.187500f},
+ {0.675781f, 0.953125f, 0.085938f, 0.804688f}, {0.339844f, 0.601562f, 0.933594f, 0.507812f},
+ {0.859375f, 0.792969f, 0.023438f, 0.996094f}, {0.429688f, 0.128906f, 0.156250f, 0.031250f},
+ {0.929688f, 0.742188f, 0.906250f, 0.269531f}, {0.179688f, 0.203125f, 0.453125f, 0.484375f},
+ {0.671875f, 0.640625f, 0.644531f, 0.195312f}, {0.582031f, 0.328125f, 0.191406f, 0.847656f},
+ {0.976562f, 0.425781f, 0.832031f, 0.601562f}, {0.343750f, 0.191406f, 0.347656f, 0.906250f},
+ {0.210938f, 0.488281f, 0.605469f, 0.062500f}, {0.941406f, 0.804688f, 0.023438f, 0.546875f},
+ {0.101562f, 0.910156f, 0.527344f, 0.191406f}, {0.175781f, 0.437500f, 0.402344f, 0.648438f},
+ {0.820312f, 0.332031f, 0.265625f, 0.914062f}, {0.515625f, 0.636719f, 0.882812f, 0.062500f},
+ {0.621094f, 0.785156f, 0.429688f, 0.253906f}, {0.746094f, 0.707031f, 0.199219f, 0.937500f},
+ {0.152344f, 0.355469f, 0.683594f, 0.332031f}, {0.332031f, 0.804688f, 0.457031f, 0.074219f},
+ {0.878906f, 0.492188f, 0.964844f, 0.968750f}, {0.480469f, 0.109375f, 0.226562f, 0.382812f},
+ {0.792969f, 0.867188f, 0.035156f, 0.042969f}, {0.417969f, 0.234375f, 0.480469f, 0.734375f},
+ {0.843750f, 0.464844f, 0.566406f, 0.539062f}, {0.511719f, 0.609375f, 0.171875f, 0.187500f},
+ {0.011719f, 0.062500f, 0.046875f, 0.703125f}, {0.582031f, 0.191406f, 0.871094f, 0.968750f},
+ {0.429688f, 0.347656f, 0.308594f, 0.121094f}, {0.988281f, 0.777344f, 0.578125f, 0.484375f},
+ {0.527344f, 0.109375f, 0.152344f, 0.078125f}, {0.085938f, 0.320312f, 0.050781f, 0.160156f},
+ {0.835938f, 0.699219f, 0.539062f, 0.640625f}, {0.558594f, 0.531250f, 0.890625f, 0.433594f},
+ {0.183594f, 0.968750f, 0.332031f, 0.031250f}, {0.660156f, 0.449219f, 0.433594f, 0.269531f},
+ {0.851562f, 0.640625f, 0.722656f, 0.503906f}, {0.289062f, 0.347656f, 0.558594f, 0.835938f},
+ {0.156250f, 0.488281f, 0.171875f, 0.101562f}, {0.878906f, 0.828125f, 0.804688f, 0.550781f},
+ {0.511719f, 0.386719f, 0.492188f, 0.437500f}, {0.132812f, 0.531250f, 0.148438f, 0.671875f},
+ {0.765625f, 0.144531f, 0.101562f, 0.117188f}, {0.484375f, 0.257812f, 0.210938f, 0.910156f},
+ {0.835938f, 0.480469f, 0.433594f, 0.574219f}, {0.152344f, 0.628906f, 0.699219f, 0.269531f},
+ {0.214844f, 0.773438f, 0.089844f, 0.441406f}, {0.417969f, 0.992188f, 0.535156f, 0.152344f},
+ {0.898438f, 0.453125f, 0.667969f, 0.746094f}, {0.640625f, 0.867188f, 0.195312f, 0.207031f},
+ {0.148438f, 0.578125f, 0.507812f, 0.796875f}, {0.855469f, 0.921875f, 0.699219f, 0.027344f},
+ {0.097656f, 0.468750f, 0.960938f, 0.988281f}, {0.585938f, 0.625000f, 0.757812f, 0.382812f},
+ {0.160156f, 0.773438f, 0.300781f, 0.613281f}, {0.714844f, 0.183594f, 0.214844f, 0.875000f},
+ {0.070312f, 0.691406f, 0.980469f, 0.937500f}, {0.656250f, 0.375000f, 0.332031f, 0.125000f},
+ {0.746094f, 0.789062f, 0.621094f, 0.738281f}, {0.457031f, 0.585938f, 0.949219f, 0.605469f},
+ {0.335938f, 0.933594f, 0.179688f, 0.253906f}, {0.171875f, 0.625000f, 0.359375f, 0.523438f},
+ {0.386719f, 0.457031f, 0.730469f, 0.394531f}, {0.472656f, 0.003906f, 0.273438f, 0.039062f},
+ {0.281250f, 0.726562f, 0.457031f, 0.902344f}, {0.972656f, 0.488281f, 0.832031f, 0.093750f},
+ {0.617188f, 0.312500f, 0.406250f, 0.414062f}, {0.136719f, 0.660156f, 0.613281f, 0.687500f},
+ {0.562500f, 0.441406f, 0.226562f, 0.781250f}, {0.324219f, 0.375000f, 0.800781f, 0.074219f},
+ {0.871094f, 0.808594f, 0.082031f, 0.964844f}, {0.269531f, 0.089844f, 0.941406f, 0.699219f},
+ {0.011719f, 0.250000f, 0.503906f, 0.503906f}, {0.148438f, 0.671875f, 0.242188f, 0.300781f},
+ {0.707031f, 0.125000f, 0.679688f, 0.453125f}, {0.843750f, 0.296875f, 0.812500f, 0.835938f},
+ {0.417969f, 0.566406f, 0.187500f, 0.113281f}, {0.578125f, 0.226562f, 0.652344f, 0.285156f},
+ {0.675781f, 0.523438f, 0.718750f, 0.363281f}, {0.312500f, 0.894531f, 0.039062f, 0.691406f},
+ {0.406250f, 0.398438f, 0.605469f, 0.781250f}, {0.265625f, 0.246094f, 0.917969f, 0.851562f},
+ {0.570312f, 0.992188f, 0.843750f, 0.589844f}, {0.644531f, 0.605469f, 0.339844f, 0.714844f},
+ {0.003906f, 0.269531f, 0.531250f, 0.511719f}, {0.699219f, 0.652344f, 0.296875f, 0.277344f},
+ {0.312500f, 0.546875f, 0.710938f, 0.824219f}, {0.054688f, 0.152344f, 0.402344f, 0.238281f},
+ {0.667969f, 0.796875f, 0.914062f, 0.875000f}, {0.351562f, 0.281250f, 0.769531f, 0.351562f},
+ {0.730469f, 0.839844f, 0.691406f, 0.000000f}, {0.289062f, 0.894531f, 0.394531f, 0.632812f},
+ {0.152344f, 0.519531f, 0.113281f, 0.429688f}, {0.867188f, 0.988281f, 0.992188f, 0.582031f},
+ {0.210938f, 0.636719f, 0.480469f, 0.878906f}, {0.640625f, 0.171875f, 0.753906f, 0.984375f},
+ {0.023438f, 0.425781f, 0.371094f, 0.343750f}, {0.437500f, 0.039062f, 0.222656f, 0.539062f},
+ {0.257812f, 0.800781f, 0.835938f, 0.718750f}, {0.777344f, 0.300781f, 0.007812f, 0.964844f},
+ {0.484375f, 0.054688f, 0.984375f, 0.406250f}, {0.582031f, 0.140625f, 0.664062f, 0.617188f},
+ {0.398438f, 0.597656f, 0.906250f, 0.933594f}, {0.933594f, 0.019531f, 0.367188f, 0.726562f},
+ {0.312500f, 0.691406f, 0.601562f, 0.164062f}, {0.074219f, 0.320312f, 0.882812f, 0.964844f},
+ {0.589844f, 0.644531f, 0.679688f, 0.515625f}, {0.949219f, 0.964844f, 0.375000f, 0.742188f},
+ {0.281250f, 0.187500f, 0.910156f, 0.023438f}, {0.687500f, 0.886719f, 0.773438f, 0.640625f},
+ {0.597656f, 0.343750f, 0.292969f, 0.871094f}, {0.054688f, 0.089844f, 0.464844f, 0.535156f},
+ {0.808594f, 0.015625f, 0.839844f, 0.613281f}, {0.710938f, 0.675781f, 0.339844f, 0.902344f},
+ {0.484375f, 0.320312f, 0.429688f, 0.406250f}, {0.988281f, 0.062500f, 0.242188f, 0.687500f},
+ {0.664062f, 0.707031f, 0.375000f, 0.140625f}, {0.460938f, 0.128906f, 0.019531f, 0.480469f},
+ {0.960938f, 0.296875f, 0.453125f, 0.707031f}, {0.535156f, 0.980469f, 0.828125f, 0.246094f},
+ {0.894531f, 0.101562f, 0.578125f, 0.570312f}, {0.218750f, 0.273438f, 0.398438f, 0.335938f},
+ {0.113281f, 0.507812f, 0.000000f, 0.406250f}, {0.554688f, 0.160156f, 0.242188f, 0.890625f},
+ {0.828125f, 0.066406f, 0.671875f, 0.695312f}, {0.632812f, 0.398438f, 0.425781f, 0.148438f},
+ {0.730469f, 0.781250f, 0.785156f, 0.968750f}, {0.125000f, 0.273438f, 0.964844f, 0.281250f},
+ {0.820312f, 0.371094f, 0.191406f, 0.707031f}, {0.031250f, 0.218750f, 0.695312f, 0.585938f},
+ {0.507812f, 0.054688f, 0.511719f, 0.343750f}, {0.242188f, 0.890625f, 0.988281f, 0.167969f},
+ {0.734375f, 0.972656f, 0.730469f, 0.531250f}, {0.070312f, 0.011719f, 0.285156f, 0.316406f},
+ {0.460938f, 0.707031f, 0.394531f, 0.417969f}, {0.781250f, 0.546875f, 0.585938f, 0.234375f},
+ {0.402344f, 0.992188f, 0.769531f, 0.152344f}, {0.644531f, 0.738281f, 0.148438f, 0.773438f},
+ {0.757812f, 0.855469f, 0.976562f, 0.636719f}, {0.539062f, 0.050781f, 0.382812f, 0.390625f},
+ {0.246094f, 0.714844f, 0.296875f, 0.742188f}, {0.910156f, 0.972656f, 0.125000f, 0.886719f},
+ {0.128906f, 0.011719f, 0.960938f, 0.445312f}, {0.984375f, 0.828125f, 0.351562f, 0.554688f},
+ {0.054688f, 0.132812f, 0.511719f, 0.175781f}, {0.800781f, 0.464844f, 0.117188f, 0.398438f},
+ {0.921875f, 0.027344f, 0.257812f, 0.019531f}, {0.437500f, 0.191406f, 0.015625f, 0.441406f},
+ {0.203125f, 0.433594f, 0.785156f, 0.195312f}, {0.996094f, 0.953125f, 0.632812f, 0.917969f},
+ {0.257812f, 0.335938f, 0.144531f, 0.652344f}, {0.617188f, 0.703125f, 0.835938f, 0.101562f},
+ {0.941406f, 0.929688f, 0.265625f, 0.597656f}, {0.109375f, 0.503906f, 0.097656f, 0.468750f},
+ {0.195312f, 0.093750f, 0.957031f, 0.785156f}, {0.917969f, 0.714844f, 0.218750f, 0.906250f},
+ {0.761719f, 0.242188f, 0.648438f, 0.281250f}, {0.367188f, 0.019531f, 0.789062f, 0.195312f},
+ {0.707031f, 0.480469f, 0.253906f, 0.386719f}, {0.328125f, 0.828125f, 0.917969f, 0.757812f},
+ {0.960938f, 0.941406f, 0.667969f, 0.242188f}, {0.742188f, 0.601562f, 0.601562f, 0.105469f},
+ {0.347656f, 0.203125f, 0.496094f, 0.871094f}, {0.886719f, 0.687500f, 0.777344f, 0.152344f},
+ {0.046875f, 0.886719f, 0.089844f, 0.316406f}, {0.222656f, 0.957031f, 0.316406f, 0.773438f},
+ {0.625000f, 0.750000f, 0.527344f, 0.253906f}, {0.003906f, 0.277344f, 0.050781f, 0.382812f},
+ {0.660156f, 0.937500f, 0.250000f, 0.328125f}, {0.808594f, 0.078125f, 0.734375f, 0.625000f},
+ {0.437500f, 0.425781f, 0.460938f, 0.281250f}, {0.386719f, 0.738281f, 0.566406f, 0.394531f},
+ {0.039062f, 0.050781f, 0.035156f, 0.175781f}, {0.523438f, 0.546875f, 0.175781f, 0.996094f},
+ {0.925781f, 0.714844f, 0.957031f, 0.347656f}, {0.453125f, 0.843750f, 0.585938f, 0.039062f},
+ {0.109375f, 0.617188f, 0.003906f, 0.296875f}, {0.269531f, 0.406250f, 0.750000f, 0.109375f},
+ {0.390625f, 0.949219f, 0.933594f, 0.519531f}, {0.207031f, 0.222656f, 0.597656f, 0.238281f},
+ {0.332031f, 0.378906f, 0.640625f, 0.820312f}, {0.785156f, 0.898438f, 0.914062f, 0.906250f},
+ {0.054688f, 0.496094f, 0.523438f, 0.085938f}, {0.386719f, 0.417969f, 0.089844f, 0.777344f},
+ {0.304688f, 0.562500f, 0.148438f, 0.031250f}, {0.929688f, 0.925781f, 0.773438f, 0.519531f},
+ {0.414062f, 0.667969f, 0.468750f, 0.195312f}, {0.257812f, 0.738281f, 0.835938f, 0.800781f},
+ {0.972656f, 0.332031f, 0.519531f, 0.003906f}, {0.078125f, 0.847656f, 0.062500f, 0.359375f},
+ {0.882812f, 0.691406f, 0.566406f, 0.625000f}, {0.585938f, 0.148438f, 0.140625f, 0.777344f},
+ {0.214844f, 0.941406f, 0.652344f, 0.476562f}, {0.757812f, 0.824219f, 0.308594f, 0.238281f},
+ {0.402344f, 0.527344f, 0.113281f, 0.867188f}, {0.945312f, 0.585938f, 0.359375f, 0.937500f},
+ {0.839844f, 0.277344f, 0.062500f, 0.621094f}, {0.632812f, 0.167969f, 0.550781f, 0.804688f},
+ {0.222656f, 0.464844f, 0.894531f, 0.914062f}, {0.535156f, 0.882812f, 0.011719f, 0.566406f},
+ {0.886719f, 0.039062f, 0.312500f, 0.085938f}, {0.496094f, 0.394531f, 0.449219f, 0.875000f},
+ {0.085938f, 0.593750f, 0.097656f, 0.972656f}, {0.289062f, 0.343750f, 0.742188f, 0.011719f},
+ {0.031250f, 0.460938f, 0.894531f, 0.589844f}, {0.777344f, 0.156250f, 0.488281f, 0.222656f},
+ {0.468750f, 0.679688f, 0.835938f, 0.042969f}, {0.195312f, 0.281250f, 0.230469f, 0.992188f},
+ {0.718750f, 0.589844f, 0.796875f, 0.109375f}, {0.492188f, 0.921875f, 0.667969f, 0.667969f},
+ {0.097656f, 0.667969f, 0.390625f, 0.292969f}, {0.835938f, 0.871094f, 0.582031f, 0.871094f},
+ {0.378906f, 0.097656f, 0.878906f, 0.128906f}, {0.753906f, 0.765625f, 0.078125f, 0.558594f},
+ {0.503906f, 0.039062f, 0.937500f, 0.761719f}, {0.148438f, 0.207031f, 0.515625f, 0.425781f},
+ {0.816406f, 0.421875f, 0.593750f, 0.996094f}, {0.390625f, 0.367188f, 0.335938f, 0.136719f},
+ {0.550781f, 0.656250f, 0.441406f, 0.226562f}, {0.488281f, 0.144531f, 0.828125f, 0.523438f},
+ {0.605469f, 0.593750f, 0.531250f, 0.734375f}, {0.035156f, 0.390625f, 0.347656f, 0.671875f},
+ {0.464844f, 0.742188f, 0.019531f, 0.023438f}, {0.812500f, 0.265625f, 0.421875f, 0.492188f},
+ {0.164062f, 0.359375f, 0.101562f, 0.605469f}, {0.507812f, 0.121094f, 0.171875f, 0.800781f},
+ {0.605469f, 0.503906f, 0.933594f, 0.453125f}, {0.082031f, 0.250000f, 0.261719f, 0.203125f},
+ {0.968750f, 0.550781f, 0.460938f, 0.570312f}, {0.718750f, 0.410156f, 0.628906f, 0.054688f},
+ {0.835938f, 0.105469f, 0.710938f, 0.468750f}, {0.359375f, 0.457031f, 0.421875f, 0.894531f},
+ {0.250000f, 0.875000f, 0.968750f, 0.015625f}, {0.996094f, 0.210938f, 0.074219f, 0.855469f},
+ {0.179688f, 0.785156f, 0.304688f, 0.074219f}, {0.714844f, 0.855469f, 0.832031f, 0.804688f},
+ {0.230469f, 0.296875f, 0.500000f, 0.488281f}, {0.859375f, 0.394531f, 0.253906f, 0.222656f},
+ {0.324219f, 0.230469f, 0.640625f, 0.679688f}, {0.765625f, 0.511719f, 0.390625f, 0.820312f},
+ {0.179688f, 0.269531f, 0.222656f, 0.726562f}, {0.843750f, 0.121094f, 0.128906f, 0.468750f},
+ {0.609375f, 0.781250f, 0.859375f, 0.960938f}, {0.035156f, 0.531250f, 0.066406f, 0.335938f},
+ {0.734375f, 0.855469f, 0.167969f, 0.578125f}, {0.261719f, 0.023438f, 0.324219f, 0.175781f},
+ {0.867188f, 0.652344f, 0.875000f, 0.304688f}, {0.632812f, 0.746094f, 0.683594f, 0.371094f},
+ {0.183594f, 0.214844f, 0.273438f, 0.851562f}, {0.773438f, 0.832031f, 0.921875f, 0.667969f},
+ {0.589844f, 0.011719f, 0.703125f, 0.992188f}, {0.691406f, 0.433594f, 0.113281f, 0.300781f},
+ {0.003906f, 0.246094f, 0.933594f, 0.457031f}, {0.511719f, 0.984375f, 0.320312f, 0.843750f},
+ {0.300781f, 0.496094f, 0.886719f, 0.203125f}, {0.433594f, 0.578125f, 0.390625f, 0.539062f},
+ {0.914062f, 0.648438f, 0.007812f, 0.121094f}, {0.085938f, 0.421875f, 0.867188f, 0.824219f},
+ {0.683594f, 0.117188f, 0.753906f, 0.015625f}, {0.304688f, 0.750000f, 0.210938f, 0.460938f},
+ {0.113281f, 0.355469f, 0.828125f, 0.113281f}, {0.367188f, 0.843750f, 0.472656f, 0.718750f},
+ {0.988281f, 0.621094f, 0.167969f, 0.035156f}, {0.050781f, 0.308594f, 0.710938f, 0.363281f},
+ {0.171875f, 0.144531f, 0.871094f, 0.667969f}, {0.929688f, 0.515625f, 0.648438f, 0.265625f},
+ {0.363281f, 0.781250f, 0.542969f, 0.183594f}, {0.859375f, 0.203125f, 0.226562f, 0.335938f},
+ {0.609375f, 0.878906f, 0.574219f, 0.496094f}, {0.386719f, 0.621094f, 0.003906f, 0.800781f},
+ {0.644531f, 0.378906f, 0.628906f, 0.625000f}, {0.871094f, 0.757812f, 0.437500f, 0.324219f},
+ {0.238281f, 0.082031f, 0.160156f, 0.750000f}, {0.355469f, 0.535156f, 0.984375f, 0.519531f},
+ {0.691406f, 0.308594f, 0.734375f, 0.960938f}, {0.167969f, 0.722656f, 0.480469f, 0.628906f},
+ {0.550781f, 0.390625f, 0.179688f, 0.792969f}, {0.070312f, 0.511719f, 0.441406f, 0.347656f},
+ {0.906250f, 0.843750f, 0.363281f, 0.023438f}, {0.589844f, 0.636719f, 0.203125f, 0.289062f},
+ {0.449219f, 0.070312f, 0.007812f, 0.695312f}, {0.238281f, 0.566406f, 0.746094f, 0.382812f},
+ {0.683594f, 0.953125f, 0.492188f, 0.832031f}, {0.855469f, 0.324219f, 0.062500f, 0.328125f},
+ {0.093750f, 0.812500f, 0.156250f, 0.093750f}, {0.253906f, 0.917969f, 0.609375f, 0.929688f},
+ {0.925781f, 0.550781f, 0.710938f, 0.812500f}, {0.574219f, 0.082031f, 0.843750f, 0.304688f},
+ {0.109375f, 0.894531f, 0.308594f, 0.066406f}, {0.234375f, 0.718750f, 0.550781f, 0.941406f},
+ {0.683594f, 0.851562f, 0.699219f, 0.371094f}, {0.410156f, 0.773438f, 0.402344f, 0.636719f},
+ {0.308594f, 0.335938f, 0.136719f, 0.843750f}, {0.519531f, 0.175781f, 0.820312f, 0.687500f},
+ {0.109375f, 0.820312f, 0.292969f, 0.527344f}, {0.457031f, 0.539062f, 0.183594f, 0.191406f},
+ {0.742188f, 0.617188f, 0.847656f, 0.750000f}, {0.539062f, 0.363281f, 0.617188f, 0.566406f},
+ {0.085938f, 0.500000f, 0.140625f, 0.449219f}, {0.890625f, 0.578125f, 0.937500f, 0.699219f},
+ {0.632812f, 0.113281f, 0.664062f, 0.917969f}, {0.128906f, 0.660156f, 0.105469f, 0.582031f},
+ {0.375000f, 0.933594f, 0.812500f, 0.410156f}, {0.652344f, 0.160156f, 0.882812f, 0.132812f},
+ {0.503906f, 0.820312f, 0.691406f, 0.253906f}, {0.941406f, 0.457031f, 0.300781f, 0.851562f},
+ {0.550781f, 0.734375f, 0.546875f, 0.656250f}, {0.902344f, 0.175781f, 0.488281f, 0.000000f},
+ {0.437500f, 0.593750f, 0.730469f, 0.753906f}, {0.125000f, 0.261719f, 0.785156f, 0.437500f},
+ {0.570312f, 0.816406f, 0.203125f, 0.632812f}, {0.500000f, 0.074219f, 0.417969f, 0.949219f},
+ {0.031250f, 0.351562f, 0.632812f, 0.472656f}, {0.839844f, 0.601562f, 0.343750f, 0.152344f},
+ {0.136719f, 0.128906f, 0.187500f, 0.753906f}, {0.476562f, 0.886719f, 0.597656f, 0.101562f},
+ {0.371094f, 0.550781f, 0.265625f, 0.578125f}, {0.792969f, 0.187500f, 0.722656f, 0.925781f},
+ {0.164062f, 0.089844f, 0.203125f, 0.070312f}, {0.660156f, 0.035156f, 0.617188f, 0.417969f},
+ {0.359375f, 0.324219f, 0.476562f, 0.671875f}, {0.539062f, 0.871094f, 0.542969f, 0.300781f},
+ {0.812500f, 0.195312f, 0.925781f, 0.750000f}, {0.171875f, 0.675781f, 0.433594f, 0.394531f},
+ {0.492188f, 0.066406f, 0.597656f, 0.210938f}, {0.710938f, 0.507812f, 0.675781f, 0.281250f},
+ {0.574219f, 0.765625f, 0.964844f, 0.851562f}, {0.808594f, 0.226562f, 0.250000f, 0.468750f},
+ {0.316406f, 0.925781f, 0.367188f, 0.757812f}, {0.675781f, 0.656250f, 0.816406f, 0.429688f},
+ {0.214844f, 0.265625f, 0.062500f, 0.539062f}, {0.457031f, 0.953125f, 0.937500f, 0.722656f},
+ {0.972656f, 0.101562f, 0.410156f, 0.132812f}, {0.070312f, 0.800781f, 0.320312f, 0.929688f},
+ {0.320312f, 0.500000f, 0.769531f, 0.261719f}, {0.527344f, 0.218750f, 0.085938f, 0.472656f},
+ {0.015625f, 0.851562f, 0.550781f, 0.820312f}, {0.960938f, 0.359375f, 0.285156f, 0.210938f},
+ {0.609375f, 0.144531f, 0.062500f, 0.371094f}, {0.292969f, 0.812500f, 0.925781f, 0.058594f},
+ {0.664062f, 0.226562f, 0.308594f, 0.242188f}, {0.863281f, 0.582031f, 0.671875f, 0.488281f},
+ {0.332031f, 0.292969f, 0.765625f, 0.945312f}, {0.023438f, 0.910156f, 0.988281f, 0.183594f},
+ {0.726562f, 0.734375f, 0.621094f, 0.531250f}, {0.968750f, 0.261719f, 0.898438f, 0.902344f},
+ {0.058594f, 0.851562f, 0.675781f, 0.046875f}, {0.320312f, 0.187500f, 0.292969f, 0.609375f},
+ {0.781250f, 0.449219f, 0.949219f, 0.167969f}, {0.410156f, 0.054688f, 0.882812f, 0.441406f},
+ {0.667969f, 0.210938f, 0.207031f, 0.542969f}, {0.296875f, 0.667969f, 0.468750f, 0.855469f},
+ {0.871094f, 0.417969f, 0.980469f, 0.148438f}, {0.761719f, 0.164062f, 0.765625f, 0.699219f},
+ {0.914062f, 0.460938f, 0.035156f, 0.511719f}, {0.148438f, 0.027344f, 0.871094f, 0.007812f},
+ {0.800781f, 0.929688f, 0.210938f, 0.988281f}, {0.199219f, 0.675781f, 0.945312f, 0.128906f},
+ {0.574219f, 0.230469f, 0.027344f, 0.796875f}, {0.875000f, 0.980469f, 0.781250f, 0.648438f},
+ {0.140625f, 0.144531f, 0.542969f, 0.968750f}, {0.609375f, 0.003906f, 0.359375f, 0.238281f},
+ {0.335938f, 0.683594f, 0.222656f, 0.148438f}, {0.476562f, 0.171875f, 0.761719f, 0.308594f},
+ {0.757812f, 0.902344f, 0.402344f, 0.105469f}, {0.562500f, 0.445312f, 0.324219f, 0.757812f},
+ {0.972656f, 0.039062f, 0.527344f, 0.050781f}, {0.019531f, 0.570312f, 0.054688f, 0.933594f},
+ {0.296875f, 0.964844f, 0.457031f, 0.562500f}, {0.695312f, 0.351562f, 0.984375f, 0.183594f},
+ {0.078125f, 0.636719f, 0.800781f, 0.382812f}, {0.347656f, 0.082031f, 0.402344f, 0.093750f},
+ {0.804688f, 0.988281f, 0.257812f, 0.921875f}, {0.191406f, 0.316406f, 0.101562f, 0.535156f},
+ {0.707031f, 0.453125f, 0.570312f, 0.722656f}, {0.937500f, 0.160156f, 0.996094f, 0.050781f},
+ {0.363281f, 0.960938f, 0.023438f, 0.230469f}, {0.671875f, 0.480469f, 0.496094f, 0.414062f},
+ {0.320312f, 0.296875f, 0.859375f, 0.554688f}, {0.949219f, 0.644531f, 0.386719f, 0.261719f},
+ {0.867188f, 0.757812f, 0.035156f, 0.648438f}, {0.226562f, 0.359375f, 0.460938f, 0.726562f},
+ {0.714844f, 0.804688f, 0.816406f, 0.328125f}, {0.996094f, 0.914062f, 0.980469f, 0.886719f},
+ {0.023438f, 0.257812f, 0.250000f, 0.976562f}, {0.265625f, 0.773438f, 0.789062f, 0.171875f},
+ {0.605469f, 0.472656f, 0.046875f, 0.636719f}, {0.449219f, 0.945312f, 0.273438f, 0.957031f},
+ {0.902344f, 0.250000f, 0.128906f, 0.582031f}, {0.000000f, 0.906250f, 0.332031f, 0.519531f},
+ {0.273438f, 0.101562f, 0.042969f, 0.175781f}, {0.421875f, 0.386719f, 0.515625f, 0.988281f},
+ {0.742188f, 0.820312f, 0.605469f, 0.605469f}, {0.589844f, 0.453125f, 0.132812f, 0.066406f},
+ {0.128906f, 0.066406f, 0.285156f, 0.910156f}, {0.800781f, 0.550781f, 0.714844f, 0.835938f},
+ {0.699219f, 0.421875f, 0.855469f, 0.398438f}, {0.175781f, 0.304688f, 0.175781f, 0.664062f},
+ {0.738281f, 0.039062f, 0.683594f, 0.074219f}, {0.832031f, 0.984375f, 0.898438f, 0.867188f},
+ {0.574219f, 0.437500f, 0.363281f, 0.144531f}, {0.421875f, 0.640625f, 0.859375f, 0.597656f},
+ {0.898438f, 0.937500f, 0.640625f, 0.906250f}, {0.125000f, 0.484375f, 0.214844f, 0.449219f},
+ {0.472656f, 0.000000f, 0.808594f, 0.675781f}, {0.218750f, 0.960938f, 0.109375f, 0.847656f},
+ {0.425781f, 0.167969f, 0.539062f, 0.585938f}, {0.800781f, 0.460938f, 0.257812f, 0.734375f},
+ {0.289062f, 0.125000f, 0.402344f, 0.070312f}, {0.179688f, 0.777344f, 0.125000f, 0.648438f},
+ {0.890625f, 0.011719f, 0.187500f, 0.480469f}, {0.628906f, 0.492188f, 0.558594f, 0.761719f},
+ {0.144531f, 0.691406f, 0.769531f, 0.957031f}, {0.957031f, 0.765625f, 0.378906f, 0.351562f},
+ {0.187500f, 0.292969f, 0.074219f, 0.222656f}, {0.496094f, 0.957031f, 0.589844f, 0.652344f},
+ {0.378906f, 0.597656f, 0.128906f, 0.410156f}, {0.007812f, 0.316406f, 0.269531f, 0.273438f},
+ {0.449219f, 0.644531f, 0.367188f, 0.777344f}, {0.542969f, 0.093750f, 0.648438f, 0.234375f},
+ {0.660156f, 0.582031f, 0.503906f, 0.335938f}, {0.941406f, 0.382812f, 0.585938f, 0.421875f},
+ {0.031250f, 0.042969f, 0.117188f, 0.285156f}, {0.414062f, 0.304688f, 0.679688f, 0.082031f},
+ {0.781250f, 0.722656f, 0.484375f, 0.351562f}, {0.277344f, 0.800781f, 0.875000f, 0.496094f},
+ {0.914062f, 0.265625f, 0.007812f, 0.816406f}, {0.406250f, 0.968750f, 0.445312f, 0.628906f},
+ {0.066406f, 0.339844f, 0.710938f, 0.375000f}, {0.261719f, 0.746094f, 0.968750f, 0.878906f},
+ {0.203125f, 0.800781f, 0.160156f, 0.511719f}, {0.812500f, 0.312500f, 0.613281f, 0.328125f},
+ {0.414062f, 0.691406f, 0.359375f, 0.445312f}, {0.148438f, 0.007812f, 0.179688f, 0.625000f},
+ {0.238281f, 0.226562f, 0.027344f, 0.785156f}, {0.476562f, 0.507812f, 0.664062f, 0.875000f},
+ {0.648438f, 0.390625f, 0.945312f, 0.210938f}, {0.972656f, 0.710938f, 0.367188f, 0.269531f},
+ {0.285156f, 0.558594f, 0.464844f, 0.128906f}, {0.082031f, 0.679688f, 0.816406f, 0.832031f},
+ {0.457031f, 0.769531f, 0.078125f, 0.601562f}, {0.242188f, 0.867188f, 0.738281f, 0.898438f},
+ {0.750000f, 0.394531f, 0.554688f, 0.019531f}, {0.101562f, 0.042969f, 0.968750f, 0.367188f},
+ {0.621094f, 0.957031f, 0.769531f, 0.820312f}, {0.046875f, 0.449219f, 0.660156f, 0.492188f},
+ {0.562500f, 0.613281f, 0.089844f, 0.234375f}, {0.480469f, 0.710938f, 0.335938f, 0.027344f},
+ {0.851562f, 0.402344f, 0.156250f, 0.566406f}, {0.144531f, 0.554688f, 0.691406f, 0.507812f},
+ {0.957031f, 0.023438f, 0.378906f, 0.355469f}, {0.750000f, 0.605469f, 0.640625f, 0.054688f},
+ {0.207031f, 0.722656f, 0.941406f, 0.878906f}, {0.644531f, 0.429688f, 0.847656f, 0.660156f},
+ {0.847656f, 0.558594f, 0.773438f, 0.328125f}, {0.089844f, 0.691406f, 0.425781f, 0.125000f},
+ {0.480469f, 0.000000f, 0.195312f, 0.816406f}, {0.960938f, 0.332031f, 0.992188f, 0.226562f},
+ {0.019531f, 0.750000f, 0.457031f, 0.304688f}, {0.546875f, 0.175781f, 0.503906f, 0.027344f},
+ {0.253906f, 0.703125f, 0.046875f, 0.566406f}, {0.433594f, 0.898438f, 0.601562f, 0.199219f},
+ {0.925781f, 0.582031f, 0.972656f, 0.359375f}, {0.136719f, 0.687500f, 0.250000f, 0.699219f},
+ {0.269531f, 0.183594f, 0.468750f, 0.417969f}, {0.792969f, 0.066406f, 0.031250f, 0.003906f},
+ {0.050781f, 0.566406f, 0.578125f, 0.718750f}, {0.710938f, 0.273438f, 0.414062f, 0.093750f},
+ {0.769531f, 0.695312f, 0.500000f, 0.300781f}, {0.976562f, 0.792969f, 0.867188f, 0.152344f},
+ {0.093750f, 0.613281f, 0.054688f, 0.410156f}, {0.652344f, 0.339844f, 0.722656f, 0.808594f},
+ {0.570312f, 0.527344f, 0.804688f, 0.214844f}, {0.480469f, 0.398438f, 0.324219f, 0.312500f},
+ {0.371094f, 0.996094f, 0.851562f, 0.867188f}, {0.531250f, 0.621094f, 0.429688f, 0.250000f},
+ {0.441406f, 0.117188f, 0.039062f, 0.574219f}, {0.718750f, 0.355469f, 0.250000f, 0.703125f},
+ {0.843750f, 0.867188f, 0.515625f, 0.050781f}, {0.078125f, 0.511719f, 0.816406f, 0.976562f},
+ {0.621094f, 0.000000f, 0.667969f, 0.589844f}, {0.992188f, 0.800781f, 0.441406f, 0.882812f},
+ {0.277344f, 0.988281f, 0.898438f, 0.093750f}, {0.058594f, 0.277344f, 0.070312f, 0.722656f},
+ {0.351562f, 0.867188f, 0.746094f, 0.914062f}, {0.246094f, 0.507812f, 0.343750f, 0.601562f},
+ {0.707031f, 0.433594f, 0.996094f, 0.875000f}, {0.972656f, 0.640625f, 0.394531f, 0.406250f},
+ {0.664062f, 0.894531f, 0.253906f, 0.710938f}, {0.195312f, 0.406250f, 0.640625f, 0.906250f},
+ {0.015625f, 0.480469f, 0.921875f, 0.035156f}, {0.800781f, 0.070312f, 0.582031f, 0.953125f},
+ {0.679688f, 0.628906f, 0.062500f, 0.199219f}, {0.855469f, 0.218750f, 0.273438f, 0.265625f},
+ {0.449219f, 0.492188f, 0.792969f, 0.664062f}, {0.714844f, 0.101562f, 0.906250f, 0.808594f},
+ {0.578125f, 0.894531f, 0.714844f, 0.980469f}, {0.957031f, 0.421875f, 0.246094f, 0.058594f},
+ {0.757812f, 0.851562f, 0.578125f, 0.304688f}, {0.886719f, 0.789062f, 0.839844f, 0.488281f},
+ {0.000000f, 0.925781f, 0.140625f, 0.679688f}, {0.523438f, 0.121094f, 0.617188f, 0.355469f},
+ {0.406250f, 0.886719f, 0.710938f, 0.984375f}, {0.769531f, 0.035156f, 0.285156f, 0.503906f},
+ {0.890625f, 0.242188f, 0.906250f, 0.292969f}, {0.574219f, 0.531250f, 0.242188f, 0.703125f},
+ {0.171875f, 0.179688f, 0.121094f, 0.769531f}, {0.527344f, 0.718750f, 0.308594f, 0.968750f},
+ {0.433594f, 0.226562f, 0.171875f, 0.171875f}, {0.281250f, 0.105469f, 0.523438f, 0.125000f},
+ {0.761719f, 0.285156f, 0.417969f, 0.402344f}, {0.328125f, 0.515625f, 0.574219f, 0.691406f},
+ {0.406250f, 0.164062f, 0.910156f, 0.792969f}, {0.652344f, 0.996094f, 0.101562f, 0.109375f},
+ {0.062500f, 0.121094f, 0.507812f, 0.832031f}, {0.320312f, 0.378906f, 0.742188f, 0.242188f},
+ {0.390625f, 0.316406f, 0.175781f, 0.703125f}, {0.527344f, 0.156250f, 0.558594f, 0.417969f},
+ {0.933594f, 0.972656f, 0.085938f, 0.000000f}, {0.160156f, 0.199219f, 0.722656f, 0.734375f},
+ {0.242188f, 0.589844f, 0.898438f, 0.378906f}, {0.386719f, 0.941406f, 0.664062f, 0.503906f},
+ {0.652344f, 0.851562f, 0.339844f, 0.695312f}, {0.910156f, 0.628906f, 0.765625f, 0.953125f},
+ {0.343750f, 0.367188f, 0.218750f, 0.460938f}, {0.503906f, 0.136719f, 0.386719f, 0.769531f},
+ {0.078125f, 0.816406f, 0.117188f, 0.976562f}, {0.632812f, 0.257812f, 0.523438f, 0.511719f},
+ {0.378906f, 0.335938f, 0.722656f, 0.281250f}, {0.203125f, 0.769531f, 0.789062f, 0.558594f},
+ {0.511719f, 0.882812f, 0.144531f, 0.953125f}, {0.347656f, 0.117188f, 0.695312f, 0.769531f},
+ {0.253906f, 0.371094f, 0.964844f, 0.523438f}, {0.542969f, 0.425781f, 0.355469f, 0.878906f},
+ {0.382812f, 0.082031f, 0.167969f, 0.109375f}, {0.910156f, 0.894531f, 0.582031f, 0.363281f},
+ {0.132812f, 0.707031f, 0.472656f, 0.980469f}, {0.765625f, 0.210938f, 0.023438f, 0.445312f},
+ {0.000000f, 0.304688f, 0.976562f, 0.148438f}, {0.820312f, 0.542969f, 0.695312f, 0.023438f},
+ {0.230469f, 0.925781f, 0.625000f, 0.398438f}, {0.042969f, 0.429688f, 0.902344f, 0.792969f},
+ {0.554688f, 0.152344f, 0.738281f, 0.117188f}, {0.339844f, 0.730469f, 0.320312f, 0.480469f},
+ {0.804688f, 0.234375f, 0.960938f, 0.187500f}, {0.714844f, 0.375000f, 0.183594f, 0.347656f},
+ {0.578125f, 0.492188f, 0.539062f, 0.457031f}, {0.859375f, 0.203125f, 0.230469f, 0.550781f},
+ {0.769531f, 0.730469f, 0.832031f, 0.175781f}, {0.484375f, 0.789062f, 0.453125f, 0.031250f},
+ {0.308594f, 0.953125f, 0.718750f, 0.746094f}, {0.066406f, 0.554688f, 0.890625f, 0.214844f},
+ {0.378906f, 0.105469f, 0.085938f, 0.121094f}, {0.503906f, 0.195312f, 0.316406f, 0.605469f},
+ {0.949219f, 0.867188f, 0.167969f, 0.429688f}, {0.546875f, 0.531250f, 0.824219f, 0.542969f},
+ {0.316406f, 0.832031f, 0.207031f, 0.718750f}, {0.117188f, 0.390625f, 0.554688f, 0.460938f},
+ {0.515625f, 0.152344f, 0.492188f, 0.011719f}, {0.906250f, 0.597656f, 0.117188f, 0.156250f},
+ {0.046875f, 0.261719f, 0.417969f, 0.234375f}, {0.625000f, 0.542969f, 0.773438f, 0.707031f},
+ {0.386719f, 0.667969f, 0.476562f, 0.121094f}, {0.308594f, 0.062500f, 0.320312f, 0.593750f},
+ {0.167969f, 0.285156f, 0.886719f, 0.417969f}, {0.601562f, 0.199219f, 0.042969f, 0.777344f},
+ {0.835938f, 0.425781f, 0.187500f, 0.082031f}, {0.214844f, 0.343750f, 0.539062f, 0.648438f},
+ {0.023438f, 0.632812f, 0.398438f, 0.390625f}, {0.640625f, 0.093750f, 0.671875f, 0.195312f},
+ {0.984375f, 0.820312f, 0.445312f, 0.074219f}, {0.382812f, 0.921875f, 0.617188f, 0.449219f},
+ {0.910156f, 0.492188f, 0.828125f, 0.531250f}, {0.832031f, 0.683594f, 0.941406f, 0.859375f},
+ {0.125000f, 0.859375f, 0.046875f, 0.941406f}, {0.929688f, 0.058594f, 0.750000f, 0.617188f},
+ {0.218750f, 0.816406f, 0.835938f, 0.273438f}, {0.730469f, 0.222656f, 0.296875f, 0.441406f},
+ {0.574219f, 0.652344f, 0.441406f, 0.921875f}, {0.832031f, 0.886719f, 0.878906f, 0.484375f},
+ {0.117188f, 0.835938f, 0.226562f, 0.085938f}, {0.773438f, 0.050781f, 0.476562f, 0.781250f},
+ {0.343750f, 0.789062f, 0.292969f, 0.929688f}, {0.695312f, 0.468750f, 0.382812f, 0.535156f},
+ {0.882812f, 0.281250f, 0.019531f, 0.898438f}, {0.785156f, 0.125000f, 0.804688f, 0.160156f},
+ {0.304688f, 0.507812f, 0.101562f, 0.640625f}, {0.093750f, 0.230469f, 0.546875f, 0.105469f},
+ {0.839844f, 0.968750f, 0.929688f, 0.253906f}, {0.593750f, 0.476562f, 0.652344f, 0.605469f},
+ {0.773438f, 0.011719f, 0.816406f, 0.046875f}, {0.976562f, 0.527344f, 0.304688f, 0.890625f},
+ {0.464844f, 0.941406f, 0.187500f, 0.183594f}, {0.660156f, 0.460938f, 0.921875f, 0.804688f},
+ {0.875000f, 0.718750f, 0.328125f, 0.335938f}, {0.933594f, 0.175781f, 0.246094f, 0.214844f},
+ {0.011719f, 0.636719f, 0.000000f, 0.640625f}, {0.628906f, 0.980469f, 0.632812f, 0.925781f},
+ {0.187500f, 0.246094f, 0.281250f, 0.261719f}, {0.835938f, 0.046875f, 0.921875f, 0.617188f},
+ {0.273438f, 0.832031f, 0.660156f, 0.542969f}, {0.691406f, 0.648438f, 0.226562f, 0.726562f},
+ {0.988281f, 0.882812f, 0.527344f, 0.675781f}, {0.597656f, 0.039062f, 0.351562f, 0.921875f},
+ {0.304688f, 0.253906f, 0.152344f, 0.515625f}, {0.902344f, 0.804688f, 0.484375f, 0.277344f},
+ {0.656250f, 0.632812f, 0.113281f, 0.898438f}, {0.257812f, 0.078125f, 0.410156f, 0.742188f},
+ {0.132812f, 0.566406f, 0.000000f, 0.828125f}, {0.210938f, 0.914062f, 0.781250f, 0.042969f},
+ {0.394531f, 0.675781f, 0.613281f, 0.949219f}, {0.171875f, 0.117188f, 0.929688f, 0.664062f},
+ {0.910156f, 0.351562f, 0.300781f, 0.808594f}, {0.605469f, 0.160156f, 0.160156f, 0.503906f},
+ {0.214844f, 0.695312f, 0.597656f, 0.980469f}, {0.550781f, 0.246094f, 0.207031f, 0.562500f},
+ {0.847656f, 0.335938f, 0.789062f, 0.851562f}, {0.152344f, 0.601562f, 0.519531f, 0.277344f},
+ {0.722656f, 0.738281f, 0.742188f, 0.171875f}, {0.226562f, 0.296875f, 0.375000f, 0.777344f},
+ {0.625000f, 0.031250f, 0.683594f, 0.078125f}, {0.984375f, 0.917969f, 0.867188f, 0.851562f},
+ {0.171875f, 0.710938f, 0.339844f, 0.585938f}, {0.351562f, 0.996094f, 0.011719f, 0.746094f},
+ {0.277344f, 0.765625f, 0.636719f, 0.406250f}, {0.101562f, 0.183594f, 0.964844f, 0.890625f},
+ {0.539062f, 0.332031f, 0.089844f, 0.542969f}, {0.847656f, 0.472656f, 0.218750f, 0.960938f},
+ {0.722656f, 0.621094f, 0.515625f, 0.015625f}, {0.109375f, 0.750000f, 0.750000f, 0.859375f},
+ {0.355469f, 0.835938f, 0.347656f, 0.167969f}, {0.679688f, 0.976562f, 0.949219f, 0.562500f},
+ {0.496094f, 0.468750f, 0.148438f, 0.812500f}, {0.292969f, 0.281250f, 0.789062f, 0.945312f},
+ {0.789062f, 0.585938f, 0.882812f, 0.335938f}, {0.062500f, 0.324219f, 0.007812f, 0.679688f},
+ {0.695312f, 0.410156f, 0.214844f, 0.597656f}, {0.191406f, 0.140625f, 0.371094f, 0.292969f},
+ {0.636719f, 0.933594f, 0.261719f, 0.054688f}, {0.078125f, 0.351562f, 0.675781f, 0.753906f},
+ {0.515625f, 0.585938f, 0.191406f, 0.195312f}, {0.886719f, 0.742188f, 0.625000f, 0.332031f},
+ {0.441406f, 0.457031f, 0.988281f, 0.726562f}, {0.253906f, 0.265625f, 0.015625f, 0.156250f},
+ {0.980469f, 0.511719f, 0.355469f, 0.570312f}, {0.031250f, 0.628906f, 0.824219f, 0.296875f},
+ {0.617188f, 0.347656f, 0.949219f, 0.203125f}, {0.566406f, 0.875000f, 0.636719f, 0.621094f},
+ {0.058594f, 0.664062f, 0.246094f, 0.257812f}, {0.515625f, 0.734375f, 0.574219f, 0.437500f},
+ {0.183594f, 0.406250f, 0.167969f, 0.796875f}, {0.414062f, 0.062500f, 0.273438f, 0.343750f},
+ {0.703125f, 0.292969f, 0.843750f, 0.855469f}, {0.222656f, 0.781250f, 0.011719f, 0.152344f},
+ {0.023438f, 0.648438f, 0.437500f, 0.312500f}, {0.292969f, 0.382812f, 0.582031f, 0.738281f},
+ {0.726562f, 0.851562f, 0.074219f, 0.628906f}, {0.066406f, 0.050781f, 0.406250f, 0.121094f},
+ {0.171875f, 0.300781f, 0.843750f, 0.464844f}, {0.585938f, 0.542969f, 0.539062f, 0.386719f},
+ {0.804688f, 0.839844f, 0.750000f, 0.039062f}, {0.453125f, 0.500000f, 0.882812f, 0.707031f},
+ {0.722656f, 0.757812f, 0.445312f, 0.484375f}, {0.066406f, 0.578125f, 0.382812f, 0.007812f},
+ {0.429688f, 0.449219f, 0.835938f, 0.789062f}, {0.347656f, 0.109375f, 0.085938f, 0.089844f},
+ {0.203125f, 0.378906f, 0.781250f, 0.343750f}, {0.085938f, 0.742188f, 0.269531f, 0.835938f},
+ {0.742188f, 0.585938f, 0.929688f, 0.179688f}, {0.394531f, 0.191406f, 0.839844f, 0.632812f},
+ {0.964844f, 0.960938f, 0.210938f, 0.328125f}, {0.515625f, 0.464844f, 0.570312f, 0.539062f},
+ {0.460938f, 0.828125f, 0.710938f, 0.226562f}, {0.941406f, 0.042969f, 0.351562f, 0.613281f},
+ {0.671875f, 0.425781f, 0.085938f, 0.386719f}, {0.085938f, 0.882812f, 0.484375f, 0.128906f},
+ {0.437500f, 0.617188f, 0.660156f, 0.253906f}, {0.125000f, 0.058594f, 0.015625f, 0.324219f},
+ {0.929688f, 0.468750f, 0.550781f, 0.632812f}, {0.792969f, 0.824219f, 0.425781f, 0.468750f},
+ {0.636719f, 0.023438f, 0.949219f, 0.007812f}, {0.335938f, 0.937500f, 0.046875f, 0.667969f},
+ {0.882812f, 0.437500f, 0.468750f, 0.339844f}, {0.437500f, 0.125000f, 0.976562f, 0.976562f},
+ {0.085938f, 0.671875f, 0.082031f, 0.394531f}, {0.398438f, 0.562500f, 0.433594f, 0.308594f},
+ {0.773438f, 0.351562f, 0.937500f, 0.925781f}, {0.664062f, 0.453125f, 0.742188f, 0.523438f},
+ {0.871094f, 0.046875f, 0.289062f, 0.351562f}, {0.792969f, 0.871094f, 0.847656f, 0.832031f},
+ {0.195312f, 0.132812f, 0.378906f, 0.261719f}, {0.425781f, 0.964844f, 0.687500f, 0.187500f},
+ {0.996094f, 0.570312f, 0.933594f, 0.734375f}, {0.253906f, 0.011719f, 0.429688f, 0.316406f},
+ {0.906250f, 0.519531f, 0.820312f, 0.457031f}, {0.140625f, 0.132812f, 0.644531f, 0.250000f},
+ {0.820312f, 0.667969f, 0.074219f, 0.035156f}, {0.089844f, 0.902344f, 0.500000f, 0.488281f},
+ {0.449219f, 0.781250f, 0.324219f, 0.871094f}, {0.339844f, 0.000000f, 0.562500f, 0.230469f},
+ {0.246094f, 0.546875f, 0.695312f, 0.101562f}, {0.578125f, 0.644531f, 0.898438f, 0.804688f},
+ {0.460938f, 0.757812f, 0.496094f, 0.367188f}, {0.796875f, 0.437500f, 0.117188f, 0.476562f},
+ {0.359375f, 0.304688f, 0.347656f, 0.984375f}, {0.015625f, 0.906250f, 0.542969f, 0.015625f},
+ {0.175781f, 0.007812f, 0.074219f, 0.605469f}, {0.660156f, 0.703125f, 0.718750f, 0.882812f},
+ {0.496094f, 0.183594f, 0.582031f, 0.382812f}, {0.410156f, 0.761719f, 0.687500f, 0.968750f},
+ {0.199219f, 0.093750f, 0.117188f, 0.460938f}, {0.285156f, 0.222656f, 0.519531f, 0.070312f},
+ {0.445312f, 0.539062f, 0.855469f, 0.859375f}, {0.746094f, 0.023438f, 0.445312f, 0.039062f},
+ {0.996094f, 0.828125f, 0.957031f, 0.558594f}, {0.625000f, 0.914062f, 0.714844f, 0.707031f},
+ {0.890625f, 0.574219f, 0.484375f, 0.917969f}, {0.144531f, 0.089844f, 0.355469f, 0.527344f},
+ {0.367188f, 0.710938f, 0.894531f, 0.390625f}, {0.906250f, 0.160156f, 0.746094f, 0.441406f},
+ {0.531250f, 0.218750f, 0.671875f, 0.062500f}, {0.828125f, 0.605469f, 0.957031f, 0.851562f},
+ {0.324219f, 0.414062f, 0.617188f, 0.992188f}, {0.406250f, 0.917969f, 0.113281f, 0.601562f},
+ {0.125000f, 0.023438f, 0.480469f, 0.160156f}, {0.296875f, 0.328125f, 0.199219f, 0.828125f},
+ {0.953125f, 0.191406f, 0.070312f, 0.429688f}, {0.527344f, 0.941406f, 0.730469f, 0.199219f},
+ {0.609375f, 0.289062f, 0.140625f, 0.894531f}, {0.929688f, 0.160156f, 0.949219f, 0.285156f},
+ {0.503906f, 0.812500f, 0.601562f, 0.582031f}, {0.863281f, 0.484375f, 0.421875f, 0.464844f},
+ {0.457031f, 0.082031f, 0.058594f, 0.078125f}, {0.164062f, 0.398438f, 0.644531f, 0.968750f},
+ {0.097656f, 0.281250f, 0.300781f, 0.425781f}, {0.781250f, 0.695312f, 0.945312f, 0.003906f},
+ {0.015625f, 0.328125f, 0.871094f, 0.695312f}, {0.851562f, 0.179688f, 0.257812f, 0.292969f},
+ {0.531250f, 0.777344f, 0.144531f, 0.765625f}, {0.328125f, 0.527344f, 0.859375f, 0.863281f},
+ {0.824219f, 0.296875f, 0.375000f, 0.437500f}, {0.726562f, 0.917969f, 0.808594f, 0.062500f},
+ {0.273438f, 0.394531f, 0.109375f, 0.164062f}, {0.417969f, 0.515625f, 0.332031f, 0.378906f},
+ {0.097656f, 0.761719f, 0.695312f, 0.792969f}, {0.472656f, 0.652344f, 0.609375f, 0.898438f},
+ {0.039062f, 0.171875f, 0.277344f, 0.511719f}, {0.261719f, 0.976562f, 0.136719f, 0.695312f},
+ {0.828125f, 0.238281f, 0.648438f, 0.140625f}, {0.585938f, 0.792969f, 0.234375f, 0.632812f},
+ {0.007812f, 0.082031f, 0.593750f, 0.218750f}, {0.492188f, 0.281250f, 0.152344f, 0.097656f},
+ {0.234375f, 0.636719f, 0.199219f, 0.652344f}, {0.457031f, 0.402344f, 0.542969f, 0.035156f},
+ {0.691406f, 0.714844f, 0.050781f, 0.476562f}, {0.054688f, 0.808594f, 0.625000f, 0.382812f},
+ {0.628906f, 0.371094f, 0.125000f, 0.617188f}, {0.480469f, 0.253906f, 0.261719f, 0.933594f},
+ {0.558594f, 0.699219f, 0.015625f, 0.667969f}, {0.414062f, 0.394531f, 0.585938f, 0.902344f},
+ {0.964844f, 0.214844f, 0.230469f, 0.746094f}, {0.726562f, 0.070312f, 0.968750f, 0.136719f},
+ {0.609375f, 0.714844f, 0.742188f, 0.628906f}, {0.871094f, 0.171875f, 0.109375f, 0.425781f},
+ {0.035156f, 0.988281f, 0.421875f, 0.917969f}, {0.742188f, 0.253906f, 0.781250f, 0.710938f},
+ {0.972656f, 0.039062f, 0.605469f, 0.554688f}, {0.285156f, 0.191406f, 0.968750f, 0.140625f},
+ {0.554688f, 0.531250f, 0.851562f, 0.656250f}, {0.949219f, 0.101562f, 0.406250f, 0.828125f},
+ {0.710938f, 0.394531f, 0.242188f, 0.507812f}, {0.312500f, 0.953125f, 0.796875f, 0.265625f},
+ {0.816406f, 0.566406f, 0.156250f, 0.683594f}, {0.902344f, 0.433594f, 0.425781f, 0.121094f},
+ {0.726562f, 0.921875f, 0.210938f, 0.820312f}, {0.953125f, 0.386719f, 0.054688f, 0.726562f},
+ {0.132812f, 0.988281f, 0.761719f, 0.320312f}, {0.847656f, 0.167969f, 0.320312f, 0.996094f},
+ {0.007812f, 0.445312f, 0.398438f, 0.406250f}, {0.261719f, 0.621094f, 0.632812f, 0.210938f},
+ {0.472656f, 0.343750f, 0.082031f, 0.011719f}, {0.804688f, 0.882812f, 0.207031f, 0.656250f},
+ {0.574219f, 0.429688f, 0.140625f, 0.816406f}, {0.429688f, 0.988281f, 0.265625f, 0.937500f},
+ {0.246094f, 0.757812f, 0.488281f, 0.242188f}, {0.109375f, 0.109375f, 0.042969f, 0.675781f},
+ {0.691406f, 0.675781f, 0.367188f, 0.507812f}, {0.992188f, 0.234375f, 0.292969f, 0.269531f},
+ {0.500000f, 0.730469f, 0.808594f, 0.753906f}, {0.761719f, 0.128906f, 0.984375f, 0.312500f},
+ {0.234375f, 0.667969f, 0.648438f, 0.964844f}, {0.851562f, 0.398438f, 0.550781f, 0.664062f},
+ {0.039062f, 0.523438f, 0.312500f, 0.136719f}, {0.152344f, 0.699219f, 0.492188f, 0.406250f},
+ {0.644531f, 0.976562f, 0.187500f, 0.945312f}, {0.253906f, 0.320312f, 0.710938f, 0.210938f},
+ {0.687500f, 0.667969f, 0.546875f, 0.761719f}, {0.570312f, 0.898438f, 0.757812f, 0.667969f},
+ {0.882812f, 0.769531f, 0.097656f, 0.144531f}, {0.359375f, 0.519531f, 0.460938f, 0.878906f},
+ {0.597656f, 0.105469f, 0.675781f, 0.472656f}, {0.285156f, 0.976562f, 0.523438f, 0.996094f},
+ {0.750000f, 0.250000f, 0.421875f, 0.082031f}, {0.050781f, 0.578125f, 0.980469f, 0.523438f},
+ {0.625000f, 0.738281f, 0.742188f, 0.683594f}, {0.500000f, 0.214844f, 0.269531f, 0.937500f},
+ {0.000000f, 0.992188f, 0.917969f, 0.296875f}, {0.187500f, 0.144531f, 0.832031f, 0.726562f},
+ {0.988281f, 0.277344f, 0.156250f, 0.226562f}, {0.769531f, 0.363281f, 0.398438f, 0.097656f},
+ {0.562500f, 0.570312f, 0.898438f, 0.437500f}, {0.687500f, 0.851562f, 0.531250f, 0.246094f},
+ {0.941406f, 0.410156f, 0.839844f, 0.027344f}, {0.730469f, 0.511719f, 0.308594f, 0.867188f},
+ {0.300781f, 0.199219f, 0.796875f, 0.492188f}, {0.914062f, 0.828125f, 0.496094f, 0.781250f},
+ {0.132812f, 0.949219f, 0.703125f, 0.171875f}, {0.953125f, 0.527344f, 0.445312f, 0.941406f},
+ {0.582031f, 0.230469f, 0.878906f, 0.691406f}, {0.339844f, 0.085938f, 0.781250f, 0.816406f},
+ {0.804688f, 0.890625f, 0.570312f, 0.062500f}, {0.082031f, 0.164062f, 0.312500f, 0.523438f},
+ {0.765625f, 0.785156f, 0.859375f, 0.101562f}, {0.312500f, 0.925781f, 0.453125f, 0.359375f},
+ {0.230469f, 0.558594f, 0.691406f, 0.578125f}, {0.535156f, 0.335938f, 0.378906f, 0.277344f},
+ {0.167969f, 0.441406f, 0.273438f, 0.777344f}, {0.941406f, 0.875000f, 0.855469f, 0.000000f},
+ {0.507812f, 0.371094f, 0.160156f, 0.507812f}, {0.394531f, 0.800781f, 0.050781f, 0.191406f},
+ {0.148438f, 0.597656f, 0.304688f, 0.261719f}, {0.679688f, 0.960938f, 0.457031f, 0.894531f},
+ {0.226562f, 0.855469f, 0.027344f, 0.410156f}, {0.843750f, 0.675781f, 0.765625f, 0.093750f},
+ {0.601562f, 0.796875f, 0.937500f, 0.222656f}, {0.097656f, 0.148438f, 0.488281f, 0.785156f},
+ {0.148438f, 0.300781f, 0.320312f, 0.035156f}, {0.539062f, 0.039062f, 0.906250f, 0.632812f},
+ {0.070312f, 0.609375f, 0.609375f, 0.363281f}, {0.671875f, 0.816406f, 0.972656f, 0.500000f},
+ {0.371094f, 0.312500f, 0.699219f, 0.585938f}, {0.589844f, 0.699219f, 0.136719f, 0.148438f},
+ {0.328125f, 0.261719f, 0.031250f, 0.773438f}, {0.546875f, 0.746094f, 0.910156f, 0.277344f},
+ {0.105469f, 0.195312f, 0.589844f, 0.472656f}, {0.679688f, 0.519531f, 0.773438f, 0.109375f},
+ {0.937500f, 0.246094f, 0.996094f, 0.722656f}, {0.179688f, 0.324219f, 0.558594f, 0.195312f},
+ {0.753906f, 0.562500f, 0.878906f, 0.562500f}, {0.601562f, 0.488281f, 0.222656f, 0.355469f},
+ {0.867188f, 0.949219f, 0.773438f, 0.105469f}, {0.210938f, 0.808594f, 0.167969f, 0.867188f},
+ {0.648438f, 0.363281f, 0.574219f, 0.058594f}, {0.078125f, 0.468750f, 0.410156f, 0.574219f},
+ {0.375000f, 0.878906f, 0.035156f, 0.515625f}, {0.679688f, 0.796875f, 0.234375f, 0.351562f},
+ {0.316406f, 0.007812f, 0.765625f, 0.742188f}, {0.792969f, 0.609375f, 0.375000f, 0.625000f},
+ {0.402344f, 0.234375f, 0.890625f, 0.808594f}, {0.019531f, 0.871094f, 0.007812f, 0.054688f},
+ {0.824219f, 0.546875f, 0.332031f, 0.546875f}, {0.320312f, 0.015625f, 0.812500f, 0.363281f},
+ {0.222656f, 0.144531f, 0.390625f, 0.246094f}, {0.722656f, 0.363281f, 0.167969f, 0.597656f},
+ {0.417969f, 0.859375f, 0.031250f, 0.792969f}, {0.179688f, 0.648438f, 0.800781f, 0.167969f},
+ {0.917969f, 0.402344f, 0.632812f, 0.351562f}, {0.246094f, 0.007812f, 0.058594f, 0.207031f},
+ {0.964844f, 0.839844f, 0.191406f, 0.585938f}, {0.367188f, 0.097656f, 0.503906f, 0.820312f},
+ {0.878906f, 0.609375f, 0.039062f, 0.117188f}, {0.589844f, 0.871094f, 0.640625f, 0.914062f},
+ {0.675781f, 0.058594f, 0.230469f, 0.542969f}, {0.296875f, 0.796875f, 0.773438f, 0.613281f},
+ {0.898438f, 0.484375f, 0.019531f, 0.828125f}, {0.140625f, 0.007812f, 0.730469f, 0.937500f},
+ {0.355469f, 0.304688f, 0.363281f, 0.578125f}, {0.191406f, 0.753906f, 0.070312f, 0.722656f},
+ {0.535156f, 0.906250f, 0.902344f, 0.433594f}, {0.636719f, 0.578125f, 0.031250f, 0.992188f},
+ {0.367188f, 0.019531f, 0.992188f, 0.332031f}, {0.738281f, 0.683594f, 0.343750f, 0.554688f},
+ {0.027344f, 0.320312f, 0.250000f, 0.128906f}, {0.285156f, 0.441406f, 0.167969f, 0.296875f},
+ {0.933594f, 0.605469f, 0.488281f, 0.234375f}, {0.179688f, 0.500000f, 0.980469f, 0.785156f},
+ {0.660156f, 0.304688f, 0.734375f, 0.433594f}, {0.011719f, 0.035156f, 0.183594f, 0.207031f},
+ {0.855469f, 0.843750f, 0.906250f, 0.703125f}, {0.371094f, 0.617188f, 0.042969f, 0.988281f},
+ {0.105469f, 0.269531f, 0.480469f, 0.398438f}, {0.656250f, 0.519531f, 0.640625f, 0.328125f},
+ {0.773438f, 0.097656f, 0.941406f, 0.843750f}, {0.312500f, 0.472656f, 0.539062f, 0.964844f},
+ {0.894531f, 0.703125f, 0.238281f, 0.046875f}, {0.109375f, 0.132812f, 0.703125f, 0.769531f},
+ {0.429688f, 0.273438f, 0.175781f, 0.585938f}, {0.046875f, 0.492188f, 0.574219f, 0.347656f},
+ {0.382812f, 0.355469f, 0.285156f, 0.953125f}, {0.472656f, 0.636719f, 0.660156f, 0.437500f},
+ {0.769531f, 0.847656f, 0.093750f, 0.542969f}, {0.347656f, 0.246094f, 0.832031f, 0.910156f},
+ {0.250000f, 0.726562f, 0.371094f, 0.175781f}, {0.875000f, 0.136719f, 0.273438f, 0.238281f},
+ {0.492188f, 0.484375f, 0.500000f, 0.671875f}, {0.210938f, 0.562500f, 0.871094f, 0.089844f},
+ {0.820312f, 0.078125f, 0.234375f, 0.890625f}, {0.718750f, 0.957031f, 0.812500f, 0.621094f},
+ {0.398438f, 0.121094f, 0.515625f, 0.949219f}, {0.035156f, 0.804688f, 0.300781f, 0.367188f},
+ {0.308594f, 0.015625f, 0.386719f, 0.589844f}, {0.640625f, 0.636719f, 0.707031f, 0.296875f},
+ {0.054688f, 0.898438f, 0.101562f, 0.023438f}, {0.468750f, 0.042969f, 0.445312f, 0.789062f},
+ {0.359375f, 0.285156f, 0.652344f, 0.714844f}, {0.027344f, 0.167969f, 0.925781f, 0.421875f},
+ {0.554688f, 0.539062f, 0.710938f, 0.929688f}, {0.890625f, 0.621094f, 0.332031f, 0.226562f},
+ {0.164062f, 0.093750f, 0.906250f, 0.109375f}, {0.578125f, 0.265625f, 0.855469f, 0.882812f},
+ {0.460938f, 0.910156f, 0.671875f, 0.042969f}, {0.914062f, 0.367188f, 0.105469f, 0.250000f},
+ {0.734375f, 0.070312f, 0.621094f, 0.492188f}, {0.542969f, 0.183594f, 0.996094f, 0.308594f},
+ {0.980469f, 0.421875f, 0.238281f, 0.703125f}, {0.128906f, 0.621094f, 0.503906f, 0.933594f},
+ {0.632812f, 0.925781f, 0.906250f, 0.839844f}, {0.953125f, 0.218750f, 0.597656f, 0.109375f},
+ {0.039062f, 0.589844f, 0.960938f, 0.402344f}, {0.667969f, 0.714844f, 0.218750f, 0.550781f},
+ {0.472656f, 0.484375f, 0.312500f, 0.718750f}, {0.558594f, 0.152344f, 0.582031f, 0.894531f},
+ {0.152344f, 0.355469f, 0.691406f, 0.023438f}, {0.691406f, 0.671875f, 0.445312f, 0.410156f},
+ {0.753906f, 0.316406f, 0.867188f, 0.496094f}, {0.527344f, 0.546875f, 0.562500f, 0.656250f},
+ {0.125000f, 0.714844f, 0.304688f, 0.042969f}, {0.390625f, 0.218750f, 0.988281f, 0.320312f},
+ {0.218750f, 0.894531f, 0.585938f, 0.183594f}, {0.511719f, 0.691406f, 0.187500f, 0.761719f},
+ {0.457031f, 0.101562f, 0.457031f, 0.296875f}, {0.050781f, 0.628906f, 0.671875f, 0.371094f},
+ {0.816406f, 0.148438f, 0.554688f, 0.054688f}, {0.082031f, 0.371094f, 0.386719f, 0.269531f},
+ {0.417969f, 0.472656f, 0.753906f, 0.617188f}, {0.839844f, 0.175781f, 0.109375f, 0.750000f},
+ {0.218750f, 0.933594f, 0.656250f, 0.421875f}, {0.527344f, 0.742188f, 0.910156f, 0.910156f},
+ {0.875000f, 0.050781f, 0.402344f, 0.589844f}, {0.390625f, 0.988281f, 0.082031f, 0.972656f},
+ {0.460938f, 0.652344f, 0.355469f, 0.148438f}, {0.921875f, 0.464844f, 0.546875f, 0.847656f},
+ {0.601562f, 0.113281f, 0.132812f, 0.484375f}, {0.710938f, 0.964844f, 0.773438f, 0.089844f},
+ {0.273438f, 0.761719f, 0.593750f, 0.550781f}, {0.433594f, 0.664062f, 0.199219f, 0.156250f},
+ {0.203125f, 0.222656f, 0.355469f, 0.664062f}, {0.000000f, 0.835938f, 0.812500f, 0.609375f},
+ {0.625000f, 0.320312f, 0.738281f, 0.445312f}, {0.804688f, 0.410156f, 0.914062f, 0.304688f},
+ {0.523438f, 0.617188f, 0.644531f, 0.695312f}, {0.738281f, 0.070312f, 0.121094f, 0.179688f},
+ {0.886719f, 0.210938f, 0.890625f, 0.859375f}, {0.210938f, 0.984375f, 0.531250f, 0.730469f},
+ {0.988281f, 0.464844f, 0.000000f, 0.312500f}, {0.628906f, 0.527344f, 0.726562f, 0.078125f},
+ {0.433594f, 0.902344f, 0.472656f, 0.765625f}, {0.789062f, 0.058594f, 0.171875f, 0.957031f},
+ {0.042969f, 0.656250f, 0.570312f, 0.441406f}, {0.652344f, 0.796875f, 0.656250f, 0.832031f},
+ {0.914062f, 0.371094f, 0.339844f, 0.332031f}, {0.164062f, 0.875000f, 0.453125f, 0.515625f},
+ {0.968750f, 0.476562f, 0.167969f, 0.750000f}, {0.777344f, 0.683594f, 0.683594f, 0.160156f},
+ {0.492188f, 0.851562f, 0.019531f, 0.843750f}, {0.855469f, 0.144531f, 0.808594f, 0.972656f},
+ {0.960938f, 0.449219f, 0.332031f, 0.453125f}, {0.265625f, 0.781250f, 0.531250f, 0.898438f},
+ {0.781250f, 0.394531f, 0.851562f, 0.183594f}, {0.921875f, 0.855469f, 0.015625f, 0.628906f},
+ {0.285156f, 0.066406f, 0.132812f, 0.378906f}, {0.421875f, 0.992188f, 0.507812f, 0.796875f},
+ {0.816406f, 0.753906f, 0.269531f, 0.695312f}, {0.972656f, 0.570312f, 0.468750f, 0.449219f},
+ {0.113281f, 0.148438f, 0.160156f, 0.554688f}, {0.199219f, 0.726562f, 0.796875f, 0.992188f},
+ {0.285156f, 0.464844f, 0.289062f, 0.164062f}, {0.070312f, 0.785156f, 0.453125f, 0.875000f},
+ {0.375000f, 0.832031f, 0.843750f, 0.437500f}, {0.500000f, 0.269531f, 0.125000f, 0.023438f},
+ {0.445312f, 0.726562f, 0.687500f, 0.507812f}, {0.089844f, 0.457031f, 0.277344f, 0.289062f},
+ {0.839844f, 0.046875f, 0.359375f, 0.917969f}, {0.773438f, 0.300781f, 0.761719f, 0.050781f},
+ {0.347656f, 0.945312f, 0.882812f, 0.640625f}, {0.101562f, 0.902344f, 0.117188f, 0.460938f},
+ {0.816406f, 0.785156f, 0.937500f, 0.265625f}, {0.445312f, 0.453125f, 0.351562f, 0.765625f},
+ {0.226562f, 0.171875f, 0.726562f, 0.351562f}, {0.324219f, 0.921875f, 0.082031f, 0.839844f},
+ {0.808594f, 0.402344f, 0.421875f, 0.988281f}, {0.027344f, 0.113281f, 0.492188f, 0.398438f},
+ {0.855469f, 0.589844f, 0.109375f, 0.480469f}, {0.648438f, 0.339844f, 0.878906f, 0.066406f},
+ {0.976562f, 0.945312f, 0.257812f, 0.539062f}, {0.765625f, 0.433594f, 0.953125f, 0.160156f},
+ {0.250000f, 0.726562f, 0.140625f, 0.820312f}, {0.570312f, 0.261719f, 0.210938f, 0.894531f},
+ {0.964844f, 0.789062f, 0.613281f, 0.097656f}, {0.160156f, 0.117188f, 0.300781f, 0.210938f},
+ {0.488281f, 0.839844f, 0.820312f, 0.859375f}, {0.707031f, 0.542969f, 0.019531f, 0.496094f},
+ {0.605469f, 0.273438f, 0.714844f, 0.007812f}, {0.125000f, 0.820312f, 0.222656f, 0.718750f},
+ {0.750000f, 0.363281f, 0.652344f, 0.339844f}, {0.207031f, 0.195312f, 0.804688f, 0.636719f},
+ {0.050781f, 0.718750f, 0.300781f, 0.039062f}, {0.492188f, 0.406250f, 0.406250f, 0.906250f},
+ {0.910156f, 0.152344f, 0.992188f, 0.796875f}, {0.832031f, 0.015625f, 0.683594f, 0.214844f},
+ {0.570312f, 0.937500f, 0.085938f, 0.738281f}, {0.984375f, 0.570312f, 0.472656f, 0.371094f},
+ {0.468750f, 0.050781f, 0.394531f, 0.121094f}, {0.253906f, 0.886719f, 0.066406f, 0.820312f},
+ {0.328125f, 0.769531f, 0.332031f, 0.535156f}, {0.937500f, 0.921875f, 0.441406f, 0.011719f},
+ {0.640625f, 0.718750f, 0.199219f, 0.488281f}, {0.289062f, 0.031250f, 0.390625f, 0.136719f},
+ {0.007812f, 0.773438f, 0.992188f, 0.601562f}, {0.566406f, 0.398438f, 0.230469f, 0.406250f},
+ {0.171875f, 0.191406f, 0.785156f, 0.855469f}, {0.933594f, 0.343750f, 0.046875f, 0.285156f},
+ {0.121094f, 0.949219f, 0.921875f, 0.003906f}, {0.292969f, 0.218750f, 0.097656f, 0.558594f},
+ {0.441406f, 0.027344f, 0.734375f, 0.199219f}, {0.515625f, 0.597656f, 0.976562f, 0.050781f},
+ {0.250000f, 0.402344f, 0.066406f, 0.425781f}, {0.363281f, 0.300781f, 0.859375f, 0.250000f},
+ {0.203125f, 0.546875f, 0.433594f, 0.066406f}, {0.117188f, 0.363281f, 0.613281f, 0.644531f},
+ {0.542969f, 0.726562f, 0.191406f, 0.535156f}, {0.410156f, 0.199219f, 0.964844f, 0.125000f},
+ {0.140625f, 0.578125f, 0.261719f, 0.316406f}, {0.667969f, 0.660156f, 0.394531f, 0.496094f},
+ {0.488281f, 0.441406f, 0.625000f, 0.003906f}, {0.734375f, 0.304688f, 0.820312f, 0.601562f},
+ {0.007812f, 0.203125f, 0.082031f, 0.292969f}, {0.250000f, 0.417969f, 0.593750f, 0.191406f},
+ {0.511719f, 0.503906f, 0.953125f, 0.832031f}, {0.703125f, 0.960938f, 0.417969f, 0.656250f},
+ {0.605469f, 0.656250f, 0.566406f, 0.386719f}, {0.886719f, 0.312500f, 0.070312f, 0.097656f},
+ {0.753906f, 0.511719f, 0.640625f, 0.777344f}, {0.191406f, 0.109375f, 0.203125f, 0.621094f},
+ {0.917969f, 0.992188f, 0.738281f, 0.175781f}, {0.300781f, 0.390625f, 0.437500f, 0.664062f},
+ {0.515625f, 0.816406f, 0.078125f, 0.742188f}, {0.230469f, 0.085938f, 0.488281f, 0.226562f},
+ {0.589844f, 0.203125f, 0.546875f, 0.324219f}, {0.894531f, 0.558594f, 0.406250f, 0.832031f},
+ {0.292969f, 0.261719f, 0.250000f, 0.964844f}, {0.058594f, 0.027344f, 0.789062f, 0.179688f},
+ {0.968750f, 0.812500f, 0.515625f, 0.554688f}, {0.484375f, 0.496094f, 0.207031f, 0.242188f},
+ {0.914062f, 0.253906f, 0.921875f, 0.144531f}, {0.605469f, 0.968750f, 0.816406f, 0.714844f},
+ {0.734375f, 0.457031f, 0.699219f, 0.648438f}, {0.097656f, 0.183594f, 0.332031f, 0.882812f},
+ {0.410156f, 0.832031f, 0.605469f, 0.957031f}, {0.292969f, 0.542969f, 0.761719f, 0.679688f},
+ {0.691406f, 0.039062f, 0.421875f, 0.597656f}, {0.878906f, 0.984375f, 0.859375f, 0.468750f},
+ {0.324219f, 0.601562f, 0.507812f, 0.710938f}, {0.664062f, 0.343750f, 0.925781f, 0.363281f},
+ {0.785156f, 0.640625f, 0.453125f, 0.070312f}, {0.093750f, 0.214844f, 0.582031f, 0.652344f},
+ {0.347656f, 0.417969f, 0.519531f, 0.390625f}, {0.949219f, 0.140625f, 0.843750f, 0.277344f},
+ {0.261719f, 0.769531f, 0.937500f, 0.546875f}, {0.566406f, 0.535156f, 0.066406f, 0.757812f},
+ {0.328125f, 0.250000f, 0.503906f, 0.253906f}, {0.796875f, 0.589844f, 0.871094f, 0.445312f},
+ {0.144531f, 0.898438f, 0.003906f, 0.304688f}, {0.074219f, 0.308594f, 0.261719f, 0.953125f},
+ {0.355469f, 0.390625f, 0.839844f, 0.492188f}, {0.691406f, 0.742188f, 0.144531f, 0.062500f},
+ {0.863281f, 0.183594f, 0.589844f, 0.917969f}, {0.175781f, 0.527344f, 0.976562f, 0.230469f},
+ {0.582031f, 0.238281f, 0.511719f, 0.992188f}, {0.074219f, 0.441406f, 0.855469f, 0.644531f},
+ {0.140625f, 0.554688f, 0.750000f, 0.277344f}, {0.488281f, 0.328125f, 0.687500f, 0.941406f},
+ {0.824219f, 0.121094f, 0.582031f, 0.210938f}, {0.703125f, 0.687500f, 0.332031f, 0.699219f},
+ {0.324219f, 0.593750f, 0.625000f, 0.519531f}, {0.734375f, 0.859375f, 0.429688f, 0.644531f},
+ {0.390625f, 0.433594f, 0.839844f, 0.378906f}, {0.609375f, 0.515625f, 0.390625f, 0.738281f},
+ {0.761719f, 0.714844f, 0.539062f, 0.976562f}, {0.074219f, 0.269531f, 0.277344f, 0.679688f},
+ {0.882812f, 0.167969f, 0.636719f, 0.796875f}, {0.667969f, 0.769531f, 0.226562f, 0.886719f},
+ {0.593750f, 0.925781f, 0.941406f, 0.492188f}, {0.734375f, 0.078125f, 0.128906f, 0.386719f},
+ {0.332031f, 0.980469f, 0.722656f, 0.765625f}, {0.699219f, 0.269531f, 0.058594f, 0.265625f},
+ {0.835938f, 0.105469f, 0.476562f, 0.699219f}, {0.058594f, 0.917969f, 0.753906f, 0.984375f},
+ {0.191406f, 0.710938f, 0.214844f, 0.847656f}, {0.609375f, 0.023438f, 0.976562f, 0.144531f},
+ {0.332031f, 0.894531f, 0.683594f, 0.953125f}, {0.640625f, 0.339844f, 0.355469f, 0.761719f},
+ {0.867188f, 0.839844f, 0.023438f, 0.027344f}, {0.359375f, 0.117188f, 0.222656f, 0.328125f},
+ {0.441406f, 0.242188f, 0.718750f, 0.726562f}, {0.136719f, 0.933594f, 0.878906f, 0.585938f},
+ {0.656250f, 0.027344f, 0.382812f, 0.218750f}, {0.796875f, 0.566406f, 0.531250f, 0.976562f},
+ {0.582031f, 0.160156f, 0.023438f, 0.339844f}, {0.703125f, 0.664062f, 0.921875f, 0.425781f},
+ {0.390625f, 0.765625f, 0.851562f, 0.812500f}, {0.132812f, 0.515625f, 0.156250f, 0.945312f},
+ {0.996094f, 0.871094f, 0.718750f, 0.140625f}, {0.718750f, 0.417969f, 0.003906f, 0.593750f},
+ {0.406250f, 0.632812f, 0.621094f, 0.066406f}, {0.652344f, 0.738281f, 0.148438f, 0.679688f},
+ {0.167969f, 0.363281f, 0.285156f, 0.929688f}, {0.082031f, 0.078125f, 0.667969f, 0.000000f},
+ {0.429688f, 0.675781f, 0.027344f, 0.453125f}, {0.261719f, 0.617188f, 0.382812f, 0.796875f},
+ {0.339844f, 0.785156f, 0.234375f, 0.265625f}, {0.546875f, 0.050781f, 0.523438f, 0.105469f},
+ {0.164062f, 0.273438f, 0.007812f, 0.222656f}, {0.910156f, 0.667969f, 0.804688f, 0.390625f},
+ {0.492188f, 0.203125f, 0.082031f, 0.011719f}, {0.121094f, 0.863281f, 0.269531f, 0.242188f},
+ {0.011719f, 0.414062f, 0.695312f, 0.519531f}, {0.449219f, 0.496094f, 0.058594f, 0.972656f},
+ {0.238281f, 0.914062f, 0.191406f, 0.765625f}, {0.855469f, 0.078125f, 0.367188f, 0.179688f},
+ {0.046875f, 0.882812f, 0.281250f, 0.828125f}, {0.437500f, 0.687500f, 0.148438f, 0.113281f},
+ {0.816406f, 0.015625f, 0.613281f, 0.949219f}, {0.683594f, 0.937500f, 0.437500f, 0.187500f},
+ {0.988281f, 0.859375f, 0.238281f, 0.867188f}, {0.398438f, 0.085938f, 0.574219f, 0.597656f},
+ {0.636719f, 0.496094f, 0.722656f, 0.683594f}, {0.742188f, 0.808594f, 0.339844f, 0.019531f},
+ {0.234375f, 0.625000f, 0.531250f, 0.574219f}, {0.535156f, 0.460938f, 0.890625f, 0.269531f},
+ {0.050781f, 0.976562f, 0.289062f, 0.781250f}, {0.730469f, 0.109375f, 0.214844f, 0.460938f},
+ {0.371094f, 0.363281f, 0.789062f, 0.390625f}, {0.789062f, 0.656250f, 0.042969f, 0.074219f},
+ {0.679688f, 0.164062f, 0.269531f, 0.757812f}, {0.402344f, 0.839844f, 0.105469f, 0.359375f},
+ {0.875000f, 0.261719f, 0.875000f, 0.808594f}, {0.234375f, 0.933594f, 0.144531f, 0.046875f},
+ {0.062500f, 0.082031f, 0.945312f, 0.125000f}, {0.523438f, 0.285156f, 0.289062f, 0.937500f},
+ {0.855469f, 0.753906f, 0.691406f, 0.164062f}, {0.984375f, 0.148438f, 0.207031f, 0.464844f},
+ {0.027344f, 0.894531f, 0.132812f, 0.265625f}, {0.562500f, 0.976562f, 0.785156f, 0.593750f},
+ {0.144531f, 0.625000f, 0.476562f, 0.136719f}, {0.824219f, 0.046875f, 0.355469f, 0.320312f},
+ {0.445312f, 0.226562f, 0.558594f, 0.710938f}, {0.000000f, 0.664062f, 0.289062f, 0.207031f},
+ {0.910156f, 0.468750f, 0.835938f, 0.921875f}, {0.222656f, 0.609375f, 0.589844f, 0.039062f},
+ {0.582031f, 0.820312f, 0.898438f, 0.812500f}, {0.984375f, 0.347656f, 0.308594f, 0.445312f},
+ {0.378906f, 0.238281f, 0.550781f, 0.238281f}, {0.796875f, 0.523438f, 0.437500f, 0.542969f},
+ {0.937500f, 0.792969f, 0.179688f, 0.355469f}, {0.097656f, 0.687500f, 0.742188f, 0.429688f},
+ {0.761719f, 0.597656f, 0.523438f, 0.511719f}, {0.035156f, 0.050781f, 0.929688f, 0.132812f},
+ {0.957031f, 0.406250f, 0.328125f, 0.921875f}, {0.230469f, 0.609375f, 0.148438f, 0.472656f},
+ {0.335938f, 0.707031f, 0.777344f, 0.285156f}, {0.019531f, 0.351562f, 0.976562f, 0.824219f},
+ {0.261719f, 0.859375f, 0.316406f, 0.058594f}, {0.058594f, 0.230469f, 0.570312f, 0.570312f},
+ {0.882812f, 0.324219f, 0.652344f, 0.484375f}, {0.628906f, 0.601562f, 0.210938f, 0.015625f},
+ {0.195312f, 0.132812f, 0.988281f, 0.371094f}, {0.015625f, 0.699219f, 0.832031f, 0.527344f},
+ {0.535156f, 0.066406f, 0.335938f, 0.433594f}, {0.851562f, 0.976562f, 0.953125f, 0.742188f},
+ {0.574219f, 0.578125f, 0.468750f, 0.621094f}, {0.773438f, 0.855469f, 0.843750f, 0.316406f},
+ {0.703125f, 0.148438f, 0.750000f, 0.898438f}, {0.187500f, 0.300781f, 0.136719f, 0.582031f},
+ {0.960938f, 0.742188f, 0.644531f, 0.359375f}, {0.796875f, 0.378906f, 0.972656f, 0.523438f},
+ {0.031250f, 0.917969f, 0.171875f, 0.847656f}, {0.593750f, 0.507812f, 0.468750f, 0.445312f},
+ {0.207031f, 0.332031f, 0.359375f, 0.785156f}, {0.753906f, 0.105469f, 0.566406f, 0.914062f},
+ {0.386719f, 0.695312f, 0.960938f, 0.128906f}, {0.613281f, 0.000000f, 0.128906f, 0.308594f},
+ {0.914062f, 0.296875f, 0.792969f, 0.570312f}, {0.300781f, 0.730469f, 0.734375f, 0.457031f},
+ {0.550781f, 0.574219f, 0.972656f, 0.890625f}, {0.644531f, 0.480469f, 0.046875f, 0.687500f},
+ {0.160156f, 0.312500f, 0.335938f, 0.500000f}, {0.507812f, 0.625000f, 0.765625f, 0.417969f},
+ {0.093750f, 0.433594f, 0.164062f, 0.082031f}, {0.195312f, 0.347656f, 0.953125f, 0.355469f},
+ {0.468750f, 0.699219f, 0.109375f, 0.140625f}, {0.941406f, 0.210938f, 0.449219f, 0.832031f},
+ {0.296875f, 0.039062f, 0.656250f, 0.410156f}, {0.417969f, 0.277344f, 0.761719f, 0.878906f},
+ {0.121094f, 0.679688f, 0.027344f, 0.625000f}, {0.910156f, 0.792969f, 0.699219f, 0.156250f},
+ {0.449219f, 0.863281f, 0.625000f, 0.710938f}, {0.968750f, 0.011719f, 0.367188f, 0.871094f},
+ {0.199219f, 0.964844f, 0.554688f, 0.546875f}, {0.531250f, 0.605469f, 0.816406f, 0.441406f},
+ {0.105469f, 0.496094f, 0.460938f, 0.906250f}, {0.960938f, 0.804688f, 0.062500f, 0.484375f},
+ {0.457031f, 0.546875f, 0.515625f, 0.324219f}, {0.660156f, 0.003906f, 0.753906f, 0.578125f},
+ {0.199219f, 0.636719f, 0.035156f, 0.804688f}, {0.265625f, 0.320312f, 0.593750f, 0.093750f},
+ {0.347656f, 0.101562f, 0.957031f, 0.906250f}, {0.710938f, 0.453125f, 0.875000f, 0.363281f},
+ {0.402344f, 0.824219f, 0.027344f, 0.019531f}, {0.292969f, 0.531250f, 0.750000f, 0.554688f},
+ {0.976562f, 0.414062f, 0.910156f, 0.949219f}, {0.078125f, 0.863281f, 0.507812f, 0.089844f},
+ {0.792969f, 0.312500f, 0.390625f, 0.609375f}, {0.500000f, 0.000000f, 0.664062f, 0.347656f},
+ {0.304688f, 0.507812f, 0.160156f, 0.570312f}, {0.089844f, 0.152344f, 0.109375f, 0.097656f},
+ {0.457031f, 0.957031f, 0.800781f, 0.664062f}, {0.539062f, 0.636719f, 0.066406f, 0.738281f},
+ {0.144531f, 0.085938f, 0.878906f, 0.082031f}, {0.414062f, 0.175781f, 0.277344f, 0.886719f},
+ {0.292969f, 0.285156f, 0.835938f, 0.636719f}, {0.570312f, 0.750000f, 0.617188f, 0.257812f},
+ {0.812500f, 0.886719f, 0.058594f, 0.851562f}, {0.527344f, 0.199219f, 0.464844f, 0.082031f},
+ {0.851562f, 0.773438f, 0.664062f, 0.535156f}, {0.414062f, 0.441406f, 0.257812f, 0.679688f},
+ {0.976562f, 0.914062f, 0.109375f, 0.148438f}, {0.539062f, 0.488281f, 0.812500f, 0.886719f},
+ {0.816406f, 0.000000f, 0.371094f, 0.257812f}, {0.316406f, 0.960938f, 0.285156f, 0.703125f},
+ {0.484375f, 0.382812f, 0.457031f, 0.785156f}, {0.785156f, 0.277344f, 0.675781f, 0.875000f},
+ {0.265625f, 0.476562f, 0.070312f, 0.289062f}, {0.355469f, 0.207031f, 0.585938f, 0.109375f},
+ {0.636719f, 0.917969f, 0.179688f, 0.851562f}, {0.929688f, 0.519531f, 0.347656f, 0.515625f},
+ {0.007812f, 0.425781f, 0.554688f, 0.199219f}, {0.507812f, 0.011719f, 0.445312f, 0.085938f},
+ {0.667969f, 0.886719f, 0.859375f, 0.976562f}, {0.382812f, 0.476562f, 0.300781f, 0.738281f},
+ {0.843750f, 0.128906f, 0.726562f, 0.613281f}, {0.437500f, 0.808594f, 0.898438f, 0.183594f},
+ {0.652344f, 0.582031f, 0.667969f, 0.332031f}, {0.984375f, 0.753906f, 0.835938f, 0.699219f},
+ {0.812500f, 0.242188f, 0.320312f, 0.636719f}, {0.511719f, 0.945312f, 0.625000f, 0.816406f},
+ {0.183594f, 0.796875f, 0.421875f, 0.027344f}, {0.742188f, 0.179688f, 0.882812f, 0.253906f},
+ {0.972656f, 0.375000f, 0.660156f, 0.613281f}, {0.378906f, 0.964844f, 0.480469f, 0.324219f},
+ {0.015625f, 0.222656f, 0.863281f, 0.046875f}, {0.871094f, 0.058594f, 0.695312f, 0.800781f},
+ {0.289062f, 0.792969f, 0.382812f, 0.644531f}, {0.765625f, 0.171875f, 0.636719f, 0.929688f},
+ {0.554688f, 0.988281f, 0.808594f, 0.531250f}, {0.023438f, 0.546875f, 0.218750f, 0.730469f},
+ {0.882812f, 0.886719f, 0.929688f, 0.191406f}, {0.605469f, 0.136719f, 0.167969f, 0.332031f},
+ {0.812500f, 0.335938f, 0.414062f, 0.519531f}, {0.652344f, 0.585938f, 0.953125f, 0.093750f},
+ {0.269531f, 0.488281f, 0.132812f, 0.312500f}, {0.019531f, 0.292969f, 0.472656f, 0.589844f},
+ {0.316406f, 0.410156f, 0.914062f, 0.195312f}, {0.613281f, 0.742188f, 0.175781f, 0.023438f},
+ {0.761719f, 0.207031f, 0.398438f, 0.660156f}, {0.363281f, 0.363281f, 0.664062f, 0.253906f},
+ {0.585938f, 0.449219f, 0.246094f, 0.746094f}, {0.796875f, 0.996094f, 0.902344f, 0.882812f},
+ {0.136719f, 0.835938f, 0.367188f, 0.230469f}, {0.492188f, 0.390625f, 0.492188f, 0.707031f},
+ {0.812500f, 0.562500f, 0.316406f, 0.515625f}, {0.636719f, 0.687500f, 0.421875f, 0.839844f},
+ {0.898438f, 0.343750f, 0.164062f, 0.664062f}, {0.179688f, 0.125000f, 0.695312f, 0.453125f},
+ {0.527344f, 0.746094f, 0.097656f, 0.816406f}, {0.625000f, 0.183594f, 0.207031f, 0.156250f},
+ {0.371094f, 0.906250f, 0.003906f, 0.421875f}, {0.160156f, 0.707031f, 0.781250f, 0.683594f},
+ {0.656250f, 0.773438f, 0.343750f, 0.894531f}, {0.875000f, 0.406250f, 0.945312f, 0.171875f},
+ {0.242188f, 0.859375f, 0.699219f, 0.394531f}, {0.703125f, 0.460938f, 0.375000f, 0.281250f},
+ {0.902344f, 0.371094f, 0.636719f, 0.937500f}, {0.207031f, 0.558594f, 0.476562f, 0.574219f},
+ {0.679688f, 0.980469f, 0.121094f, 0.203125f}, {0.476562f, 0.484375f, 0.402344f, 0.773438f},
+ {0.171875f, 0.332031f, 0.808594f, 0.699219f}, {0.718750f, 0.144531f, 0.906250f, 0.417969f},
+ {0.113281f, 0.527344f, 0.195312f, 0.351562f}, {0.617188f, 0.066406f, 0.507812f, 0.933594f},
+ {0.460938f, 0.277344f, 0.417969f, 0.734375f}, {0.160156f, 0.640625f, 0.613281f, 0.394531f},
+ {0.730469f, 0.738281f, 0.039062f, 0.105469f}, {0.078125f, 0.187500f, 0.777344f, 0.617188f},
+ {0.425781f, 0.824219f, 0.527344f, 0.171875f}, {0.679688f, 0.898438f, 0.128906f, 0.984375f},
+ {0.949219f, 0.769531f, 0.414062f, 0.230469f}, {0.128906f, 0.320312f, 0.886719f, 0.402344f},
+ {0.234375f, 0.648438f, 0.046875f, 0.160156f}, {0.394531f, 0.242188f, 0.964844f, 0.691406f},
+ {0.312500f, 0.800781f, 0.265625f, 0.769531f}, {0.875000f, 0.695312f, 0.785156f, 0.414062f},
+ {0.132812f, 0.562500f, 0.085938f, 0.046875f}, {0.238281f, 0.218750f, 0.574219f, 0.292969f},
+ {0.722656f, 0.640625f, 0.394531f, 0.136719f}, {0.304688f, 0.062500f, 0.222656f, 0.941406f},
+ {0.074219f, 0.972656f, 0.039062f, 0.078125f}, {0.351562f, 0.445312f, 0.152344f, 0.542969f},
+ {0.265625f, 0.148438f, 0.500000f, 0.417969f}, {0.054688f, 0.531250f, 0.246094f, 0.203125f},
+ {0.687500f, 0.621094f, 0.007812f, 0.937500f}, {0.113281f, 0.457031f, 0.535156f, 0.378906f},
+ {0.472656f, 0.105469f, 0.210938f, 0.144531f}, {0.218750f, 0.664062f, 0.113281f, 0.996094f},
+ {0.703125f, 0.843750f, 0.261719f, 0.218750f}, {0.925781f, 0.523438f, 0.550781f, 0.722656f},
+ {0.613281f, 0.730469f, 0.019531f, 0.289062f}, {0.367188f, 0.269531f, 0.886719f, 0.472656f},
+ {0.843750f, 0.074219f, 0.304688f, 0.238281f}, {0.703125f, 0.648438f, 0.054688f, 0.984375f},
+ {0.171875f, 0.425781f, 0.371094f, 0.078125f}, {0.335938f, 0.734375f, 0.566406f, 0.660156f},
+ {0.496094f, 0.949219f, 0.500000f, 0.906250f}, {0.214844f, 0.058594f, 0.312500f, 0.750000f},
+ {0.554688f, 0.203125f, 0.867188f, 0.964844f}, {0.839844f, 0.707031f, 0.238281f, 0.257812f},
+ {0.707031f, 0.113281f, 0.679688f, 0.828125f}, {0.890625f, 0.890625f, 0.296875f, 0.144531f},
+ {0.164062f, 0.042969f, 0.968750f, 0.972656f}, {0.273438f, 0.671875f, 0.796875f, 0.609375f},
+ {0.019531f, 0.156250f, 0.562500f, 0.078125f}, {0.910156f, 0.246094f, 0.183594f, 0.371094f},
+ {0.414062f, 0.707031f, 0.824219f, 0.437500f}, {0.085938f, 0.195312f, 0.082031f, 0.046875f},
+ {0.945312f, 0.781250f, 0.683594f, 0.308594f}, {0.218750f, 0.023438f, 0.621094f, 0.175781f},
+ {0.464844f, 0.234375f, 0.261719f, 0.964844f}, {0.105469f, 0.957031f, 0.582031f, 0.234375f},
+ {0.750000f, 0.488281f, 0.808594f, 0.738281f}, {0.253906f, 0.582031f, 0.457031f, 0.285156f},
+ {0.855469f, 0.367188f, 0.984375f, 0.859375f}, {0.425781f, 0.121094f, 0.250000f, 0.492188f},
+ {0.945312f, 0.550781f, 0.433594f, 0.222656f}, {0.738281f, 0.214844f, 0.503906f, 0.953125f},
+ {0.019531f, 0.046875f, 0.226562f, 0.515625f}, {0.324219f, 0.734375f, 0.574219f, 0.785156f},
+ {0.589844f, 0.257812f, 0.011719f, 0.015625f}, {0.843750f, 0.812500f, 0.988281f, 0.468750f},
+ {0.992188f, 0.007812f, 0.238281f, 0.312500f}, {0.082031f, 0.425781f, 0.699219f, 0.054688f},
+ {0.382812f, 0.843750f, 0.304688f, 0.972656f}, {0.890625f, 0.667969f, 0.558594f, 0.183594f},
+ {0.281250f, 0.968750f, 0.000000f, 0.003906f}, {0.687500f, 0.812500f, 0.742188f, 0.632812f},
+ {0.910156f, 0.121094f, 0.867188f, 0.207031f}, {0.347656f, 0.574219f, 0.957031f, 0.511719f},
+ {0.238281f, 0.421875f, 0.183594f, 0.957031f}, {0.960938f, 0.097656f, 0.707031f, 0.316406f},
+ {0.585938f, 0.667969f, 0.921875f, 0.445312f}, {0.835938f, 0.535156f, 0.238281f, 0.660156f},
+ {0.039062f, 0.031250f, 0.800781f, 0.074219f}, {0.464844f, 0.125000f, 0.734375f, 0.808594f},
+ {0.742188f, 0.390625f, 0.503906f, 0.367188f}, {0.828125f, 0.054688f, 0.113281f, 0.953125f},
+ {0.550781f, 0.996094f, 0.621094f, 0.472656f}, {0.625000f, 0.175781f, 0.203125f, 0.636719f},
+ {0.472656f, 0.347656f, 0.941406f, 0.871094f}, {0.046875f, 0.945312f, 0.050781f, 0.675781f},
+ {0.937500f, 0.414062f, 0.503906f, 0.492188f}, {0.500000f, 0.265625f, 0.632812f, 0.832031f},
+ {0.894531f, 0.683594f, 0.992188f, 0.753906f}, {0.148438f, 0.367188f, 0.437500f, 0.277344f},
+ {0.550781f, 0.890625f, 0.777344f, 0.050781f}, {0.945312f, 0.316406f, 0.710938f, 0.871094f},
+ {0.410156f, 0.046875f, 0.343750f, 0.484375f}, {0.597656f, 0.855469f, 0.949219f, 0.671875f},
+ {0.843750f, 0.261719f, 0.398438f, 0.781250f}, {0.781250f, 0.769531f, 0.597656f, 0.515625f},
+ {0.320312f, 0.140625f, 0.796875f, 0.578125f}, {0.425781f, 0.406250f, 0.988281f, 0.894531f},
+ {0.062500f, 0.593750f, 0.191406f, 0.160156f}, {0.246094f, 0.875000f, 0.515625f, 0.824219f},
+ {0.132812f, 0.484375f, 0.468750f, 0.031250f}, {0.437500f, 0.367188f, 0.605469f, 0.375000f},
+ {0.976562f, 0.835938f, 0.859375f, 0.785156f}, {0.046875f, 0.242188f, 0.726562f, 0.433594f},
+ {0.765625f, 0.519531f, 0.089844f, 0.226562f}, {0.921875f, 0.394531f, 0.824219f, 0.003906f},
+ {0.105469f, 0.921875f, 0.585938f, 0.382812f}, {0.390625f, 0.824219f, 0.007812f, 0.476562f},
+ {0.484375f, 0.558594f, 0.738281f, 0.683594f}, {0.070312f, 0.441406f, 0.082031f, 0.347656f},
+ {0.433594f, 0.332031f, 0.605469f, 0.417969f}, {0.949219f, 0.765625f, 0.339844f, 0.789062f},
+ {0.738281f, 0.906250f, 0.015625f, 0.183594f}, {0.312500f, 0.601562f, 0.441406f, 0.527344f},
+ {0.695312f, 0.089844f, 0.722656f, 0.992188f}, {0.605469f, 0.867188f, 0.925781f, 0.644531f},
+ {0.539062f, 0.500000f, 0.218750f, 0.769531f}, {0.011719f, 0.929688f, 0.847656f, 0.414062f},
+ {0.777344f, 0.296875f, 0.972656f, 0.613281f}, {0.332031f, 0.644531f, 0.398438f, 0.058594f},
+ {0.937500f, 0.835938f, 0.328125f, 0.378906f}, {0.691406f, 0.042969f, 0.867188f, 0.542969f},
+ {0.039062f, 0.257812f, 0.625000f, 0.011719f}, {0.546875f, 0.964844f, 0.562500f, 0.753906f},
+ {0.117188f, 0.632812f, 0.738281f, 0.320312f}, {0.605469f, 0.296875f, 0.054688f, 0.050781f},
+ {0.824219f, 0.902344f, 0.820312f, 0.621094f}, {0.507812f, 0.589844f, 0.906250f, 0.863281f},
+ {0.058594f, 0.136719f, 0.324219f, 0.152344f}, {0.445312f, 0.929688f, 0.753906f, 0.671875f},
+ {0.253906f, 0.703125f, 0.167969f, 0.828125f}, {0.644531f, 0.218750f, 0.593750f, 0.375000f},
+ {0.781250f, 0.574219f, 0.085938f, 0.609375f}, {0.000000f, 0.042969f, 0.964844f, 0.550781f},
+ {0.500000f, 0.296875f, 0.359375f, 0.871094f}, {0.207031f, 0.394531f, 0.683594f, 0.457031f},
+ {0.062500f, 0.214844f, 0.136719f, 0.277344f}, {0.777344f, 0.933594f, 0.480469f, 0.847656f},
+ {0.648438f, 0.863281f, 0.332031f, 0.765625f}, {0.121094f, 0.351562f, 0.089844f, 0.042969f},
+ {0.367188f, 0.250000f, 0.390625f, 0.554688f}, {0.183594f, 0.433594f, 0.566406f, 0.730469f},
+ {0.300781f, 0.593750f, 0.300781f, 0.500000f}, {0.894531f, 0.726562f, 0.636719f, 0.589844f},
+ {0.105469f, 0.839844f, 0.375000f, 0.296875f}, {0.199219f, 0.468750f, 0.710938f, 0.125000f},
+ {0.062500f, 0.289062f, 0.902344f, 0.027344f}, {0.992188f, 0.609375f, 0.410156f, 0.250000f},
+ {0.281250f, 0.101562f, 0.687500f, 0.343750f}, {0.789062f, 0.718750f, 0.343750f, 0.558594f},
+ {0.578125f, 0.832031f, 0.878906f, 0.214844f}, {0.187500f, 0.539062f, 0.746094f, 0.378906f},
+ {0.691406f, 0.187500f, 0.277344f, 0.457031f}, {0.621094f, 0.031250f, 0.105469f, 0.984375f},
+ {0.859375f, 0.812500f, 0.917969f, 0.597656f}, {0.757812f, 0.656250f, 0.558594f, 0.343750f},
+ {0.332031f, 0.402344f, 0.179688f, 0.726562f}, {0.027344f, 0.996094f, 0.812500f, 0.085938f},
+ {0.261719f, 0.554688f, 0.074219f, 0.851562f}, {0.144531f, 0.351562f, 0.742188f, 0.003906f},
+ {0.519531f, 0.925781f, 0.449219f, 0.406250f}, {0.585938f, 0.027344f, 0.324219f, 0.347656f},
+ {0.824219f, 0.320312f, 0.097656f, 0.109375f}, {0.953125f, 0.953125f, 0.707031f, 0.558594f},
+ {0.671875f, 0.121094f, 0.773438f, 0.695312f}, {0.523438f, 0.773438f, 0.128906f, 0.609375f},
+ {0.273438f, 0.003906f, 0.964844f, 0.496094f}, {0.621094f, 0.617188f, 0.265625f, 0.132812f},
+ {0.367188f, 0.167969f, 0.199219f, 0.847656f}, {0.722656f, 0.761719f, 0.652344f, 0.539062f},
+ {0.156250f, 0.652344f, 0.437500f, 0.621094f}, {0.996094f, 0.253906f, 0.359375f, 0.777344f},
+ {0.648438f, 0.148438f, 0.937500f, 0.109375f}, {0.242188f, 0.632812f, 0.496094f, 0.902344f},
+ {0.828125f, 0.957031f, 0.769531f, 0.562500f}, {0.558594f, 0.074219f, 0.136719f, 0.289062f},
+ {0.503906f, 0.531250f, 0.878906f, 0.703125f}, {0.175781f, 0.476562f, 0.636719f, 0.843750f},
+ {0.878906f, 0.277344f, 0.292969f, 0.132812f}, {0.367188f, 0.417969f, 0.125000f, 0.574219f},
+ {0.281250f, 0.062500f, 0.550781f, 0.910156f}, {0.847656f, 0.589844f, 0.054688f, 0.273438f},
+ {0.664062f, 0.730469f, 0.511719f, 0.121094f}, {0.394531f, 0.402344f, 0.140625f, 0.503906f},
+ {0.578125f, 0.089844f, 0.039062f, 0.914062f}, {0.480469f, 0.777344f, 0.714844f, 0.652344f},
+ {0.195312f, 0.445312f, 0.179688f, 0.976562f}, {0.785156f, 0.675781f, 0.113281f, 0.132812f},
+ {0.351562f, 0.816406f, 0.886719f, 0.835938f}, {0.265625f, 0.488281f, 0.296875f, 0.453125f},
+ {0.175781f, 0.093750f, 0.144531f, 0.722656f}, {0.386719f, 0.335938f, 0.656250f, 0.339844f},
+ {0.753906f, 0.656250f, 0.531250f, 0.234375f}, {0.132812f, 0.398438f, 0.421875f, 0.421875f},
+ {0.351562f, 0.515625f, 0.929688f, 0.925781f}, {0.917969f, 0.105469f, 0.500000f, 0.492188f},
+ {0.601562f, 0.914062f, 0.773438f, 0.136719f}, {0.324219f, 0.613281f, 0.441406f, 0.750000f},
+ {0.949219f, 0.730469f, 0.222656f, 0.324219f}, {0.578125f, 0.480469f, 0.824219f, 0.808594f},
+ {0.402344f, 0.660156f, 0.289062f, 0.062500f}, {0.863281f, 0.761719f, 0.585938f, 0.578125f},
+ {0.488281f, 0.515625f, 0.898438f, 0.132812f}, {0.550781f, 0.050781f, 0.644531f, 0.355469f},
+ {0.921875f, 0.968750f, 0.832031f, 0.882812f}, {0.710938f, 0.796875f, 0.011719f, 0.261719f},
+ {0.511719f, 0.160156f, 0.980469f, 0.019531f}, {0.605469f, 0.945312f, 0.199219f, 0.921875f},
+ {0.343750f, 0.214844f, 0.789062f, 0.218750f}, {0.675781f, 0.550781f, 0.019531f, 0.570312f},
+ {0.437500f, 0.746094f, 0.468750f, 0.734375f}, {0.707031f, 0.875000f, 0.542969f, 0.804688f},
+ {0.144531f, 0.503906f, 0.285156f, 0.910156f}, {0.406250f, 0.019531f, 0.121094f, 0.101562f},
+ {0.742188f, 0.312500f, 0.816406f, 0.714844f}, {0.097656f, 0.933594f, 0.183594f, 0.007812f},
+ {0.371094f, 0.761719f, 0.589844f, 0.648438f}, {0.453125f, 0.492188f, 0.378906f, 0.167969f},
+ {0.222656f, 0.585938f, 0.847656f, 0.796875f}, {0.121094f, 0.214844f, 0.058594f, 0.128906f},
+ {0.484375f, 0.730469f, 0.632812f, 0.546875f}, {0.914062f, 0.078125f, 0.871094f, 0.296875f},
+ {0.640625f, 0.191406f, 0.304688f, 0.441406f}, {0.886719f, 0.714844f, 0.148438f, 0.242188f},
+ {0.082031f, 0.464844f, 0.933594f, 0.750000f}, {0.742188f, 0.632812f, 0.640625f, 0.667969f},
+ {0.183594f, 0.230469f, 0.386719f, 0.953125f}, {0.484375f, 0.687500f, 0.917969f, 0.445312f},
+ {0.007812f, 0.187500f, 0.226562f, 0.308594f}, {0.804688f, 0.570312f, 0.417969f, 0.914062f},
+ {0.195312f, 0.304688f, 0.671875f, 0.253906f}, {0.878906f, 0.902344f, 0.351562f, 0.960938f},
+ {0.078125f, 0.082031f, 0.042969f, 0.710938f}, {0.460938f, 0.449219f, 0.988281f, 0.292969f},
+ {0.300781f, 0.320312f, 0.781250f, 0.058594f}, {0.593750f, 0.023438f, 0.171875f, 0.949219f},
+ {0.796875f, 0.500000f, 0.539062f, 0.207031f}, {0.339844f, 0.839844f, 0.218750f, 0.503906f},
+ {0.132812f, 0.289062f, 0.417969f, 0.070312f}, {0.675781f, 0.218750f, 0.269531f, 0.871094f},
+ {0.042969f, 0.378906f, 0.996094f, 0.035156f}, {0.230469f, 0.816406f, 0.515625f, 0.472656f},
+ {0.453125f, 0.964844f, 0.375000f, 0.332031f}, {0.746094f, 0.664062f, 0.792969f, 0.214844f},
+ {0.058594f, 0.351562f, 0.457031f, 0.000000f}, {0.968750f, 0.882812f, 0.343750f, 0.718750f},
+ {0.160156f, 0.140625f, 0.765625f, 0.878906f}, {0.238281f, 0.207031f, 0.675781f, 0.789062f},
+ {0.070312f, 0.535156f, 0.945312f, 0.335938f}, {0.894531f, 0.917969f, 0.277344f, 0.179688f},
+ {0.296875f, 0.332031f, 0.535156f, 0.597656f}, {0.988281f, 0.167969f, 0.359375f, 0.398438f},
+ {0.718750f, 0.015625f, 0.671875f, 0.257812f}, {0.472656f, 0.414062f, 0.960938f, 0.554688f},
+ {0.890625f, 0.996094f, 0.460938f, 0.109375f}, {0.964844f, 0.789062f, 0.199219f, 0.996094f},
+ {0.667969f, 0.875000f, 0.089844f, 0.585938f}, {0.804688f, 0.183594f, 0.859375f, 0.703125f},
+ {0.546875f, 0.312500f, 0.261719f, 0.089844f}, {0.050781f, 0.769531f, 0.046875f, 0.273438f},
+ {0.187500f, 0.253906f, 0.843750f, 0.894531f}, {0.441406f, 0.367188f, 0.644531f, 0.230469f},
+ {0.742188f, 0.171875f, 0.105469f, 0.097656f}, {0.824219f, 0.890625f, 0.535156f, 0.984375f},
+ {0.144531f, 0.015625f, 0.394531f, 0.656250f}, {0.296875f, 0.316406f, 0.058594f, 0.402344f},
+ {0.019531f, 0.144531f, 0.210938f, 0.691406f}, {0.753906f, 0.621094f, 0.730469f, 0.929688f},
+ {0.250000f, 0.703125f, 0.492188f, 0.191406f}, {0.054688f, 0.292969f, 0.152344f, 0.414062f},
+ {0.410156f, 0.492188f, 0.445312f, 0.777344f}, {0.796875f, 0.339844f, 0.871094f, 0.855469f},
+ {0.902344f, 0.085938f, 0.250000f, 0.632812f}, {0.531250f, 0.906250f, 0.324219f, 0.394531f},
+ {0.250000f, 0.132812f, 0.839844f, 0.976562f}, {0.917969f, 0.375000f, 0.160156f, 0.523438f},
+ {0.859375f, 0.792969f, 0.601562f, 0.160156f}, {0.335938f, 0.453125f, 0.714844f, 0.425781f},
+ {0.523438f, 0.152344f, 0.464844f, 0.949219f}, {0.957031f, 0.625000f, 0.000000f, 0.863281f},
+ {0.800781f, 0.089844f, 0.531250f, 0.257812f}, {0.000000f, 0.863281f, 0.316406f, 0.511719f},
+ {0.308594f, 0.285156f, 0.679688f, 0.906250f}, {0.824219f, 0.132812f, 0.472656f, 0.230469f},
+ {0.535156f, 0.917969f, 0.265625f, 0.656250f}, {0.683594f, 0.503906f, 0.429688f, 0.960938f},
+ {0.363281f, 0.609375f, 0.515625f, 0.171875f}, {0.445312f, 0.289062f, 0.683594f, 0.917969f},
+ {0.964844f, 0.808594f, 0.238281f, 0.617188f}, {0.277344f, 0.085938f, 0.042969f, 0.062500f},
+ {0.394531f, 0.511719f, 0.839844f, 0.203125f}, {0.636719f, 0.753906f, 0.585938f, 0.843750f},
+ {0.343750f, 0.417969f, 0.289062f, 0.761719f}, {0.746094f, 0.933594f, 0.011719f, 0.171875f},
+ {0.566406f, 0.472656f, 0.816406f, 0.066406f}, {0.398438f, 0.671875f, 0.550781f, 0.566406f},
+ {0.675781f, 0.855469f, 0.750000f, 0.351562f}, {0.832031f, 0.546875f, 0.488281f, 0.179688f},
+ {0.222656f, 0.992188f, 0.285156f, 0.449219f}, {0.531250f, 0.792969f, 0.117188f, 0.839844f},
+ {0.003906f, 0.382812f, 0.875000f, 0.320312f}, {0.718750f, 0.722656f, 0.625000f, 0.718750f},
+ {0.925781f, 0.574219f, 0.843750f, 0.636719f}, {0.382812f, 0.878906f, 0.070312f, 0.238281f},
+ {0.621094f, 0.015625f, 0.707031f, 0.398438f}, {0.988281f, 0.738281f, 0.195312f, 0.925781f},
+ {0.796875f, 0.125000f, 0.039062f, 0.667969f}, {0.136719f, 0.179688f, 0.953125f, 0.796875f},
+ {0.632812f, 0.542969f, 0.648438f, 0.382812f}, {0.496094f, 0.804688f, 0.253906f, 0.550781f},
+ {0.433594f, 0.449219f, 0.894531f, 0.457031f}, {0.730469f, 0.988281f, 0.203125f, 0.675781f},
+ {0.800781f, 0.273438f, 0.484375f, 0.222656f}, {0.136719f, 0.710938f, 0.414062f, 0.074219f},
+ {0.617188f, 0.597656f, 0.789062f, 0.472656f}, {0.417969f, 0.851562f, 0.843750f, 0.800781f},
+ {0.027344f, 0.242188f, 0.031250f, 0.695312f}, {0.566406f, 0.699219f, 0.398438f, 0.898438f},
+ {0.089844f, 0.195312f, 0.593750f, 0.187500f}, {0.617188f, 0.531250f, 0.792969f, 0.382812f},
+ {0.199219f, 0.445312f, 0.351562f, 0.769531f}, {0.289062f, 0.074219f, 0.675781f, 0.035156f},
+ {0.492188f, 0.632812f, 0.730469f, 0.535156f}, {0.699219f, 0.976562f, 0.382812f, 0.800781f},
+ {0.875000f, 0.464844f, 0.308594f, 0.640625f}, {0.121094f, 0.800781f, 0.171875f, 0.437500f},
+ {0.257812f, 0.078125f, 0.925781f, 0.714844f}, {0.523438f, 0.550781f, 0.718750f, 0.507812f},
+ {0.625000f, 0.992188f, 0.996094f, 0.171875f}, {0.968750f, 0.238281f, 0.781250f, 0.246094f},
+ {0.191406f, 0.453125f, 0.433594f, 0.468750f}, {0.441406f, 0.839844f, 0.269531f, 0.812500f},
+ {0.855469f, 0.203125f, 0.941406f, 0.621094f}, {0.652344f, 0.890625f, 0.347656f, 0.113281f},
+ {0.972656f, 0.007812f, 0.687500f, 0.480469f}, {0.156250f, 0.679688f, 0.585938f, 0.683594f},
+ {0.015625f, 0.617188f, 0.519531f, 0.078125f}, {0.761719f, 0.437500f, 0.945312f, 0.453125f},
+ {0.371094f, 0.261719f, 0.078125f, 0.320312f}, {0.585938f, 0.652344f, 0.757812f, 0.054688f},
+ {0.031250f, 0.207031f, 0.972656f, 0.609375f}, {0.644531f, 0.585938f, 0.375000f, 0.292969f},
+ {0.210938f, 0.894531f, 0.242188f, 0.769531f}, {0.269531f, 0.246094f, 0.902344f, 0.574219f},
+ {0.882812f, 0.390625f, 0.957031f, 0.355469f}, {0.570312f, 0.457031f, 0.769531f, 0.062500f},
+ {0.726562f, 0.953125f, 0.214844f, 0.406250f}, {0.988281f, 0.347656f, 0.136719f, 0.742188f},
+ {0.066406f, 0.785156f, 0.972656f, 0.035156f}, {0.156250f, 0.425781f, 0.726562f, 0.375000f},
+ {0.207031f, 0.015625f, 0.015625f, 0.589844f}, {0.710938f, 0.898438f, 0.894531f, 0.480469f},
+ {0.031250f, 0.160156f, 0.562500f, 0.792969f}, {0.546875f, 0.980469f, 0.480469f, 0.273438f},
+ {0.863281f, 0.859375f, 0.738281f, 0.535156f}, {0.101562f, 0.355469f, 0.171875f, 0.371094f},
+ {0.910156f, 0.054688f, 0.523438f, 0.011719f}, {0.296875f, 0.808594f, 0.894531f, 0.640625f},
+ {0.937500f, 0.257812f, 0.457031f, 0.414062f}, {0.125000f, 0.113281f, 0.152344f, 0.804688f},
+ {0.507812f, 0.363281f, 0.617188f, 0.882812f}, {0.957031f, 0.195312f, 0.394531f, 0.656250f},
+ {0.054688f, 0.695312f, 0.906250f, 0.750000f}, {0.902344f, 0.070312f, 0.703125f, 0.582031f},
+ {0.421875f, 0.929688f, 0.031250f, 0.140625f}, {0.187500f, 0.167969f, 0.671875f, 0.433594f},
+ {0.476562f, 0.101562f, 0.363281f, 0.980469f}, {0.281250f, 0.683594f, 0.570312f, 0.765625f},
+ {0.847656f, 0.437500f, 0.472656f, 0.167969f}, {0.078125f, 0.628906f, 0.832031f, 0.605469f},
+ {0.570312f, 0.328125f, 0.593750f, 0.101562f}, {0.261719f, 0.765625f, 0.738281f, 0.503906f},
+ {0.906250f, 0.242188f, 0.164062f, 0.960938f}, {0.324219f, 0.007812f, 0.824219f, 0.164062f},
+ {0.593750f, 0.683594f, 0.570312f, 0.089844f}, {0.921875f, 0.617188f, 0.105469f, 0.296875f},
+ {0.527344f, 0.050781f, 0.632812f, 0.851562f}, {0.359375f, 0.375000f, 0.910156f, 0.726562f},
+ {0.835938f, 0.128906f, 0.070312f, 0.937500f}, {0.664062f, 0.515625f, 0.226562f, 0.027344f},
+ {0.226562f, 0.890625f, 0.500000f, 0.300781f}, {0.851562f, 0.574219f, 0.757812f, 0.648438f},
+ {0.316406f, 0.753906f, 0.257812f, 0.058594f}, {0.429688f, 0.277344f, 0.937500f, 0.507812f},
+ {0.007812f, 0.031250f, 0.019531f, 0.878906f}, {0.933594f, 0.714844f, 0.550781f, 0.308594f},
+ {0.835938f, 0.847656f, 0.136719f, 0.164062f}, {0.234375f, 0.546875f, 0.617188f, 0.968750f},
+ {0.394531f, 0.132812f, 0.902344f, 0.355469f}, {0.980469f, 0.679688f, 0.566406f, 0.019531f},
+ {0.671875f, 0.839844f, 0.468750f, 0.585938f}, {0.046875f, 0.417969f, 0.250000f, 0.378906f},
+ {0.375000f, 0.597656f, 0.023438f, 0.898438f}, {0.695312f, 0.789062f, 0.625000f, 0.753906f},
+ {0.898438f, 0.375000f, 0.875000f, 0.007812f}, {0.328125f, 0.542969f, 0.113281f, 0.531250f},
+ {0.578125f, 0.109375f, 0.542969f, 0.300781f}, {0.085938f, 0.406250f, 0.765625f, 0.988281f},
+ {0.285156f, 0.566406f, 0.062500f, 0.339844f}, {0.472656f, 0.777344f, 0.128906f, 0.164062f},
+ {0.636719f, 0.363281f, 0.628906f, 0.750000f}, {0.832031f, 0.035156f, 0.394531f, 0.835938f},
+ {0.109375f, 0.972656f, 0.667969f, 0.195312f}, {0.183594f, 0.710938f, 0.222656f, 0.890625f},
+ {0.808594f, 0.066406f, 0.046875f, 0.707031f}, {0.460938f, 0.953125f, 0.855469f, 0.476562f},
+ {0.082031f, 0.335938f, 0.652344f, 0.203125f}, {0.667969f, 0.738281f, 0.093750f, 0.121094f},
+ {0.425781f, 0.664062f, 0.417969f, 0.683594f}, {0.164062f, 0.007812f, 0.613281f, 0.964844f},
+ {0.632812f, 0.703125f, 0.042969f, 0.617188f}, {0.250000f, 0.554688f, 0.804688f, 0.464844f},
+ {0.394531f, 0.242188f, 0.371094f, 0.878906f}, {0.937500f, 0.847656f, 0.601562f, 0.816406f},
+ {0.804688f, 0.679688f, 0.195312f, 0.113281f}, {0.601562f, 0.378906f, 0.335938f, 0.320312f},
+ {0.339844f, 0.562500f, 0.812500f, 0.867188f}, {0.785156f, 0.437500f, 0.125000f, 0.140625f},
+ {0.230469f, 0.273438f, 0.355469f, 0.980469f}, {0.687500f, 0.656250f, 0.957031f, 0.468750f},
+ {0.156250f, 0.148438f, 0.082031f, 0.726562f}, {0.464844f, 0.535156f, 0.703125f, 0.898438f},
+ {0.039062f, 0.722656f, 0.324219f, 0.285156f}, {0.250000f, 0.945312f, 0.945312f, 0.117188f},
+ {0.777344f, 0.589844f, 0.093750f, 0.484375f}, {0.328125f, 0.285156f, 0.222656f, 0.023438f},
+ {0.609375f, 0.421875f, 0.828125f, 0.390625f}, {0.746094f, 0.617188f, 0.335938f, 0.929688f},
+ {0.261719f, 0.238281f, 0.449219f, 0.265625f}, {0.863281f, 0.472656f, 0.953125f, 0.031250f},
+ {0.105469f, 0.316406f, 0.292969f, 0.355469f}, {0.765625f, 0.976562f, 0.152344f, 0.531250f},
+ {0.523438f, 0.195312f, 0.933594f, 0.828125f}, {0.343750f, 0.554688f, 0.242188f, 0.304688f},
+ {0.414062f, 0.890625f, 0.414062f, 0.742188f}, {0.695312f, 0.496094f, 0.085938f, 0.250000f},
+ {0.824219f, 0.933594f, 0.316406f, 0.832031f}, {0.109375f, 0.386719f, 0.433594f, 0.347656f},
+ {0.199219f, 0.304688f, 0.000000f, 0.632812f}, {0.023438f, 0.843750f, 0.378906f, 0.988281f},
+ {0.679688f, 0.480469f, 0.746094f, 0.429688f}, {0.265625f, 0.769531f, 0.312500f, 0.574219f},
+ {0.058594f, 0.941406f, 0.593750f, 0.359375f}, {0.507812f, 0.074219f, 0.992188f, 0.527344f},
+ {0.160156f, 0.308594f, 0.167969f, 0.214844f}, {0.945312f, 0.382812f, 0.644531f, 0.964844f},
+ {0.789062f, 0.105469f, 0.117188f, 0.441406f}, {0.523438f, 0.613281f, 0.875000f, 0.812500f},
+ {0.722656f, 0.953125f, 0.492188f, 0.226562f}, {0.371094f, 0.347656f, 0.226562f, 0.617188f},
+ {0.101562f, 0.214844f, 0.984375f, 0.464844f}, {0.628906f, 0.406250f, 0.433594f, 0.742188f},
+ {0.777344f, 0.011719f, 0.035156f, 0.199219f}, {0.480469f, 0.277344f, 0.753906f, 0.855469f},
+ {0.339844f, 0.332031f, 0.347656f, 0.281250f}, {0.093750f, 0.207031f, 0.671875f, 0.792969f},
+ {0.808594f, 0.699219f, 0.156250f, 0.121094f}, {0.226562f, 0.097656f, 0.507812f, 0.335938f},
+ {0.476562f, 0.941406f, 0.367188f, 0.945312f}, {0.109375f, 0.660156f, 0.187500f, 0.210938f},
+ {0.800781f, 0.750000f, 0.609375f, 0.066406f}, {0.382812f, 0.984375f, 0.824219f, 0.714844f},
+ {0.738281f, 0.242188f, 0.296875f, 0.554688f}, {0.222656f, 0.832031f, 0.917969f, 0.906250f},
+ {0.320312f, 0.929688f, 0.464844f, 0.503906f}, {0.980469f, 0.519531f, 0.175781f, 0.277344f},
+ {0.500000f, 0.312500f, 0.808594f, 0.664062f}, {0.285156f, 0.816406f, 0.562500f, 0.789062f},
+ {0.929688f, 0.542969f, 0.437500f, 0.382812f}, {0.542969f, 0.414062f, 0.507812f, 0.023438f},
+ {0.777344f, 0.847656f, 0.308594f, 0.843750f}, {0.976562f, 0.121094f, 0.738281f, 0.527344f},
+ {0.042969f, 0.511719f, 0.164062f, 0.316406f}, {0.507812f, 0.812500f, 0.492188f, 0.824219f},
+ {0.339844f, 0.183594f, 0.875000f, 0.089844f}, {0.773438f, 0.074219f, 0.546875f, 0.281250f},
+ {0.460938f, 0.640625f, 0.929688f, 0.195312f}, {0.558594f, 0.121094f, 0.105469f, 0.695312f},
+ {0.285156f, 0.316406f, 0.781250f, 0.523438f}, {0.875000f, 0.769531f, 0.414062f, 0.019531f},
+ {0.121094f, 0.222656f, 0.984375f, 0.710938f}, {0.488281f, 0.710938f, 0.269531f, 0.398438f},
+ {0.992188f, 0.031250f, 0.625000f, 0.656250f}, {0.421875f, 0.597656f, 0.437500f, 0.101562f},
+ {0.593750f, 0.890625f, 0.777344f, 0.226562f}, {0.839844f, 0.214844f, 0.601562f, 0.589844f},
+ {0.718750f, 0.402344f, 0.253906f, 0.523438f}, {0.644531f, 0.019531f, 0.855469f, 0.687500f},
+ {0.433594f, 0.820312f, 0.667969f, 0.992188f}, {0.167969f, 0.746094f, 0.050781f, 0.238281f},
+ {0.109375f, 0.128906f, 0.582031f, 0.105469f}, {0.363281f, 0.847656f, 0.527344f, 0.527344f},
+ {0.687500f, 0.531250f, 0.191406f, 0.804688f}, {0.562500f, 0.777344f, 0.101562f, 0.683594f},
+ {0.636719f, 0.597656f, 0.796875f, 0.890625f}, {0.953125f, 0.402344f, 0.726562f, 0.113281f},
+ {0.164062f, 0.832031f, 0.011719f, 0.453125f}, {0.734375f, 0.265625f, 0.343750f, 0.019531f},
+ {0.210938f, 0.046875f, 0.675781f, 0.941406f}, {0.003906f, 0.089844f, 0.910156f, 0.421875f},
+ {0.535156f, 0.703125f, 0.523438f, 0.058594f}, {0.382812f, 0.578125f, 0.980469f, 0.582031f},
+ {0.984375f, 0.113281f, 0.699219f, 0.761719f}, {0.304688f, 0.906250f, 0.851562f, 0.023438f},
+ {0.859375f, 0.167969f, 0.250000f, 0.261719f}, {0.453125f, 0.230469f, 0.144531f, 0.113281f},
+ {0.960938f, 0.429688f, 0.453125f, 0.828125f}, {0.757812f, 0.628906f, 0.695312f, 0.156250f},
+ {0.375000f, 0.792969f, 0.343750f, 0.757812f}, {0.691406f, 0.476562f, 0.558594f, 0.593750f},
+ {0.250000f, 0.906250f, 0.300781f, 0.332031f}, {0.140625f, 0.152344f, 0.707031f, 0.136719f},
+ {0.871094f, 0.824219f, 0.394531f, 0.667969f}, {0.582031f, 0.496094f, 0.828125f, 0.941406f},
+ {0.453125f, 0.589844f, 0.769531f, 0.394531f}, {0.167969f, 0.910156f, 0.285156f, 0.058594f},
+ {0.027344f, 0.750000f, 0.195312f, 0.675781f}, {0.570312f, 0.949219f, 0.867188f, 0.515625f},
+ {0.843750f, 0.519531f, 0.078125f, 0.933594f}, {0.937500f, 0.878906f, 0.835938f, 0.070312f},
+ {0.539062f, 0.039062f, 0.292969f, 0.625000f}, {0.761719f, 0.492188f, 0.796875f, 0.558594f},
+ {0.597656f, 0.285156f, 0.703125f, 0.828125f}, {0.160156f, 0.171875f, 0.957031f, 0.656250f},
+ {0.671875f, 0.058594f, 0.035156f, 0.433594f}, {0.503906f, 0.324219f, 0.417969f, 0.863281f},
+ {0.925781f, 0.453125f, 0.230469f, 0.250000f}, {0.566406f, 0.136719f, 0.742188f, 0.031250f},
+ {0.066406f, 0.195312f, 0.097656f, 0.968750f}, {0.417969f, 0.753906f, 0.988281f, 0.097656f},
+ {0.675781f, 0.113281f, 0.273438f, 0.546875f}, {0.726562f, 0.468750f, 0.339844f, 0.136719f},
+ {0.394531f, 0.171875f, 0.914062f, 0.253906f}, {0.144531f, 0.277344f, 0.128906f, 0.996094f},
+ {0.316406f, 0.039062f, 0.578125f, 0.644531f}, {0.714844f, 0.574219f, 0.820312f, 0.910156f},
+ {0.378906f, 0.222656f, 0.269531f, 0.437500f}, {0.906250f, 0.984375f, 0.707031f, 0.175781f},
+ {0.113281f, 0.371094f, 0.339844f, 0.765625f}, {0.851562f, 0.882812f, 0.242188f, 0.570312f},
+ {0.015625f, 0.472656f, 0.453125f, 0.343750f}, {0.664062f, 0.972656f, 0.292969f, 0.984375f},
+ {0.097656f, 0.523438f, 0.660156f, 0.421875f}, {0.429688f, 0.058594f, 0.527344f, 0.234375f},
+ {0.187500f, 0.933594f, 0.070312f, 0.925781f}, {0.628906f, 0.132812f, 0.679688f, 0.558594f},
+ {0.753906f, 0.796875f, 0.203125f, 0.773438f}, {0.070312f, 0.484375f, 0.847656f, 0.328125f},
+ {0.355469f, 0.964844f, 0.035156f, 0.855469f}, {0.527344f, 0.335938f, 0.390625f, 0.933594f},
+ {0.210938f, 0.625000f, 0.191406f, 0.367188f}, {0.976562f, 0.460938f, 0.507812f, 0.191406f},
+ {0.582031f, 0.171875f, 0.425781f, 0.765625f}, {0.882812f, 0.507812f, 0.761719f, 0.332031f},
+ {0.812500f, 0.914062f, 0.265625f, 0.636719f}, {0.496094f, 0.050781f, 0.976562f, 0.875000f},
+ {0.980469f, 0.355469f, 0.738281f, 0.187500f}, {0.031250f, 0.898438f, 0.605469f, 0.476562f},
+ {0.320312f, 0.027344f, 0.410156f, 0.597656f}, {0.441406f, 0.734375f, 0.507812f, 0.218750f},
+ {0.066406f, 0.140625f, 0.894531f, 0.714844f}, {0.894531f, 0.468750f, 0.550781f, 0.562500f},
+ {0.652344f, 0.789062f, 0.785156f, 0.648438f}, {0.863281f, 0.972656f, 0.132812f, 0.191406f},
+ {0.457031f, 0.425781f, 0.277344f, 0.894531f}, {0.738281f, 0.203125f, 0.605469f, 0.683594f},
+ {0.640625f, 0.808594f, 0.480469f, 0.472656f}, {0.777344f, 0.515625f, 0.183594f, 0.199219f},
+ {0.125000f, 0.339844f, 0.953125f, 0.921875f}, {0.570312f, 0.671875f, 0.539062f, 0.500000f},
+ {0.210938f, 0.730469f, 0.781250f, 0.671875f}, {0.097656f, 0.019531f, 0.019531f, 0.890625f},
+ {0.597656f, 0.968750f, 0.835938f, 0.406250f}, {0.468750f, 0.191406f, 0.914062f, 0.082031f},
+ {0.042969f, 0.667969f, 0.445312f, 0.847656f}, {0.648438f, 0.421875f, 0.050781f, 0.722656f},
+ {0.335938f, 0.773438f, 0.179688f, 0.000000f}, {0.992188f, 0.300781f, 0.636719f, 0.257812f},
+ {0.273438f, 0.066406f, 0.093750f, 0.562500f}, {0.750000f, 0.171875f, 0.476562f, 0.902344f},
+ {0.902344f, 0.660156f, 0.691406f, 0.320312f}, {0.300781f, 0.445312f, 0.527344f, 0.144531f},
+ {0.195312f, 0.621094f, 0.406250f, 0.457031f}, {0.429688f, 0.152344f, 0.968750f, 0.707031f},
+ {0.273438f, 0.734375f, 0.453125f, 0.414062f}, {0.003906f, 0.914062f, 0.578125f, 0.265625f},
+ {0.410156f, 0.355469f, 0.093750f, 0.484375f}, {0.996094f, 0.847656f, 0.316406f, 0.148438f},
+ {0.839844f, 0.605469f, 0.484375f, 0.359375f}, {0.031250f, 0.511719f, 0.898438f, 0.773438f},
+ {0.187500f, 0.726562f, 0.679688f, 0.589844f}, {0.867188f, 0.644531f, 0.355469f, 0.390625f},
+ {0.136719f, 0.878906f, 0.843750f, 0.640625f}, {0.597656f, 0.589844f, 0.597656f, 0.441406f},
+ {0.222656f, 0.394531f, 0.714844f, 0.355469f}, {0.003906f, 0.863281f, 0.031250f, 0.925781f},
+ {0.871094f, 0.691406f, 0.761719f, 0.597656f}, {0.621094f, 0.628906f, 0.195312f, 0.414062f},
+ {0.230469f, 0.769531f, 0.941406f, 0.074219f}, {0.582031f, 0.929688f, 0.023438f, 0.230469f},
+ {0.812500f, 0.433594f, 0.398438f, 0.722656f}, {0.195312f, 0.304688f, 0.996094f, 0.000000f},
+ {0.679688f, 0.761719f, 0.089844f, 0.496094f}, {0.593750f, 0.605469f, 0.636719f, 0.925781f},
+ {0.222656f, 0.277344f, 0.750000f, 0.136719f}, {0.902344f, 0.730469f, 0.164062f, 0.644531f},
+ {0.515625f, 0.191406f, 0.863281f, 0.785156f}, {0.722656f, 0.585938f, 0.031250f, 0.601562f},
+ {0.949219f, 0.457031f, 0.921875f, 0.183594f}, {0.312500f, 0.851562f, 0.468750f, 0.066406f},
+ {0.003906f, 0.390625f, 0.750000f, 0.257812f}, {0.265625f, 0.304688f, 0.308594f, 0.496094f},
+ {0.808594f, 0.097656f, 0.542969f, 0.035156f}, {0.894531f, 0.761719f, 0.136719f, 0.152344f},
+ {0.089844f, 0.691406f, 0.992188f, 0.445312f}, {0.382812f, 0.070312f, 0.792969f, 0.070312f},
+ {0.011719f, 0.984375f, 0.355469f, 0.843750f}, {0.281250f, 0.308594f, 0.910156f, 0.593750f},
+ {0.660156f, 0.648438f, 0.152344f, 0.429688f}, {0.210938f, 0.210938f, 0.468750f, 0.722656f},
+ {0.406250f, 0.703125f, 0.019531f, 0.304688f}, {0.148438f, 0.273438f, 0.882812f, 0.078125f},
+ {0.832031f, 0.089844f, 0.250000f, 0.968750f}, {0.242188f, 0.863281f, 0.652344f, 0.335938f},
+ {0.601562f, 0.371094f, 0.199219f, 0.847656f}, {0.484375f, 0.679688f, 0.062500f, 0.277344f},
+ {0.289062f, 0.617188f, 0.453125f, 0.378906f}, {0.941406f, 0.343750f, 0.863281f, 0.515625f},
+ {0.152344f, 0.281250f, 0.218750f, 0.128906f}, {0.238281f, 0.746094f, 0.039062f, 0.316406f},
+ {0.046875f, 0.636719f, 0.792969f, 0.871094f}, {0.496094f, 0.031250f, 0.351562f, 0.390625f},
+ {0.406250f, 0.980469f, 0.660156f, 0.789062f}, {0.707031f, 0.558594f, 0.054688f, 0.609375f},
+ {0.886719f, 0.859375f, 0.890625f, 0.320312f}, {0.312500f, 0.132812f, 0.394531f, 0.039062f},
+ {0.816406f, 0.265625f, 0.250000f, 0.242188f}, {0.906250f, 0.355469f, 0.097656f, 0.488281f},
+ {0.410156f, 0.539062f, 0.746094f, 0.921875f}, {0.769531f, 0.093750f, 0.972656f, 0.539062f},
+ {0.203125f, 0.246094f, 0.527344f, 0.425781f}, {0.070312f, 0.695312f, 0.324219f, 0.800781f},
+ {0.820312f, 0.878906f, 0.906250f, 0.117188f}, {0.515625f, 0.375000f, 0.574219f, 0.761719f},
+ {0.660156f, 0.238281f, 0.941406f, 0.605469f}, {0.113281f, 0.105469f, 0.132812f, 0.835938f},
+ {0.710938f, 0.820312f, 0.652344f, 0.238281f}, {0.621094f, 0.394531f, 0.214844f, 0.992188f},
+ {0.136719f, 0.253906f, 0.011719f, 0.187500f}, {0.921875f, 0.578125f, 0.902344f, 0.046875f},
+ {0.730469f, 0.441406f, 0.246094f, 0.886719f}, {0.300781f, 0.800781f, 0.847656f, 0.957031f},
+ {0.238281f, 0.222656f, 0.648438f, 0.687500f}, {0.355469f, 0.894531f, 0.136719f, 0.109375f},
+ {0.707031f, 0.027344f, 0.554688f, 0.199219f}, {0.453125f, 0.285156f, 0.003906f, 0.800781f},
+ {0.953125f, 0.074219f, 0.511719f, 0.156250f}, {0.750000f, 0.671875f, 0.152344f, 0.863281f},
+ {0.824219f, 0.238281f, 0.402344f, 0.699219f}, {0.339844f, 0.003906f, 0.492188f, 0.042969f},
+ {0.964844f, 0.980469f, 0.867188f, 0.753906f}, {0.101562f, 0.367188f, 0.617188f, 0.511719f},
+ {0.492188f, 0.488281f, 0.363281f, 0.300781f}, {0.062500f, 0.156250f, 0.667969f, 0.800781f},
+ {0.277344f, 0.652344f, 0.550781f, 0.355469f}, {0.441406f, 0.062500f, 0.847656f, 0.601562f},
+ {0.953125f, 0.535156f, 0.199219f, 0.847656f}, {0.316406f, 0.140625f, 0.011719f, 0.250000f},
+ {0.757812f, 0.019531f, 0.910156f, 0.390625f}, {0.359375f, 0.390625f, 0.570312f, 0.042969f},
+ {0.054688f, 0.902344f, 0.386719f, 0.863281f}, {0.824219f, 0.339844f, 0.714844f, 0.304688f},
+ {0.390625f, 0.632812f, 0.242188f, 0.457031f}, {0.562500f, 0.238281f, 0.589844f, 0.734375f},
+ {0.921875f, 0.683594f, 0.097656f, 0.953125f}, {0.507812f, 0.550781f, 0.949219f, 0.816406f},
+ {0.671875f, 0.191406f, 0.878906f, 0.617188f}, {0.175781f, 0.835938f, 0.644531f, 0.703125f},
+ {0.316406f, 0.273438f, 0.718750f, 0.789062f}, {0.757812f, 0.871094f, 0.000000f, 0.550781f},
+ {0.546875f, 0.566406f, 0.113281f, 0.265625f}, {0.472656f, 0.382812f, 0.621094f, 0.941406f},
+ {0.925781f, 0.796875f, 0.699219f, 0.156250f}, {0.058594f, 0.437500f, 0.386719f, 0.050781f},
+ {0.777344f, 0.945312f, 0.308594f, 0.781250f}, {0.535156f, 0.496094f, 0.820312f, 0.394531f},
+ {0.906250f, 0.644531f, 0.125000f, 0.656250f}, {0.703125f, 0.542969f, 0.371094f, 0.144531f},
+ {0.804688f, 0.226562f, 0.988281f, 0.914062f}, {0.378906f, 0.906250f, 0.300781f, 0.046875f},
+ {0.035156f, 0.175781f, 0.753906f, 0.785156f}, {0.570312f, 0.566406f, 0.628906f, 0.976562f},
+ {0.343750f, 0.125000f, 0.390625f, 0.730469f}, {0.804688f, 0.878906f, 0.722656f, 0.238281f},
+ {0.605469f, 0.453125f, 0.921875f, 0.539062f}, {0.953125f, 0.257812f, 0.089844f, 0.093750f},
+ {0.179688f, 0.085938f, 0.429688f, 0.714844f}, {0.347656f, 0.402344f, 0.281250f, 0.167969f},
+ {0.628906f, 0.300781f, 0.613281f, 0.449219f}, {0.007812f, 0.503906f, 0.507812f, 0.984375f},
+ {0.539062f, 0.601562f, 0.187500f, 0.710938f}, {0.281250f, 0.835938f, 0.660156f, 0.632812f},
+ {0.113281f, 0.738281f, 0.363281f, 0.285156f}, {0.953125f, 0.933594f, 0.593750f, 0.191406f},
+ {0.554688f, 0.007812f, 0.238281f, 0.355469f}, {0.683594f, 0.625000f, 0.800781f, 0.980469f},
+ {0.417969f, 0.472656f, 0.000000f, 0.500000f}, {0.222656f, 0.984375f, 0.371094f, 0.218750f},
+ {0.382812f, 0.777344f, 0.253906f, 0.070312f}, {0.972656f, 0.566406f, 0.808594f, 0.378906f},
+ {0.472656f, 0.308594f, 0.316406f, 0.542969f}, {0.789062f, 0.058594f, 0.609375f, 0.781250f},
+ {0.855469f, 0.972656f, 0.726562f, 0.648438f}, {0.359375f, 0.652344f, 0.519531f, 0.746094f},
+ {0.511719f, 0.000000f, 0.425781f, 0.582031f}, {0.074219f, 0.125000f, 0.750000f, 0.296875f},
+ {0.625000f, 0.683594f, 0.382812f, 0.027344f}, {0.546875f, 0.960938f, 0.199219f, 0.523438f},
+ {0.792969f, 0.414062f, 0.964844f, 0.917969f}, {0.269531f, 0.488281f, 0.773438f, 0.308594f},
+ {0.375000f, 0.332031f, 0.312500f, 0.007812f}, {0.519531f, 0.941406f, 0.894531f, 0.570312f},
+ {0.175781f, 0.777344f, 0.226562f, 0.210938f}, {0.558594f, 0.558594f, 0.687500f, 0.324219f},
+ {0.449219f, 0.316406f, 0.078125f, 0.828125f}, {0.656250f, 0.101562f, 0.449219f, 0.164062f},
+ {0.839844f, 0.832031f, 0.250000f, 0.683594f}, {0.914062f, 0.253906f, 0.777344f, 0.554688f},
+ {0.738281f, 0.906250f, 0.144531f, 0.125000f}, {0.550781f, 0.714844f, 0.472656f, 0.945312f},
+ {0.039062f, 0.863281f, 0.695312f, 0.660156f}, {0.140625f, 0.445312f, 0.421875f, 0.453125f},
+ {0.476562f, 0.832031f, 0.796875f, 0.738281f}, {0.980469f, 0.679688f, 0.496094f, 0.101562f},
+ {0.269531f, 0.792969f, 0.121094f, 0.500000f}, {0.160156f, 0.101562f, 0.324219f, 0.152344f},
+ {0.656250f, 0.960938f, 0.820312f, 0.894531f}, {0.226562f, 0.000000f, 0.406250f, 0.640625f},
+ {0.851562f, 0.742188f, 0.156250f, 0.343750f}, {0.136719f, 0.917969f, 0.359375f, 0.425781f},
+ {0.414062f, 0.054688f, 0.492188f, 0.210938f}, {0.613281f, 0.441406f, 0.257812f, 0.300781f},
+ {0.941406f, 0.511719f, 0.449219f, 0.972656f}, {0.699219f, 0.128906f, 0.570312f, 0.652344f},
+ {0.847656f, 0.226562f, 0.281250f, 0.003906f}, {0.128906f, 0.734375f, 0.871094f, 0.375000f},
+ {0.339844f, 0.007812f, 0.535156f, 0.507812f}, {0.726562f, 0.117188f, 0.074219f, 0.894531f},
+ {0.257812f, 0.582031f, 0.933594f, 0.570312f}, {0.593750f, 0.171875f, 0.566406f, 0.250000f},
+ {0.351562f, 0.410156f, 0.484375f, 0.488281f}, {0.117188f, 0.996094f, 0.703125f, 0.761719f},
+ {0.191406f, 0.308594f, 0.843750f, 0.425781f}, {0.992188f, 0.003906f, 0.578125f, 0.609375f},
+ {0.769531f, 0.503906f, 0.164062f, 0.097656f}, {0.105469f, 0.816406f, 0.945312f, 0.460938f},
+ {0.699219f, 0.046875f, 0.109375f, 0.824219f}, {0.421875f, 0.957031f, 0.535156f, 0.007812f},
+ {0.898438f, 0.359375f, 0.312500f, 0.636719f}, {0.281250f, 0.718750f, 0.582031f, 0.964844f},
+ {0.082031f, 0.605469f, 0.863281f, 0.285156f}, {0.847656f, 0.800781f, 0.757812f, 0.070312f},
+ {0.445312f, 0.203125f, 0.125000f, 0.820312f}, {0.980469f, 0.902344f, 0.714844f, 0.562500f},
+ {0.164062f, 0.691406f, 0.921875f, 0.359375f}, {0.734375f, 0.046875f, 0.812500f, 0.144531f},
+ {0.613281f, 0.457031f, 0.480469f, 0.777344f}, {0.359375f, 0.320312f, 0.140625f, 0.089844f},
+ {0.488281f, 0.574219f, 0.886719f, 0.863281f}, {0.152344f, 0.855469f, 0.703125f, 0.636719f},
+ {0.921875f, 0.136719f, 0.421875f, 0.296875f}, {0.011719f, 0.527344f, 0.167969f, 0.710938f},
+ {0.601562f, 0.027344f, 0.742188f, 0.441406f}, {0.328125f, 0.707031f, 0.066406f, 0.882812f},
+ {0.050781f, 0.906250f, 0.875000f, 0.015625f}, {0.246094f, 0.500000f, 0.378906f, 0.339844f},
+ {0.566406f, 0.769531f, 0.117188f, 0.121094f}, {0.179688f, 0.195312f, 0.175781f, 0.386719f},
+ {0.656250f, 0.527344f, 0.988281f, 0.816406f}, {0.882812f, 0.304688f, 0.042969f, 0.449219f},
+ {0.425781f, 0.375000f, 0.601562f, 0.242188f}, {0.929688f, 0.562500f, 0.812500f, 0.617188f},
+ {0.101562f, 0.164062f, 0.261719f, 0.468750f}, {0.644531f, 0.820312f, 0.441406f, 0.718750f},
+ {0.023438f, 0.523438f, 0.632812f, 0.261719f}, {0.898438f, 0.437500f, 0.945312f, 0.953125f},
+ {0.066406f, 0.140625f, 0.109375f, 0.492188f}, {0.281250f, 0.882812f, 0.832031f, 0.902344f},
+ {0.781250f, 0.207031f, 0.292969f, 0.445312f}, {0.148438f, 0.722656f, 0.976562f, 0.089844f},
+ {0.402344f, 0.593750f, 0.523438f, 0.960938f}, {0.351562f, 0.046875f, 0.066406f, 0.871094f},
+ {0.175781f, 0.402344f, 0.316406f, 0.402344f}, {0.640625f, 0.339844f, 0.937500f, 0.046875f},
+ {0.871094f, 0.199219f, 0.589844f, 0.203125f}, {0.414062f, 0.945312f, 0.355469f, 0.316406f},
+ {0.691406f, 0.246094f, 0.277344f, 0.902344f}, {0.539062f, 0.507812f, 0.980469f, 0.566406f},
+ {0.609375f, 0.167969f, 0.214844f, 0.679688f}, {0.781250f, 0.429688f, 0.617188f, 0.820312f},
+ {0.464844f, 0.285156f, 0.875000f, 0.375000f}, {0.101562f, 0.488281f, 0.511719f, 0.019531f},
+ {0.710938f, 0.156250f, 0.691406f, 0.121094f}, {0.363281f, 0.359375f, 0.792969f, 0.578125f},
+ {0.792969f, 0.593750f, 0.046875f, 0.906250f}, {0.476562f, 0.972656f, 0.199219f, 0.089844f},
+ {0.031250f, 0.667969f, 0.824219f, 0.390625f}, {0.242188f, 0.343750f, 0.933594f, 0.480469f},
+ {0.421875f, 0.937500f, 0.339844f, 0.132812f}, {0.191406f, 0.613281f, 0.183594f, 0.750000f},
+ {0.617188f, 0.472656f, 0.800781f, 0.675781f}, {0.867188f, 0.855469f, 0.230469f, 0.203125f},
+ {0.449219f, 0.328125f, 0.660156f, 0.953125f}, {0.964844f, 0.746094f, 0.769531f, 0.828125f},
+ {0.007812f, 0.824219f, 0.179688f, 0.011719f}, {0.503906f, 0.125000f, 0.085938f, 0.531250f},
+ {0.421875f, 0.777344f, 0.433594f, 0.199219f}, {0.660156f, 0.710938f, 0.027344f, 0.679688f},
+ {0.261719f, 0.941406f, 0.347656f, 0.257812f}, {0.527344f, 0.386719f, 0.492188f, 0.351562f},
+ {0.843750f, 0.660156f, 0.671875f, 0.179688f}, {0.195312f, 0.195312f, 0.246094f, 0.578125f},
+ {0.062500f, 0.539062f, 0.828125f, 0.429688f}, {0.519531f, 0.847656f, 0.156250f, 0.363281f},
+ {0.730469f, 0.156250f, 0.472656f, 0.855469f}, {0.789062f, 0.941406f, 0.210938f, 0.527344f},
+ {0.250000f, 0.445312f, 0.960938f, 0.218750f}, {0.671875f, 0.078125f, 0.320312f, 0.753906f},
+ {0.500000f, 0.378906f, 0.417969f, 0.015625f}, {0.222656f, 0.988281f, 0.066406f, 0.949219f},
+ {0.828125f, 0.164062f, 0.285156f, 0.453125f}, {0.031250f, 0.222656f, 0.761719f, 0.589844f},
+ {0.878906f, 0.800781f, 0.042969f, 0.691406f}, {0.308594f, 0.351562f, 0.460938f, 0.027344f},
+ {0.789062f, 0.417969f, 0.656250f, 0.160156f}, {0.726562f, 0.285156f, 0.972656f, 0.941406f},
+ {0.859375f, 0.207031f, 0.597656f, 0.796875f}, {0.535156f, 0.839844f, 0.496094f, 0.621094f},
+ {0.941406f, 0.343750f, 0.445312f, 0.285156f}, {0.097656f, 0.164062f, 0.949219f, 0.914062f},
+ {0.687500f, 0.421875f, 0.789062f, 0.492188f}, {0.453125f, 0.871094f, 0.675781f, 0.214844f},
+ {0.035156f, 0.710938f, 0.289062f, 0.078125f}, {0.781250f, 0.941406f, 0.542969f, 0.703125f},
+ {0.207031f, 0.777344f, 0.101562f, 0.867188f}, {0.152344f, 0.089844f, 0.339844f, 0.984375f},
+ {0.480469f, 0.257812f, 0.707031f, 0.371094f}, {0.843750f, 0.722656f, 0.070312f, 0.835938f},
+ {0.230469f, 0.199219f, 0.750000f, 0.417969f}, {0.417969f, 0.054688f, 0.542969f, 0.773438f},
+ {0.617188f, 0.632812f, 0.375000f, 0.070312f}, {0.710938f, 0.386719f, 0.578125f, 0.613281f},
+ {0.921875f, 0.500000f, 0.652344f, 0.281250f}, {0.246094f, 0.921875f, 0.164062f, 0.644531f},
+ {0.687500f, 0.445312f, 0.890625f, 0.218750f}, {0.023438f, 0.789062f, 0.718750f, 0.476562f},
+ {0.996094f, 0.523438f, 0.820312f, 0.269531f}, {0.507812f, 0.117188f, 0.234375f, 0.710938f},
+ {0.253906f, 0.628906f, 0.105469f, 0.531250f}, {0.824219f, 0.574219f, 0.886719f, 0.800781f},
+ {0.070312f, 0.316406f, 0.050781f, 0.164062f}, {0.199219f, 0.039062f, 0.664062f, 0.964844f},
+ {0.867188f, 0.652344f, 0.769531f, 0.277344f}, {0.023438f, 0.867188f, 0.078125f, 0.222656f},
+ {0.335938f, 0.769531f, 0.960938f, 0.535156f}, {0.898438f, 0.535156f, 0.015625f, 0.996094f},
+ {0.585938f, 0.890625f, 0.269531f, 0.691406f}, {0.054688f, 0.644531f, 0.925781f, 0.175781f},
+ {0.980469f, 0.261719f, 0.585938f, 0.511719f}, {0.285156f, 0.789062f, 0.667969f, 0.742188f},
+ {0.113281f, 0.023438f, 0.402344f, 0.859375f}, {0.578125f, 0.417969f, 0.066406f, 0.230469f},
+ {0.800781f, 0.816406f, 0.753906f, 0.921875f}, {0.992188f, 0.164062f, 0.492188f, 0.816406f},
+ {0.519531f, 0.281250f, 0.414062f, 0.289062f}, {0.085938f, 0.675781f, 0.968750f, 0.449219f},
+ {0.167969f, 0.964844f, 0.046875f, 0.347656f}, {0.671875f, 0.035156f, 0.347656f, 0.113281f},
+ {0.761719f, 0.257812f, 0.277344f, 0.714844f}, {0.300781f, 0.457031f, 0.925781f, 0.316406f},
+ {0.578125f, 0.605469f, 0.617188f, 0.984375f}, {0.875000f, 0.082031f, 0.789062f, 0.851562f},
+ {0.156250f, 0.437500f, 0.265625f, 0.558594f}, {0.453125f, 0.253906f, 0.738281f, 0.898438f},
+ {0.968750f, 0.761719f, 0.882812f, 0.703125f}, {0.312500f, 0.480469f, 0.406250f, 0.949219f},
+ {0.679688f, 0.097656f, 0.031250f, 0.773438f}, {0.589844f, 0.308594f, 0.996094f, 0.125000f},
+ {0.375000f, 0.679688f, 0.691406f, 0.675781f}, {0.128906f, 0.000000f, 0.375000f, 0.929688f},
+ {0.562500f, 0.753906f, 0.570312f, 0.421875f}, {0.050781f, 0.562500f, 0.003906f, 0.304688f},
+ {0.386719f, 0.250000f, 0.531250f, 0.648438f}, {0.937500f, 0.781250f, 0.621094f, 0.843750f},
+ {0.437500f, 0.636719f, 0.953125f, 0.515625f}, {0.695312f, 0.515625f, 0.214844f, 0.242188f},
+ {0.253906f, 0.949219f, 0.562500f, 0.910156f}, {0.636719f, 0.097656f, 0.296875f, 0.406250f},
+ {0.453125f, 0.746094f, 0.109375f, 0.566406f}, {0.121094f, 0.917969f, 0.832031f, 0.480469f},
+ {0.269531f, 0.632812f, 0.207031f, 0.105469f}, {0.183594f, 0.449219f, 0.281250f, 0.179688f},
+ {0.746094f, 0.675781f, 0.031250f, 0.691406f}, {0.402344f, 0.113281f, 0.558594f, 0.574219f},
+ {0.894531f, 0.613281f, 0.238281f, 0.839844f}, {0.277344f, 0.277344f, 0.351562f, 0.964844f},
+ {0.976562f, 0.074219f, 0.832031f, 0.535156f}, {0.332031f, 0.472656f, 0.464844f, 0.335938f},
+ {0.738281f, 0.597656f, 0.882812f, 0.171875f}, {0.601562f, 0.855469f, 0.937500f, 0.125000f},
+ {0.292969f, 0.648438f, 0.500000f, 0.058594f}, {0.687500f, 0.996094f, 0.175781f, 0.660156f},
+ {0.984375f, 0.582031f, 0.820312f, 0.527344f}, {0.757812f, 0.761719f, 0.253906f, 0.339844f},
+ {0.488281f, 0.843750f, 0.472656f, 0.128906f}, {0.324219f, 0.265625f, 0.007812f, 0.726562f},
+ {0.085938f, 0.023438f, 0.792969f, 0.386719f}, {0.519531f, 0.664062f, 0.414062f, 0.789062f},
+ {0.578125f, 0.175781f, 0.351562f, 0.015625f}, {0.792969f, 0.292969f, 0.035156f, 0.585938f},
+ {0.308594f, 0.992188f, 0.441406f, 0.769531f}, {0.105469f, 0.683594f, 0.648438f, 0.988281f},
+ {0.765625f, 0.804688f, 0.519531f, 0.093750f}, {0.371094f, 0.074219f, 0.734375f, 0.621094f},
+ {0.929688f, 0.746094f, 0.156250f, 0.359375f}, {0.296875f, 0.964844f, 0.546875f, 0.011719f},
+ {0.722656f, 0.554688f, 0.453125f, 0.414062f}, {0.402344f, 0.347656f, 0.371094f, 0.761719f},
+ {0.964844f, 0.207031f, 0.187500f, 0.078125f}, {0.511719f, 0.074219f, 0.558594f, 0.476562f},
+ {0.257812f, 0.808594f, 0.433594f, 0.781250f}, {0.191406f, 0.410156f, 0.746094f, 0.839844f},
+ {0.750000f, 0.109375f, 0.117188f, 0.281250f}, {0.531250f, 0.195312f, 0.312500f, 0.031250f},
+ {0.859375f, 0.562500f, 0.976562f, 0.570312f}, {0.664062f, 0.703125f, 0.148438f, 0.320312f},
+ {0.363281f, 0.078125f, 0.687500f, 0.613281f}, {0.062500f, 0.531250f, 0.593750f, 0.082031f},
+ {0.703125f, 0.886719f, 0.105469f, 0.539062f}, {0.316406f, 0.382812f, 0.632812f, 0.035156f},
+ {0.390625f, 0.218750f, 0.453125f, 0.644531f}, {0.835938f, 0.562500f, 0.718750f, 0.582031f},
+ {0.214844f, 0.660156f, 0.546875f, 0.886719f}, {0.933594f, 0.359375f, 0.875000f, 0.160156f},
+ {0.089844f, 0.890625f, 0.218750f, 0.378906f}, {0.730469f, 0.210938f, 0.519531f, 0.062500f},
+ {0.359375f, 0.558594f, 0.972656f, 0.480469f}, {0.621094f, 0.324219f, 0.074219f, 0.136719f},
+ {0.042969f, 0.871094f, 0.191406f, 0.304688f}, {0.761719f, 0.589844f, 0.449219f, 0.050781f},
+ {0.476562f, 0.914062f, 0.750000f, 0.253906f}, {0.929688f, 0.414062f, 0.621094f, 0.476562f},
+ {0.218750f, 0.234375f, 0.269531f, 0.195312f}, {0.867188f, 0.519531f, 0.082031f, 0.042969f},
+ {0.320312f, 0.648438f, 0.773438f, 0.613281f}, {0.898438f, 0.328125f, 0.882812f, 0.882812f},
+ {0.769531f, 0.882812f, 0.175781f, 0.113281f}, {0.093750f, 0.109375f, 0.828125f, 0.183594f},
+ {0.566406f, 0.406250f, 0.687500f, 0.378906f}, {0.179688f, 0.714844f, 0.394531f, 0.054688f},
+ {0.984375f, 0.042969f, 0.863281f, 0.316406f}, {0.066406f, 0.671875f, 0.937500f, 0.824219f},
+ {0.574219f, 0.183594f, 0.351562f, 0.757812f}, {0.371094f, 0.570312f, 0.531250f, 0.347656f},
+ {0.675781f, 0.070312f, 0.718750f, 0.261719f}, {0.480469f, 0.949219f, 0.902344f, 0.976562f},
+ {0.808594f, 0.250000f, 0.648438f, 0.398438f}, {0.343750f, 0.539062f, 0.761719f, 0.054688f},
+ {0.601562f, 0.984375f, 0.082031f, 0.152344f}, {0.828125f, 0.828125f, 0.917969f, 0.730469f},
+ {0.121094f, 0.355469f, 0.625000f, 0.636719f}, {0.554688f, 0.226562f, 0.148438f, 0.406250f},
+ {0.398438f, 0.148438f, 0.222656f, 0.792969f}, {0.945312f, 0.429688f, 0.664062f, 0.562500f},
+ {0.082031f, 0.015625f, 0.410156f, 0.753906f}, {0.351562f, 0.367188f, 0.039062f, 0.187500f},
+ {0.562500f, 0.121094f, 0.359375f, 0.238281f}, {0.191406f, 0.308594f, 0.992188f, 0.886719f},
+ {0.128906f, 0.703125f, 0.144531f, 0.988281f}, {0.812500f, 0.539062f, 0.707031f, 0.558594f},
+ {0.968750f, 0.968750f, 0.933594f, 0.179688f}, {0.429688f, 0.335938f, 0.214844f, 0.929688f},
+ {0.195312f, 0.753906f, 0.554688f, 0.859375f}, {0.902344f, 0.867188f, 0.613281f, 0.363281f},
+ {0.468750f, 0.031250f, 0.960938f, 0.152344f}, {0.613281f, 0.234375f, 0.183594f, 0.304688f},
+ {0.210938f, 0.417969f, 0.292969f, 0.429688f}, {0.570312f, 0.476562f, 0.855469f, 0.882812f},
+ {0.652344f, 0.828125f, 0.406250f, 0.480469f}, {0.453125f, 0.386719f, 0.941406f, 0.722656f},
+ {0.085938f, 0.117188f, 0.246094f, 0.585938f}, {0.558594f, 0.710938f, 0.730469f, 0.933594f},
+ {0.140625f, 0.609375f, 0.804688f, 0.632812f}, {0.828125f, 0.996094f, 0.652344f, 0.320312f},
+ {0.687500f, 0.312500f, 0.335938f, 0.234375f}, {0.441406f, 0.472656f, 0.222656f, 0.402344f},
+ {0.632812f, 0.730469f, 0.890625f, 0.937500f}, {0.332031f, 0.871094f, 0.531250f, 0.675781f},
+ {0.164062f, 0.304688f, 0.464844f, 0.445312f}, {0.906250f, 0.914062f, 0.851562f, 0.160156f},
+ {0.460938f, 0.238281f, 0.246094f, 0.722656f}, {0.273438f, 0.753906f, 0.917969f, 0.398438f},
+ {0.777344f, 0.046875f, 0.304688f, 0.992188f}, {0.941406f, 0.496094f, 0.863281f, 0.847656f},
+ {0.554688f, 0.781250f, 0.144531f, 0.179688f}, {0.050781f, 0.097656f, 0.816406f, 0.406250f},
+ {0.621094f, 0.925781f, 0.003906f, 0.789062f}, {0.468750f, 0.515625f, 0.406250f, 0.273438f},
+ {0.820312f, 0.156250f, 0.679688f, 0.621094f}, {0.027344f, 0.691406f, 0.140625f, 0.734375f},
+ {0.234375f, 0.828125f, 0.382812f, 0.808594f}, {0.890625f, 0.054688f, 0.640625f, 0.410156f},
+ {0.398438f, 0.144531f, 0.582031f, 0.652344f}, {0.117188f, 0.722656f, 0.804688f, 0.519531f},
+ {0.265625f, 0.035156f, 0.132812f, 0.835938f}, {0.824219f, 0.781250f, 0.335938f, 0.589844f},
+ {0.015625f, 0.972656f, 0.503906f, 0.324219f}, {0.644531f, 0.367188f, 0.843750f, 0.792969f},
+ {0.460938f, 0.839844f, 0.656250f, 0.375000f}, {0.707031f, 0.179688f, 0.445312f, 0.496094f},
+ {0.148438f, 0.484375f, 0.253906f, 0.269531f}, {0.292969f, 0.585938f, 0.347656f, 0.710938f},
+ {0.800781f, 0.292969f, 0.101562f, 0.792969f}, {0.343750f, 0.847656f, 0.503906f, 0.992188f},
+ {0.511719f, 0.453125f, 0.160156f, 0.542969f}, {0.843750f, 0.261719f, 0.628906f, 0.207031f},
+ {0.214844f, 0.878906f, 0.777344f, 0.082031f}, {0.957031f, 0.492188f, 0.054688f, 0.855469f},
+ {0.890625f, 0.382812f, 0.136719f, 0.656250f}, {0.019531f, 0.804688f, 0.328125f, 0.519531f},
+ {0.636719f, 0.042969f, 0.402344f, 0.753906f}, {0.148438f, 0.753906f, 0.179688f, 0.449219f},
+ {0.046875f, 0.398438f, 0.507812f, 0.320312f}, {0.511719f, 0.019531f, 0.429688f, 0.253906f},
+ {0.222656f, 0.660156f, 0.003906f, 0.003906f}, {0.707031f, 0.910156f, 0.726562f, 0.933594f},
+ {0.011719f, 0.742188f, 0.781250f, 0.281250f}, {0.863281f, 0.316406f, 0.281250f, 0.445312f},
+ {0.515625f, 0.496094f, 0.570312f, 0.910156f}, {0.785156f, 0.875000f, 0.867188f, 0.605469f},
+ {0.042969f, 0.230469f, 0.207031f, 0.824219f}, {0.667969f, 0.468750f, 0.605469f, 0.472656f},
+ {0.878906f, 0.906250f, 0.316406f, 0.046875f}, {0.382812f, 0.164062f, 0.765625f, 0.671875f},
+ {0.015625f, 0.093750f, 0.070312f, 0.312500f}, {0.640625f, 0.425781f, 0.277344f, 0.457031f},
+ {0.847656f, 0.613281f, 0.859375f, 0.113281f}, {0.062500f, 0.128906f, 0.128906f, 0.691406f},
+ {0.726562f, 0.558594f, 0.761719f, 0.503906f}, {0.398438f, 0.355469f, 0.382812f, 0.917969f},
+ {0.886719f, 0.925781f, 0.000000f, 0.667969f}, {0.000000f, 0.148438f, 0.792969f, 0.062500f},
+ {0.156250f, 0.277344f, 0.597656f, 0.242188f}, {0.808594f, 0.191406f, 0.316406f, 0.855469f},
+ {0.945312f, 0.910156f, 0.042969f, 0.117188f}, {0.226562f, 0.453125f, 0.914062f, 0.191406f},
+ {0.761719f, 0.250000f, 0.109375f, 0.441406f}, {0.308594f, 0.015625f, 0.480469f, 0.882812f},
+ {0.015625f, 0.671875f, 0.847656f, 0.132812f}, {0.878906f, 0.144531f, 0.074219f, 0.605469f},
+ {0.933594f, 0.945312f, 0.613281f, 0.074219f}, {0.074219f, 0.503906f, 0.777344f, 0.359375f},
+ {0.406250f, 0.378906f, 0.050781f, 0.796875f}, {0.718750f, 0.605469f, 0.367188f, 0.886719f},
+ {0.003906f, 0.449219f, 0.554688f, 0.500000f}, {0.218750f, 0.988281f, 0.015625f, 0.218750f},
+ {0.640625f, 0.636719f, 0.730469f, 0.769531f}, {0.117188f, 0.144531f, 0.375000f, 0.269531f},
+ {0.429688f, 0.429688f, 0.250000f, 0.691406f}, {0.902344f, 0.839844f, 0.488281f, 0.957031f},
+ {0.261719f, 0.316406f, 0.949219f, 0.460938f}, {0.339844f, 0.738281f, 0.304688f, 0.085938f},
+ {0.531250f, 0.015625f, 0.101562f, 0.507812f}, {0.691406f, 0.984375f, 0.832031f, 0.941406f},
+ {0.945312f, 0.378906f, 0.890625f, 0.015625f}, {0.562500f, 0.628906f, 0.324219f, 0.203125f},
+ {0.796875f, 0.953125f, 0.011719f, 0.921875f}, {0.656250f, 0.285156f, 0.953125f, 0.730469f},
+ {0.167969f, 0.183594f, 0.542969f, 0.085938f}, {0.542969f, 0.468750f, 0.906250f, 0.890625f},
+ {0.410156f, 0.617188f, 0.046875f, 0.695312f}, {0.996094f, 0.128906f, 0.199219f, 0.972656f},
+ {0.191406f, 0.050781f, 0.945312f, 0.148438f}, {0.511719f, 0.937500f, 0.117188f, 0.738281f},
+ {0.613281f, 0.734375f, 0.722656f, 0.910156f}, {0.921875f, 0.019531f, 0.988281f, 0.429688f},
+ {0.652344f, 0.972656f, 0.601562f, 0.601562f}, {0.003906f, 0.136719f, 0.746094f, 0.664062f},
+ {0.722656f, 0.359375f, 0.011719f, 0.148438f}, {0.402344f, 0.609375f, 0.257812f, 0.718750f},
+ {0.765625f, 0.785156f, 0.414062f, 0.437500f}, {0.082031f, 0.296875f, 0.480469f, 0.605469f},
+ {0.542969f, 0.144531f, 0.996094f, 0.011719f}, {0.312500f, 0.699219f, 0.589844f, 0.882812f},
+ {0.242188f, 0.328125f, 0.859375f, 0.222656f}, {0.968750f, 0.593750f, 0.699219f, 0.804688f},
+ {0.425781f, 0.156250f, 0.964844f, 0.902344f}, {0.753906f, 0.492188f, 0.296875f, 0.605469f},
+ {0.917969f, 0.792969f, 0.582031f, 0.472656f}, {0.468750f, 0.546875f, 0.382812f, 0.847656f},
+ {0.632812f, 0.058594f, 0.074219f, 0.066406f}, {0.261719f, 0.937500f, 0.968750f, 0.683594f},
+ {0.160156f, 0.687500f, 0.125000f, 0.320312f}, {0.441406f, 0.781250f, 0.648438f, 0.019531f},
+ {0.320312f, 0.972656f, 0.023438f, 0.710938f}, {0.937500f, 0.070312f, 0.429688f, 0.164062f},
+ {0.273438f, 0.406250f, 0.886719f, 0.414062f}, {0.585938f, 0.789062f, 0.511719f, 0.804688f},
+ {0.234375f, 0.574219f, 0.636719f, 0.230469f}, {0.750000f, 0.832031f, 0.460938f, 0.531250f},
+ {0.355469f, 0.250000f, 0.695312f, 0.750000f}, {0.281250f, 0.480469f, 0.328125f, 0.250000f},
+ {0.132812f, 0.726562f, 0.500000f, 0.035156f}, {0.671875f, 0.886719f, 0.917969f, 0.601562f},
+ {0.972656f, 0.621094f, 0.664062f, 0.199219f}, {0.328125f, 0.699219f, 0.472656f, 0.789062f},
+ {0.511719f, 0.519531f, 0.121094f, 0.519531f}, {0.695312f, 0.593750f, 0.699219f, 0.300781f},
+ {0.351562f, 0.054688f, 0.503906f, 0.683594f}, {0.621094f, 0.757812f, 0.628906f, 0.351562f},
+ {0.484375f, 0.882812f, 0.285156f, 0.808594f}, {0.660156f, 0.394531f, 0.152344f, 0.046875f},
+ {0.386719f, 0.574219f, 0.992188f, 0.660156f}, {0.121094f, 0.824219f, 0.691406f, 0.738281f},
+ {0.242188f, 0.234375f, 0.410156f, 0.531250f}, {0.601562f, 0.031250f, 0.171875f, 0.191406f},
+ {0.773438f, 0.085938f, 0.277344f, 0.960938f}, {0.507812f, 0.839844f, 0.656250f, 0.113281f},
+ {0.968750f, 0.179688f, 0.812500f, 0.023438f}, {0.566406f, 0.351562f, 0.203125f, 0.632812f},
+ {0.878906f, 0.289062f, 0.515625f, 0.343750f}, {0.484375f, 0.710938f, 0.996094f, 0.121094f},
+ {0.183594f, 0.957031f, 0.589844f, 0.519531f}, {0.734375f, 0.191406f, 0.187500f, 0.042969f},
+ {0.804688f, 0.621094f, 0.644531f, 0.222656f}, {0.148438f, 0.269531f, 0.757812f, 0.898438f},
+ {0.406250f, 0.480469f, 0.574219f, 0.664062f}, {0.109375f, 0.789062f, 0.457031f, 0.328125f},
+ {0.296875f, 0.234375f, 0.718750f, 0.246094f}, {0.191406f, 0.523438f, 0.500000f, 0.570312f},
+ {0.500000f, 0.449219f, 0.281250f, 0.351562f}, {0.324219f, 0.347656f, 0.218750f, 0.160156f},
+ {0.953125f, 0.683594f, 0.378906f, 0.441406f}, {0.710938f, 0.539062f, 0.703125f, 0.382812f},
+ {0.097656f, 0.886719f, 0.425781f, 0.003906f}, {0.347656f, 0.281250f, 0.296875f, 0.546875f},
+ {0.761719f, 0.695312f, 0.554688f, 0.246094f}, {0.039062f, 0.433594f, 0.386719f, 0.078125f},
+ {0.253906f, 0.230469f, 0.496094f, 0.566406f}, {0.378906f, 0.804688f, 0.058594f, 0.023438f},
+ {0.449219f, 0.648438f, 0.304688f, 0.335938f}, {0.875000f, 0.199219f, 0.437500f, 0.101562f},
+ {0.136719f, 0.917969f, 0.917969f, 0.476562f}, {0.285156f, 0.539062f, 0.847656f, 0.902344f},
+ {0.617188f, 0.003906f, 0.703125f, 0.250000f}, {0.167969f, 0.996094f, 0.210938f, 0.953125f},
+ {0.429688f, 0.437500f, 0.800781f, 0.308594f}, {0.738281f, 0.847656f, 0.265625f, 0.140625f},
+ {0.847656f, 0.210938f, 0.019531f, 0.566406f}, {0.558594f, 0.929688f, 0.125000f, 0.085938f},
+ {0.660156f, 0.878906f, 0.808594f, 0.363281f}, {0.179688f, 0.289062f, 0.203125f, 0.671875f},
+ {0.308594f, 0.203125f, 0.851562f, 0.117188f}, {0.367188f, 0.414062f, 0.902344f, 0.746094f},
+ {0.101562f, 0.621094f, 0.527344f, 0.210938f}, {0.804688f, 0.265625f, 0.332031f, 0.500000f},
+ {0.914062f, 0.175781f, 0.464844f, 0.960938f}, {0.726562f, 0.535156f, 0.734375f, 0.378906f},
+ {0.628906f, 0.656250f, 0.539062f, 0.628906f}, {0.074219f, 0.601562f, 0.804688f, 0.273438f},
+ {0.453125f, 0.347656f, 0.109375f, 0.578125f}, {0.531250f, 0.210938f, 0.378906f, 0.867188f},
+ {0.699219f, 0.683594f, 0.175781f, 0.085938f}, {0.156250f, 0.050781f, 0.832031f, 0.972656f},
+ {0.492188f, 0.945312f, 0.972656f, 0.625000f}, {0.953125f, 0.382812f, 0.085938f, 0.820312f},
+ {0.550781f, 0.199219f, 0.253906f, 0.417969f}, {0.246094f, 0.082031f, 0.566406f, 0.847656f},
+ {0.449219f, 0.308594f, 0.070312f, 0.371094f}, {0.785156f, 0.003906f, 0.234375f, 0.132812f},
+ {0.097656f, 0.984375f, 0.984375f, 0.746094f}, {0.269531f, 0.847656f, 0.187500f, 0.980469f},
+ {0.871094f, 0.656250f, 0.824219f, 0.031250f}, {0.039062f, 0.296875f, 0.398438f, 0.550781f},
+ {0.187500f, 0.503906f, 0.882812f, 0.917969f}, {0.992188f, 0.179688f, 0.589844f, 0.500000f},
+ {0.789062f, 0.718750f, 0.363281f, 0.289062f}, {0.558594f, 0.332031f, 0.007812f, 0.980469f},
+ {0.464844f, 0.531250f, 0.507812f, 0.460938f}, {0.824219f, 0.640625f, 0.902344f, 0.253906f},
+ {0.203125f, 0.781250f, 0.722656f, 0.593750f}, {0.304688f, 0.687500f, 0.960938f, 0.308594f},
+ {0.136719f, 0.117188f, 0.125000f, 0.707031f}, {0.839844f, 0.550781f, 0.410156f, 0.917969f},
+ {0.351562f, 0.808594f, 0.769531f, 0.468750f}, {0.289062f, 0.000000f, 0.074219f, 0.863281f},
+ {0.667969f, 0.582031f, 0.691406f, 0.597656f}, {0.015625f, 0.375000f, 0.117188f, 0.371094f},
+ {0.578125f, 0.054688f, 0.902344f, 0.765625f}, {0.957031f, 0.882812f, 0.351562f, 0.558594f},
+ {0.644531f, 0.417969f, 0.058594f, 0.128906f}, {0.847656f, 0.664062f, 0.238281f, 0.429688f},
+ {0.464844f, 0.070312f, 0.171875f, 0.773438f}, {0.746094f, 0.917969f, 0.929688f, 0.855469f},
+ {0.000000f, 0.109375f, 0.777344f, 0.613281f}, {0.867188f, 0.851562f, 0.660156f, 0.996094f},
+ {0.609375f, 0.796875f, 0.851562f, 0.273438f}, {0.445312f, 0.222656f, 0.160156f, 0.777344f},
+ {0.808594f, 0.078125f, 0.597656f, 0.199219f}, {0.277344f, 0.394531f, 0.800781f, 0.636719f},
+ {0.582031f, 0.824219f, 0.753906f, 0.464844f}, {0.945312f, 0.511719f, 0.632812f, 0.851562f},
+ {0.835938f, 0.316406f, 0.226562f, 0.941406f}, {0.082031f, 0.554688f, 0.863281f, 0.210938f},
+ {0.546875f, 0.378906f, 0.785156f, 0.812500f}, {0.222656f, 0.468750f, 0.191406f, 0.289062f},
+ {0.953125f, 0.753906f, 0.535156f, 0.843750f}, {0.484375f, 0.089844f, 0.652344f, 0.367188f},
+ {0.828125f, 0.226562f, 0.089844f, 0.042969f}, {0.687500f, 0.722656f, 0.566406f, 0.746094f},
+ {0.937500f, 0.640625f, 0.375000f, 0.488281f}, {0.496094f, 0.105469f, 0.675781f, 0.386719f},
+ {0.113281f, 0.527344f, 0.460938f, 0.699219f}, {0.375000f, 0.453125f, 0.546875f, 0.945312f},
+ {0.878906f, 0.679688f, 0.343750f, 0.511719f}, {0.070312f, 0.085938f, 0.644531f, 0.179688f},
+ {0.820312f, 0.718750f, 0.480469f, 0.996094f}, {0.992188f, 0.957031f, 0.160156f, 0.390625f},
+ {0.683594f, 0.121094f, 0.695312f, 0.582031f}, {0.582031f, 0.824219f, 0.242188f, 0.148438f},
+ {0.203125f, 0.382812f, 0.835938f, 0.867188f}, {0.386719f, 0.042969f, 0.925781f, 0.105469f},
+ {0.832031f, 0.285156f, 0.296875f, 0.792969f}, {0.152344f, 0.738281f, 0.671875f, 0.945312f},
+ {0.765625f, 0.855469f, 0.234375f, 0.347656f}, {0.855469f, 0.511719f, 0.914062f, 0.734375f},
+ {0.101562f, 0.917969f, 0.582031f, 0.000000f}, {0.917969f, 0.316406f, 0.019531f, 0.394531f},
+ {0.804688f, 0.636719f, 0.410156f, 0.328125f}, {0.601562f, 0.765625f, 0.199219f, 0.171875f},
+ {0.027344f, 0.515625f, 0.800781f, 0.949219f}, {0.761719f, 0.835938f, 0.890625f, 0.285156f},
+ {0.183594f, 0.429688f, 0.734375f, 0.554688f}, {0.855469f, 0.773438f, 0.433594f, 0.925781f},
+ {0.593750f, 0.222656f, 0.871094f, 0.457031f}, {0.402344f, 0.351562f, 0.351562f, 0.625000f},
+ {0.917969f, 0.414062f, 0.554688f, 0.402344f}, {0.539062f, 0.136719f, 0.023438f, 0.257812f},
+ {0.433594f, 0.792969f, 0.718750f, 0.757812f}, {0.082031f, 0.960938f, 0.210938f, 0.160156f},
+ {0.281250f, 0.097656f, 0.789062f, 0.378906f}, {0.714844f, 0.863281f, 0.304688f, 0.859375f},
+ {0.343750f, 0.433594f, 0.828125f, 0.000000f}, {0.953125f, 0.976562f, 0.226562f, 0.769531f},
+ {0.042969f, 0.273438f, 0.566406f, 0.843750f}, {0.691406f, 0.402344f, 0.335938f, 0.425781f},
+ {0.394531f, 0.937500f, 0.476562f, 0.550781f}, {0.613281f, 0.476562f, 0.636719f, 0.808594f},
+ {0.093750f, 0.878906f, 0.890625f, 0.167969f}, {0.789062f, 0.234375f, 0.324219f, 0.066406f},
+ {0.980469f, 0.511719f, 0.441406f, 0.933594f}, {0.382812f, 0.675781f, 0.796875f, 0.710938f},
+ {0.500000f, 0.765625f, 0.273438f, 0.312500f}, {0.078125f, 0.125000f, 0.527344f, 0.839844f},
+ {0.757812f, 0.554688f, 0.980469f, 0.187500f}, {0.246094f, 0.332031f, 0.816406f, 0.960938f},
+ {0.589844f, 0.167969f, 0.421875f, 0.687500f}, {0.984375f, 0.582031f, 0.609375f, 0.074219f},
+ {0.089844f, 0.746094f, 0.097656f, 0.472656f}, {0.375000f, 0.406250f, 0.046875f, 0.117188f},
+ {0.238281f, 0.023438f, 0.468750f, 0.664062f}, {0.042969f, 0.570312f, 0.984375f, 0.527344f},
+ {0.894531f, 0.988281f, 0.097656f, 0.917969f}, {0.679688f, 0.750000f, 0.882812f, 0.824219f},
+ {0.121094f, 0.156250f, 0.015625f, 0.296875f}, {0.417969f, 0.601562f, 0.152344f, 0.675781f},
+ {0.714844f, 0.062500f, 0.925781f, 0.367188f}, {0.187500f, 0.878906f, 0.679688f, 0.515625f},
+ {0.789062f, 0.097656f, 0.574219f, 0.632812f}, {0.671875f, 0.683594f, 0.132812f, 0.968750f},
+ {0.593750f, 0.828125f, 0.363281f, 0.695312f}, {0.332031f, 0.324219f, 0.281250f, 0.535156f},
+ {0.058594f, 0.406250f, 0.957031f, 0.585938f}, {0.250000f, 0.871094f, 0.164062f, 0.800781f},
+ {0.355469f, 0.574219f, 0.894531f, 0.187500f}, {0.042969f, 0.359375f, 0.070312f, 0.625000f},
+ {0.207031f, 0.265625f, 0.949219f, 0.839844f}, {0.703125f, 0.031250f, 0.746094f, 0.039062f},
+ {0.273438f, 0.609375f, 0.242188f, 0.246094f}, {0.601562f, 0.371094f, 0.093750f, 0.781250f},
+ {0.535156f, 0.859375f, 0.765625f, 0.542969f}, {0.140625f, 0.324219f, 0.035156f, 0.292969f},
+ {0.425781f, 0.476562f, 0.605469f, 0.812500f}, {0.292969f, 0.585938f, 0.417969f, 0.660156f},
+ {0.023438f, 0.890625f, 0.066406f, 0.246094f}, {0.542969f, 0.445312f, 0.183594f, 0.539062f},
+ {0.484375f, 0.152344f, 0.976562f, 0.027344f}, {0.226562f, 0.953125f, 0.480469f, 0.488281f},
+ {0.988281f, 0.003906f, 0.054688f, 0.128906f}, {0.339844f, 0.125000f, 0.703125f, 0.648438f},
+ {0.406250f, 0.265625f, 0.281250f, 0.511719f}, {0.203125f, 0.453125f, 0.746094f, 0.890625f},
+ {0.308594f, 0.164062f, 0.535156f, 0.105469f}, {0.425781f, 0.023438f, 0.679688f, 0.574219f},
+ {0.871094f, 0.976562f, 0.609375f, 0.718750f}, {0.371094f, 0.664062f, 0.367188f, 0.078125f},
+ {0.531250f, 0.140625f, 0.160156f, 0.660156f}, {0.050781f, 0.570312f, 0.289062f, 0.007812f},
+ {0.710938f, 0.488281f, 0.636719f, 0.332031f}, {0.214844f, 0.089844f, 0.773438f, 0.207031f},
+ {0.132812f, 0.937500f, 0.097656f, 0.871094f}, {0.746094f, 0.554688f, 0.257812f, 0.097656f},
+ {0.832031f, 0.039062f, 0.964844f, 0.601562f}, {0.597656f, 0.625000f, 0.464844f, 0.703125f},
+ {0.898438f, 0.371094f, 0.539062f, 0.218750f}, {0.160156f, 0.207031f, 0.132812f, 0.574219f},
+ {0.515625f, 0.050781f, 0.937500f, 0.121094f}, {0.089844f, 0.734375f, 0.449219f, 0.343750f},
+ {0.640625f, 0.156250f, 0.093750f, 0.671875f}, {0.894531f, 0.578125f, 0.039062f, 0.058594f},
+ {0.449219f, 0.218750f, 0.847656f, 0.226562f}, {0.753906f, 0.726562f, 0.175781f, 0.382812f},
+ {0.035156f, 0.082031f, 0.261719f, 0.281250f}, {0.542969f, 0.328125f, 0.023438f, 0.652344f},
+ {0.234375f, 0.910156f, 0.562500f, 0.433594f}, {0.707031f, 0.449219f, 0.855469f, 0.242188f},
+ {0.312500f, 0.941406f, 0.394531f, 0.003906f}, {0.203125f, 0.218750f, 0.035156f, 0.625000f},
+ {0.917969f, 0.835938f, 0.628906f, 0.492188f}, {0.363281f, 0.972656f, 0.699219f, 0.382812f},
+ {0.156250f, 0.710938f, 0.125000f, 0.035156f}, {0.425781f, 0.265625f, 0.367188f, 0.535156f},
+ {0.667969f, 0.875000f, 0.535156f, 0.300781f}, {0.527344f, 0.640625f, 0.742188f, 0.753906f},
+ {0.769531f, 0.148438f, 0.328125f, 0.871094f}, {0.152344f, 0.484375f, 0.230469f, 0.046875f},
+ {0.488281f, 0.332031f, 0.511719f, 0.339844f}, {0.214844f, 0.656250f, 0.265625f, 0.105469f},
+ {0.539062f, 0.906250f, 0.363281f, 0.417969f}, {0.878906f, 0.207031f, 0.464844f, 0.167969f},
+ {0.304688f, 0.957031f, 0.324219f, 0.769531f}, {0.496094f, 0.726562f, 0.039062f, 0.117188f},
+ {0.980469f, 0.273438f, 0.406250f, 0.453125f}, {0.031250f, 0.167969f, 0.976562f, 0.058594f},
+ {0.414062f, 0.585938f, 0.804688f, 0.156250f}, {0.117188f, 0.960938f, 0.023438f, 0.222656f},
+ {0.882812f, 0.507812f, 0.449219f, 0.414062f}, {0.554688f, 0.066406f, 0.757812f, 0.113281f},
+ {0.808594f, 0.175781f, 0.515625f, 0.984375f}, {0.621094f, 0.937500f, 0.304688f, 0.269531f},
+ {0.769531f, 0.824219f, 0.609375f, 0.449219f}, {0.906250f, 0.750000f, 0.386719f, 0.738281f},
+ {0.464844f, 0.980469f, 0.878906f, 0.335938f}, {0.000000f, 0.542969f, 0.441406f, 0.429688f},
+ {0.781250f, 0.179688f, 0.984375f, 0.027344f}, {0.238281f, 0.765625f, 0.304688f, 0.914062f},
+ {0.500000f, 0.011719f, 0.914062f, 0.082031f}, {0.871094f, 0.238281f, 0.792969f, 0.355469f},
+ {0.750000f, 0.707031f, 0.632812f, 0.742188f}, {0.945312f, 0.796875f, 0.382812f, 0.433594f},
+ {0.109375f, 0.207031f, 0.570312f, 0.316406f}, {0.707031f, 0.492188f, 0.761719f, 0.203125f},
+ {0.597656f, 0.390625f, 0.328125f, 0.917969f}, {0.003906f, 0.554688f, 0.941406f, 0.261719f},
+ {0.519531f, 0.777344f, 0.453125f, 0.445312f}, {0.628906f, 0.699219f, 0.144531f, 0.679688f},
+ {0.066406f, 0.867188f, 0.878906f, 0.226562f}, {0.683594f, 0.589844f, 0.308594f, 0.777344f},
+ {0.117188f, 0.246094f, 0.464844f, 0.437500f}, {0.933594f, 0.339844f, 0.027344f, 0.488281f},
+ {0.632812f, 0.917969f, 0.925781f, 0.234375f}, {0.320312f, 0.273438f, 0.535156f, 0.886719f},
+ {0.980469f, 0.816406f, 0.050781f, 0.734375f}, {0.476562f, 0.734375f, 0.488281f, 0.152344f},
+ {0.648438f, 0.187500f, 0.687500f, 0.824219f}, {0.308594f, 0.875000f, 0.847656f, 0.460938f},
+ {0.367188f, 0.695312f, 0.417969f, 0.949219f}, {0.234375f, 0.281250f, 0.097656f, 0.035156f},
+ {0.007812f, 0.468750f, 0.667969f, 0.421875f}, {0.664062f, 0.921875f, 0.753906f, 0.914062f},
+ {0.863281f, 0.597656f, 0.605469f, 0.718750f}, {0.378906f, 0.320312f, 0.386719f, 0.476562f},
+ {0.273438f, 0.492188f, 0.683594f, 0.953125f}, {0.550781f, 0.851562f, 0.781250f, 0.144531f},
+ {0.167969f, 0.027344f, 0.593750f, 0.613281f}, {0.250000f, 0.367188f, 0.925781f, 0.976562f},
+ {0.941406f, 0.656250f, 0.511719f, 0.746094f}, {0.468750f, 0.757812f, 0.675781f, 0.531250f},
+ {0.156250f, 0.140625f, 0.953125f, 0.132812f}, {0.890625f, 0.269531f, 0.164062f, 0.792969f},
+ {0.820312f, 0.074219f, 0.734375f, 0.988281f}, {0.449219f, 0.605469f, 0.476562f, 0.105469f},
+ {0.546875f, 0.503906f, 0.210938f, 0.738281f}, {0.058594f, 0.019531f, 0.320312f, 0.277344f},
+ {0.875000f, 0.390625f, 0.867188f, 0.914062f}, {0.718750f, 0.468750f, 0.261719f, 0.808594f},
+ {0.281250f, 0.207031f, 0.953125f, 0.175781f}, {0.832031f, 0.312500f, 0.835938f, 0.402344f},
+ {0.914062f, 0.945312f, 0.640625f, 0.230469f}, {0.316406f, 0.816406f, 0.402344f, 0.457031f},
+ {0.648438f, 0.257812f, 0.730469f, 0.593750f}, {0.976562f, 0.441406f, 0.667969f, 0.730469f},
+ {0.363281f, 0.011719f, 0.957031f, 0.984375f}, {0.015625f, 0.363281f, 0.820312f, 0.019531f},
+ {0.636719f, 0.476562f, 0.531250f, 0.574219f}, {0.144531f, 0.632812f, 0.734375f, 0.878906f},
+ {0.355469f, 0.421875f, 0.253906f, 0.269531f}, {0.269531f, 0.929688f, 0.484375f, 0.730469f},
+ {0.773438f, 0.027344f, 0.621094f, 0.339844f}, {0.921875f, 0.253906f, 0.707031f, 0.925781f},
+ {0.722656f, 0.660156f, 0.328125f, 0.867188f}, {0.453125f, 0.777344f, 0.839844f, 0.679688f},
+ {0.156250f, 0.292969f, 0.234375f, 0.324219f}, {0.988281f, 0.699219f, 0.128906f, 0.062500f},
+ {0.523438f, 0.402344f, 0.820312f, 0.898438f}, {0.128906f, 0.140625f, 0.183594f, 0.160156f},
+ {0.394531f, 0.238281f, 0.050781f, 0.597656f}, {0.964844f, 0.062500f, 0.660156f, 0.855469f},
+ {0.339844f, 0.429688f, 0.558594f, 0.707031f}, {0.722656f, 0.648438f, 0.363281f, 0.628906f},
+ {0.921875f, 0.515625f, 0.207031f, 0.460938f}, {0.054688f, 0.988281f, 0.503906f, 0.878906f},
+ {0.652344f, 0.089844f, 0.718750f, 0.179688f}, {0.351562f, 0.339844f, 0.140625f, 0.980469f},
+ {0.800781f, 0.902344f, 0.085938f, 0.679688f}, {0.429688f, 0.679688f, 0.859375f, 0.765625f},
+ {0.296875f, 0.820312f, 0.195312f, 0.546875f}, {0.675781f, 0.613281f, 0.621094f, 0.839844f},
+ {0.882812f, 0.933594f, 0.816406f, 0.167969f}, {0.769531f, 0.070312f, 0.363281f, 0.812500f},
+ {0.964844f, 0.367188f, 0.062500f, 0.937500f}, {0.480469f, 0.421875f, 0.988281f, 0.351562f},
+ {0.226562f, 0.113281f, 0.121094f, 0.144531f}, {0.277344f, 0.726562f, 0.828125f, 0.992188f},
+ {0.742188f, 0.464844f, 0.695312f, 0.804688f}, {0.152344f, 0.058594f, 0.398438f, 0.382812f},
+ {0.421875f, 0.675781f, 0.960938f, 0.574219f}, {0.792969f, 0.601562f, 0.144531f, 0.511719f},
+ {0.031250f, 0.320312f, 0.332031f, 0.648438f}, {0.933594f, 0.441406f, 0.578125f, 0.292969f},
+ {0.703125f, 0.230469f, 0.179688f, 0.789062f}, {0.492188f, 0.773438f, 0.925781f, 0.527344f},
+ {0.960938f, 0.535156f, 0.339844f, 0.324219f}, {0.425781f, 0.671875f, 0.035156f, 0.820312f},
+ {0.734375f, 0.804688f, 0.257812f, 0.628906f}, {0.207031f, 0.113281f, 0.164062f, 0.187500f},
+ {0.808594f, 0.902344f, 0.984375f, 0.289062f}, {0.988281f, 0.636719f, 0.300781f, 0.886719f},
+ {0.707031f, 0.441406f, 0.214844f, 0.507812f}, {0.328125f, 0.968750f, 0.371094f, 0.015625f},
+ {0.859375f, 0.183594f, 0.742188f, 0.839844f}, {0.656250f, 0.570312f, 0.121094f, 0.332031f},
+ {0.398438f, 0.414062f, 0.343750f, 0.882812f}, {0.113281f, 0.816406f, 0.234375f, 0.476562f},
+ {0.613281f, 0.703125f, 0.656250f, 0.398438f}, {0.027344f, 0.359375f, 0.093750f, 0.550781f},
+ {0.683594f, 0.292969f, 0.789062f, 0.855469f}, {0.785156f, 0.804688f, 0.917969f, 0.214844f},
+ {0.328125f, 0.910156f, 0.574219f, 0.617188f}, {0.621094f, 0.085938f, 0.007812f, 0.359375f},
+ {0.199219f, 0.687500f, 0.445312f, 0.964844f}, {0.117188f, 0.519531f, 0.183594f, 0.699219f},
+ {0.574219f, 0.066406f, 0.121094f, 0.628906f}, {0.394531f, 0.605469f, 0.914062f, 0.945312f},
+ {0.730469f, 0.718750f, 0.574219f, 0.144531f}, {0.078125f, 0.105469f, 0.066406f, 0.265625f},
+ {0.800781f, 0.546875f, 0.191406f, 0.523438f}, {0.460938f, 0.792969f, 0.609375f, 0.703125f},
+ {0.746094f, 0.847656f, 0.101562f, 0.218750f}, {0.582031f, 0.125000f, 0.914062f, 0.945312f},
+ {0.859375f, 0.335938f, 0.851562f, 0.402344f}, {0.695312f, 0.535156f, 0.070312f, 0.785156f},
+ {0.523438f, 0.792969f, 0.207031f, 0.593750f}, {0.210938f, 0.445312f, 0.886719f, 0.464844f},
+ {0.628906f, 0.132812f, 0.582031f, 0.000000f}, {0.285156f, 0.902344f, 0.054688f, 0.515625f},
+ {0.019531f, 0.472656f, 0.648438f, 0.773438f}, {0.410156f, 0.011719f, 0.414062f, 0.558594f},
+ {0.312500f, 0.632812f, 0.699219f, 0.652344f}, {0.230469f, 0.500000f, 0.527344f, 0.500000f},
+ {0.656250f, 0.789062f, 0.921875f, 0.109375f}, {0.843750f, 0.308594f, 0.265625f, 0.960938f},
+ {0.183594f, 0.835938f, 0.734375f, 0.218750f}, {0.632812f, 0.925781f, 0.109375f, 0.140625f},
+ {0.093750f, 0.136719f, 0.847656f, 0.269531f}, {0.394531f, 0.371094f, 0.011719f, 0.523438f},
+ {0.191406f, 0.625000f, 0.273438f, 0.046875f}, {0.269531f, 0.566406f, 0.894531f, 0.593750f},
+ {0.574219f, 0.035156f, 0.359375f, 0.906250f}, {0.164062f, 0.300781f, 0.523438f, 0.085938f},
+ {0.925781f, 0.101562f, 0.425781f, 0.359375f}, {0.089844f, 0.230469f, 0.003906f, 0.054688f},
+ {0.257812f, 0.332031f, 0.550781f, 0.589844f}, {0.378906f, 0.187500f, 0.242188f, 0.300781f},
+ {0.167969f, 0.531250f, 0.785156f, 0.023438f}, {0.722656f, 0.824219f, 0.640625f, 0.628906f},
+ {0.578125f, 0.898438f, 0.519531f, 0.546875f}, {0.835938f, 0.621094f, 0.257812f, 0.054688f},
+ {0.503906f, 0.175781f, 0.195312f, 0.691406f}, {0.074219f, 0.394531f, 0.601562f, 0.304688f},
+ {0.882812f, 0.953125f, 0.796875f, 0.085938f}, {0.574219f, 0.015625f, 0.230469f, 0.968750f},
+ {0.273438f, 0.515625f, 0.886719f, 0.050781f}, {0.113281f, 0.828125f, 0.742188f, 0.367188f},
+ {0.816406f, 0.101562f, 0.281250f, 0.183594f}, {0.187500f, 0.968750f, 0.625000f, 0.671875f},
+ {0.562500f, 0.003906f, 0.796875f, 0.113281f}, {0.320312f, 0.164062f, 0.898438f, 0.257812f},
+ {0.128906f, 0.257812f, 0.503906f, 0.062500f}, {0.593750f, 0.390625f, 0.843750f, 0.542969f},
+ {0.472656f, 0.757812f, 0.726562f, 0.402344f}, {0.023438f, 0.062500f, 0.539062f, 0.792969f},
+ {0.113281f, 0.296875f, 0.425781f, 0.722656f}, {0.523438f, 0.808594f, 0.054688f, 0.449219f},
+ {0.800781f, 0.515625f, 0.816406f, 0.093750f}, {0.054688f, 0.867188f, 0.460938f, 0.207031f},
+ {0.566406f, 0.019531f, 0.605469f, 0.582031f}, {0.742188f, 0.992188f, 0.882812f, 0.671875f},
+ {0.265625f, 0.472656f, 0.546875f, 0.171875f}, {0.992188f, 0.171875f, 0.964844f, 0.316406f},
+ {0.406250f, 0.746094f, 0.429688f, 0.695312f}, {0.132812f, 0.628906f, 0.160156f, 0.453125f},
+ {0.488281f, 0.140625f, 0.507812f, 0.136719f}, {0.937500f, 0.562500f, 0.679688f, 0.566406f},
+ {0.019531f, 0.789062f, 0.769531f, 0.085938f}, {0.464844f, 0.898438f, 0.597656f, 0.492188f},
+ {0.957031f, 0.378906f, 0.304688f, 0.011719f}, {0.050781f, 0.179688f, 0.027344f, 0.765625f},
+ {0.261719f, 0.859375f, 0.875000f, 0.375000f}, {0.609375f, 0.964844f, 0.437500f, 0.812500f},
+ {0.175781f, 0.296875f, 0.781250f, 0.894531f}, {0.929688f, 0.691406f, 0.289062f, 0.468750f},
+ {0.238281f, 0.234375f, 0.382812f, 0.347656f}, {0.093750f, 0.054688f, 0.160156f, 0.652344f},
+ {0.914062f, 0.750000f, 0.656250f, 0.035156f}, {0.445312f, 0.863281f, 0.320312f, 0.187500f},
+ {0.167969f, 0.199219f, 0.519531f, 0.828125f}, {0.070312f, 0.703125f, 0.117188f, 0.644531f},
+ {0.371094f, 0.382812f, 0.386719f, 0.289062f}, {0.949219f, 0.601562f, 0.917969f, 0.144531f},
+ {0.675781f, 0.218750f, 0.476562f, 0.394531f}, {0.867188f, 0.550781f, 0.988281f, 0.933594f},
+ {0.585938f, 0.960938f, 0.003906f, 0.199219f}, {0.753906f, 0.339844f, 0.328125f, 0.371094f},
+ {0.078125f, 0.914062f, 0.773438f, 0.796875f}, {0.542969f, 0.593750f, 0.488281f, 0.308594f},
+ {0.449219f, 0.683594f, 0.148438f, 0.558594f}, {0.289062f, 0.218750f, 0.406250f, 0.402344f},
+ {0.582031f, 0.281250f, 0.589844f, 0.929688f}, {0.828125f, 0.734375f, 0.941406f, 0.714844f},
+ {0.460938f, 0.867188f, 0.449219f, 0.832031f}, {0.960938f, 0.453125f, 0.660156f, 0.398438f},
+ {0.027344f, 0.757812f, 0.234375f, 0.230469f}, {0.742188f, 0.972656f, 0.730469f, 0.468750f},
+ {0.488281f, 0.429688f, 0.128906f, 0.640625f}, {0.839844f, 0.722656f, 0.968750f, 0.960938f},
+ {0.558594f, 0.484375f, 0.664062f, 0.742188f}, {0.039062f, 0.964844f, 0.894531f, 0.390625f},
+ {0.812500f, 0.753906f, 0.183594f, 0.503906f}, {0.335938f, 0.281250f, 0.417969f, 0.757812f},
+ {0.441406f, 0.035156f, 0.726562f, 0.878906f}, {0.019531f, 0.496094f, 0.347656f, 0.269531f},
+ {0.921875f, 0.777344f, 0.867188f, 0.175781f}, {0.679688f, 0.859375f, 0.074219f, 0.605469f},
+ {0.355469f, 0.242188f, 0.449219f, 0.433594f}, {0.175781f, 0.363281f, 0.656250f, 0.765625f},
+ {0.515625f, 0.898438f, 0.003906f, 0.246094f}, {0.613281f, 0.152344f, 0.468750f, 0.894531f},
+ {0.386719f, 0.402344f, 0.523438f, 0.566406f}, {0.066406f, 0.613281f, 0.062500f, 0.988281f},
+ {0.765625f, 0.347656f, 0.390625f, 0.449219f}, {0.851562f, 0.843750f, 0.203125f, 0.875000f},
+ {0.054688f, 0.445312f, 0.441406f, 0.750000f}, {0.929688f, 0.992188f, 0.644531f, 0.937500f},
+ {0.769531f, 0.554688f, 0.000000f, 0.597656f}, {0.632812f, 0.234375f, 0.132812f, 0.101562f},
+ {0.367188f, 0.691406f, 0.867188f, 0.347656f}, {0.425781f, 0.125000f, 0.632812f, 0.261719f},
+ {0.183594f, 0.613281f, 0.968750f, 0.691406f}, {0.285156f, 0.250000f, 0.078125f, 0.929688f},
+ {0.917969f, 0.320312f, 0.292969f, 0.039062f}, {0.347656f, 0.644531f, 0.800781f, 0.269531f},
+ {0.851562f, 0.539062f, 0.019531f, 0.945312f}, {0.515625f, 0.882812f, 0.359375f, 0.070312f},
+ {0.218750f, 0.050781f, 0.277344f, 0.886719f}, {0.898438f, 0.242188f, 0.714844f, 0.019531f},
+ {0.558594f, 0.441406f, 0.062500f, 0.773438f}, {0.250000f, 0.964844f, 0.390625f, 0.902344f},
+ {0.820312f, 0.343750f, 0.226562f, 0.265625f}, {0.343750f, 0.003906f, 0.972656f, 0.832031f},
+ {0.757812f, 0.753906f, 0.484375f, 0.316406f}, {0.507812f, 0.234375f, 0.808594f, 0.554688f},
+ {0.859375f, 0.410156f, 0.347656f, 0.203125f}, {0.425781f, 0.503906f, 0.140625f, 0.062500f},
+ {0.687500f, 0.140625f, 0.496094f, 0.601562f}, {0.292969f, 0.582031f, 0.996094f, 0.093750f},
+ {0.828125f, 0.386719f, 0.707031f, 0.300781f}, {0.398438f, 0.980469f, 0.578125f, 0.859375f},
+ {0.042969f, 0.496094f, 0.441406f, 0.500000f}, {0.320312f, 0.609375f, 0.777344f, 0.550781f},
+ {0.601562f, 0.304688f, 0.945312f, 0.089844f}, {0.851562f, 0.093750f, 0.269531f, 0.234375f},
+ {0.492188f, 0.988281f, 0.753906f, 0.953125f}, {0.792969f, 0.332031f, 0.175781f, 0.847656f},
+ {0.089844f, 0.843750f, 0.726562f, 0.710938f}, {0.183594f, 0.082031f, 0.277344f, 0.246094f},
+ {0.476562f, 0.714844f, 0.566406f, 0.039062f}, {0.925781f, 0.187500f, 0.835938f, 0.878906f},
+ {0.035156f, 0.109375f, 0.214844f, 0.691406f}, {0.695312f, 0.464844f, 0.621094f, 0.007812f},
+ {0.949219f, 0.023438f, 0.968750f, 0.472656f}, {0.136719f, 0.558594f, 0.800781f, 0.769531f},
+ {0.773438f, 0.410156f, 0.679688f, 0.066406f}, {0.519531f, 0.816406f, 0.320312f, 0.644531f},
+ {0.683594f, 0.066406f, 0.171875f, 0.296875f}, {0.867188f, 0.253906f, 0.820312f, 0.125000f},
+ {0.386719f, 0.523438f, 0.054688f, 0.562500f}, {0.332031f, 0.156250f, 0.601562f, 0.863281f},
+ {0.648438f, 0.851562f, 0.796875f, 0.281250f}, {0.214844f, 0.644531f, 0.269531f, 0.425781f},
+ {0.417969f, 0.023438f, 0.390625f, 0.140625f}, {0.917969f, 0.132812f, 0.082031f, 0.902344f},
+ {0.617188f, 0.664062f, 0.496094f, 0.093750f}, {0.101562f, 0.578125f, 0.589844f, 0.207031f},
+ {0.996094f, 0.222656f, 0.015625f, 0.414062f}, {0.199219f, 0.996094f, 0.949219f, 0.824219f},
+ {0.398438f, 0.316406f, 0.757812f, 0.480469f}, {0.605469f, 0.550781f, 0.562500f, 0.929688f},
+ {0.246094f, 0.085938f, 0.300781f, 0.855469f}, {0.832031f, 0.648438f, 0.363281f, 0.128906f},
+ {0.914062f, 0.757812f, 0.914062f, 0.699219f}, {0.691406f, 0.566406f, 0.828125f, 0.410156f},
+ {0.980469f, 0.292969f, 0.121094f, 0.007812f}, {0.457031f, 0.742188f, 0.949219f, 0.730469f},
+ {0.648438f, 0.914062f, 0.714844f, 0.148438f}, {0.257812f, 0.511719f, 0.566406f, 0.503906f},
+ {0.527344f, 0.082031f, 0.105469f, 0.375000f}, {0.398438f, 0.707031f, 0.285156f, 0.019531f},
+ {0.300781f, 0.183594f, 0.359375f, 0.230469f}, {0.222656f, 0.355469f, 0.933594f, 0.867188f},
+ {0.867188f, 0.500000f, 0.476562f, 0.167969f}, {0.964844f, 0.945312f, 0.257812f, 0.636719f},
+ {0.683594f, 0.386719f, 0.171875f, 0.535156f}, {0.601562f, 0.074219f, 0.710938f, 0.781250f},
+ {0.484375f, 0.785156f, 0.414062f, 0.359375f}, {0.074219f, 0.214844f, 0.503906f, 0.742188f},
+ {0.167969f, 0.113281f, 0.144531f, 0.609375f}, {0.640625f, 0.378906f, 0.746094f, 0.800781f},
+ {0.304688f, 0.949219f, 0.851562f, 0.507812f}, {0.750000f, 0.507812f, 0.613281f, 0.339844f},
+ {0.082031f, 0.671875f, 0.894531f, 0.656250f}, {0.660156f, 0.195312f, 0.324219f, 0.410156f},
+ {0.414062f, 0.281250f, 0.824219f, 0.722656f}, {0.703125f, 0.640625f, 0.085938f, 0.167969f},
+ {0.597656f, 0.464844f, 0.718750f, 0.437500f}, {0.140625f, 0.578125f, 0.253906f, 0.863281f},
+ {0.207031f, 0.667969f, 0.546875f, 0.921875f}, {0.968750f, 0.042969f, 0.679688f, 0.667969f},
+ {0.531250f, 0.875000f, 0.218750f, 0.410156f}, {0.117188f, 0.761719f, 0.000000f, 0.164062f},
+ {0.488281f, 0.179688f, 0.894531f, 0.800781f}, {0.562500f, 0.660156f, 0.238281f, 0.722656f},
+ {0.789062f, 0.265625f, 0.050781f, 0.125000f}, {0.664062f, 0.007812f, 0.835938f, 0.992188f},
+ {0.996094f, 0.894531f, 0.410156f, 0.375000f}, {0.753906f, 0.566406f, 0.636719f, 0.757812f},
+ {0.234375f, 0.804688f, 0.550781f, 0.437500f}, {0.562500f, 0.046875f, 0.082031f, 0.074219f},
+ {0.343750f, 0.757812f, 0.359375f, 0.597656f}, {0.726562f, 0.429688f, 0.863281f, 0.480469f},
+ {0.257812f, 0.875000f, 0.136719f, 0.753906f}, {0.816406f, 0.261719f, 0.437500f, 0.429688f},
+ {0.332031f, 0.390625f, 0.089844f, 0.273438f}, {0.382812f, 0.742188f, 0.351562f, 0.621094f},
+ {0.222656f, 0.890625f, 0.027344f, 0.839844f}, {0.890625f, 0.093750f, 0.246094f, 0.988281f},
+ {0.011719f, 0.968750f, 0.539062f, 0.203125f}, {0.316406f, 0.484375f, 0.074219f, 0.363281f},
+ {0.238281f, 0.187500f, 0.500000f, 0.496094f}, {0.105469f, 0.660156f, 0.996094f, 0.796875f},
+ {0.777344f, 0.386719f, 0.414062f, 0.167969f}, {0.531250f, 0.589844f, 0.308594f, 0.730469f},
+ {0.976562f, 0.347656f, 0.871094f, 0.027344f}, {0.125000f, 0.261719f, 0.468750f, 0.691406f},
+ {0.710938f, 0.910156f, 0.703125f, 0.531250f}, {0.468750f, 0.812500f, 0.328125f, 0.250000f},
+ {0.277344f, 0.441406f, 0.765625f, 0.667969f}, {0.535156f, 0.375000f, 0.917969f, 0.972656f},
+ {0.648438f, 0.074219f, 0.292969f, 0.324219f}, {0.785156f, 0.687500f, 0.156250f, 0.710938f},
+ {0.304688f, 0.136719f, 0.484375f, 0.011719f}, {0.089844f, 0.714844f, 0.113281f, 0.652344f},
+ {0.769531f, 0.453125f, 0.992188f, 0.214844f}, {0.437500f, 0.199219f, 0.703125f, 0.328125f},
+ {0.003906f, 0.980469f, 0.171875f, 0.488281f}, {0.300781f, 0.476562f, 0.410156f, 0.621094f},
+ {0.218750f, 0.695312f, 0.218750f, 0.843750f}, {0.140625f, 0.058594f, 0.652344f, 0.222656f},
+ {0.347656f, 0.199219f, 0.320312f, 0.335938f}, {0.945312f, 0.652344f, 0.863281f, 0.652344f},
+ {0.703125f, 0.312500f, 0.976562f, 0.808594f}, {0.171875f, 0.585938f, 0.753906f, 0.292969f},
+ {0.906250f, 0.863281f, 0.808594f, 0.683594f}, {0.082031f, 0.781250f, 0.582031f, 0.488281f},
+ {0.562500f, 0.007812f, 0.691406f, 0.988281f}, {0.734375f, 0.886719f, 0.332031f, 0.406250f},
+ {0.000000f, 0.730469f, 0.550781f, 0.894531f}, {0.234375f, 0.460938f, 0.894531f, 0.117188f},
+ {0.761719f, 0.929688f, 0.207031f, 0.492188f}, {0.957031f, 0.683594f, 0.933594f, 0.441406f},
+ {0.386719f, 0.828125f, 0.644531f, 0.152344f}, {0.718750f, 0.593750f, 0.246094f, 0.394531f},
+ {0.011719f, 0.308594f, 0.484375f, 0.242188f}, {0.839844f, 0.851562f, 0.113281f, 0.972656f},
+ {0.359375f, 0.765625f, 0.195312f, 0.199219f}, {0.957031f, 0.406250f, 0.933594f, 0.531250f},
+ {0.175781f, 0.117188f, 0.535156f, 0.054688f}, {0.039062f, 0.863281f, 0.648438f, 0.992188f},
+ {0.285156f, 0.996094f, 0.152344f, 0.648438f}, {0.898438f, 0.074219f, 0.410156f, 0.117188f},
+ {0.375000f, 0.808594f, 0.929688f, 0.507812f}, {0.777344f, 0.347656f, 0.761719f, 0.277344f},
+ {0.007812f, 0.937500f, 0.617188f, 0.757812f}, {0.339844f, 0.433594f, 0.816406f, 0.972656f},
+ {0.718750f, 0.085938f, 0.328125f, 0.621094f}, {0.957031f, 0.921875f, 0.542969f, 0.250000f},
+ {0.214844f, 0.460938f, 0.132812f, 0.421875f}, {0.128906f, 0.734375f, 0.691406f, 0.882812f},
+ {0.277344f, 0.398438f, 0.195312f, 0.312500f}, {0.011719f, 0.179688f, 0.011719f, 0.667969f},
+ {0.406250f, 0.476562f, 0.960938f, 0.566406f}, {0.140625f, 0.644531f, 0.796875f, 0.175781f},
+ {0.898438f, 0.277344f, 0.222656f, 0.343750f}, {0.433594f, 0.156250f, 0.675781f, 0.980469f},
+ {0.613281f, 0.664062f, 0.601562f, 0.125000f}, {0.117188f, 0.539062f, 0.953125f, 0.546875f},
+ {0.511719f, 0.820312f, 0.722656f, 0.914062f}, {0.859375f, 0.625000f, 0.902344f, 0.156250f},
+ {0.593750f, 0.355469f, 0.464844f, 0.332031f}, {0.421875f, 0.167969f, 0.871094f, 0.101562f},
+ {0.730469f, 0.707031f, 0.714844f, 0.582031f}, {0.996094f, 0.613281f, 0.375000f, 0.746094f},
+ {0.156250f, 0.328125f, 0.769531f, 0.039062f}, {0.625000f, 0.929688f, 0.628906f, 0.949219f},
+ {0.449219f, 0.113281f, 0.910156f, 0.625000f}, {0.257812f, 0.800781f, 0.562500f, 0.339844f},
+ {0.046875f, 0.054688f, 0.031250f, 0.996094f}, {0.792969f, 0.496094f, 0.160156f, 0.195312f},
+ {0.324219f, 0.562500f, 0.929688f, 0.847656f}, {0.175781f, 0.203125f, 0.210938f, 0.789062f},
+ {0.863281f, 0.304688f, 0.847656f, 0.468750f}, {0.746094f, 0.925781f, 0.070312f, 0.609375f},
+ {0.136719f, 0.843750f, 0.675781f, 0.156250f}, {0.886719f, 0.605469f, 0.390625f, 0.562500f},
+ {0.519531f, 0.414062f, 0.636719f, 0.113281f}, {0.710938f, 0.910156f, 0.214844f, 0.375000f},
+ {0.964844f, 0.808594f, 0.785156f, 0.531250f}, {0.128906f, 0.281250f, 0.066406f, 0.957031f},
+ {0.488281f, 0.031250f, 0.609375f, 0.816406f}, {0.750000f, 0.128906f, 0.542969f, 0.101562f},
+ {0.550781f, 0.878906f, 0.757812f, 0.281250f}, {0.886719f, 0.250000f, 0.261719f, 0.917969f},
+ {0.808594f, 0.417969f, 0.476562f, 0.585938f}, {0.585938f, 0.812500f, 0.156250f, 0.085938f},
+ {0.011719f, 0.027344f, 0.042969f, 0.968750f}, {0.445312f, 0.941406f, 0.515625f, 0.429688f},
+ {0.671875f, 0.136719f, 0.179688f, 0.136719f}, {0.812500f, 0.640625f, 0.230469f, 0.832031f},
+ {0.480469f, 0.433594f, 0.070312f, 0.562500f}, {0.144531f, 0.281250f, 0.789062f, 0.031250f},
+ {0.320312f, 0.179688f, 0.023438f, 0.304688f}, {0.886719f, 0.558594f, 0.757812f, 0.234375f},
+ {0.445312f, 0.347656f, 0.371094f, 0.968750f}, {0.121094f, 0.039062f, 0.585938f, 0.863281f},
+ {0.816406f, 0.421875f, 0.054688f, 0.648438f}, {0.578125f, 0.160156f, 0.992188f, 0.089844f},
+ {0.429688f, 0.722656f, 0.402344f, 0.574219f}, {0.148438f, 0.097656f, 0.562500f, 0.835938f},
+ {0.613281f, 0.035156f, 0.785156f, 0.117188f}, {0.468750f, 0.605469f, 0.449219f, 0.296875f},
+ {0.851562f, 0.800781f, 0.035156f, 0.609375f}, {0.535156f, 0.523438f, 0.367188f, 0.789062f},
+ {0.796875f, 0.152344f, 0.863281f, 0.238281f}, {0.667969f, 0.300781f, 0.585938f, 0.343750f},
+ {0.074219f, 0.722656f, 0.042969f, 0.714844f}, {0.574219f, 0.199219f, 0.300781f, 0.039062f},
+ {0.648438f, 0.269531f, 0.089844f, 0.464844f}, {0.847656f, 0.621094f, 0.402344f, 0.367188f},
+ {0.164062f, 0.527344f, 0.457031f, 0.003906f}, {0.617188f, 0.328125f, 0.742188f, 0.566406f},
+ {0.367188f, 0.835938f, 0.972656f, 0.195312f}, {0.468750f, 0.136719f, 0.351562f, 0.695312f},
+ {0.542969f, 0.679688f, 0.496094f, 0.480469f}, {0.695312f, 0.941406f, 0.855469f, 0.046875f},
+ {0.933594f, 0.234375f, 0.312500f, 0.902344f}, {0.640625f, 0.527344f, 0.429688f, 0.804688f},
+ {0.832031f, 0.375000f, 0.500000f, 0.640625f}, {0.046875f, 0.949219f, 0.066406f, 0.292969f},
+ {0.984375f, 0.460938f, 0.390625f, 0.824219f}, {0.675781f, 0.066406f, 0.179688f, 0.058594f},
+ {0.175781f, 0.992188f, 0.531250f, 0.664062f}, {0.785156f, 0.230469f, 0.660156f, 0.511719f},
+ {0.089844f, 0.792969f, 0.300781f, 0.242188f}, {0.652344f, 0.292969f, 0.121094f, 0.699219f},
+ {0.480469f, 0.535156f, 0.195312f, 0.433594f}, {0.363281f, 0.777344f, 0.933594f, 0.894531f},
+ {0.550781f, 0.011719f, 0.273438f, 0.265625f}, {0.886719f, 0.871094f, 0.144531f, 0.410156f},
+ {0.937500f, 0.679688f, 0.699219f, 0.515625f}, {0.183594f, 0.214844f, 0.218750f, 0.097656f},
+ {0.855469f, 0.988281f, 0.777344f, 0.457031f}, {0.566406f, 0.761719f, 0.519531f, 0.593750f},
+ {0.664062f, 0.394531f, 0.593750f, 0.308594f}, {0.960938f, 0.695312f, 0.113281f, 0.070312f},
+ {0.007812f, 0.101562f, 0.425781f, 0.359375f}, {0.242188f, 0.742188f, 0.546875f, 0.042969f},
+ {0.355469f, 0.480469f, 0.250000f, 0.921875f}, {0.433594f, 0.187500f, 0.828125f, 0.859375f},
+ {0.035156f, 0.000000f, 0.894531f, 0.789062f}, {0.218750f, 0.343750f, 0.535156f, 0.285156f},
+ {0.558594f, 0.523438f, 0.433594f, 0.734375f}, {0.371094f, 0.625000f, 0.273438f, 0.031250f},
+ {0.652344f, 0.835938f, 0.875000f, 0.171875f}, {0.851562f, 0.375000f, 0.332031f, 0.550781f},
+ {0.062500f, 0.605469f, 0.968750f, 0.371094f}, {0.417969f, 0.539062f, 0.031250f, 0.460938f},
+ {0.097656f, 0.957031f, 0.820312f, 0.761719f}, {0.500000f, 0.750000f, 0.601562f, 0.191406f},
+ {0.242188f, 0.472656f, 0.371094f, 0.535156f}, {0.757812f, 0.269531f, 0.660156f, 0.625000f},
+ {0.343750f, 0.394531f, 0.453125f, 0.730469f}, {0.613281f, 0.535156f, 0.914062f, 0.332031f},
+ {0.265625f, 0.085938f, 0.410156f, 0.097656f}, {0.410156f, 0.835938f, 0.980469f, 0.757812f},
+ {0.832031f, 0.664062f, 0.484375f, 0.812500f}, {0.644531f, 0.128906f, 0.664062f, 0.593750f},
+ {0.546875f, 0.761719f, 0.109375f, 0.191406f}, {0.207031f, 0.503906f, 0.304688f, 0.007812f},
+ {0.667969f, 0.898438f, 0.812500f, 0.300781f}, {0.253906f, 0.230469f, 0.687500f, 0.921875f},
+ {0.976562f, 0.468750f, 0.339844f, 0.687500f}, {0.519531f, 0.554688f, 0.003906f, 0.468750f},
+ {0.769531f, 0.359375f, 0.632812f, 0.746094f}, {0.230469f, 0.929688f, 0.289062f, 0.933594f},
+ {0.109375f, 0.695312f, 0.691406f, 0.367188f}, {0.328125f, 0.242188f, 0.246094f, 0.484375f},
+ {0.984375f, 0.429688f, 0.984375f, 0.082031f}, {0.242188f, 0.910156f, 0.464844f, 0.582031f},
+ {0.480469f, 0.488281f, 0.199219f, 0.957031f}, {0.300781f, 0.558594f, 0.835938f, 0.816406f},
+ {0.437500f, 0.023438f, 0.957031f, 0.214844f}, {0.933594f, 0.687500f, 0.527344f, 0.859375f},
+ {0.269531f, 0.800781f, 0.179688f, 0.511719f}, {0.039062f, 0.222656f, 0.871094f, 0.921875f},
+ {0.894531f, 0.062500f, 0.628906f, 0.074219f}, {0.746094f, 0.546875f, 0.277344f, 0.820312f},
+ {0.863281f, 0.343750f, 0.589844f, 0.265625f}, {0.335938f, 0.855469f, 0.105469f, 0.140625f},
+ {0.078125f, 0.109375f, 0.707031f, 0.515625f}, {0.515625f, 0.722656f, 0.617188f, 0.226562f},
+ {0.292969f, 0.886719f, 0.878906f, 0.027344f}, {0.214844f, 0.003906f, 0.937500f, 0.699219f},
+ {0.554688f, 0.601562f, 0.757812f, 0.402344f}, {0.390625f, 0.324219f, 0.281250f, 0.207031f},
+ {0.304688f, 0.128906f, 0.039062f, 0.957031f}, {0.960938f, 0.500000f, 0.808594f, 0.367188f},
+ {0.265625f, 0.031250f, 0.406250f, 0.808594f}, {0.054688f, 0.925781f, 0.613281f, 0.871094f},
+ {0.195312f, 0.429688f, 0.558594f, 0.539062f}, {0.835938f, 0.136719f, 0.828125f, 0.121094f},
+ {0.699219f, 0.242188f, 0.015625f, 0.660156f}, {0.035156f, 0.464844f, 0.480469f, 0.835938f},
+ {0.312500f, 0.554688f, 0.320312f, 0.003906f}, {0.738281f, 0.308594f, 0.093750f, 0.785156f},
+ {0.484375f, 0.621094f, 0.406250f, 0.890625f}, {0.375000f, 0.160156f, 0.957031f, 0.386719f},
+ {0.093750f, 0.882812f, 0.355469f, 0.125000f}, {0.410156f, 0.015625f, 0.644531f, 0.941406f},
+ {0.593750f, 0.597656f, 0.722656f, 0.542969f}, {0.492188f, 0.531250f, 0.984375f, 0.734375f},
+ {0.683594f, 0.265625f, 0.464844f, 0.398438f}, {0.835938f, 0.968750f, 0.035156f, 0.242188f},
+ {0.945312f, 0.761719f, 0.328125f, 0.453125f}, {0.625000f, 0.246094f, 0.730469f, 0.910156f},
+ {0.328125f, 0.078125f, 0.937500f, 0.593750f}, {0.902344f, 0.945312f, 0.015625f, 0.425781f},
+ {0.171875f, 0.433594f, 0.488281f, 0.687500f}, {0.250000f, 0.312500f, 0.804688f, 0.781250f},
+ {0.609375f, 0.781250f, 0.093750f, 0.941406f}, {0.312500f, 0.097656f, 0.687500f, 0.667969f},
+ {0.710938f, 0.160156f, 0.425781f, 0.031250f}, {0.164062f, 0.355469f, 0.945312f, 0.878906f},
+ {0.968750f, 0.628906f, 0.738281f, 0.261719f}, {0.839844f, 0.218750f, 0.296875f, 0.058594f},
+ {0.128906f, 0.902344f, 0.875000f, 0.933594f}, {0.035156f, 0.726562f, 0.113281f, 0.207031f},
+ {0.996094f, 0.335938f, 0.625000f, 0.464844f}, {0.531250f, 0.984375f, 0.277344f, 0.660156f},
+ {0.066406f, 0.589844f, 0.148438f, 0.367188f}, {0.363281f, 0.242188f, 0.867188f, 0.707031f},
+ {0.945312f, 0.953125f, 0.437500f, 0.527344f}, {0.042969f, 0.292969f, 0.535156f, 0.828125f},
+ {0.492188f, 0.617188f, 0.175781f, 0.730469f}, {0.332031f, 0.785156f, 0.886719f, 0.351562f},
+ {0.875000f, 0.984375f, 0.226562f, 0.179688f}, {0.062500f, 0.269531f, 0.839844f, 0.039062f},
+ {0.292969f, 0.875000f, 0.960938f, 0.421875f}, {0.917969f, 0.175781f, 0.167969f, 0.867188f},
+ {0.714844f, 0.324219f, 0.753906f, 0.000000f}, {0.593750f, 0.582031f, 0.523438f, 0.671875f},
+ {0.421875f, 0.089844f, 0.117188f, 0.910156f}, {0.136719f, 0.652344f, 0.730469f, 0.402344f},
+ {0.750000f, 0.363281f, 0.335938f, 0.179688f}, {0.906250f, 0.824219f, 0.660156f, 0.550781f},
+ {0.199219f, 0.976562f, 0.128906f, 0.128906f}, {0.101562f, 0.125000f, 0.714844f, 0.664062f},
+ {0.800781f, 0.378906f, 0.257812f, 0.296875f}, {0.515625f, 0.890625f, 0.027344f, 0.773438f},
+ {0.414062f, 0.605469f, 0.082031f, 0.351562f}, {0.070312f, 0.765625f, 0.804688f, 0.585938f},
+ {0.187500f, 0.433594f, 0.910156f, 0.968750f}, {0.796875f, 0.031250f, 0.468750f, 0.726562f},
+ {0.457031f, 0.589844f, 0.156250f, 0.410156f}, {0.160156f, 0.312500f, 0.257812f, 0.949219f},
+ {0.718750f, 0.785156f, 0.027344f, 0.363281f}, {0.773438f, 0.210938f, 0.554688f, 0.863281f},
+ {0.476562f, 0.683594f, 0.335938f, 0.488281f}, {0.007812f, 0.765625f, 0.839844f, 0.769531f},
+ {0.707031f, 0.859375f, 0.488281f, 0.605469f}, {0.445312f, 0.406250f, 0.230469f, 0.082031f},
+ {0.566406f, 0.675781f, 0.746094f, 0.464844f}, {0.757812f, 0.582031f, 0.957031f, 0.023438f},
+ {0.925781f, 0.843750f, 0.066406f, 0.183594f}, {0.281250f, 0.367188f, 0.429688f, 0.976562f},
+ {0.125000f, 0.957031f, 0.644531f, 0.324219f}, {0.421875f, 0.746094f, 0.757812f, 0.214844f},
+ {0.675781f, 0.410156f, 0.976562f, 0.933594f}, {0.074219f, 0.914062f, 0.851562f, 0.558594f},
+ {0.617188f, 0.070312f, 0.667969f, 0.238281f}, {0.910156f, 0.457031f, 0.246094f, 0.742188f},
+ {0.285156f, 0.335938f, 0.824219f, 0.636719f}, {0.722656f, 0.832031f, 0.007812f, 0.828125f},
+ {0.816406f, 0.949219f, 0.289062f, 0.273438f}, {0.925781f, 0.152344f, 0.148438f, 0.675781f},
+ {0.085938f, 0.359375f, 0.789062f, 0.187500f}, {0.277344f, 0.640625f, 0.585938f, 0.507812f},
+ {0.164062f, 0.867188f, 0.105469f, 0.640625f}, {0.457031f, 0.570312f, 0.183594f, 0.050781f},
+ {0.789062f, 0.675781f, 0.371094f, 0.203125f}, {0.050781f, 0.164062f, 0.675781f, 0.996094f},
+ {0.726562f, 0.718750f, 0.152344f, 0.316406f}, {0.992188f, 0.210938f, 0.578125f, 0.066406f},
+ {0.464844f, 0.894531f, 0.386719f, 0.242188f}, {0.792969f, 0.500000f, 0.203125f, 0.140625f},
+ {0.925781f, 0.687500f, 0.527344f, 0.414062f}, {0.644531f, 0.062500f, 0.132812f, 0.824219f},
+ {0.289062f, 0.847656f, 0.234375f, 0.492188f}, {0.390625f, 0.570312f, 0.054688f, 0.394531f},
+ {0.554688f, 0.042969f, 0.546875f, 0.890625f}, {0.917969f, 0.796875f, 0.695312f, 0.589844f},
+ {0.203125f, 0.207031f, 0.839844f, 0.273438f}, {0.773438f, 0.484375f, 0.355469f, 0.960938f},
+ {0.699219f, 0.035156f, 0.593750f, 0.152344f}, {0.171875f, 0.410156f, 0.218750f, 0.050781f},
+ {0.289062f, 0.824219f, 0.921875f, 0.406250f}, {0.851562f, 0.078125f, 0.765625f, 0.261719f},
+ {0.781250f, 0.703125f, 0.066406f, 0.457031f}, {0.105469f, 0.000000f, 0.460938f, 0.546875f},
+ {0.695312f, 0.140625f, 0.734375f, 0.792969f}, {0.187500f, 0.660156f, 0.515625f, 0.632812f},
+ {0.636719f, 0.433594f, 0.085938f, 0.257812f}, {0.402344f, 0.500000f, 0.425781f, 0.562500f},
+ {0.003906f, 0.019531f, 0.890625f, 0.214844f}, {0.878906f, 0.953125f, 0.816406f, 0.156250f},
+ {0.503906f, 0.847656f, 0.058594f, 0.835938f}, {0.062500f, 0.746094f, 0.617188f, 0.738281f},
+ {0.839844f, 0.058594f, 0.902344f, 0.312500f}, {0.691406f, 0.171875f, 0.496094f, 0.640625f},
+ {0.390625f, 0.417969f, 0.378906f, 0.433594f}, {0.593750f, 0.742188f, 0.578125f, 0.945312f},
+ {0.734375f, 0.484375f, 0.917969f, 0.722656f}, {0.316406f, 0.289062f, 0.667969f, 0.113281f},
+ {0.675781f, 0.164062f, 0.429688f, 0.460938f}, {0.972656f, 0.984375f, 0.371094f, 0.628906f},
+ {0.628906f, 0.257812f, 0.218750f, 0.015625f}, {0.242188f, 0.656250f, 0.773438f, 0.320312f},
+ {0.589844f, 0.957031f, 0.984375f, 0.777344f}, {0.957031f, 0.492188f, 0.402344f, 0.550781f},
+ {0.359375f, 0.144531f, 0.726562f, 0.105469f}, {0.859375f, 0.425781f, 0.203125f, 0.582031f},
+ {0.113281f, 0.921875f, 0.128906f, 0.261719f}, {0.933594f, 0.253906f, 0.628906f, 0.144531f},
+ {0.812500f, 0.570312f, 0.992188f, 0.890625f}, {0.148438f, 0.179688f, 0.093750f, 0.308594f},
+ {0.894531f, 0.734375f, 0.160156f, 0.734375f}, {0.339844f, 0.269531f, 0.343750f, 0.628906f},
+ {0.621094f, 0.089844f, 0.500000f, 0.394531f}, {0.523438f, 0.644531f, 0.906250f, 0.773438f},
+ {0.796875f, 0.507812f, 0.203125f, 0.480469f}, {0.582031f, 0.042969f, 0.367188f, 0.710938f},
+};
diff --git a/source/blender/draw/engines/eevee/eevee_lut.h b/source/blender/draw/engines/eevee/eevee_lut.h
index 9b9adc2b7d3..04049efd758 100644
--- a/source/blender/draw/engines/eevee/eevee_lut.h
+++ b/source/blender/draw/engines/eevee/eevee_lut.h
@@ -24,23012 +24,11 @@
#ifndef __EEVEE_LUT_H__
#define __EEVEE_LUT_H__
-static float ltc_mat_ggx[64 * 64 * 4] = {
- 1.000000, 0.000000, 0.000000, 0.000020, 1.000000, 0.000000, 0.000000, 0.000504,
- 1.000000, 0.000000, 0.000000, 0.002016, 1.000000, 0.000000, 0.000000, 0.004535,
- 1.000000, 0.000000, 0.000000, 0.008063, 1.000000, 0.000000, 0.000000, 0.012598,
- 1.000000, 0.000000, 0.000000, 0.018141, 1.000000, 0.000000, 0.000000, 0.024692,
- 1.000000, 0.000000, 0.000000, 0.032253, 1.000000, 0.000000, 0.000000, 0.040821,
- 1.000000, 0.000000, 0.000000, 0.050400, 1.000000, 0.000000, 0.000000, 0.060989,
- 1.000000, 0.000000, 0.000000, 0.072591, 1.000000, 0.000000, 0.000000, 0.085206,
- 1.000000, 0.000000, 0.000000, 0.098836, 1.000000, 0.000000, 0.000000, 0.113484,
- 1.000000, 0.000000, 0.000000, 0.129153, 1.000000, 0.000000, 0.000000, 0.145839,
- 1.000000, 0.000000, 0.000000, 0.163548, 1.000000, 0.000000, 0.000000, 0.182266,
- 1.000000, 0.000000, 0.000000, 0.201942, 1.000000, 0.000000, 0.000000, 0.222314,
- 1.000000, 0.000000, 0.000000, 0.241906, 1.000000, 0.000000, 0.000000, 0.262314,
- 1.000000, 0.000000, 0.000000, 0.285754, 1.000000, 0.000000, 0.000000, 0.310159,
- 1.000000, 0.000000, 0.000000, 0.335426, 1.000000, 0.000000, 0.000000, 0.361341,
- 1.000000, 0.000000, 0.000000, 0.387445, 1.000000, 0.000000, 0.000000, 0.412784,
- 1.000000, 0.000000, 0.000000, 0.438197, 1.000000, 0.000000, 0.000000, 0.466966,
- 1.000000, 0.000000, 0.000000, 0.495590, 1.000000, 0.000000, 0.000000, 0.523448,
- 1.000000, 0.000000, 0.000000, 0.549938, 1.000000, 0.000000, 0.000000, 0.579790,
- 1.000000, 0.000000, 0.000000, 0.608746, 1.000000, 0.000000, 0.000000, 0.636185,
- 1.000000, 0.000000, 0.000000, 0.664748, 1.000000, 0.000000, 0.000000, 0.693130,
- 1.000000, 0.000000, 0.000000, 0.719660, 1.000000, 0.000000, 0.000000, 0.747662,
- 1.000000, 0.000000, 0.000000, 0.774023, 1.000000, 0.000000, 0.000000, 0.799775,
- 1.000000, 0.000000, 0.000000, 0.825274, 1.000000, 0.000000, 0.000000, 0.849156,
- 1.000000, 0.000000, 0.000000, 0.873248, 1.000000, 0.000000, 0.000000, 0.895320,
- 1.000000, 0.000000, 0.000000, 0.917565, 1.000000, 0.000000, 0.000000, 0.937863,
- 1.000000, 0.000000, 0.000000, 0.958139, 1.000000, 0.000000, 0.000000, 0.976563,
- 1.000000, 0.000000, 0.000000, 0.994658, 1.000000, 0.000000, 0.000000, 1.011200,
- 1.000000, 0.000000, 0.000000, 1.027120, 1.000000, 0.000000, 0.000000, 1.041890,
- 1.000000, 0.000000, 0.000000, 1.055680, 1.000000, 0.000000, 0.000000, 1.068770,
- 1.000000, 0.000000, 0.000000, 1.080580, 1.000000, 0.000000, 0.000000, 1.091940,
- 1.000000, 0.000000, 0.000000, 1.101910, 1.000000, 0.000000, 0.000000, 1.111610,
- 1.000000, 0.000000, 0.000000, 1.119900, 1.000000, 0.000000, 0.000000, 1.128130,
- 0.999547, -0.000000, 0.022442, 0.000020, 0.999495, -0.000011, 0.022441, 0.000504,
- 0.999496, -0.000045, 0.022441, 0.002015, 0.999496, -0.000102, 0.022441, 0.004533,
- 0.999495, -0.000181, 0.022441, 0.008058, 0.999497, -0.000283, 0.022441, 0.012591,
- 0.999496, -0.000407, 0.022441, 0.018132, 0.999498, -0.000554, 0.022441, 0.024680,
- 0.999499, -0.000724, 0.022441, 0.032236, 0.999495, -0.000916, 0.022440, 0.040801,
- 0.999499, -0.001131, 0.022441, 0.050375, 0.999494, -0.001369, 0.022440, 0.060959,
- 0.999489, -0.001629, 0.022440, 0.072554, 0.999489, -0.001912, 0.022441, 0.085162,
- 0.999498, -0.002218, 0.022441, 0.098787, 0.999492, -0.002546, 0.022441, 0.113426,
- 0.999507, -0.002898, 0.022442, 0.129088, 0.999494, -0.003272, 0.022439, 0.145767,
- 0.999546, -0.003667, 0.022442, 0.163472, 0.999543, -0.004082, 0.022439, 0.182182,
- 0.999499, -0.004501, 0.022434, 0.201843, 0.999503, -0.004837, 0.022420, 0.222198,
- 0.999546, -0.004529, 0.022315, 0.241714, 0.999508, -0.005874, 0.022433, 0.262184,
- 0.999509, -0.006388, 0.022427, 0.285609, 0.999501, -0.006910, 0.022417, 0.309998,
- 0.999539, -0.007420, 0.022399, 0.335262, 0.999454, -0.007863, 0.022367, 0.361154,
- 0.999529, -0.008119, 0.022283, 0.387224, 0.999503, -0.007999, 0.022106, 0.412520,
- 0.999561, -0.009528, 0.022306, 0.438006, 0.999557, -0.009913, 0.022207, 0.466735,
- 0.999541, -0.010094, 0.022040, 0.495332, 0.999562, -0.009968, 0.021807, 0.523197,
- 0.999556, -0.010503, 0.021710, 0.550223, 0.999561, -0.011419, 0.021722, 0.579498,
- 0.999588, -0.011182, 0.021336, 0.608416, 0.999633, -0.010773, 0.020869, 0.635965,
- 0.999527, -0.012167, 0.021015, 0.664476, 0.999508, -0.011600, 0.020431, 0.692786,
- 0.999568, -0.011560, 0.019979, 0.719709, 0.999671, -0.012112, 0.019741, 0.747370,
- 0.999688, -0.011077, 0.018885, 0.773692, 0.999620, -0.012237, 0.018845, 0.799534,
- 0.999823, -0.011033, 0.017800, 0.825046, 0.999599, -0.011492, 0.017422, 0.849075,
- 0.999619, -0.010592, 0.016435, 0.872999, 0.999613, -0.010599, 0.015823, 0.895371,
- 0.999640, -0.009799, 0.014813, 0.917364, 0.999770, -0.009672, 0.014072, 0.938002,
- 0.999726, -0.008692, 0.012954, 0.957917, 0.999730, -0.008669, 0.012233, 0.976557,
- 0.999773, -0.007320, 0.010896, 0.994459, 0.999811, -0.007560, 0.010271, 1.011180,
- 0.999862, -0.005837, 0.008788, 1.027010, 0.999835, -0.006314, 0.008275, 1.041860,
- 0.999871, -0.004508, 0.006746, 1.055690, 0.999867, -0.004861, 0.006210, 1.068610,
- 0.999939, -0.003221, 0.004783, 1.080640, 0.999918, -0.003182, 0.004064, 1.091810,
- 1.000030, -0.001933, 0.002807, 1.102070, 0.999928, -0.001537, 0.001987, 1.111520,
- 0.999933, -0.000624, 0.000918, 1.120090, 1.000000, -0.000001, 0.000001, 1.128130,
- 0.997866, -0.000001, 0.044833, 0.000020, 0.997987, -0.000023, 0.044839, 0.000503,
- 0.997987, -0.000090, 0.044839, 0.002012, 0.997985, -0.000203, 0.044839, 0.004526,
- 0.997986, -0.000362, 0.044839, 0.008046, 0.997987, -0.000565, 0.044839, 0.012572,
- 0.997988, -0.000813, 0.044839, 0.018104, 0.997984, -0.001107, 0.044839, 0.024643,
- 0.997985, -0.001446, 0.044839, 0.032188, 0.997987, -0.001830, 0.044839, 0.040739,
- 0.997983, -0.002260, 0.044839, 0.050299, 0.997991, -0.002735, 0.044839, 0.060867,
- 0.997984, -0.003255, 0.044838, 0.072444, 0.998002, -0.003820, 0.044839, 0.085035,
- 0.997997, -0.004431, 0.044840, 0.098637, 0.998007, -0.005088, 0.044840, 0.113255,
- 0.998008, -0.005790, 0.044840, 0.128891, 0.998003, -0.006537, 0.044838, 0.145548,
- 0.997983, -0.007327, 0.044836, 0.163221, 0.997985, -0.008155, 0.044836, 0.181899,
- 0.998005, -0.008990, 0.044829, 0.201533, 0.998026, -0.009644, 0.044793, 0.221821,
- 0.998055, -0.009227, 0.044611, 0.241282, 0.998040, -0.011736, 0.044825, 0.261791,
- 0.998048, -0.012763, 0.044816, 0.285181, 0.998088, -0.013806, 0.044800, 0.309540,
- 0.998058, -0.014821, 0.044767, 0.334751, 0.998099, -0.015700, 0.044697, 0.360610,
- 0.998116, -0.016198, 0.044512, 0.386603, 0.998195, -0.015945, 0.044171, 0.411844,
- 0.998168, -0.018395, 0.044425, 0.437730, 0.998184, -0.019791, 0.044381, 0.466009,
- 0.998251, -0.020143, 0.044069, 0.494574, 0.998305, -0.019885, 0.043563, 0.522405,
- 0.998273, -0.021058, 0.043414, 0.549967, 0.998254, -0.022790, 0.043394, 0.578655,
- 0.998349, -0.022311, 0.042653, 0.607580, 0.998430, -0.022309, 0.042000, 0.635524,
- 0.998373, -0.024114, 0.041899, 0.663621, 0.998425, -0.023145, 0.040812, 0.691906,
- 0.998504, -0.023368, 0.040057, 0.719339, 0.998443, -0.024165, 0.039463, 0.746430,
- 0.998480, -0.022871, 0.038000, 0.773086, 0.998569, -0.023519, 0.037232, 0.798988,
- 0.998619, -0.022311, 0.035647, 0.824249, 0.998594, -0.022311, 0.034523, 0.848808,
- 0.998622, -0.021343, 0.032889, 0.872270, 0.998669, -0.020791, 0.031437, 0.895157,
- 0.998705, -0.019842, 0.029693, 0.916769, 0.998786, -0.018917, 0.027963, 0.937773,
- 0.998888, -0.017881, 0.026160, 0.957431, 0.999060, -0.016685, 0.024216, 0.976495,
- 0.999038, -0.015546, 0.022264, 0.994169, 0.999237, -0.014135, 0.020197, 1.011120,
- 0.999378, -0.012932, 0.018174, 1.026920, 0.999433, -0.011319, 0.015990, 1.041740,
- 0.999439, -0.010124, 0.014039, 1.055590, 0.999614, -0.008375, 0.011783, 1.068520,
- 0.999722, -0.007218, 0.009837, 1.080690, 0.999817, -0.005541, 0.007690, 1.091760,
- 0.999830, -0.004270, 0.005782, 1.102110, 0.999964, -0.002739, 0.003745, 1.111520,
- 1.000010, -0.001367, 0.001872, 1.120310, 0.999946, 0.000039, -0.000029, 1.128040,
- 0.995847, -0.000001, 0.067179, 0.000020, 0.995464, -0.000034, 0.067153, 0.000502,
- 0.995470, -0.000135, 0.067153, 0.002006, 0.995471, -0.000305, 0.067153, 0.004515,
- 0.995470, -0.000541, 0.067153, 0.008026, 0.995471, -0.000846, 0.067153, 0.012541,
- 0.995470, -0.001218, 0.067153, 0.018059, 0.995470, -0.001658, 0.067153, 0.024581,
- 0.995463, -0.002166, 0.067153, 0.032106, 0.995468, -0.002741, 0.067153, 0.040637,
- 0.995474, -0.003384, 0.067153, 0.050172, 0.995473, -0.004096, 0.067153, 0.060713,
- 0.995478, -0.004875, 0.067153, 0.072262, 0.995476, -0.005721, 0.067153, 0.084819,
- 0.995477, -0.006637, 0.067154, 0.098388, 0.995498, -0.007620, 0.067154, 0.112972,
- 0.995509, -0.008671, 0.067154, 0.128568, 0.995509, -0.009790, 0.067153, 0.145183,
- 0.995503, -0.010972, 0.067149, 0.162808, 0.995501, -0.012211, 0.067146, 0.181441,
- 0.995530, -0.013456, 0.067137, 0.201015, 0.995550, -0.014391, 0.067083, 0.221206,
- 0.995580, -0.014351, 0.066888, 0.240813, 0.995577, -0.017400, 0.067105, 0.261257,
- 0.995602, -0.019111, 0.067118, 0.284467, 0.995623, -0.020671, 0.067095, 0.308765,
- 0.995658, -0.022184, 0.067047, 0.333905, 0.995705, -0.023483, 0.066942, 0.359677,
- 0.995719, -0.024193, 0.066671, 0.385554, 0.995786, -0.024354, 0.066266, 0.410951,
- 0.995887, -0.027187, 0.066437, 0.437163, 0.995944, -0.029601, 0.066493, 0.464842,
- 0.996004, -0.030104, 0.066010, 0.493320, 0.996128, -0.029831, 0.065269, 0.521131,
- 0.996253, -0.031643, 0.065074, 0.549167, 0.996244, -0.033904, 0.064943, 0.577370,
- 0.996309, -0.033329, 0.063893, 0.606073, 0.996417, -0.033894, 0.063085, 0.634527,
- 0.996372, -0.035310, 0.062508, 0.662560, 0.996542, -0.034894, 0.061199, 0.690516,
- 0.996568, -0.035161, 0.060069, 0.718317, 0.996711, -0.035432, 0.058852, 0.745280,
- 0.996671, -0.034951, 0.057190, 0.772061, 0.996865, -0.034562, 0.055532, 0.798089,
- 0.996802, -0.034257, 0.053782, 0.823178, 0.996992, -0.033086, 0.051610, 0.847949,
- 0.996944, -0.032467, 0.049554, 0.871431, 0.997146, -0.030954, 0.047030, 0.894357,
- 0.997189, -0.029937, 0.044604, 0.916142, 0.997471, -0.028139, 0.041881, 0.937193,
- 0.997515, -0.026870, 0.039182, 0.957000, 0.997812, -0.024717, 0.036134, 0.975936,
- 0.998027, -0.023353, 0.033395, 0.993910, 0.998233, -0.020984, 0.030192, 1.010750,
- 0.998481, -0.019431, 0.027271, 1.026690, 0.998859, -0.016973, 0.024016, 1.041730,
- 0.998940, -0.015232, 0.021052, 1.055510, 0.999132, -0.012750, 0.017863, 1.068560,
- 0.999369, -0.010828, 0.014787, 1.080540, 0.999549, -0.008459, 0.011619, 1.091850,
- 0.999805, -0.006394, 0.008672, 1.102070, 0.999850, -0.004146, 0.005668, 1.111700,
- 0.999912, -0.002074, 0.002776, 1.120220, 1.000010, 0.000087, -0.000054, 1.128320,
- 0.991943, -0.000002, 0.089338, 0.000020, 0.991952, -0.000045, 0.089339, 0.000500,
- 0.991956, -0.000180, 0.089339, 0.001999, 0.991955, -0.000405, 0.089339, 0.004499,
- 0.991953, -0.000720, 0.089339, 0.007998, 0.991955, -0.001125, 0.089339, 0.012496,
- 0.991957, -0.001621, 0.089340, 0.017995, 0.991958, -0.002206, 0.089340, 0.024494,
- 0.991947, -0.002881, 0.089339, 0.031993, 0.991962, -0.003647, 0.089340, 0.040493,
- 0.991965, -0.004503, 0.089340, 0.049995, 0.991980, -0.005449, 0.089341, 0.060499,
- 0.991970, -0.006485, 0.089340, 0.072007, 0.991976, -0.007612, 0.089341, 0.084521,
- 0.991980, -0.008829, 0.089341, 0.098041, 0.991982, -0.010137, 0.089340, 0.112571,
- 0.992008, -0.011535, 0.089342, 0.128115, 0.992026, -0.013023, 0.089341, 0.144672,
- 0.992064, -0.014597, 0.089342, 0.162241, 0.992041, -0.016242, 0.089336, 0.180801,
- 0.992086, -0.017889, 0.089321, 0.200302, 0.992157, -0.019037, 0.089240, 0.220332,
- 0.992181, -0.019558, 0.089053, 0.240144, 0.992175, -0.022726, 0.089215, 0.260728,
- 0.992210, -0.025420, 0.089304, 0.283473, 0.992220, -0.027488, 0.089270, 0.307673,
- 0.992317, -0.029490, 0.089203, 0.332729, 0.992374, -0.031186, 0.089058, 0.358387,
- 0.992505, -0.032066, 0.088699, 0.384102, 0.992568, -0.032972, 0.088320, 0.409767,
- 0.992675, -0.036006, 0.088360, 0.436145, 0.992746, -0.039290, 0.088459, 0.463217,
- 0.992873, -0.039934, 0.087829, 0.491557, 0.992934, -0.040231, 0.087011, 0.519516,
- 0.993091, -0.042201, 0.086586, 0.547741, 0.993259, -0.044350, 0.086194, 0.575792,
- 0.993455, -0.044637, 0.085119, 0.604233, 0.993497, -0.045430, 0.084058, 0.632925,
- 0.993694, -0.046330, 0.082967, 0.660985, 0.993718, -0.047062, 0.081718, 0.688714,
- 0.993973, -0.046884, 0.080029, 0.716743, 0.994207, -0.046705, 0.078129, 0.743770,
- 0.994168, -0.046970, 0.076334, 0.770420, 0.994500, -0.045682, 0.073818, 0.796659,
- 0.994356, -0.045552, 0.071554, 0.821868, 0.994747, -0.043949, 0.068609, 0.846572,
- 0.994937, -0.043006, 0.065869, 0.870435, 0.995142, -0.041341, 0.062645, 0.893272,
- 0.995451, -0.039652, 0.059290, 0.915376, 0.995445, -0.037845, 0.055850, 0.936196,
- 0.995967, -0.035522, 0.052095, 0.956376, 0.996094, -0.033515, 0.048377, 0.975327,
- 0.996622, -0.030682, 0.044257, 0.993471, 0.996938, -0.028550, 0.040469, 1.010520,
- 0.997383, -0.025340, 0.036090, 1.026370, 0.997714, -0.023165, 0.032218, 1.041390,
- 0.998249, -0.019814, 0.027843, 1.055420, 0.998596, -0.017434, 0.023876, 1.068460,
- 0.998946, -0.014135, 0.019594, 1.080560, 0.999280, -0.011560, 0.015628, 1.091810,
- 0.999507, -0.008391, 0.011461, 1.102130, 0.999697, -0.005666, 0.007633, 1.111690,
- 0.999869, -0.002699, 0.003649, 1.120420, 1.000010, 0.000062, -0.000032, 1.128320,
- 0.987221, -0.000002, 0.111332, 0.000020, 0.987390, -0.000056, 0.111351, 0.000498,
- 0.987448, -0.000224, 0.111357, 0.001990, 0.987441, -0.000505, 0.111357, 0.004478,
- 0.987442, -0.000898, 0.111357, 0.007961, 0.987442, -0.001403, 0.111357, 0.012440,
- 0.987444, -0.002020, 0.111357, 0.017913, 0.987442, -0.002750, 0.111357, 0.024382,
- 0.987446, -0.003591, 0.111357, 0.031847, 0.987435, -0.004546, 0.111356, 0.040309,
- 0.987461, -0.005612, 0.111358, 0.049768, 0.987458, -0.006791, 0.111358, 0.060224,
- 0.987443, -0.008083, 0.111356, 0.071679, 0.987476, -0.009487, 0.111358, 0.084136,
- 0.987490, -0.011004, 0.111361, 0.097597, 0.987508, -0.012634, 0.111362, 0.112062,
- 0.987494, -0.014377, 0.111357, 0.127533, 0.987526, -0.016231, 0.111359, 0.144015,
- 0.987558, -0.018191, 0.111361, 0.161502, 0.987602, -0.020239, 0.111355, 0.179979,
- 0.987692, -0.022273, 0.111346, 0.199386, 0.987702, -0.023531, 0.111215, 0.219183,
- 0.987789, -0.024763, 0.111061, 0.239202, 0.987776, -0.028067, 0.111171, 0.259957,
- 0.987856, -0.031675, 0.111327, 0.282198, 0.987912, -0.034247, 0.111282, 0.306294,
- 0.988000, -0.036721, 0.111198, 0.331219, 0.988055, -0.038777, 0.110994, 0.356708,
- 0.988241, -0.039772, 0.110547, 0.382234, 0.988399, -0.041608, 0.110198, 0.408227,
- 0.988539, -0.044819, 0.110137, 0.434662, 0.988661, -0.048379, 0.110143, 0.461442,
- 0.988967, -0.049590, 0.109453, 0.489318, 0.989073, -0.050680, 0.108628, 0.517516,
- 0.989274, -0.052695, 0.108003, 0.545844, 0.989528, -0.054578, 0.107255, 0.573823,
- 0.989709, -0.056150, 0.106294, 0.601944, 0.989991, -0.056866, 0.104896, 0.630855,
- 0.990392, -0.057291, 0.103336, 0.658925, 0.990374, -0.058622, 0.101890, 0.686661,
- 0.990747, -0.058476, 0.099783, 0.714548, 0.991041, -0.058266, 0.097431, 0.741860,
- 0.991236, -0.058412, 0.095168, 0.768422, 0.991585, -0.057306, 0.092158, 0.794817,
- 0.991984, -0.056424, 0.089117, 0.820336, 0.992100, -0.055361, 0.085805, 0.844930,
- 0.992749, -0.053382, 0.082035, 0.868961, 0.992880, -0.051866, 0.078218, 0.891931,
- 0.993511, -0.049249, 0.073894, 0.914186, 0.993617, -0.047196, 0.069640, 0.935320,
- 0.994110, -0.044216, 0.064966, 0.955430, 0.994595, -0.041665, 0.060318, 0.974685,
- 0.994976, -0.038431, 0.055349, 0.992807, 0.995579, -0.035349, 0.050394, 1.009960,
- 0.996069, -0.031979, 0.045212, 1.026060, 0.996718, -0.028472, 0.040011, 1.041140,
- 0.997173, -0.025079, 0.034946, 1.055170, 0.997818, -0.021333, 0.029653, 1.068300,
- 0.998318, -0.017851, 0.024549, 1.080500, 0.998853, -0.014112, 0.019420, 1.091770,
- 0.999218, -0.010591, 0.014387, 1.102200, 0.999594, -0.006935, 0.009435, 1.111750,
- 0.999750, -0.003405, 0.004641, 1.120560, 1.000010, 0.000109, -0.000113, 1.128530,
- 0.983383, -0.000003, 0.133358, 0.000020, 0.981942, -0.000067, 0.133162, 0.000495,
- 0.981946, -0.000268, 0.133163, 0.001979, 0.981944, -0.000604, 0.133163, 0.004453,
- 0.981941, -0.001074, 0.133162, 0.007917, 0.981946, -0.001678, 0.133163, 0.012370,
- 0.981944, -0.002416, 0.133162, 0.017813, 0.981945, -0.003288, 0.133163, 0.024247,
- 0.981945, -0.004295, 0.133162, 0.031670, 0.981955, -0.005436, 0.133164, 0.040085,
- 0.981951, -0.006711, 0.133163, 0.049490, 0.981968, -0.008121, 0.133165, 0.059889,
- 0.981979, -0.009665, 0.133166, 0.071281, 0.981996, -0.011345, 0.133168, 0.083669,
- 0.982014, -0.013159, 0.133169, 0.097053, 0.982011, -0.015107, 0.133167, 0.111438,
- 0.982062, -0.017191, 0.133172, 0.126826, 0.982100, -0.019407, 0.133175, 0.143215,
- 0.982149, -0.021750, 0.133176, 0.160609, 0.982163, -0.024195, 0.133173, 0.178981,
- 0.982247, -0.026591, 0.133148, 0.198249, 0.982291, -0.027916, 0.132974, 0.217795,
- 0.982396, -0.029966, 0.132868, 0.238042, 0.982456, -0.033454, 0.132934, 0.258901,
- 0.982499, -0.037864, 0.133137, 0.280639, 0.982617, -0.040927, 0.133085, 0.304604,
- 0.982740, -0.043852, 0.132985, 0.329376, 0.982944, -0.046229, 0.132728, 0.354697,
- 0.983080, -0.047600, 0.132228, 0.380102, 0.983391, -0.050190, 0.131924, 0.406256,
- 0.983514, -0.053590, 0.131737, 0.432735, 0.983730, -0.057186, 0.131567, 0.459359,
- 0.984056, -0.059235, 0.130932, 0.486637, 0.984234, -0.061049, 0.130092, 0.515090,
- 0.984748, -0.063076, 0.129230, 0.543461, 0.985073, -0.064740, 0.128174, 0.571376,
- 0.985195, -0.067194, 0.127133, 0.599414, 0.985734, -0.068135, 0.125576, 0.628134,
- 0.986241, -0.068609, 0.123639, 0.656399, 0.986356, -0.069851, 0.121834, 0.684258,
- 0.986894, -0.070093, 0.119454, 0.711818, 0.987382, -0.069832, 0.116718, 0.739511,
- 0.988109, -0.069398, 0.113699, 0.766267, 0.988363, -0.068958, 0.110454, 0.792456,
- 0.989112, -0.067235, 0.106602, 0.818130, 0.989241, -0.066203, 0.102670, 0.842889,
- 0.990333, -0.063894, 0.098138, 0.867204, 0.990591, -0.061853, 0.093539, 0.890380,
- 0.991106, -0.059312, 0.088553, 0.912576, 0.991919, -0.056268, 0.083219, 0.934118,
- 0.992111, -0.053408, 0.077830, 0.954254, 0.992997, -0.049546, 0.072045, 0.973722,
- 0.993317, -0.046371, 0.066346, 0.991949, 0.994133, -0.042125, 0.060188, 1.009360,
- 0.994705, -0.038498, 0.054250, 1.025590, 0.995495, -0.034096, 0.047986, 1.040830,
- 0.996206, -0.030105, 0.041887, 1.054970, 0.996971, -0.025610, 0.035535, 1.068240,
- 0.997796, -0.021393, 0.029365, 1.080560, 0.998272, -0.016961, 0.023293, 1.091820,
- 0.998857, -0.012676, 0.017279, 1.102190, 0.999390, -0.008325, 0.011316, 1.111920,
- 0.999752, -0.004108, 0.005579, 1.120750, 1.000000, 0.000151, -0.000119, 1.128850,
- 0.975169, -0.000003, 0.154669, 0.000020, 0.975439, -0.000078, 0.154712, 0.000492,
- 0.975464, -0.000312, 0.154716, 0.001966, 0.975464, -0.000702, 0.154716, 0.004424,
- 0.975462, -0.001247, 0.154715, 0.007865, 0.975461, -0.001949, 0.154715, 0.012289,
- 0.975464, -0.002807, 0.154715, 0.017696, 0.975468, -0.003820, 0.154716, 0.024087,
- 0.975471, -0.004990, 0.154716, 0.031461, 0.975472, -0.006315, 0.154717, 0.039820,
- 0.975486, -0.007797, 0.154718, 0.049164, 0.975489, -0.009435, 0.154718, 0.059493,
- 0.975509, -0.011229, 0.154721, 0.070811, 0.975540, -0.013180, 0.154724, 0.083118,
- 0.975557, -0.015288, 0.154726, 0.096415, 0.975585, -0.017551, 0.154728, 0.110705,
- 0.975605, -0.019971, 0.154729, 0.125992, 0.975645, -0.022545, 0.154729, 0.142272,
- 0.975711, -0.025265, 0.154735, 0.159549, 0.975788, -0.028099, 0.154736, 0.177805,
- 0.975872, -0.030823, 0.154704, 0.196911, 0.975968, -0.032484, 0.154525, 0.216324,
- 0.976063, -0.035128, 0.154432, 0.236628, 0.976157, -0.038862, 0.154460, 0.257539,
- 0.976204, -0.043770, 0.154665, 0.278975, 0.976358, -0.047514, 0.154652, 0.302606,
- 0.976571, -0.050864, 0.154535, 0.327204, 0.976725, -0.053499, 0.154221, 0.352276,
- 0.977013, -0.055555, 0.153737, 0.377696, 0.977294, -0.058673, 0.153403, 0.403855,
- 0.977602, -0.062272, 0.153120, 0.430333, 0.977932, -0.065817, 0.152755, 0.456855,
- 0.978241, -0.068988, 0.152233, 0.483668, 0.978602, -0.071280, 0.151320, 0.512097,
- 0.979234, -0.073277, 0.150235, 0.540455, 0.979770, -0.075163, 0.148978, 0.568486,
- 0.979995, -0.077803, 0.147755, 0.596524, 0.980780, -0.079185, 0.146019, 0.624825,
- 0.981628, -0.079967, 0.143906, 0.653403, 0.982067, -0.080853, 0.141561, 0.681445,
- 0.982710, -0.081602, 0.139025, 0.708918, 0.983734, -0.081251, 0.135764, 0.736594,
- 0.984310, -0.080620, 0.132152, 0.763576, 0.985071, -0.080160, 0.128460, 0.789797,
- 0.986180, -0.078421, 0.124084, 0.815804, 0.986886, -0.076664, 0.119300, 0.840869,
- 0.987485, -0.074774, 0.114236, 0.864952, 0.988431, -0.071670, 0.108654, 0.888431,
- 0.988886, -0.069161, 0.102994, 0.910963, 0.990024, -0.065405, 0.096728, 0.932629,
- 0.990401, -0.061976, 0.090384, 0.953130, 0.991093, -0.057930, 0.083789, 0.972587,
- 0.992018, -0.053658, 0.077017, 0.991184, 0.992536, -0.049372, 0.070149, 1.008630,
- 0.993421, -0.044481, 0.062953, 1.024940, 0.993928, -0.040008, 0.056045, 1.040170,
- 0.994994, -0.034798, 0.048560, 1.054630, 0.995866, -0.030102, 0.041615, 1.068070,
- 0.996916, -0.024823, 0.034260, 1.080390, 0.997766, -0.019923, 0.027167, 1.091770,
- 0.998479, -0.014742, 0.020139, 1.102350, 0.999210, -0.009802, 0.013194, 1.112060,
- 0.999652, -0.004743, 0.006407, 1.121040, 0.999998, 0.000089, -0.000104, 1.129060,
- 0.967868, -0.000004, 0.175947, 0.000019, 0.968001, -0.000089, 0.175972, 0.000488,
- 0.968010, -0.000355, 0.175973, 0.001951, 0.968012, -0.000798, 0.175974, 0.004390,
- 0.968011, -0.001419, 0.175973, 0.007805, 0.968011, -0.002217, 0.175973, 0.012195,
- 0.968016, -0.003192, 0.175974, 0.017561, 0.968019, -0.004345, 0.175974, 0.023903,
- 0.968018, -0.005675, 0.175974, 0.031221, 0.968033, -0.007183, 0.175977, 0.039516,
- 0.968049, -0.008868, 0.175979, 0.048788, 0.968047, -0.010731, 0.175978, 0.059039,
- 0.968072, -0.012772, 0.175981, 0.070270, 0.968108, -0.014991, 0.175986, 0.082484,
- 0.968112, -0.017387, 0.175985, 0.095678, 0.968173, -0.019961, 0.175993, 0.109862,
- 0.968270, -0.022713, 0.176008, 0.125033, 0.968292, -0.025639, 0.176010, 0.141193,
- 0.968339, -0.028730, 0.176007, 0.158336, 0.968389, -0.031940, 0.176001, 0.176441,
- 0.968501, -0.034941, 0.175962, 0.195359, 0.968646, -0.037081, 0.175793, 0.214686,
- 0.968789, -0.040233, 0.175708, 0.234973, 0.968860, -0.044260, 0.175700, 0.255871,
- 0.969013, -0.049398, 0.175876, 0.277238, 0.969242, -0.053993, 0.175940, 0.300326,
- 0.969419, -0.057730, 0.175781, 0.324702, 0.969763, -0.060564, 0.175432, 0.349527,
- 0.970093, -0.063449, 0.174992, 0.374976, 0.970361, -0.067059, 0.174611, 0.401097,
- 0.970825, -0.070825, 0.174226, 0.427496, 0.971214, -0.074287, 0.173684, 0.453858,
- 0.971622, -0.078261, 0.173186, 0.480637, 0.972175, -0.081315, 0.172288, 0.508655,
- 0.972944, -0.083268, 0.170979, 0.536973, 0.973595, -0.085596, 0.169573, 0.565138,
- 0.974345, -0.088216, 0.168152, 0.593222, 0.975233, -0.090167, 0.166314, 0.621201,
- 0.976239, -0.091211, 0.163931, 0.649919, 0.977289, -0.091696, 0.161106, 0.678011,
- 0.978076, -0.092706, 0.158272, 0.705717, 0.979533, -0.092556, 0.154750, 0.733228,
- 0.980335, -0.091816, 0.150638, 0.760454, 0.981808, -0.090851, 0.146201, 0.786918,
- 0.983061, -0.089617, 0.141386, 0.812953, 0.984148, -0.087159, 0.135837, 0.838281,
- 0.985047, -0.085062, 0.130135, 0.862594, 0.986219, -0.081854, 0.123882, 0.886330,
- 0.987043, -0.078452, 0.117126, 0.908952, 0.988107, -0.074960, 0.110341, 0.930744,
- 0.988955, -0.070355, 0.102885, 0.951728, 0.989426, -0.066280, 0.095417, 0.971166,
- 0.990421, -0.061083, 0.087633, 0.989984, 0.991032, -0.056294, 0.079779, 1.007650,
- 0.992041, -0.050815, 0.071817, 1.024340, 0.992794, -0.045405, 0.063713, 1.039760,
- 0.993691, -0.039819, 0.055534, 1.054180, 0.994778, -0.034148, 0.047339, 1.067720,
- 0.995915, -0.028428, 0.039102, 1.080280, 0.997109, -0.022642, 0.030995, 1.091850,
- 0.998095, -0.016874, 0.023029, 1.102470, 0.998985, -0.011127, 0.015072, 1.112290,
- 0.999581, -0.005439, 0.007406, 1.121310, 1.000030, 0.000162, -0.000106, 1.129460,
- 0.959505, -0.000004, 0.196876, 0.000019, 0.959599, -0.000099, 0.196895, 0.000484,
- 0.959641, -0.000397, 0.196903, 0.001934, 0.959599, -0.000893, 0.196895, 0.004352,
- 0.959603, -0.001587, 0.196896, 0.007737, 0.959604, -0.002480, 0.196896, 0.012089,
- 0.959605, -0.003572, 0.196896, 0.017408, 0.959605, -0.004862, 0.196896, 0.023695,
- 0.959613, -0.006350, 0.196897, 0.030950, 0.959619, -0.008037, 0.196898, 0.039172,
- 0.959636, -0.009923, 0.196901, 0.048365, 0.959634, -0.012007, 0.196900, 0.058527,
- 0.959675, -0.014290, 0.196906, 0.069661, 0.959712, -0.016772, 0.196911, 0.081768,
- 0.959752, -0.019452, 0.196918, 0.094849, 0.959807, -0.022332, 0.196925, 0.108910,
- 0.959828, -0.025409, 0.196924, 0.123947, 0.959906, -0.028681, 0.196934, 0.139968,
- 0.960005, -0.032137, 0.196944, 0.156968, 0.960071, -0.035711, 0.196936, 0.174910,
- 0.960237, -0.038906, 0.196882, 0.193597, 0.960367, -0.041623, 0.196731, 0.212850,
- 0.960562, -0.045266, 0.196654, 0.233075, 0.960735, -0.049621, 0.196643, 0.253941,
- 0.960913, -0.054938, 0.196774, 0.275278, 0.961121, -0.060341, 0.196893, 0.297733,
- 0.961390, -0.064424, 0.196717, 0.321877, 0.961818, -0.067556, 0.196314, 0.346476,
- 0.962175, -0.071271, 0.195917, 0.371907, 0.962550, -0.075285, 0.195500, 0.397916,
- 0.963164, -0.079207, 0.195026, 0.424229, 0.963782, -0.082822, 0.194424, 0.450637,
- 0.964306, -0.087312, 0.193831, 0.477288, 0.964923, -0.091105, 0.192973, 0.504716,
- 0.966048, -0.093251, 0.191510, 0.533053, 0.967024, -0.095898, 0.190013, 0.561366,
- 0.968038, -0.098350, 0.188253, 0.589464, 0.969152, -0.100754, 0.186257, 0.617433,
- 0.970557, -0.102239, 0.183775, 0.645801, 0.972104, -0.102767, 0.180645, 0.674278,
- 0.973203, -0.103492, 0.177242, 0.702004, 0.975123, -0.103793, 0.173450, 0.729529,
- 0.976410, -0.102839, 0.168886, 0.756712, 0.978313, -0.101687, 0.163892, 0.783801,
- 0.980036, -0.100314, 0.158439, 0.809671, 0.981339, -0.097836, 0.152211, 0.835402,
- 0.982794, -0.095001, 0.145679, 0.860081, 0.984123, -0.092099, 0.138949, 0.883757,
- 0.984918, -0.087864, 0.131283, 0.906850, 0.985999, -0.083939, 0.123464, 0.928786,
- 0.987151, -0.079123, 0.115324, 0.949830, 0.987827, -0.073933, 0.106854, 0.969620,
- 0.988806, -0.068809, 0.098269, 0.988610, 0.989588, -0.062896, 0.089346, 1.006670,
- 0.990438, -0.057315, 0.080539, 1.023440, 0.991506, -0.050943, 0.071373, 1.039330,
- 0.992492, -0.044872, 0.062373, 1.053780, 0.993663, -0.038350, 0.053084, 1.067470,
- 0.994956, -0.031959, 0.043951, 1.080070, 0.996340, -0.025401, 0.034780, 1.091820,
- 0.997610, -0.018969, 0.025795, 1.102500, 0.998630, -0.012444, 0.016989, 1.112470,
- 0.999470, -0.006140, 0.008295, 1.121510, 1.000080, 0.000217, -0.000146, 1.129930,
- 0.950129, -0.000004, 0.217413, 0.000019, 0.950264, -0.000110, 0.217444, 0.000479,
- 0.950300, -0.000438, 0.217451, 0.001915, 0.950246, -0.000986, 0.217440, 0.004310,
- 0.950246, -0.001753, 0.217440, 0.007661, 0.950245, -0.002739, 0.217440, 0.011971,
- 0.950253, -0.003945, 0.217441, 0.017239, 0.950258, -0.005369, 0.217442, 0.023464,
- 0.950267, -0.007013, 0.217444, 0.030648, 0.950277, -0.008876, 0.217446, 0.038791,
- 0.950284, -0.010958, 0.217446, 0.047893, 0.950312, -0.013259, 0.217451, 0.057957,
- 0.950334, -0.015780, 0.217454, 0.068982, 0.950378, -0.018520, 0.217462, 0.080971,
- 0.950417, -0.021480, 0.217467, 0.093926, 0.950488, -0.024659, 0.217479, 0.107850,
- 0.950534, -0.028057, 0.217483, 0.122743, 0.950633, -0.031669, 0.217498, 0.138611,
- 0.950698, -0.035479, 0.217499, 0.155442, 0.950844, -0.039400, 0.217507, 0.173208,
- 0.950999, -0.042681, 0.217419, 0.191605, 0.951221, -0.046130, 0.217317, 0.210840,
- 0.951412, -0.050213, 0.217238, 0.230945, 0.951623, -0.054918, 0.217220, 0.251745,
- 0.951867, -0.060449, 0.217306, 0.273001, 0.952069, -0.066519, 0.217466, 0.294874,
- 0.952459, -0.070918, 0.217266, 0.318732, 0.952996, -0.074611, 0.216891, 0.343180,
- 0.953425, -0.078925, 0.216503, 0.368490, 0.953885, -0.083329, 0.216042, 0.394373,
- 0.954617, -0.087371, 0.215469, 0.420505, 0.955429, -0.091405, 0.214802, 0.446907,
- 0.956068, -0.096167, 0.214146, 0.473522, 0.957094, -0.100480, 0.213286, 0.500520,
- 0.958372, -0.103248, 0.211796, 0.528715, 0.959654, -0.106033, 0.210160, 0.557065,
- 0.961305, -0.108384, 0.208149, 0.585286, 0.962785, -0.111122, 0.206024, 0.613334,
- 0.964848, -0.112981, 0.203442, 0.641334, 0.966498, -0.113717, 0.199960, 0.669955,
- 0.968678, -0.114121, 0.196105, 0.698094, 0.970489, -0.114524, 0.191906, 0.725643,
- 0.972903, -0.113792, 0.186963, 0.752856, 0.974701, -0.112406, 0.181343, 0.780013,
- 0.976718, -0.110685, 0.175185, 0.806268, 0.978905, -0.108468, 0.168535, 0.832073,
- 0.980267, -0.105061, 0.161106, 0.857149, 0.981967, -0.101675, 0.153387, 0.881145,
- 0.983063, -0.097449, 0.145199, 0.904255, 0.984432, -0.092581, 0.136527, 0.926686,
- 0.985734, -0.087798, 0.127584, 0.947901, 0.986228, -0.081884, 0.118125, 0.968111,
- 0.987190, -0.076121, 0.108594, 0.987190, 0.988228, -0.069820, 0.099000, 1.005590,
- 0.989046, -0.063274, 0.089007, 1.022460, 0.990242, -0.056522, 0.079083, 1.038410,
- 0.991252, -0.049527, 0.068918, 1.053470, 0.992542, -0.042537, 0.058859, 1.067240,
- 0.994096, -0.035320, 0.048683, 1.080090, 0.995593, -0.028235, 0.038598, 1.091770,
- 0.997110, -0.020951, 0.028646, 1.102740, 0.998263, -0.013929, 0.018850, 1.112620,
- 0.999254, -0.006736, 0.009208, 1.121910, 0.999967, 0.000142, -0.000066, 1.130240,
- 0.935608, -0.000005, 0.236466, 0.000019, 0.939960, -0.000120, 0.237568, 0.000474,
- 0.939959, -0.000479, 0.237567, 0.001895, 0.939954, -0.001077, 0.237566, 0.004263,
- 0.939956, -0.001915, 0.237566, 0.007578, 0.939954, -0.002993, 0.237566, 0.011841,
- 0.939960, -0.004310, 0.237567, 0.017052, 0.939969, -0.005866, 0.237569, 0.023210,
- 0.939982, -0.007662, 0.237572, 0.030316, 0.939987, -0.009697, 0.237572, 0.038371,
- 0.939997, -0.011971, 0.237574, 0.047375, 0.940031, -0.014486, 0.237581, 0.057330,
- 0.940073, -0.017240, 0.237589, 0.068237, 0.940120, -0.020234, 0.237598, 0.080097,
- 0.940162, -0.023466, 0.237604, 0.092912, 0.940237, -0.026939, 0.237615, 0.106686,
- 0.940328, -0.030649, 0.237632, 0.121421, 0.940419, -0.034592, 0.237645, 0.137115,
- 0.940522, -0.038748, 0.237654, 0.153766, 0.940702, -0.042991, 0.237661, 0.171330,
- 0.940871, -0.046509, 0.237561, 0.189502, 0.941103, -0.050531, 0.237480, 0.208616,
- 0.941369, -0.055066, 0.237423, 0.228595, 0.941641, -0.060134, 0.237399, 0.249287,
- 0.941903, -0.065880, 0.237443, 0.270467, 0.942224, -0.072267, 0.237597, 0.292024,
- 0.942633, -0.077179, 0.237419, 0.315272, 0.943172, -0.081562, 0.237068, 0.339579,
- 0.943691, -0.086397, 0.236682, 0.364717, 0.944382, -0.091154, 0.236213, 0.390435,
- 0.945392, -0.095297, 0.235562, 0.416425, 0.946185, -0.099895, 0.234832, 0.442772,
- 0.947212, -0.104796, 0.234114, 0.469347, 0.948778, -0.109280, 0.233222, 0.496162,
- 0.950149, -0.113081, 0.231845, 0.523978, 0.951989, -0.115893, 0.230005, 0.552295,
- 0.953921, -0.118460, 0.227862, 0.580569, 0.955624, -0.121150, 0.225439, 0.608698,
- 0.958234, -0.123373, 0.222635, 0.636696, 0.960593, -0.124519, 0.219093, 0.665208,
- 0.963201, -0.124736, 0.214749, 0.693557, 0.965642, -0.125012, 0.210059, 0.721334,
- 0.968765, -0.124661, 0.204935, 0.748613, 0.971753, -0.122996, 0.198661, 0.776224,
- 0.973751, -0.120998, 0.191823, 0.802461, 0.976709, -0.118583, 0.184359, 0.828399,
- 0.977956, -0.115102, 0.176437, 0.853693, 0.979672, -0.111077, 0.167681, 0.877962,
- 0.981816, -0.106880, 0.158872, 0.901564, 0.982380, -0.101469, 0.149398, 0.924057,
- 0.983964, -0.096001, 0.139436, 0.945751, 0.984933, -0.089963, 0.129430, 0.966272,
- 0.985694, -0.083297, 0.118940, 0.985741, 0.986822, -0.076708, 0.108349, 1.004070,
- 0.987725, -0.069361, 0.097603, 1.021540, 0.988770, -0.062110, 0.086652, 1.037570,
- 0.990129, -0.054414, 0.075618, 1.052960, 0.991337, -0.046744, 0.064575, 1.066830,
- 0.992978, -0.038793, 0.053468, 1.079800, 0.994676, -0.030973, 0.042414, 1.091810,
- 0.996450, -0.023031, 0.031404, 1.102860, 0.997967, -0.015206, 0.020687, 1.112910,
- 0.999220, -0.007448, 0.010155, 1.122370, 1.000020, 0.000240, -0.000075, 1.130890,
- 0.922948, -0.000005, 0.255626, 0.000019, 0.928785, -0.000130, 0.257244, 0.000468,
- 0.928761, -0.000518, 0.257237, 0.001872, 0.928751, -0.001167, 0.257235, 0.004212,
- 0.928751, -0.002074, 0.257234, 0.007488, 0.928754, -0.003241, 0.257235, 0.011700,
- 0.928760, -0.004666, 0.257236, 0.016849, 0.928763, -0.006351, 0.257237, 0.022933,
- 0.928774, -0.008296, 0.257239, 0.029955, 0.928791, -0.010500, 0.257243, 0.037914,
- 0.928804, -0.012962, 0.257245, 0.046811, 0.928847, -0.015685, 0.257255, 0.056647,
- 0.928890, -0.018666, 0.257263, 0.067425, 0.928924, -0.021907, 0.257268, 0.079143,
- 0.928989, -0.025407, 0.257282, 0.091808, 0.929090, -0.029165, 0.257301, 0.105419,
- 0.929180, -0.033180, 0.257316, 0.119978, 0.929290, -0.037447, 0.257332, 0.135491,
- 0.929453, -0.041939, 0.257357, 0.151948, 0.929586, -0.046461, 0.257347, 0.169275,
- 0.929858, -0.050343, 0.257269, 0.187257, 0.930125, -0.054841, 0.257199, 0.206204,
- 0.930403, -0.059806, 0.257149, 0.226010, 0.930726, -0.065244, 0.257122, 0.246561,
- 0.931098, -0.071238, 0.257153, 0.267618, 0.931396, -0.077751, 0.257237, 0.288993,
- 0.931947, -0.083237, 0.257124, 0.311527, 0.932579, -0.088396, 0.256830, 0.335697,
- 0.933194, -0.093704, 0.256444, 0.360634, 0.934013, -0.098729, 0.255939, 0.386126,
- 0.935307, -0.103215, 0.255282, 0.412018, 0.936374, -0.108234, 0.254538, 0.438292,
- 0.937760, -0.113234, 0.253728, 0.464805, 0.939599, -0.118013, 0.252750, 0.491464,
- 0.941036, -0.122661, 0.251404, 0.518751, 0.943370, -0.125477, 0.249435, 0.547133,
- 0.945318, -0.128374, 0.247113, 0.575456, 0.947995, -0.130996, 0.244441, 0.603720,
- 0.950818, -0.133438, 0.241352, 0.631740, 0.954378, -0.135004, 0.237849, 0.659971,
- 0.957151, -0.135313, 0.233188, 0.688478, 0.960743, -0.135210, 0.228001, 0.716767,
- 0.964352, -0.135007, 0.222249, 0.744349, 0.967273, -0.133523, 0.215420, 0.771786,
- 0.969767, -0.131155, 0.208039, 0.798639, 0.973195, -0.128492, 0.200076, 0.824774,
- 0.975557, -0.125094, 0.191451, 0.850222, 0.977692, -0.120578, 0.181840, 0.874761,
- 0.980260, -0.115882, 0.172102, 0.898497, 0.981394, -0.110372, 0.161859, 0.921636,
- 0.982386, -0.104150, 0.151080, 0.943467, 0.983783, -0.097813, 0.140407, 0.964045,
- 0.984220, -0.090617, 0.129058, 0.983980, 0.985447, -0.083292, 0.117614, 1.002760,
- 0.986682, -0.075441, 0.105850, 1.020470, 0.987326, -0.067389, 0.094094, 1.036780,
- 0.988707, -0.059256, 0.082209, 1.052180, 0.990185, -0.050717, 0.070192, 1.066520,
- 0.991866, -0.042349, 0.058208, 1.079650, 0.993897, -0.033612, 0.046099, 1.091880,
- 0.995841, -0.025218, 0.034274, 1.103070, 0.997605, -0.016489, 0.022483, 1.113240,
- 0.999037, -0.008171, 0.011065, 1.122620, 1.000030, 0.000292, -0.000169, 1.131390,
- 0.915304, -0.000006, 0.275999, 0.000018, 0.916680, -0.000139, 0.276414, 0.000462,
- 0.916664, -0.000557, 0.276409, 0.001848, 0.916653, -0.001254, 0.276406, 0.004157,
- 0.916651, -0.002229, 0.276405, 0.007391, 0.916655, -0.003482, 0.276406, 0.011548,
- 0.916653, -0.005014, 0.276405, 0.016629, 0.916667, -0.006825, 0.276409, 0.022635,
- 0.916680, -0.008914, 0.276412, 0.029565, 0.916690, -0.011282, 0.276413, 0.037420,
- 0.916727, -0.013928, 0.276422, 0.046202, 0.916759, -0.016853, 0.276429, 0.055910,
- 0.916793, -0.020056, 0.276436, 0.066547, 0.916849, -0.023537, 0.276448, 0.078114,
- 0.916964, -0.027297, 0.276474, 0.090616, 0.917047, -0.031334, 0.276491, 0.104051,
- 0.917152, -0.035646, 0.276511, 0.118424, 0.917286, -0.040227, 0.276533, 0.133736,
- 0.917469, -0.045041, 0.276564, 0.149978, 0.917686, -0.049787, 0.276563, 0.167057,
- 0.917953, -0.054094, 0.276493, 0.184846, 0.918228, -0.059071, 0.276437, 0.203614,
- 0.918572, -0.064428, 0.276398, 0.223212, 0.918918, -0.070233, 0.276362, 0.243584,
- 0.919356, -0.076484, 0.276383, 0.264465, 0.919842, -0.083081, 0.276434, 0.285701,
- 0.920451, -0.089297, 0.276407, 0.307559, 0.921113, -0.095016, 0.276128, 0.331501,
- 0.921881, -0.100771, 0.275754, 0.356207, 0.923027, -0.106029, 0.275254, 0.381477,
- 0.924364, -0.111029, 0.274595, 0.407220, 0.925818, -0.116345, 0.273841, 0.433385,
- 0.927460, -0.121424, 0.272913, 0.459848, 0.929167, -0.126570, 0.271837, 0.486493,
- 0.931426, -0.131581, 0.270575, 0.513432, 0.934001, -0.135038, 0.268512, 0.541502,
- 0.936296, -0.138039, 0.266135, 0.569658, 0.939985, -0.140687, 0.263271, 0.598375,
- 0.943516, -0.143247, 0.260058, 0.626563, 0.947820, -0.145135, 0.256138, 0.654711,
- 0.951023, -0.145733, 0.251154, 0.683285, 0.955338, -0.145554, 0.245562, 0.711831,
- 0.959629, -0.145008, 0.239265, 0.739573, 0.963123, -0.144003, 0.232064, 0.767027,
- 0.966742, -0.141289, 0.224036, 0.794359, 0.969991, -0.138247, 0.215305, 0.820361,
- 0.973403, -0.134786, 0.206051, 0.846548, 0.975317, -0.129966, 0.195914, 0.871541,
- 0.977647, -0.124710, 0.185184, 0.895313, 0.980137, -0.119086, 0.174161, 0.918398,
- 0.981031, -0.112297, 0.162792, 0.940679, 0.982037, -0.105372, 0.150952, 0.961991,
- 0.983164, -0.097821, 0.138921, 0.981913, 0.983757, -0.089724, 0.126611, 1.001090,
- 0.985036, -0.081597, 0.114228, 1.019020, 0.986289, -0.072773, 0.101389, 1.036040,
- 0.987329, -0.063932, 0.088648, 1.051490, 0.989193, -0.054811, 0.075684, 1.066190,
- 0.990716, -0.045687, 0.062758, 1.079480, 0.992769, -0.036431, 0.049834, 1.091720,
- 0.995240, -0.027176, 0.037031, 1.103300, 0.997154, -0.017961, 0.024396, 1.113530,
- 0.998845, -0.008781, 0.011957, 1.123190, 1.000020, 0.000259, -0.000108, 1.131770,
- 0.903945, -0.000006, 0.295126, 0.000018, 0.903668, -0.000149, 0.295037, 0.000455,
- 0.903677, -0.000595, 0.295040, 0.001821, 0.903673, -0.001338, 0.295039, 0.004098,
- 0.903666, -0.002379, 0.295036, 0.007286, 0.903668, -0.003717, 0.295037, 0.011384,
- 0.903679, -0.005352, 0.295040, 0.016394, 0.903684, -0.007285, 0.295041, 0.022314,
- 0.903698, -0.009515, 0.295044, 0.029146, 0.903718, -0.012042, 0.295049, 0.036890,
- 0.903754, -0.014866, 0.295058, 0.045548, 0.903801, -0.017988, 0.295070, 0.055119,
- 0.903851, -0.021406, 0.295082, 0.065606, 0.903921, -0.025122, 0.295097, 0.077011,
- 0.904002, -0.029134, 0.295116, 0.089335, 0.904111, -0.033441, 0.295140, 0.102583,
- 0.904246, -0.038041, 0.295169, 0.116755, 0.904408, -0.042926, 0.295202, 0.131853,
- 0.904637, -0.048047, 0.295245, 0.147869, 0.904821, -0.052921, 0.295214, 0.164658,
- 0.905163, -0.057775, 0.295185, 0.182274, 0.905469, -0.063176, 0.295143, 0.200828,
- 0.905851, -0.068917, 0.295112, 0.220200, 0.906322, -0.075086, 0.295104, 0.240372,
- 0.906761, -0.081586, 0.295086, 0.261082, 0.907350, -0.088214, 0.295095, 0.282123,
- 0.908087, -0.095082, 0.295139, 0.303563, 0.908826, -0.101488, 0.294920, 0.327028,
- 0.909832, -0.107577, 0.294577, 0.351464, 0.911393, -0.113033, 0.294115, 0.376497,
- 0.912804, -0.118629, 0.293446, 0.402115, 0.914081, -0.124232, 0.292581, 0.428111,
- 0.916370, -0.129399, 0.291660, 0.454442, 0.918140, -0.134892, 0.290422, 0.481024,
- 0.921179, -0.140069, 0.289194, 0.507924, 0.924544, -0.144431, 0.287421, 0.535557,
- 0.927995, -0.147498, 0.284867, 0.563984, 0.931556, -0.150197, 0.281722, 0.592300,
- 0.935777, -0.152711, 0.278207, 0.620832, 0.940869, -0.154836, 0.274148, 0.649069,
- 0.945994, -0.155912, 0.269057, 0.677746, 0.949634, -0.155641, 0.262799, 0.706293,
- 0.955032, -0.154809, 0.256097, 0.734278, 0.959170, -0.153678, 0.248618, 0.761751,
- 0.962931, -0.151253, 0.239794, 0.789032, 0.966045, -0.147625, 0.230281, 0.815422,
- 0.969710, -0.143964, 0.220382, 0.841787, 0.972747, -0.139464, 0.209846, 0.867446,
- 0.975545, -0.133459, 0.198189, 0.892004, 0.978381, -0.127424, 0.186362, 0.915458,
- 0.979935, -0.120506, 0.173964, 0.937948, 0.980948, -0.112820, 0.161429, 0.959732,
- 0.982234, -0.104941, 0.148557, 0.980118, 0.982767, -0.096291, 0.135508, 0.999463,
- 0.983544, -0.087362, 0.122338, 1.017560, 0.984965, -0.078345, 0.108669, 1.034920,
- 0.986233, -0.068480, 0.094991, 1.050870, 0.987796, -0.059087, 0.081139, 1.065600,
- 0.989885, -0.048914, 0.067310, 1.079400, 0.991821, -0.039100, 0.053567, 1.091740,
- 0.994480, -0.029087, 0.039753, 1.103410, 0.996769, -0.019114, 0.026146, 1.113830,
- 0.998641, -0.009470, 0.012873, 1.123700, 0.999978, 0.000446, -0.000169, 1.132530,
- 0.888362, -0.000006, 0.312578, 0.000018, 0.889988, -0.000158, 0.313148, 0.000448,
- 0.889825, -0.000631, 0.313092, 0.001794, 0.889840, -0.001420, 0.313097, 0.004036,
- 0.889828, -0.002524, 0.313092, 0.007174, 0.889831, -0.003944, 0.313093, 0.011210,
- 0.889831, -0.005680, 0.313093, 0.016143, 0.889844, -0.007731, 0.313096, 0.021972,
- 0.889858, -0.010097, 0.313100, 0.028700, 0.889882, -0.012779, 0.313106, 0.036326,
- 0.889918, -0.015776, 0.313116, 0.044851, 0.889967, -0.019088, 0.313129, 0.054276,
- 0.890030, -0.022715, 0.313145, 0.064603, 0.890108, -0.026657, 0.313165, 0.075834,
- 0.890218, -0.030913, 0.313193, 0.087973, 0.890351, -0.035482, 0.313226, 0.101019,
- 0.890510, -0.040361, 0.313263, 0.114979, 0.890672, -0.045539, 0.313294, 0.129848,
- 0.890882, -0.050944, 0.313333, 0.145616, 0.891189, -0.055966, 0.313324, 0.162122,
- 0.891457, -0.061312, 0.313281, 0.179524, 0.891856, -0.067149, 0.313281, 0.197855,
- 0.892312, -0.073273, 0.313268, 0.216991, 0.892819, -0.079786, 0.313263, 0.236924,
- 0.893369, -0.086527, 0.313247, 0.257433, 0.894045, -0.093159, 0.313205, 0.278215,
- 0.894884, -0.100532, 0.313276, 0.299467, 0.895832, -0.107716, 0.313205, 0.322276,
- 0.897043, -0.114099, 0.312873, 0.346420, 0.898515, -0.119941, 0.312331, 0.371187,
- 0.900191, -0.126044, 0.311731, 0.396656, 0.901880, -0.131808, 0.310859, 0.422488,
- 0.904359, -0.137289, 0.309857, 0.448744, 0.906923, -0.142991, 0.308714, 0.475239,
- 0.910634, -0.148253, 0.307465, 0.501983, 0.914502, -0.153332, 0.305774, 0.529254,
- 0.919046, -0.156646, 0.303156, 0.557709, 0.923194, -0.159612, 0.299928, 0.586267,
- 0.928858, -0.162027, 0.296245, 0.614925, 0.934464, -0.164203, 0.291832, 0.643187,
- 0.939824, -0.165602, 0.286565, 0.671601, 0.944582, -0.165383, 0.280073, 0.700213,
- 0.949257, -0.164439, 0.272891, 0.728432, 0.954389, -0.162953, 0.264771, 0.756082,
- 0.958595, -0.161007, 0.255927, 0.783690, 0.962138, -0.157243, 0.245769, 0.810769,
- 0.966979, -0.152872, 0.235127, 0.836999, 0.969566, -0.148209, 0.223470, 0.862684,
- 0.972372, -0.142211, 0.211147, 0.887847, 0.975916, -0.135458, 0.198606, 0.911843,
- 0.978026, -0.128398, 0.185498, 0.934795, 0.979686, -0.120313, 0.171710, 0.956787,
- 0.980748, -0.111660, 0.158159, 0.978046, 0.981622, -0.103035, 0.144399, 0.997693,
- 0.982356, -0.093033, 0.130010, 1.016420, 0.983308, -0.083463, 0.115778, 1.033660,
- 0.985037, -0.073225, 0.101327, 1.050140, 0.986493, -0.062814, 0.086554, 1.065070,
- 0.988484, -0.052656, 0.072041, 1.079070, 0.991051, -0.041574, 0.057115, 1.091890,
- 0.993523, -0.031427, 0.042664, 1.103690, 0.996280, -0.020360, 0.027932, 1.114230,
- 0.998344, -0.010245, 0.013818, 1.124210, 0.999997, 0.000426, -0.000194, 1.133300,
- 0.871555, -0.000007, 0.329176, 0.000017, 0.875255, -0.000167, 0.330571, 0.000441,
- 0.875644, -0.000666, 0.330718, 0.001764, 0.875159, -0.001499, 0.330536, 0.003969,
- 0.875160, -0.002665, 0.330536, 0.007056, 0.875158, -0.004164, 0.330535, 0.011025,
- 0.875160, -0.005996, 0.330535, 0.015876, 0.875163, -0.008161, 0.330536, 0.021610,
- 0.875174, -0.010659, 0.330538, 0.028227, 0.875199, -0.013490, 0.330545, 0.035727,
- 0.875257, -0.016654, 0.330563, 0.044112, 0.875304, -0.020150, 0.330575, 0.053382,
- 0.875373, -0.023978, 0.330595, 0.063539, 0.875464, -0.028139, 0.330619, 0.074587,
- 0.875565, -0.032630, 0.330645, 0.086526, 0.875691, -0.037452, 0.330676, 0.099360,
- 0.875897, -0.042599, 0.330733, 0.113093, 0.876091, -0.048058, 0.330776, 0.127722,
- 0.876353, -0.053722, 0.330826, 0.143227, 0.876649, -0.058981, 0.330809, 0.159462,
- 0.877034, -0.064786, 0.330819, 0.176642, 0.877443, -0.070979, 0.330817, 0.194702,
- 0.877956, -0.077478, 0.330832, 0.213577, 0.878499, -0.084318, 0.330822, 0.233246,
- 0.879144, -0.091271, 0.330804, 0.253512, 0.879982, -0.098082, 0.330766, 0.274137,
- 0.880970, -0.105823, 0.330864, 0.295209, 0.882051, -0.113671, 0.330896, 0.317226,
- 0.883397, -0.120303, 0.330545, 0.341068, 0.884987, -0.126670, 0.330068, 0.365613,
- 0.886789, -0.133118, 0.329418, 0.390807, 0.889311, -0.139024, 0.328683, 0.416494,
- 0.891995, -0.144971, 0.327729, 0.442618, 0.895106, -0.150747, 0.326521, 0.469131,
- 0.899527, -0.156283, 0.325229, 0.495921, 0.905040, -0.161707, 0.323780, 0.523162,
- 0.909875, -0.165661, 0.321220, 0.550920, 0.915610, -0.168755, 0.317942, 0.579928,
- 0.921225, -0.171193, 0.313983, 0.608539, 0.927308, -0.173190, 0.309636, 0.636854,
- 0.933077, -0.174819, 0.304262, 0.665230, 0.938766, -0.175002, 0.297563, 0.693609,
- 0.943667, -0.173946, 0.289613, 0.722157, 0.949033, -0.172221, 0.281227, 0.750021,
- 0.953765, -0.169869, 0.271545, 0.777466, 0.958040, -0.166578, 0.261034, 0.804853,
- 0.962302, -0.161761, 0.249434, 0.831569, 0.966544, -0.156636, 0.237484, 0.857779,
- 0.969372, -0.150784, 0.224395, 0.883051, 0.972486, -0.143672, 0.210786, 0.907864,
- 0.975853, -0.135772, 0.196556, 0.931223, 0.977975, -0.127942, 0.182307, 0.954061,
- 0.979122, -0.118347, 0.167607, 0.975310, 0.980719, -0.109112, 0.152739, 0.995666,
- 0.981223, -0.099179, 0.137932, 1.014750, 0.982160, -0.088355, 0.122692, 1.032530,
- 0.983379, -0.078082, 0.107493, 1.049170, 0.985434, -0.066565, 0.091779, 1.064640,
- 0.987332, -0.055771, 0.076495, 1.078960, 0.990004, -0.044281, 0.060721, 1.091990,
- 0.992975, -0.033168, 0.045228, 1.103930, 0.995811, -0.021955, 0.029793, 1.114760,
- 0.998200, -0.010761, 0.014642, 1.124840, 1.000020, 0.000249, -0.000146, 1.134130,
- 0.859519, -0.000007, 0.347264, 0.000017, 0.859843, -0.000175, 0.347394, 0.000433,
- 0.859656, -0.000700, 0.347319, 0.001733, 0.859671, -0.001575, 0.347325, 0.003899,
- 0.859669, -0.002800, 0.347324, 0.006931, 0.859670, -0.004375, 0.347324, 0.010830,
- 0.859665, -0.006300, 0.347321, 0.015595, 0.859685, -0.008575, 0.347328, 0.021228,
- 0.859694, -0.011200, 0.347329, 0.027727, 0.859718, -0.014175, 0.347336, 0.035095,
- 0.859760, -0.017499, 0.347348, 0.043331, 0.859820, -0.021172, 0.347366, 0.052438,
- 0.859892, -0.025194, 0.347387, 0.062417, 0.860006, -0.029565, 0.347422, 0.073271,
- 0.860122, -0.034283, 0.347453, 0.085000, 0.860282, -0.039346, 0.347499, 0.097610,
- 0.860482, -0.044751, 0.347554, 0.111104, 0.860719, -0.050478, 0.347614, 0.125479,
- 0.860998, -0.056358, 0.347666, 0.140703, 0.861322, -0.061947, 0.347662, 0.156681,
- 0.861724, -0.068128, 0.347684, 0.173597, 0.862198, -0.074657, 0.347709, 0.191371,
- 0.862733, -0.081523, 0.347727, 0.209976, 0.863371, -0.088664, 0.347744, 0.229351,
- 0.864140, -0.095791, 0.347734, 0.249340, 0.865138, -0.102912, 0.347720, 0.269797,
- 0.866182, -0.110924, 0.347800, 0.290654, 0.867436, -0.119223, 0.347911, 0.312074,
- 0.869087, -0.126197, 0.347649, 0.335438, 0.870859, -0.133145, 0.347222, 0.359732,
- 0.872997, -0.139869, 0.346645, 0.384670, 0.875939, -0.146089, 0.345935, 0.410190,
- 0.879012, -0.152334, 0.345012, 0.436218, 0.883353, -0.158210, 0.343924, 0.462641,
- 0.888362, -0.164097, 0.342636, 0.489449, 0.895026, -0.169528, 0.341351, 0.516629,
- 0.900753, -0.174408, 0.339115, 0.544109, 0.906814, -0.177510, 0.335809, 0.572857,
- 0.912855, -0.180101, 0.331597, 0.601554, 0.919438, -0.182116, 0.326980, 0.630198,
- 0.925962, -0.183494, 0.321449, 0.658404, 0.931734, -0.184159, 0.314595, 0.686625,
- 0.937620, -0.183040, 0.306462, 0.715310, 0.943858, -0.181323, 0.297514, 0.744272,
- 0.948662, -0.178683, 0.287447, 0.771462, 0.953299, -0.175379, 0.276166, 0.798593,
- 0.957346, -0.170395, 0.263758, 0.825600, 0.962565, -0.165042, 0.251019, 0.852575,
- 0.966075, -0.158655, 0.237011, 0.878316, 0.969048, -0.151707, 0.222518, 0.903290,
- 0.972423, -0.143271, 0.207848, 0.927745, 0.975833, -0.134824, 0.192463, 0.950859,
- 0.977629, -0.125444, 0.176800, 0.972947, 0.978995, -0.114949, 0.161033, 0.993263,
- 0.980533, -0.104936, 0.145523, 1.013370, 0.980745, -0.093558, 0.129799, 1.031280,
- 0.981814, -0.082296, 0.113486, 1.048250, 0.983943, -0.071008, 0.097293, 1.064050,
- 0.986141, -0.058793, 0.080814, 1.078500, 0.988878, -0.047275, 0.064491, 1.092040,
- 0.992132, -0.034913, 0.047813, 1.104130, 0.995300, -0.023241, 0.031621, 1.115270,
- 0.998117, -0.011271, 0.015494, 1.125510, 1.000030, 0.000340, -0.000196, 1.135040,
- 0.845441, -0.000007, 0.364305, 0.000017, 0.843588, -0.000183, 0.363506, 0.000425,
- 0.843412, -0.000733, 0.363430, 0.001700, 0.843401, -0.001648, 0.363426, 0.003825,
- 0.843399, -0.002930, 0.363425, 0.006800, 0.843401, -0.004578, 0.363425, 0.010625,
- 0.843394, -0.006592, 0.363421, 0.015300, 0.843398, -0.008973, 0.363421, 0.020826,
- 0.843415, -0.011719, 0.363426, 0.027202, 0.843438, -0.014831, 0.363432, 0.034431,
- 0.843483, -0.018309, 0.363447, 0.042512, 0.843560, -0.022152, 0.363472, 0.051447,
- 0.843646, -0.026360, 0.363499, 0.061238, 0.843743, -0.030932, 0.363527, 0.071887,
- 0.843880, -0.035866, 0.363569, 0.083397, 0.844079, -0.041162, 0.363631, 0.095774,
- 0.844279, -0.046813, 0.363688, 0.109015, 0.844549, -0.052792, 0.363761, 0.123124,
- 0.844858, -0.058820, 0.363817, 0.138044, 0.845220, -0.064757, 0.363830, 0.153755,
- 0.845669, -0.071318, 0.363879, 0.170394, 0.846155, -0.078170, 0.363908, 0.187861,
- 0.846789, -0.085391, 0.363969, 0.206176, 0.847502, -0.092809, 0.363999, 0.225244,
- 0.848400, -0.100050, 0.363997, 0.244926, 0.849461, -0.107615, 0.364008, 0.265188,
- 0.850562, -0.115814, 0.364055, 0.285870, 0.851962, -0.124334, 0.364179, 0.306926,
- 0.854326, -0.131995, 0.364233, 0.329605, 0.856295, -0.139338, 0.363856, 0.353590,
- 0.858857, -0.146346, 0.363347, 0.378310, 0.862428, -0.152994, 0.362807, 0.403722,
- 0.866203, -0.159463, 0.361963, 0.429537, 0.871629, -0.165623, 0.361120, 0.456000,
- 0.877365, -0.171649, 0.359917, 0.482773, 0.883744, -0.177151, 0.358480, 0.509705,
- 0.890693, -0.182381, 0.356523, 0.537215, 0.897278, -0.186076, 0.353300, 0.565493,
- 0.903958, -0.188602, 0.349095, 0.594293, 0.910908, -0.190755, 0.344215, 0.623165,
- 0.918117, -0.192063, 0.338606, 0.651573, 0.924644, -0.192758, 0.331544, 0.679869,
- 0.931054, -0.192238, 0.323163, 0.708668, 0.937303, -0.190035, 0.313529, 0.737201,
- 0.943387, -0.187162, 0.303152, 0.764977, 0.948494, -0.183876, 0.291460, 0.792683,
- 0.952546, -0.178901, 0.277917, 0.819228, 0.958077, -0.173173, 0.264753, 0.846559,
- 0.962462, -0.166450, 0.250020, 0.872962, 0.966569, -0.159452, 0.234873, 0.898729,
- 0.969108, -0.150740, 0.218752, 0.923126, 0.973072, -0.141523, 0.202673, 0.947278,
- 0.975452, -0.132075, 0.186326, 0.969938, 0.977784, -0.121257, 0.169396, 0.991325,
- 0.978990, -0.110182, 0.153044, 1.011230, 0.979777, -0.098963, 0.136485, 1.029900,
- 0.980865, -0.086589, 0.119343, 1.047270, 0.982432, -0.074611, 0.102452, 1.063410,
- 0.984935, -0.062182, 0.085242, 1.078340, 0.987776, -0.049569, 0.067855, 1.092000,
- 0.991030, -0.037239, 0.050692, 1.104300, 0.994740, -0.024435, 0.033332, 1.115760,
- 0.997768, -0.012145, 0.016435, 1.126170, 1.000030, 0.000318, -0.000170, 1.135980,
- 0.825551, -0.000008, 0.378425, 0.000017, 0.826640, -0.000191, 0.378923, 0.000417,
- 0.826323, -0.000763, 0.378779, 0.001666, 0.826359, -0.001718, 0.378795, 0.003748,
- 0.826360, -0.003054, 0.378795, 0.006663, 0.826368, -0.004772, 0.378798, 0.010410,
- 0.826364, -0.006871, 0.378795, 0.014991, 0.826368, -0.009352, 0.378795, 0.020405,
- 0.826376, -0.012215, 0.378797, 0.026653, 0.826399, -0.015458, 0.378803, 0.033736,
- 0.826460, -0.019082, 0.378824, 0.041654, 0.826525, -0.023087, 0.378846, 0.050409,
- 0.826614, -0.027472, 0.378876, 0.060003, 0.826740, -0.032236, 0.378917, 0.070439,
- 0.826888, -0.037377, 0.378964, 0.081720, 0.827078, -0.042894, 0.379024, 0.093849,
- 0.827318, -0.048778, 0.379099, 0.106828, 0.827640, -0.054994, 0.379199, 0.120659,
- 0.827926, -0.061106, 0.379227, 0.135260, 0.828325, -0.067505, 0.379275, 0.150713,
- 0.828801, -0.074345, 0.379332, 0.167034, 0.829400, -0.081552, 0.379415, 0.184209,
- 0.830094, -0.089078, 0.379495, 0.202203, 0.830900, -0.096736, 0.379555, 0.220945,
- 0.831943, -0.104135, 0.379577, 0.240306, 0.833037, -0.112106, 0.379604, 0.260317,
- 0.834278, -0.120554, 0.379668, 0.280800, 0.836192, -0.129128, 0.379900, 0.301654,
- 0.838671, -0.137541, 0.380109, 0.323502, 0.840939, -0.145230, 0.379809, 0.347176,
- 0.844575, -0.152480, 0.379593, 0.371706, 0.848379, -0.159607, 0.379090, 0.396880,
- 0.853616, -0.166267, 0.378617, 0.422702, 0.858921, -0.172698, 0.377746, 0.448919,
- 0.865324, -0.178823, 0.376749, 0.475661, 0.872207, -0.184542, 0.375363, 0.502599,
- 0.880018, -0.189836, 0.373657, 0.529914, 0.886940, -0.194294, 0.370673, 0.557683,
- 0.894779, -0.197022, 0.366620, 0.586848, 0.902242, -0.199108, 0.361380, 0.615831,
- 0.909914, -0.200398, 0.355434, 0.644478, 0.917088, -0.200940, 0.348173, 0.672905,
- 0.923888, -0.200671, 0.339482, 0.701327, 0.930495, -0.198773, 0.329560, 0.730101,
- 0.937247, -0.195394, 0.318363, 0.758383, 0.943108, -0.191956, 0.306323, 0.786539,
- 0.948296, -0.187227, 0.292576, 0.813637, 0.953472, -0.181165, 0.278234, 0.840793,
- 0.958485, -0.174119, 0.263054, 0.867712, 0.962714, -0.166564, 0.246756, 0.893635,
- 0.966185, -0.158181, 0.229945, 0.919028, 0.970146, -0.148275, 0.212633, 0.943413,
- 0.973491, -0.138157, 0.195229, 0.966627, 0.975741, -0.127574, 0.178048, 0.988817,
- 0.977238, -0.115540, 0.160312, 1.009240, 0.978411, -0.103640, 0.142857, 1.028450,
- 0.979811, -0.091312, 0.125317, 1.046480, 0.981160, -0.078256, 0.107627, 1.062840,
- 0.983543, -0.065596, 0.089586, 1.077980, 0.986789, -0.052041, 0.071376, 1.092000,
- 0.990292, -0.038973, 0.053228, 1.104840, 0.994187, -0.025808, 0.035194, 1.116420,
- 0.997499, -0.012607, 0.017320, 1.127030, 0.999999, 0.000276, -0.000149, 1.136740,
- 0.810750, -0.000008, 0.394456, 0.000016, 0.808692, -0.000198, 0.393453, 0.000408,
- 0.808460, -0.000793, 0.393340, 0.001630, 0.808595, -0.001784, 0.393407, 0.003667,
- 0.808597, -0.003172, 0.393408, 0.006519, 0.808598, -0.004956, 0.393408, 0.010187,
- 0.808591, -0.007136, 0.393403, 0.014669, 0.808592, -0.009713, 0.393402, 0.019967,
- 0.808610, -0.012686, 0.393407, 0.026080, 0.808633, -0.016054, 0.393413, 0.033011,
- 0.808680, -0.019817, 0.393429, 0.040759, 0.808748, -0.023976, 0.393453, 0.049326,
- 0.808854, -0.028529, 0.393490, 0.058716, 0.808992, -0.033475, 0.393540, 0.068930,
- 0.809141, -0.038812, 0.393588, 0.079971, 0.809352, -0.044538, 0.393660, 0.091843,
- 0.809608, -0.050643, 0.393742, 0.104549, 0.809915, -0.057071, 0.393834, 0.118085,
- 0.810253, -0.063353, 0.393885, 0.132377, 0.810687, -0.070097, 0.393953, 0.147537,
- 0.811233, -0.077227, 0.394047, 0.163543, 0.811865, -0.084763, 0.394148, 0.180394,
- 0.812648, -0.092566, 0.394265, 0.198051, 0.813583, -0.100416, 0.394363, 0.216443,
- 0.814683, -0.108119, 0.394402, 0.235502, 0.815948, -0.116440, 0.394489, 0.255242,
- 0.817278, -0.125036, 0.394542, 0.275441, 0.819605, -0.133655, 0.394860, 0.296094,
- 0.822256, -0.142682, 0.395248, 0.317309, 0.825349, -0.150756, 0.395241, 0.340516,
- 0.829605, -0.158392, 0.395285, 0.364819, 0.833910, -0.165801, 0.394922, 0.389736,
- 0.839808, -0.172677, 0.394691, 0.415409, 0.845708, -0.179448, 0.394006, 0.441546,
- 0.853025, -0.185746, 0.393279, 0.468320, 0.859666, -0.191684, 0.391655, 0.495302,
- 0.867890, -0.197146, 0.390068, 0.522620, 0.875845, -0.201904, 0.387270, 0.550336,
- 0.882634, -0.205023, 0.382688, 0.578825, 0.891076, -0.207098, 0.377543, 0.608103,
- 0.900589, -0.208474, 0.371752, 0.637230, 0.907910, -0.209068, 0.364016, 0.665769,
- 0.915971, -0.208655, 0.355593, 0.694428, 0.923455, -0.207290, 0.345439, 0.723224,
- 0.931514, -0.203821, 0.334099, 0.751925, 0.937885, -0.199860, 0.321069, 0.780249,
- 0.943136, -0.194993, 0.306571, 0.807700, 0.948818, -0.189132, 0.291556, 0.834970,
- 0.954433, -0.181617, 0.275745, 0.861880, 0.959078, -0.173595, 0.258695, 0.888562,
- 0.962705, -0.164855, 0.240825, 0.914008, 0.966753, -0.155129, 0.222680, 0.939145,
- 0.970704, -0.144241, 0.204542, 0.963393, 0.973367, -0.133188, 0.185927, 0.985983,
- 0.975984, -0.121146, 0.167743, 1.007040, 0.976994, -0.108366, 0.149218, 1.027150,
- 0.978485, -0.095675, 0.131310, 1.045500, 0.980074, -0.082073, 0.112513, 1.062210,
- 0.982250, -0.068406, 0.093832, 1.077820, 0.985530, -0.054950, 0.074951, 1.091990,
- 0.989529, -0.040786, 0.055848, 1.105080, 0.993536, -0.027198, 0.036858, 1.116840,
- 0.997247, -0.013272, 0.018184, 1.127890, 1.000000, 0.000432, -0.000199, 1.137920,
- 0.785886, -0.000008, 0.405036, 0.000016, 0.790388, -0.000205, 0.407355, 0.000398,
- 0.790145, -0.000821, 0.407231, 0.001593, 0.790135, -0.001847, 0.407226, 0.003583,
- 0.790119, -0.003283, 0.407218, 0.006370, 0.790126, -0.005130, 0.407220, 0.009954,
- 0.790130, -0.007387, 0.407221, 0.014334, 0.790135, -0.010054, 0.407221, 0.019511,
- 0.790134, -0.013131, 0.407217, 0.025485, 0.790160, -0.016617, 0.407224, 0.032257,
- 0.790197, -0.020512, 0.407236, 0.039828, 0.790273, -0.024816, 0.407263, 0.048201,
- 0.790381, -0.029527, 0.407304, 0.057378, 0.790521, -0.034645, 0.407355, 0.067360,
- 0.790704, -0.040167, 0.407420, 0.078152, 0.790925, -0.046090, 0.407499, 0.089758,
- 0.791195, -0.052402, 0.407589, 0.102180, 0.791522, -0.059012, 0.407691, 0.115410,
- 0.791878, -0.065488, 0.407748, 0.129390, 0.792361, -0.072521, 0.407849, 0.144237,
- 0.792942, -0.079984, 0.407963, 0.159924, 0.793620, -0.087790, 0.408087, 0.176425,
- 0.794529, -0.095845, 0.408259, 0.193733, 0.795521, -0.103827, 0.408362, 0.211756,
- 0.796778, -0.111937, 0.408482, 0.230524, 0.798027, -0.120521, 0.408547, 0.249967,
- 0.799813, -0.129242, 0.408721, 0.269926, 0.802387, -0.138048, 0.409148, 0.290338,
- 0.805279, -0.147301, 0.409641, 0.311193, 0.809251, -0.155895, 0.410154, 0.333611,
- 0.813733, -0.163942, 0.410297, 0.357615, 0.819081, -0.171666, 0.410373, 0.382339,
- 0.825427, -0.178905, 0.410348, 0.407828, 0.831720, -0.185812, 0.409486, 0.434034,
- 0.838770, -0.192318, 0.408776, 0.460493, 0.845817, -0.198249, 0.407176, 0.487346,
- 0.854664, -0.204034, 0.405719, 0.514832, 0.863495, -0.208908, 0.403282, 0.542401,
- 0.871883, -0.212765, 0.399293, 0.570683, 0.880650, -0.214911, 0.393803, 0.599947,
- 0.890040, -0.216214, 0.387536, 0.629320, 0.898476, -0.216745, 0.379846, 0.658319,
- 0.906738, -0.216387, 0.370625, 0.687138, 0.914844, -0.215053, 0.360139, 0.716010,
- 0.923877, -0.212007, 0.348849, 0.745124, 0.931925, -0.207481, 0.335639, 0.773366,
- 0.938054, -0.202418, 0.320798, 0.801636, 0.943895, -0.196507, 0.304772, 0.829055,
- 0.949468, -0.189009, 0.288033, 0.856097, 0.955152, -0.180539, 0.270532, 0.883010,
- 0.959403, -0.171437, 0.251639, 0.909296, 0.963309, -0.161661, 0.232563, 0.934868,
- 0.967399, -0.150425, 0.213231, 0.959662, 0.972009, -0.138659, 0.194247, 0.983020,
- 0.974330, -0.126595, 0.174718, 1.005170, 0.975823, -0.113205, 0.155518, 1.025660,
- 0.976371, -0.099610, 0.136709, 1.044180, 0.978705, -0.086075, 0.117571, 1.061460,
- 0.981477, -0.071444, 0.098005, 1.077770, 0.984263, -0.057230, 0.078218, 1.092140,
- 0.988423, -0.042888, 0.058405, 1.105530, 0.993000, -0.028244, 0.038522, 1.117580,
- 0.997040, -0.014018, 0.019015, 1.128640, 0.999913, 0.000369, -0.000145, 1.139010,
- 0.777662, -0.000008, 0.423844, 0.000015, 0.770458, -0.000212, 0.419915, 0.000388,
- 0.770716, -0.000847, 0.420055, 0.001554, 0.770982, -0.001906, 0.420202, 0.003497,
- 0.770981, -0.003388, 0.420201, 0.006216, 0.770980, -0.005293, 0.420200, 0.009713,
- 0.770983, -0.007622, 0.420200, 0.013987, 0.770985, -0.010374, 0.420198, 0.019038,
- 0.770996, -0.013549, 0.420200, 0.024868, 0.771029, -0.017146, 0.420212, 0.031476,
- 0.771052, -0.021165, 0.420215, 0.038865, 0.771131, -0.025605, 0.420245, 0.047036,
- 0.771235, -0.030465, 0.420284, 0.055991, 0.771383, -0.035744, 0.420341, 0.065735,
- 0.771591, -0.041439, 0.420423, 0.076269, 0.771819, -0.047546, 0.420506, 0.087598,
- 0.772123, -0.054051, 0.420617, 0.099727, 0.772464, -0.060797, 0.420720, 0.112637,
- 0.772855, -0.067539, 0.420799, 0.126313, 0.773317, -0.074832, 0.420893, 0.140824,
- 0.773981, -0.082568, 0.421058, 0.156170, 0.774746, -0.090631, 0.421226, 0.172322,
- 0.775660, -0.098898, 0.421397, 0.189253, 0.776837, -0.106994, 0.421569, 0.206912,
- 0.778097, -0.115528, 0.421704, 0.225359, 0.779588, -0.124317, 0.421849, 0.244470,
- 0.781574, -0.133139, 0.422097, 0.264156, 0.784451, -0.142179, 0.422615, 0.284318,
- 0.787682, -0.151650, 0.423269, 0.304902, 0.792433, -0.160771, 0.424396, 0.326500,
- 0.797359, -0.169166, 0.424772, 0.350140, 0.803986, -0.177149, 0.425475, 0.374768,
- 0.809504, -0.184745, 0.424996, 0.399928, 0.815885, -0.191730, 0.424247, 0.425796,
- 0.823513, -0.198525, 0.423515, 0.452287, 0.832549, -0.204709, 0.422787, 0.479321,
- 0.841653, -0.210447, 0.421187, 0.506718, 0.850401, -0.215501, 0.418519, 0.534320,
- 0.859854, -0.219752, 0.414715, 0.562420, 0.869364, -0.222305, 0.409462, 0.591558,
- 0.878837, -0.223744, 0.402926, 0.621074, 0.888636, -0.224065, 0.395043, 0.650538,
- 0.898132, -0.223742, 0.385640, 0.679538, 0.907181, -0.222308, 0.375378, 0.708674,
- 0.915621, -0.219837, 0.363212, 0.737714, 0.923900, -0.215233, 0.349313, 0.767014,
- 0.931644, -0.209592, 0.334162, 0.795133, 0.938887, -0.203644, 0.317943, 0.823228,
- 0.945282, -0.196349, 0.300581, 0.850822, 0.950758, -0.187420, 0.282195, 0.877594,
- 0.956146, -0.177879, 0.262481, 0.904564, 0.960355, -0.167643, 0.242487, 0.930741,
- 0.965256, -0.156671, 0.222668, 0.955868, 0.968029, -0.144123, 0.201907, 0.979869,
- 0.972510, -0.131305, 0.182020, 1.002910, 0.974925, -0.118335, 0.161909, 1.023920,
- 0.975402, -0.103714, 0.142129, 1.043300, 0.976987, -0.089415, 0.122447, 1.060890,
- 0.979677, -0.074886, 0.102248, 1.077130, 0.983184, -0.059609, 0.081485, 1.092180,
- 0.987466, -0.044767, 0.060948, 1.105850, 0.992348, -0.029522, 0.040183, 1.118290,
- 0.996674, -0.014392, 0.019816, 1.129660, 1.000030, 0.000321, -0.000150, 1.140200,
- 0.757901, -0.000009, 0.436176, 0.000015, 0.751195, -0.000218, 0.432317, 0.000379,
- 0.751178, -0.000871, 0.432307, 0.001514, 0.751195, -0.001961, 0.432317, 0.003407,
- 0.751198, -0.003486, 0.432318, 0.006057, 0.751195, -0.005446, 0.432315, 0.009464,
- 0.751207, -0.007842, 0.432320, 0.013628, 0.751213, -0.010673, 0.432320, 0.018550,
- 0.751221, -0.013939, 0.432319, 0.024230, 0.751244, -0.017640, 0.432325, 0.030669,
- 0.751300, -0.021774, 0.432348, 0.037870, 0.751358, -0.026341, 0.432367, 0.045832,
- 0.751458, -0.031340, 0.432404, 0.054559, 0.751608, -0.036768, 0.432464, 0.064054,
- 0.751800, -0.042625, 0.432540, 0.074322, 0.752065, -0.048903, 0.432645, 0.085367,
- 0.752376, -0.055583, 0.432762, 0.097191, 0.752715, -0.062386, 0.432859, 0.109768,
- 0.753137, -0.069415, 0.432958, 0.123126, 0.753676, -0.077004, 0.433099, 0.137308,
- 0.754345, -0.084971, 0.433272, 0.152290, 0.755235, -0.093268, 0.433504, 0.168075,
- 0.756186, -0.101710, 0.433693, 0.184625, 0.757363, -0.110019, 0.433857, 0.201897,
- 0.758840, -0.118870, 0.434102, 0.220014, 0.760467, -0.127881, 0.434306, 0.238778,
- 0.762969, -0.136766, 0.434751, 0.258172, 0.765823, -0.146120, 0.435290, 0.278062,
- 0.769676, -0.155660, 0.436236, 0.298437, 0.774909, -0.165177, 0.437754, 0.319532,
- 0.779940, -0.174020, 0.438343, 0.342505, 0.785757, -0.182201, 0.438609, 0.366693,
- 0.792487, -0.190104, 0.438762, 0.391668, 0.800380, -0.197438, 0.438795, 0.417494,
- 0.808494, -0.204365, 0.438226, 0.443933, 0.817695, -0.210714, 0.437283, 0.470929,
- 0.828111, -0.216651, 0.436087, 0.498569, 0.837901, -0.221804, 0.433717, 0.526165,
- 0.847813, -0.226318, 0.430133, 0.554155, 0.858314, -0.229297, 0.425213, 0.582822,
- 0.868891, -0.230999, 0.418576, 0.612847, 0.878941, -0.231155, 0.410405, 0.642445,
- 0.888809, -0.230935, 0.400544, 0.672024, 0.898089, -0.229343, 0.389613, 0.701366,
- 0.908081, -0.226886, 0.377197, 0.730763, 0.916819, -0.222676, 0.363397, 0.759642,
- 0.924968, -0.216835, 0.347437, 0.788775, 0.932906, -0.210245, 0.329950, 0.817135,
- 0.940025, -0.202992, 0.312262, 0.844912, 0.946101, -0.194360, 0.293313, 0.872164,
- 0.952835, -0.184125, 0.273638, 0.899443, 0.957347, -0.173657, 0.252385, 0.926389,
- 0.961434, -0.162204, 0.231038, 0.951947, 0.965522, -0.149790, 0.209834, 0.976751,
- 0.969412, -0.136307, 0.188821, 1.000220, 0.973902, -0.122527, 0.168013, 1.022290,
- 0.974045, -0.108213, 0.147634, 1.041990, 0.975775, -0.092740, 0.127050, 1.060190,
- 0.978383, -0.077821, 0.106309, 1.077110, 0.982110, -0.062122, 0.084928, 1.092450,
- 0.986517, -0.046385, 0.063352, 1.106510, 0.991696, -0.030935, 0.041970, 1.119030,
- 0.996349, -0.015091, 0.020627, 1.130730, 1.000030, 0.000442, -0.000231, 1.141460,
- 0.727498, -0.000009, 0.441528, 0.000015, 0.730897, -0.000224, 0.443589, 0.000368,
- 0.730796, -0.000894, 0.443528, 0.001473, 0.730805, -0.002011, 0.443533, 0.003314,
- 0.730814, -0.003576, 0.443538, 0.005892, 0.730815, -0.005587, 0.443538, 0.009207,
- 0.730822, -0.008045, 0.443540, 0.013258, 0.730836, -0.010950, 0.443545, 0.018047,
- 0.730848, -0.014301, 0.443546, 0.023573, 0.730871, -0.018097, 0.443552, 0.029838,
- 0.730915, -0.022338, 0.443567, 0.036844, 0.730982, -0.027023, 0.443591, 0.044591,
- 0.731076, -0.032149, 0.443627, 0.053083, 0.731245, -0.037717, 0.443699, 0.062324,
- 0.731440, -0.043722, 0.443777, 0.072318, 0.731700, -0.050158, 0.443881, 0.083069,
- 0.732034, -0.056994, 0.444014, 0.094581, 0.732388, -0.063876, 0.444113, 0.106825,
- 0.732853, -0.071203, 0.444247, 0.119859, 0.733473, -0.079008, 0.444442, 0.133690,
- 0.734195, -0.087194, 0.444645, 0.148304, 0.735069, -0.095696, 0.444877, 0.163702,
- 0.736169, -0.104260, 0.445133, 0.179861, 0.737470, -0.112853, 0.445370, 0.196778,
- 0.738991, -0.121990, 0.445651, 0.214496, 0.740865, -0.131153, 0.445958, 0.232913,
- 0.743637, -0.140245, 0.446548, 0.251977, 0.746797, -0.149722, 0.447246, 0.271551,
- 0.751517, -0.159341, 0.448656, 0.291774, 0.756156, -0.169106, 0.449866, 0.312455,
- 0.761519, -0.178436, 0.450919, 0.334552, 0.768295, -0.186904, 0.451776, 0.358491,
- 0.776613, -0.195117, 0.452832, 0.383446, 0.783966, -0.202695, 0.452490, 0.408945,
- 0.793542, -0.209850, 0.452587, 0.435364, 0.803192, -0.216403, 0.451852, 0.462336,
- 0.813892, -0.222510, 0.450708, 0.489870, 0.824968, -0.227676, 0.448600, 0.517697,
- 0.835859, -0.232443, 0.445156, 0.545975, 0.846825, -0.235775, 0.440351, 0.574483,
- 0.858085, -0.237897, 0.433641, 0.604246, 0.868825, -0.238074, 0.425354, 0.634101,
- 0.879638, -0.237661, 0.415383, 0.664201, 0.889966, -0.236186, 0.404136, 0.693918,
- 0.899479, -0.233599, 0.390917, 0.723481, 0.908769, -0.229737, 0.376352, 0.752580,
- 0.917966, -0.223836, 0.360372, 0.781764, 0.926304, -0.217067, 0.342551, 0.811139,
- 0.934626, -0.209309, 0.324238, 0.839585, 0.941841, -0.200710, 0.304484, 0.867044,
- 0.947890, -0.190602, 0.283607, 0.894579, 0.954196, -0.179253, 0.262205, 0.921743,
- 0.958383, -0.167646, 0.239847, 0.948026, 0.963119, -0.155073, 0.218078, 0.973296,
- 0.966941, -0.141426, 0.195899, 0.998135, 0.970836, -0.126849, 0.174121, 1.020210,
- 0.973301, -0.112296, 0.153052, 1.040850, 0.974480, -0.096496, 0.131733, 1.059460,
- 0.977045, -0.080489, 0.109970, 1.076930, 0.980751, -0.064844, 0.088166, 1.092540,
- 0.985475, -0.048194, 0.065799, 1.106970, 0.991089, -0.031919, 0.043521, 1.120040,
- 0.996122, -0.015809, 0.021478, 1.131730, 1.000010, 0.000372, -0.000200, 1.142910,
- 0.708622, -0.000009, 0.453040, 0.000014, 0.711162, -0.000229, 0.454662, 0.000358,
- 0.709812, -0.000914, 0.453797, 0.001430, 0.709865, -0.002058, 0.453834, 0.003219,
- 0.709864, -0.003659, 0.453833, 0.005723, 0.709855, -0.005717, 0.453826, 0.008943,
- 0.709862, -0.008232, 0.453828, 0.012878, 0.709875, -0.011204, 0.453832, 0.017529,
- 0.709896, -0.014632, 0.453839, 0.022898, 0.709925, -0.018516, 0.453847, 0.028984,
- 0.709974, -0.022855, 0.453866, 0.035789, 0.710045, -0.027647, 0.453892, 0.043316,
- 0.710133, -0.032891, 0.453924, 0.051567, 0.710292, -0.038585, 0.453992, 0.060546,
- 0.710485, -0.044725, 0.454070, 0.070257, 0.710769, -0.051305, 0.454192, 0.080708,
- 0.711106, -0.058273, 0.454329, 0.091896, 0.711516, -0.065287, 0.454460, 0.103814,
- 0.712071, -0.072843, 0.454653, 0.116508, 0.712676, -0.080831, 0.454840, 0.129968,
- 0.713476, -0.089222, 0.455096, 0.144206, 0.714377, -0.097905, 0.455346, 0.159212,
- 0.715579, -0.106531, 0.455647, 0.174973, 0.716977, -0.115492, 0.455961, 0.191504,
- 0.718620, -0.124821, 0.456315, 0.208835, 0.720840, -0.134079, 0.456800, 0.226869,
- 0.723786, -0.143427, 0.457521, 0.245582, 0.727464, -0.153061, 0.458475, 0.264957,
- 0.732771, -0.162768, 0.460239, 0.284948, 0.736515, -0.172627, 0.460899, 0.305220,
- 0.743519, -0.182487, 0.463225, 0.326717, 0.750041, -0.191295, 0.464027, 0.350113,
- 0.758589, -0.199746, 0.465227, 0.374782, 0.767703, -0.207584, 0.465877, 0.400226,
- 0.777484, -0.214973, 0.465996, 0.426442, 0.788792, -0.221796, 0.466019, 0.453688,
- 0.800194, -0.228038, 0.465083, 0.481246, 0.811234, -0.233346, 0.462506, 0.509086,
- 0.822859, -0.238073, 0.459257, 0.537338, 0.835082, -0.241764, 0.454863, 0.566108,
- 0.846332, -0.244241, 0.448163, 0.595126, 0.858355, -0.244736, 0.439709, 0.625574,
- 0.870340, -0.244278, 0.429837, 0.656170, 0.881027, -0.242550, 0.418002, 0.686029,
- 0.891007, -0.239912, 0.404325, 0.716039, 0.900874, -0.236133, 0.389222, 0.745518,
- 0.911072, -0.230672, 0.373269, 0.775026, 0.920359, -0.223560, 0.355083, 0.804521,
- 0.928604, -0.215591, 0.335533, 0.834045, 0.937175, -0.206503, 0.315278, 0.861612,
- 0.942825, -0.196684, 0.293653, 0.889131, 0.949805, -0.185116, 0.271503, 0.916853,
- 0.955535, -0.172703, 0.248821, 0.943541, 0.959843, -0.159978, 0.225591, 0.970132,
- 0.964393, -0.146375, 0.202719, 0.994709, 0.968008, -0.131269, 0.179928, 1.018600,
- 0.971013, -0.115690, 0.158007, 1.039280, 0.973334, -0.100300, 0.136240, 1.058870,
- 0.975775, -0.083335, 0.113800, 1.076520, 0.979579, -0.066898, 0.091314, 1.092970,
- 0.984323, -0.050090, 0.068305, 1.107340, 0.990351, -0.033238, 0.045177, 1.120840,
- 0.995823, -0.016149, 0.022170, 1.132960, 1.000100, 0.000234, -0.000109, 1.144410,
- 0.683895, -0.000009, 0.460150, 0.000014, 0.688330, -0.000233, 0.463134, 0.000347,
- 0.688368, -0.000934, 0.463159, 0.001387, 0.688367, -0.002100, 0.463159, 0.003122,
- 0.688369, -0.003734, 0.463159, 0.005550, 0.688377, -0.005834, 0.463163, 0.008672,
- 0.688386, -0.008401, 0.463166, 0.012488, 0.688398, -0.011434, 0.463169, 0.016999,
- 0.688418, -0.014933, 0.463175, 0.022205, 0.688453, -0.018896, 0.463188, 0.028108,
- 0.688515, -0.023324, 0.463214, 0.034709, 0.688570, -0.028214, 0.463231, 0.042009,
- 0.688679, -0.033564, 0.463276, 0.050013, 0.688854, -0.039373, 0.463356, 0.058725,
- 0.689038, -0.045635, 0.463430, 0.068148, 0.689321, -0.052343, 0.463553, 0.078290,
- 0.689662, -0.059412, 0.463693, 0.089150, 0.690188, -0.066574, 0.463900, 0.100735,
- 0.690755, -0.074311, 0.464107, 0.113074, 0.691405, -0.082472, 0.464329, 0.126161,
- 0.692198, -0.091048, 0.464585, 0.140007, 0.693196, -0.099878, 0.464893, 0.154612,
- 0.694540, -0.108651, 0.465285, 0.169984, 0.695921, -0.117855, 0.465596, 0.186106,
- 0.697749, -0.127340, 0.466056, 0.203034, 0.700375, -0.136714, 0.466771, 0.220703,
- 0.703395, -0.146386, 0.467579, 0.239062, 0.707904, -0.156096, 0.469067, 0.258188,
- 0.711673, -0.165904, 0.469851, 0.277759, 0.717489, -0.175812, 0.471815, 0.297935,
- 0.724051, -0.185931, 0.473890, 0.318916, 0.731965, -0.195238, 0.475870, 0.341591,
- 0.741151, -0.204021, 0.477523, 0.366062, 0.751416, -0.212113, 0.478881, 0.391396,
- 0.761848, -0.219790, 0.479226, 0.417599, 0.771886, -0.226700, 0.478495, 0.444401,
- 0.783998, -0.232991, 0.477622, 0.472084, 0.796523, -0.238645, 0.475833, 0.500193,
- 0.808851, -0.243396, 0.472568, 0.528650, 0.821191, -0.247226, 0.467857, 0.557362,
- 0.834261, -0.250102, 0.461871, 0.586768, 0.846762, -0.251056, 0.453543, 0.617085,
- 0.859867, -0.250604, 0.443494, 0.647659, 0.871948, -0.248783, 0.431711, 0.678119,
- 0.882967, -0.245855, 0.417911, 0.708399, 0.892826, -0.242168, 0.401993, 0.738256,
- 0.903320, -0.237062, 0.385371, 0.767999, 0.913633, -0.229970, 0.366837, 0.798191,
- 0.922774, -0.221687, 0.346372, 0.827756, 0.931371, -0.212345, 0.325682, 0.856425,
- 0.938929, -0.202060, 0.303665, 0.884299, 0.944821, -0.190981, 0.280786, 0.912023,
- 0.951792, -0.178065, 0.257300, 0.939669, 0.957712, -0.164634, 0.233448, 0.966550,
- 0.961912, -0.150863, 0.209504, 0.992366, 0.966382, -0.135770, 0.185970, 1.016330,
- 0.969588, -0.119593, 0.162905, 1.038430, 0.971777, -0.103203, 0.140530, 1.058410,
- 0.974330, -0.086589, 0.117909, 1.076320, 0.978686, -0.069083, 0.094410, 1.093260,
- 0.983281, -0.051657, 0.070567, 1.107960, 0.989562, -0.034558, 0.046859, 1.121820,
- 0.995465, -0.016781, 0.022985, 1.134200, 0.999991, 0.000373, -0.000236, 1.145900,
- 0.662251, -0.000009, 0.468575, 0.000013, 0.666634, -0.000238, 0.471675, 0.000336,
- 0.666411, -0.000950, 0.471516, 0.001343, 0.666399, -0.002138, 0.471509, 0.003022,
- 0.666386, -0.003801, 0.471499, 0.005373, 0.666405, -0.005940, 0.471511, 0.008395,
- 0.666406, -0.008553, 0.471508, 0.012090, 0.666428, -0.011640, 0.471519, 0.016457,
- 0.666444, -0.015201, 0.471522, 0.021497, 0.666490, -0.019236, 0.471543, 0.027212,
- 0.666537, -0.023743, 0.471558, 0.033603, 0.666617, -0.028720, 0.471591, 0.040673,
- 0.666718, -0.034165, 0.471631, 0.048424, 0.666889, -0.040076, 0.471710, 0.056862,
- 0.667104, -0.046448, 0.471805, 0.065991, 0.667374, -0.053268, 0.471923, 0.075818,
- 0.667772, -0.060380, 0.472098, 0.086343, 0.668371, -0.067739, 0.472363, 0.097592,
- 0.668971, -0.075603, 0.472596, 0.109567, 0.669696, -0.083929, 0.472869, 0.122272,
- 0.670481, -0.092668, 0.473126, 0.135718, 0.671500, -0.101600, 0.473442, 0.149914,
- 0.672911, -0.110566, 0.473890, 0.164882, 0.674512, -0.119984, 0.474354, 0.180602,
- 0.676510, -0.129574, 0.474922, 0.197110, 0.679292, -0.139106, 0.475764, 0.214371,
- 0.682798, -0.148993, 0.476886, 0.232405, 0.686955, -0.158737, 0.478179, 0.251153,
- 0.691406, -0.168754, 0.479432, 0.270436, 0.697438, -0.178703, 0.481481, 0.290374,
- 0.704761, -0.188955, 0.484143, 0.311044, 0.713599, -0.198814, 0.487007, 0.333003,
- 0.723194, -0.207869, 0.488962, 0.357144, 0.732601, -0.216189, 0.489815, 0.382169,
- 0.744193, -0.223980, 0.490888, 0.408227, 0.754907, -0.231156, 0.490355, 0.434928,
- 0.767403, -0.237470, 0.489548, 0.462599, 0.781070, -0.243503, 0.488274, 0.490908,
- 0.793893, -0.248114, 0.484843, 0.519421, 0.807296, -0.252220, 0.480300, 0.548561,
- 0.820529, -0.255265, 0.474097, 0.577772, 0.833716, -0.256741, 0.466041, 0.607782,
- 0.848403, -0.256370, 0.456547, 0.638807, 0.860755, -0.254804, 0.443946, 0.670058,
- 0.874012, -0.251834, 0.430852, 0.700749, 0.885619, -0.247867, 0.414903, 0.731446,
- 0.896069, -0.242634, 0.397276, 0.761191, 0.906266, -0.236093, 0.378535, 0.791053,
- 0.916759, -0.227543, 0.358038, 0.821298, 0.925230, -0.217830, 0.335705, 0.850747,
- 0.934360, -0.207534, 0.313797, 0.879258, 0.941631, -0.195983, 0.289671, 0.907734,
- 0.947564, -0.183567, 0.265319, 0.935206, 0.953681, -0.169345, 0.240815, 0.962739,
- 0.960008, -0.154909, 0.216119, 0.989227, 0.964145, -0.140161, 0.192096, 1.014650,
- 0.968171, -0.123411, 0.167855, 1.037370, 0.969859, -0.106525, 0.144817, 1.057670,
- 0.972666, -0.089102, 0.121490, 1.076100, 0.977055, -0.071809, 0.097531, 1.093360,
- 0.982527, -0.053421, 0.073022, 1.108780, 0.989001, -0.035558, 0.048337, 1.122850,
- 0.995120, -0.017638, 0.023938, 1.135480, 1.000070, 0.000369, -0.000212, 1.147440,
- 0.651047, -0.000010, 0.484101, 0.000013, 0.644145, -0.000241, 0.478968, 0.000325,
- 0.643960, -0.000965, 0.478831, 0.001298, 0.643960, -0.002172, 0.478830, 0.002920,
- 0.643968, -0.003860, 0.478835, 0.005192, 0.643974, -0.006032, 0.478838, 0.008113,
- 0.643977, -0.008685, 0.478836, 0.011683, 0.643982, -0.011821, 0.478834, 0.015903,
- 0.644024, -0.015437, 0.478856, 0.020774, 0.644059, -0.019534, 0.478868, 0.026298,
- 0.644122, -0.024110, 0.478896, 0.032475, 0.644207, -0.029164, 0.478933, 0.039309,
- 0.644320, -0.034692, 0.478981, 0.046803, 0.644481, -0.040692, 0.479053, 0.054961,
- 0.644722, -0.047159, 0.479169, 0.063791, 0.645013, -0.054075, 0.479302, 0.073297,
- 0.645503, -0.061200, 0.479541, 0.083490, 0.646117, -0.068730, 0.479829, 0.094387,
- 0.646707, -0.076785, 0.480061, 0.105991, 0.647431, -0.085247, 0.480343, 0.118310,
- 0.648310, -0.094072, 0.480660, 0.131348, 0.649486, -0.103056, 0.481083, 0.145140,
- 0.650864, -0.112261, 0.481528, 0.159676, 0.652604, -0.121852, 0.482102, 0.174979,
- 0.654825, -0.131505, 0.482813, 0.191079, 0.657876, -0.141189, 0.483876, 0.207927,
- 0.661339, -0.151239, 0.484990, 0.225586, 0.665463, -0.161091, 0.486279, 0.243947,
- 0.670542, -0.171235, 0.487968, 0.262957, 0.677361, -0.181347, 0.490530, 0.282781,
- 0.685672, -0.191679, 0.493862, 0.303311, 0.694551, -0.201781, 0.496990, 0.324607,
- 0.703753, -0.211164, 0.498884, 0.347916, 0.713703, -0.219675, 0.500086, 0.372628,
- 0.725911, -0.227836, 0.501554, 0.398694, 0.738620, -0.235330, 0.502193, 0.425529,
- 0.752118, -0.241786, 0.501811, 0.453209, 0.765790, -0.247865, 0.500185, 0.481381,
- 0.779568, -0.252696, 0.497159, 0.510110, 0.793991, -0.256802, 0.492765, 0.539322,
- 0.808182, -0.259942, 0.486827, 0.569078, 0.821698, -0.261703, 0.478386, 0.598818,
- 0.836009, -0.262006, 0.468772, 0.629762, 0.849824, -0.260333, 0.456352, 0.661366,
- 0.863888, -0.257398, 0.442533, 0.692950, 0.876585, -0.253264, 0.426573, 0.723608,
- 0.888665, -0.248026, 0.408964, 0.754378, 0.899537, -0.241487, 0.389677, 0.784761,
- 0.909400, -0.233463, 0.368516, 0.814688, 0.920166, -0.223397, 0.346624, 0.845009,
- 0.928899, -0.212550, 0.322717, 0.874431, 0.937156, -0.200869, 0.298698, 0.902922,
- 0.943861, -0.188387, 0.273491, 0.931356, 0.949557, -0.174341, 0.247866, 0.958854,
- 0.955862, -0.158994, 0.222496, 0.986098, 0.961721, -0.143664, 0.197522, 1.012290,
- 0.965976, -0.127412, 0.173020, 1.035710, 0.968652, -0.109798, 0.148954, 1.056990,
- 0.971084, -0.091679, 0.125044, 1.075870, 0.975584, -0.073963, 0.100577, 1.093720,
- 0.981220, -0.055322, 0.075367, 1.109480, 0.988253, -0.036682, 0.049890, 1.123940,
- 0.994820, -0.018039, 0.024611, 1.136940, 1.000010, 0.000230, -0.000188, 1.149190,
- 0.613867, -0.000010, 0.479449, 0.000012, 0.621485, -0.000245, 0.485399, 0.000313,
- 0.621429, -0.000978, 0.485353, 0.001252, 0.621120, -0.002200, 0.485114, 0.002817,
- 0.621119, -0.003911, 0.485112, 0.005008, 0.621122, -0.006111, 0.485112, 0.007825,
- 0.621133, -0.008799, 0.485117, 0.011269, 0.621152, -0.011976, 0.485125, 0.015339,
- 0.621183, -0.015640, 0.485139, 0.020038, 0.621227, -0.019790, 0.485158, 0.025366,
- 0.621298, -0.024425, 0.485192, 0.031326, 0.621388, -0.029544, 0.485233, 0.037920,
- 0.621507, -0.035143, 0.485286, 0.045152, 0.621693, -0.041220, 0.485378, 0.053028,
- 0.621933, -0.047767, 0.485495, 0.061552, 0.622232, -0.054757, 0.485635, 0.070732,
- 0.622809, -0.061942, 0.485943, 0.080588, 0.623407, -0.069625, 0.486232, 0.091127,
- 0.624060, -0.077796, 0.486516, 0.102354, 0.624835, -0.086373, 0.486838, 0.114279,
- 0.625758, -0.095251, 0.487188, 0.126902, 0.627043, -0.104299, 0.487695, 0.140285,
- 0.628438, -0.113724, 0.488163, 0.154397, 0.630325, -0.123417, 0.488858, 0.169267,
- 0.632801, -0.133137, 0.489754, 0.184941, 0.635784, -0.143052, 0.490815, 0.201360,
- 0.639406, -0.153132, 0.492048, 0.218643, 0.643872, -0.163143, 0.493630, 0.236615,
- 0.649900, -0.173330, 0.496009, 0.255449, 0.657201, -0.183622, 0.498994, 0.275006,
- 0.666221, -0.194019, 0.502888, 0.295354, 0.674419, -0.204192, 0.505459, 0.316244,
- 0.683729, -0.214060, 0.507771, 0.338490, 0.695584, -0.222854, 0.510245, 0.363166,
- 0.708583, -0.231315, 0.512293, 0.389071, 0.721233, -0.238911, 0.512747, 0.415737,
- 0.735134, -0.245657, 0.512482, 0.443331, 0.750179, -0.251879, 0.511526, 0.471891,
- 0.765073, -0.256911, 0.508935, 0.500892, 0.779794, -0.261144, 0.504341, 0.530294,
- 0.794801, -0.264316, 0.498515, 0.560144, 0.810339, -0.266276, 0.491015, 0.590213,
- 0.824818, -0.266981, 0.481126, 0.620865, 0.839375, -0.265778, 0.468685, 0.652687,
- 0.853043, -0.262748, 0.453925, 0.684759, 0.867335, -0.258474, 0.437912, 0.716209,
- 0.880370, -0.253187, 0.419648, 0.747508, 0.891711, -0.246476, 0.399820, 0.777970,
- 0.902896, -0.238735, 0.378790, 0.808586, 0.913601, -0.228850, 0.355891, 0.838843,
- 0.923019, -0.217656, 0.331773, 0.869014, 0.933432, -0.205539, 0.307356, 0.898512,
- 0.939691, -0.192595, 0.281321, 0.926900, 0.946938, -0.178945, 0.255441, 0.955297,
- 0.952372, -0.163587, 0.229013, 0.983231, 0.959090, -0.147214, 0.203179, 1.009710,
- 0.963675, -0.130640, 0.177920, 1.034380, 0.968247, -0.113121, 0.152898, 1.056250,
- 0.970010, -0.094582, 0.128712, 1.075980, 0.974458, -0.075565, 0.103349, 1.094000,
- 0.980168, -0.057200, 0.077673, 1.110400, 0.987295, -0.037799, 0.051444, 1.124910,
- 0.994432, -0.018642, 0.025429, 1.138510, 0.999975, 0.000543, -0.000282, 1.151080,
- 0.592656, -0.000010, 0.486018, 0.000012, 0.598467, -0.000247, 0.490781, 0.000302,
- 0.597934, -0.000988, 0.490343, 0.001205, 0.597903, -0.002224, 0.490319, 0.002712,
- 0.597913, -0.003953, 0.490327, 0.004821, 0.597919, -0.006177, 0.490329, 0.007533,
- 0.597936, -0.008894, 0.490339, 0.010848, 0.597956, -0.012104, 0.490347, 0.014767,
- 0.597992, -0.015807, 0.490365, 0.019290, 0.598032, -0.020002, 0.490382, 0.024420,
- 0.598109, -0.024687, 0.490420, 0.030159, 0.598215, -0.029859, 0.490474, 0.036510,
- 0.598330, -0.035517, 0.490524, 0.043476, 0.598525, -0.041656, 0.490624, 0.051063,
- 0.598778, -0.048269, 0.490753, 0.059278, 0.599135, -0.055311, 0.490940, 0.068130,
- 0.599802, -0.062542, 0.491328, 0.077647, 0.600361, -0.070364, 0.491598, 0.087818,
- 0.601010, -0.078626, 0.491882, 0.098657, 0.601811, -0.087296, 0.492232, 0.110180,
- 0.602861, -0.096228, 0.492684, 0.122400, 0.604167, -0.105380, 0.493213, 0.135354,
- 0.605693, -0.114896, 0.493799, 0.149034, 0.607682, -0.124654, 0.494576, 0.163469,
- 0.610672, -0.134560, 0.495900, 0.178747, 0.613313, -0.144581, 0.496713, 0.194723,
- 0.617603, -0.154703, 0.498499, 0.211617, 0.622174, -0.164890, 0.500188, 0.229183,
- 0.628855, -0.175164, 0.503072, 0.247786, 0.636963, -0.185565, 0.506798, 0.267116,
- 0.644866, -0.195911, 0.509719, 0.287020, 0.653741, -0.206104, 0.512776, 0.307763,
- 0.664942, -0.216447, 0.516812, 0.329631, 0.676330, -0.225520, 0.519181, 0.353515,
- 0.690012, -0.234316, 0.521681, 0.379226, 0.704243, -0.242032, 0.523129, 0.405901,
- 0.719396, -0.249172, 0.523768, 0.433585, 0.734471, -0.255543, 0.522541, 0.462085,
- 0.750539, -0.260697, 0.520217, 0.491233, 0.766365, -0.265010, 0.516293, 0.521094,
- 0.781677, -0.268409, 0.509708, 0.551014, 0.797132, -0.270399, 0.501944, 0.581463,
- 0.812655, -0.271247, 0.492025, 0.612402, 0.828592, -0.270708, 0.480424, 0.643798,
- 0.844044, -0.268085, 0.465955, 0.676820, 0.857305, -0.263459, 0.448425, 0.708496,
- 0.871140, -0.258151, 0.430243, 0.740460, 0.884936, -0.251171, 0.410578, 0.771583,
- 0.895772, -0.243305, 0.388620, 0.802234, 0.906961, -0.234037, 0.365214, 0.833179,
- 0.917775, -0.222714, 0.341160, 0.863530, 0.927883, -0.210175, 0.315720, 0.893557,
- 0.936617, -0.196925, 0.289159, 0.922976, 0.943384, -0.182788, 0.261996, 0.951606,
- 0.949713, -0.167965, 0.235324, 0.979958, 0.955818, -0.151109, 0.208408, 1.007650,
- 0.961344, -0.133834, 0.182591, 1.033290, 0.965469, -0.115987, 0.156958, 1.055700,
- 0.968693, -0.097460, 0.132239, 1.075830, 0.973165, -0.077851, 0.106195, 1.094510,
- 0.979387, -0.058507, 0.079767, 1.111370, 0.986710, -0.039041, 0.053026, 1.126430,
- 0.994093, -0.019408, 0.026316, 1.140160, 1.000020, 0.000540, -0.000194, 1.152990,
- 0.574483, -0.000010, 0.494533, 0.000011, 0.574478, -0.000249, 0.494528, 0.000289,
- 0.574607, -0.000997, 0.494637, 0.001158, 0.574396, -0.002242, 0.494458, 0.002605,
- 0.574377, -0.003986, 0.494440, 0.004631, 0.574386, -0.006228, 0.494445, 0.007236,
- 0.574401, -0.008968, 0.494453, 0.010421, 0.574419, -0.012206, 0.494460, 0.014186,
- 0.574459, -0.015940, 0.494481, 0.018532, 0.574525, -0.020169, 0.494520, 0.023462,
- 0.574587, -0.024892, 0.494547, 0.028976, 0.574697, -0.030107, 0.494604, 0.035080,
- 0.574853, -0.035811, 0.494688, 0.041777, 0.575027, -0.041999, 0.494772, 0.049072,
- 0.575294, -0.048662, 0.494915, 0.056973, 0.575733, -0.055715, 0.495173, 0.065495,
- 0.576356, -0.063049, 0.495537, 0.074661, 0.576944, -0.070929, 0.495836, 0.084461,
- 0.577650, -0.079272, 0.496177, 0.094914, 0.578491, -0.088017, 0.496563, 0.106030,
- 0.579639, -0.096946, 0.497096, 0.117841, 0.580989, -0.106220, 0.497684, 0.130367,
- 0.582587, -0.115861, 0.498337, 0.143609, 0.584951, -0.125605, 0.499414, 0.157625,
- 0.587602, -0.135608, 0.500518, 0.172413, 0.590760, -0.145742, 0.501767, 0.187999,
- 0.594992, -0.155934, 0.503542, 0.204450, 0.600656, -0.166303, 0.506135, 0.221764,
- 0.607816, -0.176681, 0.509542, 0.240020, 0.615220, -0.187071, 0.512630, 0.258992,
- 0.623702, -0.197465, 0.516021, 0.278773, 0.634192, -0.207816, 0.520422, 0.299377,
- 0.644936, -0.218183, 0.524073, 0.320802, 0.657888, -0.227800, 0.528049, 0.343840,
- 0.670666, -0.236747, 0.529860, 0.369160, 0.685626, -0.244840, 0.531892, 0.395867,
- 0.701304, -0.252071, 0.532727, 0.423488, 0.717727, -0.258714, 0.532146, 0.452201,
- 0.733914, -0.264211, 0.529883, 0.481579, 0.750529, -0.268590, 0.525900, 0.511558,
- 0.767470, -0.272046, 0.519990, 0.542042, 0.785189, -0.274225, 0.513083, 0.572799,
- 0.800954, -0.275189, 0.502936, 0.603816, 0.816962, -0.274946, 0.490921, 0.635461,
- 0.833360, -0.272695, 0.476840, 0.667600, 0.848143, -0.268223, 0.459405, 0.700510,
- 0.861818, -0.262768, 0.440319, 0.732902, 0.876828, -0.255872, 0.420123, 0.765084,
- 0.889312, -0.247703, 0.398379, 0.796391, 0.900412, -0.238381, 0.374496, 0.827333,
- 0.912251, -0.227783, 0.349874, 0.858385, 0.921792, -0.214832, 0.323181, 0.888652,
- 0.931273, -0.200949, 0.296624, 0.917763, 0.940295, -0.186537, 0.269211, 0.947878,
- 0.946812, -0.171538, 0.241447, 0.977016, 0.953588, -0.155254, 0.213829, 1.005010,
- 0.958841, -0.137156, 0.186807, 1.031790, 0.963746, -0.118699, 0.160706, 1.055020,
- 0.966468, -0.099836, 0.135504, 1.075680, 0.971178, -0.080519, 0.109131, 1.094790,
- 0.978310, -0.059935, 0.081829, 1.112300, 0.985886, -0.039966, 0.054587, 1.127710,
- 0.994021, -0.019868, 0.026940, 1.141860, 1.000090, 0.000271, -0.000130, 1.155140,
- 0.538716, -0.000010, 0.486732, 0.000011, 0.550656, -0.000251, 0.497518, 0.000277,
- 0.550570, -0.001003, 0.497441, 0.001110, 0.550903, -0.002257, 0.497733, 0.002498,
- 0.550568, -0.004010, 0.497438, 0.004439, 0.550574, -0.006266, 0.497440, 0.006936,
- 0.550591, -0.009023, 0.497449, 0.009989, 0.550623, -0.012280, 0.497469, 0.013598,
- 0.550667, -0.016036, 0.497495, 0.017765, 0.550724, -0.020291, 0.497526, 0.022492,
- 0.550792, -0.025042, 0.497557, 0.027779, 0.550918, -0.030288, 0.497630, 0.033633,
- 0.551058, -0.036024, 0.497701, 0.040057, 0.551276, -0.042247, 0.497824, 0.047059,
- 0.551551, -0.048944, 0.497977, 0.054643, 0.552074, -0.055960, 0.498312, 0.062837,
- 0.552681, -0.063398, 0.498679, 0.071646, 0.553324, -0.071318, 0.499031, 0.081075,
- 0.554011, -0.079727, 0.499365, 0.091129, 0.554880, -0.088524, 0.499779, 0.101837,
- 0.556171, -0.097442, 0.500444, 0.113239, 0.557498, -0.106841, 0.501025, 0.125316,
- 0.559299, -0.116533, 0.501864, 0.138128, 0.561647, -0.126298, 0.502967, 0.151695,
- 0.564347, -0.136388, 0.504129, 0.166040, 0.567863, -0.146576, 0.505713, 0.181207,
- 0.572569, -0.156832, 0.507953, 0.197259, 0.578919, -0.167323, 0.511186, 0.214258,
- 0.585387, -0.177712, 0.514042, 0.232038, 0.593134, -0.188184, 0.517484, 0.250733,
- 0.603295, -0.198717, 0.522345, 0.270454, 0.613854, -0.209177, 0.526751, 0.290807,
- 0.626092, -0.219644, 0.531595, 0.312202, 0.637868, -0.229494, 0.534721, 0.334435,
- 0.652458, -0.238718, 0.538304, 0.359184, 0.666985, -0.247061, 0.539875, 0.385637,
- 0.683301, -0.254652, 0.541042, 0.413280, 0.699980, -0.261376, 0.540735, 0.441903,
- 0.717824, -0.267085, 0.539139, 0.471609, 0.734617, -0.271465, 0.534958, 0.501446,
- 0.753663, -0.275280, 0.530320, 0.532571, 0.770512, -0.277617, 0.522134, 0.563641,
- 0.787356, -0.278525, 0.512060, 0.595067, 0.806252, -0.278512, 0.501190, 0.627226,
- 0.822061, -0.277023, 0.486791, 0.659402, 0.838959, -0.273175, 0.470467, 0.692874,
- 0.853790, -0.267238, 0.450688, 0.725702, 0.868268, -0.260327, 0.429741, 0.758320,
- 0.881994, -0.251946, 0.407223, 0.790189, 0.893885, -0.242432, 0.383214, 0.821625,
- 0.905118, -0.231904, 0.357297, 0.853011, 0.916045, -0.219545, 0.330733, 0.883773,
- 0.927614, -0.205378, 0.303916, 0.914435, 0.936005, -0.190388, 0.275941, 0.944502,
- 0.944533, -0.174900, 0.247493, 0.974439, 0.950758, -0.158588, 0.218996, 1.002860,
- 0.957078, -0.141027, 0.191559, 1.030400, 0.962448, -0.121507, 0.164457, 1.054660,
- 0.964993, -0.102068, 0.138636, 1.076100, 0.970017, -0.082260, 0.111861, 1.095410,
- 0.976610, -0.062033, 0.084344, 1.113170, 0.985073, -0.040983, 0.055850, 1.129110,
- 0.993515, -0.020146, 0.027533, 1.143800, 1.000060, 0.000273, -0.000108, 1.157360,
- 0.525324, -0.000010, 0.498153, 0.000011, 0.526513, -0.000252, 0.499277, 0.000265,
- 0.526517, -0.001006, 0.499282, 0.001061, 0.526588, -0.002265, 0.499337, 0.002388,
- 0.526539, -0.004026, 0.499302, 0.004245, 0.526547, -0.006290, 0.499306, 0.006634,
- 0.526561, -0.009056, 0.499313, 0.009553, 0.526593, -0.012325, 0.499334, 0.013005,
- 0.526642, -0.016096, 0.499365, 0.016991, 0.526700, -0.020366, 0.499396, 0.021512,
- 0.526792, -0.025135, 0.499451, 0.026572, 0.526904, -0.030398, 0.499511, 0.032173,
- 0.527079, -0.036155, 0.499617, 0.038323, 0.527285, -0.042398, 0.499731, 0.045026,
- 0.527602, -0.049112, 0.499924, 0.052294, 0.528166, -0.056113, 0.500306, 0.060153,
- 0.528790, -0.063599, 0.500700, 0.068606, 0.529421, -0.071581, 0.501048, 0.077652,
- 0.530144, -0.079985, 0.501421, 0.087315, 0.531062, -0.088803, 0.501884, 0.097608,
- 0.532374, -0.097764, 0.502590, 0.108588, 0.533828, -0.107197, 0.503290, 0.120234,
- 0.535810, -0.116887, 0.504312, 0.132602, 0.538063, -0.126755, 0.505365, 0.145721,
- 0.540900, -0.136819, 0.506668, 0.159617, 0.544882, -0.147117, 0.508731, 0.174369,
- 0.550238, -0.157446, 0.511601, 0.190028, 0.556038, -0.167988, 0.514431, 0.206587,
- 0.563031, -0.178364, 0.517808, 0.224046, 0.571543, -0.189007, 0.521937, 0.242503,
- 0.582255, -0.199546, 0.527415, 0.261977, 0.592720, -0.210084, 0.531682, 0.282162,
- 0.605648, -0.220448, 0.537123, 0.303426, 0.617850, -0.230593, 0.540664, 0.325323,
- 0.632223, -0.240238, 0.544467, 0.348993, 0.648819, -0.248870, 0.547594, 0.375462,
- 0.665825, -0.256657, 0.549120, 0.403024, 0.683389, -0.263711, 0.549294, 0.431773,
- 0.701495, -0.269666, 0.547649, 0.461494, 0.719197, -0.274169, 0.543786, 0.491623,
- 0.737906, -0.278124, 0.538644, 0.522994, 0.756652, -0.280632, 0.531057, 0.554775,
- 0.775279, -0.281741, 0.521972, 0.586441, 0.792688, -0.281652, 0.509613, 0.618596,
- 0.811894, -0.280345, 0.496497, 0.651462, 0.827938, -0.277128, 0.479680, 0.684023,
- 0.844837, -0.271646, 0.460688, 0.718024, 0.859239, -0.264397, 0.438872, 0.751207,
- 0.874088, -0.256144, 0.415770, 0.784232, 0.887693, -0.246311, 0.391369, 0.816191,
- 0.899402, -0.235497, 0.365872, 0.847828, 0.910973, -0.223631, 0.338618, 0.879340,
- 0.922040, -0.209874, 0.310803, 0.910325, 0.930987, -0.194265, 0.281802, 0.940695,
- 0.940000, -0.178125, 0.252836, 0.970958, 0.948018, -0.161479, 0.224239, 1.000780,
- 0.955141, -0.144038, 0.195857, 1.028800, 0.960513, -0.124915, 0.168487, 1.053710,
- 0.963964, -0.104284, 0.141495, 1.075960, 0.968713, -0.083873, 0.114437, 1.096280,
- 0.975524, -0.063558, 0.086310, 1.114480, 0.984310, -0.042291, 0.057477, 1.130690,
- 0.992916, -0.020913, 0.028434, 1.145680, 0.999926, 0.000743, -0.000379, 1.159550,
- 0.501042, -0.000010, 0.498726, 0.000010, 0.502992, -0.000252, 0.500665, 0.000253,
- 0.502417, -0.001008, 0.500092, 0.001013, 0.502965, -0.002269, 0.500621, 0.002280,
- 0.502318, -0.004031, 0.499994, 0.004050, 0.502333, -0.006298, 0.500005, 0.006329,
- 0.502362, -0.009069, 0.500027, 0.009114, 0.502369, -0.012342, 0.500023, 0.012408,
- 0.502430, -0.016118, 0.500066, 0.016211, 0.502493, -0.020394, 0.500103, 0.020526,
- 0.502592, -0.025168, 0.500166, 0.025355, 0.502707, -0.030439, 0.500230, 0.030703,
- 0.502881, -0.036201, 0.500335, 0.036575, 0.503124, -0.042451, 0.500488, 0.042980,
- 0.503443, -0.049158, 0.500686, 0.049927, 0.504083, -0.056148, 0.501155, 0.057454,
- 0.504668, -0.063685, 0.501524, 0.065541, 0.505319, -0.071683, 0.501904, 0.074207,
- 0.506090, -0.080092, 0.502321, 0.083470, 0.507122, -0.088843, 0.502896, 0.093360,
- 0.508414, -0.097855, 0.503603, 0.103910, 0.509955, -0.107304, 0.504416, 0.115113,
- 0.512061, -0.116921, 0.505565, 0.127054, 0.514419, -0.126890, 0.506732, 0.139709,
- 0.517529, -0.136934, 0.508338, 0.153173, 0.522085, -0.147327, 0.510987, 0.167528,
- 0.526986, -0.157612, 0.513527, 0.182708, 0.533122, -0.168213, 0.516717, 0.198881,
- 0.540807, -0.178688, 0.520832, 0.215986, 0.550687, -0.189511, 0.526320, 0.234335,
- 0.560567, -0.199998, 0.531009, 0.253375, 0.571698, -0.210652, 0.535839, 0.273499,
- 0.584364, -0.220917, 0.541091, 0.294355, 0.599066, -0.231370, 0.546875, 0.316525,
- 0.614148, -0.241206, 0.551306, 0.339671, 0.631157, -0.250379, 0.555187, 0.365310,
- 0.647919, -0.258397, 0.556595, 0.392767, 0.666112, -0.265528, 0.556949, 0.421397,
- 0.686158, -0.271827, 0.556617, 0.451433, 0.704838, -0.276740, 0.552975, 0.482131,
- 0.723957, -0.280733, 0.547814, 0.513458, 0.742620, -0.283359, 0.539970, 0.545446,
- 0.762009, -0.284541, 0.530422, 0.577750, 0.781314, -0.284507, 0.518546, 0.610434,
- 0.799116, -0.283309, 0.504178, 0.643178, 0.817604, -0.280378, 0.488430, 0.676248,
- 0.834590, -0.275619, 0.469457, 0.709698, 0.850974, -0.268560, 0.447698, 0.744245,
- 0.866747, -0.260094, 0.424791, 0.777695, 0.881412, -0.249929, 0.399913, 0.810392,
- 0.893600, -0.239137, 0.373080, 0.842872, 0.905943, -0.226818, 0.345705, 0.874677,
- 0.916408, -0.213699, 0.317060, 0.906257, 0.927215, -0.198428, 0.288444, 0.936881,
- 0.935625, -0.181643, 0.258329, 0.967950, 0.944076, -0.164386, 0.228488, 0.998216,
- 0.951229, -0.146339, 0.199763, 1.026890, 0.958793, -0.127709, 0.172153, 1.053500,
- 0.963219, -0.107244, 0.144989, 1.076460, 0.967562, -0.085776, 0.116850, 1.096750,
- 0.974866, -0.064538, 0.088057, 1.115760, 0.983353, -0.043173, 0.058735, 1.132270,
- 0.992503, -0.021836, 0.029418, 1.147800, 1.000030, 0.000605, -0.000231, 1.162070,
- 0.482935, -0.000010, 0.504695, 0.000010, 0.477554, -0.000252, 0.499071, 0.000241,
- 0.477904, -0.001007, 0.499436, 0.000963, 0.478368, -0.002266, 0.499899, 0.002169,
- 0.477977, -0.004027, 0.499513, 0.003854, 0.477993, -0.006292, 0.499525, 0.006022,
- 0.478011, -0.009060, 0.499536, 0.008673, 0.478051, -0.012330, 0.499566, 0.011807,
- 0.478089, -0.016102, 0.499587, 0.015427, 0.478171, -0.020374, 0.499645, 0.019534,
- 0.478254, -0.025143, 0.499692, 0.024132, 0.478390, -0.030407, 0.499779, 0.029225,
- 0.478588, -0.036163, 0.499911, 0.034820, 0.478812, -0.042402, 0.500046, 0.040923,
- 0.479208, -0.049072, 0.500326, 0.047552, 0.479841, -0.056072, 0.500805, 0.054738,
- 0.480392, -0.063613, 0.501152, 0.062461, 0.481068, -0.071613, 0.501561, 0.070747,
- 0.481898, -0.080006, 0.502054, 0.079612, 0.483022, -0.088657, 0.502728, 0.089097,
- 0.484332, -0.097755, 0.503479, 0.099210, 0.486126, -0.107173, 0.504546, 0.109990,
- 0.488066, -0.116770, 0.505570, 0.121476, 0.490521, -0.126725, 0.506849, 0.133672,
- 0.494232, -0.136793, 0.509110, 0.146731, 0.498302, -0.147116, 0.511345, 0.160577,
- 0.503565, -0.157446, 0.514344, 0.175335, 0.510902, -0.168121, 0.518824, 0.191207,
- 0.519263, -0.178799, 0.523666, 0.208058, 0.528204, -0.189407, 0.528296, 0.225875,
- 0.538854, -0.200145, 0.533724, 0.244782, 0.551278, -0.210701, 0.539833, 0.264753,
- 0.565222, -0.221303, 0.546131, 0.285745, 0.579403, -0.231688, 0.551496, 0.307592,
- 0.595469, -0.241718, 0.556809, 0.330582, 0.610929, -0.250992, 0.559641, 0.354995,
- 0.629433, -0.259602, 0.562379, 0.382471, 0.648504, -0.267038, 0.563676, 0.411126,
- 0.667560, -0.273388, 0.562092, 0.440924, 0.689143, -0.278788, 0.560807, 0.472118,
- 0.709056, -0.282783, 0.555701, 0.503774, 0.729855, -0.285836, 0.548698, 0.536364,
- 0.748954, -0.287078, 0.538544, 0.568950, 0.768373, -0.287133, 0.526711, 0.601991,
- 0.788270, -0.285839, 0.512511, 0.635403, 0.807465, -0.283238, 0.496323, 0.668797,
- 0.825194, -0.279060, 0.477638, 0.702584, 0.842203, -0.272286, 0.456253, 0.736393,
- 0.857749, -0.263854, 0.432412, 0.770960, 0.874799, -0.253943, 0.407806, 0.804890,
- 0.887497, -0.242370, 0.380330, 0.837710, 0.899660, -0.230278, 0.352446, 0.870376,
- 0.911753, -0.216460, 0.323268, 0.902256, 0.923011, -0.202071, 0.294314, 0.933306,
- 0.932375, -0.185519, 0.264104, 0.965177, 0.940537, -0.167604, 0.234035, 0.996303,
- 0.948904, -0.149068, 0.204120, 1.026100, 0.955263, -0.129539, 0.175431, 1.053040,
- 0.960303, -0.109932, 0.148116, 1.076170, 0.965512, -0.088057, 0.119693, 1.097420,
- 0.973466, -0.066055, 0.090162, 1.117210, 0.982840, -0.043923, 0.059987, 1.134360,
- 0.992216, -0.021959, 0.029898, 1.150060, 0.999946, 0.000119, -0.000021, 1.164710,
- 0.447827, -0.000010, 0.491543, 0.000009, 0.454778, -0.000251, 0.499172, 0.000229,
- 0.453519, -0.001003, 0.497787, 0.000914, 0.453570, -0.002258, 0.497847, 0.002057,
- 0.453578, -0.004014, 0.497855, 0.003657, 0.453570, -0.006271, 0.497841, 0.005715,
- 0.453598, -0.009030, 0.497864, 0.008230, 0.453627, -0.012289, 0.497882, 0.011205,
- 0.453684, -0.016047, 0.497923, 0.014641, 0.453764, -0.020304, 0.497980, 0.018539,
- 0.453866, -0.025058, 0.498049, 0.022905, 0.453996, -0.030303, 0.498130, 0.027742,
- 0.454196, -0.036038, 0.498267, 0.033059, 0.454457, -0.042252, 0.498445, 0.038861,
- 0.454926, -0.048839, 0.498812, 0.045177, 0.455525, -0.055865, 0.499272, 0.052015,
- 0.456074, -0.063377, 0.499625, 0.059375, 0.456752, -0.071361, 0.500049, 0.067275,
- 0.457648, -0.079710, 0.500615, 0.075745, 0.458849, -0.088303, 0.501399, 0.084823,
- 0.460290, -0.097409, 0.502293, 0.094514, 0.462000, -0.106729, 0.503301, 0.104848,
- 0.464121, -0.116354, 0.504533, 0.115884, 0.466889, -0.126214, 0.506172, 0.127652,
- 0.470744, -0.136324, 0.508667, 0.140240, 0.474880, -0.146595, 0.510995, 0.153673,
- 0.480845, -0.157027, 0.514832, 0.168053, 0.488262, -0.167658, 0.519506, 0.183508,
- 0.496547, -0.178343, 0.524347, 0.199948, 0.506254, -0.188916, 0.529830, 0.217503,
- 0.517961, -0.199975, 0.536357, 0.236272, 0.531484, -0.210624, 0.543641, 0.256096,
- 0.545496, -0.221227, 0.550048, 0.277085, 0.559497, -0.231568, 0.555076, 0.298615,
- 0.575752, -0.241698, 0.560541, 0.321547, 0.591999, -0.251172, 0.564156, 0.345602,
- 0.610654, -0.260178, 0.567607, 0.371851, 0.630484, -0.268094, 0.569230, 0.400760,
- 0.651807, -0.274661, 0.569779, 0.430801, 0.672390, -0.280331, 0.566791, 0.461939,
- 0.693024, -0.284501, 0.562007, 0.493854, 0.715473, -0.287852, 0.555791, 0.526992,
- 0.736323, -0.289290, 0.546345, 0.560102, 0.755771, -0.289405, 0.534000, 0.593543,
- 0.775424, -0.288100, 0.519114, 0.627256, 0.795447, -0.285562, 0.502543, 0.661464,
- 0.815319, -0.281416, 0.484773, 0.695206, 0.831769, -0.275523, 0.463445, 0.729044,
- 0.849464, -0.267516, 0.440269, 0.764069, 0.866775, -0.257584, 0.415049, 0.799089,
- 0.881252, -0.245817, 0.388049, 0.831948, 0.894209, -0.233127, 0.358890, 0.865526,
- 0.906922, -0.219579, 0.329915, 0.898180, 0.919686, -0.204491, 0.300441, 0.930013,
- 0.929044, -0.188962, 0.269445, 0.962061, 0.938393, -0.171079, 0.238402, 0.994214,
- 0.946610, -0.151990, 0.208204, 1.025330, 0.953095, -0.131953, 0.178653, 1.052900,
- 0.958644, -0.111233, 0.150684, 1.077100, 0.963925, -0.090310, 0.122359, 1.098550,
- 0.971995, -0.068050, 0.092334, 1.118740, 0.981658, -0.044851, 0.061420, 1.136350,
- 0.991649, -0.022193, 0.030358, 1.152380, 0.999985, 0.000393, -0.000111, 1.167720,
- 0.396806, -0.000010, 0.457671, 0.000008, 0.429186, -0.000249, 0.495017, 0.000216,
- 0.429324, -0.000998, 0.495173, 0.000865, 0.429175, -0.002245, 0.494999, 0.001946,
- 0.429129, -0.003990, 0.494952, 0.003460, 0.429153, -0.006235, 0.494974, 0.005407,
- 0.429168, -0.008977, 0.494983, 0.007787, 0.429207, -0.012217, 0.495012, 0.010602,
- 0.429257, -0.015954, 0.495047, 0.013853, 0.429338, -0.020186, 0.495106, 0.017544,
- 0.429431, -0.024910, 0.495165, 0.021677, 0.429587, -0.030125, 0.495279, 0.026259,
- 0.429796, -0.035825, 0.495432, 0.031297, 0.430065, -0.041997, 0.495621, 0.036798,
- 0.430588, -0.048514, 0.496061, 0.042798, 0.431130, -0.055503, 0.496472, 0.049291,
- 0.431743, -0.062985, 0.496904, 0.056291, 0.432448, -0.070926, 0.497369, 0.063806,
- 0.433414, -0.079194, 0.498032, 0.071885, 0.434638, -0.087735, 0.498854, 0.080552,
- 0.436110, -0.096806, 0.499812, 0.089805, 0.437859, -0.106002, 0.500891, 0.099714,
- 0.440017, -0.115648, 0.502198, 0.110289, 0.443236, -0.125427, 0.504389, 0.121644,
- 0.446970, -0.135492, 0.506809, 0.133769, 0.451689, -0.145746, 0.509858, 0.146787,
- 0.458110, -0.156219, 0.514247, 0.160793, 0.465305, -0.166834, 0.518816, 0.175791,
- 0.474085, -0.177546, 0.524331, 0.191906, 0.484808, -0.188262, 0.531040, 0.209199,
- 0.497320, -0.199346, 0.538511, 0.227825, 0.509693, -0.209951, 0.544554, 0.247269,
- 0.524367, -0.220533, 0.551616, 0.267978, 0.539228, -0.231082, 0.557368, 0.289672,
- 0.556440, -0.241342, 0.563782, 0.312680, 0.574204, -0.250964, 0.568851, 0.336510,
- 0.593388, -0.260306, 0.573120, 0.362219, 0.613358, -0.268667, 0.574916, 0.390322,
- 0.634512, -0.275591, 0.575053, 0.420478, 0.655630, -0.281328, 0.572404, 0.451614,
- 0.678265, -0.285948, 0.568893, 0.484112, 0.700110, -0.289408, 0.561878, 0.517348,
- 0.723005, -0.291328, 0.553590, 0.551355, 0.743744, -0.291418, 0.541099, 0.585109,
- 0.763949, -0.290252, 0.526489, 0.619487, 0.784186, -0.287648, 0.509496, 0.654040,
- 0.804304, -0.283782, 0.491484, 0.688649, 0.823629, -0.278067, 0.470517, 0.723133,
- 0.840940, -0.270588, 0.447050, 0.757163, 0.857852, -0.261188, 0.421252, 0.792816,
- 0.874934, -0.249313, 0.394191, 0.827248, 0.888709, -0.236492, 0.365359, 0.861074,
- 0.902589, -0.222185, 0.336016, 0.894417, 0.914201, -0.207314, 0.305270, 0.926825,
- 0.925978, -0.191146, 0.274532, 0.959500, 0.935120, -0.174135, 0.243393, 0.991583,
- 0.943656, -0.155231, 0.212414, 1.023560, 0.951719, -0.134403, 0.182005, 1.052390,
- 0.957164, -0.113023, 0.153043, 1.077540, 0.962656, -0.091449, 0.124186, 1.099840,
- 0.970695, -0.069418, 0.094165, 1.120000, 0.980749, -0.046620, 0.062967, 1.138490,
- 0.991205, -0.022703, 0.031115, 1.154940, 0.999884, 0.000632, -0.000254, 1.170600,
- 0.379821, -0.000010, 0.460637, 0.000008, 0.405188, -0.000247, 0.491396, 0.000204,
- 0.404796, -0.000989, 0.490914, 0.000816, 0.404830, -0.002226, 0.490949, 0.001836,
- 0.404730, -0.003957, 0.490840, 0.003263, 0.404731, -0.006183, 0.490836, 0.005099,
- 0.404768, -0.008903, 0.490871, 0.007345, 0.404791, -0.012116, 0.490883, 0.010000,
- 0.404857, -0.015821, 0.490938, 0.013068, 0.404943, -0.020018, 0.491004, 0.016550,
- 0.405059, -0.024703, 0.491093, 0.020452, 0.405213, -0.029873, 0.491205, 0.024779,
- 0.405399, -0.035523, 0.491333, 0.029537, 0.405731, -0.041635, 0.491604, 0.034741,
- 0.406303, -0.048081, 0.492116, 0.040426, 0.406814, -0.055046, 0.492506, 0.046573,
- 0.407404, -0.062465, 0.492926, 0.053206, 0.408149, -0.070296, 0.493442, 0.060344,
- 0.409128, -0.078462, 0.494136, 0.068030, 0.410408, -0.087007, 0.495054, 0.076279,
- 0.411813, -0.095964, 0.495962, 0.085105, 0.413735, -0.105075, 0.497257, 0.094588,
- 0.416137, -0.114646, 0.498882, 0.104725, 0.419340, -0.124394, 0.501132, 0.115630,
- 0.423326, -0.134328, 0.503883, 0.127325, 0.428419, -0.144580, 0.507470, 0.139911,
- 0.434840, -0.154979, 0.511964, 0.153481, 0.442641, -0.165628, 0.517328, 0.168114,
- 0.452511, -0.176365, 0.524258, 0.183995, 0.463473, -0.187298, 0.531248, 0.200953,
- 0.475564, -0.198244, 0.538367, 0.219176, 0.488664, -0.208938, 0.545175, 0.238514,
- 0.504073, -0.219599, 0.553227, 0.259129, 0.520832, -0.230378, 0.560653, 0.280997,
- 0.538455, -0.240703, 0.567523, 0.303821, 0.557090, -0.250548, 0.573287, 0.327948,
- 0.576646, -0.259964, 0.577795, 0.353362, 0.596705, -0.268721, 0.580077, 0.380336,
- 0.618053, -0.276054, 0.580180, 0.410100, 0.640303, -0.282176, 0.578747, 0.441610,
- 0.662365, -0.286931, 0.574294, 0.474106, 0.684542, -0.290521, 0.567035, 0.507549,
- 0.707984, -0.292672, 0.558687, 0.541853, 0.730913, -0.293189, 0.547606, 0.576581,
- 0.752948, -0.292199, 0.533471, 0.611720, 0.773452, -0.289508, 0.516395, 0.646339,
- 0.794715, -0.285716, 0.497873, 0.682131, 0.814251, -0.280051, 0.476845, 0.716396,
- 0.833057, -0.272873, 0.453449, 0.751503, 0.849590, -0.263982, 0.427857, 0.786085,
- 0.867022, -0.252745, 0.400335, 0.821355, 0.882277, -0.239655, 0.371304, 0.856460,
- 0.895375, -0.225386, 0.340397, 0.890828, 0.909347, -0.209587, 0.310005, 0.923532,
- 0.921885, -0.193433, 0.279600, 0.956419, 0.932127, -0.176135, 0.247276, 0.989445,
- 0.941869, -0.157872, 0.216186, 1.022210, 0.949735, -0.137577, 0.185602, 1.051950,
- 0.956617, -0.115285, 0.155767, 1.078220, 0.961974, -0.092842, 0.126103, 1.101490,
- 0.969720, -0.070059, 0.095676, 1.122070, 0.980120, -0.047467, 0.064327, 1.140800,
- 0.990825, -0.023811, 0.032086, 1.157700, 0.999876, 0.000382, -0.000081, 1.174030,
- 0.367636, -0.000010, 0.469176, 0.000008, 0.380377, -0.000245, 0.485434, 0.000192,
- 0.380416, -0.000979, 0.485475, 0.000767, 0.380376, -0.002202, 0.485435, 0.001725,
- 0.380419, -0.003914, 0.485487, 0.003067, 0.380438, -0.006115, 0.485505, 0.004793,
- 0.380462, -0.008806, 0.485525, 0.006904, 0.380496, -0.011984, 0.485551, 0.009400,
- 0.380560, -0.015649, 0.485605, 0.012285, 0.380640, -0.019799, 0.485666, 0.015560,
- 0.380767, -0.024432, 0.485770, 0.019231, 0.380909, -0.029544, 0.485871, 0.023303,
- 0.381142, -0.035132, 0.486060, 0.027786, 0.381472, -0.041154, 0.486336, 0.032694,
- 0.382015, -0.047541, 0.486833, 0.038057, 0.382523, -0.054440, 0.487231, 0.043861,
- 0.383129, -0.061784, 0.487683, 0.050133, 0.383952, -0.069509, 0.488313, 0.056900,
- 0.384980, -0.077582, 0.489077, 0.064195, 0.386331, -0.086044, 0.490113, 0.072032,
- 0.387788, -0.094841, 0.491099, 0.080438, 0.389808, -0.103899, 0.492566, 0.089490,
- 0.392520, -0.113313, 0.494601, 0.099210, 0.395493, -0.123007, 0.496619, 0.109641,
- 0.399826, -0.132859, 0.499912, 0.120919, 0.405341, -0.143077, 0.504061, 0.133107,
- 0.411932, -0.153465, 0.508905, 0.146263, 0.420591, -0.164108, 0.515482, 0.160544,
- 0.431010, -0.174893, 0.523191, 0.176123, 0.441881, -0.185839, 0.530260, 0.192757,
- 0.453919, -0.196633, 0.537295, 0.210535, 0.468715, -0.207611, 0.546156, 0.229886,
- 0.485182, -0.218517, 0.555173, 0.250543, 0.501926, -0.229249, 0.562728, 0.272210,
- 0.517850, -0.239481, 0.567494, 0.294892, 0.536947, -0.249395, 0.573889, 0.318987,
- 0.557115, -0.259000, 0.578831, 0.344348, 0.577966, -0.268075, 0.582055, 0.371223,
- 0.599489, -0.276115, 0.583307, 0.399834, 0.624790, -0.282523, 0.583902, 0.431415,
- 0.647504, -0.287663, 0.579530, 0.464301, 0.670601, -0.291538, 0.573103, 0.498123,
- 0.693539, -0.293842, 0.563731, 0.532662, 0.717385, -0.294681, 0.553169, 0.567925,
- 0.741533, -0.293717, 0.539908, 0.603502, 0.762142, -0.291156, 0.521902, 0.639074,
- 0.783014, -0.287190, 0.502815, 0.674439, 0.805158, -0.281773, 0.482598, 0.710497,
- 0.823646, -0.274682, 0.458949, 0.745600, 0.841879, -0.266184, 0.433129, 0.781085,
- 0.859515, -0.255682, 0.406064, 0.816000, 0.875335, -0.242849, 0.376509, 0.851074,
- 0.890147, -0.228329, 0.345502, 0.886473, 0.903144, -0.212491, 0.314280, 0.920751,
- 0.916618, -0.195695, 0.282994, 0.954606, 0.927953, -0.178267, 0.251091, 0.988402,
- 0.937414, -0.159549, 0.219107, 1.021410, 0.946823, -0.140022, 0.188960, 1.051670,
- 0.954651, -0.118154, 0.158667, 1.078190, 0.959955, -0.094664, 0.128808, 1.102500,
- 0.968580, -0.071179, 0.097379, 1.123910, 0.979380, -0.047505, 0.065097, 1.143220,
- 0.990498, -0.024059, 0.032627, 1.160770, 0.999844, -0.000051, 0.000112, 1.177270,
- 0.316912, -0.000009, 0.425996, 0.000007, 0.356423, -0.000241, 0.479108, 0.000180,
- 0.356272, -0.000965, 0.478897, 0.000718, 0.356262, -0.002172, 0.478894, 0.001616,
- 0.356265, -0.003861, 0.478895, 0.002873, 0.356278, -0.006032, 0.478905, 0.004489,
- 0.356293, -0.008686, 0.478914, 0.006466, 0.356346, -0.011821, 0.478965, 0.008804,
- 0.356395, -0.015435, 0.479001, 0.011507, 0.356484, -0.019529, 0.479075, 0.014576,
- 0.356609, -0.024099, 0.479180, 0.018018, 0.356766, -0.029141, 0.479305, 0.021838,
- 0.357009, -0.034650, 0.479512, 0.026045, 0.357424, -0.040546, 0.479909, 0.030666,
- 0.357899, -0.046883, 0.480337, 0.035705, 0.358424, -0.053689, 0.480771, 0.041173,
- 0.359041, -0.060942, 0.481242, 0.047084, 0.359903, -0.068524, 0.481943, 0.053483,
- 0.360932, -0.076488, 0.482741, 0.060380, 0.362196, -0.084836, 0.483688, 0.067803,
- 0.363847, -0.093500, 0.484947, 0.075809, 0.365972, -0.102471, 0.486588, 0.084417,
- 0.368741, -0.111751, 0.488787, 0.093720, 0.372146, -0.121334, 0.491405, 0.103732,
- 0.377114, -0.131147, 0.495604, 0.114608, 0.382260, -0.141213, 0.499436, 0.126345,
- 0.389609, -0.151632, 0.505334, 0.139116, 0.397925, -0.162073, 0.511680, 0.152995,
- 0.407824, -0.172819, 0.518876, 0.168071, 0.420014, -0.183929, 0.527639, 0.184495,
- 0.434266, -0.195032, 0.537588, 0.202320, 0.447352, -0.205792, 0.544379, 0.221189,
- 0.463726, -0.216704, 0.553422, 0.241616, 0.481406, -0.227531, 0.562074, 0.263298,
- 0.498707, -0.238017, 0.568227, 0.286116, 0.518039, -0.247936, 0.574473, 0.310100,
- 0.538277, -0.257437, 0.579191, 0.335401, 0.561166, -0.266829, 0.584807, 0.362246,
- 0.583189, -0.275329, 0.586476, 0.390609, 0.606024, -0.282340, 0.585578, 0.420998,
- 0.632419, -0.287924, 0.584496, 0.454357, 0.656128, -0.291972, 0.577766, 0.488233,
- 0.679953, -0.294560, 0.568750, 0.523248, 0.704654, -0.295816, 0.558388, 0.559168,
- 0.729016, -0.295157, 0.544826, 0.595326, 0.752062, -0.292779, 0.528273, 0.631864,
- 0.773138, -0.288681, 0.508482, 0.667793, 0.794869, -0.283358, 0.487341, 0.704035,
- 0.815101, -0.276080, 0.463540, 0.739925, 0.834212, -0.267670, 0.438672, 0.775539,
- 0.852368, -0.257397, 0.411239, 0.810895, 0.870207, -0.245689, 0.382900, 0.846472,
- 0.884063, -0.231452, 0.351496, 0.881788, 0.898284, -0.215561, 0.318950, 0.917438,
- 0.912964, -0.198208, 0.287367, 0.952422, 0.924666, -0.180426, 0.254487, 0.987551,
- 0.934429, -0.161525, 0.222226, 1.021420, 0.943485, -0.141197, 0.191143, 1.052180,
- 0.952100, -0.120085, 0.161112, 1.079370, 0.957876, -0.097588, 0.130982, 1.104030,
- 0.966943, -0.072684, 0.099055, 1.126160, 0.978313, -0.048370, 0.066282, 1.146190,
- 0.990048, -0.023907, 0.032924, 1.164130, 0.999984, 0.000462, -0.000077, 1.180990,
- 0.321287, -0.000009, 0.455413, 0.000007, 0.332595, -0.000238, 0.471437, 0.000168,
- 0.332729, -0.000950, 0.471618, 0.000670, 0.332305, -0.002136, 0.471028, 0.001507,
- 0.332326, -0.003798, 0.471055, 0.002680, 0.332344, -0.005934, 0.471072, 0.004188,
- 0.332356, -0.008543, 0.471077, 0.006032, 0.332403, -0.011627, 0.471121, 0.008214,
- 0.332461, -0.015182, 0.471170, 0.010736, 0.332552, -0.019209, 0.471251, 0.013601,
- 0.332657, -0.023702, 0.471330, 0.016815, 0.332835, -0.028661, 0.471487, 0.020385,
- 0.333083, -0.034077, 0.471708, 0.024321, 0.333547, -0.039856, 0.472190, 0.028652,
- 0.333989, -0.046092, 0.472587, 0.033376, 0.334532, -0.052790, 0.473054, 0.038508,
- 0.335167, -0.059928, 0.473568, 0.044064, 0.336080, -0.067351, 0.474362, 0.050096,
- 0.337146, -0.075224, 0.475231, 0.056602, 0.338462, -0.083418, 0.476282, 0.063627,
- 0.340140, -0.091938, 0.477615, 0.071215, 0.342341, -0.100741, 0.479404, 0.079417,
- 0.345088, -0.109905, 0.481618, 0.088263, 0.349049, -0.119369, 0.485081, 0.097885,
- 0.353939, -0.129033, 0.489317, 0.108336, 0.359893, -0.139038, 0.494309, 0.119698,
- 0.366945, -0.149411, 0.499983, 0.132024, 0.375814, -0.159843, 0.507185, 0.145558,
- 0.387112, -0.170664, 0.516392, 0.160433, 0.400230, -0.181897, 0.526519, 0.176648,
- 0.412555, -0.192785, 0.534230, 0.193922, 0.427023, -0.203663, 0.542741, 0.212662,
- 0.443685, -0.214695, 0.552066, 0.232944, 0.461499, -0.225561, 0.560762, 0.254495,
- 0.480975, -0.236257, 0.569421, 0.277531, 0.501000, -0.246390, 0.576101, 0.301724,
- 0.521691, -0.256101, 0.581493, 0.327112, 0.543478, -0.265289, 0.585221, 0.353917,
- 0.566094, -0.273938, 0.587614, 0.381941, 0.589578, -0.281679, 0.587991, 0.411720,
- 0.614583, -0.287655, 0.585928, 0.444148, 0.641813, -0.292228, 0.582092, 0.478617,
- 0.666189, -0.295172, 0.573980, 0.513970, 0.690475, -0.296480, 0.561676, 0.550118,
- 0.715543, -0.296203, 0.548758, 0.586933, 0.740405, -0.293999, 0.532792, 0.623840,
- 0.762183, -0.289980, 0.512735, 0.660723, 0.786069, -0.284780, 0.492402, 0.698070,
- 0.806812, -0.277568, 0.469058, 0.734422, 0.826987, -0.268951, 0.443017, 0.770946,
- 0.844588, -0.259049, 0.415501, 0.806990, 0.863725, -0.247100, 0.387328, 0.842107,
- 0.879137, -0.234157, 0.356108, 0.878078, 0.894634, -0.218719, 0.324315, 0.914058,
- 0.909162, -0.201293, 0.291813, 0.949922, 0.920720, -0.182670, 0.258474, 0.985337,
- 0.931580, -0.163212, 0.225593, 1.020500, 0.941238, -0.142771, 0.193986, 1.052730,
- 0.949293, -0.120956, 0.163392, 1.080750, 0.956226, -0.098574, 0.132934, 1.105590,
- 0.965460, -0.075118, 0.101255, 1.128230, 0.977403, -0.049792, 0.067544, 1.149000,
- 0.989648, -0.024157, 0.033468, 1.167650, 1.000010, 0.000576, -0.000185, 1.185190,
- 0.303474, -0.000009, 0.454200, 0.000006, 0.308894, -0.000233, 0.462306, 0.000156,
- 0.309426, -0.000932, 0.463093, 0.000622, 0.308643, -0.002095, 0.461933, 0.001400,
- 0.308651, -0.003724, 0.461941, 0.002489, 0.308662, -0.005819, 0.461950, 0.003889,
- 0.308687, -0.008378, 0.461974, 0.005602, 0.308728, -0.011402, 0.462011, 0.007629,
- 0.308789, -0.014888, 0.462067, 0.009973, 0.308882, -0.018837, 0.462151, 0.012637,
- 0.309007, -0.023244, 0.462263, 0.015627, 0.309180, -0.028105, 0.462417, 0.018950,
- 0.309442, -0.033406, 0.462667, 0.022617, 0.309901, -0.039059, 0.463162, 0.026661,
- 0.310331, -0.045204, 0.463555, 0.031071, 0.310858, -0.051774, 0.464019, 0.035870,
- 0.311576, -0.058736, 0.464669, 0.041085, 0.312436, -0.066038, 0.465406, 0.046745,
- 0.313526, -0.073727, 0.466339, 0.052872, 0.314903, -0.081757, 0.467504, 0.059504,
- 0.316814, -0.090167, 0.469226, 0.066689, 0.318965, -0.098755, 0.470981, 0.074466,
- 0.322077, -0.107792, 0.473814, 0.082912, 0.325947, -0.117098, 0.477241, 0.092085,
- 0.331008, -0.126602, 0.481840, 0.102137, 0.337893, -0.136619, 0.488334, 0.113135,
- 0.345106, -0.146838, 0.494415, 0.125110, 0.355111, -0.157357, 0.503275, 0.138356,
- 0.365095, -0.167955, 0.510966, 0.152686, 0.378344, -0.179157, 0.521508, 0.168560,
- 0.391599, -0.190143, 0.530455, 0.185610, 0.407786, -0.201230, 0.541275, 0.204308,
- 0.425294, -0.212456, 0.551784, 0.224623, 0.444021, -0.223568, 0.561493, 0.246172,
- 0.463418, -0.234154, 0.569886, 0.268979, 0.484077, -0.244546, 0.577116, 0.293411,
- 0.505513, -0.254301, 0.582914, 0.318936, 0.527672, -0.263564, 0.587208, 0.345856,
- 0.550565, -0.272332, 0.589277, 0.374054, 0.573656, -0.280011, 0.588426, 0.403276,
- 0.598270, -0.286924, 0.587504, 0.434740, 0.624731, -0.291994, 0.583401, 0.468767,
- 0.652396, -0.295159, 0.576997, 0.504411, 0.677320, -0.296954, 0.565863, 0.541140,
- 0.703147, -0.296877, 0.552316, 0.578160, 0.728715, -0.295147, 0.536773, 0.616124,
- 0.752448, -0.291275, 0.517710, 0.653885, 0.775169, -0.285905, 0.496087, 0.691537,
- 0.799307, -0.279064, 0.474232, 0.729251, 0.819482, -0.270294, 0.447676, 0.766267,
- 0.837659, -0.260032, 0.419656, 0.802616, 0.856903, -0.248497, 0.391328, 0.838583,
- 0.873325, -0.235252, 0.360285, 0.874711, 0.889788, -0.221126, 0.329215, 0.910770,
- 0.904486, -0.204304, 0.296392, 0.946530, 0.917711, -0.185562, 0.262159, 0.983828,
- 0.928969, -0.165635, 0.229142, 1.019550, 0.939707, -0.144420, 0.196730, 1.053170,
- 0.948167, -0.122147, 0.165095, 1.082300, 0.955222, -0.099098, 0.134510, 1.107910,
- 0.964401, -0.075533, 0.102476, 1.131200, 0.976605, -0.051382, 0.068967, 1.152180,
- 0.989085, -0.025850, 0.034506, 1.171290, 0.999908, 0.000618, -0.000271, 1.189610,
- 0.285803, -0.000009, 0.452348, 0.000006, 0.284689, -0.000227, 0.450581, 0.000144,
- 0.285263, -0.000910, 0.451482, 0.000575, 0.285302, -0.002048, 0.451553, 0.001294,
- 0.285318, -0.003641, 0.451574, 0.002301, 0.285330, -0.005688, 0.451585, 0.003595,
- 0.285361, -0.008190, 0.451618, 0.005179, 0.285397, -0.011146, 0.451650, 0.007054,
- 0.285447, -0.014554, 0.451688, 0.009222, 0.285527, -0.018413, 0.451758, 0.011687,
- 0.285688, -0.022721, 0.451929, 0.014455, 0.285840, -0.027471, 0.452055, 0.017534,
- 0.286136, -0.032628, 0.452369, 0.020941, 0.286574, -0.038179, 0.452853, 0.024696,
- 0.287012, -0.044188, 0.453272, 0.028800, 0.287542, -0.050610, 0.453752, 0.033268,
- 0.288299, -0.057363, 0.454488, 0.038150, 0.289186, -0.064546, 0.455294, 0.043445,
- 0.290302, -0.072040, 0.456301, 0.049197, 0.291776, -0.079905, 0.457648, 0.055445,
- 0.293720, -0.088117, 0.459483, 0.062231, 0.296052, -0.096533, 0.461571, 0.069599,
- 0.299563, -0.105409, 0.465085, 0.077658, 0.303350, -0.114553, 0.468506, 0.086418,
- 0.309167, -0.123917, 0.474423, 0.096108, 0.315290, -0.133810, 0.479950, 0.106643,
- 0.324163, -0.144021, 0.488592, 0.118322, 0.333272, -0.154382, 0.496461, 0.131133,
- 0.344224, -0.165015, 0.505620, 0.145208, 0.357733, -0.176168, 0.516719, 0.160730,
- 0.373046, -0.187468, 0.528513, 0.177807, 0.387880, -0.198488, 0.537713, 0.196072,
- 0.405133, -0.209545, 0.547999, 0.216050, 0.423845, -0.220724, 0.557590, 0.237484,
- 0.443777, -0.231518, 0.566246, 0.260390, 0.464824, -0.242035, 0.574326, 0.284835,
- 0.486635, -0.251898, 0.580370, 0.310518, 0.510120, -0.261304, 0.585680, 0.337678,
- 0.535301, -0.270384, 0.590197, 0.366242, 0.559193, -0.278410, 0.590569, 0.395873,
- 0.583544, -0.285325, 0.588161, 0.426857, 0.608834, -0.291113, 0.584249, 0.459477,
- 0.635753, -0.294882, 0.577630, 0.494734, 0.664367, -0.297088, 0.569479, 0.532023,
- 0.689688, -0.297364, 0.555064, 0.569629, 0.715732, -0.295949, 0.539522, 0.608124,
- 0.741307, -0.292259, 0.521613, 0.646231, 0.764949, -0.287063, 0.499690, 0.684938,
- 0.788599, -0.280120, 0.476747, 0.723548, 0.810480, -0.271530, 0.451160, 0.761135,
- 0.831372, -0.261289, 0.424101, 0.798916, 0.850092, -0.249559, 0.394430, 0.835952,
- 0.867777, -0.236348, 0.363849, 0.871606, 0.884632, -0.221569, 0.332477, 0.907843,
- 0.900470, -0.206180, 0.300667, 0.944187, 0.914524, -0.188771, 0.266552, 0.981371,
- 0.926892, -0.168362, 0.232349, 1.018410, 0.937951, -0.146761, 0.199359, 1.053080,
- 0.947236, -0.123813, 0.167500, 1.083900, 0.954367, -0.099984, 0.136166, 1.110470,
- 0.963907, -0.075928, 0.103808, 1.134140, 0.976218, -0.051137, 0.069706, 1.155750,
- 0.988772, -0.026742, 0.035253, 1.175310, 0.999888, -0.000521, 0.000290, 1.193890,
- 0.263546, -0.000009, 0.441896, 0.000005, 0.262352, -0.000222, 0.439889, 0.000132,
- 0.262325, -0.000887, 0.439848, 0.000529, 0.262280, -0.001995, 0.439765, 0.001190,
- 0.262372, -0.003547, 0.439922, 0.002116, 0.262390, -0.005541, 0.439941, 0.003307,
- 0.262412, -0.007979, 0.439961, 0.004763, 0.262453, -0.010858, 0.440002, 0.006488,
- 0.262528, -0.014179, 0.440085, 0.008483, 0.262615, -0.017938, 0.440166, 0.010753,
- 0.262744, -0.022135, 0.440291, 0.013304, 0.262939, -0.026762, 0.440493, 0.016144,
- 0.263277, -0.031757, 0.440889, 0.019297, 0.263680, -0.037183, 0.441338, 0.022770,
- 0.264106, -0.043037, 0.441753, 0.026570, 0.264624, -0.049304, 0.442227, 0.030718,
- 0.265378, -0.055867, 0.442985, 0.035262, 0.266253, -0.062872, 0.443795, 0.040197,
- 0.267478, -0.070157, 0.445008, 0.045590, 0.269062, -0.077845, 0.446599, 0.051454,
- 0.270926, -0.085794, 0.448349, 0.057838, 0.273693, -0.094077, 0.451221, 0.064836,
- 0.276746, -0.102704, 0.454097, 0.072439, 0.281693, -0.111735, 0.459517, 0.080874,
- 0.287335, -0.121004, 0.465310, 0.090155, 0.294480, -0.130734, 0.472605, 0.100371,
- 0.302570, -0.140777, 0.480251, 0.111644, 0.312465, -0.151110, 0.489444, 0.124111,
- 0.324856, -0.161890, 0.500919, 0.137979, 0.337740, -0.172946, 0.511317, 0.153163,
- 0.352550, -0.184152, 0.522684, 0.169817, 0.367786, -0.195220, 0.532480, 0.187886,
- 0.385474, -0.206320, 0.543326, 0.207634, 0.404976, -0.217744, 0.554109, 0.229165,
- 0.425203, -0.228691, 0.563395, 0.252068, 0.446704, -0.239299, 0.571565, 0.276471,
- 0.468951, -0.249348, 0.577935, 0.302323, 0.493487, -0.258933, 0.584309, 0.329882,
- 0.517861, -0.268009, 0.587730, 0.358525, 0.543309, -0.276238, 0.589612, 0.388585,
- 0.569704, -0.283560, 0.589294, 0.419787, 0.594871, -0.289497, 0.585137, 0.452114,
- 0.622555, -0.294452, 0.580356, 0.486466, 0.651167, -0.296918, 0.571850, 0.523079,
- 0.677332, -0.297647, 0.558428, 0.561100, 0.703718, -0.296321, 0.542232, 0.599592,
- 0.730262, -0.293339, 0.524541, 0.639138, 0.754304, -0.288036, 0.502691, 0.677978,
- 0.778051, -0.281018, 0.479212, 0.716537, 0.801557, -0.272414, 0.454071, 0.755860,
- 0.822559, -0.262419, 0.425952, 0.794477, 0.843051, -0.250702, 0.397313, 0.832664,
- 0.862320, -0.237264, 0.366534, 0.869876, 0.879044, -0.222716, 0.334816, 0.906973,
- 0.896362, -0.206827, 0.303143, 0.943558, 0.910342, -0.189659, 0.269699, 0.979759,
- 0.924119, -0.171108, 0.236411, 1.017180, 0.935374, -0.149579, 0.202224, 1.052890,
- 0.944295, -0.126295, 0.169890, 1.084960, 0.952227, -0.101511, 0.138089, 1.112560,
- 0.962041, -0.076639, 0.105053, 1.137500, 0.975280, -0.051197, 0.070329, 1.159830,
- 0.988476, -0.025463, 0.035127, 1.179870, 0.999962, 0.000029, 0.000015, 1.199010,
- 0.227089, -0.000008, 0.404216, 0.000005, 0.239725, -0.000215, 0.426708, 0.000121,
- 0.239904, -0.000861, 0.427028, 0.000484, 0.239911, -0.001937, 0.427039, 0.001088,
- 0.239914, -0.003443, 0.427040, 0.001935, 0.239933, -0.005379, 0.427064, 0.003024,
- 0.239944, -0.007745, 0.427065, 0.004356, 0.239993, -0.010540, 0.427122, 0.005934,
- 0.240052, -0.013763, 0.427179, 0.007760, 0.240148, -0.017411, 0.427279, 0.009839,
- 0.240278, -0.021484, 0.427410, 0.012176, 0.240472, -0.025973, 0.427618, 0.014783,
- 0.240839, -0.030813, 0.428086, 0.017684, 0.241201, -0.036089, 0.428482, 0.020878,
- 0.241626, -0.041772, 0.428907, 0.024382, 0.242207, -0.047834, 0.429520, 0.028223,
- 0.242980, -0.054220, 0.430332, 0.032433, 0.243881, -0.061002, 0.431222, 0.037025,
- 0.245123, -0.068087, 0.432512, 0.042054, 0.246670, -0.075548, 0.434088, 0.047541,
- 0.248779, -0.083287, 0.436323, 0.053554, 0.251665, -0.091355, 0.439509, 0.060172,
- 0.255305, -0.099849, 0.443478, 0.067428, 0.260049, -0.108576, 0.448713, 0.075467,
- 0.266192, -0.117754, 0.455524, 0.084339, 0.273158, -0.127294, 0.462700, 0.094168,
- 0.282131, -0.137311, 0.472068, 0.105150, 0.293332, -0.147736, 0.483565, 0.117402,
- 0.304667, -0.158357, 0.493702, 0.130824, 0.317785, -0.169274, 0.504708, 0.145724,
- 0.333245, -0.180595, 0.517107, 0.162150, 0.349843, -0.191892, 0.528849, 0.180149,
- 0.367944, -0.203168, 0.540301, 0.199746, 0.387579, -0.214443, 0.551514, 0.221047,
- 0.408247, -0.225624, 0.560906, 0.243981, 0.430140, -0.236422, 0.569590, 0.268513,
- 0.452669, -0.246540, 0.576098, 0.294409, 0.476196, -0.256157, 0.580925, 0.322002,
- 0.501157, -0.265289, 0.584839, 0.351052, 0.527632, -0.273671, 0.587614, 0.381200,
- 0.555754, -0.281254, 0.589119, 0.412994, 0.581682, -0.287448, 0.585204, 0.445498,
- 0.608196, -0.292614, 0.579006, 0.479505, 0.635661, -0.296068, 0.571297, 0.514643,
- 0.664999, -0.297395, 0.560855, 0.552213, 0.691039, -0.296645, 0.544525, 0.591365,
- 0.717900, -0.293785, 0.526535, 0.630883, 0.744059, -0.289089, 0.505450, 0.670932,
- 0.768630, -0.282239, 0.482514, 0.710904, 0.793273, -0.273688, 0.457246, 0.750259,
- 0.814731, -0.263280, 0.428872, 0.789480, 0.835603, -0.251526, 0.399384, 0.828597,
- 0.854890, -0.238339, 0.368811, 0.866892, 0.872828, -0.223607, 0.336617, 0.905630,
- 0.889462, -0.207538, 0.303997, 0.943538, 0.904929, -0.190297, 0.270812, 0.980591,
- 0.919101, -0.172034, 0.237453, 1.019350, 0.930536, -0.152058, 0.204431, 1.054980,
- 0.941223, -0.129515, 0.172495, 1.087170, 0.949820, -0.104263, 0.140175, 1.115510,
- 0.960592, -0.078194, 0.106465, 1.140980, 0.974629, -0.051688, 0.071159, 1.164180,
- 0.988110, -0.025393, 0.035443, 1.184650, 1.000040, 0.000804, -0.000331, 1.204620,
- 0.214668, -0.000008, 0.406619, 0.000004, 0.218053, -0.000208, 0.413025, 0.000110,
- 0.217987, -0.000832, 0.412901, 0.000439, 0.217971, -0.001872, 0.412876, 0.000989,
- 0.217968, -0.003329, 0.412860, 0.001758, 0.217985, -0.005201, 0.412882, 0.002747,
- 0.218014, -0.007488, 0.412916, 0.003958, 0.218054, -0.010190, 0.412957, 0.005393,
- 0.218106, -0.013306, 0.413005, 0.007053, 0.218217, -0.016834, 0.413139, 0.008946,
- 0.218338, -0.020771, 0.413258, 0.011075, 0.218550, -0.025100, 0.413509, 0.013455,
- 0.218913, -0.029786, 0.413992, 0.016108, 0.219265, -0.034896, 0.414383, 0.019031,
- 0.219696, -0.040391, 0.414839, 0.022246, 0.220329, -0.046200, 0.415567, 0.025792,
- 0.220989, -0.052421, 0.416210, 0.029664, 0.222027, -0.058948, 0.417385, 0.033932,
- 0.223301, -0.065821, 0.418779, 0.038606, 0.224988, -0.073035, 0.420665, 0.043735,
- 0.227211, -0.080527, 0.423198, 0.049384, 0.230131, -0.088395, 0.426566, 0.055614,
- 0.233908, -0.096621, 0.430910, 0.062483, 0.239092, -0.105223, 0.437148, 0.070164,
- 0.245315, -0.114240, 0.444302, 0.078695, 0.253166, -0.123680, 0.453262, 0.088238,
- 0.262374, -0.133569, 0.463211, 0.098868, 0.273145, -0.143836, 0.474271, 0.110727,
- 0.285512, -0.154577, 0.486300, 0.123945, 0.299512, -0.165501, 0.498817, 0.138581,
- 0.314287, -0.176698, 0.510341, 0.154676, 0.331083, -0.188066, 0.522583, 0.172459,
- 0.349615, -0.199597, 0.534879, 0.191979, 0.369318, -0.210843, 0.546083, 0.213090,
- 0.390377, -0.222068, 0.556200, 0.235998, 0.412411, -0.233059, 0.564704, 0.260518,
- 0.435715, -0.243570, 0.572314, 0.286795, 0.461196, -0.253356, 0.579395, 0.314559,
- 0.485587, -0.262362, 0.581985, 0.343581, 0.511908, -0.270895, 0.584347, 0.374367,
- 0.539798, -0.278452, 0.585050, 0.406015, 0.567974, -0.284877, 0.583344, 0.439168,
- 0.594303, -0.290124, 0.577348, 0.473005, 0.622951, -0.294183, 0.570751, 0.508534,
- 0.652404, -0.296389, 0.561541, 0.544764, 0.679291, -0.296605, 0.546426, 0.582927,
- 0.706437, -0.294095, 0.528599, 0.622681, 0.734485, -0.289780, 0.508676, 0.663567,
- 0.758841, -0.283363, 0.484768, 0.704092, 0.785370, -0.275015, 0.460434, 0.745101,
- 0.807315, -0.264689, 0.432166, 0.784712, 0.827100, -0.252597, 0.401807, 0.824241,
- 0.849191, -0.239154, 0.371458, 0.863803, 0.867046, -0.224451, 0.338873, 0.903063,
- 0.885200, -0.208342, 0.306175, 0.942763, 0.901771, -0.190684, 0.272759, 0.981559,
- 0.915958, -0.172105, 0.239306, 1.020480, 0.928046, -0.152214, 0.206071, 1.057650,
- 0.939961, -0.130247, 0.173670, 1.089990, 0.948711, -0.106720, 0.142201, 1.118290,
- 0.959305, -0.080869, 0.108454, 1.144670, 0.973009, -0.053914, 0.072811, 1.168390,
- 0.987631, -0.026295, 0.036062, 1.190040, 0.999978, 0.001328, -0.000559, 1.210580,
- 0.193925, -0.000008, 0.391974, 0.000004, 0.196746, -0.000200, 0.397675, 0.000099,
- 0.196670, -0.000801, 0.397521, 0.000396, 0.196633, -0.001802, 0.397445, 0.000892,
- 0.196654, -0.003204, 0.397482, 0.001586, 0.196659, -0.005006, 0.397480, 0.002479,
- 0.196683, -0.007209, 0.397506, 0.003572, 0.196728, -0.009810, 0.397562, 0.004867,
- 0.196792, -0.012810, 0.397633, 0.006367, 0.196890, -0.016206, 0.397746, 0.008078,
- 0.197017, -0.019994, 0.397884, 0.010005, 0.197290, -0.024139, 0.398270, 0.012169,
- 0.197583, -0.028667, 0.398639, 0.014575, 0.197927, -0.033586, 0.399034, 0.017236,
- 0.198383, -0.038881, 0.399554, 0.020172, 0.199002, -0.044474, 0.400289, 0.023419,
- 0.199739, -0.050458, 0.401111, 0.026984, 0.200784, -0.056729, 0.402349, 0.030922,
- 0.202075, -0.063364, 0.403841, 0.035250, 0.203898, -0.070325, 0.406076, 0.040031,
- 0.206199, -0.077557, 0.408841, 0.045328, 0.209252, -0.085184, 0.412590, 0.051179,
- 0.213638, -0.093199, 0.418288, 0.057746, 0.218810, -0.101617, 0.424681, 0.065051,
- 0.225642, -0.110520, 0.433429, 0.073276, 0.233717, -0.119772, 0.442897, 0.082468,
- 0.242823, -0.129505, 0.452888, 0.092748, 0.254772, -0.139906, 0.466407, 0.104417,
- 0.266603, -0.150402, 0.477413, 0.117211, 0.280730, -0.161395, 0.490519, 0.131598,
- 0.295399, -0.172465, 0.502010, 0.147407, 0.312705, -0.183982, 0.515311, 0.165031,
- 0.331335, -0.195532, 0.527860, 0.184336, 0.351037, -0.206971, 0.539200, 0.205361,
- 0.372175, -0.218117, 0.549410, 0.228043, 0.394548, -0.229327, 0.558642, 0.252670,
- 0.419598, -0.240052, 0.567861, 0.279071, 0.443922, -0.249937, 0.573332, 0.306882,
- 0.471495, -0.259407, 0.580130, 0.336610, 0.496769, -0.267749, 0.580564, 0.367328,
- 0.524951, -0.275524, 0.581696, 0.399753, 0.553180, -0.282148, 0.579885, 0.433134,
- 0.581577, -0.287533, 0.575471, 0.467534, 0.609231, -0.291612, 0.567445, 0.502943,
- 0.637478, -0.293911, 0.557657, 0.538710, 0.667795, -0.295096, 0.546535, 0.576568,
- 0.694272, -0.294073, 0.529561, 0.614929, 0.722937, -0.290386, 0.510561, 0.655909,
- 0.749682, -0.284481, 0.487846, 0.697663, 0.774754, -0.276188, 0.462487, 0.738515,
- 0.799301, -0.266215, 0.434810, 0.779802, 0.820762, -0.254116, 0.404879, 0.820045,
- 0.843231, -0.240393, 0.374559, 0.860294, 0.861857, -0.225503, 0.341582, 0.900965,
- 0.880815, -0.209382, 0.308778, 0.941727, 0.897660, -0.191550, 0.275232, 0.980916,
- 0.912926, -0.172346, 0.240938, 1.021620, 0.926391, -0.151799, 0.207223, 1.059700,
- 0.938429, -0.129968, 0.174840, 1.092910, 0.947834, -0.106510, 0.142984, 1.122480,
- 0.958432, -0.082410, 0.109902, 1.149000, 0.972402, -0.056524, 0.074445, 1.173300,
- 0.987191, -0.028427, 0.037379, 1.195380, 0.999975, 0.000039, -0.000042, 1.216760,
- 0.178114, -0.000008, 0.385418, 0.000004, 0.176074, -0.000192, 0.381002, 0.000089,
- 0.176010, -0.000768, 0.380861, 0.000355, 0.175980, -0.001727, 0.380798, 0.000798,
- 0.175994, -0.003070, 0.380824, 0.001419, 0.176017, -0.004797, 0.380858, 0.002219,
- 0.176019, -0.006906, 0.380839, 0.003197, 0.176072, -0.009399, 0.380913, 0.004357,
- 0.176131, -0.012273, 0.380979, 0.005702, 0.176239, -0.015526, 0.381120, 0.007237,
- 0.176371, -0.019155, 0.381272, 0.008969, 0.176638, -0.023117, 0.381669, 0.010919,
- 0.176912, -0.027463, 0.382015, 0.013090, 0.177279, -0.032173, 0.382476, 0.015495,
- 0.177740, -0.037222, 0.383041, 0.018167, 0.178344, -0.042613, 0.383780, 0.021121,
- 0.179153, -0.048331, 0.384773, 0.024390, 0.180197, -0.054345, 0.386076, 0.028006,
- 0.181581, -0.060712, 0.387809, 0.032004, 0.183440, -0.067386, 0.390205, 0.036453,
- 0.186139, -0.074399, 0.393944, 0.041416, 0.189432, -0.081773, 0.398320, 0.046939,
- 0.193795, -0.089546, 0.404188, 0.053144, 0.199641, -0.097826, 0.412100, 0.060137,
- 0.206679, -0.106499, 0.421425, 0.068008, 0.214865, -0.115654, 0.431504, 0.076919,
- 0.224406, -0.125268, 0.442526, 0.086884, 0.235876, -0.135475, 0.455465, 0.098187,
- 0.248335, -0.146023, 0.468100, 0.110759, 0.262868, -0.157016, 0.482069, 0.124885,
- 0.278962, -0.168245, 0.496182, 0.140645, 0.295082, -0.179580, 0.507401, 0.157838,
- 0.313738, -0.191227, 0.520252, 0.176950, 0.333573, -0.202718, 0.531708, 0.197817,
- 0.356433, -0.214424, 0.544509, 0.220785, 0.378853, -0.225492, 0.553730, 0.245306,
- 0.402717, -0.236236, 0.561348, 0.271593, 0.428375, -0.246568, 0.568538, 0.299776,
- 0.454724, -0.255941, 0.573462, 0.329433, 0.482291, -0.264511, 0.576356, 0.360598,
- 0.509706, -0.272129, 0.576446, 0.393204, 0.538805, -0.278979, 0.575298, 0.427227,
- 0.568919, -0.284528, 0.572154, 0.462157, 0.596804, -0.288801, 0.564691, 0.497997,
- 0.625987, -0.291334, 0.555134, 0.534467, 0.656414, -0.292722, 0.545051, 0.571736,
- 0.683916, -0.292185, 0.528813, 0.610158, 0.711809, -0.290043, 0.511060, 0.649061,
- 0.739547, -0.285246, 0.490103, 0.690081, 0.766914, -0.277647, 0.465523, 0.732554,
- 0.791375, -0.267603, 0.437718, 0.773982, 0.814772, -0.256109, 0.408820, 0.816090,
- 0.836691, -0.242281, 0.377823, 0.856849, 0.856984, -0.227155, 0.344960, 0.898363,
- 0.876332, -0.210395, 0.311335, 0.939471, 0.894988, -0.192612, 0.277703, 0.980799,
- 0.911113, -0.173236, 0.243019, 1.022150, 0.924092, -0.152258, 0.209037, 1.061390,
- 0.936828, -0.129575, 0.175909, 1.096350, 0.946869, -0.105940, 0.143852, 1.127070,
- 0.958284, -0.081318, 0.110289, 1.154190, 0.972325, -0.055613, 0.074723, 1.179090,
- 0.986878, -0.029790, 0.038315, 1.201630, 0.999936, -0.001972, 0.000912, 1.223380,
- 0.151174, -0.000007, 0.351531, 0.000003, 0.155594, -0.000183, 0.361806, 0.000079,
- 0.156099, -0.000732, 0.362982, 0.000315, 0.156053, -0.001646, 0.362869, 0.000708,
- 0.156093, -0.002926, 0.362961, 0.001259, 0.156099, -0.004572, 0.362959, 0.001968,
- 0.156120, -0.006582, 0.362982, 0.002836, 0.156168, -0.008958, 0.363048, 0.003866,
- 0.156221, -0.011696, 0.363101, 0.005061, 0.156324, -0.014797, 0.363241, 0.006427,
- 0.156476, -0.018250, 0.363448, 0.007972, 0.156731, -0.022027, 0.363840, 0.009715,
- 0.156994, -0.026176, 0.364179, 0.011657, 0.157341, -0.030670, 0.364620, 0.013821,
- 0.157867, -0.035459, 0.365364, 0.016236, 0.158460, -0.040614, 0.366111, 0.018909,
- 0.159308, -0.046052, 0.367248, 0.021885, 0.160426, -0.051810, 0.368767, 0.025200,
- 0.161877, -0.057891, 0.370745, 0.028882, 0.163995, -0.064281, 0.373831, 0.033014,
- 0.166550, -0.071007, 0.377366, 0.037628, 0.170237, -0.078152, 0.382799, 0.042849,
- 0.175096, -0.085717, 0.389915, 0.048732, 0.181069, -0.093802, 0.398487, 0.055421,
- 0.188487, -0.102363, 0.408799, 0.063019, 0.197029, -0.111343, 0.419991, 0.071634,
- 0.206684, -0.120812, 0.431455, 0.081280, 0.218698, -0.131033, 0.445746, 0.092365,
- 0.230726, -0.141373, 0.457471, 0.104545, 0.245516, -0.152387, 0.472388, 0.118449,
- 0.261551, -0.163628, 0.486671, 0.133923, 0.277437, -0.174814, 0.497620, 0.150849,
- 0.296662, -0.186713, 0.511620, 0.169924, 0.317950, -0.198513, 0.525435, 0.190848,
- 0.339422, -0.210119, 0.536267, 0.213504, 0.362143, -0.221354, 0.545982, 0.237947,
- 0.387198, -0.232240, 0.555364, 0.264427, 0.412349, -0.242570, 0.561489, 0.292519,
- 0.439274, -0.252284, 0.566903, 0.322561, 0.466779, -0.261023, 0.569614, 0.353952,
- 0.496011, -0.268990, 0.571589, 0.387278, 0.524964, -0.275498, 0.570325, 0.421356,
- 0.556518, -0.281449, 0.568792, 0.457314, 0.584363, -0.285526, 0.560268, 0.493199,
- 0.614214, -0.288440, 0.552050, 0.530276, 0.645684, -0.289777, 0.541906, 0.568550,
- 0.673446, -0.289722, 0.526464, 0.606927, 0.701924, -0.287792, 0.509872, 0.645945,
- 0.730370, -0.284315, 0.490649, 0.685564, 0.757405, -0.278804, 0.467964, 0.726511,
- 0.784025, -0.269543, 0.441468, 0.768601, 0.808255, -0.258117, 0.412160, 0.811321,
- 0.830739, -0.244728, 0.380606, 0.853496, 0.851914, -0.229428, 0.348111, 0.895374,
- 0.872586, -0.212508, 0.314732, 0.937674, 0.891581, -0.194025, 0.280338, 0.979869,
- 0.907641, -0.174711, 0.245203, 1.022530, 0.922233, -0.153509, 0.210770, 1.063710,
- 0.935878, -0.130418, 0.177399, 1.099720, 0.946338, -0.105558, 0.144507, 1.131240,
- 0.957265, -0.080059, 0.110508, 1.159730, 0.971668, -0.053977, 0.074231, 1.185150,
- 0.986600, -0.027710, 0.037522, 1.208580, 1.000210, -0.000516, 0.000135, 1.231350,
- 0.137468, -0.000007, 0.345041, 0.000003, 0.137030, -0.000173, 0.343936, 0.000069,
- 0.136986, -0.000693, 0.343830, 0.000276, 0.136964, -0.001559, 0.343761, 0.000621,
- 0.137003, -0.002772, 0.343863, 0.001105, 0.137012, -0.004331, 0.343868, 0.001727,
- 0.137043, -0.006236, 0.343916, 0.002490, 0.137090, -0.008487, 0.343986, 0.003396,
- 0.137145, -0.011081, 0.344045, 0.004447, 0.137242, -0.014019, 0.344177, 0.005650,
- 0.137431, -0.017271, 0.344491, 0.007019, 0.137644, -0.020861, 0.344805, 0.008560,
- 0.137910, -0.024792, 0.345172, 0.010286, 0.138295, -0.029046, 0.345734, 0.012219,
- 0.138764, -0.033596, 0.346371, 0.014377, 0.139415, -0.038467, 0.347298, 0.016789,
- 0.140272, -0.043618, 0.348527, 0.019489, 0.141457, -0.049102, 0.350276, 0.022504,
- 0.143030, -0.054876, 0.352646, 0.025896, 0.145289, -0.061010, 0.356206, 0.029717,
- 0.148502, -0.067478, 0.361488, 0.034056, 0.152188, -0.074345, 0.367103, 0.038953,
- 0.157359, -0.081744, 0.375247, 0.044554, 0.163790, -0.089633, 0.385064, 0.050953,
- 0.171376, -0.098005, 0.396082, 0.058261, 0.179901, -0.106817, 0.407418, 0.066540,
- 0.189892, -0.116239, 0.420031, 0.075994, 0.201838, -0.126270, 0.434321, 0.086724,
- 0.214311, -0.136701, 0.447631, 0.098752, 0.228902, -0.147616, 0.462046, 0.112353,
- 0.245107, -0.158871, 0.476942, 0.127605, 0.262292, -0.170261, 0.490285, 0.144469,
- 0.281215, -0.182017, 0.503783, 0.163282, 0.301058, -0.193729, 0.515505, 0.183873,
- 0.322752, -0.205512, 0.526820, 0.206466, 0.347547, -0.217214, 0.539473, 0.231194,
- 0.370969, -0.227966, 0.546625, 0.257288, 0.397533, -0.238555, 0.554720, 0.285789,
- 0.423980, -0.248278, 0.559468, 0.315746, 0.452928, -0.257422, 0.564095, 0.347724,
- 0.482121, -0.265306, 0.565426, 0.380922, 0.510438, -0.272043, 0.563205, 0.415639,
- 0.541188, -0.277614, 0.561087, 0.451702, 0.571667, -0.281927, 0.554922, 0.488450,
- 0.602432, -0.285015, 0.546838, 0.526442, 0.634126, -0.286512, 0.537415, 0.564896,
- 0.662816, -0.286388, 0.522906, 0.604037, 0.692411, -0.284734, 0.507003, 0.643795,
- 0.720946, -0.281297, 0.488398, 0.682980, 0.748293, -0.276262, 0.466353, 0.723466,
- 0.776931, -0.269978, 0.443573, 0.764565, 0.801065, -0.260305, 0.415279, 0.805838,
- 0.825843, -0.247426, 0.384773, 0.849985, 0.848070, -0.232437, 0.352555, 0.893174,
- 0.869122, -0.215806, 0.318642, 0.936564, 0.888963, -0.197307, 0.283810, 0.980253,
- 0.905547, -0.177203, 0.247888, 1.024630, 0.918554, -0.155542, 0.212904, 1.067140,
- 0.931395, -0.131948, 0.178700, 1.104510, 0.941749, -0.106723, 0.145902, 1.136940,
- 0.954551, -0.080494, 0.111193, 1.166600, 0.970279, -0.053424, 0.074470, 1.192490,
- 0.986117, -0.025745, 0.036879, 1.216650, 0.999938, 0.001906, -0.001029, 1.239810,
- 0.118493, -0.000006, 0.322720, 0.000002, 0.118765, -0.000163, 0.323456, 0.000060,
- 0.118772, -0.000652, 0.323477, 0.000239, 0.118843, -0.001467, 0.323657, 0.000539,
- 0.118804, -0.002608, 0.323553, 0.000958, 0.118826, -0.004076, 0.323595, 0.001498,
- 0.118846, -0.005868, 0.323617, 0.002160, 0.118886, -0.007986, 0.323670, 0.002947,
- 0.118947, -0.010427, 0.323753, 0.003861, 0.119055, -0.013191, 0.323922, 0.004910,
- 0.119241, -0.016244, 0.324251, 0.006108, 0.119440, -0.019634, 0.324544, 0.007458,
- 0.119739, -0.023338, 0.325026, 0.008978, 0.120110, -0.027318, 0.325586, 0.010689,
- 0.120571, -0.031614, 0.326231, 0.012607, 0.121240, -0.036194, 0.327264, 0.014765,
- 0.122162, -0.041051, 0.328733, 0.017200, 0.123378, -0.046223, 0.330659, 0.019938,
- 0.125183, -0.051711, 0.333754, 0.023050, 0.127832, -0.057565, 0.338507, 0.026597,
- 0.130909, -0.063744, 0.343666, 0.030634, 0.135221, -0.070430, 0.351063, 0.035273,
- 0.140820, -0.077636, 0.360604, 0.040614, 0.146781, -0.085229, 0.369638, 0.046679,
- 0.155121, -0.093535, 0.382700, 0.053763, 0.163980, -0.102234, 0.395220, 0.061798,
- 0.173926, -0.111465, 0.407930, 0.070970, 0.185137, -0.121296, 0.421050, 0.081343,
- 0.198260, -0.131690, 0.435735, 0.093160, 0.212938, -0.142614, 0.450932, 0.106547,
- 0.229046, -0.153884, 0.465726, 0.121575, 0.246246, -0.165382, 0.479461, 0.138286,
- 0.264637, -0.176806, 0.492106, 0.156660, 0.284959, -0.188793, 0.504774, 0.177280,
- 0.308157, -0.200763, 0.518805, 0.199880, 0.330951, -0.212390, 0.528231, 0.224293,
- 0.354900, -0.223521, 0.536376, 0.250541, 0.381502, -0.234169, 0.544846, 0.278902,
- 0.409529, -0.244077, 0.551717, 0.309227, 0.437523, -0.253363, 0.555170, 0.341426,
- 0.467624, -0.261659, 0.557772, 0.375180, 0.497268, -0.268498, 0.556442, 0.410070,
- 0.528294, -0.274018, 0.553915, 0.446445, 0.559053, -0.278169, 0.549153, 0.483779,
- 0.589329, -0.281229, 0.539878, 0.522249, 0.622503, -0.282902, 0.531620, 0.561754,
- 0.652382, -0.282815, 0.518119, 0.601544, 0.681847, -0.281247, 0.502187, 0.641574,
- 0.712285, -0.277986, 0.484824, 0.682633, 0.740094, -0.273017, 0.463483, 0.723426,
- 0.768478, -0.266692, 0.441299, 0.763747, 0.794556, -0.258358, 0.415238, 0.805565,
- 0.819408, -0.248807, 0.386912, 0.847254, 0.843411, -0.236214, 0.356165, 0.891091,
- 0.862397, -0.219794, 0.320562, 0.936174, 0.883113, -0.201768, 0.285322, 0.982562,
- 0.900230, -0.181672, 0.249713, 1.028620, 0.915192, -0.159279, 0.214546, 1.071630,
- 0.928458, -0.134725, 0.180285, 1.109950, 0.940690, -0.109130, 0.147119, 1.143540,
- 0.953409, -0.082131, 0.112492, 1.173720, 0.969537, -0.054268, 0.075201, 1.200430,
- 0.985612, -0.025910, 0.037036, 1.225280, 0.999835, 0.002982, -0.001518, 1.249590,
- 0.100970, -0.000006, 0.300277, 0.000002, 0.101577, -0.000152, 0.302077, 0.000051,
- 0.101572, -0.000609, 0.302066, 0.000205, 0.101566, -0.001370, 0.302047, 0.000461,
- 0.101592, -0.002436, 0.302114, 0.000819, 0.101608, -0.003805, 0.302140, 0.001282,
- 0.101627, -0.005479, 0.302160, 0.001848, 0.101669, -0.007456, 0.302224, 0.002522,
- 0.101732, -0.009736, 0.302318, 0.003307, 0.101844, -0.012310, 0.302513, 0.004211,
- 0.102025, -0.015168, 0.302850, 0.005245, 0.102224, -0.018333, 0.303166, 0.006415,
- 0.102515, -0.021782, 0.303654, 0.007741, 0.102886, -0.025507, 0.304243, 0.009240,
- 0.103395, -0.029514, 0.305089, 0.010934, 0.104109, -0.033791, 0.306301, 0.012856,
- 0.105074, -0.038357, 0.307980, 0.015034, 0.106540, -0.043213, 0.310726, 0.017523,
- 0.108478, -0.048424, 0.314351, 0.020365, 0.111015, -0.053934, 0.319032, 0.023633,
- 0.114682, -0.059888, 0.326050, 0.027419, 0.119110, -0.066337, 0.334109, 0.031790,
- 0.124736, -0.073301, 0.344013, 0.036850, 0.131479, -0.080774, 0.355358, 0.042710,
- 0.139283, -0.088820, 0.367614, 0.049479, 0.148054, -0.097339, 0.380072, 0.057237,
- 0.159037, -0.106650, 0.395678, 0.066270, 0.169794, -0.116221, 0.407950, 0.076319,
- 0.183140, -0.126632, 0.423546, 0.087956, 0.197515, -0.137383, 0.438213, 0.101042,
- 0.213514, -0.148641, 0.453248, 0.115827, 0.230650, -0.160117, 0.466880, 0.132283,
- 0.249148, -0.171807, 0.479962, 0.150644, 0.270219, -0.183695, 0.494618, 0.171073,
- 0.292338, -0.195574, 0.506937, 0.193378, 0.314999, -0.207205, 0.516463, 0.217585,
- 0.340991, -0.218955, 0.528123, 0.244280, 0.367982, -0.229917, 0.537025, 0.272784,
- 0.394320, -0.239737, 0.541627, 0.302742, 0.423364, -0.249048, 0.546466, 0.335112,
- 0.453751, -0.257329, 0.549466, 0.369032, 0.484160, -0.264623, 0.549503, 0.404577,
- 0.515262, -0.270411, 0.547008, 0.441337, 0.547036, -0.274581, 0.542249, 0.479162,
- 0.576614, -0.277266, 0.533015, 0.517904, 0.611143, -0.279144, 0.525512, 0.558508,
- 0.640989, -0.279001, 0.511540, 0.598995, 0.671182, -0.277324, 0.495641, 0.639935,
- 0.700848, -0.273908, 0.477526, 0.681017, 0.729862, -0.269063, 0.457955, 0.722764,
- 0.758273, -0.262282, 0.434846, 0.764349, 0.784121, -0.254281, 0.409203, 0.806206,
- 0.809798, -0.245050, 0.382694, 0.848617, 0.834953, -0.233861, 0.354034, 0.892445,
- 0.856817, -0.221308, 0.321764, 0.936263, 0.877609, -0.205996, 0.288118, 0.982401,
- 0.897489, -0.186702, 0.253277, 1.029750, 0.913792, -0.164618, 0.217963, 1.074880,
- 0.927850, -0.140023, 0.183221, 1.114870, 0.940378, -0.113280, 0.149385, 1.149470,
- 0.952730, -0.085396, 0.114152, 1.180700, 0.969059, -0.056870, 0.076984, 1.209120,
- 0.985574, -0.027650, 0.038119, 1.234980, 0.999943, 0.002391, -0.001269, 1.259870,
- 0.085272, -0.000006, 0.279021, 0.000002, 0.085414, -0.000141, 0.279483, 0.000043,
- 0.085419, -0.000563, 0.279500, 0.000172, 0.085419, -0.001268, 0.279493, 0.000387,
- 0.085423, -0.002253, 0.279501, 0.000689, 0.085444, -0.003521, 0.279549, 0.001078,
- 0.085470, -0.005070, 0.279591, 0.001555, 0.085509, -0.006899, 0.279652, 0.002124,
- 0.085572, -0.009008, 0.279752, 0.002787, 0.085699, -0.011380, 0.280011, 0.003555,
- 0.085855, -0.014031, 0.280297, 0.004434, 0.086068, -0.016963, 0.280682, 0.005436,
- 0.086344, -0.020144, 0.281159, 0.006579, 0.086743, -0.023600, 0.281886, 0.007880,
- 0.087239, -0.027307, 0.282745, 0.009361, 0.087982, -0.031269, 0.284139, 0.011056,
- 0.089126, -0.035531, 0.286470, 0.013007, 0.090691, -0.040095, 0.289708, 0.015249,
- 0.092762, -0.044964, 0.293904, 0.017845, 0.095838, -0.050243, 0.300471, 0.020892,
- 0.099583, -0.055951, 0.308060, 0.024425, 0.104526, -0.062215, 0.317874, 0.028572,
- 0.110532, -0.069005, 0.329332, 0.033423, 0.117385, -0.076307, 0.341217, 0.039047,
- 0.125220, -0.084184, 0.353968, 0.045579, 0.134037, -0.092525, 0.366797, 0.053077,
- 0.144014, -0.101487, 0.380209, 0.061742, 0.156013, -0.111273, 0.395956, 0.071777,
- 0.168872, -0.121431, 0.410530, 0.083090, 0.183089, -0.132105, 0.425073, 0.095934,
- 0.198763, -0.143286, 0.439833, 0.110448, 0.216159, -0.154841, 0.454507, 0.126769,
- 0.234859, -0.166588, 0.468368, 0.144950, 0.255879, -0.178626, 0.482846, 0.165233,
- 0.276770, -0.190218, 0.493489, 0.187217, 0.301184, -0.202227, 0.506549, 0.211659,
- 0.325852, -0.213764, 0.515800, 0.237922, 0.352824, -0.224870, 0.525442, 0.266320,
- 0.380882, -0.235246, 0.532487, 0.296691, 0.410137, -0.244847, 0.537703, 0.329179,
- 0.439787, -0.253122, 0.540361, 0.363135, 0.472291, -0.260517, 0.542734, 0.399222,
- 0.501856, -0.266519, 0.538826, 0.436352, 0.534816, -0.270905, 0.535152, 0.474505,
- 0.565069, -0.273826, 0.525979, 0.513988, 0.597154, -0.275333, 0.516394, 0.554852,
- 0.630473, -0.275314, 0.506206, 0.596592, 0.660574, -0.273323, 0.489769, 0.638117,
- 0.692015, -0.270008, 0.472578, 0.680457, 0.720647, -0.265001, 0.452134, 0.723008,
- 0.750528, -0.258311, 0.430344, 0.765954, 0.777568, -0.250046, 0.405624, 0.809012,
- 0.803870, -0.240114, 0.378339, 0.852425, 0.828439, -0.228737, 0.349877, 0.895346,
- 0.851472, -0.216632, 0.318968, 0.940695, 0.873906, -0.202782, 0.287489, 0.987235,
- 0.894670, -0.187059, 0.254394, 1.033480, 0.912281, -0.168818, 0.221294, 1.078120,
- 0.927358, -0.146494, 0.186750, 1.119280, 0.940385, -0.120009, 0.152322, 1.156090,
- 0.952672, -0.091718, 0.117514, 1.188750, 0.968496, -0.062032, 0.079741, 1.218210,
- 0.985236, -0.031495, 0.040238, 1.245230, 0.999980, -0.000575, 0.000111, 1.271330,
- 0.070243, -0.000005, 0.255273, 0.000001, 0.070298, -0.000129, 0.255469, 0.000035,
- 0.070369, -0.000516, 0.255727, 0.000142, 0.070380, -0.001160, 0.255754, 0.000319,
- 0.070396, -0.002062, 0.255813, 0.000568, 0.070410, -0.003222, 0.255839, 0.000889,
- 0.070430, -0.004639, 0.255863, 0.001283, 0.070476, -0.006314, 0.255953, 0.001753,
- 0.070543, -0.008243, 0.256079, 0.002303, 0.070669, -0.010412, 0.256360, 0.002944,
- 0.070819, -0.012844, 0.256647, 0.003680, 0.071036, -0.015518, 0.257084, 0.004526,
- 0.071322, -0.018437, 0.257637, 0.005497, 0.071718, -0.021600, 0.258416, 0.006612,
- 0.072321, -0.024997, 0.259699, 0.007901, 0.073145, -0.028657, 0.261475, 0.009388,
- 0.074335, -0.032589, 0.264132, 0.011119, 0.076068, -0.036843, 0.268150, 0.013145,
- 0.078454, -0.041429, 0.273636, 0.015525, 0.081862, -0.046463, 0.281653, 0.018353,
- 0.085738, -0.051948, 0.289992, 0.021664, 0.090813, -0.057984, 0.300660, 0.025596,
- 0.096751, -0.064512, 0.312204, 0.030195, 0.103717, -0.071651, 0.325001, 0.035602,
- 0.111596, -0.079323, 0.338129, 0.041896, 0.120933, -0.087645, 0.352853, 0.049245,
- 0.130787, -0.096492, 0.366192, 0.057675, 0.142311, -0.105973, 0.380864, 0.067397,
- 0.155344, -0.116182, 0.396575, 0.078590, 0.169535, -0.126815, 0.411443, 0.091238,
- 0.185173, -0.138015, 0.426256, 0.105607, 0.201755, -0.149325, 0.439607, 0.121551,
- 0.221334, -0.161207, 0.455467, 0.139608, 0.241461, -0.173162, 0.469096, 0.159591,
- 0.262940, -0.185040, 0.481014, 0.181560, 0.286776, -0.196881, 0.493291, 0.205781,
- 0.311596, -0.208311, 0.503556, 0.231819, 0.338667, -0.219671, 0.513268, 0.260274,
- 0.366021, -0.230451, 0.519414, 0.290862, 0.395875, -0.240131, 0.526766, 0.323196,
- 0.425564, -0.248566, 0.529050, 0.357071, 0.457094, -0.256195, 0.530796, 0.393262,
- 0.488286, -0.262331, 0.528703, 0.430797, 0.522291, -0.267141, 0.527270, 0.470231,
- 0.554172, -0.270411, 0.519848, 0.510477, 0.586427, -0.271986, 0.510307, 0.551594,
- 0.619638, -0.271920, 0.499158, 0.593849, 0.650656, -0.269817, 0.483852, 0.636314,
- 0.682840, -0.266267, 0.467515, 0.679679, 0.714356, -0.261130, 0.449310, 0.723884,
- 0.742717, -0.254067, 0.425789, 0.767245, 0.770894, -0.245652, 0.401144, 0.811819,
- 0.797358, -0.235554, 0.374224, 0.856315, 0.823377, -0.223896, 0.346167, 0.901077,
- 0.847456, -0.210865, 0.316056, 0.946502, 0.870697, -0.196574, 0.284503, 0.993711,
- 0.891068, -0.180814, 0.251628, 1.041340, 0.909267, -0.163314, 0.219065, 1.086090,
- 0.925653, -0.143304, 0.186446, 1.127020, 0.940017, -0.121322, 0.153416, 1.163710,
- 0.952398, -0.097387, 0.120334, 1.197120, 0.967568, -0.069878, 0.083520, 1.227910,
- 0.984772, -0.039003, 0.043921, 1.256720, 1.000260, -0.007009, 0.003157, 1.284280,
- 0.055665, -0.000005, 0.227325, 0.000001, 0.056524, -0.000116, 0.230826, 0.000028,
- 0.056572, -0.000466, 0.231026, 0.000114, 0.056586, -0.001048, 0.231079, 0.000257,
- 0.056576, -0.001863, 0.231025, 0.000457, 0.056591, -0.002910, 0.231058, 0.000715,
- 0.056611, -0.004190, 0.231085, 0.001032, 0.056653, -0.005702, 0.231169, 0.001412,
- 0.056747, -0.007437, 0.231417, 0.001860, 0.056857, -0.009403, 0.231661, 0.002383,
- 0.056986, -0.011599, 0.231895, 0.002987, 0.057222, -0.014010, 0.232456, 0.003690,
- 0.057519, -0.016651, 0.233096, 0.004503, 0.057953, -0.019510, 0.234094, 0.005449,
- 0.058592, -0.022599, 0.235629, 0.006556, 0.059565, -0.025942, 0.238106, 0.007857,
- 0.060911, -0.029566, 0.241557, 0.009391, 0.062875, -0.033513, 0.246652, 0.011220,
- 0.065691, -0.037860, 0.254091, 0.013417, 0.069135, -0.042654, 0.262666, 0.016037,
- 0.073217, -0.047897, 0.272029, 0.019151, 0.078286, -0.053672, 0.283007, 0.022860,
- 0.084397, -0.060068, 0.295732, 0.027283, 0.091360, -0.067009, 0.308779, 0.032484,
- 0.099441, -0.074552, 0.322886, 0.038589, 0.108189, -0.082712, 0.336408, 0.045713,
- 0.118574, -0.091493, 0.351692, 0.053983, 0.129989, -0.100854, 0.366502, 0.063516,
- 0.142722, -0.110837, 0.381675, 0.074439, 0.156654, -0.121353, 0.396300, 0.086848,
- 0.172151, -0.132414, 0.411477, 0.100963, 0.188712, -0.143809, 0.425080, 0.116795,
- 0.208093, -0.155765, 0.441328, 0.134715, 0.227936, -0.167608, 0.454328, 0.154396,
- 0.249495, -0.179579, 0.467235, 0.176179, 0.273620, -0.191488, 0.480248, 0.200193,
- 0.296371, -0.202618, 0.487886, 0.225775, 0.324234, -0.214133, 0.499632, 0.254410,
- 0.353049, -0.225212, 0.509532, 0.285077, 0.381785, -0.234875, 0.514265, 0.317047,
- 0.414038, -0.244205, 0.521282, 0.351874, 0.445251, -0.252145, 0.522931, 0.388279,
- 0.476819, -0.258433, 0.520947, 0.425825, 0.509209, -0.263411, 0.517669, 0.465104,
- 0.542759, -0.266732, 0.512841, 0.505741, 0.574822, -0.268263, 0.503317, 0.547611,
- 0.609324, -0.268489, 0.493035, 0.590953, 0.641772, -0.266941, 0.478816, 0.634880,
- 0.674049, -0.263297, 0.462863, 0.679072, 0.705071, -0.257618, 0.442931, 0.723487,
- 0.734709, -0.250625, 0.421299, 0.768708, 0.763704, -0.241790, 0.397085, 0.814375,
- 0.791818, -0.231115, 0.370577, 0.859907, 0.817439, -0.219220, 0.342320, 0.906715,
- 0.843202, -0.205658, 0.312627, 0.953943, 0.866639, -0.190563, 0.280933, 1.001850,
- 0.888129, -0.173978, 0.248393, 1.051050, 0.907239, -0.155485, 0.216007, 1.097040,
- 0.923893, -0.134782, 0.183233, 1.138570, 0.938882, -0.112490, 0.150376, 1.175390,
- 0.952464, -0.089071, 0.117177, 1.209240, 0.968529, -0.064652, 0.081310, 1.240550,
- 0.984763, -0.038606, 0.043938, 1.270180, 1.000530, -0.012380, 0.005987, 1.298730,
- 0.043793, -0.000004, 0.204012, 0.000001, 0.044017, -0.000103, 0.205049, 0.000022,
- 0.044053, -0.000414, 0.205225, 0.000089, 0.044049, -0.000931, 0.205200, 0.000200,
- 0.043988, -0.001654, 0.204901, 0.000355, 0.044072, -0.002585, 0.205255, 0.000557,
- 0.044097, -0.003722, 0.205311, 0.000805, 0.044136, -0.005065, 0.205391, 0.001103,
- 0.044223, -0.006604, 0.205638, 0.001458, 0.044325, -0.008352, 0.205877, 0.001873,
- 0.044483, -0.010299, 0.206270, 0.002359, 0.044700, -0.012445, 0.206796, 0.002930,
- 0.045017, -0.014793, 0.207593, 0.003600, 0.045482, -0.017336, 0.208819, 0.004392,
- 0.046245, -0.020116, 0.211036, 0.005339, 0.047369, -0.023157, 0.214388, 0.006470,
- 0.049019, -0.026494, 0.219357, 0.007839, 0.051278, -0.030184, 0.226061, 0.009502,
- 0.054128, -0.034266, 0.234094, 0.011516, 0.057899, -0.038854, 0.244297, 0.013969,
- 0.062083, -0.043874, 0.254457, 0.016901, 0.067350, -0.049510, 0.266706, 0.020455,
- 0.073176, -0.055626, 0.278753, 0.024661, 0.080394, -0.062459, 0.293090, 0.029713,
- 0.087929, -0.069756, 0.305856, 0.035587, 0.097067, -0.077880, 0.321059, 0.042577,
- 0.106508, -0.086354, 0.333873, 0.050560, 0.117760, -0.095593, 0.349008, 0.059897,
- 0.130081, -0.105438, 0.363776, 0.070631, 0.144454, -0.115899, 0.380112, 0.082882,
- 0.159600, -0.126827, 0.394843, 0.096761, 0.176097, -0.138161, 0.409033, 0.112381,
- 0.194726, -0.149904, 0.424257, 0.129952, 0.213944, -0.161675, 0.436945, 0.149333,
- 0.235516, -0.173659, 0.450176, 0.170892, 0.260564, -0.185963, 0.466305, 0.194984,
- 0.285183, -0.197582, 0.477328, 0.220805, 0.311095, -0.208697, 0.486566, 0.248694,
- 0.338924, -0.219519, 0.494811, 0.279015, 0.369757, -0.229766, 0.504065, 0.311725,
- 0.399600, -0.238879, 0.507909, 0.345844, 0.430484, -0.246802, 0.509805, 0.381749,
- 0.464130, -0.253924, 0.511436, 0.420251, 0.497077, -0.259319, 0.508787, 0.459957,
- 0.530434, -0.263297, 0.503940, 0.501356, 0.565725, -0.265619, 0.498040, 0.544252,
- 0.599254, -0.265842, 0.487346, 0.587856, 0.631251, -0.263978, 0.472975, 0.631969,
- 0.663972, -0.260430, 0.457135, 0.677471, 0.697724, -0.255358, 0.439844, 0.723744,
- 0.727725, -0.248308, 0.417872, 0.770653, 0.756417, -0.239181, 0.392730, 0.817357,
- 0.785419, -0.228140, 0.367839, 0.864221, 0.812660, -0.215681, 0.339449, 0.912701,
- 0.839391, -0.201623, 0.309279, 0.962419, 0.863660, -0.185624, 0.278029, 1.012200,
- 0.885028, -0.167970, 0.245294, 1.061860, 0.904639, -0.148336, 0.212689, 1.109340,
- 0.922048, -0.126370, 0.179616, 1.150630, 0.936952, -0.102928, 0.146749, 1.188850,
- 0.951895, -0.078527, 0.112733, 1.223520, 0.967198, -0.053015, 0.076006, 1.256810,
- 0.984405, -0.026490, 0.038318, 1.287620, 1.000210, 0.000700, -0.000200, 1.316560,
- 0.032596, -0.000004, 0.176706, 0.000001, 0.032933, -0.000090, 0.178527, 0.000017,
- 0.032918, -0.000360, 0.178453, 0.000066, 0.032909, -0.000809, 0.178383, 0.000149,
- 0.032918, -0.001438, 0.178394, 0.000266, 0.032942, -0.002247, 0.178517, 0.000417,
- 0.032951, -0.003236, 0.178490, 0.000603, 0.033011, -0.004399, 0.178695, 0.000829,
- 0.033073, -0.005741, 0.178843, 0.001099, 0.033186, -0.007259, 0.179176, 0.001419,
- 0.033344, -0.008953, 0.179618, 0.001800, 0.033567, -0.010822, 0.180238, 0.002253,
- 0.033939, -0.012869, 0.181417, 0.002798, 0.034524, -0.015114, 0.183395, 0.003456,
- 0.035446, -0.017596, 0.186616, 0.004259, 0.036831, -0.020352, 0.191547, 0.005249,
- 0.038611, -0.023411, 0.197508, 0.006470, 0.041030, -0.026851, 0.205395, 0.007981,
- 0.044224, -0.030748, 0.215365, 0.009856, 0.047866, -0.035086, 0.225595, 0.012142,
- 0.052242, -0.039951, 0.236946, 0.014939, 0.057451, -0.045357, 0.249442, 0.018319,
- 0.063121, -0.051286, 0.261222, 0.022364, 0.070112, -0.057927, 0.275418, 0.027242,
- 0.077733, -0.065065, 0.288989, 0.032946, 0.086271, -0.072881, 0.302546, 0.039682,
- 0.096103, -0.081363, 0.317164, 0.047570, 0.106976, -0.090446, 0.331733, 0.056701,
- 0.119175, -0.100105, 0.346610, 0.067202, 0.132919, -0.110375, 0.362249, 0.079259,
- 0.147727, -0.121115, 0.376978, 0.092867, 0.163618, -0.132299, 0.390681, 0.108228,
- 0.182234, -0.143887, 0.406571, 0.125502, 0.201809, -0.155827, 0.420420, 0.144836,
- 0.225041, -0.168357, 0.438411, 0.166706, 0.247621, -0.180040, 0.450368, 0.189909,
- 0.270970, -0.191536, 0.460083, 0.215251, 0.296658, -0.203024, 0.469765, 0.243164,
- 0.325892, -0.214056, 0.481837, 0.273388, 0.354060, -0.224104, 0.487474, 0.305344,
- 0.384372, -0.233489, 0.492773, 0.339741, 0.417490, -0.241874, 0.498451, 0.376287,
- 0.450130, -0.248834, 0.499632, 0.414195, 0.481285, -0.254658, 0.495233, 0.454077,
- 0.519183, -0.259367, 0.496401, 0.496352, 0.551544, -0.261818, 0.487686, 0.538798,
- 0.587349, -0.262964, 0.479453, 0.583626, 0.621679, -0.262128, 0.467709, 0.629451,
- 0.654991, -0.258998, 0.452123, 0.675660, 0.686873, -0.254119, 0.433495, 0.723248,
- 0.719801, -0.246946, 0.413657, 0.771156, 0.750355, -0.237709, 0.390366, 0.819890,
- 0.780033, -0.226549, 0.364947, 0.868601, 0.809254, -0.214186, 0.337256, 0.920034,
- 0.836576, -0.199639, 0.307395, 0.971706, 0.861774, -0.183169, 0.275431, 1.024790,
- 0.885707, -0.165111, 0.243431, 1.078370, 0.904742, -0.144363, 0.210921, 1.127830,
- 0.915604, -0.121305, 0.176470, 1.172540, 0.930959, -0.096212, 0.143106, 1.210120,
- 0.948404, -0.069969, 0.108112, 1.244740, 0.967012, -0.042759, 0.070848, 1.277180,
- 0.984183, -0.014704, 0.032335, 1.308300, 0.999577, 0.014216, -0.007269, 1.338200,
- 0.022923, -0.000003, 0.148623, 0.000000, 0.023219, -0.000076, 0.150540, 0.000012,
- 0.023231, -0.000304, 0.150630, 0.000047, 0.023235, -0.000683, 0.150624, 0.000105,
- 0.023209, -0.001214, 0.150445, 0.000188, 0.023252, -0.001898, 0.150679, 0.000295,
- 0.023283, -0.002732, 0.150789, 0.000428, 0.023337, -0.003713, 0.150995, 0.000591,
- 0.023401, -0.004848, 0.151180, 0.000788, 0.023514, -0.006129, 0.151562, 0.001025,
- 0.023679, -0.007561, 0.152116, 0.001314, 0.023956, -0.009147, 0.153162, 0.001666,
- 0.024433, -0.010904, 0.155133, 0.002102, 0.025139, -0.012861, 0.158035, 0.002644,
- 0.026260, -0.015063, 0.162751, 0.003329, 0.027787, -0.017553, 0.168944, 0.004198,
- 0.029847, -0.020398, 0.176835, 0.005300, 0.032544, -0.023655, 0.186686, 0.006698,
- 0.035558, -0.027298, 0.196248, 0.008427, 0.039284, -0.031446, 0.207352, 0.010585,
- 0.043681, -0.036116, 0.219279, 0.013246, 0.048527, -0.041293, 0.230728, 0.016474,
- 0.054157, -0.047034, 0.242994, 0.020372, 0.060948, -0.053500, 0.257042, 0.025095,
- 0.068523, -0.060541, 0.271020, 0.030686, 0.076804, -0.068055, 0.284060, 0.037193,
- 0.086484, -0.076501, 0.299186, 0.044979, 0.096941, -0.085267, 0.313200, 0.053832,
- 0.108478, -0.094733, 0.327138, 0.064115, 0.121705, -0.104810, 0.342345, 0.075918,
- 0.136743, -0.115474, 0.358472, 0.089412, 0.152986, -0.126536, 0.374067, 0.104562,
- 0.170397, -0.138061, 0.388267, 0.121632, 0.191392, -0.150203, 0.406467, 0.140996,
- 0.211566, -0.161751, 0.418641, 0.161696, 0.233567, -0.173407, 0.430418, 0.184557,
- 0.257769, -0.185397, 0.442770, 0.210092, 0.285310, -0.197048, 0.457191, 0.237827,
- 0.311726, -0.207840, 0.464712, 0.267253, 0.340537, -0.218345, 0.472539, 0.299332,
- 0.372921, -0.228306, 0.482331, 0.333988, 0.402924, -0.236665, 0.484378, 0.369722,
- 0.434475, -0.244097, 0.484717, 0.407836, 0.469736, -0.250547, 0.487093, 0.448465,
- 0.505045, -0.255110, 0.485575, 0.490263, 0.540262, -0.258444, 0.481225, 0.534495,
- 0.576347, -0.259903, 0.473481, 0.579451, 0.608656, -0.259572, 0.460300, 0.625604,
- 0.646679, -0.257908, 0.450341, 0.674511, 0.679902, -0.253663, 0.431561, 0.723269,
- 0.714159, -0.247419, 0.412684, 0.773263, 0.745345, -0.239122, 0.389388, 0.824182,
- 0.778248, -0.228837, 0.365361, 0.876634, 0.807208, -0.216197, 0.337667, 0.929450,
- 0.835019, -0.201772, 0.307197, 0.985261, 0.860261, -0.185291, 0.274205, 1.042990,
- 0.877601, -0.165809, 0.240178, 1.098160, 0.898211, -0.143897, 0.207571, 1.146940,
- 0.915789, -0.119513, 0.174904, 1.190080, 0.931831, -0.093292, 0.141423, 1.229700,
- 0.949244, -0.065653, 0.105603, 1.265530, 0.967527, -0.037026, 0.067955, 1.299860,
- 0.984139, -0.007301, 0.028313, 1.332520, 0.999713, 0.023465, -0.012179, 1.363970,
- 0.015213, -0.000002, 0.122795, 0.000000, 0.015165, -0.000062, 0.122399, 0.000008,
- 0.015118, -0.000246, 0.122023, 0.000030, 0.015120, -0.000553, 0.122030, 0.000069,
- 0.015125, -0.000984, 0.122037, 0.000122, 0.015143, -0.001538, 0.122140, 0.000193,
- 0.015171, -0.002210, 0.122237, 0.000281, 0.015211, -0.003007, 0.122380, 0.000391,
- 0.015288, -0.003925, 0.122700, 0.000526, 0.015412, -0.004966, 0.123244, 0.000694,
- 0.015620, -0.006133, 0.124228, 0.000905, 0.015966, -0.007441, 0.125945, 0.001173,
- 0.016567, -0.008925, 0.129098, 0.001519, 0.017487, -0.010627, 0.133865, 0.001970,
- 0.018839, -0.012604, 0.140682, 0.002564, 0.020554, -0.014881, 0.148534, 0.003336,
- 0.022673, -0.017512, 0.157381, 0.004337, 0.025188, -0.020527, 0.166685, 0.005617,
- 0.028363, -0.024032, 0.177796, 0.007256, 0.031869, -0.027943, 0.188251, 0.009288,
- 0.036104, -0.032431, 0.200038, 0.011835, 0.040666, -0.037353, 0.210685, 0.014915,
- 0.046385, -0.043013, 0.224182, 0.018725, 0.052570, -0.049101, 0.236340, 0.023228,
- 0.059808, -0.055918, 0.250013, 0.028652, 0.067944, -0.063366, 0.263981, 0.035063,
- 0.077118, -0.071460, 0.278072, 0.042588, 0.088127, -0.080350, 0.295110, 0.051449,
- 0.099663, -0.089690, 0.309976, 0.061577, 0.112702, -0.099644, 0.325611, 0.073214,
- 0.126488, -0.109829, 0.339321, 0.086232, 0.142625, -0.120859, 0.355740, 0.101275,
- 0.159530, -0.131956, 0.369845, 0.117892, 0.176991, -0.143145, 0.381460, 0.136205,
- 0.199715, -0.155292, 0.400520, 0.157252, 0.220787, -0.167066, 0.412055, 0.179966,
- 0.243697, -0.178396, 0.423133, 0.204418, 0.272106, -0.190433, 0.439524, 0.232141,
- 0.297637, -0.201265, 0.447041, 0.261109, 0.325273, -0.211834, 0.454488, 0.292627,
- 0.357219, -0.221889, 0.465004, 0.326669, 0.387362, -0.230729, 0.468527, 0.362426,
- 0.423131, -0.239240, 0.475836, 0.401533, 0.455430, -0.246067, 0.475017, 0.441902,
- 0.493393, -0.251557, 0.478017, 0.484239, 0.526253, -0.255571, 0.470900, 0.528586,
- 0.560554, -0.257752, 0.463167, 0.574346, 0.599306, -0.258076, 0.456452, 0.621655,
- 0.634541, -0.256471, 0.443725, 0.670492, 0.668907, -0.253283, 0.428719, 0.721943,
- 0.705619, -0.247562, 0.411348, 0.772477, 0.739034, -0.240626, 0.388939, 0.826400,
- 0.771408, -0.231493, 0.364250, 0.881702, 0.803312, -0.220125, 0.337321, 0.938500,
- 0.828457, -0.206645, 0.305364, 0.997437, 0.854819, -0.190664, 0.273715, 1.056930,
- 0.878666, -0.171429, 0.242218, 1.112510, 0.898404, -0.149235, 0.209556, 1.163980,
- 0.917416, -0.124350, 0.176863, 1.210140, 0.933133, -0.097270, 0.142775, 1.251780,
- 0.950660, -0.068361, 0.106735, 1.290280, 0.968589, -0.037872, 0.068161, 1.327030,
- 0.984776, -0.006057, 0.027397, 1.361580, 0.999940, 0.026328, -0.013812, 1.394300,
- 0.008674, -0.000002, 0.092898, 0.000000, 0.008640, -0.000047, 0.092524, 0.000004,
- 0.008646, -0.000187, 0.092581, 0.000017, 0.008641, -0.000420, 0.092490, 0.000039,
- 0.008639, -0.000746, 0.092459, 0.000070, 0.008685, -0.001165, 0.092900, 0.000111,
- 0.008697, -0.001677, 0.092853, 0.000164, 0.008743, -0.002281, 0.093091, 0.000231,
- 0.008827, -0.002979, 0.093568, 0.000317, 0.008989, -0.003776, 0.094617, 0.000430,
- 0.009293, -0.004692, 0.096741, 0.000580, 0.009783, -0.005755, 0.100084, 0.000784,
- 0.010575, -0.007015, 0.105447, 0.001063, 0.011695, -0.008518, 0.112494, 0.001447,
- 0.013042, -0.010276, 0.119876, 0.001964, 0.014837, -0.012381, 0.129034, 0.002664,
- 0.016872, -0.014820, 0.137812, 0.003584, 0.019369, -0.017656, 0.147696, 0.004781,
- 0.022269, -0.020921, 0.157795, 0.006317, 0.025689, -0.024665, 0.168431, 0.008263,
- 0.029469, -0.028860, 0.178587, 0.010671, 0.034041, -0.033644, 0.190251, 0.013663,
- 0.039392, -0.039033, 0.202999, 0.017327, 0.045395, -0.045009, 0.215655, 0.021745,
- 0.052194, -0.051546, 0.228686, 0.026994, 0.060028, -0.058817, 0.242838, 0.033272,
- 0.069240, -0.066723, 0.258145, 0.040646, 0.079383, -0.075240, 0.273565, 0.049224,
- 0.090230, -0.084185, 0.287735, 0.059011, 0.102014, -0.093648, 0.301161, 0.070202,
- 0.116054, -0.103967, 0.317438, 0.083200, 0.131910, -0.114622, 0.334166, 0.097795,
- 0.148239, -0.125452, 0.348192, 0.113985, 0.165809, -0.136453, 0.361094, 0.131928,
- 0.184616, -0.147648, 0.373534, 0.151811, 0.207491, -0.159607, 0.391010, 0.174476,
- 0.230106, -0.171119, 0.402504, 0.198798, 0.257036, -0.182906, 0.418032, 0.225796,
- 0.281172, -0.193605, 0.425468, 0.254027, 0.312034, -0.204771, 0.440379, 0.285713,
- 0.340402, -0.214988, 0.445406, 0.319196, 0.370231, -0.224711, 0.449680, 0.355370,
- 0.407105, -0.233516, 0.460747, 0.393838, 0.439037, -0.240801, 0.460624, 0.433747,
- 0.477810, -0.247620, 0.465957, 0.477234, 0.510655, -0.251823, 0.460054, 0.520440,
- 0.550584, -0.255552, 0.459172, 0.567853, 0.585872, -0.257036, 0.450311, 0.615943,
- 0.620466, -0.257535, 0.437763, 0.667693, 0.660496, -0.255248, 0.426639, 0.718988,
- 0.695578, -0.251141, 0.409185, 0.772503, 0.732176, -0.244718, 0.390150, 0.827023,
- 0.760782, -0.236782, 0.362594, 0.885651, 0.794220, -0.225923, 0.337110, 0.943756,
- 0.824521, -0.213855, 0.308272, 1.008740, 0.854964, -0.197723, 0.278529, 1.067640,
- 0.878065, -0.179209, 0.246208, 1.128360, 0.899834, -0.157569, 0.213290, 1.183180,
- 0.918815, -0.133206, 0.181038, 1.231610, 0.934934, -0.106545, 0.146993, 1.276440,
- 0.952115, -0.078057, 0.111175, 1.318420, 0.969060, -0.047828, 0.072855, 1.358390,
- 0.985178, -0.016001, 0.032579, 1.396970, 1.000390, 0.017313, -0.009526, 1.433120,
- 0.003841, -0.000001, 0.061358, 0.000000, 0.003900, -0.000031, 0.062292, 0.000002,
- 0.003900, -0.000126, 0.062263, 0.000008, 0.003895, -0.000282, 0.062066, 0.000018,
- 0.003916, -0.000503, 0.062469, 0.000032, 0.003927, -0.000784, 0.062511, 0.000052,
- 0.003961, -0.001129, 0.062817, 0.000078, 0.004019, -0.001538, 0.063329, 0.000114,
- 0.004150, -0.002021, 0.064644, 0.000164, 0.004412, -0.002600, 0.067389, 0.000238,
- 0.004844, -0.003310, 0.071653, 0.000346, 0.005491, -0.004190, 0.077500, 0.000506,
- 0.006363, -0.005273, 0.084476, 0.000739, 0.007466, -0.006604, 0.092133, 0.001073,
- 0.008766, -0.008188, 0.099707, 0.001537, 0.010313, -0.010081, 0.107433, 0.002172,
- 0.012331, -0.012364, 0.117088, 0.003034, 0.014627, -0.015001, 0.126438, 0.004160,
- 0.017229, -0.018053, 0.135672, 0.005615, 0.020425, -0.021596, 0.146244, 0.007478,
- 0.024160, -0.025623, 0.157481, 0.009810, 0.028469, -0.030221, 0.169125, 0.012715,
- 0.033445, -0.035333, 0.181659, 0.016245, 0.039125, -0.041085, 0.194400, 0.020542,
- 0.045472, -0.047345, 0.207082, 0.025633, 0.053098, -0.054286, 0.221656, 0.031704,
- 0.061536, -0.061838, 0.236036, 0.038832, 0.070336, -0.069763, 0.248398, 0.046974,
- 0.081039, -0.078476, 0.263611, 0.056525, 0.092014, -0.087349, 0.275857, 0.067172,
- 0.105584, -0.097365, 0.292555, 0.079811, 0.119506, -0.107271, 0.306333, 0.093594,
- 0.134434, -0.117608, 0.318888, 0.109106, 0.153399, -0.128938, 0.337552, 0.127074,
- 0.171258, -0.139944, 0.349955, 0.146430, 0.191059, -0.151288, 0.361545, 0.168000,
- 0.215069, -0.163018, 0.378421, 0.192082, 0.237838, -0.174226, 0.388790, 0.217838,
- 0.266965, -0.186063, 0.405857, 0.246931, 0.292827, -0.196909, 0.414146, 0.277505,
- 0.324352, -0.207473, 0.426955, 0.310711, 0.354427, -0.217713, 0.433429, 0.346794,
- 0.389854, -0.227183, 0.443966, 0.385237, 0.420749, -0.235131, 0.444710, 0.424955,
- 0.459597, -0.242786, 0.451729, 0.468446, 0.495316, -0.248767, 0.450720, 0.513422,
- 0.534903, -0.253351, 0.450924, 0.560618, 0.572369, -0.256277, 0.445266, 0.609677,
- 0.612383, -0.257600, 0.438798, 0.660995, 0.644037, -0.256931, 0.421693, 0.713807,
- 0.686749, -0.254036, 0.410900, 0.767616, 0.719814, -0.249785, 0.390151, 0.825330,
- 0.754719, -0.244283, 0.367847, 0.888311, 0.792022, -0.235076, 0.345013, 0.948177,
- 0.822404, -0.225061, 0.316193, 1.016610, 0.853084, -0.211113, 0.287013, 1.080750,
- 0.879871, -0.194490, 0.255424, 1.145010, 0.901655, -0.174023, 0.222879, 1.202030,
- 0.919957, -0.150900, 0.189890, 1.256980, 0.938412, -0.124923, 0.156060, 1.305880,
- 0.953471, -0.096814, 0.120512, 1.352900, 0.970451, -0.066734, 0.082851, 1.398600,
- 0.985522, -0.034734, 0.042446, 1.441480, 1.000990, -0.001022, 0.000679, 1.483980,
- 0.000965, -0.000001, 0.030641, 0.000000, 0.000992, -0.000016, 0.031464, 0.000000,
- 0.000991, -0.000063, 0.031363, 0.000002, 0.000975, -0.000141, 0.030360, 0.000005,
- 0.000998, -0.000253, 0.031496, 0.000009, 0.001022, -0.000397, 0.031996, 0.000015,
- 0.001079, -0.000578, 0.033138, 0.000025, 0.001216, -0.000817, 0.035940, 0.000042,
- 0.001445, -0.001138, 0.039965, 0.000072, 0.001788, -0.001570, 0.045056, 0.000124,
- 0.002257, -0.002141, 0.050803, 0.000209, 0.002856, -0.002877, 0.056844, 0.000342,
- 0.003599, -0.003803, 0.063089, 0.000544, 0.004555, -0.004963, 0.070220, 0.000842,
- 0.005691, -0.006379, 0.077343, 0.001267, 0.007169, -0.008135, 0.086084, 0.001866,
- 0.008853, -0.010195, 0.094408, 0.002670, 0.010932, -0.012639, 0.103951, 0.003740,
- 0.013370, -0.015488, 0.113786, 0.005130, 0.016153, -0.018732, 0.123477, 0.006889,
- 0.019427, -0.022465, 0.133986, 0.009106, 0.023097, -0.026598, 0.143979, 0.011807,
- 0.027363, -0.031285, 0.154645, 0.015127, 0.032390, -0.036595, 0.166765, 0.019179,
- 0.037922, -0.042291, 0.177932, 0.023924, 0.044750, -0.048747, 0.191670, 0.029657,
- 0.051939, -0.055640, 0.203224, 0.036292, 0.059946, -0.063165, 0.215652, 0.044059,
- 0.070243, -0.071431, 0.232089, 0.053162, 0.080690, -0.080061, 0.245258, 0.063456,
- 0.092319, -0.089281, 0.258609, 0.075248, 0.106938, -0.099310, 0.276654, 0.088891,
- 0.121238, -0.109575, 0.289847, 0.104055, 0.138817, -0.120461, 0.307566, 0.121266,
- 0.155950, -0.131209, 0.320117, 0.139944, 0.178418, -0.143049, 0.339677, 0.161591,
- 0.197875, -0.154074, 0.349886, 0.184303, 0.224368, -0.166307, 0.369352, 0.210669,
- 0.252213, -0.178051, 0.386242, 0.238895, 0.277321, -0.189335, 0.395294, 0.269182,
- 0.310332, -0.200683, 0.412148, 0.302508, 0.338809, -0.210856, 0.418266, 0.337264,
- 0.372678, -0.220655, 0.428723, 0.374881, 0.405632, -0.230053, 0.433887, 0.415656,
- 0.442293, -0.237993, 0.439911, 0.457982, 0.477256, -0.244897, 0.440175, 0.502831,
- 0.515592, -0.250657, 0.441079, 0.550277, 0.550969, -0.255459, 0.435219, 0.601102,
- 0.592883, -0.257696, 0.432882, 0.651785, 0.629092, -0.259894, 0.421054, 0.708961,
- 0.672033, -0.258592, 0.411770, 0.763806, 0.709147, -0.256525, 0.395267, 0.824249,
- 0.745367, -0.254677, 0.375013, 0.895100, 0.784715, -0.247892, 0.353906, 0.959317,
- 0.818107, -0.240162, 0.327801, 1.031530, 0.847895, -0.229741, 0.298821, 1.106010,
- 0.879603, -0.213084, 0.269115, 1.164000, 0.902605, -0.195242, 0.236606, 1.228540,
- 0.922788, -0.174505, 0.203442, 1.290170, 0.944831, -0.150169, 0.169594, 1.341570,
- 0.959656, -0.124099, 0.135909, 1.395600, 0.972399, -0.096063, 0.099056, 1.451280,
- 0.986549, -0.065710, 0.060235, 1.503120, 1.000130, -0.033356, 0.018669, 1.553640,
- 0.000006, -0.000000, 0.007783, 0.000000, 0.000000, -0.000000, 0.000028, 0.000000,
- 0.000001, -0.000002, 0.000250, 0.000000, 0.000004, -0.000006, 0.000357, 0.000000,
- 0.000008, -0.000017, 0.000516, 0.000000, 0.000024, -0.000045, 0.001022, 0.000001,
- 0.000046, -0.000089, 0.001443, 0.000004, 0.000097, -0.000178, 0.002419, 0.000010,
- 0.000171, -0.000314, 0.003549, 0.000024, 0.000293, -0.000520, 0.005138, 0.000050,
- 0.000790, -0.001182, 0.023862, 0.000139, 0.001141, -0.001718, 0.028669, 0.000244,
- 0.001761, -0.002497, 0.036857, 0.000421, 0.002223, -0.003337, 0.040047, 0.000657,
- 0.003434, -0.004820, 0.053575, 0.001093, 0.004276, -0.006008, 0.057099, 0.001553,
- 0.004614, -0.007376, 0.055108, 0.002150, 0.006957, -0.009714, 0.071577, 0.003165,
- 0.008676, -0.012094, 0.079331, 0.004370, 0.010669, -0.014820, 0.086939, 0.005896,
- 0.014035, -0.018350, 0.101572, 0.007988, 0.016894, -0.022006, 0.110180, 0.010423,
- 0.020197, -0.026157, 0.119041, 0.013417, 0.025470, -0.031278, 0.135404, 0.017301,
- 0.029838, -0.036247, 0.143700, 0.021543, 0.035159, -0.042237, 0.155120, 0.026888,
- 0.042769, -0.048871, 0.171280, 0.033235, 0.049485, -0.055800, 0.181813, 0.040444,
- 0.059239, -0.063558, 0.198745, 0.049004, 0.068146, -0.071838, 0.210497, 0.058824,
- 0.080475, -0.080930, 0.228864, 0.070283, 0.094220, -0.090649, 0.247008, 0.083401,
- 0.106777, -0.100216, 0.258812, 0.097595, 0.124471, -0.110827, 0.278617, 0.114162,
- 0.138389, -0.121193, 0.287049, 0.131983, 0.159543, -0.132530, 0.307151, 0.152541,
- 0.176432, -0.143611, 0.315640, 0.174673, 0.201723, -0.155480, 0.335380, 0.199842,
- 0.229721, -0.167166, 0.355256, 0.227097, 0.250206, -0.178238, 0.360047, 0.256014,
- 0.282118, -0.189905, 0.378761, 0.288550, 0.312821, -0.201033, 0.391810, 0.323348,
- 0.341482, -0.211584, 0.397716, 0.360564, 0.377368, -0.221314, 0.410141, 0.400004,
- 0.418229, -0.230474, 0.423485, 0.442371, 0.444881, -0.239443, 0.418874, 0.488796,
- 0.488899, -0.245987, 0.427545, 0.535012, 0.520317, -0.253948, 0.422147, 0.589678,
- 0.568566, -0.256616, 0.427190, 0.637683, 0.599607, -0.263760, 0.415114, 0.703363,
- 0.642220, -0.268687, 0.408715, 0.771363, 0.685698, -0.269400, 0.399722, 0.835740,
- 0.732327, -0.266642, 0.388651, 0.897764, 0.769873, -0.267712, 0.369198, 0.983312,
- 0.806733, -0.263479, 0.346802, 1.062220, 0.843466, -0.254575, 0.321368, 1.134770,
- 0.873008, -0.242749, 0.292110, 1.207120, 0.908438, -0.227250, 0.262143, 1.274650,
- 0.936321, -0.207621, 0.228876, 1.332030, 0.950353, -0.187932, 0.194840, 1.404390,
- 0.964420, -0.165154, 0.163178, 1.473200, 0.979856, -0.139302, 0.127531, 1.535740,
- 0.982561, -0.111340, 0.090346, 1.599820, 0.996389, -0.080812, 0.048901, 1.657700,
-};
-static float ltc_mag_ggx[64 * 64 * 2] = {
- 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 0.999998, 0.000000, 0.999994, 0.000000, 0.999989,
- 0.000000, 0.999973, 0.000000, 0.999947, 0.000000, 0.999894, 0.000001, 0.999798, 0.000001,
- 0.999617, 0.000003, 0.999234, 0.000008, 0.998258, 0.000015, 0.995040, 0.000027, 0.980816,
- 0.000024, 0.967553, 0.000002, 0.966877, 0.000004, 0.965752, 0.000007, 0.963820, 0.000013,
- 0.960306, 0.000020, 0.953619, 0.000028, 0.941103, 0.000028, 0.926619, 0.000016, 0.920983,
- 0.000024, 0.912293, 0.000031, 0.899277, 0.000035, 0.880884, 0.000026, 0.870399, 0.000034,
- 0.856138, 0.000039, 0.837436, 0.000037, 0.820973, 0.000039, 0.803583, 0.000043, 0.782168,
- 0.000040, 0.764107, 0.000045, 0.743092, 0.000046, 0.721626, 0.000046, 0.700375, 0.000048,
- 0.677334, 0.000046, 0.655702, 0.000048, 0.632059, 0.000046, 0.610125, 0.000048, 0.586530,
- 0.000046, 0.564508, 0.000048, 0.541405, 0.000046, 0.519556, 0.000046, 0.497292, 0.000045,
- 0.475898, 0.000045, 0.454722, 0.000043, 0.434042, 0.000042, 0.414126, 0.000041, 0.394387,
- 0.000040, 0.375841, 0.000039, 0.357219, 0.000037, 0.340084, 0.000037, 0.322714, 0.000034,
- 0.306974, 0.000034, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999996, 0.000000, 0.999991,
- 0.000000, 0.999983, 0.000000, 0.999968, 0.000000, 0.999940, 0.000000, 0.999891, 0.000001,
- 0.999797, 0.000001, 0.999617, 0.000003, 0.999227, 0.000008, 0.998239, 0.000016, 0.994937,
- 0.000027, 0.980225, 0.000021, 0.967549, 0.000002, 0.966865, 0.000004, 0.965739, 0.000008,
- 0.963794, 0.000013, 0.960244, 0.000021, 0.953495, 0.000028, 0.940876, 0.000027, 0.926569,
- 0.000016, 0.920905, 0.000024, 0.912169, 0.000032, 0.899095, 0.000035, 0.882209, 0.000029,
- 0.870272, 0.000034, 0.855977, 0.000039, 0.837431, 0.000037, 0.820826, 0.000040, 0.803408,
- 0.000044, 0.782838, 0.000042, 0.763941, 0.000045, 0.742904, 0.000046, 0.721463, 0.000046,
- 0.700197, 0.000048, 0.677501, 0.000047, 0.655527, 0.000048, 0.632400, 0.000048, 0.609964,
- 0.000048, 0.586839, 0.000048, 0.564353, 0.000048, 0.541589, 0.000047, 0.519413, 0.000046,
- 0.497337, 0.000045, 0.475797, 0.000045, 0.454659, 0.000044, 0.434065, 0.000042, 0.414018,
- 0.000041, 0.394550, 0.000040, 0.375742, 0.000039, 0.357501, 0.000038, 0.339996, 0.000037,
- 0.323069, 0.000035, 0.306897, 0.000034, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 0.999998, 0.000000, 0.999997, 0.000000, 0.999995,
- 0.000000, 0.999991, 0.000000, 0.999981, 0.000000, 0.999967, 0.000000, 0.999938, 0.000000,
- 0.999886, 0.000001, 0.999792, 0.000002, 0.999608, 0.000004, 0.999209, 0.000008, 0.998179,
- 0.000017, 0.994605, 0.000027, 0.979468, 0.000017, 0.967529, 0.000002, 0.966836, 0.000005,
- 0.965690, 0.000008, 0.963706, 0.000014, 0.960063, 0.000022, 0.953113, 0.000029, 0.940192,
- 0.000025, 0.927731, 0.000020, 0.920669, 0.000025, 0.911799, 0.000032, 0.898570, 0.000034,
- 0.883283, 0.000032, 0.869890, 0.000036, 0.855483, 0.000040, 0.837987, 0.000039, 0.820546,
- 0.000041, 0.802878, 0.000044, 0.783402, 0.000044, 0.763439, 0.000046, 0.742925, 0.000047,
- 0.721633, 0.000048, 0.699850, 0.000048, 0.677830, 0.000049, 0.655126, 0.000049, 0.632697,
- 0.000050, 0.609613, 0.000049, 0.587098, 0.000049, 0.564119, 0.000048, 0.541813, 0.000048,
- 0.519342, 0.000047, 0.497514, 0.000047, 0.475879, 0.000046, 0.454789, 0.000045, 0.434217,
- 0.000044, 0.414086, 0.000042, 0.394744, 0.000041, 0.375782, 0.000040, 0.357707, 0.000039,
- 0.340038, 0.000037, 0.323284, 0.000036, 0.306954, 0.000034, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999997,
- 0.000000, 0.999993, 0.000000, 0.999988, 0.000000, 0.999979, 0.000000, 0.999962, 0.000000,
- 0.999933, 0.000000, 0.999881, 0.000001, 0.999783, 0.000002, 0.999594, 0.000004, 0.999178,
- 0.000009, 0.998073, 0.000018, 0.993993, 0.000028, 0.979982, 0.000015, 0.968145, 0.000004,
- 0.966786, 0.000005, 0.965611, 0.000009, 0.963557, 0.000016, 0.959752, 0.000024, 0.952461,
- 0.000029, 0.940193, 0.000024, 0.929042, 0.000023, 0.920266, 0.000027, 0.911178, 0.000034,
- 0.897873, 0.000033, 0.884053, 0.000035, 0.869455, 0.000038, 0.854655, 0.000040, 0.838347,
- 0.000042, 0.820693, 0.000044, 0.802277, 0.000045, 0.783634, 0.000047, 0.763159, 0.000048,
- 0.742914, 0.000049, 0.721662, 0.000050, 0.699668, 0.000050, 0.677839, 0.000051, 0.655091,
- 0.000051, 0.632665, 0.000052, 0.609734, 0.000051, 0.587043, 0.000051, 0.564298, 0.000051,
- 0.541769, 0.000050, 0.519529, 0.000049, 0.497574, 0.000048, 0.476028, 0.000047, 0.454961,
- 0.000046, 0.434341, 0.000045, 0.414364, 0.000044, 0.394832, 0.000042, 0.376109, 0.000041,
- 0.357790, 0.000040, 0.340379, 0.000038, 0.323385, 0.000037, 0.307295, 0.000036, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 0.999999, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999997,
- 0.000000, 0.999996, 0.000000, 0.999992, 0.000000, 0.999986, 0.000000, 0.999975, 0.000000,
- 0.999959, 0.000000, 0.999927, 0.000000, 0.999871, 0.000001, 0.999771, 0.000002, 0.999572,
- 0.000005, 0.999133, 0.000011, 0.997912, 0.000020, 0.993008, 0.000028, 0.980645, 0.000014,
- 0.970057, 0.000006, 0.966717, 0.000007, 0.965497, 0.000011, 0.963340, 0.000018, 0.959294,
- 0.000026, 0.951519, 0.000029, 0.940517, 0.000025, 0.930140, 0.000027, 0.919720, 0.000030,
- 0.910294, 0.000035, 0.897701, 0.000035, 0.884522, 0.000039, 0.869489, 0.000041, 0.853983,
- 0.000042, 0.838425, 0.000045, 0.820656, 0.000047, 0.801875, 0.000048, 0.783521, 0.000051,
- 0.763131, 0.000051, 0.742610, 0.000052, 0.721480, 0.000053, 0.699696, 0.000054, 0.677592,
- 0.000054, 0.655250, 0.000055, 0.632452, 0.000054, 0.609903, 0.000054, 0.586928, 0.000054,
- 0.564464, 0.000054, 0.541801, 0.000052, 0.519681, 0.000052, 0.497685, 0.000051, 0.476220,
- 0.000050, 0.455135, 0.000049, 0.434600, 0.000047, 0.414564, 0.000046, 0.395165, 0.000044,
- 0.376333, 0.000043, 0.358197, 0.000042, 0.340640, 0.000040, 0.323816, 0.000039, 0.307581,
- 0.000037, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999999, 0.000000, 0.999998,
- 0.000000, 0.999997, 0.000000, 0.999994, 0.000000, 0.999990, 0.000000, 0.999984, 0.000000,
- 0.999972, 0.000000, 0.999952, 0.000000, 0.999919, 0.000001, 0.999860, 0.000001, 0.999753,
- 0.000003, 0.999546, 0.000006, 0.999074, 0.000013, 0.997671, 0.000023, 0.991504, 0.000026,
- 0.981148, 0.000013, 0.971965, 0.000009, 0.966624, 0.000008, 0.965344, 0.000014, 0.963048,
- 0.000021, 0.958673, 0.000029, 0.950262, 0.000028, 0.940836, 0.000027, 0.930996, 0.000031,
- 0.919848, 0.000035, 0.909136, 0.000037, 0.897554, 0.000038, 0.884691, 0.000043, 0.869414,
- 0.000045, 0.853462, 0.000045, 0.838187, 0.000050, 0.820381, 0.000050, 0.801844, 0.000052,
- 0.783061, 0.000054, 0.763205, 0.000055, 0.742362, 0.000056, 0.721393, 0.000057, 0.699676,
- 0.000058, 0.677395, 0.000058, 0.655208, 0.000059, 0.632451, 0.000058, 0.609839, 0.000058,
- 0.587093, 0.000058, 0.564467, 0.000057, 0.542043, 0.000056, 0.519826, 0.000055, 0.497952,
- 0.000054, 0.476477, 0.000053, 0.455412, 0.000051, 0.434926, 0.000050, 0.414900, 0.000049,
- 0.395552, 0.000047, 0.376712, 0.000045, 0.358622, 0.000044, 0.341048, 0.000042, 0.324262,
- 0.000041, 0.308013, 0.000039, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999998,
- 0.000000, 0.999997, 0.000000, 0.999995, 0.000000, 0.999994, 0.000000, 0.999988, 0.000000,
- 0.999979, 0.000000, 0.999965, 0.000000, 0.999945, 0.000000, 0.999908, 0.000001, 0.999846,
- 0.000002, 0.999733, 0.000004, 0.999511, 0.000008, 0.998993, 0.000016, 0.997326, 0.000027,
- 0.989706, 0.000021, 0.981713, 0.000013, 0.973636, 0.000011, 0.966509, 0.000010, 0.965149,
- 0.000017, 0.962669, 0.000025, 0.957860, 0.000032, 0.949334, 0.000028, 0.941041, 0.000030,
- 0.931575, 0.000036, 0.920102, 0.000040, 0.908002, 0.000038, 0.897269, 0.000043, 0.884559,
- 0.000048, 0.869161, 0.000048, 0.853342, 0.000051, 0.837633, 0.000054, 0.820252, 0.000055,
- 0.801872, 0.000058, 0.782418, 0.000059, 0.763100, 0.000061, 0.742183, 0.000061, 0.721098,
- 0.000063, 0.699512, 0.000063, 0.677372, 0.000064, 0.655059, 0.000063, 0.632567, 0.000064,
- 0.609784, 0.000063, 0.587237, 0.000063, 0.564525, 0.000062, 0.542181, 0.000061, 0.520017,
- 0.000060, 0.498204, 0.000058, 0.476742, 0.000057, 0.455803, 0.000055, 0.435251, 0.000054,
- 0.415374, 0.000052, 0.395921, 0.000050, 0.377253, 0.000049, 0.359021, 0.000047, 0.341637,
- 0.000045, 0.324700, 0.000043, 0.308625, 0.000042, 1.000000, 0.000000, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999999,
- 0.000000, 0.999998, 0.000000, 0.999996, 0.000000, 0.999993, 0.000000, 0.999989, 0.000000,
- 0.999983, 0.000000, 0.999974, 0.000000, 0.999959, 0.000000, 0.999936, 0.000000, 0.999896,
- 0.000001, 0.999830, 0.000002, 0.999709, 0.000005, 0.999469, 0.000010, 0.998886, 0.000019,
- 0.996819, 0.000030, 0.988837, 0.000019, 0.982178, 0.000013, 0.975017, 0.000013, 0.967101,
- 0.000014, 0.964905, 0.000021, 0.962180, 0.000030, 0.956821, 0.000034, 0.948829, 0.000031,
- 0.941092, 0.000035, 0.931883, 0.000041, 0.920211, 0.000044, 0.907307, 0.000043, 0.896840,
- 0.000049, 0.884119, 0.000053, 0.869148, 0.000054, 0.853377, 0.000058, 0.836753, 0.000059,
- 0.820063, 0.000062, 0.801694, 0.000065, 0.782116, 0.000065, 0.762673, 0.000067, 0.742133,
- 0.000068, 0.720779, 0.000069, 0.699386, 0.000070, 0.677320, 0.000070, 0.654888, 0.000070,
- 0.632499, 0.000069, 0.609825, 0.000069, 0.587287, 0.000068, 0.564743, 0.000067, 0.542409,
- 0.000066, 0.520282, 0.000065, 0.498506, 0.000063, 0.477102, 0.000062, 0.456167, 0.000060,
- 0.435728, 0.000058, 0.415809, 0.000056, 0.396517, 0.000054, 0.377737, 0.000053, 0.359698,
- 0.000051, 0.342164, 0.000049, 0.325417, 0.000047, 0.309186, 0.000045, 1.000000, 0.000000,
- 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 0.999999, 0.000000, 0.999997, 0.000000, 0.999994, 0.000000, 0.999993, 0.000000,
- 0.999987, 0.000000, 0.999981, 0.000000, 0.999969, 0.000000, 0.999953, 0.000000, 0.999925,
- 0.000001, 0.999881, 0.000001, 0.999810, 0.000003, 0.999680, 0.000007, 0.999418, 0.000013,
- 0.998748, 0.000023, 0.996066, 0.000033, 0.988379, 0.000018, 0.982567, 0.000014, 0.976097,
- 0.000015, 0.968475, 0.000018, 0.964606, 0.000025, 0.961564, 0.000035, 0.955517, 0.000036,
- 0.948381, 0.000034, 0.941095, 0.000041, 0.931923, 0.000048, 0.919960, 0.000048, 0.907419,
- 0.000050, 0.896180, 0.000056, 0.883370, 0.000059, 0.869046, 0.000062, 0.853278, 0.000066,
- 0.836091, 0.000066, 0.819644, 0.000070, 0.801246, 0.000071, 0.782031, 0.000074, 0.762066,
- 0.000075, 0.741964, 0.000077, 0.720554, 0.000077, 0.699098, 0.000078, 0.677189, 0.000077,
- 0.654840, 0.000078, 0.632496, 0.000077, 0.609908, 0.000076, 0.587312, 0.000075, 0.564938,
- 0.000074, 0.542577, 0.000073, 0.520620, 0.000071, 0.498819, 0.000069, 0.477555, 0.000068,
- 0.456568, 0.000065, 0.436278, 0.000064, 0.416370, 0.000061, 0.397144, 0.000059, 0.378412,
- 0.000057, 0.360376, 0.000055, 0.342906, 0.000053, 0.326136, 0.000051, 0.309970, 0.000048,
- 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 0.999999, 0.000000, 0.999998, 0.000000, 0.999997, 0.000000, 0.999994, 0.000000,
- 0.999991, 0.000000, 0.999985, 0.000000, 0.999977, 0.000000, 0.999964, 0.000000, 0.999945,
- 0.000000, 0.999912, 0.000001, 0.999866, 0.000002, 0.999786, 0.000004, 0.999647, 0.000009,
- 0.999356, 0.000016, 0.998563, 0.000028, 0.994928, 0.000034, 0.987999, 0.000018, 0.982893,
- 0.000016, 0.977044, 0.000018, 0.969972, 0.000023, 0.964237, 0.000031, 0.960791, 0.000041,
- 0.954292, 0.000037, 0.948052, 0.000040, 0.940938, 0.000048, 0.931689, 0.000055, 0.919870,
- 0.000054, 0.907665, 0.000059, 0.895281, 0.000064, 0.882621, 0.000066, 0.868730, 0.000071,
- 0.853008, 0.000074, 0.835944, 0.000076, 0.818949, 0.000080, 0.800951, 0.000081, 0.781847,
- 0.000084, 0.761649, 0.000085, 0.741520, 0.000086, 0.720495, 0.000087, 0.698742, 0.000087,
- 0.677096, 0.000087, 0.654782, 0.000086, 0.632335, 0.000086, 0.610031, 0.000085, 0.587457,
- 0.000084, 0.565130, 0.000082, 0.542877, 0.000080, 0.520900, 0.000079, 0.499291, 0.000077,
- 0.477971, 0.000074, 0.457221, 0.000072, 0.436803, 0.000070, 0.417083, 0.000068, 0.397749,
- 0.000065, 0.379177, 0.000063, 0.361061, 0.000060, 0.343713, 0.000058, 0.326894, 0.000055,
- 0.310816, 0.000053, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999999, 0.000000, 0.999996, 0.000000,
- 0.999992, 0.000000, 0.999989, 0.000000, 0.999980, 0.000000, 0.999971, 0.000000, 0.999955,
- 0.000000, 0.999933, 0.000001, 0.999901, 0.000001, 0.999847, 0.000003, 0.999761, 0.000006,
- 0.999607, 0.000011, 0.999282, 0.000020, 0.998310, 0.000034, 0.993288, 0.000029, 0.987855,
- 0.000019, 0.983167, 0.000018, 0.977908, 0.000022, 0.971194, 0.000029, 0.963867, 0.000039,
- 0.959820, 0.000046, 0.953497, 0.000042, 0.947621, 0.000048, 0.940611, 0.000057, 0.931174,
- 0.000062, 0.919919, 0.000063, 0.907856, 0.000069, 0.894509, 0.000074, 0.881954, 0.000076,
- 0.868309, 0.000082, 0.852511, 0.000084, 0.835821, 0.000088, 0.817981, 0.000090, 0.800504,
- 0.000093, 0.781410, 0.000095, 0.761427, 0.000096, 0.740940, 0.000097, 0.720233, 0.000098,
- 0.698592, 0.000098, 0.676763, 0.000098, 0.654808, 0.000097, 0.632326, 0.000096, 0.610049,
- 0.000095, 0.587630, 0.000093, 0.565261, 0.000092, 0.543244, 0.000090, 0.521273, 0.000087,
- 0.499818, 0.000085, 0.478536, 0.000082, 0.457826, 0.000080, 0.437549, 0.000077, 0.417760,
- 0.000074, 0.398630, 0.000072, 0.379954, 0.000069, 0.362025, 0.000066, 0.344581, 0.000063,
- 0.327909, 0.000061, 0.311736, 0.000058, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999997, 0.000000,
- 0.999995, 0.000000, 0.999992, 0.000000, 0.999985, 0.000000, 0.999977, 0.000000, 0.999966,
- 0.000000, 0.999948, 0.000000, 0.999923, 0.000001, 0.999884, 0.000002, 0.999826, 0.000004,
- 0.999732, 0.000008, 0.999561, 0.000014, 0.999191, 0.000026, 0.997955, 0.000041, 0.992228,
- 0.000028, 0.987638, 0.000021, 0.983395, 0.000022, 0.978614, 0.000027, 0.972389, 0.000037,
- 0.964392, 0.000047, 0.958610, 0.000051, 0.952806, 0.000049, 0.947120, 0.000057, 0.940104,
- 0.000067, 0.930398, 0.000069, 0.919866, 0.000074, 0.907853, 0.000081, 0.894078, 0.000083,
- 0.881177, 0.000089, 0.867575, 0.000094, 0.852107, 0.000097, 0.835502, 0.000101, 0.817560,
- 0.000103, 0.799840, 0.000107, 0.780998, 0.000108, 0.761132, 0.000110, 0.740429, 0.000110,
- 0.719836, 0.000111, 0.698467, 0.000111, 0.676446, 0.000110, 0.654635, 0.000110, 0.632411,
- 0.000109, 0.609986, 0.000107, 0.587872, 0.000105, 0.565528, 0.000103, 0.543563, 0.000101,
- 0.521760, 0.000098, 0.500188, 0.000095, 0.479204, 0.000092, 0.458413, 0.000089, 0.438314,
- 0.000086, 0.418573, 0.000082, 0.399470, 0.000079, 0.380892, 0.000076, 0.362953, 0.000073,
- 0.345601, 0.000070, 0.328895, 0.000066, 0.312808, 0.000063, 1.000000, 0.000000, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000, 0.999998, 0.000000,
- 0.999997, 0.000000, 0.999995, 0.000000, 0.999989, 0.000000, 0.999983, 0.000000, 0.999974,
- 0.000000, 0.999959, 0.000000, 0.999939, 0.000001, 0.999911, 0.000001, 0.999868, 0.000003,
- 0.999804, 0.000005, 0.999700, 0.000010, 0.999510, 0.000019, 0.999078, 0.000032, 0.997428,
- 0.000047, 0.991620, 0.000029, 0.987479, 0.000023, 0.983582, 0.000026, 0.979186, 0.000034,
- 0.973250, 0.000045, 0.965221, 0.000057, 0.957262, 0.000054, 0.952211, 0.000059, 0.946631,
- 0.000069, 0.939391, 0.000079, 0.929795, 0.000079, 0.919650, 0.000088, 0.907737, 0.000095,
- 0.893899, 0.000097, 0.880239, 0.000105, 0.866562, 0.000108, 0.851640, 0.000113, 0.835021,
- 0.000117, 0.817311, 0.000120, 0.798845, 0.000122, 0.780479, 0.000125, 0.760694, 0.000125,
- 0.740142, 0.000127, 0.719248, 0.000126, 0.698209, 0.000127, 0.676398, 0.000126, 0.654378,
- 0.000124, 0.632484, 0.000123, 0.610113, 0.000121, 0.587931, 0.000118, 0.565872, 0.000116,
- 0.543814, 0.000113, 0.522265, 0.000110, 0.500835, 0.000106, 0.479818, 0.000103, 0.459258,
- 0.000099, 0.439061, 0.000095, 0.419552, 0.000092, 0.400399, 0.000088, 0.381976, 0.000084,
- 0.364009, 0.000081, 0.346761, 0.000077, 0.330049, 0.000074, 0.314018, 0.000070, 1.000000,
- 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 0.999999, 0.000000,
- 0.999998, 0.000000, 0.999997, 0.000000, 0.999992, 0.000000, 0.999989, 0.000000, 0.999980,
- 0.000000, 0.999969, 0.000000, 0.999953, 0.000001, 0.999929, 0.000001, 0.999898, 0.000002,
- 0.999849, 0.000004, 0.999778, 0.000007, 0.999661, 0.000013, 0.999451, 0.000024, 0.998936,
- 0.000040, 0.996620, 0.000052, 0.991094, 0.000030, 0.987487, 0.000028, 0.983731, 0.000032,
- 0.979647, 0.000042, 0.973837, 0.000056, 0.965840, 0.000068, 0.956309, 0.000062, 0.951523,
- 0.000070, 0.946003, 0.000084, 0.938454, 0.000091, 0.929279, 0.000094, 0.919239, 0.000104,
- 0.907293, 0.000110, 0.893936, 0.000115, 0.879674, 0.000122, 0.865668, 0.000126, 0.850998,
- 0.000132, 0.834498, 0.000135, 0.816903, 0.000139, 0.798235, 0.000141, 0.779724, 0.000144,
- 0.760251, 0.000145, 0.739808, 0.000145, 0.718762, 0.000145, 0.697815, 0.000144, 0.676310,
- 0.000144, 0.654278, 0.000142, 0.632347, 0.000139, 0.610296, 0.000137, 0.588039, 0.000134,
- 0.566218, 0.000131, 0.544346, 0.000127, 0.522701, 0.000123, 0.501542, 0.000119, 0.480508,
- 0.000115, 0.460092, 0.000111, 0.440021, 0.000107, 0.420446, 0.000102, 0.401512, 0.000098,
- 0.382990, 0.000094, 0.365232, 0.000090, 0.347865, 0.000085, 0.331342, 0.000082, 0.315202,
- 0.000077, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000, 1.000000, 0.000000,
- 0.999999, 0.000000, 0.999998, 0.000000, 0.999995, 0.000000, 0.999992, 0.000000, 0.999986,
- 0.000000, 0.999976, 0.000001, 0.999964, 0.000001, 0.999945, 0.000001, 0.999919, 0.000002,
- 0.999882, 0.000003, 0.999829, 0.000005, 0.999749, 0.000010, 0.999620, 0.000018, 0.999382,
- 0.000031, 0.998751, 0.000050, 0.995344, 0.000051, 0.990768, 0.000035, 0.987464, 0.000034,
- 0.983846, 0.000040, 0.980007, 0.000053, 0.974494, 0.000070, 0.966220, 0.000078, 0.956273,
- 0.000075, 0.950952, 0.000086, 0.945215, 0.000100, 0.937287, 0.000104, 0.928649, 0.000112,
- 0.918791, 0.000124, 0.906685, 0.000127, 0.893706, 0.000136, 0.879248, 0.000142, 0.864685,
- 0.000148, 0.850032, 0.000154, 0.833853, 0.000157, 0.816353, 0.000161, 0.797834, 0.000164,
- 0.778831, 0.000165, 0.759756, 0.000167, 0.739419, 0.000167, 0.718491, 0.000167, 0.697392,
- 0.000166, 0.676102, 0.000164, 0.654243, 0.000162, 0.632176, 0.000159, 0.610407, 0.000155,
- 0.588394, 0.000152, 0.566450, 0.000148, 0.544900, 0.000144, 0.523276, 0.000139, 0.502179,
- 0.000134, 0.481359, 0.000129, 0.460920, 0.000125, 0.441084, 0.000120, 0.421517, 0.000115,
- 0.402721, 0.000110, 0.384222, 0.000105, 0.366534, 0.000100, 0.349205, 0.000095, 0.332702,
- 0.000091, 0.316599, 0.000086, 1.000000, 0.000001, 1.000000, 0.000001, 1.000000, 0.000001,
- 0.999999, 0.000001, 0.999999, 0.000001, 0.999998, 0.000001, 0.999995, 0.000001, 0.999990,
- 0.000001, 0.999984, 0.000001, 0.999973, 0.000001, 0.999959, 0.000001, 0.999936, 0.000002,
- 0.999907, 0.000003, 0.999866, 0.000004, 0.999806, 0.000008, 0.999716, 0.000013, 0.999576,
- 0.000023, 0.999300, 0.000039, 0.998498, 0.000061, 0.994132, 0.000049, 0.990310, 0.000038,
- 0.987409, 0.000042, 0.983981, 0.000050, 0.980268, 0.000067, 0.974875, 0.000085, 0.966063,
- 0.000086, 0.956779, 0.000090, 0.950259, 0.000106, 0.944239, 0.000119, 0.936341, 0.000122,
- 0.928047, 0.000135, 0.918065, 0.000146, 0.906267, 0.000151, 0.893419, 0.000162, 0.878758,
- 0.000166, 0.863699, 0.000174, 0.848876, 0.000178, 0.833032, 0.000184, 0.815557, 0.000186,
- 0.797323, 0.000191, 0.778124, 0.000192, 0.758929, 0.000193, 0.738979, 0.000193, 0.718213,
- 0.000192, 0.696947, 0.000190, 0.675807, 0.000188, 0.654147, 0.000184, 0.632290, 0.000181,
- 0.610499, 0.000177, 0.588747, 0.000173, 0.566783, 0.000167, 0.545359, 0.000163, 0.523984,
- 0.000157, 0.502917, 0.000152, 0.482294, 0.000146, 0.461945, 0.000140, 0.442133, 0.000134,
- 0.422705, 0.000128, 0.403916, 0.000123, 0.385540, 0.000117, 0.367909, 0.000112, 0.350651,
- 0.000106, 0.334208, 0.000101, 0.318123, 0.000096, 1.000000, 0.000001, 1.000000, 0.000001,
- 1.000000, 0.000001, 1.000000, 0.000001, 0.999999, 0.000001, 0.999997, 0.000001, 0.999995,
- 0.000001, 0.999989, 0.000001, 0.999981, 0.000001, 0.999969, 0.000002, 0.999952, 0.000002,
- 0.999928, 0.000003, 0.999895, 0.000004, 0.999848, 0.000007, 0.999781, 0.000011, 0.999682,
- 0.000018, 0.999523, 0.000031, 0.999205, 0.000050, 0.998131, 0.000073, 0.993334, 0.000051,
- 0.990160, 0.000047, 0.987321, 0.000052, 0.984099, 0.000064, 0.980432, 0.000084, 0.974976,
- 0.000103, 0.966429, 0.000100, 0.957633, 0.000111, 0.949422, 0.000129, 0.943045, 0.000140,
- 0.935448, 0.000146, 0.927225, 0.000162, 0.917033, 0.000169, 0.905762, 0.000180, 0.892879,
- 0.000190, 0.878435, 0.000196, 0.863114, 0.000205, 0.847760, 0.000209, 0.832084, 0.000215,
- 0.814915, 0.000218, 0.796711, 0.000220, 0.777603, 0.000223, 0.757991, 0.000222, 0.738371,
- 0.000223, 0.717872, 0.000221, 0.696619, 0.000218, 0.675379, 0.000216, 0.654110, 0.000212,
- 0.632410, 0.000207, 0.610460, 0.000202, 0.589030, 0.000197, 0.567267, 0.000190, 0.545886,
- 0.000185, 0.524714, 0.000177, 0.503789, 0.000171, 0.483204, 0.000165, 0.462976, 0.000157,
- 0.443294, 0.000151, 0.423988, 0.000144, 0.405325, 0.000138, 0.386981, 0.000131, 0.369436,
- 0.000125, 0.352190, 0.000118, 0.335804, 0.000113, 0.319749, 0.000107, 1.000000, 0.000002,
- 1.000000, 0.000002, 1.000000, 0.000002, 0.999999, 0.000002, 0.999999, 0.000002, 0.999997,
- 0.000002, 0.999993, 0.000002, 0.999987, 0.000002, 0.999979, 0.000003, 0.999965, 0.000003,
- 0.999947, 0.000003, 0.999918, 0.000005, 0.999881, 0.000006, 0.999828, 0.000010, 0.999753,
- 0.000015, 0.999642, 0.000025, 0.999464, 0.000040, 0.999089, 0.000064, 0.997567, 0.000086,
- 0.992903, 0.000059, 0.990011, 0.000058, 0.987192, 0.000065, 0.984180, 0.000082, 0.980491,
- 0.000106, 0.974779, 0.000122, 0.966750, 0.000119, 0.958248, 0.000136, 0.948884, 0.000155,
- 0.941673, 0.000162, 0.934521, 0.000177, 0.926205, 0.000193, 0.916089, 0.000200, 0.904963,
- 0.000214, 0.892089, 0.000222, 0.878028, 0.000233, 0.862490, 0.000239, 0.846587, 0.000247,
- 0.830988, 0.000251, 0.814165, 0.000256, 0.796135, 0.000258, 0.777052, 0.000259, 0.757201,
- 0.000258, 0.737655, 0.000257, 0.717477, 0.000255, 0.696433, 0.000252, 0.675084, 0.000247,
- 0.653907, 0.000242, 0.632561, 0.000237, 0.610658, 0.000229, 0.589322, 0.000224, 0.567857,
- 0.000216, 0.546520, 0.000209, 0.525433, 0.000202, 0.504679, 0.000193, 0.484203, 0.000186,
- 0.464203, 0.000178, 0.444549, 0.000170, 0.425346, 0.000162, 0.406706, 0.000154, 0.388576,
- 0.000147, 0.370940, 0.000139, 0.353996, 0.000133, 0.337391, 0.000126, 0.321648, 0.000120,
- 1.000000, 0.000004, 1.000000, 0.000004, 1.000000, 0.000004, 0.999999, 0.000004, 0.999998,
- 0.000004, 0.999996, 0.000004, 0.999992, 0.000004, 0.999986, 0.000004, 0.999976, 0.000004,
- 0.999961, 0.000005, 0.999938, 0.000006, 0.999908, 0.000007, 0.999865, 0.000010, 0.999807,
- 0.000014, 0.999723, 0.000022, 0.999602, 0.000034, 0.999398, 0.000053, 0.998946, 0.000081,
- 0.996647, 0.000094, 0.992298, 0.000067, 0.989802, 0.000072, 0.987019, 0.000082, 0.984219,
- 0.000105, 0.980425, 0.000131, 0.974241, 0.000140, 0.967006, 0.000146, 0.958930, 0.000167,
- 0.949157, 0.000188, 0.940620, 0.000195, 0.933509, 0.000214, 0.925088, 0.000230, 0.915178,
- 0.000240, 0.904093, 0.000255, 0.891337, 0.000264, 0.877326, 0.000275, 0.861794, 0.000281,
- 0.845758, 0.000290, 0.829792, 0.000294, 0.813037, 0.000297, 0.795285, 0.000300, 0.776323,
- 0.000300, 0.756673, 0.000300, 0.736856, 0.000298, 0.716883, 0.000294, 0.696089, 0.000289,
- 0.675050, 0.000285, 0.653509, 0.000277, 0.632580, 0.000272, 0.611040, 0.000263, 0.589567,
- 0.000255, 0.568322, 0.000246, 0.547235, 0.000237, 0.526160, 0.000228, 0.505716, 0.000219,
- 0.485274, 0.000210, 0.465411, 0.000201, 0.445854, 0.000191, 0.426911, 0.000183, 0.408222,
- 0.000174, 0.390307, 0.000165, 0.372624, 0.000157, 0.355804, 0.000149, 0.339240, 0.000141,
- 0.323534, 0.000134, 1.000000, 0.000006, 1.000000, 0.000006, 1.000000, 0.000006, 0.999999,
- 0.000006, 0.999998, 0.000006, 0.999996, 0.000006, 0.999991, 0.000007, 0.999984, 0.000007,
- 0.999973, 0.000007, 0.999955, 0.000008, 0.999931, 0.000009, 0.999896, 0.000011, 0.999847,
- 0.000015, 0.999784, 0.000021, 0.999692, 0.000030, 0.999554, 0.000045, 0.999326, 0.000069,
- 0.998757, 0.000102, 0.995367, 0.000096, 0.992090, 0.000083, 0.989517, 0.000089, 0.987008,
- 0.000106, 0.984210, 0.000133, 0.980210, 0.000162, 0.973676, 0.000162, 0.967052, 0.000179,
- 0.959385, 0.000207, 0.949461, 0.000225, 0.939578, 0.000236, 0.932416, 0.000259, 0.923759,
- 0.000271, 0.914223, 0.000289, 0.902942, 0.000301, 0.890419, 0.000314, 0.876639, 0.000324,
- 0.861316, 0.000332, 0.844960, 0.000338, 0.828427, 0.000346, 0.811871, 0.000348, 0.794397,
- 0.000350, 0.775726, 0.000350, 0.756170, 0.000347, 0.736091, 0.000344, 0.716213, 0.000341,
- 0.695736, 0.000332, 0.674961, 0.000328, 0.653518, 0.000319, 0.632574, 0.000310, 0.611340,
- 0.000301, 0.590017, 0.000291, 0.568752, 0.000280, 0.548061, 0.000270, 0.527110, 0.000259,
- 0.506682, 0.000248, 0.486524, 0.000237, 0.466812, 0.000227, 0.447320, 0.000216, 0.428473,
- 0.000206, 0.409921, 0.000196, 0.392028, 0.000185, 0.374606, 0.000176, 0.357601, 0.000167,
- 0.341348, 0.000158, 0.325420, 0.000149, 1.000000, 0.000010, 1.000000, 0.000010, 1.000000,
- 0.000010, 0.999999, 0.000010, 0.999998, 0.000010, 0.999995, 0.000011, 0.999991, 0.000011,
- 0.999982, 0.000011, 0.999968, 0.000012, 0.999950, 0.000013, 0.999922, 0.000015, 0.999884,
- 0.000018, 0.999830, 0.000022, 0.999758, 0.000030, 0.999654, 0.000042, 0.999503, 0.000061,
- 0.999237, 0.000090, 0.998491, 0.000127, 0.994594, 0.000108, 0.991780, 0.000103, 0.989265,
- 0.000112, 0.986998, 0.000136, 0.984137, 0.000169, 0.979798, 0.000197, 0.973370, 0.000197,
- 0.967239, 0.000223, 0.959543, 0.000254, 0.949466, 0.000266, 0.939074, 0.000288, 0.931118,
- 0.000311, 0.922525, 0.000326, 0.912983, 0.000346, 0.901617, 0.000356, 0.889487, 0.000374,
- 0.875787, 0.000383, 0.860654, 0.000394, 0.844417, 0.000400, 0.827410, 0.000405, 0.810545,
- 0.000407, 0.793312, 0.000407, 0.774847, 0.000407, 0.755621, 0.000405, 0.735511, 0.000397,
- 0.715435, 0.000394, 0.695403, 0.000385, 0.674681, 0.000376, 0.653590, 0.000366, 0.632471,
- 0.000355, 0.611510, 0.000344, 0.590640, 0.000332, 0.569386, 0.000319, 0.548785, 0.000307,
- 0.528146, 0.000294, 0.507872, 0.000282, 0.487805, 0.000269, 0.468196, 0.000256, 0.448922,
- 0.000244, 0.430093, 0.000232, 0.411845, 0.000220, 0.393808, 0.000209, 0.376615, 0.000198,
- 0.359655, 0.000187, 0.343452, 0.000177, 0.327650, 0.000168, 1.000000, 0.000017, 1.000000,
- 0.000017, 1.000000, 0.000017, 0.999999, 0.000017, 0.999998, 0.000017, 0.999995, 0.000017,
- 0.999990, 0.000018, 0.999979, 0.000018, 0.999966, 0.000019, 0.999944, 0.000021, 0.999912,
- 0.000023, 0.999869, 0.000027, 0.999811, 0.000033, 0.999730, 0.000043, 0.999617, 0.000059,
- 0.999445, 0.000083, 0.999138, 0.000118, 0.998095, 0.000157, 0.993919, 0.000125, 0.991333,
- 0.000126, 0.989226, 0.000145, 0.986954, 0.000176, 0.983982, 0.000214, 0.979128, 0.000235,
- 0.973327, 0.000244, 0.967416, 0.000277, 0.959729, 0.000309, 0.949758, 0.000322, 0.939173,
- 0.000350, 0.929600, 0.000370, 0.921181, 0.000391, 0.911640, 0.000414, 0.900435, 0.000427,
- 0.888183, 0.000441, 0.874772, 0.000455, 0.859566, 0.000462, 0.843579, 0.000472, 0.826453,
- 0.000474, 0.809164, 0.000477, 0.792179, 0.000478, 0.773866, 0.000473, 0.754944, 0.000470,
- 0.735133, 0.000462, 0.714858, 0.000454, 0.694829, 0.000444, 0.674453, 0.000432, 0.653685,
- 0.000420, 0.632666, 0.000407, 0.611676, 0.000392, 0.591193, 0.000379, 0.570145, 0.000363,
- 0.549566, 0.000349, 0.529278, 0.000334, 0.509026, 0.000318, 0.489186, 0.000304, 0.469662,
- 0.000289, 0.450691, 0.000275, 0.431841, 0.000261, 0.413752, 0.000248, 0.395951, 0.000235,
- 0.378633, 0.000222, 0.361940, 0.000211, 0.345599, 0.000198, 0.329999, 0.000188, 1.000000,
- 0.000027, 1.000000, 0.000027, 1.000000, 0.000027, 0.999999, 0.000027, 0.999998, 0.000027,
- 0.999994, 0.000027, 0.999988, 0.000028, 0.999977, 0.000029, 0.999961, 0.000030, 0.999937,
- 0.000032, 0.999904, 0.000036, 0.999854, 0.000041, 0.999790, 0.000049, 0.999699, 0.000062,
- 0.999572, 0.000082, 0.999381, 0.000112, 0.999016, 0.000154, 0.997437, 0.000188, 0.993545,
- 0.000156, 0.991135, 0.000161, 0.989157, 0.000188, 0.986874, 0.000226, 0.983714, 0.000269,
- 0.978301, 0.000277, 0.973227, 0.000303, 0.967317, 0.000342, 0.959477, 0.000371, 0.950012,
- 0.000393, 0.939484, 0.000428, 0.928135, 0.000444, 0.919819, 0.000473, 0.910049, 0.000492,
- 0.899181, 0.000513, 0.886881, 0.000524, 0.873590, 0.000540, 0.858613, 0.000547, 0.842809,
- 0.000555, 0.825727, 0.000558, 0.808086, 0.000558, 0.790728, 0.000556, 0.772987, 0.000553,
- 0.754100, 0.000544, 0.734669, 0.000536, 0.714411, 0.000523, 0.694196, 0.000512, 0.674252,
- 0.000497, 0.653570, 0.000481, 0.632999, 0.000467, 0.611994, 0.000449, 0.591604, 0.000432,
- 0.571134, 0.000415, 0.550528, 0.000396, 0.530292, 0.000379, 0.510364, 0.000361, 0.490749,
- 0.000344, 0.471266, 0.000328, 0.452462, 0.000311, 0.433907, 0.000295, 0.415659, 0.000279,
- 0.398138, 0.000265, 0.380833, 0.000250, 0.364247, 0.000236, 0.348041, 0.000223, 0.332389,
- 0.000211, 1.000000, 0.000042, 1.000000, 0.000042, 1.000000, 0.000042, 0.999999, 0.000042,
- 0.999997, 0.000042, 0.999993, 0.000043, 0.999986, 0.000043, 0.999974, 0.000044, 0.999956,
- 0.000046, 0.999930, 0.000049, 0.999892, 0.000054, 0.999838, 0.000061, 0.999767, 0.000072,
- 0.999666, 0.000088, 0.999525, 0.000113, 0.999311, 0.000150, 0.998865, 0.000200, 0.996278,
- 0.000211, 0.992956, 0.000190, 0.991017, 0.000210, 0.989055, 0.000244, 0.986741, 0.000290,
- 0.983288, 0.000334, 0.977784, 0.000340, 0.973037, 0.000378, 0.967181, 0.000424, 0.958971,
- 0.000444, 0.950093, 0.000483, 0.939552, 0.000518, 0.927678, 0.000539, 0.918278, 0.000569,
- 0.908449, 0.000589, 0.897713, 0.000612, 0.885533, 0.000626, 0.872131, 0.000639, 0.857517,
- 0.000647, 0.841796, 0.000652, 0.824726, 0.000654, 0.807297, 0.000656, 0.789058, 0.000647,
- 0.771890, 0.000644, 0.753082, 0.000630, 0.734100, 0.000622, 0.714094, 0.000605, 0.693839,
- 0.000589, 0.673891, 0.000573, 0.653565, 0.000553, 0.633326, 0.000533, 0.612582, 0.000515,
- 0.592050, 0.000493, 0.571918, 0.000472, 0.551572, 0.000452, 0.531553, 0.000430, 0.511750,
- 0.000410, 0.492380, 0.000390, 0.473143, 0.000370, 0.454230, 0.000351, 0.435963, 0.000332,
- 0.417870, 0.000315, 0.400387, 0.000297, 0.383332, 0.000281, 0.366665, 0.000265, 0.350633,
- 0.000251, 0.334964, 0.000236, 1.000000, 0.000064, 1.000000, 0.000064, 1.000000, 0.000064,
- 0.999999, 0.000064, 0.999997, 0.000065, 0.999994, 0.000065, 0.999985, 0.000066, 0.999972,
- 0.000068, 0.999952, 0.000070, 0.999922, 0.000074, 0.999880, 0.000080, 0.999820, 0.000090,
- 0.999741, 0.000104, 0.999629, 0.000125, 0.999474, 0.000156, 0.999229, 0.000201, 0.998662,
- 0.000259, 0.995299, 0.000245, 0.992732, 0.000245, 0.990847, 0.000273, 0.988911, 0.000316,
- 0.986540, 0.000372, 0.982636, 0.000410, 0.977346, 0.000422, 0.972909, 0.000476, 0.966821,
- 0.000522, 0.958686, 0.000545, 0.949754, 0.000589, 0.939184, 0.000620, 0.927505, 0.000654,
- 0.916606, 0.000682, 0.906707, 0.000704, 0.895937, 0.000726, 0.883913, 0.000744, 0.870642,
- 0.000755, 0.856241, 0.000764, 0.840690, 0.000771, 0.823728, 0.000766, 0.806481, 0.000768,
- 0.787924, 0.000754, 0.770588, 0.000750, 0.751991, 0.000732, 0.733407, 0.000718, 0.713688,
- 0.000701, 0.693595, 0.000679, 0.673426, 0.000657, 0.653590, 0.000636, 0.633576, 0.000612,
- 0.613144, 0.000586, 0.592711, 0.000563, 0.572722, 0.000538, 0.552762, 0.000513, 0.532985,
- 0.000490, 0.513219, 0.000464, 0.493992, 0.000442, 0.475090, 0.000419, 0.456287, 0.000397,
- 0.438152, 0.000376, 0.420294, 0.000355, 0.402749, 0.000335, 0.385879, 0.000316, 0.369352,
- 0.000298, 0.353301, 0.000281, 0.337781, 0.000265, 1.000000, 0.000097, 1.000000, 0.000097,
- 1.000000, 0.000097, 0.999999, 0.000097, 0.999997, 0.000097, 0.999993, 0.000098, 0.999984,
- 0.000099, 0.999969, 0.000101, 0.999946, 0.000105, 0.999913, 0.000110, 0.999868, 0.000118,
- 0.999801, 0.000130, 0.999712, 0.000149, 0.999589, 0.000175, 0.999416, 0.000214, 0.999136,
- 0.000269, 0.998367, 0.000333, 0.994701, 0.000305, 0.992497, 0.000318, 0.990608, 0.000354,
- 0.988715, 0.000409, 0.986241, 0.000473, 0.981696, 0.000495, 0.977097, 0.000533, 0.972583,
- 0.000594, 0.966142, 0.000637, 0.958230, 0.000670, 0.949677, 0.000719, 0.939226, 0.000751,
- 0.927501, 0.000793, 0.915199, 0.000820, 0.904980, 0.000848, 0.894243, 0.000869, 0.882154,
- 0.000884, 0.869161, 0.000898, 0.854751, 0.000901, 0.839368, 0.000907, 0.822874, 0.000902,
- 0.805514, 0.000897, 0.787160, 0.000882, 0.769061, 0.000870, 0.751000, 0.000852, 0.732614,
- 0.000831, 0.713171, 0.000807, 0.693472, 0.000783, 0.673528, 0.000756, 0.653397, 0.000727,
- 0.633781, 0.000700, 0.613877, 0.000671, 0.593506, 0.000640, 0.573667, 0.000614, 0.553932,
- 0.000583, 0.534345, 0.000554, 0.515042, 0.000528, 0.495674, 0.000499, 0.477132, 0.000474,
- 0.458609, 0.000448, 0.440354, 0.000424, 0.422765, 0.000400, 0.405472, 0.000378, 0.388482,
- 0.000355, 0.372191, 0.000336, 0.356099, 0.000315, 0.340737, 0.000298, 1.000000, 0.000143,
- 1.000000, 0.000143, 1.000000, 0.000143, 0.999999, 0.000144, 0.999996, 0.000144, 0.999991,
- 0.000145, 0.999981, 0.000147, 0.999966, 0.000149, 0.999941, 0.000154, 0.999905, 0.000161,
- 0.999852, 0.000172, 0.999780, 0.000187, 0.999681, 0.000210, 0.999546, 0.000244, 0.999352,
- 0.000292, 0.999027, 0.000357, 0.997886, 0.000422, 0.994190, 0.000385, 0.992140, 0.000410,
- 0.990274, 0.000456, 0.988455, 0.000527, 0.985804, 0.000598, 0.981030, 0.000613, 0.976674,
- 0.000668, 0.972021, 0.000737, 0.965274, 0.000774, 0.958046, 0.000831, 0.949333, 0.000876,
- 0.939135, 0.000917, 0.927119, 0.000952, 0.914690, 0.000991, 0.903006, 0.001013, 0.892368,
- 0.001038, 0.880231, 0.001050, 0.867432, 0.001063, 0.853208, 0.001068, 0.837956, 0.001065,
- 0.821772, 0.001059, 0.804328, 0.001047, 0.786465, 0.001032, 0.768004, 0.001011, 0.749720,
- 0.000986, 0.731682, 0.000963, 0.712813, 0.000932, 0.693139, 0.000899, 0.673566, 0.000870,
- 0.653483, 0.000836, 0.633891, 0.000800, 0.614433, 0.000767, 0.594586, 0.000732, 0.574769,
- 0.000696, 0.555149, 0.000664, 0.535898, 0.000630, 0.516753, 0.000596, 0.497816, 0.000567,
- 0.479034, 0.000534, 0.460975, 0.000507, 0.442935, 0.000477, 0.425263, 0.000451, 0.408248,
- 0.000425, 0.391339, 0.000400, 0.375130, 0.000378, 0.359172, 0.000354, 0.343876, 0.000335,
- 1.000000, 0.000209, 1.000000, 0.000209, 1.000000, 0.000209, 0.999999, 0.000209, 0.999996,
- 0.000210, 0.999991, 0.000211, 0.999979, 0.000213, 0.999963, 0.000217, 0.999933, 0.000223,
- 0.999894, 0.000232, 0.999837, 0.000246, 0.999756, 0.000266, 0.999648, 0.000295, 0.999499,
- 0.000337, 0.999283, 0.000396, 0.998896, 0.000474, 0.997006, 0.000520, 0.993819, 0.000497,
- 0.991632, 0.000524, 0.989875, 0.000587, 0.988109, 0.000676, 0.985155, 0.000748, 0.980479,
- 0.000769, 0.976271, 0.000841, 0.971347, 0.000911, 0.964528, 0.000953, 0.957632, 0.001022,
- 0.948681, 0.001061, 0.938716, 0.001119, 0.926629, 0.001148, 0.914025, 0.001190, 0.901026,
- 0.001212, 0.890358, 0.001239, 0.878283, 0.001253, 0.865459, 0.001255, 0.851407, 0.001261,
- 0.836276, 0.001248, 0.820436, 0.001244, 0.803253, 0.001221, 0.785562, 0.001201, 0.767180,
- 0.001178, 0.748551, 0.001143, 0.730564, 0.001109, 0.712253, 0.001076, 0.692867, 0.001036,
- 0.673695, 0.000997, 0.653912, 0.000957, 0.634129, 0.000917, 0.615004, 0.000874, 0.595587,
- 0.000833, 0.575965, 0.000795, 0.556600, 0.000752, 0.537428, 0.000716, 0.518623, 0.000677,
- 0.499964, 0.000641, 0.481356, 0.000606, 0.463279, 0.000570, 0.445673, 0.000540, 0.428032,
- 0.000507, 0.411112, 0.000480, 0.394444, 0.000451, 0.378247, 0.000424, 0.362415, 0.000399,
- 0.347103, 0.000375, 1.000000, 0.000301, 1.000000, 0.000301, 1.000000, 0.000301, 0.999998,
- 0.000301, 0.999996, 0.000302, 0.999989, 0.000303, 0.999977, 0.000306, 0.999958, 0.000311,
- 0.999927, 0.000319, 0.999884, 0.000331, 0.999820, 0.000348, 0.999733, 0.000374, 0.999613,
- 0.000410, 0.999447, 0.000462, 0.999204, 0.000533, 0.998725, 0.000625, 0.995871, 0.000632,
- 0.993194, 0.000632, 0.991541, 0.000689, 0.989773, 0.000767, 0.987647, 0.000864, 0.984193,
- 0.000922, 0.980016, 0.000971, 0.975859, 0.001060, 0.970514, 0.001122, 0.963625, 0.001172,
- 0.956959, 0.001252, 0.947956, 0.001294, 0.938090, 0.001359, 0.926590, 0.001393, 0.913829,
- 0.001433, 0.900050, 0.001458, 0.888129, 0.001475, 0.876070, 0.001488, 0.863461, 0.001487,
- 0.849594, 0.001489, 0.834531, 0.001465, 0.819030, 0.001458, 0.802122, 0.001430, 0.784450,
- 0.001397, 0.766434, 0.001363, 0.747816, 0.001326, 0.729519, 0.001283, 0.711454, 0.001238,
- 0.692699, 0.001191, 0.673723, 0.001146, 0.654386, 0.001096, 0.634673, 0.001046, 0.615554,
- 0.001000, 0.596462, 0.000948, 0.577385, 0.000902, 0.558257, 0.000856, 0.539200, 0.000810,
- 0.520543, 0.000769, 0.502206, 0.000724, 0.484020, 0.000686, 0.465779, 0.000645, 0.448455,
- 0.000610, 0.431091, 0.000572, 0.414147, 0.000540, 0.397650, 0.000507, 0.381576, 0.000478,
- 0.365881, 0.000448, 0.350582, 0.000421, 1.000000, 0.000427, 1.000000, 0.000427, 1.000000,
- 0.000427, 0.999998, 0.000428, 0.999995, 0.000429, 0.999988, 0.000431, 0.999976, 0.000434,
- 0.999952, 0.000441, 0.999919, 0.000451, 0.999871, 0.000466, 0.999801, 0.000488, 0.999704,
- 0.000520, 0.999572, 0.000566, 0.999389, 0.000629, 0.999114, 0.000715, 0.998488, 0.000819,
- 0.995234, 0.000804, 0.993021, 0.000830, 0.991407, 0.000903, 0.989625, 0.000997, 0.987064,
- 0.001097, 0.983265, 0.001144, 0.979535, 0.001227, 0.975224, 0.001326, 0.969574, 0.001381,
- 0.963021, 0.001459, 0.956046, 0.001528, 0.947136, 0.001582, 0.937313, 0.001635, 0.926073,
- 0.001684, 0.913121, 0.001716, 0.899165, 0.001742, 0.885891, 0.001761, 0.873783, 0.001764,
- 0.861331, 0.001762, 0.847569, 0.001753, 0.832785, 0.001728, 0.817442, 0.001702, 0.800613,
- 0.001666, 0.783597, 0.001629, 0.765710, 0.001583, 0.747021, 0.001531, 0.728593, 0.001480,
- 0.710661, 0.001428, 0.692426, 0.001369, 0.673623, 0.001311, 0.654940, 0.001256, 0.635448,
- 0.001195, 0.616221, 0.001138, 0.597531, 0.001082, 0.578795, 0.001027, 0.559892, 0.000971,
- 0.541307, 0.000920, 0.522608, 0.000868, 0.504484, 0.000821, 0.486603, 0.000773, 0.468802,
- 0.000730, 0.451172, 0.000685, 0.434348, 0.000648, 0.417445, 0.000606, 0.401077, 0.000572,
- 0.385039, 0.000536, 0.369483, 0.000504, 0.354272, 0.000473, 1.000000, 0.000600, 1.000000,
- 0.000600, 1.000000, 0.000600, 0.999998, 0.000600, 0.999994, 0.000601, 0.999987, 0.000604,
- 0.999972, 0.000609, 0.999949, 0.000617, 0.999912, 0.000630, 0.999857, 0.000649, 0.999781,
- 0.000677, 0.999674, 0.000717, 0.999528, 0.000773, 0.999326, 0.000850, 0.999009, 0.000953,
- 0.998112, 0.001064, 0.994496, 0.001022, 0.992806, 0.001086, 0.991211, 0.001176, 0.989415,
- 0.001290, 0.986499, 0.001390, 0.982679, 0.001445, 0.978839, 0.001540, 0.974295, 0.001644,
- 0.968784, 0.001715, 0.962324, 0.001803, 0.954956, 0.001864, 0.946240, 0.001938, 0.936517,
- 0.001982, 0.925186, 0.002030, 0.912520, 0.002066, 0.898441, 0.002078, 0.884394, 0.002099,
- 0.871273, 0.002087, 0.859057, 0.002087, 0.845243, 0.002055, 0.830723, 0.002029, 0.815801,
- 0.001995, 0.799140, 0.001942, 0.782372, 0.001888, 0.764820, 0.001837, 0.746586, 0.001774,
- 0.728100, 0.001706, 0.709842, 0.001641, 0.692019, 0.001574, 0.673640, 0.001503, 0.655277,
- 0.001435, 0.636438, 0.001364, 0.617364, 0.001299, 0.598603, 0.001230, 0.580195, 0.001166,
- 0.561786, 0.001104, 0.543377, 0.001041, 0.525093, 0.000984, 0.506791, 0.000927, 0.489291,
- 0.000874, 0.471811, 0.000822, 0.454435, 0.000775, 0.437493, 0.000727, 0.420977, 0.000684,
- 0.404729, 0.000644, 0.388756, 0.000603, 0.373344, 0.000568, 0.358191, 0.000532, 1.000000,
- 0.000832, 1.000000, 0.000832, 1.000000, 0.000832, 0.999998, 0.000833, 0.999995, 0.000834,
- 0.999985, 0.000838, 0.999969, 0.000844, 0.999944, 0.000854, 0.999903, 0.000870, 0.999843,
- 0.000894, 0.999759, 0.000929, 0.999643, 0.000978, 0.999480, 0.001047, 0.999255, 0.001140,
- 0.998885, 0.001262, 0.997405, 0.001359, 0.994240, 0.001336, 0.992458, 0.001409, 0.990929,
- 0.001523, 0.989116, 0.001659, 0.985624, 0.001741, 0.982003, 0.001821, 0.978336, 0.001945,
- 0.973184, 0.002027, 0.967800, 0.002122, 0.961348, 0.002214, 0.953841, 0.002282, 0.945340,
- 0.002357, 0.935552, 0.002406, 0.924064, 0.002444, 0.911827, 0.002476, 0.897731, 0.002484,
- 0.883409, 0.002499, 0.868625, 0.002467, 0.856529, 0.002465, 0.842999, 0.002424, 0.828505,
- 0.002374, 0.813825, 0.002326, 0.797813, 0.002267, 0.781097, 0.002197, 0.764038, 0.002124,
- 0.746067, 0.002048, 0.727687, 0.001967, 0.709571, 0.001888, 0.691503, 0.001805, 0.673673,
- 0.001718, 0.655732, 0.001641, 0.637399, 0.001559, 0.618616, 0.001476, 0.600050, 0.001401,
- 0.581713, 0.001324, 0.563546, 0.001250, 0.545605, 0.001182, 0.527559, 0.001112, 0.509764,
- 0.001050, 0.491930, 0.000986, 0.475011, 0.000929, 0.457878, 0.000873, 0.440979, 0.000820,
- 0.424613, 0.000772, 0.408549, 0.000722, 0.392771, 0.000680, 0.377317, 0.000637, 0.362352,
- 0.000598, 1.000000, 0.001143, 1.000000, 0.001143, 0.999999, 0.001143, 0.999998, 0.001144,
- 0.999994, 0.001146, 0.999984, 0.001150, 0.999967, 0.001158, 0.999937, 0.001171, 0.999894,
- 0.001191, 0.999828, 0.001220, 0.999735, 0.001263, 0.999606, 0.001324, 0.999426, 0.001407,
- 0.999173, 0.001519, 0.998730, 0.001661, 0.996243, 0.001702, 0.993779, 0.001728, 0.991900,
- 0.001811, 0.990524, 0.001960, 0.988680, 0.002120, 0.984663, 0.002176, 0.981457, 0.002306,
- 0.977608, 0.002440, 0.972215, 0.002513, 0.966798, 0.002629, 0.960241, 0.002714, 0.952489,
- 0.002784, 0.944127, 0.002854, 0.934282, 0.002910, 0.923271, 0.002946, 0.910803, 0.002963,
- 0.896705, 0.002968, 0.882380, 0.002966, 0.867116, 0.002932, 0.853636, 0.002894, 0.840469,
- 0.002847, 0.826390, 0.002786, 0.811759, 0.002716, 0.796113, 0.002632, 0.779518, 0.002546,
- 0.763142, 0.002460, 0.745464, 0.002365, 0.727491, 0.002265, 0.709414, 0.002164, 0.691396,
- 0.002071, 0.673680, 0.001971, 0.656049, 0.001870, 0.638188, 0.001776, 0.620177, 0.001685,
- 0.601506, 0.001589, 0.583620, 0.001506, 0.565496, 0.001418, 0.547890, 0.001337, 0.530323,
- 0.001260, 0.512795, 0.001186, 0.495199, 0.001115, 0.478101, 0.001049, 0.461511, 0.000984,
- 0.444879, 0.000926, 0.428424, 0.000867, 0.412495, 0.000814, 0.396975, 0.000764, 0.381614,
- 0.000716, 0.366732, 0.000672, 1.000000, 0.001555, 1.000000, 0.001555, 1.000000, 0.001555,
- 0.999998, 0.001556, 0.999994, 0.001559, 0.999983, 0.001564, 0.999963, 0.001573, 0.999932,
- 0.001589, 0.999882, 0.001614, 0.999810, 0.001650, 0.999708, 0.001703, 0.999565, 0.001777,
- 0.999368, 0.001877, 0.999081, 0.002010, 0.998520, 0.002172, 0.995490, 0.002174, 0.993252,
- 0.002224, 0.991727, 0.002350, 0.989951, 0.002506, 0.988029, 0.002688, 0.984029, 0.002750,
- 0.980683, 0.002898, 0.976554, 0.003033, 0.971390, 0.003133, 0.965544, 0.003237, 0.959120,
- 0.003334, 0.951183, 0.003404, 0.942974, 0.003475, 0.932642, 0.003504, 0.922158, 0.003545,
- 0.909404, 0.003539, 0.896071, 0.003544, 0.881206, 0.003499, 0.866077, 0.003473, 0.850930,
- 0.003415, 0.837703, 0.003334, 0.823878, 0.003249, 0.809449, 0.003163, 0.794379, 0.003064,
- 0.778138, 0.002950, 0.761997, 0.002841, 0.744938, 0.002721, 0.727212, 0.002607, 0.709549,
- 0.002489, 0.691704, 0.002368, 0.673689, 0.002252, 0.656453, 0.002138, 0.639128, 0.002022,
- 0.621512, 0.001914, 0.603598, 0.001810, 0.585590, 0.001705, 0.567852, 0.001609, 0.550300,
- 0.001514, 0.533033, 0.001425, 0.515942, 0.001340, 0.498814, 0.001260, 0.481595, 0.001182,
- 0.465117, 0.001112, 0.448865, 0.001041, 0.432711, 0.000977, 0.416822, 0.000919, 0.401272,
- 0.000858, 0.386226, 0.000807, 0.371321, 0.000755, 1.000000, 0.002096, 1.000000, 0.002096,
- 1.000000, 0.002096, 0.999997, 0.002097, 0.999991, 0.002100, 0.999979, 0.002107, 0.999959,
- 0.002118, 0.999925, 0.002138, 0.999870, 0.002168, 0.999791, 0.002213, 0.999677, 0.002277,
- 0.999521, 0.002365, 0.999301, 0.002485, 0.998977, 0.002642, 0.998191, 0.002817, 0.994801,
- 0.002785, 0.993091, 0.002888, 0.991571, 0.003039, 0.989700, 0.003216, 0.987023, 0.003373,
- 0.983289, 0.003461, 0.979892, 0.003637, 0.975111, 0.003736, 0.970351, 0.003884, 0.964131,
- 0.003971, 0.957747, 0.004081, 0.949536, 0.004135, 0.941372, 0.004203, 0.931049, 0.004228,
- 0.920647, 0.004250, 0.908033, 0.004228, 0.895028, 0.004220, 0.879968, 0.004150, 0.864875,
- 0.004088, 0.849180, 0.004009, 0.834934, 0.003912, 0.821397, 0.003801, 0.807135, 0.003680,
- 0.792363, 0.003552, 0.776661, 0.003411, 0.760705, 0.003281, 0.744408, 0.003140, 0.726994,
- 0.002991, 0.709598, 0.002850, 0.692112, 0.002712, 0.674435, 0.002572, 0.656760, 0.002434,
- 0.639982, 0.002304, 0.622983, 0.002178, 0.605471, 0.002050, 0.587960, 0.001938, 0.570463,
- 0.001820, 0.553058, 0.001715, 0.535894, 0.001611, 0.519089, 0.001514, 0.502454, 0.001421,
- 0.485681, 0.001335, 0.468935, 0.001250, 0.452951, 0.001173, 0.437139, 0.001102, 0.421446,
- 0.001031, 0.405951, 0.000966, 0.391003, 0.000908, 0.376198, 0.000848, 1.000000, 0.002801,
- 1.000000, 0.002801, 0.999999, 0.002801, 0.999997, 0.002802, 0.999992, 0.002806, 0.999979,
- 0.002814, 0.999956, 0.002828, 0.999916, 0.002852, 0.999857, 0.002889, 0.999768, 0.002943,
- 0.999645, 0.003019, 0.999470, 0.003125, 0.999229, 0.003267, 0.998852, 0.003450, 0.997558,
- 0.003611, 0.994417, 0.003590, 0.992824, 0.003724, 0.991344, 0.003907, 0.989337, 0.004104,
- 0.985811, 0.004210, 0.982772, 0.004375, 0.979001, 0.004551, 0.974102, 0.004645, 0.969197,
- 0.004806, 0.962759, 0.004878, 0.956207, 0.004982, 0.947909, 0.005034, 0.939596, 0.005075,
- 0.929642, 0.005098, 0.918807, 0.005085, 0.906921, 0.005056, 0.893312, 0.004988, 0.878933,
- 0.004913, 0.863986, 0.004826, 0.847936, 0.004708, 0.832253, 0.004569, 0.818619, 0.004427,
- 0.804788, 0.004277, 0.790241, 0.004119, 0.775162, 0.003948, 0.759463, 0.003774, 0.743598,
- 0.003610, 0.726970, 0.003436, 0.709646, 0.003264, 0.692770, 0.003097, 0.675371, 0.002936,
- 0.657863, 0.002777, 0.640772, 0.002617, 0.624441, 0.002474, 0.607497, 0.002331, 0.590438,
- 0.002190, 0.573224, 0.002066, 0.556168, 0.001935, 0.539232, 0.001825, 0.522352, 0.001707,
- 0.506172, 0.001606, 0.489842, 0.001505, 0.473463, 0.001409, 0.457266, 0.001326, 0.441609,
- 0.001238, 0.426348, 0.001163, 0.411002, 0.001089, 0.396045, 0.001019, 0.381448, 0.000956,
- 1.000000, 0.003712, 1.000000, 0.003712, 1.000000, 0.003713, 0.999997, 0.003714, 0.999990,
- 0.003719, 0.999977, 0.003728, 0.999950, 0.003745, 0.999908, 0.003774, 0.999843, 0.003818,
- 0.999745, 0.003883, 0.999608, 0.003974, 0.999415, 0.004100, 0.999143, 0.004267, 0.998700,
- 0.004476, 0.996363, 0.004553, 0.994021, 0.004611, 0.992372, 0.004764, 0.991007, 0.004991,
- 0.988767, 0.005197, 0.984872, 0.005284, 0.982004, 0.005489, 0.977714, 0.005644, 0.973076,
- 0.005769, 0.967565, 0.005892, 0.961384, 0.005996, 0.954435, 0.006060, 0.946303, 0.006113,
- 0.937662, 0.006120, 0.927867, 0.006122, 0.916475, 0.006048, 0.905410, 0.006031, 0.891591,
- 0.005922, 0.877573, 0.005789, 0.862511, 0.005666, 0.846861, 0.005515, 0.830680, 0.005338,
- 0.815725, 0.005155, 0.802321, 0.004966, 0.787826, 0.004754, 0.773454, 0.004560, 0.758224,
- 0.004347, 0.742650, 0.004144, 0.726729, 0.003937, 0.710155, 0.003736, 0.693312, 0.003537,
- 0.676530, 0.003344, 0.659444, 0.003160, 0.642051, 0.002978, 0.625758, 0.002806, 0.609615,
- 0.002643, 0.592919, 0.002485, 0.576298, 0.002333, 0.559489, 0.002195, 0.542891, 0.002054,
- 0.526255, 0.001934, 0.509853, 0.001807, 0.494131, 0.001698, 0.478114, 0.001591, 0.462274,
- 0.001490, 0.446412, 0.001395, 0.431274, 0.001310, 0.416350, 0.001224, 0.401476, 0.001148,
- 0.386993, 0.001076, 1.000000, 0.004882, 1.000000, 0.004882, 1.000000, 0.004883, 0.999997,
- 0.004885, 0.999988, 0.004890, 0.999974, 0.004901, 0.999946, 0.004922, 0.999897, 0.004956,
- 0.999825, 0.005009, 0.999718, 0.005086, 0.999565, 0.005194, 0.999352, 0.005341, 0.999046,
- 0.005535, 0.998492, 0.005770, 0.995564, 0.005785, 0.993339, 0.005864, 0.991834, 0.006060,
- 0.990496, 0.006333, 0.987826, 0.006519, 0.983830, 0.006608, 0.981090, 0.006855, 0.976131,
- 0.006958, 0.971922, 0.007142, 0.965901, 0.007214, 0.959606, 0.007320, 0.952504, 0.007358,
- 0.944365, 0.007385, 0.935652, 0.007380, 0.925813, 0.007336, 0.914397, 0.007231, 0.903257,
- 0.007140, 0.890015, 0.007001, 0.876014, 0.006828, 0.861436, 0.006656, 0.845752, 0.006445,
- 0.829169, 0.006216, 0.813435, 0.005978, 0.799701, 0.005757, 0.785726, 0.005499, 0.771520,
- 0.005250, 0.756830, 0.004996, 0.741951, 0.004754, 0.726367, 0.004508, 0.710537, 0.004268,
- 0.693965, 0.004035, 0.677724, 0.003808, 0.661170, 0.003594, 0.644274, 0.003384, 0.627449,
- 0.003182, 0.611645, 0.002997, 0.595614, 0.002810, 0.579426, 0.002643, 0.563016, 0.002475,
- 0.546728, 0.002326, 0.530539, 0.002178, 0.514164, 0.002042, 0.498344, 0.001914, 0.482957,
- 0.001792, 0.467336, 0.001677, 0.451994, 0.001576, 0.436514, 0.001471, 0.421780, 0.001380,
- 0.407271, 0.001292, 0.392822, 0.001210, 1.000000, 0.006374, 1.000000, 0.006374, 0.999999,
- 0.006375, 0.999996, 0.006377, 0.999987, 0.006384, 0.999971, 0.006397, 0.999939, 0.006421,
- 0.999888, 0.006462, 0.999807, 0.006524, 0.999689, 0.006615, 0.999520, 0.006742, 0.999283,
- 0.006913, 0.998936, 0.007136, 0.998165, 0.007385, 0.994847, 0.007344, 0.993182, 0.007500,
- 0.991665, 0.007725, 0.989708, 0.007976, 0.986663, 0.008130, 0.983288, 0.008304, 0.980104,
- 0.008535, 0.974855, 0.008610, 0.970450, 0.008791, 0.964509, 0.008864, 0.957594, 0.008903,
- 0.950546, 0.008933, 0.942225, 0.008901, 0.933365, 0.008868, 0.923202, 0.008732, 0.912605,
- 0.008631, 0.901099, 0.008474, 0.888177, 0.008258, 0.873955, 0.008018, 0.860091, 0.007790,
- 0.844340, 0.007525, 0.828517, 0.007241, 0.812390, 0.006938, 0.797210, 0.006648, 0.783489,
- 0.006348, 0.769514, 0.006042, 0.755419, 0.005736, 0.741083, 0.005444, 0.726059, 0.005155,
- 0.710809, 0.004871, 0.695052, 0.004598, 0.678886, 0.004334, 0.663042, 0.004080, 0.646634,
- 0.003843, 0.630117, 0.003609, 0.613804, 0.003389, 0.598338, 0.003185, 0.582687, 0.002984,
- 0.566809, 0.002801, 0.550817, 0.002623, 0.534937, 0.002458, 0.519151, 0.002306, 0.503118,
- 0.002155, 0.487723, 0.002020, 0.472725, 0.001894, 0.457599, 0.001771, 0.442558, 0.001658,
- 0.427624, 0.001555, 0.413171, 0.001453, 0.399122, 0.001365, 1.000000, 0.008265, 1.000000,
- 0.008265, 1.000000, 0.008266, 0.999996, 0.008268, 0.999987, 0.008276, 0.999967, 0.008292,
- 0.999933, 0.008320, 0.999876, 0.008368, 0.999786, 0.008440, 0.999655, 0.008546, 0.999468,
- 0.008693, 0.999203, 0.008891, 0.998803, 0.009144, 0.997480, 0.009358, 0.994446, 0.009333,
- 0.992920, 0.009531, 0.991414, 0.009789, 0.989049, 0.010023, 0.985820, 0.010166, 0.982441,
- 0.010358, 0.978595, 0.010529, 0.973495, 0.010627, 0.968405, 0.010726, 0.962717, 0.010823,
- 0.955478, 0.010810, 0.948275, 0.010791, 0.940006, 0.010716, 0.930831, 0.010631, 0.920648,
- 0.010408, 0.910205, 0.010231, 0.898445, 0.010005, 0.885986, 0.009719, 0.872204, 0.009407,
- 0.858436, 0.009109, 0.843454, 0.008766, 0.827437, 0.008398, 0.811488, 0.008037, 0.796039,
- 0.007674, 0.781083, 0.007310, 0.767642, 0.006940, 0.753901, 0.006575, 0.740131, 0.006227,
- 0.725845, 0.005884, 0.710991, 0.005556, 0.696002, 0.005231, 0.680461, 0.004925, 0.664875,
- 0.004635, 0.649273, 0.004354, 0.633020, 0.004087, 0.617050, 0.003841, 0.601154, 0.003596,
- 0.586008, 0.003376, 0.570699, 0.003160, 0.555166, 0.002960, 0.539645, 0.002776, 0.524159,
- 0.002595, 0.508682, 0.002433, 0.493163, 0.002279, 0.478004, 0.002131, 0.463470, 0.001995,
- 0.448778, 0.001870, 0.434105, 0.001747, 0.419576, 0.001639, 0.405541, 0.001533, 1.000000,
- 0.010646, 1.000000, 0.010646, 0.999999, 0.010647, 0.999995, 0.010650, 0.999985, 0.010659,
- 0.999964, 0.010677, 0.999925, 0.010711, 0.999861, 0.010766, 0.999763, 0.010850, 0.999616,
- 0.010972, 0.999408, 0.011141, 0.999112, 0.011366, 0.998637, 0.011647, 0.996223, 0.011723,
- 0.994006, 0.011806, 0.992444, 0.012025, 0.991028, 0.012331, 0.988030, 0.012495, 0.984816,
- 0.012654, 0.981399, 0.012854, 0.977085, 0.012969, 0.972154, 0.013091, 0.966617, 0.013117,
- 0.960628, 0.013158, 0.953295, 0.013109, 0.945750, 0.012997, 0.937654, 0.012880, 0.927716,
- 0.012648, 0.917932, 0.012389, 0.907719, 0.012131, 0.895840, 0.011801, 0.883526, 0.011414,
- 0.870301, 0.011007, 0.856272, 0.010602, 0.842251, 0.010194, 0.826466, 0.009733, 0.810859,
- 0.009285, 0.795051, 0.008833, 0.780053, 0.008403, 0.765750, 0.007964, 0.752298, 0.007525,
- 0.739153, 0.007115, 0.725514, 0.006704, 0.711473, 0.006327, 0.696936, 0.005952, 0.682126,
- 0.005592, 0.667027, 0.005254, 0.651875, 0.004938, 0.636463, 0.004628, 0.620641, 0.004339,
- 0.604931, 0.004070, 0.589549, 0.003809, 0.574712, 0.003570, 0.559775, 0.003345, 0.544514,
- 0.003125, 0.529555, 0.002932, 0.514402, 0.002742, 0.499302, 0.002566, 0.484114, 0.002399,
- 0.469308, 0.002251, 0.455133, 0.002102, 0.440939, 0.001973, 0.426627, 0.001844, 0.412509,
- 0.001725, 1.000000, 0.013628, 1.000000, 0.013628, 0.999999, 0.013629, 0.999995, 0.013633,
- 0.999983, 0.013643, 0.999960, 0.013664, 0.999917, 0.013702, 0.999846, 0.013765, 0.999736,
- 0.013862, 0.999573, 0.014001, 0.999340, 0.014193, 0.999004, 0.014446, 0.998407, 0.014749,
- 0.995464, 0.014731, 0.993328, 0.014828, 0.991799, 0.015080, 0.990397, 0.015432, 0.986835,
- 0.015501, 0.983938, 0.015731, 0.980154, 0.015875, 0.975659, 0.015958, 0.970171, 0.015983,
- 0.964803, 0.016008, 0.958366, 0.015948, 0.950613, 0.015800, 0.942874, 0.015584, 0.935005,
- 0.015429, 0.924991, 0.015074, 0.914814, 0.014676, 0.904743, 0.014310, 0.893216, 0.013869,
- 0.880769, 0.013371, 0.868136, 0.012861, 0.854690, 0.012340, 0.840593, 0.011809, 0.825808,
- 0.011253, 0.810090, 0.010710, 0.795040, 0.010164, 0.779757, 0.009640, 0.764697, 0.009119,
- 0.750913, 0.008595, 0.738175, 0.008116, 0.725242, 0.007645, 0.711864, 0.007189, 0.698009,
- 0.006758, 0.683841, 0.006350, 0.669391, 0.005955, 0.654731, 0.005587, 0.639805, 0.005236,
- 0.624789, 0.004908, 0.609325, 0.004594, 0.593975, 0.004303, 0.578983, 0.004030, 0.564442,
- 0.003771, 0.549835, 0.003532, 0.535039, 0.003303, 0.520403, 0.003089, 0.505687, 0.002893,
- 0.490939, 0.002708, 0.476233, 0.002534, 0.461624, 0.002371, 0.447833, 0.002221, 0.433992,
- 0.002076, 0.420147, 0.001950, 1.000000, 0.017341, 1.000000, 0.017342, 0.999999, 0.017343,
- 0.999995, 0.017347, 0.999983, 0.017358, 0.999954, 0.017382, 0.999908, 0.017426, 0.999828,
- 0.017497, 0.999705, 0.017606, 0.999524, 0.017763, 0.999263, 0.017978, 0.998878, 0.018258,
- 0.998012, 0.018555, 0.994614, 0.018426, 0.993132, 0.018638, 0.991563, 0.018907, 0.989298,
- 0.019158, 0.986036, 0.019252, 0.982558, 0.019406, 0.978531, 0.019486, 0.974198, 0.019585,
- 0.968148, 0.019475, 0.962565, 0.019428, 0.956041, 0.019299, 0.947749, 0.018989, 0.940180,
- 0.018704, 0.931650, 0.018346, 0.921798, 0.017878, 0.911573, 0.017362, 0.901569, 0.016848,
- 0.890341, 0.016265, 0.877835, 0.015620, 0.865472, 0.014952, 0.852905, 0.014327, 0.838906,
- 0.013664, 0.824888, 0.012990, 0.809977, 0.012322, 0.794697, 0.011657, 0.780028, 0.011031,
- 0.765124, 0.010424, 0.750411, 0.009822, 0.737264, 0.009244, 0.724799, 0.008687, 0.712253,
- 0.008165, 0.699267, 0.007673, 0.685618, 0.007197, 0.671736, 0.006739, 0.657777, 0.006319,
- 0.643497, 0.005924, 0.628890, 0.005539, 0.614299, 0.005193, 0.599197, 0.004860, 0.584175,
- 0.004544, 0.569541, 0.004258, 0.555193, 0.003979, 0.540947, 0.003724, 0.526593, 0.003486,
- 0.512335, 0.003261, 0.498017, 0.003051, 0.483609, 0.002855, 0.469368, 0.002675, 0.455037,
- 0.002499, 0.441493, 0.002348, 0.428147, 0.002199, 1.000000, 0.021942, 1.000000, 0.021942,
- 0.999998, 0.021943, 0.999993, 0.021948, 0.999981, 0.021961, 0.999949, 0.021988, 0.999896,
- 0.022037, 0.999808, 0.022117, 0.999670, 0.022238, 0.999466, 0.022412, 0.999174, 0.022649,
- 0.998725, 0.022953, 0.996979, 0.023112, 0.994317, 0.023074, 0.992781, 0.023290, 0.991191,
- 0.023573, 0.987787, 0.023615, 0.985092, 0.023799, 0.981121, 0.023855, 0.976924, 0.023871,
- 0.972180, 0.023870, 0.965956, 0.023660, 0.959998, 0.023474, 0.953245, 0.023228, 0.944445,
- 0.022697, 0.937087, 0.022353, 0.928341, 0.021814, 0.918400, 0.021152, 0.907959, 0.020455,
- 0.898080, 0.019767, 0.887047, 0.018992, 0.875221, 0.018208, 0.862690, 0.017358, 0.850735,
- 0.016572, 0.837545, 0.015752, 0.823639, 0.014948, 0.809699, 0.014143, 0.794797, 0.013353,
- 0.780578, 0.012619, 0.766019, 0.011891, 0.751447, 0.011184, 0.737275, 0.010514, 0.724545,
- 0.009873, 0.712644, 0.009266, 0.700432, 0.008690, 0.687664, 0.008147, 0.674288, 0.007630,
- 0.660966, 0.007144, 0.647264, 0.006685, 0.633431, 0.006266, 0.619133, 0.005856, 0.604935,
- 0.005482, 0.590236, 0.005133, 0.575473, 0.004791, 0.561228, 0.004489, 0.547054, 0.004202,
- 0.533175, 0.003929, 0.519163, 0.003674, 0.505328, 0.003441, 0.491446, 0.003220, 0.477356,
- 0.003013, 0.463560, 0.002826, 0.449623, 0.002650, 0.436068, 0.002470, 1.000000, 0.027613,
- 1.000000, 0.027614, 0.999998, 0.027615, 0.999993, 0.027620, 0.999976, 0.027634, 0.999945,
- 0.027664, 0.999884, 0.027718, 0.999784, 0.027806, 0.999630, 0.027939, 0.999401, 0.028130,
- 0.999066, 0.028386, 0.998524, 0.028703, 0.995702, 0.028626, 0.993593, 0.028673, 0.992067,
- 0.028899, 0.990548, 0.029213, 0.986775, 0.029130, 0.984054, 0.029310, 0.979481, 0.029188,
- 0.975297, 0.029160, 0.969810, 0.028954, 0.963524, 0.028628, 0.957398, 0.028313, 0.950088,
- 0.027847, 0.941538, 0.027180, 0.933332, 0.026539, 0.924392, 0.025778, 0.914581, 0.024916,
- 0.904347, 0.024024, 0.894324, 0.023123, 0.883724, 0.022153, 0.872207, 0.021136, 0.859927,
- 0.020105, 0.848373, 0.019126, 0.836023, 0.018131, 0.822890, 0.017172, 0.809324, 0.016220,
- 0.795361, 0.015262, 0.781253, 0.014390, 0.767338, 0.013533, 0.753156, 0.012724, 0.739122,
- 0.011945, 0.725358, 0.011205, 0.712949, 0.010487, 0.701621, 0.009840, 0.689703, 0.009215,
- 0.677216, 0.008625, 0.664217, 0.008069, 0.651370, 0.007559, 0.638000, 0.007057, 0.624530,
- 0.006613, 0.610601, 0.006184, 0.596760, 0.005780, 0.582433, 0.005409, 0.568026, 0.005061,
- 0.554140, 0.004735, 0.540178, 0.004429, 0.526513, 0.004144, 0.512954, 0.003882, 0.499403,
- 0.003629, 0.486026, 0.003408, 0.472345, 0.003186, 0.458828, 0.002976, 0.445379, 0.002794,
- 1.000000, 0.034572, 1.000000, 0.034572, 0.999999, 0.034573, 0.999991, 0.034579, 0.999974,
- 0.034594, 0.999937, 0.034626, 0.999869, 0.034685, 0.999757, 0.034780, 0.999582, 0.034923,
- 0.999322, 0.035126, 0.998939, 0.035397, 0.998219, 0.035702, 0.994974, 0.035473, 0.993201,
- 0.035562, 0.991573, 0.035764, 0.989301, 0.035925, 0.985712, 0.035802, 0.982411, 0.035835,
- 0.977827, 0.035617, 0.973278, 0.035440, 0.967397, 0.035048, 0.960696, 0.034480, 0.954349,
- 0.033986, 0.946066, 0.033132, 0.938012, 0.032359, 0.929413, 0.031441, 0.920355, 0.030410,
- 0.910586, 0.029278, 0.900609, 0.028139, 0.890093, 0.026910, 0.880013, 0.025727, 0.869001,
- 0.024467, 0.857510, 0.023225, 0.845820, 0.022012, 0.834383, 0.020827, 0.822158, 0.019663,
- 0.809056, 0.018531, 0.795832, 0.017417, 0.782547, 0.016376, 0.768900, 0.015391, 0.755526,
- 0.014449, 0.741681, 0.013537, 0.728178, 0.012696, 0.714642, 0.011881, 0.702756, 0.011116,
- 0.691750, 0.010415, 0.680159, 0.009744, 0.668073, 0.009119, 0.655405, 0.008514, 0.642921,
- 0.007976, 0.629993, 0.007451, 0.616828, 0.006970, 0.603305, 0.006524, 0.589833, 0.006102,
- 0.575945, 0.005708, 0.561745, 0.005334, 0.548277, 0.005000, 0.534467, 0.004676, 0.521032,
- 0.004381, 0.507877, 0.004103, 0.494654, 0.003836, 0.481592, 0.003587, 0.468509, 0.003373,
- 0.455293, 0.003162, 1.000000, 0.043070, 1.000000, 0.043070, 0.999998, 0.043071, 0.999991,
- 0.043077, 0.999970, 0.043094, 0.999928, 0.043128, 0.999852, 0.043189, 0.999724, 0.043290,
- 0.999527, 0.043440, 0.999230, 0.043651, 0.998783, 0.043925, 0.997507, 0.044110, 0.994418,
- 0.043823, 0.992864, 0.043940, 0.991127, 0.044096, 0.987331, 0.043841, 0.984819, 0.043899,
- 0.980384, 0.043591, 0.975846, 0.043254, 0.970748, 0.042829, 0.964303, 0.042153, 0.957720,
- 0.041411, 0.950747, 0.040589, 0.942533, 0.039489, 0.934045, 0.038354, 0.924942, 0.037057,
- 0.915811, 0.035699, 0.906120, 0.034240, 0.896434, 0.032808, 0.886021, 0.031288, 0.876081,
- 0.029778, 0.865608, 0.028233, 0.854924, 0.026749, 0.843607, 0.025260, 0.832456, 0.023821,
- 0.821342, 0.022468, 0.809303, 0.021130, 0.796468, 0.019839, 0.784046, 0.018623, 0.771262,
- 0.017456, 0.758118, 0.016381, 0.745075, 0.015329, 0.731926, 0.014365, 0.718630, 0.013436,
- 0.705414, 0.012560, 0.693792, 0.011751, 0.683108, 0.011002, 0.671830, 0.010276, 0.660150,
- 0.009620, 0.647907, 0.008980, 0.635734, 0.008408, 0.623208, 0.007862, 0.610438, 0.007350,
- 0.597345, 0.006877, 0.584138, 0.006435, 0.570700, 0.006022, 0.556966, 0.005632, 0.543607,
- 0.005283, 0.530213, 0.004940, 0.516912, 0.004623, 0.503916, 0.004331, 0.491146, 0.004069,
- 0.478439, 0.003814, 0.465834, 0.003580, 1.000000, 0.053404, 1.000000, 0.053404, 0.999998,
- 0.053406, 0.999989, 0.053412, 0.999968, 0.053428, 0.999918, 0.053463, 0.999830, 0.053526,
- 0.999685, 0.053628, 0.999461, 0.053780, 0.999119, 0.053990, 0.998582, 0.054252, 0.995919,
- 0.054032, 0.993735, 0.053891, 0.992126, 0.053956, 0.990266, 0.054040, 0.986317, 0.053606,
- 0.983213, 0.053442, 0.978303, 0.052862, 0.973665, 0.052336, 0.968091, 0.051617, 0.961026,
- 0.050543, 0.954333, 0.049523, 0.946372, 0.048170, 0.938254, 0.046767, 0.929516, 0.045234,
- 0.920106, 0.043508, 0.910899, 0.041740, 0.901532, 0.039939, 0.891919, 0.038090, 0.882006,
- 0.036234, 0.871965, 0.034344, 0.862145, 0.032483, 0.852058, 0.030668, 0.841610, 0.028910,
- 0.830806, 0.027208, 0.820476, 0.025609, 0.809514, 0.024039, 0.797865, 0.022538, 0.785621,
- 0.021123, 0.773765, 0.019791, 0.761629, 0.018523, 0.748891, 0.017336, 0.736437, 0.016230,
- 0.723707, 0.015178, 0.710606, 0.014179, 0.698019, 0.013259, 0.686203, 0.012389, 0.675692,
- 0.011598, 0.664826, 0.010833, 0.653490, 0.010135, 0.641774, 0.009478, 0.629794, 0.008861,
- 0.617647, 0.008285, 0.605340, 0.007753, 0.592718, 0.007260, 0.579746, 0.006797, 0.566763,
- 0.006361, 0.553515, 0.005952, 0.540118, 0.005569, 0.527325, 0.005231, 0.514265, 0.004907,
- 0.501406, 0.004603, 0.488922, 0.004312, 0.476541, 0.004047, 1.000000, 0.065918, 1.000000,
- 0.065919, 0.999998, 0.065920, 0.999988, 0.065926, 0.999963, 0.065942, 0.999907, 0.065976,
- 0.999806, 0.066038, 0.999639, 0.066136, 0.999378, 0.066281, 0.998985, 0.066478, 0.998285,
- 0.066691, 0.995071, 0.066199, 0.993172, 0.066045, 0.991438, 0.066010, 0.988428, 0.065687,
- 0.985218, 0.065291, 0.981128, 0.064711, 0.976015, 0.063849, 0.970970, 0.062993, 0.964582,
- 0.061793, 0.957383, 0.060363, 0.949969, 0.058813, 0.941843, 0.057027, 0.933624, 0.055189,
- 0.924543, 0.053122, 0.914919, 0.050890, 0.905773, 0.048642, 0.896434, 0.046336, 0.887195,
- 0.044062, 0.877706, 0.041780, 0.867719, 0.039450, 0.858587, 0.037243, 0.849317, 0.035096,
- 0.839585, 0.032985, 0.829856, 0.031003, 0.819589, 0.029095, 0.809714, 0.027274, 0.799340,
- 0.025563, 0.788224, 0.023918, 0.776619, 0.022383, 0.765210, 0.020930, 0.753716, 0.019579,
- 0.741564, 0.018300, 0.729413, 0.017126, 0.717146, 0.015993, 0.704360, 0.014949, 0.692190,
- 0.013968, 0.680289, 0.013058, 0.669611, 0.012220, 0.659113, 0.011417, 0.648148, 0.010673,
- 0.636905, 0.009990, 0.625154, 0.009343, 0.613481, 0.008748, 0.601540, 0.008183, 0.589430,
- 0.007669, 0.576828, 0.007172, 0.564194, 0.006727, 0.551501, 0.006309, 0.538635, 0.005922,
- 0.525724, 0.005549, 0.513209, 0.005202, 0.500457, 0.004882, 0.487990, 0.004572, 1.000000,
- 0.081013, 1.000000, 0.081013, 0.999997, 0.081015, 0.999985, 0.081020, 0.999956, 0.081035,
- 0.999893, 0.081066, 0.999777, 0.081120, 0.999583, 0.081208, 0.999281, 0.081334, 0.998813,
- 0.081497, 0.997597, 0.081522, 0.994379, 0.080850, 0.992744, 0.080679, 0.990745, 0.080459,
- 0.986646, 0.079611, 0.983611, 0.079091, 0.978869, 0.078075, 0.973475, 0.076822, 0.967845,
- 0.075493, 0.960778, 0.073706, 0.953333, 0.071805, 0.945274, 0.069595, 0.936955, 0.067249,
- 0.928319, 0.064773, 0.919075, 0.062095, 0.909114, 0.059182, 0.900137, 0.056392, 0.891069,
- 0.053539, 0.882262, 0.050764, 0.873232, 0.047979, 0.864042, 0.045226, 0.855002, 0.042541,
- 0.846569, 0.040013, 0.837714, 0.037527, 0.828918, 0.035203, 0.819783, 0.033001, 0.810129,
- 0.030891, 0.800866, 0.028911, 0.790930, 0.027026, 0.780593, 0.025276, 0.769511, 0.023618,
- 0.758558, 0.022065, 0.747632, 0.020629, 0.736146, 0.019287, 0.724093, 0.018033, 0.712340,
- 0.016826, 0.700201, 0.015746, 0.687949, 0.014703, 0.676163, 0.013751, 0.665001, 0.012866,
- 0.654720, 0.012037, 0.644213, 0.011260, 0.633382, 0.010541, 0.622120, 0.009865, 0.610631,
- 0.009233, 0.599078, 0.008642, 0.587519, 0.008118, 0.575505, 0.007612, 0.563148, 0.007139,
- 0.550828, 0.006684, 0.538458, 0.006277, 0.525905, 0.005883, 0.513517, 0.005527, 0.501395,
- 0.005197, 1.000000, 0.099151, 1.000000, 0.099150, 0.999996, 0.099152, 0.999984, 0.099156,
- 0.999947, 0.099167, 0.999874, 0.099191, 0.999739, 0.099233, 0.999514, 0.099298, 0.999159,
- 0.099388, 0.998586, 0.099484, 0.995731, 0.098842, 0.993384, 0.098276, 0.991615, 0.097927,
- 0.989029, 0.097343, 0.985373, 0.096354, 0.981278, 0.095231, 0.975777, 0.093623, 0.970526,
- 0.092022, 0.963755, 0.089891, 0.956676, 0.087606, 0.948099, 0.084775, 0.939718, 0.081864,
- 0.931305, 0.078857, 0.922342, 0.075613, 0.912842, 0.072147, 0.903304, 0.068619, 0.894110,
- 0.065059, 0.885512, 0.061602, 0.877193, 0.058243, 0.868770, 0.054898, 0.860267, 0.051610,
- 0.851915, 0.048468, 0.843912, 0.045445, 0.836040, 0.042561, 0.828245, 0.039875, 0.820159,
- 0.037320, 0.811670, 0.034916, 0.802659, 0.032640, 0.793921, 0.030490, 0.784713, 0.028486,
- 0.774946, 0.026619, 0.764480, 0.024859, 0.753793, 0.023211, 0.743506, 0.021704, 0.732555,
- 0.020284, 0.720965, 0.018965, 0.709422, 0.017719, 0.697756, 0.016563, 0.685565, 0.015483,
- 0.673987, 0.014489, 0.662440, 0.013561, 0.651675, 0.012696, 0.641598, 0.011879, 0.631210,
- 0.011126, 0.620514, 0.010437, 0.609366, 0.009787, 0.598137, 0.009173, 0.586966, 0.008598,
- 0.575549, 0.008068, 0.563797, 0.007573, 0.551758, 0.007106, 0.539894, 0.006684, 0.527901,
- 0.006279, 0.515819, 0.005905, 1.000000, 0.120864, 1.000000, 0.120864, 0.999996, 0.120864,
- 0.999980, 0.120867, 0.999940, 0.120872, 0.999852, 0.120884, 0.999693, 0.120903, 0.999426,
- 0.120929, 0.999002, 0.120955, 0.998235, 0.120918, 0.994608, 0.119764, 0.992997, 0.119265,
- 0.990968, 0.118630, 0.987002, 0.117261, 0.983524, 0.116009, 0.978750, 0.114252, 0.972652,
- 0.111930, 0.966613, 0.109555, 0.959275, 0.106612, 0.951272, 0.103375, 0.942323, 0.099659,
- 0.933679, 0.095884, 0.924822, 0.091926, 0.915742, 0.087806, 0.906348, 0.083489, 0.896883,
- 0.079085, 0.887740, 0.074675, 0.879860, 0.070577, 0.871998, 0.066501, 0.864325, 0.062541,
- 0.856685, 0.058678, 0.849250, 0.055006, 0.841719, 0.051473, 0.834755, 0.048140, 0.827853,
- 0.045017, 0.820888, 0.042097, 0.813616, 0.039370, 0.805767, 0.036777, 0.797338, 0.034327,
- 0.789122, 0.032053, 0.780601, 0.029948, 0.771424, 0.027981, 0.761502, 0.026105, 0.751166,
- 0.024394, 0.741276, 0.022809, 0.730898, 0.021327, 0.719878, 0.019931, 0.708379, 0.018657,
- 0.697165, 0.017445, 0.685554, 0.016314, 0.673631, 0.015276, 0.662385, 0.014300, 0.651059,
- 0.013411, 0.640451, 0.012579, 0.630536, 0.011793, 0.620316, 0.011055, 0.609722, 0.010367,
- 0.598804, 0.009730, 0.587871, 0.009128, 0.577121, 0.008589, 0.566019, 0.008073, 0.554664,
- 0.007597, 0.543101, 0.007148, 0.531558, 0.006734, 1.000000, 0.146767, 1.000000, 0.146767,
- 0.999997, 0.146767, 0.999977, 0.146765, 0.999929, 0.146762, 0.999823, 0.146753, 0.999633,
- 0.146735, 0.999314, 0.146699, 0.998796, 0.146620, 0.997124, 0.146107, 0.994062, 0.144857,
- 0.992154, 0.144011, 0.989186, 0.142712, 0.985279, 0.140926, 0.980826, 0.138850, 0.975056,
- 0.136168, 0.969005, 0.133217, 0.961554, 0.129590, 0.954206, 0.125886, 0.945046, 0.121335,
- 0.935678, 0.116492, 0.926748, 0.111635, 0.917764, 0.106625, 0.908358, 0.101325, 0.899219,
- 0.096025, 0.890089, 0.090653, 0.881488, 0.085390, 0.874031, 0.080418, 0.866932, 0.075601,
- 0.859976, 0.070902, 0.853375, 0.066439, 0.846971, 0.062201, 0.840483, 0.058129, 0.833969,
- 0.054276, 0.828060, 0.050704, 0.822128, 0.047368, 0.815989, 0.044272, 0.809336, 0.041344,
- 0.802177, 0.038601, 0.794410, 0.036023, 0.786573, 0.033638, 0.778619, 0.031432, 0.770000,
- 0.029362, 0.760698, 0.027410, 0.750932, 0.025615, 0.740993, 0.023974, 0.731159, 0.022418,
- 0.720836, 0.020989, 0.709913, 0.019641, 0.698415, 0.018382, 0.687450, 0.017222, 0.676154,
- 0.016151, 0.664383, 0.015140, 0.653300, 0.014187, 0.642072, 0.013310, 0.631412, 0.012493,
- 0.621622, 0.011741, 0.611681, 0.011036, 0.601420, 0.010377, 0.590830, 0.009756, 0.580254,
- 0.009181, 0.569841, 0.008647, 0.559224, 0.008157, 0.548315, 0.007679, 1.000000, 0.177563,
- 1.000000, 0.177563, 0.999994, 0.177562, 0.999972, 0.177555, 0.999914, 0.177536, 0.999787,
- 0.177496, 0.999556, 0.177420, 0.999165, 0.177285, 0.998500, 0.177037, 0.995388, 0.175634,
- 0.993102, 0.174375, 0.990992, 0.173121, 0.986932, 0.170896, 0.982786, 0.168470, 0.977592,
- 0.165455, 0.971075, 0.161676, 0.963967, 0.157458, 0.956397, 0.152836, 0.947489, 0.147467,
- 0.937564, 0.141450, 0.928182, 0.135383, 0.919027, 0.129212, 0.909618, 0.122760, 0.900492,
- 0.116273, 0.891671, 0.109800, 0.883146, 0.103362, 0.875151, 0.097080, 0.868338, 0.091173,
- 0.862033, 0.085497, 0.856107, 0.080069, 0.850644, 0.074962, 0.845261, 0.070079, 0.839885,
- 0.065432, 0.834609, 0.061097, 0.829083, 0.056974, 0.824040, 0.053174, 0.818968, 0.049665,
- 0.813496, 0.046386, 0.807533, 0.043322, 0.800990, 0.040440, 0.793891, 0.037758, 0.786281,
- 0.035262, 0.778773, 0.032958, 0.770737, 0.030808, 0.762094, 0.028796, 0.752898, 0.026925,
- 0.743306, 0.025193, 0.733416, 0.023595, 0.723742, 0.022115, 0.713542, 0.020744, 0.702755,
- 0.019434, 0.691484, 0.018205, 0.680531, 0.017077, 0.669530, 0.016034, 0.658126, 0.015068,
- 0.646933, 0.014155, 0.636107, 0.013318, 0.625271, 0.012528, 0.615225, 0.011794, 0.605678,
- 0.011118, 0.595830, 0.010476, 0.585704, 0.009867, 0.575413, 0.009297, 0.565373, 0.008767,
- 1.000000, 0.214058, 0.999999, 0.214058, 0.999994, 0.214055, 0.999966, 0.214039, 0.999893,
- 0.213998, 0.999737, 0.213910, 0.999449, 0.213745, 0.998960, 0.213458, 0.997900, 0.212855,
- 0.994278, 0.210779, 0.992254, 0.209260, 0.988810, 0.206908, 0.984715, 0.204009, 0.979738,
- 0.200471, 0.972884, 0.195813, 0.965996, 0.190856, 0.957974, 0.185077, 0.949155, 0.178680,
- 0.939288, 0.171513, 0.928996, 0.163838, 0.919563, 0.156246, 0.910004, 0.148359, 0.900791,
- 0.140417, 0.892135, 0.132569, 0.883803, 0.124741, 0.876034, 0.117091, 0.869219, 0.109835,
- 0.863062, 0.102859, 0.857795, 0.096293, 0.853009, 0.090072, 0.848603, 0.084210, 0.844335,
- 0.078653, 0.840208, 0.073440, 0.836035, 0.068533, 0.831720, 0.063927, 0.827135, 0.059591,
- 0.822797, 0.055620, 0.818387, 0.051939, 0.813565, 0.048532, 0.808142, 0.045314, 0.802212,
- 0.042335, 0.795730, 0.039555, 0.788741, 0.036988, 0.781093, 0.034569, 0.773597, 0.032330,
- 0.765622, 0.030272, 0.757083, 0.028348, 0.747992, 0.026556, 0.738591, 0.024884, 0.728719,
- 0.023334, 0.719146, 0.021908, 0.709165, 0.020571, 0.698750, 0.019325, 0.687884, 0.018158,
- 0.676818, 0.017075, 0.666247, 0.016072, 0.655284, 0.015126, 0.644010, 0.014256, 0.633353,
- 0.013433, 0.622674, 0.012653, 0.612265, 0.011935, 0.602455, 0.011253, 0.593147, 0.010623,
- 0.583592, 0.010021, 1.000000, 0.257170, 1.000000, 0.257170, 0.999992, 0.257164, 0.999958,
- 0.257135, 0.999864, 0.257060, 0.999666, 0.256897, 0.999302, 0.256596, 0.998663, 0.256070,
- 0.995607, 0.254123, 0.993094, 0.252081, 0.990700, 0.249867, 0.985940, 0.246118, 0.981214,
- 0.242049, 0.974966, 0.236869, 0.967589, 0.230724, 0.959150, 0.223635, 0.950257, 0.215960,
- 0.940165, 0.207296, 0.929396, 0.197901, 0.919288, 0.188437, 0.909428, 0.178762, 0.900105,
- 0.169072, 0.891418, 0.159478, 0.883347, 0.150020, 0.875992, 0.140813, 0.869466, 0.131960,
- 0.863699, 0.123501, 0.858553, 0.115436, 0.854379, 0.107901, 0.850894, 0.100880, 0.847632,
- 0.094230, 0.844571, 0.087986, 0.841630, 0.082153, 0.838542, 0.076641, 0.835412, 0.071532,
- 0.831899, 0.066688, 0.828177, 0.062218, 0.824160, 0.058045, 0.820393, 0.054267, 0.816068,
- 0.050717, 0.811201, 0.047404, 0.805785, 0.044317, 0.799878, 0.041456, 0.793469, 0.038815,
- 0.786473, 0.036345, 0.778874, 0.034022, 0.771277, 0.031860, 0.763426, 0.029886, 0.755044,
- 0.028036, 0.746161, 0.026298, 0.737124, 0.024730, 0.727610, 0.023251, 0.717822, 0.021875,
- 0.708279, 0.020594, 0.698333, 0.019395, 0.688020, 0.018272, 0.677321, 0.017204, 0.666504,
- 0.016212, 0.656184, 0.015292, 0.645560, 0.014433, 0.634636, 0.013616, 0.624124, 0.012861,
- 0.613914, 0.012143, 0.603589, 0.011489, 1.000000, 0.307946, 0.999999, 0.307945, 0.999988,
- 0.307934, 0.999944, 0.307886, 0.999824, 0.307756, 0.999565, 0.307480, 0.999085, 0.306966,
- 0.998103, 0.306004, 0.994249, 0.303028, 0.991807, 0.300435, 0.987773, 0.296554, 0.982673,
- 0.291600, 0.976623, 0.285641, 0.968757, 0.278150, 0.959849, 0.269529, 0.950663, 0.260248,
- 0.940129, 0.249704, 0.928950, 0.238291, 0.917996, 0.226501, 0.907813, 0.214669, 0.898305,
- 0.202835, 0.889626, 0.191158, 0.881750, 0.179695, 0.874715, 0.168548, 0.868746, 0.157920,
- 0.863703, 0.147807, 0.859315, 0.138149, 0.855538, 0.128993, 0.852428, 0.120414, 0.850168,
- 0.112498, 0.848132, 0.105054, 0.846291, 0.098109, 0.844431, 0.091594, 0.842493, 0.085506,
- 0.840368, 0.079820, 0.837980, 0.074510, 0.835230, 0.069542, 0.832091, 0.064909, 0.828667,
- 0.060629, 0.824805, 0.056652, 0.820988, 0.053023, 0.816635, 0.049636, 0.811725, 0.046466,
- 0.806316, 0.043508, 0.800469, 0.040787, 0.794107, 0.038255, 0.787218, 0.035882, 0.779872,
- 0.033679, 0.772097, 0.031638, 0.764484, 0.029738, 0.756428, 0.027958, 0.748022, 0.026315,
- 0.739268, 0.024780, 0.730240, 0.023339, 0.720893, 0.022003, 0.711190, 0.020755, 0.701791,
- 0.019584, 0.692184, 0.018489, 0.682258, 0.017454, 0.672060, 0.016487, 0.661717, 0.015596,
- 0.651462, 0.014752, 0.641467, 0.013973, 0.631229, 0.013236, 1.000000, 0.367573, 0.999999,
- 0.367571, 0.999984, 0.367553, 0.999925, 0.367473, 0.999759, 0.367259, 0.999410, 0.366801,
- 0.998739, 0.365946, 0.995529, 0.363191, 0.992875, 0.360171, 0.989135, 0.355981, 0.984166,
- 0.350401, 0.977871, 0.343348, 0.969510, 0.334341, 0.959964, 0.323862, 0.950162, 0.312521,
- 0.938882, 0.299577, 0.926992, 0.285573, 0.915589, 0.271212, 0.904791, 0.256611, 0.895177,
- 0.242224, 0.886403, 0.227952, 0.878957, 0.214192, 0.872418, 0.200795, 0.867029, 0.188015,
- 0.862835, 0.175975, 0.859411, 0.164526, 0.856655, 0.153693, 0.854519, 0.143520, 0.852828,
- 0.133970, 0.851412, 0.124984, 0.850609, 0.116748, 0.849855, 0.109050, 0.849017, 0.101839,
- 0.848079, 0.095136, 0.846911, 0.088877, 0.845445, 0.083038, 0.843620, 0.077584, 0.841411,
- 0.072505, 0.838768, 0.067769, 0.835801, 0.063402, 0.832341, 0.059310, 0.828424, 0.055512,
- 0.824312, 0.052024, 0.819918, 0.048786, 0.815072, 0.045780, 0.809863, 0.043018, 0.804164,
- 0.040425, 0.798034, 0.038015, 0.791436, 0.035744, 0.784498, 0.033647, 0.777125, 0.031667,
- 0.769365, 0.029812, 0.761579, 0.028100, 0.753746, 0.026505, 0.745573, 0.025007, 0.737083,
- 0.023603, 0.728545, 0.022330, 0.719691, 0.021124, 0.710569, 0.019998, 0.701216, 0.018957,
- 0.692094, 0.017970, 0.682909, 0.017042, 0.673509, 0.016173, 0.663863, 0.015341, 1.000000,
- 0.437395, 0.999998, 0.437394, 0.999980, 0.437363, 0.999891, 0.437232, 0.999656, 0.436877,
- 0.999148, 0.436121, 0.997959, 0.434564, 0.993464, 0.430134, 0.990606, 0.426077, 0.985027,
- 0.419397, 0.978491, 0.411180, 0.969643, 0.400480, 0.959189, 0.387690, 0.948223, 0.373575,
- 0.935955, 0.357622, 0.923237, 0.340430, 0.911074, 0.322735, 0.899724, 0.304790, 0.890189,
- 0.287392, 0.881796, 0.270248, 0.874781, 0.253659, 0.869166, 0.237786, 0.864725, 0.222618,
- 0.861565, 0.208356, 0.859284, 0.194867, 0.857677, 0.182120, 0.856714, 0.170180, 0.856155,
- 0.158969, 0.855800, 0.148413, 0.855672, 0.138578, 0.855538, 0.129345, 0.855689, 0.120861,
- 0.855767, 0.112969, 0.855618, 0.105593, 0.855250, 0.098745, 0.854583, 0.092373, 0.853534,
- 0.086414, 0.852061, 0.080834, 0.850253, 0.075677, 0.848004, 0.070861, 0.845333, 0.066378,
- 0.842376, 0.062263, 0.838956, 0.058411, 0.835121, 0.054833, 0.830842, 0.051484, 0.826212,
- 0.048355, 0.821522, 0.045471, 0.816551, 0.042826, 0.811211, 0.040361, 0.805479, 0.038039,
- 0.799409, 0.035874, 0.793060, 0.033873, 0.786395, 0.031998, 0.779416, 0.030241, 0.772140,
- 0.028595, 0.764636, 0.027075, 0.756836, 0.025635, 0.749315, 0.024303, 0.741561, 0.023050,
- 0.733589, 0.021880, 0.725479, 0.020784, 0.717255, 0.019770, 0.708829, 0.018817, 0.700191,
- 0.017911, 1.000000, 0.518937, 0.999998, 0.518933, 0.999967, 0.518883, 0.999832, 0.518660,
- 0.999466, 0.518057, 0.998644, 0.516752, 0.994458, 0.512347, 0.991223, 0.507675, 0.985515,
- 0.500188, 0.978308, 0.490408, 0.968359, 0.477357, 0.956820, 0.461752, 0.943929, 0.443796,
- 0.930224, 0.423893, 0.916514, 0.402682, 0.903653, 0.380914, 0.892315, 0.359212, 0.882942,
- 0.338102, 0.875438, 0.317730, 0.869642, 0.298186, 0.865304, 0.279491, 0.862382, 0.261804,
- 0.860666, 0.245146, 0.859788, 0.229406, 0.859608, 0.214605, 0.859912, 0.200691, 0.860530,
- 0.187623, 0.861368, 0.175390, 0.862237, 0.163901, 0.863127, 0.153175, 0.863923, 0.143147,
- 0.864567, 0.133781, 0.865013, 0.125042, 0.865390, 0.116952, 0.865591, 0.109476, 0.865517,
- 0.102542, 0.865084, 0.096069, 0.864309, 0.090050, 0.863151, 0.084433, 0.861649, 0.079222,
- 0.859742, 0.074348, 0.857446, 0.069796, 0.854757, 0.065536, 0.851783, 0.061608, 0.848516,
- 0.057970, 0.844897, 0.054574, 0.840956, 0.051417, 0.836676, 0.048460, 0.832075, 0.045693,
- 0.827191, 0.043118, 0.822295, 0.040772, 0.817294, 0.038603, 0.812013, 0.036568, 0.806465,
- 0.034655, 0.800691, 0.032872, 0.794709, 0.031211, 0.788493, 0.029650, 0.782049, 0.028178,
- 0.775403, 0.026797, 0.768570, 0.025500, 0.761536, 0.024276, 0.754303, 0.023114, 0.746920,
- 0.022031, 0.739745, 0.021019, 1.000000, 0.613914, 0.999996, 0.613907, 0.999942, 0.613814,
- 0.999704, 0.613407, 0.999046, 0.612302, 0.995516, 0.608266, 0.991726, 0.602863, 0.985157,
- 0.593956, 0.976420, 0.581748, 0.964404, 0.565183, 0.950601, 0.545273, 0.935158, 0.522129,
- 0.919364, 0.496782, 0.904754, 0.470571, 0.891760, 0.444037, 0.881492, 0.418322, 0.873656,
- 0.393522, 0.868053, 0.369795, 0.864336, 0.347171, 0.862259, 0.325737, 0.861556, 0.305532,
- 0.861776, 0.286416, 0.862661, 0.268355, 0.864015, 0.251334, 0.865711, 0.235352, 0.867519,
- 0.220302, 0.869351, 0.206161, 0.871144, 0.192908, 0.872839, 0.180505, 0.874307, 0.168848,
- 0.875667, 0.158021, 0.876758, 0.147877, 0.877640, 0.138441, 0.878237, 0.129627, 0.878563,
- 0.121415, 0.878572, 0.113741, 0.878420, 0.106652, 0.878057, 0.100097, 0.877413, 0.094013,
- 0.876460, 0.088346, 0.875233, 0.083092, 0.873700, 0.078198, 0.871873, 0.073640, 0.869780,
- 0.069410, 0.867405, 0.065470, 0.864751, 0.061791, 0.861818, 0.058349, 0.858645, 0.055144,
- 0.855307, 0.052189, 0.851736, 0.049433, 0.847927, 0.046850, 0.843888, 0.044426, 0.839629,
- 0.042150, 0.835158, 0.040008, 0.830509, 0.038008, 0.825714, 0.036149, 0.820729, 0.034396,
- 0.815751, 0.032778, 0.810752, 0.031275, 0.805587, 0.029854, 0.800317, 0.028540, 0.794890,
- 0.027295, 0.789314, 0.026114, 0.783593, 0.024994, 1.000000, 0.724258, 0.999992, 0.724243,
- 0.999870, 0.724044, 0.999336, 0.723170, 0.996271, 0.719432, 0.991159, 0.712576, 0.982465,
- 0.700927, 0.970490, 0.684297, 0.953973, 0.661244, 0.935546, 0.633804, 0.916596, 0.603071,
- 0.899353, 0.571050, 0.885216, 0.539206, 0.875076, 0.508714, 0.868334, 0.479571, 0.864414,
- 0.451796, 0.862678, 0.425328, 0.862835, 0.400352, 0.864067, 0.376532, 0.866086, 0.353910,
- 0.868557, 0.332424, 0.871271, 0.312053, 0.874058, 0.292764, 0.876800, 0.274530, 0.879390,
- 0.257297, 0.881900, 0.241140, 0.884187, 0.225934, 0.886262, 0.211669, 0.888119, 0.198311,
- 0.889709, 0.185783, 0.891054, 0.174063, 0.892196, 0.163143, 0.893101, 0.152952, 0.893803,
- 0.143475, 0.894277, 0.134647, 0.894532, 0.126434, 0.894576, 0.118800, 0.894393, 0.111694,
- 0.893976, 0.105069, 0.893346, 0.098908, 0.892502, 0.093172, 0.891441, 0.087828, 0.890276,
- 0.082903, 0.888972, 0.078351, 0.887469, 0.074108, 0.885785, 0.070163, 0.883914, 0.066484,
- 0.881872, 0.063057, 0.879651, 0.059853, 0.877267, 0.056862, 0.874717, 0.054060, 0.872012,
- 0.051438, 0.869157, 0.048981, 0.866155, 0.046673, 0.863014, 0.044506, 0.859748, 0.042473,
- 0.856416, 0.040596, 0.852958, 0.038827, 0.849382, 0.037162, 0.845694, 0.035596, 0.841893,
- 0.034115, 0.837981, 0.032714, 0.833963, 0.031386, 0.829847, 0.030128, 1.000000, 0.852140,
- 0.999969, 0.852095, 0.999483, 0.851408, 0.994545, 0.845790, 0.986188, 0.835231, 0.969847,
- 0.814687, 0.945951, 0.783735, 0.919170, 0.746074, 0.895488, 0.706938, 0.878232, 0.669534,
- 0.868252, 0.635168, 0.863873, 0.603069, 0.863369, 0.572514, 0.865450, 0.543169, 0.868803,
- 0.514578, 0.872794, 0.486762, 0.877020, 0.459811, 0.881054, 0.433654, 0.884974, 0.408574,
- 0.888587, 0.384525, 0.891877, 0.361560, 0.894793, 0.339661, 0.897430, 0.318913, 0.899796,
- 0.299302, 0.901943, 0.280843, 0.903858, 0.263481, 0.905574, 0.247197, 0.907069, 0.231915,
- 0.908379, 0.217614, 0.909520, 0.204250, 0.910483, 0.191758, 0.911280, 0.180092, 0.911936,
- 0.169222, 0.912454, 0.159098, 0.912835, 0.149668, 0.913078, 0.140884, 0.913192, 0.132709,
- 0.913175, 0.125095, 0.913040, 0.118012, 0.912781, 0.111417, 0.912410, 0.105281, 0.911924,
- 0.099569, 0.911331, 0.094253, 0.910637, 0.089308, 0.909840, 0.084700, 0.908941, 0.080404,
- 0.907944, 0.076398, 0.906857, 0.072664, 0.905680, 0.069178, 0.904416, 0.065922, 0.903067,
- 0.062878, 0.901637, 0.060031, 0.900128, 0.057365, 0.898544, 0.054867, 0.896890, 0.052527,
- 0.895165, 0.050331, 0.893371, 0.048267, 0.891572, 0.046360, 0.889763, 0.044600, 0.887894,
- 0.042945, 0.885967, 0.041388, 0.883984, 0.039922, 0.881945, 0.038540, 0.879854, 0.037236,
- 0.999804, 0.995833, 0.938155, 0.933611, 0.864755, 0.854311, 0.888594, 0.865264, 0.905575,
- 0.863922, 0.915125, 0.850558, 0.920665, 0.829254, 0.924073, 0.802578, 0.926304, 0.772211,
- 0.927829, 0.739366, 0.928924, 0.705033, 0.929730, 0.670019, 0.930339, 0.634993, 0.930811,
- 0.600485, 0.931191, 0.566897, 0.931490, 0.534485, 0.931737, 0.503429, 0.931939, 0.473811,
- 0.932108, 0.445668, 0.932250, 0.418993, 0.932371, 0.393762, 0.932474, 0.369939, 0.932562,
- 0.347479, 0.932638, 0.326336, 0.932703, 0.306462, 0.932760, 0.287805, 0.932809, 0.270313,
- 0.932851, 0.253933, 0.932887, 0.238610, 0.932917, 0.224289, 0.932943, 0.210917, 0.932965,
- 0.198440, 0.932982, 0.186807, 0.932995, 0.175966, 0.933005, 0.165869, 0.933011, 0.156468,
- 0.933013, 0.147719, 0.933013, 0.139579, 0.933010, 0.132007, 0.933004, 0.124965, 0.932994,
- 0.118416, 0.932982, 0.112326, 0.932968, 0.106663, 0.932950, 0.101397, 0.932931, 0.096499,
- 0.932908, 0.091944, 0.932883, 0.087706, 0.932856, 0.083762, 0.932827, 0.080092, 0.932796,
- 0.076675, 0.932762, 0.073494, 0.932727, 0.070530, 0.932689, 0.067768, 0.932650, 0.065193,
- 0.932609, 0.062792, 0.932565, 0.060552, 0.932521, 0.058461, 0.932474, 0.056508, 0.932427,
- 0.054684, 0.932377, 0.052979, 0.932326, 0.051385, 0.932274, 0.049894, 0.932220, 0.048497,
- 0.932164, 0.047190,
-};
-
-static float bsdf_split_sum_ggx[64 * 64 * 2] = {
- 1.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f,
- 1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
- 0.999512f, 0.000000f, 0.999023f, 0.000001f, 0.999023f, 0.000001f, 0.998535f, 0.000001f,
- 0.998047f, 0.000001f, 0.997559f, 0.000002f, 0.997070f, 0.000003f, 0.996094f, 0.000004f,
- 0.994629f, 0.000004f, 0.993652f, 0.000006f, 0.991699f, 0.000007f, 0.989746f, 0.000008f,
- 0.987305f, 0.000010f, 0.984375f, 0.000012f, 0.980957f, 0.000013f, 0.977539f, 0.000016f,
- 0.973145f, 0.000018f, 0.967773f, 0.000020f, 0.961914f, 0.000023f, 0.955566f, 0.000025f,
- 0.947754f, 0.000028f, 0.939941f, 0.000031f, 0.930664f, 0.000033f, 0.920410f, 0.000036f,
- 0.909180f, 0.000039f, 0.896973f, 0.000042f, 0.884277f, 0.000044f, 0.870117f, 0.000047f,
- 0.854980f, 0.000049f, 0.838867f, 0.000051f, 0.821777f, 0.000053f, 0.803711f, 0.000055f,
- 0.785156f, 0.000057f, 0.765625f, 0.000058f, 0.745605f, 0.000059f, 0.724609f, 0.000060f,
- 0.703613f, 0.000061f, 0.681641f, 0.000061f, 0.659668f, 0.000061f, 0.637695f, 0.000061f,
- 0.615234f, 0.000061f, 0.592773f, 0.000060f, 0.570801f, 0.000060f, 0.548340f, 0.000059f,
- 0.526855f, 0.000058f, 0.504883f, 0.000057f, 0.483887f, 0.000055f, 0.462891f, 0.000054f,
- 0.442627f, 0.000053f, 0.422607f, 0.000051f, 0.403320f, 0.000050f, 0.384766f, 0.000048f,
- 0.366455f, 0.000046f, 0.348877f, 0.000045f, 0.332031f, 0.000043f, 0.315918f, 0.000041f,
- 0.999512f, 0.000000f, 0.999512f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f,
- 0.999512f, 0.000000f, 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
- 0.999512f, 0.000000f, 0.999023f, 0.000001f, 0.999023f, 0.000001f, 0.998535f, 0.000002f,
- 0.998047f, 0.000003f, 0.997559f, 0.000004f, 0.997070f, 0.000005f, 0.996094f, 0.000006f,
- 0.994629f, 0.000008f, 0.993164f, 0.000010f, 0.991699f, 0.000012f, 0.989746f, 0.000015f,
- 0.987305f, 0.000018f, 0.984375f, 0.000020f, 0.980957f, 0.000024f, 0.977051f, 0.000027f,
- 0.972168f, 0.000031f, 0.967285f, 0.000035f, 0.961426f, 0.000039f, 0.954590f, 0.000043f,
- 0.947266f, 0.000048f, 0.938965f, 0.000052f, 0.929199f, 0.000057f, 0.919434f, 0.000061f,
- 0.908203f, 0.000065f, 0.895996f, 0.000069f, 0.882812f, 0.000073f, 0.868652f, 0.000077f,
- 0.853027f, 0.000080f, 0.837402f, 0.000083f, 0.820312f, 0.000086f, 0.802246f, 0.000088f,
- 0.783691f, 0.000090f, 0.764160f, 0.000092f, 0.744141f, 0.000093f, 0.723633f, 0.000093f,
- 0.702637f, 0.000094f, 0.681152f, 0.000094f, 0.659180f, 0.000093f, 0.637207f, 0.000093f,
- 0.615234f, 0.000091f, 0.593262f, 0.000090f, 0.571289f, 0.000088f, 0.549316f, 0.000087f,
- 0.527344f, 0.000085f, 0.505859f, 0.000082f, 0.485107f, 0.000080f, 0.464355f, 0.000078f,
- 0.444336f, 0.000075f, 0.424561f, 0.000072f, 0.405273f, 0.000070f, 0.386719f, 0.000067f,
- 0.368652f, 0.000065f, 0.351318f, 0.000062f, 0.334473f, 0.000059f, 0.318115f, 0.000057f,
- 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f, 1.000000f, 0.000000f,
- 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000001f, 0.999512f, 0.000001f,
- 0.999512f, 0.000001f, 0.999512f, 0.000003f, 0.999023f, 0.000002f, 0.998535f, 0.000004f,
- 0.998047f, 0.000005f, 0.997559f, 0.000007f, 0.997070f, 0.000009f, 0.996094f, 0.000011f,
- 0.994629f, 0.000013f, 0.993164f, 0.000017f, 0.991211f, 0.000020f, 0.989258f, 0.000024f,
- 0.986816f, 0.000028f, 0.983887f, 0.000033f, 0.980469f, 0.000038f, 0.976562f, 0.000043f,
- 0.971680f, 0.000049f, 0.966797f, 0.000055f, 0.960449f, 0.000062f, 0.953613f, 0.000068f,
- 0.946289f, 0.000075f, 0.937500f, 0.000081f, 0.928223f, 0.000088f, 0.917969f, 0.000094f,
- 0.906738f, 0.000100f, 0.894531f, 0.000106f, 0.880859f, 0.000111f, 0.866699f, 0.000116f,
- 0.851562f, 0.000120f, 0.835449f, 0.000124f, 0.818359f, 0.000127f, 0.800781f, 0.000130f,
- 0.782227f, 0.000132f, 0.762695f, 0.000134f, 0.742676f, 0.000134f, 0.722656f, 0.000135f,
- 0.701660f, 0.000134f, 0.680176f, 0.000133f, 0.658691f, 0.000132f, 0.636719f, 0.000130f,
- 0.615234f, 0.000128f, 0.593262f, 0.000125f, 0.571289f, 0.000123f, 0.549805f, 0.000119f,
- 0.528320f, 0.000116f, 0.507324f, 0.000112f, 0.486328f, 0.000109f, 0.466064f, 0.000105f,
- 0.446045f, 0.000101f, 0.426514f, 0.000097f, 0.407471f, 0.000093f, 0.388916f, 0.000089f,
- 0.370850f, 0.000085f, 0.353516f, 0.000082f, 0.336914f, 0.000078f, 0.320557f, 0.000074f,
- 1.000000f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f, 0.999512f, 0.000000f,
- 1.000000f, 0.000000f, 1.000000f, 0.000001f, 0.999512f, 0.000001f, 0.999512f, 0.000002f,
- 0.999512f, 0.000002f, 0.999023f, 0.000003f, 0.999023f, 0.000005f, 0.998535f, 0.000006f,
- 0.998535f, 0.000008f, 0.997559f, 0.000011f, 0.997070f, 0.000014f, 0.996094f, 0.000017f,
- 0.994629f, 0.000020f, 0.993164f, 0.000026f, 0.991211f, 0.000030f, 0.989258f, 0.000036f,
- 0.986816f, 0.000043f, 0.983398f, 0.000050f, 0.979980f, 0.000058f, 0.976074f, 0.000066f,
- 0.971191f, 0.000074f, 0.965820f, 0.000082f, 0.959961f, 0.000093f, 0.952637f, 0.000101f,
- 0.945312f, 0.000111f, 0.936523f, 0.000120f, 0.927246f, 0.000129f, 0.916504f, 0.000137f,
- 0.905273f, 0.000145f, 0.892578f, 0.000153f, 0.879395f, 0.000160f, 0.865234f, 0.000166f,
- 0.850098f, 0.000171f, 0.833984f, 0.000176f, 0.816895f, 0.000179f, 0.799316f, 0.000182f,
- 0.780762f, 0.000184f, 0.761230f, 0.000185f, 0.741699f, 0.000185f, 0.721191f, 0.000184f,
- 0.700684f, 0.000183f, 0.679688f, 0.000181f, 0.658203f, 0.000178f, 0.636719f, 0.000175f,
- 0.615234f, 0.000171f, 0.593262f, 0.000167f, 0.571777f, 0.000162f, 0.550293f, 0.000158f,
- 0.529297f, 0.000152f, 0.508301f, 0.000147f, 0.487793f, 0.000142f, 0.467529f, 0.000136f,
- 0.447754f, 0.000131f, 0.428223f, 0.000125f, 0.409424f, 0.000120f, 0.391113f, 0.000115f,
- 0.373291f, 0.000109f, 0.355957f, 0.000104f, 0.339355f, 0.000099f, 0.323242f, 0.000094f,
- 0.999512f, 0.000002f, 0.999512f, 0.000002f, 1.000000f, 0.000002f, 0.999512f, 0.000002f,
- 1.000000f, 0.000002f, 0.999512f, 0.000002f, 0.999512f, 0.000002f, 0.999512f, 0.000003f,
- 0.999512f, 0.000004f, 0.999512f, 0.000005f, 0.999023f, 0.000007f, 0.998535f, 0.000010f,
- 0.998047f, 0.000012f, 0.997559f, 0.000017f, 0.996582f, 0.000020f, 0.995605f, 0.000025f,
- 0.994629f, 0.000032f, 0.993164f, 0.000038f, 0.991211f, 0.000047f, 0.988770f, 0.000055f,
- 0.986328f, 0.000063f, 0.983398f, 0.000074f, 0.979492f, 0.000085f, 0.975586f, 0.000095f,
- 0.970703f, 0.000108f, 0.965332f, 0.000121f, 0.958984f, 0.000132f, 0.952148f, 0.000145f,
- 0.944336f, 0.000157f, 0.935547f, 0.000170f, 0.925781f, 0.000181f, 0.915039f, 0.000192f,
- 0.903809f, 0.000203f, 0.891113f, 0.000212f, 0.877930f, 0.000220f, 0.863281f, 0.000227f,
- 0.848145f, 0.000234f, 0.832031f, 0.000239f, 0.814941f, 0.000242f, 0.797363f, 0.000245f,
- 0.778809f, 0.000247f, 0.759766f, 0.000247f, 0.740234f, 0.000246f, 0.720215f, 0.000244f,
- 0.699707f, 0.000241f, 0.678711f, 0.000237f, 0.657715f, 0.000233f, 0.636230f, 0.000228f,
- 0.614746f, 0.000222f, 0.593750f, 0.000216f, 0.572266f, 0.000209f, 0.551270f, 0.000202f,
- 0.530273f, 0.000195f, 0.509277f, 0.000187f, 0.489014f, 0.000180f, 0.468994f, 0.000172f,
- 0.449463f, 0.000165f, 0.430176f, 0.000157f, 0.411377f, 0.000150f, 0.393311f, 0.000143f,
- 0.375488f, 0.000136f, 0.358398f, 0.000129f, 0.341797f, 0.000123f, 0.325684f, 0.000116f,
- 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000005f,
- 0.999512f, 0.000005f, 0.999512f, 0.000005f, 0.999512f, 0.000006f, 0.999512f, 0.000007f,
- 0.999512f, 0.000008f, 0.999512f, 0.000011f, 0.999023f, 0.000013f, 0.998535f, 0.000015f,
- 0.998047f, 0.000019f, 0.997559f, 0.000026f, 0.996582f, 0.000033f, 0.995605f, 0.000040f,
- 0.994141f, 0.000047f, 0.993164f, 0.000058f, 0.991211f, 0.000069f, 0.988770f, 0.000080f,
- 0.985840f, 0.000093f, 0.982910f, 0.000106f, 0.979004f, 0.000121f, 0.975098f, 0.000137f,
- 0.970215f, 0.000153f, 0.964355f, 0.000169f, 0.958008f, 0.000186f, 0.951172f, 0.000201f,
- 0.943359f, 0.000218f, 0.934082f, 0.000233f, 0.924316f, 0.000248f, 0.914062f, 0.000262f,
- 0.902344f, 0.000275f, 0.889648f, 0.000286f, 0.875977f, 0.000295f, 0.861816f, 0.000304f,
- 0.846680f, 0.000311f, 0.830566f, 0.000316f, 0.813477f, 0.000319f, 0.795898f, 0.000321f,
- 0.777344f, 0.000322f, 0.758301f, 0.000320f, 0.739258f, 0.000318f, 0.719238f, 0.000314f,
- 0.698730f, 0.000309f, 0.678223f, 0.000303f, 0.657227f, 0.000296f, 0.636230f, 0.000288f,
- 0.614746f, 0.000280f, 0.593750f, 0.000271f, 0.572754f, 0.000262f, 0.551758f, 0.000252f,
- 0.531250f, 0.000243f, 0.510742f, 0.000233f, 0.490479f, 0.000223f, 0.470703f, 0.000213f,
- 0.451172f, 0.000203f, 0.432129f, 0.000194f, 0.413574f, 0.000184f, 0.395508f, 0.000175f,
- 0.377930f, 0.000166f, 0.360840f, 0.000157f, 0.344238f, 0.000149f, 0.328125f, 0.000141f,
- 0.999512f, 0.000011f, 0.999512f, 0.000011f, 0.999512f, 0.000011f, 0.999512f, 0.000011f,
- 0.999512f, 0.000011f, 0.999512f, 0.000012f, 0.999512f, 0.000014f, 0.999512f, 0.000015f,
- 0.999512f, 0.000017f, 0.999023f, 0.000020f, 0.998535f, 0.000022f, 0.998535f, 0.000028f,
- 0.998047f, 0.000034f, 0.997559f, 0.000042f, 0.996582f, 0.000050f, 0.995605f, 0.000060f,
- 0.994141f, 0.000072f, 0.992676f, 0.000084f, 0.990723f, 0.000099f, 0.988281f, 0.000115f,
- 0.985840f, 0.000133f, 0.982422f, 0.000150f, 0.978516f, 0.000171f, 0.974609f, 0.000191f,
- 0.969238f, 0.000211f, 0.963867f, 0.000232f, 0.957520f, 0.000253f, 0.950195f, 0.000274f,
- 0.941895f, 0.000294f, 0.933105f, 0.000314f, 0.922852f, 0.000332f, 0.912109f, 0.000348f,
- 0.900879f, 0.000363f, 0.888184f, 0.000377f, 0.874512f, 0.000387f, 0.859863f, 0.000397f,
- 0.844727f, 0.000404f, 0.828613f, 0.000408f, 0.811523f, 0.000411f, 0.793945f, 0.000412f,
- 0.775879f, 0.000411f, 0.756836f, 0.000407f, 0.737793f, 0.000403f, 0.717773f, 0.000396f,
- 0.697754f, 0.000389f, 0.677246f, 0.000380f, 0.656738f, 0.000370f, 0.635742f, 0.000359f,
- 0.614746f, 0.000347f, 0.594238f, 0.000335f, 0.573242f, 0.000323f, 0.552734f, 0.000310f,
- 0.532227f, 0.000297f, 0.511719f, 0.000284f, 0.491943f, 0.000272f, 0.472412f, 0.000259f,
- 0.453125f, 0.000246f, 0.434082f, 0.000234f, 0.415771f, 0.000222f, 0.397705f, 0.000211f,
- 0.380127f, 0.000199f, 0.363281f, 0.000189f, 0.346680f, 0.000178f, 0.330811f, 0.000168f,
- 0.999512f, 0.000022f, 0.999512f, 0.000022f, 0.999512f, 0.000022f, 0.999512f, 0.000022f,
- 0.999512f, 0.000023f, 0.999512f, 0.000025f, 0.999512f, 0.000024f, 0.999512f, 0.000028f,
- 0.999023f, 0.000030f, 0.999023f, 0.000035f, 0.999023f, 0.000040f, 0.998535f, 0.000046f,
- 0.998047f, 0.000056f, 0.997559f, 0.000063f, 0.996094f, 0.000077f, 0.995605f, 0.000089f,
- 0.994141f, 0.000106f, 0.992188f, 0.000123f, 0.990234f, 0.000143f, 0.987793f, 0.000163f,
- 0.985352f, 0.000185f, 0.981934f, 0.000211f, 0.978027f, 0.000236f, 0.973633f, 0.000261f,
- 0.968750f, 0.000288f, 0.962891f, 0.000314f, 0.956055f, 0.000341f, 0.949219f, 0.000366f,
- 0.940918f, 0.000391f, 0.931641f, 0.000414f, 0.921875f, 0.000436f, 0.910645f, 0.000455f,
- 0.898926f, 0.000471f, 0.886230f, 0.000487f, 0.872559f, 0.000499f, 0.858398f, 0.000509f,
- 0.842773f, 0.000515f, 0.826660f, 0.000518f, 0.810059f, 0.000520f, 0.792480f, 0.000519f,
- 0.774414f, 0.000515f, 0.755371f, 0.000509f, 0.736328f, 0.000501f, 0.716797f, 0.000492f,
- 0.696777f, 0.000480f, 0.676758f, 0.000468f, 0.656250f, 0.000454f, 0.635742f, 0.000439f,
- 0.615234f, 0.000424f, 0.594238f, 0.000408f, 0.573730f, 0.000392f, 0.553223f, 0.000375f,
- 0.533203f, 0.000359f, 0.513184f, 0.000342f, 0.493408f, 0.000326f, 0.474121f, 0.000310f,
- 0.455078f, 0.000294f, 0.436279f, 0.000279f, 0.417969f, 0.000264f, 0.400146f, 0.000250f,
- 0.382812f, 0.000237f, 0.365723f, 0.000223f, 0.349365f, 0.000211f, 0.333496f, 0.000199f,
- 0.999512f, 0.000041f, 0.999512f, 0.000041f, 0.999512f, 0.000041f, 0.999512f, 0.000042f,
- 0.999512f, 0.000042f, 0.999512f, 0.000044f, 0.999512f, 0.000046f, 0.999512f, 0.000049f,
- 0.999512f, 0.000054f, 0.999512f, 0.000059f, 0.999023f, 0.000065f, 0.998535f, 0.000076f,
- 0.998047f, 0.000087f, 0.997070f, 0.000098f, 0.996582f, 0.000117f, 0.995117f, 0.000135f,
- 0.993652f, 0.000152f, 0.992188f, 0.000176f, 0.989746f, 0.000201f, 0.987793f, 0.000228f,
- 0.984863f, 0.000256f, 0.981445f, 0.000286f, 0.977539f, 0.000318f, 0.973145f, 0.000352f,
- 0.967773f, 0.000384f, 0.961914f, 0.000417f, 0.955566f, 0.000451f, 0.947754f, 0.000481f,
- 0.939453f, 0.000510f, 0.930176f, 0.000537f, 0.919922f, 0.000563f, 0.909180f, 0.000585f,
- 0.897461f, 0.000604f, 0.884766f, 0.000620f, 0.871094f, 0.000632f, 0.856445f, 0.000641f,
- 0.841309f, 0.000647f, 0.825195f, 0.000648f, 0.808105f, 0.000648f, 0.790527f, 0.000643f,
- 0.772949f, 0.000637f, 0.754395f, 0.000627f, 0.735352f, 0.000615f, 0.715820f, 0.000601f,
- 0.695801f, 0.000585f, 0.675781f, 0.000568f, 0.655762f, 0.000550f, 0.635742f, 0.000530f,
- 0.615234f, 0.000510f, 0.594727f, 0.000490f, 0.574707f, 0.000469f, 0.554199f, 0.000448f,
- 0.534180f, 0.000428f, 0.514648f, 0.000407f, 0.495117f, 0.000387f, 0.475830f, 0.000367f,
- 0.456787f, 0.000348f, 0.438232f, 0.000329f, 0.420166f, 0.000311f, 0.402344f, 0.000294f,
- 0.385254f, 0.000277f, 0.368408f, 0.000262f, 0.352051f, 0.000246f, 0.336182f, 0.000232f,
- 0.999512f, 0.000072f, 0.999512f, 0.000072f, 0.999512f, 0.000072f, 0.999512f, 0.000072f,
- 0.999512f, 0.000073f, 0.999512f, 0.000076f, 0.999512f, 0.000078f, 0.999512f, 0.000082f,
- 0.999023f, 0.000086f, 0.999023f, 0.000095f, 0.998535f, 0.000102f, 0.998047f, 0.000116f,
- 0.998047f, 0.000131f, 0.997070f, 0.000147f, 0.996094f, 0.000167f, 0.995117f, 0.000195f,
- 0.993652f, 0.000219f, 0.991699f, 0.000246f, 0.989746f, 0.000278f, 0.987305f, 0.000315f,
- 0.984375f, 0.000350f, 0.980957f, 0.000385f, 0.976562f, 0.000427f, 0.972168f, 0.000467f,
- 0.967285f, 0.000509f, 0.960938f, 0.000548f, 0.954102f, 0.000587f, 0.946777f, 0.000623f,
- 0.937988f, 0.000657f, 0.928711f, 0.000690f, 0.918457f, 0.000718f, 0.907715f, 0.000741f,
- 0.895508f, 0.000762f, 0.882812f, 0.000778f, 0.869141f, 0.000791f, 0.854492f, 0.000798f,
- 0.839355f, 0.000802f, 0.823242f, 0.000801f, 0.806152f, 0.000796f, 0.789062f, 0.000788f,
- 0.770996f, 0.000777f, 0.752930f, 0.000762f, 0.733887f, 0.000745f, 0.714844f, 0.000726f,
- 0.695312f, 0.000704f, 0.675293f, 0.000682f, 0.655273f, 0.000658f, 0.635254f, 0.000633f,
- 0.615234f, 0.000607f, 0.595215f, 0.000582f, 0.575195f, 0.000556f, 0.555176f, 0.000530f,
- 0.535645f, 0.000504f, 0.515625f, 0.000479f, 0.496582f, 0.000455f, 0.477539f, 0.000431f,
- 0.458984f, 0.000407f, 0.440430f, 0.000385f, 0.422363f, 0.000363f, 0.404785f, 0.000343f,
- 0.387695f, 0.000323f, 0.370850f, 0.000304f, 0.354736f, 0.000286f, 0.338867f, 0.000268f,
- 0.999512f, 0.000119f, 0.999512f, 0.000119f, 0.999512f, 0.000119f, 0.999512f, 0.000119f,
- 0.999512f, 0.000121f, 0.999512f, 0.000122f, 0.999512f, 0.000128f, 0.999512f, 0.000131f,
- 0.999512f, 0.000139f, 0.999023f, 0.000149f, 0.998535f, 0.000161f, 0.998047f, 0.000179f,
- 0.998047f, 0.000194f, 0.997070f, 0.000220f, 0.996094f, 0.000247f, 0.994629f, 0.000275f,
- 0.993652f, 0.000309f, 0.991699f, 0.000344f, 0.989746f, 0.000385f, 0.986816f, 0.000429f,
- 0.983887f, 0.000471f, 0.980469f, 0.000519f, 0.976074f, 0.000565f, 0.971680f, 0.000614f,
- 0.966309f, 0.000664f, 0.959961f, 0.000710f, 0.953125f, 0.000754f, 0.945312f, 0.000797f,
- 0.936523f, 0.000837f, 0.927246f, 0.000873f, 0.916992f, 0.000902f, 0.905762f, 0.000929f,
- 0.893555f, 0.000950f, 0.880859f, 0.000966f, 0.866699f, 0.000977f, 0.852539f, 0.000981f,
- 0.836914f, 0.000981f, 0.821289f, 0.000977f, 0.804688f, 0.000968f, 0.787109f, 0.000955f,
- 0.769531f, 0.000937f, 0.751465f, 0.000917f, 0.732422f, 0.000894f, 0.713379f, 0.000868f,
- 0.694336f, 0.000840f, 0.674805f, 0.000811f, 0.655273f, 0.000780f, 0.635254f, 0.000749f,
- 0.615723f, 0.000716f, 0.595703f, 0.000685f, 0.575684f, 0.000653f, 0.556152f, 0.000621f,
- 0.536621f, 0.000590f, 0.517090f, 0.000559f, 0.498291f, 0.000530f, 0.479492f, 0.000501f,
- 0.460938f, 0.000473f, 0.442627f, 0.000446f, 0.424805f, 0.000420f, 0.407227f, 0.000396f,
- 0.390137f, 0.000373f, 0.373535f, 0.000350f, 0.357422f, 0.000329f, 0.341553f, 0.000309f,
- 0.999512f, 0.000187f, 0.999512f, 0.000187f, 0.999512f, 0.000188f, 0.999512f, 0.000188f,
- 0.999512f, 0.000190f, 0.999512f, 0.000194f, 0.999512f, 0.000201f, 0.999023f, 0.000204f,
- 0.999023f, 0.000213f, 0.999023f, 0.000228f, 0.998535f, 0.000242f, 0.998535f, 0.000264f,
- 0.997559f, 0.000285f, 0.997070f, 0.000311f, 0.996094f, 0.000351f, 0.995117f, 0.000386f,
- 0.993164f, 0.000429f, 0.991211f, 0.000470f, 0.989258f, 0.000520f, 0.986328f, 0.000575f,
- 0.983398f, 0.000628f, 0.979492f, 0.000683f, 0.975586f, 0.000741f, 0.970703f, 0.000801f,
- 0.965332f, 0.000855f, 0.958984f, 0.000910f, 0.951660f, 0.000961f, 0.943848f, 0.001009f,
- 0.935059f, 0.001053f, 0.925781f, 0.001090f, 0.915039f, 0.001123f, 0.903809f, 0.001152f,
- 0.891602f, 0.001172f, 0.878906f, 0.001186f, 0.864746f, 0.001194f, 0.850586f, 0.001195f,
- 0.835449f, 0.001191f, 0.819336f, 0.001181f, 0.802734f, 0.001164f, 0.785645f, 0.001144f,
- 0.768066f, 0.001121f, 0.750000f, 0.001092f, 0.731445f, 0.001061f, 0.712402f, 0.001027f,
- 0.693359f, 0.000992f, 0.674316f, 0.000955f, 0.654785f, 0.000916f, 0.635254f, 0.000877f,
- 0.615723f, 0.000838f, 0.596191f, 0.000799f, 0.576660f, 0.000760f, 0.557129f, 0.000721f,
- 0.538086f, 0.000684f, 0.518555f, 0.000648f, 0.500000f, 0.000612f, 0.481445f, 0.000578f,
- 0.462891f, 0.000545f, 0.444824f, 0.000513f, 0.427246f, 0.000483f, 0.409912f, 0.000454f,
- 0.392822f, 0.000427f, 0.376221f, 0.000401f, 0.360107f, 0.000376f, 0.344482f, 0.000353f,
- 0.999512f, 0.000284f, 0.999512f, 0.000284f, 0.999512f, 0.000284f, 0.999512f, 0.000285f,
- 0.999512f, 0.000287f, 0.999512f, 0.000292f, 0.999512f, 0.000296f, 0.999023f, 0.000307f,
- 0.999023f, 0.000320f, 0.999023f, 0.000338f, 0.998535f, 0.000349f, 0.998047f, 0.000381f,
- 0.997559f, 0.000407f, 0.996582f, 0.000447f, 0.995605f, 0.000480f, 0.994629f, 0.000531f,
- 0.992676f, 0.000579f, 0.990723f, 0.000637f, 0.988770f, 0.000693f, 0.985840f, 0.000755f,
- 0.982422f, 0.000824f, 0.979004f, 0.000889f, 0.975098f, 0.000958f, 0.969727f, 0.001024f,
- 0.963867f, 0.001090f, 0.957520f, 0.001152f, 0.950684f, 0.001211f, 0.942383f, 0.001263f,
- 0.933594f, 0.001309f, 0.923828f, 0.001353f, 0.913086f, 0.001387f, 0.901855f, 0.001413f,
- 0.889648f, 0.001432f, 0.876465f, 0.001443f, 0.862793f, 0.001446f, 0.848145f, 0.001442f,
- 0.833008f, 0.001431f, 0.817383f, 0.001413f, 0.800781f, 0.001390f, 0.783691f, 0.001362f,
- 0.766113f, 0.001328f, 0.748535f, 0.001291f, 0.729980f, 0.001250f, 0.711426f, 0.001207f,
- 0.692871f, 0.001163f, 0.673828f, 0.001116f, 0.654785f, 0.001068f, 0.635254f, 0.001020f,
- 0.616211f, 0.000973f, 0.596680f, 0.000926f, 0.577637f, 0.000878f, 0.558105f, 0.000833f,
- 0.539062f, 0.000788f, 0.520508f, 0.000745f, 0.501465f, 0.000702f, 0.483154f, 0.000663f,
- 0.465088f, 0.000624f, 0.447266f, 0.000587f, 0.429443f, 0.000552f, 0.412354f, 0.000518f,
- 0.395508f, 0.000486f, 0.378906f, 0.000456f, 0.363037f, 0.000427f, 0.347168f, 0.000400f,
- 0.999512f, 0.000417f, 0.999512f, 0.000417f, 0.999512f, 0.000418f, 0.999512f, 0.000419f,
- 0.999512f, 0.000422f, 0.999512f, 0.000425f, 0.999023f, 0.000434f, 0.999023f, 0.000447f,
- 0.999023f, 0.000462f, 0.999023f, 0.000480f, 0.998047f, 0.000508f, 0.998047f, 0.000538f,
- 0.997070f, 0.000576f, 0.996582f, 0.000621f, 0.995605f, 0.000669f, 0.993652f, 0.000721f,
- 0.992188f, 0.000784f, 0.990723f, 0.000849f, 0.987793f, 0.000918f, 0.985840f, 0.000996f,
- 0.982422f, 0.001071f, 0.978516f, 0.001148f, 0.973633f, 0.001225f, 0.968750f, 0.001304f,
- 0.962891f, 0.001378f, 0.956543f, 0.001447f, 0.948730f, 0.001511f, 0.940918f, 0.001568f,
- 0.931641f, 0.001617f, 0.921875f, 0.001660f, 0.911621f, 0.001697f, 0.899902f, 0.001719f,
- 0.887695f, 0.001735f, 0.874512f, 0.001740f, 0.860840f, 0.001738f, 0.846191f, 0.001725f,
- 0.831055f, 0.001706f, 0.815430f, 0.001679f, 0.798828f, 0.001646f, 0.782227f, 0.001607f,
- 0.764648f, 0.001562f, 0.747070f, 0.001514f, 0.729004f, 0.001462f, 0.710449f, 0.001409f,
- 0.691895f, 0.001352f, 0.673340f, 0.001295f, 0.654297f, 0.001237f, 0.635254f, 0.001179f,
- 0.616211f, 0.001122f, 0.597168f, 0.001065f, 0.578125f, 0.001010f, 0.559570f, 0.000955f,
- 0.540527f, 0.000902f, 0.521973f, 0.000852f, 0.503418f, 0.000803f, 0.485352f, 0.000755f,
- 0.467285f, 0.000710f, 0.449463f, 0.000668f, 0.431885f, 0.000626f, 0.414795f, 0.000587f,
- 0.398193f, 0.000551f, 0.381836f, 0.000516f, 0.365723f, 0.000483f, 0.350098f, 0.000452f,
- 0.999023f, 0.000597f, 0.999023f, 0.000597f, 0.999023f, 0.000597f, 0.999023f, 0.000598f,
- 0.999023f, 0.000602f, 0.999023f, 0.000610f, 0.999023f, 0.000618f, 0.999023f, 0.000632f,
- 0.998535f, 0.000651f, 0.998535f, 0.000675f, 0.998047f, 0.000704f, 0.997559f, 0.000742f,
- 0.997070f, 0.000787f, 0.996094f, 0.000843f, 0.995117f, 0.000902f, 0.993652f, 0.000966f,
- 0.992188f, 0.001039f, 0.990234f, 0.001117f, 0.987793f, 0.001197f, 0.984863f, 0.001286f,
- 0.981445f, 0.001372f, 0.977539f, 0.001464f, 0.972656f, 0.001553f, 0.967773f, 0.001639f,
- 0.961914f, 0.001722f, 0.955078f, 0.001798f, 0.947754f, 0.001868f, 0.938965f, 0.001928f,
- 0.930176f, 0.001982f, 0.920410f, 0.002026f, 0.909668f, 0.002056f, 0.897949f, 0.002075f,
- 0.885254f, 0.002085f, 0.872559f, 0.002083f, 0.858398f, 0.002071f, 0.844238f, 0.002048f,
- 0.828613f, 0.002018f, 0.812988f, 0.001980f, 0.796875f, 0.001934f, 0.780273f, 0.001883f,
- 0.763184f, 0.001824f, 0.745605f, 0.001763f, 0.728027f, 0.001698f, 0.709473f, 0.001632f,
- 0.691406f, 0.001563f, 0.672852f, 0.001494f, 0.654297f, 0.001422f, 0.635254f, 0.001355f,
- 0.616699f, 0.001286f, 0.598145f, 0.001218f, 0.579102f, 0.001152f, 0.560547f, 0.001089f,
- 0.541992f, 0.001027f, 0.523438f, 0.000968f, 0.505371f, 0.000911f, 0.487305f, 0.000857f,
- 0.469482f, 0.000804f, 0.451904f, 0.000755f, 0.434570f, 0.000708f, 0.417480f, 0.000663f,
- 0.400879f, 0.000621f, 0.384521f, 0.000581f, 0.368652f, 0.000544f, 0.353027f, 0.000508f,
- 0.999023f, 0.000833f, 0.999023f, 0.000833f, 0.999023f, 0.000834f, 0.999023f, 0.000835f,
- 0.999023f, 0.000840f, 0.999023f, 0.000845f, 0.998535f, 0.000861f, 0.998535f, 0.000875f,
- 0.998535f, 0.000897f, 0.998047f, 0.000928f, 0.997559f, 0.000965f, 0.997070f, 0.001007f,
- 0.996582f, 0.001061f, 0.995605f, 0.001128f, 0.994629f, 0.001195f, 0.993164f, 0.001276f,
- 0.991699f, 0.001362f, 0.989258f, 0.001453f, 0.986816f, 0.001539f, 0.983887f, 0.001645f,
- 0.980469f, 0.001747f, 0.976562f, 0.001849f, 0.971680f, 0.001945f, 0.966309f, 0.002045f,
- 0.959961f, 0.002136f, 0.953613f, 0.002218f, 0.945801f, 0.002291f, 0.937500f, 0.002357f,
- 0.928223f, 0.002407f, 0.917969f, 0.002447f, 0.907227f, 0.002472f, 0.895508f, 0.002487f,
- 0.883301f, 0.002485f, 0.870117f, 0.002474f, 0.856445f, 0.002451f, 0.841797f, 0.002417f,
- 0.826660f, 0.002373f, 0.811035f, 0.002317f, 0.794922f, 0.002258f, 0.778320f, 0.002190f,
- 0.761230f, 0.002117f, 0.744141f, 0.002041f, 0.726562f, 0.001961f, 0.708496f, 0.001880f,
- 0.690430f, 0.001796f, 0.672363f, 0.001713f, 0.654297f, 0.001630f, 0.635742f, 0.001547f,
- 0.617188f, 0.001466f, 0.598633f, 0.001387f, 0.580078f, 0.001310f, 0.561523f, 0.001235f,
- 0.543457f, 0.001164f, 0.524902f, 0.001095f, 0.507324f, 0.001029f, 0.489258f, 0.000967f,
- 0.471680f, 0.000906f, 0.454346f, 0.000850f, 0.437012f, 0.000796f, 0.420166f, 0.000745f,
- 0.403564f, 0.000698f, 0.387451f, 0.000652f, 0.371582f, 0.000609f, 0.356201f, 0.000569f,
- 0.998535f, 0.001139f, 0.998535f, 0.001139f, 0.998535f, 0.001140f, 0.998535f, 0.001142f,
- 0.998535f, 0.001147f, 0.998535f, 0.001159f, 0.998535f, 0.001168f, 0.998047f, 0.001190f,
- 0.998047f, 0.001217f, 0.997559f, 0.001254f, 0.997559f, 0.001301f, 0.997070f, 0.001356f,
- 0.996094f, 0.001416f, 0.995605f, 0.001493f, 0.994141f, 0.001574f, 0.992676f, 0.001663f,
- 0.990723f, 0.001759f, 0.988770f, 0.001867f, 0.986328f, 0.001980f, 0.982910f, 0.002087f,
- 0.979492f, 0.002199f, 0.975586f, 0.002319f, 0.970703f, 0.002422f, 0.965332f, 0.002531f,
- 0.958496f, 0.002628f, 0.952148f, 0.002714f, 0.944336f, 0.002792f, 0.935547f, 0.002851f,
- 0.926270f, 0.002903f, 0.916016f, 0.002935f, 0.904785f, 0.002954f, 0.893066f, 0.002956f,
- 0.880859f, 0.002947f, 0.867676f, 0.002920f, 0.853516f, 0.002882f, 0.839355f, 0.002831f,
- 0.824219f, 0.002769f, 0.809082f, 0.002699f, 0.792969f, 0.002619f, 0.776367f, 0.002533f,
- 0.759766f, 0.002443f, 0.742676f, 0.002350f, 0.725586f, 0.002251f, 0.708008f, 0.002151f,
- 0.689941f, 0.002052f, 0.671875f, 0.001953f, 0.653809f, 0.001854f, 0.635742f, 0.001758f,
- 0.617676f, 0.001663f, 0.599121f, 0.001572f, 0.581055f, 0.001482f, 0.562988f, 0.001395f,
- 0.544922f, 0.001313f, 0.526855f, 0.001234f, 0.508789f, 0.001158f, 0.491455f, 0.001086f,
- 0.473877f, 0.001018f, 0.456787f, 0.000954f, 0.439697f, 0.000892f, 0.422852f, 0.000834f,
- 0.406494f, 0.000780f, 0.390381f, 0.000729f, 0.374512f, 0.000680f, 0.359131f, 0.000635f,
- 0.998047f, 0.001528f, 0.998047f, 0.001528f, 0.998047f, 0.001529f, 0.998047f, 0.001532f,
- 0.998047f, 0.001539f, 0.998047f, 0.001546f, 0.998047f, 0.001562f, 0.998047f, 0.001589f,
- 0.997559f, 0.001621f, 0.997559f, 0.001668f, 0.996582f, 0.001715f, 0.996582f, 0.001777f,
- 0.995605f, 0.001859f, 0.994629f, 0.001939f, 0.993652f, 0.002035f, 0.992188f, 0.002140f,
- 0.990234f, 0.002243f, 0.987793f, 0.002369f, 0.985352f, 0.002489f, 0.981934f, 0.002621f,
- 0.978516f, 0.002750f, 0.974121f, 0.002876f, 0.969238f, 0.002991f, 0.963867f, 0.003105f,
- 0.957031f, 0.003206f, 0.950195f, 0.003300f, 0.942383f, 0.003374f, 0.933594f, 0.003431f,
- 0.923828f, 0.003473f, 0.913574f, 0.003498f, 0.902344f, 0.003506f, 0.890625f, 0.003494f,
- 0.878418f, 0.003468f, 0.865234f, 0.003426f, 0.851074f, 0.003366f, 0.836914f, 0.003296f,
- 0.822266f, 0.003216f, 0.806641f, 0.003122f, 0.791016f, 0.003023f, 0.774902f, 0.002916f,
- 0.758301f, 0.002804f, 0.741211f, 0.002689f, 0.724121f, 0.002573f, 0.707031f, 0.002453f,
- 0.689453f, 0.002335f, 0.671875f, 0.002216f, 0.653809f, 0.002102f, 0.636230f, 0.001987f,
- 0.618164f, 0.001878f, 0.600098f, 0.001771f, 0.582031f, 0.001668f, 0.564453f, 0.001569f,
- 0.546387f, 0.001475f, 0.528809f, 0.001384f, 0.511230f, 0.001297f, 0.493652f, 0.001217f,
- 0.476318f, 0.001139f, 0.459229f, 0.001065f, 0.442383f, 0.000996f, 0.425781f, 0.000930f,
- 0.409424f, 0.000869f, 0.393311f, 0.000811f, 0.377686f, 0.000757f, 0.362305f, 0.000707f,
- 0.997559f, 0.002018f, 0.997559f, 0.002018f, 0.997559f, 0.002018f, 0.997559f, 0.002022f,
- 0.997559f, 0.002028f, 0.997559f, 0.002045f, 0.997559f, 0.002066f, 0.997559f, 0.002092f,
- 0.997559f, 0.002129f, 0.996582f, 0.002176f, 0.996094f, 0.002235f, 0.995605f, 0.002312f,
- 0.995605f, 0.002407f, 0.993652f, 0.002491f, 0.992676f, 0.002605f, 0.991211f, 0.002729f,
- 0.989258f, 0.002846f, 0.987305f, 0.002987f, 0.984375f, 0.003120f, 0.980957f, 0.003263f,
- 0.977051f, 0.003403f, 0.972656f, 0.003542f, 0.967285f, 0.003666f, 0.961914f, 0.003782f,
- 0.955566f, 0.003889f, 0.947754f, 0.003967f, 0.939941f, 0.004044f, 0.931152f, 0.004097f,
- 0.921387f, 0.004131f, 0.911133f, 0.004139f, 0.899902f, 0.004131f, 0.888184f, 0.004108f,
- 0.875488f, 0.004055f, 0.862305f, 0.003990f, 0.848633f, 0.003914f, 0.834473f, 0.003819f,
- 0.819824f, 0.003712f, 0.804199f, 0.003593f, 0.788574f, 0.003469f, 0.772949f, 0.003338f,
- 0.756348f, 0.003201f, 0.739746f, 0.003063f, 0.723145f, 0.002924f, 0.706055f, 0.002781f,
- 0.688965f, 0.002644f, 0.671387f, 0.002506f, 0.653809f, 0.002371f, 0.636230f, 0.002239f,
- 0.618652f, 0.002111f, 0.601074f, 0.001989f, 0.583496f, 0.001871f, 0.565430f, 0.001759f,
- 0.547852f, 0.001650f, 0.530273f, 0.001547f, 0.513184f, 0.001449f, 0.495850f, 0.001356f,
- 0.478760f, 0.001269f, 0.461670f, 0.001185f, 0.445068f, 0.001107f, 0.428467f, 0.001035f,
- 0.412354f, 0.000965f, 0.396240f, 0.000901f, 0.380615f, 0.000840f, 0.365479f, 0.000783f,
- 0.997070f, 0.002625f, 0.997070f, 0.002625f, 0.997070f, 0.002626f, 0.997070f, 0.002630f,
- 0.997070f, 0.002640f, 0.997070f, 0.002659f, 0.997070f, 0.002676f, 0.996582f, 0.002708f,
- 0.996582f, 0.002752f, 0.996094f, 0.002813f, 0.995605f, 0.002886f, 0.995117f, 0.002956f,
- 0.994141f, 0.003071f, 0.992676f, 0.003172f, 0.991699f, 0.003292f, 0.990234f, 0.003433f,
- 0.988281f, 0.003580f, 0.985840f, 0.003727f, 0.982910f, 0.003870f, 0.979492f, 0.004028f,
- 0.975586f, 0.004177f, 0.971191f, 0.004322f, 0.966309f, 0.004456f, 0.959961f, 0.004570f,
- 0.953125f, 0.004669f, 0.945801f, 0.004757f, 0.937500f, 0.004826f, 0.928711f, 0.004864f,
- 0.918945f, 0.004883f, 0.908691f, 0.004875f, 0.897461f, 0.004845f, 0.885254f, 0.004795f,
- 0.872559f, 0.004723f, 0.859863f, 0.004631f, 0.846191f, 0.004520f, 0.832031f, 0.004398f,
- 0.817383f, 0.004261f, 0.802246f, 0.004116f, 0.786621f, 0.003963f, 0.770996f, 0.003805f,
- 0.754883f, 0.003639f, 0.738770f, 0.003475f, 0.722168f, 0.003307f, 0.705078f, 0.003143f,
- 0.688477f, 0.002981f, 0.671387f, 0.002821f, 0.653809f, 0.002665f, 0.636719f, 0.002512f,
- 0.619141f, 0.002367f, 0.602051f, 0.002226f, 0.584473f, 0.002090f, 0.566895f, 0.001963f,
- 0.549805f, 0.001840f, 0.532227f, 0.001722f, 0.515137f, 0.001613f, 0.498047f, 0.001508f,
- 0.481201f, 0.001409f, 0.464355f, 0.001316f, 0.447754f, 0.001228f, 0.431396f, 0.001145f,
- 0.415283f, 0.001069f, 0.399414f, 0.000997f, 0.383789f, 0.000929f, 0.368652f, 0.000865f,
- 0.996582f, 0.003370f, 0.996582f, 0.003370f, 0.996582f, 0.003372f, 0.996582f, 0.003378f,
- 0.996582f, 0.003389f, 0.996094f, 0.003410f, 0.996094f, 0.003435f, 0.996094f, 0.003471f,
- 0.996094f, 0.003523f, 0.995117f, 0.003588f, 0.995117f, 0.003664f, 0.994141f, 0.003754f,
- 0.993164f, 0.003864f, 0.992676f, 0.003990f, 0.990723f, 0.004128f, 0.989746f, 0.004288f,
- 0.987793f, 0.004429f, 0.984375f, 0.004601f, 0.981445f, 0.004757f, 0.978027f, 0.004925f,
- 0.974121f, 0.005089f, 0.969727f, 0.005241f, 0.964355f, 0.005375f, 0.958008f, 0.005486f,
- 0.951172f, 0.005596f, 0.943848f, 0.005665f, 0.935547f, 0.005718f, 0.925781f, 0.005737f,
- 0.916016f, 0.005733f, 0.905762f, 0.005707f, 0.894531f, 0.005650f, 0.882324f, 0.005569f,
- 0.870117f, 0.005466f, 0.856934f, 0.005341f, 0.843262f, 0.005199f, 0.829102f, 0.005043f,
- 0.814941f, 0.004871f, 0.799805f, 0.004692f, 0.784668f, 0.004505f, 0.769043f, 0.004314f,
- 0.753418f, 0.004116f, 0.737305f, 0.003922f, 0.721191f, 0.003729f, 0.704590f, 0.003536f,
- 0.687988f, 0.003347f, 0.670898f, 0.003162f, 0.654297f, 0.002983f, 0.637207f, 0.002810f,
- 0.620117f, 0.002642f, 0.603027f, 0.002481f, 0.585938f, 0.002329f, 0.568359f, 0.002182f,
- 0.551270f, 0.002045f, 0.534180f, 0.001913f, 0.517090f, 0.001788f, 0.500488f, 0.001671f,
- 0.483643f, 0.001560f, 0.467041f, 0.001456f, 0.450684f, 0.001358f, 0.434326f, 0.001266f,
- 0.418213f, 0.001181f, 0.402588f, 0.001101f, 0.386963f, 0.001025f, 0.371826f, 0.000954f,
- 0.995605f, 0.004276f, 0.995605f, 0.004276f, 0.995605f, 0.004280f, 0.995605f, 0.004284f,
- 0.995605f, 0.004299f, 0.995117f, 0.004318f, 0.995117f, 0.004349f, 0.995117f, 0.004383f,
- 0.994629f, 0.004456f, 0.994629f, 0.004524f, 0.994141f, 0.004612f, 0.993164f, 0.004704f,
- 0.992676f, 0.004848f, 0.991699f, 0.004974f, 0.990234f, 0.005142f, 0.987793f, 0.005291f,
- 0.986328f, 0.005474f, 0.982910f, 0.005638f, 0.980469f, 0.005825f, 0.976562f, 0.005989f,
- 0.972656f, 0.006157f, 0.967773f, 0.006313f, 0.961914f, 0.006443f, 0.955566f, 0.006554f,
- 0.948730f, 0.006645f, 0.940918f, 0.006702f, 0.932617f, 0.006733f, 0.923340f, 0.006733f,
- 0.913574f, 0.006699f, 0.902832f, 0.006645f, 0.891602f, 0.006550f, 0.879395f, 0.006435f,
- 0.867188f, 0.006294f, 0.854004f, 0.006130f, 0.840332f, 0.005951f, 0.826660f, 0.005756f,
- 0.812500f, 0.005543f, 0.797363f, 0.005325f, 0.782715f, 0.005100f, 0.767090f, 0.004871f,
- 0.751465f, 0.004642f, 0.735840f, 0.004414f, 0.719727f, 0.004185f, 0.703613f, 0.003960f,
- 0.687500f, 0.003744f, 0.670898f, 0.003531f, 0.654297f, 0.003326f, 0.637695f, 0.003128f,
- 0.620605f, 0.002939f, 0.604004f, 0.002756f, 0.586914f, 0.002584f, 0.569824f, 0.002420f,
- 0.553223f, 0.002264f, 0.536133f, 0.002117f, 0.519531f, 0.001978f, 0.502930f, 0.001847f,
- 0.486328f, 0.001723f, 0.469727f, 0.001607f, 0.453369f, 0.001498f, 0.437256f, 0.001395f,
- 0.421387f, 0.001300f, 0.405762f, 0.001211f, 0.390381f, 0.001127f, 0.375244f, 0.001050f,
- 0.994141f, 0.005367f, 0.994141f, 0.005367f, 0.994141f, 0.005371f, 0.994141f, 0.005375f,
- 0.994141f, 0.005394f, 0.994141f, 0.005413f, 0.994141f, 0.005447f, 0.994141f, 0.005508f,
- 0.993652f, 0.005558f, 0.993652f, 0.005650f, 0.992676f, 0.005741f, 0.991699f, 0.005848f,
- 0.991211f, 0.006004f, 0.990234f, 0.006149f, 0.988281f, 0.006317f, 0.986328f, 0.006504f,
- 0.984863f, 0.006687f, 0.981934f, 0.006866f, 0.978516f, 0.007050f, 0.974609f, 0.007233f,
- 0.970215f, 0.007393f, 0.965820f, 0.007553f, 0.959961f, 0.007675f, 0.953125f, 0.007774f,
- 0.946289f, 0.007843f, 0.938477f, 0.007889f, 0.929688f, 0.007889f, 0.920410f, 0.007858f,
- 0.910156f, 0.007793f, 0.899414f, 0.007694f, 0.888672f, 0.007565f, 0.876465f, 0.007401f,
- 0.864258f, 0.007214f, 0.851074f, 0.007008f, 0.837402f, 0.006779f, 0.823730f, 0.006535f,
- 0.809570f, 0.006279f, 0.794922f, 0.006023f, 0.780273f, 0.005753f, 0.765137f, 0.005482f,
- 0.750000f, 0.005215f, 0.734375f, 0.004944f, 0.718750f, 0.004681f, 0.703125f, 0.004425f,
- 0.687012f, 0.004173f, 0.670898f, 0.003929f, 0.654297f, 0.003700f, 0.638184f, 0.003473f,
- 0.621582f, 0.003260f, 0.604980f, 0.003056f, 0.588379f, 0.002861f, 0.571777f, 0.002676f,
- 0.555176f, 0.002502f, 0.538574f, 0.002337f, 0.521973f, 0.002180f, 0.505371f, 0.002035f,
- 0.488770f, 0.001898f, 0.472656f, 0.001769f, 0.456299f, 0.001649f, 0.440430f, 0.001534f,
- 0.424561f, 0.001430f, 0.408936f, 0.001329f, 0.393555f, 0.001238f, 0.378418f, 0.001151f,
- 0.993164f, 0.006672f, 0.993164f, 0.006672f, 0.993164f, 0.006676f, 0.993164f, 0.006687f,
- 0.993164f, 0.006699f, 0.993164f, 0.006721f, 0.992676f, 0.006760f, 0.992676f, 0.006821f,
- 0.992188f, 0.006897f, 0.991699f, 0.006973f, 0.991211f, 0.007099f, 0.990234f, 0.007206f,
- 0.990234f, 0.007366f, 0.988281f, 0.007519f, 0.986328f, 0.007706f, 0.984863f, 0.007912f,
- 0.982422f, 0.008087f, 0.979980f, 0.008286f, 0.977051f, 0.008476f, 0.972656f, 0.008667f,
- 0.968262f, 0.008827f, 0.962891f, 0.008980f, 0.957520f, 0.009079f, 0.951172f, 0.009171f,
- 0.943848f, 0.009216f, 0.935547f, 0.009224f, 0.926758f, 0.009193f, 0.917480f, 0.009125f,
- 0.906738f, 0.009010f, 0.895996f, 0.008865f, 0.885254f, 0.008682f, 0.873047f, 0.008469f,
- 0.860840f, 0.008232f, 0.847656f, 0.007973f, 0.834473f, 0.007690f, 0.820801f, 0.007397f,
- 0.807129f, 0.007092f, 0.792969f, 0.006783f, 0.778320f, 0.006462f, 0.763184f, 0.006145f,
- 0.748535f, 0.005833f, 0.733398f, 0.005524f, 0.717773f, 0.005219f, 0.702148f, 0.004925f,
- 0.686523f, 0.004639f, 0.670898f, 0.004364f, 0.654785f, 0.004097f, 0.638672f, 0.003847f,
- 0.622559f, 0.003605f, 0.605957f, 0.003376f, 0.589844f, 0.003157f, 0.573242f, 0.002951f,
- 0.556641f, 0.002756f, 0.540527f, 0.002573f, 0.523926f, 0.002399f, 0.507812f, 0.002237f,
- 0.491455f, 0.002085f, 0.475342f, 0.001943f, 0.459229f, 0.001809f, 0.443359f, 0.001684f,
- 0.427734f, 0.001567f, 0.412109f, 0.001457f, 0.396973f, 0.001356f, 0.382080f, 0.001261f,
- 0.991699f, 0.008217f, 0.991699f, 0.008217f, 0.991699f, 0.008217f, 0.991699f, 0.008232f,
- 0.991211f, 0.008240f, 0.991211f, 0.008270f, 0.991211f, 0.008324f, 0.991211f, 0.008377f,
- 0.990723f, 0.008461f, 0.990234f, 0.008553f, 0.989746f, 0.008682f, 0.988770f, 0.008820f,
- 0.987793f, 0.008972f, 0.986816f, 0.009163f, 0.985352f, 0.009338f, 0.982910f, 0.009567f,
- 0.980957f, 0.009758f, 0.977539f, 0.009956f, 0.974609f, 0.010155f, 0.970215f, 0.010330f,
- 0.965820f, 0.010483f, 0.960449f, 0.010597f, 0.954590f, 0.010696f, 0.947754f, 0.010750f,
- 0.940430f, 0.010757f, 0.932129f, 0.010735f, 0.923340f, 0.010651f, 0.913574f, 0.010536f,
- 0.903809f, 0.010376f, 0.892578f, 0.010162f, 0.881348f, 0.009926f, 0.869629f, 0.009651f,
- 0.857422f, 0.009354f, 0.844727f, 0.009026f, 0.831543f, 0.008690f, 0.817871f, 0.008331f,
- 0.804199f, 0.007973f, 0.790527f, 0.007603f, 0.775879f, 0.007233f, 0.761719f, 0.006866f,
- 0.747070f, 0.006500f, 0.731934f, 0.006145f, 0.716797f, 0.005798f, 0.701660f, 0.005466f,
- 0.686523f, 0.005138f, 0.670898f, 0.004829f, 0.655273f, 0.004532f, 0.639160f, 0.004246f,
- 0.623535f, 0.003975f, 0.607422f, 0.003719f, 0.591309f, 0.003477f, 0.575195f, 0.003246f,
- 0.558594f, 0.003029f, 0.542480f, 0.002827f, 0.526367f, 0.002634f, 0.510254f, 0.002455f,
- 0.494141f, 0.002285f, 0.478271f, 0.002129f, 0.462402f, 0.001980f, 0.446533f, 0.001843f,
- 0.430908f, 0.001715f, 0.415527f, 0.001594f, 0.400391f, 0.001483f, 0.385498f, 0.001378f,
- 0.989746f, 0.010040f, 0.989746f, 0.010040f, 0.989746f, 0.010040f, 0.989746f, 0.010048f,
- 0.989746f, 0.010071f, 0.989746f, 0.010094f, 0.989258f, 0.010147f, 0.989258f, 0.010223f,
- 0.988770f, 0.010300f, 0.988770f, 0.010406f, 0.987793f, 0.010529f, 0.986816f, 0.010696f,
- 0.986328f, 0.010857f, 0.984863f, 0.011055f, 0.982422f, 0.011238f, 0.981445f, 0.011467f,
- 0.978516f, 0.011673f, 0.975098f, 0.011871f, 0.972168f, 0.012062f, 0.967285f, 0.012215f,
- 0.962402f, 0.012352f, 0.957031f, 0.012459f, 0.951172f, 0.012535f, 0.944336f, 0.012535f,
- 0.937012f, 0.012520f, 0.928711f, 0.012428f, 0.919922f, 0.012299f, 0.910156f, 0.012115f,
- 0.899414f, 0.011879f, 0.889160f, 0.011612f, 0.877441f, 0.011299f, 0.865723f, 0.010956f,
- 0.853516f, 0.010582f, 0.841309f, 0.010193f, 0.828125f, 0.009773f, 0.814941f, 0.009361f,
- 0.801270f, 0.008926f, 0.787598f, 0.008499f, 0.773926f, 0.008064f, 0.759766f, 0.007641f,
- 0.745117f, 0.007225f, 0.730469f, 0.006817f, 0.716309f, 0.006424f, 0.701172f, 0.006042f,
- 0.686035f, 0.005676f, 0.670898f, 0.005329f, 0.655273f, 0.004993f, 0.640137f, 0.004673f,
- 0.624512f, 0.004372f, 0.608398f, 0.004086f, 0.592773f, 0.003817f, 0.576660f, 0.003561f,
- 0.561035f, 0.003323f, 0.544922f, 0.003098f, 0.528809f, 0.002884f, 0.512695f, 0.002686f,
- 0.497070f, 0.002501f, 0.481201f, 0.002327f, 0.465332f, 0.002165f, 0.449707f, 0.002014f,
- 0.434326f, 0.001873f, 0.418945f, 0.001740f, 0.403809f, 0.001617f, 0.388916f, 0.001504f,
- 0.987793f, 0.012169f, 0.987793f, 0.012169f, 0.987793f, 0.012169f, 0.987793f, 0.012184f,
- 0.987305f, 0.012207f, 0.987305f, 0.012245f, 0.987305f, 0.012291f, 0.986816f, 0.012360f,
- 0.986816f, 0.012459f, 0.986328f, 0.012573f, 0.985840f, 0.012695f, 0.984863f, 0.012878f,
- 0.983887f, 0.013046f, 0.982422f, 0.013237f, 0.980469f, 0.013466f, 0.979004f, 0.013680f,
- 0.976074f, 0.013878f, 0.972656f, 0.014069f, 0.969238f, 0.014259f, 0.964355f, 0.014397f,
- 0.959961f, 0.014488f, 0.954102f, 0.014580f, 0.947754f, 0.014595f, 0.940430f, 0.014557f,
- 0.933105f, 0.014481f, 0.925293f, 0.014328f, 0.915527f, 0.014122f, 0.906250f, 0.013870f,
- 0.895996f, 0.013565f, 0.885254f, 0.013206f, 0.873535f, 0.012817f, 0.862305f, 0.012383f,
- 0.850098f, 0.011932f, 0.837891f, 0.011452f, 0.824707f, 0.010963f, 0.812012f, 0.010460f,
- 0.798828f, 0.009964f, 0.785156f, 0.009460f, 0.771484f, 0.008965f, 0.757812f, 0.008484f,
- 0.743652f, 0.008003f, 0.729492f, 0.007542f, 0.715332f, 0.007095f, 0.700684f, 0.006668f,
- 0.686035f, 0.006256f, 0.670898f, 0.005863f, 0.655762f, 0.005489f, 0.640625f, 0.005135f,
- 0.625488f, 0.004799f, 0.609863f, 0.004478f, 0.594238f, 0.004181f, 0.578613f, 0.003901f,
- 0.562988f, 0.003635f, 0.547363f, 0.003386f, 0.531250f, 0.003153f, 0.515625f, 0.002935f,
- 0.500000f, 0.002729f, 0.484131f, 0.002539f, 0.468506f, 0.002361f, 0.453125f, 0.002195f,
- 0.437744f, 0.002041f, 0.422363f, 0.001897f, 0.407471f, 0.001763f, 0.392578f, 0.001637f,
- 0.985352f, 0.014641f, 0.985352f, 0.014641f, 0.984863f, 0.014648f, 0.984863f, 0.014656f,
- 0.984863f, 0.014679f, 0.984863f, 0.014717f, 0.984863f, 0.014771f, 0.984375f, 0.014839f,
- 0.984375f, 0.014938f, 0.983398f, 0.015060f, 0.983398f, 0.015244f, 0.981934f, 0.015388f,
- 0.980957f, 0.015587f, 0.979492f, 0.015778f, 0.977539f, 0.015976f, 0.975586f, 0.016190f,
- 0.972656f, 0.016388f, 0.969727f, 0.016571f, 0.965820f, 0.016739f, 0.961426f, 0.016861f,
- 0.956055f, 0.016922f, 0.950684f, 0.016953f, 0.943848f, 0.016922f, 0.937012f, 0.016815f,
- 0.929199f, 0.016663f, 0.920410f, 0.016434f, 0.911621f, 0.016144f, 0.901855f, 0.015793f,
- 0.891602f, 0.015411f, 0.880859f, 0.014954f, 0.869629f, 0.014473f, 0.857910f, 0.013947f,
- 0.846191f, 0.013390f, 0.833984f, 0.012825f, 0.821289f, 0.012253f, 0.809082f, 0.011665f,
- 0.795898f, 0.011086f, 0.782715f, 0.010506f, 0.769531f, 0.009933f, 0.755859f, 0.009377f,
- 0.742188f, 0.008842f, 0.728516f, 0.008316f, 0.714355f, 0.007812f, 0.700195f, 0.007336f,
- 0.685547f, 0.006874f, 0.670898f, 0.006435f, 0.656250f, 0.006020f, 0.641602f, 0.005623f,
- 0.626465f, 0.005253f, 0.611328f, 0.004902f, 0.596191f, 0.004570f, 0.580566f, 0.004261f,
- 0.564941f, 0.003967f, 0.549316f, 0.003695f, 0.533691f, 0.003437f, 0.518066f, 0.003199f,
- 0.502930f, 0.002975f, 0.487305f, 0.002766f, 0.471680f, 0.002571f, 0.456299f, 0.002388f,
- 0.441162f, 0.002220f, 0.426025f, 0.002062f, 0.411133f, 0.001916f, 0.396240f, 0.001781f,
- 0.982422f, 0.017502f, 0.982422f, 0.017502f, 0.982422f, 0.017502f, 0.982422f, 0.017517f,
- 0.981934f, 0.017532f, 0.981934f, 0.017593f, 0.981934f, 0.017639f, 0.981934f, 0.017731f,
- 0.981445f, 0.017838f, 0.980957f, 0.017960f, 0.979980f, 0.018112f, 0.979004f, 0.018295f,
- 0.978027f, 0.018478f, 0.975586f, 0.018677f, 0.974609f, 0.018860f, 0.972168f, 0.019073f,
- 0.969238f, 0.019287f, 0.965820f, 0.019455f, 0.962402f, 0.019562f, 0.958008f, 0.019653f,
- 0.952637f, 0.019653f, 0.946289f, 0.019623f, 0.939453f, 0.019516f, 0.932617f, 0.019348f,
- 0.924316f, 0.019089f, 0.916016f, 0.018784f, 0.907227f, 0.018387f, 0.897461f, 0.017944f,
- 0.887207f, 0.017426f, 0.876465f, 0.016861f, 0.865234f, 0.016266f, 0.854004f, 0.015640f,
- 0.842285f, 0.014999f, 0.830078f, 0.014320f, 0.818359f, 0.013641f, 0.805664f, 0.012962f,
- 0.792969f, 0.012291f, 0.780273f, 0.011627f, 0.767090f, 0.010979f, 0.753906f, 0.010345f,
- 0.740723f, 0.009735f, 0.727539f, 0.009155f, 0.713867f, 0.008591f, 0.699707f, 0.008049f,
- 0.685547f, 0.007534f, 0.671387f, 0.007050f, 0.656738f, 0.006588f, 0.642578f, 0.006149f,
- 0.627441f, 0.005737f, 0.612793f, 0.005352f, 0.597656f, 0.004986f, 0.582520f, 0.004642f,
- 0.567383f, 0.004322f, 0.551758f, 0.004021f, 0.536621f, 0.003744f, 0.520996f, 0.003481f,
- 0.505859f, 0.003235f, 0.490479f, 0.003006f, 0.475098f, 0.002794f, 0.459717f, 0.002596f,
- 0.444580f, 0.002411f, 0.429688f, 0.002241f, 0.414795f, 0.002081f, 0.400146f, 0.001933f,
- 0.979004f, 0.020798f, 0.979004f, 0.020798f, 0.979004f, 0.020798f, 0.979004f, 0.020813f,
- 0.979004f, 0.020844f, 0.978516f, 0.020874f, 0.978516f, 0.020935f, 0.978027f, 0.021027f,
- 0.978027f, 0.021149f, 0.977539f, 0.021286f, 0.977051f, 0.021454f, 0.975586f, 0.021622f,
- 0.974121f, 0.021820f, 0.972656f, 0.021988f, 0.970215f, 0.022186f, 0.968750f, 0.022385f,
- 0.965820f, 0.022552f, 0.961914f, 0.022675f, 0.958008f, 0.022736f, 0.953613f, 0.022751f,
- 0.948242f, 0.022736f, 0.942383f, 0.022614f, 0.935547f, 0.022415f, 0.927734f, 0.022156f,
- 0.919922f, 0.021790f, 0.911621f, 0.021362f, 0.901855f, 0.020859f, 0.892090f, 0.020279f,
- 0.882324f, 0.019638f, 0.872070f, 0.018951f, 0.860840f, 0.018234f, 0.849609f, 0.017487f,
- 0.838379f, 0.016708f, 0.826172f, 0.015930f, 0.814453f, 0.015144f, 0.802246f, 0.014359f,
- 0.790527f, 0.013588f, 0.777832f, 0.012833f, 0.765137f, 0.012100f, 0.752441f, 0.011383f,
- 0.739258f, 0.010696f, 0.726074f, 0.010040f, 0.712891f, 0.009415f, 0.699219f, 0.008812f,
- 0.685547f, 0.008240f, 0.671875f, 0.007698f, 0.657715f, 0.007191f, 0.643555f, 0.006710f,
- 0.628906f, 0.006252f, 0.614258f, 0.005829f, 0.599609f, 0.005428f, 0.584473f, 0.005051f,
- 0.569336f, 0.004704f, 0.554199f, 0.004372f, 0.539062f, 0.004063f, 0.523926f, 0.003780f,
- 0.508789f, 0.003513f, 0.493652f, 0.003263f, 0.478271f, 0.003033f, 0.463135f, 0.002817f,
- 0.448242f, 0.002615f, 0.433350f, 0.002430f, 0.418457f, 0.002256f, 0.403809f, 0.002094f,
- 0.975098f, 0.024582f, 0.975098f, 0.024567f, 0.975098f, 0.024582f, 0.975098f, 0.024597f,
- 0.975098f, 0.024628f, 0.975098f, 0.024658f, 0.975098f, 0.024734f, 0.974609f, 0.024826f,
- 0.973633f, 0.024933f, 0.973633f, 0.025055f, 0.972656f, 0.025223f, 0.972168f, 0.025421f,
- 0.970215f, 0.025589f, 0.968262f, 0.025742f, 0.966309f, 0.025925f, 0.964355f, 0.026108f,
- 0.960938f, 0.026230f, 0.957520f, 0.026321f, 0.953613f, 0.026352f, 0.948242f, 0.026260f,
- 0.943848f, 0.026154f, 0.937500f, 0.025970f, 0.930664f, 0.025650f, 0.922852f, 0.025253f,
- 0.915039f, 0.024765f, 0.906738f, 0.024200f, 0.897461f, 0.023560f, 0.887207f, 0.022827f,
- 0.877441f, 0.022064f, 0.866699f, 0.021225f, 0.855957f, 0.020370f, 0.845215f, 0.019470f,
- 0.833984f, 0.018570f, 0.822266f, 0.017654f, 0.811035f, 0.016754f, 0.799316f, 0.015854f,
- 0.787109f, 0.014984f, 0.775391f, 0.014122f, 0.763184f, 0.013298f, 0.750488f, 0.012489f,
- 0.737793f, 0.011726f, 0.725098f, 0.010986f, 0.712402f, 0.010284f, 0.699219f, 0.009621f,
- 0.685547f, 0.008987f, 0.671875f, 0.008392f, 0.658203f, 0.007828f, 0.644531f, 0.007305f,
- 0.630371f, 0.006802f, 0.615723f, 0.006336f, 0.601562f, 0.005898f, 0.586914f, 0.005489f,
- 0.571777f, 0.005104f, 0.557129f, 0.004745f, 0.541992f, 0.004414f, 0.526855f, 0.004101f,
- 0.511719f, 0.003809f, 0.496826f, 0.003538f, 0.481689f, 0.003286f, 0.466797f, 0.003052f,
- 0.451904f, 0.002832f, 0.437012f, 0.002630f, 0.422363f, 0.002441f, 0.407715f, 0.002268f,
- 0.970703f, 0.028870f, 0.970703f, 0.028870f, 0.970703f, 0.028885f, 0.970703f, 0.028900f,
- 0.970703f, 0.028915f, 0.970703f, 0.028961f, 0.970215f, 0.029022f, 0.970215f, 0.029114f,
- 0.969727f, 0.029251f, 0.968750f, 0.029373f, 0.968262f, 0.029526f, 0.966797f, 0.029678f,
- 0.966309f, 0.029877f, 0.964844f, 0.030045f, 0.962402f, 0.030167f, 0.959473f, 0.030304f,
- 0.956543f, 0.030411f, 0.953125f, 0.030411f, 0.948242f, 0.030319f, 0.943359f, 0.030197f,
- 0.938477f, 0.029968f, 0.931641f, 0.029648f, 0.924805f, 0.029221f, 0.917969f, 0.028687f,
- 0.909180f, 0.028030f, 0.900879f, 0.027313f, 0.891602f, 0.026505f, 0.881836f, 0.025620f,
- 0.871582f, 0.024673f, 0.861816f, 0.023697f, 0.851074f, 0.022659f, 0.840820f, 0.021622f,
- 0.829590f, 0.020569f, 0.818359f, 0.019516f, 0.807129f, 0.018478f, 0.795898f, 0.017456f,
- 0.784180f, 0.016464f, 0.772461f, 0.015503f, 0.760742f, 0.014572f, 0.748535f, 0.013672f,
- 0.736816f, 0.012817f, 0.724121f, 0.012001f, 0.711914f, 0.011215f, 0.698730f, 0.010483f,
- 0.686035f, 0.009789f, 0.672852f, 0.009132f, 0.659180f, 0.008514f, 0.645508f, 0.007935f,
- 0.631836f, 0.007389f, 0.617676f, 0.006878f, 0.603516f, 0.006397f, 0.588867f, 0.005951f,
- 0.574219f, 0.005531f, 0.559570f, 0.005142f, 0.544922f, 0.004776f, 0.529785f, 0.004436f,
- 0.515137f, 0.004120f, 0.500000f, 0.003828f, 0.485352f, 0.003555f, 0.470215f, 0.003302f,
- 0.455566f, 0.003065f, 0.440918f, 0.002844f, 0.426270f, 0.002642f, 0.411621f, 0.002451f,
- 0.965820f, 0.033752f, 0.965820f, 0.033752f, 0.965820f, 0.033752f, 0.965820f, 0.033783f,
- 0.965820f, 0.033783f, 0.965820f, 0.033875f, 0.965332f, 0.033905f, 0.965332f, 0.033997f,
- 0.964844f, 0.034088f, 0.963867f, 0.034241f, 0.963379f, 0.034393f, 0.962402f, 0.034546f,
- 0.960938f, 0.034698f, 0.958496f, 0.034851f, 0.957520f, 0.034973f, 0.954102f, 0.035034f,
- 0.951172f, 0.035034f, 0.947754f, 0.034943f, 0.942871f, 0.034821f, 0.937988f, 0.034576f,
- 0.932129f, 0.034180f, 0.926270f, 0.033722f, 0.918945f, 0.033142f, 0.911133f, 0.032410f,
- 0.902832f, 0.031616f, 0.894531f, 0.030685f, 0.885254f, 0.029694f, 0.876465f, 0.028641f,
- 0.866699f, 0.027512f, 0.856445f, 0.026337f, 0.846191f, 0.025146f, 0.835449f, 0.023926f,
- 0.825195f, 0.022720f, 0.814453f, 0.021515f, 0.803711f, 0.020340f, 0.792480f, 0.019165f,
- 0.781250f, 0.018051f, 0.770020f, 0.016968f, 0.758789f, 0.015915f, 0.747070f, 0.014931f,
- 0.735352f, 0.013977f, 0.723145f, 0.013069f, 0.710938f, 0.012215f, 0.698730f, 0.011398f,
- 0.686035f, 0.010635f, 0.673340f, 0.009918f, 0.660156f, 0.009239f, 0.646484f, 0.008598f,
- 0.633301f, 0.008003f, 0.619141f, 0.007446f, 0.605469f, 0.006927f, 0.591309f, 0.006439f,
- 0.576660f, 0.005985f, 0.562500f, 0.005562f, 0.547852f, 0.005165f, 0.533203f, 0.004795f,
- 0.518066f, 0.004456f, 0.503418f, 0.004135f, 0.488770f, 0.003841f, 0.474121f, 0.003565f,
- 0.459229f, 0.003311f, 0.444580f, 0.003073f, 0.430176f, 0.002853f, 0.415771f, 0.002647f,
- 0.960449f, 0.039276f, 0.960449f, 0.039276f, 0.960449f, 0.039276f, 0.960449f, 0.039307f,
- 0.960449f, 0.039337f, 0.959961f, 0.039368f, 0.959961f, 0.039429f, 0.959961f, 0.039520f,
- 0.959473f, 0.039612f, 0.958984f, 0.039764f, 0.958008f, 0.039886f, 0.956543f, 0.040009f,
- 0.955566f, 0.040131f, 0.953125f, 0.040253f, 0.951172f, 0.040314f, 0.948242f, 0.040283f,
- 0.945801f, 0.040222f, 0.940918f, 0.040039f, 0.936523f, 0.039764f, 0.931152f, 0.039368f,
- 0.926270f, 0.038879f, 0.919434f, 0.038208f, 0.913086f, 0.037445f, 0.905273f, 0.036530f,
- 0.897461f, 0.035522f, 0.888184f, 0.034393f, 0.879395f, 0.033173f, 0.870117f, 0.031891f,
- 0.860352f, 0.030563f, 0.850586f, 0.029190f, 0.840820f, 0.027802f, 0.830566f, 0.026398f,
- 0.820312f, 0.025009f, 0.810059f, 0.023636f, 0.799805f, 0.022308f, 0.789062f, 0.020996f,
- 0.778809f, 0.019730f, 0.767578f, 0.018524f, 0.756348f, 0.017365f, 0.745605f, 0.016251f,
- 0.733887f, 0.015213f, 0.722656f, 0.014206f, 0.710938f, 0.013260f, 0.698730f, 0.012367f,
- 0.686523f, 0.011536f, 0.673828f, 0.010742f, 0.661133f, 0.010002f, 0.647949f, 0.009308f,
- 0.634766f, 0.008659f, 0.621094f, 0.008057f, 0.607422f, 0.007488f, 0.593262f, 0.006958f,
- 0.579102f, 0.006466f, 0.564941f, 0.006004f, 0.550781f, 0.005577f, 0.536133f, 0.005177f,
- 0.521484f, 0.004807f, 0.506836f, 0.004463f, 0.492432f, 0.004143f, 0.477783f, 0.003847f,
- 0.463135f, 0.003571f, 0.448730f, 0.003315f, 0.434082f, 0.003077f, 0.419922f, 0.002857f,
- 0.954102f, 0.045502f, 0.954102f, 0.045502f, 0.954102f, 0.045502f, 0.954102f, 0.045532f,
- 0.954102f, 0.045563f, 0.954102f, 0.045593f, 0.953613f, 0.045654f, 0.953613f, 0.045715f,
- 0.953125f, 0.045868f, 0.952148f, 0.045990f, 0.951660f, 0.046082f, 0.950195f, 0.046143f,
- 0.948242f, 0.046265f, 0.946777f, 0.046265f, 0.943848f, 0.046265f, 0.941895f, 0.046204f,
- 0.938477f, 0.046021f, 0.935059f, 0.045685f, 0.929199f, 0.045258f, 0.925293f, 0.044708f,
- 0.919434f, 0.044006f, 0.912109f, 0.043121f, 0.905273f, 0.042145f, 0.897949f, 0.041016f,
- 0.890137f, 0.039734f, 0.881348f, 0.038391f, 0.872559f, 0.036926f, 0.863770f, 0.035431f,
- 0.854004f, 0.033813f, 0.844727f, 0.032227f, 0.835449f, 0.030640f, 0.825195f, 0.029037f,
- 0.815430f, 0.027451f, 0.806152f, 0.025909f, 0.795898f, 0.024399f, 0.785645f, 0.022934f,
- 0.775391f, 0.021530f, 0.765137f, 0.020187f, 0.754883f, 0.018890f, 0.743652f, 0.017670f,
- 0.732910f, 0.016510f, 0.721680f, 0.015411f, 0.710449f, 0.014374f, 0.698730f, 0.013405f,
- 0.686523f, 0.012482f, 0.674316f, 0.011620f, 0.662109f, 0.010811f, 0.649414f, 0.010063f,
- 0.636230f, 0.009354f, 0.623047f, 0.008698f, 0.609375f, 0.008080f, 0.595703f, 0.007507f,
- 0.582031f, 0.006973f, 0.567871f, 0.006477f, 0.553711f, 0.006016f, 0.539551f, 0.005585f,
- 0.524902f, 0.005180f, 0.510254f, 0.004810f, 0.496094f, 0.004463f, 0.481689f, 0.004147f,
- 0.467041f, 0.003847f, 0.452637f, 0.003571f, 0.438232f, 0.003315f, 0.424072f, 0.003077f,
- 0.947266f, 0.052490f, 0.947266f, 0.052490f, 0.947266f, 0.052490f, 0.947266f, 0.052521f,
- 0.947266f, 0.052551f, 0.946777f, 0.052582f, 0.946777f, 0.052612f, 0.946289f, 0.052734f,
- 0.945801f, 0.052795f, 0.945312f, 0.052887f, 0.944336f, 0.052948f, 0.942871f, 0.053040f,
- 0.941406f, 0.053009f, 0.939941f, 0.053009f, 0.937012f, 0.052917f, 0.934570f, 0.052704f,
- 0.931641f, 0.052399f, 0.926758f, 0.051971f, 0.922852f, 0.051331f, 0.917480f, 0.050568f,
- 0.911133f, 0.049622f, 0.904297f, 0.048523f, 0.898438f, 0.047272f, 0.890137f, 0.045868f,
- 0.882812f, 0.044312f, 0.874512f, 0.042694f, 0.865723f, 0.040955f, 0.856934f, 0.039154f,
- 0.847656f, 0.037354f, 0.838867f, 0.035522f, 0.829590f, 0.033661f, 0.820312f, 0.031830f,
- 0.811035f, 0.030060f, 0.801270f, 0.028305f, 0.791992f, 0.026611f, 0.782227f, 0.024994f,
- 0.772461f, 0.023422f, 0.762695f, 0.021927f, 0.752441f, 0.020508f, 0.742188f, 0.019165f,
- 0.731445f, 0.017883f, 0.721191f, 0.016678f, 0.709961f, 0.015556f, 0.698730f, 0.014488f,
- 0.687012f, 0.013489f, 0.675293f, 0.012550f, 0.663086f, 0.011673f, 0.650879f, 0.010849f,
- 0.638184f, 0.010086f, 0.625000f, 0.009369f, 0.611816f, 0.008705f, 0.598145f, 0.008087f,
- 0.584961f, 0.007511f, 0.570801f, 0.006977f, 0.556641f, 0.006474f, 0.542480f, 0.006012f,
- 0.528320f, 0.005581f, 0.514160f, 0.005180f, 0.499756f, 0.004807f, 0.485596f, 0.004459f,
- 0.471191f, 0.004139f, 0.456787f, 0.003843f, 0.442383f, 0.003569f, 0.428467f, 0.003313f,
- 0.939453f, 0.060333f, 0.939453f, 0.060333f, 0.939453f, 0.060333f, 0.939453f, 0.060333f,
- 0.939453f, 0.060394f, 0.938965f, 0.060394f, 0.938965f, 0.060455f, 0.938477f, 0.060516f,
- 0.937988f, 0.060577f, 0.937500f, 0.060638f, 0.936035f, 0.060669f, 0.935547f, 0.060669f,
- 0.933594f, 0.060608f, 0.931641f, 0.060516f, 0.929688f, 0.060272f, 0.927246f, 0.059967f,
- 0.922363f, 0.059448f, 0.918945f, 0.058868f, 0.914062f, 0.057953f, 0.908691f, 0.056946f,
- 0.902832f, 0.055786f, 0.897461f, 0.054382f, 0.890137f, 0.052826f, 0.882324f, 0.051117f,
- 0.874023f, 0.049255f, 0.866211f, 0.047302f, 0.858398f, 0.045288f, 0.849609f, 0.043213f,
- 0.840820f, 0.041107f, 0.832031f, 0.038971f, 0.823730f, 0.036896f, 0.814453f, 0.034821f,
- 0.806152f, 0.032806f, 0.796875f, 0.030853f, 0.788086f, 0.028961f, 0.778809f, 0.027161f,
- 0.769531f, 0.025421f, 0.760254f, 0.023788f, 0.750488f, 0.022217f, 0.740723f, 0.020737f,
- 0.730957f, 0.019333f, 0.720703f, 0.018021f, 0.709961f, 0.016785f, 0.698730f, 0.015625f,
- 0.687500f, 0.014549f, 0.676270f, 0.013535f, 0.664551f, 0.012573f, 0.652344f, 0.011688f,
- 0.640137f, 0.010864f, 0.627441f, 0.010086f, 0.614258f, 0.009369f, 0.601074f, 0.008698f,
- 0.587402f, 0.008080f, 0.573730f, 0.007500f, 0.560059f, 0.006962f, 0.545898f, 0.006462f,
- 0.531738f, 0.006001f, 0.517578f, 0.005569f, 0.503418f, 0.005165f, 0.489502f, 0.004795f,
- 0.475098f, 0.004452f, 0.460938f, 0.004131f, 0.446777f, 0.003838f, 0.432861f, 0.003563f,
- 0.930664f, 0.069031f, 0.930664f, 0.069031f, 0.930664f, 0.069031f, 0.930664f, 0.069031f,
- 0.930664f, 0.069092f, 0.930664f, 0.069092f, 0.930176f, 0.069214f, 0.929688f, 0.069153f,
- 0.929199f, 0.069214f, 0.929199f, 0.069275f, 0.927246f, 0.069214f, 0.926758f, 0.069153f,
- 0.925293f, 0.069031f, 0.923340f, 0.068787f, 0.920410f, 0.068420f, 0.917480f, 0.067932f,
- 0.914551f, 0.067261f, 0.911133f, 0.066345f, 0.905273f, 0.065247f, 0.900391f, 0.063965f,
- 0.894043f, 0.062469f, 0.888184f, 0.060699f, 0.880859f, 0.058807f, 0.873535f, 0.056763f,
- 0.866211f, 0.054565f, 0.858887f, 0.052277f, 0.850586f, 0.049896f, 0.841797f, 0.047485f,
- 0.833496f, 0.045105f, 0.825684f, 0.042664f, 0.817383f, 0.040283f, 0.809082f, 0.037964f,
- 0.800781f, 0.035706f, 0.792480f, 0.033539f, 0.784180f, 0.031433f, 0.775391f, 0.029449f,
- 0.766602f, 0.027542f, 0.757812f, 0.025726f, 0.748535f, 0.024017f, 0.739258f, 0.022400f,
- 0.729980f, 0.020874f, 0.719727f, 0.019440f, 0.709961f, 0.018097f, 0.699219f, 0.016830f,
- 0.688477f, 0.015656f, 0.677246f, 0.014557f, 0.665527f, 0.013527f, 0.653809f, 0.012573f,
- 0.641602f, 0.011681f, 0.629395f, 0.010841f, 0.616699f, 0.010071f, 0.603516f, 0.009346f,
- 0.590332f, 0.008682f, 0.577148f, 0.008057f, 0.563477f, 0.007481f, 0.549316f, 0.006943f,
- 0.535645f, 0.006443f, 0.521484f, 0.005978f, 0.507324f, 0.005550f, 0.493408f, 0.005150f,
- 0.479248f, 0.004780f, 0.465332f, 0.004436f, 0.451172f, 0.004124f, 0.437256f, 0.003828f,
- 0.920898f, 0.078735f, 0.920898f, 0.078735f, 0.920898f, 0.078735f, 0.920898f, 0.078735f,
- 0.920898f, 0.078796f, 0.920898f, 0.078796f, 0.920410f, 0.078796f, 0.919922f, 0.078857f,
- 0.919922f, 0.078857f, 0.918945f, 0.078796f, 0.917480f, 0.078735f, 0.916992f, 0.078613f,
- 0.915039f, 0.078308f, 0.913086f, 0.077942f, 0.910645f, 0.077454f, 0.908691f, 0.076660f,
- 0.905273f, 0.075745f, 0.899902f, 0.074585f, 0.895996f, 0.073181f, 0.889648f, 0.071533f,
- 0.883789f, 0.069641f, 0.877930f, 0.067566f, 0.872070f, 0.065247f, 0.864258f, 0.062805f,
- 0.856934f, 0.060242f, 0.849121f, 0.057556f, 0.841797f, 0.054810f, 0.833984f, 0.052063f,
- 0.827148f, 0.049316f, 0.818848f, 0.046570f, 0.811035f, 0.043915f, 0.803223f, 0.041290f,
- 0.795898f, 0.038788f, 0.788086f, 0.036377f, 0.779785f, 0.034058f, 0.771973f, 0.031830f,
- 0.763672f, 0.029755f, 0.755371f, 0.027771f, 0.747070f, 0.025894f, 0.738281f, 0.024139f,
- 0.729004f, 0.022476f, 0.719238f, 0.020935f, 0.709473f, 0.019470f, 0.699707f, 0.018097f,
- 0.688965f, 0.016830f, 0.678223f, 0.015640f, 0.666992f, 0.014534f, 0.655762f, 0.013496f,
- 0.643555f, 0.012535f, 0.631348f, 0.011642f, 0.619141f, 0.010803f, 0.606445f, 0.010033f,
- 0.593262f, 0.009308f, 0.580078f, 0.008644f, 0.566406f, 0.008018f, 0.553223f, 0.007446f,
- 0.539062f, 0.006908f, 0.525391f, 0.006413f, 0.511230f, 0.005951f, 0.497559f, 0.005527f,
- 0.483643f, 0.005131f, 0.469482f, 0.004765f, 0.455566f, 0.004421f, 0.441650f, 0.004108f,
- 0.910156f, 0.089539f, 0.910156f, 0.089539f, 0.910156f, 0.089539f, 0.910156f, 0.089539f,
- 0.910156f, 0.089539f, 0.909668f, 0.089539f, 0.909668f, 0.089539f, 0.909180f, 0.089539f,
- 0.908691f, 0.089478f, 0.907715f, 0.089417f, 0.907227f, 0.089233f, 0.905762f, 0.088989f,
- 0.904297f, 0.088562f, 0.902832f, 0.088013f, 0.900391f, 0.087280f, 0.896973f, 0.086243f,
- 0.895020f, 0.085083f, 0.889160f, 0.083557f, 0.884766f, 0.081787f, 0.878906f, 0.079712f,
- 0.874512f, 0.077393f, 0.867676f, 0.074951f, 0.860840f, 0.072205f, 0.854492f, 0.069275f,
- 0.848145f, 0.066223f, 0.840820f, 0.063171f, 0.833008f, 0.060059f, 0.826172f, 0.056885f,
- 0.819336f, 0.053741f, 0.812012f, 0.050690f, 0.804688f, 0.047699f, 0.797852f, 0.044800f,
- 0.790527f, 0.042023f, 0.783691f, 0.039337f, 0.776367f, 0.036804f, 0.768555f, 0.034393f,
- 0.761230f, 0.032074f, 0.753418f, 0.029922f, 0.745117f, 0.027893f, 0.736816f, 0.025970f,
- 0.728516f, 0.024170f, 0.719238f, 0.022491f, 0.709961f, 0.020905f, 0.700195f, 0.019440f,
- 0.689941f, 0.018066f, 0.679688f, 0.016785f, 0.668457f, 0.015587f, 0.657227f, 0.014473f,
- 0.645996f, 0.013443f, 0.633789f, 0.012474f, 0.621582f, 0.011581f, 0.609375f, 0.010750f,
- 0.596191f, 0.009972f, 0.583496f, 0.009262f, 0.569824f, 0.008591f, 0.556641f, 0.007973f,
- 0.542969f, 0.007404f, 0.529297f, 0.006874f, 0.515625f, 0.006378f, 0.501465f, 0.005920f,
- 0.487793f, 0.005501f, 0.474121f, 0.005108f, 0.460205f, 0.004742f, 0.446289f, 0.004406f,
- 0.898438f, 0.101440f, 0.898438f, 0.101440f, 0.898438f, 0.101440f, 0.898438f, 0.101440f,
- 0.897949f, 0.101440f, 0.897949f, 0.101440f, 0.897461f, 0.101440f, 0.896973f, 0.101379f,
- 0.896973f, 0.101318f, 0.895996f, 0.101135f, 0.895508f, 0.100830f, 0.894043f, 0.100464f,
- 0.893066f, 0.099854f, 0.890625f, 0.099121f, 0.888184f, 0.098083f, 0.885254f, 0.096802f,
- 0.882324f, 0.095215f, 0.878418f, 0.093323f, 0.872559f, 0.091125f, 0.869629f, 0.088623f,
- 0.862793f, 0.085815f, 0.855957f, 0.082764f, 0.850098f, 0.079590f, 0.844727f, 0.076172f,
- 0.837402f, 0.072693f, 0.831055f, 0.069092f, 0.824219f, 0.065491f, 0.817871f, 0.061981f,
- 0.811035f, 0.058472f, 0.804688f, 0.055023f, 0.797852f, 0.051697f, 0.791992f, 0.048492f,
- 0.785645f, 0.045410f, 0.778809f, 0.042480f, 0.771973f, 0.039673f, 0.765625f, 0.037018f,
- 0.758789f, 0.034515f, 0.750977f, 0.032166f, 0.743652f, 0.029968f, 0.735840f, 0.027878f,
- 0.727539f, 0.025940f, 0.718750f, 0.024124f, 0.709961f, 0.022430f, 0.700684f, 0.020844f,
- 0.690918f, 0.019363f, 0.680664f, 0.017975f, 0.670410f, 0.016693f, 0.659180f, 0.015495f,
- 0.647949f, 0.014389f, 0.636230f, 0.013359f, 0.624512f, 0.012398f, 0.611816f, 0.011505f,
- 0.599609f, 0.010681f, 0.586426f, 0.009911f, 0.573730f, 0.009201f, 0.560547f, 0.008537f,
- 0.546875f, 0.007927f, 0.533203f, 0.007355f, 0.519531f, 0.006828f, 0.505859f, 0.006340f,
- 0.492432f, 0.005890f, 0.478516f, 0.005470f, 0.464844f, 0.005077f, 0.450928f, 0.004719f,
- 0.885254f, 0.114624f, 0.885254f, 0.114624f, 0.885254f, 0.114624f, 0.885254f, 0.114624f,
- 0.884766f, 0.114624f, 0.884766f, 0.114563f, 0.884766f, 0.114502f, 0.884277f, 0.114380f,
- 0.883789f, 0.114258f, 0.883301f, 0.114014f, 0.882324f, 0.113525f, 0.881348f, 0.112976f,
- 0.879395f, 0.112183f, 0.877441f, 0.111145f, 0.875977f, 0.109802f, 0.872559f, 0.108215f,
- 0.869141f, 0.106201f, 0.865723f, 0.103821f, 0.860352f, 0.101196f, 0.854492f, 0.098145f,
- 0.850586f, 0.094849f, 0.845215f, 0.091187f, 0.838379f, 0.087463f, 0.833496f, 0.083496f,
- 0.826660f, 0.079468f, 0.820801f, 0.075378f, 0.814453f, 0.071289f, 0.809082f, 0.067322f,
- 0.803711f, 0.063354f, 0.797363f, 0.059540f, 0.791992f, 0.055878f, 0.786133f, 0.052338f,
- 0.780762f, 0.048950f, 0.774414f, 0.045746f, 0.768555f, 0.042664f, 0.762207f, 0.039795f,
- 0.755859f, 0.037079f, 0.749023f, 0.034546f, 0.741699f, 0.032135f, 0.734863f, 0.029892f,
- 0.727051f, 0.027802f, 0.718750f, 0.025833f, 0.710449f, 0.024002f, 0.701172f, 0.022293f,
- 0.691895f, 0.020706f, 0.682129f, 0.019226f, 0.671875f, 0.017853f, 0.661133f, 0.016571f,
- 0.650391f, 0.015381f, 0.639160f, 0.014282f, 0.626953f, 0.013252f, 0.615234f, 0.012299f,
- 0.602539f, 0.011414f, 0.590332f, 0.010597f, 0.577148f, 0.009834f, 0.563965f, 0.009132f,
- 0.550781f, 0.008476f, 0.537598f, 0.007866f, 0.523926f, 0.007309f, 0.510254f, 0.006786f,
- 0.496826f, 0.006306f, 0.483154f, 0.005856f, 0.469482f, 0.005440f, 0.455811f, 0.005054f,
- 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870605f, 0.129028f,
- 0.870605f, 0.129028f, 0.870605f, 0.129028f, 0.870117f, 0.128906f, 0.870117f, 0.128784f,
- 0.869629f, 0.128540f, 0.869141f, 0.128052f, 0.868164f, 0.127563f, 0.867188f, 0.126709f,
- 0.865723f, 0.125732f, 0.863281f, 0.124329f, 0.862305f, 0.122742f, 0.858887f, 0.120544f,
- 0.854980f, 0.118103f, 0.850098f, 0.115173f, 0.847168f, 0.111938f, 0.843750f, 0.108276f,
- 0.836426f, 0.104309f, 0.832031f, 0.100159f, 0.827148f, 0.095764f, 0.821289f, 0.091187f,
- 0.815918f, 0.086609f, 0.810547f, 0.081970f, 0.806152f, 0.077393f, 0.800781f, 0.072937f,
- 0.795410f, 0.068542f, 0.790039f, 0.064270f, 0.785645f, 0.060242f, 0.780762f, 0.056335f,
- 0.775391f, 0.052643f, 0.770020f, 0.049133f, 0.765137f, 0.045807f, 0.759766f, 0.042694f,
- 0.753906f, 0.039734f, 0.747559f, 0.036987f, 0.740723f, 0.034393f, 0.733887f, 0.031982f,
- 0.726562f, 0.029739f, 0.719238f, 0.027618f, 0.710449f, 0.025650f, 0.702148f, 0.023834f,
- 0.692871f, 0.022125f, 0.683594f, 0.020538f, 0.673828f, 0.019058f, 0.663574f, 0.017685f,
- 0.652832f, 0.016418f, 0.641602f, 0.015244f, 0.629883f, 0.014153f, 0.618164f, 0.013138f,
- 0.605957f, 0.012192f, 0.593750f, 0.011314f, 0.581055f, 0.010506f, 0.567871f, 0.009750f,
- 0.555176f, 0.009056f, 0.541504f, 0.008408f, 0.528320f, 0.007809f, 0.514648f, 0.007252f,
- 0.501465f, 0.006741f, 0.487793f, 0.006260f, 0.474365f, 0.005817f, 0.460938f, 0.005409f,
- 0.854492f, 0.145020f, 0.854492f, 0.145020f, 0.854492f, 0.145020f, 0.854492f, 0.145020f,
- 0.854492f, 0.144897f, 0.854492f, 0.144897f, 0.854004f, 0.144653f, 0.854492f, 0.144531f,
- 0.854004f, 0.144165f, 0.853027f, 0.143555f, 0.852051f, 0.142822f, 0.851074f, 0.141724f,
- 0.850586f, 0.140503f, 0.848145f, 0.138672f, 0.846191f, 0.136475f, 0.843262f, 0.133911f,
- 0.839844f, 0.130859f, 0.835449f, 0.127319f, 0.832031f, 0.123474f, 0.828613f, 0.119141f,
- 0.823242f, 0.114502f, 0.819824f, 0.109558f, 0.813477f, 0.104431f, 0.809570f, 0.099304f,
- 0.804199f, 0.094055f, 0.799316f, 0.088867f, 0.794922f, 0.083740f, 0.791992f, 0.078735f,
- 0.786621f, 0.073914f, 0.783203f, 0.069214f, 0.779297f, 0.064758f, 0.774902f, 0.060516f,
- 0.770508f, 0.056488f, 0.765625f, 0.052673f, 0.761230f, 0.049072f, 0.756348f, 0.045715f,
- 0.750977f, 0.042511f, 0.745605f, 0.039551f, 0.739746f, 0.036774f, 0.733398f, 0.034180f,
- 0.726562f, 0.031738f, 0.719238f, 0.029495f, 0.711426f, 0.027390f, 0.703125f, 0.025421f,
- 0.694336f, 0.023605f, 0.685059f, 0.021912f, 0.675781f, 0.020340f, 0.665527f, 0.018875f,
- 0.655273f, 0.017517f, 0.644043f, 0.016251f, 0.632812f, 0.015091f, 0.621582f, 0.014008f,
- 0.609375f, 0.013000f, 0.597168f, 0.012070f, 0.584473f, 0.011200f, 0.571777f, 0.010406f,
- 0.559082f, 0.009659f, 0.545898f, 0.008972f, 0.532715f, 0.008339f, 0.519531f, 0.007748f,
- 0.505859f, 0.007198f, 0.492676f, 0.006691f, 0.479248f, 0.006218f, 0.465820f, 0.005783f,
- 0.837402f, 0.162476f, 0.837402f, 0.162476f, 0.837402f, 0.162476f, 0.837402f, 0.162354f,
- 0.837402f, 0.162354f, 0.836914f, 0.162231f, 0.836914f, 0.161987f, 0.836426f, 0.161743f,
- 0.836426f, 0.161133f, 0.835449f, 0.160522f, 0.835449f, 0.159546f, 0.834473f, 0.158203f,
- 0.833496f, 0.156372f, 0.831055f, 0.154175f, 0.830078f, 0.151489f, 0.826660f, 0.148315f,
- 0.823242f, 0.144531f, 0.821289f, 0.140381f, 0.817383f, 0.135620f, 0.812012f, 0.130615f,
- 0.810547f, 0.125122f, 0.805176f, 0.119507f, 0.800293f, 0.113647f, 0.797852f, 0.107788f,
- 0.792480f, 0.101868f, 0.788574f, 0.096008f, 0.785156f, 0.090332f, 0.782715f, 0.084839f,
- 0.779297f, 0.079468f, 0.774902f, 0.074341f, 0.772461f, 0.069458f, 0.769531f, 0.064819f,
- 0.765137f, 0.060486f, 0.761719f, 0.056366f, 0.758301f, 0.052490f, 0.753418f, 0.048828f,
- 0.749023f, 0.045410f, 0.743652f, 0.042206f, 0.738770f, 0.039215f, 0.732422f, 0.036438f,
- 0.726074f, 0.033844f, 0.719238f, 0.031433f, 0.711914f, 0.029190f, 0.704102f, 0.027100f,
- 0.695801f, 0.025146f, 0.687012f, 0.023346f, 0.677734f, 0.021667f, 0.667969f, 0.020111f,
- 0.657715f, 0.018646f, 0.646973f, 0.017319f, 0.636230f, 0.016068f, 0.624512f, 0.014923f,
- 0.612793f, 0.013855f, 0.601074f, 0.012863f, 0.588379f, 0.011948f, 0.576172f, 0.011093f,
- 0.563477f, 0.010300f, 0.550293f, 0.009567f, 0.537109f, 0.008896f, 0.523926f, 0.008263f,
- 0.510742f, 0.007687f, 0.497559f, 0.007145f, 0.484375f, 0.006645f, 0.470947f, 0.006180f,
- 0.818359f, 0.181519f, 0.818359f, 0.181519f, 0.818359f, 0.181519f, 0.817871f, 0.181519f,
- 0.817871f, 0.181396f, 0.817871f, 0.181274f, 0.817871f, 0.181030f, 0.817871f, 0.180542f,
- 0.817871f, 0.179932f, 0.817383f, 0.178955f, 0.816406f, 0.177612f, 0.815918f, 0.175903f,
- 0.814941f, 0.173584f, 0.812500f, 0.170898f, 0.811035f, 0.167603f, 0.808594f, 0.163696f,
- 0.805664f, 0.159180f, 0.802246f, 0.154175f, 0.799805f, 0.148560f, 0.796875f, 0.142700f,
- 0.792480f, 0.136353f, 0.789551f, 0.129883f, 0.787598f, 0.123230f, 0.782227f, 0.116577f,
- 0.780273f, 0.109985f, 0.777344f, 0.103516f, 0.774414f, 0.097168f, 0.771973f, 0.091125f,
- 0.770508f, 0.085205f, 0.767578f, 0.079651f, 0.765625f, 0.074341f, 0.763184f, 0.069336f,
- 0.760254f, 0.064636f, 0.757812f, 0.060181f, 0.754395f, 0.056000f, 0.750977f, 0.052063f,
- 0.747559f, 0.048431f, 0.742188f, 0.044983f, 0.737793f, 0.041779f, 0.732422f, 0.038818f,
- 0.726074f, 0.036041f, 0.719727f, 0.033447f, 0.712891f, 0.031052f, 0.705566f, 0.028824f,
- 0.697266f, 0.026749f, 0.688965f, 0.024826f, 0.679688f, 0.023041f, 0.670410f, 0.021393f,
- 0.660645f, 0.019852f, 0.649902f, 0.018433f, 0.639160f, 0.017105f, 0.627930f, 0.015869f,
- 0.616211f, 0.014748f, 0.604492f, 0.013687f, 0.592773f, 0.012718f, 0.580078f, 0.011818f,
- 0.567871f, 0.010979f, 0.554688f, 0.010201f, 0.541992f, 0.009483f, 0.528809f, 0.008812f,
- 0.515625f, 0.008194f, 0.502441f, 0.007626f, 0.489502f, 0.007088f, 0.476318f, 0.006599f,
- 0.797363f, 0.202393f, 0.797363f, 0.202393f, 0.797363f, 0.202393f, 0.797363f, 0.202393f,
- 0.797363f, 0.202148f, 0.797363f, 0.202026f, 0.797363f, 0.201660f, 0.797363f, 0.201050f,
- 0.796875f, 0.200195f, 0.796875f, 0.198975f, 0.796387f, 0.197266f, 0.795898f, 0.195068f,
- 0.794922f, 0.192261f, 0.792969f, 0.188843f, 0.792480f, 0.184937f, 0.789551f, 0.180298f,
- 0.787598f, 0.174927f, 0.785645f, 0.168823f, 0.782715f, 0.162231f, 0.779297f, 0.155273f,
- 0.775879f, 0.148071f, 0.775391f, 0.140747f, 0.772461f, 0.133179f, 0.770508f, 0.125732f,
- 0.767578f, 0.118347f, 0.766113f, 0.111206f, 0.764648f, 0.104248f, 0.763184f, 0.097595f,
- 0.762695f, 0.091187f, 0.761719f, 0.085144f, 0.759277f, 0.079407f, 0.758301f, 0.073975f,
- 0.755859f, 0.068909f, 0.754395f, 0.064087f, 0.751465f, 0.059631f, 0.748535f, 0.055450f,
- 0.745117f, 0.051514f, 0.741211f, 0.047852f, 0.737305f, 0.044434f, 0.731934f, 0.041260f,
- 0.726562f, 0.038300f, 0.720215f, 0.035553f, 0.713867f, 0.032990f, 0.706543f, 0.030624f,
- 0.699219f, 0.028427f, 0.690918f, 0.026382f, 0.682129f, 0.024475f, 0.672852f, 0.022720f,
- 0.663086f, 0.021088f, 0.652832f, 0.019577f, 0.642578f, 0.018173f, 0.631348f, 0.016876f,
- 0.620117f, 0.015671f, 0.608398f, 0.014565f, 0.596680f, 0.013535f, 0.584473f, 0.012573f,
- 0.572266f, 0.011681f, 0.559570f, 0.010857f, 0.546875f, 0.010101f, 0.533691f, 0.009392f,
- 0.520996f, 0.008736f, 0.507812f, 0.008125f, 0.494629f, 0.007565f, 0.481689f, 0.007042f,
- 0.774414f, 0.225098f, 0.774414f, 0.225098f, 0.774414f, 0.225098f, 0.774414f, 0.225098f,
- 0.774414f, 0.224854f, 0.774902f, 0.224609f, 0.774414f, 0.224121f, 0.774414f, 0.223389f,
- 0.774414f, 0.222290f, 0.773926f, 0.220581f, 0.773926f, 0.218628f, 0.773926f, 0.215942f,
- 0.773438f, 0.212524f, 0.772461f, 0.208374f, 0.771484f, 0.203491f, 0.770508f, 0.197754f,
- 0.769043f, 0.191284f, 0.766113f, 0.184204f, 0.763672f, 0.176514f, 0.760742f, 0.168457f,
- 0.760742f, 0.160278f, 0.757812f, 0.151855f, 0.757812f, 0.143433f, 0.756836f, 0.135132f,
- 0.754395f, 0.126953f, 0.755371f, 0.119141f, 0.755371f, 0.111511f, 0.754395f, 0.104309f,
- 0.753418f, 0.097351f, 0.754395f, 0.090820f, 0.753906f, 0.084595f, 0.752441f, 0.078796f,
- 0.751465f, 0.073303f, 0.750000f, 0.068176f, 0.748535f, 0.063354f, 0.746094f, 0.058899f,
- 0.743164f, 0.054718f, 0.740234f, 0.050812f, 0.736816f, 0.047150f, 0.731934f, 0.043793f,
- 0.727051f, 0.040649f, 0.721191f, 0.037720f, 0.714844f, 0.035004f, 0.708008f, 0.032501f,
- 0.700684f, 0.030167f, 0.692871f, 0.027985f, 0.684570f, 0.025986f, 0.675781f, 0.024124f,
- 0.666016f, 0.022385f, 0.656250f, 0.020782f, 0.645996f, 0.019302f, 0.635254f, 0.017929f,
- 0.624023f, 0.016647f, 0.612793f, 0.015480f, 0.601074f, 0.014381f, 0.588867f, 0.013367f,
- 0.576660f, 0.012428f, 0.563965f, 0.011559f, 0.551270f, 0.010750f, 0.539062f, 0.010002f,
- 0.525879f, 0.009308f, 0.513184f, 0.008659f, 0.500000f, 0.008064f, 0.487061f, 0.007511f,
- 0.750000f, 0.249878f, 0.749512f, 0.249878f, 0.750000f, 0.249878f, 0.750000f, 0.249756f,
- 0.750000f, 0.249512f, 0.750000f, 0.249146f, 0.750000f, 0.248413f, 0.750488f, 0.247559f,
- 0.750488f, 0.246094f, 0.750488f, 0.244141f, 0.750488f, 0.241577f, 0.750488f, 0.238281f,
- 0.748535f, 0.234009f, 0.749512f, 0.229004f, 0.749023f, 0.223022f, 0.747070f, 0.216309f,
- 0.745117f, 0.208496f, 0.743164f, 0.200195f, 0.744629f, 0.191406f, 0.741211f, 0.182251f,
- 0.741699f, 0.172852f, 0.740234f, 0.163330f, 0.742676f, 0.154053f, 0.741211f, 0.144775f,
- 0.743652f, 0.135864f, 0.744629f, 0.127197f, 0.743164f, 0.118958f, 0.744629f, 0.111145f,
- 0.745605f, 0.103638f, 0.746582f, 0.096558f, 0.748047f, 0.089966f, 0.747559f, 0.083679f,
- 0.747559f, 0.077820f, 0.746582f, 0.072327f, 0.745605f, 0.067261f, 0.744629f, 0.062469f,
- 0.742676f, 0.058014f, 0.739746f, 0.053864f, 0.735840f, 0.049988f, 0.731934f, 0.046417f,
- 0.727539f, 0.043091f, 0.722168f, 0.039978f, 0.716309f, 0.037079f, 0.709473f, 0.034424f,
- 0.702637f, 0.031952f, 0.695312f, 0.029663f, 0.687012f, 0.027542f, 0.678223f, 0.025558f,
- 0.668945f, 0.023743f, 0.659180f, 0.022049f, 0.649414f, 0.020477f, 0.638672f, 0.019028f,
- 0.627930f, 0.017670f, 0.616699f, 0.016434f, 0.604980f, 0.015274f, 0.593262f, 0.014198f,
- 0.581055f, 0.013206f, 0.568848f, 0.012283f, 0.556641f, 0.011429f, 0.543945f, 0.010643f,
- 0.531250f, 0.009903f, 0.518066f, 0.009224f, 0.505371f, 0.008591f, 0.492676f, 0.008003f,
- 0.723145f, 0.276611f, 0.723145f, 0.276611f, 0.723145f, 0.276611f, 0.723145f, 0.276611f,
- 0.723145f, 0.276123f, 0.723145f, 0.275635f, 0.723145f, 0.274902f, 0.723633f, 0.273682f,
- 0.723633f, 0.271973f, 0.724121f, 0.269531f, 0.724609f, 0.266113f, 0.725098f, 0.262207f,
- 0.725098f, 0.257080f, 0.724609f, 0.250732f, 0.722656f, 0.243652f, 0.725586f, 0.235474f,
- 0.724121f, 0.226685f, 0.723145f, 0.216919f, 0.722656f, 0.206787f, 0.720703f, 0.196289f,
- 0.723145f, 0.185791f, 0.723633f, 0.175171f, 0.724121f, 0.164795f, 0.728027f, 0.154663f,
- 0.730469f, 0.144897f, 0.731934f, 0.135498f, 0.734863f, 0.126587f, 0.737305f, 0.118103f,
- 0.739258f, 0.110107f, 0.739746f, 0.102478f, 0.741699f, 0.095398f, 0.743164f, 0.088745f,
- 0.743652f, 0.082520f, 0.743652f, 0.076660f, 0.743652f, 0.071228f, 0.742676f, 0.066101f,
- 0.741211f, 0.061401f, 0.739258f, 0.057007f, 0.735840f, 0.052887f, 0.732422f, 0.049103f,
- 0.728516f, 0.045563f, 0.723145f, 0.042297f, 0.717773f, 0.039246f, 0.711914f, 0.036438f,
- 0.704590f, 0.033813f, 0.697754f, 0.031403f, 0.689453f, 0.029160f, 0.681152f, 0.027069f,
- 0.671875f, 0.025146f, 0.662598f, 0.023346f, 0.652832f, 0.021698f, 0.642578f, 0.020157f,
- 0.631836f, 0.018738f, 0.621094f, 0.017426f, 0.609375f, 0.016205f, 0.597656f, 0.015076f,
- 0.585938f, 0.014023f, 0.573730f, 0.013054f, 0.561523f, 0.012146f, 0.548828f, 0.011314f,
- 0.536621f, 0.010536f, 0.523926f, 0.009811f, 0.511230f, 0.009148f, 0.498291f, 0.008530f,
- 0.693848f, 0.305664f, 0.693848f, 0.305664f, 0.693848f, 0.305664f, 0.693848f, 0.305664f,
- 0.693848f, 0.305176f, 0.694336f, 0.304443f, 0.694824f, 0.303467f, 0.695312f, 0.302002f,
- 0.695312f, 0.299561f, 0.696289f, 0.296631f, 0.696777f, 0.292725f, 0.696777f, 0.287598f,
- 0.697754f, 0.281250f, 0.698242f, 0.273926f, 0.698730f, 0.265137f, 0.697266f, 0.255615f,
- 0.699707f, 0.245239f, 0.699707f, 0.234131f, 0.700195f, 0.222412f, 0.702637f, 0.210693f,
- 0.705078f, 0.198853f, 0.708496f, 0.187134f, 0.708984f, 0.175781f, 0.715332f, 0.164673f,
- 0.718750f, 0.154053f, 0.722168f, 0.143921f, 0.724121f, 0.134277f, 0.727539f, 0.125244f,
- 0.731934f, 0.116638f, 0.733398f, 0.108582f, 0.736816f, 0.101013f, 0.738281f, 0.093872f,
- 0.740234f, 0.087219f, 0.741699f, 0.081055f, 0.741211f, 0.075256f, 0.741211f, 0.069885f,
- 0.740723f, 0.064880f, 0.738281f, 0.060211f, 0.736328f, 0.055908f, 0.732910f, 0.051849f,
- 0.729004f, 0.048157f, 0.724609f, 0.044678f, 0.719727f, 0.041473f, 0.713379f, 0.038483f,
- 0.707031f, 0.035736f, 0.699707f, 0.033173f, 0.692383f, 0.030823f, 0.684082f, 0.028625f,
- 0.675293f, 0.026596f, 0.666016f, 0.024704f, 0.656738f, 0.022964f, 0.646484f, 0.021347f,
- 0.636230f, 0.019852f, 0.625488f, 0.018463f, 0.614258f, 0.017181f, 0.602539f, 0.015976f,
- 0.590820f, 0.014877f, 0.578613f, 0.013855f, 0.566895f, 0.012901f, 0.554688f, 0.012024f,
- 0.541992f, 0.011200f, 0.529297f, 0.010437f, 0.516602f, 0.009735f, 0.503906f, 0.009079f,
- 0.662598f, 0.337158f, 0.662598f, 0.337158f, 0.662598f, 0.337158f, 0.662598f, 0.336914f,
- 0.662598f, 0.336670f, 0.663086f, 0.335938f, 0.663086f, 0.334473f, 0.664062f, 0.332520f,
- 0.665039f, 0.329834f, 0.666016f, 0.325928f, 0.665527f, 0.320801f, 0.667969f, 0.314697f,
- 0.667480f, 0.306885f, 0.669922f, 0.298096f, 0.669434f, 0.287842f, 0.671387f, 0.276367f,
- 0.675781f, 0.264404f, 0.675781f, 0.251465f, 0.677734f, 0.238403f, 0.681152f, 0.225342f,
- 0.686035f, 0.212036f, 0.690430f, 0.199219f, 0.694824f, 0.186768f, 0.700684f, 0.174805f,
- 0.702637f, 0.163330f, 0.708008f, 0.152466f, 0.714844f, 0.142212f, 0.718750f, 0.132446f,
- 0.724609f, 0.123291f, 0.728516f, 0.114685f, 0.731445f, 0.106628f, 0.734375f, 0.099121f,
- 0.736816f, 0.092102f, 0.738770f, 0.085510f, 0.740723f, 0.079407f, 0.740234f, 0.073730f,
- 0.739258f, 0.068420f, 0.738770f, 0.063538f, 0.736328f, 0.058960f, 0.734375f, 0.054718f,
- 0.730469f, 0.050781f, 0.726562f, 0.047150f, 0.721191f, 0.043762f, 0.715332f, 0.040619f,
- 0.709473f, 0.037720f, 0.702637f, 0.035034f, 0.695312f, 0.032532f, 0.687500f, 0.030243f,
- 0.678711f, 0.028107f, 0.669922f, 0.026123f, 0.660645f, 0.024277f, 0.650391f, 0.022583f,
- 0.640137f, 0.021011f, 0.629395f, 0.019547f, 0.618652f, 0.018188f, 0.607422f, 0.016937f,
- 0.595703f, 0.015778f, 0.583984f, 0.014694f, 0.572266f, 0.013695f, 0.560059f, 0.012764f,
- 0.547852f, 0.011902f, 0.535156f, 0.011101f, 0.522461f, 0.010353f, 0.510254f, 0.009666f,
- 0.628418f, 0.371338f, 0.628418f, 0.371338f, 0.628418f, 0.371094f, 0.628418f, 0.371094f,
- 0.628418f, 0.370361f, 0.629395f, 0.369385f, 0.629883f, 0.367920f, 0.630859f, 0.365234f,
- 0.631836f, 0.361816f, 0.633301f, 0.357178f, 0.634766f, 0.350830f, 0.635742f, 0.343262f,
- 0.638184f, 0.333984f, 0.640137f, 0.322998f, 0.641113f, 0.311035f, 0.645508f, 0.297852f,
- 0.647949f, 0.283691f, 0.652344f, 0.269043f, 0.657227f, 0.254395f, 0.662598f, 0.239868f,
- 0.669922f, 0.225464f, 0.673340f, 0.211426f, 0.680664f, 0.197876f, 0.685547f, 0.184937f,
- 0.693359f, 0.172729f, 0.700684f, 0.161011f, 0.705566f, 0.150146f, 0.711426f, 0.139771f,
- 0.718750f, 0.130005f, 0.722168f, 0.120911f, 0.727051f, 0.112427f, 0.732422f, 0.104431f,
- 0.733887f, 0.097046f, 0.737305f, 0.090088f, 0.738770f, 0.083618f, 0.740234f, 0.077637f,
- 0.739258f, 0.072083f, 0.738281f, 0.066895f, 0.736816f, 0.062073f, 0.734375f, 0.057648f,
- 0.731934f, 0.053497f, 0.728027f, 0.049683f, 0.723145f, 0.046112f, 0.717773f, 0.042816f,
- 0.712402f, 0.039764f, 0.705566f, 0.036957f, 0.698242f, 0.034332f, 0.690430f, 0.031891f,
- 0.682617f, 0.029663f, 0.673340f, 0.027573f, 0.664551f, 0.025650f, 0.654785f, 0.023865f,
- 0.644531f, 0.022202f, 0.634277f, 0.020676f, 0.623535f, 0.019257f, 0.612305f, 0.017929f,
- 0.601074f, 0.016708f, 0.589355f, 0.015579f, 0.577637f, 0.014526f, 0.565430f, 0.013550f,
- 0.553223f, 0.012642f, 0.541016f, 0.011787f, 0.528809f, 0.011009f, 0.516113f, 0.010277f,
- 0.591309f, 0.407959f, 0.591797f, 0.407959f, 0.591797f, 0.407959f, 0.591797f, 0.407471f,
- 0.592285f, 0.406982f, 0.592773f, 0.405762f, 0.593750f, 0.403564f, 0.594727f, 0.400391f,
- 0.596680f, 0.396240f, 0.598145f, 0.390137f, 0.600098f, 0.382568f, 0.602539f, 0.373047f,
- 0.604980f, 0.361816f, 0.606934f, 0.348877f, 0.611816f, 0.334473f, 0.616699f, 0.319336f,
- 0.620605f, 0.302979f, 0.627930f, 0.286865f, 0.634277f, 0.270508f, 0.638672f, 0.254150f,
- 0.647949f, 0.238525f, 0.654297f, 0.223389f, 0.663086f, 0.208862f, 0.673828f, 0.195068f,
- 0.680176f, 0.182007f, 0.689941f, 0.169678f, 0.696289f, 0.157959f, 0.705078f, 0.147095f,
- 0.713867f, 0.136841f, 0.719727f, 0.127197f, 0.724121f, 0.118225f, 0.729980f, 0.109863f,
- 0.731934f, 0.101990f, 0.735840f, 0.094727f, 0.737305f, 0.087952f, 0.738770f, 0.081604f,
- 0.740234f, 0.075745f, 0.739258f, 0.070312f, 0.738281f, 0.065247f, 0.735840f, 0.060608f,
- 0.733398f, 0.056274f, 0.729492f, 0.052246f, 0.725098f, 0.048523f, 0.720703f, 0.045074f,
- 0.714355f, 0.041870f, 0.708496f, 0.038910f, 0.701660f, 0.036163f, 0.693848f, 0.033630f,
- 0.686035f, 0.031281f, 0.677734f, 0.029099f, 0.668457f, 0.027069f, 0.659180f, 0.025192f,
- 0.648926f, 0.023453f, 0.639160f, 0.021851f, 0.628418f, 0.020355f, 0.617676f, 0.018967f,
- 0.605957f, 0.017685f, 0.594727f, 0.016495f, 0.583008f, 0.015388f, 0.571289f, 0.014366f,
- 0.559570f, 0.013412f, 0.546875f, 0.012520f, 0.534668f, 0.011696f, 0.522461f, 0.010925f,
- 0.551758f, 0.447754f, 0.551758f, 0.447754f, 0.552246f, 0.447510f, 0.552246f, 0.447266f,
- 0.552734f, 0.446289f, 0.553223f, 0.444580f, 0.555176f, 0.441895f, 0.556152f, 0.438232f,
- 0.558594f, 0.432617f, 0.561035f, 0.425049f, 0.563477f, 0.415527f, 0.566406f, 0.404053f,
- 0.570312f, 0.390381f, 0.575195f, 0.375000f, 0.578613f, 0.358154f, 0.584473f, 0.340332f,
- 0.593750f, 0.322266f, 0.600098f, 0.303955f, 0.611328f, 0.286133f, 0.617676f, 0.268555f,
- 0.629395f, 0.251709f, 0.640625f, 0.235352f, 0.649902f, 0.219849f, 0.661621f, 0.205078f,
- 0.671387f, 0.191284f, 0.678711f, 0.178223f, 0.688965f, 0.166016f, 0.699707f, 0.154419f,
- 0.707031f, 0.143555f, 0.714844f, 0.133545f, 0.719727f, 0.124084f, 0.726074f, 0.115295f,
- 0.731445f, 0.107056f, 0.734863f, 0.099365f, 0.737305f, 0.092285f, 0.739258f, 0.085632f,
- 0.740234f, 0.079529f, 0.739746f, 0.073792f, 0.739258f, 0.068542f, 0.737793f, 0.063599f,
- 0.734863f, 0.059082f, 0.731934f, 0.054871f, 0.727539f, 0.050964f, 0.723633f, 0.047394f,
- 0.717773f, 0.044006f, 0.711426f, 0.040924f, 0.705078f, 0.038055f, 0.697754f, 0.035400f,
- 0.689941f, 0.032928f, 0.681641f, 0.030655f, 0.672852f, 0.028534f, 0.663574f, 0.026581f,
- 0.653809f, 0.024750f, 0.644043f, 0.023071f, 0.633301f, 0.021515f, 0.622559f, 0.020050f,
- 0.611328f, 0.018707f, 0.600098f, 0.017456f, 0.588867f, 0.016296f, 0.577148f, 0.015221f,
- 0.565430f, 0.014221f, 0.553223f, 0.013290f, 0.541504f, 0.012421f, 0.528809f, 0.011620f,
- 0.509277f, 0.490234f, 0.509277f, 0.490234f, 0.509277f, 0.489990f, 0.509766f, 0.489502f,
- 0.510254f, 0.488525f, 0.511230f, 0.486328f, 0.512695f, 0.482910f, 0.514160f, 0.478027f,
- 0.517578f, 0.470947f, 0.520996f, 0.461670f, 0.523926f, 0.449707f, 0.528809f, 0.435303f,
- 0.534180f, 0.418945f, 0.540527f, 0.400635f, 0.548340f, 0.381348f, 0.554688f, 0.361328f,
- 0.566895f, 0.340820f, 0.577637f, 0.320801f, 0.588867f, 0.301270f, 0.601074f, 0.282471f,
- 0.610352f, 0.264404f, 0.624023f, 0.247070f, 0.637207f, 0.230591f, 0.649414f, 0.215210f,
- 0.662109f, 0.200562f, 0.672852f, 0.186768f, 0.685547f, 0.173828f, 0.693359f, 0.161743f,
- 0.702148f, 0.150391f, 0.711426f, 0.139771f, 0.720703f, 0.129883f, 0.726074f, 0.120667f,
- 0.730469f, 0.112061f, 0.733887f, 0.104065f, 0.738281f, 0.096619f, 0.739258f, 0.089722f,
- 0.740234f, 0.083252f, 0.741699f, 0.077332f, 0.740723f, 0.071777f, 0.739258f, 0.066711f,
- 0.736816f, 0.061951f, 0.734375f, 0.057556f, 0.730469f, 0.053497f, 0.726074f, 0.049713f,
- 0.720703f, 0.046234f, 0.714844f, 0.042999f, 0.708496f, 0.039978f, 0.701172f, 0.037231f,
- 0.693848f, 0.034637f, 0.685547f, 0.032257f, 0.677246f, 0.030060f, 0.667969f, 0.028000f,
- 0.658691f, 0.026108f, 0.648926f, 0.024338f, 0.638672f, 0.022705f, 0.627930f, 0.021194f,
- 0.617188f, 0.019775f, 0.605957f, 0.018463f, 0.594727f, 0.017258f, 0.583008f, 0.016129f,
- 0.571289f, 0.015076f, 0.559570f, 0.014099f, 0.547852f, 0.013191f, 0.535645f, 0.012337f,
- 0.463623f, 0.536133f, 0.463623f, 0.536133f, 0.463867f, 0.535645f, 0.464111f, 0.535156f,
- 0.465088f, 0.533691f, 0.466064f, 0.530762f, 0.468506f, 0.526367f, 0.471191f, 0.520020f,
- 0.474609f, 0.511230f, 0.478516f, 0.499268f, 0.483643f, 0.484375f, 0.489990f, 0.466797f,
- 0.495361f, 0.447266f, 0.502441f, 0.425537f, 0.515137f, 0.403564f, 0.526855f, 0.380859f,
- 0.540039f, 0.358887f, 0.553711f, 0.336914f, 0.564453f, 0.315918f, 0.587891f, 0.295898f,
- 0.600098f, 0.276611f, 0.610840f, 0.258545f, 0.624512f, 0.241211f, 0.641113f, 0.225098f,
- 0.657715f, 0.209717f, 0.668457f, 0.195312f, 0.678223f, 0.181763f, 0.687988f, 0.169067f,
- 0.701172f, 0.157104f, 0.707031f, 0.146118f, 0.715332f, 0.135620f, 0.723145f, 0.125977f,
- 0.728516f, 0.117126f, 0.734375f, 0.108704f, 0.736328f, 0.100952f, 0.739746f, 0.093750f,
- 0.741699f, 0.087036f, 0.742188f, 0.080872f, 0.741699f, 0.075134f, 0.741211f, 0.069763f,
- 0.739258f, 0.064819f, 0.736816f, 0.060272f, 0.733398f, 0.056030f, 0.729004f, 0.052124f,
- 0.724121f, 0.048492f, 0.718750f, 0.045105f, 0.712402f, 0.041992f, 0.705078f, 0.039093f,
- 0.698242f, 0.036407f, 0.689941f, 0.033905f, 0.681641f, 0.031616f, 0.672852f, 0.029480f,
- 0.663574f, 0.027512f, 0.653809f, 0.025665f, 0.644043f, 0.023956f, 0.633301f, 0.022369f,
- 0.622559f, 0.020889f, 0.611816f, 0.019516f, 0.601074f, 0.018250f, 0.589355f, 0.017059f,
- 0.578125f, 0.015961f, 0.565918f, 0.014946f, 0.554199f, 0.013992f, 0.542480f, 0.013107f,
- 0.414551f, 0.584961f, 0.414551f, 0.584961f, 0.414795f, 0.584961f, 0.415039f, 0.583984f,
- 0.416260f, 0.582031f, 0.418457f, 0.578613f, 0.420166f, 0.572754f, 0.424072f, 0.563965f,
- 0.428467f, 0.552246f, 0.433838f, 0.537109f, 0.441162f, 0.518066f, 0.448730f, 0.497070f,
- 0.458984f, 0.473633f, 0.467773f, 0.449219f, 0.480713f, 0.424072f, 0.497559f, 0.399414f,
- 0.511719f, 0.375244f, 0.529297f, 0.352051f, 0.543945f, 0.329834f, 0.566895f, 0.308838f,
- 0.581543f, 0.288574f, 0.598633f, 0.269531f, 0.619629f, 0.251465f, 0.635742f, 0.234497f,
- 0.646973f, 0.218506f, 0.659668f, 0.203369f, 0.674805f, 0.189331f, 0.684570f, 0.176025f,
- 0.695801f, 0.163696f, 0.707031f, 0.152222f, 0.718750f, 0.141357f, 0.723145f, 0.131348f,
- 0.729004f, 0.122009f, 0.734375f, 0.113342f, 0.738281f, 0.105286f, 0.741211f, 0.097778f,
- 0.743164f, 0.090820f, 0.744629f, 0.084412f, 0.744629f, 0.078430f, 0.743652f, 0.072876f,
- 0.742676f, 0.067749f, 0.739746f, 0.062988f, 0.735840f, 0.058624f, 0.731934f, 0.054535f,
- 0.727539f, 0.050751f, 0.721680f, 0.047241f, 0.715820f, 0.044006f, 0.709473f, 0.040985f,
- 0.702148f, 0.038208f, 0.694824f, 0.035614f, 0.686523f, 0.033234f, 0.677734f, 0.031006f,
- 0.668457f, 0.028946f, 0.659180f, 0.027023f, 0.649414f, 0.025238f, 0.639160f, 0.023590f,
- 0.628906f, 0.022049f, 0.618164f, 0.020630f, 0.606934f, 0.019287f, 0.595703f, 0.018051f,
- 0.584473f, 0.016907f, 0.572754f, 0.015839f, 0.561035f, 0.014839f, 0.549316f, 0.013908f,
- 0.361816f, 0.637695f, 0.361816f, 0.637695f, 0.362061f, 0.637207f, 0.362793f, 0.636230f,
- 0.364258f, 0.633301f, 0.366455f, 0.628906f, 0.369873f, 0.621094f, 0.374512f, 0.609375f,
- 0.378906f, 0.593750f, 0.387451f, 0.573730f, 0.396484f, 0.550293f, 0.407471f, 0.524414f,
- 0.419189f, 0.497314f, 0.433594f, 0.469971f, 0.453613f, 0.442627f, 0.473633f, 0.416016f,
- 0.488037f, 0.390381f, 0.509277f, 0.365967f, 0.528809f, 0.343262f, 0.549805f, 0.320801f,
- 0.574707f, 0.299805f, 0.590332f, 0.280029f, 0.609375f, 0.261475f, 0.631836f, 0.243774f,
- 0.641602f, 0.227173f, 0.659668f, 0.211426f, 0.671387f, 0.196777f, 0.685059f, 0.183105f,
- 0.698730f, 0.170166f, 0.705078f, 0.158203f, 0.715820f, 0.146973f, 0.723145f, 0.136597f,
- 0.730469f, 0.126831f, 0.737793f, 0.117920f, 0.740723f, 0.109558f, 0.741699f, 0.101807f,
- 0.745117f, 0.094604f, 0.747559f, 0.087891f, 0.747070f, 0.081726f, 0.747070f, 0.075989f,
- 0.744141f, 0.070679f, 0.742676f, 0.065796f, 0.739258f, 0.061218f, 0.735840f, 0.056976f,
- 0.730957f, 0.053070f, 0.725586f, 0.049438f, 0.719727f, 0.046082f, 0.713867f, 0.042938f,
- 0.706543f, 0.040070f, 0.699219f, 0.037384f, 0.690918f, 0.034882f, 0.682617f, 0.032562f,
- 0.673828f, 0.030426f, 0.664551f, 0.028442f, 0.654785f, 0.026581f, 0.645020f, 0.024857f,
- 0.634766f, 0.023254f, 0.624023f, 0.021774f, 0.613281f, 0.020386f, 0.602051f, 0.019089f,
- 0.590820f, 0.017899f, 0.579590f, 0.016769f, 0.567871f, 0.015732f, 0.556641f, 0.014755f,
- 0.305420f, 0.694336f, 0.305420f, 0.694336f, 0.305664f, 0.693848f, 0.306641f, 0.691895f,
- 0.308105f, 0.687988f, 0.311279f, 0.681152f, 0.316162f, 0.669922f, 0.321777f, 0.654297f,
- 0.330078f, 0.632812f, 0.344238f, 0.606934f, 0.353027f, 0.578125f, 0.367432f, 0.547852f,
- 0.385498f, 0.517578f, 0.405273f, 0.487793f, 0.422852f, 0.458496f, 0.448730f, 0.431152f,
- 0.473633f, 0.404541f, 0.493896f, 0.379639f, 0.519531f, 0.355469f, 0.539551f, 0.332520f,
- 0.563477f, 0.310791f, 0.583008f, 0.290283f, 0.604004f, 0.270752f, 0.626953f, 0.252686f,
- 0.642090f, 0.235352f, 0.657715f, 0.218994f, 0.672852f, 0.203857f, 0.686523f, 0.189575f,
- 0.699219f, 0.176270f, 0.707031f, 0.163818f, 0.717285f, 0.152344f, 0.723633f, 0.141602f,
- 0.730469f, 0.131592f, 0.739258f, 0.122375f, 0.741699f, 0.113708f, 0.745605f, 0.105713f,
- 0.747559f, 0.098267f, 0.748047f, 0.091370f, 0.749023f, 0.085022f, 0.748535f, 0.079102f,
- 0.747070f, 0.073608f, 0.746582f, 0.068542f, 0.742188f, 0.063843f, 0.739258f, 0.059448f,
- 0.734375f, 0.055420f, 0.730469f, 0.051666f, 0.724609f, 0.048187f, 0.717773f, 0.044952f,
- 0.710938f, 0.041962f, 0.704102f, 0.039154f, 0.695801f, 0.036591f, 0.687988f, 0.034180f,
- 0.679199f, 0.031952f, 0.670410f, 0.029892f, 0.660645f, 0.027969f, 0.650879f, 0.026184f,
- 0.640625f, 0.024521f, 0.630371f, 0.022964f, 0.619629f, 0.021515f, 0.608887f, 0.020172f,
- 0.598145f, 0.018921f, 0.586914f, 0.017761f, 0.575195f, 0.016663f, 0.563965f, 0.015656f,
- 0.244995f, 0.754395f, 0.245117f, 0.754395f, 0.245483f, 0.753418f, 0.246704f, 0.750977f,
- 0.249634f, 0.745117f, 0.253662f, 0.734863f, 0.260010f, 0.717773f, 0.268555f, 0.694336f,
- 0.277344f, 0.665527f, 0.292480f, 0.632812f, 0.309814f, 0.599121f, 0.331787f, 0.565918f,
- 0.352539f, 0.533203f, 0.376465f, 0.501953f, 0.405518f, 0.472412f, 0.433838f, 0.444336f,
- 0.456787f, 0.417236f, 0.488281f, 0.391357f, 0.510254f, 0.366211f, 0.540039f, 0.343018f,
- 0.564941f, 0.320557f, 0.579590f, 0.299561f, 0.606445f, 0.279541f, 0.627441f, 0.260498f,
- 0.638184f, 0.242676f, 0.666504f, 0.226074f, 0.670898f, 0.210327f, 0.687988f, 0.195801f,
- 0.700684f, 0.182129f, 0.706055f, 0.169312f, 0.718262f, 0.157471f, 0.727539f, 0.146362f,
- 0.735840f, 0.136108f, 0.738770f, 0.126587f, 0.743164f, 0.117737f, 0.746582f, 0.109497f,
- 0.751953f, 0.101868f, 0.751953f, 0.094788f, 0.753906f, 0.088257f, 0.752930f, 0.082153f,
- 0.750977f, 0.076538f, 0.749512f, 0.071289f, 0.745605f, 0.066406f, 0.742188f, 0.061951f,
- 0.738281f, 0.057770f, 0.734375f, 0.053894f, 0.729004f, 0.050293f, 0.722656f, 0.046967f,
- 0.715332f, 0.043854f, 0.708496f, 0.040985f, 0.701172f, 0.038330f, 0.693359f, 0.035828f,
- 0.684570f, 0.033539f, 0.676270f, 0.031403f, 0.666992f, 0.029404f, 0.657227f, 0.027542f,
- 0.646973f, 0.025818f, 0.636719f, 0.024200f, 0.626465f, 0.022705f, 0.615723f, 0.021301f,
- 0.604980f, 0.020004f, 0.593750f, 0.018784f, 0.582520f, 0.017654f, 0.571289f, 0.016586f,
- 0.180542f, 0.818848f, 0.180664f, 0.818848f, 0.181274f, 0.817383f, 0.183350f, 0.812988f,
- 0.187134f, 0.802734f, 0.193237f, 0.784180f, 0.201416f, 0.757324f, 0.214355f, 0.723145f,
- 0.231445f, 0.685547f, 0.248901f, 0.648438f, 0.272217f, 0.611816f, 0.302979f, 0.577148f,
- 0.329834f, 0.544922f, 0.364258f, 0.514160f, 0.394043f, 0.484619f, 0.425781f, 0.456055f,
- 0.456543f, 0.428467f, 0.481934f, 0.402344f, 0.512207f, 0.376709f, 0.540039f, 0.352783f,
- 0.566406f, 0.329346f, 0.579102f, 0.307617f, 0.607910f, 0.286865f, 0.627930f, 0.267822f,
- 0.645996f, 0.249512f, 0.661621f, 0.232178f, 0.677734f, 0.216309f, 0.691406f, 0.201172f,
- 0.702637f, 0.187256f, 0.711426f, 0.174194f, 0.721680f, 0.161987f, 0.730957f, 0.150879f,
- 0.736328f, 0.140259f, 0.742188f, 0.130493f, 0.746582f, 0.121582f, 0.750488f, 0.113159f,
- 0.751953f, 0.105347f, 0.752930f, 0.098083f, 0.756836f, 0.091370f, 0.755859f, 0.085144f,
- 0.755371f, 0.079346f, 0.752441f, 0.073975f, 0.750488f, 0.069031f, 0.746582f, 0.064392f,
- 0.743652f, 0.060120f, 0.737793f, 0.056152f, 0.733398f, 0.052460f, 0.727051f, 0.049011f,
- 0.720215f, 0.045837f, 0.713867f, 0.042847f, 0.706543f, 0.040100f, 0.699219f, 0.037537f,
- 0.690430f, 0.035156f, 0.682129f, 0.032928f, 0.672852f, 0.030884f, 0.663086f, 0.028961f,
- 0.653809f, 0.027161f, 0.644043f, 0.025497f, 0.633301f, 0.023941f, 0.622559f, 0.022491f,
- 0.612305f, 0.021133f, 0.601074f, 0.019867f, 0.590332f, 0.018692f, 0.579102f, 0.017578f,
- 0.111816f, 0.888184f, 0.112000f, 0.887207f, 0.112976f, 0.883789f, 0.115845f, 0.873047f,
- 0.122864f, 0.849609f, 0.133301f, 0.813477f, 0.147217f, 0.770996f, 0.167236f, 0.728027f,
- 0.196411f, 0.688965f, 0.222290f, 0.653320f, 0.258057f, 0.619629f, 0.293457f, 0.587402f,
- 0.328613f, 0.556152f, 0.361328f, 0.524902f, 0.392578f, 0.495850f, 0.430420f, 0.466064f,
- 0.459961f, 0.437744f, 0.482422f, 0.410889f, 0.511230f, 0.385010f, 0.536621f, 0.359863f,
- 0.568848f, 0.336182f, 0.592773f, 0.313721f, 0.614258f, 0.293213f, 0.626953f, 0.273193f,
- 0.646484f, 0.254639f, 0.657227f, 0.237427f, 0.683105f, 0.221191f, 0.693359f, 0.205933f,
- 0.698242f, 0.191772f, 0.709473f, 0.178589f, 0.724609f, 0.166260f, 0.733398f, 0.154907f,
- 0.739746f, 0.144165f, 0.745605f, 0.134399f, 0.750977f, 0.125122f, 0.753906f, 0.116577f,
- 0.754883f, 0.108704f, 0.758301f, 0.101257f, 0.759766f, 0.094482f, 0.757812f, 0.088074f,
- 0.759766f, 0.082092f, 0.758301f, 0.076660f, 0.756348f, 0.071594f, 0.752441f, 0.066833f,
- 0.748047f, 0.062469f, 0.741699f, 0.058380f, 0.736816f, 0.054596f, 0.732910f, 0.051086f,
- 0.726074f, 0.047791f, 0.719727f, 0.044769f, 0.711914f, 0.041901f, 0.704590f, 0.039276f,
- 0.696289f, 0.036804f, 0.688477f, 0.034546f, 0.678711f, 0.032410f, 0.669922f, 0.030411f,
- 0.660156f, 0.028564f, 0.650391f, 0.026840f, 0.640625f, 0.025223f, 0.630371f, 0.023727f,
- 0.619629f, 0.022324f, 0.608887f, 0.020996f, 0.597656f, 0.019775f, 0.586914f, 0.018631f,
- 0.038452f, 0.960938f, 0.039124f, 0.957520f, 0.042480f, 0.933594f, 0.051575f, 0.879395f,
- 0.069275f, 0.824219f, 0.091064f, 0.785156f, 0.126343f, 0.753906f, 0.154419f, 0.725586f,
- 0.192139f, 0.695312f, 0.234375f, 0.663086f, 0.273438f, 0.630371f, 0.305908f, 0.597656f,
- 0.338379f, 0.565430f, 0.379150f, 0.532227f, 0.413818f, 0.501465f, 0.444336f, 0.471191f,
- 0.471436f, 0.442383f, 0.504395f, 0.414795f, 0.531250f, 0.388672f, 0.547363f, 0.364014f,
- 0.579590f, 0.340088f, 0.603516f, 0.317627f, 0.622559f, 0.297119f, 0.635742f, 0.276855f,
- 0.669434f, 0.258301f, 0.670410f, 0.241089f, 0.685547f, 0.224854f, 0.699219f, 0.209717f,
- 0.712402f, 0.195190f, 0.720703f, 0.182373f, 0.729980f, 0.169678f, 0.746582f, 0.158325f,
- 0.744629f, 0.147705f, 0.748535f, 0.137695f, 0.760254f, 0.128296f, 0.757812f, 0.119629f,
- 0.761230f, 0.111755f, 0.762207f, 0.104248f, 0.764160f, 0.097290f, 0.763184f, 0.090881f,
- 0.762207f, 0.084900f, 0.760742f, 0.079285f, 0.759766f, 0.074097f, 0.755859f, 0.069275f,
- 0.752930f, 0.064758f, 0.747559f, 0.060669f, 0.742676f, 0.056793f, 0.737305f, 0.053131f,
- 0.731445f, 0.049774f, 0.725586f, 0.046661f, 0.718262f, 0.043732f, 0.710449f, 0.041077f,
- 0.702637f, 0.038544f, 0.694336f, 0.036163f, 0.685547f, 0.033966f, 0.676758f, 0.031921f,
- 0.667480f, 0.030014f, 0.657715f, 0.028229f, 0.647461f, 0.026566f, 0.637207f, 0.025009f,
- 0.626953f, 0.023544f, 0.616699f, 0.022186f, 0.605957f, 0.020920f, 0.594727f, 0.019730f,
-};
-
-static float ltc_disk_integral[64 * 64] = {
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.015873f, 0.047619f, 0.079365f, 0.111111f, 0.142857f, 0.174603f, 0.206349f, 0.238095f,
- 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000148f, 0.002454f, 0.008675f, 0.019560f,
- 0.035433f, 0.056294f, 0.081819f, 0.111259f, 0.142857f, 0.174603f, 0.206349f, 0.238095f,
- 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000002f, 0.000761f, 0.003673f, 0.009403f, 0.018333f, 0.030683f,
- 0.046556f, 0.065952f, 0.088768f, 0.114784f, 0.143618f, 0.174606f, 0.206349f, 0.238095f,
- 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000039f, 0.000969f, 0.003703f, 0.008684f, 0.016189f, 0.026395f, 0.039409f,
- 0.055282f, 0.074014f, 0.095554f, 0.119795f, 0.146560f, 0.175573f, 0.206388f, 0.238095f,
- 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000047f, 0.000895f, 0.003265f, 0.007514f, 0.013873f, 0.022495f, 0.033483f, 0.046897f,
- 0.062770f, 0.081102f, 0.101860f, 0.124985f, 0.150372f, 0.177868f, 0.207245f, 0.238143f,
- 0.269841f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000028f,
- 0.000695f, 0.002655f, 0.006230f, 0.011623f, 0.018976f, 0.028384f, 0.039915f, 0.053606f,
- 0.069479f, 0.087534f, 0.107749f, 0.130087f, 0.154481f, 0.180833f, 0.209005f, 0.238791f,
- 0.269869f, 0.301587f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000465f,
- 0.002017f, 0.004975f, 0.009533f, 0.015821f, 0.023934f, 0.033937f, 0.045874f, 0.059772f,
- 0.075645f, 0.093493f, 0.113302f, 0.135045f, 0.158678f, 0.184136f, 0.211325f, 0.240113f,
- 0.270306f, 0.301594f, 0.333333f, 0.365079f, 0.396825f, 0.428571f, 0.460317f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000260f, 0.001426f,
- 0.003823f, 0.007642f, 0.013012f, 0.020025f, 0.028745f, 0.039218f, 0.051475f, 0.065535f,
- 0.081408f, 0.099094f, 0.118583f, 0.139856f, 0.162882f, 0.187615f, 0.213991f, 0.241918f,
- 0.271267f, 0.301847f, 0.333333f, 0.365079f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000109f, 0.000921f, 0.002807f,
- 0.005966f, 0.010528f, 0.016585f, 0.024200f, 0.033420f, 0.044278f, 0.056796f, 0.070988f,
- 0.086861f, 0.104415f, 0.123643f, 0.144531f, 0.167057f, 0.191188f, 0.216878f, 0.244062f,
- 0.272649f, 0.302509f, 0.333442f, 0.365079f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000024f, 0.000524f, 0.001947f, 0.004511f,
- 0.008351f, 0.013561f, 0.020206f, 0.028332f, 0.037974f, 0.049155f, 0.061892f, 0.076194f,
- 0.092067f, 0.109511f, 0.128520f, 0.149085f, 0.171189f, 0.194809f, 0.219910f, 0.246447f,
- 0.274352f, 0.303535f, 0.333857f, 0.365104f, 0.396826f, 0.428572f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000242f, 0.001250f, 0.003275f, 0.006463f,
- 0.010913f, 0.016693f, 0.023849f, 0.032418f, 0.042423f, 0.053881f, 0.066805f, 0.081201f,
- 0.097074f, 0.114424f, 0.133246f, 0.153534f, 0.175275f, 0.198453f, 0.223042f, 0.249009f,
- 0.276304f, 0.304862f, 0.334584f, 0.365322f, 0.396826f, 0.428571f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000074f, 0.000716f, 0.002252f, 0.004848f, 0.008610f,
- 0.013608f, 0.019894f, 0.027502f, 0.036458f, 0.046780f, 0.058480f, 0.071567f, 0.086045f,
- 0.101918f, 0.119186f, 0.137845f, 0.157891f, 0.179316f, 0.202106f, 0.226243f, 0.251704f,
- 0.278451f, 0.306436f, 0.335586f, 0.365796f, 0.396900f, 0.428571f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000006f, 0.000342f, 0.001437f, 0.003492f, 0.006624f, 0.010911f,
- 0.016406f, 0.023146f, 0.031157f, 0.040457f, 0.051059f, 0.062972f, 0.076203f, 0.090753f,
- 0.106626f, 0.123822f, 0.142337f, 0.162170f, 0.183314f, 0.205760f, 0.229496f, 0.254502f,
- 0.280753f, 0.308212f, 0.336825f, 0.366517f, 0.397167f, 0.428578f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000114f, 0.000820f, 0.002381f, 0.004935f, 0.008569f, 0.013339f,
- 0.019286f, 0.026437f, 0.034810f, 0.044418f, 0.055271f, 0.067375f, 0.080733f, 0.095348f,
- 0.111221f, 0.128352f, 0.146740f, 0.166382f, 0.187276f, 0.209413f, 0.232786f, 0.257382f,
- 0.283181f, 0.310156f, 0.338269f, 0.367461f, 0.397646f, 0.428685f, 0.460318f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000014f, 0.000390f, 0.001503f, 0.003525f, 0.006554f, 0.010655f, 0.015872f,
- 0.022233f, 0.029758f, 0.038460f, 0.048347f, 0.059427f, 0.071702f, 0.085175f, 0.099848f,
- 0.115721f, 0.132794f, 0.151067f, 0.170538f, 0.191204f, 0.213063f, 0.236107f, 0.260329f,
- 0.285714f, 0.312243f, 0.339887f, 0.368604f, 0.398329f, 0.428961f, 0.460331f, 0.492064f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000130f, 0.000845f, 0.002376f, 0.004845f, 0.008325f, 0.012864f, 0.018495f,
- 0.025237f, 0.033105f, 0.042107f, 0.052249f, 0.063534f, 0.075965f, 0.089543f, 0.104269f,
- 0.120142f, 0.137163f, 0.155330f, 0.174645f, 0.195106f, 0.216710f, 0.239454f, 0.263332f,
- 0.288336f, 0.314451f, 0.341658f, 0.369924f, 0.399202f, 0.429416f, 0.460447f, 0.492064f,
- 0.523809f, 0.555555f, 0.587301f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000016f, 0.000391f, 0.001475f, 0.003423f, 0.006322f, 0.010230f, 0.015179f, 0.021195f,
- 0.028290f, 0.036474f, 0.045752f, 0.056128f, 0.067602f, 0.080176f, 0.093850f, 0.108623f,
- 0.124496f, 0.141469f, 0.159541f, 0.178713f, 0.198985f, 0.220355f, 0.242823f, 0.266385f,
- 0.291036f, 0.316767f, 0.343563f, 0.371402f, 0.400248f, 0.430047f, 0.460709f, 0.492079f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000123f, 0.000807f, 0.002272f, 0.004628f, 0.007942f, 0.012253f, 0.017589f, 0.023963f,
- 0.031387f, 0.039864f, 0.049398f, 0.059990f, 0.071638f, 0.084344f, 0.098106f, 0.112923f,
- 0.128796f, 0.145725f, 0.163709f, 0.182749f, 0.202847f, 0.224001f, 0.246214f, 0.269482f,
- 0.293805f, 0.319176f, 0.345587f, 0.373021f, 0.401454f, 0.430844f, 0.461125f, 0.492187f,
- 0.523810f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f,
- 0.000356f, 0.001378f, 0.003225f, 0.005979f, 0.009689f, 0.014384f, 0.020083f, 0.026795f,
- 0.034525f, 0.043276f, 0.053047f, 0.063839f, 0.075649f, 0.088476f, 0.102320f, 0.117178f,
- 0.133051f, 0.149939f, 0.167841f, 0.186760f, 0.206696f, 0.227650f, 0.249625f, 0.272620f,
- 0.296636f, 0.321671f, 0.347718f, 0.374768f, 0.402804f, 0.431796f, 0.461695f, 0.492420f,
- 0.523822f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f,
- 0.000725f, 0.002097f, 0.004323f, 0.007463f, 0.011553f, 0.016613f, 0.022655f, 0.029684f,
- 0.037702f, 0.046708f, 0.056701f, 0.067680f, 0.079640f, 0.092581f, 0.106501f, 0.121397f,
- 0.137270f, 0.154120f, 0.171946f, 0.190751f, 0.210537f, 0.231305f, 0.253057f, 0.275797f,
- 0.299525f, 0.324242f, 0.349947f, 0.376633f, 0.404289f, 0.432895f, 0.462415f, 0.492788f,
- 0.523909f, 0.555556f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000005f, 0.000296f,
- 0.001231f, 0.002960f, 0.005558f, 0.009072f, 0.013526f, 0.018933f, 0.025299f, 0.032627f,
- 0.040916f, 0.050162f, 0.060364f, 0.071517f, 0.083619f, 0.096666f, 0.110656f, 0.125588f,
- 0.141461f, 0.158275f, 0.176031f, 0.194730f, 0.214374f, 0.234967f, 0.256512f, 0.279011f,
- 0.302468f, 0.326887f, 0.352266f, 0.378605f, 0.405897f, 0.434130f, 0.463277f, 0.493295f,
- 0.524106f, 0.555561f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000068f, 0.000613f,
- 0.001874f, 0.003958f, 0.006921f, 0.010796f, 0.015599f, 0.021336f, 0.028011f, 0.035623f,
- 0.044167f, 0.053640f, 0.064038f, 0.075355f, 0.087589f, 0.100736f, 0.114793f, 0.129759f,
- 0.145632f, 0.162412f, 0.180101f, 0.198700f, 0.218213f, 0.238641f, 0.259989f, 0.282262f,
- 0.305464f, 0.329599f, 0.354670f, 0.380678f, 0.407622f, 0.435493f, 0.464275f, 0.493938f,
- 0.524422f, 0.555624f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000223f, 0.001054f,
- 0.002649f, 0.005086f, 0.008406f, 0.012629f, 0.017766f, 0.023820f, 0.030789f, 0.038669f,
- 0.047455f, 0.057143f, 0.067726f, 0.079199f, 0.091558f, 0.104798f, 0.118918f, 0.133915f,
- 0.149788f, 0.166537f, 0.184164f, 0.202669f, 0.222056f, 0.242329f, 0.263492f, 0.285551f,
- 0.308510f, 0.332376f, 0.357153f, 0.382845f, 0.409454f, 0.436977f, 0.465404f, 0.494713f,
- 0.524864f, 0.555779f, 0.587302f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f, 0.000486f, 0.001621f,
- 0.003553f, 0.006338f, 0.010004f, 0.014565f, 0.020024f, 0.026380f, 0.033629f, 0.041765f,
- 0.050782f, 0.060673f, 0.071431f, 0.083052f, 0.095529f, 0.108859f, 0.123038f, 0.138065f,
- 0.153938f, 0.170657f, 0.188224f, 0.206640f, 0.225909f, 0.246035f, 0.267022f, 0.288878f,
- 0.311607f, 0.335216f, 0.359713f, 0.385103f, 0.411390f, 0.438576f, 0.466656f, 0.495617f,
- 0.525431f, 0.556041f, 0.587338f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000149f, 0.000861f, 0.002312f,
- 0.004581f, 0.007709f, 0.011713f, 0.016599f, 0.022367f, 0.029014f, 0.036531f, 0.044912f,
- 0.054148f, 0.064233f, 0.075158f, 0.086918f, 0.099507f, 0.112922f, 0.127157f, 0.142212f,
- 0.158085f, 0.174776f, 0.192287f, 0.210619f, 0.229775f, 0.249761f, 0.270582f, 0.292243f,
- 0.314753f, 0.338118f, 0.362347f, 0.387447f, 0.413424f, 0.440284f, 0.468027f, 0.496645f,
- 0.526122f, 0.556417f, 0.587451f, 0.619048f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000355f, 0.001353f, 0.003126f,
- 0.005730f, 0.009194f, 0.013526f, 0.018728f, 0.024795f, 0.031720f, 0.039494f, 0.048109f,
- 0.057555f, 0.067824f, 0.078909f, 0.090802f, 0.103499f, 0.116993f, 0.131282f, 0.146364f,
- 0.162237f, 0.178902f, 0.196358f, 0.214610f, 0.233660f, 0.253512f, 0.274174f, 0.295650f,
- 0.317950f, 0.341081f, 0.365053f, 0.389874f, 0.415553f, 0.442098f, 0.469512f, 0.497794f,
- 0.526935f, 0.556908f, 0.587657f, 0.619060f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000083f, 0.000665f, 0.001962f, 0.004059f,
- 0.006997f, 0.010790f, 0.015442f, 0.020949f, 0.027304f, 0.034497f, 0.042518f, 0.051358f,
- 0.061005f, 0.071451f, 0.082688f, 0.094709f, 0.107507f, 0.121078f, 0.135419f, 0.150526f,
- 0.166399f, 0.183038f, 0.200443f, 0.218618f, 0.237566f, 0.257291f, 0.277800f, 0.299100f,
- 0.321199f, 0.344106f, 0.367830f, 0.392383f, 0.417774f, 0.444013f, 0.471107f, 0.499060f,
- 0.527869f, 0.557517f, 0.587966f, 0.619130f, 0.650794f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000233f, 0.001082f, 0.002688f, 0.005111f,
- 0.008377f, 0.012493f, 0.017456f, 0.023260f, 0.029893f, 0.037345f, 0.045604f, 0.054659f,
- 0.064499f, 0.075115f, 0.086498f, 0.098641f, 0.111537f, 0.125182f, 0.139571f, 0.154703f,
- 0.170576f, 0.187190f, 0.204547f, 0.222648f, 0.241498f, 0.261101f, 0.281465f, 0.302595f,
- 0.324501f, 0.347192f, 0.370679f, 0.394973f, 0.420085f, 0.446027f, 0.472810f, 0.500441f,
- 0.528921f, 0.558244f, 0.588384f, 0.619281f, 0.650795f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000033f, 0.000477f, 0.001611f, 0.003532f, 0.006280f,
- 0.009869f, 0.014301f, 0.019568f, 0.025659f, 0.032563f, 0.040265f, 0.048753f, 0.058016f,
- 0.068042f, 0.078821f, 0.090344f, 0.102604f, 0.115594f, 0.129309f, 0.143745f, 0.158901f,
- 0.174774f, 0.191365f, 0.208674f, 0.226705f, 0.245461f, 0.264947f, 0.285170f, 0.306137f,
- 0.327857f, 0.350341f, 0.373598f, 0.397642f, 0.422485f, 0.448139f, 0.474619f, 0.501933f,
- 0.530089f, 0.559087f, 0.588913f, 0.619525f, 0.650826f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000130f, 0.000821f, 0.002252f, 0.004491f, 0.007562f,
- 0.011472f, 0.016213f, 0.021776f, 0.028147f, 0.035312f, 0.043256f, 0.051966f, 0.061430f,
- 0.071635f, 0.082571f, 0.094229f, 0.106602f, 0.119682f, 0.133465f, 0.147947f, 0.163125f,
- 0.178998f, 0.195566f, 0.212830f, 0.230793f, 0.249459f, 0.268832f, 0.288920f, 0.309730f,
- 0.331271f, 0.353554f, 0.376590f, 0.400391f, 0.424973f, 0.450347f, 0.476531f, 0.503535f,
- 0.531372f, 0.560047f, 0.589554f, 0.619869f, 0.650923f, 0.682540f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000005f, 0.000309f, 0.001270f, 0.003008f, 0.005566f, 0.008959f,
- 0.013183f, 0.018228f, 0.024080f, 0.030723f, 0.038142f, 0.046321f, 0.055246f, 0.064903f,
- 0.075281f, 0.086369f, 0.098158f, 0.110639f, 0.123806f, 0.137655f, 0.152180f, 0.167380f,
- 0.183253f, 0.199799f, 0.217020f, 0.234918f, 0.253496f, 0.272761f, 0.292719f, 0.313377f,
- 0.334745f, 0.356833f, 0.379654f, 0.403221f, 0.427548f, 0.452651f, 0.478545f, 0.505246f,
- 0.532768f, 0.561122f, 0.590309f, 0.620318f, 0.651102f, 0.682545f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000053f, 0.000579f, 0.001828f, 0.003878f, 0.006757f, 0.010468f,
- 0.015002f, 0.020344f, 0.026479f, 0.033388f, 0.041054f, 0.049461f, 0.058594f, 0.068440f,
- 0.078985f, 0.090220f, 0.102134f, 0.114721f, 0.127972f, 0.141884f, 0.156451f, 0.171672f,
- 0.187545f, 0.204070f, 0.221249f, 0.239083f, 0.257578f, 0.276738f, 0.296569f, 0.317080f,
- 0.338281f, 0.360181f, 0.382794f, 0.406133f, 0.430213f, 0.455050f, 0.480662f, 0.507065f,
- 0.534278f, 0.562313f, 0.591180f, 0.620875f, 0.651373f, 0.682593f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000169f, 0.000949f, 0.002497f, 0.004864f, 0.008063f, 0.012089f,
- 0.016929f, 0.022563f, 0.028974f, 0.036142f, 0.044049f, 0.052678f, 0.062014f, 0.072042f,
- 0.082750f, 0.094127f, 0.106164f, 0.118852f, 0.132185f, 0.146157f, 0.160766f, 0.176007f,
- 0.191880f, 0.208385f, 0.225523f, 0.243296f, 0.261709f, 0.280767f, 0.300476f, 0.320845f,
- 0.341883f, 0.363601f, 0.386011f, 0.409128f, 0.432967f, 0.457545f, 0.482881f, 0.508992f,
- 0.535899f, 0.563619f, 0.592165f, 0.621544f, 0.651743f, 0.682709f, 0.714286f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000010f, 0.000368f, 0.001423f, 0.003279f, 0.005966f, 0.009485f, 0.013824f,
- 0.018964f, 0.024886f, 0.031567f, 0.038988f, 0.047130f, 0.055975f, 0.065508f, 0.075714f,
- 0.086580f, 0.098095f, 0.110251f, 0.123038f, 0.136450f, 0.150482f, 0.165129f, 0.180390f,
- 0.196263f, 0.212748f, 0.229847f, 0.247561f, 0.265895f, 0.284854f, 0.304445f, 0.324675f,
- 0.345555f, 0.367095f, 0.389309f, 0.412210f, 0.435814f, 0.460138f, 0.485203f, 0.511028f,
- 0.537634f, 0.565041f, 0.593268f, 0.622327f, 0.652217f, 0.682907f, 0.714296f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000068f, 0.000658f, 0.002006f, 0.004178f, 0.007186f, 0.011024f, 0.015672f,
- 0.021109f, 0.027312f, 0.034259f, 0.041928f, 0.050300f, 0.059356f, 0.069081f, 0.079460f,
- 0.090480f, 0.102130f, 0.114400f, 0.127284f, 0.140772f, 0.154862f, 0.169548f, 0.184828f,
- 0.200701f, 0.217167f, 0.234227f, 0.251884f, 0.270141f, 0.289004f, 0.308479f, 0.328575f,
- 0.349301f, 0.370668f, 0.392689f, 0.415379f, 0.438754f, 0.462830f, 0.487630f, 0.513173f,
- 0.539482f, 0.566579f, 0.594488f, 0.623226f, 0.652800f, 0.683198f, 0.714354f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000196f, 0.001048f, 0.002702f, 0.005194f, 0.008526f, 0.012680f, 0.017635f,
- 0.023365f, 0.029846f, 0.037053f, 0.044965f, 0.053561f, 0.062824f, 0.072737f, 0.083284f,
- 0.094454f, 0.106236f, 0.118619f, 0.131595f, 0.145159f, 0.159305f, 0.174028f, 0.189327f,
- 0.205200f, 0.221647f, 0.238670f, 0.256270f, 0.274453f, 0.293222f, 0.312585f, 0.332550f,
- 0.353126f, 0.374324f, 0.396158f, 0.418641f, 0.441790f, 0.465624f, 0.490163f, 0.515429f,
- 0.541445f, 0.568236f, 0.595828f, 0.624242f, 0.653496f, 0.683588f, 0.714482f, 0.746032f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000012f, 0.000407f, 0.001545f, 0.003514f, 0.006332f, 0.009987f, 0.014457f, 0.019715f,
- 0.025734f, 0.032488f, 0.039952f, 0.048102f, 0.056919f, 0.066384f, 0.076480f, 0.087193f,
- 0.098509f, 0.110419f, 0.122912f, 0.135980f, 0.149617f, 0.163817f, 0.178577f, 0.193894f,
- 0.209767f, 0.226196f, 0.243182f, 0.260728f, 0.278837f, 0.297515f, 0.316768f, 0.336605f,
- 0.357034f, 0.378067f, 0.399717f, 0.421998f, 0.444928f, 0.468523f, 0.492806f, 0.517798f,
- 0.543525f, 0.570012f, 0.597288f, 0.625379f, 0.654307f, 0.684084f, 0.714693f, 0.746044f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000074f, 0.000713f, 0.002152f, 0.004446f, 0.007592f, 0.011571f, 0.016356f, 0.021915f,
- 0.028220f, 0.035243f, 0.042959f, 0.051344f, 0.060377f, 0.070040f, 0.080316f, 0.091191f,
- 0.102651f, 0.114686f, 0.127286f, 0.140443f, 0.154151f, 0.168405f, 0.183201f, 0.198536f,
- 0.214409f, 0.230820f, 0.247770f, 0.265263f, 0.283301f, 0.301889f, 0.321035f, 0.340746f,
- 0.361032f, 0.381904f, 0.403374f, 0.425457f, 0.448169f, 0.471530f, 0.495561f, 0.520284f,
- 0.545725f, 0.571911f, 0.598873f, 0.626640f, 0.655239f, 0.684692f, 0.714999f, 0.746106f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000208f, 0.001121f, 0.002877f, 0.005501f, 0.008979f, 0.013283f, 0.018380f, 0.024238f,
- 0.030826f, 0.038115f, 0.046079f, 0.054695f, 0.063941f, 0.073799f, 0.084252f, 0.095285f,
- 0.106886f, 0.119044f, 0.131749f, 0.144994f, 0.158772f, 0.173078f, 0.187908f, 0.203261f,
- 0.219134f, 0.235527f, 0.252443f, 0.269883f, 0.287851f, 0.306352f, 0.325393f, 0.344981f,
- 0.365126f, 0.385839f, 0.407132f, 0.429020f, 0.451520f, 0.474651f, 0.498433f, 0.522890f,
- 0.548048f, 0.573936f, 0.600584f, 0.628027f, 0.656295f, 0.685417f, 0.715406f, 0.746240f,
- 0.777778f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f,
- 0.000427f, 0.001638f, 0.003724f, 0.006685f, 0.010497f, 0.015125f, 0.020534f, 0.026688f,
- 0.033557f, 0.041109f, 0.049318f, 0.058161f, 0.067617f, 0.077666f, 0.088293f, 0.099482f,
- 0.111221f, 0.123499f, 0.136308f, 0.149639f, 0.163485f, 0.177843f, 0.192707f, 0.208077f,
- 0.223950f, 0.240326f, 0.257208f, 0.274596f, 0.292496f, 0.310911f, 0.329849f, 0.349316f,
- 0.369323f, 0.389880f, 0.410999f, 0.432696f, 0.454987f, 0.477890f, 0.501426f, 0.525620f,
- 0.550498f, 0.576089f, 0.602427f, 0.629544f, 0.657479f, 0.686264f, 0.715924f, 0.746459f,
- 0.777789f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000071f,
- 0.000744f, 0.002274f, 0.004698f, 0.008002f, 0.012149f, 0.017102f, 0.022822f, 0.029271f,
- 0.036417f, 0.044229f, 0.052681f, 0.061749f, 0.071411f, 0.081649f, 0.092447f, 0.103790f,
- 0.115665f, 0.128062f, 0.140972f, 0.154387f, 0.168301f, 0.182709f, 0.197608f, 0.212994f,
- 0.228867f, 0.245227f, 0.262074f, 0.279412f, 0.297244f, 0.315575f, 0.334412f, 0.353760f,
- 0.373631f, 0.394034f, 0.414983f, 0.436491f, 0.458575f, 0.481253f, 0.504547f, 0.528481f,
- 0.553081f, 0.578377f, 0.604404f, 0.631197f, 0.658795f, 0.687238f, 0.716559f, 0.746776f,
- 0.777849f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000205f,
- 0.001168f, 0.003033f, 0.005806f, 0.009456f, 0.013942f, 0.019220f, 0.025250f, 0.031992f,
- 0.039414f, 0.047484f, 0.056176f, 0.065466f, 0.075333f, 0.085757f, 0.096724f, 0.108218f,
- 0.120227f, 0.132741f, 0.145751f, 0.159249f, 0.173230f, 0.187687f, 0.202619f, 0.218021f,
- 0.233894f, 0.250238f, 0.267052f, 0.284341f, 0.302106f, 0.320354f, 0.339090f, 0.358322f,
- 0.378059f, 0.398311f, 0.419090f, 0.440412f, 0.462292f, 0.484748f, 0.507802f, 0.531477f,
- 0.555802f, 0.580805f, 0.606522f, 0.632990f, 0.660250f, 0.688346f, 0.717319f, 0.747200f,
- 0.777982f, 0.809524f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000427f,
- 0.001710f, 0.003925f, 0.007054f, 0.011055f, 0.015881f, 0.021485f, 0.027824f, 0.034859f,
- 0.042554f, 0.050881f, 0.059811f, 0.069321f, 0.079390f, 0.089998f, 0.101132f, 0.112775f,
- 0.124917f, 0.137547f, 0.150655f, 0.164236f, 0.178281f, 0.192788f, 0.207752f, 0.223171f,
- 0.239044f, 0.255371f, 0.272153f, 0.289393f, 0.307093f, 0.325259f, 0.343896f, 0.363012f,
- 0.382617f, 0.402719f, 0.423332f, 0.444469f, 0.466146f, 0.488383f, 0.511199f, 0.534618f,
- 0.558668f, 0.583380f, 0.608787f, 0.634929f, 0.661849f, 0.689594f, 0.718211f, 0.747742f,
- 0.778205f, 0.809530f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000059f, 0.000754f,
- 0.002379f, 0.004956f, 0.008449f, 0.012806f, 0.017974f, 0.023905f, 0.030553f, 0.037879f,
- 0.045847f, 0.054429f, 0.063595f, 0.073323f, 0.083592f, 0.094384f, 0.105682f, 0.117474f,
- 0.129747f, 0.142491f, 0.155697f, 0.169358f, 0.183469f, 0.198024f, 0.213020f, 0.228455f,
- 0.244329f, 0.260639f, 0.277389f, 0.294580f, 0.312216f, 0.330300f, 0.348840f, 0.367842f,
- 0.387315f, 0.407270f, 0.427717f, 0.448671f, 0.470149f, 0.492167f, 0.514746f, 0.537911f,
- 0.561688f, 0.586108f, 0.611206f, 0.637022f, 0.663599f, 0.690989f, 0.719242f, 0.748411f,
- 0.778531f, 0.809583f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000187f, 0.001196f,
- 0.003184f, 0.006136f, 0.010000f, 0.014716f, 0.020230f, 0.026488f, 0.033445f, 0.041062f,
- 0.049303f, 0.058138f, 0.067540f, 0.077485f, 0.087953f, 0.098926f, 0.110388f, 0.122327f,
- 0.134729f, 0.147587f, 0.160889f, 0.174631f, 0.188806f, 0.203409f, 0.218437f, 0.233888f,
- 0.249761f, 0.266056f, 0.282774f, 0.299917f, 0.317488f, 0.335493f, 0.353936f, 0.372825f,
- 0.392168f, 0.411976f, 0.432259f, 0.453032f, 0.474310f, 0.496111f, 0.518456f, 0.541367f,
- 0.564872f, 0.589001f, 0.613789f, 0.639277f, 0.665510f, 0.692539f, 0.720422f, 0.749216f,
- 0.778974f, 0.809711f, 0.841270f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000409f, 0.001767f,
- 0.004137f, 0.007474f, 0.011716f, 0.016797f, 0.022657f, 0.029244f, 0.036512f, 0.044420f,
- 0.052933f, 0.062021f, 0.071657f, 0.081819f, 0.092485f, 0.103638f, 0.115263f, 0.127348f,
- 0.139880f, 0.152849f, 0.166248f, 0.180070f, 0.194308f, 0.208958f, 0.224018f, 0.239485f,
- 0.255359f, 0.271638f, 0.288324f, 0.305419f, 0.322927f, 0.340851f, 0.359199f, 0.377975f,
- 0.397189f, 0.416851f, 0.436971f, 0.457564f, 0.478644f, 0.500229f, 0.522339f, 0.544997f,
- 0.568230f, 0.592068f, 0.616546f, 0.641705f, 0.667590f, 0.694255f, 0.721760f, 0.750168f,
- 0.779545f, 0.809933f, 0.841272f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000041f, 0.000744f, 0.002481f,
- 0.005248f, 0.008982f, 0.013608f, 0.019058f, 0.025269f, 0.032188f, 0.039767f, 0.047967f,
- 0.056752f, 0.066093f, 0.075963f, 0.086340f, 0.097203f, 0.108537f, 0.120325f, 0.132554f,
- 0.145215f, 0.158296f, 0.171790f, 0.185691f, 0.199993f, 0.214691f, 0.229782f, 0.245265f,
- 0.261138f, 0.277401f, 0.294056f, 0.311104f, 0.328548f, 0.346394f, 0.364645f, 0.383310f,
- 0.402396f, 0.421912f, 0.441870f, 0.462283f, 0.483165f, 0.504535f, 0.526410f, 0.548816f,
- 0.571776f, 0.595323f, 0.619489f, 0.644317f, 0.669852f, 0.696148f, 0.723267f, 0.751280f,
- 0.780258f, 0.810268f, 0.841311f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000156f, 0.001209f, 0.003349f,
- 0.006531f, 0.010672f, 0.015691f, 0.021515f, 0.028080f, 0.035332f, 0.043225f, 0.051717f,
- 0.060775f, 0.070370f, 0.080474f, 0.091067f, 0.102128f, 0.113641f, 0.125591f, 0.137965f,
- 0.150754f, 0.163947f, 0.177537f, 0.191516f, 0.205881f, 0.220626f, 0.235749f, 0.251248f,
- 0.267121f, 0.283368f, 0.299992f, 0.316992f, 0.334374f, 0.352140f, 0.370296f, 0.388849f,
- 0.407807f, 0.427178f, 0.446974f, 0.467207f, 0.487892f, 0.509046f, 0.530687f, 0.552839f,
- 0.575527f, 0.598780f, 0.622634f, 0.647128f, 0.672308f, 0.698231f, 0.724958f, 0.752563f,
- 0.781127f, 0.810733f, 0.841426f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000374f, 0.001821f, 0.004389f,
- 0.008001f, 0.012559f, 0.017979f, 0.024182f, 0.031106f, 0.038695f, 0.046903f, 0.055690f,
- 0.065023f, 0.074872f, 0.085211f, 0.096020f, 0.107279f, 0.118971f, 0.131084f, 0.143604f,
- 0.156521f, 0.169825f, 0.183510f, 0.197569f, 0.211997f, 0.226789f, 0.241944f, 0.257458f,
- 0.273331f, 0.289563f, 0.306154f, 0.323108f, 0.340426f, 0.358113f, 0.376175f, 0.394616f,
- 0.413445f, 0.432671f, 0.452305f, 0.472358f, 0.492845f, 0.513783f, 0.535189f, 0.557087f,
- 0.579500f, 0.602459f, 0.625997f, 0.650154f, 0.674976f, 0.700518f, 0.726845f, 0.754032f,
- 0.782167f, 0.811344f, 0.841644f, 0.873016f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000719f, 0.002598f, 0.005618f,
- 0.009675f, 0.014663f, 0.020490f, 0.027080f, 0.034367f, 0.042297f, 0.050824f, 0.059909f,
- 0.069517f, 0.079622f, 0.090198f, 0.101224f, 0.112682f, 0.124555f, 0.136831f, 0.149496f,
- 0.162542f, 0.175958f, 0.189739f, 0.203877f, 0.218368f, 0.233208f, 0.248393f, 0.263923f,
- 0.279796f, 0.296012f, 0.312573f, 0.329479f, 0.346734f, 0.364342f, 0.382307f, 0.400637f,
- 0.419337f, 0.438418f, 0.457889f, 0.477761f, 0.498050f, 0.518770f, 0.539940f, 0.561581f,
- 0.583718f, 0.606380f, 0.629599f, 0.653415f, 0.677874f, 0.703030f, 0.728948f, 0.755706f,
- 0.783396f, 0.812121f, 0.841989f, 0.873035f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.001215f, 0.003561f, 0.007056f,
- 0.011574f, 0.017003f, 0.023248f, 0.030232f, 0.037888f, 0.046164f, 0.055014f, 0.064399f,
- 0.074287f, 0.084650f, 0.095464f, 0.106709f, 0.118367f, 0.130423f, 0.142862f, 0.155674f,
- 0.168849f, 0.182378f, 0.196255f, 0.210473f, 0.225027f, 0.239915f, 0.255132f, 0.270678f,
- 0.286551f, 0.302751f, 0.319280f, 0.336138f, 0.353330f, 0.370858f, 0.388728f, 0.406944f,
- 0.425515f, 0.444449f, 0.463756f, 0.483447f, 0.503535f, 0.524036f, 0.544968f, 0.566350f,
- 0.588208f, 0.610569f, 0.633466f, 0.656936f, 0.681025f, 0.705788f, 0.731289f, 0.757606f,
- 0.784834f, 0.813085f, 0.842485f, 0.873130f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000324f, 0.001887f, 0.004735f, 0.008727f,
- 0.013724f, 0.019607f, 0.026280f, 0.033666f, 0.041699f, 0.050326f, 0.059504f, 0.069194f,
- 0.079365f, 0.089989f, 0.101045f, 0.112512f, 0.124372f, 0.136611f, 0.149216f, 0.162176f,
- 0.175482f, 0.189125f, 0.203098f, 0.217396f, 0.232015f, 0.246950f, 0.262200f, 0.277761f,
- 0.293634f, 0.309819f, 0.326315f, 0.343126f, 0.360254f, 0.377701f, 0.395474f, 0.413577f,
- 0.432018f, 0.450804f, 0.469944f, 0.489451f, 0.509337f, 0.529617f, 0.550307f, 0.571428f,
- 0.593003f, 0.615059f, 0.637628f, 0.660746f, 0.684460f, 0.708820f, 0.733893f, 0.759756f,
- 0.786505f, 0.814259f, 0.843157f, 0.873340f, 0.904762f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000683f, 0.002764f, 0.006148f, 0.010661f,
- 0.016155f, 0.022506f, 0.029620f, 0.037417f, 0.045835f, 0.054821f, 0.064333f, 0.074333f,
- 0.084792f, 0.095683f, 0.106984f, 0.118675f, 0.130741f, 0.143166f, 0.155939f, 0.169049f,
- 0.182487f, 0.196245f, 0.210317f, 0.224697f, 0.239380f, 0.254364f, 0.269646f, 0.285223f,
- 0.301096f, 0.317265f, 0.333729f, 0.350491f, 0.367554f, 0.384920f, 0.402594f, 0.420582f,
- 0.438891f, 0.457527f, 0.476499f, 0.495820f, 0.515500f, 0.535555f, 0.556000f, 0.576855f,
- 0.598143f, 0.619888f, 0.642123f, 0.664883f, 0.688211f, 0.712160f, 0.736792f, 0.762186f,
- 0.788439f, 0.815672f, 0.844034f, 0.873699f, 0.904765f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.001228f, 0.003880f, 0.007835f, 0.012895f,
- 0.018905f, 0.025742f, 0.033309f, 0.041530f, 0.050342f, 0.059696f, 0.069550f, 0.079868f,
- 0.090620f, 0.101783f, 0.113333f, 0.125254f, 0.137529f, 0.150144f, 0.163088f, 0.176351f,
- 0.189924f, 0.203799f, 0.217970f, 0.232433f, 0.247182f, 0.262216f, 0.277530f, 0.293124f,
- 0.308997f, 0.325149f, 0.341581f, 0.358294f, 0.375290f, 0.392573f, 0.410148f, 0.428019f,
- 0.446192f, 0.464676f, 0.483478f, 0.502608f, 0.522079f, 0.541905f, 0.562100f, 0.582684f,
- 0.603677f, 0.625106f, 0.646998f, 0.669390f, 0.692324f, 0.715849f, 0.740028f, 0.764937f,
- 0.790673f, 0.817358f, 0.845150f, 0.874244f, 0.904828f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000260f, 0.002001f, 0.005278f, 0.009840f, 0.015475f,
- 0.022025f, 0.029365f, 0.037402f, 0.046060f, 0.055280f, 0.065013f, 0.075218f, 0.085861f,
- 0.096916f, 0.108356f, 0.120163f, 0.132319f, 0.144808f, 0.157618f, 0.170737f, 0.184155f,
- 0.197866f, 0.211861f, 0.226134f, 0.240682f, 0.255499f, 0.270583f, 0.285931f, 0.301542f,
- 0.317415f, 0.333550f, 0.349948f, 0.366610f, 0.383539f, 0.400738f, 0.418210f, 0.435961f,
- 0.453997f, 0.472324f, 0.490951f, 0.509887f, 0.529144f, 0.548735f, 0.568674f, 0.588979f,
- 0.609671f, 0.630773f, 0.652314f, 0.674328f, 0.696854f, 0.719942f, 0.743651f, 0.768057f,
- 0.793253f, 0.819363f, 0.846547f, 0.875017f, 0.905021f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000642f, 0.003053f, 0.007010f, 0.012219f, 0.018462f,
- 0.025577f, 0.033444f, 0.041970f, 0.051082f, 0.060724f, 0.070849f, 0.081417f, 0.092397f,
- 0.103763f, 0.115491f, 0.127562f, 0.139960f, 0.152670f, 0.165679f, 0.178979f, 0.192558f,
- 0.206410f, 0.220529f, 0.234907f, 0.249542f, 0.264428f, 0.279564f, 0.294947f, 0.310575f,
- 0.326448f, 0.342566f, 0.358929f, 0.375540f, 0.392399f, 0.409511f, 0.426878f, 0.444506f,
- 0.462400f, 0.480566f, 0.499013f, 0.517749f, 0.536785f, 0.556134f, 0.575809f, 0.595827f,
- 0.616207f, 0.636973f, 0.658150f, 0.679772f, 0.701876f, 0.724509f, 0.747730f, 0.771609f,
- 0.796240f, 0.821743f, 0.848280f, 0.876069f, 0.905404f, 0.936508f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000020f, 0.001278f, 0.004450f, 0.009147f, 0.015050f, 0.021937f,
- 0.029649f, 0.038068f, 0.047106f, 0.056694f, 0.066777f, 0.077310f, 0.088257f, 0.099588f,
- 0.111277f, 0.123304f, 0.135650f, 0.148299f, 0.161237f, 0.174455f, 0.187941f, 0.201687f,
- 0.215687f, 0.229933f, 0.244420f, 0.259145f, 0.274103f, 0.289293f, 0.304711f, 0.320357f,
- 0.336230f, 0.352330f, 0.368658f, 0.385214f, 0.402002f, 0.419023f, 0.436282f, 0.453782f,
- 0.471529f, 0.489528f, 0.507788f, 0.526317f, 0.545124f, 0.564221f, 0.583621f, 0.603341f,
- 0.623397f, 0.643812f, 0.664611f, 0.685824f, 0.707488f, 0.729646f, 0.752354f, 0.775680f,
- 0.799715f, 0.824574f, 0.850417f, 0.877466f, 0.906040f, 0.936528f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000183f, 0.002253f, 0.006282f, 0.011786f, 0.018436f, 0.026011f,
- 0.034358f, 0.043364f, 0.052944f, 0.063033f, 0.073580f, 0.084544f, 0.095889f, 0.107588f,
- 0.119617f, 0.131957f, 0.144591f, 0.157503f, 0.170682f, 0.184117f, 0.197799f, 0.211720f,
- 0.225873f, 0.240253f, 0.254854f, 0.269673f, 0.284707f, 0.299953f, 0.315408f, 0.331073f,
- 0.346946f, 0.363028f, 0.379318f, 0.395818f, 0.412530f, 0.429457f, 0.446602f, 0.463968f,
- 0.481561f, 0.499386f, 0.517450f, 0.535761f, 0.554328f, 0.573162f, 0.592275f, 0.611681f,
- 0.631398f, 0.651445f, 0.671845f, 0.692628f, 0.713827f, 0.735484f, 0.757650f, 0.780390f,
- 0.803789f, 0.827960f, 0.853056f, 0.879298f, 0.907014f, 0.936691f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.000617f, 0.003679f, 0.008674f, 0.015068f, 0.022531f, 0.030851f,
- 0.039880f, 0.049515f, 0.059675f, 0.070300f, 0.081343f, 0.092764f, 0.104533f, 0.116624f,
- 0.129015f, 0.141687f, 0.154626f, 0.167818f, 0.181252f, 0.194918f, 0.208807f, 0.222913f,
- 0.237229f, 0.251750f, 0.266473f, 0.281392f, 0.296505f, 0.311811f, 0.327306f, 0.342991f,
- 0.358864f, 0.374925f, 0.391176f, 0.407616f, 0.424249f, 0.441076f, 0.458100f, 0.475324f,
- 0.492754f, 0.510394f, 0.528251f, 0.546331f, 0.564644f, 0.583198f, 0.602005f, 0.621078f,
- 0.640434f, 0.660089f, 0.680066f, 0.700390f, 0.721094f, 0.742215f, 0.763800f, 0.785912f,
- 0.808628f, 0.832055f, 0.856338f, 0.881690f, 0.908441f, 0.937125f, 0.968254f, 1.000000f,
- 0.000000f, 0.000000f, 0.001477f, 0.005732f, 0.011826f, 0.019212f, 0.027573f, 0.036710f,
- 0.046487f, 0.056807f, 0.067598f, 0.078806f, 0.090386f, 0.102304f, 0.114532f, 0.127047f,
- 0.139828f, 0.152861f, 0.166130f, 0.179624f, 0.193332f, 0.207247f, 0.221360f, 0.235666f,
- 0.250158f, 0.264832f, 0.279684f, 0.294711f, 0.309911f, 0.325280f, 0.340819f, 0.356524f,
- 0.372397f, 0.388438f, 0.404645f, 0.421022f, 0.437569f, 0.454287f, 0.471181f, 0.488253f,
- 0.505507f, 0.522947f, 0.540580f, 0.558412f, 0.576449f, 0.594701f, 0.613178f, 0.631892f,
- 0.650856f, 0.670088f, 0.689606f, 0.709434f, 0.729600f, 0.750138f, 0.771093f, 0.792519f,
- 0.814488f, 0.837097f, 0.860481f, 0.884842f, 0.910494f, 0.937985f, 0.968254f, 1.000000f,
- 0.000000f, 0.000096f, 0.003012f, 0.008704f, 0.016071f, 0.024590f, 0.033968f, 0.044025f,
- 0.054641f, 0.065728f, 0.077225f, 0.089081f, 0.101260f, 0.113731f, 0.126469f, 0.139454f,
- 0.152670f, 0.166101f, 0.179736f, 0.193565f, 0.207578f, 0.221769f, 0.236130f, 0.250656f,
- 0.265343f, 0.280187f, 0.295183f, 0.310330f, 0.325624f, 0.341065f, 0.356650f, 0.372380f,
- 0.388253f, 0.404269f, 0.420430f, 0.436735f, 0.453187f, 0.469786f, 0.486536f, 0.503439f,
- 0.520498f, 0.537717f, 0.555102f, 0.572657f, 0.590390f, 0.608307f, 0.626419f, 0.644733f,
- 0.663264f, 0.682025f, 0.701032f, 0.720308f, 0.739875f, 0.759764f, 0.780014f, 0.800673f,
- 0.821803f, 0.843492f, 0.865860f, 0.889087f, 0.913466f, 0.939520f, 0.968350f, 1.000000f,
- 0.000000f, 0.000727f, 0.005696f, 0.013170f, 0.022074f, 0.031940f, 0.042520f, 0.053660f,
- 0.065258f, 0.077243f, 0.089562f, 0.102175f, 0.115050f, 0.128164f, 0.141495f, 0.155026f,
- 0.168745f, 0.182639f, 0.196699f, 0.210915f, 0.225282f, 0.239792f, 0.254440f, 0.269223f,
- 0.284135f, 0.299174f, 0.314337f, 0.329622f, 0.345026f, 0.360549f, 0.376189f, 0.391946f,
- 0.407819f, 0.423808f, 0.439914f, 0.456137f, 0.472479f, 0.488940f, 0.505523f, 0.522230f,
- 0.539064f, 0.556028f, 0.573125f, 0.590361f, 0.607741f, 0.625270f, 0.642957f, 0.660809f,
- 0.678836f, 0.697050f, 0.715465f, 0.734098f, 0.752968f, 0.772101f, 0.791529f, 0.811290f,
- 0.831438f, 0.852044f, 0.873210f, 0.895090f, 0.917932f, 0.942204f, 0.968981f, 1.000000f,
- 0.000000f, 0.002796f, 0.010764f, 0.020645f, 0.031576f, 0.043202f, 0.055340f, 0.067877f,
- 0.080740f, 0.093877f, 0.107250f, 0.120832f, 0.134598f, 0.148533f, 0.162620f, 0.176849f,
- 0.191210f, 0.205694f, 0.220294f, 0.235005f, 0.249820f, 0.264737f, 0.279751f, 0.294859f,
- 0.310058f, 0.325346f, 0.340721f, 0.356181f, 0.371725f, 0.387353f, 0.403063f, 0.418854f,
- 0.434727f, 0.450682f, 0.466718f, 0.482837f, 0.499038f, 0.515324f, 0.531695f, 0.548153f,
- 0.564700f, 0.581338f, 0.598070f, 0.614900f, 0.631830f, 0.648865f, 0.666011f, 0.683273f,
- 0.700659f, 0.718176f, 0.735834f, 0.753646f, 0.771625f, 0.789790f, 0.808162f, 0.826771f,
- 0.845654f, 0.864863f, 0.884472f, 0.904592f, 0.925407f, 0.947271f, 0.971050f, 1.000000f,
- 0.000000f, 0.015873f, 0.031746f, 0.047619f, 0.063492f, 0.079365f, 0.095238f, 0.111111f,
- 0.126984f, 0.142857f, 0.158730f, 0.174603f, 0.190476f, 0.206349f, 0.222222f, 0.238095f,
- 0.253968f, 0.269841f, 0.285714f, 0.301587f, 0.317460f, 0.333333f, 0.349206f, 0.365079f,
- 0.380952f, 0.396825f, 0.412698f, 0.428571f, 0.444444f, 0.460317f, 0.476190f, 0.492063f,
- 0.507937f, 0.523810f, 0.539683f, 0.555556f, 0.571429f, 0.587302f, 0.603175f, 0.619048f,
- 0.634921f, 0.650794f, 0.666667f, 0.682540f, 0.698413f, 0.714286f, 0.730159f, 0.746032f,
- 0.761905f, 0.777778f, 0.793651f, 0.809524f, 0.825397f, 0.841270f, 0.857143f, 0.873016f,
- 0.888889f, 0.904762f, 0.920635f, 0.936508f, 0.952381f, 0.968254f, 0.984127f, 1.000000f,
-};
-
-static float btdf_split_sum_ggx[32][64 * 64] = {
- {
- 0.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.039917f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 0.999512f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- },
- {
- 0.000122f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.004147f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.897949f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000732f, 0.996094f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002439f,
- 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000366f, 0.078308f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 1.000000f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000122f, 0.000122f, 0.001098f, 0.992188f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.005001f, 0.998535f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.902344f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.002928f,
- 0.997070f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 1.000000f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000732f, 0.301758f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.002562f, 0.996094f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.433594f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.004021f, 0.996582f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001098f, 0.949219f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000610f,
- 0.012039f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.002073f, 0.993652f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000854f, 0.725586f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000610f, 0.011856f, 0.998047f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.002905f, 0.995117f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001098f, 0.978027f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000732f,
- 0.314941f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000731f, 0.017670f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000366f, 0.005852f, 0.997559f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.003050f, 0.996094f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001957f, 0.993652f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001586f, 0.990234f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001220f, 0.986816f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.001220f,
- 0.984375f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
- 0.001098f, 0.985352f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.001220f, 0.989258f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000122f, 0.000122f, 0.001341f, 0.993652f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.001586f, 0.996094f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.002802f, 0.997559f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000117f, 0.000122f, 0.000122f, 0.000243f, 0.006088f, 0.998535f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.026321f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000732f, 0.892578f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000975f,
- 0.993652f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.002317f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.017944f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000122f, 0.000731f, 0.983887f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
- 0.000122f, 0.000122f, 0.001653f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.026108f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000732f, 0.995605f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.003777f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000365f, 0.991211f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002195f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000364f, 0.993164f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.002672f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000360f, 0.998047f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.017075f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000731f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.997070f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.006874f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000480f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.996582f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000067f, 0.005440f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000365f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000121f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.995605f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995117f,
- },
- {
- 0.003168f, 0.995605f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000976f, 0.053314f, 0.994629f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000122f, 0.000122f, 0.000732f, 0.003660f, 0.653809f, 0.995117f, 0.998047f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.001463f, 0.010452f, 0.947266f, 0.995605f,
- 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000853f, 0.002928f, 0.037750f,
- 0.980957f, 0.996582f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000610f, 0.001342f,
- 0.006100f, 0.314453f, 0.989746f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
- 0.001091f, 0.002317f, 0.015839f, 0.910645f, 0.993652f, 0.997559f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000366f, 0.000732f, 0.001463f, 0.005302f, 0.068909f, 0.977539f, 0.995605f, 0.998047f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000244f, 0.000732f, 0.001098f, 0.002560f, 0.011551f, 0.658691f, 0.989746f,
- 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000732f, 0.001585f, 0.004868f, 0.041077f,
- 0.958984f, 0.994141f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000732f, 0.001215f, 0.002802f,
- 0.010834f, 0.441895f, 0.987305f, 0.996094f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000488f, 0.000850f,
- 0.001586f, 0.004753f, 0.039154f, 0.948242f, 0.993652f, 0.997559f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f,
- 0.000732f, 0.001220f, 0.003159f, 0.012032f, 0.480713f, 0.985840f, 0.996094f, 0.998047f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000240f, 0.000731f, 0.001097f, 0.001950f, 0.005966f, 0.054413f, 0.957520f, 0.994141f,
- 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000486f, 0.000732f, 0.001534f, 0.003536f, 0.016937f, 0.726562f,
- 0.988281f, 0.996582f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000732f, 0.001098f, 0.002192f, 0.008278f,
- 0.125244f, 0.974121f, 0.994629f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000731f, 0.000947f, 0.001828f,
- 0.005314f, 0.031677f, 0.916016f, 0.991699f, 0.997070f, 0.998535f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f,
- 0.001339f, 0.003294f, 0.014389f, 0.562012f, 0.985840f, 0.996094f, 0.998047f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
- 0.000732f, 0.001098f, 0.002310f, 0.008163f, 0.123779f, 0.973633f, 0.994629f, 0.997559f,
- 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000365f, 0.000732f, 0.001097f, 0.002071f, 0.005669f, 0.041199f, 0.937988f, 0.992676f,
- 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000366f, 0.000728f, 0.000732f, 0.001585f, 0.004143f, 0.020813f, 0.813965f,
- 0.989746f, 0.996582f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.001220f, 0.003292f, 0.012581f,
- 0.446533f, 0.984863f, 0.996094f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000471f, 0.000732f, 0.001220f, 0.002796f,
- 0.009338f, 0.161865f, 0.977051f, 0.995117f, 0.997559f, 0.998535f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000732f, 0.001098f,
- 0.002285f, 0.006870f, 0.074097f, 0.965820f, 0.994141f, 0.997559f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000731f,
- 0.001086f, 0.001945f, 0.005238f, 0.043732f, 0.947754f, 0.993652f, 0.997559f, 0.998535f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f,
- 0.000730f, 0.000893f, 0.001826f, 0.004871f, 0.030411f, 0.922852f, 0.992188f, 0.997559f,
- 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000243f, 0.000609f, 0.000732f, 0.001407f, 0.004375f, 0.023758f, 0.892090f, 0.992188f,
- 0.997070f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000605f, 0.000732f, 0.001579f, 0.003941f, 0.020767f, 0.862793f,
- 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000238f, 0.000483f, 0.000732f, 0.001449f, 0.003654f, 0.018951f,
- 0.847656f, 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000233f, 0.000485f, 0.000732f, 0.001308f, 0.003353f,
- 0.018997f, 0.855469f, 0.991699f, 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000118f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f, 0.000732f, 0.001292f,
- 0.003649f, 0.019791f, 0.881836f, 0.992188f, 0.997559f, 0.998535f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000432f, 0.000732f,
- 0.001220f, 0.003635f, 0.021912f, 0.916992f, 0.993652f, 0.997559f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
- 0.000732f, 0.001245f, 0.004002f, 0.028107f, 0.946289f, 0.994141f, 0.998047f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000085f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000475f, 0.000732f, 0.001611f, 0.004581f, 0.040466f, 0.966309f, 0.995605f, 0.998535f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000487f, 0.000732f, 0.001703f, 0.005589f, 0.073486f, 0.979980f, 0.996094f,
- 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000475f, 0.000732f, 0.001706f, 0.006809f, 0.198730f, 0.987305f,
- 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000488f, 0.000732f, 0.002071f, 0.009590f, 0.647949f,
- 0.992188f, 0.997559f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000710f, 0.001093f, 0.002541f, 0.015533f,
- 0.922852f, 0.995117f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000728f, 0.001218f, 0.003387f,
- 0.034454f, 0.975586f, 0.996582f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000365f, 0.000731f, 0.001219f,
- 0.004959f, 0.161865f, 0.989746f, 0.998047f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000366f, 0.000731f,
- 0.001767f, 0.009331f, 0.849121f, 0.994629f, 0.998535f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000487f,
- 0.000732f, 0.002644f, 0.024231f, 0.977051f, 0.997559f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000685f, 0.001217f, 0.004139f, 0.195435f, 0.992676f, 0.998535f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000362f, 0.000731f, 0.001570f, 0.010086f, 0.944824f, 0.997070f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000365f, 0.000745f, 0.002781f, 0.051758f, 0.990723f, 0.998535f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000599f, 0.001176f, 0.006641f, 0.899414f, 0.997070f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000731f, 0.002066f, 0.032654f, 0.991211f, 0.998535f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000448f, 0.001088f, 0.005440f, 0.918457f, 0.997070f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000725f, 0.001822f, 0.038452f, 0.994141f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000329f, 0.000848f, 0.005672f, 0.972168f,
- 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000581f, 0.001982f, 0.155273f,
- 0.997070f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000330f, 0.000848f, 0.009247f,
- 0.992676f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000589f, 0.002625f,
- 0.958496f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.001199f,
- 0.083374f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000716f,
- 0.007244f, 0.996582f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.002277f, 0.991211f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000070f, 0.000121f, 0.000122f, 0.000122f,
- 0.000854f, 0.950684f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000121f, 0.000122f,
- 0.000475f, 0.067139f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000122f,
- 0.000002f, 0.005859f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f,
- 0.000014f, 0.001376f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000121f, 0.000572f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000077f, 0.000002f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000103f, 0.992188f, 0.991699f, 0.991699f, 0.992188f, 0.992188f, 0.991699f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.940430f, 0.940430f, 0.940918f, 0.940918f, 0.940430f, 0.940430f,
- },
- {
- 0.014023f, 0.979492f, 0.994629f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000488f, 0.004757f, 0.163330f, 0.975098f, 0.993164f, 0.996582f, 0.997559f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000610f, 0.002928f, 0.017166f, 0.563965f, 0.978027f, 0.992676f, 0.996094f,
- 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000364f, 0.000732f, 0.002192f, 0.006573f, 0.044952f, 0.830566f, 0.980957f,
- 0.992676f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000366f, 0.000854f, 0.001586f, 0.004253f, 0.014313f, 0.130371f,
- 0.919922f, 0.984375f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000488f, 0.000854f, 0.001342f, 0.003025f, 0.007305f,
- 0.028870f, 0.407715f, 0.954590f, 0.987305f, 0.993652f, 0.996094f, 0.997070f, 0.998047f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000609f, 0.000842f, 0.000976f, 0.002193f,
- 0.005112f, 0.012505f, 0.066589f, 0.768066f, 0.970703f, 0.989746f, 0.994629f, 0.996582f,
- 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000244f, 0.000599f, 0.000609f, 0.000976f,
- 0.001829f, 0.003046f, 0.007256f, 0.023499f, 0.194946f, 0.908691f, 0.979980f, 0.991699f,
- 0.995117f, 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000488f, 0.000609f,
- 0.000976f, 0.001583f, 0.002647f, 0.004726f, 0.012169f, 0.050537f, 0.568359f, 0.954102f,
- 0.985840f, 0.993164f, 0.995605f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000488f,
- 0.000610f, 0.000975f, 0.001211f, 0.001946f, 0.003532f, 0.007793f, 0.022446f, 0.139648f,
- 0.856445f, 0.974121f, 0.989746f, 0.994141f, 0.996094f, 0.997559f, 0.998047f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f,
- 0.000310f, 0.000609f, 0.000807f, 0.001098f, 0.001822f, 0.002794f, 0.005699f, 0.012878f,
- 0.047821f, 0.469238f, 0.941406f, 0.982910f, 0.991699f, 0.995117f, 0.996582f, 0.997559f,
- 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000244f, 0.000244f, 0.000609f, 0.000732f, 0.001098f, 0.001461f, 0.002274f, 0.004025f,
- 0.008247f, 0.023254f, 0.135254f, 0.833984f, 0.969727f, 0.987793f, 0.993652f, 0.995605f,
- 0.997070f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000207f, 0.000244f, 0.000609f, 0.000610f, 0.001096f, 0.001098f, 0.002071f,
- 0.003370f, 0.006172f, 0.014442f, 0.052795f, 0.486572f, 0.940430f, 0.981934f, 0.991699f,
- 0.994629f, 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000485f, 0.000610f, 0.001080f, 0.001098f,
- 0.001742f, 0.002668f, 0.004692f, 0.010147f, 0.028076f, 0.168701f, 0.854004f, 0.970703f,
- 0.988770f, 0.993652f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000487f, 0.000610f, 0.000731f,
- 0.001098f, 0.001413f, 0.002411f, 0.003895f, 0.007072f, 0.017242f, 0.069580f, 0.605957f,
- 0.948730f, 0.983398f, 0.992188f, 0.995117f, 0.996582f, 0.997559f, 0.998047f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000244f, 0.000609f,
- 0.000610f, 0.001094f, 0.001337f, 0.001828f, 0.003275f, 0.005814f, 0.012054f, 0.036987f,
- 0.270752f, 0.899414f, 0.975586f, 0.989746f, 0.993652f, 0.996094f, 0.997070f, 0.998047f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000365f,
- 0.000597f, 0.000610f, 0.000970f, 0.001098f, 0.001815f, 0.002771f, 0.005009f, 0.008888f,
- 0.023804f, 0.115845f, 0.775879f, 0.962891f, 0.986328f, 0.993164f, 0.995605f, 0.997070f,
- 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000244f, 0.000536f, 0.000731f, 0.000937f, 0.001203f, 0.001581f, 0.002186f, 0.004005f,
- 0.007061f, 0.016830f, 0.061218f, 0.522949f, 0.940430f, 0.981934f, 0.991211f, 0.994629f,
- 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000363f, 0.000487f, 0.000731f, 0.000732f, 0.001097f, 0.001339f, 0.002071f,
- 0.003498f, 0.005947f, 0.012390f, 0.037964f, 0.268799f, 0.896973f, 0.975586f, 0.989258f,
- 0.994141f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000244f, 0.000366f, 0.000609f, 0.000610f, 0.001094f, 0.001215f,
- 0.002056f, 0.003183f, 0.004742f, 0.009880f, 0.026337f, 0.139526f, 0.813477f, 0.966309f,
- 0.986816f, 0.993164f, 0.996094f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000163f, 0.000363f, 0.000600f, 0.000731f, 0.001088f,
- 0.001216f, 0.001616f, 0.002640f, 0.004402f, 0.008156f, 0.019669f, 0.083191f, 0.664062f,
- 0.953125f, 0.984375f, 0.992188f, 0.995117f, 0.997070f, 0.998047f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000244f, 0.000523f, 0.000731f,
- 0.000732f, 0.001097f, 0.001690f, 0.002169f, 0.003998f, 0.006939f, 0.015808f, 0.055634f,
- 0.471191f, 0.935059f, 0.980957f, 0.991211f, 0.995117f, 0.996582f, 0.997559f, 0.998047f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000336f, 0.000486f,
- 0.000731f, 0.000732f, 0.001097f, 0.001558f, 0.002069f, 0.003525f, 0.006058f, 0.013062f,
- 0.040894f, 0.306396f, 0.910156f, 0.978027f, 0.990234f, 0.994141f, 0.996582f, 0.997559f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000113f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000360f,
- 0.000515f, 0.000731f, 0.000731f, 0.001094f, 0.001219f, 0.002148f, 0.003159f, 0.005577f,
- 0.011360f, 0.031952f, 0.203979f, 0.874512f, 0.973633f, 0.989258f, 0.994141f, 0.996582f,
- 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000325f, 0.000366f, 0.000731f, 0.000731f, 0.001093f, 0.001219f, 0.001820f, 0.002916f,
- 0.005291f, 0.009758f, 0.026352f, 0.145020f, 0.832520f, 0.969238f, 0.988281f, 0.993652f,
- 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000244f, 0.000440f, 0.000605f, 0.000731f, 0.001086f, 0.001097f, 0.001646f,
- 0.002670f, 0.004230f, 0.008835f, 0.022415f, 0.112183f, 0.786133f, 0.966309f, 0.987793f,
- 0.993652f, 0.996094f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000272f, 0.000358f, 0.000565f, 0.000731f, 0.000790f, 0.001210f,
- 0.001573f, 0.002434f, 0.004360f, 0.008102f, 0.020660f, 0.092896f, 0.741699f, 0.962891f,
- 0.987305f, 0.993164f, 0.996094f, 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000364f, 0.000723f, 0.000731f, 0.000731f,
- 0.001216f, 0.001698f, 0.002510f, 0.003998f, 0.007484f, 0.018463f, 0.082336f, 0.709961f,
- 0.961426f, 0.986816f, 0.993652f, 0.996094f, 0.997559f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000362f, 0.000704f, 0.000730f,
- 0.000845f, 0.001096f, 0.001513f, 0.002302f, 0.003941f, 0.007168f, 0.017746f, 0.076782f,
- 0.693848f, 0.961426f, 0.987305f, 0.993652f, 0.996094f, 0.997559f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000364f, 0.000579f,
- 0.000728f, 0.000731f, 0.001096f, 0.001491f, 0.002069f, 0.003899f, 0.007195f, 0.017059f,
- 0.075439f, 0.701172f, 0.962402f, 0.987793f, 0.993652f, 0.996094f, 0.997559f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000357f,
- 0.000482f, 0.000730f, 0.000731f, 0.001094f, 0.001334f, 0.002230f, 0.003708f, 0.007217f,
- 0.017410f, 0.079163f, 0.730469f, 0.965820f, 0.988281f, 0.994141f, 0.996582f, 0.998047f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f,
- 0.000243f, 0.000365f, 0.000729f, 0.000731f, 0.001095f, 0.001330f, 0.002066f, 0.003637f,
- 0.007118f, 0.018112f, 0.087708f, 0.775391f, 0.969238f, 0.989258f, 0.994629f, 0.997070f,
- 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000073f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000323f, 0.000390f, 0.000729f, 0.000731f, 0.001094f, 0.001332f, 0.002275f,
- 0.003782f, 0.007252f, 0.019379f, 0.105042f, 0.827637f, 0.973145f, 0.990723f, 0.994629f,
- 0.997070f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.000121f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000240f, 0.000369f, 0.000729f, 0.000731f, 0.001093f, 0.001330f,
- 0.002209f, 0.003937f, 0.007896f, 0.021805f, 0.137207f, 0.876953f, 0.979004f, 0.991699f,
- 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000272f, 0.000479f, 0.000727f, 0.000731f, 0.001085f,
- 0.001331f, 0.002291f, 0.004105f, 0.008446f, 0.025024f, 0.202271f, 0.916504f, 0.982910f,
- 0.993164f, 0.996094f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000360f, 0.000469f, 0.000681f, 0.000731f,
- 0.001092f, 0.001331f, 0.002184f, 0.004227f, 0.009521f, 0.030899f, 0.335205f, 0.945312f,
- 0.986816f, 0.993652f, 0.996582f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000116f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000429f, 0.000726f,
- 0.000731f, 0.001091f, 0.001649f, 0.002464f, 0.004810f, 0.010895f, 0.041931f, 0.563477f,
- 0.963867f, 0.989746f, 0.995117f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000101f, 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000288f, 0.000481f,
- 0.000720f, 0.000731f, 0.001093f, 0.001571f, 0.002735f, 0.005405f, 0.013199f, 0.064880f,
- 0.786133f, 0.976562f, 0.992188f, 0.995605f, 0.997559f, 0.998535f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000240f,
- 0.000481f, 0.000727f, 0.000731f, 0.001093f, 0.001655f, 0.003132f, 0.005909f, 0.017181f,
- 0.123169f, 0.904297f, 0.984375f, 0.993652f, 0.996582f, 0.998047f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000120f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000264f, 0.000392f, 0.000727f, 0.000835f, 0.001196f, 0.001765f, 0.003252f, 0.007343f,
- 0.024521f, 0.304199f, 0.954102f, 0.989258f, 0.995605f, 0.997559f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000034f, 0.000119f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000235f, 0.000375f, 0.000728f, 0.000822f, 0.001095f, 0.002024f, 0.003952f,
- 0.009193f, 0.040894f, 0.694824f, 0.975586f, 0.992676f, 0.996582f, 0.998047f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000112f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000307f, 0.000475f, 0.000728f, 0.000943f, 0.001216f, 0.002283f,
- 0.004829f, 0.013008f, 0.092224f, 0.908203f, 0.986328f, 0.995117f, 0.997559f, 0.998535f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000073f, 0.000118f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000576f, 0.000728f, 0.001073f, 0.001569f,
- 0.002668f, 0.005947f, 0.020889f, 0.331543f, 0.965820f, 0.992188f, 0.996582f, 0.998047f,
- 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000100f, 0.000120f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000362f, 0.000630f, 0.000729f, 0.001087f,
- 0.001567f, 0.003241f, 0.008240f, 0.043793f, 0.824219f, 0.984375f, 0.994629f, 0.997559f,
- 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000075f, 0.000119f, 0.000121f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000363f, 0.000689f, 0.000730f,
- 0.001185f, 0.002022f, 0.004108f, 0.013702f, 0.161011f, 0.957031f, 0.991699f, 0.996582f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000105f, 0.000120f,
- 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000156f, 0.000372f, 0.000689f,
- 0.000730f, 0.001198f, 0.002651f, 0.006214f, 0.028854f, 0.750000f, 0.984375f, 0.995605f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000102f,
- 0.000118f, 0.000120f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000472f,
- 0.000724f, 0.000966f, 0.001658f, 0.003397f, 0.010582f, 0.116028f, 0.959473f, 0.993164f,
- 0.997559f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000111f, 0.000119f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f,
- 0.000479f, 0.000726f, 0.001163f, 0.002157f, 0.004829f, 0.024338f, 0.776855f, 0.987793f,
- 0.996582f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000097f, 0.000117f, 0.000120f, 0.000121f, 0.000121f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000219f, 0.000580f, 0.000728f, 0.001203f, 0.002872f, 0.009109f, 0.130371f, 0.972168f,
- 0.995117f, 0.998047f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000112f, 0.000118f, 0.000121f, 0.000121f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000333f, 0.000681f, 0.000940f, 0.001629f, 0.004120f, 0.025467f, 0.890625f,
- 0.991699f, 0.997559f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000083f, 0.000116f, 0.000120f,
- 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000353f, 0.000722f, 0.000961f, 0.002403f, 0.009354f, 0.295166f,
- 0.985840f, 0.997070f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000105f,
- 0.000118f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000130f, 0.000427f, 0.000605f, 0.001345f, 0.004620f, 0.041229f,
- 0.966797f, 0.996094f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000074f, 0.000114f, 0.000119f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000089f, 0.000562f, 0.000942f, 0.002352f, 0.012459f,
- 0.854004f, 0.994141f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000103f, 0.000117f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
- 0.000122f, 0.000122f, 0.000007f, 0.000002f, 0.000231f, 0.000596f, 0.001180f, 0.005474f,
- 0.211426f, 0.991211f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000118f, 0.000120f, 0.000121f,
- 0.000121f, 0.000122f, 0.000029f, 0.000004f, 0.000001f, 0.000348f, 0.000896f, 0.002764f,
- 0.032562f, 0.984375f, 0.998535f, 0.998535f, 0.999023f, 0.998535f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000089f, 0.000116f, 0.000119f,
- 0.000121f, 0.000121f, 0.000121f, 0.000013f, 0.000003f, 0.000075f, 0.000586f, 0.001508f,
- 0.010292f, 0.963379f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000107f,
- 0.000118f, 0.000120f, 0.000121f, 0.000116f, 0.000008f, 0.000002f, 0.000233f, 0.000857f,
- 0.004566f, 0.834961f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000083f, 0.000114f, 0.000119f, 0.000120f, 0.000060f, 0.000005f, 0.000001f, 0.000557f,
- 0.002064f, 0.182373f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000103f, 0.000117f, 0.000120f, 0.000024f, 0.000003f, 0.000168f,
- 0.000968f, 0.026428f, 0.996582f, 0.997070f, 0.996582f, 0.996582f, 0.996582f, 0.997070f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000047f, 0.000110f, 0.000118f, 0.000017f, 0.000002f,
- 0.000513f, 0.006870f, 0.995605f, 0.995605f, 0.995117f, 0.995117f, 0.995117f, 0.995117f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000096f, 0.000115f, 0.000011f,
- 0.000042f, 0.001919f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992676f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000044f, 0.000109f,
- 0.000008f, 0.000314f, 0.985840f, 0.985840f, 0.985840f, 0.985840f, 0.986328f, 0.985840f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000089f, 0.000060f, 0.964355f, 0.964355f, 0.963867f, 0.963867f, 0.963379f, 0.964355f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000022f, 0.818848f, 0.819824f, 0.819336f, 0.819824f, 0.819824f, 0.819824f,
- },
- {
- 0.038849f, 0.941406f, 0.984375f, 0.992188f, 0.994141f, 0.996094f, 0.996582f, 0.997070f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f, 0.999512f,
- 0.001582f, 0.014984f, 0.262451f, 0.930664f, 0.979980f, 0.989258f, 0.993164f, 0.995117f,
- 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
- 0.000244f, 0.002317f, 0.009003f, 0.047180f, 0.524902f, 0.936523f, 0.978027f, 0.988281f,
- 0.992188f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f, 1.000000f,
- 0.000122f, 0.001098f, 0.002560f, 0.006824f, 0.020493f, 0.108826f, 0.715820f, 0.946289f,
- 0.978516f, 0.988281f, 0.992188f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000607f, 0.001098f, 0.002310f, 0.005646f, 0.012825f, 0.040131f, 0.231201f,
- 0.825195f, 0.954590f, 0.979980f, 0.988281f, 0.992188f, 0.994141f, 0.995117f, 0.996582f,
- 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000244f, 0.000609f, 0.001341f, 0.002310f, 0.004208f, 0.008865f, 0.021591f,
- 0.074585f, 0.439209f, 0.885742f, 0.962402f, 0.981934f, 0.989258f, 0.992676f, 0.994141f,
- 0.995605f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 0.999512f,
- 0.000000f, 0.000122f, 0.000483f, 0.000610f, 0.001460f, 0.002192f, 0.003994f, 0.007030f,
- 0.013847f, 0.036316f, 0.146362f, 0.661621f, 0.921875f, 0.969238f, 0.983398f, 0.989746f,
- 0.993164f, 0.994141f, 0.995605f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000243f, 0.000604f, 0.000730f, 0.001307f, 0.001944f, 0.003017f,
- 0.004997f, 0.009834f, 0.021606f, 0.063416f, 0.295410f, 0.808594f, 0.944336f, 0.974609f,
- 0.985352f, 0.990234f, 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f, 1.000000f,
- 0.000000f, 0.000000f, 0.000119f, 0.000366f, 0.000495f, 0.000731f, 0.001217f, 0.001823f,
- 0.002796f, 0.004398f, 0.007656f, 0.015366f, 0.035828f, 0.119263f, 0.531738f, 0.886230f,
- 0.958496f, 0.979004f, 0.986816f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000244f, 0.000366f, 0.000607f, 0.000731f, 0.001211f,
- 0.001650f, 0.002441f, 0.003975f, 0.006207f, 0.011536f, 0.023315f, 0.060822f, 0.242798f,
- 0.744141f, 0.927734f, 0.969238f, 0.982422f, 0.989258f, 0.992188f, 0.994141f, 0.995605f,
- 0.996094f, 0.996582f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000211f, 0.000455f, 0.000486f, 0.000853f,
- 0.001081f, 0.001810f, 0.002426f, 0.003759f, 0.005501f, 0.009094f, 0.016876f, 0.037109f,
- 0.114075f, 0.475586f, 0.862305f, 0.951172f, 0.975586f, 0.985840f, 0.990234f, 0.992676f,
- 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000364f, 0.000366f, 0.000464f,
- 0.000731f, 0.001093f, 0.001577f, 0.002235f, 0.002798f, 0.004841f, 0.007637f, 0.013008f,
- 0.025635f, 0.063965f, 0.238403f, 0.720215f, 0.919434f, 0.965820f, 0.981445f, 0.987793f,
- 0.991211f, 0.993652f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000238f, 0.000609f,
- 0.000712f, 0.000974f, 0.000976f, 0.001507f, 0.002031f, 0.002680f, 0.004066f, 0.006294f,
- 0.010284f, 0.018326f, 0.040924f, 0.124146f, 0.485596f, 0.859375f, 0.949707f, 0.975586f,
- 0.984375f, 0.989746f, 0.992676f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997070f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000113f, 0.000487f,
- 0.000488f, 0.000610f, 0.000961f, 0.000976f, 0.001337f, 0.001705f, 0.002663f, 0.003521f,
- 0.005417f, 0.008408f, 0.014809f, 0.028793f, 0.073120f, 0.270996f, 0.741699f, 0.922363f,
- 0.965332f, 0.980957f, 0.987793f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.997070f,
- 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000244f, 0.000224f,
- 0.000486f, 0.000609f, 0.000610f, 0.000973f, 0.000975f, 0.001306f, 0.001703f, 0.002350f,
- 0.003239f, 0.004848f, 0.007122f, 0.011955f, 0.021820f, 0.048859f, 0.152710f, 0.554199f,
- 0.875977f, 0.953125f, 0.976562f, 0.985352f, 0.990234f, 0.993164f, 0.994629f, 0.995605f,
- 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000234f,
- 0.000244f, 0.000485f, 0.000488f, 0.000610f, 0.000969f, 0.000975f, 0.001335f, 0.001693f,
- 0.001991f, 0.002811f, 0.004097f, 0.006397f, 0.009903f, 0.017303f, 0.035034f, 0.094421f,
- 0.354736f, 0.795898f, 0.933594f, 0.969238f, 0.981934f, 0.988281f, 0.991699f, 0.993652f,
- 0.995117f, 0.996094f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000244f, 0.000244f, 0.000480f, 0.000608f, 0.000488f, 0.000922f, 0.000975f, 0.000976f,
- 0.001339f, 0.001827f, 0.002674f, 0.003891f, 0.005688f, 0.008324f, 0.014320f, 0.026917f,
- 0.064392f, 0.216431f, 0.668945f, 0.904785f, 0.959961f, 0.978516f, 0.986816f, 0.990723f,
- 0.993652f, 0.994141f, 0.996094f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 1.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000188f, 0.000220f, 0.000480f, 0.000608f, 0.000609f, 0.000876f, 0.000975f,
- 0.000976f, 0.001454f, 0.002068f, 0.002649f, 0.003481f, 0.004757f, 0.007801f, 0.012230f,
- 0.021698f, 0.046814f, 0.138306f, 0.506348f, 0.859375f, 0.947754f, 0.974121f, 0.984375f,
- 0.989746f, 0.992188f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000244f, 0.000446f, 0.000487f, 0.000609f, 0.000731f,
- 0.000973f, 0.000975f, 0.001310f, 0.001823f, 0.002304f, 0.002869f, 0.004890f, 0.006813f,
- 0.010475f, 0.017731f, 0.036163f, 0.095337f, 0.353516f, 0.792480f, 0.932129f, 0.968262f,
- 0.982422f, 0.988770f, 0.992188f, 0.993652f, 0.995605f, 0.996094f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000241f, 0.000362f, 0.000487f, 0.000609f,
- 0.000609f, 0.000973f, 0.001213f, 0.001419f, 0.001807f, 0.002068f, 0.002794f, 0.004070f,
- 0.005917f, 0.009140f, 0.015129f, 0.029053f, 0.070068f, 0.242554f, 0.700684f, 0.911621f,
- 0.961914f, 0.979492f, 0.987305f, 0.991211f, 0.993164f, 0.995117f, 0.995605f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000243f, 0.000483f, 0.000603f,
- 0.000609f, 0.000730f, 0.001076f, 0.000975f, 0.001327f, 0.001598f, 0.002056f, 0.002848f,
- 0.003519f, 0.005589f, 0.008041f, 0.013321f, 0.024155f, 0.054718f, 0.171875f, 0.590332f,
- 0.885742f, 0.955566f, 0.977051f, 0.985840f, 0.990723f, 0.993164f, 0.994629f, 0.995605f,
- 0.997070f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000192f, 0.000122f, 0.000244f, 0.000483f,
- 0.000606f, 0.000608f, 0.000731f, 0.000953f, 0.001095f, 0.001258f, 0.001575f, 0.002066f,
- 0.002594f, 0.003857f, 0.004734f, 0.007683f, 0.011642f, 0.021179f, 0.044464f, 0.127930f,
- 0.476807f, 0.850586f, 0.947266f, 0.974121f, 0.984375f, 0.989746f, 0.992676f, 0.994141f,
- 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000229f, 0.000239f, 0.000244f,
- 0.000343f, 0.000483f, 0.000608f, 0.000609f, 0.000857f, 0.000973f, 0.001097f, 0.001571f,
- 0.002041f, 0.002399f, 0.002922f, 0.004471f, 0.006836f, 0.010643f, 0.018661f, 0.037354f,
- 0.100037f, 0.378418f, 0.810547f, 0.937988f, 0.971191f, 0.983887f, 0.989258f, 0.992188f,
- 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000161f,
- 0.000230f, 0.000244f, 0.000486f, 0.000607f, 0.000609f, 0.000819f, 0.000972f, 0.000975f,
- 0.001431f, 0.001945f, 0.002283f, 0.003031f, 0.004238f, 0.006424f, 0.009995f, 0.016068f,
- 0.032104f, 0.081360f, 0.302246f, 0.765625f, 0.928223f, 0.968750f, 0.982422f, 0.988770f,
- 0.992676f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000240f, 0.000240f, 0.000244f, 0.000450f, 0.000607f, 0.000609f, 0.000731f, 0.001084f,
- 0.000974f, 0.001341f, 0.001910f, 0.002254f, 0.003216f, 0.004017f, 0.005692f, 0.008980f,
- 0.014832f, 0.028854f, 0.069641f, 0.248657f, 0.719238f, 0.918945f, 0.965820f, 0.981445f,
- 0.988770f, 0.992188f, 0.994629f, 0.995605f, 0.996094f, 0.997070f, 0.997559f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000243f, 0.000360f, 0.000461f, 0.000607f, 0.000608f, 0.000731f,
- 0.001086f, 0.001202f, 0.001307f, 0.001592f, 0.002066f, 0.003134f, 0.003990f, 0.005611f,
- 0.008133f, 0.013680f, 0.025986f, 0.061462f, 0.211670f, 0.676758f, 0.910156f, 0.963867f,
- 0.980957f, 0.988281f, 0.991699f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000240f, 0.000243f, 0.000482f, 0.000604f, 0.000608f,
- 0.000730f, 0.001040f, 0.001188f, 0.001287f, 0.001574f, 0.002064f, 0.002613f, 0.003721f,
- 0.005428f, 0.008018f, 0.013161f, 0.024200f, 0.055573f, 0.186401f, 0.642578f, 0.904785f,
- 0.962402f, 0.980469f, 0.987793f, 0.991699f, 0.994141f, 0.995605f, 0.996582f, 0.997070f,
- 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000480f, 0.000602f,
- 0.000721f, 0.000705f, 0.000907f, 0.001094f, 0.001096f, 0.001493f, 0.002058f, 0.002607f,
- 0.003639f, 0.004826f, 0.007595f, 0.012413f, 0.022171f, 0.051697f, 0.171143f, 0.619629f,
- 0.899414f, 0.961426f, 0.980957f, 0.987793f, 0.992188f, 0.994629f, 0.995605f, 0.996582f,
- 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000172f, 0.000232f, 0.000243f, 0.000244f,
- 0.000576f, 0.000711f, 0.000608f, 0.000767f, 0.001089f, 0.001213f, 0.001509f, 0.002029f,
- 0.002684f, 0.003550f, 0.005161f, 0.007107f, 0.011871f, 0.021545f, 0.049347f, 0.163086f,
- 0.609863f, 0.900391f, 0.962891f, 0.980957f, 0.988281f, 0.992676f, 0.994629f, 0.996094f,
- 0.996582f, 0.997559f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000210f, 0.000122f, 0.000337f,
- 0.000290f, 0.000594f, 0.000726f, 0.000730f, 0.000731f, 0.001090f, 0.001212f, 0.001506f,
- 0.002029f, 0.002335f, 0.003489f, 0.005077f, 0.007000f, 0.011398f, 0.021027f, 0.048218f,
- 0.161133f, 0.614258f, 0.903809f, 0.963379f, 0.981934f, 0.988770f, 0.992188f, 0.994629f,
- 0.996094f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000281f, 0.000440f, 0.000683f, 0.000726f, 0.000730f, 0.000731f, 0.001087f, 0.001095f,
- 0.001485f, 0.001793f, 0.002214f, 0.002991f, 0.004951f, 0.006912f, 0.011162f, 0.020905f,
- 0.048187f, 0.165527f, 0.633789f, 0.910156f, 0.965820f, 0.982422f, 0.989746f, 0.993164f,
- 0.995117f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000241f, 0.000243f, 0.000480f, 0.000725f, 0.000697f, 0.000731f, 0.001007f,
- 0.001094f, 0.001360f, 0.001795f, 0.002161f, 0.003244f, 0.004871f, 0.006966f, 0.011330f,
- 0.020706f, 0.049591f, 0.178345f, 0.667969f, 0.918457f, 0.968262f, 0.983887f, 0.990234f,
- 0.993652f, 0.995605f, 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000086f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000243f, 0.000243f, 0.000465f, 0.000592f, 0.000729f, 0.000730f,
- 0.001079f, 0.001093f, 0.001332f, 0.001885f, 0.002129f, 0.003254f, 0.004818f, 0.006889f,
- 0.011429f, 0.021957f, 0.052521f, 0.201294f, 0.714355f, 0.929199f, 0.972168f, 0.985352f,
- 0.991211f, 0.994141f, 0.995605f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000115f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000184f, 0.000241f, 0.000347f, 0.000453f, 0.000579f, 0.000728f,
- 0.000729f, 0.001034f, 0.001093f, 0.001292f, 0.001857f, 0.002131f, 0.003296f, 0.004826f,
- 0.006958f, 0.011726f, 0.023071f, 0.057983f, 0.239258f, 0.767578f, 0.939453f, 0.976074f,
- 0.987305f, 0.992676f, 0.994629f, 0.996094f, 0.997070f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000088f, 0.000119f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000191f, 0.000242f, 0.000425f, 0.000558f,
- 0.000723f, 0.000730f, 0.001058f, 0.001092f, 0.001297f, 0.001653f, 0.002352f, 0.003124f,
- 0.004860f, 0.007072f, 0.012131f, 0.024551f, 0.066406f, 0.300537f, 0.820312f, 0.951172f,
- 0.979492f, 0.988281f, 0.993164f, 0.995117f, 0.996582f, 0.997070f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000227f, 0.000239f, 0.000341f, 0.000359f,
- 0.000587f, 0.000605f, 0.000729f, 0.001040f, 0.001185f, 0.001275f, 0.001849f, 0.002390f,
- 0.003399f, 0.005001f, 0.007404f, 0.012871f, 0.027237f, 0.079529f, 0.395264f, 0.868164f,
- 0.960938f, 0.982910f, 0.990234f, 0.993164f, 0.995605f, 0.997070f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000120f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000211f, 0.000239f, 0.000307f,
- 0.000394f, 0.000704f, 0.000711f, 0.000728f, 0.001001f, 0.001088f, 0.001204f, 0.001713f,
- 0.002367f, 0.003151f, 0.004639f, 0.007820f, 0.014084f, 0.030609f, 0.102722f, 0.527344f,
- 0.906250f, 0.969727f, 0.985840f, 0.991699f, 0.994629f, 0.996094f, 0.997559f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000115f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000196f,
- 0.000332f, 0.000363f, 0.000686f, 0.000719f, 0.000723f, 0.000963f, 0.001089f, 0.001290f,
- 0.001849f, 0.002394f, 0.003458f, 0.004833f, 0.008301f, 0.015579f, 0.036926f, 0.143188f,
- 0.676270f, 0.934570f, 0.976562f, 0.988281f, 0.992676f, 0.995605f, 0.996582f, 0.998047f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000102f, 0.000120f,
- 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000311f, 0.000345f, 0.000479f, 0.000723f, 0.000728f, 0.000934f, 0.001085f,
- 0.001282f, 0.001821f, 0.002399f, 0.003355f, 0.005524f, 0.008881f, 0.017807f, 0.047058f,
- 0.222046f, 0.803223f, 0.954102f, 0.981445f, 0.990723f, 0.994141f, 0.996582f, 0.997559f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000090f,
- 0.000116f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000201f, 0.000239f, 0.000358f, 0.000618f, 0.000719f, 0.000727f, 0.000863f,
- 0.001087f, 0.001350f, 0.001945f, 0.002689f, 0.003731f, 0.005817f, 0.010033f, 0.021332f,
- 0.064514f, 0.374512f, 0.885254f, 0.969238f, 0.986328f, 0.992676f, 0.995605f, 0.996582f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000086f, 0.000117f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000164f, 0.000238f, 0.000353f, 0.000596f, 0.000591f, 0.000727f,
- 0.000901f, 0.001085f, 0.001266f, 0.001767f, 0.002663f, 0.003914f, 0.006153f, 0.011612f,
- 0.026871f, 0.100525f, 0.605957f, 0.934082f, 0.978027f, 0.989746f, 0.994141f, 0.996094f,
- 0.997559f, 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000107f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000195f, 0.000323f, 0.000339f, 0.000461f, 0.000706f,
- 0.000726f, 0.000845f, 0.001086f, 0.001298f, 0.001843f, 0.003027f, 0.004387f, 0.007011f,
- 0.013832f, 0.036530f, 0.183228f, 0.805664f, 0.959961f, 0.984863f, 0.991699f, 0.995605f,
- 0.997070f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000120f, 0.000120f, 0.000121f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000336f, 0.000464f,
- 0.000708f, 0.000726f, 0.000965f, 0.001083f, 0.001458f, 0.002180f, 0.003096f, 0.004425f,
- 0.008377f, 0.017639f, 0.056610f, 0.390869f, 0.909180f, 0.975586f, 0.989746f, 0.994141f,
- 0.996582f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000113f, 0.000120f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000135f, 0.000336f,
- 0.000467f, 0.000713f, 0.000725f, 0.000959f, 0.001191f, 0.001287f, 0.001939f, 0.003231f,
- 0.005306f, 0.009888f, 0.024414f, 0.105835f, 0.709961f, 0.955078f, 0.984863f, 0.993164f,
- 0.996094f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000061f, 0.000089f,
- 0.000118f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000309f,
- 0.000299f, 0.000460f, 0.000710f, 0.000724f, 0.000997f, 0.001073f, 0.001410f, 0.002117f,
- 0.003506f, 0.006031f, 0.012863f, 0.038391f, 0.260742f, 0.892090f, 0.975098f, 0.990723f,
- 0.995117f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000085f, 0.000110f, 0.000118f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000317f, 0.000499f, 0.000706f, 0.000599f, 0.000851f, 0.001069f, 0.001633f,
- 0.002367f, 0.003918f, 0.007580f, 0.017929f, 0.074646f, 0.645508f, 0.956055f, 0.986328f,
- 0.994141f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000099f, 0.000113f, 0.000119f, 0.000119f, 0.000120f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000160f, 0.000326f, 0.000308f, 0.000578f, 0.000602f, 0.000921f, 0.001071f,
- 0.001807f, 0.002783f, 0.004620f, 0.010017f, 0.029465f, 0.211792f, 0.896484f, 0.979004f,
- 0.992188f, 0.996094f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000027f, 0.000103f, 0.000114f, 0.000118f, 0.000120f,
- 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000090f, 0.000212f, 0.000309f, 0.000586f, 0.000602f, 0.000937f,
- 0.001147f, 0.002031f, 0.003237f, 0.006134f, 0.014969f, 0.063171f, 0.665527f, 0.964355f,
- 0.989258f, 0.995117f, 0.999023f, 0.998535f, 0.999023f, 0.999023f, 0.998535f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000018f, 0.000103f, 0.000113f,
- 0.000117f, 0.000119f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000004f, 0.000002f, 0.000199f, 0.000390f, 0.000586f, 0.000665f,
- 0.000946f, 0.001365f, 0.002207f, 0.003767f, 0.008308f, 0.025955f, 0.227661f, 0.924316f,
- 0.984863f, 0.994141f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000098f, 0.000109f, 0.000117f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000011f, 0.000005f, 0.000003f, 0.000002f, 0.000193f, 0.000388f, 0.000586f,
- 0.000659f, 0.000952f, 0.001580f, 0.002762f, 0.005363f, 0.013153f, 0.066589f, 0.781738f,
- 0.977051f, 0.993164f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000075f, 0.000112f, 0.000116f, 0.000118f, 0.000119f, 0.000120f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f,
- 0.000088f, 0.000026f, 0.000010f, 0.000005f, 0.000003f, 0.000002f, 0.000186f, 0.000407f,
- 0.000586f, 0.000760f, 0.000986f, 0.001796f, 0.003275f, 0.007565f, 0.026794f, 0.363281f,
- 0.959473f, 0.990723f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000010f, 0.000090f, 0.000110f, 0.000115f, 0.000117f,
- 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000077f, 0.000023f, 0.000011f, 0.000005f, 0.000003f, 0.000002f, 0.000158f,
- 0.000407f, 0.000587f, 0.000826f, 0.001264f, 0.002174f, 0.004894f, 0.013359f, 0.098511f,
- 0.911133f, 0.987793f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000084f, 0.000107f,
- 0.000114f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000093f, 0.000024f, 0.000011f, 0.000005f, 0.000003f, 0.000002f,
- 0.000220f, 0.000476f, 0.000585f, 0.000913f, 0.001374f, 0.002951f, 0.007511f, 0.034973f,
- 0.736328f, 0.982910f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000056f, 0.000102f, 0.000112f, 0.000116f, 0.000117f, 0.000119f, 0.000120f, 0.000120f,
- 0.000121f, 0.000121f, 0.000121f, 0.000075f, 0.000025f, 0.000010f, 0.000005f, 0.000003f,
- 0.000034f, 0.000222f, 0.000491f, 0.000589f, 0.001020f, 0.001881f, 0.004669f, 0.015717f,
- 0.298340f, 0.974609f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000048f, 0.000095f, 0.000106f, 0.000114f, 0.000117f, 0.000118f,
- 0.000119f, 0.000120f, 0.000120f, 0.000121f, 0.000089f, 0.000029f, 0.000012f, 0.000006f,
- 0.000003f, 0.000002f, 0.000223f, 0.000525f, 0.000687f, 0.001122f, 0.002672f, 0.008255f,
- 0.079590f, 0.954590f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000077f, 0.000104f, 0.000112f,
- 0.000115f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000109f, 0.000031f, 0.000013f,
- 0.000006f, 0.000003f, 0.000002f, 0.000254f, 0.000550f, 0.000846f, 0.001545f, 0.004223f,
- 0.027771f, 0.901855f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f,
- 0.000090f, 0.000107f, 0.000113f, 0.000116f, 0.000118f, 0.000119f, 0.000120f, 0.000041f,
- 0.000015f, 0.000007f, 0.000004f, 0.000002f, 0.000271f, 0.000563f, 0.000786f, 0.002211f,
- 0.012207f, 0.711426f, 0.994629f, 0.994629f, 0.995117f, 0.994629f, 0.994629f, 0.994629f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000028f, 0.000083f, 0.000102f, 0.000110f, 0.000114f, 0.000117f, 0.000118f,
- 0.000052f, 0.000019f, 0.000008f, 0.000004f, 0.000002f, 0.000314f, 0.000444f, 0.001049f,
- 0.005669f, 0.266846f, 0.993164f, 0.993652f, 0.993164f, 0.993652f, 0.993164f, 0.993164f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000048f, 0.000089f, 0.000106f, 0.000112f,
- 0.000115f, 0.000077f, 0.000026f, 0.000010f, 0.000005f, 0.000079f, 0.000425f, 0.000405f,
- 0.002468f, 0.064209f, 0.990234f, 0.990723f, 0.990234f, 0.990234f, 0.990234f, 0.991211f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000020f, 0.000075f,
- 0.000098f, 0.000108f, 0.000113f, 0.000044f, 0.000016f, 0.000006f, 0.000027f, 0.000270f,
- 0.000825f, 0.018448f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000049f, 0.000085f, 0.000102f, 0.000070f, 0.000022f, 0.000008f, 0.000133f,
- 0.000295f, 0.005318f, 0.978516f, 0.979004f, 0.977539f, 0.977539f, 0.978027f, 0.978516f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000066f, 0.000092f, 0.000036f, 0.000011f,
- 0.000135f, 0.000925f, 0.959473f, 0.959961f, 0.959961f, 0.959473f, 0.959961f, 0.959473f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000027f, 0.000065f,
- 0.000016f, 0.000109f, 0.907715f, 0.907227f, 0.907715f, 0.907227f, 0.907715f, 0.907715f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000017f, 0.711914f, 0.712402f, 0.711426f, 0.711426f, 0.711914f, 0.712402f,
- },
- {
- 0.076172f, 0.877441f, 0.964355f, 0.980957f, 0.987305f, 0.990723f, 0.992676f, 0.993652f,
- 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.003897f, 0.033173f, 0.320557f, 0.863770f, 0.953613f, 0.975586f, 0.984863f, 0.988770f,
- 0.991211f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
- 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000975f, 0.005951f, 0.020935f, 0.093140f, 0.501465f, 0.873047f, 0.950684f, 0.973145f,
- 0.981934f, 0.986816f, 0.990234f, 0.992188f, 0.993164f, 0.994629f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
- 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000610f, 0.002430f, 0.006081f, 0.015915f, 0.045593f, 0.179810f, 0.635254f, 0.889648f,
- 0.951172f, 0.972168f, 0.981445f, 0.986328f, 0.989746f, 0.991699f, 0.993652f, 0.994629f,
- 0.995117f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.001219f, 0.002796f, 0.006172f, 0.012848f, 0.028458f, 0.081177f, 0.301758f,
- 0.733398f, 0.905273f, 0.953613f, 0.972168f, 0.981445f, 0.986328f, 0.989258f, 0.991699f,
- 0.993652f, 0.994141f, 0.995117f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000731f, 0.001706f, 0.003166f, 0.005470f, 0.010406f, 0.020813f, 0.047089f,
- 0.136719f, 0.449951f, 0.803223f, 0.919434f, 0.957520f, 0.973633f, 0.981934f, 0.986328f,
- 0.989746f, 0.991699f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f,
- 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000366f, 0.001214f, 0.001894f, 0.003159f, 0.005108f, 0.008720f, 0.015839f,
- 0.031586f, 0.074951f, 0.224121f, 0.596680f, 0.851074f, 0.932617f, 0.962402f, 0.975586f,
- 0.982910f, 0.987305f, 0.989746f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f,
- 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000366f, 0.000731f, 0.000976f, 0.001827f, 0.002987f, 0.004757f, 0.007988f,
- 0.013023f, 0.023544f, 0.048431f, 0.120239f, 0.352783f, 0.717285f, 0.887207f, 0.943848f,
- 0.966309f, 0.978027f, 0.983887f, 0.987305f, 0.990234f, 0.992188f, 0.993652f, 0.994629f,
- 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.998047f, 0.998047f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000434f, 0.000488f, 0.000704f, 0.001218f, 0.002190f, 0.002783f, 0.004723f,
- 0.006878f, 0.011040f, 0.018372f, 0.034241f, 0.073242f, 0.194336f, 0.510742f, 0.803711f,
- 0.912598f, 0.952637f, 0.970703f, 0.979004f, 0.984863f, 0.988281f, 0.991211f, 0.992676f,
- 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
- 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000243f, 0.000488f, 0.000488f, 0.000916f, 0.001219f, 0.002308f, 0.002914f,
- 0.004124f, 0.006523f, 0.009537f, 0.014793f, 0.025833f, 0.050446f, 0.116089f, 0.312744f,
- 0.661133f, 0.860840f, 0.931641f, 0.960449f, 0.974121f, 0.981445f, 0.986328f, 0.989258f,
- 0.991211f, 0.992676f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000121f, 0.000356f, 0.000488f, 0.000609f, 0.000944f, 0.001339f, 0.002296f,
- 0.002964f, 0.003880f, 0.005676f, 0.008476f, 0.012909f, 0.020874f, 0.036926f, 0.075500f,
- 0.187988f, 0.474854f, 0.774414f, 0.900391f, 0.946289f, 0.966309f, 0.978027f, 0.983887f,
- 0.987793f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
- 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000244f, 0.000483f, 0.000488f, 0.000731f, 0.001070f, 0.001551f,
- 0.002024f, 0.002520f, 0.003990f, 0.004738f, 0.007584f, 0.010834f, 0.016800f, 0.028763f,
- 0.054535f, 0.120728f, 0.309082f, 0.642090f, 0.848145f, 0.926270f, 0.957031f, 0.971191f,
- 0.980469f, 0.985352f, 0.988770f, 0.990723f, 0.992188f, 0.993652f, 0.994629f, 0.995605f,
- 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000242f, 0.000485f, 0.000608f, 0.000731f, 0.001091f,
- 0.001339f, 0.001943f, 0.002602f, 0.003466f, 0.004845f, 0.006649f, 0.009529f, 0.014824f,
- 0.023407f, 0.041351f, 0.083496f, 0.199951f, 0.482422f, 0.770996f, 0.896484f, 0.944336f,
- 0.965332f, 0.976562f, 0.982910f, 0.986816f, 0.990234f, 0.991699f, 0.993164f, 0.994141f,
- 0.995117f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000121f, 0.000243f, 0.000243f, 0.000602f, 0.000609f, 0.000799f,
- 0.001088f, 0.001459f, 0.001822f, 0.002432f, 0.003033f, 0.004375f, 0.006042f, 0.008560f,
- 0.012810f, 0.019791f, 0.032715f, 0.061584f, 0.135254f, 0.335693f, 0.660156f, 0.853027f,
- 0.926758f, 0.956543f, 0.972168f, 0.980469f, 0.984863f, 0.988281f, 0.991211f, 0.992676f,
- 0.993652f, 0.994141f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000243f, 0.000366f, 0.000605f, 0.000730f,
- 0.000731f, 0.001201f, 0.001458f, 0.001804f, 0.002428f, 0.003593f, 0.004234f, 0.005745f,
- 0.007755f, 0.011139f, 0.016754f, 0.027054f, 0.047424f, 0.097107f, 0.231323f, 0.525879f,
- 0.791016f, 0.902832f, 0.945801f, 0.966797f, 0.977051f, 0.982910f, 0.987793f, 0.990234f,
- 0.991699f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000116f, 0.000122f, 0.000365f, 0.000244f, 0.000602f,
- 0.000721f, 0.000730f, 0.000852f, 0.001451f, 0.001842f, 0.002518f, 0.002993f, 0.004097f,
- 0.005253f, 0.007099f, 0.009865f, 0.014908f, 0.022827f, 0.038879f, 0.072815f, 0.163940f,
- 0.396484f, 0.707031f, 0.869141f, 0.932129f, 0.960449f, 0.973145f, 0.980957f, 0.986328f,
- 0.988770f, 0.991211f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f,
- 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000110f, 0.000361f, 0.000242f, 0.000244f,
- 0.000602f, 0.000728f, 0.000853f, 0.001260f, 0.001569f, 0.001704f, 0.002287f, 0.003103f,
- 0.003857f, 0.004848f, 0.006680f, 0.009003f, 0.012978f, 0.019897f, 0.032135f, 0.057983f,
- 0.121033f, 0.291504f, 0.604980f, 0.827148f, 0.915039f, 0.953125f, 0.969238f, 0.978516f,
- 0.984375f, 0.988281f, 0.991211f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
- 0.996582f, 0.996582f, 0.997070f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000241f, 0.000241f, 0.000365f,
- 0.000365f, 0.000589f, 0.000852f, 0.000852f, 0.001246f, 0.001562f, 0.001812f, 0.002241f,
- 0.002794f, 0.003633f, 0.004669f, 0.006069f, 0.008202f, 0.011772f, 0.016891f, 0.027618f,
- 0.047089f, 0.093506f, 0.216309f, 0.495605f, 0.771484f, 0.894531f, 0.942383f, 0.965332f,
- 0.976074f, 0.982910f, 0.987305f, 0.989746f, 0.991699f, 0.993164f, 0.994629f, 0.995117f,
- 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000364f,
- 0.000242f, 0.000487f, 0.000737f, 0.000730f, 0.000974f, 0.001083f, 0.001520f, 0.001701f,
- 0.001938f, 0.002768f, 0.003658f, 0.004227f, 0.005741f, 0.007671f, 0.010796f, 0.015511f,
- 0.023529f, 0.040009f, 0.074158f, 0.165405f, 0.395264f, 0.703613f, 0.868164f, 0.932129f,
- 0.959473f, 0.973633f, 0.980957f, 0.985840f, 0.988770f, 0.991699f, 0.992676f, 0.994141f,
- 0.995117f, 0.995117f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
- 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000100f, 0.000000f, 0.000241f,
- 0.000224f, 0.000487f, 0.000488f, 0.000710f, 0.000972f, 0.000848f, 0.001181f, 0.001333f,
- 0.001910f, 0.001830f, 0.002661f, 0.003298f, 0.004154f, 0.005386f, 0.007271f, 0.009735f,
- 0.013908f, 0.021149f, 0.034149f, 0.062042f, 0.130371f, 0.313477f, 0.627930f, 0.837402f,
- 0.919922f, 0.954590f, 0.970215f, 0.979492f, 0.985352f, 0.988770f, 0.991211f, 0.992676f,
- 0.993652f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000049f,
- 0.000242f, 0.000483f, 0.000606f, 0.000487f, 0.000695f, 0.000970f, 0.000974f, 0.001136f,
- 0.001328f, 0.001694f, 0.002028f, 0.002617f, 0.002953f, 0.003847f, 0.004951f, 0.006653f,
- 0.009193f, 0.012672f, 0.018661f, 0.029968f, 0.052673f, 0.106689f, 0.250977f, 0.549805f,
- 0.801758f, 0.907227f, 0.948242f, 0.967773f, 0.978027f, 0.984375f, 0.987793f, 0.990723f,
- 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000166f, 0.000243f, 0.000485f, 0.000487f, 0.000487f, 0.000945f, 0.000834f, 0.000974f,
- 0.000974f, 0.001300f, 0.001810f, 0.002058f, 0.002573f, 0.002703f, 0.003761f, 0.004887f,
- 0.006393f, 0.008514f, 0.011818f, 0.016937f, 0.026672f, 0.046051f, 0.089478f, 0.204712f,
- 0.476807f, 0.762207f, 0.891602f, 0.942383f, 0.965820f, 0.976562f, 0.983398f, 0.987793f,
- 0.990234f, 0.992188f, 0.993652f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000224f, 0.000358f, 0.000477f, 0.000486f, 0.000487f, 0.000580f, 0.000841f,
- 0.000973f, 0.001079f, 0.001255f, 0.001649f, 0.002045f, 0.002241f, 0.002995f, 0.003841f,
- 0.004826f, 0.005920f, 0.007866f, 0.010925f, 0.015930f, 0.024109f, 0.040619f, 0.077454f,
- 0.171509f, 0.412354f, 0.720215f, 0.876953f, 0.936035f, 0.962402f, 0.975098f, 0.982422f,
- 0.987305f, 0.990234f, 0.992188f, 0.993164f, 0.994629f, 0.995117f, 0.996094f, 0.996582f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000165f, 0.000205f, 0.000411f, 0.000480f, 0.000486f, 0.000608f, 0.000688f,
- 0.000966f, 0.000968f, 0.000974f, 0.001421f, 0.001489f, 0.001695f, 0.002090f, 0.002886f,
- 0.003326f, 0.004608f, 0.005604f, 0.007317f, 0.010414f, 0.014862f, 0.022232f, 0.036469f,
- 0.067810f, 0.146973f, 0.359375f, 0.680664f, 0.861816f, 0.931152f, 0.959961f, 0.974609f,
- 0.981934f, 0.986816f, 0.989746f, 0.991699f, 0.993652f, 0.994629f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000242f, 0.000453f, 0.000539f, 0.000486f, 0.000487f,
- 0.000487f, 0.000957f, 0.000969f, 0.001202f, 0.001139f, 0.001393f, 0.001986f, 0.002045f,
- 0.002863f, 0.003216f, 0.004128f, 0.005417f, 0.007378f, 0.009689f, 0.013466f, 0.020432f,
- 0.033722f, 0.060883f, 0.129395f, 0.318115f, 0.642090f, 0.847656f, 0.926270f, 0.958008f,
- 0.973145f, 0.981934f, 0.986328f, 0.989746f, 0.992188f, 0.993164f, 0.994629f, 0.995605f,
- 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000380f, 0.000482f, 0.000606f,
- 0.000607f, 0.000608f, 0.000829f, 0.000970f, 0.000972f, 0.001070f, 0.001402f, 0.001812f,
- 0.002138f, 0.002619f, 0.003246f, 0.004082f, 0.005318f, 0.006699f, 0.009262f, 0.012764f,
- 0.019318f, 0.031052f, 0.055878f, 0.116821f, 0.286621f, 0.610352f, 0.835938f, 0.922852f,
- 0.956543f, 0.973145f, 0.981445f, 0.986328f, 0.989746f, 0.991699f, 0.993652f, 0.995117f,
- 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000243f, 0.000350f, 0.000480f,
- 0.000605f, 0.000596f, 0.000608f, 0.000890f, 0.000963f, 0.000972f, 0.000974f, 0.001316f,
- 0.001798f, 0.002058f, 0.002560f, 0.002811f, 0.003983f, 0.005108f, 0.006489f, 0.008888f,
- 0.012314f, 0.018021f, 0.029495f, 0.051941f, 0.107422f, 0.263428f, 0.585449f, 0.827148f,
- 0.919434f, 0.956055f, 0.971680f, 0.981445f, 0.986816f, 0.989746f, 0.992188f, 0.994141f,
- 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f, 0.000176f, 0.000462f,
- 0.000483f, 0.000604f, 0.000607f, 0.000638f, 0.000922f, 0.000965f, 0.000971f, 0.001235f,
- 0.001376f, 0.001769f, 0.002041f, 0.002575f, 0.003130f, 0.003487f, 0.004936f, 0.006264f,
- 0.008415f, 0.012047f, 0.017517f, 0.027786f, 0.049164f, 0.101257f, 0.249512f, 0.568848f,
- 0.821777f, 0.918945f, 0.956055f, 0.972168f, 0.981445f, 0.986816f, 0.990234f, 0.992188f,
- 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000130f, 0.000122f, 0.000242f,
- 0.000352f, 0.000560f, 0.000602f, 0.000604f, 0.000606f, 0.000767f, 0.001046f, 0.001089f,
- 0.000973f, 0.001327f, 0.001583f, 0.002033f, 0.002272f, 0.002657f, 0.003563f, 0.004589f,
- 0.006138f, 0.008194f, 0.011299f, 0.016861f, 0.026718f, 0.047119f, 0.097656f, 0.240967f,
- 0.562500f, 0.821289f, 0.919922f, 0.957031f, 0.973145f, 0.981934f, 0.987305f, 0.990234f,
- 0.992676f, 0.994141f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000241f, 0.000314f, 0.000459f, 0.000600f, 0.000605f, 0.000598f, 0.000804f, 0.000958f,
- 0.001084f, 0.001104f, 0.001389f, 0.001709f, 0.002041f, 0.002211f, 0.002645f, 0.003635f,
- 0.004467f, 0.005718f, 0.008072f, 0.011185f, 0.016846f, 0.026184f, 0.046112f, 0.094971f,
- 0.239014f, 0.565430f, 0.825684f, 0.922363f, 0.958496f, 0.973633f, 0.983398f, 0.987793f,
- 0.990723f, 0.992676f, 0.994141f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f,
- 0.000122f, 0.000173f, 0.000246f, 0.000387f, 0.000480f, 0.000604f, 0.000604f, 0.000701f,
- 0.000951f, 0.000968f, 0.001184f, 0.001315f, 0.001597f, 0.001899f, 0.002268f, 0.002813f,
- 0.003716f, 0.004372f, 0.005886f, 0.007759f, 0.010918f, 0.015915f, 0.025726f, 0.045685f,
- 0.095459f, 0.243774f, 0.579102f, 0.833984f, 0.926270f, 0.960449f, 0.976074f, 0.983887f,
- 0.988770f, 0.991211f, 0.993164f, 0.994629f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000238f, 0.000237f, 0.000242f, 0.000463f, 0.000585f, 0.000587f, 0.000718f,
- 0.000607f, 0.000885f, 0.001081f, 0.001087f, 0.001299f, 0.001553f, 0.001982f, 0.002104f,
- 0.002777f, 0.003494f, 0.004406f, 0.005798f, 0.007645f, 0.010750f, 0.016159f, 0.025467f,
- 0.045959f, 0.097778f, 0.256104f, 0.603516f, 0.847168f, 0.931152f, 0.963379f, 0.977539f,
- 0.985352f, 0.989258f, 0.991699f, 0.993652f, 0.995117f, 0.996094f, 0.996582f, 0.997559f,
- 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000231f, 0.000122f, 0.000242f, 0.000242f, 0.000400f, 0.000525f, 0.000495f,
- 0.000605f, 0.000607f, 0.000898f, 0.001075f, 0.001191f, 0.001133f, 0.001420f, 0.001794f,
- 0.002041f, 0.002733f, 0.003548f, 0.004448f, 0.005585f, 0.007656f, 0.010735f, 0.015671f,
- 0.025589f, 0.047363f, 0.102783f, 0.276855f, 0.637695f, 0.862793f, 0.938477f, 0.966797f,
- 0.979004f, 0.985840f, 0.990234f, 0.992676f, 0.994141f, 0.995117f, 0.996582f, 0.997070f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f, 0.000242f, 0.000470f, 0.000469f,
- 0.000547f, 0.000711f, 0.000723f, 0.000829f, 0.001024f, 0.001188f, 0.001081f, 0.001415f,
- 0.001765f, 0.002048f, 0.002708f, 0.003252f, 0.004448f, 0.005711f, 0.007557f, 0.010780f,
- 0.016220f, 0.026398f, 0.048950f, 0.111267f, 0.309082f, 0.680664f, 0.880371f, 0.945801f,
- 0.970703f, 0.980957f, 0.986816f, 0.990723f, 0.993164f, 0.994629f, 0.995605f, 0.996582f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000204f, 0.000239f, 0.000242f, 0.000283f,
- 0.000479f, 0.000594f, 0.000603f, 0.000606f, 0.000779f, 0.001068f, 0.001084f, 0.001118f,
- 0.001515f, 0.001926f, 0.002098f, 0.002674f, 0.002975f, 0.004040f, 0.005478f, 0.007488f,
- 0.010651f, 0.016327f, 0.027222f, 0.052460f, 0.123718f, 0.355713f, 0.729980f, 0.899902f,
- 0.952637f, 0.973145f, 0.983887f, 0.988770f, 0.991699f, 0.994141f, 0.995117f, 0.996094f,
- 0.997070f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000122f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000236f, 0.000207f, 0.000240f,
- 0.000435f, 0.000534f, 0.000594f, 0.000602f, 0.000722f, 0.000727f, 0.000947f, 0.001081f,
- 0.001090f, 0.001471f, 0.001829f, 0.002010f, 0.002478f, 0.002956f, 0.004051f, 0.005753f,
- 0.007717f, 0.011040f, 0.017105f, 0.028748f, 0.057159f, 0.142944f, 0.421387f, 0.780762f,
- 0.916992f, 0.960449f, 0.976562f, 0.985352f, 0.989746f, 0.992676f, 0.994629f, 0.996094f,
- 0.997070f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000232f,
- 0.000230f, 0.000382f, 0.000472f, 0.000576f, 0.000715f, 0.000721f, 0.000727f, 0.001046f,
- 0.001078f, 0.001186f, 0.001434f, 0.001674f, 0.002066f, 0.002546f, 0.003407f, 0.004181f,
- 0.005634f, 0.007542f, 0.011330f, 0.017609f, 0.031189f, 0.064392f, 0.172729f, 0.506836f,
- 0.828125f, 0.933105f, 0.966309f, 0.980469f, 0.987305f, 0.991211f, 0.993652f, 0.995117f,
- 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000232f, 0.000234f, 0.000352f, 0.000461f, 0.000535f, 0.000594f, 0.000722f, 0.000725f,
- 0.000921f, 0.001116f, 0.001192f, 0.001416f, 0.001637f, 0.001911f, 0.002380f, 0.002949f,
- 0.003948f, 0.005589f, 0.007942f, 0.011650f, 0.018631f, 0.034302f, 0.075867f, 0.219238f,
- 0.607422f, 0.870605f, 0.946777f, 0.972656f, 0.983887f, 0.989258f, 0.992676f, 0.995117f,
- 0.996094f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000239f, 0.000302f, 0.000396f, 0.000564f, 0.000674f, 0.000617f,
- 0.000722f, 0.001003f, 0.001068f, 0.001084f, 0.001302f, 0.001598f, 0.001929f, 0.002375f,
- 0.002935f, 0.004349f, 0.005714f, 0.007957f, 0.012306f, 0.020493f, 0.039001f, 0.092590f,
- 0.293213f, 0.711426f, 0.905762f, 0.958984f, 0.978027f, 0.986328f, 0.990723f, 0.994141f,
- 0.995605f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000232f, 0.000227f, 0.000240f, 0.000282f, 0.000542f, 0.000703f,
- 0.000718f, 0.000724f, 0.000833f, 0.001069f, 0.001184f, 0.001346f, 0.001464f, 0.001898f,
- 0.002649f, 0.003164f, 0.004467f, 0.005863f, 0.008400f, 0.013199f, 0.022614f, 0.046051f,
- 0.120605f, 0.406738f, 0.801270f, 0.931641f, 0.968262f, 0.982422f, 0.988770f, 0.992676f,
- 0.994629f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000219f, 0.000237f, 0.000235f, 0.000241f, 0.000480f,
- 0.000584f, 0.000715f, 0.000723f, 0.000775f, 0.001061f, 0.000959f, 0.001139f, 0.001526f,
- 0.001770f, 0.002546f, 0.003151f, 0.004250f, 0.006195f, 0.009071f, 0.014595f, 0.026413f,
- 0.056763f, 0.169067f, 0.557617f, 0.869141f, 0.951172f, 0.976074f, 0.986328f, 0.990723f,
- 0.994141f, 0.995605f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000120f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000216f, 0.000228f, 0.000285f, 0.000339f,
- 0.000454f, 0.000572f, 0.000595f, 0.000721f, 0.000604f, 0.000930f, 0.000958f, 0.001171f,
- 0.001431f, 0.001888f, 0.002663f, 0.003256f, 0.004402f, 0.006527f, 0.009964f, 0.016281f,
- 0.031189f, 0.074524f, 0.258301f, 0.714355f, 0.916016f, 0.965332f, 0.982422f, 0.989746f,
- 0.992676f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000063f, 0.000120f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000184f, 0.000228f,
- 0.000340f, 0.000396f, 0.000668f, 0.000571f, 0.000478f, 0.000602f, 0.000919f, 0.000956f,
- 0.001061f, 0.001497f, 0.001888f, 0.002565f, 0.003523f, 0.004578f, 0.006935f, 0.010765f,
- 0.018417f, 0.038635f, 0.107727f, 0.416260f, 0.832520f, 0.946289f, 0.975586f, 0.986328f,
- 0.991699f, 0.994629f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000045f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000234f, 0.000294f, 0.000220f, 0.000486f, 0.000579f, 0.000588f, 0.000669f, 0.000878f,
- 0.001038f, 0.001135f, 0.001451f, 0.001820f, 0.002529f, 0.003551f, 0.005199f, 0.007542f,
- 0.012230f, 0.022369f, 0.051910f, 0.174927f, 0.630859f, 0.905273f, 0.965332f, 0.982910f,
- 0.990234f, 0.993652f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000091f, 0.000117f, 0.000120f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000171f, 0.000151f, 0.000166f, 0.000195f, 0.000342f, 0.000452f, 0.000594f, 0.000599f,
- 0.000862f, 0.001019f, 0.001135f, 0.001465f, 0.002031f, 0.002676f, 0.003714f, 0.005497f,
- 0.008286f, 0.014320f, 0.028854f, 0.077332f, 0.322754f, 0.809082f, 0.946289f, 0.977051f,
- 0.987793f, 0.993164f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998535f, 0.998047f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000079f, 0.000105f, 0.000120f,
- 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000008f, 0.000006f, 0.000098f, 0.000137f, 0.000233f, 0.000324f, 0.000566f, 0.000589f,
- 0.000618f, 0.000874f, 0.000941f, 0.001108f, 0.001621f, 0.001880f, 0.002726f, 0.003788f,
- 0.005840f, 0.009583f, 0.017563f, 0.039368f, 0.133545f, 0.582520f, 0.906738f, 0.968262f,
- 0.984863f, 0.992188f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000069f, 0.000114f,
- 0.000117f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000021f,
- 0.000013f, 0.000009f, 0.000006f, 0.000004f, 0.000090f, 0.000206f, 0.000305f, 0.000538f,
- 0.000585f, 0.000596f, 0.000869f, 0.000941f, 0.001149f, 0.001516f, 0.002150f, 0.002729f,
- 0.004475f, 0.006660f, 0.011360f, 0.022690f, 0.061401f, 0.281494f, 0.813965f, 0.952148f,
- 0.980957f, 0.990723f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f,
- 0.000085f, 0.000114f, 0.000117f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000122f, 0.000122f, 0.000077f, 0.000041f,
- 0.000022f, 0.000013f, 0.000009f, 0.000006f, 0.000066f, 0.000107f, 0.000223f, 0.000250f,
- 0.000532f, 0.000576f, 0.000593f, 0.000784f, 0.000937f, 0.001126f, 0.001523f, 0.002306f,
- 0.003193f, 0.004574f, 0.007717f, 0.014191f, 0.032410f, 0.116577f, 0.595215f, 0.921875f,
- 0.974609f, 0.988770f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000056f, 0.000112f, 0.000114f, 0.000118f, 0.000119f, 0.000120f,
- 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000074f,
- 0.000038f, 0.000021f, 0.000013f, 0.000009f, 0.000006f, 0.000004f, 0.000003f, 0.000179f,
- 0.000258f, 0.000367f, 0.000469f, 0.000583f, 0.000770f, 0.000932f, 0.001131f, 0.001758f,
- 0.002483f, 0.003517f, 0.005432f, 0.009232f, 0.019302f, 0.054504f, 0.293457f, 0.853516f,
- 0.964844f, 0.986816f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000015f, 0.000084f, 0.000107f, 0.000113f, 0.000117f,
- 0.000118f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000076f, 0.000042f, 0.000023f, 0.000015f, 0.000009f, 0.000007f, 0.000005f, 0.000004f,
- 0.000147f, 0.000238f, 0.000457f, 0.000545f, 0.000586f, 0.000821f, 0.000936f, 0.001139f,
- 0.001849f, 0.002665f, 0.003687f, 0.006367f, 0.011810f, 0.028931f, 0.120605f, 0.687988f,
- 0.947754f, 0.982910f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000082f, 0.000095f,
- 0.000111f, 0.000115f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000083f, 0.000042f, 0.000026f, 0.000015f, 0.000010f, 0.000007f, 0.000005f,
- 0.000013f, 0.000086f, 0.000185f, 0.000309f, 0.000552f, 0.000577f, 0.000796f, 0.000925f,
- 0.001251f, 0.001838f, 0.002878f, 0.004509f, 0.007572f, 0.016617f, 0.054932f, 0.391602f,
- 0.912109f, 0.978516f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996094f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000095f, 0.000106f, 0.000112f, 0.000113f, 0.000115f, 0.000118f, 0.000118f,
- 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000099f, 0.000048f, 0.000027f, 0.000017f, 0.000011f, 0.000008f,
- 0.000006f, 0.000004f, 0.000089f, 0.000182f, 0.000347f, 0.000495f, 0.000570f, 0.000777f,
- 0.000922f, 0.001316f, 0.001831f, 0.003004f, 0.005028f, 0.010078f, 0.028183f, 0.161865f,
- 0.833496f, 0.972168f, 0.995117f, 0.995605f, 0.995605f, 0.995117f, 0.995117f, 0.995605f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000074f, 0.000093f, 0.000107f, 0.000111f, 0.000115f,
- 0.000116f, 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000057f, 0.000032f, 0.000021f, 0.000013f,
- 0.000008f, 0.000006f, 0.000005f, 0.000034f, 0.000159f, 0.000267f, 0.000514f, 0.000566f,
- 0.000714f, 0.000888f, 0.001348f, 0.001995f, 0.003302f, 0.006447f, 0.015945f, 0.069153f,
- 0.646484f, 0.960449f, 0.994629f, 0.995117f, 0.994629f, 0.995117f, 0.994629f, 0.995117f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000095f,
- 0.000102f, 0.000109f, 0.000114f, 0.000115f, 0.000116f, 0.000118f, 0.000118f, 0.000119f,
- 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000077f, 0.000044f, 0.000025f,
- 0.000015f, 0.000011f, 0.000007f, 0.000005f, 0.000004f, 0.000106f, 0.000244f, 0.000476f,
- 0.000561f, 0.000622f, 0.000893f, 0.001266f, 0.001968f, 0.003990f, 0.009476f, 0.033234f,
- 0.342529f, 0.940918f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000046f, 0.000079f, 0.000093f, 0.000104f, 0.000110f, 0.000111f, 0.000113f, 0.000116f,
- 0.000117f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000092f, 0.000050f,
- 0.000029f, 0.000019f, 0.000012f, 0.000009f, 0.000006f, 0.000004f, 0.000061f, 0.000188f,
- 0.000324f, 0.000456f, 0.000525f, 0.000657f, 0.001371f, 0.002445f, 0.005634f, 0.017563f,
- 0.135986f, 0.902832f, 0.992188f, 0.992188f, 0.992676f, 0.992188f, 0.992676f, 0.992188f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000038f, 0.000075f, 0.000092f, 0.000100f, 0.000105f,
- 0.000111f, 0.000112f, 0.000114f, 0.000116f, 0.000117f, 0.000117f, 0.000118f, 0.000118f,
- 0.000074f, 0.000041f, 0.000024f, 0.000016f, 0.000010f, 0.000007f, 0.000005f, 0.000033f,
- 0.000167f, 0.000423f, 0.000410f, 0.000413f, 0.000575f, 0.001446f, 0.003387f, 0.009644f,
- 0.056183f, 0.817383f, 0.990234f, 0.990234f, 0.990234f, 0.990723f, 0.990234f, 0.990723f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000011f, 0.000067f,
- 0.000084f, 0.000096f, 0.000103f, 0.000108f, 0.000110f, 0.000113f, 0.000115f, 0.000115f,
- 0.000116f, 0.000104f, 0.000057f, 0.000035f, 0.000021f, 0.000013f, 0.000009f, 0.000006f,
- 0.000054f, 0.000161f, 0.000317f, 0.000332f, 0.000393f, 0.000723f, 0.001760f, 0.005203f,
- 0.025345f, 0.617676f, 0.987793f, 0.987793f, 0.987793f, 0.988281f, 0.988281f, 0.988281f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000017f, 0.000052f, 0.000075f, 0.000091f, 0.000097f, 0.000105f, 0.000108f,
- 0.000111f, 0.000113f, 0.000114f, 0.000085f, 0.000050f, 0.000031f, 0.000018f, 0.000012f,
- 0.000008f, 0.000005f, 0.000095f, 0.000314f, 0.000306f, 0.000363f, 0.000813f, 0.002583f,
- 0.011734f, 0.308105f, 0.983887f, 0.984375f, 0.984375f, 0.984375f, 0.983887f, 0.983887f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000037f, 0.000065f, 0.000083f,
- 0.000093f, 0.000099f, 0.000105f, 0.000108f, 0.000110f, 0.000082f, 0.000045f, 0.000027f,
- 0.000017f, 0.000011f, 0.000007f, 0.000114f, 0.000245f, 0.000209f, 0.000379f, 0.001151f,
- 0.005260f, 0.107971f, 0.977539f, 0.979004f, 0.978027f, 0.978027f, 0.978027f, 0.978027f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000007f, 0.000045f, 0.000069f, 0.000084f, 0.000093f, 0.000099f, 0.000104f, 0.000076f,
- 0.000044f, 0.000026f, 0.000016f, 0.000010f, 0.000012f, 0.000152f, 0.000179f, 0.000373f,
- 0.001760f, 0.035522f, 0.969238f, 0.968750f, 0.968750f, 0.968750f, 0.968750f, 0.968750f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000050f, 0.000070f, 0.000082f,
- 0.000092f, 0.000075f, 0.000044f, 0.000026f, 0.000015f, 0.000009f, 0.000121f, 0.000117f,
- 0.000611f, 0.010231f, 0.951172f, 0.951172f, 0.951172f, 0.951172f, 0.950684f, 0.951660f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000020f, 0.000047f, 0.000069f, 0.000077f, 0.000042f, 0.000024f, 0.000013f, 0.000078f,
- 0.000130f, 0.001914f, 0.915039f, 0.915527f, 0.915039f, 0.915527f, 0.916016f, 0.915039f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.000047f, 0.000040f, 0.000019f,
- 0.000035f, 0.000188f, 0.833984f, 0.833496f, 0.833496f, 0.834473f, 0.834473f, 0.833984f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000014f, 0.000007f, 0.642578f, 0.643555f, 0.643066f, 0.643555f, 0.642578f, 0.642578f,
- },
- {
- 0.113464f, 0.797852f, 0.930176f, 0.961914f, 0.974609f, 0.980469f, 0.984863f, 0.987793f,
- 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995117f,
- 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.007183f, 0.058716f, 0.349609f, 0.784668f, 0.912598f, 0.952148f, 0.968262f, 0.977539f,
- 0.981934f, 0.985352f, 0.988281f, 0.990234f, 0.991211f, 0.992188f, 0.993652f, 0.993652f,
- 0.994141f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
- 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.002432f, 0.011818f, 0.039581f, 0.143677f, 0.482910f, 0.800293f, 0.908691f, 0.947266f,
- 0.964844f, 0.974609f, 0.980469f, 0.984375f, 0.987305f, 0.989258f, 0.990723f, 0.991699f,
- 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
- 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.001096f, 0.005062f, 0.012482f, 0.030151f, 0.079956f, 0.239014f, 0.581055f, 0.819824f,
- 0.909180f, 0.946289f, 0.963379f, 0.973145f, 0.979492f, 0.983398f, 0.986328f, 0.988281f,
- 0.990234f, 0.991699f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
- 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000610f, 0.002434f, 0.005779f, 0.012207f, 0.023972f, 0.052765f, 0.129883f, 0.342773f,
- 0.660156f, 0.841309f, 0.914062f, 0.947266f, 0.963379f, 0.973145f, 0.979004f, 0.982910f,
- 0.985840f, 0.987793f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f,
- 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000397f, 0.001559f, 0.003397f, 0.006058f, 0.011177f, 0.020355f, 0.039307f, 0.083130f,
- 0.196777f, 0.452148f, 0.724121f, 0.862305f, 0.920410f, 0.949219f, 0.964355f, 0.973145f,
- 0.979004f, 0.982910f, 0.985840f, 0.988770f, 0.989258f, 0.991211f, 0.992188f, 0.993164f,
- 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
- 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000366f, 0.001097f, 0.002163f, 0.003523f, 0.006268f, 0.010941f, 0.017487f, 0.030930f,
- 0.058411f, 0.122925f, 0.281738f, 0.556152f, 0.776367f, 0.881348f, 0.928223f, 0.951660f,
- 0.966309f, 0.973633f, 0.979492f, 0.983398f, 0.986328f, 0.988281f, 0.989746f, 0.991211f,
- 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f,
- 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000728f, 0.001340f, 0.002533f, 0.003813f, 0.006081f, 0.009750f, 0.015419f,
- 0.025177f, 0.044067f, 0.084473f, 0.179077f, 0.384033f, 0.649902f, 0.818848f, 0.897949f,
- 0.935547f, 0.956055f, 0.967285f, 0.975098f, 0.980957f, 0.983887f, 0.986328f, 0.988281f,
- 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
- 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000609f, 0.000854f, 0.001898f, 0.002781f, 0.004246f, 0.006218f, 0.008835f,
- 0.013504f, 0.021362f, 0.035400f, 0.062347f, 0.121460f, 0.255127f, 0.495361f, 0.726562f,
- 0.852539f, 0.912598f, 0.943359f, 0.959473f, 0.969238f, 0.976562f, 0.981445f, 0.984375f,
- 0.987305f, 0.988770f, 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f,
- 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000244f, 0.000731f, 0.001295f, 0.002159f, 0.003092f, 0.004051f, 0.005836f,
- 0.008560f, 0.011925f, 0.018585f, 0.029373f, 0.048950f, 0.088013f, 0.174194f, 0.354980f,
- 0.604492f, 0.788086f, 0.880371f, 0.925293f, 0.950195f, 0.963867f, 0.972168f, 0.978027f,
- 0.982422f, 0.985840f, 0.987793f, 0.990234f, 0.991699f, 0.992188f, 0.993164f, 0.994141f,
- 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
- 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000114f, 0.000244f, 0.000709f, 0.001089f, 0.001580f, 0.002100f, 0.002848f, 0.004028f,
- 0.005646f, 0.008232f, 0.011276f, 0.016647f, 0.024948f, 0.039215f, 0.067566f, 0.125244f,
- 0.249878f, 0.471436f, 0.698242f, 0.834961f, 0.902344f, 0.937012f, 0.955078f, 0.967773f,
- 0.974609f, 0.979492f, 0.983887f, 0.987305f, 0.988770f, 0.990723f, 0.991699f, 0.992676f,
- 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
- 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000244f, 0.000480f, 0.001081f, 0.001216f, 0.001684f, 0.002287f, 0.003113f,
- 0.004246f, 0.005711f, 0.007412f, 0.010658f, 0.014900f, 0.021408f, 0.033173f, 0.053711f,
- 0.094299f, 0.179688f, 0.351807f, 0.591309f, 0.774902f, 0.871582f, 0.919922f, 0.946289f,
- 0.961426f, 0.971191f, 0.977051f, 0.981934f, 0.984863f, 0.987305f, 0.989258f, 0.991211f,
- 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
- 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000364f, 0.000366f, 0.000729f, 0.001195f, 0.001218f, 0.001693f, 0.002209f,
- 0.003038f, 0.004192f, 0.005249f, 0.006981f, 0.009926f, 0.013405f, 0.019165f, 0.028473f,
- 0.044250f, 0.073975f, 0.134521f, 0.260010f, 0.476562f, 0.696289f, 0.830566f, 0.898438f,
- 0.933594f, 0.954102f, 0.966309f, 0.974609f, 0.979492f, 0.982910f, 0.986328f, 0.988281f,
- 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000226f, 0.000365f, 0.000488f, 0.000731f, 0.001090f, 0.001245f, 0.002028f,
- 0.002169f, 0.003023f, 0.003952f, 0.005043f, 0.006790f, 0.009026f, 0.012276f, 0.016754f,
- 0.024628f, 0.037384f, 0.060120f, 0.104431f, 0.196045f, 0.372803f, 0.604980f, 0.779785f,
- 0.872070f, 0.919922f, 0.945312f, 0.960938f, 0.970703f, 0.977539f, 0.980957f, 0.984863f,
- 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
- 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000364f, 0.000487f, 0.000488f, 0.000608f, 0.001092f, 0.001323f,
- 0.001909f, 0.002028f, 0.002829f, 0.003754f, 0.004940f, 0.006329f, 0.008850f, 0.011353f,
- 0.015572f, 0.022110f, 0.032196f, 0.050293f, 0.083984f, 0.151978f, 0.288574f, 0.507812f,
- 0.715332f, 0.839844f, 0.902832f, 0.936035f, 0.955566f, 0.966797f, 0.974609f, 0.979492f,
- 0.983887f, 0.986816f, 0.988281f, 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994141f,
- 0.994629f, 0.995605f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000341f, 0.000486f, 0.000487f, 0.000591f, 0.000846f, 0.001213f,
- 0.001407f, 0.002018f, 0.002306f, 0.003119f, 0.003736f, 0.004700f, 0.005936f, 0.007858f,
- 0.010498f, 0.013939f, 0.019913f, 0.028564f, 0.043060f, 0.069275f, 0.120972f, 0.225830f,
- 0.416748f, 0.642090f, 0.798828f, 0.881836f, 0.924805f, 0.948730f, 0.962891f, 0.971191f,
- 0.978516f, 0.982422f, 0.985352f, 0.987793f, 0.989746f, 0.991211f, 0.992676f, 0.993164f,
- 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.996582f, 0.997070f,
- 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000121f, 0.000122f, 0.000475f, 0.000486f, 0.000487f, 0.000714f, 0.000913f,
- 0.001296f, 0.001350f, 0.001884f, 0.002163f, 0.002871f, 0.003702f, 0.004578f, 0.005573f,
- 0.007278f, 0.009819f, 0.013039f, 0.017883f, 0.025589f, 0.037445f, 0.058655f, 0.099243f,
- 0.180542f, 0.338867f, 0.563965f, 0.751465f, 0.857422f, 0.912109f, 0.941406f, 0.958496f,
- 0.968262f, 0.976074f, 0.980957f, 0.984375f, 0.986816f, 0.989258f, 0.990723f, 0.992188f,
- 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f,
- 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000242f, 0.000417f, 0.000607f, 0.000602f, 0.000644f,
- 0.001016f, 0.001223f, 0.001337f, 0.002010f, 0.002087f, 0.002752f, 0.003380f, 0.004486f,
- 0.005760f, 0.007523f, 0.009048f, 0.012169f, 0.016312f, 0.022949f, 0.033295f, 0.050812f,
- 0.082886f, 0.146851f, 0.275635f, 0.486572f, 0.696777f, 0.828613f, 0.896484f, 0.933594f,
- 0.953613f, 0.965820f, 0.973633f, 0.979980f, 0.983887f, 0.986328f, 0.988770f, 0.990723f,
- 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
- 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000262f, 0.000463f, 0.000603f, 0.000665f,
- 0.000716f, 0.001069f, 0.001322f, 0.001538f, 0.001895f, 0.002293f, 0.003120f, 0.003323f,
- 0.004166f, 0.005638f, 0.006828f, 0.008942f, 0.011368f, 0.015465f, 0.021057f, 0.029663f,
- 0.044861f, 0.070923f, 0.123169f, 0.228149f, 0.416504f, 0.640137f, 0.797363f, 0.880859f,
- 0.924805f, 0.948730f, 0.963379f, 0.971680f, 0.978516f, 0.982422f, 0.985840f, 0.988281f,
- 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.996094f,
- 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000120f, 0.000172f, 0.000243f, 0.000365f, 0.000475f, 0.000607f,
- 0.000608f, 0.000609f, 0.001013f, 0.001424f, 0.001456f, 0.001904f, 0.002411f, 0.002903f,
- 0.003145f, 0.004314f, 0.004944f, 0.006607f, 0.008156f, 0.010719f, 0.014297f, 0.018906f,
- 0.027069f, 0.040070f, 0.062103f, 0.104858f, 0.191162f, 0.355469f, 0.581543f, 0.762695f,
- 0.863281f, 0.915039f, 0.943848f, 0.960449f, 0.970703f, 0.977051f, 0.981445f, 0.985840f,
- 0.987793f, 0.989746f, 0.991211f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.997070f, 0.997070f, 0.998047f, 0.997559f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000096f, 0.000239f, 0.000241f, 0.000336f, 0.000482f,
- 0.000719f, 0.000729f, 0.000831f, 0.001049f, 0.001552f, 0.001576f, 0.001710f, 0.002373f,
- 0.002846f, 0.003254f, 0.004051f, 0.005035f, 0.006405f, 0.007706f, 0.009987f, 0.013092f,
- 0.017715f, 0.024872f, 0.035980f, 0.055328f, 0.091248f, 0.163330f, 0.305664f, 0.524902f,
- 0.726562f, 0.845215f, 0.906250f, 0.938965f, 0.957031f, 0.969238f, 0.976074f, 0.981445f,
- 0.984863f, 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.995117f,
- 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000118f, 0.000120f, 0.000351f, 0.000364f, 0.000421f,
- 0.000480f, 0.000606f, 0.000728f, 0.000852f, 0.001175f, 0.001535f, 0.001673f, 0.001671f,
- 0.002277f, 0.002743f, 0.003220f, 0.003922f, 0.004868f, 0.005951f, 0.007488f, 0.009430f,
- 0.012527f, 0.016266f, 0.022964f, 0.033142f, 0.049805f, 0.080688f, 0.141846f, 0.265625f,
- 0.473145f, 0.688477f, 0.825684f, 0.897949f, 0.934082f, 0.954102f, 0.966797f, 0.975098f,
- 0.980469f, 0.984375f, 0.987305f, 0.989258f, 0.991211f, 0.992676f, 0.993164f, 0.993652f,
- 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000058f, 0.000235f, 0.000360f, 0.000243f,
- 0.000440f, 0.000583f, 0.000847f, 0.000851f, 0.000852f, 0.001189f, 0.001411f, 0.001645f,
- 0.001898f, 0.002417f, 0.002617f, 0.003435f, 0.003695f, 0.004616f, 0.005733f, 0.007278f,
- 0.009216f, 0.012016f, 0.015701f, 0.021561f, 0.030396f, 0.045746f, 0.073120f, 0.125732f,
- 0.233521f, 0.428223f, 0.653320f, 0.807617f, 0.887695f, 0.929688f, 0.951660f, 0.965820f,
- 0.974121f, 0.980469f, 0.984375f, 0.986816f, 0.989746f, 0.991211f, 0.992676f, 0.993164f,
- 0.994141f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
- 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000237f, 0.000237f, 0.000362f,
- 0.000365f, 0.000558f, 0.000814f, 0.000727f, 0.000729f, 0.000935f, 0.001189f, 0.001403f,
- 0.001569f, 0.001989f, 0.002216f, 0.002533f, 0.003307f, 0.003906f, 0.004463f, 0.005646f,
- 0.006908f, 0.008980f, 0.011230f, 0.014755f, 0.020020f, 0.028320f, 0.041931f, 0.065979f,
- 0.113098f, 0.209229f, 0.389648f, 0.620605f, 0.789551f, 0.879395f, 0.924805f, 0.950684f,
- 0.964844f, 0.974121f, 0.979980f, 0.983398f, 0.987305f, 0.989258f, 0.991211f, 0.992676f,
- 0.993652f, 0.993652f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f, 0.998047f,
- 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000121f,
- 0.000241f, 0.000486f, 0.000575f, 0.000707f, 0.000726f, 0.000971f, 0.000849f, 0.000966f,
- 0.001350f, 0.001660f, 0.001678f, 0.002224f, 0.002483f, 0.003197f, 0.003611f, 0.004200f,
- 0.005318f, 0.006744f, 0.008476f, 0.010506f, 0.014145f, 0.019089f, 0.026627f, 0.039001f,
- 0.061096f, 0.103333f, 0.189819f, 0.358887f, 0.591309f, 0.773438f, 0.872559f, 0.922363f,
- 0.948730f, 0.963867f, 0.973145f, 0.979492f, 0.983887f, 0.986816f, 0.989258f, 0.991211f,
- 0.992188f, 0.993164f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.997070f, 0.997559f,
- 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000175f, 0.000361f,
- 0.000481f, 0.000485f, 0.000364f, 0.000562f, 0.000703f, 0.000827f, 0.000842f, 0.000972f,
- 0.001172f, 0.001321f, 0.001675f, 0.001684f, 0.002153f, 0.002455f, 0.003122f, 0.003391f,
- 0.004177f, 0.005314f, 0.006325f, 0.007896f, 0.010368f, 0.013527f, 0.018082f, 0.025162f,
- 0.037140f, 0.057343f, 0.095886f, 0.175659f, 0.334473f, 0.567871f, 0.760742f, 0.866699f,
- 0.919922f, 0.947754f, 0.963379f, 0.972656f, 0.979492f, 0.984375f, 0.987305f, 0.989258f,
- 0.991211f, 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997070f,
- 0.998047f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000325f,
- 0.000311f, 0.000243f, 0.000484f, 0.000486f, 0.000536f, 0.000698f, 0.000723f, 0.000844f,
- 0.000972f, 0.001081f, 0.001312f, 0.001658f, 0.001914f, 0.001932f, 0.002390f, 0.003017f,
- 0.003668f, 0.004353f, 0.005199f, 0.006336f, 0.007812f, 0.009972f, 0.012802f, 0.017029f,
- 0.024200f, 0.035034f, 0.053833f, 0.090027f, 0.164185f, 0.316162f, 0.549805f, 0.751465f,
- 0.863281f, 0.918457f, 0.947266f, 0.963379f, 0.974121f, 0.979492f, 0.984375f, 0.987793f,
- 0.989746f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.995605f, 0.996094f, 0.997070f,
- 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f,
- 0.000231f, 0.000453f, 0.000480f, 0.000484f, 0.000485f, 0.000486f, 0.000917f, 0.000963f,
- 0.000969f, 0.000970f, 0.001043f, 0.001288f, 0.001523f, 0.001684f, 0.001885f, 0.002464f,
- 0.002531f, 0.003565f, 0.004124f, 0.004745f, 0.006077f, 0.007580f, 0.009605f, 0.012634f,
- 0.016953f, 0.023346f, 0.033386f, 0.051697f, 0.085632f, 0.156250f, 0.303955f, 0.537598f,
- 0.746582f, 0.860840f, 0.918457f, 0.947754f, 0.963867f, 0.973633f, 0.979980f, 0.984863f,
- 0.987793f, 0.990234f, 0.991699f, 0.993652f, 0.994141f, 0.995117f, 0.996094f, 0.996582f,
- 0.997070f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000235f, 0.000239f, 0.000359f, 0.000484f, 0.000485f, 0.000486f, 0.000628f,
- 0.000957f, 0.000967f, 0.000969f, 0.001065f, 0.001288f, 0.001602f, 0.001850f, 0.001995f,
- 0.002409f, 0.002523f, 0.003462f, 0.003838f, 0.004993f, 0.005917f, 0.007233f, 0.009338f,
- 0.012230f, 0.015610f, 0.022415f, 0.032288f, 0.049805f, 0.082947f, 0.151489f, 0.296631f,
- 0.532715f, 0.745117f, 0.862793f, 0.919434f, 0.948242f, 0.964844f, 0.974609f, 0.980957f,
- 0.985352f, 0.988281f, 0.990723f, 0.992676f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000187f, 0.000437f, 0.000473f, 0.000483f, 0.000485f, 0.000606f,
- 0.000583f, 0.000711f, 0.000772f, 0.000968f, 0.001107f, 0.001287f, 0.001434f, 0.001662f,
- 0.001984f, 0.002449f, 0.002634f, 0.003145f, 0.003777f, 0.004410f, 0.005722f, 0.007114f,
- 0.008926f, 0.011696f, 0.016006f, 0.021683f, 0.031342f, 0.048309f, 0.080750f, 0.149170f,
- 0.294678f, 0.534668f, 0.749512f, 0.866211f, 0.922363f, 0.950684f, 0.966309f, 0.975586f,
- 0.981934f, 0.985840f, 0.989258f, 0.991699f, 0.992676f, 0.994141f, 0.994629f, 0.996094f,
- 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000247f, 0.000238f, 0.000407f, 0.000482f, 0.000484f,
- 0.000604f, 0.000869f, 0.000909f, 0.000721f, 0.000955f, 0.001000f, 0.001241f, 0.001342f,
- 0.001655f, 0.001721f, 0.002329f, 0.002623f, 0.003086f, 0.003677f, 0.004349f, 0.005600f,
- 0.006962f, 0.008835f, 0.011581f, 0.015274f, 0.021286f, 0.030884f, 0.047760f, 0.079895f,
- 0.148926f, 0.298584f, 0.543945f, 0.758301f, 0.872559f, 0.925781f, 0.953125f, 0.967773f,
- 0.977051f, 0.982910f, 0.986816f, 0.989258f, 0.991211f, 0.993164f, 0.994629f, 0.995605f,
- 0.996094f, 0.996582f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000237f, 0.000410f, 0.000472f, 0.000481f,
- 0.000483f, 0.000485f, 0.000687f, 0.000913f, 0.000956f, 0.000966f, 0.000997f, 0.001341f,
- 0.001415f, 0.001813f, 0.002029f, 0.002043f, 0.002594f, 0.003210f, 0.003641f, 0.004734f,
- 0.005356f, 0.006882f, 0.008675f, 0.011360f, 0.014816f, 0.020920f, 0.030380f, 0.047485f,
- 0.080200f, 0.151733f, 0.308105f, 0.561523f, 0.772949f, 0.881348f, 0.931152f, 0.956055f,
- 0.969727f, 0.978516f, 0.983887f, 0.987793f, 0.990234f, 0.992188f, 0.993652f, 0.994629f,
- 0.995605f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000254f, 0.000345f, 0.000468f,
- 0.000585f, 0.000482f, 0.000603f, 0.000485f, 0.000862f, 0.000928f, 0.000965f, 0.001174f,
- 0.001162f, 0.001405f, 0.001761f, 0.002016f, 0.002182f, 0.002733f, 0.002831f, 0.003504f,
- 0.004456f, 0.005440f, 0.006775f, 0.008553f, 0.011055f, 0.014694f, 0.020859f, 0.030334f,
- 0.047852f, 0.081970f, 0.157593f, 0.325439f, 0.586914f, 0.790527f, 0.890137f, 0.936523f,
- 0.959473f, 0.973145f, 0.980469f, 0.985352f, 0.988770f, 0.990723f, 0.992676f, 0.994141f,
- 0.995117f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000241f, 0.000237f, 0.000340f,
- 0.000457f, 0.000580f, 0.000481f, 0.000601f, 0.000605f, 0.000742f, 0.000951f, 0.000953f,
- 0.001131f, 0.001257f, 0.001396f, 0.001730f, 0.001936f, 0.002102f, 0.002682f, 0.002762f,
- 0.003733f, 0.004425f, 0.005344f, 0.006516f, 0.008354f, 0.010971f, 0.014793f, 0.020859f,
- 0.030640f, 0.048859f, 0.085144f, 0.167358f, 0.350586f, 0.620117f, 0.811035f, 0.900391f,
- 0.942383f, 0.963379f, 0.975098f, 0.981934f, 0.986816f, 0.989746f, 0.992188f, 0.993164f,
- 0.994629f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000131f,
- 0.000301f, 0.000430f, 0.000470f, 0.000593f, 0.000571f, 0.000587f, 0.000693f, 0.000906f,
- 0.000959f, 0.000965f, 0.001094f, 0.001364f, 0.001522f, 0.001783f, 0.002094f, 0.002615f,
- 0.003038f, 0.003365f, 0.004307f, 0.005135f, 0.006493f, 0.008347f, 0.011055f, 0.014824f,
- 0.020844f, 0.031204f, 0.050507f, 0.090027f, 0.182129f, 0.385498f, 0.659668f, 0.834473f,
- 0.913086f, 0.949219f, 0.967285f, 0.978027f, 0.983887f, 0.987793f, 0.991211f, 0.992188f,
- 0.994141f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000189f, 0.000122f, 0.000122f,
- 0.000241f, 0.000295f, 0.000425f, 0.000457f, 0.000592f, 0.000481f, 0.000603f, 0.000697f,
- 0.000926f, 0.000943f, 0.000960f, 0.001022f, 0.001435f, 0.001632f, 0.001658f, 0.002024f,
- 0.002468f, 0.003010f, 0.003210f, 0.004124f, 0.005219f, 0.006351f, 0.008163f, 0.010933f,
- 0.015030f, 0.021271f, 0.032257f, 0.053009f, 0.097534f, 0.203003f, 0.432373f, 0.704102f,
- 0.858887f, 0.924805f, 0.955566f, 0.970703f, 0.979492f, 0.985840f, 0.989258f, 0.991699f,
- 0.993164f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000214f,
- 0.000201f, 0.000239f, 0.000241f, 0.000383f, 0.000461f, 0.000474f, 0.000479f, 0.000598f,
- 0.000736f, 0.000905f, 0.000947f, 0.001072f, 0.001180f, 0.001376f, 0.001572f, 0.001752f,
- 0.001900f, 0.002258f, 0.002792f, 0.003487f, 0.004055f, 0.005161f, 0.006424f, 0.008209f,
- 0.010933f, 0.015030f, 0.021942f, 0.033630f, 0.056671f, 0.107666f, 0.233276f, 0.492188f,
- 0.752441f, 0.881836f, 0.937012f, 0.961914f, 0.975098f, 0.982910f, 0.987305f, 0.990234f,
- 0.992676f, 0.994629f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000132f,
- 0.000224f, 0.000129f, 0.000237f, 0.000240f, 0.000337f, 0.000430f, 0.000468f, 0.000579f,
- 0.000593f, 0.000602f, 0.000881f, 0.000936f, 0.000956f, 0.000963f, 0.001282f, 0.001519f,
- 0.001607f, 0.001852f, 0.002150f, 0.002737f, 0.003508f, 0.003990f, 0.005077f, 0.006516f,
- 0.008179f, 0.011185f, 0.015511f, 0.022446f, 0.035614f, 0.061859f, 0.122681f, 0.275879f,
- 0.563965f, 0.798828f, 0.903809f, 0.946777f, 0.967773f, 0.978516f, 0.984863f, 0.988770f,
- 0.991699f, 0.993652f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000149f, 0.000122f, 0.000207f, 0.000371f, 0.000430f, 0.000573f,
- 0.000591f, 0.000598f, 0.000597f, 0.000804f, 0.000901f, 0.000948f, 0.001053f, 0.001083f,
- 0.001376f, 0.001584f, 0.001878f, 0.002331f, 0.002529f, 0.003376f, 0.003944f, 0.005230f,
- 0.006504f, 0.008537f, 0.011459f, 0.015747f, 0.024002f, 0.038361f, 0.069458f, 0.144409f,
- 0.336914f, 0.644043f, 0.841797f, 0.922363f, 0.957520f, 0.972656f, 0.981934f, 0.987305f,
- 0.990234f, 0.993164f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000230f, 0.000234f, 0.000235f, 0.000268f, 0.000400f,
- 0.000448f, 0.000585f, 0.000590f, 0.000599f, 0.000641f, 0.000788f, 0.000930f, 0.000968f,
- 0.001107f, 0.001251f, 0.001656f, 0.001701f, 0.002047f, 0.002691f, 0.003437f, 0.003998f,
- 0.004829f, 0.006329f, 0.008492f, 0.011757f, 0.016525f, 0.025345f, 0.042297f, 0.080200f,
- 0.177490f, 0.420654f, 0.724121f, 0.878906f, 0.938965f, 0.964355f, 0.977539f, 0.984863f,
- 0.989746f, 0.992188f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000214f, 0.000235f, 0.000228f, 0.000240f,
- 0.000429f, 0.000439f, 0.000574f, 0.000654f, 0.000583f, 0.000493f, 0.000788f, 0.000813f,
- 0.000947f, 0.001062f, 0.001225f, 0.001569f, 0.001721f, 0.002048f, 0.002844f, 0.002979f,
- 0.003902f, 0.004997f, 0.006454f, 0.008698f, 0.012192f, 0.018143f, 0.027634f, 0.047913f,
- 0.095886f, 0.228394f, 0.526855f, 0.796875f, 0.910156f, 0.953125f, 0.973145f, 0.982422f,
- 0.987793f, 0.991699f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000236f,
- 0.000232f, 0.000299f, 0.000446f, 0.000417f, 0.000466f, 0.000580f, 0.000508f, 0.000710f,
- 0.000800f, 0.000940f, 0.000954f, 0.001228f, 0.001496f, 0.001631f, 0.002043f, 0.002798f,
- 0.003359f, 0.004139f, 0.004951f, 0.006680f, 0.008995f, 0.012764f, 0.018860f, 0.030823f,
- 0.056061f, 0.120911f, 0.307617f, 0.645508f, 0.855957f, 0.934082f, 0.964355f, 0.978516f,
- 0.985840f, 0.990234f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000226f,
- 0.000122f, 0.000226f, 0.000373f, 0.000272f, 0.000325f, 0.000460f, 0.000471f, 0.000477f,
- 0.000673f, 0.000877f, 0.000929f, 0.000951f, 0.001129f, 0.001446f, 0.001614f, 0.002096f,
- 0.002619f, 0.002939f, 0.003941f, 0.005363f, 0.006844f, 0.009491f, 0.013596f, 0.020905f,
- 0.035370f, 0.068420f, 0.161743f, 0.426270f, 0.755859f, 0.900879f, 0.952148f, 0.973145f,
- 0.983398f, 0.989746f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000111f, 0.000236f, 0.000297f, 0.000368f, 0.000449f, 0.000467f,
- 0.000588f, 0.000641f, 0.000813f, 0.000924f, 0.001035f, 0.001124f, 0.001348f, 0.001764f,
- 0.001922f, 0.002439f, 0.003160f, 0.004005f, 0.005280f, 0.007107f, 0.010109f, 0.014748f,
- 0.023148f, 0.041595f, 0.088440f, 0.232910f, 0.578125f, 0.841797f, 0.933594f, 0.965820f,
- 0.980469f, 0.987305f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000014f, 0.000011f, 0.000116f, 0.000148f, 0.000128f, 0.000369f, 0.000418f,
- 0.000563f, 0.000470f, 0.000592f, 0.000776f, 0.000901f, 0.000937f, 0.001112f, 0.001348f,
- 0.001743f, 0.001904f, 0.002470f, 0.003187f, 0.003986f, 0.005360f, 0.007557f, 0.010674f,
- 0.016068f, 0.026871f, 0.051666f, 0.122925f, 0.356445f, 0.729492f, 0.901855f, 0.955078f,
- 0.976074f, 0.985840f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
- 0.000122f, 0.000122f, 0.000121f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000028f, 0.000019f, 0.000014f, 0.000011f, 0.000033f, 0.000118f, 0.000247f, 0.000305f,
- 0.000412f, 0.000447f, 0.000576f, 0.000587f, 0.000693f, 0.000850f, 0.000949f, 0.001083f,
- 0.001319f, 0.001557f, 0.001957f, 0.002424f, 0.003340f, 0.004417f, 0.005688f, 0.007774f,
- 0.011497f, 0.017731f, 0.032257f, 0.068604f, 0.189575f, 0.541992f, 0.843262f, 0.938477f,
- 0.970703f, 0.983887f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000121f, 0.000118f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000067f,
- 0.000042f, 0.000028f, 0.000020f, 0.000015f, 0.000066f, 0.000009f, 0.000101f, 0.000118f,
- 0.000260f, 0.000358f, 0.000520f, 0.000456f, 0.000563f, 0.000711f, 0.000872f, 0.000980f,
- 0.001059f, 0.001309f, 0.001699f, 0.002066f, 0.002708f, 0.003248f, 0.004166f, 0.005836f,
- 0.008224f, 0.012619f, 0.021484f, 0.041260f, 0.101074f, 0.323486f, 0.733887f, 0.912109f,
- 0.962402f, 0.980957f, 0.995117f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000000f, 0.000000f, 0.000119f, 0.000119f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000105f,
- 0.000067f, 0.000042f, 0.000029f, 0.000022f, 0.000015f, 0.000011f, 0.000040f, 0.000033f,
- 0.000153f, 0.000204f, 0.000313f, 0.000501f, 0.000554f, 0.000575f, 0.000585f, 0.000778f,
- 0.000925f, 0.000980f, 0.001245f, 0.001634f, 0.001989f, 0.002413f, 0.003433f, 0.004028f,
- 0.005989f, 0.008911f, 0.014374f, 0.026443f, 0.057495f, 0.170166f, 0.549805f, 0.864746f,
- 0.951172f, 0.977051f, 0.994629f, 0.994629f, 0.994629f, 0.994629f, 0.995605f, 0.994629f,
- 0.000000f, 0.000046f, 0.000088f, 0.000118f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000108f, 0.000069f, 0.000047f, 0.000030f, 0.000022f, 0.000016f, 0.000012f, 0.000052f,
- 0.000081f, 0.000100f, 0.000184f, 0.000226f, 0.000400f, 0.000467f, 0.000452f, 0.000597f,
- 0.000807f, 0.000895f, 0.000942f, 0.001219f, 0.001611f, 0.002022f, 0.002352f, 0.003222f,
- 0.004177f, 0.006481f, 0.009850f, 0.017517f, 0.034668f, 0.090637f, 0.331055f, 0.776367f,
- 0.932129f, 0.972656f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994629f,
- 0.000000f, 0.000000f, 0.000000f, 0.000107f, 0.000115f, 0.000112f, 0.000119f, 0.000118f,
- 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000117f, 0.000072f, 0.000049f, 0.000032f, 0.000023f, 0.000017f, 0.000013f,
- 0.000011f, 0.000008f, 0.000075f, 0.000151f, 0.000207f, 0.000305f, 0.000509f, 0.000499f,
- 0.000560f, 0.000704f, 0.000863f, 0.000917f, 0.001220f, 0.001505f, 0.001740f, 0.002174f,
- 0.003153f, 0.004559f, 0.007095f, 0.011826f, 0.022247f, 0.051147f, 0.173462f, 0.618652f,
- 0.902344f, 0.966309f, 0.993164f, 0.993652f, 0.992676f, 0.992676f, 0.993164f, 0.993164f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000060f, 0.000102f, 0.000113f,
- 0.000117f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000078f, 0.000052f, 0.000038f, 0.000027f, 0.000019f,
- 0.000015f, 0.000011f, 0.000054f, 0.000007f, 0.000085f, 0.000108f, 0.000258f, 0.000466f,
- 0.000533f, 0.000560f, 0.000662f, 0.000849f, 0.000856f, 0.000965f, 0.001180f, 0.001678f,
- 0.002075f, 0.003193f, 0.005016f, 0.008095f, 0.014343f, 0.030899f, 0.090820f, 0.401367f,
- 0.848145f, 0.956543f, 0.992188f, 0.992188f, 0.992188f, 0.992676f, 0.991699f, 0.992188f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000059f, 0.000096f,
- 0.000107f, 0.000112f, 0.000115f, 0.000116f, 0.000117f, 0.000118f, 0.000118f, 0.000119f,
- 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000088f, 0.000059f, 0.000041f, 0.000031f,
- 0.000022f, 0.000017f, 0.000013f, 0.000010f, 0.000056f, 0.000091f, 0.000183f, 0.000201f,
- 0.000309f, 0.000506f, 0.000547f, 0.000525f, 0.000629f, 0.000613f, 0.000817f, 0.001012f,
- 0.001640f, 0.002420f, 0.003588f, 0.005520f, 0.009453f, 0.019119f, 0.050415f, 0.214722f,
- 0.751465f, 0.943848f, 0.990723f, 0.990723f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000055f, 0.000095f, 0.000103f, 0.000105f, 0.000112f, 0.000114f, 0.000115f,
- 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f,
- 0.000119f, 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000105f, 0.000069f, 0.000048f,
- 0.000035f, 0.000025f, 0.000019f, 0.000015f, 0.000011f, 0.000014f, 0.000008f, 0.000071f,
- 0.000193f, 0.000311f, 0.000315f, 0.000524f, 0.000483f, 0.000558f, 0.000591f, 0.000705f,
- 0.000950f, 0.001389f, 0.002428f, 0.003494f, 0.006321f, 0.012306f, 0.029480f, 0.108948f,
- 0.581543f, 0.924316f, 0.989746f, 0.989746f, 0.989258f, 0.989746f, 0.989258f, 0.989746f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000069f, 0.000096f, 0.000103f, 0.000107f,
- 0.000109f, 0.000112f, 0.000113f, 0.000115f, 0.000115f, 0.000116f, 0.000117f, 0.000117f,
- 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000119f, 0.000119f, 0.000119f, 0.000084f,
- 0.000061f, 0.000042f, 0.000031f, 0.000023f, 0.000018f, 0.000014f, 0.000011f, 0.000009f,
- 0.000095f, 0.000127f, 0.000223f, 0.000402f, 0.000432f, 0.000399f, 0.000494f, 0.000535f,
- 0.000557f, 0.000933f, 0.001474f, 0.002300f, 0.004192f, 0.007919f, 0.017838f, 0.057068f,
- 0.360840f, 0.890625f, 0.986816f, 0.987793f, 0.987305f, 0.987305f, 0.987793f, 0.987305f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000035f, 0.000041f,
- 0.000088f, 0.000098f, 0.000103f, 0.000106f, 0.000110f, 0.000110f, 0.000113f, 0.000113f,
- 0.000115f, 0.000116f, 0.000116f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000118f,
- 0.000111f, 0.000074f, 0.000053f, 0.000038f, 0.000029f, 0.000022f, 0.000016f, 0.000013f,
- 0.000010f, 0.000008f, 0.000073f, 0.000152f, 0.000296f, 0.000369f, 0.000365f, 0.000437f,
- 0.000507f, 0.000661f, 0.000876f, 0.001451f, 0.002531f, 0.004898f, 0.010384f, 0.031113f,
- 0.183838f, 0.833008f, 0.984375f, 0.984863f, 0.984863f, 0.984375f, 0.984863f, 0.984863f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000024f, 0.000044f, 0.000073f, 0.000087f, 0.000097f, 0.000102f, 0.000105f,
- 0.000108f, 0.000110f, 0.000111f, 0.000113f, 0.000114f, 0.000114f, 0.000115f, 0.000115f,
- 0.000116f, 0.000116f, 0.000101f, 0.000070f, 0.000052f, 0.000037f, 0.000027f, 0.000021f,
- 0.000016f, 0.000013f, 0.000010f, 0.000008f, 0.000083f, 0.000183f, 0.000352f, 0.000355f,
- 0.000362f, 0.000365f, 0.000528f, 0.000790f, 0.001469f, 0.003029f, 0.005970f, 0.017242f,
- 0.089050f, 0.728516f, 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.980957f, 0.981445f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000033f, 0.000041f, 0.000073f,
- 0.000083f, 0.000088f, 0.000097f, 0.000102f, 0.000105f, 0.000108f, 0.000108f, 0.000111f,
- 0.000112f, 0.000113f, 0.000113f, 0.000114f, 0.000097f, 0.000068f, 0.000049f, 0.000038f,
- 0.000028f, 0.000021f, 0.000016f, 0.000013f, 0.000010f, 0.000056f, 0.000151f, 0.000243f,
- 0.000264f, 0.000221f, 0.000328f, 0.000449f, 0.000850f, 0.001612f, 0.003340f, 0.009361f,
- 0.043121f, 0.548340f, 0.976074f, 0.976562f, 0.975586f, 0.976074f, 0.976074f, 0.976562f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000019f, 0.000052f, 0.000065f, 0.000077f, 0.000088f, 0.000094f, 0.000098f,
- 0.000100f, 0.000104f, 0.000106f, 0.000108f, 0.000109f, 0.000110f, 0.000095f, 0.000069f,
- 0.000052f, 0.000037f, 0.000028f, 0.000021f, 0.000017f, 0.000013f, 0.000025f, 0.000063f,
- 0.000195f, 0.000233f, 0.000205f, 0.000264f, 0.000401f, 0.000789f, 0.001532f, 0.004520f,
- 0.020844f, 0.321289f, 0.969238f, 0.968750f, 0.969238f, 0.968750f, 0.969238f, 0.969238f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000018f, 0.000039f, 0.000053f,
- 0.000066f, 0.000079f, 0.000086f, 0.000090f, 0.000096f, 0.000100f, 0.000102f, 0.000105f,
- 0.000098f, 0.000074f, 0.000053f, 0.000041f, 0.000031f, 0.000023f, 0.000017f, 0.000013f,
- 0.000028f, 0.000139f, 0.000189f, 0.000179f, 0.000219f, 0.000333f, 0.000840f, 0.002119f,
- 0.009193f, 0.144775f, 0.958496f, 0.958496f, 0.958008f, 0.958496f, 0.958008f, 0.958008f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000025f, 0.000040f, 0.000052f, 0.000067f, 0.000077f, 0.000082f,
- 0.000089f, 0.000093f, 0.000097f, 0.000079f, 0.000059f, 0.000044f, 0.000033f, 0.000024f,
- 0.000018f, 0.000014f, 0.000034f, 0.000084f, 0.000157f, 0.000199f, 0.000309f, 0.000817f,
- 0.003424f, 0.054901f, 0.940918f, 0.940918f, 0.940918f, 0.940918f, 0.941406f, 0.940430f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000021f,
- 0.000040f, 0.000054f, 0.000063f, 0.000072f, 0.000078f, 0.000085f, 0.000065f, 0.000049f,
- 0.000036f, 0.000026f, 0.000019f, 0.000014f, 0.000042f, 0.000114f, 0.000122f, 0.000276f,
- 0.001024f, 0.016357f, 0.912109f, 0.912598f, 0.911621f, 0.912598f, 0.911621f, 0.913086f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000016f, 0.000032f, 0.000045f, 0.000056f,
- 0.000065f, 0.000054f, 0.000039f, 0.000028f, 0.000019f, 0.000013f, 0.000049f, 0.000079f,
- 0.000226f, 0.003199f, 0.860840f, 0.859863f, 0.860352f, 0.860840f, 0.860840f, 0.860352f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000004f, 0.000021f, 0.000035f, 0.000040f, 0.000027f, 0.000018f, 0.000013f,
- 0.000033f, 0.000333f, 0.764160f, 0.765137f, 0.764648f, 0.764648f, 0.764648f, 0.765137f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f,
- 0.000011f, 0.000009f, 0.600586f, 0.602051f, 0.602051f, 0.601562f, 0.601074f, 0.601074f,
- },
- {
- 0.142456f, 0.713867f, 0.883789f, 0.933105f, 0.953613f, 0.964844f, 0.972168f, 0.977539f,
- 0.980957f, 0.983398f, 0.985352f, 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991699f,
- 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
- 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.012886f, 0.087646f, 0.360840f, 0.709473f, 0.859863f, 0.916992f, 0.943848f, 0.958496f,
- 0.967773f, 0.973633f, 0.978516f, 0.980957f, 0.984375f, 0.986328f, 0.987793f, 0.988770f,
- 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.994629f,
- 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f,
- 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.003895f, 0.020126f, 0.063599f, 0.188721f, 0.464844f, 0.727539f, 0.853027f, 0.909668f,
- 0.938477f, 0.954590f, 0.965332f, 0.971680f, 0.976562f, 0.979980f, 0.982910f, 0.985840f,
- 0.986816f, 0.988770f, 0.990234f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
- 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
- 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.002062f, 0.008438f, 0.021774f, 0.049713f, 0.117676f, 0.279541f, 0.541016f, 0.751465f,
- 0.855469f, 0.909180f, 0.936035f, 0.952637f, 0.963379f, 0.970703f, 0.975098f, 0.979492f,
- 0.982910f, 0.984863f, 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.990723f, 0.992188f,
- 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f,
- 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.001335f, 0.004597f, 0.010628f, 0.020844f, 0.040283f, 0.082764f, 0.177612f, 0.366211f,
- 0.605469f, 0.773926f, 0.863281f, 0.910156f, 0.936035f, 0.952148f, 0.962402f, 0.969727f,
- 0.975098f, 0.979004f, 0.982422f, 0.984863f, 0.986328f, 0.988281f, 0.988770f, 0.989746f,
- 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f,
- 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.996582f, 0.997070f, 0.997559f,
- 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f,
- 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000851f, 0.002769f, 0.006130f, 0.010994f, 0.019394f, 0.034943f, 0.063293f, 0.122253f,
- 0.244019f, 0.448242f, 0.660156f, 0.798828f, 0.872559f, 0.914062f, 0.937988f, 0.954102f,
- 0.961914f, 0.970215f, 0.974609f, 0.978516f, 0.981934f, 0.984375f, 0.986328f, 0.987793f,
- 0.988770f, 0.989746f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
- 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
- 0.997070f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000466f, 0.001933f, 0.003809f, 0.007095f, 0.011353f, 0.018204f, 0.030029f, 0.050568f,
- 0.090759f, 0.170898f, 0.318848f, 0.526367f, 0.708496f, 0.820801f, 0.884277f, 0.918457f,
- 0.940918f, 0.954102f, 0.963867f, 0.970215f, 0.975098f, 0.978516f, 0.981934f, 0.984863f,
- 0.986328f, 0.988281f, 0.988770f, 0.990234f, 0.991211f, 0.991699f, 0.993164f, 0.993652f,
- 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
- 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000487f, 0.001685f, 0.002766f, 0.004467f, 0.007305f, 0.011215f, 0.017136f, 0.026489f,
- 0.042419f, 0.071716f, 0.125244f, 0.228271f, 0.399658f, 0.599609f, 0.751953f, 0.842773f,
- 0.894531f, 0.924805f, 0.943359f, 0.955566f, 0.965820f, 0.971191f, 0.976562f, 0.979980f,
- 0.981934f, 0.984863f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992188f,
- 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f,
- 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000965f, 0.002024f, 0.003202f, 0.005009f, 0.007050f, 0.011070f, 0.015869f,
- 0.023987f, 0.036835f, 0.058563f, 0.097168f, 0.169800f, 0.297852f, 0.484131f, 0.664062f,
- 0.789062f, 0.861816f, 0.905273f, 0.930176f, 0.947266f, 0.958984f, 0.967285f, 0.972168f,
- 0.976562f, 0.980469f, 0.982910f, 0.984863f, 0.986816f, 0.988770f, 0.989746f, 0.990723f,
- 0.992188f, 0.992188f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
- 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000974f, 0.001576f, 0.002403f, 0.003510f, 0.005344f, 0.007332f, 0.010567f,
- 0.015099f, 0.022064f, 0.032104f, 0.048706f, 0.078003f, 0.130249f, 0.224243f, 0.378174f,
- 0.566406f, 0.720703f, 0.820312f, 0.879883f, 0.915039f, 0.936523f, 0.951660f, 0.961426f,
- 0.968262f, 0.974121f, 0.978027f, 0.980957f, 0.983887f, 0.985840f, 0.987793f, 0.989258f,
- 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
- 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000240f, 0.000609f, 0.001096f, 0.001580f, 0.002674f, 0.004131f, 0.005245f, 0.007660f,
- 0.010757f, 0.014221f, 0.019775f, 0.028381f, 0.041870f, 0.064697f, 0.103638f, 0.173706f,
- 0.293945f, 0.466553f, 0.642090f, 0.769531f, 0.849121f, 0.895996f, 0.924316f, 0.942871f,
- 0.956055f, 0.963867f, 0.970703f, 0.975098f, 0.979004f, 0.981934f, 0.984863f, 0.986328f,
- 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f,
- 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000000f, 0.000608f, 0.001062f, 0.001268f, 0.002001f, 0.003099f, 0.003937f, 0.005379f,
- 0.007595f, 0.010078f, 0.013176f, 0.018524f, 0.025787f, 0.036896f, 0.054932f, 0.085327f,
- 0.137573f, 0.229980f, 0.376953f, 0.555664f, 0.708984f, 0.810547f, 0.873047f, 0.909180f,
- 0.933594f, 0.948730f, 0.959961f, 0.967285f, 0.973145f, 0.977539f, 0.980469f, 0.983398f,
- 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
- 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
- 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000606f, 0.000609f, 0.001317f, 0.001564f, 0.002674f, 0.003273f, 0.004402f,
- 0.005630f, 0.007141f, 0.009514f, 0.012398f, 0.016678f, 0.023331f, 0.032776f, 0.047363f,
- 0.071594f, 0.112610f, 0.183960f, 0.303711f, 0.470215f, 0.639648f, 0.766113f, 0.844727f,
- 0.892090f, 0.921875f, 0.941895f, 0.954590f, 0.963379f, 0.970215f, 0.975098f, 0.979004f,
- 0.981934f, 0.984863f, 0.986328f, 0.987793f, 0.989746f, 0.991211f, 0.991699f, 0.992676f,
- 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f,
- 0.996582f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000244f, 0.000727f, 0.000803f, 0.001575f, 0.002035f, 0.002821f, 0.003527f,
- 0.004475f, 0.005421f, 0.007023f, 0.009491f, 0.011879f, 0.015976f, 0.021530f, 0.029587f,
- 0.041809f, 0.061737f, 0.094360f, 0.150146f, 0.246460f, 0.393066f, 0.566406f, 0.712891f,
- 0.812500f, 0.872070f, 0.909180f, 0.933105f, 0.948242f, 0.959961f, 0.967773f, 0.972656f,
- 0.977539f, 0.980957f, 0.982910f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.991211f,
- 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
- 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000244f, 0.000244f, 0.000471f, 0.000727f, 0.000967f, 0.001572f, 0.002161f, 0.002680f,
- 0.003246f, 0.004337f, 0.005241f, 0.006950f, 0.009087f, 0.011497f, 0.015038f, 0.019913f,
- 0.026688f, 0.037537f, 0.054352f, 0.080383f, 0.125122f, 0.202515f, 0.327148f, 0.493652f,
- 0.656250f, 0.774414f, 0.849609f, 0.895508f, 0.923828f, 0.942383f, 0.954590f, 0.963867f,
- 0.971191f, 0.975586f, 0.979004f, 0.982422f, 0.984863f, 0.987305f, 0.988281f, 0.989746f,
- 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
- 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
- 0.000121f, 0.000244f, 0.000244f, 0.000715f, 0.001089f, 0.001278f, 0.001781f, 0.002275f,
- 0.002548f, 0.003334f, 0.004150f, 0.005314f, 0.006824f, 0.008430f, 0.011200f, 0.014145f,
- 0.018631f, 0.024750f, 0.033905f, 0.047760f, 0.069885f, 0.106445f, 0.169312f, 0.273682f,
- 0.426270f, 0.596191f, 0.732422f, 0.823242f, 0.879883f, 0.914062f, 0.936035f, 0.950684f,
- 0.960938f, 0.968750f, 0.973633f, 0.978516f, 0.981934f, 0.984375f, 0.986328f, 0.988281f,
- 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
- 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999023f,
- 0.000241f, 0.000244f, 0.000365f, 0.000600f, 0.000961f, 0.000972f, 0.001621f, 0.001697f,
- 0.002274f, 0.002684f, 0.003359f, 0.004238f, 0.005573f, 0.006691f, 0.008057f, 0.010529f,
- 0.013832f, 0.017593f, 0.022812f, 0.031174f, 0.042786f, 0.061462f, 0.092407f, 0.143799f,
- 0.231201f, 0.366943f, 0.535645f, 0.688477f, 0.794922f, 0.861816f, 0.902832f, 0.928711f,
- 0.945801f, 0.957520f, 0.966797f, 0.972656f, 0.976562f, 0.980469f, 0.983398f, 0.985840f,
- 0.987793f, 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
- 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
- 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000243f, 0.000365f, 0.000365f, 0.000798f, 0.000968f, 0.001249f, 0.001528f,
- 0.001798f, 0.002457f, 0.002798f, 0.003494f, 0.004353f, 0.005306f, 0.006363f, 0.008141f,
- 0.010147f, 0.012596f, 0.016006f, 0.021423f, 0.028503f, 0.039185f, 0.055420f, 0.081116f,
- 0.124390f, 0.198120f, 0.316895f, 0.478516f, 0.641113f, 0.763672f, 0.842773f, 0.891113f,
- 0.921387f, 0.941406f, 0.954590f, 0.963867f, 0.970215f, 0.975586f, 0.979492f, 0.982910f,
- 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
- 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000238f, 0.000365f, 0.000365f, 0.000598f, 0.000820f, 0.001200f, 0.001279f,
- 0.001631f, 0.001736f, 0.002172f, 0.002874f, 0.003576f, 0.004391f, 0.005096f, 0.006176f,
- 0.007545f, 0.009674f, 0.012505f, 0.015945f, 0.020187f, 0.026550f, 0.035706f, 0.049835f,
- 0.072510f, 0.109253f, 0.171631f, 0.275391f, 0.426514f, 0.594238f, 0.730469f, 0.822754f,
- 0.877930f, 0.913574f, 0.936523f, 0.951172f, 0.961426f, 0.969727f, 0.974609f, 0.978027f,
- 0.982422f, 0.984863f, 0.986816f, 0.988770f, 0.989746f, 0.991699f, 0.992188f, 0.993164f,
- 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.997070f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000364f, 0.000486f, 0.000487f, 0.000562f, 0.000822f, 0.000967f,
- 0.001213f, 0.001871f, 0.001803f, 0.002485f, 0.002796f, 0.003410f, 0.004242f, 0.005070f,
- 0.006153f, 0.007698f, 0.009262f, 0.011635f, 0.014709f, 0.019104f, 0.024521f, 0.033295f,
- 0.045746f, 0.065674f, 0.096741f, 0.150635f, 0.241455f, 0.380127f, 0.548828f, 0.698242f,
- 0.802246f, 0.867188f, 0.906738f, 0.931152f, 0.948242f, 0.959473f, 0.967285f, 0.973633f,
- 0.978516f, 0.981445f, 0.984375f, 0.986328f, 0.988281f, 0.989258f, 0.990723f, 0.992188f,
- 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.996582f,
- 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000350f, 0.000483f, 0.000486f, 0.000604f, 0.000743f, 0.001093f,
- 0.001187f, 0.001297f, 0.001601f, 0.001921f, 0.002501f, 0.002922f, 0.003296f, 0.004200f,
- 0.005211f, 0.006054f, 0.007603f, 0.008904f, 0.011169f, 0.014091f, 0.017685f, 0.023331f,
- 0.030991f, 0.042358f, 0.059326f, 0.087646f, 0.134521f, 0.213867f, 0.341309f, 0.506348f,
- 0.665039f, 0.780762f, 0.854492f, 0.899414f, 0.927246f, 0.945312f, 0.957520f, 0.966309f,
- 0.973145f, 0.977539f, 0.981445f, 0.984375f, 0.986328f, 0.988770f, 0.989746f, 0.991211f,
- 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
- 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000120f, 0.000360f, 0.000485f, 0.000486f, 0.000487f, 0.000604f,
- 0.000947f, 0.001201f, 0.001374f, 0.001715f, 0.002127f, 0.002239f, 0.002876f, 0.003426f,
- 0.004063f, 0.005276f, 0.005810f, 0.006744f, 0.008713f, 0.010597f, 0.013680f, 0.016754f,
- 0.021744f, 0.028778f, 0.039093f, 0.054901f, 0.079956f, 0.121399f, 0.191895f, 0.307861f,
- 0.468262f, 0.633301f, 0.760742f, 0.842285f, 0.892090f, 0.923340f, 0.942383f, 0.956543f,
- 0.965332f, 0.972168f, 0.977539f, 0.980469f, 0.983887f, 0.985840f, 0.988281f, 0.989746f,
- 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996582f,
- 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000121f, 0.000219f, 0.000474f, 0.000484f, 0.000486f, 0.000487f,
- 0.000720f, 0.001108f, 0.001199f, 0.001209f, 0.001689f, 0.002253f, 0.002489f, 0.002916f,
- 0.003714f, 0.004040f, 0.005054f, 0.006001f, 0.006737f, 0.008713f, 0.010376f, 0.012665f,
- 0.016251f, 0.020615f, 0.027145f, 0.036499f, 0.050720f, 0.073181f, 0.110474f, 0.174072f,
- 0.280518f, 0.434570f, 0.604980f, 0.742188f, 0.830566f, 0.885742f, 0.918945f, 0.940918f,
- 0.954102f, 0.964355f, 0.971680f, 0.977051f, 0.980957f, 0.984375f, 0.986816f, 0.988281f,
- 0.989746f, 0.990723f, 0.992188f, 0.993652f, 0.994141f, 0.995117f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000000f, 0.000120f, 0.000239f, 0.000319f, 0.000475f, 0.000484f, 0.000485f,
- 0.000618f, 0.000844f, 0.001094f, 0.001201f, 0.001570f, 0.001782f, 0.002010f, 0.002407f,
- 0.003046f, 0.003099f, 0.004208f, 0.004700f, 0.005882f, 0.006878f, 0.007980f, 0.009949f,
- 0.012344f, 0.015358f, 0.019821f, 0.026047f, 0.034271f, 0.047455f, 0.067993f, 0.102112f,
- 0.160034f, 0.258057f, 0.406494f, 0.578613f, 0.723633f, 0.820312f, 0.880371f, 0.916016f,
- 0.938965f, 0.953125f, 0.963867f, 0.971191f, 0.976562f, 0.980469f, 0.983887f, 0.985840f,
- 0.988770f, 0.989746f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f, 0.995605f,
- 0.996094f, 0.996582f, 0.999023f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000242f, 0.000455f, 0.000481f, 0.000583f,
- 0.000601f, 0.000804f, 0.000912f, 0.001247f, 0.001319f, 0.001571f, 0.001793f, 0.002337f,
- 0.002464f, 0.003099f, 0.003164f, 0.003809f, 0.004627f, 0.005764f, 0.006397f, 0.008118f,
- 0.009605f, 0.011917f, 0.015083f, 0.018692f, 0.024384f, 0.032806f, 0.044983f, 0.063477f,
- 0.095337f, 0.148560f, 0.240112f, 0.382324f, 0.556641f, 0.708984f, 0.812500f, 0.875488f,
- 0.913574f, 0.937500f, 0.953125f, 0.963867f, 0.971191f, 0.977051f, 0.980957f, 0.983887f,
- 0.986816f, 0.988281f, 0.990234f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995605f,
- 0.995605f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000240f, 0.000242f, 0.000524f, 0.000597f,
- 0.000604f, 0.000606f, 0.000674f, 0.001040f, 0.001238f, 0.001427f, 0.001637f, 0.001670f,
- 0.002104f, 0.002432f, 0.002775f, 0.003416f, 0.003860f, 0.004482f, 0.005573f, 0.006374f,
- 0.007828f, 0.009384f, 0.011635f, 0.014175f, 0.018219f, 0.023224f, 0.031052f, 0.042603f,
- 0.060730f, 0.089661f, 0.139526f, 0.225464f, 0.363525f, 0.538574f, 0.696289f, 0.806152f,
- 0.872559f, 0.912109f, 0.937012f, 0.952637f, 0.963867f, 0.971191f, 0.976562f, 0.981445f,
- 0.984863f, 0.987305f, 0.988770f, 0.990723f, 0.992188f, 0.993164f, 0.994141f, 0.994629f,
- 0.995117f, 0.996094f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000192f, 0.000240f, 0.000242f, 0.000535f,
- 0.000478f, 0.000600f, 0.000843f, 0.000925f, 0.001027f, 0.001236f, 0.001502f, 0.001490f,
- 0.001658f, 0.002256f, 0.002430f, 0.002880f, 0.003056f, 0.003983f, 0.004292f, 0.005333f,
- 0.006264f, 0.007393f, 0.009064f, 0.011131f, 0.013741f, 0.017242f, 0.022690f, 0.029922f,
- 0.040680f, 0.057831f, 0.085022f, 0.132446f, 0.214844f, 0.349121f, 0.524414f, 0.688477f,
- 0.801758f, 0.871094f, 0.912109f, 0.937500f, 0.953125f, 0.964355f, 0.971680f, 0.977539f,
- 0.981445f, 0.985352f, 0.987305f, 0.989258f, 0.991211f, 0.992188f, 0.993652f, 0.994629f,
- 0.995117f, 0.995605f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000232f, 0.000233f, 0.000363f,
- 0.000457f, 0.000714f, 0.000724f, 0.000727f, 0.000847f, 0.000992f, 0.001177f, 0.001525f,
- 0.001560f, 0.001740f, 0.002090f, 0.002329f, 0.002718f, 0.003372f, 0.003902f, 0.004307f,
- 0.005184f, 0.005886f, 0.007446f, 0.008667f, 0.010574f, 0.013588f, 0.016556f, 0.021744f,
- 0.028854f, 0.039124f, 0.055176f, 0.081726f, 0.127075f, 0.206421f, 0.338867f, 0.515625f,
- 0.683105f, 0.800293f, 0.870605f, 0.912598f, 0.937500f, 0.954590f, 0.965332f, 0.973145f,
- 0.978516f, 0.982422f, 0.985840f, 0.988281f, 0.989746f, 0.991211f, 0.992676f, 0.993652f,
- 0.994141f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000103f, 0.000120f, 0.000240f, 0.000240f,
- 0.000484f, 0.000574f, 0.000596f, 0.000837f, 0.000820f, 0.000859f, 0.000985f, 0.001070f,
- 0.001509f, 0.001554f, 0.001785f, 0.002214f, 0.002476f, 0.002754f, 0.002991f, 0.003487f,
- 0.004303f, 0.005074f, 0.005920f, 0.007126f, 0.008743f, 0.010361f, 0.013023f, 0.016403f,
- 0.021011f, 0.027817f, 0.037811f, 0.053375f, 0.079041f, 0.123291f, 0.201172f, 0.333252f,
- 0.511719f, 0.682129f, 0.801270f, 0.872070f, 0.914062f, 0.939941f, 0.955078f, 0.966309f,
- 0.973633f, 0.979004f, 0.982910f, 0.986328f, 0.988770f, 0.990234f, 0.991699f, 0.992676f,
- 0.993652f, 0.995117f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000079f, 0.000053f, 0.000118f, 0.000418f,
- 0.000358f, 0.000363f, 0.000678f, 0.000708f, 0.000825f, 0.000838f, 0.000878f, 0.001146f,
- 0.000978f, 0.001483f, 0.001541f, 0.001769f, 0.001812f, 0.002434f, 0.002699f, 0.003225f,
- 0.003298f, 0.004002f, 0.004948f, 0.005932f, 0.007084f, 0.008461f, 0.010414f, 0.012665f,
- 0.015915f, 0.020615f, 0.027023f, 0.036743f, 0.051941f, 0.077332f, 0.120789f, 0.198608f,
- 0.331543f, 0.512695f, 0.686523f, 0.805664f, 0.875488f, 0.917480f, 0.941406f, 0.957031f,
- 0.968262f, 0.975098f, 0.980469f, 0.983887f, 0.986816f, 0.989258f, 0.990723f, 0.992188f,
- 0.993164f, 0.994629f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998535f, 0.998535f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000109f, 0.000232f, 0.000349f,
- 0.000478f, 0.000483f, 0.000483f, 0.000609f, 0.000795f, 0.000835f, 0.000806f, 0.000726f,
- 0.001022f, 0.001222f, 0.001442f, 0.001536f, 0.001650f, 0.001714f, 0.002377f, 0.002588f,
- 0.003159f, 0.003643f, 0.004036f, 0.004929f, 0.005718f, 0.006813f, 0.008072f, 0.009880f,
- 0.012527f, 0.015854f, 0.020035f, 0.026352f, 0.035950f, 0.051178f, 0.076416f, 0.119751f,
- 0.198730f, 0.334229f, 0.519531f, 0.694824f, 0.812988f, 0.880859f, 0.920898f, 0.944336f,
- 0.958984f, 0.969727f, 0.976562f, 0.980957f, 0.984863f, 0.987793f, 0.989746f, 0.991211f,
- 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000068f, 0.000265f,
- 0.000361f, 0.000478f, 0.000480f, 0.000479f, 0.000568f, 0.000693f, 0.000714f, 0.000806f,
- 0.000843f, 0.000919f, 0.001222f, 0.001376f, 0.001531f, 0.001554f, 0.001987f, 0.002342f,
- 0.002558f, 0.002798f, 0.003132f, 0.004021f, 0.004864f, 0.005455f, 0.006664f, 0.008110f,
- 0.009613f, 0.011955f, 0.015335f, 0.019608f, 0.025879f, 0.035522f, 0.050629f, 0.075623f,
- 0.120239f, 0.201416f, 0.342041f, 0.533203f, 0.707031f, 0.821777f, 0.887695f, 0.925293f,
- 0.946777f, 0.961914f, 0.971680f, 0.977539f, 0.982422f, 0.985352f, 0.988281f, 0.989746f,
- 0.992188f, 0.993164f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f,
- 0.000322f, 0.000241f, 0.000478f, 0.000480f, 0.000480f, 0.000510f, 0.000695f, 0.000710f,
- 0.000958f, 0.000765f, 0.001075f, 0.001116f, 0.001318f, 0.001606f, 0.001546f, 0.001916f,
- 0.002306f, 0.002499f, 0.002905f, 0.003202f, 0.003914f, 0.004498f, 0.005459f, 0.006611f,
- 0.007687f, 0.009331f, 0.011757f, 0.014923f, 0.019241f, 0.025833f, 0.035492f, 0.050507f,
- 0.076233f, 0.122131f, 0.207153f, 0.355225f, 0.551758f, 0.724609f, 0.833496f, 0.894531f,
- 0.930664f, 0.951660f, 0.964844f, 0.973145f, 0.979492f, 0.983887f, 0.986816f, 0.989258f,
- 0.991211f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000351f, 0.000458f, 0.000476f, 0.000480f, 0.000482f, 0.000528f, 0.000650f,
- 0.000704f, 0.000956f, 0.000828f, 0.000963f, 0.001111f, 0.001265f, 0.001474f, 0.001806f,
- 0.001872f, 0.002308f, 0.002445f, 0.002701f, 0.003229f, 0.003851f, 0.004375f, 0.005356f,
- 0.006317f, 0.007458f, 0.009300f, 0.011574f, 0.014725f, 0.019165f, 0.025696f, 0.035461f,
- 0.050812f, 0.077637f, 0.125977f, 0.216797f, 0.374756f, 0.576660f, 0.745117f, 0.848145f,
- 0.904785f, 0.936523f, 0.956055f, 0.967773f, 0.975586f, 0.980957f, 0.984863f, 0.987793f,
- 0.990234f, 0.992188f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000292f, 0.000224f, 0.000452f, 0.000453f, 0.000479f, 0.000480f, 0.000517f,
- 0.000614f, 0.000902f, 0.000712f, 0.000959f, 0.000978f, 0.001100f, 0.001276f, 0.001461f,
- 0.001524f, 0.001651f, 0.002041f, 0.002350f, 0.002853f, 0.003433f, 0.003622f, 0.004166f,
- 0.005043f, 0.006187f, 0.007534f, 0.009209f, 0.011551f, 0.014908f, 0.019012f, 0.025406f,
- 0.035461f, 0.051575f, 0.079651f, 0.131714f, 0.230957f, 0.401367f, 0.607910f, 0.769531f,
- 0.863281f, 0.914062f, 0.942871f, 0.959961f, 0.970703f, 0.978027f, 0.982910f, 0.986816f,
- 0.988770f, 0.991699f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000238f, 0.000355f, 0.000449f, 0.000462f, 0.000474f, 0.000477f,
- 0.000482f, 0.000846f, 0.000726f, 0.000706f, 0.000953f, 0.000889f, 0.001012f, 0.001259f,
- 0.001390f, 0.001755f, 0.001658f, 0.002060f, 0.002369f, 0.002539f, 0.003170f, 0.003460f,
- 0.004131f, 0.004993f, 0.006008f, 0.007431f, 0.009109f, 0.011444f, 0.014252f, 0.019058f,
- 0.025574f, 0.036011f, 0.053162f, 0.083435f, 0.140381f, 0.250488f, 0.436035f, 0.645996f,
- 0.795898f, 0.880371f, 0.924316f, 0.949219f, 0.963867f, 0.973145f, 0.980469f, 0.984863f,
- 0.988281f, 0.990723f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997070f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000239f, 0.000306f, 0.000440f, 0.000437f, 0.000474f,
- 0.000478f, 0.000481f, 0.000523f, 0.000664f, 0.000731f, 0.000802f, 0.000935f, 0.001022f,
- 0.001173f, 0.001314f, 0.001504f, 0.001831f, 0.001984f, 0.002317f, 0.002472f, 0.003199f,
- 0.003370f, 0.004189f, 0.004868f, 0.005924f, 0.007320f, 0.008926f, 0.011421f, 0.014595f,
- 0.019119f, 0.026260f, 0.036987f, 0.055176f, 0.088440f, 0.152466f, 0.277832f, 0.479980f,
- 0.686523f, 0.823242f, 0.895508f, 0.933105f, 0.955566f, 0.969238f, 0.976562f, 0.982422f,
- 0.986816f, 0.989746f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000280f, 0.000417f, 0.000448f,
- 0.000468f, 0.000476f, 0.000479f, 0.000490f, 0.000845f, 0.000688f, 0.000740f, 0.000945f,
- 0.000998f, 0.001148f, 0.001266f, 0.001414f, 0.001475f, 0.001667f, 0.002262f, 0.002537f,
- 0.003019f, 0.003288f, 0.004223f, 0.004768f, 0.005890f, 0.007259f, 0.009026f, 0.011360f,
- 0.014297f, 0.019272f, 0.026474f, 0.038116f, 0.058197f, 0.095032f, 0.168945f, 0.313965f,
- 0.533203f, 0.731445f, 0.850098f, 0.911133f, 0.942871f, 0.961914f, 0.972656f, 0.979980f,
- 0.984863f, 0.988770f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000187f, 0.000233f, 0.000141f, 0.000271f, 0.000341f,
- 0.000380f, 0.000465f, 0.000473f, 0.000590f, 0.000605f, 0.000798f, 0.000847f, 0.000934f,
- 0.000946f, 0.000836f, 0.001009f, 0.001142f, 0.001430f, 0.001495f, 0.001850f, 0.002111f,
- 0.002541f, 0.003035f, 0.003300f, 0.004139f, 0.004913f, 0.005718f, 0.007141f, 0.008934f,
- 0.011475f, 0.014832f, 0.019653f, 0.027573f, 0.039917f, 0.062225f, 0.104919f, 0.192017f,
- 0.362305f, 0.594238f, 0.775879f, 0.875977f, 0.925293f, 0.952148f, 0.967773f, 0.977051f,
- 0.983398f, 0.988281f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996582f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000238f, 0.000243f,
- 0.000238f, 0.000424f, 0.000453f, 0.000467f, 0.000475f, 0.000581f, 0.000689f, 0.000795f,
- 0.000634f, 0.000823f, 0.001014f, 0.000900f, 0.001083f, 0.001485f, 0.001731f, 0.001851f,
- 0.002056f, 0.002373f, 0.002621f, 0.003445f, 0.004082f, 0.004578f, 0.005821f, 0.007217f,
- 0.008881f, 0.011330f, 0.014778f, 0.020416f, 0.028473f, 0.042419f, 0.067993f, 0.118286f,
- 0.225342f, 0.425293f, 0.661621f, 0.818848f, 0.899902f, 0.939453f, 0.960449f, 0.973145f,
- 0.980957f, 0.985840f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000224f, 0.000122f,
- 0.000231f, 0.000245f, 0.000411f, 0.000520f, 0.000463f, 0.000470f, 0.000587f, 0.000361f,
- 0.000712f, 0.000694f, 0.000815f, 0.000978f, 0.001055f, 0.001105f, 0.001390f, 0.001438f,
- 0.001705f, 0.001984f, 0.002333f, 0.002546f, 0.003408f, 0.003876f, 0.004627f, 0.005783f,
- 0.007198f, 0.008995f, 0.011383f, 0.015396f, 0.020828f, 0.030029f, 0.045654f, 0.075439f,
- 0.137451f, 0.271973f, 0.503418f, 0.728516f, 0.857910f, 0.920410f, 0.951172f, 0.968262f,
- 0.977539f, 0.984375f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000173f, 0.000150f, 0.000278f, 0.000376f, 0.000427f, 0.000470f, 0.000352f, 0.000356f,
- 0.000475f, 0.000441f, 0.000709f, 0.000774f, 0.000970f, 0.001013f, 0.000998f, 0.001193f,
- 0.001397f, 0.001677f, 0.001957f, 0.002268f, 0.002529f, 0.003353f, 0.003874f, 0.004555f,
- 0.005692f, 0.007160f, 0.008987f, 0.011543f, 0.015732f, 0.021896f, 0.032135f, 0.050140f,
- 0.086548f, 0.165894f, 0.337646f, 0.593750f, 0.791504f, 0.892090f, 0.938477f, 0.961914f,
- 0.974609f, 0.982422f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995605f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000187f, 0.000130f, 0.000231f, 0.000315f, 0.000298f, 0.000332f, 0.000343f,
- 0.000465f, 0.000472f, 0.000579f, 0.000717f, 0.000839f, 0.000932f, 0.000817f, 0.001086f,
- 0.001090f, 0.001545f, 0.001735f, 0.001837f, 0.002485f, 0.002493f, 0.003288f, 0.003828f,
- 0.004520f, 0.005833f, 0.007156f, 0.009193f, 0.012123f, 0.015839f, 0.022934f, 0.034760f,
- 0.056488f, 0.102600f, 0.208862f, 0.427734f, 0.687988f, 0.846191f, 0.919434f, 0.952637f,
- 0.969727f, 0.979980f, 0.993652f, 0.994629f, 0.994141f, 0.994629f, 0.994629f, 0.994629f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000133f, 0.000141f, 0.000234f, 0.000300f, 0.000397f,
- 0.000436f, 0.000456f, 0.000465f, 0.000534f, 0.000663f, 0.000810f, 0.000796f, 0.000812f,
- 0.001062f, 0.001237f, 0.001428f, 0.001565f, 0.001818f, 0.002182f, 0.002783f, 0.002943f,
- 0.003773f, 0.004715f, 0.005482f, 0.007195f, 0.009285f, 0.012207f, 0.016922f, 0.024567f,
- 0.038483f, 0.066101f, 0.127563f, 0.274170f, 0.540527f, 0.774414f, 0.891113f, 0.940430f,
- 0.965332f, 0.977539f, 0.993652f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994141f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000124f, 0.000116f, 0.000119f, 0.000125f, 0.000121f, 0.000197f,
- 0.000323f, 0.000418f, 0.000446f, 0.000433f, 0.000467f, 0.000612f, 0.000710f, 0.000783f,
- 0.000911f, 0.000817f, 0.001161f, 0.001343f, 0.001514f, 0.001707f, 0.002081f, 0.002386f,
- 0.002882f, 0.003609f, 0.004627f, 0.005478f, 0.007011f, 0.009384f, 0.012695f, 0.017960f,
- 0.026901f, 0.044067f, 0.080078f, 0.167114f, 0.374023f, 0.664062f, 0.845703f, 0.923340f,
- 0.957031f, 0.974121f, 0.992676f, 0.993652f, 0.993164f, 0.993652f, 0.993652f, 0.993164f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000121f, 0.000121f, 0.000052f, 0.000039f, 0.000029f, 0.000054f, 0.000045f, 0.000118f,
- 0.000128f, 0.000231f, 0.000387f, 0.000429f, 0.000446f, 0.000544f, 0.000539f, 0.000648f,
- 0.000749f, 0.000790f, 0.000978f, 0.001102f, 0.001195f, 0.001501f, 0.001761f, 0.001978f,
- 0.002661f, 0.003170f, 0.003519f, 0.004509f, 0.005344f, 0.007004f, 0.009361f, 0.013229f,
- 0.019196f, 0.030258f, 0.052002f, 0.102661f, 0.234131f, 0.511230f, 0.774902f, 0.898438f,
- 0.947754f, 0.970215f, 0.992188f, 0.992676f, 0.993164f, 0.992676f, 0.992188f, 0.992188f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000070f, 0.000052f, 0.000038f, 0.000030f, 0.000023f, 0.000060f,
- 0.000116f, 0.000121f, 0.000252f, 0.000337f, 0.000306f, 0.000435f, 0.000450f, 0.000562f,
- 0.000584f, 0.000722f, 0.000858f, 0.000888f, 0.000969f, 0.001230f, 0.001429f, 0.001576f,
- 0.001827f, 0.002361f, 0.002863f, 0.003267f, 0.004047f, 0.005394f, 0.007256f, 0.009781f,
- 0.013855f, 0.021439f, 0.035034f, 0.065063f, 0.141724f, 0.346680f, 0.665527f, 0.859375f,
- 0.934570f, 0.965820f, 0.991699f, 0.991699f, 0.991699f, 0.992188f, 0.991699f, 0.991699f,
- 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000099f, 0.000069f, 0.000051f, 0.000039f, 0.000030f, 0.000023f,
- 0.000024f, 0.000115f, 0.000103f, 0.000224f, 0.000204f, 0.000339f, 0.000407f, 0.000437f,
- 0.000452f, 0.000489f, 0.000663f, 0.000821f, 0.000922f, 0.001004f, 0.001086f, 0.001279f,
- 0.001554f, 0.001651f, 0.001997f, 0.002390f, 0.003136f, 0.004223f, 0.005508f, 0.007339f,
- 0.010094f, 0.014854f, 0.024048f, 0.042664f, 0.087036f, 0.213867f, 0.516113f, 0.799805f,
- 0.915527f, 0.958984f, 0.990723f, 0.991211f, 0.990723f, 0.990723f, 0.990723f, 0.991211f,
- 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000096f, 0.000073f, 0.000053f, 0.000040f, 0.000031f,
- 0.000025f, 0.000020f, 0.000017f, 0.000105f, 0.000110f, 0.000135f, 0.000235f, 0.000380f,
- 0.000462f, 0.000513f, 0.000556f, 0.000638f, 0.000804f, 0.000868f, 0.000897f, 0.001002f,
- 0.001079f, 0.001246f, 0.001596f, 0.002153f, 0.002213f, 0.003094f, 0.004158f, 0.005306f,
- 0.007458f, 0.010887f, 0.017166f, 0.028748f, 0.055176f, 0.128174f, 0.350586f, 0.703613f,
- 0.888184f, 0.951172f, 0.988770f, 0.989746f, 0.989746f, 0.989746f, 0.989746f, 0.989746f,
- 0.000122f, 0.000120f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000101f, 0.000073f, 0.000057f, 0.000043f,
- 0.000033f, 0.000027f, 0.000021f, 0.000018f, 0.000105f, 0.000112f, 0.000111f, 0.000161f,
- 0.000320f, 0.000390f, 0.000421f, 0.000438f, 0.000559f, 0.000665f, 0.000735f, 0.000719f,
- 0.000704f, 0.000887f, 0.001223f, 0.001384f, 0.001867f, 0.002462f, 0.003216f, 0.004032f,
- 0.005367f, 0.007988f, 0.012054f, 0.019943f, 0.035919f, 0.078064f, 0.215332f, 0.566895f,
- 0.845703f, 0.939941f, 0.987793f, 0.988281f, 0.987793f, 0.987793f, 0.988281f, 0.988281f,
- 0.000000f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000103f, 0.000077f, 0.000061f,
- 0.000046f, 0.000037f, 0.000030f, 0.000023f, 0.000019f, 0.000016f, 0.000039f, 0.000094f,
- 0.000181f, 0.000205f, 0.000350f, 0.000392f, 0.000423f, 0.000510f, 0.000619f, 0.000672f,
- 0.000705f, 0.000632f, 0.000807f, 0.001038f, 0.001278f, 0.001894f, 0.002245f, 0.002758f,
- 0.003883f, 0.005863f, 0.008636f, 0.013672f, 0.023880f, 0.048828f, 0.127441f, 0.400879f,
- 0.779297f, 0.925781f, 0.985840f, 0.986328f, 0.986328f, 0.985840f, 0.986328f, 0.986328f,
- 0.000000f, 0.000100f, 0.000108f, 0.000118f, 0.000119f, 0.000118f, 0.000119f, 0.000119f,
- 0.000119f, 0.000119f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000111f, 0.000086f,
- 0.000066f, 0.000051f, 0.000041f, 0.000032f, 0.000026f, 0.000021f, 0.000018f, 0.000015f,
- 0.000086f, 0.000131f, 0.000190f, 0.000293f, 0.000419f, 0.000481f, 0.000477f, 0.000438f,
- 0.000542f, 0.000564f, 0.000599f, 0.000700f, 0.000916f, 0.001122f, 0.001589f, 0.001997f,
- 0.002678f, 0.004017f, 0.005814f, 0.009361f, 0.015808f, 0.031250f, 0.075989f, 0.250732f,
- 0.676758f, 0.904297f, 0.983887f, 0.983887f, 0.983887f, 0.984375f, 0.984375f, 0.983887f,
- 0.000000f, 0.000000f, 0.000077f, 0.000112f, 0.000104f, 0.000115f, 0.000115f, 0.000117f,
- 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000119f, 0.000118f,
- 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
- 0.000097f, 0.000076f, 0.000060f, 0.000046f, 0.000037f, 0.000030f, 0.000024f, 0.000020f,
- 0.000045f, 0.000063f, 0.000091f, 0.000140f, 0.000202f, 0.000333f, 0.000305f, 0.000399f,
- 0.000462f, 0.000452f, 0.000535f, 0.000531f, 0.000631f, 0.000866f, 0.000858f, 0.001307f,
- 0.001844f, 0.002823f, 0.004070f, 0.006264f, 0.010536f, 0.020035f, 0.045990f, 0.145996f,
- 0.532227f, 0.874023f, 0.980957f, 0.981445f, 0.980957f, 0.981445f, 0.980957f, 0.981445f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000091f, 0.000103f, 0.000105f, 0.000106f,
- 0.000111f, 0.000113f, 0.000115f, 0.000114f, 0.000116f, 0.000116f, 0.000117f, 0.000117f,
- 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000118f, 0.000118f, 0.000118f, 0.000118f,
- 0.000118f, 0.000112f, 0.000084f, 0.000069f, 0.000055f, 0.000043f, 0.000036f, 0.000028f,
- 0.000024f, 0.000020f, 0.000028f, 0.000039f, 0.000083f, 0.000141f, 0.000211f, 0.000262f,
- 0.000413f, 0.000305f, 0.000370f, 0.000358f, 0.000489f, 0.000564f, 0.000599f, 0.000893f,
- 0.001084f, 0.001696f, 0.002697f, 0.004074f, 0.006836f, 0.012878f, 0.028122f, 0.083496f,
- 0.364014f, 0.826660f, 0.976562f, 0.977539f, 0.977051f, 0.977539f, 0.978027f, 0.977051f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000015f, 0.000086f,
- 0.000077f, 0.000103f, 0.000100f, 0.000109f, 0.000110f, 0.000111f, 0.000112f, 0.000112f,
- 0.000114f, 0.000114f, 0.000115f, 0.000115f, 0.000116f, 0.000115f, 0.000116f, 0.000116f,
- 0.000117f, 0.000117f, 0.000117f, 0.000100f, 0.000079f, 0.000066f, 0.000053f, 0.000041f,
- 0.000035f, 0.000028f, 0.000023f, 0.000019f, 0.000017f, 0.000034f, 0.000113f, 0.000174f,
- 0.000257f, 0.000325f, 0.000356f, 0.000324f, 0.000409f, 0.000454f, 0.000474f, 0.000659f,
- 0.000778f, 0.001243f, 0.001575f, 0.002472f, 0.004105f, 0.007957f, 0.016800f, 0.047852f,
- 0.217529f, 0.755371f, 0.972656f, 0.973145f, 0.973145f, 0.973145f, 0.973145f, 0.973145f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000028f, 0.000049f, 0.000085f, 0.000081f, 0.000096f, 0.000101f, 0.000104f,
- 0.000106f, 0.000108f, 0.000109f, 0.000110f, 0.000111f, 0.000112f, 0.000113f, 0.000113f,
- 0.000114f, 0.000114f, 0.000114f, 0.000115f, 0.000115f, 0.000096f, 0.000078f, 0.000064f,
- 0.000051f, 0.000043f, 0.000035f, 0.000029f, 0.000024f, 0.000020f, 0.000026f, 0.000055f,
- 0.000087f, 0.000135f, 0.000248f, 0.000261f, 0.000274f, 0.000258f, 0.000296f, 0.000359f,
- 0.000474f, 0.000627f, 0.001012f, 0.001484f, 0.002630f, 0.004536f, 0.010277f, 0.027405f,
- 0.119507f, 0.645996f, 0.966797f, 0.967285f, 0.967285f, 0.967285f, 0.966797f, 0.966797f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000021f, 0.000065f, 0.000074f,
- 0.000077f, 0.000091f, 0.000091f, 0.000099f, 0.000098f, 0.000103f, 0.000103f, 0.000106f,
- 0.000107f, 0.000108f, 0.000109f, 0.000110f, 0.000111f, 0.000111f, 0.000112f, 0.000096f,
- 0.000079f, 0.000064f, 0.000053f, 0.000043f, 0.000036f, 0.000030f, 0.000024f, 0.000021f,
- 0.000018f, 0.000028f, 0.000072f, 0.000125f, 0.000233f, 0.000243f, 0.000220f, 0.000258f,
- 0.000320f, 0.000353f, 0.000630f, 0.000932f, 0.001324f, 0.002357f, 0.005402f, 0.014534f,
- 0.062561f, 0.493164f, 0.958008f, 0.958008f, 0.958984f, 0.958496f, 0.958496f, 0.958008f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000011f, 0.000035f, 0.000041f, 0.000064f, 0.000074f, 0.000081f, 0.000082f, 0.000090f,
- 0.000092f, 0.000096f, 0.000099f, 0.000100f, 0.000102f, 0.000104f, 0.000105f, 0.000106f,
- 0.000107f, 0.000099f, 0.000082f, 0.000067f, 0.000055f, 0.000047f, 0.000038f, 0.000031f,
- 0.000026f, 0.000022f, 0.000018f, 0.000037f, 0.000071f, 0.000111f, 0.000190f, 0.000204f,
- 0.000153f, 0.000245f, 0.000299f, 0.000482f, 0.000790f, 0.001330f, 0.002619f, 0.007282f,
- 0.031097f, 0.318115f, 0.946289f, 0.946777f, 0.946777f, 0.946777f, 0.946777f, 0.946777f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000008f, 0.000029f, 0.000044f,
- 0.000055f, 0.000063f, 0.000073f, 0.000075f, 0.000081f, 0.000087f, 0.000090f, 0.000092f,
- 0.000094f, 0.000097f, 0.000099f, 0.000100f, 0.000087f, 0.000071f, 0.000059f, 0.000049f,
- 0.000040f, 0.000034f, 0.000028f, 0.000024f, 0.000020f, 0.000016f, 0.000072f, 0.000114f,
- 0.000169f, 0.000147f, 0.000181f, 0.000246f, 0.000367f, 0.000626f, 0.001325f, 0.003117f,
- 0.013741f, 0.167480f, 0.929688f, 0.929688f, 0.929688f, 0.930176f, 0.930664f, 0.930176f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000019f, 0.000030f, 0.000044f, 0.000049f, 0.000062f,
- 0.000068f, 0.000072f, 0.000078f, 0.000081f, 0.000084f, 0.000087f, 0.000090f, 0.000079f,
- 0.000065f, 0.000054f, 0.000044f, 0.000037f, 0.000030f, 0.000025f, 0.000021f, 0.000017f,
- 0.000052f, 0.000100f, 0.000132f, 0.000130f, 0.000164f, 0.000297f, 0.000552f, 0.001273f,
- 0.005009f, 0.071594f, 0.903809f, 0.905273f, 0.904297f, 0.904785f, 0.904785f, 0.904785f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000013f, 0.000028f, 0.000036f, 0.000045f, 0.000053f, 0.000060f, 0.000066f,
- 0.000071f, 0.000075f, 0.000071f, 0.000058f, 0.000049f, 0.000040f, 0.000033f, 0.000027f,
- 0.000022f, 0.000018f, 0.000032f, 0.000078f, 0.000090f, 0.000123f, 0.000175f, 0.000441f,
- 0.001637f, 0.022537f, 0.865234f, 0.865234f, 0.865723f, 0.865723f, 0.865234f, 0.864746f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f,
- 0.000017f, 0.000027f, 0.000036f, 0.000042f, 0.000050f, 0.000056f, 0.000052f, 0.000043f,
- 0.000035f, 0.000028f, 0.000022f, 0.000018f, 0.000049f, 0.000055f, 0.000047f, 0.000108f,
- 0.000342f, 0.004566f, 0.802734f, 0.803711f, 0.803711f, 0.803711f, 0.803711f, 0.803711f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f,
- 0.000022f, 0.000030f, 0.000033f, 0.000027f, 0.000021f, 0.000015f, 0.000011f, 0.000031f,
- 0.000045f, 0.000449f, 0.708496f, 0.707520f, 0.708984f, 0.708496f, 0.707520f, 0.708008f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000011f,
- 0.000006f, 0.000007f, 0.575195f, 0.575195f, 0.575195f, 0.575195f, 0.575195f, 0.575195f,
- },
- {
- 0.158813f, 0.632812f, 0.824219f, 0.891602f, 0.924805f, 0.942383f, 0.954102f, 0.962402f,
- 0.968262f, 0.972656f, 0.976074f, 0.978516f, 0.980957f, 0.982910f, 0.984375f, 0.985840f,
- 0.986816f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
- 0.993652f, 0.993652f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.995605f,
- 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.019775f, 0.115845f, 0.361084f, 0.642578f, 0.798340f, 0.872559f, 0.911133f, 0.933594f,
- 0.947266f, 0.957031f, 0.964355f, 0.968750f, 0.973145f, 0.976562f, 0.979492f, 0.981934f,
- 0.983398f, 0.984863f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.990234f, 0.991211f,
- 0.991699f, 0.992676f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995117f,
- 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f,
- 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.006638f, 0.031082f, 0.089661f, 0.222168f, 0.448242f, 0.663086f, 0.794434f, 0.864258f,
- 0.903320f, 0.926758f, 0.942383f, 0.953613f, 0.961426f, 0.966797f, 0.972168f, 0.975586f,
- 0.978027f, 0.980469f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989258f,
- 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
- 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
- 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.003246f, 0.013367f, 0.032806f, 0.072754f, 0.152954f, 0.304199f, 0.509766f, 0.687500f,
- 0.797852f, 0.862305f, 0.900391f, 0.923828f, 0.940430f, 0.950684f, 0.959473f, 0.965820f,
- 0.970703f, 0.974121f, 0.977051f, 0.979492f, 0.981934f, 0.983887f, 0.985840f, 0.987305f,
- 0.987793f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992188f, 0.993164f,
- 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f,
- 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.002029f, 0.007267f, 0.016678f, 0.032288f, 0.061462f, 0.115051f, 0.215088f, 0.376709f,
- 0.562988f, 0.712891f, 0.807617f, 0.865234f, 0.901367f, 0.923828f, 0.939453f, 0.950684f,
- 0.958984f, 0.965332f, 0.970215f, 0.974609f, 0.977051f, 0.979980f, 0.981934f, 0.983887f,
- 0.984863f, 0.986328f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.990723f, 0.991699f,
- 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.996094f,
- 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.001274f, 0.004623f, 0.009880f, 0.017792f, 0.030869f, 0.052673f, 0.091431f, 0.160645f,
- 0.277832f, 0.442383f, 0.610352f, 0.737793f, 0.819824f, 0.870605f, 0.902832f, 0.924805f,
- 0.939941f, 0.950195f, 0.958496f, 0.964844f, 0.970215f, 0.973633f, 0.977051f, 0.979980f,
- 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990723f,
- 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
- 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
- 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000943f, 0.003231f, 0.006317f, 0.011040f, 0.018051f, 0.029190f, 0.046936f, 0.075867f,
- 0.125488f, 0.210449f, 0.341797f, 0.503906f, 0.652344f, 0.761230f, 0.832031f, 0.877441f,
- 0.906738f, 0.927734f, 0.940918f, 0.951172f, 0.959473f, 0.965820f, 0.970703f, 0.974121f,
- 0.977051f, 0.979492f, 0.981934f, 0.983398f, 0.985352f, 0.987305f, 0.988281f, 0.989258f,
- 0.990234f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
- 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f,
- 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f, 0.998535f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000731f, 0.001970f, 0.004425f, 0.007351f, 0.011627f, 0.017975f, 0.027161f, 0.041779f,
- 0.064270f, 0.101685f, 0.164917f, 0.265137f, 0.406494f, 0.561035f, 0.692383f, 0.785156f,
- 0.845703f, 0.884766f, 0.911621f, 0.930176f, 0.942871f, 0.953125f, 0.959961f, 0.965332f,
- 0.970703f, 0.974121f, 0.977539f, 0.979492f, 0.982422f, 0.983887f, 0.985840f, 0.987305f,
- 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f,
- 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
- 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998535f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000487f, 0.001872f, 0.003445f, 0.005367f, 0.008400f, 0.012405f, 0.017822f, 0.025345f,
- 0.037964f, 0.056244f, 0.085327f, 0.132935f, 0.210327f, 0.325928f, 0.471924f, 0.615723f,
- 0.729004f, 0.807617f, 0.859375f, 0.894043f, 0.916504f, 0.934570f, 0.945801f, 0.955078f,
- 0.961426f, 0.967285f, 0.972168f, 0.975586f, 0.978516f, 0.980957f, 0.982422f, 0.984863f,
- 0.985840f, 0.986816f, 0.988770f, 0.989258f, 0.990723f, 0.991699f, 0.992188f, 0.992676f,
- 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996094f,
- 0.996094f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.000363f, 0.001300f, 0.002499f, 0.003784f, 0.006153f, 0.008896f, 0.012367f, 0.017227f,
- 0.024185f, 0.034241f, 0.049591f, 0.072754f, 0.111023f, 0.170776f, 0.263184f, 0.391113f,
- 0.535645f, 0.665527f, 0.761719f, 0.828613f, 0.871582f, 0.902344f, 0.922852f, 0.937988f,
- 0.949219f, 0.957031f, 0.963867f, 0.968750f, 0.972656f, 0.976074f, 0.979004f, 0.981445f,
- 0.983887f, 0.984863f, 0.986328f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.991699f,
- 0.992676f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
- 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f,
- 0.000365f, 0.000972f, 0.001874f, 0.003323f, 0.004669f, 0.006599f, 0.008919f, 0.012360f,
- 0.016785f, 0.022720f, 0.031616f, 0.044647f, 0.064026f, 0.094055f, 0.141235f, 0.215332f,
- 0.323486f, 0.459229f, 0.597168f, 0.710449f, 0.791992f, 0.847656f, 0.885254f, 0.910645f,
- 0.929199f, 0.941895f, 0.952148f, 0.960449f, 0.965332f, 0.970703f, 0.974121f, 0.977539f,
- 0.979980f, 0.981934f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.989746f, 0.990723f,
- 0.991211f, 0.992188f, 0.993164f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999512f, 0.999512f, 0.999023f,
- 0.000244f, 0.000764f, 0.001375f, 0.002415f, 0.003582f, 0.004963f, 0.006973f, 0.008751f,
- 0.011726f, 0.016113f, 0.021683f, 0.029129f, 0.040283f, 0.057098f, 0.081421f, 0.119019f,
- 0.178955f, 0.268311f, 0.390625f, 0.528809f, 0.654785f, 0.751465f, 0.820312f, 0.866211f,
- 0.896973f, 0.919434f, 0.935547f, 0.946777f, 0.956055f, 0.962402f, 0.968262f, 0.972168f,
- 0.975098f, 0.979004f, 0.981445f, 0.983398f, 0.985352f, 0.986816f, 0.987793f, 0.989258f,
- 0.990723f, 0.991211f, 0.992188f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
- 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000122f, 0.000606f, 0.001439f, 0.002058f, 0.002743f, 0.004169f, 0.005035f, 0.006775f,
- 0.009010f, 0.012085f, 0.015717f, 0.020813f, 0.027573f, 0.037170f, 0.050812f, 0.071472f,
- 0.102905f, 0.151489f, 0.225708f, 0.332031f, 0.463623f, 0.596191f, 0.707031f, 0.787598f,
- 0.844238f, 0.881348f, 0.908691f, 0.927246f, 0.940918f, 0.951660f, 0.958984f, 0.965820f,
- 0.970215f, 0.974121f, 0.977539f, 0.979980f, 0.982422f, 0.984375f, 0.985840f, 0.987305f,
- 0.988281f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
- 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000118f, 0.000846f, 0.001303f, 0.001593f, 0.002180f, 0.003050f, 0.004353f, 0.005577f,
- 0.006954f, 0.009331f, 0.011826f, 0.015007f, 0.019653f, 0.025391f, 0.034119f, 0.046112f,
- 0.063660f, 0.090210f, 0.130737f, 0.192139f, 0.283203f, 0.404053f, 0.537598f, 0.658691f,
- 0.753418f, 0.818848f, 0.865234f, 0.896973f, 0.918945f, 0.934570f, 0.946289f, 0.955566f,
- 0.962402f, 0.967285f, 0.972168f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.985840f,
- 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992676f, 0.993164f, 0.993652f,
- 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000117f, 0.000487f, 0.000957f, 0.001514f, 0.002008f, 0.002619f, 0.003424f, 0.004551f,
- 0.005836f, 0.007381f, 0.009155f, 0.011459f, 0.014366f, 0.018646f, 0.024017f, 0.031281f,
- 0.042664f, 0.057068f, 0.080139f, 0.113586f, 0.165894f, 0.243164f, 0.352051f, 0.481934f,
- 0.610840f, 0.716309f, 0.793945f, 0.847168f, 0.884766f, 0.910645f, 0.928223f, 0.942383f,
- 0.952637f, 0.959961f, 0.965332f, 0.970703f, 0.975098f, 0.978027f, 0.980957f, 0.983398f,
- 0.984863f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.991211f, 0.992188f, 0.992676f,
- 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
- 0.997559f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000608f, 0.000952f, 0.001111f, 0.001660f, 0.002102f, 0.002817f, 0.003517f,
- 0.004742f, 0.005585f, 0.007080f, 0.008980f, 0.011078f, 0.014191f, 0.017838f, 0.022614f,
- 0.029404f, 0.038940f, 0.052551f, 0.071533f, 0.100769f, 0.145020f, 0.211548f, 0.307373f,
- 0.430176f, 0.561523f, 0.676758f, 0.764648f, 0.828613f, 0.872070f, 0.900879f, 0.921875f,
- 0.937012f, 0.948730f, 0.957520f, 0.964355f, 0.969238f, 0.973633f, 0.977539f, 0.979980f,
- 0.982422f, 0.984863f, 0.986328f, 0.987793f, 0.988770f, 0.990234f, 0.991211f, 0.991699f,
- 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996582f,
- 0.997070f, 0.997070f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000244f, 0.000576f, 0.000727f, 0.001083f, 0.001186f, 0.001810f, 0.002558f, 0.002968f,
- 0.003725f, 0.004913f, 0.005955f, 0.007011f, 0.008759f, 0.010918f, 0.013718f, 0.016953f,
- 0.021423f, 0.027832f, 0.035980f, 0.047913f, 0.064941f, 0.090332f, 0.128174f, 0.185791f,
- 0.270264f, 0.384033f, 0.514160f, 0.638184f, 0.736328f, 0.807617f, 0.856934f, 0.891602f,
- 0.915039f, 0.932617f, 0.945801f, 0.954102f, 0.962402f, 0.968262f, 0.972168f, 0.976562f,
- 0.979492f, 0.981445f, 0.983887f, 0.985840f, 0.987305f, 0.988281f, 0.990234f, 0.990723f,
- 0.992188f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000000f, 0.000244f, 0.000708f, 0.000903f, 0.001129f, 0.001511f, 0.002031f, 0.002565f,
- 0.003189f, 0.004112f, 0.004696f, 0.005989f, 0.006954f, 0.008865f, 0.010826f, 0.013031f,
- 0.016312f, 0.020493f, 0.026154f, 0.033966f, 0.044159f, 0.059845f, 0.081665f, 0.114929f,
- 0.164917f, 0.239624f, 0.343750f, 0.469971f, 0.598145f, 0.706055f, 0.786133f, 0.842773f,
- 0.881348f, 0.908203f, 0.927246f, 0.941895f, 0.952148f, 0.959961f, 0.966797f, 0.971191f,
- 0.976074f, 0.978516f, 0.981445f, 0.983887f, 0.985352f, 0.987305f, 0.988281f, 0.989258f,
- 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.996094f,
- 0.996094f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000122f, 0.000244f, 0.000482f, 0.000674f, 0.001029f, 0.001440f, 0.001746f, 0.002153f,
- 0.002804f, 0.003206f, 0.003859f, 0.004948f, 0.005722f, 0.007206f, 0.008568f, 0.010498f,
- 0.012413f, 0.015793f, 0.019989f, 0.024826f, 0.031799f, 0.041382f, 0.054932f, 0.074768f,
- 0.103882f, 0.147949f, 0.213867f, 0.308838f, 0.429932f, 0.560059f, 0.675781f, 0.765625f,
- 0.827148f, 0.871582f, 0.901367f, 0.923340f, 0.937988f, 0.949707f, 0.958496f, 0.965820f,
- 0.969727f, 0.974609f, 0.978027f, 0.980469f, 0.983398f, 0.985840f, 0.986816f, 0.988281f,
- 0.989258f, 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995117f,
- 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000244f, 0.000244f, 0.000363f, 0.000604f, 0.000834f, 0.001020f, 0.001548f, 0.001970f,
- 0.002262f, 0.002548f, 0.003157f, 0.003914f, 0.004681f, 0.005962f, 0.006943f, 0.008263f,
- 0.010277f, 0.012589f, 0.015144f, 0.018951f, 0.023788f, 0.030014f, 0.039001f, 0.051056f,
- 0.069092f, 0.094666f, 0.133911f, 0.192993f, 0.279053f, 0.394287f, 0.524414f, 0.646484f,
- 0.743652f, 0.812988f, 0.861328f, 0.895020f, 0.917969f, 0.935547f, 0.947754f, 0.957520f,
- 0.963867f, 0.969238f, 0.974121f, 0.978027f, 0.980469f, 0.983398f, 0.984863f, 0.987305f,
- 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f,
- 0.995117f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000118f, 0.000244f, 0.000244f, 0.000584f, 0.000837f, 0.000847f, 0.001295f, 0.001681f,
- 0.002018f, 0.002348f, 0.003014f, 0.003157f, 0.004124f, 0.004547f, 0.005432f, 0.006607f,
- 0.008163f, 0.010071f, 0.011925f, 0.014786f, 0.017990f, 0.022659f, 0.028824f, 0.036621f,
- 0.047882f, 0.063477f, 0.087158f, 0.122559f, 0.175781f, 0.254639f, 0.363037f, 0.492188f,
- 0.618652f, 0.722168f, 0.799805f, 0.852051f, 0.889648f, 0.914551f, 0.932129f, 0.944824f,
- 0.955078f, 0.962891f, 0.968262f, 0.973633f, 0.977051f, 0.980469f, 0.982910f, 0.984863f,
- 0.987305f, 0.988281f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f,
- 0.995117f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000242f, 0.000243f, 0.000243f, 0.000481f, 0.000742f, 0.000843f, 0.000969f, 0.001348f,
- 0.001726f, 0.001791f, 0.002348f, 0.002853f, 0.003452f, 0.003735f, 0.004757f, 0.005516f,
- 0.006744f, 0.008102f, 0.009621f, 0.011948f, 0.014320f, 0.017365f, 0.021698f, 0.027298f,
- 0.034546f, 0.044891f, 0.059875f, 0.081055f, 0.112915f, 0.161255f, 0.234009f, 0.335693f,
- 0.462646f, 0.592285f, 0.702637f, 0.785645f, 0.843750f, 0.883301f, 0.911133f, 0.929688f,
- 0.944336f, 0.954590f, 0.961914f, 0.967773f, 0.973633f, 0.977539f, 0.980469f, 0.982910f,
- 0.985352f, 0.986816f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.993652f,
- 0.994629f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000100f, 0.000216f, 0.000243f, 0.000365f, 0.000517f, 0.000836f, 0.000964f, 0.001148f,
- 0.001472f, 0.001674f, 0.001785f, 0.002438f, 0.002815f, 0.003490f, 0.004070f, 0.004837f,
- 0.005608f, 0.006630f, 0.008095f, 0.009483f, 0.011551f, 0.013847f, 0.016953f, 0.020584f,
- 0.025879f, 0.033051f, 0.042664f, 0.055817f, 0.075500f, 0.105103f, 0.149536f, 0.216553f,
- 0.312988f, 0.436768f, 0.568359f, 0.685059f, 0.773926f, 0.835449f, 0.878418f, 0.907227f,
- 0.927734f, 0.943359f, 0.953125f, 0.962402f, 0.967285f, 0.973145f, 0.977051f, 0.980469f,
- 0.983887f, 0.985352f, 0.987305f, 0.989258f, 0.990234f, 0.991699f, 0.992188f, 0.993164f,
- 0.994141f, 0.994629f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000150f, 0.000242f, 0.000364f, 0.000441f, 0.000627f, 0.000916f, 0.000959f,
- 0.000968f, 0.001463f, 0.001671f, 0.002222f, 0.002577f, 0.002714f, 0.003479f, 0.004208f,
- 0.004723f, 0.005669f, 0.006886f, 0.007637f, 0.009315f, 0.011154f, 0.013596f, 0.016205f,
- 0.019821f, 0.024963f, 0.031250f, 0.040375f, 0.053009f, 0.071167f, 0.098511f, 0.139648f,
- 0.202271f, 0.293457f, 0.414307f, 0.548340f, 0.669434f, 0.762695f, 0.829590f, 0.874512f,
- 0.904785f, 0.926758f, 0.941895f, 0.953613f, 0.961914f, 0.968262f, 0.973633f, 0.977539f,
- 0.980957f, 0.983398f, 0.985352f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.992188f,
- 0.993164f, 0.994629f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000231f, 0.000232f, 0.000363f, 0.000486f, 0.000503f, 0.000724f, 0.001104f,
- 0.001080f, 0.001271f, 0.001509f, 0.001976f, 0.002247f, 0.002476f, 0.002895f, 0.003553f,
- 0.004192f, 0.004871f, 0.005623f, 0.006332f, 0.007584f, 0.008957f, 0.010849f, 0.012917f,
- 0.015396f, 0.019226f, 0.023941f, 0.030060f, 0.038513f, 0.050385f, 0.067627f, 0.093140f,
- 0.131714f, 0.190674f, 0.278076f, 0.395752f, 0.530273f, 0.655762f, 0.753906f, 0.823242f,
- 0.870605f, 0.903320f, 0.925781f, 0.941406f, 0.953125f, 0.961914f, 0.969238f, 0.974121f,
- 0.978027f, 0.980957f, 0.983887f, 0.985840f, 0.988281f, 0.989258f, 0.990723f, 0.991699f,
- 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000000f, 0.000009f, 0.000116f, 0.000360f, 0.000484f, 0.000485f, 0.000536f, 0.000827f,
- 0.000935f, 0.001077f, 0.001204f, 0.001561f, 0.001974f, 0.002136f, 0.002777f, 0.002964f,
- 0.003517f, 0.004192f, 0.004711f, 0.005505f, 0.006283f, 0.007408f, 0.008713f, 0.010674f,
- 0.012375f, 0.015099f, 0.018677f, 0.022797f, 0.028732f, 0.036835f, 0.047974f, 0.064270f,
- 0.088318f, 0.124634f, 0.180664f, 0.264893f, 0.380615f, 0.516113f, 0.645020f, 0.747559f,
- 0.819824f, 0.870117f, 0.902344f, 0.925293f, 0.941406f, 0.953613f, 0.962402f, 0.969238f,
- 0.974121f, 0.978027f, 0.981934f, 0.984375f, 0.986328f, 0.988281f, 0.989746f, 0.990723f,
- 0.992676f, 0.993164f, 0.997559f, 0.998047f, 0.998047f, 0.997559f, 0.998047f, 0.998047f,
- 0.000000f, 0.000000f, 0.000074f, 0.000337f, 0.000481f, 0.000484f, 0.000485f, 0.000556f,
- 0.000823f, 0.001143f, 0.001187f, 0.001391f, 0.001781f, 0.002155f, 0.002327f, 0.002760f,
- 0.003008f, 0.003433f, 0.004101f, 0.004681f, 0.005417f, 0.006443f, 0.007393f, 0.008560f,
- 0.010345f, 0.012177f, 0.014496f, 0.018127f, 0.022125f, 0.027740f, 0.035736f, 0.046173f,
- 0.061920f, 0.084717f, 0.119324f, 0.173218f, 0.254883f, 0.368652f, 0.505371f, 0.637207f,
- 0.742676f, 0.818359f, 0.868164f, 0.902832f, 0.925781f, 0.942383f, 0.953613f, 0.963379f,
- 0.970215f, 0.975098f, 0.979004f, 0.982422f, 0.984863f, 0.986328f, 0.988770f, 0.990723f,
- 0.991699f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000188f, 0.000358f, 0.000481f, 0.000484f, 0.000484f,
- 0.000704f, 0.000852f, 0.001165f, 0.001316f, 0.001500f, 0.001685f, 0.001933f, 0.002079f,
- 0.002720f, 0.003136f, 0.003727f, 0.003723f, 0.004513f, 0.005207f, 0.006275f, 0.007236f,
- 0.008453f, 0.010056f, 0.011848f, 0.014191f, 0.017212f, 0.021652f, 0.026978f, 0.034241f,
- 0.044678f, 0.058990f, 0.081421f, 0.114929f, 0.167236f, 0.247070f, 0.360596f, 0.498291f,
- 0.632812f, 0.741211f, 0.818359f, 0.869629f, 0.903809f, 0.927734f, 0.943848f, 0.955566f,
- 0.964355f, 0.970703f, 0.976074f, 0.979492f, 0.982422f, 0.985840f, 0.987793f, 0.989258f,
- 0.990723f, 0.992188f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000121f, 0.000120f, 0.000288f, 0.000357f, 0.000479f, 0.000483f,
- 0.000535f, 0.000711f, 0.000862f, 0.001256f, 0.001351f, 0.001502f, 0.001719f, 0.002146f,
- 0.002037f, 0.002653f, 0.003248f, 0.003222f, 0.003820f, 0.004456f, 0.005173f, 0.006008f,
- 0.007072f, 0.008247f, 0.009758f, 0.011826f, 0.013771f, 0.016861f, 0.020935f, 0.025986f,
- 0.032928f, 0.043030f, 0.057587f, 0.078918f, 0.111755f, 0.162964f, 0.241943f, 0.355713f,
- 0.495117f, 0.632324f, 0.742676f, 0.819336f, 0.871582f, 0.905762f, 0.929688f, 0.945312f,
- 0.957031f, 0.965332f, 0.972168f, 0.976562f, 0.980957f, 0.983887f, 0.986328f, 0.988281f,
- 0.990234f, 0.991699f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000200f, 0.000412f, 0.000471f, 0.000599f,
- 0.000598f, 0.000596f, 0.000805f, 0.001099f, 0.001334f, 0.001417f, 0.001456f, 0.001723f,
- 0.002102f, 0.002283f, 0.002579f, 0.003208f, 0.003233f, 0.003740f, 0.004574f, 0.005287f,
- 0.006012f, 0.006870f, 0.008018f, 0.009354f, 0.011208f, 0.013542f, 0.016495f, 0.020370f,
- 0.025284f, 0.032410f, 0.041901f, 0.056183f, 0.077087f, 0.109558f, 0.160278f, 0.239380f,
- 0.354492f, 0.496094f, 0.635254f, 0.747070f, 0.823730f, 0.875488f, 0.908691f, 0.931641f,
- 0.947266f, 0.958008f, 0.966309f, 0.972656f, 0.978027f, 0.981445f, 0.984863f, 0.986816f,
- 0.989258f, 0.990723f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000237f, 0.000239f, 0.000430f, 0.000465f,
- 0.000599f, 0.000724f, 0.000716f, 0.000815f, 0.000981f, 0.001334f, 0.001299f, 0.001545f,
- 0.001617f, 0.001935f, 0.002110f, 0.002501f, 0.002823f, 0.003408f, 0.003790f, 0.004467f,
- 0.005112f, 0.005848f, 0.006718f, 0.007942f, 0.009514f, 0.011093f, 0.013092f, 0.015945f,
- 0.019608f, 0.024689f, 0.031494f, 0.041046f, 0.054901f, 0.075989f, 0.108032f, 0.158936f,
- 0.239014f, 0.356201f, 0.500488f, 0.642090f, 0.753418f, 0.830566f, 0.880859f, 0.912598f,
- 0.935059f, 0.950195f, 0.960449f, 0.968262f, 0.975098f, 0.979980f, 0.982910f, 0.985352f,
- 0.987793f, 0.990234f, 0.996582f, 0.997070f, 0.997070f, 0.996582f, 0.997070f, 0.996582f,
- 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000120f, 0.000121f, 0.000312f, 0.000407f,
- 0.000707f, 0.000597f, 0.000648f, 0.000720f, 0.000941f, 0.001008f, 0.001229f, 0.001289f,
- 0.001423f, 0.001726f, 0.002060f, 0.002211f, 0.002506f, 0.002985f, 0.003036f, 0.003683f,
- 0.004066f, 0.004833f, 0.005592f, 0.006611f, 0.007675f, 0.008965f, 0.010811f, 0.012833f,
- 0.015854f, 0.019485f, 0.024429f, 0.031036f, 0.040466f, 0.054108f, 0.074890f, 0.107727f,
- 0.159180f, 0.241699f, 0.362549f, 0.510742f, 0.653809f, 0.763184f, 0.837891f, 0.887207f,
- 0.917480f, 0.938477f, 0.953613f, 0.962891f, 0.970703f, 0.976562f, 0.980469f, 0.984375f,
- 0.986816f, 0.988770f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000000f, 0.000000f, 0.000000f, 0.000117f, 0.000118f, 0.000120f, 0.000129f, 0.000434f,
- 0.000536f, 0.000613f, 0.000716f, 0.000799f, 0.000720f, 0.000768f, 0.001024f, 0.001202f,
- 0.001501f, 0.001530f, 0.001568f, 0.001897f, 0.002190f, 0.002502f, 0.002893f, 0.003105f,
- 0.003551f, 0.004021f, 0.004791f, 0.005405f, 0.006313f, 0.007309f, 0.008720f, 0.010712f,
- 0.012657f, 0.015472f, 0.018982f, 0.023697f, 0.030579f, 0.040009f, 0.054138f, 0.075012f,
- 0.107849f, 0.161377f, 0.247070f, 0.373047f, 0.525391f, 0.667969f, 0.776855f, 0.847656f,
- 0.894043f, 0.923340f, 0.942871f, 0.956543f, 0.965820f, 0.973145f, 0.978027f, 0.982422f,
- 0.985352f, 0.987793f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996582f, 0.996094f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000081f, 0.000116f, 0.000227f, 0.000360f,
- 0.000366f, 0.000642f, 0.000691f, 0.000711f, 0.000806f, 0.000721f, 0.000925f, 0.000947f,
- 0.001155f, 0.001478f, 0.001554f, 0.001612f, 0.001929f, 0.002354f, 0.002291f, 0.002712f,
- 0.003029f, 0.003441f, 0.003876f, 0.004452f, 0.005276f, 0.006256f, 0.007149f, 0.008568f,
- 0.010040f, 0.012566f, 0.015160f, 0.018677f, 0.023376f, 0.030411f, 0.039642f, 0.053986f,
- 0.075134f, 0.109436f, 0.165527f, 0.255127f, 0.387695f, 0.544434f, 0.686523f, 0.791016f,
- 0.858398f, 0.901367f, 0.928711f, 0.947266f, 0.959961f, 0.968262f, 0.975098f, 0.980469f,
- 0.983887f, 0.987305f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000088f, 0.000085f, 0.000338f, 0.000351f,
- 0.000359f, 0.000480f, 0.000539f, 0.000698f, 0.000798f, 0.000793f, 0.000834f, 0.000891f,
- 0.000941f, 0.001143f, 0.001422f, 0.001512f, 0.001833f, 0.001955f, 0.002144f, 0.002426f,
- 0.002716f, 0.003262f, 0.003572f, 0.003860f, 0.004456f, 0.005173f, 0.006191f, 0.006939f,
- 0.008545f, 0.010162f, 0.012375f, 0.014969f, 0.018555f, 0.023376f, 0.029953f, 0.039673f,
- 0.054077f, 0.076477f, 0.112000f, 0.171509f, 0.268066f, 0.408203f, 0.569336f, 0.709961f,
- 0.808105f, 0.872070f, 0.910645f, 0.935059f, 0.951660f, 0.963379f, 0.971680f, 0.977539f,
- 0.982422f, 0.985840f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000116f, 0.000340f,
- 0.000353f, 0.000349f, 0.000480f, 0.000576f, 0.000668f, 0.000700f, 0.000818f, 0.000833f,
- 0.000787f, 0.001125f, 0.001110f, 0.001407f, 0.001489f, 0.001563f, 0.001804f, 0.002073f,
- 0.002285f, 0.002409f, 0.002985f, 0.003052f, 0.003853f, 0.004433f, 0.005100f, 0.006046f,
- 0.007046f, 0.008156f, 0.009827f, 0.012138f, 0.014740f, 0.018311f, 0.023071f, 0.029770f,
- 0.040009f, 0.054810f, 0.078003f, 0.116150f, 0.180176f, 0.284668f, 0.434570f, 0.599121f,
- 0.735352f, 0.827637f, 0.885254f, 0.919922f, 0.941895f, 0.957031f, 0.967285f, 0.975098f,
- 0.979980f, 0.984375f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995605f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000235f,
- 0.000320f, 0.000351f, 0.000353f, 0.000478f, 0.000602f, 0.000651f, 0.000793f, 0.000706f,
- 0.000816f, 0.000814f, 0.000898f, 0.001062f, 0.001259f, 0.001441f, 0.001564f, 0.001772f,
- 0.001743f, 0.002134f, 0.002512f, 0.002668f, 0.003193f, 0.003746f, 0.004341f, 0.004902f,
- 0.005909f, 0.006920f, 0.008125f, 0.009605f, 0.011711f, 0.014549f, 0.018280f, 0.023163f,
- 0.030334f, 0.040375f, 0.055939f, 0.080566f, 0.122070f, 0.192383f, 0.307373f, 0.467773f,
- 0.634277f, 0.763184f, 0.846191f, 0.897461f, 0.928711f, 0.948730f, 0.962402f, 0.971680f,
- 0.978516f, 0.982422f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995117f, 0.995117f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000185f, 0.000190f,
- 0.000272f, 0.000281f, 0.000464f, 0.000466f, 0.000476f, 0.000521f, 0.000654f, 0.000680f,
- 0.000699f, 0.000815f, 0.000814f, 0.000890f, 0.001110f, 0.001283f, 0.001311f, 0.001590f,
- 0.001727f, 0.001801f, 0.002020f, 0.002312f, 0.002897f, 0.003267f, 0.003592f, 0.004143f,
- 0.004810f, 0.005844f, 0.006618f, 0.008018f, 0.009697f, 0.011597f, 0.014374f, 0.018127f,
- 0.023056f, 0.030258f, 0.041107f, 0.057373f, 0.084045f, 0.129517f, 0.208618f, 0.337646f,
- 0.508789f, 0.673828f, 0.793457f, 0.866211f, 0.911133f, 0.938965f, 0.955566f, 0.967285f,
- 0.975586f, 0.980469f, 0.994141f, 0.994141f, 0.994629f, 0.994629f, 0.994629f, 0.994141f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000226f, 0.000431f, 0.000456f, 0.000467f, 0.000352f, 0.000496f, 0.000588f,
- 0.000891f, 0.000771f, 0.000803f, 0.000947f, 0.000972f, 0.001078f, 0.001033f, 0.001279f,
- 0.001436f, 0.001483f, 0.001831f, 0.002033f, 0.002264f, 0.002710f, 0.002996f, 0.003582f,
- 0.004032f, 0.004665f, 0.005592f, 0.006527f, 0.007820f, 0.009323f, 0.011581f, 0.014328f,
- 0.018219f, 0.023239f, 0.030777f, 0.042084f, 0.059448f, 0.089233f, 0.140869f, 0.230713f,
- 0.375977f, 0.556641f, 0.715332f, 0.822266f, 0.885742f, 0.924316f, 0.947266f, 0.962402f,
- 0.972656f, 0.978516f, 0.993164f, 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000283f, 0.000229f, 0.000425f, 0.000303f, 0.000336f, 0.000469f, 0.000474f,
- 0.000728f, 0.000663f, 0.000883f, 0.000695f, 0.000679f, 0.000858f, 0.000919f, 0.000980f,
- 0.001218f, 0.001330f, 0.001665f, 0.001637f, 0.002054f, 0.002335f, 0.002508f, 0.002880f,
- 0.003323f, 0.004055f, 0.004730f, 0.005463f, 0.006485f, 0.007740f, 0.009293f, 0.011566f,
- 0.014175f, 0.017944f, 0.023346f, 0.031433f, 0.043304f, 0.063232f, 0.096313f, 0.155518f,
- 0.260498f, 0.424561f, 0.611328f, 0.758789f, 0.852051f, 0.904785f, 0.937012f, 0.955566f,
- 0.968262f, 0.977051f, 0.992676f, 0.992676f, 0.993164f, 0.993652f, 0.993164f, 0.993652f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000256f, 0.000216f, 0.000406f, 0.000426f, 0.000457f, 0.000453f,
- 0.000472f, 0.000651f, 0.000593f, 0.000876f, 0.000571f, 0.000590f, 0.000819f, 0.000809f,
- 0.001000f, 0.001224f, 0.001293f, 0.001637f, 0.001790f, 0.001863f, 0.002298f, 0.002550f,
- 0.002995f, 0.003201f, 0.003933f, 0.004677f, 0.005360f, 0.006447f, 0.007763f, 0.009377f,
- 0.011330f, 0.014420f, 0.017944f, 0.023560f, 0.032196f, 0.045380f, 0.067383f, 0.105469f,
- 0.175659f, 0.301025f, 0.484375f, 0.669922f, 0.801270f, 0.879395f, 0.922852f, 0.948242f,
- 0.963379f, 0.974121f, 0.992188f, 0.992188f, 0.992188f, 0.993164f, 0.992188f, 0.993164f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000230f, 0.000206f, 0.000355f, 0.000335f, 0.000305f,
- 0.000461f, 0.000565f, 0.000474f, 0.000429f, 0.000520f, 0.000758f, 0.000777f, 0.000668f,
- 0.000821f, 0.001013f, 0.001089f, 0.001325f, 0.001570f, 0.001787f, 0.001707f, 0.002037f,
- 0.002457f, 0.002892f, 0.003359f, 0.003881f, 0.004616f, 0.005203f, 0.006336f, 0.007477f,
- 0.009048f, 0.011345f, 0.014015f, 0.018356f, 0.024307f, 0.033661f, 0.048279f, 0.073303f,
- 0.118774f, 0.204102f, 0.354492f, 0.554688f, 0.729492f, 0.840332f, 0.902832f, 0.937988f,
- 0.958008f, 0.971191f, 0.991699f, 0.992188f, 0.992188f, 0.991699f, 0.992188f, 0.991699f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000205f, 0.000248f, 0.000213f, 0.000344f,
- 0.000437f, 0.000351f, 0.000352f, 0.000359f, 0.000389f, 0.000482f, 0.000676f, 0.000560f,
- 0.000806f, 0.000813f, 0.000927f, 0.001230f, 0.001392f, 0.001526f, 0.001627f, 0.001629f,
- 0.002047f, 0.002321f, 0.002661f, 0.003317f, 0.003752f, 0.004406f, 0.005119f, 0.005936f,
- 0.007156f, 0.009003f, 0.010941f, 0.013985f, 0.018539f, 0.025131f, 0.035248f, 0.051880f,
- 0.081543f, 0.137207f, 0.244507f, 0.424561f, 0.632812f, 0.787598f, 0.876465f, 0.924805f,
- 0.951172f, 0.966797f, 0.990723f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000224f, 0.000171f, 0.000276f,
- 0.000278f, 0.000288f, 0.000329f, 0.000365f, 0.000459f, 0.000483f, 0.000626f, 0.000716f,
- 0.000767f, 0.000793f, 0.000800f, 0.000897f, 0.000976f, 0.001156f, 0.001322f, 0.001427f,
- 0.001799f, 0.001997f, 0.002256f, 0.002773f, 0.002806f, 0.003515f, 0.004040f, 0.004910f,
- 0.005730f, 0.007046f, 0.008858f, 0.011124f, 0.014374f, 0.018982f, 0.026123f, 0.037659f,
- 0.057129f, 0.093445f, 0.164062f, 0.301514f, 0.511230f, 0.712402f, 0.838867f, 0.906738f,
- 0.942383f, 0.961914f, 0.989746f, 0.990234f, 0.989746f, 0.990234f, 0.989746f, 0.990234f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000173f, 0.000140f,
- 0.000138f, 0.000232f, 0.000291f, 0.000318f, 0.000338f, 0.000346f, 0.000422f, 0.000368f,
- 0.000680f, 0.000722f, 0.000765f, 0.000766f, 0.000803f, 0.001069f, 0.001103f, 0.001185f,
- 0.001611f, 0.001593f, 0.001939f, 0.002211f, 0.002569f, 0.003008f, 0.003239f, 0.003952f,
- 0.004681f, 0.005630f, 0.007008f, 0.008720f, 0.011200f, 0.014587f, 0.019653f, 0.027527f,
- 0.040955f, 0.064514f, 0.110413f, 0.204224f, 0.381104f, 0.609863f, 0.785645f, 0.881836f,
- 0.931152f, 0.956543f, 0.988770f, 0.989258f, 0.989258f, 0.989258f, 0.989258f, 0.988770f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000123f, 0.000121f, 0.000090f,
- 0.000102f, 0.000063f, 0.000156f, 0.000248f, 0.000333f, 0.000321f, 0.000431f, 0.000392f,
- 0.000349f, 0.000434f, 0.000674f, 0.000741f, 0.000776f, 0.000936f, 0.000888f, 0.001049f,
- 0.001179f, 0.001326f, 0.001686f, 0.001732f, 0.002050f, 0.002150f, 0.002453f, 0.003016f,
- 0.003601f, 0.004444f, 0.005692f, 0.006741f, 0.008324f, 0.011093f, 0.014709f, 0.020752f,
- 0.029800f, 0.045654f, 0.074951f, 0.136108f, 0.264893f, 0.486816f, 0.710938f, 0.848145f,
- 0.916992f, 0.950684f, 0.987305f, 0.987793f, 0.987793f, 0.988281f, 0.987793f, 0.987793f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000100f,
- 0.000049f, 0.000039f, 0.000125f, 0.000121f, 0.000184f, 0.000280f, 0.000366f, 0.000392f,
- 0.000333f, 0.000341f, 0.000477f, 0.000597f, 0.000607f, 0.000747f, 0.000767f, 0.000961f,
- 0.000936f, 0.001056f, 0.001306f, 0.001388f, 0.001633f, 0.001836f, 0.001997f, 0.002348f,
- 0.002878f, 0.003332f, 0.004131f, 0.005165f, 0.006519f, 0.008568f, 0.011444f, 0.015419f,
- 0.021881f, 0.032532f, 0.052032f, 0.091187f, 0.177246f, 0.357910f, 0.610352f, 0.800781f,
- 0.897461f, 0.942871f, 0.985352f, 0.986328f, 0.986816f, 0.986328f, 0.986328f, 0.986328f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000099f, 0.000076f,
- 0.000060f, 0.000108f, 0.000040f, 0.000127f, 0.000127f, 0.000121f, 0.000200f, 0.000265f,
- 0.000360f, 0.000316f, 0.000428f, 0.000455f, 0.000456f, 0.000583f, 0.000682f, 0.000750f,
- 0.000773f, 0.000824f, 0.000937f, 0.001220f, 0.001262f, 0.001384f, 0.001622f, 0.001862f,
- 0.002157f, 0.002817f, 0.003414f, 0.004082f, 0.004993f, 0.006561f, 0.008560f, 0.011696f,
- 0.016022f, 0.023529f, 0.036469f, 0.062286f, 0.117126f, 0.245605f, 0.487549f, 0.732910f,
- 0.870605f, 0.933105f, 0.983887f, 0.984863f, 0.984863f, 0.984863f, 0.984375f, 0.984863f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000096f,
- 0.000075f, 0.000061f, 0.000083f, 0.000096f, 0.000034f, 0.000101f, 0.000121f, 0.000137f,
- 0.000211f, 0.000324f, 0.000381f, 0.000373f, 0.000420f, 0.000472f, 0.000494f, 0.000690f,
- 0.000793f, 0.000768f, 0.000853f, 0.000867f, 0.000978f, 0.001003f, 0.001145f, 0.001416f,
- 0.001888f, 0.002125f, 0.002491f, 0.003004f, 0.003864f, 0.005028f, 0.006500f, 0.008682f,
- 0.011856f, 0.016922f, 0.025757f, 0.042603f, 0.078247f, 0.161743f, 0.358398f, 0.641602f,
- 0.833496f, 0.920410f, 0.981934f, 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
- 0.000122f, 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f,
- 0.000097f, 0.000078f, 0.000062f, 0.000051f, 0.000043f, 0.000072f, 0.000030f, 0.000060f,
- 0.000109f, 0.000206f, 0.000216f, 0.000333f, 0.000347f, 0.000395f, 0.000415f, 0.000458f,
- 0.000568f, 0.000664f, 0.000709f, 0.000598f, 0.000781f, 0.000628f, 0.001053f, 0.001046f,
- 0.001179f, 0.001579f, 0.001649f, 0.002386f, 0.002857f, 0.003727f, 0.004894f, 0.006363f,
- 0.008789f, 0.012314f, 0.018616f, 0.029709f, 0.052429f, 0.105652f, 0.244385f, 0.524414f,
- 0.782715f, 0.904785f, 0.979492f, 0.980957f, 0.979980f, 0.979980f, 0.980469f, 0.980469f,
- 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000097f, 0.000079f, 0.000065f, 0.000054f, 0.000045f, 0.000073f, 0.000032f,
- 0.000089f, 0.000038f, 0.000134f, 0.000138f, 0.000211f, 0.000333f, 0.000370f, 0.000400f,
- 0.000420f, 0.000496f, 0.000566f, 0.000494f, 0.000584f, 0.000714f, 0.000708f, 0.000843f,
- 0.001056f, 0.001019f, 0.001327f, 0.001812f, 0.001908f, 0.002798f, 0.003479f, 0.004578f,
- 0.006195f, 0.008881f, 0.012901f, 0.020599f, 0.035339f, 0.069214f, 0.159058f, 0.394531f,
- 0.709961f, 0.882812f, 0.977051f, 0.978027f, 0.977539f, 0.976562f, 0.977051f, 0.977539f,
- 0.000000f, 0.000121f, 0.000120f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f,
- 0.000119f, 0.000120f, 0.000102f, 0.000084f, 0.000071f, 0.000059f, 0.000048f, 0.000041f,
- 0.000035f, 0.000062f, 0.000026f, 0.000098f, 0.000103f, 0.000136f, 0.000230f, 0.000327f,
- 0.000356f, 0.000338f, 0.000387f, 0.000499f, 0.000577f, 0.000627f, 0.000669f, 0.000611f,
- 0.000699f, 0.000904f, 0.000893f, 0.001340f, 0.001666f, 0.002068f, 0.002377f, 0.003105f,
- 0.004345f, 0.006218f, 0.009178f, 0.013962f, 0.024170f, 0.045441f, 0.101868f, 0.271973f,
- 0.612305f, 0.853027f, 0.973145f, 0.974121f, 0.973633f, 0.974121f, 0.973633f, 0.974121f,
- 0.000121f, 0.000120f, 0.000119f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
- 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000119f,
- 0.000119f, 0.000119f, 0.000119f, 0.000108f, 0.000091f, 0.000075f, 0.000063f, 0.000053f,
- 0.000045f, 0.000039f, 0.000034f, 0.000040f, 0.000090f, 0.000068f, 0.000104f, 0.000127f,
- 0.000220f, 0.000302f, 0.000412f, 0.000316f, 0.000444f, 0.000495f, 0.000428f, 0.000510f,
- 0.000463f, 0.000614f, 0.000726f, 0.000719f, 0.001164f, 0.001533f, 0.001707f, 0.002079f,
- 0.002848f, 0.004189f, 0.006142f, 0.009491f, 0.016113f, 0.029343f, 0.064758f, 0.175415f,
- 0.490723f, 0.812012f, 0.968750f, 0.969727f, 0.969238f, 0.969727f, 0.969727f, 0.969727f,
- 0.000000f, 0.000117f, 0.000117f, 0.000115f, 0.000118f, 0.000118f, 0.000117f, 0.000117f,
- 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000117f,
- 0.000117f, 0.000117f, 0.000117f, 0.000118f, 0.000117f, 0.000100f, 0.000082f, 0.000070f,
- 0.000060f, 0.000051f, 0.000043f, 0.000038f, 0.000033f, 0.000053f, 0.000027f, 0.000089f,
- 0.000105f, 0.000137f, 0.000227f, 0.000277f, 0.000293f, 0.000284f, 0.000300f, 0.000420f,
- 0.000367f, 0.000473f, 0.000467f, 0.000555f, 0.000625f, 0.000870f, 0.001177f, 0.001563f,
- 0.001982f, 0.002714f, 0.004051f, 0.006134f, 0.010384f, 0.018967f, 0.040314f, 0.108887f,
- 0.358643f, 0.755859f, 0.962891f, 0.963867f, 0.964355f, 0.963867f, 0.963379f, 0.963379f,
- 0.000000f, 0.000000f, 0.000098f, 0.000103f, 0.000111f, 0.000112f, 0.000112f, 0.000114f,
- 0.000113f, 0.000115f, 0.000114f, 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000115f,
- 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000116f, 0.000109f, 0.000094f,
- 0.000078f, 0.000067f, 0.000058f, 0.000050f, 0.000043f, 0.000038f, 0.000033f, 0.000054f,
- 0.000025f, 0.000078f, 0.000091f, 0.000173f, 0.000203f, 0.000252f, 0.000331f, 0.000277f,
- 0.000264f, 0.000407f, 0.000342f, 0.000444f, 0.000470f, 0.000542f, 0.000773f, 0.001081f,
- 0.001245f, 0.001682f, 0.002602f, 0.003744f, 0.006248f, 0.011566f, 0.025040f, 0.065491f,
- 0.236938f, 0.678223f, 0.956055f, 0.956543f, 0.956543f, 0.956543f, 0.957031f, 0.957031f,
- 0.000000f, 0.000000f, 0.000021f, 0.000080f, 0.000072f, 0.000089f, 0.000100f, 0.000099f,
- 0.000105f, 0.000107f, 0.000107f, 0.000110f, 0.000109f, 0.000110f, 0.000111f, 0.000111f,
- 0.000112f, 0.000112f, 0.000112f, 0.000113f, 0.000113f, 0.000113f, 0.000113f, 0.000113f,
- 0.000105f, 0.000090f, 0.000078f, 0.000067f, 0.000057f, 0.000050f, 0.000043f, 0.000038f,
- 0.000033f, 0.000029f, 0.000025f, 0.000055f, 0.000091f, 0.000130f, 0.000225f, 0.000275f,
- 0.000254f, 0.000290f, 0.000259f, 0.000378f, 0.000333f, 0.000362f, 0.000458f, 0.000587f,
- 0.000876f, 0.001062f, 0.001382f, 0.002398f, 0.003763f, 0.006603f, 0.014496f, 0.038300f,
- 0.143677f, 0.573730f, 0.946777f, 0.947266f, 0.947266f, 0.947266f, 0.948242f, 0.947266f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000014f, 0.000036f, 0.000072f,
- 0.000082f, 0.000080f, 0.000094f, 0.000096f, 0.000099f, 0.000098f, 0.000103f, 0.000103f,
- 0.000103f, 0.000106f, 0.000105f, 0.000107f, 0.000107f, 0.000108f, 0.000108f, 0.000109f,
- 0.000109f, 0.000109f, 0.000105f, 0.000090f, 0.000078f, 0.000067f, 0.000059f, 0.000051f,
- 0.000045f, 0.000039f, 0.000034f, 0.000030f, 0.000026f, 0.000045f, 0.000086f, 0.000108f,
- 0.000143f, 0.000212f, 0.000227f, 0.000204f, 0.000231f, 0.000263f, 0.000315f, 0.000354f,
- 0.000481f, 0.000702f, 0.000888f, 0.001257f, 0.002018f, 0.003738f, 0.007675f, 0.021317f,
- 0.080933f, 0.444336f, 0.934082f, 0.935059f, 0.935059f, 0.935059f, 0.935059f, 0.935059f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000024f, 0.000038f, 0.000059f, 0.000063f, 0.000076f, 0.000080f, 0.000085f,
- 0.000089f, 0.000091f, 0.000092f, 0.000095f, 0.000097f, 0.000099f, 0.000098f, 0.000101f,
- 0.000101f, 0.000102f, 0.000103f, 0.000104f, 0.000104f, 0.000091f, 0.000080f, 0.000069f,
- 0.000062f, 0.000053f, 0.000046f, 0.000041f, 0.000035f, 0.000032f, 0.000027f, 0.000039f,
- 0.000052f, 0.000103f, 0.000139f, 0.000178f, 0.000190f, 0.000178f, 0.000185f, 0.000247f,
- 0.000274f, 0.000368f, 0.000528f, 0.000637f, 0.001027f, 0.001937f, 0.003853f, 0.010445f,
- 0.041718f, 0.304199f, 0.917480f, 0.917480f, 0.917969f, 0.917480f, 0.918457f, 0.917969f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000023f, 0.000037f,
- 0.000048f, 0.000048f, 0.000063f, 0.000063f, 0.000074f, 0.000077f, 0.000080f, 0.000083f,
- 0.000086f, 0.000088f, 0.000090f, 0.000091f, 0.000092f, 0.000094f, 0.000095f, 0.000096f,
- 0.000084f, 0.000073f, 0.000064f, 0.000057f, 0.000049f, 0.000043f, 0.000037f, 0.000033f,
- 0.000029f, 0.000025f, 0.000060f, 0.000061f, 0.000087f, 0.000118f, 0.000156f, 0.000131f,
- 0.000175f, 0.000226f, 0.000230f, 0.000373f, 0.000507f, 0.000992f, 0.001814f, 0.004639f,
- 0.018799f, 0.176758f, 0.894043f, 0.894531f, 0.895508f, 0.895020f, 0.895020f, 0.895996f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000019f, 0.000028f, 0.000034f, 0.000043f,
- 0.000052f, 0.000057f, 0.000062f, 0.000067f, 0.000070f, 0.000074f, 0.000075f, 0.000079f,
- 0.000081f, 0.000083f, 0.000085f, 0.000076f, 0.000068f, 0.000059f, 0.000051f, 0.000046f,
- 0.000040f, 0.000035f, 0.000030f, 0.000026f, 0.000028f, 0.000038f, 0.000072f, 0.000100f,
- 0.000120f, 0.000107f, 0.000152f, 0.000156f, 0.000254f, 0.000436f, 0.000722f, 0.001875f,
- 0.007088f, 0.083069f, 0.863281f, 0.862305f, 0.863281f, 0.862305f, 0.863281f, 0.862793f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000005f, 0.000015f, 0.000022f, 0.000030f, 0.000037f, 0.000042f,
- 0.000048f, 0.000053f, 0.000058f, 0.000060f, 0.000064f, 0.000067f, 0.000069f, 0.000061f,
- 0.000053f, 0.000047f, 0.000041f, 0.000036f, 0.000031f, 0.000027f, 0.000023f, 0.000020f,
- 0.000036f, 0.000063f, 0.000082f, 0.000081f, 0.000104f, 0.000149f, 0.000263f, 0.000616f,
- 0.002337f, 0.028168f, 0.816406f, 0.816895f, 0.816895f, 0.816895f, 0.817383f, 0.816895f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000003f, 0.000011f, 0.000019f, 0.000026f, 0.000031f, 0.000036f,
- 0.000041f, 0.000045f, 0.000050f, 0.000047f, 0.000041f, 0.000036f, 0.000031f, 0.000027f,
- 0.000023f, 0.000019f, 0.000028f, 0.000029f, 0.000053f, 0.000052f, 0.000072f, 0.000165f,
- 0.000511f, 0.006050f, 0.751465f, 0.752441f, 0.752930f, 0.752441f, 0.752441f, 0.752930f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000011f, 0.000017f, 0.000021f, 0.000027f,
- 0.000028f, 0.000024f, 0.000020f, 0.000017f, 0.000013f, 0.000020f, 0.000021f, 0.000029f,
- 0.000057f, 0.000588f, 0.665039f, 0.664551f, 0.665527f, 0.665039f, 0.665039f, 0.665039f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000009f, 0.000006f,
- 0.000004f, 0.000007f, 0.557129f, 0.558105f, 0.557617f, 0.557617f, 0.558594f, 0.558105f,
- },
- {
- 0.163818f, 0.558105f, 0.755859f, 0.841797f, 0.886230f, 0.912109f, 0.929199f, 0.941406f,
- 0.950195f, 0.957031f, 0.961914f, 0.966309f, 0.970215f, 0.972656f, 0.975586f, 0.978027f,
- 0.979492f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f,
- 0.989258f, 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
- 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995117f, 0.995117f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.998047f, 0.998047f,
- 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999512f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.027023f, 0.138184f, 0.353760f, 0.583984f, 0.735352f, 0.819336f, 0.868652f, 0.898926f,
- 0.918945f, 0.933594f, 0.943848f, 0.952148f, 0.958984f, 0.963867f, 0.967773f, 0.971680f,
- 0.974121f, 0.976562f, 0.978516f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986328f,
- 0.986816f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.990723f, 0.991699f, 0.992676f,
- 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.994141f, 0.995117f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.009819f, 0.044250f, 0.113525f, 0.244995f, 0.430420f, 0.608887f, 0.733887f, 0.810547f,
- 0.860352f, 0.892578f, 0.913086f, 0.929688f, 0.940918f, 0.949219f, 0.956055f, 0.961426f,
- 0.966309f, 0.970215f, 0.972656f, 0.975586f, 0.977539f, 0.979980f, 0.980957f, 0.983398f,
- 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.988281f, 0.989746f, 0.989746f, 0.991211f,
- 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f,
- 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997559f,
- 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.004848f, 0.020447f, 0.046814f, 0.096313f, 0.183228f, 0.319092f, 0.484375f, 0.631836f,
- 0.739258f, 0.810547f, 0.857422f, 0.888672f, 0.910645f, 0.925781f, 0.938965f, 0.947754f,
- 0.954590f, 0.960449f, 0.964355f, 0.968750f, 0.971191f, 0.974609f, 0.977051f, 0.979004f,
- 0.980957f, 0.982422f, 0.983887f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.989258f,
- 0.990234f, 0.990723f, 0.991211f, 0.991699f, 0.992676f, 0.992676f, 0.993652f, 0.993652f,
- 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996582f,
- 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.003096f, 0.011017f, 0.024399f, 0.046600f, 0.083191f, 0.145386f, 0.243774f, 0.379395f,
- 0.529297f, 0.656738f, 0.750977f, 0.813965f, 0.857910f, 0.887695f, 0.909668f, 0.925293f,
- 0.937500f, 0.946289f, 0.953613f, 0.959473f, 0.964355f, 0.968262f, 0.971191f, 0.974121f,
- 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987793f,
- 0.988281f, 0.989258f, 0.989746f, 0.991211f, 0.991699f, 0.991699f, 0.992676f, 0.993164f,
- 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f,
- 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.001808f, 0.006992f, 0.014923f, 0.026413f, 0.044403f, 0.073120f, 0.119446f, 0.193115f,
- 0.300537f, 0.433594f, 0.568848f, 0.680664f, 0.763184f, 0.821289f, 0.860840f, 0.890137f,
- 0.909668f, 0.925293f, 0.937500f, 0.945801f, 0.953613f, 0.959473f, 0.963867f, 0.968262f,
- 0.971680f, 0.974609f, 0.977051f, 0.979004f, 0.980957f, 0.982422f, 0.983887f, 0.984863f,
- 0.986816f, 0.987305f, 0.987793f, 0.989746f, 0.989746f, 0.991211f, 0.991699f, 0.992188f,
- 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.994629f, 0.995605f, 0.996094f, 0.996094f,
- 0.996094f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.001668f, 0.005253f, 0.010010f, 0.016602f, 0.026459f, 0.042023f, 0.065369f, 0.101868f,
- 0.158081f, 0.241455f, 0.354248f, 0.483887f, 0.606934f, 0.706055f, 0.777832f, 0.830566f,
- 0.867188f, 0.893066f, 0.912109f, 0.926270f, 0.938477f, 0.946289f, 0.953125f, 0.959473f,
- 0.964355f, 0.968750f, 0.971680f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.982910f,
- 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990234f, 0.991211f,
- 0.992188f, 0.993164f, 0.993164f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
- 0.998047f, 0.998535f, 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
- 0.001086f, 0.003477f, 0.006756f, 0.011604f, 0.018066f, 0.027222f, 0.039978f, 0.059448f,
- 0.088257f, 0.132690f, 0.198120f, 0.291504f, 0.408447f, 0.531250f, 0.641602f, 0.728516f,
- 0.793457f, 0.839844f, 0.873047f, 0.896973f, 0.915527f, 0.929199f, 0.939941f, 0.948730f,
- 0.955566f, 0.960938f, 0.965332f, 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979492f,
- 0.981445f, 0.983398f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.989746f,
- 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.994629f,
- 0.995605f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f, 0.997559f,
- 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000982f, 0.002764f, 0.004925f, 0.008194f, 0.012703f, 0.018417f, 0.026154f, 0.037964f,
- 0.053894f, 0.078552f, 0.113770f, 0.166626f, 0.242310f, 0.343262f, 0.460449f, 0.576660f,
- 0.675293f, 0.753418f, 0.809570f, 0.851074f, 0.879883f, 0.902344f, 0.919434f, 0.931152f,
- 0.941895f, 0.950195f, 0.956055f, 0.960938f, 0.965820f, 0.969727f, 0.973145f, 0.976074f,
- 0.978027f, 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.988770f,
- 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
- 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000723f, 0.002268f, 0.003639f, 0.006371f, 0.009392f, 0.013046f, 0.018570f, 0.026016f,
- 0.035919f, 0.049957f, 0.070618f, 0.099609f, 0.142212f, 0.204590f, 0.290039f, 0.396973f,
- 0.512207f, 0.619141f, 0.707520f, 0.775391f, 0.825195f, 0.860352f, 0.887207f, 0.907715f,
- 0.923340f, 0.935547f, 0.944824f, 0.951660f, 0.958496f, 0.963379f, 0.967773f, 0.971191f,
- 0.974121f, 0.977051f, 0.979492f, 0.980957f, 0.982910f, 0.984375f, 0.985352f, 0.987305f,
- 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993164f,
- 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000364f, 0.001690f, 0.003056f, 0.004982f, 0.007217f, 0.010124f, 0.013931f, 0.018738f,
- 0.025177f, 0.034332f, 0.045990f, 0.063599f, 0.088501f, 0.124146f, 0.175781f, 0.248047f,
- 0.341797f, 0.451416f, 0.562012f, 0.659668f, 0.738281f, 0.797852f, 0.841797f, 0.872559f,
- 0.896484f, 0.914062f, 0.928711f, 0.938477f, 0.947266f, 0.954590f, 0.959473f, 0.964844f,
- 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979980f, 0.981934f, 0.983398f, 0.985352f,
- 0.986816f, 0.987793f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f,
- 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996094f, 0.996582f,
- 0.997070f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000365f, 0.001221f, 0.002531f, 0.003979f, 0.005829f, 0.007874f, 0.010475f, 0.013962f,
- 0.018402f, 0.024368f, 0.032257f, 0.042847f, 0.057983f, 0.079346f, 0.109375f, 0.153198f,
- 0.214233f, 0.295898f, 0.397705f, 0.506836f, 0.609863f, 0.698730f, 0.767578f, 0.817871f,
- 0.854980f, 0.883301f, 0.903809f, 0.920410f, 0.933105f, 0.942871f, 0.950195f, 0.957031f,
- 0.962402f, 0.966797f, 0.970703f, 0.973633f, 0.976562f, 0.979004f, 0.981445f, 0.982910f,
- 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.989746f, 0.989746f, 0.991211f, 0.992188f,
- 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000343f, 0.001357f, 0.002039f, 0.003130f, 0.004398f, 0.006432f, 0.008141f, 0.010925f,
- 0.014008f, 0.018326f, 0.023331f, 0.030655f, 0.040558f, 0.053680f, 0.071960f, 0.098206f,
- 0.134644f, 0.187012f, 0.258057f, 0.349854f, 0.455566f, 0.562012f, 0.656738f, 0.734863f,
- 0.792969f, 0.836914f, 0.868652f, 0.894043f, 0.912598f, 0.926758f, 0.937988f, 0.947266f,
- 0.954590f, 0.960449f, 0.964355f, 0.968750f, 0.972656f, 0.975586f, 0.978027f, 0.980469f,
- 0.981934f, 0.983398f, 0.985840f, 0.986816f, 0.988281f, 0.989258f, 0.990723f, 0.990723f,
- 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
- 0.996582f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000244f, 0.001185f, 0.001561f, 0.002504f, 0.003990f, 0.005272f, 0.006573f, 0.008606f,
- 0.010933f, 0.013878f, 0.017715f, 0.022415f, 0.029068f, 0.038086f, 0.049774f, 0.066162f,
- 0.088257f, 0.120361f, 0.164917f, 0.227173f, 0.308838f, 0.407959f, 0.515137f, 0.615723f,
- 0.700684f, 0.767090f, 0.817383f, 0.854492f, 0.882812f, 0.904297f, 0.920898f, 0.932617f,
- 0.943359f, 0.951172f, 0.957520f, 0.962891f, 0.967773f, 0.971191f, 0.974121f, 0.977539f,
- 0.979492f, 0.981445f, 0.983887f, 0.985352f, 0.986816f, 0.988281f, 0.988770f, 0.989258f,
- 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
- 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000243f, 0.000847f, 0.001555f, 0.002224f, 0.003141f, 0.004093f, 0.005264f, 0.006817f,
- 0.008850f, 0.010948f, 0.014053f, 0.017456f, 0.022339f, 0.028351f, 0.036011f, 0.046326f,
- 0.060791f, 0.080444f, 0.107788f, 0.146851f, 0.201660f, 0.274658f, 0.366699f, 0.470215f,
- 0.574707f, 0.666016f, 0.740234f, 0.797363f, 0.839355f, 0.871094f, 0.895508f, 0.913574f,
- 0.927734f, 0.938965f, 0.947754f, 0.955566f, 0.960449f, 0.965332f, 0.969727f, 0.973145f,
- 0.976074f, 0.979004f, 0.981445f, 0.982910f, 0.984863f, 0.986328f, 0.987305f, 0.988770f,
- 0.989258f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994141f, 0.994629f,
- 0.995117f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000244f, 0.000767f, 0.001042f, 0.001934f, 0.002502f, 0.003588f, 0.004292f, 0.005558f,
- 0.006824f, 0.008667f, 0.010872f, 0.013802f, 0.017426f, 0.021637f, 0.027176f, 0.033936f,
- 0.043304f, 0.056549f, 0.073914f, 0.098083f, 0.132446f, 0.180664f, 0.245239f, 0.330078f,
- 0.429199f, 0.533203f, 0.631348f, 0.711914f, 0.775879f, 0.823242f, 0.860352f, 0.886230f,
- 0.907227f, 0.923340f, 0.935059f, 0.944824f, 0.952148f, 0.958984f, 0.964844f, 0.968750f,
- 0.972168f, 0.975586f, 0.978516f, 0.980957f, 0.982422f, 0.983887f, 0.985840f, 0.987305f,
- 0.988770f, 0.989746f, 0.990234f, 0.992188f, 0.992676f, 0.992676f, 0.994141f, 0.994141f,
- 0.995117f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000000f, 0.000485f, 0.001062f, 0.001658f, 0.002398f, 0.002998f, 0.003805f, 0.004723f,
- 0.006004f, 0.007084f, 0.009102f, 0.011093f, 0.013489f, 0.016876f, 0.020813f, 0.025803f,
- 0.032257f, 0.040924f, 0.052673f, 0.068298f, 0.090149f, 0.120239f, 0.162598f, 0.221313f,
- 0.298096f, 0.392822f, 0.496582f, 0.597656f, 0.684082f, 0.754883f, 0.807617f, 0.848145f,
- 0.877930f, 0.900391f, 0.917969f, 0.931641f, 0.941406f, 0.950684f, 0.957031f, 0.962402f,
- 0.967773f, 0.971680f, 0.974609f, 0.978027f, 0.980469f, 0.982422f, 0.984375f, 0.985840f,
- 0.987305f, 0.988281f, 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f,
- 0.994141f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000244f, 0.000477f, 0.000852f, 0.001439f, 0.002045f, 0.002424f, 0.003101f, 0.004093f,
- 0.004887f, 0.005989f, 0.007751f, 0.008606f, 0.011002f, 0.013420f, 0.016251f, 0.020035f,
- 0.024628f, 0.030579f, 0.039093f, 0.049255f, 0.063599f, 0.083191f, 0.109924f, 0.148071f,
- 0.200928f, 0.270996f, 0.359863f, 0.461670f, 0.564453f, 0.656738f, 0.732910f, 0.791992f,
- 0.836426f, 0.869629f, 0.894531f, 0.913086f, 0.928223f, 0.939453f, 0.949219f, 0.956055f,
- 0.961914f, 0.966797f, 0.970703f, 0.975098f, 0.977051f, 0.979492f, 0.982422f, 0.983887f,
- 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f,
- 0.993652f, 0.994629f, 0.998047f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.998535f,
- 0.000242f, 0.000650f, 0.000847f, 0.001138f, 0.001621f, 0.002239f, 0.002527f, 0.003325f,
- 0.004227f, 0.005165f, 0.006462f, 0.007389f, 0.008904f, 0.011024f, 0.013130f, 0.015915f,
- 0.019272f, 0.023819f, 0.029205f, 0.036652f, 0.046417f, 0.059418f, 0.077209f, 0.101562f,
- 0.136230f, 0.183350f, 0.248047f, 0.331055f, 0.429688f, 0.533203f, 0.630859f, 0.711426f,
- 0.776367f, 0.824219f, 0.861328f, 0.887695f, 0.908691f, 0.924805f, 0.937500f, 0.946777f,
- 0.954102f, 0.960938f, 0.966309f, 0.970215f, 0.974121f, 0.977539f, 0.979492f, 0.981934f,
- 0.983887f, 0.985840f, 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992676f,
- 0.993164f, 0.994141f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000089f, 0.000243f, 0.000827f, 0.000964f, 0.001418f, 0.001579f, 0.002296f, 0.002914f,
- 0.003632f, 0.004280f, 0.005344f, 0.006130f, 0.007545f, 0.008949f, 0.010498f, 0.012733f,
- 0.015686f, 0.018646f, 0.023010f, 0.028229f, 0.034851f, 0.044098f, 0.056122f, 0.072388f,
- 0.094788f, 0.125610f, 0.168945f, 0.228271f, 0.306396f, 0.401123f, 0.504883f, 0.604492f,
- 0.691895f, 0.760742f, 0.813477f, 0.853027f, 0.881836f, 0.904297f, 0.921387f, 0.934570f,
- 0.944824f, 0.953125f, 0.959961f, 0.964844f, 0.969727f, 0.973633f, 0.976562f, 0.979492f,
- 0.981934f, 0.983887f, 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.991211f, 0.992188f,
- 0.992676f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000069f, 0.000461f, 0.000609f, 0.000933f, 0.001088f, 0.001488f, 0.001900f, 0.002378f,
- 0.003101f, 0.003687f, 0.004547f, 0.005276f, 0.006233f, 0.007282f, 0.008820f, 0.010239f,
- 0.012581f, 0.015312f, 0.018341f, 0.022095f, 0.027344f, 0.034027f, 0.041687f, 0.053467f,
- 0.067810f, 0.088440f, 0.117126f, 0.156616f, 0.211426f, 0.284180f, 0.375977f, 0.478760f,
- 0.581543f, 0.672363f, 0.746094f, 0.802734f, 0.845703f, 0.877441f, 0.900879f, 0.918457f,
- 0.933105f, 0.943848f, 0.951660f, 0.959473f, 0.964355f, 0.968750f, 0.974121f, 0.977051f,
- 0.979492f, 0.982422f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.990234f, 0.991211f,
- 0.992188f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000244f, 0.000348f, 0.000606f, 0.000737f, 0.001079f, 0.001458f, 0.001783f, 0.002192f,
- 0.002924f, 0.003231f, 0.003862f, 0.004551f, 0.005169f, 0.006367f, 0.007381f, 0.008682f,
- 0.010590f, 0.012199f, 0.014900f, 0.017761f, 0.021530f, 0.026108f, 0.032349f, 0.039642f,
- 0.050446f, 0.064392f, 0.083313f, 0.109436f, 0.145996f, 0.197021f, 0.266357f, 0.354248f,
- 0.455811f, 0.560059f, 0.654785f, 0.732910f, 0.793457f, 0.837891f, 0.873047f, 0.897461f,
- 0.917480f, 0.931641f, 0.941895f, 0.951172f, 0.958984f, 0.964844f, 0.969727f, 0.973633f,
- 0.977051f, 0.979980f, 0.981934f, 0.984375f, 0.985840f, 0.988281f, 0.989258f, 0.990234f,
- 0.991211f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000244f, 0.000520f, 0.000592f, 0.000720f, 0.000812f, 0.001174f, 0.001500f, 0.001884f,
- 0.002178f, 0.002831f, 0.003321f, 0.003885f, 0.004471f, 0.005436f, 0.006275f, 0.007584f,
- 0.008675f, 0.010521f, 0.012238f, 0.014557f, 0.017197f, 0.020874f, 0.025467f, 0.030960f,
- 0.038208f, 0.047821f, 0.061249f, 0.078552f, 0.103149f, 0.136841f, 0.184937f, 0.249878f,
- 0.334473f, 0.435059f, 0.539551f, 0.638184f, 0.720215f, 0.784668f, 0.832031f, 0.868164f,
- 0.894531f, 0.914062f, 0.929688f, 0.942383f, 0.950684f, 0.958984f, 0.964844f, 0.970215f,
- 0.974121f, 0.977539f, 0.979980f, 0.982422f, 0.984863f, 0.985840f, 0.988281f, 0.989258f,
- 0.990723f, 0.992188f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997559f, 0.997559f,
- 0.000000f, 0.000243f, 0.000351f, 0.000603f, 0.000708f, 0.001079f, 0.001493f, 0.001752f,
- 0.001936f, 0.002171f, 0.002911f, 0.003382f, 0.003906f, 0.004578f, 0.005222f, 0.006161f,
- 0.007362f, 0.008850f, 0.010010f, 0.011971f, 0.014145f, 0.016983f, 0.020477f, 0.024582f,
- 0.029739f, 0.036804f, 0.045837f, 0.057648f, 0.074829f, 0.097534f, 0.130127f, 0.174438f,
- 0.236572f, 0.318604f, 0.416992f, 0.523926f, 0.624023f, 0.709961f, 0.777344f, 0.827148f,
- 0.865234f, 0.893066f, 0.914062f, 0.929688f, 0.941406f, 0.951660f, 0.958496f, 0.965820f,
- 0.969238f, 0.974609f, 0.977539f, 0.980469f, 0.983398f, 0.985352f, 0.986816f, 0.988281f,
- 0.989746f, 0.990723f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000243f, 0.000244f, 0.000456f, 0.000592f, 0.000602f, 0.001025f, 0.001282f, 0.001656f,
- 0.001856f, 0.002073f, 0.002535f, 0.002768f, 0.003487f, 0.003822f, 0.004574f, 0.005589f,
- 0.006519f, 0.007336f, 0.008453f, 0.009911f, 0.011581f, 0.013985f, 0.016373f, 0.019638f,
- 0.023819f, 0.028473f, 0.035339f, 0.043945f, 0.055939f, 0.071350f, 0.093140f, 0.123474f,
- 0.165771f, 0.225342f, 0.304199f, 0.402344f, 0.509277f, 0.612305f, 0.702148f, 0.771973f,
- 0.824219f, 0.863281f, 0.891113f, 0.913086f, 0.930176f, 0.942383f, 0.951660f, 0.959473f,
- 0.965820f, 0.970215f, 0.974609f, 0.977539f, 0.980957f, 0.983887f, 0.985352f, 0.987305f,
- 0.988770f, 0.990723f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000000f, 0.000243f, 0.000276f, 0.000557f, 0.000594f, 0.000849f, 0.000845f, 0.001282f,
- 0.001520f, 0.001774f, 0.002119f, 0.002499f, 0.002840f, 0.003252f, 0.004005f, 0.004555f,
- 0.005245f, 0.006168f, 0.007233f, 0.008301f, 0.009911f, 0.011330f, 0.013748f, 0.015945f,
- 0.019089f, 0.023071f, 0.027786f, 0.034058f, 0.042542f, 0.053619f, 0.068237f, 0.089539f,
- 0.117798f, 0.158325f, 0.215698f, 0.293213f, 0.389893f, 0.498291f, 0.603027f, 0.694824f,
- 0.767090f, 0.821777f, 0.862305f, 0.891113f, 0.914062f, 0.930176f, 0.942383f, 0.952148f,
- 0.959473f, 0.965820f, 0.971680f, 0.975098f, 0.978516f, 0.981445f, 0.983887f, 0.985840f,
- 0.988281f, 0.989258f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996094f, 0.996582f,
- 0.000240f, 0.000240f, 0.000242f, 0.000365f, 0.000678f, 0.000779f, 0.000957f, 0.001003f,
- 0.001390f, 0.001656f, 0.001828f, 0.002274f, 0.002455f, 0.003210f, 0.003704f, 0.004097f,
- 0.004616f, 0.005409f, 0.006180f, 0.007092f, 0.008453f, 0.009521f, 0.011154f, 0.013397f,
- 0.015656f, 0.018509f, 0.022247f, 0.026810f, 0.032928f, 0.041046f, 0.051727f, 0.065613f,
- 0.085205f, 0.113098f, 0.152832f, 0.208496f, 0.284424f, 0.380371f, 0.489258f, 0.596680f,
- 0.690918f, 0.764648f, 0.821777f, 0.862305f, 0.892578f, 0.914551f, 0.931152f, 0.943848f,
- 0.953613f, 0.960938f, 0.967773f, 0.971680f, 0.976074f, 0.979492f, 0.982422f, 0.984863f,
- 0.986816f, 0.988281f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.996094f,
- 0.000000f, 0.000242f, 0.000242f, 0.000364f, 0.000465f, 0.000803f, 0.000927f, 0.000956f,
- 0.001275f, 0.001335f, 0.001570f, 0.001968f, 0.002184f, 0.002726f, 0.003069f, 0.003294f,
- 0.003906f, 0.004662f, 0.005245f, 0.006027f, 0.007191f, 0.008202f, 0.009460f, 0.010735f,
- 0.012970f, 0.015404f, 0.018051f, 0.021484f, 0.026321f, 0.032135f, 0.039581f, 0.049805f,
- 0.063538f, 0.082458f, 0.109497f, 0.147827f, 0.202393f, 0.277344f, 0.373535f, 0.483887f,
- 0.593262f, 0.688477f, 0.764648f, 0.821289f, 0.863281f, 0.894043f, 0.916016f, 0.932129f,
- 0.944336f, 0.954590f, 0.962402f, 0.968262f, 0.973633f, 0.977051f, 0.980957f, 0.983398f,
- 0.985352f, 0.987793f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996582f,
- 0.000000f, 0.000239f, 0.000360f, 0.000362f, 0.000363f, 0.000475f, 0.000767f, 0.000931f,
- 0.000951f, 0.001211f, 0.001491f, 0.001634f, 0.002129f, 0.002457f, 0.002678f, 0.002995f,
- 0.003393f, 0.003922f, 0.004711f, 0.005135f, 0.005955f, 0.006935f, 0.008072f, 0.009270f,
- 0.010841f, 0.012558f, 0.014618f, 0.017502f, 0.020828f, 0.025269f, 0.030884f, 0.038269f,
- 0.048218f, 0.061554f, 0.080505f, 0.106567f, 0.144287f, 0.197998f, 0.272705f, 0.369141f,
- 0.480469f, 0.591797f, 0.690430f, 0.767090f, 0.824707f, 0.866699f, 0.896484f, 0.918457f,
- 0.934570f, 0.946777f, 0.956543f, 0.963379f, 0.969727f, 0.974609f, 0.978027f, 0.981934f,
- 0.984375f, 0.986328f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000000f, 0.000208f, 0.000238f, 0.000362f, 0.000363f, 0.000555f, 0.000600f, 0.000888f,
- 0.001140f, 0.001140f, 0.001272f, 0.001661f, 0.001811f, 0.002041f, 0.002550f, 0.002636f,
- 0.002941f, 0.003492f, 0.004032f, 0.004593f, 0.005062f, 0.005875f, 0.007015f, 0.007965f,
- 0.009079f, 0.010300f, 0.012291f, 0.014229f, 0.016937f, 0.020248f, 0.024689f, 0.030151f,
- 0.037354f, 0.047028f, 0.060211f, 0.078491f, 0.104431f, 0.141602f, 0.195068f, 0.270264f,
- 0.367676f, 0.480957f, 0.594238f, 0.693848f, 0.770996f, 0.828613f, 0.869629f, 0.898438f,
- 0.921875f, 0.937012f, 0.949219f, 0.958008f, 0.964844f, 0.971680f, 0.976074f, 0.979980f,
- 0.982422f, 0.985840f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.995117f, 0.995117f,
- 0.000000f, 0.000000f, 0.000229f, 0.000358f, 0.000479f, 0.000362f, 0.000498f, 0.000634f,
- 0.000836f, 0.000927f, 0.001288f, 0.001244f, 0.001605f, 0.001732f, 0.002106f, 0.002478f,
- 0.002613f, 0.003183f, 0.003510f, 0.004021f, 0.004528f, 0.005047f, 0.005768f, 0.006859f,
- 0.007759f, 0.008865f, 0.009933f, 0.011742f, 0.013741f, 0.016678f, 0.019897f, 0.024017f,
- 0.029297f, 0.036469f, 0.045990f, 0.058990f, 0.077026f, 0.102722f, 0.140015f, 0.193604f,
- 0.269531f, 0.369141f, 0.485107f, 0.600098f, 0.700195f, 0.777344f, 0.833984f, 0.873535f,
- 0.903809f, 0.924316f, 0.940430f, 0.951172f, 0.960938f, 0.968262f, 0.973145f, 0.978027f,
- 0.980957f, 0.983887f, 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995117f,
- 0.000000f, 0.000000f, 0.000078f, 0.000353f, 0.000354f, 0.000360f, 0.000482f, 0.000573f,
- 0.000757f, 0.000923f, 0.001230f, 0.001266f, 0.001485f, 0.001679f, 0.001963f, 0.002161f,
- 0.002235f, 0.002739f, 0.003115f, 0.003563f, 0.003933f, 0.004436f, 0.004917f, 0.005623f,
- 0.006599f, 0.007469f, 0.008484f, 0.010101f, 0.011665f, 0.013695f, 0.016403f, 0.019531f,
- 0.023300f, 0.028870f, 0.035889f, 0.045135f, 0.058014f, 0.075928f, 0.101746f, 0.139160f,
- 0.193848f, 0.271729f, 0.374023f, 0.492920f, 0.609863f, 0.709473f, 0.786133f, 0.842285f,
- 0.880859f, 0.908691f, 0.928711f, 0.943848f, 0.954102f, 0.963867f, 0.969727f, 0.975098f,
- 0.979004f, 0.982422f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994629f,
- 0.000000f, 0.000000f, 0.000000f, 0.000330f, 0.000336f, 0.000352f, 0.000478f, 0.000481f,
- 0.000676f, 0.000822f, 0.001072f, 0.001228f, 0.001283f, 0.001417f, 0.001621f, 0.001938f,
- 0.001953f, 0.002377f, 0.002737f, 0.002914f, 0.003624f, 0.003721f, 0.004555f, 0.004845f,
- 0.005531f, 0.006325f, 0.007244f, 0.008255f, 0.009911f, 0.011467f, 0.013496f, 0.016068f,
- 0.018951f, 0.022888f, 0.028183f, 0.035126f, 0.044617f, 0.057220f, 0.075134f, 0.101501f,
- 0.139526f, 0.195679f, 0.276123f, 0.381592f, 0.503418f, 0.622070f, 0.721680f, 0.796387f,
- 0.850098f, 0.887207f, 0.914551f, 0.933594f, 0.947266f, 0.957520f, 0.966797f, 0.972656f,
- 0.977539f, 0.980957f, 0.993164f, 0.994141f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000243f, 0.000466f, 0.000474f, 0.000475f,
- 0.000600f, 0.000740f, 0.000796f, 0.001130f, 0.001333f, 0.001339f, 0.001440f, 0.001575f,
- 0.001961f, 0.002031f, 0.002388f, 0.002563f, 0.003174f, 0.003345f, 0.003555f, 0.004143f,
- 0.004681f, 0.005333f, 0.006191f, 0.007111f, 0.008278f, 0.009666f, 0.011177f, 0.013451f,
- 0.015511f, 0.018707f, 0.022629f, 0.027847f, 0.034515f, 0.043976f, 0.056671f, 0.075012f,
- 0.101685f, 0.140869f, 0.199341f, 0.282959f, 0.393311f, 0.519043f, 0.639160f, 0.736328f,
- 0.809082f, 0.860352f, 0.896484f, 0.920898f, 0.939453f, 0.951660f, 0.961914f, 0.969238f,
- 0.975098f, 0.979492f, 0.993164f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.993652f,
- 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000120f, 0.000367f, 0.000448f, 0.000589f,
- 0.000595f, 0.000719f, 0.000707f, 0.000809f, 0.000966f, 0.001217f, 0.001369f, 0.001405f,
- 0.001579f, 0.001786f, 0.002100f, 0.002260f, 0.002600f, 0.002762f, 0.003023f, 0.003531f,
- 0.004219f, 0.004810f, 0.005409f, 0.006092f, 0.007053f, 0.008064f, 0.009163f, 0.010941f,
- 0.012733f, 0.015251f, 0.018280f, 0.022202f, 0.027573f, 0.034271f, 0.043732f, 0.056458f,
- 0.075134f, 0.102661f, 0.143433f, 0.205078f, 0.293701f, 0.409668f, 0.538574f, 0.658203f,
- 0.753418f, 0.823242f, 0.870605f, 0.905273f, 0.927734f, 0.943848f, 0.956055f, 0.964844f,
- 0.972168f, 0.977539f, 0.992188f, 0.992676f, 0.993164f, 0.993652f, 0.993164f, 0.992676f,
- 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000224f, 0.000231f, 0.000314f, 0.000562f,
- 0.000589f, 0.000699f, 0.000717f, 0.000776f, 0.000926f, 0.000968f, 0.001242f, 0.001360f,
- 0.001487f, 0.001564f, 0.001713f, 0.002073f, 0.002169f, 0.002380f, 0.002941f, 0.003229f,
- 0.003534f, 0.003914f, 0.004509f, 0.005127f, 0.005939f, 0.006596f, 0.007812f, 0.009354f,
- 0.010559f, 0.012581f, 0.015007f, 0.018021f, 0.022079f, 0.027191f, 0.034119f, 0.043427f,
- 0.057190f, 0.075623f, 0.104492f, 0.147949f, 0.213135f, 0.308105f, 0.430664f, 0.562500f,
- 0.681641f, 0.772949f, 0.839355f, 0.884277f, 0.913574f, 0.934570f, 0.950195f, 0.961426f,
- 0.969238f, 0.975098f, 0.991211f, 0.992676f, 0.992676f, 0.992676f, 0.992676f, 0.992188f,
- 0.000000f, 0.000000f, 0.000000f, 0.000084f, 0.000117f, 0.000119f, 0.000367f, 0.000473f,
- 0.000555f, 0.000576f, 0.000674f, 0.000713f, 0.000816f, 0.000913f, 0.001049f, 0.001168f,
- 0.001263f, 0.001473f, 0.001580f, 0.001781f, 0.002005f, 0.002123f, 0.002316f, 0.002674f,
- 0.003094f, 0.003475f, 0.003967f, 0.004318f, 0.004833f, 0.005798f, 0.006699f, 0.007801f,
- 0.008888f, 0.010429f, 0.012268f, 0.014824f, 0.017792f, 0.021790f, 0.026978f, 0.033844f,
- 0.043518f, 0.057068f, 0.077148f, 0.107605f, 0.154053f, 0.224609f, 0.326904f, 0.456543f,
- 0.591797f, 0.708984f, 0.795410f, 0.855957f, 0.895508f, 0.923340f, 0.942383f, 0.955566f,
- 0.965332f, 0.973145f, 0.991211f, 0.991699f, 0.992188f, 0.992188f, 0.992188f, 0.991699f,
- 0.000000f, 0.000000f, 0.000000f, 0.000092f, 0.000070f, 0.000236f, 0.000119f, 0.000376f,
- 0.000433f, 0.000561f, 0.000688f, 0.000586f, 0.000742f, 0.000842f, 0.000881f, 0.000937f,
- 0.001141f, 0.001300f, 0.001434f, 0.001464f, 0.001598f, 0.001829f, 0.002062f, 0.002338f,
- 0.002583f, 0.003036f, 0.003460f, 0.003704f, 0.004383f, 0.004986f, 0.005615f, 0.006439f,
- 0.007267f, 0.008797f, 0.010330f, 0.012146f, 0.014473f, 0.017532f, 0.021622f, 0.026535f,
- 0.033539f, 0.043579f, 0.058044f, 0.079041f, 0.111572f, 0.162109f, 0.239746f, 0.350830f,
- 0.488770f, 0.625000f, 0.737305f, 0.817871f, 0.871582f, 0.908203f, 0.932129f, 0.949219f,
- 0.961914f, 0.970215f, 0.990234f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
- 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000100f, 0.000115f, 0.000335f, 0.000350f,
- 0.000355f, 0.000473f, 0.000633f, 0.000678f, 0.000695f, 0.000694f, 0.000812f, 0.000733f,
- 0.001109f, 0.001098f, 0.001260f, 0.001452f, 0.001377f, 0.001534f, 0.001972f, 0.001982f,
- 0.002232f, 0.002567f, 0.002764f, 0.003273f, 0.003542f, 0.004181f, 0.004738f, 0.005466f,
- 0.006268f, 0.007126f, 0.008614f, 0.010170f, 0.012093f, 0.014359f, 0.017075f, 0.021042f,
- 0.026459f, 0.033722f, 0.044159f, 0.059113f, 0.082092f, 0.117249f, 0.173218f, 0.259766f,
- 0.382080f, 0.526367f, 0.662598f, 0.768066f, 0.840332f, 0.889648f, 0.920410f, 0.940918f,
- 0.956543f, 0.966309f, 0.989746f, 0.990234f, 0.990723f, 0.990723f, 0.990723f, 0.990723f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000191f, 0.000236f, 0.000335f,
- 0.000337f, 0.000466f, 0.000399f, 0.000608f, 0.000626f, 0.000669f, 0.000696f, 0.000808f,
- 0.000859f, 0.000915f, 0.000903f, 0.001168f, 0.001245f, 0.001500f, 0.001525f, 0.001863f,
- 0.001941f, 0.002121f, 0.002399f, 0.002861f, 0.002953f, 0.003632f, 0.004105f, 0.004745f,
- 0.005333f, 0.006317f, 0.007236f, 0.008255f, 0.009857f, 0.011414f, 0.014015f, 0.016922f,
- 0.020828f, 0.026321f, 0.034149f, 0.044861f, 0.061279f, 0.085571f, 0.124878f, 0.187866f,
- 0.285645f, 0.420654f, 0.570801f, 0.703125f, 0.799805f, 0.864258f, 0.905273f, 0.932129f,
- 0.950684f, 0.963379f, 0.988770f, 0.989258f, 0.989746f, 0.989746f, 0.989746f, 0.989746f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000000f, 0.000122f, 0.000125f, 0.000232f,
- 0.000360f, 0.000342f, 0.000463f, 0.000388f, 0.000569f, 0.000638f, 0.000671f, 0.000791f,
- 0.000774f, 0.000943f, 0.000774f, 0.001018f, 0.001044f, 0.001245f, 0.001377f, 0.001410f,
- 0.001643f, 0.001970f, 0.002041f, 0.002316f, 0.002758f, 0.003023f, 0.003433f, 0.003859f,
- 0.004444f, 0.005180f, 0.006134f, 0.006920f, 0.008102f, 0.009354f, 0.011475f, 0.013649f,
- 0.016739f, 0.021011f, 0.026566f, 0.034454f, 0.046051f, 0.063843f, 0.090942f, 0.135498f,
- 0.207642f, 0.319580f, 0.467529f, 0.620605f, 0.745605f, 0.830566f, 0.886230f, 0.920898f,
- 0.943848f, 0.958984f, 0.987793f, 0.988281f, 0.988770f, 0.988770f, 0.988281f, 0.988770f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000188f, 0.000200f,
- 0.000332f, 0.000417f, 0.000338f, 0.000459f, 0.000349f, 0.000558f, 0.000642f, 0.000636f,
- 0.000629f, 0.000807f, 0.000695f, 0.000747f, 0.000827f, 0.001058f, 0.001182f, 0.001269f,
- 0.001422f, 0.001472f, 0.001921f, 0.002100f, 0.002337f, 0.002462f, 0.003073f, 0.003374f,
- 0.003708f, 0.004265f, 0.004826f, 0.005646f, 0.006596f, 0.007710f, 0.008926f, 0.011063f,
- 0.013580f, 0.016495f, 0.020737f, 0.026459f, 0.035126f, 0.047791f, 0.066833f, 0.097778f,
- 0.149170f, 0.233887f, 0.363037f, 0.523438f, 0.674805f, 0.788086f, 0.860352f, 0.906250f,
- 0.935547f, 0.954102f, 0.986328f, 0.987305f, 0.987305f, 0.987305f, 0.987305f, 0.987793f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000175f,
- 0.000155f, 0.000319f, 0.000241f, 0.000318f, 0.000455f, 0.000462f, 0.000496f, 0.000593f,
- 0.000516f, 0.000564f, 0.000667f, 0.000668f, 0.000715f, 0.000749f, 0.000925f, 0.001111f,
- 0.001246f, 0.001381f, 0.001443f, 0.001856f, 0.001997f, 0.002264f, 0.002363f, 0.002880f,
- 0.003212f, 0.003727f, 0.004208f, 0.004673f, 0.005394f, 0.006367f, 0.007404f, 0.009003f,
- 0.010651f, 0.013138f, 0.016312f, 0.020767f, 0.027054f, 0.036377f, 0.050262f, 0.071655f,
- 0.107361f, 0.167969f, 0.269287f, 0.418457f, 0.587402f, 0.730957f, 0.828125f, 0.888184f,
- 0.924805f, 0.948242f, 0.984863f, 0.986328f, 0.986328f, 0.985840f, 0.986328f, 0.986328f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000202f, 0.000133f, 0.000215f, 0.000263f, 0.000304f, 0.000442f, 0.000332f, 0.000365f,
- 0.000403f, 0.000549f, 0.000607f, 0.000750f, 0.000788f, 0.000802f, 0.000841f, 0.000958f,
- 0.001049f, 0.001188f, 0.001354f, 0.001318f, 0.001582f, 0.001928f, 0.002064f, 0.002321f,
- 0.002594f, 0.003042f, 0.003222f, 0.003796f, 0.004440f, 0.005112f, 0.006081f, 0.007259f,
- 0.008736f, 0.010612f, 0.013077f, 0.016464f, 0.020950f, 0.027664f, 0.037506f, 0.052795f,
- 0.077698f, 0.120361f, 0.194336f, 0.317627f, 0.486572f, 0.657227f, 0.785156f, 0.865234f,
- 0.913086f, 0.942871f, 0.983887f, 0.984863f, 0.984375f, 0.984863f, 0.984375f, 0.984863f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000122f, 0.000152f, 0.000257f, 0.000243f, 0.000288f, 0.000345f, 0.000228f,
- 0.000358f, 0.000363f, 0.000432f, 0.000494f, 0.000530f, 0.000582f, 0.000762f, 0.000771f,
- 0.000913f, 0.000978f, 0.001100f, 0.001305f, 0.001373f, 0.001706f, 0.001712f, 0.001922f,
- 0.002155f, 0.002569f, 0.002573f, 0.003094f, 0.003401f, 0.004272f, 0.004978f, 0.005829f,
- 0.006924f, 0.008453f, 0.010452f, 0.012871f, 0.016617f, 0.021072f, 0.028427f, 0.039429f,
- 0.056732f, 0.086243f, 0.138916f, 0.231812f, 0.381592f, 0.566406f, 0.726562f, 0.833496f,
- 0.896973f, 0.933594f, 0.981934f, 0.982910f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f,
- 0.000122f, 0.000121f, 0.000127f, 0.000215f, 0.000159f, 0.000233f, 0.000284f, 0.000326f,
- 0.000339f, 0.000339f, 0.000352f, 0.000394f, 0.000623f, 0.000622f, 0.000731f, 0.000730f,
- 0.000741f, 0.000829f, 0.000914f, 0.001017f, 0.001151f, 0.001469f, 0.001263f, 0.001480f,
- 0.001740f, 0.002069f, 0.002104f, 0.002443f, 0.002831f, 0.003519f, 0.003929f, 0.004627f,
- 0.005455f, 0.006634f, 0.008316f, 0.009949f, 0.012596f, 0.016495f, 0.021729f, 0.029877f,
- 0.042084f, 0.062805f, 0.098694f, 0.165283f, 0.284668f, 0.465088f, 0.654297f, 0.793945f,
- 0.877930f, 0.924805f, 0.979980f, 0.980957f, 0.980957f, 0.981445f, 0.981445f, 0.980957f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f,
- 0.000121f, 0.000121f, 0.000150f, 0.000163f, 0.000069f, 0.000057f, 0.000121f, 0.000231f,
- 0.000291f, 0.000304f, 0.000334f, 0.000339f, 0.000346f, 0.000569f, 0.000648f, 0.000674f,
- 0.000649f, 0.000697f, 0.000772f, 0.000834f, 0.000972f, 0.001005f, 0.001189f, 0.001359f,
- 0.001237f, 0.001567f, 0.001794f, 0.001963f, 0.002378f, 0.002712f, 0.002867f, 0.003853f,
- 0.004330f, 0.005196f, 0.006516f, 0.008026f, 0.009888f, 0.012703f, 0.016479f, 0.022110f,
- 0.031158f, 0.045746f, 0.070557f, 0.117004f, 0.204956f, 0.360596f, 0.564453f, 0.740723f,
- 0.852051f, 0.912598f, 0.977539f, 0.979492f, 0.979492f, 0.979004f, 0.979492f, 0.979004f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000098f, 0.000082f, 0.000067f, 0.000056f, 0.000124f,
- 0.000193f, 0.000240f, 0.000258f, 0.000310f, 0.000326f, 0.000335f, 0.000341f, 0.000471f,
- 0.000613f, 0.000494f, 0.000716f, 0.000742f, 0.000804f, 0.000873f, 0.000832f, 0.001070f,
- 0.001120f, 0.001146f, 0.001225f, 0.001696f, 0.001814f, 0.002041f, 0.002419f, 0.002941f,
- 0.003433f, 0.004154f, 0.004818f, 0.006077f, 0.007652f, 0.009521f, 0.012444f, 0.017029f,
- 0.023193f, 0.033539f, 0.050690f, 0.082092f, 0.144043f, 0.265869f, 0.463379f, 0.672363f,
- 0.818848f, 0.898438f, 0.975586f, 0.976562f, 0.976562f, 0.976562f, 0.976074f, 0.976562f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000114f, 0.000096f, 0.000079f, 0.000125f, 0.000056f,
- 0.000142f, 0.000120f, 0.000195f, 0.000246f, 0.000321f, 0.000305f, 0.000319f, 0.000395f,
- 0.000442f, 0.000540f, 0.000642f, 0.000638f, 0.000696f, 0.000674f, 0.000687f, 0.000857f,
- 0.000955f, 0.001128f, 0.001224f, 0.001364f, 0.001347f, 0.001555f, 0.001910f, 0.002245f,
- 0.002714f, 0.003229f, 0.003824f, 0.004673f, 0.005676f, 0.007225f, 0.009293f, 0.012802f,
- 0.017273f, 0.024368f, 0.036682f, 0.058075f, 0.100952f, 0.188721f, 0.358154f, 0.587891f,
- 0.775879f, 0.881348f, 0.972168f, 0.972656f, 0.972656f, 0.973145f, 0.973145f, 0.973633f,
- 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000112f, 0.000093f, 0.000079f, 0.000067f,
- 0.000057f, 0.000049f, 0.000133f, 0.000137f, 0.000163f, 0.000244f, 0.000328f, 0.000366f,
- 0.000356f, 0.000415f, 0.000436f, 0.000543f, 0.000555f, 0.000638f, 0.000597f, 0.000702f,
- 0.000786f, 0.000648f, 0.000891f, 0.000804f, 0.001218f, 0.001070f, 0.001355f, 0.001731f,
- 0.002171f, 0.002352f, 0.002796f, 0.003546f, 0.004189f, 0.005558f, 0.006939f, 0.009209f,
- 0.012337f, 0.017776f, 0.026016f, 0.040833f, 0.069946f, 0.130981f, 0.262207f, 0.489258f,
- 0.719238f, 0.859375f, 0.968262f, 0.969238f, 0.969727f, 0.969727f, 0.969727f, 0.969727f,
- 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000110f, 0.000093f, 0.000080f,
- 0.000068f, 0.000094f, 0.000119f, 0.000117f, 0.000120f, 0.000123f, 0.000173f, 0.000263f,
- 0.000263f, 0.000359f, 0.000386f, 0.000390f, 0.000401f, 0.000556f, 0.000549f, 0.000573f,
- 0.000502f, 0.000707f, 0.000789f, 0.000629f, 0.000847f, 0.001003f, 0.001024f, 0.001242f,
- 0.001423f, 0.001877f, 0.002012f, 0.002571f, 0.003071f, 0.003925f, 0.005131f, 0.006767f,
- 0.009140f, 0.012672f, 0.018509f, 0.028992f, 0.048309f, 0.089233f, 0.183838f, 0.383545f,
- 0.646973f, 0.830078f, 0.963867f, 0.964844f, 0.964844f, 0.965820f, 0.965820f, 0.965820f,
- 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000113f, 0.000095f,
- 0.000083f, 0.000070f, 0.000061f, 0.000054f, 0.000048f, 0.000042f, 0.000115f, 0.000112f,
- 0.000151f, 0.000213f, 0.000309f, 0.000298f, 0.000359f, 0.000337f, 0.000382f, 0.000440f,
- 0.000576f, 0.000477f, 0.000453f, 0.000690f, 0.000687f, 0.000795f, 0.000776f, 0.000911f,
- 0.001117f, 0.001119f, 0.001352f, 0.002001f, 0.002140f, 0.002832f, 0.003609f, 0.004715f,
- 0.006302f, 0.008835f, 0.013115f, 0.020004f, 0.032867f, 0.060333f, 0.124512f, 0.281982f,
- 0.557617f, 0.794434f, 0.959473f, 0.959961f, 0.960449f, 0.960449f, 0.960449f, 0.959961f,
- 0.000122f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f,
- 0.000119f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000116f,
- 0.000098f, 0.000087f, 0.000076f, 0.000065f, 0.000057f, 0.000050f, 0.000045f, 0.000091f,
- 0.000074f, 0.000106f, 0.000185f, 0.000193f, 0.000228f, 0.000328f, 0.000323f, 0.000399f,
- 0.000429f, 0.000498f, 0.000552f, 0.000432f, 0.000542f, 0.000592f, 0.000599f, 0.000729f,
- 0.000734f, 0.000885f, 0.001304f, 0.001273f, 0.001756f, 0.001931f, 0.002445f, 0.003120f,
- 0.004456f, 0.006165f, 0.008751f, 0.013466f, 0.022141f, 0.040192f, 0.082397f, 0.195679f,
- 0.455322f, 0.745117f, 0.952637f, 0.953613f, 0.953613f, 0.954102f, 0.952637f, 0.953613f,
- 0.000000f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
- 0.000118f, 0.000118f, 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000117f,
- 0.000117f, 0.000104f, 0.000092f, 0.000079f, 0.000071f, 0.000062f, 0.000055f, 0.000049f,
- 0.000044f, 0.000039f, 0.000099f, 0.000106f, 0.000158f, 0.000169f, 0.000241f, 0.000274f,
- 0.000293f, 0.000389f, 0.000360f, 0.000399f, 0.000387f, 0.000446f, 0.000401f, 0.000530f,
- 0.000565f, 0.000691f, 0.000722f, 0.000848f, 0.001147f, 0.001418f, 0.001677f, 0.002087f,
- 0.002972f, 0.004169f, 0.005623f, 0.008835f, 0.014404f, 0.026077f, 0.053467f, 0.129395f,
- 0.346924f, 0.685059f, 0.943848f, 0.945801f, 0.945801f, 0.945312f, 0.945801f, 0.945801f,
- 0.000000f, 0.000000f, 0.000117f, 0.000116f, 0.000117f, 0.000117f, 0.000116f, 0.000116f,
- 0.000115f, 0.000116f, 0.000115f, 0.000116f, 0.000115f, 0.000115f, 0.000115f, 0.000115f,
- 0.000115f, 0.000115f, 0.000110f, 0.000097f, 0.000086f, 0.000077f, 0.000067f, 0.000060f,
- 0.000053f, 0.000048f, 0.000043f, 0.000061f, 0.000090f, 0.000083f, 0.000139f, 0.000139f,
- 0.000216f, 0.000254f, 0.000307f, 0.000358f, 0.000269f, 0.000377f, 0.000324f, 0.000369f,
- 0.000405f, 0.000455f, 0.000524f, 0.000706f, 0.000701f, 0.001012f, 0.001206f, 0.001316f,
- 0.001663f, 0.002350f, 0.003571f, 0.005505f, 0.008873f, 0.016006f, 0.033234f, 0.081848f,
- 0.244751f, 0.605469f, 0.934082f, 0.935059f, 0.936035f, 0.935547f, 0.935547f, 0.935547f,
- 0.000105f, 0.000114f, 0.000113f, 0.000113f, 0.000111f, 0.000111f, 0.000112f, 0.000111f,
- 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000111f, 0.000112f, 0.000112f, 0.000112f,
- 0.000112f, 0.000112f, 0.000112f, 0.000112f, 0.000105f, 0.000093f, 0.000083f, 0.000074f,
- 0.000066f, 0.000059f, 0.000053f, 0.000048f, 0.000043f, 0.000062f, 0.000052f, 0.000063f,
- 0.000092f, 0.000146f, 0.000176f, 0.000216f, 0.000227f, 0.000263f, 0.000244f, 0.000267f,
- 0.000370f, 0.000326f, 0.000360f, 0.000391f, 0.000505f, 0.000618f, 0.000726f, 0.000969f,
- 0.001117f, 0.001651f, 0.002131f, 0.003090f, 0.005188f, 0.009499f, 0.019836f, 0.049042f,
- 0.159180f, 0.509766f, 0.921875f, 0.922852f, 0.922852f, 0.922363f, 0.923340f, 0.922852f,
- 0.000000f, 0.000000f, 0.000065f, 0.000098f, 0.000096f, 0.000101f, 0.000100f, 0.000104f,
- 0.000104f, 0.000103f, 0.000106f, 0.000106f, 0.000106f, 0.000105f, 0.000107f, 0.000107f,
- 0.000106f, 0.000107f, 0.000107f, 0.000108f, 0.000107f, 0.000108f, 0.000104f, 0.000092f,
- 0.000082f, 0.000075f, 0.000067f, 0.000059f, 0.000054f, 0.000048f, 0.000044f, 0.000039f,
- 0.000037f, 0.000058f, 0.000066f, 0.000122f, 0.000137f, 0.000175f, 0.000208f, 0.000194f,
- 0.000208f, 0.000240f, 0.000270f, 0.000281f, 0.000323f, 0.000364f, 0.000479f, 0.000591f,
- 0.000712f, 0.000986f, 0.001224f, 0.001896f, 0.002996f, 0.005196f, 0.010506f, 0.027527f,
- 0.095581f, 0.399658f, 0.905762f, 0.906738f, 0.906250f, 0.905762f, 0.905762f, 0.907227f,
- 0.000000f, 0.000000f, 0.000000f, 0.000017f, 0.000030f, 0.000054f, 0.000061f, 0.000081f,
- 0.000087f, 0.000088f, 0.000089f, 0.000093f, 0.000093f, 0.000096f, 0.000096f, 0.000097f,
- 0.000098f, 0.000099f, 0.000098f, 0.000100f, 0.000100f, 0.000101f, 0.000100f, 0.000101f,
- 0.000101f, 0.000092f, 0.000082f, 0.000074f, 0.000067f, 0.000060f, 0.000054f, 0.000049f,
- 0.000045f, 0.000040f, 0.000036f, 0.000037f, 0.000059f, 0.000077f, 0.000093f, 0.000143f,
- 0.000155f, 0.000188f, 0.000178f, 0.000184f, 0.000231f, 0.000234f, 0.000272f, 0.000352f,
- 0.000420f, 0.000525f, 0.000764f, 0.001091f, 0.001653f, 0.002705f, 0.005474f, 0.013939f,
- 0.051880f, 0.283691f, 0.883789f, 0.884766f, 0.885254f, 0.885254f, 0.885742f, 0.885254f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000013f,
- 0.000032f, 0.000046f, 0.000050f, 0.000060f, 0.000065f, 0.000065f, 0.000075f, 0.000078f,
- 0.000080f, 0.000079f, 0.000084f, 0.000083f, 0.000087f, 0.000087f, 0.000089f, 0.000090f,
- 0.000091f, 0.000091f, 0.000092f, 0.000092f, 0.000083f, 0.000075f, 0.000068f, 0.000062f,
- 0.000056f, 0.000050f, 0.000046f, 0.000042f, 0.000037f, 0.000039f, 0.000044f, 0.000072f,
- 0.000068f, 0.000089f, 0.000125f, 0.000124f, 0.000126f, 0.000153f, 0.000183f, 0.000212f,
- 0.000219f, 0.000311f, 0.000363f, 0.000566f, 0.000846f, 0.001332f, 0.002522f, 0.006252f,
- 0.023834f, 0.175415f, 0.855957f, 0.856934f, 0.856934f, 0.856934f, 0.857422f, 0.856934f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000024f, 0.000028f,
- 0.000040f, 0.000044f, 0.000051f, 0.000053f, 0.000060f, 0.000063f, 0.000064f, 0.000067f,
- 0.000071f, 0.000072f, 0.000074f, 0.000076f, 0.000077f, 0.000079f, 0.000079f, 0.000075f,
- 0.000068f, 0.000062f, 0.000056f, 0.000051f, 0.000046f, 0.000042f, 0.000038f, 0.000034f,
- 0.000031f, 0.000030f, 0.000045f, 0.000079f, 0.000081f, 0.000107f, 0.000114f, 0.000106f,
- 0.000144f, 0.000136f, 0.000171f, 0.000254f, 0.000377f, 0.000531f, 0.001037f, 0.002504f,
- 0.009140f, 0.088379f, 0.818848f, 0.820801f, 0.819824f, 0.820312f, 0.819336f, 0.820801f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000007f, 0.000014f, 0.000021f, 0.000028f,
- 0.000034f, 0.000036f, 0.000042f, 0.000046f, 0.000049f, 0.000052f, 0.000054f, 0.000056f,
- 0.000059f, 0.000061f, 0.000064f, 0.000061f, 0.000055f, 0.000050f, 0.000045f, 0.000041f,
- 0.000037f, 0.000033f, 0.000030f, 0.000027f, 0.000024f, 0.000033f, 0.000060f, 0.000059f,
- 0.000075f, 0.000073f, 0.000101f, 0.000089f, 0.000144f, 0.000226f, 0.000384f, 0.000847f,
- 0.003033f, 0.031860f, 0.770020f, 0.770996f, 0.772461f, 0.771973f, 0.772461f, 0.771973f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000016f,
- 0.000021f, 0.000023f, 0.000029f, 0.000032f, 0.000036f, 0.000039f, 0.000042f, 0.000044f,
- 0.000042f, 0.000038f, 0.000035f, 0.000031f, 0.000028f, 0.000025f, 0.000022f, 0.000020f,
- 0.000017f, 0.000024f, 0.000040f, 0.000047f, 0.000053f, 0.000063f, 0.000087f, 0.000190f,
- 0.000666f, 0.007278f, 0.708496f, 0.709961f, 0.710449f, 0.710938f, 0.710938f, 0.710449f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
- 0.000005f, 0.000010f, 0.000014f, 0.000018f, 0.000021f, 0.000024f, 0.000024f, 0.000021f,
- 0.000018f, 0.000016f, 0.000014f, 0.000012f, 0.000008f, 0.000020f, 0.000022f, 0.000025f,
- 0.000073f, 0.000744f, 0.632324f, 0.632812f, 0.633789f, 0.633789f, 0.633301f, 0.632812f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000007f, 0.000006f, 0.000004f,
- 0.000005f, 0.000007f, 0.543945f, 0.545410f, 0.545410f, 0.545410f, 0.546387f, 0.545898f,
- },
- {
- 0.159546f, 0.492676f, 0.684570f, 0.783203f, 0.838379f, 0.873535f, 0.897949f, 0.913574f,
- 0.926270f, 0.936035f, 0.943359f, 0.950195f, 0.955566f, 0.959473f, 0.963379f, 0.966797f,
- 0.969238f, 0.972168f, 0.973633f, 0.976562f, 0.978027f, 0.979492f, 0.980957f, 0.982422f,
- 0.983887f, 0.984863f, 0.985840f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.989746f,
- 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994141f,
- 0.994629f, 0.995117f, 0.995117f, 0.995605f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
- 0.997070f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f, 0.999023f,
- 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.034119f, 0.154175f, 0.341309f, 0.532227f, 0.672363f, 0.763184f, 0.820801f, 0.858398f,
- 0.885742f, 0.904297f, 0.918945f, 0.929199f, 0.938965f, 0.945801f, 0.951660f, 0.956543f,
- 0.961426f, 0.964355f, 0.968262f, 0.970703f, 0.973145f, 0.975586f, 0.977539f, 0.979004f,
- 0.980469f, 0.981934f, 0.983398f, 0.984375f, 0.985352f, 0.986328f, 0.987305f, 0.988281f,
- 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.993164f,
- 0.993652f, 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
- 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.999023f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.013390f, 0.056915f, 0.134155f, 0.257080f, 0.412109f, 0.560547f, 0.675781f, 0.755859f,
- 0.812012f, 0.851074f, 0.877930f, 0.898926f, 0.913574f, 0.925781f, 0.935059f, 0.942871f,
- 0.949707f, 0.954590f, 0.959473f, 0.963379f, 0.966797f, 0.969238f, 0.971680f, 0.975098f,
- 0.976562f, 0.978516f, 0.979980f, 0.980957f, 0.982422f, 0.984375f, 0.985352f, 0.985840f,
- 0.987305f, 0.987793f, 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.991699f, 0.992188f,
- 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.994629f, 0.995605f, 0.995605f, 0.995605f,
- 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
- 0.998535f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.006939f, 0.027863f, 0.061951f, 0.117859f, 0.204834f, 0.324707f, 0.460205f, 0.585449f,
- 0.684570f, 0.757324f, 0.810059f, 0.847168f, 0.874023f, 0.895996f, 0.910645f, 0.922852f,
- 0.933105f, 0.940918f, 0.947754f, 0.953613f, 0.958496f, 0.961914f, 0.965820f, 0.968750f,
- 0.971680f, 0.974121f, 0.976074f, 0.978027f, 0.979492f, 0.981445f, 0.982910f, 0.983887f,
- 0.984863f, 0.986328f, 0.987305f, 0.988281f, 0.988770f, 0.989746f, 0.990234f, 0.990723f,
- 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.993652f, 0.994141f, 0.995117f, 0.995605f,
- 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f,
- 0.998535f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f,
- 0.004211f, 0.016022f, 0.034119f, 0.061432f, 0.104797f, 0.170288f, 0.262695f, 0.377686f,
- 0.499756f, 0.608887f, 0.696777f, 0.762207f, 0.810547f, 0.847168f, 0.873535f, 0.893066f,
- 0.910156f, 0.922852f, 0.932617f, 0.939941f, 0.946777f, 0.953125f, 0.958496f, 0.961914f,
- 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.975586f, 0.977539f, 0.979492f, 0.981445f,
- 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.987793f, 0.987793f, 0.989258f, 0.989746f,
- 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.992676f, 0.993652f, 0.994141f, 0.994629f,
- 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999023f, 0.999512f, 0.999023f, 0.999023f,
- 0.002724f, 0.010384f, 0.020813f, 0.036285f, 0.059784f, 0.093933f, 0.145508f, 0.218018f,
- 0.313232f, 0.424072f, 0.534180f, 0.632812f, 0.709961f, 0.769531f, 0.815918f, 0.848145f,
- 0.874512f, 0.894043f, 0.909668f, 0.922363f, 0.932129f, 0.939941f, 0.946777f, 0.953125f,
- 0.958008f, 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.976562f, 0.978516f,
- 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.985352f, 0.986816f, 0.987793f, 0.988281f,
- 0.988770f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.992676f, 0.993652f, 0.994141f,
- 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.002113f, 0.007004f, 0.014091f, 0.023895f, 0.037811f, 0.057373f, 0.085632f, 0.127075f,
- 0.185425f, 0.263672f, 0.360596f, 0.465576f, 0.566895f, 0.655762f, 0.725586f, 0.779297f,
- 0.822266f, 0.853516f, 0.877441f, 0.895996f, 0.911621f, 0.923828f, 0.933105f, 0.940918f,
- 0.947754f, 0.953613f, 0.957520f, 0.962402f, 0.965820f, 0.968750f, 0.972168f, 0.974121f,
- 0.976074f, 0.978027f, 0.980469f, 0.981934f, 0.983398f, 0.984863f, 0.985352f, 0.986328f,
- 0.988281f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.992676f, 0.993164f,
- 0.993652f, 0.994629f, 0.994629f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.001575f, 0.005211f, 0.010040f, 0.016220f, 0.025665f, 0.037415f, 0.054138f, 0.078491f,
- 0.112915f, 0.160156f, 0.225464f, 0.308594f, 0.405029f, 0.506348f, 0.599121f, 0.678711f,
- 0.743164f, 0.791016f, 0.829590f, 0.859375f, 0.881836f, 0.899414f, 0.913086f, 0.924805f,
- 0.934570f, 0.942383f, 0.948730f, 0.955078f, 0.958984f, 0.963379f, 0.966797f, 0.970215f,
- 0.972168f, 0.974609f, 0.977051f, 0.979004f, 0.980957f, 0.981934f, 0.983398f, 0.984863f,
- 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.991699f, 0.992188f,
- 0.993164f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.995605f, 0.996094f,
- 0.996582f, 0.997559f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.000985f, 0.004086f, 0.007362f, 0.011887f, 0.018127f, 0.026199f, 0.036804f, 0.052002f,
- 0.072754f, 0.101318f, 0.140747f, 0.195190f, 0.266113f, 0.352539f, 0.448730f, 0.543945f,
- 0.630371f, 0.702637f, 0.759277f, 0.803711f, 0.839355f, 0.865234f, 0.886719f, 0.903320f,
- 0.916504f, 0.927734f, 0.936523f, 0.944336f, 0.950195f, 0.955566f, 0.959961f, 0.964355f,
- 0.967773f, 0.970215f, 0.973145f, 0.975586f, 0.978027f, 0.979004f, 0.980957f, 0.982910f,
- 0.984375f, 0.985352f, 0.987305f, 0.987305f, 0.988770f, 0.990234f, 0.990234f, 0.991699f,
- 0.991699f, 0.993164f, 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995605f, 0.996094f,
- 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.999023f,
- 0.000829f, 0.002878f, 0.005596f, 0.009109f, 0.013359f, 0.019089f, 0.026901f, 0.036774f,
- 0.049347f, 0.067200f, 0.091736f, 0.125854f, 0.171631f, 0.232544f, 0.308594f, 0.397461f,
- 0.491455f, 0.581055f, 0.659668f, 0.724609f, 0.775879f, 0.817383f, 0.848633f, 0.873047f,
- 0.892090f, 0.907715f, 0.920410f, 0.930664f, 0.939453f, 0.946289f, 0.951660f, 0.957520f,
- 0.960938f, 0.965820f, 0.968750f, 0.972168f, 0.974609f, 0.976562f, 0.978516f, 0.980469f,
- 0.981934f, 0.983887f, 0.984863f, 0.986328f, 0.986816f, 0.988770f, 0.989746f, 0.990234f,
- 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.995605f,
- 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000836f, 0.002403f, 0.004837f, 0.006950f, 0.010269f, 0.014679f, 0.019699f, 0.026291f,
- 0.035431f, 0.046875f, 0.062744f, 0.084045f, 0.113403f, 0.152588f, 0.204712f, 0.271729f,
- 0.353271f, 0.443115f, 0.532715f, 0.617188f, 0.688477f, 0.748047f, 0.793945f, 0.829102f,
- 0.857422f, 0.880371f, 0.898438f, 0.912598f, 0.924316f, 0.934082f, 0.941406f, 0.948242f,
- 0.954590f, 0.959473f, 0.963379f, 0.967285f, 0.970215f, 0.973145f, 0.975586f, 0.977539f,
- 0.979980f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988281f, 0.988770f,
- 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f, 0.995117f,
- 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000698f, 0.002052f, 0.003618f, 0.005703f, 0.008430f, 0.011230f, 0.015083f, 0.019821f,
- 0.026474f, 0.034393f, 0.044922f, 0.059204f, 0.077698f, 0.102661f, 0.136963f, 0.182373f,
- 0.241089f, 0.314941f, 0.398926f, 0.489014f, 0.575195f, 0.652344f, 0.717285f, 0.769043f,
- 0.810059f, 0.842773f, 0.869141f, 0.888672f, 0.904785f, 0.917969f, 0.928711f, 0.936523f,
- 0.945312f, 0.951660f, 0.957031f, 0.961426f, 0.964844f, 0.968750f, 0.971680f, 0.974121f,
- 0.976562f, 0.979004f, 0.980469f, 0.982422f, 0.983887f, 0.985352f, 0.986816f, 0.987793f,
- 0.988770f, 0.990234f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994141f,
- 0.994629f, 0.995605f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.000244f, 0.001565f, 0.002975f, 0.004433f, 0.006596f, 0.008957f, 0.012215f, 0.015533f,
- 0.020294f, 0.026062f, 0.033722f, 0.042816f, 0.055237f, 0.071960f, 0.094543f, 0.124023f,
- 0.164185f, 0.216309f, 0.281738f, 0.360352f, 0.446533f, 0.534180f, 0.615234f, 0.686523f,
- 0.743652f, 0.790527f, 0.825684f, 0.855957f, 0.878418f, 0.895996f, 0.911133f, 0.923340f,
- 0.933105f, 0.941406f, 0.948242f, 0.953613f, 0.959473f, 0.963379f, 0.966797f, 0.970703f,
- 0.973145f, 0.976074f, 0.978516f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986328f,
- 0.987305f, 0.989258f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.993652f,
- 0.994141f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f,
- 0.000365f, 0.001394f, 0.002546f, 0.004055f, 0.005394f, 0.007465f, 0.009674f, 0.012070f,
- 0.015556f, 0.019913f, 0.025696f, 0.032623f, 0.041046f, 0.052643f, 0.067383f, 0.087463f,
- 0.113708f, 0.148315f, 0.194946f, 0.254395f, 0.326416f, 0.408691f, 0.495117f, 0.579102f,
- 0.654297f, 0.716797f, 0.768066f, 0.809570f, 0.843262f, 0.868652f, 0.888184f, 0.904785f,
- 0.918457f, 0.929199f, 0.937500f, 0.945801f, 0.951660f, 0.957520f, 0.961914f, 0.965820f,
- 0.969238f, 0.972656f, 0.975098f, 0.978027f, 0.979492f, 0.981934f, 0.983398f, 0.984863f,
- 0.986328f, 0.987793f, 0.989258f, 0.989746f, 0.991211f, 0.991211f, 0.992188f, 0.993164f,
- 0.993652f, 0.994629f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000596f, 0.001077f, 0.001882f, 0.003033f, 0.004559f, 0.006241f, 0.007805f, 0.010002f,
- 0.012840f, 0.015900f, 0.019974f, 0.025131f, 0.031250f, 0.039337f, 0.049988f, 0.063843f,
- 0.080933f, 0.105164f, 0.135986f, 0.176880f, 0.230103f, 0.296631f, 0.374268f, 0.459961f,
- 0.544434f, 0.623535f, 0.691895f, 0.748535f, 0.792969f, 0.829102f, 0.857422f, 0.880371f,
- 0.897949f, 0.913086f, 0.924805f, 0.934570f, 0.942383f, 0.949219f, 0.955566f, 0.960938f,
- 0.964844f, 0.968750f, 0.971191f, 0.974121f, 0.977051f, 0.979004f, 0.980957f, 0.982910f,
- 0.984863f, 0.985840f, 0.987305f, 0.989258f, 0.989746f, 0.991211f, 0.991211f, 0.992676f,
- 0.993164f, 0.993652f, 0.997559f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.000243f, 0.001173f, 0.001889f, 0.002661f, 0.003933f, 0.005131f, 0.006496f, 0.008324f,
- 0.010574f, 0.013115f, 0.015839f, 0.019913f, 0.024445f, 0.030609f, 0.037781f, 0.047333f,
- 0.059906f, 0.075928f, 0.097229f, 0.124939f, 0.161743f, 0.209595f, 0.271240f, 0.343994f,
- 0.426758f, 0.511719f, 0.592773f, 0.666504f, 0.727051f, 0.776855f, 0.815918f, 0.847656f,
- 0.871582f, 0.892090f, 0.907715f, 0.920898f, 0.931152f, 0.940918f, 0.947754f, 0.953613f,
- 0.958496f, 0.963867f, 0.967773f, 0.970703f, 0.974121f, 0.976074f, 0.979004f, 0.980469f,
- 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.990234f, 0.990234f, 0.992188f,
- 0.992188f, 0.993164f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.000351f, 0.000842f, 0.001560f, 0.002363f, 0.003258f, 0.004131f, 0.005272f, 0.007179f,
- 0.008682f, 0.010643f, 0.013016f, 0.016037f, 0.019516f, 0.024078f, 0.029602f, 0.036591f,
- 0.045044f, 0.056641f, 0.071350f, 0.090576f, 0.116211f, 0.149414f, 0.193237f, 0.248779f,
- 0.317871f, 0.396973f, 0.481201f, 0.564453f, 0.640137f, 0.705566f, 0.759766f, 0.802734f,
- 0.836914f, 0.863281f, 0.885742f, 0.902832f, 0.916992f, 0.927734f, 0.937012f, 0.945801f,
- 0.952637f, 0.958008f, 0.961914f, 0.966309f, 0.970703f, 0.974121f, 0.976074f, 0.978516f,
- 0.980957f, 0.982910f, 0.984863f, 0.985840f, 0.987305f, 0.988281f, 0.989746f, 0.990723f,
- 0.991211f, 0.992676f, 0.997070f, 0.997559f, 0.997070f, 0.997559f, 0.997559f, 0.997559f,
- 0.000000f, 0.000886f, 0.001405f, 0.001915f, 0.002651f, 0.003870f, 0.004845f, 0.006035f,
- 0.006912f, 0.008812f, 0.010887f, 0.013229f, 0.016022f, 0.019196f, 0.023590f, 0.028992f,
- 0.035248f, 0.043304f, 0.053711f, 0.066956f, 0.085083f, 0.107727f, 0.138428f, 0.178589f,
- 0.229980f, 0.293945f, 0.370117f, 0.453369f, 0.537109f, 0.616699f, 0.685059f, 0.743164f,
- 0.790039f, 0.826660f, 0.856445f, 0.878906f, 0.897949f, 0.913574f, 0.925293f, 0.935547f,
- 0.943848f, 0.951172f, 0.957031f, 0.961914f, 0.966797f, 0.970215f, 0.973145f, 0.976562f,
- 0.979004f, 0.980469f, 0.982910f, 0.984375f, 0.985840f, 0.987305f, 0.988770f, 0.989746f,
- 0.991211f, 0.992188f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000104f, 0.000719f, 0.001065f, 0.001970f, 0.002544f, 0.003149f, 0.004230f, 0.005138f,
- 0.006119f, 0.007580f, 0.009201f, 0.010902f, 0.013260f, 0.015526f, 0.019272f, 0.022858f,
- 0.027512f, 0.033569f, 0.041199f, 0.050873f, 0.063782f, 0.079895f, 0.101135f, 0.128906f,
- 0.165771f, 0.213745f, 0.273193f, 0.345703f, 0.427002f, 0.511719f, 0.592773f, 0.666016f,
- 0.727051f, 0.776367f, 0.817871f, 0.848633f, 0.875000f, 0.894531f, 0.909668f, 0.922852f,
- 0.934082f, 0.942383f, 0.949707f, 0.956055f, 0.961914f, 0.966309f, 0.970215f, 0.973145f,
- 0.976562f, 0.978516f, 0.980957f, 0.982910f, 0.984375f, 0.986328f, 0.987305f, 0.988281f,
- 0.989746f, 0.991211f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000240f, 0.000686f, 0.001052f, 0.001375f, 0.002308f, 0.002735f, 0.003510f, 0.004269f,
- 0.005173f, 0.006649f, 0.007442f, 0.009109f, 0.011246f, 0.012886f, 0.015732f, 0.018829f,
- 0.022354f, 0.026672f, 0.032867f, 0.039764f, 0.048492f, 0.060455f, 0.075806f, 0.095276f,
- 0.121033f, 0.155273f, 0.199097f, 0.255859f, 0.324463f, 0.404053f, 0.488525f, 0.571289f,
- 0.646484f, 0.711426f, 0.765625f, 0.808105f, 0.841797f, 0.869141f, 0.890137f, 0.907227f,
- 0.920898f, 0.931641f, 0.940918f, 0.948730f, 0.955078f, 0.960449f, 0.965820f, 0.969727f,
- 0.972656f, 0.976562f, 0.978516f, 0.980957f, 0.982910f, 0.984863f, 0.986328f, 0.987793f,
- 0.989746f, 0.990723f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.997070f, 0.997070f,
- 0.000244f, 0.000597f, 0.000939f, 0.001369f, 0.001999f, 0.002329f, 0.003105f, 0.003786f,
- 0.004395f, 0.005413f, 0.006474f, 0.007793f, 0.009254f, 0.010971f, 0.012970f, 0.015526f,
- 0.018112f, 0.022049f, 0.026581f, 0.031586f, 0.038666f, 0.046967f, 0.057617f, 0.071777f,
- 0.089783f, 0.113953f, 0.145264f, 0.186646f, 0.239990f, 0.305908f, 0.383301f, 0.467285f,
- 0.551270f, 0.629883f, 0.697266f, 0.754883f, 0.799805f, 0.835938f, 0.864258f, 0.886719f,
- 0.905273f, 0.918945f, 0.931152f, 0.940918f, 0.948242f, 0.955078f, 0.961426f, 0.965332f,
- 0.969727f, 0.973633f, 0.976074f, 0.979004f, 0.980957f, 0.983398f, 0.984863f, 0.987305f,
- 0.988281f, 0.989258f, 0.996094f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000000f, 0.000475f, 0.000891f, 0.001390f, 0.001730f, 0.002060f, 0.002501f, 0.003109f,
- 0.003836f, 0.004837f, 0.005852f, 0.006859f, 0.007740f, 0.009216f, 0.010918f, 0.012863f,
- 0.014915f, 0.017731f, 0.021317f, 0.025482f, 0.030930f, 0.037262f, 0.044891f, 0.055115f,
- 0.068298f, 0.085510f, 0.107910f, 0.137207f, 0.176025f, 0.226929f, 0.289551f, 0.364746f,
- 0.447998f, 0.532715f, 0.613770f, 0.685547f, 0.744629f, 0.791992f, 0.830078f, 0.860352f,
- 0.884277f, 0.903320f, 0.917969f, 0.930176f, 0.939941f, 0.947754f, 0.954590f, 0.961426f,
- 0.966309f, 0.970215f, 0.973145f, 0.976562f, 0.979492f, 0.981445f, 0.983398f, 0.985352f,
- 0.987793f, 0.988281f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.996094f, 0.996094f,
- 0.000102f, 0.000243f, 0.000844f, 0.001124f, 0.001554f, 0.002077f, 0.002098f, 0.002682f,
- 0.003357f, 0.004280f, 0.005035f, 0.005764f, 0.006805f, 0.007633f, 0.009354f, 0.010872f,
- 0.012665f, 0.015099f, 0.017258f, 0.020599f, 0.024887f, 0.029495f, 0.035522f, 0.042999f,
- 0.053070f, 0.065125f, 0.081299f, 0.102661f, 0.130371f, 0.166992f, 0.215088f, 0.275635f,
- 0.348877f, 0.431641f, 0.517578f, 0.600098f, 0.672852f, 0.735352f, 0.785645f, 0.826172f,
- 0.856934f, 0.881836f, 0.900879f, 0.916992f, 0.930176f, 0.940430f, 0.947754f, 0.955078f,
- 0.960938f, 0.966309f, 0.969238f, 0.973633f, 0.977051f, 0.979492f, 0.981934f, 0.983887f,
- 0.986328f, 0.987793f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000241f, 0.000242f, 0.000823f, 0.000956f, 0.001225f, 0.001549f, 0.002031f, 0.002613f,
- 0.003124f, 0.003574f, 0.004467f, 0.004955f, 0.005672f, 0.006752f, 0.007603f, 0.009186f,
- 0.010704f, 0.012741f, 0.014366f, 0.017487f, 0.020142f, 0.024002f, 0.028915f, 0.034943f,
- 0.041656f, 0.050964f, 0.062622f, 0.077881f, 0.097961f, 0.124207f, 0.158936f, 0.204590f,
- 0.263184f, 0.334961f, 0.416748f, 0.502930f, 0.587891f, 0.664062f, 0.728516f, 0.780762f,
- 0.822266f, 0.854492f, 0.879395f, 0.900879f, 0.916504f, 0.928711f, 0.940430f, 0.948730f,
- 0.955566f, 0.961914f, 0.967285f, 0.970215f, 0.974121f, 0.977539f, 0.979980f, 0.982422f,
- 0.984863f, 0.986816f, 0.994629f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000000f, 0.000473f, 0.000607f, 0.000921f, 0.000957f, 0.001448f, 0.001884f, 0.002270f,
- 0.002703f, 0.002998f, 0.003862f, 0.004307f, 0.005074f, 0.005665f, 0.006737f, 0.007851f,
- 0.009216f, 0.010735f, 0.012459f, 0.014572f, 0.016998f, 0.019821f, 0.023605f, 0.027969f,
- 0.033783f, 0.040192f, 0.049286f, 0.060303f, 0.074829f, 0.093750f, 0.118774f, 0.152222f,
- 0.195801f, 0.252441f, 0.322754f, 0.404053f, 0.491943f, 0.577637f, 0.655273f, 0.722168f,
- 0.776367f, 0.820312f, 0.854004f, 0.878906f, 0.900879f, 0.916992f, 0.929688f, 0.940430f,
- 0.949707f, 0.956055f, 0.962402f, 0.967285f, 0.971191f, 0.975586f, 0.978516f, 0.980957f,
- 0.983398f, 0.985352f, 0.994141f, 0.995117f, 0.995117f, 0.995605f, 0.995117f, 0.995605f,
- 0.000000f, 0.000444f, 0.000605f, 0.000649f, 0.000926f, 0.001096f, 0.001624f, 0.001669f,
- 0.002373f, 0.002716f, 0.003231f, 0.003769f, 0.004395f, 0.005005f, 0.005878f, 0.006710f,
- 0.007793f, 0.008957f, 0.010712f, 0.012230f, 0.014244f, 0.016693f, 0.019531f, 0.022827f,
- 0.027100f, 0.032318f, 0.038971f, 0.047302f, 0.058105f, 0.072021f, 0.089966f, 0.114319f,
- 0.146362f, 0.188965f, 0.244019f, 0.312988f, 0.394287f, 0.482178f, 0.569824f, 0.650391f,
- 0.718262f, 0.774414f, 0.819336f, 0.853027f, 0.880371f, 0.900879f, 0.917969f, 0.930664f,
- 0.940918f, 0.950684f, 0.957031f, 0.962891f, 0.968262f, 0.972656f, 0.976562f, 0.979004f,
- 0.981934f, 0.984375f, 0.994141f, 0.994629f, 0.994629f, 0.995117f, 0.994629f, 0.995117f,
- 0.000000f, 0.000336f, 0.000601f, 0.000712f, 0.000810f, 0.001174f, 0.001286f, 0.001618f,
- 0.002037f, 0.002592f, 0.002920f, 0.003223f, 0.003847f, 0.004463f, 0.005119f, 0.006020f,
- 0.006783f, 0.007957f, 0.008888f, 0.010590f, 0.012230f, 0.013885f, 0.016220f, 0.019318f,
- 0.022278f, 0.026474f, 0.031403f, 0.037781f, 0.046021f, 0.055969f, 0.069397f, 0.086975f,
- 0.110413f, 0.140991f, 0.182739f, 0.236694f, 0.304932f, 0.385986f, 0.475586f, 0.563965f,
- 0.646484f, 0.716797f, 0.772461f, 0.818359f, 0.853027f, 0.880859f, 0.901855f, 0.918945f,
- 0.932129f, 0.942383f, 0.951172f, 0.958496f, 0.964355f, 0.969238f, 0.973633f, 0.977051f,
- 0.979980f, 0.982910f, 0.993652f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994629f,
- 0.000000f, 0.000244f, 0.000418f, 0.000597f, 0.000600f, 0.001085f, 0.001236f, 0.001535f,
- 0.001970f, 0.002096f, 0.002354f, 0.002834f, 0.003323f, 0.003822f, 0.004463f, 0.005146f,
- 0.005798f, 0.006859f, 0.007587f, 0.008827f, 0.009956f, 0.011833f, 0.013725f, 0.015945f,
- 0.018585f, 0.021988f, 0.025665f, 0.030807f, 0.036774f, 0.044373f, 0.054108f, 0.067383f,
- 0.084229f, 0.106812f, 0.137207f, 0.177734f, 0.230835f, 0.299072f, 0.380127f, 0.470215f,
- 0.560547f, 0.644531f, 0.715820f, 0.774414f, 0.820312f, 0.854980f, 0.882324f, 0.903809f,
- 0.921387f, 0.933594f, 0.944824f, 0.952637f, 0.960449f, 0.965820f, 0.971191f, 0.974609f,
- 0.978027f, 0.981934f, 0.993164f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
- 0.000000f, 0.000244f, 0.000411f, 0.000589f, 0.000820f, 0.000729f, 0.001086f, 0.001301f,
- 0.001677f, 0.001935f, 0.002312f, 0.002678f, 0.002846f, 0.003590f, 0.003914f, 0.004578f,
- 0.005020f, 0.005753f, 0.006706f, 0.007710f, 0.008911f, 0.010155f, 0.011528f, 0.013504f,
- 0.015747f, 0.018036f, 0.021408f, 0.024994f, 0.029816f, 0.035858f, 0.043152f, 0.053009f,
- 0.065491f, 0.082031f, 0.104065f, 0.133789f, 0.174072f, 0.226929f, 0.294434f, 0.376465f,
- 0.467773f, 0.560059f, 0.644531f, 0.717285f, 0.777344f, 0.823242f, 0.857910f, 0.885742f,
- 0.906738f, 0.922852f, 0.936523f, 0.947266f, 0.955078f, 0.961426f, 0.967285f, 0.972656f,
- 0.976562f, 0.979980f, 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
- 0.000000f, 0.000243f, 0.000243f, 0.000442f, 0.000695f, 0.000759f, 0.000837f, 0.001089f,
- 0.001625f, 0.001702f, 0.002045f, 0.002176f, 0.002756f, 0.003063f, 0.003687f, 0.003893f,
- 0.004456f, 0.005337f, 0.006062f, 0.006523f, 0.007572f, 0.008430f, 0.009880f, 0.011612f,
- 0.013237f, 0.015114f, 0.017487f, 0.020584f, 0.024445f, 0.028931f, 0.034729f, 0.042023f,
- 0.051788f, 0.063843f, 0.079956f, 0.102295f, 0.131592f, 0.171021f, 0.223877f, 0.292236f,
- 0.375000f, 0.468018f, 0.562012f, 0.648438f, 0.721191f, 0.781250f, 0.826660f, 0.862305f,
- 0.888672f, 0.909668f, 0.926270f, 0.938965f, 0.949707f, 0.957520f, 0.964355f, 0.969727f,
- 0.974121f, 0.978027f, 0.992676f, 0.993164f, 0.993164f, 0.992676f, 0.993164f, 0.993164f,
- 0.000000f, 0.000242f, 0.000242f, 0.000242f, 0.000564f, 0.000692f, 0.000826f, 0.001094f,
- 0.001280f, 0.001457f, 0.001673f, 0.002232f, 0.002411f, 0.002789f, 0.003174f, 0.003649f,
- 0.003859f, 0.004349f, 0.004990f, 0.005898f, 0.006622f, 0.007496f, 0.008209f, 0.009583f,
- 0.011284f, 0.013062f, 0.014763f, 0.017120f, 0.020020f, 0.023804f, 0.028412f, 0.033905f,
- 0.041016f, 0.050140f, 0.062469f, 0.078552f, 0.100159f, 0.129272f, 0.169067f, 0.222290f,
- 0.291504f, 0.376465f, 0.470703f, 0.566406f, 0.653320f, 0.728027f, 0.786621f, 0.832031f,
- 0.866699f, 0.893555f, 0.914062f, 0.929688f, 0.942383f, 0.952148f, 0.959961f, 0.966797f,
- 0.972168f, 0.976074f, 0.991211f, 0.992188f, 0.992676f, 0.992188f, 0.992676f, 0.992676f,
- 0.000241f, 0.000241f, 0.000240f, 0.000242f, 0.000486f, 0.000637f, 0.000916f, 0.000933f,
- 0.001003f, 0.001284f, 0.001584f, 0.001925f, 0.002134f, 0.002502f, 0.002731f, 0.003134f,
- 0.003435f, 0.004036f, 0.004379f, 0.005077f, 0.005688f, 0.006557f, 0.007347f, 0.007942f,
- 0.009506f, 0.010712f, 0.012527f, 0.014603f, 0.016693f, 0.019592f, 0.023285f, 0.027512f,
- 0.033173f, 0.040283f, 0.049347f, 0.061432f, 0.077271f, 0.098938f, 0.128052f, 0.168091f,
- 0.222168f, 0.292725f, 0.379150f, 0.476807f, 0.573730f, 0.662598f, 0.735840f, 0.794434f,
- 0.839844f, 0.873535f, 0.898926f, 0.918945f, 0.934082f, 0.945312f, 0.955566f, 0.962402f,
- 0.969238f, 0.974609f, 0.990723f, 0.991699f, 0.992188f, 0.992188f, 0.992188f, 0.992188f,
- 0.000000f, 0.000238f, 0.000240f, 0.000362f, 0.000362f, 0.000521f, 0.000631f, 0.000909f,
- 0.000937f, 0.001249f, 0.001373f, 0.001693f, 0.001746f, 0.002184f, 0.002436f, 0.002680f,
- 0.003094f, 0.003576f, 0.003828f, 0.004463f, 0.004990f, 0.005589f, 0.006439f, 0.006943f,
- 0.008217f, 0.009384f, 0.010719f, 0.012184f, 0.014130f, 0.016373f, 0.019241f, 0.022675f,
- 0.027161f, 0.032379f, 0.039307f, 0.048645f, 0.060455f, 0.076416f, 0.097778f, 0.127441f,
- 0.168213f, 0.223633f, 0.296387f, 0.385986f, 0.485107f, 0.583984f, 0.673340f, 0.746582f,
- 0.804199f, 0.848633f, 0.880371f, 0.905273f, 0.923828f, 0.938477f, 0.949707f, 0.958984f,
- 0.965820f, 0.972656f, 0.990234f, 0.991211f, 0.991211f, 0.991211f, 0.991211f, 0.991211f,
- 0.000000f, 0.000234f, 0.000238f, 0.000236f, 0.000360f, 0.000482f, 0.000614f, 0.000786f,
- 0.000900f, 0.001056f, 0.001336f, 0.001466f, 0.001671f, 0.001907f, 0.002333f, 0.002546f,
- 0.002871f, 0.003067f, 0.003500f, 0.003813f, 0.004425f, 0.004574f, 0.005459f, 0.006092f,
- 0.006660f, 0.007660f, 0.008987f, 0.010071f, 0.011841f, 0.013847f, 0.016022f, 0.018829f,
- 0.022339f, 0.026779f, 0.031677f, 0.038910f, 0.047913f, 0.059601f, 0.075684f, 0.097290f,
- 0.127319f, 0.169189f, 0.226807f, 0.302490f, 0.394775f, 0.497314f, 0.598633f, 0.686523f,
- 0.759766f, 0.814941f, 0.857422f, 0.888672f, 0.912109f, 0.930176f, 0.943359f, 0.954102f,
- 0.962402f, 0.968750f, 0.988770f, 0.990234f, 0.990234f, 0.990234f, 0.991211f, 0.990723f,
- 0.000000f, 0.000036f, 0.000166f, 0.000357f, 0.000356f, 0.000478f, 0.000566f, 0.000638f,
- 0.000893f, 0.001146f, 0.001242f, 0.001330f, 0.001502f, 0.001773f, 0.001918f, 0.002024f,
- 0.002501f, 0.002604f, 0.003067f, 0.003334f, 0.003708f, 0.004044f, 0.004646f, 0.005268f,
- 0.006241f, 0.006931f, 0.007774f, 0.008911f, 0.010277f, 0.011475f, 0.013542f, 0.015732f,
- 0.018417f, 0.022049f, 0.026154f, 0.031189f, 0.038269f, 0.047119f, 0.059265f, 0.075256f,
- 0.097534f, 0.128906f, 0.172119f, 0.231934f, 0.311035f, 0.407715f, 0.513184f, 0.615723f,
- 0.703613f, 0.773926f, 0.827637f, 0.867188f, 0.897461f, 0.919434f, 0.936035f, 0.948730f,
- 0.958984f, 0.966309f, 0.988770f, 0.989746f, 0.989746f, 0.990234f, 0.989746f, 0.989746f,
- 0.000000f, 0.000028f, 0.000093f, 0.000334f, 0.000465f, 0.000472f, 0.000373f, 0.000685f,
- 0.000695f, 0.001027f, 0.001128f, 0.001155f, 0.001419f, 0.001435f, 0.001760f, 0.001850f,
- 0.002241f, 0.002373f, 0.002604f, 0.002821f, 0.003334f, 0.003666f, 0.004139f, 0.004627f,
- 0.005207f, 0.005886f, 0.006596f, 0.007580f, 0.008705f, 0.009911f, 0.011520f, 0.013237f,
- 0.015427f, 0.017944f, 0.021423f, 0.025497f, 0.030945f, 0.037537f, 0.046692f, 0.058624f,
- 0.075317f, 0.098267f, 0.130493f, 0.176025f, 0.239136f, 0.323242f, 0.424561f, 0.533691f,
- 0.636230f, 0.723145f, 0.790039f, 0.841797f, 0.880371f, 0.906738f, 0.926758f, 0.941406f,
- 0.953613f, 0.963379f, 0.987793f, 0.988770f, 0.988770f, 0.989258f, 0.989258f, 0.989258f,
- 0.000000f, 0.000000f, 0.000047f, 0.000321f, 0.000332f, 0.000351f, 0.000470f, 0.000596f,
- 0.000655f, 0.000727f, 0.001008f, 0.001112f, 0.001350f, 0.001379f, 0.001380f, 0.001751f,
- 0.002008f, 0.002151f, 0.002327f, 0.002548f, 0.002691f, 0.003056f, 0.003475f, 0.003925f,
- 0.004749f, 0.005161f, 0.005863f, 0.006538f, 0.007153f, 0.008453f, 0.009789f, 0.010986f,
- 0.013168f, 0.015121f, 0.017563f, 0.020966f, 0.025009f, 0.030151f, 0.037048f, 0.046570f,
- 0.058624f, 0.075623f, 0.099243f, 0.133667f, 0.181641f, 0.249756f, 0.338623f, 0.445312f,
- 0.556641f, 0.659180f, 0.744141f, 0.808594f, 0.855957f, 0.890137f, 0.916992f, 0.934570f,
- 0.949219f, 0.959473f, 0.986816f, 0.987793f, 0.987793f, 0.987793f, 0.987793f, 0.988281f,
- 0.000000f, 0.000000f, 0.000000f, 0.000244f, 0.000429f, 0.000440f, 0.000348f, 0.000592f,
- 0.000606f, 0.000755f, 0.000690f, 0.000935f, 0.001172f, 0.001257f, 0.001368f, 0.001458f,
- 0.001786f, 0.001809f, 0.002060f, 0.002274f, 0.002478f, 0.002642f, 0.002987f, 0.003435f,
- 0.003866f, 0.004337f, 0.005066f, 0.005409f, 0.006355f, 0.007111f, 0.008011f, 0.009392f,
- 0.011032f, 0.012321f, 0.014717f, 0.017319f, 0.020432f, 0.024551f, 0.029953f, 0.036835f,
- 0.045929f, 0.058716f, 0.076416f, 0.101562f, 0.137695f, 0.189453f, 0.262451f, 0.358154f,
- 0.470215f, 0.584961f, 0.686523f, 0.767578f, 0.828125f, 0.871582f, 0.903809f, 0.926270f,
- 0.941895f, 0.956055f, 0.985352f, 0.986328f, 0.986816f, 0.986816f, 0.986816f, 0.986816f,
- 0.000000f, 0.000000f, 0.000000f, 0.000119f, 0.000237f, 0.000314f, 0.000570f, 0.000575f,
- 0.000583f, 0.000632f, 0.000651f, 0.000789f, 0.000947f, 0.001097f, 0.001300f, 0.001320f,
- 0.001384f, 0.001443f, 0.001641f, 0.001869f, 0.002047f, 0.002396f, 0.002634f, 0.003025f,
- 0.003412f, 0.003757f, 0.004238f, 0.004620f, 0.005463f, 0.006168f, 0.007072f, 0.008080f,
- 0.009155f, 0.010590f, 0.012306f, 0.014175f, 0.016769f, 0.020081f, 0.023972f, 0.029495f,
- 0.036560f, 0.045959f, 0.059265f, 0.078125f, 0.104797f, 0.143677f, 0.199951f, 0.279785f,
- 0.382812f, 0.500977f, 0.616699f, 0.716309f, 0.791992f, 0.847168f, 0.887207f, 0.915527f,
- 0.936523f, 0.950684f, 0.984375f, 0.985352f, 0.986328f, 0.985840f, 0.986328f, 0.985840f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000205f, 0.000239f, 0.000299f, 0.000537f,
- 0.000574f, 0.000696f, 0.000583f, 0.000740f, 0.000778f, 0.000867f, 0.001013f, 0.001257f,
- 0.001325f, 0.001277f, 0.001416f, 0.001718f, 0.001965f, 0.002079f, 0.002356f, 0.002577f,
- 0.002771f, 0.003305f, 0.003693f, 0.004028f, 0.004593f, 0.005234f, 0.005905f, 0.006802f,
- 0.007698f, 0.008553f, 0.009995f, 0.011635f, 0.013824f, 0.016174f, 0.019547f, 0.023544f,
- 0.029114f, 0.036377f, 0.046417f, 0.060211f, 0.080017f, 0.108643f, 0.151611f, 0.213379f,
- 0.301758f, 0.414062f, 0.537598f, 0.653320f, 0.748047f, 0.817871f, 0.868164f, 0.903320f,
- 0.928711f, 0.945801f, 0.982910f, 0.983887f, 0.984375f, 0.984375f, 0.984863f, 0.984375f,
- 0.000000f, 0.000000f, 0.000045f, 0.000105f, 0.000114f, 0.000340f, 0.000371f, 0.000501f,
- 0.000639f, 0.000554f, 0.000687f, 0.000675f, 0.000711f, 0.000738f, 0.000824f, 0.001092f,
- 0.001040f, 0.001185f, 0.001212f, 0.001408f, 0.001624f, 0.001813f, 0.001982f, 0.002182f,
- 0.002634f, 0.002748f, 0.003252f, 0.003540f, 0.004089f, 0.004505f, 0.005001f, 0.005657f,
- 0.006500f, 0.007195f, 0.008286f, 0.009750f, 0.011208f, 0.013420f, 0.015762f, 0.019226f,
- 0.023209f, 0.029144f, 0.036591f, 0.047150f, 0.061615f, 0.082947f, 0.114014f, 0.161621f,
- 0.231323f, 0.329834f, 0.451416f, 0.579590f, 0.692871f, 0.780273f, 0.844238f, 0.888184f,
- 0.917969f, 0.939453f, 0.981445f, 0.982422f, 0.982910f, 0.982910f, 0.982910f, 0.982910f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000208f, 0.000311f, 0.000238f, 0.000337f,
- 0.000524f, 0.000617f, 0.000533f, 0.000675f, 0.000665f, 0.000776f, 0.000840f, 0.000819f,
- 0.000902f, 0.001169f, 0.001130f, 0.001178f, 0.001382f, 0.001571f, 0.001941f, 0.001932f,
- 0.002138f, 0.002306f, 0.002586f, 0.002937f, 0.003468f, 0.003740f, 0.004292f, 0.004704f,
- 0.005444f, 0.006081f, 0.007019f, 0.008255f, 0.009521f, 0.010796f, 0.012840f, 0.015503f,
- 0.018784f, 0.023178f, 0.029129f, 0.036774f, 0.047699f, 0.063416f, 0.086548f, 0.121399f,
- 0.175293f, 0.254883f, 0.365234f, 0.496582f, 0.626953f, 0.733398f, 0.813477f, 0.869629f,
- 0.906738f, 0.933105f, 0.979980f, 0.980957f, 0.981445f, 0.981445f, 0.980957f, 0.981445f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000208f, 0.000312f, 0.000236f,
- 0.000343f, 0.000475f, 0.000496f, 0.000528f, 0.000659f, 0.000582f, 0.000685f, 0.000710f,
- 0.000761f, 0.000784f, 0.000941f, 0.001013f, 0.001117f, 0.001339f, 0.001500f, 0.001623f,
- 0.001769f, 0.002039f, 0.002298f, 0.002565f, 0.002802f, 0.003119f, 0.003471f, 0.003857f,
- 0.004658f, 0.005177f, 0.005836f, 0.006752f, 0.007324f, 0.008911f, 0.010422f, 0.012527f,
- 0.015373f, 0.018585f, 0.022964f, 0.029037f, 0.037231f, 0.049072f, 0.066345f, 0.091492f,
- 0.131470f, 0.193359f, 0.285645f, 0.409912f, 0.548828f, 0.676758f, 0.776367f, 0.845703f,
- 0.893066f, 0.924805f, 0.978027f, 0.979492f, 0.979492f, 0.979004f, 0.979492f, 0.979492f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000166f, 0.000228f, 0.000227f,
- 0.000369f, 0.000337f, 0.000368f, 0.000452f, 0.000500f, 0.000547f, 0.000543f, 0.000575f,
- 0.000623f, 0.000723f, 0.000783f, 0.000874f, 0.001141f, 0.001226f, 0.001279f, 0.001336f,
- 0.001499f, 0.001655f, 0.001922f, 0.002090f, 0.002453f, 0.002298f, 0.003139f, 0.003181f,
- 0.003674f, 0.004166f, 0.004814f, 0.005447f, 0.006348f, 0.007179f, 0.008736f, 0.010406f,
- 0.012321f, 0.014984f, 0.018219f, 0.022934f, 0.028824f, 0.037598f, 0.050476f, 0.069397f,
- 0.098694f, 0.144775f, 0.218018f, 0.325439f, 0.464111f, 0.607910f, 0.729492f, 0.817383f,
- 0.876953f, 0.915527f, 0.976562f, 0.977539f, 0.977539f, 0.977051f, 0.977051f, 0.977539f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000154f, 0.000200f,
- 0.000267f, 0.000316f, 0.000324f, 0.000449f, 0.000319f, 0.000379f, 0.000515f, 0.000519f,
- 0.000558f, 0.000628f, 0.000645f, 0.000690f, 0.000777f, 0.000940f, 0.001096f, 0.001204f,
- 0.001278f, 0.001485f, 0.001670f, 0.001929f, 0.001961f, 0.002016f, 0.002367f, 0.002785f,
- 0.003025f, 0.003248f, 0.003805f, 0.004539f, 0.004845f, 0.005733f, 0.006851f, 0.008278f,
- 0.010017f, 0.011841f, 0.014542f, 0.017807f, 0.022705f, 0.029190f, 0.038544f, 0.052612f,
- 0.073853f, 0.108093f, 0.162842f, 0.250977f, 0.377930f, 0.529785f, 0.672363f, 0.782715f,
- 0.855957f, 0.904297f, 0.973145f, 0.974121f, 0.974609f, 0.975586f, 0.974609f, 0.975098f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000158f, 0.000121f,
- 0.000190f, 0.000238f, 0.000397f, 0.000354f, 0.000364f, 0.000365f, 0.000440f, 0.000474f,
- 0.000509f, 0.000612f, 0.000611f, 0.000648f, 0.000804f, 0.000755f, 0.000943f, 0.001050f,
- 0.001221f, 0.001340f, 0.001338f, 0.001443f, 0.001635f, 0.001822f, 0.002083f, 0.002226f,
- 0.002480f, 0.002682f, 0.003185f, 0.003609f, 0.003948f, 0.005074f, 0.005558f, 0.006741f,
- 0.007904f, 0.009384f, 0.011360f, 0.014000f, 0.017883f, 0.022675f, 0.029648f, 0.039917f,
- 0.055695f, 0.080261f, 0.120728f, 0.188354f, 0.296143f, 0.443848f, 0.603027f, 0.737793f,
- 0.831055f, 0.891113f, 0.970703f, 0.971680f, 0.972168f, 0.972656f, 0.971680f, 0.972168f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f,
- 0.000121f, 0.000251f, 0.000260f, 0.000278f, 0.000315f, 0.000334f, 0.000235f, 0.000357f,
- 0.000442f, 0.000513f, 0.000504f, 0.000598f, 0.000556f, 0.000771f, 0.000831f, 0.000886f,
- 0.000977f, 0.001145f, 0.001105f, 0.001244f, 0.001281f, 0.001431f, 0.001544f, 0.001850f,
- 0.001986f, 0.002131f, 0.002537f, 0.002737f, 0.003252f, 0.003826f, 0.004555f, 0.005184f,
- 0.006199f, 0.007195f, 0.009041f, 0.011337f, 0.013878f, 0.017395f, 0.022552f, 0.030502f,
- 0.041962f, 0.059875f, 0.089111f, 0.139404f, 0.224609f, 0.357910f, 0.524902f, 0.684082f,
- 0.800781f, 0.875977f, 0.967773f, 0.968750f, 0.968262f, 0.968750f, 0.969238f, 0.969238f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000095f, 0.000081f, 0.000217f, 0.000149f, 0.000204f, 0.000212f, 0.000338f,
- 0.000345f, 0.000348f, 0.000456f, 0.000463f, 0.000495f, 0.000570f, 0.000583f, 0.000748f,
- 0.000799f, 0.000731f, 0.000965f, 0.001041f, 0.001071f, 0.001210f, 0.001318f, 0.001238f,
- 0.001410f, 0.001631f, 0.001932f, 0.002327f, 0.002577f, 0.003057f, 0.003452f, 0.003956f,
- 0.004639f, 0.005714f, 0.006817f, 0.008446f, 0.010605f, 0.013443f, 0.017319f, 0.022964f,
- 0.031021f, 0.044281f, 0.065857f, 0.102112f, 0.166504f, 0.277344f, 0.439941f, 0.617188f,
- 0.762207f, 0.856445f, 0.963379f, 0.964355f, 0.965332f, 0.964844f, 0.965332f, 0.965332f,
- 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000121f, 0.000107f, 0.000091f, 0.000161f, 0.000119f, 0.000184f, 0.000266f, 0.000284f,
- 0.000314f, 0.000319f, 0.000334f, 0.000344f, 0.000565f, 0.000455f, 0.000488f, 0.000667f,
- 0.000710f, 0.000713f, 0.000787f, 0.000755f, 0.000849f, 0.000972f, 0.001097f, 0.001286f,
- 0.001427f, 0.001556f, 0.001667f, 0.001687f, 0.002155f, 0.002369f, 0.002674f, 0.003086f,
- 0.003710f, 0.004536f, 0.005585f, 0.006783f, 0.007957f, 0.010262f, 0.013115f, 0.017212f,
- 0.023102f, 0.032715f, 0.047943f, 0.074158f, 0.121155f, 0.207520f, 0.353027f, 0.541504f,
- 0.715332f, 0.834473f, 0.959473f, 0.960449f, 0.960938f, 0.960938f, 0.960938f, 0.961426f,
- 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000120f, 0.000120f, 0.000103f, 0.000089f, 0.000077f, 0.000080f, 0.000121f, 0.000218f,
- 0.000209f, 0.000245f, 0.000303f, 0.000316f, 0.000388f, 0.000341f, 0.000549f, 0.000594f,
- 0.000604f, 0.000679f, 0.000625f, 0.000628f, 0.000795f, 0.000883f, 0.000857f, 0.000991f,
- 0.001166f, 0.000955f, 0.001194f, 0.001347f, 0.001548f, 0.001804f, 0.002048f, 0.002388f,
- 0.002911f, 0.003130f, 0.003933f, 0.004845f, 0.006031f, 0.007385f, 0.009705f, 0.012688f,
- 0.017044f, 0.023788f, 0.034882f, 0.053284f, 0.086670f, 0.151123f, 0.271484f, 0.457031f,
- 0.658203f, 0.805176f, 0.954102f, 0.955078f, 0.956055f, 0.956055f, 0.956055f, 0.955566f,
- 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f,
- 0.000120f, 0.000120f, 0.000116f, 0.000101f, 0.000088f, 0.000077f, 0.000131f, 0.000071f,
- 0.000146f, 0.000200f, 0.000237f, 0.000270f, 0.000289f, 0.000302f, 0.000311f, 0.000441f,
- 0.000396f, 0.000588f, 0.000630f, 0.000570f, 0.000575f, 0.000537f, 0.000589f, 0.000750f,
- 0.000721f, 0.001048f, 0.001122f, 0.000951f, 0.001243f, 0.001346f, 0.001703f, 0.001592f,
- 0.001880f, 0.002340f, 0.002804f, 0.003637f, 0.004356f, 0.005329f, 0.006805f, 0.009094f,
- 0.012566f, 0.017181f, 0.025040f, 0.038147f, 0.061249f, 0.107788f, 0.200195f, 0.369629f,
- 0.587891f, 0.771973f, 0.948242f, 0.949707f, 0.950195f, 0.949707f, 0.950195f, 0.950195f,
- 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f,
- 0.000120f, 0.000119f, 0.000119f, 0.000114f, 0.000101f, 0.000088f, 0.000079f, 0.000070f,
- 0.000063f, 0.000136f, 0.000136f, 0.000183f, 0.000207f, 0.000277f, 0.000271f, 0.000291f,
- 0.000369f, 0.000344f, 0.000494f, 0.000459f, 0.000515f, 0.000509f, 0.000532f, 0.000504f,
- 0.000716f, 0.000589f, 0.000691f, 0.000902f, 0.000972f, 0.000968f, 0.001067f, 0.001483f,
- 0.001780f, 0.001652f, 0.002090f, 0.002602f, 0.003113f, 0.003738f, 0.004738f, 0.006420f,
- 0.008522f, 0.012100f, 0.017334f, 0.026489f, 0.042786f, 0.074524f, 0.142578f, 0.283936f,
- 0.509277f, 0.729492f, 0.940918f, 0.941895f, 0.942383f, 0.942383f, 0.942383f, 0.942871f,
- 0.000122f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f, 0.000119f,
- 0.000119f, 0.000118f, 0.000118f, 0.000118f, 0.000116f, 0.000102f, 0.000090f, 0.000081f,
- 0.000091f, 0.000066f, 0.000059f, 0.000110f, 0.000109f, 0.000155f, 0.000184f, 0.000227f,
- 0.000297f, 0.000333f, 0.000355f, 0.000349f, 0.000344f, 0.000421f, 0.000459f, 0.000561f,
- 0.000600f, 0.000563f, 0.000630f, 0.000563f, 0.000682f, 0.000737f, 0.000892f, 0.001037f,
- 0.001026f, 0.001163f, 0.001743f, 0.001782f, 0.002117f, 0.002573f, 0.003389f, 0.004429f,
- 0.005871f, 0.007942f, 0.011841f, 0.018066f, 0.029190f, 0.050842f, 0.098511f, 0.207397f,
- 0.422363f, 0.677734f, 0.932129f, 0.933594f, 0.933594f, 0.934082f, 0.934082f, 0.934082f,
- 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
- 0.000118f, 0.000117f, 0.000117f, 0.000117f, 0.000117f, 0.000116f, 0.000104f, 0.000093f,
- 0.000084f, 0.000076f, 0.000069f, 0.000091f, 0.000057f, 0.000051f, 0.000112f, 0.000120f,
- 0.000179f, 0.000232f, 0.000225f, 0.000283f, 0.000301f, 0.000308f, 0.000353f, 0.000437f,
- 0.000395f, 0.000523f, 0.000486f, 0.000504f, 0.000469f, 0.000614f, 0.000581f, 0.000755f,
- 0.000789f, 0.001121f, 0.000981f, 0.001218f, 0.001565f, 0.001795f, 0.002296f, 0.002958f,
- 0.003866f, 0.005329f, 0.007675f, 0.011658f, 0.019043f, 0.033478f, 0.065430f, 0.144043f,
- 0.331299f, 0.613770f, 0.921387f, 0.922852f, 0.923340f, 0.923340f, 0.923340f, 0.923340f,
- 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000116f, 0.000116f,
- 0.000116f, 0.000116f, 0.000115f, 0.000115f, 0.000115f, 0.000115f, 0.000114f, 0.000108f,
- 0.000097f, 0.000087f, 0.000079f, 0.000072f, 0.000065f, 0.000060f, 0.000094f, 0.000050f,
- 0.000104f, 0.000104f, 0.000121f, 0.000164f, 0.000195f, 0.000247f, 0.000265f, 0.000328f,
- 0.000290f, 0.000355f, 0.000395f, 0.000356f, 0.000361f, 0.000459f, 0.000470f, 0.000515f,
- 0.000580f, 0.000624f, 0.000751f, 0.000964f, 0.001105f, 0.001279f, 0.001413f, 0.001823f,
- 0.002441f, 0.003407f, 0.004852f, 0.007210f, 0.011803f, 0.021225f, 0.041473f, 0.095032f,
- 0.244019f, 0.537598f, 0.907715f, 0.910156f, 0.910156f, 0.909180f, 0.909668f, 0.911133f,
- 0.000120f, 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000114f, 0.000114f, 0.000113f,
- 0.000113f, 0.000112f, 0.000112f, 0.000112f, 0.000111f, 0.000112f, 0.000111f, 0.000111f,
- 0.000111f, 0.000101f, 0.000093f, 0.000084f, 0.000077f, 0.000070f, 0.000064f, 0.000059f,
- 0.000074f, 0.000079f, 0.000059f, 0.000087f, 0.000097f, 0.000128f, 0.000185f, 0.000213f,
- 0.000265f, 0.000235f, 0.000239f, 0.000288f, 0.000299f, 0.000371f, 0.000341f, 0.000369f,
- 0.000460f, 0.000446f, 0.000490f, 0.000602f, 0.000694f, 0.000904f, 0.001012f, 0.001234f,
- 0.001544f, 0.002096f, 0.002989f, 0.004299f, 0.006840f, 0.012383f, 0.024948f, 0.059204f,
- 0.166626f, 0.452637f, 0.892578f, 0.894043f, 0.894043f, 0.894531f, 0.894531f, 0.894043f,
- 0.000115f, 0.000107f, 0.000108f, 0.000111f, 0.000108f, 0.000109f, 0.000108f, 0.000108f,
- 0.000108f, 0.000107f, 0.000108f, 0.000107f, 0.000107f, 0.000106f, 0.000107f, 0.000107f,
- 0.000106f, 0.000107f, 0.000106f, 0.000097f, 0.000090f, 0.000082f, 0.000075f, 0.000069f,
- 0.000063f, 0.000058f, 0.000053f, 0.000070f, 0.000073f, 0.000085f, 0.000077f, 0.000088f,
- 0.000136f, 0.000168f, 0.000190f, 0.000204f, 0.000199f, 0.000252f, 0.000233f, 0.000270f,
- 0.000325f, 0.000295f, 0.000348f, 0.000383f, 0.000435f, 0.000534f, 0.000581f, 0.000803f,
- 0.001004f, 0.001330f, 0.001812f, 0.002489f, 0.003944f, 0.006832f, 0.013748f, 0.033997f,
- 0.104858f, 0.356689f, 0.873047f, 0.873047f, 0.875000f, 0.874023f, 0.874023f, 0.874023f,
- 0.000000f, 0.000071f, 0.000063f, 0.000094f, 0.000092f, 0.000094f, 0.000093f, 0.000098f,
- 0.000098f, 0.000098f, 0.000098f, 0.000099f, 0.000098f, 0.000099f, 0.000099f, 0.000099f,
- 0.000099f, 0.000099f, 0.000099f, 0.000100f, 0.000100f, 0.000094f, 0.000087f, 0.000080f,
- 0.000074f, 0.000068f, 0.000062f, 0.000058f, 0.000053f, 0.000049f, 0.000059f, 0.000059f,
- 0.000045f, 0.000078f, 0.000082f, 0.000118f, 0.000155f, 0.000160f, 0.000174f, 0.000180f,
- 0.000226f, 0.000213f, 0.000248f, 0.000258f, 0.000288f, 0.000352f, 0.000396f, 0.000465f,
- 0.000566f, 0.000789f, 0.000941f, 0.001343f, 0.002199f, 0.003616f, 0.006912f, 0.017380f,
- 0.058960f, 0.259521f, 0.847656f, 0.849121f, 0.850586f, 0.850098f, 0.849121f, 0.850586f,
- 0.000000f, 0.000000f, 0.000019f, 0.000044f, 0.000048f, 0.000061f, 0.000071f, 0.000073f,
- 0.000076f, 0.000079f, 0.000079f, 0.000082f, 0.000082f, 0.000082f, 0.000085f, 0.000086f,
- 0.000087f, 0.000086f, 0.000088f, 0.000087f, 0.000089f, 0.000089f, 0.000089f, 0.000090f,
- 0.000084f, 0.000078f, 0.000072f, 0.000067f, 0.000062f, 0.000057f, 0.000052f, 0.000049f,
- 0.000045f, 0.000041f, 0.000038f, 0.000040f, 0.000062f, 0.000092f, 0.000100f, 0.000121f,
- 0.000144f, 0.000133f, 0.000137f, 0.000170f, 0.000181f, 0.000168f, 0.000215f, 0.000286f,
- 0.000327f, 0.000397f, 0.000504f, 0.000738f, 0.001039f, 0.001729f, 0.003317f, 0.007721f,
- 0.028458f, 0.166626f, 0.815430f, 0.818359f, 0.818359f, 0.817383f, 0.818848f, 0.818359f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000008f,
- 0.000016f, 0.000031f, 0.000035f, 0.000048f, 0.000050f, 0.000053f, 0.000058f, 0.000059f,
- 0.000063f, 0.000064f, 0.000067f, 0.000067f, 0.000070f, 0.000071f, 0.000072f, 0.000073f,
- 0.000075f, 0.000075f, 0.000076f, 0.000075f, 0.000069f, 0.000064f, 0.000060f, 0.000055f,
- 0.000051f, 0.000047f, 0.000043f, 0.000040f, 0.000037f, 0.000034f, 0.000040f, 0.000041f,
- 0.000054f, 0.000069f, 0.000096f, 0.000111f, 0.000109f, 0.000113f, 0.000142f, 0.000136f,
- 0.000158f, 0.000196f, 0.000237f, 0.000349f, 0.000423f, 0.000744f, 0.001380f, 0.003214f,
- 0.011124f, 0.088135f, 0.777344f, 0.779297f, 0.780273f, 0.779785f, 0.779785f, 0.779785f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000007f,
- 0.000021f, 0.000023f, 0.000031f, 0.000034f, 0.000038f, 0.000041f, 0.000043f, 0.000047f,
- 0.000049f, 0.000050f, 0.000053f, 0.000055f, 0.000056f, 0.000057f, 0.000059f, 0.000060f,
- 0.000055f, 0.000051f, 0.000048f, 0.000044f, 0.000041f, 0.000038f, 0.000035f, 0.000032f,
- 0.000029f, 0.000028f, 0.000028f, 0.000037f, 0.000044f, 0.000064f, 0.000078f, 0.000072f,
- 0.000089f, 0.000098f, 0.000104f, 0.000146f, 0.000200f, 0.000272f, 0.000479f, 0.001077f,
- 0.003733f, 0.033752f, 0.729492f, 0.730957f, 0.732422f, 0.731934f, 0.732422f, 0.732422f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f,
- 0.000006f, 0.000009f, 0.000013f, 0.000019f, 0.000021f, 0.000025f, 0.000027f, 0.000030f,
- 0.000033f, 0.000034f, 0.000037f, 0.000039f, 0.000041f, 0.000039f, 0.000036f, 0.000033f,
- 0.000031f, 0.000028f, 0.000026f, 0.000024f, 0.000021f, 0.000019f, 0.000017f, 0.000023f,
- 0.000033f, 0.000041f, 0.000043f, 0.000058f, 0.000061f, 0.000081f, 0.000121f, 0.000248f,
- 0.000821f, 0.008255f, 0.673340f, 0.674805f, 0.674316f, 0.674805f, 0.674805f, 0.673828f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000006f, 0.000010f, 0.000013f,
- 0.000015f, 0.000017f, 0.000020f, 0.000022f, 0.000021f, 0.000019f, 0.000017f, 0.000015f,
- 0.000013f, 0.000012f, 0.000010f, 0.000011f, 0.000016f, 0.000019f, 0.000019f, 0.000036f,
- 0.000090f, 0.000897f, 0.606934f, 0.609863f, 0.609375f, 0.609863f, 0.609863f, 0.610352f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000001f, 0.000003f, 0.000006f, 0.000005f, 0.000004f, 0.000003f,
- 0.000004f, 0.000008f, 0.534668f, 0.536621f, 0.537109f, 0.537109f, 0.536621f, 0.536621f,
- },
- {
- 0.149292f, 0.432373f, 0.614258f, 0.719238f, 0.784180f, 0.826660f, 0.856934f, 0.879883f,
- 0.896484f, 0.909180f, 0.919922f, 0.928711f, 0.936035f, 0.942383f, 0.947266f, 0.952148f,
- 0.956055f, 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.970703f, 0.972656f, 0.974609f,
- 0.976562f, 0.978027f, 0.979492f, 0.980469f, 0.981934f, 0.983398f, 0.984863f, 0.985352f,
- 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.989746f, 0.990234f, 0.990723f, 0.991699f,
- 0.992676f, 0.993164f, 0.993652f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f,
- 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.998047f, 0.998047f, 0.998535f, 0.998535f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
- 0.040161f, 0.161255f, 0.324951f, 0.486572f, 0.612305f, 0.704590f, 0.767090f, 0.811523f,
- 0.844238f, 0.868652f, 0.887695f, 0.902344f, 0.913574f, 0.924316f, 0.932129f, 0.937988f,
- 0.944336f, 0.949707f, 0.954102f, 0.957520f, 0.960938f, 0.964355f, 0.966797f, 0.969727f,
- 0.971191f, 0.973633f, 0.975586f, 0.977539f, 0.979004f, 0.980469f, 0.981445f, 0.982910f,
- 0.983887f, 0.985352f, 0.985840f, 0.987305f, 0.987793f, 0.988770f, 0.989258f, 0.990234f,
- 0.991211f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.993652f, 0.994141f, 0.995117f,
- 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f, 0.998047f, 0.998535f,
- 0.999023f, 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
- 0.017395f, 0.068542f, 0.149292f, 0.262451f, 0.392822f, 0.518066f, 0.621582f, 0.700195f,
- 0.759766f, 0.803711f, 0.836426f, 0.862305f, 0.880859f, 0.896484f, 0.909668f, 0.919434f,
- 0.929199f, 0.935547f, 0.941895f, 0.947754f, 0.952637f, 0.956055f, 0.959961f, 0.963867f,
- 0.965820f, 0.968750f, 0.970703f, 0.973145f, 0.975098f, 0.977051f, 0.979004f, 0.979980f,
- 0.981934f, 0.983398f, 0.983887f, 0.984863f, 0.985840f, 0.986816f, 0.987793f, 0.989258f,
- 0.989746f, 0.990234f, 0.991211f, 0.991699f, 0.992188f, 0.992676f, 0.993652f, 0.994141f,
- 0.994629f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.997559f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999512f, 0.999023f,
- 0.009125f, 0.035492f, 0.075806f, 0.135864f, 0.219971f, 0.324707f, 0.437012f, 0.543457f,
- 0.633789f, 0.704102f, 0.758789f, 0.802246f, 0.833496f, 0.857910f, 0.878418f, 0.894043f,
- 0.906738f, 0.917480f, 0.925781f, 0.933594f, 0.940918f, 0.946777f, 0.951172f, 0.954590f,
- 0.959473f, 0.962891f, 0.965820f, 0.968262f, 0.971191f, 0.973145f, 0.975098f, 0.976562f,
- 0.978516f, 0.979980f, 0.981445f, 0.982422f, 0.983887f, 0.985840f, 0.986328f, 0.987305f,
- 0.988281f, 0.988770f, 0.989746f, 0.990234f, 0.991699f, 0.992188f, 0.992676f, 0.993652f,
- 0.994141f, 0.994629f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996582f, 0.997559f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.005848f, 0.021225f, 0.043640f, 0.076782f, 0.124084f, 0.189575f, 0.274414f, 0.372559f,
- 0.473633f, 0.567383f, 0.646973f, 0.711426f, 0.761230f, 0.801758f, 0.833496f, 0.857422f,
- 0.876953f, 0.893066f, 0.905273f, 0.916504f, 0.925293f, 0.932617f, 0.939941f, 0.945801f,
- 0.950684f, 0.955566f, 0.958984f, 0.962402f, 0.965820f, 0.968262f, 0.970703f, 0.972656f,
- 0.975098f, 0.977051f, 0.978516f, 0.980469f, 0.981934f, 0.982422f, 0.983887f, 0.985840f,
- 0.986328f, 0.987305f, 0.988281f, 0.989258f, 0.989746f, 0.990723f, 0.991211f, 0.992188f,
- 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.995117f, 0.996094f, 0.996094f, 0.997070f,
- 0.997559f, 0.997559f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
- 0.003937f, 0.014107f, 0.027664f, 0.047211f, 0.075195f, 0.113953f, 0.166748f, 0.236328f,
- 0.320312f, 0.412354f, 0.504395f, 0.589844f, 0.661621f, 0.719727f, 0.768066f, 0.805664f,
- 0.834961f, 0.858398f, 0.877441f, 0.893066f, 0.906738f, 0.916992f, 0.926270f, 0.933105f,
- 0.940430f, 0.946289f, 0.951172f, 0.955566f, 0.959473f, 0.962891f, 0.965820f, 0.968262f,
- 0.970703f, 0.973145f, 0.975098f, 0.977051f, 0.979004f, 0.980469f, 0.981934f, 0.983398f,
- 0.984375f, 0.985840f, 0.986328f, 0.987305f, 0.988770f, 0.989746f, 0.990723f, 0.991211f,
- 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.994629f, 0.995117f, 0.995605f, 0.995605f,
- 0.996582f, 0.997070f, 0.998535f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
- 0.002962f, 0.009674f, 0.019348f, 0.031708f, 0.049255f, 0.072754f, 0.105164f, 0.149048f,
- 0.206665f, 0.278076f, 0.361572f, 0.448730f, 0.534668f, 0.611816f, 0.677734f, 0.730957f,
- 0.775879f, 0.809570f, 0.837891f, 0.861328f, 0.879395f, 0.894531f, 0.907227f, 0.916992f,
- 0.926270f, 0.934082f, 0.940918f, 0.946289f, 0.951172f, 0.956055f, 0.959473f, 0.962891f,
- 0.966797f, 0.969238f, 0.971191f, 0.973633f, 0.976074f, 0.977539f, 0.979492f, 0.980957f,
- 0.982422f, 0.983398f, 0.984863f, 0.986328f, 0.986816f, 0.988281f, 0.989746f, 0.989746f,
- 0.991211f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.994629f, 0.995605f,
- 0.996094f, 0.997070f, 0.998535f, 0.999023f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.001900f, 0.007225f, 0.013733f, 0.022552f, 0.033661f, 0.049164f, 0.070374f, 0.097534f,
- 0.135132f, 0.183350f, 0.244507f, 0.317871f, 0.400146f, 0.483643f, 0.562988f, 0.633301f,
- 0.693848f, 0.743652f, 0.784180f, 0.816895f, 0.842773f, 0.865234f, 0.882812f, 0.896973f,
- 0.908691f, 0.919434f, 0.927734f, 0.935547f, 0.942383f, 0.947266f, 0.952637f, 0.957031f,
- 0.960938f, 0.964355f, 0.967285f, 0.969727f, 0.971680f, 0.974609f, 0.976074f, 0.978027f,
- 0.979980f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.988281f, 0.988770f,
- 0.989746f, 0.990723f, 0.991699f, 0.992188f, 0.993164f, 0.993652f, 0.994629f, 0.995117f,
- 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f,
- 0.001921f, 0.005543f, 0.010223f, 0.016312f, 0.024918f, 0.035217f, 0.049164f, 0.067017f,
- 0.091125f, 0.122986f, 0.164673f, 0.217896f, 0.282471f, 0.356934f, 0.436768f, 0.516602f,
- 0.590820f, 0.656250f, 0.711426f, 0.757812f, 0.794922f, 0.825684f, 0.850098f, 0.870605f,
- 0.885742f, 0.900879f, 0.912109f, 0.921387f, 0.929688f, 0.937500f, 0.943848f, 0.949219f,
- 0.953125f, 0.958496f, 0.961426f, 0.964844f, 0.967773f, 0.970703f, 0.973145f, 0.975098f,
- 0.977539f, 0.979004f, 0.980957f, 0.982422f, 0.983887f, 0.985352f, 0.986328f, 0.987793f,
- 0.988770f, 0.989258f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.993652f, 0.994141f,
- 0.994629f, 0.995117f, 0.998047f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f,
- 0.001360f, 0.004257f, 0.007988f, 0.013092f, 0.018753f, 0.026352f, 0.035645f, 0.048096f,
- 0.064270f, 0.085449f, 0.113770f, 0.149292f, 0.195190f, 0.251953f, 0.320557f, 0.395020f,
- 0.474121f, 0.549316f, 0.618652f, 0.678223f, 0.729492f, 0.770996f, 0.805176f, 0.833496f,
- 0.855957f, 0.875977f, 0.891113f, 0.904785f, 0.915039f, 0.924316f, 0.933105f, 0.939453f,
- 0.945312f, 0.950684f, 0.955078f, 0.959473f, 0.962891f, 0.966309f, 0.969727f, 0.972168f,
- 0.974121f, 0.976562f, 0.978516f, 0.979980f, 0.981934f, 0.983398f, 0.984375f, 0.986328f,
- 0.986816f, 0.988281f, 0.989746f, 0.990234f, 0.991699f, 0.992188f, 0.992676f, 0.994141f,
- 0.994141f, 0.994629f, 0.998047f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f,
- 0.001075f, 0.003492f, 0.006275f, 0.010223f, 0.014473f, 0.019821f, 0.026581f, 0.035492f,
- 0.046967f, 0.061829f, 0.080750f, 0.105164f, 0.136475f, 0.177246f, 0.227783f, 0.288818f,
- 0.358154f, 0.433594f, 0.509277f, 0.581543f, 0.645508f, 0.701172f, 0.747070f, 0.783691f,
- 0.817383f, 0.842773f, 0.864258f, 0.881836f, 0.896484f, 0.908691f, 0.918945f, 0.928223f,
- 0.935547f, 0.941895f, 0.948730f, 0.952637f, 0.957031f, 0.962402f, 0.964844f, 0.967773f,
- 0.970703f, 0.973633f, 0.975586f, 0.977539f, 0.979492f, 0.981445f, 0.982910f, 0.984375f,
- 0.985840f, 0.986816f, 0.988281f, 0.988770f, 0.990234f, 0.991211f, 0.992188f, 0.992676f,
- 0.993164f, 0.994141f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.997559f, 0.998047f,
- 0.000967f, 0.002928f, 0.005283f, 0.007759f, 0.011612f, 0.015823f, 0.020966f, 0.027802f,
- 0.035461f, 0.045959f, 0.059235f, 0.075928f, 0.097778f, 0.126099f, 0.162598f, 0.207153f,
- 0.261963f, 0.326416f, 0.398193f, 0.471680f, 0.543945f, 0.612305f, 0.671875f, 0.722656f,
- 0.765137f, 0.799805f, 0.828125f, 0.854004f, 0.872070f, 0.888184f, 0.902344f, 0.914062f,
- 0.923340f, 0.931641f, 0.938965f, 0.945312f, 0.950684f, 0.955566f, 0.958984f, 0.962891f,
- 0.966309f, 0.969727f, 0.972168f, 0.974609f, 0.977051f, 0.978516f, 0.980469f, 0.982422f,
- 0.984375f, 0.985352f, 0.987305f, 0.987793f, 0.988770f, 0.990234f, 0.991211f, 0.992188f,
- 0.992676f, 0.993164f, 0.997559f, 0.997559f, 0.997559f, 0.998047f, 0.997559f, 0.998047f,
- 0.000602f, 0.002605f, 0.004345f, 0.006706f, 0.009590f, 0.012650f, 0.016617f, 0.021423f,
- 0.027893f, 0.035004f, 0.044495f, 0.056610f, 0.072327f, 0.092285f, 0.116821f, 0.148926f,
- 0.189697f, 0.238892f, 0.298340f, 0.365723f, 0.437988f, 0.511230f, 0.579590f, 0.642090f,
- 0.698242f, 0.744141f, 0.781738f, 0.814453f, 0.840332f, 0.861816f, 0.880371f, 0.895996f,
- 0.907715f, 0.918945f, 0.928223f, 0.935547f, 0.942871f, 0.948730f, 0.953125f, 0.958008f,
- 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.973633f, 0.976562f, 0.978516f, 0.979980f,
- 0.981934f, 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.988770f, 0.989746f, 0.990723f,
- 0.991699f, 0.992676f, 0.997070f, 0.997559f, 0.997559f, 0.997070f, 0.997070f, 0.997070f,
- 0.000607f, 0.001955f, 0.003616f, 0.005772f, 0.007656f, 0.010269f, 0.013496f, 0.017273f,
- 0.022018f, 0.027466f, 0.034729f, 0.043488f, 0.054932f, 0.068359f, 0.086365f, 0.108765f,
- 0.137939f, 0.174316f, 0.219360f, 0.273926f, 0.336670f, 0.406494f, 0.478516f, 0.549316f,
- 0.614746f, 0.673340f, 0.722656f, 0.765137f, 0.800293f, 0.828125f, 0.853516f, 0.872070f,
- 0.888672f, 0.902832f, 0.914551f, 0.924316f, 0.932129f, 0.940430f, 0.946289f, 0.951660f,
- 0.956055f, 0.960449f, 0.964355f, 0.967773f, 0.970703f, 0.972656f, 0.975586f, 0.978027f,
- 0.980469f, 0.981934f, 0.983398f, 0.985352f, 0.986328f, 0.988281f, 0.988770f, 0.990234f,
- 0.990723f, 0.992188f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000600f, 0.001813f, 0.003101f, 0.004559f, 0.006580f, 0.008873f, 0.011047f, 0.014091f,
- 0.017639f, 0.022049f, 0.027557f, 0.033997f, 0.042297f, 0.052704f, 0.065369f, 0.081238f,
- 0.101929f, 0.127930f, 0.161255f, 0.202515f, 0.252686f, 0.311523f, 0.378174f, 0.449707f,
- 0.519531f, 0.587891f, 0.647949f, 0.701660f, 0.746582f, 0.784668f, 0.817383f, 0.843262f,
- 0.864746f, 0.882324f, 0.896973f, 0.910156f, 0.920898f, 0.929688f, 0.937012f, 0.943848f,
- 0.949707f, 0.955078f, 0.959473f, 0.963379f, 0.966797f, 0.970215f, 0.973145f, 0.975098f,
- 0.978027f, 0.980469f, 0.982422f, 0.983887f, 0.984863f, 0.986328f, 0.987793f, 0.988770f,
- 0.989746f, 0.991211f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.000604f, 0.001429f, 0.002676f, 0.003708f, 0.005745f, 0.006973f, 0.009270f, 0.011452f,
- 0.014503f, 0.018295f, 0.022369f, 0.027222f, 0.033417f, 0.040833f, 0.050171f, 0.062744f,
- 0.077454f, 0.095886f, 0.119995f, 0.150391f, 0.187622f, 0.234253f, 0.289307f, 0.353027f,
- 0.421631f, 0.492676f, 0.561523f, 0.625488f, 0.681152f, 0.730469f, 0.770996f, 0.806152f,
- 0.833984f, 0.857422f, 0.876465f, 0.893066f, 0.906250f, 0.916992f, 0.926758f, 0.935059f,
- 0.942871f, 0.948242f, 0.954102f, 0.958496f, 0.962891f, 0.966309f, 0.969727f, 0.972168f,
- 0.975098f, 0.977539f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f, 0.987793f,
- 0.989258f, 0.990234f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000365f, 0.001367f, 0.002123f, 0.003353f, 0.004692f, 0.006054f, 0.007675f, 0.009819f,
- 0.012314f, 0.014862f, 0.018066f, 0.022064f, 0.026901f, 0.032471f, 0.039764f, 0.048584f,
- 0.060089f, 0.073730f, 0.090698f, 0.112854f, 0.140381f, 0.175415f, 0.218018f, 0.269775f,
- 0.329834f, 0.396240f, 0.467285f, 0.537598f, 0.603516f, 0.662109f, 0.712891f, 0.757324f,
- 0.793945f, 0.823730f, 0.849121f, 0.869629f, 0.887695f, 0.902344f, 0.914062f, 0.924805f,
- 0.932129f, 0.940430f, 0.947266f, 0.952148f, 0.957031f, 0.962402f, 0.966309f, 0.969238f,
- 0.972656f, 0.975586f, 0.977051f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
- 0.988281f, 0.988770f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000356f, 0.001341f, 0.001913f, 0.002897f, 0.003983f, 0.005322f, 0.006607f, 0.008514f,
- 0.010399f, 0.012451f, 0.015282f, 0.018356f, 0.021912f, 0.026443f, 0.031982f, 0.038635f,
- 0.047150f, 0.057495f, 0.070007f, 0.086609f, 0.106689f, 0.131714f, 0.164429f, 0.203613f,
- 0.252441f, 0.310059f, 0.374512f, 0.444092f, 0.514160f, 0.582031f, 0.643066f, 0.697266f,
- 0.743652f, 0.783691f, 0.814941f, 0.842773f, 0.865234f, 0.882812f, 0.897949f, 0.910645f,
- 0.922363f, 0.931152f, 0.938965f, 0.945801f, 0.952148f, 0.957520f, 0.961426f, 0.965820f,
- 0.969727f, 0.972168f, 0.975098f, 0.977539f, 0.979980f, 0.981934f, 0.983887f, 0.985352f,
- 0.986816f, 0.988281f, 0.995117f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000243f, 0.000937f, 0.001662f, 0.002617f, 0.003527f, 0.004555f, 0.005642f, 0.007217f,
- 0.008820f, 0.010483f, 0.012383f, 0.015175f, 0.018341f, 0.022049f, 0.026245f, 0.031067f,
- 0.037903f, 0.045563f, 0.054962f, 0.066956f, 0.082092f, 0.101074f, 0.124939f, 0.154663f,
- 0.191528f, 0.237305f, 0.291992f, 0.354492f, 0.422852f, 0.492676f, 0.562012f, 0.625488f,
- 0.682617f, 0.731934f, 0.772949f, 0.807129f, 0.835449f, 0.859863f, 0.878906f, 0.895020f,
- 0.908203f, 0.920898f, 0.929199f, 0.937988f, 0.945312f, 0.951660f, 0.957031f, 0.961914f,
- 0.965332f, 0.968750f, 0.972656f, 0.975098f, 0.977539f, 0.979980f, 0.982422f, 0.983887f,
- 0.986328f, 0.987793f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000362f, 0.000970f, 0.001489f, 0.002251f, 0.002892f, 0.003727f, 0.004978f, 0.006264f,
- 0.007530f, 0.009125f, 0.010551f, 0.012756f, 0.015259f, 0.018097f, 0.021637f, 0.025986f,
- 0.030594f, 0.036804f, 0.044006f, 0.053162f, 0.064148f, 0.078003f, 0.096130f, 0.118042f,
- 0.146118f, 0.181030f, 0.224487f, 0.276123f, 0.336670f, 0.403320f, 0.473633f, 0.543457f,
- 0.609375f, 0.667480f, 0.719238f, 0.763184f, 0.799316f, 0.829590f, 0.854492f, 0.875488f,
- 0.892578f, 0.906738f, 0.918945f, 0.928711f, 0.937012f, 0.944336f, 0.951172f, 0.956543f,
- 0.961426f, 0.965820f, 0.968750f, 0.972656f, 0.975098f, 0.978027f, 0.980469f, 0.982910f,
- 0.984375f, 0.985840f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.995117f, 0.995117f,
- 0.000346f, 0.000923f, 0.001273f, 0.002010f, 0.002619f, 0.003689f, 0.004452f, 0.005177f,
- 0.006290f, 0.007561f, 0.009033f, 0.010902f, 0.012970f, 0.015495f, 0.018280f, 0.021576f,
- 0.024948f, 0.030304f, 0.035400f, 0.042480f, 0.051086f, 0.061401f, 0.074890f, 0.091187f,
- 0.112427f, 0.138794f, 0.171631f, 0.212158f, 0.262451f, 0.320557f, 0.385986f, 0.456055f,
- 0.525391f, 0.593262f, 0.654297f, 0.708984f, 0.754883f, 0.792969f, 0.824707f, 0.850098f,
- 0.872070f, 0.890137f, 0.904785f, 0.917480f, 0.927734f, 0.937012f, 0.944336f, 0.951172f,
- 0.956055f, 0.961914f, 0.966309f, 0.969727f, 0.973145f, 0.976074f, 0.978516f, 0.980469f,
- 0.982910f, 0.984863f, 0.993652f, 0.995117f, 0.994629f, 0.994629f, 0.994629f, 0.994629f,
- 0.000242f, 0.000666f, 0.001081f, 0.001806f, 0.002512f, 0.003397f, 0.003866f, 0.004894f,
- 0.005566f, 0.006859f, 0.007957f, 0.009506f, 0.011009f, 0.013046f, 0.015266f, 0.018173f,
- 0.021027f, 0.024811f, 0.029526f, 0.034790f, 0.041443f, 0.049835f, 0.059265f, 0.071899f,
- 0.087769f, 0.107422f, 0.132202f, 0.163208f, 0.201782f, 0.249512f, 0.305908f, 0.370361f,
- 0.440430f, 0.511230f, 0.578613f, 0.642090f, 0.698730f, 0.746582f, 0.787109f, 0.819824f,
- 0.848145f, 0.869141f, 0.888672f, 0.903809f, 0.916992f, 0.927246f, 0.936523f, 0.943848f,
- 0.951660f, 0.957031f, 0.961426f, 0.965820f, 0.970215f, 0.973145f, 0.976074f, 0.979004f,
- 0.981445f, 0.983398f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994629f, 0.994141f,
- 0.000242f, 0.000709f, 0.000917f, 0.001194f, 0.002018f, 0.002634f, 0.003504f, 0.003918f,
- 0.005020f, 0.005726f, 0.006935f, 0.008141f, 0.009666f, 0.011040f, 0.012848f, 0.014961f,
- 0.017624f, 0.020660f, 0.024368f, 0.028381f, 0.033905f, 0.040283f, 0.047760f, 0.057312f,
- 0.069214f, 0.083984f, 0.102539f, 0.126221f, 0.155640f, 0.193359f, 0.238892f, 0.293701f,
- 0.356689f, 0.425537f, 0.497070f, 0.568359f, 0.632812f, 0.690918f, 0.739746f, 0.782227f,
- 0.816406f, 0.845703f, 0.868652f, 0.887695f, 0.903320f, 0.916992f, 0.927734f, 0.937012f,
- 0.944824f, 0.951660f, 0.957031f, 0.962891f, 0.966797f, 0.971191f, 0.973633f, 0.976562f,
- 0.979492f, 0.981934f, 0.992676f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.994141f,
- 0.000244f, 0.000660f, 0.000918f, 0.001343f, 0.002117f, 0.002407f, 0.002779f, 0.003626f,
- 0.004246f, 0.005207f, 0.005913f, 0.007145f, 0.008163f, 0.009438f, 0.011101f, 0.012871f,
- 0.014999f, 0.017426f, 0.020096f, 0.024185f, 0.027725f, 0.032623f, 0.038910f, 0.046387f,
- 0.055298f, 0.066467f, 0.080627f, 0.098328f, 0.120972f, 0.149658f, 0.184814f, 0.229492f,
- 0.282715f, 0.344727f, 0.414062f, 0.486084f, 0.556641f, 0.624023f, 0.683594f, 0.735352f,
- 0.778320f, 0.814453f, 0.843750f, 0.867188f, 0.887207f, 0.903320f, 0.916504f, 0.928223f,
- 0.937500f, 0.945312f, 0.953125f, 0.958008f, 0.964355f, 0.967285f, 0.971680f, 0.975098f,
- 0.978516f, 0.980957f, 0.992676f, 0.993652f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
- 0.000200f, 0.000480f, 0.000808f, 0.001303f, 0.001680f, 0.002104f, 0.002510f, 0.002934f,
- 0.003468f, 0.004429f, 0.005539f, 0.006046f, 0.006889f, 0.008438f, 0.009415f, 0.011108f,
- 0.012787f, 0.014572f, 0.017517f, 0.020279f, 0.023483f, 0.027359f, 0.031860f, 0.037964f,
- 0.045227f, 0.053711f, 0.064148f, 0.077759f, 0.095093f, 0.116272f, 0.143311f, 0.177856f,
- 0.221191f, 0.273193f, 0.334473f, 0.403320f, 0.476318f, 0.548828f, 0.617188f, 0.677734f,
- 0.730957f, 0.775879f, 0.812500f, 0.842285f, 0.866699f, 0.887695f, 0.903809f, 0.916992f,
- 0.928711f, 0.938477f, 0.946777f, 0.953125f, 0.959473f, 0.963867f, 0.968750f, 0.972656f,
- 0.976074f, 0.979004f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.992676f, 0.993164f,
- 0.000243f, 0.000469f, 0.000878f, 0.001158f, 0.001382f, 0.001801f, 0.002220f, 0.002699f,
- 0.003273f, 0.004063f, 0.004715f, 0.005447f, 0.005917f, 0.007099f, 0.008385f, 0.009521f,
- 0.011032f, 0.012627f, 0.014870f, 0.016922f, 0.019836f, 0.023010f, 0.026642f, 0.031174f,
- 0.036926f, 0.043549f, 0.051941f, 0.062561f, 0.075317f, 0.091553f, 0.112427f, 0.138428f,
- 0.172485f, 0.213867f, 0.265381f, 0.326172f, 0.394775f, 0.467773f, 0.541504f, 0.610840f,
- 0.673340f, 0.728516f, 0.774414f, 0.812012f, 0.842773f, 0.867676f, 0.887695f, 0.904297f,
- 0.918457f, 0.929688f, 0.939453f, 0.948242f, 0.955078f, 0.959961f, 0.965820f, 0.970215f,
- 0.974121f, 0.977051f, 0.991211f, 0.993164f, 0.993164f, 0.992188f, 0.993164f, 0.992188f,
- 0.000000f, 0.000242f, 0.000799f, 0.000998f, 0.001273f, 0.001671f, 0.002069f, 0.002485f,
- 0.003212f, 0.003578f, 0.003948f, 0.004559f, 0.005524f, 0.006321f, 0.007046f, 0.008438f,
- 0.009438f, 0.010986f, 0.012390f, 0.014320f, 0.016663f, 0.019165f, 0.022476f, 0.025833f,
- 0.030487f, 0.035675f, 0.042358f, 0.050018f, 0.060211f, 0.072693f, 0.088379f, 0.108948f,
- 0.134766f, 0.166626f, 0.208008f, 0.258545f, 0.318848f, 0.387451f, 0.461670f, 0.536621f,
- 0.606934f, 0.671387f, 0.727539f, 0.773438f, 0.811523f, 0.843750f, 0.868164f, 0.889160f,
- 0.906250f, 0.920410f, 0.932617f, 0.941895f, 0.949707f, 0.956055f, 0.962402f, 0.967285f,
- 0.971680f, 0.975586f, 0.990723f, 0.991699f, 0.991699f, 0.992188f, 0.992188f, 0.991699f,
- 0.000237f, 0.000482f, 0.000772f, 0.000877f, 0.001109f, 0.001494f, 0.001991f, 0.002041f,
- 0.002537f, 0.002975f, 0.003469f, 0.004128f, 0.004841f, 0.005550f, 0.006306f, 0.007359f,
- 0.008369f, 0.009415f, 0.010788f, 0.012306f, 0.014160f, 0.016571f, 0.018921f, 0.021896f,
- 0.025497f, 0.029587f, 0.034576f, 0.041260f, 0.049011f, 0.058319f, 0.070557f, 0.086060f,
- 0.105774f, 0.130737f, 0.162720f, 0.203247f, 0.252930f, 0.313477f, 0.382568f, 0.457275f,
- 0.532715f, 0.605469f, 0.671387f, 0.728027f, 0.774902f, 0.814453f, 0.844727f, 0.870605f,
- 0.891113f, 0.909180f, 0.922852f, 0.934082f, 0.943359f, 0.951660f, 0.958008f, 0.964355f,
- 0.968750f, 0.973145f, 0.990234f, 0.990723f, 0.991699f, 0.991211f, 0.991211f, 0.991211f,
- 0.000235f, 0.000461f, 0.000484f, 0.000891f, 0.001105f, 0.001346f, 0.001634f, 0.001936f,
- 0.002438f, 0.002874f, 0.003353f, 0.003925f, 0.004189f, 0.004887f, 0.005684f, 0.006279f,
- 0.007298f, 0.008339f, 0.009384f, 0.010674f, 0.012360f, 0.013901f, 0.016113f, 0.018677f,
- 0.021469f, 0.024841f, 0.029144f, 0.033783f, 0.039948f, 0.047272f, 0.056915f, 0.068726f,
- 0.083801f, 0.102905f, 0.127563f, 0.159058f, 0.199341f, 0.248901f, 0.309570f, 0.379395f,
- 0.454834f, 0.532715f, 0.606934f, 0.672852f, 0.729980f, 0.778320f, 0.817383f, 0.849121f,
- 0.874512f, 0.895020f, 0.911621f, 0.924805f, 0.937012f, 0.946289f, 0.954102f, 0.960938f,
- 0.965820f, 0.971191f, 0.989258f, 0.990234f, 0.990723f, 0.991211f, 0.990723f, 0.990723f,
- 0.000000f, 0.000360f, 0.000477f, 0.000756f, 0.000896f, 0.001065f, 0.001570f, 0.001622f,
- 0.002064f, 0.002525f, 0.002819f, 0.003004f, 0.003700f, 0.004356f, 0.005077f, 0.005428f,
- 0.006283f, 0.007370f, 0.008339f, 0.009323f, 0.010567f, 0.012070f, 0.013672f, 0.015839f,
- 0.018066f, 0.020844f, 0.024002f, 0.028183f, 0.033051f, 0.039246f, 0.046417f, 0.055450f,
- 0.067200f, 0.082031f, 0.100586f, 0.125122f, 0.156250f, 0.196167f, 0.245972f, 0.307129f,
- 0.378174f, 0.454834f, 0.533203f, 0.608398f, 0.675781f, 0.734375f, 0.782715f, 0.821777f,
- 0.853516f, 0.878906f, 0.898926f, 0.915039f, 0.929199f, 0.939941f, 0.948730f, 0.956055f,
- 0.963379f, 0.968262f, 0.988770f, 0.989746f, 0.990234f, 0.989746f, 0.989746f, 0.990234f,
- 0.000000f, 0.000256f, 0.000467f, 0.000590f, 0.000772f, 0.001095f, 0.001356f, 0.001781f,
- 0.001984f, 0.002161f, 0.002546f, 0.002956f, 0.003338f, 0.003899f, 0.004440f, 0.004986f,
- 0.005486f, 0.006310f, 0.006969f, 0.008148f, 0.009148f, 0.010284f, 0.011902f, 0.013573f,
- 0.015465f, 0.017853f, 0.020340f, 0.023590f, 0.027298f, 0.032227f, 0.038208f, 0.045563f,
- 0.054047f, 0.065796f, 0.080322f, 0.098999f, 0.122864f, 0.153809f, 0.193970f, 0.244629f,
- 0.306396f, 0.378662f, 0.457031f, 0.536621f, 0.613770f, 0.681641f, 0.740723f, 0.788574f,
- 0.827637f, 0.858398f, 0.884277f, 0.903320f, 0.919922f, 0.932129f, 0.942871f, 0.951660f,
- 0.959961f, 0.965820f, 0.987305f, 0.988281f, 0.989258f, 0.989258f, 0.989258f, 0.989258f,
- 0.000244f, 0.000243f, 0.000583f, 0.000585f, 0.000822f, 0.001073f, 0.001159f, 0.001452f,
- 0.001525f, 0.002001f, 0.002201f, 0.002714f, 0.002932f, 0.003525f, 0.003904f, 0.004482f,
- 0.004997f, 0.005581f, 0.006233f, 0.006954f, 0.007820f, 0.008949f, 0.009941f, 0.011482f,
- 0.013168f, 0.015099f, 0.017151f, 0.020111f, 0.022949f, 0.026947f, 0.031647f, 0.037354f,
- 0.044342f, 0.053375f, 0.064331f, 0.078857f, 0.097351f, 0.121033f, 0.152588f, 0.192749f,
- 0.244263f, 0.307129f, 0.380615f, 0.461426f, 0.543457f, 0.621582f, 0.690430f, 0.748047f,
- 0.796387f, 0.834961f, 0.865723f, 0.889160f, 0.908691f, 0.924316f, 0.937500f, 0.946777f,
- 0.955078f, 0.962891f, 0.986328f, 0.987793f, 0.988770f, 0.988770f, 0.988770f, 0.988770f,
- 0.000000f, 0.000243f, 0.000308f, 0.000541f, 0.000801f, 0.000827f, 0.001057f, 0.001280f,
- 0.001460f, 0.001781f, 0.002090f, 0.002481f, 0.002756f, 0.003054f, 0.003321f, 0.003948f,
- 0.004303f, 0.004898f, 0.005306f, 0.006405f, 0.006954f, 0.007851f, 0.008537f, 0.009918f,
- 0.011208f, 0.012825f, 0.014534f, 0.016861f, 0.019379f, 0.022629f, 0.026276f, 0.030838f,
- 0.036407f, 0.043488f, 0.051819f, 0.063416f, 0.077209f, 0.095825f, 0.119812f, 0.151489f,
- 0.192749f, 0.245361f, 0.309814f, 0.385986f, 0.469238f, 0.552246f, 0.630859f, 0.699707f,
- 0.757324f, 0.805176f, 0.842773f, 0.873047f, 0.895508f, 0.914062f, 0.929688f, 0.941406f,
- 0.952148f, 0.959473f, 0.985840f, 0.986816f, 0.987305f, 0.987305f, 0.987305f, 0.987305f,
- 0.000000f, 0.000243f, 0.000242f, 0.000548f, 0.000695f, 0.000803f, 0.001053f, 0.001198f,
- 0.001363f, 0.001513f, 0.001886f, 0.002069f, 0.002447f, 0.002676f, 0.003138f, 0.003551f,
- 0.003868f, 0.004261f, 0.004936f, 0.005337f, 0.005852f, 0.006615f, 0.007519f, 0.008575f,
- 0.009705f, 0.010872f, 0.012688f, 0.014397f, 0.016479f, 0.019119f, 0.022064f, 0.025589f,
- 0.030304f, 0.035828f, 0.042603f, 0.050812f, 0.062012f, 0.076355f, 0.094971f, 0.119263f,
- 0.151367f, 0.193726f, 0.247925f, 0.314941f, 0.393311f, 0.478271f, 0.563965f, 0.642578f,
- 0.711914f, 0.769043f, 0.815430f, 0.851562f, 0.881348f, 0.902832f, 0.921387f, 0.934570f,
- 0.945801f, 0.955078f, 0.984375f, 0.986328f, 0.986328f, 0.986328f, 0.986328f, 0.986328f,
- 0.000000f, 0.000234f, 0.000239f, 0.000308f, 0.000597f, 0.000690f, 0.000868f, 0.000937f,
- 0.001189f, 0.001404f, 0.001696f, 0.001854f, 0.002180f, 0.002249f, 0.002672f, 0.002979f,
- 0.003494f, 0.003761f, 0.004257f, 0.004745f, 0.005154f, 0.005821f, 0.006561f, 0.007557f,
- 0.008575f, 0.009575f, 0.010963f, 0.012238f, 0.014130f, 0.016113f, 0.018539f, 0.021545f,
- 0.025162f, 0.029404f, 0.034851f, 0.041626f, 0.050354f, 0.061218f, 0.075562f, 0.094482f,
- 0.119507f, 0.152344f, 0.196167f, 0.252197f, 0.322266f, 0.404053f, 0.490967f, 0.577637f,
- 0.658203f, 0.726074f, 0.782715f, 0.827637f, 0.861816f, 0.889648f, 0.910645f, 0.926758f,
- 0.940918f, 0.950684f, 0.983398f, 0.985352f, 0.984863f, 0.985352f, 0.985840f, 0.985352f,
- 0.000000f, 0.000240f, 0.000237f, 0.000239f, 0.000436f, 0.000648f, 0.000661f, 0.000892f,
- 0.001089f, 0.001484f, 0.001446f, 0.001586f, 0.001896f, 0.002176f, 0.002325f, 0.002634f,
- 0.003057f, 0.003315f, 0.003561f, 0.004150f, 0.004578f, 0.005180f, 0.005768f, 0.006485f,
- 0.007286f, 0.008400f, 0.009453f, 0.010429f, 0.011795f, 0.013680f, 0.015671f, 0.018005f,
- 0.020981f, 0.024521f, 0.028748f, 0.034119f, 0.040863f, 0.049622f, 0.060303f, 0.074829f,
- 0.094116f, 0.119995f, 0.154297f, 0.199341f, 0.258301f, 0.331787f, 0.416504f, 0.507812f,
- 0.595703f, 0.675781f, 0.743164f, 0.797852f, 0.840820f, 0.873535f, 0.899414f, 0.919434f,
- 0.934082f, 0.947266f, 0.982422f, 0.983887f, 0.983887f, 0.984375f, 0.984375f, 0.983887f,
- 0.000136f, 0.000115f, 0.000237f, 0.000238f, 0.000358f, 0.000452f, 0.000759f, 0.000961f,
- 0.001026f, 0.001113f, 0.001433f, 0.001564f, 0.001659f, 0.001955f, 0.002024f, 0.002384f,
- 0.002647f, 0.002974f, 0.003267f, 0.003611f, 0.003971f, 0.004498f, 0.005043f, 0.005539f,
- 0.006344f, 0.007168f, 0.007942f, 0.009010f, 0.010353f, 0.011711f, 0.013458f, 0.015213f,
- 0.017548f, 0.020279f, 0.023926f, 0.028061f, 0.033356f, 0.040283f, 0.048615f, 0.060455f,
- 0.074890f, 0.094727f, 0.121216f, 0.156860f, 0.204102f, 0.266846f, 0.344238f, 0.433105f,
- 0.526855f, 0.616699f, 0.696289f, 0.761230f, 0.813965f, 0.854492f, 0.884766f, 0.909180f,
- 0.927734f, 0.941895f, 0.980957f, 0.982422f, 0.982910f, 0.982422f, 0.982422f, 0.982910f,
- 0.000000f, 0.000103f, 0.000208f, 0.000356f, 0.000355f, 0.000400f, 0.000454f, 0.000861f,
- 0.000922f, 0.001202f, 0.001088f, 0.001401f, 0.001493f, 0.001779f, 0.001881f, 0.002180f,
- 0.002329f, 0.002483f, 0.002846f, 0.003178f, 0.003542f, 0.003914f, 0.004406f, 0.004871f,
- 0.005352f, 0.006119f, 0.006927f, 0.007904f, 0.008759f, 0.009972f, 0.011284f, 0.013046f,
- 0.014938f, 0.016998f, 0.019943f, 0.023224f, 0.027161f, 0.032776f, 0.039917f, 0.048218f,
- 0.059937f, 0.075134f, 0.095642f, 0.123169f, 0.160767f, 0.211670f, 0.278320f, 0.360352f,
- 0.454102f, 0.550293f, 0.640625f, 0.718262f, 0.781738f, 0.831055f, 0.869141f, 0.897461f,
- 0.919434f, 0.936035f, 0.979492f, 0.980957f, 0.980957f, 0.981934f, 0.981445f, 0.981445f,
- 0.000000f, 0.000192f, 0.000191f, 0.000350f, 0.000352f, 0.000354f, 0.000599f, 0.000721f,
- 0.000835f, 0.001044f, 0.000988f, 0.001141f, 0.001255f, 0.001479f, 0.001705f, 0.001815f,
- 0.001843f, 0.002151f, 0.002369f, 0.002831f, 0.003067f, 0.003431f, 0.003698f, 0.004295f,
- 0.004738f, 0.005352f, 0.005859f, 0.006615f, 0.007587f, 0.008583f, 0.009682f, 0.010735f,
- 0.012405f, 0.014381f, 0.016708f, 0.018921f, 0.022736f, 0.026947f, 0.032104f, 0.039032f,
- 0.048004f, 0.059784f, 0.075500f, 0.096924f, 0.125977f, 0.166626f, 0.221069f, 0.292969f,
- 0.380371f, 0.479004f, 0.577637f, 0.667969f, 0.743164f, 0.803711f, 0.849609f, 0.883789f,
- 0.910645f, 0.930176f, 0.977539f, 0.979492f, 0.979492f, 0.979492f, 0.979980f, 0.979492f,
- 0.000000f, 0.000000f, 0.000191f, 0.000214f, 0.000441f, 0.000465f, 0.000351f, 0.000656f,
- 0.000672f, 0.000957f, 0.000881f, 0.001092f, 0.001209f, 0.001259f, 0.001315f, 0.001583f,
- 0.001630f, 0.001834f, 0.002033f, 0.002367f, 0.002596f, 0.002924f, 0.003387f, 0.003693f,
- 0.004063f, 0.004601f, 0.004986f, 0.005676f, 0.006557f, 0.006973f, 0.007801f, 0.008781f,
- 0.010475f, 0.012100f, 0.013817f, 0.015625f, 0.018784f, 0.021927f, 0.026260f, 0.031677f,
- 0.038879f, 0.048004f, 0.059845f, 0.076233f, 0.098633f, 0.130005f, 0.173950f, 0.233032f,
- 0.311035f, 0.405518f, 0.507812f, 0.608887f, 0.698242f, 0.769531f, 0.826172f, 0.868164f,
- 0.899414f, 0.922852f, 0.976074f, 0.977539f, 0.977539f, 0.977051f, 0.978027f, 0.978027f,
- 0.000000f, 0.000000f, 0.000117f, 0.000211f, 0.000326f, 0.000573f, 0.000574f, 0.000583f,
- 0.000584f, 0.000659f, 0.000901f, 0.001014f, 0.001064f, 0.001033f, 0.001163f, 0.001234f,
- 0.001546f, 0.001585f, 0.001894f, 0.002085f, 0.002361f, 0.002504f, 0.003023f, 0.003147f,
- 0.003580f, 0.004032f, 0.004314f, 0.004936f, 0.005215f, 0.006081f, 0.006725f, 0.007927f,
- 0.008743f, 0.009918f, 0.011642f, 0.013367f, 0.015404f, 0.018219f, 0.021545f, 0.025787f,
- 0.031174f, 0.038361f, 0.047577f, 0.060425f, 0.077881f, 0.102051f, 0.135376f, 0.182861f,
- 0.249023f, 0.333984f, 0.436035f, 0.542969f, 0.644043f, 0.730469f, 0.798340f, 0.848633f,
- 0.886719f, 0.914062f, 0.973633f, 0.974609f, 0.975098f, 0.976074f, 0.975098f, 0.976074f,
- 0.000000f, 0.000000f, 0.000114f, 0.000112f, 0.000271f, 0.000510f, 0.000450f, 0.000565f,
- 0.000572f, 0.000581f, 0.000654f, 0.000825f, 0.000954f, 0.001085f, 0.001050f, 0.001087f,
- 0.001282f, 0.001547f, 0.001585f, 0.001825f, 0.002066f, 0.002182f, 0.002384f, 0.002659f,
- 0.003172f, 0.003357f, 0.003721f, 0.004238f, 0.004505f, 0.005024f, 0.005878f, 0.006512f,
- 0.007324f, 0.008293f, 0.009201f, 0.011040f, 0.012993f, 0.015007f, 0.017639f, 0.020920f,
- 0.025131f, 0.030899f, 0.038269f, 0.047760f, 0.061188f, 0.079651f, 0.105469f, 0.142944f,
- 0.195801f, 0.268799f, 0.363525f, 0.472168f, 0.582520f, 0.683594f, 0.765137f, 0.826660f,
- 0.872070f, 0.905273f, 0.972168f, 0.973633f, 0.973145f, 0.973633f, 0.973633f, 0.973633f,
- 0.000000f, 0.000000f, 0.000000f, 0.000111f, 0.000224f, 0.000412f, 0.000494f, 0.000543f,
- 0.000561f, 0.000680f, 0.000665f, 0.000675f, 0.000679f, 0.000797f, 0.000926f, 0.001122f,
- 0.001132f, 0.001207f, 0.001375f, 0.001606f, 0.001838f, 0.001963f, 0.002163f, 0.002314f,
- 0.002480f, 0.002956f, 0.003189f, 0.003489f, 0.003744f, 0.004311f, 0.004749f, 0.005276f,
- 0.005867f, 0.006962f, 0.008186f, 0.008987f, 0.010498f, 0.012283f, 0.014374f, 0.017075f,
- 0.020355f, 0.024719f, 0.030640f, 0.037720f, 0.048309f, 0.062134f, 0.082336f, 0.110840f,
- 0.151978f, 0.212891f, 0.294922f, 0.399170f, 0.515137f, 0.628418f, 0.724609f, 0.799805f,
- 0.854980f, 0.894043f, 0.968750f, 0.970215f, 0.970703f, 0.971191f, 0.970703f, 0.970703f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000228f, 0.000233f, 0.000436f, 0.000457f,
- 0.000621f, 0.000546f, 0.000622f, 0.000633f, 0.000576f, 0.000644f, 0.000717f, 0.000909f,
- 0.000994f, 0.001127f, 0.001179f, 0.001267f, 0.001513f, 0.001628f, 0.001742f, 0.001974f,
- 0.002111f, 0.002403f, 0.002810f, 0.003139f, 0.003231f, 0.003466f, 0.004021f, 0.004459f,
- 0.004971f, 0.005581f, 0.006809f, 0.007568f, 0.008759f, 0.010002f, 0.011665f, 0.013847f,
- 0.016342f, 0.019714f, 0.024368f, 0.030106f, 0.037811f, 0.048706f, 0.063843f, 0.085327f,
- 0.118042f, 0.164917f, 0.234131f, 0.328125f, 0.443359f, 0.565430f, 0.677246f, 0.767578f,
- 0.833496f, 0.882812f, 0.965820f, 0.967285f, 0.967773f, 0.968262f, 0.967773f, 0.968262f,
- 0.000000f, 0.000000f, 0.000000f, 0.000214f, 0.000210f, 0.000296f, 0.000309f, 0.000386f,
- 0.000462f, 0.000482f, 0.000525f, 0.000572f, 0.000525f, 0.000558f, 0.000689f, 0.000685f,
- 0.000841f, 0.000934f, 0.001008f, 0.001182f, 0.001271f, 0.001412f, 0.001757f, 0.001787f,
- 0.001769f, 0.002110f, 0.002321f, 0.002331f, 0.002737f, 0.002951f, 0.003189f, 0.003588f,
- 0.004253f, 0.004627f, 0.005505f, 0.006119f, 0.006969f, 0.008018f, 0.009583f, 0.010971f,
- 0.013245f, 0.015915f, 0.019257f, 0.023651f, 0.030014f, 0.038086f, 0.049683f, 0.066406f,
- 0.091125f, 0.127441f, 0.182617f, 0.262939f, 0.370605f, 0.497070f, 0.623047f, 0.729004f,
- 0.810547f, 0.867188f, 0.962891f, 0.963867f, 0.964844f, 0.964844f, 0.964355f, 0.964355f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000200f, 0.000215f, 0.000229f, 0.000319f,
- 0.000330f, 0.000411f, 0.000491f, 0.000527f, 0.000547f, 0.000560f, 0.000634f, 0.000648f,
- 0.000716f, 0.000778f, 0.000855f, 0.000998f, 0.001182f, 0.001111f, 0.001274f, 0.001625f,
- 0.001584f, 0.001559f, 0.001864f, 0.002037f, 0.002296f, 0.002438f, 0.002600f, 0.002993f,
- 0.003290f, 0.003801f, 0.004467f, 0.005085f, 0.005508f, 0.006519f, 0.007645f, 0.008743f,
- 0.010757f, 0.012558f, 0.014946f, 0.018661f, 0.023422f, 0.029556f, 0.038574f, 0.050964f,
- 0.069702f, 0.097351f, 0.140015f, 0.205566f, 0.301025f, 0.424561f, 0.559082f, 0.683594f,
- 0.781250f, 0.852051f, 0.958496f, 0.960449f, 0.960938f, 0.960938f, 0.960938f, 0.960449f,
- 0.000000f, 0.000000f, 0.000122f, 0.000122f, 0.000122f, 0.000194f, 0.000214f, 0.000251f,
- 0.000302f, 0.000365f, 0.000370f, 0.000429f, 0.000495f, 0.000521f, 0.000504f, 0.000547f,
- 0.000632f, 0.000656f, 0.000695f, 0.000795f, 0.000922f, 0.001074f, 0.001125f, 0.001192f,
- 0.001166f, 0.001303f, 0.001555f, 0.001575f, 0.001763f, 0.001970f, 0.002232f, 0.002560f,
- 0.002657f, 0.003082f, 0.003559f, 0.003799f, 0.004620f, 0.005241f, 0.006081f, 0.007103f,
- 0.008385f, 0.009796f, 0.012192f, 0.014702f, 0.018234f, 0.022934f, 0.029556f, 0.039307f,
- 0.053009f, 0.073547f, 0.106628f, 0.157715f, 0.237793f, 0.351318f, 0.490479f, 0.629883f,
- 0.746094f, 0.832031f, 0.954590f, 0.956055f, 0.956055f, 0.957031f, 0.956543f, 0.956055f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000146f, 0.000191f, 0.000200f,
- 0.000255f, 0.000232f, 0.000252f, 0.000359f, 0.000291f, 0.000342f, 0.000406f, 0.000498f,
- 0.000520f, 0.000533f, 0.000632f, 0.000605f, 0.000689f, 0.000768f, 0.000908f, 0.001013f,
- 0.001087f, 0.001030f, 0.001211f, 0.001318f, 0.001497f, 0.001609f, 0.001753f, 0.001957f,
- 0.002234f, 0.002352f, 0.002663f, 0.003040f, 0.003635f, 0.004082f, 0.004723f, 0.005516f,
- 0.006367f, 0.007675f, 0.009224f, 0.011360f, 0.013695f, 0.017868f, 0.022598f, 0.029724f,
- 0.040222f, 0.055542f, 0.080078f, 0.119202f, 0.182617f, 0.281738f, 0.417725f, 0.568848f,
- 0.705566f, 0.807129f, 0.948730f, 0.951172f, 0.951172f, 0.951172f, 0.951660f, 0.951660f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f,
- 0.000203f, 0.000186f, 0.000184f, 0.000321f, 0.000231f, 0.000337f, 0.000359f, 0.000430f,
- 0.000455f, 0.000531f, 0.000502f, 0.000517f, 0.000728f, 0.000643f, 0.000673f, 0.000816f,
- 0.000930f, 0.000991f, 0.001028f, 0.001161f, 0.001284f, 0.001369f, 0.001474f, 0.001719f,
- 0.001781f, 0.001883f, 0.002258f, 0.002518f, 0.002831f, 0.003201f, 0.003744f, 0.004349f,
- 0.005127f, 0.006130f, 0.007210f, 0.008423f, 0.010696f, 0.013405f, 0.017136f, 0.022522f,
- 0.030029f, 0.041321f, 0.059631f, 0.089050f, 0.138062f, 0.218994f, 0.343750f, 0.500488f,
- 0.657227f, 0.780762f, 0.943848f, 0.945312f, 0.945312f, 0.945801f, 0.945801f, 0.946289f,
- 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000121f, 0.000120f,
- 0.000118f, 0.000137f, 0.000139f, 0.000241f, 0.000202f, 0.000304f, 0.000313f, 0.000332f,
- 0.000357f, 0.000420f, 0.000435f, 0.000463f, 0.000645f, 0.000544f, 0.000700f, 0.000717f,
- 0.000669f, 0.000834f, 0.000865f, 0.000916f, 0.001109f, 0.001193f, 0.001246f, 0.001300f,
- 0.001488f, 0.001538f, 0.001806f, 0.001929f, 0.002001f, 0.002462f, 0.002666f, 0.003260f,
- 0.003904f, 0.004364f, 0.005325f, 0.006306f, 0.008041f, 0.009720f, 0.012718f, 0.016525f,
- 0.022217f, 0.030579f, 0.043854f, 0.065247f, 0.101929f, 0.166016f, 0.273193f, 0.428223f,
- 0.600586f, 0.748047f, 0.936523f, 0.938477f, 0.938965f, 0.939453f, 0.938965f, 0.938965f,
- 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f,
- 0.000114f, 0.000102f, 0.000090f, 0.000096f, 0.000131f, 0.000245f, 0.000276f, 0.000257f,
- 0.000307f, 0.000316f, 0.000322f, 0.000373f, 0.000411f, 0.000440f, 0.000433f, 0.000650f,
- 0.000578f, 0.000704f, 0.000746f, 0.000723f, 0.000819f, 0.000756f, 0.000758f, 0.000878f,
- 0.001009f, 0.001270f, 0.001399f, 0.001530f, 0.001798f, 0.001803f, 0.002151f, 0.002317f,
- 0.002728f, 0.003222f, 0.003782f, 0.004612f, 0.005951f, 0.006985f, 0.009308f, 0.011955f,
- 0.016052f, 0.022324f, 0.031525f, 0.047272f, 0.073853f, 0.122192f, 0.209717f, 0.352783f,
- 0.537109f, 0.709473f, 0.928223f, 0.930664f, 0.931152f, 0.930664f, 0.931641f, 0.931152f,
- 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000120f, 0.000119f,
- 0.000119f, 0.000111f, 0.000100f, 0.000139f, 0.000082f, 0.000154f, 0.000121f, 0.000216f,
- 0.000147f, 0.000271f, 0.000288f, 0.000298f, 0.000386f, 0.000463f, 0.000370f, 0.000485f,
- 0.000555f, 0.000530f, 0.000578f, 0.000574f, 0.000612f, 0.000712f, 0.000776f, 0.000716f,
- 0.000931f, 0.000831f, 0.000967f, 0.001154f, 0.001176f, 0.001284f, 0.001497f, 0.001884f,
- 0.002270f, 0.002415f, 0.002947f, 0.003412f, 0.004032f, 0.005066f, 0.006485f, 0.008400f,
- 0.011215f, 0.015404f, 0.022079f, 0.033264f, 0.052124f, 0.087646f, 0.155029f, 0.279297f,
- 0.465820f, 0.664062f, 0.918945f, 0.921387f, 0.921875f, 0.922363f, 0.922363f, 0.921875f,
- 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000119f, 0.000119f,
- 0.000118f, 0.000118f, 0.000110f, 0.000100f, 0.000091f, 0.000082f, 0.000075f, 0.000095f,
- 0.000166f, 0.000113f, 0.000163f, 0.000248f, 0.000258f, 0.000277f, 0.000336f, 0.000301f,
- 0.000445f, 0.000495f, 0.000473f, 0.000505f, 0.000494f, 0.000470f, 0.000584f, 0.000752f,
- 0.000821f, 0.000814f, 0.000845f, 0.000807f, 0.000932f, 0.000996f, 0.001380f, 0.001481f,
- 0.001507f, 0.001757f, 0.002146f, 0.002443f, 0.002869f, 0.003546f, 0.004559f, 0.005878f,
- 0.007561f, 0.010475f, 0.015320f, 0.022675f, 0.036133f, 0.060883f, 0.110352f, 0.211670f,
- 0.389160f, 0.610352f, 0.908691f, 0.909180f, 0.910645f, 0.912109f, 0.909668f, 0.910156f,
- 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000118f, 0.000117f,
- 0.000117f, 0.000117f, 0.000116f, 0.000110f, 0.000100f, 0.000099f, 0.000083f, 0.000077f,
- 0.000071f, 0.000081f, 0.000087f, 0.000166f, 0.000177f, 0.000233f, 0.000238f, 0.000273f,
- 0.000325f, 0.000357f, 0.000292f, 0.000406f, 0.000418f, 0.000440f, 0.000428f, 0.000568f,
- 0.000459f, 0.000628f, 0.000678f, 0.000688f, 0.000647f, 0.000830f, 0.000925f, 0.001111f,
- 0.001011f, 0.001420f, 0.001504f, 0.001771f, 0.001997f, 0.002495f, 0.003147f, 0.003944f,
- 0.005077f, 0.006958f, 0.010040f, 0.015053f, 0.023727f, 0.040680f, 0.075989f, 0.153076f,
- 0.312012f, 0.547363f, 0.894531f, 0.897461f, 0.897949f, 0.897949f, 0.897949f, 0.898438f,
- 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000118f, 0.000117f, 0.000116f, 0.000116f,
- 0.000115f, 0.000115f, 0.000114f, 0.000114f, 0.000111f, 0.000101f, 0.000093f, 0.000086f,
- 0.000079f, 0.000095f, 0.000095f, 0.000090f, 0.000117f, 0.000109f, 0.000158f, 0.000199f,
- 0.000207f, 0.000223f, 0.000286f, 0.000288f, 0.000267f, 0.000347f, 0.000368f, 0.000450f,
- 0.000377f, 0.000460f, 0.000504f, 0.000498f, 0.000494f, 0.000616f, 0.000632f, 0.000699f,
- 0.000755f, 0.000938f, 0.000978f, 0.001222f, 0.001355f, 0.001673f, 0.002016f, 0.002539f,
- 0.003258f, 0.004410f, 0.006332f, 0.009285f, 0.014847f, 0.025864f, 0.049042f, 0.104736f,
- 0.236572f, 0.477295f, 0.879395f, 0.881348f, 0.882324f, 0.881836f, 0.882324f, 0.882324f,
- 0.000000f, 0.000119f, 0.000118f, 0.000116f, 0.000115f, 0.000114f, 0.000114f, 0.000113f,
- 0.000112f, 0.000112f, 0.000111f, 0.000111f, 0.000110f, 0.000110f, 0.000103f, 0.000095f,
- 0.000088f, 0.000081f, 0.000076f, 0.000070f, 0.000065f, 0.000100f, 0.000104f, 0.000099f,
- 0.000120f, 0.000145f, 0.000190f, 0.000204f, 0.000213f, 0.000230f, 0.000241f, 0.000279f,
- 0.000325f, 0.000322f, 0.000328f, 0.000381f, 0.000351f, 0.000466f, 0.000452f, 0.000516f,
- 0.000591f, 0.000622f, 0.000733f, 0.000882f, 0.000895f, 0.001092f, 0.001456f, 0.001765f,
- 0.002069f, 0.002821f, 0.003851f, 0.005558f, 0.008865f, 0.015579f, 0.029999f, 0.066895f,
- 0.167480f, 0.400391f, 0.860352f, 0.862793f, 0.863281f, 0.864258f, 0.863281f, 0.863770f,
- 0.000119f, 0.000114f, 0.000113f, 0.000113f, 0.000111f, 0.000110f, 0.000109f, 0.000109f,
- 0.000108f, 0.000107f, 0.000107f, 0.000107f, 0.000106f, 0.000105f, 0.000106f, 0.000105f,
- 0.000098f, 0.000090f, 0.000084f, 0.000078f, 0.000073f, 0.000068f, 0.000063f, 0.000063f,
- 0.000066f, 0.000053f, 0.000080f, 0.000107f, 0.000126f, 0.000150f, 0.000188f, 0.000187f,
- 0.000206f, 0.000205f, 0.000235f, 0.000242f, 0.000277f, 0.000340f, 0.000323f, 0.000308f,
- 0.000417f, 0.000411f, 0.000445f, 0.000536f, 0.000622f, 0.000673f, 0.000887f, 0.000985f,
- 0.001289f, 0.001623f, 0.002337f, 0.003241f, 0.004929f, 0.008560f, 0.016739f, 0.039307f,
- 0.109619f, 0.317383f, 0.837402f, 0.840332f, 0.841309f, 0.840820f, 0.840820f, 0.841309f,
- 0.000000f, 0.000106f, 0.000099f, 0.000104f, 0.000102f, 0.000101f, 0.000100f, 0.000101f,
- 0.000101f, 0.000100f, 0.000099f, 0.000100f, 0.000099f, 0.000099f, 0.000099f, 0.000098f,
- 0.000098f, 0.000098f, 0.000093f, 0.000086f, 0.000080f, 0.000075f, 0.000070f, 0.000065f,
- 0.000061f, 0.000057f, 0.000059f, 0.000054f, 0.000061f, 0.000080f, 0.000087f, 0.000101f,
- 0.000136f, 0.000147f, 0.000163f, 0.000171f, 0.000179f, 0.000205f, 0.000223f, 0.000237f,
- 0.000281f, 0.000272f, 0.000299f, 0.000364f, 0.000373f, 0.000448f, 0.000507f, 0.000643f,
- 0.000801f, 0.001000f, 0.001276f, 0.001765f, 0.002712f, 0.004585f, 0.008492f, 0.020462f,
- 0.063721f, 0.233643f, 0.811035f, 0.813477f, 0.814453f, 0.813965f, 0.813965f, 0.814453f,
- 0.000000f, 0.000057f, 0.000085f, 0.000085f, 0.000083f, 0.000085f, 0.000087f, 0.000086f,
- 0.000087f, 0.000087f, 0.000086f, 0.000087f, 0.000087f, 0.000086f, 0.000087f, 0.000087f,
- 0.000088f, 0.000086f, 0.000088f, 0.000087f, 0.000087f, 0.000081f, 0.000076f, 0.000071f,
- 0.000067f, 0.000063f, 0.000058f, 0.000055f, 0.000051f, 0.000048f, 0.000046f, 0.000042f,
- 0.000051f, 0.000063f, 0.000081f, 0.000101f, 0.000122f, 0.000137f, 0.000147f, 0.000143f,
- 0.000157f, 0.000183f, 0.000205f, 0.000188f, 0.000196f, 0.000249f, 0.000310f, 0.000329f,
- 0.000413f, 0.000534f, 0.000679f, 0.000944f, 0.001365f, 0.002199f, 0.004150f, 0.009369f,
- 0.031677f, 0.153564f, 0.779297f, 0.781250f, 0.782227f, 0.782715f, 0.781738f, 0.781250f,
- 0.000000f, 0.000000f, 0.000000f, 0.000009f, 0.000030f, 0.000048f, 0.000051f, 0.000054f,
- 0.000055f, 0.000059f, 0.000060f, 0.000065f, 0.000065f, 0.000066f, 0.000068f, 0.000068f,
- 0.000070f, 0.000070f, 0.000071f, 0.000071f, 0.000072f, 0.000073f, 0.000073f, 0.000073f,
- 0.000071f, 0.000066f, 0.000062f, 0.000058f, 0.000055f, 0.000051f, 0.000048f, 0.000045f,
- 0.000042f, 0.000039f, 0.000044f, 0.000036f, 0.000046f, 0.000056f, 0.000067f, 0.000085f,
- 0.000099f, 0.000108f, 0.000107f, 0.000113f, 0.000139f, 0.000144f, 0.000165f, 0.000169f,
- 0.000196f, 0.000266f, 0.000311f, 0.000426f, 0.000598f, 0.000948f, 0.001744f, 0.003975f,
- 0.012856f, 0.084351f, 0.739746f, 0.743164f, 0.743652f, 0.743652f, 0.743652f, 0.743164f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000012f, 0.000012f, 0.000020f, 0.000028f, 0.000030f, 0.000033f, 0.000034f,
- 0.000041f, 0.000041f, 0.000045f, 0.000047f, 0.000048f, 0.000049f, 0.000051f, 0.000052f,
- 0.000054f, 0.000054f, 0.000056f, 0.000057f, 0.000056f, 0.000052f, 0.000049f, 0.000046f,
- 0.000043f, 0.000041f, 0.000038f, 0.000035f, 0.000033f, 0.000031f, 0.000029f, 0.000029f,
- 0.000036f, 0.000055f, 0.000048f, 0.000067f, 0.000067f, 0.000073f, 0.000075f, 0.000097f,
- 0.000085f, 0.000111f, 0.000137f, 0.000191f, 0.000233f, 0.000371f, 0.000609f, 0.001319f,
- 0.004341f, 0.033844f, 0.696289f, 0.698730f, 0.699219f, 0.698242f, 0.698730f, 0.698730f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000003f, 0.000007f, 0.000009f, 0.000012f, 0.000015f, 0.000020f,
- 0.000022f, 0.000023f, 0.000026f, 0.000029f, 0.000030f, 0.000032f, 0.000033f, 0.000035f,
- 0.000037f, 0.000037f, 0.000036f, 0.000034f, 0.000032f, 0.000030f, 0.000028f, 0.000026f,
- 0.000024f, 0.000022f, 0.000021f, 0.000019f, 0.000024f, 0.000024f, 0.000029f, 0.000037f,
- 0.000043f, 0.000046f, 0.000059f, 0.000058f, 0.000075f, 0.000095f, 0.000160f, 0.000306f,
- 0.001006f, 0.008865f, 0.643066f, 0.647461f, 0.647949f, 0.647461f, 0.647949f, 0.648438f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
- 0.000003f, 0.000005f, 0.000007f, 0.000010f, 0.000012f, 0.000013f, 0.000015f, 0.000017f,
- 0.000019f, 0.000020f, 0.000018f, 0.000017f, 0.000015f, 0.000014f, 0.000013f, 0.000012f,
- 0.000010f, 0.000012f, 0.000014f, 0.000018f, 0.000018f, 0.000025f, 0.000028f, 0.000045f,
- 0.000110f, 0.001030f, 0.586914f, 0.589844f, 0.590820f, 0.591309f, 0.591309f, 0.590820f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000002f, 0.000004f, 0.000005f, 0.000004f, 0.000004f, 0.000003f, 0.000003f,
- 0.000004f, 0.000009f, 0.527344f, 0.529785f, 0.529785f, 0.530273f, 0.530762f, 0.530762f,
- },
- {
- 0.135132f, 0.377441f, 0.544434f, 0.653320f, 0.724609f, 0.773926f, 0.811035f, 0.838867f,
- 0.860840f, 0.876465f, 0.891113f, 0.902832f, 0.912109f, 0.920898f, 0.928223f, 0.934082f,
- 0.938965f, 0.943848f, 0.948242f, 0.952637f, 0.955566f, 0.958984f, 0.961914f, 0.964844f,
- 0.966797f, 0.969238f, 0.971191f, 0.973145f, 0.975098f, 0.976562f, 0.978027f, 0.979492f,
- 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.985840f, 0.986328f, 0.987793f, 0.988770f,
- 0.989746f, 0.989746f, 0.990234f, 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994141f,
- 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f, 0.998047f, 0.998535f,
- 0.999023f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f, 0.999023f, 0.999023f,
- 0.044891f, 0.163330f, 0.306885f, 0.444336f, 0.559570f, 0.645020f, 0.710938f, 0.760742f,
- 0.797852f, 0.827148f, 0.850098f, 0.868652f, 0.883789f, 0.895996f, 0.907227f, 0.916016f,
- 0.923340f, 0.930176f, 0.936523f, 0.941406f, 0.946777f, 0.950684f, 0.954102f, 0.957031f,
- 0.960938f, 0.963379f, 0.965820f, 0.968262f, 0.970703f, 0.972168f, 0.974609f, 0.976562f,
- 0.977539f, 0.979492f, 0.980469f, 0.981934f, 0.982910f, 0.984375f, 0.985840f, 0.986816f,
- 0.987793f, 0.988770f, 0.988770f, 0.990234f, 0.991211f, 0.991699f, 0.992676f, 0.993164f,
- 0.993164f, 0.994141f, 0.995605f, 0.995605f, 0.996094f, 0.996582f, 0.997070f, 0.997559f,
- 0.998047f, 0.998535f, 0.999512f, 0.999512f, 0.999512f, 0.999023f, 0.999023f, 0.999023f,
- 0.020325f, 0.077820f, 0.158936f, 0.260498f, 0.372314f, 0.479736f, 0.572754f, 0.648438f,
- 0.707520f, 0.754883f, 0.791016f, 0.820312f, 0.843750f, 0.862793f, 0.878906f, 0.891602f,
- 0.903320f, 0.912598f, 0.920898f, 0.928223f, 0.933594f, 0.939941f, 0.944824f, 0.949219f,
- 0.952637f, 0.956543f, 0.959961f, 0.962402f, 0.965332f, 0.967773f, 0.970215f, 0.971680f,
- 0.974121f, 0.976074f, 0.977539f, 0.979004f, 0.980957f, 0.981445f, 0.983398f, 0.984375f,
- 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.990234f, 0.991211f, 0.992188f,
- 0.992676f, 0.993164f, 0.994141f, 0.994629f, 0.995605f, 0.996094f, 0.996582f, 0.996582f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f,
- 0.012032f, 0.042908f, 0.088196f, 0.149292f, 0.228027f, 0.319824f, 0.415527f, 0.506348f,
- 0.586914f, 0.653809f, 0.709473f, 0.752441f, 0.787598f, 0.817383f, 0.840820f, 0.860352f,
- 0.876465f, 0.889648f, 0.900879f, 0.910156f, 0.918945f, 0.926270f, 0.933105f, 0.938965f,
- 0.944336f, 0.948730f, 0.952637f, 0.956055f, 0.958984f, 0.962402f, 0.965332f, 0.967773f,
- 0.970215f, 0.972656f, 0.974609f, 0.976562f, 0.978027f, 0.979492f, 0.980957f, 0.982422f,
- 0.983887f, 0.984375f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.989746f, 0.990234f,
- 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.994629f, 0.995117f, 0.996094f, 0.996094f,
- 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f,
- 0.007637f, 0.026825f, 0.053436f, 0.090759f, 0.140137f, 0.203125f, 0.279053f, 0.363281f,
- 0.449463f, 0.529785f, 0.601562f, 0.663574f, 0.713379f, 0.756348f, 0.789551f, 0.816895f,
- 0.840332f, 0.858887f, 0.875488f, 0.887695f, 0.900391f, 0.909668f, 0.918945f, 0.926270f,
- 0.932617f, 0.938477f, 0.943848f, 0.948242f, 0.952148f, 0.955566f, 0.959473f, 0.962402f,
- 0.965332f, 0.967773f, 0.970215f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979492f,
- 0.980957f, 0.981934f, 0.984375f, 0.985352f, 0.985840f, 0.987793f, 0.988281f, 0.989258f,
- 0.990723f, 0.991211f, 0.991699f, 0.992676f, 0.993652f, 0.994141f, 0.994629f, 0.995605f,
- 0.996094f, 0.997070f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998535f, 0.998047f,
- 0.004784f, 0.018082f, 0.035400f, 0.058868f, 0.089783f, 0.130981f, 0.183716f, 0.248047f,
- 0.321289f, 0.400391f, 0.478760f, 0.552734f, 0.617188f, 0.673828f, 0.720703f, 0.759766f,
- 0.792480f, 0.818359f, 0.840820f, 0.859863f, 0.875000f, 0.888184f, 0.899902f, 0.910645f,
- 0.918945f, 0.926270f, 0.931641f, 0.938965f, 0.943848f, 0.948242f, 0.952148f, 0.957031f,
- 0.959473f, 0.962891f, 0.965332f, 0.968262f, 0.970215f, 0.972656f, 0.975098f, 0.977051f,
- 0.978516f, 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.985352f, 0.986328f, 0.987305f,
- 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f, 0.993164f, 0.994141f, 0.994629f,
- 0.995605f, 0.996094f, 0.998047f, 0.998535f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.004044f, 0.012550f, 0.024628f, 0.040466f, 0.060760f, 0.087708f, 0.122742f, 0.167236f,
- 0.222534f, 0.287109f, 0.358643f, 0.432617f, 0.506348f, 0.573242f, 0.632812f, 0.685059f,
- 0.728516f, 0.766602f, 0.797363f, 0.822266f, 0.843750f, 0.861328f, 0.877441f, 0.890625f,
- 0.901367f, 0.910645f, 0.919434f, 0.926758f, 0.933105f, 0.940430f, 0.944824f, 0.948730f,
- 0.953125f, 0.957520f, 0.960449f, 0.963867f, 0.966309f, 0.969238f, 0.970703f, 0.973633f,
- 0.976074f, 0.977539f, 0.979004f, 0.980469f, 0.982422f, 0.983398f, 0.984863f, 0.986816f,
- 0.986816f, 0.988281f, 0.989746f, 0.990723f, 0.991211f, 0.992188f, 0.993164f, 0.994141f,
- 0.994629f, 0.995117f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f, 0.998047f,
- 0.002975f, 0.009315f, 0.017868f, 0.029129f, 0.043243f, 0.062012f, 0.084961f, 0.115540f,
- 0.154419f, 0.201660f, 0.257812f, 0.322754f, 0.391846f, 0.463135f, 0.530762f, 0.594727f,
- 0.650391f, 0.698730f, 0.739258f, 0.773926f, 0.803711f, 0.826660f, 0.847656f, 0.865723f,
- 0.879883f, 0.892090f, 0.903809f, 0.913086f, 0.921387f, 0.928223f, 0.935059f, 0.940918f,
- 0.945801f, 0.950684f, 0.954102f, 0.958008f, 0.961426f, 0.964844f, 0.967285f, 0.970215f,
- 0.972168f, 0.974609f, 0.976074f, 0.978027f, 0.979980f, 0.981934f, 0.983398f, 0.984375f,
- 0.985352f, 0.987305f, 0.988281f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f,
- 0.993652f, 0.994629f, 0.997559f, 0.998047f, 0.998047f, 0.997559f, 0.997559f, 0.997559f,
- 0.002329f, 0.007256f, 0.013611f, 0.021790f, 0.032043f, 0.044617f, 0.061554f, 0.082336f,
- 0.108765f, 0.142578f, 0.184448f, 0.234375f, 0.292725f, 0.357422f, 0.424805f, 0.493164f,
- 0.556641f, 0.615723f, 0.666504f, 0.711914f, 0.750977f, 0.782715f, 0.809570f, 0.832520f,
- 0.853516f, 0.868652f, 0.882812f, 0.895508f, 0.905762f, 0.916016f, 0.923340f, 0.931152f,
- 0.936523f, 0.942383f, 0.947266f, 0.951172f, 0.956055f, 0.958984f, 0.962402f, 0.965820f,
- 0.968750f, 0.971191f, 0.973633f, 0.975586f, 0.977539f, 0.979980f, 0.980957f, 0.982422f,
- 0.983887f, 0.985352f, 0.985840f, 0.988281f, 0.989746f, 0.990234f, 0.991211f, 0.991699f,
- 0.993164f, 0.993652f, 0.997070f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f,
- 0.001871f, 0.006084f, 0.010963f, 0.016953f, 0.024277f, 0.033722f, 0.046234f, 0.060669f,
- 0.079224f, 0.103638f, 0.132812f, 0.169678f, 0.214478f, 0.267090f, 0.326172f, 0.390137f,
- 0.456543f, 0.519531f, 0.581543f, 0.636230f, 0.685547f, 0.726562f, 0.762207f, 0.792969f,
- 0.818359f, 0.839844f, 0.858398f, 0.874023f, 0.887695f, 0.898926f, 0.909668f, 0.918945f,
- 0.926270f, 0.933105f, 0.938965f, 0.944336f, 0.949219f, 0.953613f, 0.958008f, 0.961426f,
- 0.964844f, 0.967773f, 0.969727f, 0.972168f, 0.974609f, 0.976074f, 0.979004f, 0.979980f,
- 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.989746f, 0.989746f, 0.990723f,
- 0.991211f, 0.992676f, 0.996582f, 0.997070f, 0.997559f, 0.997070f, 0.997070f, 0.997070f,
- 0.001322f, 0.004795f, 0.008530f, 0.013504f, 0.018921f, 0.026154f, 0.035065f, 0.045807f,
- 0.059662f, 0.076416f, 0.098267f, 0.124512f, 0.157715f, 0.197388f, 0.244873f, 0.299805f,
- 0.359619f, 0.423096f, 0.487549f, 0.549316f, 0.605957f, 0.657715f, 0.703125f, 0.741211f,
- 0.774902f, 0.802734f, 0.827148f, 0.847656f, 0.865234f, 0.879883f, 0.893066f, 0.903320f,
- 0.913086f, 0.920898f, 0.929199f, 0.935547f, 0.941406f, 0.947266f, 0.951172f, 0.956055f,
- 0.959473f, 0.962891f, 0.965332f, 0.969238f, 0.971191f, 0.974121f, 0.976562f, 0.977539f,
- 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.986328f, 0.988281f, 0.988281f, 0.989746f,
- 0.990723f, 0.991699f, 0.996582f, 0.996582f, 0.997070f, 0.997070f, 0.997070f, 0.996582f,
- 0.001077f, 0.003971f, 0.006985f, 0.010750f, 0.015579f, 0.020920f, 0.027420f, 0.035522f,
- 0.045776f, 0.058228f, 0.074097f, 0.093140f, 0.117310f, 0.146851f, 0.182495f, 0.225952f,
- 0.276611f, 0.332764f, 0.394287f, 0.456543f, 0.518555f, 0.577637f, 0.630371f, 0.679199f,
- 0.720703f, 0.756836f, 0.787598f, 0.813477f, 0.836426f, 0.855469f, 0.872070f, 0.885742f,
- 0.897949f, 0.908203f, 0.917480f, 0.925293f, 0.933105f, 0.939453f, 0.944336f, 0.949219f,
- 0.954590f, 0.957520f, 0.961426f, 0.964844f, 0.968262f, 0.970703f, 0.974121f, 0.975586f,
- 0.978027f, 0.979492f, 0.981445f, 0.983398f, 0.984863f, 0.986328f, 0.987793f, 0.988770f,
- 0.989746f, 0.991211f, 0.996094f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996582f,
- 0.000954f, 0.003330f, 0.005733f, 0.008904f, 0.012505f, 0.016617f, 0.022446f, 0.028351f,
- 0.036041f, 0.045807f, 0.056854f, 0.071350f, 0.088867f, 0.110596f, 0.137451f, 0.170654f,
- 0.209717f, 0.256592f, 0.309326f, 0.366943f, 0.427979f, 0.489502f, 0.549316f, 0.604980f,
- 0.655762f, 0.700195f, 0.738770f, 0.772461f, 0.801270f, 0.825195f, 0.845703f, 0.864258f,
- 0.879395f, 0.893066f, 0.903809f, 0.914062f, 0.922363f, 0.929688f, 0.936523f, 0.942871f,
- 0.947266f, 0.952148f, 0.956055f, 0.960449f, 0.963867f, 0.966797f, 0.969727f, 0.972656f,
- 0.975586f, 0.976562f, 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f,
- 0.988770f, 0.989746f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.996094f,
- 0.000949f, 0.002804f, 0.004730f, 0.007236f, 0.010384f, 0.014160f, 0.018478f, 0.023102f,
- 0.028992f, 0.036346f, 0.044647f, 0.055542f, 0.068481f, 0.085144f, 0.105286f, 0.130005f,
- 0.159668f, 0.195557f, 0.238647f, 0.287842f, 0.343018f, 0.402588f, 0.463135f, 0.522949f,
- 0.580566f, 0.632812f, 0.680664f, 0.721680f, 0.757812f, 0.788574f, 0.814453f, 0.836914f,
- 0.856934f, 0.872070f, 0.887207f, 0.899414f, 0.909668f, 0.918945f, 0.926758f, 0.933594f,
- 0.940430f, 0.946289f, 0.950684f, 0.954590f, 0.959473f, 0.963379f, 0.966797f, 0.969238f,
- 0.972168f, 0.975098f, 0.977051f, 0.979492f, 0.980957f, 0.982910f, 0.984375f, 0.986328f,
- 0.987793f, 0.988770f, 0.995117f, 0.996094f, 0.995605f, 0.996094f, 0.996094f, 0.995605f,
- 0.000828f, 0.002361f, 0.004116f, 0.006119f, 0.008797f, 0.011391f, 0.014854f, 0.018890f,
- 0.023666f, 0.029083f, 0.036011f, 0.044434f, 0.053986f, 0.066589f, 0.081543f, 0.100159f,
- 0.122314f, 0.149536f, 0.183350f, 0.222900f, 0.269043f, 0.321533f, 0.378418f, 0.438477f,
- 0.499023f, 0.556641f, 0.611328f, 0.661133f, 0.703613f, 0.742188f, 0.775391f, 0.804199f,
- 0.828613f, 0.849121f, 0.866211f, 0.881348f, 0.894043f, 0.905762f, 0.916016f, 0.924316f,
- 0.931641f, 0.938477f, 0.944336f, 0.949707f, 0.954590f, 0.958496f, 0.962402f, 0.966309f,
- 0.969238f, 0.972168f, 0.974121f, 0.977051f, 0.979004f, 0.980957f, 0.982910f, 0.984863f,
- 0.985840f, 0.987793f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.000606f, 0.001948f, 0.003483f, 0.005394f, 0.007290f, 0.009735f, 0.012352f, 0.015747f,
- 0.019485f, 0.023788f, 0.029358f, 0.035706f, 0.043732f, 0.053162f, 0.064331f, 0.077942f,
- 0.094971f, 0.116089f, 0.140991f, 0.172485f, 0.209473f, 0.252686f, 0.302002f, 0.356934f,
- 0.415283f, 0.475830f, 0.534180f, 0.589844f, 0.641602f, 0.687500f, 0.728516f, 0.763184f,
- 0.792969f, 0.819336f, 0.841309f, 0.860840f, 0.876953f, 0.890625f, 0.902344f, 0.913086f,
- 0.921875f, 0.930176f, 0.937012f, 0.943359f, 0.948242f, 0.954102f, 0.958008f, 0.961914f,
- 0.965820f, 0.969238f, 0.971680f, 0.974609f, 0.977051f, 0.979004f, 0.981445f, 0.983398f,
- 0.984863f, 0.986816f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
- 0.000672f, 0.001569f, 0.002895f, 0.004528f, 0.006180f, 0.008324f, 0.010864f, 0.013161f,
- 0.016357f, 0.020096f, 0.024216f, 0.029327f, 0.035583f, 0.042664f, 0.051453f, 0.062073f,
- 0.075012f, 0.091125f, 0.110291f, 0.134155f, 0.162476f, 0.197266f, 0.238037f, 0.285156f,
- 0.337646f, 0.395020f, 0.454590f, 0.513672f, 0.570312f, 0.624023f, 0.672363f, 0.714844f,
- 0.750977f, 0.783691f, 0.811035f, 0.834473f, 0.854004f, 0.872070f, 0.886230f, 0.899414f,
- 0.911133f, 0.918945f, 0.928223f, 0.936035f, 0.942871f, 0.948242f, 0.953613f, 0.957031f,
- 0.961426f, 0.965820f, 0.968750f, 0.972168f, 0.974121f, 0.976562f, 0.979492f, 0.981445f,
- 0.983398f, 0.985352f, 0.994141f, 0.994629f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
- 0.000413f, 0.001430f, 0.002577f, 0.004269f, 0.005703f, 0.007137f, 0.008888f, 0.011124f,
- 0.013885f, 0.016891f, 0.020355f, 0.024384f, 0.029221f, 0.035217f, 0.041748f, 0.049988f,
- 0.060059f, 0.072083f, 0.086914f, 0.105286f, 0.126953f, 0.154175f, 0.186523f, 0.224731f,
- 0.269287f, 0.320557f, 0.375732f, 0.434570f, 0.493896f, 0.552246f, 0.606934f, 0.655762f,
- 0.701660f, 0.740723f, 0.774902f, 0.803711f, 0.827637f, 0.848633f, 0.867188f, 0.882812f,
- 0.895996f, 0.908203f, 0.917969f, 0.926758f, 0.934570f, 0.941895f, 0.947266f, 0.952637f,
- 0.957520f, 0.960938f, 0.965820f, 0.968750f, 0.971680f, 0.974609f, 0.977051f, 0.979980f,
- 0.981934f, 0.983887f, 0.993652f, 0.994629f, 0.994141f, 0.994141f, 0.994141f, 0.994141f,
- 0.000240f, 0.001406f, 0.002373f, 0.003283f, 0.004620f, 0.006264f, 0.007744f, 0.009552f,
- 0.011711f, 0.014069f, 0.017273f, 0.020584f, 0.024429f, 0.028946f, 0.034393f, 0.041046f,
- 0.048798f, 0.058289f, 0.070312f, 0.083618f, 0.100403f, 0.121338f, 0.146118f, 0.177002f,
- 0.213257f, 0.255371f, 0.304443f, 0.358887f, 0.416504f, 0.476562f, 0.534668f, 0.590332f,
- 0.642090f, 0.688965f, 0.729492f, 0.766113f, 0.796387f, 0.822754f, 0.844727f, 0.862305f,
- 0.880371f, 0.894043f, 0.905762f, 0.916992f, 0.926270f, 0.934082f, 0.940918f, 0.946777f,
- 0.953125f, 0.956543f, 0.961426f, 0.964844f, 0.969238f, 0.972656f, 0.974609f, 0.977539f,
- 0.979980f, 0.982422f, 0.992676f, 0.994141f, 0.993652f, 0.993652f, 0.993652f, 0.993652f,
- 0.000242f, 0.001257f, 0.001991f, 0.003138f, 0.004299f, 0.005302f, 0.006584f, 0.008308f,
- 0.010048f, 0.012283f, 0.014526f, 0.017578f, 0.020340f, 0.023972f, 0.028671f, 0.033661f,
- 0.040161f, 0.047821f, 0.056213f, 0.067261f, 0.080444f, 0.096191f, 0.115784f, 0.139771f,
- 0.168457f, 0.203125f, 0.243286f, 0.290527f, 0.343506f, 0.400879f, 0.459473f, 0.519043f,
- 0.576172f, 0.629395f, 0.678223f, 0.721191f, 0.757324f, 0.789062f, 0.816895f, 0.839844f,
- 0.859863f, 0.877930f, 0.892578f, 0.904297f, 0.915527f, 0.925293f, 0.933105f, 0.940430f,
- 0.946777f, 0.952148f, 0.957031f, 0.961914f, 0.965820f, 0.969238f, 0.973145f, 0.975586f,
- 0.978516f, 0.980469f, 0.992188f, 0.993652f, 0.993164f, 0.993164f, 0.993652f, 0.993164f,
- 0.000434f, 0.001172f, 0.001865f, 0.002825f, 0.003633f, 0.004757f, 0.005722f, 0.007175f,
- 0.009010f, 0.010651f, 0.012520f, 0.014412f, 0.017532f, 0.020599f, 0.024139f, 0.028488f,
- 0.033356f, 0.039001f, 0.046295f, 0.054749f, 0.064758f, 0.077209f, 0.092834f, 0.111084f,
- 0.134033f, 0.160767f, 0.193604f, 0.233032f, 0.278320f, 0.329590f, 0.386230f, 0.445068f,
- 0.504395f, 0.563477f, 0.617188f, 0.666504f, 0.711426f, 0.750000f, 0.783691f, 0.812500f,
- 0.836426f, 0.857422f, 0.875488f, 0.891113f, 0.903809f, 0.915039f, 0.924805f, 0.933105f,
- 0.940430f, 0.947266f, 0.953125f, 0.958496f, 0.962402f, 0.966309f, 0.969727f, 0.973145f,
- 0.976562f, 0.978516f, 0.991699f, 0.992188f, 0.992676f, 0.993164f, 0.993164f, 0.992676f,
- 0.000358f, 0.000835f, 0.001738f, 0.002270f, 0.002996f, 0.004078f, 0.005157f, 0.006416f,
- 0.007904f, 0.009331f, 0.010826f, 0.012245f, 0.014938f, 0.017303f, 0.020233f, 0.023926f,
- 0.027954f, 0.032715f, 0.038147f, 0.045166f, 0.053070f, 0.062561f, 0.074768f, 0.089661f,
- 0.106689f, 0.128052f, 0.154175f, 0.185547f, 0.223022f, 0.266846f, 0.317383f, 0.373047f,
- 0.431152f, 0.491943f, 0.550293f, 0.606445f, 0.658203f, 0.704102f, 0.744141f, 0.779297f,
- 0.809082f, 0.833984f, 0.855957f, 0.875000f, 0.889648f, 0.903320f, 0.915039f, 0.924805f,
- 0.933594f, 0.940918f, 0.947754f, 0.954102f, 0.958984f, 0.962402f, 0.966797f, 0.970703f,
- 0.974121f, 0.977539f, 0.990723f, 0.992188f, 0.992676f, 0.992676f, 0.992188f, 0.992676f,
- 0.000428f, 0.000789f, 0.001460f, 0.002172f, 0.002695f, 0.003561f, 0.004608f, 0.005848f,
- 0.006886f, 0.007736f, 0.009560f, 0.011078f, 0.012817f, 0.015015f, 0.017563f, 0.020157f,
- 0.023666f, 0.027145f, 0.031891f, 0.037384f, 0.044189f, 0.051788f, 0.061188f, 0.072327f,
- 0.085999f, 0.102966f, 0.123413f, 0.148071f, 0.178101f, 0.214478f, 0.256836f, 0.306396f,
- 0.360840f, 0.419678f, 0.479736f, 0.540527f, 0.597656f, 0.649902f, 0.697754f, 0.738770f,
- 0.775391f, 0.805664f, 0.831543f, 0.854004f, 0.873535f, 0.889160f, 0.902832f, 0.915039f,
- 0.925293f, 0.934082f, 0.941895f, 0.948730f, 0.954102f, 0.959961f, 0.963867f, 0.968262f,
- 0.971680f, 0.975586f, 0.990723f, 0.991699f, 0.991699f, 0.991699f, 0.991699f, 0.991211f,
- 0.000237f, 0.000782f, 0.001245f, 0.001923f, 0.002417f, 0.003225f, 0.004101f, 0.005062f,
- 0.005920f, 0.007030f, 0.008102f, 0.009743f, 0.011009f, 0.013054f, 0.015190f, 0.017380f,
- 0.020126f, 0.023346f, 0.027161f, 0.031464f, 0.036316f, 0.042664f, 0.050110f, 0.058807f,
- 0.069946f, 0.083191f, 0.099121f, 0.118835f, 0.142822f, 0.171997f, 0.206665f, 0.248413f,
- 0.296143f, 0.350586f, 0.408936f, 0.469727f, 0.530762f, 0.589844f, 0.643555f, 0.691895f,
- 0.734375f, 0.772461f, 0.803223f, 0.830566f, 0.854492f, 0.873047f, 0.889648f, 0.903809f,
- 0.916016f, 0.926270f, 0.935059f, 0.943359f, 0.949219f, 0.955566f, 0.960938f, 0.965332f,
- 0.969727f, 0.973145f, 0.989746f, 0.990723f, 0.990723f, 0.990723f, 0.991211f, 0.990723f,
- 0.000243f, 0.000793f, 0.001210f, 0.001616f, 0.002260f, 0.003069f, 0.003649f, 0.004444f,
- 0.005322f, 0.006088f, 0.006954f, 0.008278f, 0.009766f, 0.011139f, 0.012970f, 0.014908f,
- 0.016968f, 0.019897f, 0.023193f, 0.026962f, 0.030792f, 0.035522f, 0.041931f, 0.048920f,
- 0.057404f, 0.067993f, 0.080383f, 0.095825f, 0.114929f, 0.137695f, 0.165771f, 0.199585f,
- 0.241089f, 0.287842f, 0.341553f, 0.400391f, 0.462402f, 0.523438f, 0.583008f, 0.638184f,
- 0.687988f, 0.732422f, 0.770020f, 0.802246f, 0.830566f, 0.854004f, 0.873047f, 0.891113f,
- 0.904785f, 0.916992f, 0.926758f, 0.936523f, 0.943848f, 0.951172f, 0.956543f, 0.961914f,
- 0.966797f, 0.971191f, 0.989258f, 0.990234f, 0.990234f, 0.990234f, 0.990234f, 0.989746f,
- 0.000000f, 0.000484f, 0.000973f, 0.001453f, 0.001999f, 0.002689f, 0.003359f, 0.003864f,
- 0.004726f, 0.005444f, 0.006516f, 0.007404f, 0.008461f, 0.009720f, 0.011261f, 0.012985f,
- 0.014908f, 0.017120f, 0.019699f, 0.022614f, 0.026093f, 0.030228f, 0.034668f, 0.040619f,
- 0.047699f, 0.055756f, 0.066284f, 0.078308f, 0.092834f, 0.111328f, 0.133423f, 0.160889f,
- 0.194214f, 0.233765f, 0.281006f, 0.334473f, 0.392822f, 0.455078f, 0.517090f, 0.578125f,
- 0.634766f, 0.686035f, 0.730957f, 0.768555f, 0.803223f, 0.831055f, 0.854492f, 0.875488f,
- 0.892090f, 0.906250f, 0.918457f, 0.929688f, 0.937988f, 0.945801f, 0.952148f, 0.958496f,
- 0.963867f, 0.968750f, 0.988281f, 0.989258f, 0.989746f, 0.989258f, 0.989746f, 0.989258f,
- 0.000241f, 0.000699f, 0.000835f, 0.001354f, 0.002066f, 0.002405f, 0.003073f, 0.003466f,
- 0.003847f, 0.004868f, 0.005798f, 0.006325f, 0.007446f, 0.008553f, 0.009789f, 0.011375f,
- 0.013031f, 0.014702f, 0.016937f, 0.019455f, 0.022171f, 0.025467f, 0.029541f, 0.034271f,
- 0.039734f, 0.046295f, 0.054291f, 0.063904f, 0.075745f, 0.089966f, 0.107727f, 0.129395f,
- 0.156250f, 0.188965f, 0.228394f, 0.274658f, 0.327637f, 0.386963f, 0.449219f, 0.512695f,
- 0.574707f, 0.632324f, 0.684570f, 0.730469f, 0.770508f, 0.804688f, 0.832520f, 0.857422f,
- 0.876953f, 0.893066f, 0.908691f, 0.920410f, 0.931152f, 0.940430f, 0.947754f, 0.954590f,
- 0.960938f, 0.965820f, 0.986816f, 0.988770f, 0.988770f, 0.988770f, 0.988770f, 0.988770f,
- 0.000122f, 0.000480f, 0.000793f, 0.001184f, 0.001847f, 0.002220f, 0.002459f, 0.003109f,
- 0.003740f, 0.004234f, 0.005127f, 0.005730f, 0.006557f, 0.007458f, 0.008469f, 0.009911f,
- 0.011162f, 0.012848f, 0.014519f, 0.016693f, 0.019135f, 0.021820f, 0.025024f, 0.028931f,
- 0.033508f, 0.038757f, 0.045135f, 0.052856f, 0.062042f, 0.073547f, 0.087646f, 0.104736f,
- 0.126099f, 0.152588f, 0.184570f, 0.223511f, 0.269775f, 0.323242f, 0.382324f, 0.445801f,
- 0.510254f, 0.573242f, 0.631348f, 0.685059f, 0.731934f, 0.772461f, 0.806641f, 0.834961f,
- 0.859375f, 0.879883f, 0.897461f, 0.911133f, 0.923828f, 0.933594f, 0.942383f, 0.950195f,
- 0.956055f, 0.962402f, 0.985840f, 0.987305f, 0.987793f, 0.987793f, 0.988281f, 0.987793f,
- 0.000244f, 0.000471f, 0.000666f, 0.001267f, 0.001592f, 0.001838f, 0.002251f, 0.002855f,
- 0.003225f, 0.003828f, 0.004372f, 0.005112f, 0.005695f, 0.006340f, 0.007534f, 0.008797f,
- 0.009895f, 0.011215f, 0.012604f, 0.014503f, 0.016602f, 0.018738f, 0.021408f, 0.024567f,
- 0.028305f, 0.032654f, 0.037872f, 0.043732f, 0.051239f, 0.060669f, 0.071716f, 0.085510f,
- 0.102356f, 0.123230f, 0.149170f, 0.180664f, 0.219849f, 0.265869f, 0.319092f, 0.379150f,
- 0.443604f, 0.508789f, 0.572754f, 0.633301f, 0.686523f, 0.734863f, 0.775391f, 0.809570f,
- 0.838379f, 0.862305f, 0.883301f, 0.900391f, 0.914551f, 0.926270f, 0.937012f, 0.944824f,
- 0.953125f, 0.959473f, 0.985352f, 0.986816f, 0.986816f, 0.986816f, 0.986816f, 0.986816f,
- 0.000242f, 0.000346f, 0.000827f, 0.001065f, 0.001428f, 0.001572f, 0.001984f, 0.002367f,
- 0.002851f, 0.003277f, 0.003786f, 0.004501f, 0.005253f, 0.005955f, 0.006573f, 0.007736f,
- 0.008659f, 0.009880f, 0.011177f, 0.012459f, 0.014153f, 0.016403f, 0.018173f, 0.020859f,
- 0.024017f, 0.027496f, 0.031708f, 0.036682f, 0.042877f, 0.050446f, 0.059174f, 0.070068f,
- 0.083374f, 0.100159f, 0.120728f, 0.145874f, 0.177612f, 0.216187f, 0.262695f, 0.316650f,
- 0.377686f, 0.443115f, 0.509766f, 0.575195f, 0.635742f, 0.691406f, 0.738281f, 0.779785f,
- 0.813965f, 0.843750f, 0.866699f, 0.887207f, 0.904297f, 0.918945f, 0.930176f, 0.940918f,
- 0.948730f, 0.956055f, 0.984375f, 0.985840f, 0.985840f, 0.985840f, 0.986328f, 0.985840f,
- 0.000242f, 0.000540f, 0.000708f, 0.000830f, 0.001143f, 0.001451f, 0.001861f, 0.002249f,
- 0.002661f, 0.003010f, 0.003435f, 0.003922f, 0.004707f, 0.005165f, 0.005787f, 0.006840f,
- 0.007374f, 0.008545f, 0.009651f, 0.011147f, 0.012581f, 0.014084f, 0.015991f, 0.017899f,
- 0.020325f, 0.023392f, 0.026978f, 0.031113f, 0.035919f, 0.042023f, 0.049103f, 0.057831f,
- 0.068420f, 0.081543f, 0.098145f, 0.118530f, 0.143921f, 0.175293f, 0.213989f, 0.260742f,
- 0.316162f, 0.377441f, 0.444336f, 0.512207f, 0.579590f, 0.641113f, 0.696289f, 0.744629f,
- 0.786621f, 0.820801f, 0.849609f, 0.872559f, 0.892578f, 0.908691f, 0.922363f, 0.934570f,
- 0.944336f, 0.951660f, 0.982910f, 0.984375f, 0.984863f, 0.984863f, 0.985352f, 0.984863f,
- 0.000106f, 0.000477f, 0.000649f, 0.000901f, 0.001110f, 0.001206f, 0.001630f, 0.002121f,
- 0.002192f, 0.002743f, 0.003128f, 0.003538f, 0.003941f, 0.004688f, 0.005276f, 0.005905f,
- 0.006546f, 0.007568f, 0.008461f, 0.009483f, 0.010674f, 0.011864f, 0.013649f, 0.015549f,
- 0.017731f, 0.020111f, 0.023010f, 0.026199f, 0.030304f, 0.035278f, 0.040833f, 0.047821f,
- 0.056580f, 0.066895f, 0.079895f, 0.096191f, 0.116760f, 0.141968f, 0.173584f, 0.212646f,
- 0.260498f, 0.316162f, 0.379883f, 0.447754f, 0.517578f, 0.584961f, 0.647949f, 0.704102f,
- 0.752930f, 0.792969f, 0.827148f, 0.855957f, 0.877930f, 0.898438f, 0.914062f, 0.928223f,
- 0.938965f, 0.948242f, 0.981445f, 0.983398f, 0.983887f, 0.983887f, 0.983887f, 0.983398f,
- 0.000208f, 0.000456f, 0.000582f, 0.000788f, 0.001016f, 0.001428f, 0.001507f, 0.001769f,
- 0.002203f, 0.002525f, 0.002718f, 0.003187f, 0.003761f, 0.004238f, 0.004635f, 0.005348f,
- 0.005901f, 0.006805f, 0.007500f, 0.008545f, 0.009270f, 0.010437f, 0.011742f, 0.013344f,
- 0.015198f, 0.017242f, 0.019516f, 0.022430f, 0.025665f, 0.029922f, 0.034180f, 0.040161f,
- 0.046936f, 0.055420f, 0.065735f, 0.078552f, 0.094666f, 0.114563f, 0.140503f, 0.172485f,
- 0.212646f, 0.260986f, 0.318359f, 0.383545f, 0.453125f, 0.524414f, 0.593750f, 0.656738f,
- 0.712891f, 0.761230f, 0.801270f, 0.835938f, 0.862305f, 0.885742f, 0.904785f, 0.919922f,
- 0.933594f, 0.943359f, 0.980469f, 0.982422f, 0.982422f, 0.981934f, 0.982422f, 0.982422f,
- 0.000170f, 0.000350f, 0.000583f, 0.000682f, 0.000845f, 0.001036f, 0.001265f, 0.001821f,
- 0.001953f, 0.002163f, 0.002525f, 0.002771f, 0.003418f, 0.003729f, 0.004040f, 0.004871f,
- 0.005188f, 0.005726f, 0.006512f, 0.007130f, 0.008087f, 0.009018f, 0.010216f, 0.011490f,
- 0.013084f, 0.014565f, 0.016891f, 0.019073f, 0.021851f, 0.025253f, 0.029022f, 0.033539f,
- 0.039124f, 0.045563f, 0.054230f, 0.064270f, 0.077271f, 0.093323f, 0.113403f, 0.139648f,
- 0.172485f, 0.213379f, 0.262939f, 0.322266f, 0.389404f, 0.461426f, 0.534180f, 0.604492f,
- 0.668457f, 0.724609f, 0.772461f, 0.812500f, 0.845703f, 0.872070f, 0.894043f, 0.911621f,
- 0.926758f, 0.938477f, 0.979004f, 0.980469f, 0.980957f, 0.980957f, 0.980957f, 0.980957f,
- 0.000000f, 0.000332f, 0.000583f, 0.000583f, 0.000848f, 0.000959f, 0.001125f, 0.001425f,
- 0.001810f, 0.001899f, 0.002300f, 0.002529f, 0.002996f, 0.003162f, 0.003607f, 0.004150f,
- 0.004761f, 0.005146f, 0.005791f, 0.006329f, 0.007099f, 0.008110f, 0.008949f, 0.009941f,
- 0.011253f, 0.012756f, 0.014565f, 0.016434f, 0.018707f, 0.021271f, 0.024475f, 0.028290f,
- 0.032745f, 0.037964f, 0.044769f, 0.052795f, 0.063416f, 0.076050f, 0.092102f, 0.113464f,
- 0.139526f, 0.172974f, 0.214600f, 0.266602f, 0.327637f, 0.397461f, 0.471191f, 0.546387f,
- 0.617188f, 0.682129f, 0.737793f, 0.784668f, 0.823730f, 0.854980f, 0.881348f, 0.902344f,
- 0.918945f, 0.933105f, 0.977539f, 0.979492f, 0.979492f, 0.979492f, 0.979492f, 0.979492f,
- 0.000000f, 0.000243f, 0.000553f, 0.000575f, 0.000591f, 0.000798f, 0.000991f, 0.001234f,
- 0.001419f, 0.001812f, 0.001935f, 0.002186f, 0.002518f, 0.002975f, 0.003202f, 0.003614f,
- 0.004047f, 0.004425f, 0.005013f, 0.005718f, 0.006172f, 0.007046f, 0.007740f, 0.008835f,
- 0.009819f, 0.011192f, 0.012444f, 0.014114f, 0.015884f, 0.018204f, 0.020844f, 0.023392f,
- 0.027420f, 0.031921f, 0.037170f, 0.043610f, 0.052032f, 0.062408f, 0.075256f, 0.091675f,
- 0.112610f, 0.140015f, 0.173950f, 0.217651f, 0.271973f, 0.335693f, 0.407715f, 0.484619f,
- 0.561035f, 0.633789f, 0.698242f, 0.752930f, 0.798828f, 0.836426f, 0.867676f, 0.891602f,
- 0.911621f, 0.926270f, 0.975098f, 0.977539f, 0.978516f, 0.977539f, 0.977539f, 0.978027f,
- 0.000121f, 0.000121f, 0.000241f, 0.000385f, 0.000684f, 0.000693f, 0.000932f, 0.001156f,
- 0.001410f, 0.001648f, 0.001893f, 0.002184f, 0.002367f, 0.002579f, 0.002872f, 0.003319f,
- 0.003653f, 0.003922f, 0.004425f, 0.004925f, 0.005436f, 0.006180f, 0.006836f, 0.007645f,
- 0.008278f, 0.009476f, 0.010788f, 0.012169f, 0.013695f, 0.015305f, 0.017319f, 0.020111f,
- 0.022858f, 0.026718f, 0.030975f, 0.036255f, 0.042938f, 0.051270f, 0.061493f, 0.074768f,
- 0.091187f, 0.112976f, 0.140747f, 0.176392f, 0.222168f, 0.278809f, 0.345703f, 0.421387f,
- 0.500488f, 0.578613f, 0.651855f, 0.715820f, 0.769531f, 0.813965f, 0.850586f, 0.878418f,
- 0.901855f, 0.920410f, 0.973633f, 0.975586f, 0.976074f, 0.976562f, 0.976562f, 0.975098f,
- 0.000240f, 0.000120f, 0.000281f, 0.000333f, 0.000498f, 0.000680f, 0.000684f, 0.001083f,
- 0.001312f, 0.001618f, 0.001606f, 0.001834f, 0.002087f, 0.002316f, 0.002735f, 0.002792f,
- 0.003084f, 0.003386f, 0.003944f, 0.004353f, 0.004761f, 0.005390f, 0.005997f, 0.006615f,
- 0.007389f, 0.008324f, 0.008987f, 0.010284f, 0.011703f, 0.013382f, 0.014717f, 0.016953f,
- 0.019424f, 0.022278f, 0.026047f, 0.030029f, 0.035492f, 0.042145f, 0.050446f, 0.060608f,
- 0.073975f, 0.091187f, 0.113831f, 0.142700f, 0.180176f, 0.228271f, 0.288086f, 0.359131f,
- 0.437988f, 0.519531f, 0.600098f, 0.673340f, 0.735352f, 0.787598f, 0.830566f, 0.865234f,
- 0.891602f, 0.913086f, 0.971680f, 0.974121f, 0.974121f, 0.974121f, 0.974121f, 0.974609f,
- 0.000000f, 0.000239f, 0.000236f, 0.000425f, 0.000487f, 0.000608f, 0.000850f, 0.001012f,
- 0.001140f, 0.001260f, 0.001410f, 0.001640f, 0.001953f, 0.002003f, 0.002342f, 0.002434f,
- 0.002686f, 0.002934f, 0.003305f, 0.003771f, 0.004169f, 0.004692f, 0.005028f, 0.005817f,
- 0.006371f, 0.007179f, 0.007919f, 0.008965f, 0.009857f, 0.011261f, 0.012703f, 0.014229f,
- 0.016312f, 0.018494f, 0.021744f, 0.025024f, 0.029633f, 0.034790f, 0.041199f, 0.049561f,
- 0.060242f, 0.073608f, 0.091675f, 0.114502f, 0.144897f, 0.185547f, 0.236328f, 0.300049f,
- 0.375732f, 0.458496f, 0.542969f, 0.624023f, 0.696289f, 0.758301f, 0.808105f, 0.847656f,
- 0.879395f, 0.903809f, 0.968750f, 0.971191f, 0.972168f, 0.971680f, 0.972168f, 0.971680f,
- 0.000000f, 0.000217f, 0.000235f, 0.000235f, 0.000321f, 0.000560f, 0.000588f, 0.000897f,
- 0.001034f, 0.001040f, 0.001246f, 0.001369f, 0.001611f, 0.001692f, 0.001942f, 0.002153f,
- 0.002337f, 0.002638f, 0.002878f, 0.003330f, 0.003672f, 0.003986f, 0.004498f, 0.004826f,
- 0.005535f, 0.006176f, 0.006561f, 0.007538f, 0.008362f, 0.009544f, 0.010612f, 0.011879f,
- 0.013794f, 0.015839f, 0.018326f, 0.020889f, 0.024567f, 0.028625f, 0.033783f, 0.040527f,
- 0.049133f, 0.059998f, 0.073608f, 0.092041f, 0.116394f, 0.148682f, 0.191528f, 0.246582f,
- 0.315186f, 0.395508f, 0.482910f, 0.570312f, 0.651367f, 0.722168f, 0.781738f, 0.828613f,
- 0.866211f, 0.895508f, 0.966797f, 0.968750f, 0.969238f, 0.969727f, 0.969238f, 0.969238f,
- 0.000000f, 0.000108f, 0.000215f, 0.000346f, 0.000352f, 0.000501f, 0.000783f, 0.000828f,
- 0.000954f, 0.000980f, 0.001130f, 0.001353f, 0.001429f, 0.001522f, 0.001690f, 0.001760f,
- 0.002172f, 0.002363f, 0.002522f, 0.002777f, 0.003202f, 0.003550f, 0.004040f, 0.004364f,
- 0.004734f, 0.005192f, 0.005909f, 0.006271f, 0.007015f, 0.007957f, 0.008774f, 0.010185f,
- 0.011681f, 0.013306f, 0.015327f, 0.017517f, 0.020264f, 0.023636f, 0.027740f, 0.033234f,
- 0.039856f, 0.048340f, 0.059387f, 0.074097f, 0.093567f, 0.118896f, 0.153931f, 0.200073f,
- 0.260254f, 0.334473f, 0.420410f, 0.511719f, 0.601562f, 0.682129f, 0.750488f, 0.807617f,
- 0.851074f, 0.884277f, 0.963867f, 0.966309f, 0.966797f, 0.966797f, 0.966797f, 0.966797f,
- 0.000000f, 0.000059f, 0.000292f, 0.000331f, 0.000344f, 0.000613f, 0.000532f, 0.000703f,
- 0.000853f, 0.000915f, 0.000936f, 0.001102f, 0.001284f, 0.001430f, 0.001417f, 0.001475f,
- 0.001791f, 0.001989f, 0.002161f, 0.002388f, 0.002775f, 0.003017f, 0.003357f, 0.003763f,
- 0.004124f, 0.004383f, 0.004917f, 0.005436f, 0.005840f, 0.006733f, 0.007511f, 0.008667f,
- 0.009567f, 0.011032f, 0.012474f, 0.014610f, 0.016739f, 0.019379f, 0.022873f, 0.027252f,
- 0.032410f, 0.039062f, 0.048065f, 0.059296f, 0.074646f, 0.094971f, 0.123108f, 0.161011f,
- 0.211426f, 0.277344f, 0.358154f, 0.450195f, 0.545410f, 0.636230f, 0.715332f, 0.781250f,
- 0.832520f, 0.872070f, 0.960449f, 0.962402f, 0.963867f, 0.963379f, 0.962891f, 0.963379f,
- 0.000000f, 0.000000f, 0.000098f, 0.000301f, 0.000315f, 0.000566f, 0.000587f, 0.000627f,
- 0.000643f, 0.000795f, 0.000974f, 0.001023f, 0.000987f, 0.001031f, 0.001245f, 0.001470f,
- 0.001637f, 0.001820f, 0.001884f, 0.002146f, 0.002357f, 0.002630f, 0.002913f, 0.003164f,
- 0.003380f, 0.003824f, 0.004189f, 0.004353f, 0.004940f, 0.005688f, 0.006409f, 0.007347f,
- 0.008018f, 0.009163f, 0.010559f, 0.012039f, 0.013695f, 0.016144f, 0.018723f, 0.022354f,
- 0.026337f, 0.031433f, 0.038818f, 0.047546f, 0.059662f, 0.075623f, 0.097473f, 0.127808f,
- 0.169556f, 0.225830f, 0.299072f, 0.387451f, 0.486084f, 0.583984f, 0.674805f, 0.751465f,
- 0.812012f, 0.859375f, 0.957031f, 0.958984f, 0.959473f, 0.959961f, 0.959961f, 0.959961f,
- 0.000000f, 0.000000f, 0.000004f, 0.000078f, 0.000408f, 0.000432f, 0.000563f, 0.000560f,
- 0.000566f, 0.000623f, 0.000782f, 0.000829f, 0.000896f, 0.000956f, 0.001056f, 0.001249f,
- 0.001414f, 0.001473f, 0.001646f, 0.001764f, 0.002066f, 0.002230f, 0.002436f, 0.002651f,
- 0.003012f, 0.003252f, 0.003414f, 0.004055f, 0.004143f, 0.004784f, 0.005356f, 0.006077f,
- 0.006870f, 0.007538f, 0.008728f, 0.009834f, 0.011322f, 0.013130f, 0.015427f, 0.017914f,
- 0.021271f, 0.025436f, 0.030960f, 0.038086f, 0.047485f, 0.060303f, 0.077087f, 0.101196f,
- 0.134521f, 0.180786f, 0.244507f, 0.326172f, 0.423584f, 0.527832f, 0.628418f, 0.716797f,
- 0.788086f, 0.843262f, 0.953125f, 0.955566f, 0.955566f, 0.956543f, 0.956055f, 0.956543f,
- 0.000000f, 0.000000f, 0.000000f, 0.000236f, 0.000320f, 0.000484f, 0.000521f, 0.000549f,
- 0.000556f, 0.000584f, 0.000574f, 0.000690f, 0.000758f, 0.000841f, 0.001003f, 0.001013f,
- 0.001169f, 0.001292f, 0.001437f, 0.001658f, 0.001830f, 0.002001f, 0.002081f, 0.002146f,
- 0.002434f, 0.002712f, 0.002964f, 0.003220f, 0.003513f, 0.003963f, 0.004410f, 0.004875f,
- 0.005608f, 0.006245f, 0.007179f, 0.008118f, 0.009201f, 0.010582f, 0.012360f, 0.014343f,
- 0.016968f, 0.020401f, 0.024628f, 0.030365f, 0.037567f, 0.047455f, 0.060913f, 0.079529f,
- 0.105774f, 0.143555f, 0.196167f, 0.268799f, 0.361084f, 0.467041f, 0.576172f, 0.676758f,
- 0.760254f, 0.825195f, 0.948242f, 0.951660f, 0.951660f, 0.951660f, 0.951660f, 0.951660f,
- 0.000000f, 0.000000f, 0.000000f, 0.000122f, 0.000257f, 0.000334f, 0.000390f, 0.000496f,
- 0.000520f, 0.000539f, 0.000590f, 0.000602f, 0.000646f, 0.000725f, 0.000909f, 0.000949f,
- 0.001023f, 0.001121f, 0.001181f, 0.001308f, 0.001474f, 0.001457f, 0.001714f, 0.002007f,
- 0.001929f, 0.002039f, 0.002468f, 0.002672f, 0.003025f, 0.003317f, 0.003635f, 0.004047f,
- 0.004433f, 0.004864f, 0.005756f, 0.006493f, 0.007515f, 0.008331f, 0.009697f, 0.011383f,
- 0.014000f, 0.016235f, 0.019653f, 0.024185f, 0.029465f, 0.037109f, 0.047699f, 0.062164f,
- 0.082642f, 0.112488f, 0.155151f, 0.216919f, 0.300049f, 0.404541f, 0.520020f, 0.631836f,
- 0.728516f, 0.805664f, 0.943848f, 0.946289f, 0.946777f, 0.946777f, 0.947266f, 0.947266f,
- 0.000000f, 0.000000f, 0.000122f, 0.000088f, 0.000219f, 0.000229f, 0.000355f, 0.000414f,
- 0.000482f, 0.000545f, 0.000559f, 0.000568f, 0.000481f, 0.000668f, 0.000636f, 0.000728f,
- 0.000924f, 0.000980f, 0.001017f, 0.001109f, 0.001258f, 0.001353f, 0.001451f, 0.001564f,
- 0.001621f, 0.001740f, 0.002066f, 0.002289f, 0.002459f, 0.002621f, 0.002975f, 0.003349f,
- 0.003588f, 0.003998f, 0.004723f, 0.005116f, 0.006035f, 0.006859f, 0.007957f, 0.009064f,
- 0.010658f, 0.012711f, 0.015511f, 0.018555f, 0.023026f, 0.028854f, 0.037140f, 0.048035f,
- 0.064026f, 0.086914f, 0.121033f, 0.171387f, 0.244141f, 0.341797f, 0.458740f, 0.580078f,
- 0.691895f, 0.780762f, 0.937988f, 0.940430f, 0.941406f, 0.940918f, 0.941895f, 0.941406f,
- 0.000000f, 0.000000f, 0.000000f, 0.000080f, 0.000211f, 0.000221f, 0.000225f, 0.000192f,
- 0.000352f, 0.000368f, 0.000397f, 0.000529f, 0.000510f, 0.000504f, 0.000540f, 0.000671f,
- 0.000694f, 0.000763f, 0.000902f, 0.000998f, 0.001063f, 0.001074f, 0.001128f, 0.001407f,
- 0.001370f, 0.001449f, 0.001682f, 0.001635f, 0.001976f, 0.002108f, 0.002335f, 0.002558f,
- 0.002905f, 0.003176f, 0.003637f, 0.003948f, 0.004650f, 0.005341f, 0.006237f, 0.007034f,
- 0.008415f, 0.009811f, 0.012032f, 0.014565f, 0.017731f, 0.022324f, 0.028427f, 0.036713f,
- 0.048859f, 0.066406f, 0.092957f, 0.133057f, 0.193848f, 0.281250f, 0.395508f, 0.524902f,
- 0.648926f, 0.754395f, 0.931152f, 0.934570f, 0.934570f, 0.934570f, 0.935547f, 0.935059f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000181f, 0.000196f, 0.000236f, 0.000250f,
- 0.000226f, 0.000281f, 0.000335f, 0.000457f, 0.000406f, 0.000511f, 0.000522f, 0.000593f,
- 0.000539f, 0.000663f, 0.000661f, 0.000779f, 0.000978f, 0.000855f, 0.000937f, 0.001128f,
- 0.001163f, 0.001253f, 0.001241f, 0.001531f, 0.001595f, 0.001796f, 0.001888f, 0.002226f,
- 0.002350f, 0.002609f, 0.002787f, 0.003260f, 0.003656f, 0.004303f, 0.004910f, 0.005577f,
- 0.006683f, 0.007603f, 0.009102f, 0.011017f, 0.013603f, 0.016968f, 0.021652f, 0.027939f,
- 0.037109f, 0.050262f, 0.070374f, 0.101624f, 0.150391f, 0.225220f, 0.331543f, 0.463867f,
- 0.601074f, 0.723145f, 0.923828f, 0.927246f, 0.927246f, 0.928223f, 0.927734f, 0.928223f,
- 0.000000f, 0.000000f, 0.000122f, 0.000121f, 0.000121f, 0.000174f, 0.000156f, 0.000204f,
- 0.000180f, 0.000221f, 0.000246f, 0.000346f, 0.000313f, 0.000426f, 0.000468f, 0.000482f,
- 0.000559f, 0.000582f, 0.000536f, 0.000611f, 0.000770f, 0.000666f, 0.000919f, 0.000947f,
- 0.001013f, 0.000948f, 0.001129f, 0.001169f, 0.001463f, 0.001579f, 0.001540f, 0.001555f,
- 0.001888f, 0.002007f, 0.002390f, 0.002623f, 0.002708f, 0.003235f, 0.003584f, 0.004223f,
- 0.005001f, 0.005791f, 0.006905f, 0.008118f, 0.010117f, 0.012512f, 0.015961f, 0.020798f,
- 0.027374f, 0.037628f, 0.052673f, 0.076172f, 0.114197f, 0.175659f, 0.270752f, 0.399658f,
- 0.546875f, 0.687012f, 0.915527f, 0.918457f, 0.919434f, 0.919434f, 0.919434f, 0.919434f,
- 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000121f, 0.000120f, 0.000139f, 0.000141f,
- 0.000152f, 0.000186f, 0.000209f, 0.000222f, 0.000297f, 0.000330f, 0.000367f, 0.000403f,
- 0.000433f, 0.000456f, 0.000457f, 0.000484f, 0.000521f, 0.000544f, 0.000594f, 0.000807f,
- 0.000790f, 0.000841f, 0.000784f, 0.001025f, 0.001112f, 0.001014f, 0.001146f, 0.001287f,
- 0.001485f, 0.001541f, 0.001740f, 0.002014f, 0.002264f, 0.002460f, 0.002825f, 0.003124f,
- 0.003683f, 0.004177f, 0.005024f, 0.006004f, 0.007454f, 0.009041f, 0.011833f, 0.014839f,
- 0.019791f, 0.027283f, 0.038361f, 0.055817f, 0.084656f, 0.133057f, 0.213013f, 0.334717f,
- 0.488770f, 0.645996f, 0.905762f, 0.909668f, 0.909668f, 0.909180f, 0.910645f, 0.908691f,
- 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000115f,
- 0.000104f, 0.000105f, 0.000203f, 0.000235f, 0.000185f, 0.000290f, 0.000201f, 0.000306f,
- 0.000259f, 0.000370f, 0.000401f, 0.000428f, 0.000596f, 0.000617f, 0.000474f, 0.000593f,
- 0.000641f, 0.000676f, 0.000682f, 0.000826f, 0.000897f, 0.000934f, 0.000972f, 0.000972f,
- 0.001213f, 0.001281f, 0.001410f, 0.001451f, 0.001562f, 0.001786f, 0.002031f, 0.002417f,
- 0.002764f, 0.003162f, 0.003763f, 0.004406f, 0.005310f, 0.006454f, 0.008156f, 0.010849f,
- 0.014305f, 0.019318f, 0.027328f, 0.039856f, 0.061310f, 0.097717f, 0.162354f, 0.270752f,
- 0.424805f, 0.599609f, 0.894043f, 0.897949f, 0.898438f, 0.898438f, 0.898926f, 0.898438f,
- 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000118f,
- 0.000112f, 0.000102f, 0.000094f, 0.000109f, 0.000131f, 0.000145f, 0.000232f, 0.000171f,
- 0.000278f, 0.000230f, 0.000347f, 0.000331f, 0.000379f, 0.000381f, 0.000512f, 0.000427f,
- 0.000541f, 0.000566f, 0.000547f, 0.000613f, 0.000706f, 0.000660f, 0.000809f, 0.000941f,
- 0.000950f, 0.001035f, 0.001069f, 0.001220f, 0.001149f, 0.001314f, 0.001603f, 0.001801f,
- 0.002062f, 0.002394f, 0.002737f, 0.003057f, 0.003771f, 0.004471f, 0.005875f, 0.007217f,
- 0.009651f, 0.013344f, 0.018829f, 0.027710f, 0.043091f, 0.069214f, 0.119141f, 0.210571f,
- 0.358398f, 0.544922f, 0.881348f, 0.883789f, 0.885254f, 0.885742f, 0.885254f, 0.885254f,
- 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000119f, 0.000118f, 0.000117f, 0.000116f,
- 0.000116f, 0.000110f, 0.000101f, 0.000094f, 0.000087f, 0.000157f, 0.000151f, 0.000168f,
- 0.000146f, 0.000219f, 0.000214f, 0.000261f, 0.000313f, 0.000363f, 0.000311f, 0.000415f,
- 0.000476f, 0.000448f, 0.000429f, 0.000460f, 0.000481f, 0.000560f, 0.000544f, 0.000695f,
- 0.000626f, 0.000789f, 0.000877f, 0.000894f, 0.000948f, 0.001177f, 0.001175f, 0.001366f,
- 0.001487f, 0.001738f, 0.002008f, 0.002304f, 0.002663f, 0.003250f, 0.004002f, 0.004932f,
- 0.006416f, 0.008636f, 0.012344f, 0.018127f, 0.028610f, 0.047150f, 0.083923f, 0.156860f,
- 0.291260f, 0.487305f, 0.866211f, 0.869141f, 0.870605f, 0.870117f, 0.871094f, 0.870117f,
- 0.000000f, 0.000000f, 0.000119f, 0.000118f, 0.000117f, 0.000116f, 0.000115f, 0.000115f,
- 0.000114f, 0.000114f, 0.000109f, 0.000101f, 0.000094f, 0.000087f, 0.000081f, 0.000085f,
- 0.000129f, 0.000150f, 0.000176f, 0.000193f, 0.000216f, 0.000257f, 0.000241f, 0.000302f,
- 0.000259f, 0.000299f, 0.000397f, 0.000403f, 0.000384f, 0.000402f, 0.000425f, 0.000582f,
- 0.000467f, 0.000614f, 0.000660f, 0.000625f, 0.000650f, 0.000819f, 0.000790f, 0.000879f,
- 0.001001f, 0.001140f, 0.001403f, 0.001555f, 0.001844f, 0.002213f, 0.002636f, 0.003235f,
- 0.004082f, 0.005604f, 0.007896f, 0.011292f, 0.018005f, 0.030472f, 0.055786f, 0.109985f,
- 0.224976f, 0.421875f, 0.848145f, 0.852539f, 0.853027f, 0.852539f, 0.852539f, 0.853027f,
- 0.000000f, 0.000119f, 0.000118f, 0.000116f, 0.000115f, 0.000114f, 0.000113f, 0.000112f,
- 0.000111f, 0.000111f, 0.000110f, 0.000108f, 0.000101f, 0.000094f, 0.000088f, 0.000082f,
- 0.000077f, 0.000109f, 0.000068f, 0.000102f, 0.000127f, 0.000158f, 0.000177f, 0.000192f,
- 0.000207f, 0.000214f, 0.000249f, 0.000278f, 0.000296f, 0.000320f, 0.000330f, 0.000342f,
- 0.000415f, 0.000371f, 0.000389f, 0.000508f, 0.000463f, 0.000586f, 0.000606f, 0.000649f,
- 0.000724f, 0.000841f, 0.000910f, 0.001065f, 0.001236f, 0.001475f, 0.001807f, 0.002138f,
- 0.002716f, 0.003622f, 0.004921f, 0.006950f, 0.010574f, 0.018433f, 0.034607f, 0.072449f,
- 0.163818f, 0.352295f, 0.827637f, 0.831055f, 0.831543f, 0.832031f, 0.833008f, 0.832520f,
- 0.000120f, 0.000116f, 0.000114f, 0.000113f, 0.000111f, 0.000110f, 0.000109f, 0.000108f,
- 0.000107f, 0.000106f, 0.000106f, 0.000105f, 0.000104f, 0.000101f, 0.000094f, 0.000088f,
- 0.000083f, 0.000078f, 0.000073f, 0.000092f, 0.000064f, 0.000097f, 0.000073f, 0.000105f,
- 0.000125f, 0.000162f, 0.000179f, 0.000177f, 0.000191f, 0.000221f, 0.000241f, 0.000235f,
- 0.000270f, 0.000277f, 0.000287f, 0.000329f, 0.000319f, 0.000428f, 0.000417f, 0.000409f,
- 0.000524f, 0.000537f, 0.000612f, 0.000750f, 0.000770f, 0.000961f, 0.001153f, 0.001347f,
- 0.001702f, 0.002081f, 0.002903f, 0.003956f, 0.006184f, 0.010368f, 0.019592f, 0.043427f,
- 0.109924f, 0.280518f, 0.803223f, 0.806152f, 0.807617f, 0.808594f, 0.809082f, 0.808105f,
- 0.000000f, 0.000111f, 0.000106f, 0.000107f, 0.000104f, 0.000103f, 0.000101f, 0.000101f,
- 0.000101f, 0.000100f, 0.000099f, 0.000098f, 0.000097f, 0.000097f, 0.000097f, 0.000094f,
- 0.000088f, 0.000083f, 0.000078f, 0.000073f, 0.000069f, 0.000070f, 0.000061f, 0.000068f,
- 0.000059f, 0.000067f, 0.000084f, 0.000097f, 0.000128f, 0.000137f, 0.000165f, 0.000160f,
- 0.000176f, 0.000185f, 0.000217f, 0.000239f, 0.000237f, 0.000238f, 0.000272f, 0.000281f,
- 0.000314f, 0.000372f, 0.000395f, 0.000430f, 0.000504f, 0.000578f, 0.000665f, 0.000856f,
- 0.000969f, 0.001210f, 0.001594f, 0.002216f, 0.003370f, 0.005527f, 0.010170f, 0.023239f,
- 0.066101f, 0.207275f, 0.775391f, 0.779785f, 0.780273f, 0.780762f, 0.780273f, 0.780762f,
- 0.000000f, 0.000094f, 0.000097f, 0.000095f, 0.000092f, 0.000091f, 0.000091f, 0.000090f,
- 0.000089f, 0.000089f, 0.000088f, 0.000088f, 0.000087f, 0.000086f, 0.000087f, 0.000086f,
- 0.000086f, 0.000085f, 0.000081f, 0.000076f, 0.000072f, 0.000068f, 0.000064f, 0.000060f,
- 0.000057f, 0.000054f, 0.000058f, 0.000048f, 0.000048f, 0.000069f, 0.000068f, 0.000092f,
- 0.000110f, 0.000122f, 0.000133f, 0.000136f, 0.000146f, 0.000154f, 0.000175f, 0.000194f,
- 0.000204f, 0.000206f, 0.000238f, 0.000262f, 0.000266f, 0.000338f, 0.000361f, 0.000432f,
- 0.000527f, 0.000659f, 0.000848f, 0.001183f, 0.001713f, 0.002661f, 0.004921f, 0.010887f,
- 0.033936f, 0.138428f, 0.743652f, 0.747559f, 0.748047f, 0.748535f, 0.749512f, 0.749023f,
- 0.000045f, 0.000047f, 0.000059f, 0.000059f, 0.000063f, 0.000068f, 0.000068f, 0.000068f,
- 0.000067f, 0.000069f, 0.000068f, 0.000070f, 0.000070f, 0.000070f, 0.000071f, 0.000070f,
- 0.000071f, 0.000071f, 0.000071f, 0.000071f, 0.000071f, 0.000069f, 0.000065f, 0.000062f,
- 0.000058f, 0.000055f, 0.000052f, 0.000049f, 0.000046f, 0.000044f, 0.000041f, 0.000050f,
- 0.000051f, 0.000048f, 0.000061f, 0.000070f, 0.000084f, 0.000095f, 0.000107f, 0.000104f,
- 0.000111f, 0.000128f, 0.000143f, 0.000154f, 0.000157f, 0.000186f, 0.000198f, 0.000216f,
- 0.000268f, 0.000315f, 0.000414f, 0.000537f, 0.000735f, 0.001149f, 0.002075f, 0.004669f,
- 0.014175f, 0.077881f, 0.707031f, 0.710449f, 0.712402f, 0.711914f, 0.712891f, 0.712402f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000012f, 0.000013f, 0.000029f,
- 0.000028f, 0.000037f, 0.000035f, 0.000039f, 0.000043f, 0.000043f, 0.000045f, 0.000045f,
- 0.000048f, 0.000048f, 0.000050f, 0.000051f, 0.000052f, 0.000052f, 0.000053f, 0.000054f,
- 0.000054f, 0.000053f, 0.000050f, 0.000048f, 0.000045f, 0.000043f, 0.000040f, 0.000038f,
- 0.000036f, 0.000034f, 0.000032f, 0.000030f, 0.000028f, 0.000030f, 0.000038f, 0.000043f,
- 0.000057f, 0.000069f, 0.000072f, 0.000073f, 0.000082f, 0.000095f, 0.000101f, 0.000099f,
- 0.000116f, 0.000130f, 0.000184f, 0.000211f, 0.000301f, 0.000443f, 0.000737f, 0.001601f,
- 0.004978f, 0.032593f, 0.666504f, 0.669922f, 0.669922f, 0.672363f, 0.670898f, 0.670410f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f,
- 0.000012f, 0.000015f, 0.000018f, 0.000021f, 0.000022f, 0.000023f, 0.000025f, 0.000028f,
- 0.000029f, 0.000029f, 0.000031f, 0.000033f, 0.000033f, 0.000035f, 0.000035f, 0.000035f,
- 0.000033f, 0.000031f, 0.000029f, 0.000028f, 0.000026f, 0.000024f, 0.000023f, 0.000021f,
- 0.000020f, 0.000019f, 0.000022f, 0.000022f, 0.000030f, 0.000038f, 0.000042f, 0.000041f,
- 0.000052f, 0.000047f, 0.000064f, 0.000072f, 0.000078f, 0.000129f, 0.000201f, 0.000382f,
- 0.001180f, 0.009117f, 0.620605f, 0.624512f, 0.625000f, 0.625000f, 0.625000f, 0.625488f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000003f, 0.000005f, 0.000007f, 0.000008f,
- 0.000010f, 0.000011f, 0.000012f, 0.000014f, 0.000016f, 0.000016f, 0.000018f, 0.000017f,
- 0.000016f, 0.000015f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000010f, 0.000009f,
- 0.000011f, 0.000014f, 0.000018f, 0.000018f, 0.000021f, 0.000028f, 0.000035f, 0.000053f,
- 0.000136f, 0.001152f, 0.571777f, 0.575684f, 0.575684f, 0.576172f, 0.576660f, 0.576660f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
- 0.000002f, 0.000004f, 0.000004f, 0.000004f, 0.000003f, 0.000003f, 0.000002f, 0.000004f,
- 0.000003f, 0.000011f, 0.520020f, 0.523926f, 0.524902f, 0.524902f, 0.524902f, 0.524902f,
- },
- {
- 0.119934f, 0.328857f, 0.480713f, 0.586914f, 0.663086f, 0.717773f, 0.759766f, 0.791504f,
- 0.818359f, 0.838867f, 0.856934f, 0.871094f, 0.883301f, 0.894043f, 0.902832f, 0.911621f,
- 0.917969f, 0.924805f, 0.930664f, 0.936035f, 0.939941f, 0.944824f, 0.948242f, 0.951660f,
- 0.954590f, 0.958008f, 0.961426f, 0.962891f, 0.966309f, 0.967285f, 0.970215f, 0.972656f,
- 0.973633f, 0.975586f, 0.977539f, 0.978516f, 0.979980f, 0.981445f, 0.982910f, 0.984375f,
- 0.985352f, 0.986328f, 0.987793f, 0.988770f, 0.989746f, 0.990234f, 0.991699f, 0.992676f,
- 0.993164f, 0.993652f, 0.994629f, 0.995117f, 0.996094f, 0.996582f, 0.997559f, 0.998047f,
- 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.999023f, 0.998535f, 0.998535f, 0.998047f,
- 0.046875f, 0.160400f, 0.286621f, 0.405518f, 0.507812f, 0.590820f, 0.656250f, 0.708008f,
- 0.748535f, 0.781250f, 0.809082f, 0.830566f, 0.848633f, 0.864258f, 0.877441f, 0.888672f,
- 0.898926f, 0.906738f, 0.915039f, 0.921387f, 0.928223f, 0.933105f, 0.937988f, 0.942871f,
- 0.946777f, 0.950684f, 0.954102f, 0.957031f, 0.959961f, 0.962402f, 0.965332f, 0.966797f,
- 0.969727f, 0.971191f, 0.973145f, 0.975098f, 0.977539f, 0.978027f, 0.980469f, 0.981934f,
- 0.982910f, 0.984375f, 0.985352f, 0.986816f, 0.987793f, 0.988770f, 0.989258f, 0.990723f,
- 0.991699f, 0.992676f, 0.993164f, 0.993652f, 0.994629f, 0.995605f, 0.996582f, 0.996582f,
- 0.997559f, 0.998047f, 0.999023f, 0.999023f, 0.999023f, 0.998535f, 0.998535f, 0.998047f,
- 0.023788f, 0.084473f, 0.163696f, 0.255615f, 0.351807f, 0.445312f, 0.527832f, 0.597656f,
- 0.656738f, 0.703613f, 0.742676f, 0.775879f, 0.802734f, 0.824707f, 0.843262f, 0.858887f,
- 0.873047f, 0.884766f, 0.895508f, 0.903809f, 0.913086f, 0.919434f, 0.925781f, 0.931641f,
- 0.937012f, 0.941406f, 0.945801f, 0.949707f, 0.953125f, 0.956543f, 0.959473f, 0.962402f,
- 0.964844f, 0.967285f, 0.969238f, 0.972168f, 0.973633f, 0.975098f, 0.977539f, 0.979492f,
- 0.980469f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.986816f, 0.988281f, 0.988770f,
- 0.989746f, 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996094f,
- 0.996582f, 0.997559f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.997559f,
- 0.014595f, 0.050110f, 0.097717f, 0.158569f, 0.230347f, 0.311523f, 0.394531f, 0.473145f,
- 0.544922f, 0.606934f, 0.660645f, 0.705566f, 0.743164f, 0.775391f, 0.800781f, 0.822266f,
- 0.841309f, 0.856934f, 0.870605f, 0.883301f, 0.894043f, 0.902832f, 0.911133f, 0.918945f,
- 0.925293f, 0.931152f, 0.936035f, 0.941406f, 0.945801f, 0.949707f, 0.953125f, 0.956055f,
- 0.959473f, 0.962402f, 0.964844f, 0.967285f, 0.970215f, 0.972168f, 0.974121f, 0.975098f,
- 0.977539f, 0.979004f, 0.980957f, 0.981934f, 0.983398f, 0.984375f, 0.985840f, 0.987305f,
- 0.988281f, 0.989258f, 0.990723f, 0.991699f, 0.992676f, 0.993652f, 0.994629f, 0.995117f,
- 0.995605f, 0.996582f, 0.998535f, 0.998535f, 0.998535f, 0.998047f, 0.998047f, 0.997559f,
- 0.009178f, 0.032379f, 0.062561f, 0.102417f, 0.151611f, 0.210938f, 0.279785f, 0.352783f,
- 0.426758f, 0.496826f, 0.561035f, 0.618164f, 0.666992f, 0.708496f, 0.744141f, 0.773926f,
- 0.800781f, 0.821777f, 0.840820f, 0.856445f, 0.870117f, 0.882324f, 0.893066f, 0.901855f,
- 0.910645f, 0.918457f, 0.925293f, 0.930176f, 0.935547f, 0.941406f, 0.946289f, 0.949707f,
- 0.953125f, 0.956543f, 0.959961f, 0.962891f, 0.965332f, 0.967773f, 0.969727f, 0.972656f,
- 0.974121f, 0.976074f, 0.977539f, 0.979492f, 0.981445f, 0.982422f, 0.984375f, 0.985840f,
- 0.986328f, 0.987793f, 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994141f,
- 0.994629f, 0.995605f, 0.998047f, 0.998047f, 0.998047f, 0.997559f, 0.997559f, 0.997559f,
- 0.006382f, 0.022430f, 0.042908f, 0.068970f, 0.102844f, 0.144653f, 0.195557f, 0.253906f,
- 0.318848f, 0.386230f, 0.454590f, 0.518066f, 0.577148f, 0.628906f, 0.675293f, 0.714844f,
- 0.748535f, 0.777344f, 0.802246f, 0.823730f, 0.841797f, 0.856934f, 0.871094f, 0.882812f,
- 0.893555f, 0.902832f, 0.911133f, 0.918457f, 0.925293f, 0.930176f, 0.937012f, 0.940918f,
- 0.945801f, 0.950195f, 0.953613f, 0.957031f, 0.960449f, 0.963379f, 0.966309f, 0.968262f,
- 0.970703f, 0.973145f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.983398f,
- 0.984375f, 0.985840f, 0.988281f, 0.988770f, 0.989746f, 0.990723f, 0.991699f, 0.992676f,
- 0.993652f, 0.994629f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997559f, 0.997070f,
- 0.004585f, 0.015961f, 0.030930f, 0.049133f, 0.072144f, 0.101013f, 0.137451f, 0.181519f,
- 0.232544f, 0.290039f, 0.352539f, 0.416748f, 0.479736f, 0.538574f, 0.592773f, 0.641602f,
- 0.684570f, 0.723145f, 0.754395f, 0.782715f, 0.805176f, 0.825195f, 0.843750f, 0.859863f,
- 0.872559f, 0.884766f, 0.895020f, 0.904297f, 0.912109f, 0.919922f, 0.926270f, 0.932129f,
- 0.937500f, 0.942383f, 0.946289f, 0.950195f, 0.955078f, 0.958008f, 0.961426f, 0.964355f,
- 0.967285f, 0.969238f, 0.971680f, 0.974121f, 0.975586f, 0.977539f, 0.979492f, 0.980957f,
- 0.982910f, 0.984375f, 0.985840f, 0.986328f, 0.988281f, 0.989746f, 0.990723f, 0.992188f,
- 0.992676f, 0.993164f, 0.997559f, 0.997559f, 0.997070f, 0.997070f, 0.997070f, 0.997070f,
- 0.003483f, 0.012291f, 0.023209f, 0.036041f, 0.052429f, 0.073486f, 0.099182f, 0.131226f,
- 0.169678f, 0.214844f, 0.266846f, 0.323242f, 0.383545f, 0.444580f, 0.503418f, 0.559082f,
- 0.609375f, 0.655762f, 0.695312f, 0.730957f, 0.760254f, 0.788086f, 0.810059f, 0.829590f,
- 0.847168f, 0.862793f, 0.875488f, 0.886719f, 0.896973f, 0.906250f, 0.914551f, 0.921387f,
- 0.927734f, 0.933594f, 0.938965f, 0.944336f, 0.948242f, 0.952148f, 0.956543f, 0.958984f,
- 0.961914f, 0.965332f, 0.968262f, 0.970703f, 0.972656f, 0.974609f, 0.977051f, 0.979004f,
- 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.986328f, 0.987793f, 0.989746f, 0.990234f,
- 0.991699f, 0.992676f, 0.996582f, 0.997070f, 0.997070f, 0.996582f, 0.996582f, 0.996094f,
- 0.002962f, 0.009613f, 0.017792f, 0.027481f, 0.039429f, 0.055176f, 0.073914f, 0.096985f,
- 0.125610f, 0.159180f, 0.199707f, 0.246216f, 0.297607f, 0.353760f, 0.412842f, 0.470215f,
- 0.526367f, 0.578613f, 0.626953f, 0.669434f, 0.707031f, 0.740723f, 0.769043f, 0.794922f,
- 0.814941f, 0.835449f, 0.851074f, 0.866699f, 0.879395f, 0.890137f, 0.899902f, 0.909180f,
- 0.916992f, 0.924316f, 0.929688f, 0.936035f, 0.941406f, 0.945312f, 0.950195f, 0.953613f,
- 0.957520f, 0.960938f, 0.963867f, 0.966797f, 0.969238f, 0.971680f, 0.974121f, 0.976562f,
- 0.979004f, 0.979980f, 0.981934f, 0.982910f, 0.984375f, 0.986816f, 0.987793f, 0.988770f,
- 0.990234f, 0.991699f, 0.996582f, 0.996582f, 0.996582f, 0.996582f, 0.996094f, 0.996094f,
- 0.002077f, 0.007637f, 0.013802f, 0.021606f, 0.031006f, 0.042419f, 0.055969f, 0.073242f,
- 0.094055f, 0.119446f, 0.150513f, 0.186401f, 0.228638f, 0.276123f, 0.328857f, 0.384277f,
- 0.440674f, 0.496338f, 0.549805f, 0.598633f, 0.644043f, 0.683594f, 0.719727f, 0.750977f,
- 0.779297f, 0.802246f, 0.823730f, 0.840820f, 0.855957f, 0.871582f, 0.882324f, 0.893555f,
- 0.903809f, 0.911621f, 0.920410f, 0.926758f, 0.932617f, 0.938477f, 0.943359f, 0.947754f,
- 0.953125f, 0.955566f, 0.959473f, 0.962402f, 0.965332f, 0.968262f, 0.970703f, 0.972656f,
- 0.976074f, 0.977051f, 0.979492f, 0.981445f, 0.983398f, 0.984863f, 0.986328f, 0.987793f,
- 0.989258f, 0.990723f, 0.995605f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.995605f,
- 0.002014f, 0.006035f, 0.011299f, 0.017410f, 0.024368f, 0.033020f, 0.043701f, 0.056458f,
- 0.072205f, 0.091431f, 0.114807f, 0.141968f, 0.174316f, 0.213257f, 0.256836f, 0.306152f,
- 0.358887f, 0.413330f, 0.468018f, 0.520996f, 0.572266f, 0.618652f, 0.661621f, 0.699707f,
- 0.732910f, 0.762695f, 0.788574f, 0.810547f, 0.830078f, 0.848145f, 0.862305f, 0.875977f,
- 0.887695f, 0.898438f, 0.907227f, 0.915527f, 0.922852f, 0.929199f, 0.936035f, 0.940918f,
- 0.946289f, 0.950684f, 0.953613f, 0.958496f, 0.960938f, 0.964355f, 0.967285f, 0.970215f,
- 0.972656f, 0.975586f, 0.977539f, 0.979492f, 0.980957f, 0.982910f, 0.984863f, 0.986328f,
- 0.987793f, 0.988770f, 0.995117f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995605f,
- 0.001496f, 0.005196f, 0.009201f, 0.013985f, 0.019806f, 0.026413f, 0.034943f, 0.044647f,
- 0.056641f, 0.070923f, 0.088623f, 0.109680f, 0.135254f, 0.164795f, 0.200073f, 0.240845f,
- 0.285645f, 0.335449f, 0.387939f, 0.441650f, 0.495850f, 0.546875f, 0.595215f, 0.639160f,
- 0.679199f, 0.715820f, 0.746582f, 0.774414f, 0.798828f, 0.819824f, 0.837402f, 0.854492f,
- 0.869629f, 0.881348f, 0.893066f, 0.902832f, 0.912109f, 0.918945f, 0.926758f, 0.933105f,
- 0.938477f, 0.943359f, 0.948730f, 0.952637f, 0.956055f, 0.960449f, 0.963379f, 0.966797f,
- 0.969238f, 0.972656f, 0.975098f, 0.977051f, 0.979004f, 0.981445f, 0.982910f, 0.984375f,
- 0.986328f, 0.987305f, 0.994629f, 0.995605f, 0.995117f, 0.995117f, 0.995117f, 0.994629f,
- 0.001187f, 0.004314f, 0.007740f, 0.011337f, 0.016373f, 0.021759f, 0.028198f, 0.035889f,
- 0.045197f, 0.056580f, 0.069946f, 0.085938f, 0.105408f, 0.128784f, 0.155884f, 0.187866f,
- 0.225830f, 0.268066f, 0.315186f, 0.365479f, 0.418213f, 0.471680f, 0.522949f, 0.572754f,
- 0.617676f, 0.659668f, 0.697754f, 0.730957f, 0.760742f, 0.787109f, 0.809570f, 0.830078f,
- 0.846680f, 0.862793f, 0.875488f, 0.888184f, 0.898926f, 0.907715f, 0.916016f, 0.923340f,
- 0.930664f, 0.936523f, 0.941895f, 0.947754f, 0.951660f, 0.955566f, 0.959473f, 0.963867f,
- 0.966309f, 0.969238f, 0.972168f, 0.974121f, 0.976562f, 0.979004f, 0.980957f, 0.982910f,
- 0.984863f, 0.986816f, 0.994141f, 0.994629f, 0.994629f, 0.994629f, 0.994629f, 0.994141f,
- 0.001187f, 0.003733f, 0.006496f, 0.009918f, 0.013634f, 0.017899f, 0.023026f, 0.029343f,
- 0.036621f, 0.045227f, 0.055786f, 0.068298f, 0.083740f, 0.101135f, 0.122314f, 0.147827f,
- 0.177612f, 0.212891f, 0.252686f, 0.297119f, 0.345215f, 0.395996f, 0.448730f, 0.500488f,
- 0.550781f, 0.597656f, 0.641113f, 0.680664f, 0.716309f, 0.747559f, 0.774414f, 0.799316f,
- 0.820312f, 0.838867f, 0.855957f, 0.870117f, 0.883301f, 0.894531f, 0.904785f, 0.913086f,
- 0.920898f, 0.928223f, 0.935059f, 0.940430f, 0.945312f, 0.950684f, 0.955566f, 0.958496f,
- 0.962891f, 0.965820f, 0.968750f, 0.971680f, 0.974609f, 0.976562f, 0.978516f, 0.980957f,
- 0.982910f, 0.984863f, 0.994141f, 0.994141f, 0.994629f, 0.994141f, 0.994141f, 0.994629f,
- 0.000998f, 0.003178f, 0.005444f, 0.008179f, 0.011337f, 0.015091f, 0.019058f, 0.024368f,
- 0.029587f, 0.037140f, 0.045197f, 0.055115f, 0.066772f, 0.080688f, 0.097229f, 0.117371f,
- 0.140869f, 0.169312f, 0.201538f, 0.238770f, 0.280762f, 0.326660f, 0.376709f, 0.427490f,
- 0.479248f, 0.530273f, 0.578613f, 0.623535f, 0.664551f, 0.701660f, 0.733887f, 0.763672f,
- 0.790039f, 0.812500f, 0.832520f, 0.849121f, 0.865234f, 0.878906f, 0.890625f, 0.901367f,
- 0.910645f, 0.919434f, 0.926758f, 0.933105f, 0.939453f, 0.944824f, 0.949707f, 0.954590f,
- 0.958008f, 0.961914f, 0.965332f, 0.968750f, 0.971680f, 0.974121f, 0.977051f, 0.979004f,
- 0.980957f, 0.982910f, 0.993164f, 0.993164f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
- 0.000948f, 0.002638f, 0.004784f, 0.007153f, 0.009590f, 0.012505f, 0.016388f, 0.020599f,
- 0.025299f, 0.031097f, 0.037323f, 0.045197f, 0.054047f, 0.065002f, 0.078674f, 0.094055f,
- 0.112305f, 0.134399f, 0.160889f, 0.191040f, 0.226318f, 0.265869f, 0.310303f, 0.358154f,
- 0.409180f, 0.459473f, 0.510254f, 0.559082f, 0.606445f, 0.648926f, 0.687500f, 0.722168f,
- 0.753418f, 0.781250f, 0.804199f, 0.825684f, 0.843262f, 0.860840f, 0.874512f, 0.886719f,
- 0.898926f, 0.907227f, 0.916992f, 0.924805f, 0.932129f, 0.937988f, 0.943848f, 0.949219f,
- 0.954102f, 0.958496f, 0.961426f, 0.965332f, 0.968750f, 0.972168f, 0.974609f, 0.977051f,
- 0.979492f, 0.981445f, 0.992188f, 0.993164f, 0.993164f, 0.993164f, 0.993164f, 0.992676f,
- 0.000696f, 0.002352f, 0.004002f, 0.006138f, 0.008446f, 0.010826f, 0.013840f, 0.017258f,
- 0.021194f, 0.025970f, 0.031128f, 0.037140f, 0.044281f, 0.053436f, 0.063660f, 0.076050f,
- 0.090271f, 0.107727f, 0.128662f, 0.152832f, 0.182007f, 0.214111f, 0.252930f, 0.295166f,
- 0.341553f, 0.390625f, 0.442139f, 0.492676f, 0.541992f, 0.589844f, 0.633301f, 0.674316f,
- 0.710938f, 0.743652f, 0.772461f, 0.796875f, 0.819824f, 0.839355f, 0.854980f, 0.870605f,
- 0.884277f, 0.895508f, 0.906738f, 0.915527f, 0.923828f, 0.931152f, 0.937500f, 0.944336f,
- 0.949219f, 0.953613f, 0.958008f, 0.962402f, 0.965332f, 0.968750f, 0.972168f, 0.974609f,
- 0.977051f, 0.979980f, 0.991211f, 0.992676f, 0.992188f, 0.992188f, 0.992188f, 0.992676f,
- 0.000838f, 0.002033f, 0.003664f, 0.005077f, 0.007282f, 0.009415f, 0.011749f, 0.014931f,
- 0.017853f, 0.021606f, 0.025864f, 0.031219f, 0.037231f, 0.044464f, 0.052338f, 0.062500f,
- 0.073853f, 0.087463f, 0.104065f, 0.123230f, 0.146362f, 0.173340f, 0.205078f, 0.240845f,
- 0.281982f, 0.326660f, 0.374756f, 0.425049f, 0.476807f, 0.526855f, 0.574219f, 0.620117f,
- 0.662598f, 0.699219f, 0.733398f, 0.764160f, 0.791016f, 0.813965f, 0.833984f, 0.851074f,
- 0.867676f, 0.880859f, 0.893555f, 0.904785f, 0.914062f, 0.922852f, 0.930176f, 0.937012f,
- 0.942383f, 0.948242f, 0.953125f, 0.957520f, 0.962402f, 0.966309f, 0.969238f, 0.973145f,
- 0.975098f, 0.978027f, 0.991699f, 0.991699f, 0.992676f, 0.992188f, 0.991699f, 0.992188f,
- 0.000600f, 0.001687f, 0.003023f, 0.004963f, 0.006405f, 0.008163f, 0.010368f, 0.012718f,
- 0.015480f, 0.018311f, 0.022064f, 0.026169f, 0.031097f, 0.036926f, 0.043457f, 0.051392f,
- 0.060669f, 0.071350f, 0.084473f, 0.100220f, 0.118103f, 0.140259f, 0.166016f, 0.195679f,
- 0.230469f, 0.269531f, 0.313232f, 0.360596f, 0.410156f, 0.460693f, 0.511719f, 0.560547f,
- 0.607422f, 0.650879f, 0.689941f, 0.724609f, 0.756348f, 0.784180f, 0.808594f, 0.828613f,
- 0.847656f, 0.864258f, 0.879395f, 0.892090f, 0.903320f, 0.912598f, 0.921875f, 0.929688f,
- 0.936523f, 0.942871f, 0.947754f, 0.953125f, 0.957520f, 0.961914f, 0.966309f, 0.969238f,
- 0.972656f, 0.975586f, 0.990234f, 0.991211f, 0.991211f, 0.991699f, 0.991211f, 0.991211f,
- 0.000269f, 0.001538f, 0.002800f, 0.003868f, 0.005524f, 0.007179f, 0.008987f, 0.011063f,
- 0.013084f, 0.015747f, 0.019211f, 0.022324f, 0.026474f, 0.031311f, 0.036530f, 0.042969f,
- 0.050201f, 0.059174f, 0.069641f, 0.081543f, 0.096680f, 0.114075f, 0.134644f, 0.158691f,
- 0.187622f, 0.220581f, 0.258301f, 0.300781f, 0.347168f, 0.395996f, 0.447266f, 0.498291f,
- 0.547852f, 0.595215f, 0.640625f, 0.680176f, 0.717285f, 0.749512f, 0.778320f, 0.803223f,
- 0.825684f, 0.845215f, 0.862793f, 0.877441f, 0.890625f, 0.901855f, 0.912109f, 0.920898f,
- 0.929688f, 0.937012f, 0.942871f, 0.949707f, 0.954102f, 0.958496f, 0.962402f, 0.966309f,
- 0.970215f, 0.974121f, 0.989746f, 0.990234f, 0.990723f, 0.990723f, 0.990723f, 0.990234f,
- 0.000341f, 0.001337f, 0.002573f, 0.003475f, 0.004765f, 0.006329f, 0.007717f, 0.009499f,
- 0.011642f, 0.014107f, 0.016556f, 0.019470f, 0.022491f, 0.026169f, 0.030945f, 0.036011f,
- 0.042389f, 0.049042f, 0.057678f, 0.067993f, 0.079468f, 0.093384f, 0.110046f, 0.129883f,
- 0.152710f, 0.180420f, 0.212158f, 0.248291f, 0.289551f, 0.334961f, 0.383301f, 0.434570f,
- 0.485596f, 0.536133f, 0.584473f, 0.630371f, 0.671875f, 0.710449f, 0.743652f, 0.773926f,
- 0.799316f, 0.823242f, 0.843262f, 0.860352f, 0.875977f, 0.889648f, 0.901367f, 0.911621f,
- 0.921387f, 0.929688f, 0.937012f, 0.943848f, 0.950195f, 0.955078f, 0.959473f, 0.963379f,
- 0.967773f, 0.971191f, 0.988770f, 0.989746f, 0.990234f, 0.990234f, 0.990234f, 0.990234f,
- 0.000564f, 0.001324f, 0.002092f, 0.003191f, 0.004471f, 0.005348f, 0.007069f, 0.008438f,
- 0.010201f, 0.011810f, 0.014297f, 0.016586f, 0.019470f, 0.022644f, 0.026428f, 0.030579f,
- 0.035797f, 0.041718f, 0.048248f, 0.056213f, 0.065857f, 0.076782f, 0.090271f, 0.106262f,
- 0.125122f, 0.147095f, 0.173462f, 0.204224f, 0.239746f, 0.279785f, 0.323730f, 0.372314f,
- 0.422607f, 0.474121f, 0.526367f, 0.575195f, 0.621582f, 0.664062f, 0.703613f, 0.738770f,
- 0.769043f, 0.796387f, 0.820312f, 0.841797f, 0.858887f, 0.875488f, 0.889648f, 0.900879f,
- 0.912598f, 0.921875f, 0.930664f, 0.937500f, 0.944336f, 0.950195f, 0.955566f, 0.959961f,
- 0.964844f, 0.968750f, 0.987305f, 0.989258f, 0.989258f, 0.989258f, 0.989258f, 0.988770f,
- 0.000369f, 0.001128f, 0.001871f, 0.002792f, 0.003712f, 0.004723f, 0.006016f, 0.007542f,
- 0.008896f, 0.010773f, 0.012421f, 0.014381f, 0.016632f, 0.019791f, 0.022354f, 0.025955f,
- 0.030609f, 0.035065f, 0.040924f, 0.047333f, 0.055084f, 0.064209f, 0.075012f, 0.087769f,
- 0.102966f, 0.120911f, 0.142456f, 0.167358f, 0.197144f, 0.231812f, 0.270752f, 0.314209f,
- 0.362549f, 0.412598f, 0.464844f, 0.515625f, 0.566895f, 0.614258f, 0.657715f, 0.698730f,
- 0.734863f, 0.766602f, 0.794922f, 0.818848f, 0.839844f, 0.858887f, 0.875000f, 0.889648f,
- 0.901855f, 0.912598f, 0.922852f, 0.931152f, 0.938965f, 0.945312f, 0.951660f, 0.957520f,
- 0.961426f, 0.966309f, 0.986816f, 0.988281f, 0.988281f, 0.988770f, 0.988281f, 0.988281f,
- 0.000466f, 0.000900f, 0.001792f, 0.002695f, 0.003458f, 0.004204f, 0.005356f, 0.006512f,
- 0.007896f, 0.009300f, 0.010895f, 0.012459f, 0.014786f, 0.016739f, 0.019424f, 0.022461f,
- 0.026062f, 0.029831f, 0.034851f, 0.039764f, 0.046417f, 0.053711f, 0.062164f, 0.072388f,
- 0.085205f, 0.099365f, 0.117004f, 0.137573f, 0.162231f, 0.190674f, 0.224121f, 0.262451f,
- 0.305664f, 0.353027f, 0.403809f, 0.456055f, 0.508301f, 0.559082f, 0.608398f, 0.652832f,
- 0.694824f, 0.731445f, 0.764160f, 0.793945f, 0.817871f, 0.839355f, 0.858398f, 0.875488f,
- 0.890137f, 0.902832f, 0.913574f, 0.923828f, 0.932617f, 0.940918f, 0.946777f, 0.953613f,
- 0.958984f, 0.963379f, 0.985840f, 0.987305f, 0.987305f, 0.987793f, 0.987305f, 0.987305f,
- 0.000234f, 0.001040f, 0.001661f, 0.002392f, 0.003101f, 0.003681f, 0.004944f, 0.005844f,
- 0.007065f, 0.008217f, 0.009247f, 0.010925f, 0.012894f, 0.014549f, 0.017090f, 0.019455f,
- 0.022385f, 0.025650f, 0.029449f, 0.033936f, 0.039215f, 0.045135f, 0.052612f, 0.060944f,
- 0.070312f, 0.082397f, 0.096924f, 0.113525f, 0.133179f, 0.156860f, 0.184814f, 0.217773f,
- 0.255127f, 0.298340f, 0.345215f, 0.395996f, 0.448242f, 0.501953f, 0.553223f, 0.603516f,
- 0.649414f, 0.691895f, 0.729980f, 0.763184f, 0.792480f, 0.818359f, 0.841309f, 0.858887f,
- 0.877441f, 0.891113f, 0.904785f, 0.915527f, 0.925781f, 0.933594f, 0.941895f, 0.949219f,
- 0.955566f, 0.960449f, 0.984863f, 0.985840f, 0.986328f, 0.986816f, 0.986328f, 0.986816f,
- 0.000241f, 0.000808f, 0.001395f, 0.001986f, 0.002731f, 0.003429f, 0.004131f, 0.005402f,
- 0.006077f, 0.007347f, 0.008522f, 0.009544f, 0.011345f, 0.013046f, 0.014534f, 0.016953f,
- 0.019241f, 0.022339f, 0.025208f, 0.029175f, 0.033691f, 0.038300f, 0.044067f, 0.051331f,
- 0.059143f, 0.068726f, 0.080322f, 0.093567f, 0.109802f, 0.129883f, 0.152466f, 0.179810f,
- 0.211792f, 0.249390f, 0.291748f, 0.338623f, 0.389404f, 0.442139f, 0.496338f, 0.548340f,
- 0.599121f, 0.645996f, 0.689941f, 0.728516f, 0.762695f, 0.792969f, 0.818848f, 0.842285f,
- 0.862793f, 0.878906f, 0.894043f, 0.906250f, 0.917969f, 0.927734f, 0.935547f, 0.944336f,
- 0.951172f, 0.957031f, 0.983398f, 0.985352f, 0.985840f, 0.985352f, 0.985840f, 0.985352f,
- 0.000340f, 0.000735f, 0.001377f, 0.001853f, 0.002382f, 0.003159f, 0.004021f, 0.004642f,
- 0.005604f, 0.006340f, 0.007298f, 0.008591f, 0.009895f, 0.011154f, 0.012871f, 0.014580f,
- 0.016876f, 0.019180f, 0.022141f, 0.024979f, 0.028748f, 0.032745f, 0.037964f, 0.043213f,
- 0.050171f, 0.057831f, 0.066833f, 0.078247f, 0.091553f, 0.107178f, 0.125977f, 0.148315f,
- 0.175415f, 0.207153f, 0.244019f, 0.286377f, 0.333008f, 0.383789f, 0.437744f, 0.491943f,
- 0.545410f, 0.597168f, 0.645508f, 0.688965f, 0.729004f, 0.764160f, 0.794434f, 0.821289f,
- 0.843750f, 0.864258f, 0.881348f, 0.895996f, 0.909180f, 0.920898f, 0.929199f, 0.938965f,
- 0.946777f, 0.952637f, 0.982910f, 0.983887f, 0.984863f, 0.984863f, 0.984375f, 0.984863f,
- 0.000236f, 0.000605f, 0.001135f, 0.001415f, 0.002329f, 0.002747f, 0.003551f, 0.004158f,
- 0.004723f, 0.005535f, 0.006687f, 0.007534f, 0.008545f, 0.009979f, 0.011375f, 0.012993f,
- 0.014656f, 0.016754f, 0.018921f, 0.021759f, 0.024506f, 0.028183f, 0.032043f, 0.036743f,
- 0.042236f, 0.048645f, 0.056030f, 0.065125f, 0.075928f, 0.089050f, 0.104370f, 0.122681f,
- 0.145142f, 0.171509f, 0.202759f, 0.239258f, 0.281250f, 0.328369f, 0.379639f, 0.433838f,
- 0.489014f, 0.543945f, 0.596191f, 0.645020f, 0.690430f, 0.730957f, 0.766113f, 0.797852f,
- 0.824219f, 0.846680f, 0.867188f, 0.884766f, 0.899414f, 0.912109f, 0.923828f, 0.933105f,
- 0.942383f, 0.949707f, 0.980957f, 0.982910f, 0.983398f, 0.983398f, 0.983887f, 0.982910f,
- 0.000214f, 0.000710f, 0.001021f, 0.001429f, 0.001858f, 0.002607f, 0.003220f, 0.003738f,
- 0.004459f, 0.005032f, 0.005726f, 0.006748f, 0.007748f, 0.008659f, 0.010002f, 0.011368f,
- 0.012985f, 0.014656f, 0.016525f, 0.018921f, 0.021286f, 0.024231f, 0.027649f, 0.031464f,
- 0.035858f, 0.041321f, 0.047363f, 0.054840f, 0.063538f, 0.074097f, 0.086609f, 0.101990f,
- 0.120117f, 0.141846f, 0.168213f, 0.199219f, 0.235352f, 0.277344f, 0.324707f, 0.376953f,
- 0.432373f, 0.488037f, 0.543457f, 0.597168f, 0.646973f, 0.692871f, 0.732910f, 0.769531f,
- 0.801270f, 0.828125f, 0.850586f, 0.871582f, 0.888184f, 0.903809f, 0.915527f, 0.927246f,
- 0.936523f, 0.946289f, 0.979492f, 0.981445f, 0.981934f, 0.982422f, 0.981934f, 0.981934f,
- 0.000000f, 0.000468f, 0.001076f, 0.001489f, 0.002048f, 0.002413f, 0.002853f, 0.003468f,
- 0.003952f, 0.004444f, 0.005211f, 0.005917f, 0.006733f, 0.007763f, 0.008713f, 0.010262f,
- 0.011368f, 0.012733f, 0.014458f, 0.016296f, 0.018478f, 0.021072f, 0.023666f, 0.026810f,
- 0.030746f, 0.035278f, 0.040131f, 0.046295f, 0.053711f, 0.062195f, 0.072327f, 0.084717f,
- 0.099487f, 0.117371f, 0.139038f, 0.164795f, 0.195923f, 0.232422f, 0.274414f, 0.322266f,
- 0.374756f, 0.431641f, 0.488525f, 0.545410f, 0.599121f, 0.650879f, 0.697754f, 0.738770f,
- 0.774414f, 0.806641f, 0.832520f, 0.856445f, 0.875488f, 0.893555f, 0.907715f, 0.920410f,
- 0.931152f, 0.940918f, 0.978027f, 0.980469f, 0.980469f, 0.980957f, 0.980957f, 0.980957f,
- 0.000279f, 0.000497f, 0.000763f, 0.001353f, 0.001794f, 0.002079f, 0.002451f, 0.002956f,
- 0.003498f, 0.004150f, 0.004589f, 0.005310f, 0.006130f, 0.006958f, 0.007828f, 0.008888f,
- 0.009895f, 0.011124f, 0.012772f, 0.014282f, 0.016235f, 0.018127f, 0.020630f, 0.022873f,
- 0.026321f, 0.029938f, 0.034241f, 0.039368f, 0.045319f, 0.052338f, 0.060852f, 0.070801f,
- 0.082947f, 0.097595f, 0.115051f, 0.136353f, 0.162231f, 0.193481f, 0.229858f, 0.272217f,
- 0.321777f, 0.375000f, 0.432373f, 0.490479f, 0.548340f, 0.604004f, 0.655762f, 0.702637f,
- 0.743652f, 0.780273f, 0.812500f, 0.838867f, 0.862305f, 0.881348f, 0.897949f, 0.912598f,
- 0.925293f, 0.935547f, 0.976562f, 0.978516f, 0.979492f, 0.979980f, 0.979492f, 0.979004f,
- 0.000110f, 0.000473f, 0.000781f, 0.001262f, 0.001584f, 0.001890f, 0.002270f, 0.002607f,
- 0.003241f, 0.003704f, 0.004055f, 0.004795f, 0.005356f, 0.005997f, 0.006760f, 0.007896f,
- 0.008896f, 0.009918f, 0.011200f, 0.012451f, 0.013802f, 0.015556f, 0.017838f, 0.020065f,
- 0.022751f, 0.025864f, 0.029358f, 0.033600f, 0.038574f, 0.044342f, 0.050995f, 0.059296f,
- 0.069214f, 0.081116f, 0.095459f, 0.113159f, 0.133911f, 0.160400f, 0.191406f, 0.228638f,
- 0.272217f, 0.321289f, 0.375732f, 0.434326f, 0.493896f, 0.552734f, 0.609863f, 0.662109f,
- 0.709961f, 0.750977f, 0.787598f, 0.819336f, 0.846680f, 0.868164f, 0.887695f, 0.904297f,
- 0.917969f, 0.930176f, 0.975098f, 0.977539f, 0.977051f, 0.977539f, 0.977539f, 0.977539f,
- 0.000242f, 0.000464f, 0.000831f, 0.001027f, 0.001271f, 0.001722f, 0.001965f, 0.002243f,
- 0.002714f, 0.003036f, 0.003651f, 0.004025f, 0.004902f, 0.005638f, 0.006176f, 0.006943f,
- 0.007763f, 0.008789f, 0.009804f, 0.010872f, 0.012070f, 0.013695f, 0.015381f, 0.017395f,
- 0.019608f, 0.022232f, 0.025009f, 0.028885f, 0.032623f, 0.037659f, 0.043182f, 0.050018f,
- 0.058167f, 0.067810f, 0.079224f, 0.093811f, 0.111328f, 0.132324f, 0.158569f, 0.190063f,
- 0.228149f, 0.271973f, 0.322510f, 0.378906f, 0.438477f, 0.499756f, 0.560059f, 0.618164f,
- 0.671387f, 0.718750f, 0.760742f, 0.796875f, 0.826660f, 0.854492f, 0.875000f, 0.894531f,
- 0.911133f, 0.923828f, 0.973145f, 0.976074f, 0.975586f, 0.976074f, 0.976074f, 0.977051f,
- 0.000242f, 0.000552f, 0.000701f, 0.001063f, 0.001186f, 0.001462f, 0.001690f, 0.002340f,
- 0.002703f, 0.002728f, 0.003325f, 0.003828f, 0.004333f, 0.004913f, 0.005474f, 0.006077f,
- 0.006943f, 0.007607f, 0.008553f, 0.009460f, 0.010582f, 0.011871f, 0.013451f, 0.015091f,
- 0.016983f, 0.019165f, 0.021637f, 0.024673f, 0.027863f, 0.031525f, 0.036713f, 0.041962f,
- 0.048615f, 0.056396f, 0.066162f, 0.077942f, 0.092590f, 0.110046f, 0.130981f, 0.157593f,
- 0.189331f, 0.228394f, 0.273926f, 0.325684f, 0.383301f, 0.444580f, 0.507324f, 0.569824f,
- 0.627441f, 0.682129f, 0.729980f, 0.770508f, 0.807129f, 0.837402f, 0.863281f, 0.884766f,
- 0.902832f, 0.917969f, 0.971191f, 0.973633f, 0.974609f, 0.974121f, 0.974609f, 0.974609f,
- 0.000239f, 0.000239f, 0.000658f, 0.000899f, 0.001204f, 0.001252f, 0.001629f, 0.001815f,
- 0.002470f, 0.002430f, 0.003134f, 0.003321f, 0.003925f, 0.004238f, 0.004856f, 0.005341f,
- 0.006161f, 0.006615f, 0.007511f, 0.008224f, 0.009277f, 0.010445f, 0.011818f, 0.013046f,
- 0.014473f, 0.016510f, 0.018814f, 0.021057f, 0.023834f, 0.027237f, 0.030853f, 0.035675f,
- 0.040894f, 0.047241f, 0.055145f, 0.064758f, 0.076782f, 0.090942f, 0.108398f, 0.130371f,
- 0.157104f, 0.189819f, 0.229248f, 0.276367f, 0.329834f, 0.390137f, 0.453125f, 0.517578f,
- 0.580566f, 0.640625f, 0.694336f, 0.741699f, 0.782715f, 0.817871f, 0.848145f, 0.872559f,
- 0.893555f, 0.910645f, 0.969727f, 0.971191f, 0.972656f, 0.972168f, 0.972168f, 0.972168f,
- 0.000222f, 0.000463f, 0.000620f, 0.000837f, 0.000900f, 0.001048f, 0.001381f, 0.001820f,
- 0.001957f, 0.002329f, 0.002747f, 0.002964f, 0.003330f, 0.003986f, 0.004322f, 0.004677f,
- 0.005302f, 0.005760f, 0.006569f, 0.007359f, 0.008141f, 0.009293f, 0.010101f, 0.011452f,
- 0.012779f, 0.014496f, 0.016144f, 0.018097f, 0.020157f, 0.023148f, 0.026611f, 0.029785f,
- 0.034515f, 0.039856f, 0.046478f, 0.054016f, 0.063843f, 0.075378f, 0.089233f, 0.107666f,
- 0.129639f, 0.156860f, 0.190674f, 0.231445f, 0.280518f, 0.336426f, 0.398193f, 0.463379f,
- 0.530273f, 0.595215f, 0.654785f, 0.708984f, 0.755371f, 0.796875f, 0.831543f, 0.860352f,
- 0.883789f, 0.903809f, 0.966797f, 0.968750f, 0.969727f, 0.970215f, 0.970215f, 0.969727f,
- 0.000000f, 0.000345f, 0.000464f, 0.000686f, 0.000782f, 0.001030f, 0.001139f, 0.001598f,
- 0.001846f, 0.002237f, 0.002489f, 0.002684f, 0.003067f, 0.003344f, 0.003895f, 0.004158f,
- 0.004845f, 0.005131f, 0.005886f, 0.006561f, 0.007195f, 0.007912f, 0.008965f, 0.009941f,
- 0.010956f, 0.012383f, 0.013893f, 0.015602f, 0.017303f, 0.019623f, 0.022156f, 0.025452f,
- 0.028976f, 0.033722f, 0.038910f, 0.045288f, 0.052887f, 0.062561f, 0.074097f, 0.088623f,
- 0.106812f, 0.129639f, 0.157715f, 0.192261f, 0.235107f, 0.285889f, 0.344482f, 0.408691f,
- 0.476807f, 0.545410f, 0.610840f, 0.671387f, 0.725098f, 0.771484f, 0.811035f, 0.843750f,
- 0.871582f, 0.894043f, 0.964355f, 0.967285f, 0.967285f, 0.967773f, 0.967773f, 0.967773f,
- 0.000000f, 0.000320f, 0.000576f, 0.000572f, 0.000767f, 0.000945f, 0.001066f, 0.001375f,
- 0.001848f, 0.001980f, 0.002190f, 0.002399f, 0.002695f, 0.002943f, 0.003397f, 0.003664f,
- 0.004063f, 0.004566f, 0.005119f, 0.005688f, 0.006130f, 0.007057f, 0.007778f, 0.008675f,
- 0.009590f, 0.010666f, 0.011971f, 0.013443f, 0.015129f, 0.016953f, 0.018875f, 0.021576f,
- 0.024658f, 0.028488f, 0.032959f, 0.037811f, 0.043793f, 0.051819f, 0.061371f, 0.073181f,
- 0.088257f, 0.106506f, 0.129883f, 0.159180f, 0.195679f, 0.240479f, 0.293457f, 0.355225f,
- 0.422852f, 0.492432f, 0.563477f, 0.629883f, 0.690918f, 0.743652f, 0.789062f, 0.827148f,
- 0.858398f, 0.884277f, 0.961914f, 0.964844f, 0.964355f, 0.964844f, 0.964355f, 0.965332f,
- 0.000000f, 0.000242f, 0.000435f, 0.000547f, 0.000688f, 0.000803f, 0.001175f, 0.001318f,
- 0.001593f, 0.001652f, 0.001961f, 0.002209f, 0.002481f, 0.002716f, 0.002911f, 0.003210f,
- 0.003595f, 0.004005f, 0.004490f, 0.004894f, 0.005508f, 0.006107f, 0.006714f, 0.007462f,
- 0.008438f, 0.009277f, 0.010170f, 0.011436f, 0.012756f, 0.014145f, 0.016205f, 0.018433f,
- 0.020966f, 0.023819f, 0.027405f, 0.031464f, 0.036713f, 0.043152f, 0.050842f, 0.060577f,
- 0.071960f, 0.087219f, 0.106689f, 0.130371f, 0.161377f, 0.199585f, 0.246948f, 0.303467f,
- 0.367920f, 0.439697f, 0.512207f, 0.584473f, 0.651855f, 0.712402f, 0.764160f, 0.808105f,
- 0.844727f, 0.875000f, 0.958008f, 0.961426f, 0.961914f, 0.961914f, 0.962402f, 0.961914f,
- 0.000000f, 0.000237f, 0.000266f, 0.000387f, 0.000557f, 0.000691f, 0.000774f, 0.001221f,
- 0.001455f, 0.001492f, 0.001769f, 0.001896f, 0.002151f, 0.002386f, 0.002529f, 0.002911f,
- 0.003147f, 0.003523f, 0.003862f, 0.004311f, 0.004848f, 0.005260f, 0.005795f, 0.006416f,
- 0.007114f, 0.007942f, 0.008667f, 0.009666f, 0.010818f, 0.012184f, 0.013718f, 0.015541f,
- 0.017685f, 0.020126f, 0.023056f, 0.026306f, 0.030853f, 0.035797f, 0.042053f, 0.049683f,
- 0.059784f, 0.072144f, 0.086914f, 0.106873f, 0.132202f, 0.164429f, 0.205200f, 0.255615f,
- 0.315918f, 0.384521f, 0.458984f, 0.534668f, 0.607910f, 0.676758f, 0.735840f, 0.785645f,
- 0.828125f, 0.862305f, 0.955566f, 0.958008f, 0.958984f, 0.958496f, 0.958984f, 0.958984f,
- 0.000000f, 0.000119f, 0.000234f, 0.000484f, 0.000603f, 0.000758f, 0.000934f, 0.000999f,
- 0.001200f, 0.001343f, 0.001534f, 0.001725f, 0.001860f, 0.002056f, 0.002235f, 0.002445f,
- 0.002783f, 0.003115f, 0.003448f, 0.003757f, 0.004192f, 0.004723f, 0.005077f, 0.005653f,
- 0.006172f, 0.006527f, 0.007328f, 0.008247f, 0.009140f, 0.010368f, 0.011711f, 0.013351f,
- 0.014702f, 0.016937f, 0.019226f, 0.022156f, 0.025604f, 0.029877f, 0.034668f, 0.040710f,
- 0.048920f, 0.058624f, 0.071289f, 0.087219f, 0.107727f, 0.134521f, 0.168701f, 0.212769f,
- 0.267090f, 0.331543f, 0.404785f, 0.482910f, 0.561523f, 0.635742f, 0.702637f, 0.760742f,
- 0.809570f, 0.849121f, 0.951660f, 0.954590f, 0.955566f, 0.955566f, 0.956055f, 0.955566f,
- 0.000238f, 0.000218f, 0.000229f, 0.000242f, 0.000313f, 0.000859f, 0.000623f, 0.000978f,
- 0.001021f, 0.001150f, 0.001320f, 0.001431f, 0.001546f, 0.001746f, 0.001895f, 0.002106f,
- 0.002502f, 0.002630f, 0.002926f, 0.003296f, 0.003651f, 0.003918f, 0.004391f, 0.004910f,
- 0.005249f, 0.005558f, 0.006413f, 0.007114f, 0.007866f, 0.008789f, 0.009872f, 0.011093f,
- 0.012413f, 0.013939f, 0.015945f, 0.018692f, 0.021225f, 0.024643f, 0.028687f, 0.033936f,
- 0.040192f, 0.047791f, 0.058014f, 0.070923f, 0.087585f, 0.109131f, 0.137573f, 0.174683f,
- 0.222290f, 0.280762f, 0.350830f, 0.428955f, 0.511230f, 0.592285f, 0.666992f, 0.733398f,
- 0.789062f, 0.834473f, 0.947754f, 0.951172f, 0.951660f, 0.951172f, 0.951660f, 0.951172f,
- 0.000000f, 0.000205f, 0.000222f, 0.000344f, 0.000301f, 0.000775f, 0.000827f, 0.000719f,
- 0.000944f, 0.000976f, 0.001306f, 0.001249f, 0.001404f, 0.001569f, 0.001604f, 0.001819f,
- 0.002182f, 0.002354f, 0.002569f, 0.002857f, 0.003113f, 0.003426f, 0.003649f, 0.004112f,
- 0.004307f, 0.004925f, 0.005508f, 0.005802f, 0.006565f, 0.007450f, 0.008125f, 0.009079f,
- 0.010269f, 0.011665f, 0.013565f, 0.015213f, 0.017410f, 0.020203f, 0.023743f, 0.028168f,
- 0.032684f, 0.039062f, 0.047058f, 0.057404f, 0.070984f, 0.088623f, 0.111389f, 0.142090f,
- 0.182373f, 0.234253f, 0.298828f, 0.375000f, 0.458008f, 0.543945f, 0.627441f, 0.702148f,
- 0.765137f, 0.818359f, 0.942871f, 0.946289f, 0.947266f, 0.947266f, 0.946777f, 0.947266f,
- 0.000064f, 0.000095f, 0.000197f, 0.000213f, 0.000459f, 0.000491f, 0.000647f, 0.000696f,
- 0.000884f, 0.000911f, 0.001121f, 0.001115f, 0.001234f, 0.001371f, 0.001410f, 0.001743f,
- 0.001905f, 0.002016f, 0.002207f, 0.002438f, 0.002714f, 0.002939f, 0.003183f, 0.003323f,
- 0.003727f, 0.004143f, 0.004555f, 0.005276f, 0.005531f, 0.006264f, 0.006702f, 0.007572f,
- 0.008705f, 0.009712f, 0.011238f, 0.012650f, 0.014320f, 0.016815f, 0.019516f, 0.022400f,
- 0.026566f, 0.031799f, 0.038055f, 0.046417f, 0.057037f, 0.071350f, 0.089722f, 0.114868f,
- 0.148193f, 0.192749f, 0.249878f, 0.321045f, 0.404053f, 0.493408f, 0.583008f, 0.666016f,
- 0.739258f, 0.799316f, 0.937988f, 0.941406f, 0.941895f, 0.942383f, 0.942383f, 0.942383f,
- 0.000000f, 0.000007f, 0.000144f, 0.000427f, 0.000443f, 0.000566f, 0.000589f, 0.000615f,
- 0.000725f, 0.000731f, 0.000896f, 0.000953f, 0.001062f, 0.001167f, 0.001344f, 0.001345f,
- 0.001636f, 0.001774f, 0.001893f, 0.002069f, 0.002350f, 0.002457f, 0.002678f, 0.002743f,
- 0.003105f, 0.003513f, 0.003830f, 0.004227f, 0.004589f, 0.005047f, 0.005669f, 0.006176f,
- 0.007153f, 0.007896f, 0.008911f, 0.010231f, 0.011818f, 0.013618f, 0.015465f, 0.018188f,
- 0.021576f, 0.025452f, 0.030533f, 0.037048f, 0.045685f, 0.056915f, 0.071533f, 0.091675f,
- 0.118958f, 0.156006f, 0.205444f, 0.270020f, 0.349609f, 0.439941f, 0.533691f, 0.625977f,
- 0.708984f, 0.778320f, 0.931641f, 0.936035f, 0.936523f, 0.937012f, 0.937012f, 0.937012f,
- 0.000000f, 0.000000f, 0.000137f, 0.000262f, 0.000432f, 0.000437f, 0.000444f, 0.000590f,
- 0.000558f, 0.000606f, 0.000817f, 0.000877f, 0.000909f, 0.000951f, 0.001191f, 0.001244f,
- 0.001373f, 0.001506f, 0.001702f, 0.001690f, 0.001955f, 0.001940f, 0.002283f, 0.002340f,
- 0.002571f, 0.002871f, 0.003265f, 0.003475f, 0.003910f, 0.004181f, 0.004608f, 0.005112f,
- 0.005833f, 0.006416f, 0.007145f, 0.008209f, 0.009636f, 0.010750f, 0.012642f, 0.014481f,
- 0.017197f, 0.020203f, 0.024353f, 0.029694f, 0.036041f, 0.045105f, 0.056702f, 0.072388f,
- 0.094482f, 0.124329f, 0.166504f, 0.223022f, 0.295898f, 0.384766f, 0.482910f, 0.582031f,
- 0.675293f, 0.754883f, 0.926270f, 0.929688f, 0.930664f, 0.930664f, 0.931152f, 0.930664f,
- 0.000000f, 0.000000f, 0.000000f, 0.000232f, 0.000357f, 0.000411f, 0.000513f, 0.000527f,
- 0.000490f, 0.000504f, 0.000653f, 0.000750f, 0.000780f, 0.000976f, 0.000942f, 0.000967f,
- 0.001180f, 0.001252f, 0.001385f, 0.001425f, 0.001559f, 0.001801f, 0.001886f, 0.002144f,
- 0.002111f, 0.002354f, 0.002645f, 0.002827f, 0.003187f, 0.003414f, 0.003792f, 0.004360f,
- 0.004662f, 0.005146f, 0.005875f, 0.006783f, 0.007610f, 0.008797f, 0.010033f, 0.011566f,
- 0.013565f, 0.016006f, 0.019165f, 0.023163f, 0.028320f, 0.035400f, 0.044647f, 0.057129f,
- 0.074402f, 0.098572f, 0.132812f, 0.180542f, 0.245728f, 0.330078f, 0.428955f, 0.535156f,
- 0.638184f, 0.728516f, 0.919434f, 0.922852f, 0.923828f, 0.923828f, 0.923828f, 0.924316f,
- 0.000000f, 0.000000f, 0.000000f, 0.000114f, 0.000248f, 0.000359f, 0.000386f, 0.000342f,
- 0.000465f, 0.000461f, 0.000490f, 0.000609f, 0.000638f, 0.000694f, 0.000807f, 0.000923f,
- 0.000961f, 0.001074f, 0.001123f, 0.001268f, 0.001311f, 0.001494f, 0.001537f, 0.001754f,
- 0.001899f, 0.001917f, 0.002199f, 0.002241f, 0.002583f, 0.002769f, 0.003101f, 0.003441f,
- 0.003775f, 0.004200f, 0.004787f, 0.005272f, 0.006062f, 0.006702f, 0.007732f, 0.009102f,
- 0.010582f, 0.012466f, 0.014984f, 0.017990f, 0.021957f, 0.027222f, 0.034332f, 0.044128f,
- 0.057434f, 0.076538f, 0.104126f, 0.143799f, 0.199829f, 0.275879f, 0.373047f, 0.482422f,
- 0.594727f, 0.698730f, 0.910645f, 0.914551f, 0.916504f, 0.916016f, 0.916504f, 0.915527f,
- 0.000000f, 0.000000f, 0.000000f, 0.000121f, 0.000221f, 0.000222f, 0.000392f, 0.000402f,
- 0.000396f, 0.000434f, 0.000476f, 0.000548f, 0.000536f, 0.000644f, 0.000642f, 0.000793f,
- 0.000795f, 0.000912f, 0.000953f, 0.000989f, 0.001164f, 0.001197f, 0.001285f, 0.001480f,
- 0.001511f, 0.001674f, 0.001703f, 0.001901f, 0.002075f, 0.002340f, 0.002499f, 0.002800f,
- 0.003019f, 0.003296f, 0.003695f, 0.004093f, 0.004780f, 0.005260f, 0.006207f, 0.006939f,
- 0.008034f, 0.009598f, 0.011353f, 0.013702f, 0.016678f, 0.020874f, 0.026062f, 0.033539f,
- 0.044006f, 0.058746f, 0.080139f, 0.111877f, 0.158447f, 0.226318f, 0.317627f, 0.428711f,
- 0.548828f, 0.665039f, 0.901367f, 0.907227f, 0.907715f, 0.908203f, 0.908203f, 0.907227f,
- 0.000000f, 0.000000f, 0.000122f, 0.000173f, 0.000191f, 0.000215f, 0.000224f, 0.000261f,
- 0.000340f, 0.000374f, 0.000380f, 0.000496f, 0.000416f, 0.000535f, 0.000592f, 0.000622f,
- 0.000701f, 0.000772f, 0.000742f, 0.000774f, 0.000990f, 0.000945f, 0.001088f, 0.001105f,
- 0.001348f, 0.001231f, 0.001460f, 0.001620f, 0.001758f, 0.001941f, 0.002008f, 0.002092f,
- 0.002430f, 0.002615f, 0.002886f, 0.003208f, 0.003519f, 0.004112f, 0.004704f, 0.005371f,
- 0.006149f, 0.007351f, 0.008659f, 0.010201f, 0.012550f, 0.015549f, 0.019577f, 0.025436f,
- 0.032928f, 0.044220f, 0.060608f, 0.084961f, 0.123474f, 0.180664f, 0.263184f, 0.372314f,
- 0.498291f, 0.626465f, 0.892578f, 0.895996f, 0.896973f, 0.896973f, 0.897949f, 0.897949f,
- 0.000000f, 0.000000f, 0.000121f, 0.000121f, 0.000120f, 0.000192f, 0.000201f, 0.000222f,
- 0.000222f, 0.000276f, 0.000295f, 0.000344f, 0.000433f, 0.000470f, 0.000485f, 0.000549f,
- 0.000555f, 0.000558f, 0.000566f, 0.000639f, 0.000678f, 0.000757f, 0.000840f, 0.000905f,
- 0.000999f, 0.000946f, 0.001018f, 0.001309f, 0.001402f, 0.001417f, 0.001624f, 0.001692f,
- 0.001869f, 0.002003f, 0.002184f, 0.002602f, 0.002851f, 0.003157f, 0.003595f, 0.004063f,
- 0.004734f, 0.005398f, 0.006275f, 0.007542f, 0.009148f, 0.011383f, 0.014275f, 0.018250f,
- 0.024063f, 0.032135f, 0.044922f, 0.063721f, 0.093811f, 0.139648f, 0.211914f, 0.314697f,
- 0.444092f, 0.584961f, 0.879883f, 0.884766f, 0.885254f, 0.885742f, 0.886230f, 0.885742f,
- 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000120f, 0.000154f, 0.000150f, 0.000160f,
- 0.000202f, 0.000217f, 0.000308f, 0.000319f, 0.000278f, 0.000392f, 0.000362f, 0.000432f,
- 0.000416f, 0.000448f, 0.000495f, 0.000526f, 0.000710f, 0.000754f, 0.000657f, 0.000755f,
- 0.000806f, 0.000919f, 0.000815f, 0.001080f, 0.001152f, 0.001207f, 0.001218f, 0.001373f,
- 0.001320f, 0.001685f, 0.001764f, 0.001819f, 0.002068f, 0.002380f, 0.002668f, 0.003033f,
- 0.003584f, 0.003979f, 0.004829f, 0.005402f, 0.006630f, 0.008080f, 0.010254f, 0.013069f,
- 0.017044f, 0.023422f, 0.031647f, 0.046417f, 0.068604f, 0.104919f, 0.165161f, 0.258789f,
- 0.387207f, 0.537598f, 0.867188f, 0.871582f, 0.872559f, 0.872559f, 0.872559f, 0.873047f,
- 0.000000f, 0.000121f, 0.000120f, 0.000120f, 0.000119f, 0.000118f, 0.000122f, 0.000108f,
- 0.000143f, 0.000149f, 0.000184f, 0.000194f, 0.000189f, 0.000210f, 0.000321f, 0.000282f,
- 0.000376f, 0.000420f, 0.000533f, 0.000437f, 0.000467f, 0.000477f, 0.000587f, 0.000519f,
- 0.000673f, 0.000662f, 0.000679f, 0.000845f, 0.000881f, 0.000863f, 0.001016f, 0.001093f,
- 0.001176f, 0.001191f, 0.001336f, 0.001561f, 0.001573f, 0.001754f, 0.001919f, 0.002264f,
- 0.002596f, 0.002911f, 0.003372f, 0.003870f, 0.004723f, 0.005733f, 0.007092f, 0.008965f,
- 0.011650f, 0.015701f, 0.022339f, 0.032043f, 0.048370f, 0.076050f, 0.124084f, 0.204834f,
- 0.328369f, 0.485596f, 0.852539f, 0.856934f, 0.858887f, 0.858887f, 0.858887f, 0.858398f,
- 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000118f, 0.000117f, 0.000116f, 0.000114f,
- 0.000105f, 0.000110f, 0.000165f, 0.000133f, 0.000157f, 0.000240f, 0.000256f, 0.000257f,
- 0.000249f, 0.000303f, 0.000342f, 0.000346f, 0.000485f, 0.000510f, 0.000398f, 0.000493f,
- 0.000492f, 0.000524f, 0.000590f, 0.000585f, 0.000601f, 0.000740f, 0.000647f, 0.000871f,
- 0.000834f, 0.000969f, 0.001020f, 0.001190f, 0.001244f, 0.001432f, 0.001393f, 0.001702f,
- 0.001912f, 0.002171f, 0.002445f, 0.002958f, 0.003330f, 0.004025f, 0.004860f, 0.006161f,
- 0.007896f, 0.010742f, 0.014671f, 0.021378f, 0.032928f, 0.052612f, 0.089050f, 0.155884f,
- 0.268555f, 0.430664f, 0.836426f, 0.841309f, 0.841309f, 0.842285f, 0.842773f, 0.842285f,
- 0.000000f, 0.000000f, 0.000119f, 0.000117f, 0.000116f, 0.000115f, 0.000114f, 0.000114f,
- 0.000111f, 0.000103f, 0.000097f, 0.000118f, 0.000115f, 0.000130f, 0.000176f, 0.000130f,
- 0.000223f, 0.000235f, 0.000244f, 0.000252f, 0.000274f, 0.000389f, 0.000309f, 0.000430f,
- 0.000340f, 0.000399f, 0.000408f, 0.000459f, 0.000514f, 0.000501f, 0.000519f, 0.000657f,
- 0.000588f, 0.000775f, 0.000813f, 0.000789f, 0.000904f, 0.001076f, 0.001027f, 0.001170f,
- 0.001342f, 0.001425f, 0.001662f, 0.002005f, 0.002298f, 0.002699f, 0.003227f, 0.003990f,
- 0.005062f, 0.006855f, 0.009415f, 0.013504f, 0.020905f, 0.034424f, 0.060333f, 0.112000f,
- 0.210693f, 0.371094f, 0.816406f, 0.822754f, 0.822754f, 0.823242f, 0.823242f, 0.823730f,
- 0.000000f, 0.000119f, 0.000117f, 0.000116f, 0.000114f, 0.000113f, 0.000112f, 0.000111f,
- 0.000110f, 0.000109f, 0.000102f, 0.000095f, 0.000090f, 0.000084f, 0.000093f, 0.000103f,
- 0.000118f, 0.000165f, 0.000162f, 0.000190f, 0.000204f, 0.000218f, 0.000223f, 0.000237f,
- 0.000256f, 0.000272f, 0.000344f, 0.000365f, 0.000365f, 0.000396f, 0.000386f, 0.000412f,
- 0.000530f, 0.000466f, 0.000492f, 0.000615f, 0.000611f, 0.000748f, 0.000712f, 0.000795f,
- 0.000908f, 0.000971f, 0.001106f, 0.001353f, 0.001572f, 0.001822f, 0.002251f, 0.002676f,
- 0.003290f, 0.004349f, 0.005951f, 0.008316f, 0.012543f, 0.021149f, 0.038025f, 0.075500f,
- 0.156006f, 0.308838f, 0.794922f, 0.800293f, 0.800781f, 0.801270f, 0.801758f, 0.802246f,
- 0.000121f, 0.000116f, 0.000114f, 0.000113f, 0.000111f, 0.000109f, 0.000108f, 0.000107f,
- 0.000106f, 0.000104f, 0.000104f, 0.000100f, 0.000094f, 0.000088f, 0.000083f, 0.000078f,
- 0.000074f, 0.000105f, 0.000078f, 0.000122f, 0.000113f, 0.000153f, 0.000174f, 0.000175f,
- 0.000207f, 0.000216f, 0.000225f, 0.000215f, 0.000262f, 0.000308f, 0.000297f, 0.000287f,
- 0.000307f, 0.000342f, 0.000363f, 0.000411f, 0.000401f, 0.000453f, 0.000522f, 0.000555f,
- 0.000680f, 0.000701f, 0.000751f, 0.000873f, 0.000966f, 0.001181f, 0.001445f, 0.001666f,
- 0.002077f, 0.002512f, 0.003359f, 0.004856f, 0.007347f, 0.012001f, 0.022049f, 0.046417f,
- 0.107117f, 0.245361f, 0.770508f, 0.775879f, 0.776367f, 0.776855f, 0.777344f, 0.777832f,
- 0.000000f, 0.000113f, 0.000108f, 0.000107f, 0.000104f, 0.000103f, 0.000101f, 0.000100f,
- 0.000099f, 0.000098f, 0.000097f, 0.000096f, 0.000095f, 0.000091f, 0.000086f, 0.000081f,
- 0.000077f, 0.000073f, 0.000069f, 0.000079f, 0.000084f, 0.000091f, 0.000074f, 0.000100f,
- 0.000117f, 0.000140f, 0.000144f, 0.000166f, 0.000174f, 0.000178f, 0.000225f, 0.000197f,
- 0.000234f, 0.000239f, 0.000273f, 0.000289f, 0.000283f, 0.000293f, 0.000338f, 0.000386f,
- 0.000386f, 0.000432f, 0.000459f, 0.000525f, 0.000625f, 0.000691f, 0.000800f, 0.001004f,
- 0.001227f, 0.001479f, 0.001984f, 0.002745f, 0.003983f, 0.006413f, 0.011642f, 0.025269f,
- 0.066040f, 0.182495f, 0.743164f, 0.748535f, 0.749023f, 0.749512f, 0.750000f, 0.749512f,
- 0.000000f, 0.000102f, 0.000101f, 0.000098f, 0.000094f, 0.000093f, 0.000092f, 0.000090f,
- 0.000089f, 0.000088f, 0.000087f, 0.000086f, 0.000085f, 0.000084f, 0.000085f, 0.000082f,
- 0.000078f, 0.000074f, 0.000070f, 0.000066f, 0.000063f, 0.000060f, 0.000057f, 0.000056f,
- 0.000061f, 0.000060f, 0.000073f, 0.000087f, 0.000100f, 0.000105f, 0.000124f, 0.000136f,
- 0.000140f, 0.000140f, 0.000159f, 0.000179f, 0.000186f, 0.000205f, 0.000214f, 0.000229f,
- 0.000248f, 0.000267f, 0.000299f, 0.000344f, 0.000367f, 0.000422f, 0.000496f, 0.000557f,
- 0.000639f, 0.000837f, 0.001037f, 0.001419f, 0.002081f, 0.003202f, 0.005730f, 0.012199f,
- 0.034943f, 0.122925f, 0.711426f, 0.716797f, 0.718750f, 0.718262f, 0.718262f, 0.718750f,
- 0.000094f, 0.000079f, 0.000078f, 0.000074f, 0.000074f, 0.000075f, 0.000074f, 0.000073f,
- 0.000071f, 0.000072f, 0.000070f, 0.000071f, 0.000071f, 0.000070f, 0.000070f, 0.000069f,
- 0.000070f, 0.000069f, 0.000068f, 0.000065f, 0.000062f, 0.000059f, 0.000056f, 0.000053f,
- 0.000050f, 0.000048f, 0.000045f, 0.000044f, 0.000041f, 0.000050f, 0.000050f, 0.000061f,
- 0.000068f, 0.000085f, 0.000091f, 0.000101f, 0.000102f, 0.000107f, 0.000119f, 0.000129f,
- 0.000144f, 0.000151f, 0.000160f, 0.000184f, 0.000212f, 0.000213f, 0.000235f, 0.000294f,
- 0.000315f, 0.000392f, 0.000505f, 0.000637f, 0.000880f, 0.001400f, 0.002462f, 0.005333f,
- 0.015160f, 0.070312f, 0.678223f, 0.683105f, 0.684082f, 0.684570f, 0.684570f, 0.684570f,
- 0.000000f, 0.000000f, 0.000023f, 0.000034f, 0.000032f, 0.000038f, 0.000037f, 0.000044f,
- 0.000043f, 0.000047f, 0.000045f, 0.000047f, 0.000049f, 0.000049f, 0.000049f, 0.000048f,
- 0.000051f, 0.000050f, 0.000051f, 0.000051f, 0.000052f, 0.000052f, 0.000052f, 0.000049f,
- 0.000047f, 0.000045f, 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000035f, 0.000033f,
- 0.000031f, 0.000029f, 0.000038f, 0.000037f, 0.000042f, 0.000051f, 0.000055f, 0.000067f,
- 0.000074f, 0.000073f, 0.000083f, 0.000093f, 0.000088f, 0.000102f, 0.000122f, 0.000122f,
- 0.000142f, 0.000169f, 0.000206f, 0.000265f, 0.000355f, 0.000531f, 0.000897f, 0.001822f,
- 0.005493f, 0.030579f, 0.640137f, 0.644531f, 0.647461f, 0.647949f, 0.647461f, 0.648438f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000001f, 0.000000f, 0.000008f, 0.000012f, 0.000014f, 0.000014f, 0.000019f, 0.000021f,
- 0.000022f, 0.000024f, 0.000026f, 0.000027f, 0.000027f, 0.000028f, 0.000029f, 0.000031f,
- 0.000031f, 0.000032f, 0.000032f, 0.000033f, 0.000033f, 0.000032f, 0.000030f, 0.000029f,
- 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000019f, 0.000018f,
- 0.000021f, 0.000024f, 0.000028f, 0.000033f, 0.000043f, 0.000041f, 0.000046f, 0.000053f,
- 0.000050f, 0.000059f, 0.000068f, 0.000094f, 0.000096f, 0.000140f, 0.000239f, 0.000447f,
- 0.001340f, 0.009087f, 0.600098f, 0.605957f, 0.606934f, 0.606934f, 0.607422f, 0.606934f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000002f, 0.000004f, 0.000006f, 0.000006f, 0.000009f, 0.000010f, 0.000011f, 0.000012f,
- 0.000013f, 0.000014f, 0.000015f, 0.000016f, 0.000017f, 0.000016f, 0.000015f, 0.000014f,
- 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000010f, 0.000009f, 0.000008f, 0.000012f,
- 0.000014f, 0.000018f, 0.000017f, 0.000022f, 0.000022f, 0.000026f, 0.000040f, 0.000060f,
- 0.000157f, 0.001244f, 0.557129f, 0.563477f, 0.563477f, 0.564941f, 0.564941f, 0.564941f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000002f, 0.000003f,
- 0.000003f, 0.000004f, 0.000003f, 0.000003f, 0.000003f, 0.000002f, 0.000003f, 0.000003f,
- 0.000003f, 0.000012f, 0.513672f, 0.520020f, 0.520020f, 0.520508f, 0.521484f, 0.521484f,
- },
- {
- 0.103943f, 0.284912f, 0.422119f, 0.523438f, 0.600586f, 0.659668f, 0.705078f, 0.741699f,
- 0.771484f, 0.795898f, 0.816895f, 0.834961f, 0.850586f, 0.862793f, 0.874512f, 0.884277f,
- 0.894043f, 0.901855f, 0.909180f, 0.915039f, 0.921387f, 0.926270f, 0.932129f, 0.936035f,
- 0.940430f, 0.944336f, 0.948242f, 0.951660f, 0.954590f, 0.957520f, 0.959961f, 0.962891f,
- 0.965332f, 0.967285f, 0.969727f, 0.971680f, 0.973145f, 0.975586f, 0.977051f, 0.979004f,
- 0.979980f, 0.981934f, 0.983887f, 0.984375f, 0.985840f, 0.986816f, 0.988770f, 0.989258f,
- 0.990723f, 0.992188f, 0.992676f, 0.993652f, 0.994629f, 0.995605f, 0.996582f, 0.997559f,
- 0.998535f, 0.999023f, 0.999512f, 0.999023f, 0.998535f, 0.998047f, 0.997559f, 0.997070f,
- 0.046997f, 0.153564f, 0.264160f, 0.369385f, 0.460205f, 0.538574f, 0.602051f, 0.654785f,
- 0.697754f, 0.733398f, 0.762695f, 0.787598f, 0.809082f, 0.827637f, 0.843262f, 0.856934f,
- 0.868652f, 0.880859f, 0.889648f, 0.898438f, 0.906738f, 0.912598f, 0.918945f, 0.924805f,
- 0.929688f, 0.935059f, 0.938965f, 0.943359f, 0.947266f, 0.951172f, 0.954102f, 0.956543f,
- 0.959961f, 0.961914f, 0.964844f, 0.966797f, 0.969727f, 0.971191f, 0.974121f, 0.975098f,
- 0.977051f, 0.979492f, 0.980469f, 0.981934f, 0.983887f, 0.985352f, 0.985840f, 0.987305f,
- 0.989258f, 0.990234f, 0.991211f, 0.992188f, 0.993164f, 0.994141f, 0.995117f, 0.996094f,
- 0.996582f, 0.997559f, 0.999023f, 0.998535f, 0.998047f, 0.997559f, 0.997070f, 0.997070f,
- 0.025940f, 0.088501f, 0.162964f, 0.246094f, 0.331055f, 0.411865f, 0.486328f, 0.550293f,
- 0.606934f, 0.655762f, 0.695312f, 0.729980f, 0.758301f, 0.783691f, 0.804199f, 0.823730f,
- 0.838867f, 0.853027f, 0.865723f, 0.877441f, 0.887207f, 0.895996f, 0.904785f, 0.911133f,
- 0.916992f, 0.923828f, 0.928223f, 0.933594f, 0.937988f, 0.942871f, 0.946777f, 0.950195f,
- 0.953613f, 0.956543f, 0.959473f, 0.962402f, 0.964844f, 0.967285f, 0.970215f, 0.971680f,
- 0.973633f, 0.976074f, 0.977539f, 0.979492f, 0.980469f, 0.982422f, 0.984863f, 0.985352f,
- 0.986816f, 0.987793f, 0.989258f, 0.990234f, 0.991699f, 0.992676f, 0.994141f, 0.995117f,
- 0.995605f, 0.996582f, 0.998535f, 0.998047f, 0.998047f, 0.997559f, 0.997070f, 0.996582f,
- 0.016159f, 0.055176f, 0.104126f, 0.162720f, 0.229126f, 0.300781f, 0.372803f, 0.442871f,
- 0.506836f, 0.563477f, 0.613281f, 0.657715f, 0.696289f, 0.729004f, 0.757324f, 0.782227f,
- 0.802734f, 0.821289f, 0.837402f, 0.852539f, 0.865234f, 0.875977f, 0.885742f, 0.895508f,
- 0.903320f, 0.910156f, 0.917480f, 0.922852f, 0.928711f, 0.934082f, 0.937988f, 0.942871f,
- 0.947266f, 0.950195f, 0.954102f, 0.957031f, 0.959473f, 0.962402f, 0.964844f, 0.968262f,
- 0.969727f, 0.972168f, 0.974121f, 0.976562f, 0.978516f, 0.979980f, 0.981934f, 0.982910f,
- 0.983887f, 0.985840f, 0.986816f, 0.988770f, 0.989746f, 0.991211f, 0.992188f, 0.993652f,
- 0.994141f, 0.995117f, 0.998047f, 0.997559f, 0.997559f, 0.997070f, 0.996582f, 0.996582f,
- 0.010841f, 0.036865f, 0.070007f, 0.110962f, 0.159546f, 0.214355f, 0.276367f, 0.340576f,
- 0.405029f, 0.465820f, 0.523926f, 0.576172f, 0.623535f, 0.664062f, 0.699707f, 0.731445f,
- 0.758301f, 0.782227f, 0.803223f, 0.821289f, 0.837891f, 0.852051f, 0.864258f, 0.875488f,
- 0.884766f, 0.894531f, 0.903320f, 0.910156f, 0.916992f, 0.923828f, 0.928223f, 0.933594f,
- 0.938477f, 0.943359f, 0.947266f, 0.950684f, 0.954102f, 0.957520f, 0.960449f, 0.962891f,
- 0.965820f, 0.968750f, 0.971191f, 0.973145f, 0.975586f, 0.977539f, 0.978516f, 0.980957f,
- 0.982422f, 0.984375f, 0.985352f, 0.987305f, 0.988281f, 0.989746f, 0.990723f, 0.992188f,
- 0.993164f, 0.994141f, 0.997559f, 0.997559f, 0.997070f, 0.996582f, 0.996582f, 0.996094f,
- 0.007637f, 0.026566f, 0.049896f, 0.078247f, 0.113403f, 0.154663f, 0.202637f, 0.255371f,
- 0.313232f, 0.372314f, 0.431152f, 0.488037f, 0.540039f, 0.588867f, 0.633301f, 0.670898f,
- 0.704102f, 0.734375f, 0.761230f, 0.785156f, 0.804688f, 0.822754f, 0.838867f, 0.852539f,
- 0.864746f, 0.876953f, 0.886230f, 0.895996f, 0.903320f, 0.910645f, 0.917480f, 0.923828f,
- 0.929199f, 0.935059f, 0.938965f, 0.943359f, 0.948730f, 0.952148f, 0.954590f, 0.958496f,
- 0.961426f, 0.964355f, 0.966797f, 0.969238f, 0.971680f, 0.974121f, 0.976074f, 0.978027f,
- 0.979980f, 0.981445f, 0.982910f, 0.984863f, 0.986816f, 0.987793f, 0.989258f, 0.990723f,
- 0.991699f, 0.993164f, 0.996582f, 0.996582f, 0.996094f, 0.996094f, 0.996094f, 0.995605f,
- 0.005714f, 0.019485f, 0.036194f, 0.056976f, 0.082336f, 0.113342f, 0.149048f, 0.191284f,
- 0.238770f, 0.290039f, 0.344727f, 0.400391f, 0.454590f, 0.507324f, 0.557129f, 0.602539f,
- 0.642578f, 0.679199f, 0.711426f, 0.740234f, 0.766602f, 0.788574f, 0.807617f, 0.825195f,
- 0.841309f, 0.854980f, 0.867676f, 0.877930f, 0.888184f, 0.896484f, 0.904785f, 0.912109f,
- 0.918945f, 0.925293f, 0.930176f, 0.935547f, 0.940918f, 0.944336f, 0.948730f, 0.952637f,
- 0.956055f, 0.959473f, 0.962402f, 0.965332f, 0.967773f, 0.970703f, 0.972656f, 0.975098f,
- 0.977051f, 0.979004f, 0.981445f, 0.982910f, 0.984375f, 0.985840f, 0.987793f, 0.989258f,
- 0.990234f, 0.991211f, 0.996094f, 0.996094f, 0.996094f, 0.996094f, 0.995605f, 0.995117f,
- 0.004505f, 0.014908f, 0.027634f, 0.043274f, 0.061707f, 0.084045f, 0.111694f, 0.143921f,
- 0.180542f, 0.223877f, 0.270996f, 0.320557f, 0.373291f, 0.425781f, 0.478027f, 0.526855f,
- 0.573242f, 0.615723f, 0.654785f, 0.688965f, 0.720215f, 0.747559f, 0.771973f, 0.793457f,
- 0.812500f, 0.829102f, 0.844238f, 0.858398f, 0.870117f, 0.881348f, 0.890625f, 0.898926f,
- 0.906738f, 0.914062f, 0.921387f, 0.926758f, 0.932617f, 0.937500f, 0.942383f, 0.945801f,
- 0.950684f, 0.954102f, 0.958008f, 0.960938f, 0.964355f, 0.966797f, 0.969727f, 0.972656f,
- 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.981934f, 0.984375f, 0.985840f, 0.987793f,
- 0.988281f, 0.990234f, 0.995605f, 0.995605f, 0.995605f, 0.995605f, 0.995117f, 0.994629f,
- 0.003691f, 0.011925f, 0.021622f, 0.033203f, 0.047241f, 0.065247f, 0.085266f, 0.109558f,
- 0.138550f, 0.172363f, 0.210205f, 0.253418f, 0.299805f, 0.348877f, 0.400146f, 0.450195f,
- 0.499512f, 0.546387f, 0.589844f, 0.629883f, 0.666016f, 0.700195f, 0.728516f, 0.755371f,
- 0.778320f, 0.798828f, 0.817383f, 0.833984f, 0.848145f, 0.861816f, 0.874023f, 0.883789f,
- 0.893555f, 0.902344f, 0.910645f, 0.916992f, 0.922852f, 0.929688f, 0.934570f, 0.938965f,
- 0.944336f, 0.948730f, 0.951660f, 0.956543f, 0.959473f, 0.962891f, 0.965820f, 0.968262f,
- 0.970703f, 0.974121f, 0.976074f, 0.978516f, 0.979980f, 0.981934f, 0.983887f, 0.985840f,
- 0.987305f, 0.988281f, 0.994629f, 0.995117f, 0.995117f, 0.994629f, 0.994629f, 0.994141f,
- 0.002726f, 0.009560f, 0.017136f, 0.026871f, 0.037415f, 0.050079f, 0.066406f, 0.084717f,
- 0.107849f, 0.133423f, 0.164062f, 0.198853f, 0.238281f, 0.281250f, 0.327148f, 0.375977f,
- 0.424805f, 0.473877f, 0.521973f, 0.564941f, 0.606934f, 0.644531f, 0.679199f, 0.710449f,
- 0.738770f, 0.764160f, 0.786133f, 0.805664f, 0.824219f, 0.838867f, 0.853516f, 0.866211f,
- 0.876953f, 0.887695f, 0.896484f, 0.905762f, 0.912598f, 0.919922f, 0.925781f, 0.932129f,
- 0.937500f, 0.942383f, 0.946777f, 0.951660f, 0.955078f, 0.958984f, 0.961426f, 0.965332f,
- 0.967773f, 0.970703f, 0.972656f, 0.975586f, 0.978027f, 0.979492f, 0.981934f, 0.983887f,
- 0.984863f, 0.986816f, 0.994629f, 0.994629f, 0.994629f, 0.994141f, 0.994141f, 0.993652f,
- 0.002487f, 0.007553f, 0.013863f, 0.021439f, 0.029755f, 0.040771f, 0.052643f, 0.067444f,
- 0.084473f, 0.104980f, 0.128784f, 0.157227f, 0.189087f, 0.224609f, 0.265381f, 0.308838f,
- 0.354004f, 0.401611f, 0.450439f, 0.496582f, 0.541992f, 0.583984f, 0.623047f, 0.660645f,
- 0.693359f, 0.722168f, 0.749512f, 0.772949f, 0.793457f, 0.812988f, 0.830078f, 0.845215f,
- 0.859375f, 0.871094f, 0.882812f, 0.892090f, 0.900879f, 0.908691f, 0.916504f, 0.922852f,
- 0.930176f, 0.935547f, 0.940430f, 0.944824f, 0.949219f, 0.952637f, 0.956543f, 0.960449f,
- 0.963867f, 0.967285f, 0.970215f, 0.972656f, 0.974609f, 0.977539f, 0.979492f, 0.981934f,
- 0.983887f, 0.985352f, 0.993652f, 0.994141f, 0.994141f, 0.993652f, 0.993652f, 0.993164f,
- 0.001893f, 0.006641f, 0.011551f, 0.017319f, 0.024612f, 0.032959f, 0.042023f, 0.053772f,
- 0.067444f, 0.083435f, 0.102356f, 0.123840f, 0.150024f, 0.179688f, 0.213501f, 0.250488f,
- 0.291992f, 0.335938f, 0.381592f, 0.427246f, 0.473877f, 0.518555f, 0.563477f, 0.603027f,
- 0.640625f, 0.676270f, 0.707031f, 0.735352f, 0.760254f, 0.782715f, 0.802734f, 0.821777f,
- 0.838379f, 0.851562f, 0.865234f, 0.876953f, 0.886719f, 0.896484f, 0.905273f, 0.913086f,
- 0.921387f, 0.927734f, 0.933105f, 0.938477f, 0.942871f, 0.948242f, 0.951660f, 0.955566f,
- 0.959961f, 0.963867f, 0.966309f, 0.969238f, 0.972168f, 0.975098f, 0.977539f, 0.979492f,
- 0.981934f, 0.983887f, 0.993164f, 0.993652f, 0.993164f, 0.993164f, 0.993164f, 0.992676f,
- 0.001740f, 0.005634f, 0.009407f, 0.014992f, 0.020157f, 0.026840f, 0.035156f, 0.043793f,
- 0.054718f, 0.067505f, 0.082092f, 0.099731f, 0.120239f, 0.143921f, 0.171265f, 0.202393f,
- 0.237915f, 0.276367f, 0.318848f, 0.362793f, 0.407959f, 0.454346f, 0.499023f, 0.542480f,
- 0.583984f, 0.623535f, 0.659180f, 0.691895f, 0.721680f, 0.748047f, 0.772461f, 0.793457f,
- 0.812988f, 0.829102f, 0.845215f, 0.859863f, 0.872559f, 0.883789f, 0.893555f, 0.902344f,
- 0.911133f, 0.918457f, 0.924805f, 0.930664f, 0.937012f, 0.941895f, 0.947266f, 0.951172f,
- 0.956055f, 0.959473f, 0.962402f, 0.966309f, 0.968750f, 0.972168f, 0.974609f, 0.977051f,
- 0.979492f, 0.981934f, 0.992188f, 0.992676f, 0.992676f, 0.992676f, 0.992188f, 0.992676f,
- 0.001502f, 0.004482f, 0.008278f, 0.012276f, 0.016800f, 0.022644f, 0.029129f, 0.036194f,
- 0.045197f, 0.055298f, 0.067017f, 0.080750f, 0.096863f, 0.115906f, 0.138184f, 0.163940f,
- 0.192993f, 0.225952f, 0.262695f, 0.302490f, 0.344971f, 0.389648f, 0.434814f, 0.480469f,
- 0.523926f, 0.566406f, 0.605957f, 0.643066f, 0.677246f, 0.708496f, 0.736816f, 0.761719f,
- 0.784668f, 0.804688f, 0.823242f, 0.840332f, 0.854004f, 0.867188f, 0.878906f, 0.890137f,
- 0.898438f, 0.907715f, 0.916016f, 0.922852f, 0.930176f, 0.935547f, 0.940918f, 0.946289f,
- 0.950684f, 0.955078f, 0.959473f, 0.961914f, 0.966309f, 0.969238f, 0.972168f, 0.974609f,
- 0.977539f, 0.979492f, 0.991211f, 0.992188f, 0.991699f, 0.992188f, 0.991699f, 0.991211f,
- 0.001411f, 0.003645f, 0.007160f, 0.010414f, 0.014397f, 0.018677f, 0.024338f, 0.030426f,
- 0.037384f, 0.045654f, 0.055054f, 0.066101f, 0.079529f, 0.094543f, 0.112793f, 0.133057f,
- 0.157227f, 0.183960f, 0.215210f, 0.250488f, 0.288086f, 0.329102f, 0.372314f, 0.416992f,
- 0.461914f, 0.505859f, 0.549316f, 0.589355f, 0.627930f, 0.664062f, 0.695801f, 0.725098f,
- 0.752441f, 0.775879f, 0.797363f, 0.815918f, 0.833984f, 0.849121f, 0.863281f, 0.875488f,
- 0.886230f, 0.895996f, 0.904785f, 0.914062f, 0.920898f, 0.928223f, 0.935059f, 0.940918f,
- 0.945312f, 0.950195f, 0.954102f, 0.958984f, 0.962402f, 0.966309f, 0.969238f, 0.972656f,
- 0.974609f, 0.977539f, 0.990234f, 0.992188f, 0.991211f, 0.991211f, 0.990723f, 0.991211f,
- 0.000926f, 0.003523f, 0.006207f, 0.008949f, 0.012718f, 0.016312f, 0.020447f, 0.025467f,
- 0.031128f, 0.037994f, 0.045532f, 0.054901f, 0.065430f, 0.077576f, 0.091797f, 0.109131f,
- 0.128418f, 0.151245f, 0.176636f, 0.206055f, 0.238525f, 0.275146f, 0.314697f, 0.357178f,
- 0.400391f, 0.445312f, 0.489746f, 0.531738f, 0.574219f, 0.613281f, 0.650391f, 0.683594f,
- 0.714355f, 0.742188f, 0.768066f, 0.790039f, 0.810059f, 0.828125f, 0.843262f, 0.858398f,
- 0.871582f, 0.883789f, 0.893555f, 0.903809f, 0.912598f, 0.919434f, 0.926758f, 0.933594f,
- 0.939453f, 0.944336f, 0.950195f, 0.954590f, 0.958008f, 0.962402f, 0.966309f, 0.969727f,
- 0.972656f, 0.975586f, 0.989746f, 0.990723f, 0.990723f, 0.990234f, 0.990234f, 0.990234f,
- 0.001140f, 0.003021f, 0.005527f, 0.008102f, 0.010445f, 0.013977f, 0.017349f, 0.021637f,
- 0.026535f, 0.031677f, 0.038330f, 0.045776f, 0.054382f, 0.064392f, 0.076233f, 0.089844f,
- 0.105713f, 0.123840f, 0.145020f, 0.169556f, 0.196899f, 0.229248f, 0.263672f, 0.302002f,
- 0.342529f, 0.385986f, 0.429932f, 0.473877f, 0.517578f, 0.560547f, 0.600586f, 0.638184f,
- 0.672852f, 0.704590f, 0.733398f, 0.759277f, 0.782715f, 0.803711f, 0.823242f, 0.840820f,
- 0.854980f, 0.869141f, 0.881348f, 0.892090f, 0.902344f, 0.910645f, 0.919922f, 0.927246f,
- 0.933105f, 0.938965f, 0.944824f, 0.949707f, 0.954102f, 0.959473f, 0.962891f, 0.966309f,
- 0.969727f, 0.972168f, 0.988770f, 0.990234f, 0.989746f, 0.989746f, 0.989746f, 0.989258f,
- 0.000870f, 0.002666f, 0.004578f, 0.006737f, 0.009430f, 0.012077f, 0.015381f, 0.018463f,
- 0.022293f, 0.027313f, 0.032654f, 0.038727f, 0.045746f, 0.053619f, 0.063232f, 0.074524f,
- 0.087219f, 0.102356f, 0.119324f, 0.139648f, 0.162842f, 0.189941f, 0.219482f, 0.253174f,
- 0.289795f, 0.329346f, 0.372070f, 0.415039f, 0.459717f, 0.503418f, 0.546387f, 0.587402f,
- 0.625977f, 0.661621f, 0.694336f, 0.725586f, 0.752441f, 0.776855f, 0.798828f, 0.818359f,
- 0.837402f, 0.852539f, 0.866699f, 0.878906f, 0.891113f, 0.900879f, 0.910156f, 0.918457f,
- 0.926270f, 0.932617f, 0.938965f, 0.944824f, 0.950195f, 0.955078f, 0.958984f, 0.962891f,
- 0.966797f, 0.970703f, 0.987793f, 0.988770f, 0.989258f, 0.989258f, 0.988770f, 0.988770f,
- 0.000835f, 0.002302f, 0.004078f, 0.005802f, 0.008026f, 0.010490f, 0.013153f, 0.016235f,
- 0.019485f, 0.023636f, 0.027847f, 0.033081f, 0.038849f, 0.045441f, 0.053253f, 0.062500f,
- 0.072571f, 0.085205f, 0.098999f, 0.115662f, 0.135254f, 0.156860f, 0.182373f, 0.211060f,
- 0.243042f, 0.279053f, 0.318115f, 0.359619f, 0.402832f, 0.447021f, 0.490234f, 0.533691f,
- 0.575195f, 0.615234f, 0.651855f, 0.686035f, 0.717285f, 0.746094f, 0.771484f, 0.793945f,
- 0.813965f, 0.833496f, 0.848633f, 0.864258f, 0.877930f, 0.889648f, 0.900391f, 0.909180f,
- 0.918945f, 0.926270f, 0.932129f, 0.939453f, 0.945312f, 0.950684f, 0.955566f, 0.959473f,
- 0.963867f, 0.967773f, 0.987305f, 0.988281f, 0.988281f, 0.988281f, 0.988281f, 0.987793f,
- 0.000815f, 0.001984f, 0.003475f, 0.005302f, 0.007103f, 0.009354f, 0.011528f, 0.013977f,
- 0.017197f, 0.020111f, 0.023788f, 0.027771f, 0.033447f, 0.038452f, 0.045013f, 0.052704f,
- 0.061066f, 0.071228f, 0.082886f, 0.096313f, 0.112488f, 0.130737f, 0.151245f, 0.175659f,
- 0.203125f, 0.234619f, 0.269043f, 0.306885f, 0.347656f, 0.390381f, 0.434570f, 0.478760f,
- 0.522461f, 0.564453f, 0.605957f, 0.644043f, 0.678223f, 0.710449f, 0.739746f, 0.766602f,
- 0.791016f, 0.811035f, 0.831055f, 0.847168f, 0.862793f, 0.875977f, 0.888672f, 0.899414f,
- 0.909180f, 0.917480f, 0.926270f, 0.933105f, 0.939941f, 0.945801f, 0.950684f, 0.955566f,
- 0.960938f, 0.964844f, 0.985840f, 0.987305f, 0.987793f, 0.987305f, 0.987305f, 0.987305f,
- 0.000587f, 0.002005f, 0.003122f, 0.004707f, 0.006283f, 0.007778f, 0.009972f, 0.012581f,
- 0.014435f, 0.017426f, 0.020691f, 0.024475f, 0.028519f, 0.033203f, 0.038513f, 0.044708f,
- 0.051727f, 0.060028f, 0.069763f, 0.080627f, 0.093506f, 0.109009f, 0.125977f, 0.146362f,
- 0.169678f, 0.196533f, 0.226685f, 0.259766f, 0.297119f, 0.337646f, 0.380127f, 0.424072f,
- 0.468018f, 0.512207f, 0.555176f, 0.596680f, 0.635254f, 0.671387f, 0.704590f, 0.734863f,
- 0.762207f, 0.787109f, 0.809082f, 0.828613f, 0.846191f, 0.860840f, 0.875977f, 0.888184f,
- 0.899902f, 0.908691f, 0.918457f, 0.926270f, 0.934082f, 0.940430f, 0.947266f, 0.951660f,
- 0.958008f, 0.961914f, 0.984863f, 0.986328f, 0.986816f, 0.986816f, 0.986328f, 0.986328f,
- 0.000475f, 0.001671f, 0.003019f, 0.004379f, 0.005592f, 0.006882f, 0.008682f, 0.010757f,
- 0.012856f, 0.015343f, 0.018112f, 0.021164f, 0.024353f, 0.028595f, 0.033020f, 0.038086f,
- 0.044006f, 0.050812f, 0.058594f, 0.067993f, 0.078735f, 0.091248f, 0.105530f, 0.122009f,
- 0.142212f, 0.164062f, 0.189697f, 0.219238f, 0.251953f, 0.288330f, 0.328125f, 0.369629f,
- 0.413818f, 0.458008f, 0.503418f, 0.547363f, 0.588867f, 0.628418f, 0.665039f, 0.699707f,
- 0.730469f, 0.758301f, 0.784668f, 0.807129f, 0.826660f, 0.844727f, 0.862305f, 0.875977f,
- 0.888672f, 0.900879f, 0.910156f, 0.919434f, 0.927734f, 0.935059f, 0.941406f, 0.947754f,
- 0.953125f, 0.958496f, 0.983887f, 0.985352f, 0.985352f, 0.985352f, 0.984863f, 0.985352f,
- 0.000325f, 0.001517f, 0.002554f, 0.003811f, 0.004990f, 0.006638f, 0.007706f, 0.009399f,
- 0.011177f, 0.013580f, 0.015671f, 0.018478f, 0.021393f, 0.024612f, 0.028442f, 0.032990f,
- 0.037750f, 0.043427f, 0.050354f, 0.057861f, 0.066101f, 0.076294f, 0.088684f, 0.102417f,
- 0.119080f, 0.137451f, 0.159058f, 0.183838f, 0.212524f, 0.244385f, 0.280273f, 0.319336f,
- 0.361084f, 0.405029f, 0.449707f, 0.494873f, 0.539551f, 0.582031f, 0.622559f, 0.660156f,
- 0.695801f, 0.727539f, 0.756348f, 0.782715f, 0.805664f, 0.826172f, 0.845215f, 0.861328f,
- 0.875977f, 0.889648f, 0.901367f, 0.910645f, 0.920410f, 0.928711f, 0.937012f, 0.942871f,
- 0.949219f, 0.955078f, 0.982422f, 0.983887f, 0.984375f, 0.984375f, 0.983887f, 0.983887f,
- 0.000349f, 0.001533f, 0.002413f, 0.003326f, 0.004463f, 0.005524f, 0.006954f, 0.008202f,
- 0.010025f, 0.011864f, 0.013924f, 0.015884f, 0.018478f, 0.021484f, 0.024658f, 0.028671f,
- 0.032562f, 0.037170f, 0.042969f, 0.049194f, 0.056641f, 0.065063f, 0.074951f, 0.086182f,
- 0.099731f, 0.115662f, 0.133789f, 0.154175f, 0.178589f, 0.206421f, 0.237671f, 0.272949f,
- 0.312012f, 0.352783f, 0.396973f, 0.442627f, 0.487793f, 0.532227f, 0.576660f, 0.617188f,
- 0.657227f, 0.692383f, 0.725586f, 0.754395f, 0.780762f, 0.805664f, 0.826172f, 0.845215f,
- 0.861816f, 0.876465f, 0.890137f, 0.902344f, 0.912598f, 0.921875f, 0.930176f, 0.937988f,
- 0.945312f, 0.952148f, 0.981445f, 0.982910f, 0.982910f, 0.983398f, 0.983398f, 0.983398f,
- 0.000475f, 0.001141f, 0.002058f, 0.002846f, 0.004120f, 0.005013f, 0.006207f, 0.007664f,
- 0.009193f, 0.010368f, 0.012222f, 0.014404f, 0.016403f, 0.018799f, 0.021439f, 0.024567f,
- 0.028076f, 0.032379f, 0.036652f, 0.042145f, 0.048157f, 0.055389f, 0.063660f, 0.073059f,
- 0.083740f, 0.097046f, 0.112366f, 0.129517f, 0.149780f, 0.173584f, 0.200684f, 0.231812f,
- 0.266357f, 0.304688f, 0.346680f, 0.390137f, 0.435547f, 0.481445f, 0.526367f, 0.572266f,
- 0.613770f, 0.653320f, 0.690430f, 0.723633f, 0.754395f, 0.781250f, 0.806152f, 0.826172f,
- 0.847168f, 0.862793f, 0.878906f, 0.892090f, 0.904297f, 0.914551f, 0.924316f, 0.933105f,
- 0.940430f, 0.947754f, 0.979492f, 0.981934f, 0.981934f, 0.981934f, 0.981445f, 0.981445f,
- 0.000239f, 0.000882f, 0.001744f, 0.002878f, 0.003819f, 0.004532f, 0.005550f, 0.006653f,
- 0.007942f, 0.009277f, 0.010628f, 0.012421f, 0.014397f, 0.016312f, 0.018845f, 0.021576f,
- 0.024536f, 0.027817f, 0.031860f, 0.036346f, 0.041595f, 0.047333f, 0.054138f, 0.062317f,
- 0.071350f, 0.081970f, 0.094299f, 0.109070f, 0.126221f, 0.146118f, 0.169067f, 0.195801f,
- 0.226196f, 0.260742f, 0.298584f, 0.340088f, 0.384277f, 0.429688f, 0.476807f, 0.522461f,
- 0.568359f, 0.611328f, 0.651855f, 0.689453f, 0.723633f, 0.754395f, 0.782715f, 0.807617f,
- 0.829590f, 0.848145f, 0.865723f, 0.880859f, 0.894531f, 0.906738f, 0.917969f, 0.927246f,
- 0.936035f, 0.943359f, 0.978027f, 0.979980f, 0.980469f, 0.980469f, 0.980469f, 0.980469f,
- 0.000240f, 0.000948f, 0.001495f, 0.002592f, 0.003241f, 0.004055f, 0.004856f, 0.006111f,
- 0.007133f, 0.008125f, 0.009445f, 0.011108f, 0.012474f, 0.014374f, 0.016586f, 0.018784f,
- 0.021286f, 0.024475f, 0.027481f, 0.031403f, 0.035828f, 0.040710f, 0.046204f, 0.052704f,
- 0.060577f, 0.069519f, 0.079651f, 0.092224f, 0.106506f, 0.122986f, 0.142456f, 0.165161f,
- 0.191284f, 0.221924f, 0.255615f, 0.293457f, 0.335205f, 0.379395f, 0.425537f, 0.472900f,
- 0.519531f, 0.566406f, 0.610840f, 0.652344f, 0.689941f, 0.724609f, 0.755371f, 0.784180f,
- 0.808594f, 0.831055f, 0.851562f, 0.869141f, 0.884277f, 0.897461f, 0.909668f, 0.920410f,
- 0.930176f, 0.937988f, 0.976562f, 0.979004f, 0.979492f, 0.979492f, 0.979492f, 0.979492f,
- 0.000302f, 0.000863f, 0.001315f, 0.002195f, 0.002905f, 0.003592f, 0.004784f, 0.005478f,
- 0.006199f, 0.007389f, 0.008545f, 0.009811f, 0.011185f, 0.012787f, 0.014603f, 0.016342f,
- 0.018784f, 0.021347f, 0.024033f, 0.027496f, 0.031006f, 0.034790f, 0.039856f, 0.045288f,
- 0.051636f, 0.059052f, 0.067566f, 0.078003f, 0.089905f, 0.103760f, 0.119934f, 0.139282f,
- 0.161865f, 0.187622f, 0.217407f, 0.251221f, 0.288818f, 0.330811f, 0.375244f, 0.422607f,
- 0.470703f, 0.518066f, 0.565430f, 0.609863f, 0.651855f, 0.691406f, 0.726562f, 0.758301f,
- 0.787109f, 0.812500f, 0.835449f, 0.855957f, 0.872559f, 0.887695f, 0.901367f, 0.913574f,
- 0.923828f, 0.933105f, 0.975098f, 0.977539f, 0.977539f, 0.977539f, 0.978027f, 0.977051f,
- 0.000240f, 0.000808f, 0.001537f, 0.002106f, 0.002493f, 0.003729f, 0.004036f, 0.004982f,
- 0.005539f, 0.006454f, 0.007526f, 0.008690f, 0.009987f, 0.011421f, 0.012894f, 0.014618f,
- 0.016464f, 0.018539f, 0.021118f, 0.023865f, 0.026794f, 0.030487f, 0.034241f, 0.038879f,
- 0.044067f, 0.050690f, 0.057678f, 0.066040f, 0.076111f, 0.087524f, 0.101379f, 0.117737f,
- 0.136353f, 0.158325f, 0.183594f, 0.213501f, 0.247192f, 0.284912f, 0.327393f, 0.372803f,
- 0.420410f, 0.468750f, 0.518066f, 0.565430f, 0.611328f, 0.654297f, 0.694336f, 0.729980f,
- 0.762207f, 0.791504f, 0.817383f, 0.839844f, 0.859863f, 0.876953f, 0.891602f, 0.905762f,
- 0.917480f, 0.928711f, 0.973633f, 0.975098f, 0.976562f, 0.975586f, 0.976562f, 0.976562f,
- 0.000240f, 0.000587f, 0.001223f, 0.001691f, 0.002499f, 0.003008f, 0.003643f, 0.004295f,
- 0.004795f, 0.005726f, 0.006649f, 0.007671f, 0.008766f, 0.010002f, 0.011307f, 0.012764f,
- 0.014465f, 0.016388f, 0.018387f, 0.020599f, 0.023453f, 0.026291f, 0.029572f, 0.033417f,
- 0.037964f, 0.043427f, 0.049316f, 0.056519f, 0.064819f, 0.074219f, 0.085693f, 0.099121f,
- 0.115112f, 0.133301f, 0.155273f, 0.180420f, 0.210205f, 0.244751f, 0.282715f, 0.324951f,
- 0.371338f, 0.419434f, 0.468994f, 0.518555f, 0.566895f, 0.613770f, 0.658203f, 0.698242f,
- 0.735352f, 0.766602f, 0.796875f, 0.821289f, 0.844238f, 0.863770f, 0.881836f, 0.896973f,
- 0.910156f, 0.922363f, 0.971191f, 0.974121f, 0.974609f, 0.974121f, 0.974609f, 0.974609f,
- 0.000228f, 0.000671f, 0.001122f, 0.001607f, 0.002291f, 0.002836f, 0.003319f, 0.003817f,
- 0.004509f, 0.005253f, 0.005894f, 0.006840f, 0.007820f, 0.008972f, 0.010086f, 0.011391f,
- 0.012848f, 0.014328f, 0.016266f, 0.018158f, 0.020447f, 0.022720f, 0.026031f, 0.029053f,
- 0.032593f, 0.037109f, 0.042236f, 0.048340f, 0.055115f, 0.063049f, 0.072632f, 0.083801f,
- 0.097351f, 0.112488f, 0.130493f, 0.152222f, 0.178101f, 0.208008f, 0.241943f, 0.280762f,
- 0.323730f, 0.370117f, 0.419434f, 0.470459f, 0.520996f, 0.570801f, 0.617676f, 0.663086f,
- 0.704102f, 0.740234f, 0.773438f, 0.802246f, 0.829102f, 0.850098f, 0.870117f, 0.887695f,
- 0.902832f, 0.916016f, 0.969238f, 0.972168f, 0.972168f, 0.972656f, 0.972656f, 0.972168f,
- 0.000121f, 0.000526f, 0.001092f, 0.001670f, 0.001744f, 0.002420f, 0.002945f, 0.003237f,
- 0.004013f, 0.004894f, 0.005421f, 0.005932f, 0.006996f, 0.007904f, 0.008873f, 0.009995f,
- 0.011391f, 0.012756f, 0.014053f, 0.015884f, 0.017715f, 0.019775f, 0.022324f, 0.025406f,
- 0.028290f, 0.032349f, 0.036560f, 0.041412f, 0.047058f, 0.053772f, 0.061493f, 0.070862f,
- 0.081848f, 0.094666f, 0.110229f, 0.128662f, 0.150024f, 0.175903f, 0.205566f, 0.239990f,
- 0.279785f, 0.323486f, 0.370850f, 0.421143f, 0.473633f, 0.524902f, 0.576172f, 0.625000f,
- 0.668457f, 0.710938f, 0.748535f, 0.781250f, 0.810059f, 0.835449f, 0.857910f, 0.877441f,
- 0.894531f, 0.908691f, 0.966797f, 0.970215f, 0.970703f, 0.970703f, 0.970703f, 0.970215f,
- 0.000127f, 0.000521f, 0.001083f, 0.001460f, 0.001684f, 0.002111f, 0.002563f, 0.003048f,
- 0.003618f, 0.004124f, 0.004936f, 0.005543f, 0.006340f, 0.007111f, 0.008049f, 0.008774f,
- 0.009865f, 0.011162f, 0.012360f, 0.013840f, 0.015465f, 0.017181f, 0.019531f, 0.021973f,
- 0.024582f, 0.027847f, 0.031342f, 0.035706f, 0.040100f, 0.045990f, 0.052521f, 0.060089f,
- 0.069214f, 0.080017f, 0.093079f, 0.108521f, 0.126709f, 0.148071f, 0.174072f, 0.204224f,
- 0.239502f, 0.279541f, 0.324219f, 0.373047f, 0.424805f, 0.477295f, 0.530762f, 0.583008f,
- 0.632324f, 0.677246f, 0.719727f, 0.756348f, 0.789551f, 0.819336f, 0.842773f, 0.866211f,
- 0.885742f, 0.901855f, 0.965332f, 0.967773f, 0.968262f, 0.967773f, 0.968750f, 0.968262f,
- 0.000244f, 0.000397f, 0.001001f, 0.001181f, 0.001642f, 0.001872f, 0.002460f, 0.002712f,
- 0.003061f, 0.003723f, 0.004520f, 0.005043f, 0.005547f, 0.006451f, 0.007057f, 0.007828f,
- 0.008942f, 0.009872f, 0.010857f, 0.012131f, 0.013557f, 0.015198f, 0.017059f, 0.019241f,
- 0.021454f, 0.024048f, 0.027069f, 0.030594f, 0.034332f, 0.039001f, 0.044952f, 0.050873f,
- 0.058716f, 0.067505f, 0.078369f, 0.091309f, 0.106506f, 0.124695f, 0.146484f, 0.172852f,
- 0.203369f, 0.239014f, 0.280273f, 0.326172f, 0.376465f, 0.429443f, 0.483643f, 0.538574f,
- 0.591309f, 0.641602f, 0.687500f, 0.729492f, 0.766602f, 0.800293f, 0.828613f, 0.854004f,
- 0.874512f, 0.893555f, 0.961914f, 0.965332f, 0.965820f, 0.966309f, 0.966309f, 0.965820f,
- 0.000243f, 0.000453f, 0.000888f, 0.001245f, 0.001342f, 0.001847f, 0.002060f, 0.002541f,
- 0.002991f, 0.003355f, 0.003679f, 0.004379f, 0.005177f, 0.005413f, 0.006283f, 0.007038f,
- 0.007896f, 0.008507f, 0.009552f, 0.010628f, 0.011909f, 0.013306f, 0.015038f, 0.016388f,
- 0.018433f, 0.020752f, 0.023254f, 0.026413f, 0.029617f, 0.033447f, 0.037842f, 0.043701f,
- 0.049896f, 0.057190f, 0.066101f, 0.076660f, 0.089600f, 0.104553f, 0.123230f, 0.145386f,
- 0.171387f, 0.202637f, 0.239624f, 0.281982f, 0.329346f, 0.380859f, 0.436035f, 0.491943f,
- 0.547852f, 0.602539f, 0.653809f, 0.699707f, 0.741699f, 0.778320f, 0.811035f, 0.838867f,
- 0.862793f, 0.884766f, 0.959961f, 0.963379f, 0.963379f, 0.963379f, 0.964355f, 0.963379f,
- 0.000241f, 0.000452f, 0.000798f, 0.001119f, 0.001220f, 0.001430f, 0.001902f, 0.002277f,
- 0.002737f, 0.002893f, 0.003624f, 0.003937f, 0.004436f, 0.005089f, 0.005669f, 0.006226f,
- 0.006680f, 0.007519f, 0.008568f, 0.009384f, 0.010422f, 0.011795f, 0.012840f, 0.014526f,
- 0.016235f, 0.017929f, 0.020218f, 0.022736f, 0.025146f, 0.028580f, 0.032684f, 0.036896f,
- 0.042511f, 0.048431f, 0.055634f, 0.064453f, 0.075317f, 0.088196f, 0.103333f, 0.121948f,
- 0.144287f, 0.171143f, 0.203491f, 0.241577f, 0.285156f, 0.334229f, 0.387939f, 0.444580f,
- 0.501953f, 0.559570f, 0.614746f, 0.666504f, 0.712402f, 0.755371f, 0.791504f, 0.823242f,
- 0.851074f, 0.875000f, 0.956543f, 0.959961f, 0.960938f, 0.960449f, 0.960449f, 0.960449f,
- 0.000000f, 0.000263f, 0.000693f, 0.000873f, 0.001183f, 0.001447f, 0.001476f, 0.002068f,
- 0.002171f, 0.002857f, 0.003164f, 0.003542f, 0.003778f, 0.004326f, 0.004906f, 0.005436f,
- 0.006126f, 0.006687f, 0.007229f, 0.008377f, 0.009232f, 0.010223f, 0.011436f, 0.012527f,
- 0.013832f, 0.015747f, 0.017365f, 0.019363f, 0.021667f, 0.024231f, 0.027695f, 0.031769f,
- 0.035889f, 0.041016f, 0.047028f, 0.054504f, 0.063110f, 0.073975f, 0.086487f, 0.101807f,
- 0.120972f, 0.143555f, 0.171753f, 0.204956f, 0.244263f, 0.289551f, 0.340576f, 0.396484f,
- 0.455078f, 0.514648f, 0.573730f, 0.630371f, 0.681152f, 0.729004f, 0.770020f, 0.806641f,
- 0.837402f, 0.863770f, 0.953613f, 0.956543f, 0.957520f, 0.957031f, 0.957031f, 0.958008f,
- 0.000000f, 0.000356f, 0.000641f, 0.000870f, 0.000998f, 0.001134f, 0.001495f, 0.001724f,
- 0.002436f, 0.002478f, 0.002775f, 0.003113f, 0.003435f, 0.003864f, 0.004314f, 0.004704f,
- 0.005276f, 0.005886f, 0.006599f, 0.007309f, 0.008003f, 0.008987f, 0.009987f, 0.010941f,
- 0.012192f, 0.013466f, 0.015030f, 0.016708f, 0.018906f, 0.021103f, 0.023788f, 0.026886f,
- 0.030457f, 0.034943f, 0.040009f, 0.045959f, 0.053162f, 0.061920f, 0.072144f, 0.085205f,
- 0.101257f, 0.120422f, 0.143555f, 0.172363f, 0.206909f, 0.248047f, 0.295410f, 0.349121f,
- 0.407715f, 0.468750f, 0.530762f, 0.589844f, 0.647949f, 0.699707f, 0.746094f, 0.786621f,
- 0.823242f, 0.852051f, 0.950195f, 0.953125f, 0.954102f, 0.954102f, 0.954102f, 0.954102f,
- 0.000231f, 0.000449f, 0.000516f, 0.000760f, 0.000868f, 0.001152f, 0.001403f, 0.001773f,
- 0.002165f, 0.002245f, 0.002550f, 0.002783f, 0.003277f, 0.003660f, 0.003782f, 0.004120f,
- 0.004631f, 0.005268f, 0.005795f, 0.006344f, 0.007053f, 0.007835f, 0.008598f, 0.009460f,
- 0.010689f, 0.011551f, 0.012726f, 0.014359f, 0.016052f, 0.017975f, 0.020218f, 0.022812f,
- 0.025803f, 0.029251f, 0.033386f, 0.038574f, 0.044556f, 0.051941f, 0.060577f, 0.071045f,
- 0.084106f, 0.100342f, 0.119751f, 0.144043f, 0.174194f, 0.209961f, 0.253418f, 0.303467f,
- 0.359619f, 0.420898f, 0.483887f, 0.547852f, 0.609375f, 0.667480f, 0.719727f, 0.765625f,
- 0.804688f, 0.839844f, 0.946289f, 0.949707f, 0.950195f, 0.950684f, 0.950684f, 0.950195f,
- 0.000201f, 0.000336f, 0.000452f, 0.000627f, 0.000793f, 0.000966f, 0.001134f, 0.001578f,
- 0.001790f, 0.001896f, 0.002254f, 0.002464f, 0.002825f, 0.003012f, 0.003414f, 0.003626f,
- 0.004131f, 0.004608f, 0.005058f, 0.005642f, 0.006191f, 0.006771f, 0.007378f, 0.008057f,
- 0.009132f, 0.009918f, 0.010826f, 0.012314f, 0.013794f, 0.015381f, 0.017197f, 0.019257f,
- 0.021912f, 0.024841f, 0.028259f, 0.032318f, 0.037262f, 0.043427f, 0.050537f, 0.059021f,
- 0.070007f, 0.083191f, 0.099609f, 0.120239f, 0.145508f, 0.176636f, 0.214600f, 0.260254f,
- 0.313232f, 0.372803f, 0.437012f, 0.503418f, 0.568359f, 0.631836f, 0.688965f, 0.741211f,
- 0.786621f, 0.825195f, 0.941406f, 0.946289f, 0.946289f, 0.946777f, 0.946289f, 0.947266f,
- 0.000000f, 0.000317f, 0.000445f, 0.000453f, 0.000781f, 0.000794f, 0.001183f, 0.001289f,
- 0.001479f, 0.001832f, 0.001874f, 0.002256f, 0.002270f, 0.002716f, 0.002960f, 0.003273f,
- 0.003630f, 0.003948f, 0.004467f, 0.004833f, 0.005451f, 0.005962f, 0.006367f, 0.007088f,
- 0.007717f, 0.008400f, 0.009506f, 0.010445f, 0.011658f, 0.012993f, 0.014618f, 0.016357f,
- 0.018524f, 0.021210f, 0.023712f, 0.027252f, 0.031219f, 0.036041f, 0.041962f, 0.049194f,
- 0.057892f, 0.068604f, 0.082642f, 0.099304f, 0.120728f, 0.147217f, 0.180054f, 0.221191f,
- 0.269287f, 0.325928f, 0.388916f, 0.457275f, 0.525391f, 0.593262f, 0.657715f, 0.714355f,
- 0.766113f, 0.809082f, 0.937500f, 0.940918f, 0.941895f, 0.941895f, 0.941895f, 0.942383f,
- 0.000243f, 0.000238f, 0.000411f, 0.000532f, 0.000530f, 0.000764f, 0.000853f, 0.001171f,
- 0.001417f, 0.001545f, 0.001799f, 0.001900f, 0.002094f, 0.002354f, 0.002577f, 0.002703f,
- 0.003155f, 0.003428f, 0.003809f, 0.004227f, 0.004677f, 0.004997f, 0.005386f, 0.005913f,
- 0.006741f, 0.007225f, 0.008057f, 0.008873f, 0.009819f, 0.011101f, 0.012253f, 0.013725f,
- 0.015488f, 0.017410f, 0.019791f, 0.022598f, 0.025635f, 0.030014f, 0.034973f, 0.040527f,
- 0.047729f, 0.056702f, 0.067505f, 0.081848f, 0.099609f, 0.121521f, 0.149902f, 0.185181f,
- 0.228516f, 0.280762f, 0.341553f, 0.408936f, 0.480225f, 0.552246f, 0.622070f, 0.686035f,
- 0.742188f, 0.792480f, 0.932129f, 0.935547f, 0.937012f, 0.937012f, 0.936523f, 0.937500f,
- 0.000000f, 0.000232f, 0.000330f, 0.000512f, 0.000523f, 0.000907f, 0.000953f, 0.001018f,
- 0.001234f, 0.001344f, 0.001610f, 0.001612f, 0.001845f, 0.002054f, 0.002218f, 0.002453f,
- 0.002829f, 0.003105f, 0.003300f, 0.003712f, 0.003853f, 0.004280f, 0.004631f, 0.005112f,
- 0.005665f, 0.006279f, 0.006779f, 0.007481f, 0.008362f, 0.009270f, 0.010338f, 0.011505f,
- 0.012848f, 0.014549f, 0.016403f, 0.018936f, 0.021622f, 0.024750f, 0.028900f, 0.033447f,
- 0.039185f, 0.046448f, 0.055603f, 0.067078f, 0.081238f, 0.100037f, 0.123230f, 0.153564f,
- 0.191284f, 0.238525f, 0.295166f, 0.361084f, 0.432861f, 0.507812f, 0.582520f, 0.653320f,
- 0.717285f, 0.772461f, 0.926270f, 0.931152f, 0.931152f, 0.932129f, 0.932129f, 0.932129f,
- 0.000118f, 0.000219f, 0.000227f, 0.000405f, 0.000689f, 0.000726f, 0.000910f, 0.000847f,
- 0.001072f, 0.001114f, 0.001388f, 0.001447f, 0.001656f, 0.001811f, 0.001897f, 0.002253f,
- 0.002373f, 0.002617f, 0.002796f, 0.003054f, 0.003414f, 0.003681f, 0.003929f, 0.004353f,
- 0.004902f, 0.005322f, 0.005863f, 0.006424f, 0.007000f, 0.007755f, 0.008675f, 0.009506f,
- 0.010704f, 0.012215f, 0.013557f, 0.015686f, 0.017807f, 0.020630f, 0.023376f, 0.027328f,
- 0.032013f, 0.038177f, 0.045288f, 0.054626f, 0.066284f, 0.081543f, 0.100891f, 0.125977f,
- 0.158447f, 0.199951f, 0.251465f, 0.313965f, 0.384521f, 0.461670f, 0.540527f, 0.617188f,
- 0.688965f, 0.750977f, 0.920410f, 0.924805f, 0.925781f, 0.926270f, 0.926758f, 0.925781f,
- 0.000230f, 0.000198f, 0.000217f, 0.000338f, 0.000584f, 0.000786f, 0.000699f, 0.000893f,
- 0.000954f, 0.000959f, 0.001153f, 0.001165f, 0.001375f, 0.001545f, 0.001752f, 0.001752f,
- 0.002062f, 0.002235f, 0.002399f, 0.002699f, 0.002853f, 0.002995f, 0.003372f, 0.003603f,
- 0.003944f, 0.004513f, 0.004704f, 0.005226f, 0.005878f, 0.006527f, 0.006992f, 0.007889f,
- 0.008919f, 0.010002f, 0.011124f, 0.012604f, 0.014526f, 0.016510f, 0.019104f, 0.022308f,
- 0.026077f, 0.030701f, 0.036774f, 0.044098f, 0.053558f, 0.065735f, 0.081299f, 0.101990f,
- 0.129517f, 0.164917f, 0.210938f, 0.268066f, 0.336914f, 0.413818f, 0.496094f, 0.579102f,
- 0.657227f, 0.727539f, 0.913574f, 0.917969f, 0.918945f, 0.919434f, 0.919922f, 0.919922f,
- 0.000000f, 0.000101f, 0.000214f, 0.000208f, 0.000339f, 0.000461f, 0.000577f, 0.000780f,
- 0.000777f, 0.000840f, 0.000853f, 0.001064f, 0.001198f, 0.001327f, 0.001489f, 0.001687f,
- 0.001809f, 0.001884f, 0.002008f, 0.002129f, 0.002434f, 0.002514f, 0.002949f, 0.003000f,
- 0.003351f, 0.003674f, 0.003918f, 0.004356f, 0.004875f, 0.005310f, 0.005768f, 0.006458f,
- 0.007244f, 0.008255f, 0.008949f, 0.010361f, 0.011589f, 0.013290f, 0.015335f, 0.017776f,
- 0.020828f, 0.024521f, 0.029236f, 0.035431f, 0.042694f, 0.052490f, 0.065369f, 0.082336f,
- 0.104492f, 0.134277f, 0.173828f, 0.225464f, 0.290039f, 0.365234f, 0.449707f, 0.536133f,
- 0.623047f, 0.702637f, 0.905273f, 0.911133f, 0.912598f, 0.913086f, 0.913086f, 0.913086f,
- 0.000000f, 0.000167f, 0.000167f, 0.000316f, 0.000432f, 0.000444f, 0.000608f, 0.000611f,
- 0.000678f, 0.000750f, 0.000899f, 0.000925f, 0.001043f, 0.001125f, 0.001222f, 0.001343f,
- 0.001470f, 0.001608f, 0.001679f, 0.001804f, 0.001976f, 0.002234f, 0.002361f, 0.002710f,
- 0.002748f, 0.003035f, 0.003290f, 0.003647f, 0.003990f, 0.004295f, 0.004745f, 0.005318f,
- 0.005920f, 0.006618f, 0.007347f, 0.008270f, 0.009361f, 0.010719f, 0.012291f, 0.014221f,
- 0.016693f, 0.019592f, 0.023239f, 0.027969f, 0.033752f, 0.041534f, 0.051666f, 0.065369f,
- 0.083618f, 0.108276f, 0.141357f, 0.186035f, 0.244141f, 0.316650f, 0.400635f, 0.491699f,
- 0.585938f, 0.672852f, 0.897461f, 0.903320f, 0.904297f, 0.903809f, 0.903809f, 0.904297f,
- 0.000000f, 0.000098f, 0.000145f, 0.000289f, 0.000399f, 0.000424f, 0.000429f, 0.000382f,
- 0.000529f, 0.000613f, 0.000660f, 0.000836f, 0.000907f, 0.000940f, 0.001005f, 0.001188f,
- 0.001306f, 0.001451f, 0.001420f, 0.001554f, 0.001667f, 0.001783f, 0.001955f, 0.002125f,
- 0.002357f, 0.002493f, 0.002760f, 0.002867f, 0.003298f, 0.003626f, 0.003878f, 0.004341f,
- 0.004704f, 0.005356f, 0.005905f, 0.006512f, 0.007435f, 0.008377f, 0.009598f, 0.011055f,
- 0.012978f, 0.015388f, 0.018036f, 0.021698f, 0.026337f, 0.032532f, 0.040192f, 0.050995f,
- 0.065125f, 0.085510f, 0.113037f, 0.150513f, 0.201538f, 0.268799f, 0.351318f, 0.444824f,
- 0.543457f, 0.641602f, 0.888672f, 0.894043f, 0.894531f, 0.895508f, 0.895020f, 0.895508f,
- 0.000000f, 0.000000f, 0.000032f, 0.000169f, 0.000338f, 0.000372f, 0.000468f, 0.000471f,
- 0.000460f, 0.000493f, 0.000588f, 0.000715f, 0.000762f, 0.000912f, 0.000831f, 0.001001f,
- 0.001043f, 0.001133f, 0.001242f, 0.001312f, 0.001446f, 0.001529f, 0.001647f, 0.001829f,
- 0.001982f, 0.002121f, 0.002165f, 0.002438f, 0.002628f, 0.002865f, 0.003113f, 0.003424f,
- 0.003622f, 0.004131f, 0.004639f, 0.005222f, 0.005875f, 0.006622f, 0.007496f, 0.008575f,
- 0.009987f, 0.011665f, 0.013985f, 0.016617f, 0.019913f, 0.024704f, 0.030960f, 0.039185f,
- 0.050323f, 0.066284f, 0.088196f, 0.119568f, 0.163208f, 0.223511f, 0.302002f, 0.395752f,
- 0.499756f, 0.605957f, 0.878418f, 0.883301f, 0.884766f, 0.884766f, 0.885254f, 0.885254f,
- 0.000000f, 0.000000f, 0.000000f, 0.000216f, 0.000237f, 0.000338f, 0.000387f, 0.000341f,
- 0.000435f, 0.000441f, 0.000461f, 0.000577f, 0.000544f, 0.000720f, 0.000813f, 0.000823f,
- 0.000912f, 0.000936f, 0.000994f, 0.001026f, 0.001240f, 0.001268f, 0.001365f, 0.001415f,
- 0.001590f, 0.001565f, 0.001870f, 0.001929f, 0.002123f, 0.002377f, 0.002430f, 0.002565f,
- 0.002947f, 0.003384f, 0.003662f, 0.004105f, 0.004513f, 0.005047f, 0.005741f, 0.006550f,
- 0.007549f, 0.008865f, 0.010612f, 0.012466f, 0.015350f, 0.018677f, 0.023270f, 0.029800f,
- 0.038361f, 0.050323f, 0.067932f, 0.092590f, 0.129395f, 0.181274f, 0.253418f, 0.345459f,
- 0.452637f, 0.567383f, 0.866699f, 0.872559f, 0.873047f, 0.873535f, 0.873047f, 0.873535f,
- 0.000000f, 0.000000f, 0.000121f, 0.000182f, 0.000187f, 0.000237f, 0.000264f, 0.000360f,
- 0.000360f, 0.000397f, 0.000398f, 0.000412f, 0.000432f, 0.000546f, 0.000575f, 0.000690f,
- 0.000731f, 0.000727f, 0.000807f, 0.000843f, 0.000924f, 0.001034f, 0.001093f, 0.001111f,
- 0.001251f, 0.001249f, 0.001334f, 0.001612f, 0.001717f, 0.001820f, 0.002090f, 0.002161f,
- 0.002354f, 0.002600f, 0.002787f, 0.003119f, 0.003586f, 0.003878f, 0.004452f, 0.004913f,
- 0.005772f, 0.006508f, 0.007679f, 0.009285f, 0.011086f, 0.013840f, 0.016968f, 0.021820f,
- 0.028259f, 0.037628f, 0.050812f, 0.070129f, 0.099670f, 0.143433f, 0.207031f, 0.294922f,
- 0.403076f, 0.525879f, 0.853516f, 0.859375f, 0.860840f, 0.860352f, 0.862305f, 0.861328f,
- 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000181f, 0.000198f, 0.000181f, 0.000240f,
- 0.000275f, 0.000311f, 0.000427f, 0.000447f, 0.000395f, 0.000472f, 0.000456f, 0.000557f,
- 0.000518f, 0.000562f, 0.000635f, 0.000664f, 0.000868f, 0.000887f, 0.000865f, 0.001025f,
- 0.001014f, 0.001164f, 0.001096f, 0.001317f, 0.001382f, 0.001432f, 0.001445f, 0.001765f,
- 0.001744f, 0.002100f, 0.002144f, 0.002350f, 0.002655f, 0.002947f, 0.003294f, 0.003780f,
- 0.004265f, 0.004971f, 0.005699f, 0.006786f, 0.007957f, 0.009636f, 0.011932f, 0.015823f,
- 0.020142f, 0.026749f, 0.036530f, 0.051392f, 0.073792f, 0.109375f, 0.164185f, 0.244629f,
- 0.351562f, 0.479980f, 0.839355f, 0.844727f, 0.846680f, 0.847656f, 0.847168f, 0.846680f,
- 0.000000f, 0.000121f, 0.000120f, 0.000119f, 0.000162f, 0.000133f, 0.000170f, 0.000201f,
- 0.000204f, 0.000222f, 0.000258f, 0.000285f, 0.000324f, 0.000327f, 0.000422f, 0.000395f,
- 0.000431f, 0.000517f, 0.000632f, 0.000529f, 0.000589f, 0.000592f, 0.000735f, 0.000714f,
- 0.000795f, 0.000778f, 0.000823f, 0.001063f, 0.001080f, 0.001141f, 0.001154f, 0.001308f,
- 0.001439f, 0.001546f, 0.001689f, 0.001886f, 0.001978f, 0.002174f, 0.002377f, 0.002798f,
- 0.003277f, 0.003519f, 0.004181f, 0.004780f, 0.005768f, 0.006863f, 0.008644f, 0.010750f,
- 0.014030f, 0.018448f, 0.025635f, 0.036194f, 0.053223f, 0.080811f, 0.125610f, 0.196533f,
- 0.299316f, 0.430176f, 0.822754f, 0.830078f, 0.831055f, 0.831543f, 0.832031f, 0.831543f,
- 0.000000f, 0.000121f, 0.000120f, 0.000118f, 0.000117f, 0.000120f, 0.000123f, 0.000151f,
- 0.000154f, 0.000175f, 0.000254f, 0.000190f, 0.000211f, 0.000306f, 0.000335f, 0.000358f,
- 0.000394f, 0.000417f, 0.000443f, 0.000410f, 0.000565f, 0.000565f, 0.000491f, 0.000623f,
- 0.000616f, 0.000631f, 0.000738f, 0.000676f, 0.000759f, 0.000924f, 0.000895f, 0.001030f,
- 0.001064f, 0.001176f, 0.001267f, 0.001438f, 0.001518f, 0.001704f, 0.001742f, 0.002028f,
- 0.002384f, 0.002703f, 0.002972f, 0.003393f, 0.004051f, 0.004959f, 0.005993f, 0.007271f,
- 0.009277f, 0.012390f, 0.016968f, 0.024368f, 0.036560f, 0.056610f, 0.091797f, 0.151245f,
- 0.246460f, 0.379639f, 0.805664f, 0.812500f, 0.813477f, 0.813965f, 0.813965f, 0.813965f,
- 0.000000f, 0.000000f, 0.000118f, 0.000117f, 0.000116f, 0.000114f, 0.000113f, 0.000108f,
- 0.000127f, 0.000153f, 0.000133f, 0.000202f, 0.000217f, 0.000223f, 0.000242f, 0.000186f,
- 0.000280f, 0.000304f, 0.000318f, 0.000342f, 0.000338f, 0.000473f, 0.000360f, 0.000484f,
- 0.000422f, 0.000514f, 0.000527f, 0.000571f, 0.000633f, 0.000568f, 0.000639f, 0.000816f,
- 0.000789f, 0.000889f, 0.000891f, 0.000966f, 0.001125f, 0.001276f, 0.001316f, 0.001496f,
- 0.001658f, 0.001818f, 0.002047f, 0.002502f, 0.002781f, 0.003201f, 0.003914f, 0.004795f,
- 0.006096f, 0.007996f, 0.010918f, 0.015617f, 0.023697f, 0.037567f, 0.063477f, 0.111084f,
- 0.194824f, 0.324951f, 0.786133f, 0.792969f, 0.794434f, 0.793945f, 0.794922f, 0.794434f,
- 0.000000f, 0.000119f, 0.000117f, 0.000115f, 0.000113f, 0.000112f, 0.000110f, 0.000109f,
- 0.000104f, 0.000098f, 0.000099f, 0.000136f, 0.000112f, 0.000126f, 0.000175f, 0.000189f,
- 0.000196f, 0.000220f, 0.000216f, 0.000247f, 0.000258f, 0.000274f, 0.000285f, 0.000309f,
- 0.000308f, 0.000321f, 0.000381f, 0.000390f, 0.000475f, 0.000511f, 0.000485f, 0.000501f,
- 0.000641f, 0.000588f, 0.000652f, 0.000764f, 0.000808f, 0.000952f, 0.000906f, 0.001037f,
- 0.001110f, 0.001249f, 0.001411f, 0.001647f, 0.001894f, 0.002159f, 0.002687f, 0.003223f,
- 0.004036f, 0.005150f, 0.006989f, 0.009644f, 0.014420f, 0.023361f, 0.040802f, 0.076050f,
- 0.146362f, 0.269287f, 0.763184f, 0.770996f, 0.771973f, 0.771973f, 0.772461f, 0.772461f,
- 0.000121f, 0.000116f, 0.000114f, 0.000112f, 0.000109f, 0.000108f, 0.000106f, 0.000105f,
- 0.000104f, 0.000101f, 0.000095f, 0.000090f, 0.000085f, 0.000083f, 0.000104f, 0.000097f,
- 0.000094f, 0.000154f, 0.000127f, 0.000178f, 0.000197f, 0.000194f, 0.000233f, 0.000213f,
- 0.000279f, 0.000294f, 0.000293f, 0.000258f, 0.000319f, 0.000394f, 0.000344f, 0.000369f,
- 0.000394f, 0.000410f, 0.000438f, 0.000509f, 0.000514f, 0.000580f, 0.000617f, 0.000684f,
- 0.000807f, 0.000812f, 0.000914f, 0.001094f, 0.001183f, 0.001436f, 0.001639f, 0.002033f,
- 0.002523f, 0.003073f, 0.004063f, 0.005680f, 0.008560f, 0.013466f, 0.024109f, 0.047791f,
- 0.102051f, 0.213867f, 0.740234f, 0.746582f, 0.748047f, 0.748535f, 0.749023f, 0.749023f,
- 0.000000f, 0.000113f, 0.000108f, 0.000107f, 0.000104f, 0.000102f, 0.000099f, 0.000099f,
- 0.000097f, 0.000096f, 0.000095f, 0.000091f, 0.000086f, 0.000081f, 0.000077f, 0.000073f,
- 0.000085f, 0.000091f, 0.000070f, 0.000102f, 0.000117f, 0.000131f, 0.000145f, 0.000148f,
- 0.000171f, 0.000178f, 0.000178f, 0.000207f, 0.000225f, 0.000209f, 0.000285f, 0.000238f,
- 0.000260f, 0.000298f, 0.000331f, 0.000360f, 0.000371f, 0.000346f, 0.000407f, 0.000443f,
- 0.000494f, 0.000516f, 0.000578f, 0.000662f, 0.000767f, 0.000847f, 0.001004f, 0.001149f,
- 0.001451f, 0.001783f, 0.002310f, 0.003262f, 0.004593f, 0.007309f, 0.012985f, 0.026703f,
- 0.064026f, 0.158813f, 0.712891f, 0.719238f, 0.722168f, 0.721680f, 0.722168f, 0.722656f,
- 0.000000f, 0.000105f, 0.000102f, 0.000098f, 0.000094f, 0.000092f, 0.000091f, 0.000089f,
- 0.000088f, 0.000086f, 0.000085f, 0.000084f, 0.000083f, 0.000080f, 0.000076f, 0.000073f,
- 0.000069f, 0.000065f, 0.000062f, 0.000059f, 0.000068f, 0.000063f, 0.000069f, 0.000074f,
- 0.000087f, 0.000102f, 0.000112f, 0.000130f, 0.000137f, 0.000129f, 0.000143f, 0.000168f,
- 0.000180f, 0.000178f, 0.000189f, 0.000198f, 0.000222f, 0.000240f, 0.000262f, 0.000285f,
- 0.000304f, 0.000317f, 0.000339f, 0.000399f, 0.000439f, 0.000490f, 0.000570f, 0.000658f,
- 0.000781f, 0.000988f, 0.001235f, 0.001674f, 0.002407f, 0.003725f, 0.006485f, 0.013199f,
- 0.034546f, 0.107605f, 0.682129f, 0.691406f, 0.692871f, 0.691406f, 0.692871f, 0.692871f,
- 0.000105f, 0.000089f, 0.000085f, 0.000080f, 0.000078f, 0.000078f, 0.000075f, 0.000074f,
- 0.000072f, 0.000072f, 0.000070f, 0.000071f, 0.000069f, 0.000069f, 0.000069f, 0.000068f,
- 0.000066f, 0.000063f, 0.000060f, 0.000057f, 0.000054f, 0.000052f, 0.000049f, 0.000047f,
- 0.000046f, 0.000045f, 0.000048f, 0.000055f, 0.000060f, 0.000068f, 0.000083f, 0.000087f,
- 0.000092f, 0.000103f, 0.000109f, 0.000117f, 0.000130f, 0.000150f, 0.000148f, 0.000142f,
- 0.000167f, 0.000186f, 0.000210f, 0.000213f, 0.000232f, 0.000280f, 0.000292f, 0.000329f,
- 0.000391f, 0.000456f, 0.000596f, 0.000764f, 0.001065f, 0.001633f, 0.002806f, 0.005909f,
- 0.015488f, 0.062378f, 0.651367f, 0.659668f, 0.661133f, 0.661133f, 0.660645f, 0.661621f,
- 0.000034f, 0.000037f, 0.000048f, 0.000051f, 0.000047f, 0.000049f, 0.000047f, 0.000051f,
- 0.000049f, 0.000051f, 0.000049f, 0.000050f, 0.000051f, 0.000050f, 0.000050f, 0.000049f,
- 0.000051f, 0.000050f, 0.000051f, 0.000050f, 0.000049f, 0.000047f, 0.000045f, 0.000043f,
- 0.000041f, 0.000039f, 0.000037f, 0.000035f, 0.000033f, 0.000032f, 0.000030f, 0.000029f,
- 0.000034f, 0.000041f, 0.000046f, 0.000057f, 0.000063f, 0.000067f, 0.000065f, 0.000072f,
- 0.000083f, 0.000093f, 0.000096f, 0.000102f, 0.000102f, 0.000135f, 0.000134f, 0.000151f,
- 0.000184f, 0.000198f, 0.000245f, 0.000306f, 0.000425f, 0.000607f, 0.001032f, 0.002081f,
- 0.005886f, 0.027924f, 0.617188f, 0.625977f, 0.627441f, 0.627930f, 0.626953f, 0.628418f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000006f, 0.000010f, 0.000014f,
- 0.000016f, 0.000014f, 0.000019f, 0.000022f, 0.000022f, 0.000022f, 0.000025f, 0.000026f,
- 0.000027f, 0.000028f, 0.000029f, 0.000029f, 0.000029f, 0.000030f, 0.000030f, 0.000031f,
- 0.000032f, 0.000032f, 0.000031f, 0.000030f, 0.000028f, 0.000027f, 0.000026f, 0.000024f,
- 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000022f, 0.000024f,
- 0.000027f, 0.000035f, 0.000041f, 0.000034f, 0.000041f, 0.000052f, 0.000051f, 0.000051f,
- 0.000058f, 0.000070f, 0.000074f, 0.000103f, 0.000119f, 0.000169f, 0.000277f, 0.000510f,
- 0.001495f, 0.008766f, 0.583008f, 0.590332f, 0.591797f, 0.591797f, 0.592285f, 0.592285f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000003f, 0.000005f, 0.000006f,
- 0.000008f, 0.000009f, 0.000010f, 0.000010f, 0.000012f, 0.000012f, 0.000013f, 0.000014f,
- 0.000015f, 0.000015f, 0.000015f, 0.000015f, 0.000014f, 0.000013f, 0.000013f, 0.000012f,
- 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000014f, 0.000011f, 0.000015f,
- 0.000017f, 0.000017f, 0.000021f, 0.000020f, 0.000026f, 0.000026f, 0.000042f, 0.000069f,
- 0.000178f, 0.001302f, 0.544434f, 0.553711f, 0.554688f, 0.554688f, 0.556152f, 0.556641f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000002f, 0.000003f, 0.000003f,
- 0.000003f, 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000001f, 0.000003f, 0.000003f,
- 0.000004f, 0.000014f, 0.506836f, 0.515137f, 0.516113f, 0.516602f, 0.517090f, 0.517578f,
- },
- {
- 0.089539f, 0.244873f, 0.368164f, 0.464355f, 0.539551f, 0.599121f, 0.648438f, 0.688477f,
- 0.721680f, 0.749512f, 0.772461f, 0.793945f, 0.811523f, 0.826172f, 0.841309f, 0.854004f,
- 0.863770f, 0.874512f, 0.883301f, 0.891602f, 0.898438f, 0.906250f, 0.912109f, 0.917969f,
- 0.922852f, 0.928223f, 0.932617f, 0.937012f, 0.940918f, 0.944336f, 0.948242f, 0.951660f,
- 0.954590f, 0.957520f, 0.960449f, 0.962891f, 0.965820f, 0.967773f, 0.970215f, 0.972656f,
- 0.974609f, 0.976074f, 0.978516f, 0.979492f, 0.981934f, 0.983398f, 0.984863f, 0.986328f,
- 0.987793f, 0.988770f, 0.990234f, 0.991699f, 0.993164f, 0.994141f, 0.995117f, 0.996582f,
- 0.997559f, 0.998535f, 0.999023f, 0.998535f, 0.997559f, 0.997070f, 0.996582f, 0.995605f,
- 0.045563f, 0.143921f, 0.242798f, 0.334717f, 0.417969f, 0.489258f, 0.550293f, 0.602051f,
- 0.646484f, 0.683594f, 0.715820f, 0.743652f, 0.767090f, 0.788086f, 0.805664f, 0.822266f,
- 0.836426f, 0.849609f, 0.861328f, 0.870117f, 0.879883f, 0.889160f, 0.896973f, 0.903320f,
- 0.909668f, 0.916016f, 0.921875f, 0.926758f, 0.931641f, 0.936523f, 0.940430f, 0.943848f,
- 0.947266f, 0.951172f, 0.954102f, 0.957520f, 0.960449f, 0.962891f, 0.965820f, 0.968262f,
- 0.970215f, 0.973145f, 0.974121f, 0.976074f, 0.979004f, 0.980469f, 0.982422f, 0.983887f,
- 0.985352f, 0.986816f, 0.988281f, 0.989746f, 0.991211f, 0.992188f, 0.994141f, 0.995117f,
- 0.996094f, 0.997070f, 0.998535f, 0.997559f, 0.997070f, 0.996582f, 0.996094f, 0.995117f,
- 0.026855f, 0.089233f, 0.159790f, 0.234619f, 0.308838f, 0.381348f, 0.447754f, 0.507812f,
- 0.561035f, 0.606934f, 0.646484f, 0.683105f, 0.712402f, 0.740234f, 0.763184f, 0.784668f,
- 0.802246f, 0.819336f, 0.833984f, 0.846680f, 0.857910f, 0.868652f, 0.878418f, 0.886719f,
- 0.895508f, 0.903320f, 0.909668f, 0.915527f, 0.920410f, 0.926270f, 0.931152f, 0.935547f,
- 0.940430f, 0.943848f, 0.947754f, 0.951172f, 0.954590f, 0.958008f, 0.960449f, 0.963379f,
- 0.966309f, 0.968750f, 0.971191f, 0.973145f, 0.975586f, 0.977051f, 0.979004f, 0.981445f,
- 0.982910f, 0.983887f, 0.985840f, 0.987305f, 0.988770f, 0.990723f, 0.992188f, 0.993164f,
- 0.994629f, 0.996094f, 0.998047f, 0.997070f, 0.996582f, 0.996094f, 0.995605f, 0.995117f,
- 0.017746f, 0.058746f, 0.108276f, 0.163818f, 0.224365f, 0.288086f, 0.351562f, 0.413086f,
- 0.470947f, 0.522949f, 0.569824f, 0.612793f, 0.650879f, 0.684570f, 0.713867f, 0.739258f,
- 0.762695f, 0.783203f, 0.800781f, 0.817871f, 0.833008f, 0.845215f, 0.857422f, 0.868164f,
- 0.877441f, 0.886230f, 0.894043f, 0.902832f, 0.908691f, 0.915039f, 0.921387f, 0.925781f,
- 0.930664f, 0.936035f, 0.939941f, 0.944336f, 0.948242f, 0.951660f, 0.955078f, 0.957520f,
- 0.961426f, 0.964355f, 0.967285f, 0.968750f, 0.971680f, 0.974121f, 0.975586f, 0.978027f,
- 0.979980f, 0.981934f, 0.983887f, 0.985352f, 0.987305f, 0.988770f, 0.989746f, 0.991211f,
- 0.992676f, 0.993652f, 0.997070f, 0.996582f, 0.996582f, 0.996094f, 0.995117f, 0.994629f,
- 0.012337f, 0.041229f, 0.075928f, 0.117065f, 0.163208f, 0.214478f, 0.270020f, 0.327148f,
- 0.383301f, 0.437500f, 0.490234f, 0.536621f, 0.581543f, 0.621094f, 0.656250f, 0.688477f,
- 0.716797f, 0.741699f, 0.763672f, 0.784668f, 0.802246f, 0.818359f, 0.832520f, 0.845703f,
- 0.857422f, 0.868164f, 0.877930f, 0.886230f, 0.895020f, 0.902344f, 0.909668f, 0.915039f,
- 0.921875f, 0.926758f, 0.931641f, 0.937012f, 0.940430f, 0.946289f, 0.949219f, 0.952637f,
- 0.956055f, 0.958984f, 0.961914f, 0.964844f, 0.967773f, 0.970215f, 0.972656f, 0.974609f,
- 0.976562f, 0.979004f, 0.980957f, 0.982910f, 0.984863f, 0.986816f, 0.987793f, 0.989746f,
- 0.990723f, 0.992676f, 0.996582f, 0.996094f, 0.995605f, 0.995117f, 0.994629f, 0.994141f,
- 0.009315f, 0.030411f, 0.055756f, 0.085632f, 0.121094f, 0.160889f, 0.206055f, 0.254150f,
- 0.305664f, 0.357422f, 0.408447f, 0.459717f, 0.506836f, 0.551270f, 0.592773f, 0.629395f,
- 0.662598f, 0.692871f, 0.719727f, 0.745117f, 0.767090f, 0.786133f, 0.804688f, 0.819336f,
- 0.834473f, 0.847168f, 0.858398f, 0.869629f, 0.879395f, 0.888672f, 0.895020f, 0.903320f,
- 0.910156f, 0.916016f, 0.922363f, 0.928223f, 0.933105f, 0.937012f, 0.941406f, 0.946289f,
- 0.950195f, 0.954102f, 0.957031f, 0.960449f, 0.963379f, 0.965820f, 0.969238f, 0.971191f,
- 0.974121f, 0.976074f, 0.978027f, 0.979980f, 0.982422f, 0.984375f, 0.985840f, 0.987793f,
- 0.989258f, 0.990723f, 0.995605f, 0.995605f, 0.995117f, 0.994629f, 0.994629f, 0.993652f,
- 0.006634f, 0.022736f, 0.041962f, 0.064026f, 0.090759f, 0.122192f, 0.157593f, 0.197510f,
- 0.240356f, 0.287354f, 0.335693f, 0.384766f, 0.432373f, 0.479736f, 0.523438f, 0.565430f,
- 0.604004f, 0.639160f, 0.670898f, 0.699219f, 0.726562f, 0.749023f, 0.770508f, 0.790527f,
- 0.806641f, 0.822754f, 0.836426f, 0.848633f, 0.859863f, 0.871582f, 0.881348f, 0.889160f,
- 0.897949f, 0.905273f, 0.912598f, 0.918945f, 0.924316f, 0.929199f, 0.935059f, 0.938965f,
- 0.943848f, 0.947266f, 0.951660f, 0.955078f, 0.958496f, 0.961914f, 0.964844f, 0.967773f,
- 0.970703f, 0.973145f, 0.975098f, 0.977539f, 0.979492f, 0.981445f, 0.983887f, 0.985352f,
- 0.987305f, 0.989258f, 0.995117f, 0.994629f, 0.994141f, 0.994141f, 0.993652f, 0.993164f,
- 0.005428f, 0.017807f, 0.032166f, 0.049652f, 0.070007f, 0.093811f, 0.121765f, 0.153564f,
- 0.189087f, 0.228516f, 0.270752f, 0.316162f, 0.362061f, 0.408936f, 0.453857f, 0.498779f,
- 0.540527f, 0.579590f, 0.615723f, 0.649902f, 0.679688f, 0.707520f, 0.732422f, 0.755371f,
- 0.775391f, 0.794922f, 0.811035f, 0.826172f, 0.839844f, 0.852051f, 0.864258f, 0.875000f,
- 0.883301f, 0.892578f, 0.899902f, 0.907715f, 0.914062f, 0.920410f, 0.926270f, 0.931641f,
- 0.936035f, 0.940918f, 0.945312f, 0.949219f, 0.954102f, 0.957031f, 0.960938f, 0.963379f,
- 0.966797f, 0.969238f, 0.972168f, 0.974609f, 0.977051f, 0.979492f, 0.980957f, 0.983398f,
- 0.985352f, 0.987305f, 0.994141f, 0.994141f, 0.994141f, 0.993652f, 0.993164f, 0.992676f,
- 0.004223f, 0.014046f, 0.025452f, 0.039062f, 0.055115f, 0.073608f, 0.095642f, 0.120239f,
- 0.149292f, 0.182251f, 0.217529f, 0.257080f, 0.298828f, 0.342773f, 0.387207f, 0.431152f,
- 0.474609f, 0.516602f, 0.556641f, 0.593750f, 0.628418f, 0.660156f, 0.689453f, 0.715820f,
- 0.740723f, 0.762207f, 0.782227f, 0.799805f, 0.816406f, 0.830566f, 0.844727f, 0.855469f,
- 0.867188f, 0.877441f, 0.886230f, 0.895020f, 0.903809f, 0.910645f, 0.917480f, 0.923340f,
- 0.928711f, 0.934570f, 0.939453f, 0.943848f, 0.948242f, 0.952148f, 0.956055f, 0.959473f,
- 0.961914f, 0.965820f, 0.968750f, 0.971680f, 0.974121f, 0.975586f, 0.979004f, 0.980957f,
- 0.983398f, 0.985352f, 0.993652f, 0.993652f, 0.993164f, 0.993164f, 0.992676f, 0.991699f,
- 0.003532f, 0.011536f, 0.020645f, 0.031342f, 0.044098f, 0.058624f, 0.075989f, 0.096252f,
- 0.119141f, 0.145386f, 0.175049f, 0.208130f, 0.244385f, 0.283203f, 0.324463f, 0.367432f,
- 0.410400f, 0.453369f, 0.495361f, 0.534668f, 0.572266f, 0.607910f, 0.641602f, 0.672852f,
- 0.700195f, 0.725098f, 0.748047f, 0.769531f, 0.789062f, 0.806152f, 0.821777f, 0.835938f,
- 0.848633f, 0.860352f, 0.872070f, 0.881836f, 0.890625f, 0.898926f, 0.906738f, 0.913086f,
- 0.919922f, 0.925781f, 0.931641f, 0.936523f, 0.941406f, 0.946289f, 0.950684f, 0.954590f,
- 0.958008f, 0.961426f, 0.964844f, 0.968262f, 0.970703f, 0.973633f, 0.976074f, 0.978516f,
- 0.980469f, 0.982910f, 0.992676f, 0.992676f, 0.992188f, 0.992188f, 0.991699f, 0.990723f,
- 0.002850f, 0.009483f, 0.016647f, 0.025833f, 0.035889f, 0.047424f, 0.061646f, 0.076660f,
- 0.095642f, 0.117065f, 0.141113f, 0.168457f, 0.198975f, 0.233032f, 0.269775f, 0.308838f,
- 0.349854f, 0.391357f, 0.432861f, 0.474121f, 0.515625f, 0.552734f, 0.589355f, 0.622559f,
- 0.654785f, 0.683594f, 0.710938f, 0.735352f, 0.757812f, 0.777344f, 0.795898f, 0.812988f,
- 0.827637f, 0.842285f, 0.854492f, 0.866211f, 0.876953f, 0.886719f, 0.895508f, 0.902832f,
- 0.911133f, 0.917969f, 0.924316f, 0.929688f, 0.935059f, 0.940430f, 0.945312f, 0.949219f,
- 0.953125f, 0.958008f, 0.961426f, 0.964844f, 0.967285f, 0.970703f, 0.973633f, 0.975586f,
- 0.978516f, 0.981445f, 0.991699f, 0.992188f, 0.991699f, 0.991211f, 0.991211f, 0.990723f,
- 0.002628f, 0.007713f, 0.014069f, 0.021484f, 0.029709f, 0.038910f, 0.050201f, 0.063171f,
- 0.078186f, 0.094849f, 0.114563f, 0.137329f, 0.162720f, 0.190918f, 0.222656f, 0.257568f,
- 0.293945f, 0.332764f, 0.372803f, 0.414551f, 0.455078f, 0.495361f, 0.533691f, 0.571289f,
- 0.606445f, 0.639160f, 0.668457f, 0.697754f, 0.723633f, 0.746094f, 0.767090f, 0.787598f,
- 0.804199f, 0.820801f, 0.834473f, 0.848633f, 0.860352f, 0.872559f, 0.882324f, 0.891602f,
- 0.899902f, 0.907715f, 0.915039f, 0.921387f, 0.927734f, 0.934082f, 0.938965f, 0.944824f,
- 0.948730f, 0.953125f, 0.956543f, 0.960938f, 0.963867f, 0.967285f, 0.970215f, 0.973145f,
- 0.976074f, 0.978516f, 0.990234f, 0.990723f, 0.990723f, 0.991211f, 0.990234f, 0.990234f,
- 0.002131f, 0.006535f, 0.012016f, 0.017670f, 0.024780f, 0.032837f, 0.041199f, 0.051819f,
- 0.063904f, 0.077759f, 0.093689f, 0.112610f, 0.133057f, 0.156860f, 0.183472f, 0.213257f,
- 0.245605f, 0.281006f, 0.318115f, 0.357422f, 0.397217f, 0.437500f, 0.478271f, 0.516602f,
- 0.554688f, 0.589844f, 0.623535f, 0.654785f, 0.684082f, 0.710938f, 0.734375f, 0.757812f,
- 0.777832f, 0.795898f, 0.813477f, 0.828613f, 0.843262f, 0.855957f, 0.867676f, 0.878906f,
- 0.888184f, 0.897461f, 0.905273f, 0.912598f, 0.919922f, 0.926758f, 0.932129f, 0.937988f,
- 0.942871f, 0.947754f, 0.951660f, 0.955566f, 0.960449f, 0.964355f, 0.967285f, 0.970215f,
- 0.973145f, 0.976074f, 0.989746f, 0.990234f, 0.990234f, 0.990234f, 0.989746f, 0.988770f,
- 0.001566f, 0.005798f, 0.010231f, 0.015259f, 0.020920f, 0.027176f, 0.034607f, 0.043335f,
- 0.052887f, 0.064392f, 0.077576f, 0.092712f, 0.109802f, 0.129639f, 0.151611f, 0.176758f,
- 0.204346f, 0.235474f, 0.269043f, 0.304688f, 0.342529f, 0.381836f, 0.421143f, 0.460449f,
- 0.500488f, 0.538086f, 0.574219f, 0.608887f, 0.640625f, 0.670898f, 0.699219f, 0.725098f,
- 0.748535f, 0.769043f, 0.788574f, 0.807129f, 0.823242f, 0.837402f, 0.850586f, 0.863281f,
- 0.874512f, 0.885254f, 0.894043f, 0.902832f, 0.910645f, 0.917969f, 0.924805f, 0.931152f,
- 0.936523f, 0.941895f, 0.947266f, 0.951172f, 0.955566f, 0.960449f, 0.963867f, 0.966797f,
- 0.970703f, 0.973145f, 0.988281f, 0.989258f, 0.989258f, 0.989258f, 0.988770f, 0.988281f,
- 0.001427f, 0.004749f, 0.008934f, 0.012833f, 0.017670f, 0.023483f, 0.029114f, 0.036438f,
- 0.044556f, 0.054047f, 0.064453f, 0.077148f, 0.091309f, 0.107544f, 0.125854f, 0.146729f,
- 0.170776f, 0.197266f, 0.226440f, 0.257568f, 0.292236f, 0.329346f, 0.367188f, 0.405762f,
- 0.445557f, 0.484619f, 0.522949f, 0.559570f, 0.595215f, 0.627441f, 0.659180f, 0.687012f,
- 0.714355f, 0.739258f, 0.761719f, 0.781738f, 0.800781f, 0.817383f, 0.833984f, 0.847168f,
- 0.859375f, 0.872070f, 0.882324f, 0.891602f, 0.900879f, 0.909668f, 0.916504f, 0.923828f,
- 0.930176f, 0.936523f, 0.941895f, 0.946777f, 0.951172f, 0.956055f, 0.960449f, 0.963867f,
- 0.967285f, 0.970703f, 0.987305f, 0.988770f, 0.988281f, 0.987793f, 0.987793f, 0.987793f,
- 0.001357f, 0.004501f, 0.007557f, 0.011284f, 0.015236f, 0.019791f, 0.025101f, 0.030838f,
- 0.037628f, 0.045532f, 0.054596f, 0.064636f, 0.076355f, 0.089905f, 0.105042f, 0.122498f,
- 0.142334f, 0.164307f, 0.189697f, 0.217896f, 0.248413f, 0.281494f, 0.316406f, 0.354004f,
- 0.391846f, 0.430664f, 0.469971f, 0.508301f, 0.545898f, 0.582031f, 0.615723f, 0.647461f,
- 0.677734f, 0.704590f, 0.731445f, 0.754395f, 0.775391f, 0.794922f, 0.811523f, 0.829102f,
- 0.842773f, 0.856934f, 0.868652f, 0.880371f, 0.891113f, 0.899414f, 0.908203f, 0.915527f,
- 0.922852f, 0.930176f, 0.936035f, 0.941406f, 0.947266f, 0.951660f, 0.957031f, 0.960449f,
- 0.963867f, 0.968262f, 0.986328f, 0.987305f, 0.987793f, 0.987305f, 0.987305f, 0.986816f,
- 0.001239f, 0.003864f, 0.006699f, 0.009621f, 0.013008f, 0.017059f, 0.021805f, 0.026703f,
- 0.032562f, 0.039185f, 0.045807f, 0.054352f, 0.064514f, 0.075439f, 0.088257f, 0.102478f,
- 0.119263f, 0.138306f, 0.159546f, 0.183228f, 0.209961f, 0.239258f, 0.271484f, 0.305176f,
- 0.341797f, 0.379639f, 0.417480f, 0.456787f, 0.495605f, 0.532227f, 0.570801f, 0.604980f,
- 0.637207f, 0.666992f, 0.696289f, 0.722656f, 0.746582f, 0.768555f, 0.789062f, 0.808105f,
- 0.824219f, 0.839844f, 0.854492f, 0.865723f, 0.878418f, 0.888672f, 0.897461f, 0.906738f,
- 0.915039f, 0.922363f, 0.929199f, 0.935547f, 0.941895f, 0.946289f, 0.952148f, 0.956543f,
- 0.960449f, 0.964844f, 0.985352f, 0.986816f, 0.986816f, 0.986328f, 0.986328f, 0.985840f,
- 0.001151f, 0.003429f, 0.005753f, 0.008400f, 0.011391f, 0.014877f, 0.018494f, 0.022858f,
- 0.028046f, 0.033112f, 0.039642f, 0.046661f, 0.054565f, 0.064026f, 0.074280f, 0.086243f,
- 0.100403f, 0.116150f, 0.133789f, 0.154053f, 0.176636f, 0.202393f, 0.230957f, 0.261719f,
- 0.295166f, 0.330322f, 0.367432f, 0.405518f, 0.445312f, 0.483398f, 0.520996f, 0.558105f,
- 0.594238f, 0.626465f, 0.659668f, 0.688477f, 0.714844f, 0.740723f, 0.763672f, 0.784180f,
- 0.804199f, 0.821289f, 0.837402f, 0.852051f, 0.864258f, 0.876465f, 0.886719f, 0.897949f,
- 0.906250f, 0.915039f, 0.922363f, 0.929199f, 0.935547f, 0.941406f, 0.946777f, 0.952637f,
- 0.958008f, 0.961914f, 0.983887f, 0.985840f, 0.985352f, 0.985352f, 0.984863f, 0.984863f,
- 0.001000f, 0.002768f, 0.005127f, 0.007515f, 0.010155f, 0.013283f, 0.016205f, 0.019714f,
- 0.023987f, 0.028854f, 0.033905f, 0.040161f, 0.046814f, 0.054199f, 0.063110f, 0.073303f,
- 0.084839f, 0.098145f, 0.112854f, 0.129883f, 0.149292f, 0.171387f, 0.195435f, 0.222778f,
- 0.252686f, 0.285400f, 0.320312f, 0.356689f, 0.394531f, 0.433105f, 0.471924f, 0.510742f,
- 0.547852f, 0.584473f, 0.617676f, 0.650879f, 0.680664f, 0.708984f, 0.734375f, 0.759277f,
- 0.780762f, 0.799805f, 0.817383f, 0.834473f, 0.849121f, 0.862793f, 0.875488f, 0.886719f,
- 0.896484f, 0.906250f, 0.915039f, 0.923828f, 0.930176f, 0.936035f, 0.942871f, 0.948242f,
- 0.953613f, 0.958008f, 0.982910f, 0.983887f, 0.984375f, 0.983887f, 0.984375f, 0.983398f,
- 0.000799f, 0.002705f, 0.004459f, 0.006573f, 0.008842f, 0.011375f, 0.014099f, 0.017487f,
- 0.020798f, 0.024963f, 0.029465f, 0.034637f, 0.039703f, 0.046478f, 0.054047f, 0.062256f,
- 0.072388f, 0.082947f, 0.095764f, 0.110229f, 0.126099f, 0.144775f, 0.165771f, 0.189697f,
- 0.216187f, 0.244995f, 0.276123f, 0.310303f, 0.346191f, 0.384521f, 0.422607f, 0.461670f,
- 0.500000f, 0.538574f, 0.575195f, 0.609863f, 0.643555f, 0.673828f, 0.702637f, 0.730469f,
- 0.754395f, 0.777344f, 0.797363f, 0.815430f, 0.833008f, 0.848633f, 0.861328f, 0.875000f,
- 0.886719f, 0.896973f, 0.906738f, 0.915039f, 0.923340f, 0.930176f, 0.936523f, 0.943848f,
- 0.948730f, 0.954102f, 0.981445f, 0.983398f, 0.982910f, 0.983398f, 0.982910f, 0.982910f,
- 0.000774f, 0.002554f, 0.003899f, 0.005875f, 0.007759f, 0.009949f, 0.012733f, 0.015060f,
- 0.018280f, 0.021667f, 0.025574f, 0.029678f, 0.034698f, 0.040405f, 0.046570f, 0.053650f,
- 0.061462f, 0.071106f, 0.081360f, 0.093323f, 0.107300f, 0.122864f, 0.140747f, 0.160522f,
- 0.183960f, 0.209229f, 0.237305f, 0.268799f, 0.302002f, 0.337402f, 0.374023f, 0.413330f,
- 0.451904f, 0.490967f, 0.529785f, 0.567383f, 0.603027f, 0.636719f, 0.668457f, 0.698242f,
- 0.725586f, 0.750977f, 0.773926f, 0.793945f, 0.813965f, 0.831543f, 0.847656f, 0.861816f,
- 0.874512f, 0.886719f, 0.897461f, 0.906738f, 0.915527f, 0.923828f, 0.931641f, 0.937988f,
- 0.944824f, 0.949707f, 0.979980f, 0.981934f, 0.981934f, 0.981934f, 0.981934f, 0.981445f,
- 0.000657f, 0.001934f, 0.003330f, 0.005280f, 0.006748f, 0.009079f, 0.010994f, 0.013763f,
- 0.015945f, 0.019150f, 0.022003f, 0.026001f, 0.030350f, 0.034790f, 0.040253f, 0.045898f,
- 0.052795f, 0.060852f, 0.069641f, 0.079346f, 0.091187f, 0.104492f, 0.119751f, 0.136963f,
- 0.156372f, 0.178345f, 0.203247f, 0.230957f, 0.260742f, 0.294189f, 0.328613f, 0.365723f,
- 0.403564f, 0.443115f, 0.482910f, 0.521484f, 0.559570f, 0.596680f, 0.630859f, 0.664062f,
- 0.694336f, 0.722168f, 0.747559f, 0.771484f, 0.793457f, 0.813477f, 0.830078f, 0.846191f,
- 0.861816f, 0.874023f, 0.887207f, 0.898438f, 0.908691f, 0.916992f, 0.925293f, 0.933594f,
- 0.939941f, 0.946777f, 0.978516f, 0.980469f, 0.980469f, 0.980469f, 0.980469f, 0.980469f,
- 0.000818f, 0.001935f, 0.003246f, 0.004658f, 0.006229f, 0.007912f, 0.010017f, 0.012093f,
- 0.014259f, 0.016586f, 0.019653f, 0.022659f, 0.026413f, 0.030289f, 0.034790f, 0.039917f,
- 0.045441f, 0.052338f, 0.059479f, 0.068115f, 0.077759f, 0.089050f, 0.102051f, 0.116272f,
- 0.133179f, 0.152344f, 0.173340f, 0.197876f, 0.224243f, 0.254150f, 0.286621f, 0.321533f,
- 0.357666f, 0.396729f, 0.436279f, 0.475830f, 0.514648f, 0.553711f, 0.590332f, 0.626465f,
- 0.659180f, 0.689941f, 0.719238f, 0.746094f, 0.770020f, 0.792480f, 0.812500f, 0.830566f,
- 0.846680f, 0.862305f, 0.875977f, 0.888184f, 0.899414f, 0.910156f, 0.918945f, 0.927246f,
- 0.935059f, 0.941895f, 0.977051f, 0.979004f, 0.979492f, 0.979004f, 0.979492f, 0.979004f,
- 0.000583f, 0.001696f, 0.003044f, 0.004276f, 0.005394f, 0.007111f, 0.009048f, 0.010727f,
- 0.012802f, 0.014549f, 0.017319f, 0.019943f, 0.023132f, 0.026459f, 0.030212f, 0.034576f,
- 0.039612f, 0.045105f, 0.051422f, 0.058594f, 0.066833f, 0.076416f, 0.087341f, 0.099792f,
- 0.113647f, 0.130005f, 0.147827f, 0.168945f, 0.192261f, 0.218750f, 0.247803f, 0.280029f,
- 0.314209f, 0.351074f, 0.389404f, 0.429199f, 0.468750f, 0.508301f, 0.547852f, 0.585938f,
- 0.622070f, 0.655762f, 0.687988f, 0.718262f, 0.744629f, 0.769531f, 0.792480f, 0.812500f,
- 0.832520f, 0.848633f, 0.863770f, 0.877441f, 0.890137f, 0.901367f, 0.912109f, 0.921387f,
- 0.929199f, 0.937500f, 0.975586f, 0.978027f, 0.978027f, 0.977539f, 0.977539f, 0.977051f,
- 0.000463f, 0.001634f, 0.002899f, 0.003574f, 0.004932f, 0.006233f, 0.007866f, 0.009644f,
- 0.011055f, 0.012894f, 0.015518f, 0.017792f, 0.020279f, 0.023178f, 0.026657f, 0.030136f,
- 0.034271f, 0.039062f, 0.044586f, 0.050446f, 0.057739f, 0.065613f, 0.074646f, 0.084900f,
- 0.097107f, 0.111023f, 0.126099f, 0.143921f, 0.164673f, 0.187500f, 0.213257f, 0.242065f,
- 0.273926f, 0.308594f, 0.344971f, 0.383301f, 0.423340f, 0.463623f, 0.503906f, 0.543945f,
- 0.582520f, 0.619629f, 0.653809f, 0.686523f, 0.717285f, 0.744629f, 0.770020f, 0.792969f,
- 0.814453f, 0.833496f, 0.850098f, 0.866211f, 0.879395f, 0.893066f, 0.904297f, 0.914551f,
- 0.923828f, 0.932129f, 0.973145f, 0.976074f, 0.976562f, 0.976074f, 0.976074f, 0.976074f,
- 0.000472f, 0.001289f, 0.002508f, 0.003481f, 0.004459f, 0.005894f, 0.007042f, 0.008232f,
- 0.009972f, 0.011719f, 0.013435f, 0.015884f, 0.017899f, 0.020386f, 0.023422f, 0.026428f,
- 0.030411f, 0.034180f, 0.038757f, 0.043854f, 0.049652f, 0.056549f, 0.064270f, 0.073303f,
- 0.083252f, 0.095093f, 0.107910f, 0.123169f, 0.141113f, 0.160645f, 0.183472f, 0.208618f,
- 0.237305f, 0.268799f, 0.302734f, 0.339600f, 0.377930f, 0.418457f, 0.459473f, 0.500000f,
- 0.540527f, 0.579102f, 0.617188f, 0.652832f, 0.685547f, 0.716309f, 0.745117f, 0.771484f,
- 0.794922f, 0.815918f, 0.834961f, 0.853027f, 0.868652f, 0.882324f, 0.895996f, 0.907227f,
- 0.916992f, 0.927246f, 0.972168f, 0.974121f, 0.975098f, 0.973633f, 0.974609f, 0.973633f,
- 0.000238f, 0.001453f, 0.002047f, 0.002985f, 0.004227f, 0.005272f, 0.006096f, 0.007309f,
- 0.008957f, 0.010437f, 0.012184f, 0.014214f, 0.015793f, 0.018082f, 0.020538f, 0.023270f,
- 0.026505f, 0.029648f, 0.033813f, 0.038300f, 0.043457f, 0.049042f, 0.055298f, 0.062744f,
- 0.070984f, 0.081299f, 0.092590f, 0.105591f, 0.120361f, 0.137695f, 0.156982f, 0.179443f,
- 0.204346f, 0.232788f, 0.263672f, 0.297363f, 0.334229f, 0.373047f, 0.414307f, 0.455322f,
- 0.497314f, 0.538086f, 0.578613f, 0.616211f, 0.653320f, 0.686523f, 0.718262f, 0.747559f,
- 0.773438f, 0.797363f, 0.818848f, 0.838867f, 0.856934f, 0.871582f, 0.885742f, 0.898926f,
- 0.910645f, 0.920410f, 0.970215f, 0.971680f, 0.972656f, 0.972656f, 0.972168f, 0.972168f,
- 0.000376f, 0.001075f, 0.002052f, 0.002823f, 0.003603f, 0.004509f, 0.005619f, 0.007008f,
- 0.008064f, 0.009132f, 0.010849f, 0.012314f, 0.013817f, 0.015945f, 0.018188f, 0.020676f,
- 0.022995f, 0.026230f, 0.029587f, 0.033234f, 0.037598f, 0.042328f, 0.048004f, 0.054230f,
- 0.061188f, 0.069824f, 0.079468f, 0.090454f, 0.103271f, 0.117493f, 0.134644f, 0.153931f,
- 0.175293f, 0.200806f, 0.228149f, 0.259277f, 0.293945f, 0.330566f, 0.370117f, 0.410889f,
- 0.453369f, 0.495605f, 0.537109f, 0.578125f, 0.616699f, 0.653809f, 0.689453f, 0.721191f,
- 0.750000f, 0.776855f, 0.800293f, 0.822754f, 0.841309f, 0.859863f, 0.876465f, 0.890137f,
- 0.902832f, 0.914062f, 0.967773f, 0.970703f, 0.970703f, 0.970703f, 0.970703f, 0.970703f,
- 0.000237f, 0.000972f, 0.001674f, 0.002413f, 0.003336f, 0.003956f, 0.005093f, 0.006039f,
- 0.007069f, 0.008202f, 0.009613f, 0.011017f, 0.012520f, 0.014282f, 0.016068f, 0.017853f,
- 0.020508f, 0.023117f, 0.025986f, 0.029160f, 0.032898f, 0.036865f, 0.041565f, 0.046997f,
- 0.052887f, 0.060089f, 0.068176f, 0.077515f, 0.088257f, 0.100586f, 0.114929f, 0.131592f,
- 0.150635f, 0.172241f, 0.196411f, 0.224731f, 0.255859f, 0.290039f, 0.327393f, 0.367188f,
- 0.409180f, 0.451172f, 0.493896f, 0.536621f, 0.578613f, 0.618164f, 0.655762f, 0.691406f,
- 0.724121f, 0.753906f, 0.781738f, 0.805176f, 0.827637f, 0.847656f, 0.864746f, 0.880859f,
- 0.895508f, 0.907715f, 0.965332f, 0.968262f, 0.968750f, 0.969238f, 0.967773f, 0.967773f,
- 0.000450f, 0.001033f, 0.001554f, 0.002131f, 0.002939f, 0.003662f, 0.004551f, 0.005722f,
- 0.006405f, 0.007542f, 0.008484f, 0.009750f, 0.011017f, 0.012596f, 0.014046f, 0.015854f,
- 0.017975f, 0.020264f, 0.022736f, 0.025497f, 0.028671f, 0.031952f, 0.036011f, 0.040741f,
- 0.045746f, 0.051910f, 0.058868f, 0.066772f, 0.075867f, 0.086304f, 0.098328f, 0.112244f,
- 0.128784f, 0.147217f, 0.168945f, 0.193848f, 0.221558f, 0.252441f, 0.287109f, 0.324951f,
- 0.365234f, 0.407715f, 0.450684f, 0.494629f, 0.539062f, 0.580566f, 0.621094f, 0.659668f,
- 0.695801f, 0.729004f, 0.758789f, 0.786133f, 0.810547f, 0.833008f, 0.852539f, 0.870117f,
- 0.886719f, 0.900879f, 0.962891f, 0.966309f, 0.966309f, 0.966797f, 0.966797f, 0.966309f,
- 0.000304f, 0.001050f, 0.001257f, 0.002295f, 0.002689f, 0.003885f, 0.004284f, 0.004726f,
- 0.005547f, 0.006721f, 0.007595f, 0.008667f, 0.009811f, 0.011330f, 0.012642f, 0.014130f,
- 0.016098f, 0.017975f, 0.019867f, 0.022247f, 0.024811f, 0.028030f, 0.031403f, 0.035461f,
- 0.039642f, 0.044800f, 0.050720f, 0.057495f, 0.065002f, 0.073914f, 0.084290f, 0.095947f,
- 0.109985f, 0.126343f, 0.144409f, 0.166138f, 0.190918f, 0.218750f, 0.250244f, 0.285400f,
- 0.323730f, 0.364258f, 0.407471f, 0.452148f, 0.496338f, 0.540527f, 0.584473f, 0.625977f,
- 0.665039f, 0.701172f, 0.735352f, 0.765137f, 0.792480f, 0.817383f, 0.840332f, 0.859863f,
- 0.876953f, 0.893066f, 0.959961f, 0.963379f, 0.963867f, 0.964355f, 0.963867f, 0.963867f,
- 0.000228f, 0.000682f, 0.001293f, 0.001717f, 0.002352f, 0.003160f, 0.003626f, 0.004360f,
- 0.005348f, 0.005871f, 0.006870f, 0.007660f, 0.008957f, 0.010002f, 0.011299f, 0.012375f,
- 0.014099f, 0.015900f, 0.017670f, 0.019363f, 0.022034f, 0.024216f, 0.027420f, 0.030930f,
- 0.034454f, 0.038910f, 0.044006f, 0.049530f, 0.055878f, 0.063477f, 0.072083f, 0.082275f,
- 0.094177f, 0.107666f, 0.123840f, 0.142090f, 0.163452f, 0.188477f, 0.216919f, 0.248047f,
- 0.283447f, 0.322754f, 0.364990f, 0.408447f, 0.453613f, 0.500000f, 0.544922f, 0.589355f,
- 0.631348f, 0.671387f, 0.708008f, 0.742188f, 0.773438f, 0.800781f, 0.824219f, 0.846680f,
- 0.866699f, 0.884277f, 0.958008f, 0.960938f, 0.961426f, 0.962402f, 0.961914f, 0.960938f,
- 0.000239f, 0.000731f, 0.001204f, 0.001637f, 0.002144f, 0.002913f, 0.003521f, 0.003828f,
- 0.004517f, 0.005291f, 0.006203f, 0.006954f, 0.007740f, 0.008911f, 0.010239f, 0.011017f,
- 0.012413f, 0.013863f, 0.015396f, 0.017181f, 0.019196f, 0.021439f, 0.024078f, 0.026993f,
- 0.030182f, 0.033752f, 0.038055f, 0.042664f, 0.048004f, 0.054657f, 0.061920f, 0.070312f,
- 0.080688f, 0.092041f, 0.105774f, 0.121094f, 0.140015f, 0.161255f, 0.186523f, 0.214966f,
- 0.246948f, 0.283203f, 0.322998f, 0.365967f, 0.410400f, 0.457275f, 0.503906f, 0.550781f,
- 0.596191f, 0.638672f, 0.678711f, 0.716797f, 0.750488f, 0.781738f, 0.809082f, 0.833496f,
- 0.855469f, 0.874512f, 0.954590f, 0.958008f, 0.958984f, 0.958984f, 0.958984f, 0.958984f,
- 0.000226f, 0.000663f, 0.001073f, 0.001420f, 0.002163f, 0.002567f, 0.003052f, 0.003433f,
- 0.004181f, 0.004734f, 0.005516f, 0.006424f, 0.007050f, 0.008003f, 0.008659f, 0.009827f,
- 0.011086f, 0.012398f, 0.013649f, 0.015266f, 0.016891f, 0.018921f, 0.021118f, 0.023560f,
- 0.026505f, 0.029556f, 0.032715f, 0.036865f, 0.041077f, 0.046570f, 0.053314f, 0.060150f,
- 0.068787f, 0.078552f, 0.090027f, 0.103638f, 0.119690f, 0.138184f, 0.159546f, 0.184692f,
- 0.213745f, 0.245972f, 0.283203f, 0.324219f, 0.367920f, 0.414062f, 0.461914f, 0.509766f,
- 0.557129f, 0.604492f, 0.647461f, 0.688965f, 0.727051f, 0.761230f, 0.791504f, 0.819824f,
- 0.844238f, 0.865234f, 0.951660f, 0.955566f, 0.955566f, 0.956055f, 0.955078f, 0.956543f,
- 0.000156f, 0.000587f, 0.001056f, 0.001499f, 0.001647f, 0.002380f, 0.002594f, 0.003469f,
- 0.003777f, 0.004112f, 0.004925f, 0.005699f, 0.006180f, 0.007019f, 0.007957f, 0.008942f,
- 0.009560f, 0.010727f, 0.011963f, 0.013123f, 0.014885f, 0.016556f, 0.018494f, 0.020355f,
- 0.022766f, 0.025330f, 0.028320f, 0.031830f, 0.035736f, 0.040161f, 0.045532f, 0.052032f,
- 0.059113f, 0.066833f, 0.076782f, 0.088501f, 0.101868f, 0.117310f, 0.136108f, 0.157959f,
- 0.183105f, 0.212769f, 0.247070f, 0.284424f, 0.326660f, 0.371338f, 0.419189f, 0.468994f,
- 0.518066f, 0.567383f, 0.613770f, 0.658691f, 0.700684f, 0.738770f, 0.771973f, 0.803223f,
- 0.829590f, 0.854492f, 0.947266f, 0.952637f, 0.952637f, 0.952637f, 0.953125f, 0.952637f,
- 0.000155f, 0.000358f, 0.000859f, 0.001402f, 0.001830f, 0.002092f, 0.002499f, 0.002672f,
- 0.003410f, 0.003763f, 0.004375f, 0.005077f, 0.005535f, 0.006554f, 0.007004f, 0.007874f,
- 0.008537f, 0.009529f, 0.010742f, 0.011749f, 0.013016f, 0.014427f, 0.015945f, 0.017929f,
- 0.019775f, 0.022018f, 0.024460f, 0.027618f, 0.030640f, 0.034668f, 0.039154f, 0.044250f,
- 0.050293f, 0.057068f, 0.065491f, 0.074951f, 0.086487f, 0.099670f, 0.115906f, 0.134277f,
- 0.156860f, 0.182495f, 0.213135f, 0.248047f, 0.286621f, 0.329834f, 0.376709f, 0.426025f,
- 0.476562f, 0.527832f, 0.577637f, 0.626465f, 0.671387f, 0.713379f, 0.752441f, 0.784668f,
- 0.815430f, 0.841797f, 0.944336f, 0.948242f, 0.949219f, 0.949219f, 0.949219f, 0.949707f,
- 0.000233f, 0.000639f, 0.000930f, 0.001277f, 0.001579f, 0.001916f, 0.002041f, 0.002625f,
- 0.003035f, 0.003571f, 0.004124f, 0.004375f, 0.004978f, 0.005379f, 0.006348f, 0.006886f,
- 0.007526f, 0.008430f, 0.009216f, 0.010262f, 0.011436f, 0.012779f, 0.014160f, 0.015549f,
- 0.017120f, 0.019089f, 0.021164f, 0.023621f, 0.026352f, 0.029724f, 0.033447f, 0.037842f,
- 0.042603f, 0.048737f, 0.055573f, 0.063721f, 0.073364f, 0.084778f, 0.098206f, 0.114197f,
- 0.133423f, 0.155762f, 0.182739f, 0.213623f, 0.249512f, 0.289795f, 0.335205f, 0.383789f,
- 0.434814f, 0.487305f, 0.540039f, 0.591797f, 0.640137f, 0.686035f, 0.727539f, 0.765137f,
- 0.800293f, 0.830078f, 0.940430f, 0.944336f, 0.945312f, 0.946289f, 0.945801f, 0.945312f,
- 0.000217f, 0.000519f, 0.000848f, 0.001180f, 0.001366f, 0.001589f, 0.001986f, 0.002354f,
- 0.002987f, 0.003170f, 0.003576f, 0.003901f, 0.004440f, 0.004738f, 0.005543f, 0.006058f,
- 0.006508f, 0.007511f, 0.008163f, 0.009132f, 0.010078f, 0.011246f, 0.012390f, 0.013412f,
- 0.014938f, 0.016632f, 0.018433f, 0.020676f, 0.022995f, 0.025726f, 0.028702f, 0.032227f,
- 0.036377f, 0.041992f, 0.047394f, 0.053986f, 0.062195f, 0.071716f, 0.082825f, 0.096802f,
- 0.112732f, 0.132202f, 0.155273f, 0.182861f, 0.215210f, 0.252441f, 0.294678f, 0.341553f,
- 0.392090f, 0.445557f, 0.499512f, 0.553711f, 0.606445f, 0.656250f, 0.703125f, 0.745605f,
- 0.782715f, 0.816895f, 0.935547f, 0.939941f, 0.941406f, 0.941406f, 0.941406f, 0.940918f,
- 0.000242f, 0.000678f, 0.000781f, 0.000928f, 0.001200f, 0.001592f, 0.001694f, 0.002096f,
- 0.002703f, 0.002903f, 0.003170f, 0.003531f, 0.003918f, 0.004433f, 0.004955f, 0.005390f,
- 0.005939f, 0.006454f, 0.007298f, 0.007782f, 0.008759f, 0.009567f, 0.010559f, 0.011650f,
- 0.013046f, 0.014420f, 0.015793f, 0.017715f, 0.019699f, 0.021774f, 0.024460f, 0.027481f,
- 0.031082f, 0.035065f, 0.039917f, 0.045715f, 0.052246f, 0.060486f, 0.070129f, 0.081482f,
- 0.095093f, 0.111755f, 0.131714f, 0.155273f, 0.183838f, 0.217285f, 0.256348f, 0.300781f,
- 0.350342f, 0.403076f, 0.458252f, 0.514160f, 0.570312f, 0.624512f, 0.675781f, 0.722168f,
- 0.763672f, 0.800293f, 0.930664f, 0.935547f, 0.937500f, 0.937012f, 0.937500f, 0.937012f,
- 0.000239f, 0.000297f, 0.000667f, 0.000785f, 0.001044f, 0.001269f, 0.001569f, 0.001950f,
- 0.002224f, 0.002419f, 0.002810f, 0.003063f, 0.003626f, 0.003895f, 0.004261f, 0.004749f,
- 0.005066f, 0.005726f, 0.006260f, 0.007019f, 0.007771f, 0.008369f, 0.008919f, 0.009941f,
- 0.011101f, 0.012375f, 0.013519f, 0.015190f, 0.016891f, 0.018631f, 0.021011f, 0.023590f,
- 0.026581f, 0.029892f, 0.033875f, 0.038757f, 0.044281f, 0.051147f, 0.058746f, 0.068481f,
- 0.079834f, 0.094116f, 0.110779f, 0.131348f, 0.155884f, 0.185669f, 0.220825f, 0.261963f,
- 0.308594f, 0.360352f, 0.416260f, 0.473877f, 0.532715f, 0.589844f, 0.645508f, 0.696289f,
- 0.743652f, 0.784668f, 0.925781f, 0.930664f, 0.932129f, 0.932129f, 0.932129f, 0.932129f,
- 0.000226f, 0.000351f, 0.000434f, 0.000624f, 0.000887f, 0.001040f, 0.001246f, 0.001665f,
- 0.001856f, 0.002384f, 0.002420f, 0.002842f, 0.002874f, 0.003471f, 0.003735f, 0.004078f,
- 0.004639f, 0.004910f, 0.005531f, 0.006065f, 0.006664f, 0.007370f, 0.007690f, 0.008690f,
- 0.009544f, 0.010536f, 0.011795f, 0.012833f, 0.014183f, 0.015900f, 0.017899f, 0.019684f,
- 0.022430f, 0.025253f, 0.028412f, 0.032410f, 0.037201f, 0.042633f, 0.049316f, 0.057159f,
- 0.066772f, 0.078186f, 0.092590f, 0.110107f, 0.131348f, 0.156982f, 0.188232f, 0.225342f,
- 0.269043f, 0.318604f, 0.373535f, 0.431641f, 0.492188f, 0.554199f, 0.613281f, 0.668945f,
- 0.720703f, 0.766602f, 0.919922f, 0.925781f, 0.926758f, 0.926758f, 0.927246f, 0.926758f,
- 0.000000f, 0.000340f, 0.000458f, 0.000715f, 0.000823f, 0.000895f, 0.001165f, 0.001518f,
- 0.001636f, 0.001876f, 0.002190f, 0.002472f, 0.002640f, 0.002964f, 0.003340f, 0.003527f,
- 0.004005f, 0.004227f, 0.004803f, 0.005260f, 0.005878f, 0.006042f, 0.006805f, 0.007500f,
- 0.008469f, 0.009132f, 0.009949f, 0.011009f, 0.012077f, 0.013687f, 0.014938f, 0.016785f,
- 0.018997f, 0.021194f, 0.023895f, 0.027283f, 0.030945f, 0.035583f, 0.040955f, 0.047760f,
- 0.055573f, 0.065247f, 0.077209f, 0.091736f, 0.109619f, 0.131470f, 0.159058f, 0.192017f,
- 0.231812f, 0.278076f, 0.331543f, 0.389404f, 0.450928f, 0.513672f, 0.577637f, 0.638672f,
- 0.695801f, 0.746582f, 0.914062f, 0.919922f, 0.920898f, 0.921387f, 0.921387f, 0.921387f,
- 0.000146f, 0.000319f, 0.000443f, 0.000458f, 0.000704f, 0.000894f, 0.001199f, 0.001324f,
- 0.001549f, 0.001592f, 0.002081f, 0.002092f, 0.002237f, 0.002604f, 0.002815f, 0.003159f,
- 0.003510f, 0.003937f, 0.004147f, 0.004425f, 0.004814f, 0.005318f, 0.005878f, 0.006413f,
- 0.006924f, 0.007782f, 0.008408f, 0.009239f, 0.010414f, 0.011505f, 0.012642f, 0.014015f,
- 0.015884f, 0.017563f, 0.019852f, 0.022598f, 0.025650f, 0.029663f, 0.033875f, 0.039307f,
- 0.045898f, 0.053955f, 0.063782f, 0.075928f, 0.090820f, 0.109497f, 0.132690f, 0.161621f,
- 0.196777f, 0.239624f, 0.290039f, 0.346436f, 0.408203f, 0.473633f, 0.540527f, 0.605957f,
- 0.667969f, 0.725586f, 0.907715f, 0.914062f, 0.914062f, 0.915039f, 0.915039f, 0.915039f,
- 0.000121f, 0.000251f, 0.000506f, 0.000532f, 0.000665f, 0.000830f, 0.001190f, 0.001164f,
- 0.001290f, 0.001413f, 0.001755f, 0.001900f, 0.002157f, 0.002319f, 0.002422f, 0.002853f,
- 0.003042f, 0.003254f, 0.003529f, 0.003725f, 0.004288f, 0.004585f, 0.005043f, 0.005539f,
- 0.005970f, 0.006386f, 0.007126f, 0.007812f, 0.008652f, 0.009598f, 0.010651f, 0.011803f,
- 0.013130f, 0.014702f, 0.016510f, 0.018814f, 0.021011f, 0.024368f, 0.028122f, 0.032379f,
- 0.037506f, 0.044128f, 0.052277f, 0.062042f, 0.075073f, 0.090088f, 0.110107f, 0.134766f,
- 0.165405f, 0.203613f, 0.249268f, 0.303955f, 0.365234f, 0.431396f, 0.501465f, 0.571777f,
- 0.638672f, 0.702148f, 0.900879f, 0.906738f, 0.907227f, 0.908203f, 0.907227f, 0.908203f,
- 0.000241f, 0.000122f, 0.000417f, 0.000505f, 0.000741f, 0.000782f, 0.000916f, 0.001145f,
- 0.001189f, 0.001289f, 0.001331f, 0.001565f, 0.001779f, 0.002020f, 0.002171f, 0.002228f,
- 0.002623f, 0.002752f, 0.002949f, 0.003157f, 0.003515f, 0.003847f, 0.004082f, 0.004429f,
- 0.004990f, 0.005405f, 0.006008f, 0.006603f, 0.007103f, 0.007889f, 0.008789f, 0.009766f,
- 0.010605f, 0.012177f, 0.013672f, 0.015305f, 0.017487f, 0.019913f, 0.022781f, 0.026245f,
- 0.030670f, 0.035980f, 0.042389f, 0.050812f, 0.060883f, 0.073792f, 0.090088f, 0.111145f,
- 0.138062f, 0.171143f, 0.212524f, 0.262695f, 0.322266f, 0.388184f, 0.460205f, 0.533203f,
- 0.606445f, 0.676758f, 0.893066f, 0.898926f, 0.899414f, 0.899414f, 0.900879f, 0.900391f,
- 0.000000f, 0.000114f, 0.000227f, 0.000407f, 0.000532f, 0.000732f, 0.000714f, 0.000922f,
- 0.000993f, 0.001072f, 0.001190f, 0.001412f, 0.001569f, 0.001726f, 0.001959f, 0.002071f,
- 0.002159f, 0.002350f, 0.002565f, 0.002729f, 0.003090f, 0.003248f, 0.003702f, 0.003761f,
- 0.004192f, 0.004585f, 0.004925f, 0.005272f, 0.005966f, 0.006405f, 0.007275f, 0.007965f,
- 0.008850f, 0.009872f, 0.011017f, 0.012383f, 0.014275f, 0.015900f, 0.018463f, 0.021194f,
- 0.024673f, 0.028870f, 0.034271f, 0.040955f, 0.048981f, 0.059723f, 0.073059f, 0.090149f,
- 0.112549f, 0.141357f, 0.178467f, 0.223755f, 0.280029f, 0.345215f, 0.417969f, 0.494385f,
- 0.572266f, 0.648438f, 0.884277f, 0.890137f, 0.891602f, 0.891602f, 0.893066f, 0.892090f,
- 0.000000f, 0.000219f, 0.000211f, 0.000333f, 0.000559f, 0.000609f, 0.000788f, 0.000805f,
- 0.000869f, 0.000903f, 0.001101f, 0.001166f, 0.001302f, 0.001399f, 0.001456f, 0.001668f,
- 0.001853f, 0.001999f, 0.002102f, 0.002256f, 0.002447f, 0.002728f, 0.002943f, 0.003178f,
- 0.003515f, 0.003836f, 0.004074f, 0.004475f, 0.004745f, 0.005325f, 0.005970f, 0.006569f,
- 0.007248f, 0.008102f, 0.008888f, 0.010132f, 0.011169f, 0.012947f, 0.014763f, 0.016891f,
- 0.019760f, 0.023087f, 0.027176f, 0.032562f, 0.038940f, 0.047516f, 0.058167f, 0.072754f,
- 0.090698f, 0.114929f, 0.146851f, 0.187744f, 0.239258f, 0.301514f, 0.373291f, 0.452637f,
- 0.535645f, 0.617676f, 0.874512f, 0.880859f, 0.882324f, 0.883301f, 0.883301f, 0.882324f,
- 0.000204f, 0.000207f, 0.000204f, 0.000322f, 0.000435f, 0.000480f, 0.000556f, 0.000615f,
- 0.000747f, 0.000782f, 0.000844f, 0.001006f, 0.001159f, 0.001191f, 0.001231f, 0.001450f,
- 0.001585f, 0.001633f, 0.001790f, 0.001919f, 0.002117f, 0.002298f, 0.002432f, 0.002651f,
- 0.002939f, 0.003172f, 0.003399f, 0.003614f, 0.003944f, 0.004421f, 0.004704f, 0.005203f,
- 0.005886f, 0.006454f, 0.007160f, 0.008049f, 0.009041f, 0.010201f, 0.011627f, 0.013237f,
- 0.015404f, 0.018097f, 0.021469f, 0.025284f, 0.030884f, 0.036987f, 0.045990f, 0.056915f,
- 0.072083f, 0.092163f, 0.119141f, 0.154419f, 0.200928f, 0.259277f, 0.328857f, 0.409424f,
- 0.495605f, 0.584473f, 0.864258f, 0.871094f, 0.872070f, 0.873047f, 0.872559f, 0.873047f,
- 0.000000f, 0.000044f, 0.000176f, 0.000290f, 0.000410f, 0.000390f, 0.000513f, 0.000546f,
- 0.000647f, 0.000680f, 0.000827f, 0.000858f, 0.000958f, 0.001131f, 0.001102f, 0.001223f,
- 0.001367f, 0.001401f, 0.001525f, 0.001610f, 0.001826f, 0.001821f, 0.002039f, 0.002253f,
- 0.002459f, 0.002617f, 0.002708f, 0.003036f, 0.003279f, 0.003431f, 0.003805f, 0.004219f,
- 0.004471f, 0.004929f, 0.005569f, 0.006310f, 0.007107f, 0.007988f, 0.009003f, 0.010384f,
- 0.011856f, 0.014015f, 0.016418f, 0.019669f, 0.023666f, 0.028809f, 0.035583f, 0.044159f,
- 0.056458f, 0.072571f, 0.094604f, 0.124329f, 0.164917f, 0.218018f, 0.284912f, 0.364746f,
- 0.454102f, 0.549316f, 0.853027f, 0.859863f, 0.861328f, 0.861816f, 0.861816f, 0.861816f,
- 0.000000f, 0.000069f, 0.000120f, 0.000345f, 0.000371f, 0.000398f, 0.000452f, 0.000396f,
- 0.000498f, 0.000530f, 0.000596f, 0.000648f, 0.000781f, 0.000921f, 0.000995f, 0.001007f,
- 0.001101f, 0.001146f, 0.001282f, 0.001278f, 0.001471f, 0.001554f, 0.001710f, 0.001811f,
- 0.001995f, 0.001986f, 0.002314f, 0.002399f, 0.002499f, 0.002903f, 0.002975f, 0.003305f,
- 0.003605f, 0.004086f, 0.004425f, 0.005081f, 0.005402f, 0.006035f, 0.006889f, 0.007755f,
- 0.009041f, 0.010422f, 0.012672f, 0.014885f, 0.017746f, 0.021530f, 0.026733f, 0.033691f,
- 0.043060f, 0.055847f, 0.073181f, 0.097473f, 0.132324f, 0.179077f, 0.241821f, 0.320068f,
- 0.410400f, 0.510742f, 0.839844f, 0.847656f, 0.849121f, 0.849609f, 0.849121f, 0.849609f,
- 0.000000f, 0.000000f, 0.000121f, 0.000243f, 0.000321f, 0.000354f, 0.000341f, 0.000431f,
- 0.000423f, 0.000444f, 0.000473f, 0.000508f, 0.000595f, 0.000706f, 0.000737f, 0.000861f,
- 0.000869f, 0.000926f, 0.001055f, 0.001104f, 0.001199f, 0.001306f, 0.001360f, 0.001433f,
- 0.001530f, 0.001555f, 0.001673f, 0.001942f, 0.002138f, 0.002247f, 0.002562f, 0.002609f,
- 0.002911f, 0.003204f, 0.003466f, 0.003757f, 0.004192f, 0.004845f, 0.005482f, 0.006008f,
- 0.006874f, 0.007904f, 0.009171f, 0.011124f, 0.013260f, 0.015839f, 0.019821f, 0.024872f,
- 0.031982f, 0.041534f, 0.055054f, 0.075012f, 0.103516f, 0.143677f, 0.199951f, 0.273438f,
- 0.364502f, 0.469482f, 0.825684f, 0.834473f, 0.834961f, 0.835938f, 0.835938f, 0.835938f,
- 0.000000f, 0.000000f, 0.000000f, 0.000120f, 0.000199f, 0.000272f, 0.000265f, 0.000363f,
- 0.000379f, 0.000388f, 0.000489f, 0.000500f, 0.000488f, 0.000569f, 0.000604f, 0.000700f,
- 0.000683f, 0.000720f, 0.000784f, 0.000844f, 0.001009f, 0.001047f, 0.001108f, 0.001258f,
- 0.001276f, 0.001388f, 0.001410f, 0.001565f, 0.001592f, 0.001814f, 0.001800f, 0.002167f,
- 0.002192f, 0.002556f, 0.002665f, 0.002905f, 0.003195f, 0.003574f, 0.004028f, 0.004513f,
- 0.005127f, 0.005859f, 0.006847f, 0.008018f, 0.009491f, 0.011452f, 0.014099f, 0.017792f,
- 0.022995f, 0.030258f, 0.040588f, 0.055878f, 0.078308f, 0.111450f, 0.160278f, 0.229248f,
- 0.318359f, 0.425781f, 0.810547f, 0.818359f, 0.820312f, 0.821777f, 0.821777f, 0.820801f,
- 0.000000f, 0.000121f, 0.000120f, 0.000172f, 0.000195f, 0.000171f, 0.000208f, 0.000272f,
- 0.000316f, 0.000333f, 0.000348f, 0.000355f, 0.000412f, 0.000410f, 0.000515f, 0.000485f,
- 0.000545f, 0.000656f, 0.000777f, 0.000659f, 0.000705f, 0.000762f, 0.000874f, 0.000927f,
- 0.000959f, 0.000978f, 0.001045f, 0.001228f, 0.001294f, 0.001398f, 0.001443f, 0.001637f,
- 0.001752f, 0.001925f, 0.002005f, 0.002230f, 0.002407f, 0.002670f, 0.002895f, 0.003267f,
- 0.003933f, 0.004280f, 0.005051f, 0.005772f, 0.006718f, 0.008141f, 0.010117f, 0.012383f,
- 0.015930f, 0.020920f, 0.028671f, 0.039673f, 0.056702f, 0.083313f, 0.124695f, 0.185791f,
- 0.270996f, 0.379639f, 0.793457f, 0.801270f, 0.803711f, 0.803711f, 0.804688f, 0.804688f,
- 0.000000f, 0.000121f, 0.000119f, 0.000144f, 0.000149f, 0.000166f, 0.000173f, 0.000167f,
- 0.000214f, 0.000245f, 0.000334f, 0.000287f, 0.000303f, 0.000391f, 0.000401f, 0.000440f,
- 0.000469f, 0.000493f, 0.000534f, 0.000513f, 0.000690f, 0.000682f, 0.000645f, 0.000712f,
- 0.000715f, 0.000747f, 0.000842f, 0.000849f, 0.000967f, 0.000995f, 0.001178f, 0.001167f,
- 0.001273f, 0.001395f, 0.001586f, 0.001748f, 0.001796f, 0.001986f, 0.002132f, 0.002476f,
- 0.002893f, 0.003294f, 0.003653f, 0.004086f, 0.004890f, 0.005821f, 0.006927f, 0.008553f,
- 0.010857f, 0.014137f, 0.019211f, 0.027084f, 0.039642f, 0.059448f, 0.092468f, 0.144775f,
- 0.224487f, 0.332764f, 0.775391f, 0.784668f, 0.786133f, 0.786133f, 0.787109f, 0.786621f,
- 0.000000f, 0.000000f, 0.000118f, 0.000116f, 0.000115f, 0.000113f, 0.000140f, 0.000140f,
- 0.000149f, 0.000220f, 0.000171f, 0.000255f, 0.000274f, 0.000292f, 0.000318f, 0.000295f,
- 0.000346f, 0.000352f, 0.000380f, 0.000406f, 0.000401f, 0.000533f, 0.000490f, 0.000551f,
- 0.000558f, 0.000648f, 0.000628f, 0.000723f, 0.000788f, 0.000749f, 0.000836f, 0.000941f,
- 0.000997f, 0.001065f, 0.001112f, 0.001207f, 0.001328f, 0.001535f, 0.001621f, 0.001840f,
- 0.002022f, 0.002163f, 0.002522f, 0.002825f, 0.003391f, 0.003830f, 0.004616f, 0.005665f,
- 0.007172f, 0.009247f, 0.012482f, 0.017532f, 0.025970f, 0.040161f, 0.064941f, 0.107422f,
- 0.178833f, 0.283447f, 0.754883f, 0.764648f, 0.766113f, 0.767090f, 0.767578f, 0.767090f,
- 0.000000f, 0.000119f, 0.000116f, 0.000114f, 0.000112f, 0.000110f, 0.000109f, 0.000117f,
- 0.000114f, 0.000117f, 0.000125f, 0.000193f, 0.000141f, 0.000196f, 0.000221f, 0.000235f,
- 0.000259f, 0.000278f, 0.000308f, 0.000316f, 0.000323f, 0.000315f, 0.000329f, 0.000351f,
- 0.000388f, 0.000422f, 0.000465f, 0.000512f, 0.000571f, 0.000568f, 0.000588f, 0.000633f,
- 0.000747f, 0.000751f, 0.000829f, 0.000958f, 0.000914f, 0.001104f, 0.001145f, 0.001255f,
- 0.001337f, 0.001499f, 0.001701f, 0.001966f, 0.002275f, 0.002609f, 0.003119f, 0.003773f,
- 0.004658f, 0.005920f, 0.007935f, 0.010948f, 0.015900f, 0.025284f, 0.042511f, 0.075012f,
- 0.135010f, 0.234619f, 0.733398f, 0.743164f, 0.744629f, 0.745117f, 0.745605f, 0.745605f,
- 0.000000f, 0.000116f, 0.000113f, 0.000111f, 0.000108f, 0.000106f, 0.000104f, 0.000103f,
- 0.000098f, 0.000092f, 0.000099f, 0.000085f, 0.000098f, 0.000105f, 0.000163f, 0.000162f,
- 0.000128f, 0.000193f, 0.000203f, 0.000214f, 0.000284f, 0.000239f, 0.000303f, 0.000268f,
- 0.000327f, 0.000326f, 0.000329f, 0.000330f, 0.000407f, 0.000486f, 0.000406f, 0.000454f,
- 0.000465f, 0.000495f, 0.000535f, 0.000592f, 0.000648f, 0.000727f, 0.000753f, 0.000807f,
- 0.000956f, 0.000992f, 0.001108f, 0.001294f, 0.001418f, 0.001703f, 0.001978f, 0.002390f,
- 0.002930f, 0.003643f, 0.004753f, 0.006519f, 0.009499f, 0.014824f, 0.025497f, 0.048065f,
- 0.095154f, 0.185425f, 0.709961f, 0.719727f, 0.721191f, 0.721191f, 0.721680f, 0.721680f,
- 0.000000f, 0.000113f, 0.000107f, 0.000106f, 0.000102f, 0.000100f, 0.000097f, 0.000096f,
- 0.000095f, 0.000092f, 0.000087f, 0.000083f, 0.000078f, 0.000098f, 0.000077f, 0.000091f,
- 0.000114f, 0.000128f, 0.000114f, 0.000147f, 0.000154f, 0.000162f, 0.000186f, 0.000174f,
- 0.000220f, 0.000233f, 0.000235f, 0.000245f, 0.000250f, 0.000253f, 0.000321f, 0.000296f,
- 0.000311f, 0.000354f, 0.000417f, 0.000419f, 0.000438f, 0.000443f, 0.000495f, 0.000513f,
- 0.000585f, 0.000634f, 0.000705f, 0.000778f, 0.000912f, 0.001002f, 0.001163f, 0.001379f,
- 0.001745f, 0.002092f, 0.002697f, 0.003721f, 0.005230f, 0.008194f, 0.013870f, 0.027359f,
- 0.061066f, 0.138062f, 0.685547f, 0.694336f, 0.696777f, 0.696289f, 0.697754f, 0.697754f,
- 0.000000f, 0.000106f, 0.000102f, 0.000097f, 0.000093f, 0.000091f, 0.000089f, 0.000087f,
- 0.000085f, 0.000084f, 0.000082f, 0.000080f, 0.000076f, 0.000072f, 0.000069f, 0.000074f,
- 0.000076f, 0.000059f, 0.000075f, 0.000062f, 0.000085f, 0.000091f, 0.000103f, 0.000111f,
- 0.000121f, 0.000135f, 0.000128f, 0.000159f, 0.000171f, 0.000160f, 0.000178f, 0.000193f,
- 0.000196f, 0.000202f, 0.000220f, 0.000230f, 0.000273f, 0.000289f, 0.000312f, 0.000330f,
- 0.000335f, 0.000397f, 0.000408f, 0.000463f, 0.000517f, 0.000577f, 0.000691f, 0.000771f,
- 0.000919f, 0.001150f, 0.001436f, 0.001955f, 0.002737f, 0.004185f, 0.007103f, 0.013863f,
- 0.033661f, 0.093628f, 0.657227f, 0.667480f, 0.668945f, 0.669434f, 0.670898f, 0.669922f,
- 0.000108f, 0.000093f, 0.000087f, 0.000082f, 0.000079f, 0.000078f, 0.000075f, 0.000073f,
- 0.000071f, 0.000070f, 0.000069f, 0.000069f, 0.000067f, 0.000066f, 0.000064f, 0.000061f,
- 0.000059f, 0.000056f, 0.000053f, 0.000051f, 0.000053f, 0.000049f, 0.000044f, 0.000047f,
- 0.000055f, 0.000058f, 0.000071f, 0.000077f, 0.000093f, 0.000094f, 0.000103f, 0.000102f,
- 0.000110f, 0.000126f, 0.000130f, 0.000138f, 0.000143f, 0.000166f, 0.000166f, 0.000178f,
- 0.000194f, 0.000217f, 0.000228f, 0.000231f, 0.000265f, 0.000330f, 0.000341f, 0.000411f,
- 0.000459f, 0.000549f, 0.000705f, 0.000867f, 0.001228f, 0.001863f, 0.003143f, 0.006283f,
- 0.015594f, 0.054993f, 0.628418f, 0.638184f, 0.640137f, 0.640137f, 0.641602f, 0.641602f,
- 0.000071f, 0.000058f, 0.000059f, 0.000058f, 0.000054f, 0.000054f, 0.000051f, 0.000053f,
- 0.000051f, 0.000052f, 0.000050f, 0.000050f, 0.000051f, 0.000050f, 0.000049f, 0.000049f,
- 0.000049f, 0.000049f, 0.000047f, 0.000045f, 0.000043f, 0.000041f, 0.000039f, 0.000038f,
- 0.000036f, 0.000034f, 0.000035f, 0.000037f, 0.000033f, 0.000034f, 0.000038f, 0.000047f,
- 0.000054f, 0.000061f, 0.000064f, 0.000068f, 0.000069f, 0.000076f, 0.000083f, 0.000092f,
- 0.000098f, 0.000103f, 0.000112f, 0.000129f, 0.000113f, 0.000139f, 0.000152f, 0.000185f,
- 0.000204f, 0.000238f, 0.000282f, 0.000365f, 0.000503f, 0.000685f, 0.001178f, 0.002274f,
- 0.006100f, 0.025162f, 0.597656f, 0.607910f, 0.610840f, 0.611816f, 0.610352f, 0.611328f,
- 0.000000f, 0.000000f, 0.000004f, 0.000012f, 0.000014f, 0.000020f, 0.000022f, 0.000023f,
- 0.000024f, 0.000022f, 0.000025f, 0.000027f, 0.000027f, 0.000026f, 0.000028f, 0.000029f,
- 0.000029f, 0.000029f, 0.000030f, 0.000030f, 0.000030f, 0.000030f, 0.000030f, 0.000030f,
- 0.000029f, 0.000028f, 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000021f,
- 0.000020f, 0.000019f, 0.000018f, 0.000019f, 0.000023f, 0.000024f, 0.000027f, 0.000032f,
- 0.000038f, 0.000040f, 0.000041f, 0.000045f, 0.000054f, 0.000052f, 0.000055f, 0.000060f,
- 0.000068f, 0.000089f, 0.000089f, 0.000115f, 0.000146f, 0.000198f, 0.000318f, 0.000586f,
- 0.001614f, 0.008278f, 0.565918f, 0.576660f, 0.578125f, 0.579102f, 0.579590f, 0.580078f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
- 0.000003f, 0.000003f, 0.000005f, 0.000005f, 0.000006f, 0.000007f, 0.000009f, 0.000009f,
- 0.000010f, 0.000011f, 0.000012f, 0.000012f, 0.000013f, 0.000014f, 0.000014f, 0.000015f,
- 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f,
- 0.000009f, 0.000009f, 0.000008f, 0.000010f, 0.000013f, 0.000013f, 0.000013f, 0.000017f,
- 0.000017f, 0.000022f, 0.000021f, 0.000023f, 0.000031f, 0.000032f, 0.000049f, 0.000079f,
- 0.000204f, 0.001328f, 0.533203f, 0.543945f, 0.545410f, 0.546387f, 0.546875f, 0.546875f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f,
- 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f,
- 0.000004f, 0.000016f, 0.499756f, 0.510254f, 0.513184f, 0.513672f, 0.514160f, 0.514160f,
- },
- {
- 0.076172f, 0.209839f, 0.320312f, 0.408691f, 0.481689f, 0.541016f, 0.591309f, 0.633789f,
- 0.668945f, 0.699707f, 0.727051f, 0.749512f, 0.770020f, 0.788086f, 0.803711f, 0.817871f,
- 0.832520f, 0.843750f, 0.854492f, 0.864258f, 0.873535f, 0.881836f, 0.889160f, 0.895996f,
- 0.903320f, 0.909180f, 0.914551f, 0.920410f, 0.925781f, 0.929199f, 0.933594f, 0.938965f,
- 0.942383f, 0.946289f, 0.949219f, 0.953125f, 0.955566f, 0.959473f, 0.961914f, 0.964355f,
- 0.967285f, 0.970215f, 0.971680f, 0.974609f, 0.976562f, 0.978516f, 0.980469f, 0.982422f,
- 0.984375f, 0.986328f, 0.987793f, 0.989746f, 0.990723f, 0.992676f, 0.993652f, 0.995117f,
- 0.996582f, 0.998047f, 0.999023f, 0.997559f, 0.996582f, 0.995605f, 0.994629f, 0.993652f,
- 0.043396f, 0.133301f, 0.221313f, 0.303223f, 0.377441f, 0.442871f, 0.500000f, 0.550781f,
- 0.595215f, 0.632812f, 0.666992f, 0.696777f, 0.723145f, 0.745605f, 0.765137f, 0.783691f,
- 0.799805f, 0.815430f, 0.828613f, 0.839844f, 0.851562f, 0.861328f, 0.871582f, 0.879395f,
- 0.887207f, 0.894531f, 0.901855f, 0.907227f, 0.914062f, 0.919434f, 0.924316f, 0.928711f,
- 0.933594f, 0.937988f, 0.942383f, 0.945801f, 0.949219f, 0.953125f, 0.956055f, 0.959473f,
- 0.962402f, 0.964355f, 0.967773f, 0.970215f, 0.972656f, 0.975098f, 0.977051f, 0.979492f,
- 0.980957f, 0.983398f, 0.985352f, 0.986816f, 0.988281f, 0.990234f, 0.991699f, 0.993652f,
- 0.995117f, 0.996094f, 0.998047f, 0.997070f, 0.996094f, 0.995117f, 0.994141f, 0.993164f,
- 0.027832f, 0.088440f, 0.153198f, 0.221313f, 0.288086f, 0.352051f, 0.411621f, 0.466797f,
- 0.515625f, 0.561523f, 0.601074f, 0.637207f, 0.667969f, 0.695312f, 0.721680f, 0.743652f,
- 0.763184f, 0.781738f, 0.797852f, 0.812500f, 0.826172f, 0.838867f, 0.850098f, 0.859863f,
- 0.869141f, 0.877930f, 0.886230f, 0.893555f, 0.900879f, 0.907227f, 0.912598f, 0.918457f,
- 0.922852f, 0.928711f, 0.934082f, 0.938477f, 0.942383f, 0.946289f, 0.950195f, 0.953125f,
- 0.956543f, 0.959961f, 0.962402f, 0.965820f, 0.968262f, 0.970703f, 0.973145f, 0.975586f,
- 0.978027f, 0.979980f, 0.982422f, 0.984375f, 0.985840f, 0.987793f, 0.989746f, 0.991211f,
- 0.993164f, 0.994141f, 0.997559f, 0.996582f, 0.995605f, 0.994629f, 0.993652f, 0.993164f,
- 0.018921f, 0.061493f, 0.109497f, 0.161987f, 0.217041f, 0.273438f, 0.330811f, 0.384521f,
- 0.437500f, 0.486084f, 0.530273f, 0.570312f, 0.607910f, 0.640137f, 0.670410f, 0.697266f,
- 0.722656f, 0.743652f, 0.763672f, 0.781250f, 0.797363f, 0.812012f, 0.825684f, 0.837891f,
- 0.848633f, 0.859863f, 0.869141f, 0.878418f, 0.886719f, 0.893066f, 0.900879f, 0.906738f,
- 0.913574f, 0.919434f, 0.924316f, 0.930176f, 0.934082f, 0.939453f, 0.942871f, 0.946777f,
- 0.950684f, 0.954590f, 0.958008f, 0.960449f, 0.963379f, 0.966797f, 0.969238f, 0.971680f,
- 0.974121f, 0.977051f, 0.978516f, 0.980957f, 0.983398f, 0.985352f, 0.987305f, 0.989258f,
- 0.991211f, 0.992676f, 0.996094f, 0.995605f, 0.994629f, 0.993652f, 0.993164f, 0.992188f,
- 0.013596f, 0.044495f, 0.080017f, 0.119873f, 0.164307f, 0.211670f, 0.261475f, 0.311523f,
- 0.362793f, 0.410645f, 0.458008f, 0.501953f, 0.542969f, 0.580078f, 0.614746f, 0.645996f,
- 0.674805f, 0.701172f, 0.723633f, 0.745117f, 0.765625f, 0.782227f, 0.798828f, 0.812988f,
- 0.826172f, 0.838867f, 0.849609f, 0.861328f, 0.870605f, 0.878906f, 0.887695f, 0.895020f,
- 0.901855f, 0.907715f, 0.914551f, 0.920898f, 0.925781f, 0.930664f, 0.934570f, 0.940918f,
- 0.943848f, 0.947754f, 0.951660f, 0.955566f, 0.958984f, 0.961914f, 0.964844f, 0.967773f,
- 0.970703f, 0.973145f, 0.975586f, 0.978027f, 0.979980f, 0.982422f, 0.984863f, 0.986328f,
- 0.988770f, 0.990234f, 0.995117f, 0.995117f, 0.994141f, 0.993652f, 0.992676f, 0.991699f,
- 0.010414f, 0.033203f, 0.060364f, 0.090942f, 0.125610f, 0.163818f, 0.206421f, 0.250488f,
- 0.295898f, 0.341797f, 0.388428f, 0.433350f, 0.475830f, 0.517090f, 0.555176f, 0.589844f,
- 0.622559f, 0.652344f, 0.680176f, 0.704590f, 0.729004f, 0.748535f, 0.767578f, 0.784668f,
- 0.800293f, 0.814941f, 0.828125f, 0.839844f, 0.852051f, 0.861816f, 0.871582f, 0.879883f,
- 0.888672f, 0.895996f, 0.903320f, 0.909180f, 0.916016f, 0.921387f, 0.927246f, 0.931641f,
- 0.937012f, 0.940918f, 0.946289f, 0.950195f, 0.953125f, 0.957520f, 0.960449f, 0.963867f,
- 0.966309f, 0.969238f, 0.972168f, 0.975098f, 0.976562f, 0.979492f, 0.981934f, 0.983887f,
- 0.985840f, 0.988281f, 0.994629f, 0.994141f, 0.993652f, 0.992676f, 0.991699f, 0.990723f,
- 0.007889f, 0.025772f, 0.046539f, 0.070312f, 0.097168f, 0.128540f, 0.162354f, 0.200195f,
- 0.239868f, 0.281738f, 0.325195f, 0.368896f, 0.411621f, 0.453125f, 0.493652f, 0.531738f,
- 0.566406f, 0.601074f, 0.631836f, 0.659668f, 0.687988f, 0.709961f, 0.732422f, 0.753418f,
- 0.770996f, 0.788086f, 0.804199f, 0.818359f, 0.831543f, 0.843750f, 0.854492f, 0.864746f,
- 0.873535f, 0.882812f, 0.890137f, 0.898438f, 0.905273f, 0.912598f, 0.917969f, 0.923828f,
- 0.929199f, 0.934570f, 0.938477f, 0.942871f, 0.948242f, 0.951660f, 0.955078f, 0.958496f,
- 0.961914f, 0.965332f, 0.968262f, 0.971680f, 0.973633f, 0.976562f, 0.979492f, 0.981445f,
- 0.983398f, 0.985352f, 0.993164f, 0.993164f, 0.992676f, 0.991699f, 0.991211f, 0.990234f,
- 0.006332f, 0.020325f, 0.036438f, 0.055573f, 0.077026f, 0.101562f, 0.129028f, 0.160278f,
- 0.194458f, 0.230347f, 0.268555f, 0.309326f, 0.350830f, 0.391846f, 0.432373f, 0.472412f,
- 0.509277f, 0.545410f, 0.579102f, 0.611816f, 0.640625f, 0.668945f, 0.693848f, 0.716797f,
- 0.739258f, 0.758789f, 0.775879f, 0.793945f, 0.807617f, 0.821777f, 0.834961f, 0.846680f,
- 0.857422f, 0.867676f, 0.877441f, 0.885742f, 0.893555f, 0.900391f, 0.908203f, 0.915039f,
- 0.920898f, 0.926270f, 0.931152f, 0.937012f, 0.940918f, 0.946289f, 0.949219f, 0.954102f,
- 0.958008f, 0.960938f, 0.964355f, 0.967773f, 0.970703f, 0.973145f, 0.975586f, 0.978516f,
- 0.981445f, 0.983398f, 0.992188f, 0.992188f, 0.991699f, 0.990723f, 0.990723f, 0.989746f,
- 0.005226f, 0.016647f, 0.029556f, 0.044434f, 0.061523f, 0.081543f, 0.103760f, 0.129150f,
- 0.157837f, 0.188477f, 0.221924f, 0.257812f, 0.295654f, 0.334473f, 0.374023f, 0.412842f,
- 0.451904f, 0.489990f, 0.525391f, 0.560059f, 0.593262f, 0.623047f, 0.651855f, 0.678223f,
- 0.702148f, 0.725098f, 0.745605f, 0.764160f, 0.781738f, 0.799316f, 0.812500f, 0.827148f,
- 0.838867f, 0.851074f, 0.861328f, 0.871582f, 0.880371f, 0.889648f, 0.896973f, 0.904297f,
- 0.911621f, 0.917480f, 0.923340f, 0.929688f, 0.934570f, 0.939941f, 0.943848f, 0.948242f,
- 0.951660f, 0.957031f, 0.959473f, 0.963379f, 0.966797f, 0.969727f, 0.972656f, 0.976074f,
- 0.979004f, 0.980957f, 0.991699f, 0.991211f, 0.990723f, 0.990234f, 0.989746f, 0.988770f,
- 0.004108f, 0.013542f, 0.023819f, 0.036194f, 0.050262f, 0.066223f, 0.084717f, 0.104797f,
- 0.128174f, 0.153809f, 0.182861f, 0.213989f, 0.247437f, 0.282471f, 0.319580f, 0.357422f,
- 0.395508f, 0.433350f, 0.470947f, 0.506348f, 0.542480f, 0.575684f, 0.605957f, 0.635254f,
- 0.662109f, 0.687988f, 0.711426f, 0.732910f, 0.753418f, 0.771973f, 0.789062f, 0.804688f,
- 0.819336f, 0.831543f, 0.843750f, 0.855469f, 0.866211f, 0.875488f, 0.884766f, 0.893066f,
- 0.901367f, 0.907715f, 0.914062f, 0.921387f, 0.927246f, 0.932129f, 0.937012f, 0.942383f,
- 0.946777f, 0.951660f, 0.956055f, 0.959473f, 0.962891f, 0.966309f, 0.969238f, 0.972168f,
- 0.975098f, 0.978027f, 0.989746f, 0.990234f, 0.990234f, 0.989258f, 0.989258f, 0.988281f,
- 0.003597f, 0.011330f, 0.020065f, 0.029938f, 0.041412f, 0.054504f, 0.068970f, 0.086182f,
- 0.105469f, 0.126709f, 0.151123f, 0.177612f, 0.206909f, 0.237915f, 0.271484f, 0.305664f,
- 0.342529f, 0.378906f, 0.416748f, 0.453125f, 0.489502f, 0.524414f, 0.558105f, 0.589844f,
- 0.619629f, 0.646973f, 0.673828f, 0.698242f, 0.721191f, 0.742676f, 0.761230f, 0.778809f,
- 0.796387f, 0.810547f, 0.824707f, 0.837891f, 0.850098f, 0.861328f, 0.871094f, 0.881348f,
- 0.889648f, 0.896973f, 0.904785f, 0.912109f, 0.919434f, 0.924316f, 0.931152f, 0.936523f,
- 0.941895f, 0.946289f, 0.951172f, 0.955078f, 0.959473f, 0.962402f, 0.965820f, 0.969238f,
- 0.972656f, 0.975586f, 0.988770f, 0.989258f, 0.989258f, 0.988770f, 0.987793f, 0.987305f,
- 0.002836f, 0.009857f, 0.016693f, 0.025208f, 0.034668f, 0.045288f, 0.057617f, 0.071106f,
- 0.087463f, 0.104858f, 0.125000f, 0.147461f, 0.172119f, 0.199829f, 0.229248f, 0.260742f,
- 0.294434f, 0.329102f, 0.365479f, 0.400879f, 0.437012f, 0.472656f, 0.508301f, 0.541992f,
- 0.574219f, 0.604980f, 0.634766f, 0.660645f, 0.686523f, 0.709473f, 0.731445f, 0.751953f,
- 0.770996f, 0.789062f, 0.804199f, 0.817871f, 0.832520f, 0.844727f, 0.856445f, 0.867188f,
- 0.876953f, 0.886719f, 0.895020f, 0.902832f, 0.909668f, 0.916504f, 0.923340f, 0.929688f,
- 0.935547f, 0.939941f, 0.944824f, 0.949707f, 0.954102f, 0.958496f, 0.961914f, 0.965820f,
- 0.969238f, 0.972656f, 0.987793f, 0.988281f, 0.988281f, 0.987793f, 0.986816f, 0.986328f,
- 0.002541f, 0.008118f, 0.014244f, 0.021194f, 0.029480f, 0.037811f, 0.048584f, 0.060028f,
- 0.073242f, 0.088196f, 0.104370f, 0.123047f, 0.144531f, 0.167114f, 0.193237f, 0.220947f,
- 0.250977f, 0.282227f, 0.316162f, 0.351074f, 0.386719f, 0.422119f, 0.457520f, 0.492432f,
- 0.526367f, 0.559082f, 0.590332f, 0.621094f, 0.648438f, 0.674316f, 0.698730f, 0.721191f,
- 0.742188f, 0.762207f, 0.780762f, 0.797363f, 0.812500f, 0.826172f, 0.840332f, 0.852051f,
- 0.863770f, 0.873535f, 0.883301f, 0.892090f, 0.900391f, 0.908203f, 0.915039f, 0.922363f,
- 0.928711f, 0.933594f, 0.939453f, 0.944824f, 0.950195f, 0.953125f, 0.958008f, 0.962402f,
- 0.965332f, 0.969238f, 0.986816f, 0.987305f, 0.986816f, 0.986328f, 0.985840f, 0.984863f,
- 0.002115f, 0.007030f, 0.012138f, 0.017944f, 0.024521f, 0.032318f, 0.040955f, 0.050476f,
- 0.061676f, 0.073914f, 0.087769f, 0.103271f, 0.121033f, 0.140747f, 0.162598f, 0.187256f,
- 0.213379f, 0.242065f, 0.272705f, 0.305176f, 0.338623f, 0.373047f, 0.408691f, 0.443848f,
- 0.478760f, 0.512695f, 0.545898f, 0.577637f, 0.607910f, 0.636719f, 0.663086f, 0.688965f,
- 0.712402f, 0.734863f, 0.754395f, 0.774414f, 0.791016f, 0.806641f, 0.822266f, 0.835449f,
- 0.848145f, 0.859863f, 0.870605f, 0.880371f, 0.890137f, 0.898438f, 0.906250f, 0.914551f,
- 0.921387f, 0.926758f, 0.933594f, 0.938965f, 0.944336f, 0.949219f, 0.954102f, 0.958984f,
- 0.961914f, 0.965820f, 0.985840f, 0.986328f, 0.985840f, 0.985352f, 0.985352f, 0.984375f,
- 0.001999f, 0.006226f, 0.010384f, 0.015594f, 0.021027f, 0.027435f, 0.034637f, 0.042969f,
- 0.052124f, 0.062469f, 0.074097f, 0.087646f, 0.102173f, 0.119141f, 0.137695f, 0.158203f,
- 0.181396f, 0.206543f, 0.233643f, 0.263184f, 0.295166f, 0.327148f, 0.360596f, 0.395264f,
- 0.430420f, 0.464600f, 0.499023f, 0.532227f, 0.564941f, 0.595703f, 0.625000f, 0.651855f,
- 0.679199f, 0.703613f, 0.726074f, 0.747559f, 0.766602f, 0.784668f, 0.801758f, 0.816895f,
- 0.831055f, 0.843750f, 0.856934f, 0.867188f, 0.878418f, 0.887207f, 0.896484f, 0.904785f,
- 0.913086f, 0.919922f, 0.926270f, 0.932617f, 0.938477f, 0.944336f, 0.949707f, 0.953613f,
- 0.958496f, 0.962891f, 0.983887f, 0.984863f, 0.984863f, 0.984375f, 0.983887f, 0.983398f,
- 0.001891f, 0.004959f, 0.009300f, 0.013786f, 0.018433f, 0.023560f, 0.029892f, 0.037018f,
- 0.044586f, 0.053284f, 0.062805f, 0.074341f, 0.086975f, 0.100586f, 0.116760f, 0.133789f,
- 0.154175f, 0.176025f, 0.200317f, 0.226318f, 0.254395f, 0.284424f, 0.316650f, 0.349365f,
- 0.383301f, 0.418213f, 0.452393f, 0.487061f, 0.520508f, 0.553223f, 0.584473f, 0.613770f,
- 0.643066f, 0.668945f, 0.695312f, 0.718262f, 0.740234f, 0.761230f, 0.778809f, 0.797363f,
- 0.812988f, 0.827148f, 0.840332f, 0.854004f, 0.865723f, 0.875977f, 0.886230f, 0.895020f,
- 0.904297f, 0.912598f, 0.919922f, 0.926270f, 0.932617f, 0.938965f, 0.943359f, 0.949219f,
- 0.955078f, 0.958984f, 0.982422f, 0.983887f, 0.983398f, 0.982910f, 0.982910f, 0.981934f,
- 0.001368f, 0.004715f, 0.008041f, 0.011948f, 0.016235f, 0.020889f, 0.025848f, 0.031921f,
- 0.038391f, 0.045563f, 0.054108f, 0.063477f, 0.074036f, 0.085815f, 0.099304f, 0.114563f,
- 0.131104f, 0.150146f, 0.170654f, 0.193970f, 0.219360f, 0.246338f, 0.275146f, 0.306396f,
- 0.338867f, 0.372559f, 0.406494f, 0.440918f, 0.474609f, 0.508789f, 0.541992f, 0.574219f,
- 0.604492f, 0.634277f, 0.661133f, 0.687500f, 0.710938f, 0.733887f, 0.754883f, 0.774414f,
- 0.792480f, 0.809570f, 0.824707f, 0.838379f, 0.852051f, 0.862793f, 0.874023f, 0.885254f,
- 0.895020f, 0.903320f, 0.912109f, 0.919434f, 0.926758f, 0.932617f, 0.939941f, 0.945312f,
- 0.951172f, 0.955078f, 0.980957f, 0.982910f, 0.982422f, 0.982422f, 0.981445f, 0.981445f,
- 0.001393f, 0.004227f, 0.007011f, 0.010323f, 0.014107f, 0.018234f, 0.022766f, 0.027649f,
- 0.032898f, 0.039581f, 0.046539f, 0.054230f, 0.063293f, 0.073608f, 0.085144f, 0.097961f,
- 0.112305f, 0.127930f, 0.146362f, 0.166260f, 0.188599f, 0.212524f, 0.238647f, 0.266846f,
- 0.297363f, 0.328369f, 0.361816f, 0.395752f, 0.429932f, 0.464844f, 0.498535f, 0.531250f,
- 0.564453f, 0.596191f, 0.625488f, 0.653320f, 0.680176f, 0.704590f, 0.728027f, 0.750977f,
- 0.770020f, 0.788574f, 0.805176f, 0.821289f, 0.835449f, 0.849609f, 0.862793f, 0.874023f,
- 0.884277f, 0.894043f, 0.903320f, 0.911621f, 0.919434f, 0.926758f, 0.933594f, 0.939453f,
- 0.945312f, 0.951172f, 0.979492f, 0.980957f, 0.980957f, 0.980957f, 0.980469f, 0.979980f,
- 0.001163f, 0.003527f, 0.006229f, 0.009323f, 0.012199f, 0.015808f, 0.019928f, 0.024200f,
- 0.028870f, 0.033997f, 0.040161f, 0.046967f, 0.054871f, 0.063477f, 0.073181f, 0.083618f,
- 0.096252f, 0.109863f, 0.125122f, 0.142334f, 0.161743f, 0.182739f, 0.206421f, 0.232300f,
- 0.259277f, 0.288086f, 0.320068f, 0.352783f, 0.386475f, 0.420410f, 0.454590f, 0.489258f,
- 0.521973f, 0.555176f, 0.586914f, 0.617188f, 0.646484f, 0.673828f, 0.699707f, 0.723633f,
- 0.746094f, 0.766113f, 0.785645f, 0.803223f, 0.819336f, 0.834961f, 0.848633f, 0.861328f,
- 0.873535f, 0.884766f, 0.893555f, 0.903809f, 0.911621f, 0.920410f, 0.928223f, 0.934082f,
- 0.939941f, 0.946777f, 0.978027f, 0.979492f, 0.979492f, 0.979004f, 0.979004f, 0.978516f,
- 0.000981f, 0.002987f, 0.005329f, 0.008186f, 0.010895f, 0.013832f, 0.017532f, 0.021149f,
- 0.025253f, 0.029999f, 0.035034f, 0.040985f, 0.047485f, 0.054993f, 0.063049f, 0.072510f,
- 0.082581f, 0.094421f, 0.107727f, 0.122498f, 0.138794f, 0.157471f, 0.178467f, 0.200562f,
- 0.225586f, 0.251953f, 0.281250f, 0.311279f, 0.343750f, 0.377197f, 0.411621f, 0.445557f,
- 0.479736f, 0.513672f, 0.546875f, 0.579590f, 0.610352f, 0.640625f, 0.668457f, 0.694336f,
- 0.718750f, 0.742188f, 0.762695f, 0.782715f, 0.801270f, 0.817871f, 0.833496f, 0.847168f,
- 0.860840f, 0.872559f, 0.884277f, 0.894531f, 0.904297f, 0.912598f, 0.920898f, 0.928711f,
- 0.935547f, 0.942383f, 0.976074f, 0.978027f, 0.978516f, 0.978027f, 0.977539f, 0.977051f,
- 0.000880f, 0.002707f, 0.005089f, 0.007305f, 0.010147f, 0.012596f, 0.015160f, 0.018616f,
- 0.022507f, 0.026230f, 0.030777f, 0.035767f, 0.041351f, 0.047455f, 0.054565f, 0.062256f,
- 0.071289f, 0.081299f, 0.092346f, 0.105408f, 0.119812f, 0.135620f, 0.153320f, 0.173462f,
- 0.195068f, 0.219482f, 0.245361f, 0.273682f, 0.303711f, 0.335938f, 0.368896f, 0.402588f,
- 0.437500f, 0.472168f, 0.505859f, 0.539551f, 0.573242f, 0.604492f, 0.634766f, 0.663086f,
- 0.689453f, 0.714844f, 0.738770f, 0.760254f, 0.780762f, 0.799316f, 0.817383f, 0.833496f,
- 0.847168f, 0.860840f, 0.873535f, 0.884766f, 0.895508f, 0.905273f, 0.914062f, 0.922363f,
- 0.930176f, 0.937012f, 0.974609f, 0.976074f, 0.976074f, 0.976562f, 0.976074f, 0.975586f,
- 0.000851f, 0.002659f, 0.004692f, 0.006466f, 0.008545f, 0.011055f, 0.013649f, 0.016403f,
- 0.019714f, 0.023056f, 0.026962f, 0.031235f, 0.035828f, 0.041656f, 0.047699f, 0.054077f,
- 0.061859f, 0.070496f, 0.080200f, 0.091125f, 0.103088f, 0.116882f, 0.132446f, 0.149780f,
- 0.168701f, 0.190430f, 0.213379f, 0.239258f, 0.267334f, 0.296631f, 0.328369f, 0.360840f,
- 0.395020f, 0.429932f, 0.464355f, 0.499512f, 0.533203f, 0.566406f, 0.599121f, 0.629883f,
- 0.658203f, 0.687012f, 0.712402f, 0.735840f, 0.758789f, 0.779297f, 0.798828f, 0.816406f,
- 0.832520f, 0.847168f, 0.861328f, 0.874023f, 0.886230f, 0.896973f, 0.907227f, 0.915527f,
- 0.924805f, 0.931641f, 0.972168f, 0.975586f, 0.975586f, 0.974609f, 0.974121f, 0.973633f,
- 0.000762f, 0.002214f, 0.004040f, 0.005859f, 0.007790f, 0.009689f, 0.012161f, 0.014786f,
- 0.017441f, 0.020493f, 0.023956f, 0.027618f, 0.031860f, 0.036255f, 0.041595f, 0.047394f,
- 0.053894f, 0.061188f, 0.069214f, 0.078735f, 0.089050f, 0.101135f, 0.114441f, 0.129150f,
- 0.145874f, 0.164673f, 0.185303f, 0.208862f, 0.233765f, 0.260742f, 0.290283f, 0.321045f,
- 0.354248f, 0.388184f, 0.422607f, 0.457764f, 0.493652f, 0.526855f, 0.561523f, 0.594238f,
- 0.625977f, 0.655273f, 0.683594f, 0.710449f, 0.734863f, 0.758301f, 0.779297f, 0.798828f,
- 0.817383f, 0.833984f, 0.848145f, 0.862793f, 0.875488f, 0.887207f, 0.899414f, 0.908691f,
- 0.917969f, 0.926270f, 0.970215f, 0.972656f, 0.974121f, 0.973145f, 0.972656f, 0.972168f,
- 0.000732f, 0.001928f, 0.003513f, 0.005234f, 0.007042f, 0.008629f, 0.010620f, 0.012985f,
- 0.015244f, 0.018158f, 0.020935f, 0.024475f, 0.027908f, 0.032013f, 0.036316f, 0.041290f,
- 0.046661f, 0.053040f, 0.060089f, 0.068115f, 0.077087f, 0.087463f, 0.099121f, 0.111633f,
- 0.126221f, 0.142578f, 0.160767f, 0.181396f, 0.203003f, 0.228149f, 0.255127f, 0.284180f,
- 0.315186f, 0.347900f, 0.381836f, 0.416748f, 0.451904f, 0.487549f, 0.522949f, 0.556641f,
- 0.590332f, 0.623047f, 0.652832f, 0.682129f, 0.708984f, 0.733887f, 0.757324f, 0.779785f,
- 0.799316f, 0.818359f, 0.835449f, 0.850586f, 0.865234f, 0.877441f, 0.890137f, 0.901367f,
- 0.912109f, 0.920410f, 0.968262f, 0.970703f, 0.971191f, 0.970703f, 0.971191f, 0.971191f,
- 0.000524f, 0.001758f, 0.003185f, 0.004864f, 0.006081f, 0.007820f, 0.009705f, 0.011467f,
- 0.013634f, 0.016068f, 0.018707f, 0.021378f, 0.024597f, 0.028030f, 0.032135f, 0.036224f,
- 0.041016f, 0.046692f, 0.052399f, 0.059265f, 0.067505f, 0.076050f, 0.085510f, 0.096558f,
- 0.109253f, 0.123657f, 0.138794f, 0.157227f, 0.176880f, 0.198730f, 0.223267f, 0.250000f,
- 0.278809f, 0.309326f, 0.342041f, 0.375977f, 0.410889f, 0.447021f, 0.483154f, 0.518555f,
- 0.554199f, 0.586914f, 0.620117f, 0.650879f, 0.681641f, 0.708496f, 0.734375f, 0.757324f,
- 0.780762f, 0.801270f, 0.819336f, 0.837891f, 0.852539f, 0.867188f, 0.880371f, 0.893066f,
- 0.903809f, 0.914551f, 0.966309f, 0.968750f, 0.969238f, 0.969727f, 0.968750f, 0.968750f,
- 0.000503f, 0.001896f, 0.002653f, 0.004128f, 0.005627f, 0.007004f, 0.008797f, 0.010361f,
- 0.012230f, 0.014175f, 0.016647f, 0.019348f, 0.021454f, 0.024872f, 0.028290f, 0.031830f,
- 0.036163f, 0.040649f, 0.045715f, 0.051941f, 0.058319f, 0.065979f, 0.074402f, 0.083618f,
- 0.094360f, 0.106812f, 0.120239f, 0.135742f, 0.153320f, 0.172974f, 0.194824f, 0.218506f,
- 0.245117f, 0.273926f, 0.304688f, 0.336426f, 0.371094f, 0.406982f, 0.442627f, 0.479492f,
- 0.514648f, 0.550781f, 0.584961f, 0.618652f, 0.650879f, 0.681152f, 0.709473f, 0.735352f,
- 0.760742f, 0.782715f, 0.803711f, 0.821777f, 0.838867f, 0.855957f, 0.870605f, 0.884277f,
- 0.895996f, 0.906738f, 0.964355f, 0.966309f, 0.967285f, 0.966797f, 0.966309f, 0.966309f,
- 0.000636f, 0.001421f, 0.002768f, 0.003761f, 0.004944f, 0.006462f, 0.007889f, 0.009262f,
- 0.010780f, 0.013000f, 0.014946f, 0.017029f, 0.019516f, 0.022049f, 0.024933f, 0.028091f,
- 0.031616f, 0.035553f, 0.040161f, 0.045380f, 0.051239f, 0.057281f, 0.064270f, 0.072693f,
- 0.081970f, 0.092468f, 0.104736f, 0.117859f, 0.132690f, 0.150391f, 0.169189f, 0.190796f,
- 0.214233f, 0.240601f, 0.268555f, 0.299561f, 0.332520f, 0.367188f, 0.402344f, 0.438965f,
- 0.476074f, 0.512695f, 0.549805f, 0.584473f, 0.619141f, 0.651367f, 0.681152f, 0.709961f,
- 0.737305f, 0.762695f, 0.785156f, 0.806641f, 0.826172f, 0.843262f, 0.859375f, 0.874023f,
- 0.888184f, 0.900391f, 0.961426f, 0.964355f, 0.965332f, 0.964844f, 0.964355f, 0.964844f,
- 0.000295f, 0.001419f, 0.002342f, 0.003471f, 0.004539f, 0.005821f, 0.006882f, 0.008354f,
- 0.010155f, 0.011574f, 0.013283f, 0.015129f, 0.017090f, 0.019333f, 0.022125f, 0.024643f,
- 0.028122f, 0.031586f, 0.035522f, 0.039825f, 0.044586f, 0.050110f, 0.056091f, 0.063354f,
- 0.071045f, 0.080078f, 0.090637f, 0.102112f, 0.115479f, 0.130127f, 0.147217f, 0.165649f,
- 0.186768f, 0.210571f, 0.236694f, 0.265137f, 0.295654f, 0.328857f, 0.363770f, 0.399902f,
- 0.436523f, 0.474365f, 0.511230f, 0.548828f, 0.584961f, 0.619141f, 0.652344f, 0.684082f,
- 0.712891f, 0.741211f, 0.766113f, 0.789062f, 0.810547f, 0.830078f, 0.848633f, 0.864258f,
- 0.879395f, 0.892578f, 0.958496f, 0.962402f, 0.962402f, 0.962402f, 0.961914f, 0.962402f,
- 0.000464f, 0.001313f, 0.002159f, 0.003134f, 0.004463f, 0.005001f, 0.006466f, 0.007595f,
- 0.008842f, 0.010277f, 0.011971f, 0.013550f, 0.015434f, 0.017242f, 0.019348f, 0.021805f,
- 0.024734f, 0.027817f, 0.031174f, 0.034821f, 0.039124f, 0.043823f, 0.049164f, 0.055237f,
- 0.062164f, 0.069336f, 0.078430f, 0.088501f, 0.099976f, 0.112854f, 0.127319f, 0.143555f,
- 0.162354f, 0.183350f, 0.207031f, 0.233032f, 0.260986f, 0.291992f, 0.325195f, 0.361084f,
- 0.397217f, 0.435059f, 0.473389f, 0.510742f, 0.549316f, 0.586426f, 0.620605f, 0.654785f,
- 0.686523f, 0.716797f, 0.744629f, 0.769043f, 0.793945f, 0.815918f, 0.834961f, 0.852539f,
- 0.869141f, 0.884277f, 0.955078f, 0.959473f, 0.959473f, 0.959473f, 0.959961f, 0.959961f,
- 0.000541f, 0.001223f, 0.002172f, 0.002886f, 0.003679f, 0.004681f, 0.005512f, 0.006683f,
- 0.008049f, 0.009346f, 0.010704f, 0.012024f, 0.013626f, 0.015213f, 0.017227f, 0.019516f,
- 0.022079f, 0.024612f, 0.027313f, 0.030731f, 0.034180f, 0.038239f, 0.042969f, 0.048187f,
- 0.053864f, 0.060516f, 0.068298f, 0.076843f, 0.086670f, 0.097473f, 0.110107f, 0.124268f,
- 0.140869f, 0.159302f, 0.180420f, 0.203613f, 0.229614f, 0.258057f, 0.289062f, 0.323486f,
- 0.358398f, 0.395996f, 0.434082f, 0.472900f, 0.511719f, 0.550293f, 0.587402f, 0.624023f,
- 0.658203f, 0.690918f, 0.721191f, 0.749512f, 0.774902f, 0.799316f, 0.821289f, 0.840820f,
- 0.859375f, 0.875488f, 0.952637f, 0.956543f, 0.957520f, 0.957520f, 0.957520f, 0.957031f,
- 0.000252f, 0.001056f, 0.001923f, 0.002523f, 0.003414f, 0.003960f, 0.005146f, 0.006172f,
- 0.007130f, 0.008179f, 0.009567f, 0.010735f, 0.012077f, 0.013878f, 0.015640f, 0.017456f,
- 0.019638f, 0.021622f, 0.024170f, 0.026978f, 0.030121f, 0.033630f, 0.037445f, 0.042053f,
- 0.047119f, 0.052826f, 0.059174f, 0.066711f, 0.075012f, 0.084473f, 0.095276f, 0.107727f,
- 0.122070f, 0.138184f, 0.156250f, 0.177246f, 0.200928f, 0.226929f, 0.255371f, 0.286865f,
- 0.321289f, 0.356934f, 0.395264f, 0.434326f, 0.473877f, 0.514160f, 0.553711f, 0.591797f,
- 0.628418f, 0.663574f, 0.696777f, 0.728027f, 0.755859f, 0.782715f, 0.806152f, 0.829102f,
- 0.847656f, 0.867188f, 0.949707f, 0.954102f, 0.954590f, 0.954590f, 0.954102f, 0.954590f,
- 0.000365f, 0.000963f, 0.001581f, 0.002337f, 0.002996f, 0.003952f, 0.004608f, 0.005459f,
- 0.006489f, 0.007351f, 0.008484f, 0.009544f, 0.011108f, 0.012413f, 0.013901f, 0.015388f,
- 0.017181f, 0.019012f, 0.021439f, 0.023727f, 0.026520f, 0.029449f, 0.032898f, 0.036835f,
- 0.041046f, 0.045868f, 0.051575f, 0.058075f, 0.064758f, 0.073120f, 0.082520f, 0.093079f,
- 0.105652f, 0.119385f, 0.135620f, 0.153687f, 0.174683f, 0.198364f, 0.224365f, 0.253662f,
- 0.285400f, 0.320557f, 0.357178f, 0.395752f, 0.435791f, 0.476318f, 0.516602f, 0.557129f,
- 0.596191f, 0.633789f, 0.669434f, 0.703613f, 0.734375f, 0.763672f, 0.790039f, 0.812988f,
- 0.836914f, 0.855957f, 0.946289f, 0.949707f, 0.951172f, 0.951172f, 0.951172f, 0.951172f,
- 0.000404f, 0.001028f, 0.001410f, 0.002098f, 0.002657f, 0.003445f, 0.004391f, 0.005039f,
- 0.005665f, 0.006569f, 0.007549f, 0.008614f, 0.009743f, 0.011108f, 0.012390f, 0.013611f,
- 0.015396f, 0.017044f, 0.018921f, 0.020874f, 0.023453f, 0.025833f, 0.028809f, 0.032501f,
- 0.036011f, 0.040161f, 0.044952f, 0.050018f, 0.056091f, 0.063477f, 0.071533f, 0.080200f,
- 0.091064f, 0.103027f, 0.117065f, 0.133057f, 0.151489f, 0.171997f, 0.196045f, 0.222290f,
- 0.251709f, 0.284424f, 0.319824f, 0.357422f, 0.397217f, 0.438232f, 0.479492f, 0.521484f,
- 0.562500f, 0.602051f, 0.641113f, 0.677734f, 0.711914f, 0.743164f, 0.772461f, 0.799316f,
- 0.822754f, 0.845215f, 0.942383f, 0.946777f, 0.947754f, 0.947754f, 0.948242f, 0.948242f,
- 0.000406f, 0.000992f, 0.001447f, 0.001986f, 0.002499f, 0.003149f, 0.003769f, 0.004272f,
- 0.005016f, 0.005981f, 0.006924f, 0.007675f, 0.008766f, 0.009727f, 0.010765f, 0.011986f,
- 0.013588f, 0.014915f, 0.016724f, 0.018478f, 0.020508f, 0.022873f, 0.025497f, 0.028336f,
- 0.031525f, 0.034882f, 0.038818f, 0.043243f, 0.048615f, 0.054626f, 0.061707f, 0.069214f,
- 0.078430f, 0.089111f, 0.101013f, 0.115112f, 0.130859f, 0.148926f, 0.170166f, 0.193604f,
- 0.220947f, 0.250732f, 0.283936f, 0.320068f, 0.358887f, 0.400391f, 0.442139f, 0.483887f,
- 0.527344f, 0.569824f, 0.610352f, 0.649414f, 0.686523f, 0.722168f, 0.753906f, 0.782227f,
- 0.809570f, 0.833496f, 0.938477f, 0.942871f, 0.944824f, 0.944336f, 0.943848f, 0.943848f,
- 0.000235f, 0.000984f, 0.001204f, 0.001706f, 0.002239f, 0.002998f, 0.003462f, 0.004093f,
- 0.004372f, 0.005371f, 0.006149f, 0.006962f, 0.007736f, 0.008766f, 0.009804f, 0.010780f,
- 0.011887f, 0.013336f, 0.014618f, 0.016159f, 0.018158f, 0.020050f, 0.022232f, 0.024597f,
- 0.027313f, 0.030334f, 0.033752f, 0.037872f, 0.042389f, 0.047516f, 0.053192f, 0.059937f,
- 0.067749f, 0.076599f, 0.086975f, 0.098755f, 0.112610f, 0.128662f, 0.146973f, 0.168091f,
- 0.192383f, 0.220215f, 0.250732f, 0.284668f, 0.322021f, 0.361572f, 0.403564f, 0.446777f,
- 0.490723f, 0.534668f, 0.577637f, 0.619629f, 0.660156f, 0.697754f, 0.731934f, 0.764648f,
- 0.794922f, 0.820312f, 0.934082f, 0.939453f, 0.939941f, 0.941406f, 0.940430f, 0.940918f,
- 0.000237f, 0.000591f, 0.001098f, 0.001619f, 0.002241f, 0.002636f, 0.003176f, 0.003521f,
- 0.004101f, 0.004631f, 0.005398f, 0.006378f, 0.007000f, 0.007767f, 0.008713f, 0.009758f,
- 0.010475f, 0.011734f, 0.013016f, 0.014404f, 0.015762f, 0.017517f, 0.019440f, 0.021469f,
- 0.023651f, 0.026199f, 0.029495f, 0.033112f, 0.036499f, 0.040955f, 0.045959f, 0.051849f,
- 0.058197f, 0.065552f, 0.074585f, 0.085022f, 0.096680f, 0.110535f, 0.126709f, 0.145264f,
- 0.166626f, 0.191406f, 0.219482f, 0.250488f, 0.286133f, 0.323975f, 0.365723f, 0.408447f,
- 0.453125f, 0.498779f, 0.542969f, 0.588379f, 0.631836f, 0.671387f, 0.709473f, 0.745117f,
- 0.777344f, 0.807617f, 0.930176f, 0.935059f, 0.936523f, 0.936523f, 0.936523f, 0.936035f,
- 0.000242f, 0.000761f, 0.000943f, 0.001624f, 0.001858f, 0.002390f, 0.002638f, 0.003054f,
- 0.003805f, 0.004559f, 0.005035f, 0.005493f, 0.006157f, 0.006878f, 0.007687f, 0.008530f,
- 0.009178f, 0.010406f, 0.011406f, 0.012520f, 0.014053f, 0.015579f, 0.017105f, 0.018661f,
- 0.020737f, 0.022903f, 0.025650f, 0.028259f, 0.031433f, 0.035065f, 0.039581f, 0.044342f,
- 0.049988f, 0.056366f, 0.064026f, 0.072632f, 0.082825f, 0.094666f, 0.108582f, 0.124634f,
- 0.143799f, 0.165405f, 0.190796f, 0.219360f, 0.251953f, 0.287842f, 0.328125f, 0.370605f,
- 0.415283f, 0.461670f, 0.507812f, 0.555176f, 0.600586f, 0.645020f, 0.685547f, 0.724121f,
- 0.759277f, 0.792969f, 0.924805f, 0.931152f, 0.931641f, 0.932129f, 0.932129f, 0.931641f,
- 0.000240f, 0.000685f, 0.000955f, 0.001395f, 0.001768f, 0.002157f, 0.002533f, 0.002970f,
- 0.003223f, 0.003813f, 0.004601f, 0.004993f, 0.005428f, 0.005981f, 0.006878f, 0.007484f,
- 0.008110f, 0.009132f, 0.009964f, 0.011208f, 0.012138f, 0.013374f, 0.015099f, 0.016190f,
- 0.018112f, 0.020187f, 0.022202f, 0.024780f, 0.027573f, 0.030411f, 0.034119f, 0.037964f,
- 0.042755f, 0.048553f, 0.054474f, 0.061890f, 0.070984f, 0.080688f, 0.092590f, 0.106812f,
- 0.123291f, 0.142456f, 0.164551f, 0.190430f, 0.220459f, 0.253418f, 0.291504f, 0.332520f,
- 0.376709f, 0.423340f, 0.471436f, 0.520508f, 0.567383f, 0.614746f, 0.660156f, 0.702148f,
- 0.741211f, 0.776367f, 0.920410f, 0.925293f, 0.926270f, 0.926758f, 0.927246f, 0.926758f,
- 0.000244f, 0.000431f, 0.000799f, 0.001309f, 0.001587f, 0.001945f, 0.002317f, 0.002514f,
- 0.003290f, 0.003548f, 0.004082f, 0.004349f, 0.004707f, 0.005348f, 0.006027f, 0.006565f,
- 0.007141f, 0.008011f, 0.008850f, 0.009552f, 0.010757f, 0.011650f, 0.012794f, 0.014145f,
- 0.015778f, 0.017303f, 0.019028f, 0.021088f, 0.023575f, 0.026169f, 0.029175f, 0.032562f,
- 0.036713f, 0.041382f, 0.046448f, 0.052948f, 0.060303f, 0.068787f, 0.079041f, 0.090942f,
- 0.105103f, 0.121643f, 0.141113f, 0.164185f, 0.190308f, 0.221191f, 0.256836f, 0.295898f,
- 0.339355f, 0.385010f, 0.433838f, 0.484619f, 0.534668f, 0.583496f, 0.631348f, 0.678223f,
- 0.719727f, 0.759766f, 0.913574f, 0.920410f, 0.921387f, 0.921875f, 0.921875f, 0.921387f,
- 0.000243f, 0.000496f, 0.000847f, 0.001157f, 0.001426f, 0.001634f, 0.002020f, 0.002338f,
- 0.002607f, 0.003035f, 0.003502f, 0.003872f, 0.004459f, 0.004726f, 0.005402f, 0.005779f,
- 0.006325f, 0.007095f, 0.007767f, 0.008568f, 0.009331f, 0.010086f, 0.011009f, 0.012314f,
- 0.013611f, 0.015060f, 0.016312f, 0.018158f, 0.020401f, 0.022476f, 0.024979f, 0.027863f,
- 0.031036f, 0.034943f, 0.039581f, 0.044830f, 0.050903f, 0.058289f, 0.066895f, 0.076782f,
- 0.088989f, 0.103210f, 0.120422f, 0.140259f, 0.164185f, 0.191772f, 0.223877f, 0.260742f,
- 0.301758f, 0.347168f, 0.395508f, 0.446533f, 0.497803f, 0.551270f, 0.601562f, 0.651855f,
- 0.697754f, 0.741211f, 0.908203f, 0.915039f, 0.916016f, 0.916016f, 0.916504f, 0.915527f,
- 0.000239f, 0.000345f, 0.000690f, 0.000913f, 0.001250f, 0.001343f, 0.001579f, 0.002050f,
- 0.002331f, 0.002861f, 0.003048f, 0.003616f, 0.003696f, 0.004211f, 0.004723f, 0.005074f,
- 0.005657f, 0.006100f, 0.006893f, 0.007290f, 0.008118f, 0.008659f, 0.009552f, 0.010704f,
- 0.011681f, 0.012764f, 0.014114f, 0.015533f, 0.017227f, 0.018982f, 0.021286f, 0.023560f,
- 0.026489f, 0.029861f, 0.033417f, 0.037933f, 0.043121f, 0.049286f, 0.056519f, 0.065002f,
- 0.075073f, 0.087158f, 0.101624f, 0.118835f, 0.139648f, 0.164185f, 0.193481f, 0.226929f,
- 0.265625f, 0.309570f, 0.356934f, 0.408203f, 0.461426f, 0.516113f, 0.569824f, 0.623047f,
- 0.674316f, 0.720703f, 0.902344f, 0.908203f, 0.909668f, 0.910645f, 0.910645f, 0.911133f,
- 0.000000f, 0.000281f, 0.000560f, 0.000977f, 0.001063f, 0.001171f, 0.001569f, 0.001903f,
- 0.002075f, 0.002413f, 0.002695f, 0.003004f, 0.003399f, 0.003553f, 0.003998f, 0.004333f,
- 0.004971f, 0.005314f, 0.005806f, 0.006340f, 0.007015f, 0.007492f, 0.008377f, 0.009186f,
- 0.010094f, 0.010910f, 0.012199f, 0.013351f, 0.014618f, 0.016266f, 0.018082f, 0.019852f,
- 0.022491f, 0.025085f, 0.028168f, 0.031799f, 0.036041f, 0.041107f, 0.047394f, 0.054321f,
- 0.062866f, 0.073181f, 0.085327f, 0.100525f, 0.118408f, 0.139648f, 0.165527f, 0.196411f,
- 0.231812f, 0.273193f, 0.318848f, 0.369629f, 0.423828f, 0.480225f, 0.536621f, 0.592773f,
- 0.647949f, 0.699707f, 0.894043f, 0.900879f, 0.903809f, 0.903320f, 0.903320f, 0.902832f,
- 0.000232f, 0.000227f, 0.000555f, 0.000656f, 0.000937f, 0.000985f, 0.001351f, 0.001723f,
- 0.001925f, 0.002010f, 0.002445f, 0.002625f, 0.002760f, 0.003220f, 0.003551f, 0.003870f,
- 0.004303f, 0.004826f, 0.005028f, 0.005451f, 0.005985f, 0.006523f, 0.007000f, 0.007744f,
- 0.008499f, 0.009361f, 0.010109f, 0.011185f, 0.012413f, 0.013603f, 0.015121f, 0.016891f,
- 0.018753f, 0.020920f, 0.023407f, 0.026764f, 0.030197f, 0.034302f, 0.039429f, 0.044891f,
- 0.052368f, 0.060822f, 0.071167f, 0.083557f, 0.098877f, 0.117493f, 0.139893f, 0.167725f,
- 0.200195f, 0.238037f, 0.281982f, 0.331543f, 0.385010f, 0.442627f, 0.501465f, 0.561523f,
- 0.620605f, 0.675781f, 0.887207f, 0.894531f, 0.895020f, 0.896484f, 0.896484f, 0.895996f,
- 0.000000f, 0.000332f, 0.000577f, 0.000723f, 0.000720f, 0.001210f, 0.001469f, 0.001456f,
- 0.001546f, 0.001775f, 0.002159f, 0.002291f, 0.002659f, 0.002916f, 0.003046f, 0.003439f,
- 0.003752f, 0.003883f, 0.004375f, 0.004635f, 0.005241f, 0.005638f, 0.006054f, 0.006630f,
- 0.007191f, 0.007744f, 0.008545f, 0.009178f, 0.010498f, 0.011536f, 0.012802f, 0.013931f,
- 0.015808f, 0.017548f, 0.019379f, 0.022110f, 0.025040f, 0.028473f, 0.032471f, 0.037323f,
- 0.043152f, 0.050476f, 0.058807f, 0.069214f, 0.082520f, 0.098145f, 0.116821f, 0.141602f,
- 0.170044f, 0.204834f, 0.245728f, 0.293213f, 0.346436f, 0.403564f, 0.464111f, 0.527832f,
- 0.589844f, 0.650879f, 0.878418f, 0.886719f, 0.888184f, 0.887695f, 0.888672f, 0.888672f,
- 0.000243f, 0.000307f, 0.000526f, 0.000561f, 0.000923f, 0.000980f, 0.001143f, 0.001386f,
- 0.001414f, 0.001683f, 0.001735f, 0.001972f, 0.002232f, 0.002481f, 0.002657f, 0.002754f,
- 0.003193f, 0.003359f, 0.003603f, 0.003956f, 0.004368f, 0.004692f, 0.005119f, 0.005596f,
- 0.005955f, 0.006634f, 0.007256f, 0.007881f, 0.008652f, 0.009552f, 0.010376f, 0.011719f,
- 0.012634f, 0.014595f, 0.016113f, 0.018219f, 0.020554f, 0.023254f, 0.026520f, 0.030502f,
- 0.035553f, 0.041168f, 0.048065f, 0.057190f, 0.067261f, 0.080811f, 0.097107f, 0.117737f,
- 0.143066f, 0.173950f, 0.211182f, 0.256592f, 0.307129f, 0.364502f, 0.427002f, 0.491943f,
- 0.557617f, 0.624023f, 0.869629f, 0.877930f, 0.879883f, 0.879883f, 0.879883f, 0.880371f,
- 0.000000f, 0.000270f, 0.000342f, 0.000509f, 0.000668f, 0.000989f, 0.000945f, 0.001105f,
- 0.001230f, 0.001335f, 0.001492f, 0.001757f, 0.001917f, 0.002140f, 0.002386f, 0.002501f,
- 0.002644f, 0.002884f, 0.003199f, 0.003441f, 0.003620f, 0.003891f, 0.004337f, 0.004631f,
- 0.005119f, 0.005520f, 0.006100f, 0.006504f, 0.007301f, 0.007771f, 0.008751f, 0.009521f,
- 0.010658f, 0.011765f, 0.013145f, 0.014641f, 0.016785f, 0.018829f, 0.021545f, 0.024719f,
- 0.028381f, 0.033203f, 0.038849f, 0.046112f, 0.055084f, 0.065552f, 0.079529f, 0.096985f,
- 0.118530f, 0.145630f, 0.179321f, 0.220337f, 0.269287f, 0.325439f, 0.387207f, 0.454102f,
- 0.524414f, 0.595215f, 0.859863f, 0.868652f, 0.870605f, 0.869629f, 0.870117f, 0.870605f,
- 0.000000f, 0.000230f, 0.000334f, 0.000416f, 0.000700f, 0.000726f, 0.000921f, 0.001008f,
- 0.001065f, 0.001186f, 0.001365f, 0.001471f, 0.001627f, 0.001796f, 0.001843f, 0.002069f,
- 0.002266f, 0.002438f, 0.002596f, 0.002831f, 0.003000f, 0.003298f, 0.003597f, 0.003887f,
- 0.004265f, 0.004581f, 0.004986f, 0.005505f, 0.005947f, 0.006454f, 0.007069f, 0.007801f,
- 0.008621f, 0.009575f, 0.010612f, 0.011848f, 0.013321f, 0.015259f, 0.017410f, 0.019775f,
- 0.022934f, 0.026550f, 0.031464f, 0.036713f, 0.043945f, 0.052887f, 0.064209f, 0.078735f,
- 0.096924f, 0.120361f, 0.149536f, 0.186768f, 0.232422f, 0.285889f, 0.347656f, 0.415527f,
- 0.488281f, 0.563965f, 0.849121f, 0.857910f, 0.859375f, 0.860840f, 0.860840f, 0.860352f,
- 0.000233f, 0.000225f, 0.000219f, 0.000431f, 0.000579f, 0.000648f, 0.000671f, 0.000744f,
- 0.000946f, 0.000994f, 0.001091f, 0.001307f, 0.001364f, 0.001490f, 0.001561f, 0.001712f,
- 0.001892f, 0.001999f, 0.002190f, 0.002369f, 0.002512f, 0.002733f, 0.003014f, 0.003145f,
- 0.003553f, 0.003822f, 0.004135f, 0.004326f, 0.004799f, 0.005344f, 0.005718f, 0.006378f,
- 0.007008f, 0.007721f, 0.008400f, 0.009537f, 0.010597f, 0.011917f, 0.013542f, 0.015579f,
- 0.018051f, 0.020889f, 0.024765f, 0.029236f, 0.034668f, 0.041779f, 0.051056f, 0.062439f,
- 0.077576f, 0.097595f, 0.122864f, 0.155273f, 0.196655f, 0.247437f, 0.307617f, 0.375977f,
- 0.450684f, 0.531250f, 0.837891f, 0.847168f, 0.848633f, 0.849609f, 0.849121f, 0.849609f,
- 0.000202f, 0.000180f, 0.000206f, 0.000339f, 0.000479f, 0.000536f, 0.000687f, 0.000739f,
- 0.000771f, 0.000849f, 0.001051f, 0.001060f, 0.001154f, 0.001219f, 0.001389f, 0.001505f,
- 0.001469f, 0.001729f, 0.001858f, 0.001980f, 0.002209f, 0.002243f, 0.002483f, 0.002695f,
- 0.002951f, 0.003149f, 0.003374f, 0.003654f, 0.004002f, 0.004154f, 0.004539f, 0.005032f,
- 0.005428f, 0.005989f, 0.006760f, 0.007549f, 0.008423f, 0.009499f, 0.010620f, 0.012016f,
- 0.013992f, 0.016434f, 0.019135f, 0.022583f, 0.026840f, 0.032501f, 0.039551f, 0.048828f,
- 0.061066f, 0.077393f, 0.098755f, 0.127075f, 0.163208f, 0.209717f, 0.267578f, 0.334961f,
- 0.411133f, 0.494629f, 0.825684f, 0.834473f, 0.836426f, 0.837402f, 0.837402f, 0.837402f,
- 0.000000f, 0.000185f, 0.000184f, 0.000404f, 0.000408f, 0.000454f, 0.000480f, 0.000506f,
- 0.000660f, 0.000694f, 0.000742f, 0.000801f, 0.000989f, 0.001111f, 0.001167f, 0.001250f,
- 0.001311f, 0.001424f, 0.001541f, 0.001574f, 0.001712f, 0.001930f, 0.001982f, 0.002201f,
- 0.002375f, 0.002439f, 0.002792f, 0.002905f, 0.003065f, 0.003412f, 0.003653f, 0.003952f,
- 0.004463f, 0.004723f, 0.005230f, 0.005936f, 0.006386f, 0.007092f, 0.008240f, 0.009247f,
- 0.010765f, 0.012344f, 0.014420f, 0.017090f, 0.020493f, 0.024551f, 0.030014f, 0.037689f,
- 0.047302f, 0.060028f, 0.077820f, 0.100830f, 0.132812f, 0.174561f, 0.228516f, 0.294434f,
- 0.371582f, 0.457031f, 0.812012f, 0.820801f, 0.823730f, 0.824219f, 0.824707f, 0.824219f,
- 0.000000f, 0.000053f, 0.000206f, 0.000360f, 0.000379f, 0.000391f, 0.000379f, 0.000478f,
- 0.000549f, 0.000589f, 0.000626f, 0.000674f, 0.000762f, 0.000832f, 0.000894f, 0.001050f,
- 0.001111f, 0.001155f, 0.001286f, 0.001345f, 0.001449f, 0.001564f, 0.001666f, 0.001750f,
- 0.001856f, 0.001925f, 0.002056f, 0.002359f, 0.002542f, 0.002728f, 0.003042f, 0.003164f,
- 0.003460f, 0.003786f, 0.004116f, 0.004578f, 0.005116f, 0.005688f, 0.006508f, 0.007229f,
- 0.008125f, 0.009232f, 0.010796f, 0.012741f, 0.015137f, 0.018158f, 0.022186f, 0.028030f,
- 0.035248f, 0.045593f, 0.059052f, 0.078308f, 0.105042f, 0.141602f, 0.190308f, 0.252930f,
- 0.329102f, 0.417969f, 0.797852f, 0.807129f, 0.810059f, 0.810547f, 0.811035f, 0.810547f,
- 0.000000f, 0.000000f, 0.000082f, 0.000195f, 0.000309f, 0.000336f, 0.000324f, 0.000414f,
- 0.000439f, 0.000460f, 0.000599f, 0.000643f, 0.000637f, 0.000690f, 0.000733f, 0.000834f,
- 0.000821f, 0.000922f, 0.000989f, 0.001067f, 0.001207f, 0.001293f, 0.001327f, 0.001476f,
- 0.001581f, 0.001663f, 0.001725f, 0.001906f, 0.001934f, 0.002180f, 0.002258f, 0.002602f,
- 0.002701f, 0.003019f, 0.003229f, 0.003502f, 0.003847f, 0.004261f, 0.004795f, 0.005318f,
- 0.006130f, 0.007008f, 0.008118f, 0.009277f, 0.011024f, 0.013229f, 0.016205f, 0.020203f,
- 0.025620f, 0.033020f, 0.043854f, 0.059021f, 0.080383f, 0.111206f, 0.154419f, 0.212646f,
- 0.287354f, 0.378418f, 0.781250f, 0.792480f, 0.793457f, 0.795410f, 0.795898f, 0.794922f,
- 0.000000f, 0.000121f, 0.000120f, 0.000198f, 0.000275f, 0.000249f, 0.000290f, 0.000360f,
- 0.000375f, 0.000379f, 0.000391f, 0.000438f, 0.000505f, 0.000534f, 0.000669f, 0.000629f,
- 0.000659f, 0.000754f, 0.000890f, 0.000833f, 0.000849f, 0.000975f, 0.001029f, 0.001117f,
- 0.001193f, 0.001203f, 0.001269f, 0.001424f, 0.001594f, 0.001675f, 0.001737f, 0.001957f,
- 0.002094f, 0.002319f, 0.002342f, 0.002609f, 0.002928f, 0.003248f, 0.003523f, 0.003967f,
- 0.004547f, 0.005138f, 0.005871f, 0.006760f, 0.007912f, 0.009430f, 0.011528f, 0.014236f,
- 0.017899f, 0.023346f, 0.031235f, 0.042694f, 0.059235f, 0.084229f, 0.120972f, 0.173950f,
- 0.245239f, 0.334473f, 0.764160f, 0.775391f, 0.777344f, 0.778809f, 0.777832f, 0.778809f,
- 0.000000f, 0.000121f, 0.000119f, 0.000182f, 0.000177f, 0.000179f, 0.000262f, 0.000239f,
- 0.000309f, 0.000322f, 0.000404f, 0.000370f, 0.000361f, 0.000430f, 0.000458f, 0.000540f,
- 0.000589f, 0.000615f, 0.000648f, 0.000632f, 0.000777f, 0.000782f, 0.000798f, 0.000871f,
- 0.000857f, 0.000925f, 0.001000f, 0.001045f, 0.001191f, 0.001223f, 0.001426f, 0.001419f,
- 0.001512f, 0.001635f, 0.001884f, 0.002092f, 0.002100f, 0.002293f, 0.002577f, 0.003012f,
- 0.003258f, 0.003761f, 0.004253f, 0.004814f, 0.005619f, 0.006676f, 0.008064f, 0.009750f,
- 0.012268f, 0.015854f, 0.021255f, 0.029282f, 0.041687f, 0.061005f, 0.091370f, 0.136230f,
- 0.202759f, 0.291504f, 0.746582f, 0.757324f, 0.759277f, 0.760254f, 0.760254f, 0.760254f,
- 0.000000f, 0.000000f, 0.000117f, 0.000126f, 0.000113f, 0.000146f, 0.000158f, 0.000155f,
- 0.000189f, 0.000288f, 0.000254f, 0.000336f, 0.000347f, 0.000353f, 0.000370f, 0.000355f,
- 0.000390f, 0.000417f, 0.000456f, 0.000480f, 0.000525f, 0.000587f, 0.000596f, 0.000620f,
- 0.000676f, 0.000740f, 0.000758f, 0.000852f, 0.000907f, 0.000947f, 0.001057f, 0.001122f,
- 0.001170f, 0.001293f, 0.001316f, 0.001437f, 0.001531f, 0.001813f, 0.001952f, 0.002090f,
- 0.002346f, 0.002560f, 0.002974f, 0.003334f, 0.003899f, 0.004547f, 0.005360f, 0.006516f,
- 0.008179f, 0.010468f, 0.013947f, 0.019241f, 0.027832f, 0.041443f, 0.064941f, 0.102600f,
- 0.162231f, 0.247437f, 0.726074f, 0.737793f, 0.739258f, 0.740723f, 0.741211f, 0.741211f,
- 0.000000f, 0.000118f, 0.000115f, 0.000113f, 0.000110f, 0.000126f, 0.000121f, 0.000139f,
- 0.000147f, 0.000160f, 0.000161f, 0.000233f, 0.000199f, 0.000266f, 0.000286f, 0.000297f,
- 0.000329f, 0.000313f, 0.000347f, 0.000358f, 0.000364f, 0.000394f, 0.000435f, 0.000446f,
- 0.000489f, 0.000506f, 0.000546f, 0.000625f, 0.000648f, 0.000674f, 0.000723f, 0.000782f,
- 0.000865f, 0.000918f, 0.000979f, 0.001104f, 0.001100f, 0.001196f, 0.001352f, 0.001488f,
- 0.001586f, 0.001749f, 0.001955f, 0.002275f, 0.002644f, 0.003054f, 0.003563f, 0.004322f,
- 0.005314f, 0.006786f, 0.008980f, 0.012115f, 0.017319f, 0.026520f, 0.043121f, 0.072693f,
- 0.123535f, 0.203613f, 0.705566f, 0.716797f, 0.719238f, 0.719727f, 0.720703f, 0.721191f,
- 0.000000f, 0.000000f, 0.000112f, 0.000109f, 0.000106f, 0.000104f, 0.000102f, 0.000096f,
- 0.000091f, 0.000113f, 0.000147f, 0.000129f, 0.000155f, 0.000134f, 0.000196f, 0.000205f,
- 0.000181f, 0.000239f, 0.000297f, 0.000255f, 0.000317f, 0.000273f, 0.000335f, 0.000299f,
- 0.000379f, 0.000385f, 0.000398f, 0.000402f, 0.000473f, 0.000552f, 0.000489f, 0.000543f,
- 0.000557f, 0.000606f, 0.000662f, 0.000698f, 0.000747f, 0.000810f, 0.000902f, 0.000961f,
- 0.001063f, 0.001166f, 0.001312f, 0.001523f, 0.001662f, 0.001908f, 0.002298f, 0.002758f,
- 0.003365f, 0.004135f, 0.005394f, 0.007290f, 0.010490f, 0.015991f, 0.026215f, 0.047180f,
- 0.087646f, 0.160645f, 0.682617f, 0.695801f, 0.697266f, 0.697266f, 0.697266f, 0.698730f,
- 0.000000f, 0.000112f, 0.000106f, 0.000104f, 0.000100f, 0.000098f, 0.000095f, 0.000094f,
- 0.000090f, 0.000085f, 0.000080f, 0.000081f, 0.000085f, 0.000123f, 0.000123f, 0.000138f,
- 0.000151f, 0.000158f, 0.000147f, 0.000171f, 0.000183f, 0.000192f, 0.000242f, 0.000215f,
- 0.000253f, 0.000256f, 0.000269f, 0.000278f, 0.000293f, 0.000315f, 0.000377f, 0.000357f,
- 0.000357f, 0.000423f, 0.000479f, 0.000493f, 0.000489f, 0.000535f, 0.000579f, 0.000628f,
- 0.000683f, 0.000731f, 0.000833f, 0.000935f, 0.001068f, 0.001200f, 0.001347f, 0.001581f,
- 0.001995f, 0.002419f, 0.003109f, 0.004147f, 0.005829f, 0.008919f, 0.014641f, 0.027405f,
- 0.056885f, 0.119385f, 0.658691f, 0.669922f, 0.673828f, 0.673828f, 0.675293f, 0.675293f,
- 0.000000f, 0.000105f, 0.000101f, 0.000096f, 0.000092f, 0.000089f, 0.000087f, 0.000085f,
- 0.000083f, 0.000081f, 0.000077f, 0.000073f, 0.000070f, 0.000066f, 0.000080f, 0.000084f,
- 0.000089f, 0.000068f, 0.000101f, 0.000094f, 0.000116f, 0.000118f, 0.000125f, 0.000129f,
- 0.000150f, 0.000168f, 0.000153f, 0.000192f, 0.000195f, 0.000185f, 0.000200f, 0.000217f,
- 0.000226f, 0.000247f, 0.000257f, 0.000262f, 0.000319f, 0.000334f, 0.000347f, 0.000376f,
- 0.000395f, 0.000447f, 0.000504f, 0.000544f, 0.000590f, 0.000670f, 0.000789f, 0.000887f,
- 0.001069f, 0.001345f, 0.001670f, 0.002167f, 0.003065f, 0.004562f, 0.007660f, 0.014290f,
- 0.032135f, 0.081299f, 0.632812f, 0.645996f, 0.648926f, 0.649414f, 0.648926f, 0.649902f,
- 0.000109f, 0.000094f, 0.000087f, 0.000082f, 0.000078f, 0.000076f, 0.000074f, 0.000071f,
- 0.000069f, 0.000068f, 0.000067f, 0.000066f, 0.000064f, 0.000061f, 0.000058f, 0.000055f,
- 0.000053f, 0.000050f, 0.000051f, 0.000046f, 0.000059f, 0.000056f, 0.000057f, 0.000068f,
- 0.000078f, 0.000088f, 0.000096f, 0.000096f, 0.000105f, 0.000107f, 0.000128f, 0.000121f,
- 0.000133f, 0.000141f, 0.000156f, 0.000151f, 0.000160f, 0.000200f, 0.000209f, 0.000198f,
- 0.000222f, 0.000242f, 0.000258f, 0.000275f, 0.000314f, 0.000352f, 0.000410f, 0.000468f,
- 0.000537f, 0.000639f, 0.000799f, 0.001002f, 0.001390f, 0.002092f, 0.003466f, 0.006653f,
- 0.015305f, 0.048004f, 0.606934f, 0.618652f, 0.622559f, 0.623047f, 0.623535f, 0.624023f,
- 0.000084f, 0.000067f, 0.000064f, 0.000062f, 0.000057f, 0.000056f, 0.000053f, 0.000054f,
- 0.000051f, 0.000052f, 0.000050f, 0.000050f, 0.000050f, 0.000049f, 0.000048f, 0.000047f,
- 0.000046f, 0.000044f, 0.000042f, 0.000040f, 0.000039f, 0.000037f, 0.000035f, 0.000036f,
- 0.000037f, 0.000031f, 0.000040f, 0.000041f, 0.000042f, 0.000051f, 0.000058f, 0.000063f,
- 0.000067f, 0.000069f, 0.000072f, 0.000079f, 0.000085f, 0.000092f, 0.000093f, 0.000101f,
- 0.000107f, 0.000123f, 0.000125f, 0.000139f, 0.000147f, 0.000154f, 0.000181f, 0.000204f,
- 0.000229f, 0.000270f, 0.000327f, 0.000425f, 0.000559f, 0.000772f, 0.001265f, 0.002462f,
- 0.006191f, 0.022415f, 0.578613f, 0.592285f, 0.595215f, 0.596191f, 0.596191f, 0.597656f,
- 0.000008f, 0.000022f, 0.000022f, 0.000024f, 0.000024f, 0.000027f, 0.000028f, 0.000028f,
- 0.000028f, 0.000026f, 0.000028f, 0.000029f, 0.000029f, 0.000028f, 0.000029f, 0.000029f,
- 0.000029f, 0.000029f, 0.000030f, 0.000030f, 0.000030f, 0.000029f, 0.000028f, 0.000027f,
- 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f,
- 0.000021f, 0.000020f, 0.000022f, 0.000026f, 0.000028f, 0.000033f, 0.000037f, 0.000036f,
- 0.000039f, 0.000045f, 0.000051f, 0.000046f, 0.000056f, 0.000059f, 0.000061f, 0.000071f,
- 0.000084f, 0.000098f, 0.000110f, 0.000133f, 0.000169f, 0.000223f, 0.000356f, 0.000648f,
- 0.001702f, 0.007713f, 0.550293f, 0.564453f, 0.566895f, 0.567871f, 0.568359f, 0.568848f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000002f, 0.000003f, 0.000004f, 0.000006f,
- 0.000007f, 0.000007f, 0.000008f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000011f,
- 0.000012f, 0.000012f, 0.000013f, 0.000013f, 0.000013f, 0.000014f, 0.000014f, 0.000013f,
- 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
- 0.000008f, 0.000008f, 0.000009f, 0.000011f, 0.000014f, 0.000017f, 0.000015f, 0.000018f,
- 0.000021f, 0.000022f, 0.000023f, 0.000026f, 0.000035f, 0.000040f, 0.000056f, 0.000089f,
- 0.000225f, 0.001332f, 0.520996f, 0.535156f, 0.538086f, 0.540039f, 0.540039f, 0.540039f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000003f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000002f, 0.000003f, 0.000003f,
- 0.000004f, 0.000017f, 0.491211f, 0.506348f, 0.508789f, 0.510254f, 0.510254f, 0.510742f,
- },
- {
- 0.064758f, 0.179688f, 0.277344f, 0.358398f, 0.427002f, 0.485107f, 0.535156f, 0.578613f,
- 0.615234f, 0.647949f, 0.677734f, 0.703125f, 0.725586f, 0.745605f, 0.763672f, 0.780273f,
- 0.795410f, 0.810059f, 0.821777f, 0.833496f, 0.843750f, 0.854004f, 0.862793f, 0.871582f,
- 0.879883f, 0.886719f, 0.894043f, 0.900879f, 0.906250f, 0.912109f, 0.917969f, 0.922852f,
- 0.927246f, 0.932129f, 0.936523f, 0.940918f, 0.944824f, 0.948242f, 0.951660f, 0.955078f,
- 0.958496f, 0.961426f, 0.964844f, 0.967773f, 0.970215f, 0.973145f, 0.975586f, 0.977539f,
- 0.979980f, 0.982422f, 0.984863f, 0.986328f, 0.988770f, 0.990234f, 0.992676f, 0.993652f,
- 0.995605f, 0.997559f, 0.998535f, 0.996582f, 0.995117f, 0.993652f, 0.992188f, 0.990723f,
- 0.040344f, 0.121460f, 0.199341f, 0.272949f, 0.339600f, 0.401123f, 0.455078f, 0.501953f,
- 0.546875f, 0.583984f, 0.618164f, 0.648926f, 0.676270f, 0.700195f, 0.723145f, 0.743164f,
- 0.761230f, 0.776855f, 0.793457f, 0.806641f, 0.819336f, 0.831543f, 0.842285f, 0.852051f,
- 0.861328f, 0.869629f, 0.877930f, 0.886230f, 0.892578f, 0.899902f, 0.905273f, 0.911621f,
- 0.917480f, 0.922852f, 0.927246f, 0.932129f, 0.936035f, 0.940430f, 0.945312f, 0.949219f,
- 0.952148f, 0.956055f, 0.958984f, 0.961914f, 0.965332f, 0.967773f, 0.970703f, 0.973633f,
- 0.976074f, 0.978516f, 0.980957f, 0.983398f, 0.985840f, 0.987305f, 0.989258f, 0.991699f,
- 0.993652f, 0.995117f, 0.997070f, 0.995605f, 0.994141f, 0.993164f, 0.991699f, 0.990234f,
- 0.027191f, 0.084961f, 0.145630f, 0.206177f, 0.266113f, 0.323242f, 0.377930f, 0.428711f,
- 0.474609f, 0.517090f, 0.554688f, 0.591309f, 0.621582f, 0.650391f, 0.676758f, 0.700684f,
- 0.723145f, 0.741699f, 0.760254f, 0.776855f, 0.791504f, 0.805664f, 0.818359f, 0.830566f,
- 0.841309f, 0.851074f, 0.861816f, 0.870117f, 0.878418f, 0.885254f, 0.892090f, 0.899414f,
- 0.906250f, 0.912598f, 0.916992f, 0.922363f, 0.928223f, 0.932617f, 0.937500f, 0.941895f,
- 0.945801f, 0.949219f, 0.953613f, 0.957031f, 0.960449f, 0.963379f, 0.966797f, 0.969727f,
- 0.971680f, 0.974609f, 0.977539f, 0.979980f, 0.981934f, 0.984375f, 0.986328f, 0.989258f,
- 0.991211f, 0.992676f, 0.996094f, 0.994629f, 0.993652f, 0.992188f, 0.990723f, 0.989746f,
- 0.019577f, 0.061340f, 0.108337f, 0.156860f, 0.207153f, 0.258789f, 0.310059f, 0.358887f,
- 0.405762f, 0.450928f, 0.491211f, 0.530273f, 0.565430f, 0.597656f, 0.627441f, 0.654297f,
- 0.680176f, 0.702637f, 0.724121f, 0.743164f, 0.760742f, 0.776855f, 0.791992f, 0.806152f,
- 0.817871f, 0.830078f, 0.841797f, 0.852539f, 0.861816f, 0.870117f, 0.878906f, 0.886230f,
- 0.893066f, 0.900391f, 0.906738f, 0.912598f, 0.918457f, 0.923340f, 0.928223f, 0.933594f,
- 0.938477f, 0.942871f, 0.946777f, 0.950684f, 0.954590f, 0.958496f, 0.960938f, 0.964844f,
- 0.967773f, 0.970703f, 0.973633f, 0.976074f, 0.979004f, 0.981445f, 0.983398f, 0.985840f,
- 0.987793f, 0.990234f, 0.995117f, 0.993652f, 0.992676f, 0.991699f, 0.990234f, 0.989258f,
- 0.014397f, 0.046295f, 0.081543f, 0.120728f, 0.162842f, 0.206177f, 0.250977f, 0.296143f,
- 0.342041f, 0.385986f, 0.427979f, 0.468262f, 0.506348f, 0.542480f, 0.575195f, 0.605469f,
- 0.633789f, 0.660156f, 0.684570f, 0.706543f, 0.727539f, 0.745117f, 0.763184f, 0.778809f,
- 0.793945f, 0.807617f, 0.820312f, 0.833008f, 0.842773f, 0.852539f, 0.862305f, 0.872070f,
- 0.879395f, 0.887207f, 0.894531f, 0.900879f, 0.907227f, 0.914551f, 0.919922f, 0.925293f,
- 0.930176f, 0.935547f, 0.938965f, 0.943359f, 0.948730f, 0.952637f, 0.956055f, 0.959473f,
- 0.962891f, 0.966309f, 0.969238f, 0.972656f, 0.975098f, 0.977539f, 0.980957f, 0.982910f,
- 0.984863f, 0.987793f, 0.994141f, 0.993164f, 0.991699f, 0.990723f, 0.989746f, 0.988281f,
- 0.010925f, 0.035828f, 0.063660f, 0.094360f, 0.128174f, 0.164551f, 0.203247f, 0.244385f,
- 0.285645f, 0.326416f, 0.367432f, 0.409424f, 0.447998f, 0.484131f, 0.520508f, 0.553711f,
- 0.584473f, 0.614258f, 0.641113f, 0.666016f, 0.689453f, 0.710938f, 0.730469f, 0.750488f,
- 0.766602f, 0.781250f, 0.796387f, 0.809570f, 0.822266f, 0.833496f, 0.844727f, 0.854980f,
- 0.864258f, 0.873047f, 0.881348f, 0.889648f, 0.895996f, 0.903809f, 0.910156f, 0.916504f,
- 0.921387f, 0.926758f, 0.932129f, 0.937500f, 0.941895f, 0.946777f, 0.950684f, 0.954102f,
- 0.958008f, 0.960938f, 0.965332f, 0.968262f, 0.971680f, 0.975098f, 0.977539f, 0.979492f,
- 0.982422f, 0.984863f, 0.992676f, 0.991699f, 0.990723f, 0.989746f, 0.988770f, 0.987793f,
- 0.008698f, 0.028244f, 0.049866f, 0.074463f, 0.102295f, 0.132935f, 0.165161f, 0.200073f,
- 0.236206f, 0.275391f, 0.313477f, 0.352051f, 0.391113f, 0.428955f, 0.465088f, 0.500977f,
- 0.534180f, 0.565430f, 0.593750f, 0.622559f, 0.648438f, 0.671875f, 0.694824f, 0.715820f,
- 0.734863f, 0.753906f, 0.771484f, 0.784668f, 0.799805f, 0.813477f, 0.825195f, 0.836914f,
- 0.847656f, 0.857910f, 0.866699f, 0.875488f, 0.884766f, 0.892090f, 0.898438f, 0.906250f,
- 0.913086f, 0.918457f, 0.923828f, 0.929688f, 0.935059f, 0.939941f, 0.944336f, 0.948730f,
- 0.952637f, 0.956055f, 0.959961f, 0.963379f, 0.967285f, 0.970703f, 0.973633f, 0.976074f,
- 0.979492f, 0.982422f, 0.991211f, 0.990723f, 0.990234f, 0.988770f, 0.987793f, 0.986328f,
- 0.007210f, 0.022797f, 0.040039f, 0.060181f, 0.082153f, 0.107300f, 0.134155f, 0.164673f,
- 0.196167f, 0.229492f, 0.265381f, 0.301025f, 0.338379f, 0.374756f, 0.411133f, 0.446533f,
- 0.481201f, 0.515625f, 0.546387f, 0.576660f, 0.605957f, 0.631348f, 0.656738f, 0.681152f,
- 0.702148f, 0.722168f, 0.741699f, 0.758789f, 0.775391f, 0.791016f, 0.803711f, 0.817383f,
- 0.829102f, 0.840820f, 0.851562f, 0.860840f, 0.871094f, 0.879395f, 0.887695f, 0.895020f,
- 0.901855f, 0.909180f, 0.915527f, 0.921387f, 0.927734f, 0.932129f, 0.937500f, 0.941895f,
- 0.947266f, 0.950684f, 0.955078f, 0.958984f, 0.962891f, 0.966797f, 0.969727f, 0.973145f,
- 0.976562f, 0.979004f, 0.990234f, 0.989746f, 0.988770f, 0.987793f, 0.986816f, 0.985840f,
- 0.005863f, 0.018936f, 0.032898f, 0.049377f, 0.067261f, 0.088257f, 0.110535f, 0.135254f,
- 0.162231f, 0.191895f, 0.223389f, 0.255371f, 0.290039f, 0.324707f, 0.359863f, 0.395996f,
- 0.429932f, 0.464355f, 0.497314f, 0.529297f, 0.559570f, 0.587891f, 0.616699f, 0.642090f,
- 0.665527f, 0.688965f, 0.709961f, 0.729492f, 0.747559f, 0.765625f, 0.780762f, 0.794922f,
- 0.809082f, 0.822754f, 0.833984f, 0.844727f, 0.855957f, 0.864746f, 0.875000f, 0.883789f,
- 0.891113f, 0.898926f, 0.906250f, 0.912598f, 0.918457f, 0.925293f, 0.930664f, 0.935059f,
- 0.940918f, 0.945312f, 0.950195f, 0.954590f, 0.958496f, 0.962402f, 0.965820f, 0.969238f,
- 0.972656f, 0.976074f, 0.988770f, 0.988770f, 0.987793f, 0.986816f, 0.985840f, 0.984863f,
- 0.004925f, 0.015518f, 0.027451f, 0.041199f, 0.055786f, 0.072998f, 0.091492f, 0.112427f,
- 0.135254f, 0.160767f, 0.187500f, 0.216919f, 0.247314f, 0.280273f, 0.313477f, 0.346680f,
- 0.381592f, 0.415283f, 0.448730f, 0.481201f, 0.513184f, 0.543945f, 0.573242f, 0.601562f,
- 0.627441f, 0.652344f, 0.675293f, 0.697754f, 0.718262f, 0.737793f, 0.754883f, 0.771973f,
- 0.787109f, 0.800781f, 0.815430f, 0.828125f, 0.839844f, 0.851074f, 0.860840f, 0.870117f,
- 0.879883f, 0.887695f, 0.896484f, 0.902832f, 0.911133f, 0.916992f, 0.922852f, 0.928711f,
- 0.934082f, 0.939941f, 0.944336f, 0.948730f, 0.954102f, 0.958008f, 0.961426f, 0.965332f,
- 0.969238f, 0.972168f, 0.987305f, 0.987305f, 0.986816f, 0.985840f, 0.984863f, 0.983887f,
- 0.004139f, 0.012955f, 0.022781f, 0.034088f, 0.046997f, 0.061005f, 0.076538f, 0.094360f,
- 0.113464f, 0.134888f, 0.158203f, 0.183716f, 0.210693f, 0.239990f, 0.270264f, 0.302734f,
- 0.334961f, 0.367676f, 0.400635f, 0.434082f, 0.467041f, 0.497803f, 0.528809f, 0.558105f,
- 0.586426f, 0.614258f, 0.638672f, 0.663574f, 0.686035f, 0.707520f, 0.728027f, 0.745605f,
- 0.762695f, 0.779297f, 0.794434f, 0.808594f, 0.821777f, 0.834473f, 0.845215f, 0.855957f,
- 0.866699f, 0.876465f, 0.884766f, 0.892090f, 0.900391f, 0.908203f, 0.915039f, 0.920898f,
- 0.927246f, 0.932617f, 0.937988f, 0.943848f, 0.948730f, 0.952637f, 0.957520f, 0.961426f,
- 0.965820f, 0.968750f, 0.985840f, 0.985840f, 0.985840f, 0.984375f, 0.983887f, 0.982910f,
- 0.003492f, 0.011307f, 0.019608f, 0.028793f, 0.039246f, 0.051544f, 0.064392f, 0.078796f,
- 0.095337f, 0.113953f, 0.134033f, 0.155396f, 0.179688f, 0.205200f, 0.232300f, 0.261475f,
- 0.291748f, 0.323730f, 0.355225f, 0.387939f, 0.420410f, 0.452637f, 0.483887f, 0.514648f,
- 0.544922f, 0.573730f, 0.601074f, 0.626953f, 0.651367f, 0.675293f, 0.697266f, 0.717285f,
- 0.736816f, 0.755371f, 0.771973f, 0.786621f, 0.803223f, 0.815430f, 0.828613f, 0.840820f,
- 0.851562f, 0.863281f, 0.873047f, 0.880859f, 0.890625f, 0.898438f, 0.905762f, 0.913086f,
- 0.919434f, 0.925781f, 0.931641f, 0.937500f, 0.942871f, 0.947754f, 0.952637f, 0.957520f,
- 0.960938f, 0.965820f, 0.984375f, 0.984863f, 0.984375f, 0.983398f, 0.982422f, 0.981445f,
- 0.002977f, 0.009415f, 0.016708f, 0.024811f, 0.033356f, 0.043457f, 0.054535f, 0.067017f,
- 0.080322f, 0.096130f, 0.113708f, 0.132080f, 0.152710f, 0.175415f, 0.199829f, 0.226440f,
- 0.253662f, 0.282959f, 0.313232f, 0.343750f, 0.375000f, 0.406982f, 0.439453f, 0.471191f,
- 0.501465f, 0.531738f, 0.560547f, 0.587891f, 0.615234f, 0.640625f, 0.664062f, 0.687500f,
- 0.708496f, 0.728516f, 0.747559f, 0.765137f, 0.781738f, 0.795898f, 0.811523f, 0.824707f,
- 0.836426f, 0.847656f, 0.858887f, 0.869141f, 0.878906f, 0.887695f, 0.895996f, 0.904297f,
- 0.911133f, 0.917969f, 0.925293f, 0.931152f, 0.937012f, 0.942383f, 0.947266f, 0.953125f,
- 0.957031f, 0.961426f, 0.982910f, 0.983398f, 0.982910f, 0.982422f, 0.981445f, 0.980957f,
- 0.002743f, 0.008568f, 0.014305f, 0.021378f, 0.028732f, 0.037201f, 0.046387f, 0.057068f,
- 0.068848f, 0.082336f, 0.096924f, 0.113159f, 0.130859f, 0.150146f, 0.171509f, 0.194824f,
- 0.219482f, 0.246338f, 0.273926f, 0.302734f, 0.333496f, 0.364502f, 0.395752f, 0.426758f,
- 0.458252f, 0.489990f, 0.519531f, 0.548340f, 0.576660f, 0.604004f, 0.630859f, 0.654297f,
- 0.678223f, 0.700684f, 0.720215f, 0.740234f, 0.758301f, 0.775391f, 0.790527f, 0.805176f,
- 0.818848f, 0.833008f, 0.844238f, 0.855469f, 0.866699f, 0.876953f, 0.886230f, 0.894043f,
- 0.902832f, 0.910645f, 0.917480f, 0.924316f, 0.930664f, 0.937012f, 0.941895f, 0.947266f,
- 0.952148f, 0.957031f, 0.981445f, 0.982422f, 0.981445f, 0.980957f, 0.980469f, 0.979004f,
- 0.002504f, 0.007004f, 0.012634f, 0.018555f, 0.024933f, 0.032654f, 0.040283f, 0.048920f,
- 0.059357f, 0.070007f, 0.082642f, 0.096741f, 0.112122f, 0.128906f, 0.147339f, 0.167603f,
- 0.189697f, 0.213257f, 0.238770f, 0.265869f, 0.293701f, 0.323242f, 0.354004f, 0.384766f,
- 0.415283f, 0.447021f, 0.478516f, 0.507812f, 0.536621f, 0.565918f, 0.593750f, 0.620605f,
- 0.645508f, 0.668945f, 0.692383f, 0.712891f, 0.733398f, 0.751465f, 0.769531f, 0.785156f,
- 0.801270f, 0.814941f, 0.828125f, 0.841797f, 0.853516f, 0.864746f, 0.874512f, 0.883789f,
- 0.893555f, 0.900879f, 0.910156f, 0.917480f, 0.923340f, 0.930664f, 0.936523f, 0.942383f,
- 0.947754f, 0.952637f, 0.979492f, 0.980469f, 0.980469f, 0.979492f, 0.978516f, 0.978027f,
- 0.002039f, 0.006287f, 0.010864f, 0.016129f, 0.021637f, 0.027786f, 0.034485f, 0.042450f,
- 0.051331f, 0.060760f, 0.071594f, 0.082886f, 0.096313f, 0.110840f, 0.126587f, 0.145020f,
- 0.164185f, 0.185181f, 0.207520f, 0.232300f, 0.258301f, 0.285889f, 0.314941f, 0.344238f,
- 0.374268f, 0.405029f, 0.436035f, 0.466797f, 0.498291f, 0.527344f, 0.555664f, 0.583984f,
- 0.611328f, 0.636230f, 0.661133f, 0.684082f, 0.705566f, 0.726562f, 0.745605f, 0.764648f,
- 0.781250f, 0.797852f, 0.812500f, 0.825195f, 0.838867f, 0.851074f, 0.862305f, 0.873535f,
- 0.883301f, 0.892578f, 0.901367f, 0.908203f, 0.916992f, 0.923828f, 0.931152f, 0.937012f,
- 0.942383f, 0.947266f, 0.978027f, 0.978516f, 0.979004f, 0.978027f, 0.977051f, 0.977051f,
- 0.001762f, 0.005489f, 0.009804f, 0.013931f, 0.019028f, 0.024445f, 0.030518f, 0.036865f,
- 0.044189f, 0.052460f, 0.061432f, 0.071960f, 0.083008f, 0.095642f, 0.109558f, 0.124756f,
- 0.141602f, 0.160156f, 0.180664f, 0.202148f, 0.225952f, 0.250977f, 0.278076f, 0.305664f,
- 0.334961f, 0.364990f, 0.394775f, 0.425537f, 0.456543f, 0.487061f, 0.517090f, 0.546387f,
- 0.575195f, 0.602539f, 0.627930f, 0.653809f, 0.676758f, 0.699707f, 0.721191f, 0.740723f,
- 0.759766f, 0.777832f, 0.793945f, 0.809082f, 0.823242f, 0.836426f, 0.849609f, 0.861328f,
- 0.872070f, 0.881836f, 0.892578f, 0.900391f, 0.908691f, 0.916992f, 0.924316f, 0.931152f,
- 0.937500f, 0.943359f, 0.976074f, 0.977051f, 0.977051f, 0.976562f, 0.976074f, 0.975098f,
- 0.001675f, 0.005020f, 0.008400f, 0.012253f, 0.016724f, 0.021469f, 0.026428f, 0.032104f,
- 0.039062f, 0.045563f, 0.053741f, 0.062103f, 0.072205f, 0.082947f, 0.094666f, 0.107727f,
- 0.122681f, 0.139038f, 0.156250f, 0.176514f, 0.197388f, 0.220581f, 0.244629f, 0.270752f,
- 0.297607f, 0.326172f, 0.355957f, 0.386475f, 0.416748f, 0.447754f, 0.478027f, 0.507812f,
- 0.538086f, 0.566406f, 0.594727f, 0.621582f, 0.647461f, 0.671387f, 0.694336f, 0.716797f,
- 0.737305f, 0.755859f, 0.773438f, 0.791016f, 0.807129f, 0.820801f, 0.834961f, 0.848145f,
- 0.860352f, 0.871582f, 0.881836f, 0.891602f, 0.901367f, 0.909180f, 0.917480f, 0.925293f,
- 0.932129f, 0.938965f, 0.974609f, 0.975586f, 0.976074f, 0.974609f, 0.974121f, 0.973633f,
- 0.001437f, 0.004513f, 0.007427f, 0.010994f, 0.014526f, 0.018829f, 0.023331f, 0.028229f,
- 0.034058f, 0.040192f, 0.046844f, 0.054321f, 0.062683f, 0.071716f, 0.082397f, 0.093933f,
- 0.106567f, 0.120728f, 0.136230f, 0.153320f, 0.172485f, 0.192627f, 0.214233f, 0.237915f,
- 0.263672f, 0.290527f, 0.318115f, 0.347412f, 0.377197f, 0.408203f, 0.438477f, 0.469482f,
- 0.499512f, 0.529785f, 0.558594f, 0.586914f, 0.614258f, 0.641602f, 0.665527f, 0.689941f,
- 0.711914f, 0.732422f, 0.752930f, 0.771484f, 0.789062f, 0.805664f, 0.819824f, 0.833984f,
- 0.847656f, 0.860840f, 0.871094f, 0.881836f, 0.891602f, 0.902344f, 0.910156f, 0.918457f,
- 0.926270f, 0.932617f, 0.972168f, 0.973633f, 0.973633f, 0.973145f, 0.973145f, 0.971680f,
- 0.001390f, 0.003952f, 0.006779f, 0.009941f, 0.013062f, 0.017029f, 0.020905f, 0.024994f,
- 0.029877f, 0.035187f, 0.041077f, 0.047119f, 0.055145f, 0.062500f, 0.071594f, 0.081543f,
- 0.092712f, 0.104736f, 0.118530f, 0.133179f, 0.150024f, 0.168091f, 0.187378f, 0.209717f,
- 0.232178f, 0.256836f, 0.283447f, 0.311279f, 0.339844f, 0.369873f, 0.399658f, 0.429932f,
- 0.461426f, 0.492188f, 0.521973f, 0.551758f, 0.580566f, 0.608887f, 0.635254f, 0.660645f,
- 0.685059f, 0.708008f, 0.729492f, 0.750488f, 0.769043f, 0.786621f, 0.802734f, 0.818848f,
- 0.832520f, 0.846680f, 0.860352f, 0.871582f, 0.882324f, 0.892578f, 0.902832f, 0.911133f,
- 0.919922f, 0.926758f, 0.970703f, 0.971680f, 0.971680f, 0.971680f, 0.971680f, 0.969238f,
- 0.001328f, 0.003641f, 0.006138f, 0.008690f, 0.011444f, 0.014786f, 0.018311f, 0.022125f,
- 0.026337f, 0.031403f, 0.036011f, 0.041809f, 0.047943f, 0.054901f, 0.062622f, 0.071106f,
- 0.081299f, 0.091614f, 0.103455f, 0.116333f, 0.130493f, 0.146484f, 0.164307f, 0.183228f,
- 0.204224f, 0.226685f, 0.251221f, 0.277100f, 0.303711f, 0.332764f, 0.361572f, 0.391846f,
- 0.422852f, 0.454102f, 0.485352f, 0.515625f, 0.545410f, 0.574707f, 0.603027f, 0.630371f,
- 0.656250f, 0.681641f, 0.705078f, 0.726562f, 0.747070f, 0.767578f, 0.784668f, 0.803223f,
- 0.818848f, 0.833008f, 0.847656f, 0.860352f, 0.872559f, 0.883301f, 0.894043f, 0.903809f,
- 0.913574f, 0.921387f, 0.967773f, 0.970215f, 0.970215f, 0.968750f, 0.969238f, 0.968750f,
- 0.001053f, 0.002905f, 0.005432f, 0.007912f, 0.010658f, 0.012901f, 0.016464f, 0.019363f,
- 0.023376f, 0.027237f, 0.031799f, 0.036346f, 0.042145f, 0.048248f, 0.054871f, 0.062256f,
- 0.070618f, 0.079834f, 0.089844f, 0.101440f, 0.113831f, 0.128174f, 0.143433f, 0.160156f,
- 0.179077f, 0.199707f, 0.222046f, 0.245483f, 0.271240f, 0.297363f, 0.325684f, 0.355469f,
- 0.385254f, 0.416016f, 0.447754f, 0.479004f, 0.508789f, 0.539551f, 0.570312f, 0.598145f,
- 0.626465f, 0.652344f, 0.678223f, 0.702148f, 0.725098f, 0.746094f, 0.765625f, 0.785645f,
- 0.803223f, 0.819336f, 0.834961f, 0.848145f, 0.861328f, 0.873535f, 0.884766f, 0.895508f,
- 0.905762f, 0.915527f, 0.965332f, 0.967773f, 0.968262f, 0.967773f, 0.967285f, 0.966309f,
- 0.001106f, 0.002684f, 0.004913f, 0.006733f, 0.009300f, 0.011955f, 0.014435f, 0.017700f,
- 0.020477f, 0.024124f, 0.028091f, 0.032532f, 0.037231f, 0.042511f, 0.048309f, 0.054596f,
- 0.061798f, 0.069885f, 0.078857f, 0.089050f, 0.099915f, 0.112183f, 0.125488f, 0.140503f,
- 0.157104f, 0.175293f, 0.195068f, 0.216309f, 0.240356f, 0.265381f, 0.291748f, 0.319580f,
- 0.348633f, 0.379150f, 0.410156f, 0.441406f, 0.472900f, 0.503418f, 0.534668f, 0.565430f,
- 0.594727f, 0.622070f, 0.649902f, 0.676270f, 0.700195f, 0.723633f, 0.746094f, 0.766602f,
- 0.786133f, 0.802734f, 0.819824f, 0.835449f, 0.849609f, 0.863281f, 0.875977f, 0.887695f,
- 0.898438f, 0.908203f, 0.962891f, 0.965820f, 0.966309f, 0.965332f, 0.964844f, 0.964355f,
- 0.000782f, 0.002707f, 0.004574f, 0.006184f, 0.008286f, 0.010681f, 0.012878f, 0.015640f,
- 0.018478f, 0.021912f, 0.025208f, 0.028976f, 0.032867f, 0.037598f, 0.042938f, 0.048370f,
- 0.054443f, 0.061432f, 0.069214f, 0.077515f, 0.087402f, 0.098145f, 0.109497f, 0.122803f,
- 0.137329f, 0.153564f, 0.171509f, 0.190918f, 0.212158f, 0.235352f, 0.259766f, 0.286133f,
- 0.314209f, 0.343262f, 0.373535f, 0.404297f, 0.436279f, 0.467773f, 0.499512f, 0.530273f,
- 0.561523f, 0.590820f, 0.620117f, 0.647461f, 0.674316f, 0.699219f, 0.722656f, 0.745605f,
- 0.766602f, 0.785645f, 0.804688f, 0.821777f, 0.836426f, 0.852051f, 0.865234f, 0.878418f,
- 0.890625f, 0.901855f, 0.959961f, 0.962891f, 0.963867f, 0.963379f, 0.962402f, 0.962402f,
- 0.000787f, 0.002195f, 0.004250f, 0.005775f, 0.007774f, 0.009445f, 0.011795f, 0.013725f,
- 0.016678f, 0.019531f, 0.022018f, 0.025665f, 0.029495f, 0.033142f, 0.037598f, 0.042664f,
- 0.048248f, 0.053772f, 0.060699f, 0.067993f, 0.076416f, 0.085815f, 0.095764f, 0.107422f,
- 0.120239f, 0.134277f, 0.150269f, 0.167358f, 0.186646f, 0.207764f, 0.230347f, 0.255127f,
- 0.281250f, 0.308838f, 0.337891f, 0.368408f, 0.399414f, 0.431396f, 0.463135f, 0.495605f,
- 0.526855f, 0.558594f, 0.588379f, 0.618652f, 0.646973f, 0.673828f, 0.699707f, 0.723633f,
- 0.746094f, 0.767090f, 0.788086f, 0.806641f, 0.823730f, 0.840332f, 0.854980f, 0.869141f,
- 0.881836f, 0.893555f, 0.957520f, 0.960938f, 0.960938f, 0.961426f, 0.960449f, 0.959961f,
- 0.000765f, 0.002207f, 0.003666f, 0.005177f, 0.006973f, 0.008301f, 0.010704f, 0.012794f,
- 0.015015f, 0.017303f, 0.020309f, 0.022568f, 0.026123f, 0.029587f, 0.033325f, 0.037659f,
- 0.042206f, 0.047516f, 0.053223f, 0.059814f, 0.067017f, 0.075195f, 0.083801f, 0.094055f,
- 0.105042f, 0.117737f, 0.131470f, 0.146851f, 0.163940f, 0.182739f, 0.203369f, 0.225952f,
- 0.250244f, 0.276367f, 0.304199f, 0.333008f, 0.364258f, 0.395264f, 0.427002f, 0.459961f,
- 0.491699f, 0.524414f, 0.555664f, 0.586914f, 0.617676f, 0.645996f, 0.673340f, 0.699707f,
- 0.724121f, 0.748047f, 0.770020f, 0.790039f, 0.809082f, 0.827148f, 0.842773f, 0.858398f,
- 0.873047f, 0.885742f, 0.954102f, 0.958008f, 0.958496f, 0.958496f, 0.958496f, 0.957520f,
- 0.000586f, 0.001937f, 0.003107f, 0.004745f, 0.006168f, 0.007610f, 0.009590f, 0.011345f,
- 0.013321f, 0.015587f, 0.017593f, 0.020294f, 0.023346f, 0.026154f, 0.029205f, 0.033234f,
- 0.037415f, 0.041962f, 0.046906f, 0.052673f, 0.058533f, 0.065796f, 0.073669f, 0.082642f,
- 0.092346f, 0.103027f, 0.115234f, 0.128784f, 0.143799f, 0.160889f, 0.179199f, 0.199585f,
- 0.221802f, 0.246094f, 0.271973f, 0.299805f, 0.329102f, 0.359863f, 0.391357f, 0.423340f,
- 0.456299f, 0.490234f, 0.522949f, 0.555176f, 0.586426f, 0.617188f, 0.645996f, 0.675293f,
- 0.701660f, 0.726074f, 0.750488f, 0.773926f, 0.793945f, 0.812988f, 0.831543f, 0.847656f,
- 0.862793f, 0.877441f, 0.951660f, 0.955078f, 0.955566f, 0.955566f, 0.955078f, 0.954590f,
- 0.000678f, 0.001864f, 0.003138f, 0.004333f, 0.005707f, 0.006893f, 0.008224f, 0.009850f,
- 0.012215f, 0.013954f, 0.015747f, 0.018219f, 0.020584f, 0.023148f, 0.026047f, 0.029434f,
- 0.033020f, 0.037018f, 0.041626f, 0.046509f, 0.051910f, 0.058105f, 0.064636f, 0.072510f,
- 0.080750f, 0.090149f, 0.100891f, 0.112549f, 0.126343f, 0.141113f, 0.157593f, 0.175537f,
- 0.195801f, 0.218018f, 0.242554f, 0.268311f, 0.295898f, 0.325195f, 0.355713f, 0.388184f,
- 0.421143f, 0.454834f, 0.488281f, 0.522949f, 0.554199f, 0.587402f, 0.618164f, 0.648438f,
- 0.676758f, 0.704102f, 0.730957f, 0.754395f, 0.776855f, 0.798340f, 0.817871f, 0.836426f,
- 0.852051f, 0.868164f, 0.948242f, 0.952637f, 0.953125f, 0.952637f, 0.952148f, 0.951660f,
- 0.000470f, 0.001578f, 0.002934f, 0.003838f, 0.005032f, 0.006310f, 0.007725f, 0.008972f,
- 0.010826f, 0.012657f, 0.014359f, 0.015991f, 0.018402f, 0.020721f, 0.023102f, 0.026230f,
- 0.029495f, 0.032867f, 0.036743f, 0.040680f, 0.045654f, 0.050812f, 0.056763f, 0.063477f,
- 0.071045f, 0.078918f, 0.088440f, 0.098938f, 0.110657f, 0.123535f, 0.138062f, 0.154175f,
- 0.172363f, 0.192627f, 0.214478f, 0.238770f, 0.264404f, 0.292236f, 0.322266f, 0.353271f,
- 0.385742f, 0.419189f, 0.453857f, 0.487549f, 0.521484f, 0.555664f, 0.588867f, 0.621094f,
- 0.651367f, 0.680176f, 0.708008f, 0.733887f, 0.759766f, 0.780762f, 0.802734f, 0.821289f,
- 0.840820f, 0.858398f, 0.943848f, 0.949219f, 0.949707f, 0.949707f, 0.949707f, 0.949219f,
- 0.000485f, 0.001689f, 0.002386f, 0.003698f, 0.004547f, 0.005936f, 0.006851f, 0.008217f,
- 0.009834f, 0.011055f, 0.012810f, 0.014473f, 0.016449f, 0.018509f, 0.020950f, 0.023209f,
- 0.025940f, 0.029114f, 0.032410f, 0.036133f, 0.040161f, 0.044861f, 0.050018f, 0.055664f,
- 0.061859f, 0.069153f, 0.077515f, 0.086365f, 0.096680f, 0.108093f, 0.120605f, 0.135132f,
- 0.151489f, 0.169556f, 0.189209f, 0.211426f, 0.235352f, 0.261475f, 0.289307f, 0.319580f,
- 0.351074f, 0.384521f, 0.418701f, 0.452881f, 0.487549f, 0.522461f, 0.556641f, 0.591309f,
- 0.623535f, 0.653809f, 0.684570f, 0.712891f, 0.739258f, 0.764160f, 0.787109f, 0.809570f,
- 0.829102f, 0.847168f, 0.940918f, 0.945801f, 0.946289f, 0.946777f, 0.946777f, 0.945312f,
- 0.000620f, 0.001351f, 0.002413f, 0.003273f, 0.004307f, 0.004971f, 0.006138f, 0.007542f,
- 0.008835f, 0.009972f, 0.011581f, 0.013069f, 0.014717f, 0.016495f, 0.018738f, 0.020691f,
- 0.023315f, 0.025879f, 0.028793f, 0.031860f, 0.035309f, 0.039246f, 0.043762f, 0.048950f,
- 0.054474f, 0.060669f, 0.067932f, 0.075378f, 0.084351f, 0.094055f, 0.105774f, 0.118469f,
- 0.132690f, 0.148315f, 0.166504f, 0.186401f, 0.208130f, 0.232544f, 0.258789f, 0.287109f,
- 0.317627f, 0.349854f, 0.383057f, 0.417725f, 0.453125f, 0.488770f, 0.523926f, 0.559082f,
- 0.594238f, 0.627441f, 0.659180f, 0.689941f, 0.719238f, 0.745117f, 0.770508f, 0.794434f,
- 0.815430f, 0.836914f, 0.936523f, 0.941895f, 0.942871f, 0.942871f, 0.942871f, 0.942383f,
- 0.000404f, 0.001095f, 0.002087f, 0.002983f, 0.003986f, 0.004673f, 0.005844f, 0.006878f,
- 0.007740f, 0.008873f, 0.010323f, 0.011757f, 0.013176f, 0.014915f, 0.016586f, 0.018585f,
- 0.020523f, 0.022720f, 0.025391f, 0.028244f, 0.031219f, 0.034821f, 0.038788f, 0.042908f,
- 0.047943f, 0.053040f, 0.058960f, 0.066162f, 0.073547f, 0.082397f, 0.092285f, 0.102844f,
- 0.115234f, 0.129883f, 0.146118f, 0.163452f, 0.183350f, 0.205688f, 0.229614f, 0.256592f,
- 0.285156f, 0.316162f, 0.348633f, 0.383057f, 0.418457f, 0.454590f, 0.490967f, 0.526855f,
- 0.563477f, 0.598633f, 0.632812f, 0.665527f, 0.696777f, 0.726074f, 0.752930f, 0.779297f,
- 0.803223f, 0.825684f, 0.933105f, 0.938477f, 0.938477f, 0.938965f, 0.938477f, 0.938477f,
- 0.000415f, 0.000864f, 0.001907f, 0.002775f, 0.003519f, 0.004204f, 0.005352f, 0.006237f,
- 0.007019f, 0.008064f, 0.009239f, 0.010483f, 0.011742f, 0.013130f, 0.014877f, 0.016571f,
- 0.018494f, 0.020126f, 0.022537f, 0.024826f, 0.027649f, 0.030701f, 0.033875f, 0.037964f,
- 0.042114f, 0.046356f, 0.051605f, 0.057587f, 0.064209f, 0.071777f, 0.080261f, 0.089722f,
- 0.100952f, 0.113220f, 0.127075f, 0.143066f, 0.160767f, 0.180664f, 0.202759f, 0.227417f,
- 0.254395f, 0.284180f, 0.315674f, 0.348633f, 0.383789f, 0.420166f, 0.457275f, 0.494385f,
- 0.531250f, 0.569336f, 0.605469f, 0.639160f, 0.672363f, 0.705078f, 0.735352f, 0.762207f,
- 0.788574f, 0.811523f, 0.928711f, 0.934082f, 0.934570f, 0.935059f, 0.935059f, 0.935059f,
- 0.000236f, 0.001136f, 0.001664f, 0.002502f, 0.003187f, 0.004082f, 0.004631f, 0.005386f,
- 0.006275f, 0.007385f, 0.008217f, 0.009453f, 0.010567f, 0.011787f, 0.013115f, 0.014420f,
- 0.016083f, 0.017944f, 0.019867f, 0.022079f, 0.024414f, 0.026962f, 0.029755f, 0.033112f,
- 0.036926f, 0.040771f, 0.045258f, 0.050232f, 0.056183f, 0.062500f, 0.069946f, 0.078430f,
- 0.087708f, 0.098389f, 0.110779f, 0.124634f, 0.140259f, 0.158203f, 0.178223f, 0.200928f,
- 0.225708f, 0.253174f, 0.282715f, 0.315430f, 0.349365f, 0.385254f, 0.422363f, 0.460938f,
- 0.499023f, 0.537109f, 0.574707f, 0.612305f, 0.646484f, 0.682129f, 0.713867f, 0.745117f,
- 0.772461f, 0.799316f, 0.923828f, 0.930176f, 0.930664f, 0.931152f, 0.930664f, 0.930664f,
- 0.000229f, 0.000964f, 0.001582f, 0.002182f, 0.002838f, 0.003653f, 0.004341f, 0.004921f,
- 0.005615f, 0.006626f, 0.007423f, 0.008545f, 0.009483f, 0.010666f, 0.011612f, 0.013000f,
- 0.014275f, 0.015900f, 0.017487f, 0.019333f, 0.021484f, 0.023773f, 0.026276f, 0.028992f,
- 0.032135f, 0.035492f, 0.039398f, 0.044037f, 0.049072f, 0.054443f, 0.061035f, 0.067871f,
- 0.076111f, 0.085632f, 0.096252f, 0.108154f, 0.122253f, 0.138306f, 0.156006f, 0.175903f,
- 0.199219f, 0.224243f, 0.251953f, 0.282715f, 0.315918f, 0.350830f, 0.387451f, 0.425781f,
- 0.465332f, 0.504395f, 0.544434f, 0.583008f, 0.620117f, 0.657715f, 0.692383f, 0.725098f,
- 0.755371f, 0.783691f, 0.919434f, 0.925781f, 0.926270f, 0.926758f, 0.926758f, 0.925781f,
- 0.000410f, 0.000856f, 0.001542f, 0.001844f, 0.002565f, 0.003380f, 0.003971f, 0.004246f,
- 0.005047f, 0.005863f, 0.006653f, 0.007744f, 0.008568f, 0.009407f, 0.010529f, 0.011482f,
- 0.012657f, 0.013924f, 0.015602f, 0.017105f, 0.018997f, 0.020859f, 0.022980f, 0.025192f,
- 0.028030f, 0.031036f, 0.034515f, 0.038300f, 0.042236f, 0.047180f, 0.052795f, 0.059113f,
- 0.065857f, 0.074097f, 0.083374f, 0.094360f, 0.105896f, 0.119873f, 0.135620f, 0.154175f,
- 0.174072f, 0.197632f, 0.223267f, 0.251465f, 0.283447f, 0.317139f, 0.353760f, 0.391113f,
- 0.431152f, 0.470703f, 0.512207f, 0.552734f, 0.592285f, 0.631348f, 0.669434f, 0.704590f,
- 0.737793f, 0.768555f, 0.913574f, 0.919922f, 0.920898f, 0.920898f, 0.921387f, 0.921387f,
- 0.000214f, 0.000619f, 0.001172f, 0.001941f, 0.002228f, 0.002960f, 0.003490f, 0.003994f,
- 0.004761f, 0.005180f, 0.005806f, 0.006622f, 0.007565f, 0.008301f, 0.009262f, 0.010170f,
- 0.011208f, 0.012482f, 0.013855f, 0.015060f, 0.016739f, 0.018311f, 0.020248f, 0.022034f,
- 0.024597f, 0.027084f, 0.030045f, 0.033051f, 0.036743f, 0.041016f, 0.045807f, 0.050964f,
- 0.056946f, 0.063904f, 0.071899f, 0.080994f, 0.091675f, 0.103699f, 0.117920f, 0.133667f,
- 0.151978f, 0.172729f, 0.196533f, 0.222534f, 0.252197f, 0.284424f, 0.319580f, 0.356689f,
- 0.396973f, 0.437500f, 0.479492f, 0.521484f, 0.562500f, 0.604004f, 0.644043f, 0.682129f,
- 0.718262f, 0.751465f, 0.907715f, 0.915039f, 0.916016f, 0.916504f, 0.916504f, 0.916504f,
- 0.000405f, 0.000760f, 0.001116f, 0.001688f, 0.002180f, 0.002670f, 0.003313f, 0.003569f,
- 0.003979f, 0.004543f, 0.005466f, 0.005985f, 0.006699f, 0.007359f, 0.008102f, 0.009094f,
- 0.009949f, 0.011055f, 0.012047f, 0.013412f, 0.014488f, 0.016068f, 0.017532f, 0.019348f,
- 0.021210f, 0.023834f, 0.025986f, 0.028854f, 0.031891f, 0.035339f, 0.039490f, 0.043976f,
- 0.049347f, 0.055084f, 0.061951f, 0.069763f, 0.078918f, 0.089478f, 0.101379f, 0.115479f,
- 0.131592f, 0.150024f, 0.171387f, 0.195068f, 0.222900f, 0.252686f, 0.286621f, 0.323242f,
- 0.362061f, 0.402588f, 0.445312f, 0.488770f, 0.532715f, 0.575684f, 0.618652f, 0.659180f,
- 0.698242f, 0.734375f, 0.901367f, 0.909180f, 0.911133f, 0.910645f, 0.911133f, 0.910645f,
- 0.000218f, 0.000539f, 0.001187f, 0.001617f, 0.001987f, 0.002316f, 0.002666f, 0.003176f,
- 0.003841f, 0.004425f, 0.004917f, 0.005402f, 0.005768f, 0.006462f, 0.007233f, 0.008018f,
- 0.008575f, 0.009758f, 0.010582f, 0.011520f, 0.012756f, 0.013832f, 0.015312f, 0.016968f,
- 0.018509f, 0.020279f, 0.022644f, 0.024857f, 0.027740f, 0.030472f, 0.033783f, 0.037567f,
- 0.042175f, 0.047150f, 0.052979f, 0.059601f, 0.067505f, 0.076538f, 0.087158f, 0.099243f,
- 0.113281f, 0.129272f, 0.148315f, 0.170532f, 0.194702f, 0.223267f, 0.254639f, 0.289795f,
- 0.327393f, 0.368408f, 0.410889f, 0.455322f, 0.499756f, 0.544434f, 0.590332f, 0.633789f,
- 0.676270f, 0.716309f, 0.895508f, 0.902344f, 0.903809f, 0.905762f, 0.903809f, 0.904297f,
- 0.000184f, 0.000612f, 0.001122f, 0.001464f, 0.001848f, 0.002150f, 0.002514f, 0.002651f,
- 0.003391f, 0.003666f, 0.004368f, 0.004677f, 0.005219f, 0.005882f, 0.006531f, 0.007019f,
- 0.007675f, 0.008530f, 0.009224f, 0.010269f, 0.011017f, 0.012146f, 0.013321f, 0.014626f,
- 0.016098f, 0.017639f, 0.019440f, 0.021317f, 0.023773f, 0.026123f, 0.029144f, 0.032410f,
- 0.036072f, 0.040314f, 0.045013f, 0.051086f, 0.057587f, 0.065308f, 0.074402f, 0.084961f,
- 0.097107f, 0.111267f, 0.127930f, 0.147217f, 0.169556f, 0.195312f, 0.224365f, 0.257568f,
- 0.294189f, 0.333496f, 0.375977f, 0.420166f, 0.467041f, 0.514160f, 0.561035f, 0.607422f,
- 0.652344f, 0.695312f, 0.888672f, 0.896484f, 0.897461f, 0.897461f, 0.897949f, 0.897949f,
- 0.000159f, 0.000537f, 0.000830f, 0.001206f, 0.001578f, 0.001760f, 0.002050f, 0.002504f,
- 0.002951f, 0.003397f, 0.003674f, 0.004238f, 0.004520f, 0.005245f, 0.005692f, 0.006138f,
- 0.006748f, 0.007240f, 0.008087f, 0.008728f, 0.009636f, 0.010437f, 0.011543f, 0.012611f,
- 0.013763f, 0.015266f, 0.016617f, 0.018433f, 0.020248f, 0.022354f, 0.024887f, 0.027390f,
- 0.030716f, 0.034454f, 0.038422f, 0.043365f, 0.048950f, 0.055511f, 0.062988f, 0.072021f,
- 0.082336f, 0.094727f, 0.109375f, 0.125977f, 0.145874f, 0.169556f, 0.195679f, 0.226929f,
- 0.260986f, 0.299805f, 0.341309f, 0.385498f, 0.432129f, 0.480957f, 0.529297f, 0.579102f,
- 0.627441f, 0.673828f, 0.881348f, 0.889160f, 0.890625f, 0.891113f, 0.891602f, 0.891113f,
- 0.000204f, 0.000566f, 0.000741f, 0.001033f, 0.001378f, 0.001599f, 0.001961f, 0.002354f,
- 0.002609f, 0.002974f, 0.003300f, 0.003609f, 0.004101f, 0.004463f, 0.004906f, 0.005337f,
- 0.006020f, 0.006290f, 0.007023f, 0.007656f, 0.008301f, 0.009140f, 0.009918f, 0.010933f,
- 0.011940f, 0.013107f, 0.014252f, 0.015656f, 0.017136f, 0.019058f, 0.021057f, 0.023209f,
- 0.025940f, 0.029190f, 0.032715f, 0.036591f, 0.041138f, 0.046661f, 0.053253f, 0.060944f,
- 0.069702f, 0.080444f, 0.092651f, 0.107788f, 0.124695f, 0.145630f, 0.169189f, 0.197632f,
- 0.229736f, 0.266113f, 0.306396f, 0.350586f, 0.397217f, 0.447021f, 0.497803f, 0.549805f,
- 0.600586f, 0.650391f, 0.872559f, 0.881836f, 0.882812f, 0.883301f, 0.884277f, 0.884277f,
- 0.000240f, 0.000349f, 0.000795f, 0.000892f, 0.001151f, 0.001377f, 0.001773f, 0.001984f,
- 0.002415f, 0.002602f, 0.002932f, 0.003168f, 0.003483f, 0.003906f, 0.004257f, 0.004681f,
- 0.005173f, 0.005596f, 0.006119f, 0.006550f, 0.007126f, 0.007759f, 0.008522f, 0.009270f,
- 0.010086f, 0.011108f, 0.012138f, 0.013199f, 0.014549f, 0.015884f, 0.017776f, 0.019623f,
- 0.022003f, 0.024384f, 0.027237f, 0.030624f, 0.034515f, 0.039215f, 0.044342f, 0.050873f,
- 0.058411f, 0.067017f, 0.078003f, 0.090332f, 0.105530f, 0.123718f, 0.144775f, 0.170410f,
- 0.200195f, 0.234131f, 0.272461f, 0.315674f, 0.362305f, 0.412354f, 0.465332f, 0.518555f,
- 0.572754f, 0.626465f, 0.863770f, 0.873047f, 0.875488f, 0.875488f, 0.875977f, 0.875977f,
- 0.000102f, 0.000298f, 0.000604f, 0.000950f, 0.001089f, 0.001472f, 0.001760f, 0.001823f,
- 0.001903f, 0.002325f, 0.002611f, 0.002775f, 0.003185f, 0.003405f, 0.003674f, 0.004005f,
- 0.004406f, 0.004814f, 0.005203f, 0.005665f, 0.006062f, 0.006702f, 0.007317f, 0.007881f,
- 0.008560f, 0.009239f, 0.010193f, 0.010994f, 0.012161f, 0.013588f, 0.015068f, 0.016479f,
- 0.018250f, 0.020386f, 0.022781f, 0.025665f, 0.028809f, 0.032501f, 0.037048f, 0.042297f,
- 0.048553f, 0.055908f, 0.065491f, 0.075378f, 0.088501f, 0.104248f, 0.122742f, 0.145874f,
- 0.171997f, 0.203247f, 0.239990f, 0.281250f, 0.326904f, 0.376953f, 0.430176f, 0.486328f,
- 0.542480f, 0.600586f, 0.855469f, 0.864746f, 0.866211f, 0.867188f, 0.867188f, 0.867188f,
- 0.000000f, 0.000357f, 0.000576f, 0.000692f, 0.001013f, 0.001069f, 0.001383f, 0.001702f,
- 0.001789f, 0.002102f, 0.002182f, 0.002377f, 0.002686f, 0.002985f, 0.003347f, 0.003359f,
- 0.003782f, 0.004036f, 0.004436f, 0.004749f, 0.005169f, 0.005672f, 0.006145f, 0.006649f,
- 0.007187f, 0.007828f, 0.008644f, 0.009529f, 0.010269f, 0.011200f, 0.012337f, 0.013596f,
- 0.015038f, 0.017044f, 0.018784f, 0.021011f, 0.023727f, 0.026871f, 0.030457f, 0.034637f,
- 0.039978f, 0.046478f, 0.053436f, 0.062622f, 0.073730f, 0.086792f, 0.102661f, 0.122437f,
- 0.146240f, 0.174561f, 0.208252f, 0.247437f, 0.291748f, 0.341064f, 0.395020f, 0.451904f,
- 0.511230f, 0.571777f, 0.844238f, 0.854980f, 0.857422f, 0.858887f, 0.857910f, 0.857910f,
- 0.000101f, 0.000326f, 0.000535f, 0.000683f, 0.000848f, 0.001161f, 0.001184f, 0.001284f,
- 0.001576f, 0.001701f, 0.001839f, 0.002167f, 0.002321f, 0.002584f, 0.002645f, 0.002941f,
- 0.003141f, 0.003538f, 0.003817f, 0.004112f, 0.004395f, 0.004646f, 0.005165f, 0.005531f,
- 0.006096f, 0.006496f, 0.007217f, 0.007767f, 0.008629f, 0.009163f, 0.010239f, 0.011276f,
- 0.012611f, 0.013779f, 0.015213f, 0.017120f, 0.019379f, 0.021606f, 0.024994f, 0.028351f,
- 0.032379f, 0.037201f, 0.043640f, 0.050903f, 0.060120f, 0.071045f, 0.084900f, 0.101868f,
- 0.122559f, 0.147827f, 0.178223f, 0.214722f, 0.257080f, 0.305664f, 0.358887f, 0.416992f,
- 0.478027f, 0.542969f, 0.834473f, 0.845215f, 0.847656f, 0.847656f, 0.847656f, 0.848633f,
- 0.000092f, 0.000316f, 0.000410f, 0.000556f, 0.000808f, 0.000918f, 0.001094f, 0.001287f,
- 0.001309f, 0.001411f, 0.001671f, 0.001780f, 0.001909f, 0.002092f, 0.002274f, 0.002523f,
- 0.002733f, 0.002974f, 0.003101f, 0.003401f, 0.003677f, 0.003956f, 0.004311f, 0.004551f,
- 0.004940f, 0.005444f, 0.005768f, 0.006451f, 0.006977f, 0.007568f, 0.008270f, 0.009201f,
- 0.010170f, 0.011230f, 0.012566f, 0.013939f, 0.015503f, 0.017761f, 0.020111f, 0.022873f,
- 0.025940f, 0.029938f, 0.035217f, 0.040985f, 0.048431f, 0.057770f, 0.069092f, 0.083618f,
- 0.100891f, 0.123047f, 0.150146f, 0.183838f, 0.223633f, 0.269531f, 0.322510f, 0.381348f,
- 0.444824f, 0.511719f, 0.823730f, 0.834473f, 0.835938f, 0.836914f, 0.836914f, 0.837402f,
- 0.000240f, 0.000273f, 0.000326f, 0.000564f, 0.000682f, 0.000807f, 0.000854f, 0.000949f,
- 0.001139f, 0.001238f, 0.001404f, 0.001548f, 0.001637f, 0.001840f, 0.001893f, 0.002077f,
- 0.002321f, 0.002434f, 0.002642f, 0.002821f, 0.003044f, 0.003271f, 0.003649f, 0.003763f,
- 0.004208f, 0.004448f, 0.004986f, 0.005169f, 0.005657f, 0.006279f, 0.006680f, 0.007442f,
- 0.008194f, 0.008881f, 0.009895f, 0.010918f, 0.012138f, 0.013924f, 0.015915f, 0.018112f,
- 0.020645f, 0.023743f, 0.027817f, 0.032745f, 0.038361f, 0.045990f, 0.055481f, 0.066895f,
- 0.082031f, 0.100769f, 0.124573f, 0.154541f, 0.190796f, 0.235107f, 0.286133f, 0.344238f,
- 0.408936f, 0.478271f, 0.810547f, 0.822266f, 0.824707f, 0.825195f, 0.825684f, 0.825684f,
- 0.000115f, 0.000222f, 0.000252f, 0.000524f, 0.000574f, 0.000673f, 0.000869f, 0.000928f,
- 0.000963f, 0.001022f, 0.001246f, 0.001292f, 0.001404f, 0.001477f, 0.001652f, 0.001811f,
- 0.001822f, 0.002058f, 0.002237f, 0.002371f, 0.002588f, 0.002645f, 0.003019f, 0.003080f,
- 0.003506f, 0.003689f, 0.003904f, 0.004383f, 0.004707f, 0.005020f, 0.005386f, 0.006023f,
- 0.006451f, 0.007038f, 0.007809f, 0.008911f, 0.009949f, 0.011200f, 0.012222f, 0.014137f,
- 0.016068f, 0.018692f, 0.021683f, 0.025314f, 0.029861f, 0.035889f, 0.043335f, 0.052582f,
- 0.065186f, 0.080627f, 0.101501f, 0.127441f, 0.159912f, 0.200806f, 0.250000f, 0.307129f,
- 0.371582f, 0.444580f, 0.798340f, 0.809570f, 0.811523f, 0.812988f, 0.812988f, 0.812988f,
- 0.000000f, 0.000211f, 0.000204f, 0.000474f, 0.000555f, 0.000583f, 0.000600f, 0.000593f,
- 0.000812f, 0.000865f, 0.000941f, 0.001013f, 0.001162f, 0.001348f, 0.001418f, 0.001465f,
- 0.001616f, 0.001722f, 0.001856f, 0.001888f, 0.002048f, 0.002321f, 0.002396f, 0.002632f,
- 0.002821f, 0.002974f, 0.003265f, 0.003477f, 0.003632f, 0.004051f, 0.004299f, 0.004700f,
- 0.005238f, 0.005592f, 0.006199f, 0.006756f, 0.007614f, 0.008324f, 0.009727f, 0.010811f,
- 0.012337f, 0.014168f, 0.016434f, 0.019257f, 0.022858f, 0.027451f, 0.033295f, 0.040619f,
- 0.050690f, 0.063416f, 0.080261f, 0.102295f, 0.131104f, 0.168335f, 0.214355f, 0.270508f,
- 0.334717f, 0.408936f, 0.783691f, 0.795898f, 0.798340f, 0.799316f, 0.800293f, 0.800293f,
- 0.000174f, 0.000090f, 0.000281f, 0.000397f, 0.000401f, 0.000450f, 0.000488f, 0.000640f,
- 0.000674f, 0.000713f, 0.000753f, 0.000845f, 0.000872f, 0.001020f, 0.001115f, 0.001264f,
- 0.001327f, 0.001373f, 0.001520f, 0.001616f, 0.001767f, 0.001875f, 0.001968f, 0.002090f,
- 0.002232f, 0.002333f, 0.002472f, 0.002802f, 0.002926f, 0.003189f, 0.003569f, 0.003752f,
- 0.004009f, 0.004513f, 0.004860f, 0.005375f, 0.005997f, 0.006561f, 0.007378f, 0.008347f,
- 0.009384f, 0.010612f, 0.012466f, 0.014526f, 0.017075f, 0.020447f, 0.024887f, 0.030533f,
- 0.038300f, 0.048584f, 0.062042f, 0.080383f, 0.104736f, 0.137329f, 0.180176f, 0.232544f,
- 0.296875f, 0.371338f, 0.769043f, 0.781250f, 0.784180f, 0.784668f, 0.786133f, 0.786133f,
- 0.000025f, 0.000135f, 0.000154f, 0.000260f, 0.000353f, 0.000364f, 0.000380f, 0.000520f,
- 0.000548f, 0.000587f, 0.000712f, 0.000735f, 0.000772f, 0.000822f, 0.000886f, 0.001004f,
- 0.000946f, 0.001115f, 0.001177f, 0.001266f, 0.001454f, 0.001527f, 0.001575f, 0.001680f,
- 0.001883f, 0.001961f, 0.002043f, 0.002193f, 0.002281f, 0.002520f, 0.002712f, 0.003021f,
- 0.003147f, 0.003561f, 0.003786f, 0.004116f, 0.004570f, 0.005058f, 0.005634f, 0.006165f,
- 0.007095f, 0.008049f, 0.009201f, 0.010674f, 0.012550f, 0.014854f, 0.018051f, 0.022385f,
- 0.027908f, 0.035522f, 0.046295f, 0.061035f, 0.081238f, 0.109131f, 0.146729f, 0.197021f,
- 0.258301f, 0.333008f, 0.752441f, 0.766113f, 0.768555f, 0.769531f, 0.770020f, 0.769531f,
- 0.000000f, 0.000121f, 0.000209f, 0.000291f, 0.000337f, 0.000307f, 0.000324f, 0.000415f,
- 0.000426f, 0.000453f, 0.000491f, 0.000573f, 0.000644f, 0.000650f, 0.000781f, 0.000746f,
- 0.000830f, 0.000803f, 0.000997f, 0.001017f, 0.001020f, 0.001158f, 0.001241f, 0.001317f,
- 0.001375f, 0.001432f, 0.001524f, 0.001656f, 0.001858f, 0.001955f, 0.002050f, 0.002274f,
- 0.002460f, 0.002724f, 0.002831f, 0.003050f, 0.003441f, 0.003790f, 0.004162f, 0.004623f,
- 0.005219f, 0.005951f, 0.006721f, 0.007729f, 0.008926f, 0.010620f, 0.013000f, 0.015686f,
- 0.019852f, 0.025436f, 0.033295f, 0.044617f, 0.060608f, 0.083313f, 0.116211f, 0.161499f,
- 0.220093f, 0.293945f, 0.734863f, 0.749512f, 0.752441f, 0.752930f, 0.753906f, 0.753906f,
- 0.000000f, 0.000121f, 0.000118f, 0.000246f, 0.000233f, 0.000252f, 0.000338f, 0.000282f,
- 0.000353f, 0.000355f, 0.000448f, 0.000435f, 0.000464f, 0.000530f, 0.000578f, 0.000649f,
- 0.000677f, 0.000710f, 0.000749f, 0.000792f, 0.000881f, 0.000903f, 0.000967f, 0.001049f,
- 0.001041f, 0.001100f, 0.001176f, 0.001254f, 0.001402f, 0.001451f, 0.001697f, 0.001674f,
- 0.001804f, 0.001914f, 0.002195f, 0.002451f, 0.002474f, 0.002758f, 0.003029f, 0.003483f,
- 0.003824f, 0.004272f, 0.004833f, 0.005573f, 0.006477f, 0.007629f, 0.009041f, 0.010918f,
- 0.013573f, 0.017319f, 0.022842f, 0.031036f, 0.043030f, 0.061096f, 0.088440f, 0.127563f,
- 0.182861f, 0.254395f, 0.717285f, 0.731934f, 0.734863f, 0.735352f, 0.735840f, 0.736328f,
- 0.000000f, 0.000000f, 0.000117f, 0.000163f, 0.000109f, 0.000208f, 0.000212f, 0.000208f,
- 0.000270f, 0.000356f, 0.000324f, 0.000377f, 0.000391f, 0.000420f, 0.000449f, 0.000440f,
- 0.000484f, 0.000504f, 0.000534f, 0.000561f, 0.000639f, 0.000667f, 0.000715f, 0.000722f,
- 0.000799f, 0.000845f, 0.000939f, 0.000945f, 0.001053f, 0.001149f, 0.001252f, 0.001310f,
- 0.001392f, 0.001507f, 0.001526f, 0.001710f, 0.001773f, 0.002111f, 0.002300f, 0.002443f,
- 0.002661f, 0.002996f, 0.003376f, 0.003880f, 0.004482f, 0.005150f, 0.006115f, 0.007401f,
- 0.009132f, 0.011696f, 0.015076f, 0.020416f, 0.029236f, 0.042389f, 0.063782f, 0.096802f,
- 0.146362f, 0.215576f, 0.698242f, 0.712891f, 0.715332f, 0.716797f, 0.717285f, 0.717285f,
- 0.000000f, 0.000118f, 0.000115f, 0.000133f, 0.000144f, 0.000147f, 0.000162f, 0.000150f,
- 0.000194f, 0.000215f, 0.000228f, 0.000299f, 0.000271f, 0.000313f, 0.000328f, 0.000358f,
- 0.000378f, 0.000360f, 0.000407f, 0.000438f, 0.000441f, 0.000488f, 0.000515f, 0.000544f,
- 0.000576f, 0.000617f, 0.000659f, 0.000715f, 0.000741f, 0.000773f, 0.000850f, 0.000921f,
- 0.000979f, 0.001066f, 0.001128f, 0.001292f, 0.001279f, 0.001400f, 0.001572f, 0.001668f,
- 0.001869f, 0.002029f, 0.002295f, 0.002607f, 0.002985f, 0.003464f, 0.004066f, 0.004913f,
- 0.006023f, 0.007519f, 0.009827f, 0.013016f, 0.018524f, 0.027481f, 0.042847f, 0.068970f,
- 0.111938f, 0.176392f, 0.675781f, 0.692871f, 0.695801f, 0.696777f, 0.698242f, 0.697754f,
- 0.000000f, 0.000000f, 0.000111f, 0.000108f, 0.000104f, 0.000102f, 0.000118f, 0.000120f,
- 0.000134f, 0.000128f, 0.000188f, 0.000154f, 0.000197f, 0.000188f, 0.000245f, 0.000256f,
- 0.000233f, 0.000266f, 0.000345f, 0.000281f, 0.000355f, 0.000322f, 0.000392f, 0.000358f,
- 0.000437f, 0.000425f, 0.000458f, 0.000477f, 0.000564f, 0.000636f, 0.000578f, 0.000607f,
- 0.000668f, 0.000719f, 0.000769f, 0.000832f, 0.000880f, 0.000953f, 0.001060f, 0.001116f,
- 0.001226f, 0.001363f, 0.001486f, 0.001760f, 0.001944f, 0.002216f, 0.002605f, 0.003107f,
- 0.003778f, 0.004715f, 0.005989f, 0.007942f, 0.011292f, 0.016632f, 0.026550f, 0.045532f,
- 0.079956f, 0.138550f, 0.655762f, 0.671875f, 0.674805f, 0.675293f, 0.675781f, 0.678223f,
- 0.000000f, 0.000112f, 0.000105f, 0.000102f, 0.000098f, 0.000095f, 0.000093f, 0.000088f,
- 0.000089f, 0.000085f, 0.000095f, 0.000126f, 0.000109f, 0.000154f, 0.000153f, 0.000162f,
- 0.000176f, 0.000190f, 0.000202f, 0.000204f, 0.000212f, 0.000214f, 0.000266f, 0.000239f,
- 0.000279f, 0.000293f, 0.000329f, 0.000329f, 0.000339f, 0.000365f, 0.000437f, 0.000424f,
- 0.000429f, 0.000474f, 0.000525f, 0.000596f, 0.000572f, 0.000612f, 0.000666f, 0.000723f,
- 0.000791f, 0.000850f, 0.000977f, 0.001066f, 0.001225f, 0.001351f, 0.001555f, 0.001837f,
- 0.002279f, 0.002760f, 0.003445f, 0.004612f, 0.006386f, 0.009438f, 0.015221f, 0.027008f,
- 0.052551f, 0.102966f, 0.633789f, 0.649414f, 0.652832f, 0.653809f, 0.655273f, 0.655273f,
- 0.000000f, 0.000105f, 0.000099f, 0.000094f, 0.000090f, 0.000087f, 0.000084f, 0.000082f,
- 0.000079f, 0.000075f, 0.000071f, 0.000068f, 0.000064f, 0.000072f, 0.000096f, 0.000105f,
- 0.000112f, 0.000088f, 0.000123f, 0.000129f, 0.000132f, 0.000140f, 0.000147f, 0.000170f,
- 0.000188f, 0.000192f, 0.000171f, 0.000210f, 0.000217f, 0.000223f, 0.000237f, 0.000251f,
- 0.000258f, 0.000294f, 0.000298f, 0.000316f, 0.000350f, 0.000382f, 0.000400f, 0.000437f,
- 0.000479f, 0.000514f, 0.000576f, 0.000620f, 0.000688f, 0.000782f, 0.000916f, 0.001026f,
- 0.001219f, 0.001502f, 0.001892f, 0.002424f, 0.003359f, 0.004974f, 0.008118f, 0.014343f,
- 0.030075f, 0.070068f, 0.610352f, 0.626953f, 0.629883f, 0.631348f, 0.632324f, 0.632324f,
- 0.000110f, 0.000094f, 0.000087f, 0.000081f, 0.000077f, 0.000075f, 0.000072f, 0.000069f,
- 0.000067f, 0.000066f, 0.000064f, 0.000062f, 0.000058f, 0.000056f, 0.000053f, 0.000051f,
- 0.000054f, 0.000047f, 0.000057f, 0.000055f, 0.000075f, 0.000078f, 0.000086f, 0.000093f,
- 0.000093f, 0.000102f, 0.000112f, 0.000113f, 0.000130f, 0.000128f, 0.000142f, 0.000145f,
- 0.000156f, 0.000153f, 0.000180f, 0.000178f, 0.000183f, 0.000223f, 0.000230f, 0.000240f,
- 0.000265f, 0.000276f, 0.000300f, 0.000332f, 0.000357f, 0.000411f, 0.000449f, 0.000540f,
- 0.000615f, 0.000741f, 0.000916f, 0.001144f, 0.001566f, 0.002310f, 0.003731f, 0.006905f,
- 0.014793f, 0.041779f, 0.585938f, 0.603027f, 0.605957f, 0.608398f, 0.608398f, 0.609375f,
- 0.000090f, 0.000071f, 0.000066f, 0.000062f, 0.000058f, 0.000056f, 0.000053f, 0.000053f,
- 0.000051f, 0.000051f, 0.000049f, 0.000048f, 0.000048f, 0.000047f, 0.000045f, 0.000043f,
- 0.000042f, 0.000040f, 0.000038f, 0.000036f, 0.000036f, 0.000033f, 0.000034f, 0.000040f,
- 0.000040f, 0.000040f, 0.000048f, 0.000053f, 0.000060f, 0.000064f, 0.000067f, 0.000070f,
- 0.000075f, 0.000081f, 0.000085f, 0.000090f, 0.000091f, 0.000103f, 0.000106f, 0.000120f,
- 0.000134f, 0.000138f, 0.000142f, 0.000156f, 0.000174f, 0.000180f, 0.000212f, 0.000239f,
- 0.000253f, 0.000310f, 0.000377f, 0.000479f, 0.000627f, 0.000875f, 0.001396f, 0.002623f,
- 0.006184f, 0.019897f, 0.560547f, 0.578125f, 0.581543f, 0.583008f, 0.583984f, 0.583984f,
- 0.000038f, 0.000035f, 0.000031f, 0.000031f, 0.000030f, 0.000031f, 0.000031f, 0.000030f,
- 0.000030f, 0.000028f, 0.000029f, 0.000030f, 0.000029f, 0.000028f, 0.000029f, 0.000029f,
- 0.000029f, 0.000029f, 0.000029f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f,
- 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000021f, 0.000019f, 0.000022f,
- 0.000023f, 0.000027f, 0.000031f, 0.000035f, 0.000037f, 0.000039f, 0.000039f, 0.000043f,
- 0.000049f, 0.000052f, 0.000056f, 0.000050f, 0.000068f, 0.000062f, 0.000070f, 0.000087f,
- 0.000094f, 0.000107f, 0.000122f, 0.000140f, 0.000191f, 0.000247f, 0.000388f, 0.000710f,
- 0.001781f, 0.007076f, 0.535156f, 0.553223f, 0.556152f, 0.558105f, 0.559082f, 0.559082f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000003f, 0.000003f, 0.000005f, 0.000006f, 0.000007f, 0.000007f, 0.000009f,
- 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000012f, 0.000012f,
- 0.000012f, 0.000013f, 0.000013f, 0.000013f, 0.000013f, 0.000012f, 0.000012f, 0.000011f,
- 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000009f,
- 0.000009f, 0.000010f, 0.000011f, 0.000015f, 0.000017f, 0.000016f, 0.000018f, 0.000021f,
- 0.000020f, 0.000024f, 0.000024f, 0.000032f, 0.000035f, 0.000045f, 0.000065f, 0.000105f,
- 0.000246f, 0.001313f, 0.508789f, 0.527344f, 0.530762f, 0.531738f, 0.532715f, 0.533691f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f,
- 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000003f, 0.000003f,
- 0.000005f, 0.000018f, 0.481934f, 0.500977f, 0.504883f, 0.505859f, 0.507324f, 0.507812f,
- },
- {
- 0.053833f, 0.152832f, 0.239014f, 0.313477f, 0.377686f, 0.433838f, 0.481689f, 0.524414f,
- 0.562988f, 0.596680f, 0.626953f, 0.654785f, 0.678711f, 0.700684f, 0.720703f, 0.739746f,
- 0.755859f, 0.771973f, 0.787109f, 0.798828f, 0.812012f, 0.823730f, 0.833984f, 0.844238f,
- 0.853027f, 0.862793f, 0.870605f, 0.878418f, 0.885254f, 0.892090f, 0.898926f, 0.904297f,
- 0.910645f, 0.916504f, 0.921875f, 0.926270f, 0.931641f, 0.936035f, 0.939941f, 0.944336f,
- 0.948242f, 0.952148f, 0.955566f, 0.959961f, 0.962402f, 0.966309f, 0.969238f, 0.972168f,
- 0.975098f, 0.978027f, 0.980957f, 0.983398f, 0.985840f, 0.988281f, 0.990723f, 0.992676f,
- 0.995117f, 0.996582f, 0.998047f, 0.995117f, 0.993164f, 0.990723f, 0.988770f, 0.986816f,
- 0.036804f, 0.109497f, 0.178589f, 0.244751f, 0.305908f, 0.361084f, 0.411621f, 0.457275f,
- 0.498535f, 0.536133f, 0.569824f, 0.601562f, 0.629883f, 0.655273f, 0.679688f, 0.700195f,
- 0.720215f, 0.737793f, 0.755859f, 0.770508f, 0.785645f, 0.798340f, 0.811035f, 0.822754f,
- 0.833008f, 0.843750f, 0.852539f, 0.861328f, 0.869629f, 0.877441f, 0.885742f, 0.892578f,
- 0.898926f, 0.905273f, 0.911133f, 0.916504f, 0.921875f, 0.926758f, 0.931641f, 0.936523f,
- 0.940430f, 0.945312f, 0.949219f, 0.953613f, 0.956543f, 0.960449f, 0.963867f, 0.967285f,
- 0.970703f, 0.973633f, 0.976562f, 0.979004f, 0.981934f, 0.984375f, 0.986816f, 0.989746f,
- 0.992188f, 0.994141f, 0.996582f, 0.994141f, 0.992188f, 0.990234f, 0.988281f, 0.986328f,
- 0.025787f, 0.080383f, 0.136230f, 0.191650f, 0.245239f, 0.297119f, 0.345947f, 0.392822f,
- 0.436035f, 0.476807f, 0.513184f, 0.547363f, 0.578125f, 0.607910f, 0.634766f, 0.658203f,
- 0.681152f, 0.702637f, 0.721191f, 0.738770f, 0.755371f, 0.770508f, 0.784668f, 0.798828f,
- 0.810547f, 0.821777f, 0.833984f, 0.843262f, 0.852539f, 0.861816f, 0.869629f, 0.877930f,
- 0.885254f, 0.893555f, 0.898926f, 0.906250f, 0.911621f, 0.917969f, 0.923340f, 0.928223f,
- 0.933105f, 0.937500f, 0.941406f, 0.946289f, 0.950195f, 0.954102f, 0.958496f, 0.961914f,
- 0.965820f, 0.968750f, 0.971680f, 0.975098f, 0.978027f, 0.980469f, 0.983887f, 0.985840f,
- 0.988770f, 0.991211f, 0.995117f, 0.993164f, 0.991211f, 0.989258f, 0.987305f, 0.985352f,
- 0.019455f, 0.060944f, 0.104553f, 0.150513f, 0.196411f, 0.243164f, 0.289062f, 0.333740f,
- 0.376709f, 0.417725f, 0.454346f, 0.491211f, 0.524414f, 0.556641f, 0.585938f, 0.613770f,
- 0.639160f, 0.662598f, 0.682617f, 0.703613f, 0.723633f, 0.740723f, 0.756836f, 0.771973f,
- 0.787109f, 0.798828f, 0.812012f, 0.823242f, 0.833984f, 0.844238f, 0.853516f, 0.863281f,
- 0.871094f, 0.879395f, 0.886719f, 0.893555f, 0.899902f, 0.907227f, 0.913086f, 0.918945f,
- 0.924805f, 0.928711f, 0.934082f, 0.938965f, 0.943848f, 0.947754f, 0.952637f, 0.955566f,
- 0.959961f, 0.963867f, 0.966797f, 0.970215f, 0.973633f, 0.977051f, 0.979004f, 0.982422f,
- 0.985840f, 0.987793f, 0.993652f, 0.991699f, 0.989746f, 0.988281f, 0.986328f, 0.984375f,
- 0.015221f, 0.047363f, 0.082092f, 0.119202f, 0.159058f, 0.199219f, 0.239380f, 0.280762f,
- 0.321533f, 0.362061f, 0.400146f, 0.436768f, 0.472900f, 0.504883f, 0.536621f, 0.566406f,
- 0.594238f, 0.621094f, 0.645508f, 0.667969f, 0.688477f, 0.707520f, 0.726562f, 0.742676f,
- 0.759277f, 0.773926f, 0.787598f, 0.800781f, 0.812988f, 0.825195f, 0.835938f, 0.846191f,
- 0.856445f, 0.865234f, 0.872559f, 0.880859f, 0.888672f, 0.895020f, 0.902832f, 0.908203f,
- 0.914551f, 0.919922f, 0.926758f, 0.931152f, 0.937012f, 0.941406f, 0.945312f, 0.949707f,
- 0.954102f, 0.958496f, 0.962402f, 0.965820f, 0.969238f, 0.972168f, 0.976074f, 0.978516f,
- 0.981934f, 0.984863f, 0.992188f, 0.990723f, 0.988770f, 0.987305f, 0.985352f, 0.983887f,
- 0.011658f, 0.037170f, 0.065430f, 0.096008f, 0.128784f, 0.162842f, 0.198975f, 0.235596f,
- 0.273926f, 0.310791f, 0.348145f, 0.385010f, 0.420410f, 0.454834f, 0.488037f, 0.519043f,
- 0.548828f, 0.577148f, 0.603516f, 0.627441f, 0.650879f, 0.672363f, 0.693848f, 0.712402f,
- 0.729980f, 0.748535f, 0.762207f, 0.778809f, 0.791504f, 0.804199f, 0.815918f, 0.827637f,
- 0.838867f, 0.848145f, 0.857910f, 0.866211f, 0.875977f, 0.883301f, 0.891602f, 0.898438f,
- 0.905273f, 0.911133f, 0.917480f, 0.923340f, 0.928711f, 0.933594f, 0.938477f, 0.942871f,
- 0.948242f, 0.952637f, 0.956543f, 0.960449f, 0.964355f, 0.968262f, 0.971191f, 0.974609f,
- 0.978027f, 0.980957f, 0.990723f, 0.989258f, 0.987793f, 0.985840f, 0.984375f, 0.983398f,
- 0.009758f, 0.030121f, 0.052490f, 0.077576f, 0.104309f, 0.134277f, 0.164917f, 0.197510f,
- 0.231812f, 0.266113f, 0.301025f, 0.336426f, 0.372070f, 0.405762f, 0.438721f, 0.471436f,
- 0.502441f, 0.531738f, 0.560059f, 0.587402f, 0.612793f, 0.634766f, 0.658691f, 0.679199f,
- 0.699219f, 0.718262f, 0.735352f, 0.751953f, 0.767090f, 0.780762f, 0.794922f, 0.808105f,
- 0.820801f, 0.831055f, 0.842285f, 0.851562f, 0.861328f, 0.870117f, 0.878906f, 0.886719f,
- 0.893555f, 0.900879f, 0.907715f, 0.913574f, 0.919434f, 0.926270f, 0.932129f, 0.936523f,
- 0.941895f, 0.945801f, 0.951172f, 0.955078f, 0.959473f, 0.963867f, 0.966797f, 0.970703f,
- 0.974121f, 0.977539f, 0.989746f, 0.988281f, 0.986328f, 0.984863f, 0.983398f, 0.982422f,
- 0.007744f, 0.024567f, 0.043365f, 0.063782f, 0.086487f, 0.111389f, 0.137451f, 0.166260f,
- 0.195435f, 0.226929f, 0.259033f, 0.291748f, 0.324951f, 0.358398f, 0.391113f, 0.424316f,
- 0.456299f, 0.486328f, 0.516113f, 0.543945f, 0.571289f, 0.597656f, 0.621094f, 0.644531f,
- 0.666504f, 0.686523f, 0.705078f, 0.724121f, 0.741211f, 0.757324f, 0.773438f, 0.786621f,
- 0.801270f, 0.812988f, 0.823730f, 0.835938f, 0.846191f, 0.855957f, 0.865723f, 0.873047f,
- 0.882324f, 0.889648f, 0.897949f, 0.905762f, 0.911133f, 0.917969f, 0.923828f, 0.929199f,
- 0.934082f, 0.940430f, 0.944824f, 0.949707f, 0.954102f, 0.958008f, 0.962891f, 0.966309f,
- 0.970215f, 0.974121f, 0.987793f, 0.986816f, 0.985352f, 0.983887f, 0.981934f, 0.980469f,
- 0.006672f, 0.020828f, 0.035950f, 0.053345f, 0.071594f, 0.092834f, 0.114624f, 0.139282f,
- 0.165649f, 0.192627f, 0.222290f, 0.252197f, 0.283203f, 0.314941f, 0.346680f, 0.377930f,
- 0.409668f, 0.441650f, 0.471680f, 0.500977f, 0.529297f, 0.557129f, 0.583008f, 0.607422f,
- 0.630859f, 0.654297f, 0.674805f, 0.694824f, 0.713867f, 0.731445f, 0.748535f, 0.763672f,
- 0.778320f, 0.791992f, 0.805664f, 0.817871f, 0.829590f, 0.840332f, 0.850098f, 0.860352f,
- 0.869141f, 0.878906f, 0.886719f, 0.894043f, 0.901855f, 0.909180f, 0.915527f, 0.920898f,
- 0.927246f, 0.933105f, 0.938477f, 0.943848f, 0.948730f, 0.953125f, 0.957520f, 0.961914f,
- 0.965820f, 0.970215f, 0.985840f, 0.985352f, 0.983887f, 0.981934f, 0.980957f, 0.979492f,
- 0.005592f, 0.017181f, 0.030457f, 0.044739f, 0.060638f, 0.077454f, 0.097046f, 0.117981f,
- 0.140625f, 0.164673f, 0.190552f, 0.217896f, 0.246582f, 0.275635f, 0.305176f, 0.336426f,
- 0.366943f, 0.397949f, 0.428711f, 0.457764f, 0.487061f, 0.515137f, 0.542480f, 0.568848f,
- 0.593750f, 0.619141f, 0.641602f, 0.662598f, 0.683594f, 0.703613f, 0.721191f, 0.738281f,
- 0.755859f, 0.770996f, 0.784180f, 0.799316f, 0.811035f, 0.823730f, 0.833984f, 0.845703f,
- 0.855957f, 0.865234f, 0.875000f, 0.883301f, 0.891602f, 0.898926f, 0.906738f, 0.912598f,
- 0.919922f, 0.926270f, 0.931152f, 0.937988f, 0.942871f, 0.948242f, 0.952148f, 0.957520f,
- 0.961914f, 0.966309f, 0.984375f, 0.983398f, 0.982422f, 0.981445f, 0.979492f, 0.978027f,
- 0.004829f, 0.014816f, 0.025711f, 0.037964f, 0.051300f, 0.065796f, 0.082458f, 0.100037f,
- 0.120178f, 0.141357f, 0.163330f, 0.187622f, 0.213013f, 0.240601f, 0.268311f, 0.296387f,
- 0.325928f, 0.356445f, 0.385742f, 0.415771f, 0.445557f, 0.474121f, 0.501465f, 0.530762f,
- 0.556152f, 0.581543f, 0.606445f, 0.630859f, 0.651855f, 0.672852f, 0.693359f, 0.712402f,
- 0.730469f, 0.746582f, 0.762695f, 0.777832f, 0.791992f, 0.806152f, 0.818359f, 0.830566f,
- 0.840820f, 0.852051f, 0.862305f, 0.871094f, 0.880371f, 0.888184f, 0.896484f, 0.904297f,
- 0.910645f, 0.917969f, 0.924316f, 0.931152f, 0.936035f, 0.942383f, 0.947266f, 0.951660f,
- 0.957031f, 0.960938f, 0.982422f, 0.982422f, 0.981445f, 0.979492f, 0.978516f, 0.977051f,
- 0.004040f, 0.012436f, 0.022064f, 0.032440f, 0.044006f, 0.056549f, 0.070068f, 0.085999f,
- 0.102539f, 0.120239f, 0.140625f, 0.161621f, 0.184448f, 0.208496f, 0.234253f, 0.260742f,
- 0.288086f, 0.316406f, 0.345215f, 0.374512f, 0.404297f, 0.433350f, 0.462402f, 0.490234f,
- 0.518066f, 0.543945f, 0.570312f, 0.594727f, 0.618652f, 0.642090f, 0.663086f, 0.683594f,
- 0.703613f, 0.721680f, 0.739258f, 0.755859f, 0.772461f, 0.786621f, 0.798828f, 0.812500f,
- 0.825195f, 0.836914f, 0.848633f, 0.858887f, 0.869141f, 0.877441f, 0.886230f, 0.894531f,
- 0.902832f, 0.909668f, 0.916992f, 0.923340f, 0.929688f, 0.935547f, 0.941406f, 0.947266f,
- 0.951660f, 0.957031f, 0.980469f, 0.980469f, 0.979492f, 0.978516f, 0.977051f, 0.976074f,
- 0.003536f, 0.010872f, 0.018829f, 0.027893f, 0.037872f, 0.048492f, 0.060883f, 0.073425f,
- 0.088074f, 0.103638f, 0.120789f, 0.139038f, 0.159912f, 0.181274f, 0.204102f, 0.227905f,
- 0.253906f, 0.280518f, 0.307861f, 0.335938f, 0.364746f, 0.393311f, 0.421631f, 0.451416f,
- 0.479004f, 0.505859f, 0.533203f, 0.560059f, 0.584473f, 0.608398f, 0.631836f, 0.653320f,
- 0.674805f, 0.695801f, 0.714355f, 0.731934f, 0.749512f, 0.765137f, 0.781250f, 0.794434f,
- 0.808594f, 0.821289f, 0.833496f, 0.844238f, 0.855469f, 0.866211f, 0.875000f, 0.883789f,
- 0.892578f, 0.901855f, 0.908691f, 0.915527f, 0.922852f, 0.929199f, 0.935059f, 0.941406f,
- 0.947266f, 0.951172f, 0.978516f, 0.979004f, 0.978027f, 0.977051f, 0.975586f, 0.974121f,
- 0.002989f, 0.009476f, 0.016785f, 0.024246f, 0.032745f, 0.041809f, 0.052246f, 0.063782f,
- 0.076111f, 0.089722f, 0.104675f, 0.120605f, 0.138306f, 0.157959f, 0.178101f, 0.200073f,
- 0.223145f, 0.247192f, 0.273193f, 0.300293f, 0.327148f, 0.354736f, 0.383545f, 0.411621f,
- 0.439941f, 0.468018f, 0.495605f, 0.522949f, 0.548828f, 0.574219f, 0.598145f, 0.622559f,
- 0.645508f, 0.666016f, 0.687500f, 0.706543f, 0.725586f, 0.743164f, 0.759766f, 0.775391f,
- 0.791016f, 0.803711f, 0.817871f, 0.829590f, 0.841797f, 0.852539f, 0.863281f, 0.873047f,
- 0.882812f, 0.891113f, 0.900391f, 0.906738f, 0.915039f, 0.922852f, 0.929688f, 0.936035f,
- 0.941895f, 0.946777f, 0.976074f, 0.977051f, 0.976074f, 0.975586f, 0.974121f, 0.972656f,
- 0.002846f, 0.008568f, 0.014557f, 0.021484f, 0.028442f, 0.036377f, 0.045074f, 0.055054f,
- 0.066101f, 0.077759f, 0.090759f, 0.104797f, 0.120483f, 0.136719f, 0.155029f, 0.175171f,
- 0.196045f, 0.218262f, 0.241943f, 0.266357f, 0.292480f, 0.319336f, 0.345703f, 0.373535f,
- 0.402100f, 0.429932f, 0.457764f, 0.484863f, 0.512207f, 0.539062f, 0.564941f, 0.589844f,
- 0.613281f, 0.636719f, 0.659180f, 0.680664f, 0.700684f, 0.718750f, 0.736816f, 0.754883f,
- 0.770508f, 0.785645f, 0.799805f, 0.813965f, 0.826172f, 0.838867f, 0.850586f, 0.861328f,
- 0.871582f, 0.881836f, 0.890625f, 0.898926f, 0.906738f, 0.915039f, 0.922363f, 0.928711f,
- 0.936035f, 0.941895f, 0.974609f, 0.975098f, 0.974609f, 0.973633f, 0.972656f, 0.971191f,
- 0.002285f, 0.007290f, 0.012634f, 0.018280f, 0.024918f, 0.032074f, 0.039673f, 0.048157f,
- 0.057220f, 0.067810f, 0.078735f, 0.091248f, 0.104370f, 0.119873f, 0.135742f, 0.152344f,
- 0.171631f, 0.191650f, 0.213501f, 0.236206f, 0.260010f, 0.285156f, 0.310547f, 0.338135f,
- 0.364746f, 0.392578f, 0.420410f, 0.448242f, 0.476562f, 0.502441f, 0.529785f, 0.555664f,
- 0.581543f, 0.605469f, 0.629395f, 0.652344f, 0.673340f, 0.693848f, 0.713867f, 0.732910f,
- 0.750000f, 0.767090f, 0.782715f, 0.797852f, 0.811035f, 0.825195f, 0.836914f, 0.848633f,
- 0.860840f, 0.870605f, 0.880371f, 0.890137f, 0.898926f, 0.907227f, 0.915527f, 0.923340f,
- 0.929688f, 0.936523f, 0.972168f, 0.973145f, 0.972656f, 0.972168f, 0.970703f, 0.969727f,
- 0.002064f, 0.006584f, 0.011154f, 0.016266f, 0.022263f, 0.028397f, 0.034973f, 0.042145f,
- 0.050232f, 0.059235f, 0.069031f, 0.079346f, 0.091736f, 0.104553f, 0.118652f, 0.133789f,
- 0.150635f, 0.168457f, 0.188110f, 0.208984f, 0.230225f, 0.253906f, 0.278076f, 0.303955f,
- 0.329346f, 0.356689f, 0.384033f, 0.411865f, 0.439941f, 0.467285f, 0.493896f, 0.520996f,
- 0.547363f, 0.573730f, 0.597168f, 0.622559f, 0.645508f, 0.667969f, 0.688965f, 0.709473f,
- 0.728027f, 0.746094f, 0.762695f, 0.778809f, 0.794922f, 0.809082f, 0.822754f, 0.834961f,
- 0.847168f, 0.858887f, 0.870117f, 0.880371f, 0.889648f, 0.898926f, 0.907227f, 0.915039f,
- 0.923828f, 0.930176f, 0.970215f, 0.971680f, 0.970215f, 0.970215f, 0.968750f, 0.968262f,
- 0.001935f, 0.005634f, 0.010078f, 0.014389f, 0.019669f, 0.024658f, 0.030716f, 0.037201f,
- 0.044098f, 0.051941f, 0.060333f, 0.070129f, 0.080383f, 0.091370f, 0.103638f, 0.116943f,
- 0.131714f, 0.148193f, 0.165161f, 0.183838f, 0.203979f, 0.225220f, 0.247803f, 0.271240f,
- 0.296631f, 0.322510f, 0.349121f, 0.376221f, 0.403076f, 0.431152f, 0.458984f, 0.485596f,
- 0.513672f, 0.540039f, 0.564941f, 0.590820f, 0.616211f, 0.638672f, 0.662109f, 0.683105f,
- 0.704102f, 0.723633f, 0.741699f, 0.759766f, 0.776855f, 0.792480f, 0.807617f, 0.821777f,
- 0.833496f, 0.847168f, 0.858887f, 0.870117f, 0.880859f, 0.889648f, 0.899414f, 0.908203f,
- 0.916992f, 0.924316f, 0.967285f, 0.968262f, 0.968750f, 0.968262f, 0.967285f, 0.966309f,
- 0.001805f, 0.005119f, 0.009079f, 0.013023f, 0.017487f, 0.022278f, 0.027130f, 0.032684f,
- 0.038666f, 0.045959f, 0.052826f, 0.061401f, 0.070801f, 0.080139f, 0.090698f, 0.102844f,
- 0.115845f, 0.130005f, 0.145264f, 0.162476f, 0.180176f, 0.199951f, 0.220459f, 0.242188f,
- 0.265869f, 0.290283f, 0.315430f, 0.341309f, 0.368652f, 0.395752f, 0.423584f, 0.451416f,
- 0.479248f, 0.505859f, 0.532227f, 0.559082f, 0.584961f, 0.609863f, 0.634277f, 0.656738f,
- 0.678711f, 0.700195f, 0.720703f, 0.738281f, 0.757324f, 0.774414f, 0.790527f, 0.805664f,
- 0.820312f, 0.834473f, 0.846680f, 0.858887f, 0.869629f, 0.880859f, 0.890625f, 0.899902f,
- 0.909668f, 0.917969f, 0.964844f, 0.966797f, 0.967285f, 0.965820f, 0.964844f, 0.963867f,
- 0.001437f, 0.004662f, 0.007919f, 0.011681f, 0.015404f, 0.019272f, 0.024261f, 0.029205f,
- 0.034515f, 0.040619f, 0.046967f, 0.054138f, 0.061737f, 0.070496f, 0.080200f, 0.090271f,
- 0.101807f, 0.114136f, 0.127686f, 0.143188f, 0.159058f, 0.176514f, 0.195190f, 0.215454f,
- 0.237305f, 0.260010f, 0.283936f, 0.309326f, 0.334717f, 0.361328f, 0.389160f, 0.416260f,
- 0.444336f, 0.471436f, 0.499512f, 0.525879f, 0.552734f, 0.579590f, 0.604004f, 0.628906f,
- 0.651855f, 0.674805f, 0.696777f, 0.717773f, 0.737305f, 0.755859f, 0.772949f, 0.789551f,
- 0.805664f, 0.819336f, 0.833984f, 0.847168f, 0.859375f, 0.871094f, 0.881836f, 0.892090f,
- 0.902344f, 0.910156f, 0.962402f, 0.964355f, 0.964355f, 0.963867f, 0.962891f, 0.961914f,
- 0.001264f, 0.004036f, 0.007088f, 0.010170f, 0.013672f, 0.017365f, 0.021423f, 0.025955f,
- 0.030533f, 0.035614f, 0.041321f, 0.047791f, 0.054626f, 0.062195f, 0.070679f, 0.080017f,
- 0.089600f, 0.100769f, 0.112854f, 0.125977f, 0.139893f, 0.156128f, 0.172852f, 0.191650f,
- 0.211060f, 0.232056f, 0.254883f, 0.278076f, 0.302979f, 0.328125f, 0.355225f, 0.381836f,
- 0.409912f, 0.437256f, 0.464844f, 0.492676f, 0.520508f, 0.547852f, 0.573242f, 0.599609f,
- 0.625000f, 0.649414f, 0.672363f, 0.694336f, 0.714844f, 0.734863f, 0.753418f, 0.771484f,
- 0.788574f, 0.804688f, 0.820312f, 0.833496f, 0.847656f, 0.859863f, 0.873047f, 0.883301f,
- 0.894043f, 0.903809f, 0.959961f, 0.961914f, 0.962402f, 0.960938f, 0.960449f, 0.959961f,
- 0.001297f, 0.003721f, 0.006397f, 0.009308f, 0.012260f, 0.015808f, 0.019302f, 0.023010f,
- 0.027267f, 0.032013f, 0.037109f, 0.042419f, 0.048523f, 0.054962f, 0.061920f, 0.070435f,
- 0.079407f, 0.088318f, 0.099121f, 0.111084f, 0.124023f, 0.137695f, 0.152832f, 0.169434f,
- 0.187378f, 0.206421f, 0.227783f, 0.249268f, 0.272461f, 0.297363f, 0.322754f, 0.348389f,
- 0.376221f, 0.403809f, 0.431396f, 0.459229f, 0.487305f, 0.515137f, 0.542480f, 0.569336f,
- 0.595215f, 0.621094f, 0.645996f, 0.669434f, 0.691406f, 0.712891f, 0.733887f, 0.753418f,
- 0.770996f, 0.789062f, 0.805176f, 0.820801f, 0.835449f, 0.849121f, 0.861328f, 0.874512f,
- 0.885742f, 0.895508f, 0.956543f, 0.959473f, 0.958984f, 0.958984f, 0.958008f, 0.957031f,
- 0.001267f, 0.003481f, 0.005955f, 0.008568f, 0.011185f, 0.014030f, 0.017151f, 0.020294f,
- 0.024246f, 0.028427f, 0.032654f, 0.037476f, 0.042603f, 0.048523f, 0.054871f, 0.062408f,
- 0.070129f, 0.078552f, 0.087769f, 0.097534f, 0.109192f, 0.121399f, 0.135010f, 0.150513f,
- 0.165894f, 0.183960f, 0.202881f, 0.222656f, 0.244385f, 0.267334f, 0.291260f, 0.317139f,
- 0.343506f, 0.370605f, 0.397949f, 0.426025f, 0.454346f, 0.482666f, 0.511230f, 0.538086f,
- 0.565918f, 0.592285f, 0.618164f, 0.642578f, 0.667480f, 0.690918f, 0.711914f, 0.732910f,
- 0.752930f, 0.771484f, 0.790039f, 0.806641f, 0.821777f, 0.837402f, 0.850586f, 0.864746f,
- 0.875977f, 0.887695f, 0.953613f, 0.956543f, 0.957031f, 0.956055f, 0.956055f, 0.955078f,
- 0.001068f, 0.003025f, 0.005283f, 0.007442f, 0.009857f, 0.012665f, 0.015930f, 0.018570f,
- 0.021820f, 0.025314f, 0.028931f, 0.033325f, 0.038147f, 0.042908f, 0.049011f, 0.055176f,
- 0.061859f, 0.069397f, 0.077637f, 0.086792f, 0.096252f, 0.107117f, 0.119385f, 0.132690f,
- 0.147095f, 0.162720f, 0.180054f, 0.198486f, 0.218384f, 0.239990f, 0.262207f, 0.287109f,
- 0.311523f, 0.337891f, 0.364990f, 0.392822f, 0.420654f, 0.449219f, 0.478027f, 0.505859f,
- 0.535156f, 0.562012f, 0.588867f, 0.615723f, 0.641602f, 0.666016f, 0.688965f, 0.711914f,
- 0.732910f, 0.753906f, 0.773438f, 0.791016f, 0.808594f, 0.823730f, 0.839355f, 0.854004f,
- 0.867188f, 0.879883f, 0.950195f, 0.954102f, 0.954102f, 0.953125f, 0.952637f, 0.952148f,
- 0.000884f, 0.003082f, 0.004631f, 0.006931f, 0.008942f, 0.011513f, 0.013779f, 0.016663f,
- 0.019806f, 0.022934f, 0.026215f, 0.029999f, 0.033813f, 0.038544f, 0.043365f, 0.048615f,
- 0.054352f, 0.061005f, 0.068420f, 0.076477f, 0.085022f, 0.095032f, 0.105469f, 0.117432f,
- 0.130127f, 0.143799f, 0.159790f, 0.176270f, 0.194580f, 0.214478f, 0.235229f, 0.257568f,
- 0.281982f, 0.306641f, 0.332764f, 0.359863f, 0.388184f, 0.416016f, 0.445557f, 0.474854f,
- 0.502441f, 0.531738f, 0.559570f, 0.586914f, 0.614258f, 0.640625f, 0.665039f, 0.689453f,
- 0.712891f, 0.734863f, 0.755371f, 0.774902f, 0.793945f, 0.810547f, 0.827637f, 0.842773f,
- 0.857910f, 0.871094f, 0.946777f, 0.950684f, 0.951172f, 0.950684f, 0.949707f, 0.949707f,
- 0.000848f, 0.002630f, 0.004330f, 0.006386f, 0.008148f, 0.010437f, 0.012436f, 0.014977f,
- 0.017731f, 0.020645f, 0.023529f, 0.026413f, 0.030289f, 0.034302f, 0.038391f, 0.043365f,
- 0.048737f, 0.054413f, 0.060455f, 0.067383f, 0.075134f, 0.083801f, 0.093262f, 0.103821f,
- 0.114746f, 0.127441f, 0.140991f, 0.156372f, 0.172729f, 0.190918f, 0.210449f, 0.231201f,
- 0.253662f, 0.277344f, 0.302734f, 0.328857f, 0.355225f, 0.384033f, 0.413086f, 0.440918f,
- 0.471191f, 0.500488f, 0.529785f, 0.558594f, 0.586426f, 0.613770f, 0.640137f, 0.666016f,
- 0.689453f, 0.714355f, 0.736328f, 0.757812f, 0.777832f, 0.796875f, 0.813965f, 0.831543f,
- 0.847168f, 0.860840f, 0.943848f, 0.948242f, 0.947754f, 0.948242f, 0.946777f, 0.946777f,
- 0.000747f, 0.002462f, 0.004192f, 0.005573f, 0.007454f, 0.009430f, 0.011253f, 0.013588f,
- 0.015762f, 0.018112f, 0.020859f, 0.023758f, 0.027084f, 0.030426f, 0.034332f, 0.038635f,
- 0.042999f, 0.048340f, 0.053772f, 0.060028f, 0.066589f, 0.074402f, 0.082764f, 0.091553f,
- 0.101685f, 0.112854f, 0.125122f, 0.138184f, 0.153320f, 0.169556f, 0.187500f, 0.206543f,
- 0.227539f, 0.249512f, 0.273193f, 0.298340f, 0.324463f, 0.351562f, 0.379883f, 0.409424f,
- 0.438477f, 0.468750f, 0.498047f, 0.527832f, 0.556641f, 0.585449f, 0.614258f, 0.641113f,
- 0.666992f, 0.692383f, 0.716309f, 0.738281f, 0.760742f, 0.780273f, 0.799805f, 0.818848f,
- 0.834473f, 0.851074f, 0.939941f, 0.944824f, 0.944336f, 0.944336f, 0.944336f, 0.943359f,
- 0.000670f, 0.002079f, 0.003538f, 0.005146f, 0.006508f, 0.008247f, 0.010223f, 0.012260f,
- 0.014153f, 0.016479f, 0.018677f, 0.021515f, 0.024323f, 0.027313f, 0.030518f, 0.034302f,
- 0.038422f, 0.042725f, 0.047760f, 0.053101f, 0.059113f, 0.065613f, 0.072937f, 0.080444f,
- 0.089722f, 0.099426f, 0.110596f, 0.122314f, 0.135742f, 0.150513f, 0.166260f, 0.183716f,
- 0.202759f, 0.223633f, 0.245728f, 0.269287f, 0.294189f, 0.320557f, 0.348633f, 0.376709f,
- 0.406494f, 0.436523f, 0.467285f, 0.497070f, 0.528320f, 0.557129f, 0.586426f, 0.614746f,
- 0.642090f, 0.668945f, 0.694824f, 0.718750f, 0.742676f, 0.764648f, 0.786133f, 0.805176f,
- 0.823242f, 0.840820f, 0.936035f, 0.940918f, 0.941406f, 0.941406f, 0.940430f, 0.939941f,
- 0.000645f, 0.001963f, 0.003384f, 0.004719f, 0.006042f, 0.007614f, 0.009384f, 0.011192f,
- 0.012665f, 0.015083f, 0.016861f, 0.019165f, 0.021393f, 0.024445f, 0.027451f, 0.030716f,
- 0.034149f, 0.038116f, 0.042389f, 0.047028f, 0.052277f, 0.058014f, 0.064270f, 0.071289f,
- 0.079041f, 0.087830f, 0.097351f, 0.108337f, 0.119995f, 0.132812f, 0.147217f, 0.163452f,
- 0.180420f, 0.199585f, 0.219849f, 0.242065f, 0.265625f, 0.291260f, 0.318115f, 0.345703f,
- 0.375000f, 0.404541f, 0.434326f, 0.465820f, 0.496582f, 0.526855f, 0.557617f, 0.587402f,
- 0.616699f, 0.645508f, 0.672363f, 0.698242f, 0.723145f, 0.747559f, 0.770020f, 0.791504f,
- 0.810059f, 0.828613f, 0.931641f, 0.937012f, 0.937500f, 0.937500f, 0.937012f, 0.936523f,
- 0.000692f, 0.001705f, 0.003000f, 0.004238f, 0.005798f, 0.006805f, 0.008659f, 0.009933f,
- 0.011681f, 0.013191f, 0.015259f, 0.017166f, 0.019379f, 0.021729f, 0.024796f, 0.027328f,
- 0.030380f, 0.033661f, 0.037598f, 0.041718f, 0.046539f, 0.051270f, 0.056946f, 0.062988f,
- 0.069885f, 0.077271f, 0.085999f, 0.095398f, 0.105652f, 0.117859f, 0.129883f, 0.144409f,
- 0.159912f, 0.177002f, 0.196045f, 0.216553f, 0.239014f, 0.262451f, 0.288086f, 0.314941f,
- 0.343262f, 0.372314f, 0.403076f, 0.433594f, 0.465332f, 0.496826f, 0.527832f, 0.559082f,
- 0.589355f, 0.619629f, 0.648926f, 0.676758f, 0.703125f, 0.728516f, 0.752930f, 0.775391f,
- 0.797363f, 0.817871f, 0.927246f, 0.933105f, 0.934082f, 0.933594f, 0.933594f, 0.933105f,
- 0.000460f, 0.001622f, 0.002705f, 0.003983f, 0.004925f, 0.006363f, 0.007652f, 0.008965f,
- 0.010521f, 0.011963f, 0.013664f, 0.015480f, 0.017258f, 0.019440f, 0.021912f, 0.024338f,
- 0.027084f, 0.030212f, 0.033356f, 0.037018f, 0.040833f, 0.045380f, 0.050110f, 0.055573f,
- 0.061829f, 0.068359f, 0.075928f, 0.083984f, 0.093140f, 0.103333f, 0.115112f, 0.127441f,
- 0.141602f, 0.156982f, 0.174316f, 0.192871f, 0.213257f, 0.235596f, 0.259766f, 0.285400f,
- 0.312256f, 0.341797f, 0.371094f, 0.402100f, 0.434082f, 0.465332f, 0.497314f, 0.529297f,
- 0.562012f, 0.592773f, 0.623535f, 0.652832f, 0.681641f, 0.709473f, 0.735352f, 0.759766f,
- 0.783203f, 0.803711f, 0.922363f, 0.929199f, 0.929688f, 0.929199f, 0.929688f, 0.928711f,
- 0.000341f, 0.001686f, 0.002537f, 0.003769f, 0.004745f, 0.005764f, 0.007034f, 0.008286f,
- 0.009369f, 0.010742f, 0.012161f, 0.013931f, 0.015671f, 0.017563f, 0.019440f, 0.021851f,
- 0.024231f, 0.026672f, 0.029556f, 0.032776f, 0.036255f, 0.040283f, 0.044464f, 0.049194f,
- 0.054413f, 0.060059f, 0.066589f, 0.074036f, 0.081909f, 0.091187f, 0.100769f, 0.112000f,
- 0.124512f, 0.139038f, 0.154297f, 0.171265f, 0.189819f, 0.210571f, 0.232788f, 0.257324f,
- 0.283203f, 0.311035f, 0.339844f, 0.370850f, 0.402100f, 0.433838f, 0.466797f, 0.499268f,
- 0.532227f, 0.565430f, 0.598145f, 0.628418f, 0.659180f, 0.687988f, 0.715820f, 0.742188f,
- 0.767090f, 0.791504f, 0.917969f, 0.924805f, 0.925293f, 0.925293f, 0.924805f, 0.924805f,
- 0.000405f, 0.001282f, 0.002298f, 0.003269f, 0.004448f, 0.005043f, 0.006294f, 0.007233f,
- 0.008606f, 0.009727f, 0.010849f, 0.012421f, 0.013885f, 0.015465f, 0.017426f, 0.019394f,
- 0.021667f, 0.023819f, 0.026154f, 0.029175f, 0.032227f, 0.035706f, 0.039062f, 0.043427f,
- 0.047913f, 0.052856f, 0.058502f, 0.064880f, 0.071960f, 0.079895f, 0.088867f, 0.098633f,
- 0.109619f, 0.122192f, 0.135742f, 0.151489f, 0.168457f, 0.187134f, 0.207764f, 0.230835f,
- 0.254883f, 0.281494f, 0.310059f, 0.339355f, 0.370361f, 0.402588f, 0.435547f, 0.468994f,
- 0.502930f, 0.537109f, 0.569824f, 0.602051f, 0.634766f, 0.665527f, 0.695801f, 0.724121f,
- 0.750488f, 0.776855f, 0.912598f, 0.919434f, 0.920410f, 0.920410f, 0.919922f, 0.920410f,
- 0.000529f, 0.001217f, 0.002171f, 0.003035f, 0.003790f, 0.004784f, 0.005711f, 0.006756f,
- 0.007782f, 0.008987f, 0.009773f, 0.011185f, 0.012650f, 0.013771f, 0.015656f, 0.017181f,
- 0.018890f, 0.021057f, 0.023239f, 0.025848f, 0.028488f, 0.031525f, 0.034607f, 0.038147f,
- 0.042023f, 0.046539f, 0.051605f, 0.056793f, 0.063049f, 0.069946f, 0.078064f, 0.086548f,
- 0.096313f, 0.107117f, 0.119446f, 0.133301f, 0.148560f, 0.165405f, 0.184570f, 0.205811f,
- 0.228394f, 0.253174f, 0.280029f, 0.308594f, 0.339111f, 0.370605f, 0.404053f, 0.437988f,
- 0.471680f, 0.506348f, 0.541504f, 0.576172f, 0.609375f, 0.642578f, 0.674316f, 0.705078f,
- 0.734375f, 0.761719f, 0.907227f, 0.914062f, 0.915527f, 0.915527f, 0.916016f, 0.915039f,
- 0.000402f, 0.001247f, 0.001841f, 0.002651f, 0.003414f, 0.004200f, 0.005337f, 0.005821f,
- 0.006733f, 0.008041f, 0.008942f, 0.010201f, 0.011261f, 0.012749f, 0.013893f, 0.015472f,
- 0.016663f, 0.018829f, 0.020615f, 0.022873f, 0.025299f, 0.027893f, 0.030533f, 0.033600f,
- 0.037140f, 0.040924f, 0.044983f, 0.049927f, 0.055359f, 0.061340f, 0.068176f, 0.075500f,
- 0.084106f, 0.093933f, 0.104370f, 0.116638f, 0.130249f, 0.145996f, 0.162842f, 0.181885f,
- 0.203735f, 0.226562f, 0.251465f, 0.279297f, 0.308594f, 0.339355f, 0.373047f, 0.406982f,
- 0.440918f, 0.477051f, 0.511719f, 0.548340f, 0.583496f, 0.618164f, 0.652344f, 0.684570f,
- 0.715332f, 0.745605f, 0.901855f, 0.909180f, 0.910156f, 0.910645f, 0.910156f, 0.910156f,
- 0.000371f, 0.001090f, 0.001752f, 0.002409f, 0.003042f, 0.003963f, 0.004898f, 0.005295f,
- 0.006077f, 0.006992f, 0.008102f, 0.009338f, 0.010101f, 0.011078f, 0.012375f, 0.013718f,
- 0.015099f, 0.016403f, 0.018402f, 0.020203f, 0.022354f, 0.024475f, 0.026825f, 0.029388f,
- 0.032623f, 0.035522f, 0.039429f, 0.043762f, 0.048462f, 0.053558f, 0.059265f, 0.065552f,
- 0.073120f, 0.081787f, 0.091431f, 0.102112f, 0.114136f, 0.127930f, 0.143066f, 0.160767f,
- 0.179810f, 0.200928f, 0.224854f, 0.250732f, 0.279053f, 0.308838f, 0.340820f, 0.374756f,
- 0.410156f, 0.446045f, 0.482666f, 0.520020f, 0.556152f, 0.593262f, 0.628906f, 0.663574f,
- 0.695801f, 0.728027f, 0.895508f, 0.903809f, 0.904297f, 0.904297f, 0.904297f, 0.904785f,
- 0.000425f, 0.000937f, 0.001529f, 0.002129f, 0.002674f, 0.003696f, 0.004257f, 0.004990f,
- 0.005726f, 0.006161f, 0.007118f, 0.007919f, 0.009109f, 0.009941f, 0.011055f, 0.011993f,
- 0.013191f, 0.014832f, 0.016281f, 0.017868f, 0.019562f, 0.021362f, 0.023514f, 0.025909f,
- 0.028549f, 0.031189f, 0.034637f, 0.037994f, 0.042145f, 0.046570f, 0.051453f, 0.057129f,
- 0.063965f, 0.070984f, 0.079285f, 0.088806f, 0.099426f, 0.111267f, 0.125366f, 0.140747f,
- 0.158203f, 0.178101f, 0.199585f, 0.223755f, 0.250732f, 0.279297f, 0.310059f, 0.343994f,
- 0.377686f, 0.414307f, 0.451904f, 0.489258f, 0.527832f, 0.565918f, 0.603027f, 0.640137f,
- 0.675781f, 0.710449f, 0.888672f, 0.897461f, 0.899902f, 0.900391f, 0.899414f, 0.899414f,
- 0.000317f, 0.000823f, 0.001386f, 0.002108f, 0.002684f, 0.003239f, 0.003883f, 0.004303f,
- 0.004730f, 0.005569f, 0.006626f, 0.007214f, 0.008003f, 0.008865f, 0.009590f, 0.010948f,
- 0.011856f, 0.012871f, 0.014381f, 0.015640f, 0.017075f, 0.018799f, 0.020569f, 0.022537f,
- 0.024704f, 0.027405f, 0.030090f, 0.033142f, 0.036346f, 0.040436f, 0.044830f, 0.049835f,
- 0.055450f, 0.061584f, 0.068665f, 0.076904f, 0.086060f, 0.096741f, 0.109192f, 0.122559f,
- 0.138428f, 0.155762f, 0.176270f, 0.198242f, 0.223145f, 0.250244f, 0.280518f, 0.312500f,
- 0.346680f, 0.382324f, 0.420410f, 0.458740f, 0.498779f, 0.538086f, 0.577637f, 0.616211f,
- 0.654297f, 0.690918f, 0.881348f, 0.890625f, 0.892578f, 0.893066f, 0.893066f, 0.892578f,
- 0.000385f, 0.000766f, 0.001544f, 0.001925f, 0.002359f, 0.002947f, 0.003176f, 0.003691f,
- 0.004288f, 0.005215f, 0.005917f, 0.006214f, 0.007019f, 0.007843f, 0.008469f, 0.009598f,
- 0.010345f, 0.011559f, 0.012497f, 0.013634f, 0.014992f, 0.016373f, 0.017853f, 0.019608f,
- 0.021515f, 0.023788f, 0.026260f, 0.028931f, 0.031860f, 0.034912f, 0.038635f, 0.042633f,
- 0.047638f, 0.053070f, 0.059540f, 0.066284f, 0.074524f, 0.083679f, 0.094177f, 0.106445f,
- 0.120361f, 0.135620f, 0.154053f, 0.174072f, 0.197144f, 0.222900f, 0.251221f, 0.281982f,
- 0.315430f, 0.351318f, 0.388672f, 0.427734f, 0.468506f, 0.508301f, 0.549805f, 0.591309f,
- 0.631348f, 0.670410f, 0.874512f, 0.884766f, 0.885742f, 0.886230f, 0.886230f, 0.886230f,
- 0.000230f, 0.000832f, 0.001281f, 0.001865f, 0.002207f, 0.002605f, 0.003212f, 0.003284f,
- 0.004124f, 0.004597f, 0.005222f, 0.005703f, 0.006260f, 0.007095f, 0.007790f, 0.008377f,
- 0.009010f, 0.010078f, 0.011009f, 0.011925f, 0.013153f, 0.014282f, 0.015610f, 0.017151f,
- 0.018951f, 0.020416f, 0.022583f, 0.024826f, 0.027328f, 0.030136f, 0.033508f, 0.036835f,
- 0.040985f, 0.045410f, 0.050812f, 0.056854f, 0.063965f, 0.071777f, 0.081177f, 0.091858f,
- 0.103699f, 0.117615f, 0.133423f, 0.152588f, 0.172974f, 0.196777f, 0.222900f, 0.252686f,
- 0.284912f, 0.319824f, 0.356934f, 0.395996f, 0.436768f, 0.478516f, 0.521484f, 0.564453f,
- 0.607422f, 0.649414f, 0.866699f, 0.876953f, 0.877930f, 0.879395f, 0.879883f, 0.878418f,
- 0.000228f, 0.000734f, 0.000993f, 0.001416f, 0.001935f, 0.002293f, 0.002541f, 0.003174f,
- 0.003508f, 0.004040f, 0.004337f, 0.005039f, 0.005505f, 0.006054f, 0.006840f, 0.007366f,
- 0.008041f, 0.008644f, 0.009544f, 0.010460f, 0.011238f, 0.012329f, 0.013542f, 0.014755f,
- 0.016083f, 0.017624f, 0.019424f, 0.021408f, 0.023422f, 0.025803f, 0.028366f, 0.031311f,
- 0.034912f, 0.039124f, 0.043304f, 0.048492f, 0.054291f, 0.061188f, 0.069397f, 0.078552f,
- 0.089233f, 0.101074f, 0.115540f, 0.131226f, 0.150757f, 0.172119f, 0.196533f, 0.224243f,
- 0.254883f, 0.288574f, 0.324707f, 0.364014f, 0.405029f, 0.447510f, 0.491699f, 0.536133f,
- 0.581543f, 0.627441f, 0.858398f, 0.869141f, 0.870605f, 0.871582f, 0.871094f, 0.871582f,
- 0.000118f, 0.000713f, 0.000985f, 0.001328f, 0.001612f, 0.001999f, 0.002399f, 0.002913f,
- 0.003139f, 0.003567f, 0.004055f, 0.004406f, 0.004986f, 0.005226f, 0.005856f, 0.006332f,
- 0.007042f, 0.007553f, 0.008286f, 0.009064f, 0.009834f, 0.010696f, 0.011658f, 0.012726f,
- 0.013817f, 0.015289f, 0.016693f, 0.018265f, 0.019699f, 0.021835f, 0.024307f, 0.026642f,
- 0.029770f, 0.033234f, 0.037048f, 0.041351f, 0.046478f, 0.052032f, 0.058960f, 0.066589f,
- 0.075745f, 0.086182f, 0.099121f, 0.113037f, 0.129517f, 0.149048f, 0.171387f, 0.196899f,
- 0.225464f, 0.257812f, 0.293457f, 0.331787f, 0.373291f, 0.416748f, 0.460938f, 0.507812f,
- 0.554688f, 0.602051f, 0.849609f, 0.859863f, 0.862793f, 0.863281f, 0.862793f, 0.862793f,
- 0.000211f, 0.000522f, 0.000877f, 0.001204f, 0.001507f, 0.001724f, 0.002062f, 0.002426f,
- 0.002867f, 0.003157f, 0.003443f, 0.003752f, 0.004192f, 0.004753f, 0.005154f, 0.005428f,
- 0.006065f, 0.006546f, 0.007210f, 0.007725f, 0.008530f, 0.009247f, 0.010025f, 0.010887f,
- 0.011909f, 0.012970f, 0.014069f, 0.015335f, 0.017105f, 0.018433f, 0.020554f, 0.022552f,
- 0.025116f, 0.027802f, 0.031158f, 0.034485f, 0.038971f, 0.044037f, 0.049469f, 0.055847f,
- 0.063843f, 0.072815f, 0.083618f, 0.095947f, 0.110840f, 0.128174f, 0.147949f, 0.171387f,
- 0.198242f, 0.228271f, 0.262207f, 0.299805f, 0.340332f, 0.384277f, 0.430176f, 0.477295f,
- 0.527344f, 0.577637f, 0.839844f, 0.851074f, 0.853516f, 0.854492f, 0.854980f, 0.854980f,
- 0.000218f, 0.000479f, 0.000706f, 0.001109f, 0.001245f, 0.001763f, 0.001800f, 0.002211f,
- 0.002377f, 0.002783f, 0.003103f, 0.003223f, 0.003782f, 0.004089f, 0.004326f, 0.004711f,
- 0.005306f, 0.005569f, 0.006199f, 0.006653f, 0.007168f, 0.007919f, 0.008560f, 0.009254f,
- 0.009979f, 0.010872f, 0.012054f, 0.012810f, 0.014221f, 0.015793f, 0.017181f, 0.018967f,
- 0.021088f, 0.023361f, 0.026001f, 0.028915f, 0.032257f, 0.036469f, 0.040924f, 0.046875f,
- 0.053375f, 0.061218f, 0.070435f, 0.080811f, 0.093628f, 0.108704f, 0.126709f, 0.147461f,
- 0.172241f, 0.199951f, 0.232788f, 0.268799f, 0.308594f, 0.351562f, 0.397705f, 0.447266f,
- 0.498291f, 0.550293f, 0.830078f, 0.841797f, 0.843750f, 0.845215f, 0.845215f, 0.845703f,
- 0.000139f, 0.000379f, 0.000704f, 0.000896f, 0.001095f, 0.001392f, 0.001649f, 0.002058f,
- 0.002235f, 0.002483f, 0.002621f, 0.002878f, 0.003214f, 0.003580f, 0.003820f, 0.004055f,
- 0.004498f, 0.004791f, 0.005173f, 0.005692f, 0.006145f, 0.006691f, 0.007175f, 0.007874f,
- 0.008499f, 0.009239f, 0.010117f, 0.011032f, 0.011864f, 0.012901f, 0.014282f, 0.015701f,
- 0.017242f, 0.019516f, 0.021469f, 0.024002f, 0.026749f, 0.029953f, 0.034027f, 0.038727f,
- 0.044250f, 0.050568f, 0.058136f, 0.067139f, 0.078247f, 0.091614f, 0.106689f, 0.125366f,
- 0.147339f, 0.172974f, 0.202881f, 0.237671f, 0.275879f, 0.318359f, 0.365234f, 0.415283f,
- 0.468018f, 0.521973f, 0.819336f, 0.832031f, 0.834473f, 0.834961f, 0.835449f, 0.835938f,
- 0.000115f, 0.000396f, 0.000688f, 0.000885f, 0.000917f, 0.001393f, 0.001478f, 0.001590f,
- 0.001944f, 0.002123f, 0.002291f, 0.002644f, 0.002666f, 0.003023f, 0.003197f, 0.003546f,
- 0.003714f, 0.004246f, 0.004551f, 0.004837f, 0.005108f, 0.005577f, 0.006054f, 0.006504f,
- 0.007023f, 0.007633f, 0.008362f, 0.009148f, 0.009926f, 0.010742f, 0.011917f, 0.013062f,
- 0.014351f, 0.015991f, 0.017639f, 0.019455f, 0.021729f, 0.024689f, 0.027740f, 0.031708f,
- 0.036102f, 0.041260f, 0.047882f, 0.055450f, 0.064392f, 0.075500f, 0.088928f, 0.104797f,
- 0.124756f, 0.147949f, 0.175415f, 0.207275f, 0.244507f, 0.286133f, 0.332520f, 0.381836f,
- 0.436279f, 0.492432f, 0.808105f, 0.821289f, 0.822754f, 0.824707f, 0.825195f, 0.824219f,
- 0.000209f, 0.000435f, 0.000493f, 0.000669f, 0.001040f, 0.001076f, 0.001254f, 0.001398f,
- 0.001603f, 0.001697f, 0.001987f, 0.002140f, 0.002268f, 0.002472f, 0.002769f, 0.002991f,
- 0.003302f, 0.003572f, 0.003685f, 0.004002f, 0.004337f, 0.004654f, 0.005062f, 0.005379f,
- 0.005871f, 0.006363f, 0.006733f, 0.007416f, 0.008102f, 0.008812f, 0.009727f, 0.010689f,
- 0.011566f, 0.013145f, 0.014053f, 0.015762f, 0.017899f, 0.020096f, 0.022552f, 0.025528f,
- 0.028992f, 0.033325f, 0.038635f, 0.044952f, 0.052582f, 0.061554f, 0.072998f, 0.086670f,
- 0.103577f, 0.124329f, 0.148804f, 0.178467f, 0.213501f, 0.253174f, 0.298828f, 0.348877f,
- 0.403076f, 0.461914f, 0.795898f, 0.809570f, 0.812012f, 0.813477f, 0.813477f, 0.814453f,
- 0.000243f, 0.000322f, 0.000466f, 0.000710f, 0.000863f, 0.000942f, 0.001051f, 0.001182f,
- 0.001369f, 0.001451f, 0.001716f, 0.001851f, 0.001968f, 0.002192f, 0.002323f, 0.002470f,
- 0.002773f, 0.002850f, 0.003056f, 0.003399f, 0.003624f, 0.003832f, 0.004192f, 0.004467f,
- 0.004955f, 0.005276f, 0.005772f, 0.006084f, 0.006672f, 0.007191f, 0.007828f, 0.008720f,
- 0.009575f, 0.010292f, 0.011505f, 0.012535f, 0.014114f, 0.016006f, 0.017838f, 0.020462f,
- 0.023193f, 0.026489f, 0.030807f, 0.035858f, 0.041840f, 0.049652f, 0.059174f, 0.070435f,
- 0.084839f, 0.102783f, 0.124146f, 0.151489f, 0.183472f, 0.221802f, 0.265137f, 0.315186f,
- 0.369629f, 0.430664f, 0.782715f, 0.796875f, 0.799805f, 0.800293f, 0.801758f, 0.801758f,
- 0.000119f, 0.000369f, 0.000340f, 0.000595f, 0.000667f, 0.000841f, 0.001010f, 0.001086f,
- 0.001179f, 0.001225f, 0.001494f, 0.001555f, 0.001654f, 0.001754f, 0.001965f, 0.002142f,
- 0.002197f, 0.002432f, 0.002619f, 0.002811f, 0.003021f, 0.003139f, 0.003567f, 0.003708f,
- 0.004066f, 0.004360f, 0.004612f, 0.005123f, 0.005489f, 0.005878f, 0.006306f, 0.006824f,
- 0.007576f, 0.008286f, 0.008949f, 0.010155f, 0.011322f, 0.012756f, 0.014046f, 0.015976f,
- 0.018250f, 0.020874f, 0.024094f, 0.027878f, 0.032867f, 0.039154f, 0.046509f, 0.055908f,
- 0.068054f, 0.082886f, 0.102356f, 0.125732f, 0.155029f, 0.190674f, 0.232422f, 0.281006f,
- 0.335693f, 0.397949f, 0.770020f, 0.783691f, 0.786621f, 0.787598f, 0.788086f, 0.789551f,
- 0.000000f, 0.000220f, 0.000275f, 0.000562f, 0.000618f, 0.000683f, 0.000733f, 0.000761f,
- 0.000966f, 0.001022f, 0.001184f, 0.001237f, 0.001382f, 0.001552f, 0.001688f, 0.001724f,
- 0.001918f, 0.002024f, 0.002115f, 0.002243f, 0.002403f, 0.002718f, 0.002840f, 0.003052f,
- 0.003330f, 0.003508f, 0.003860f, 0.004097f, 0.004314f, 0.004719f, 0.005074f, 0.005535f,
- 0.006058f, 0.006584f, 0.007168f, 0.007874f, 0.008759f, 0.009651f, 0.011086f, 0.012459f,
- 0.013992f, 0.015945f, 0.018433f, 0.021408f, 0.025192f, 0.029861f, 0.035950f, 0.043396f,
- 0.053406f, 0.065735f, 0.082031f, 0.102234f, 0.128052f, 0.160645f, 0.200073f, 0.247192f,
- 0.301025f, 0.363281f, 0.755371f, 0.770996f, 0.772949f, 0.773926f, 0.775879f, 0.775879f,
- 0.000216f, 0.000102f, 0.000381f, 0.000487f, 0.000429f, 0.000552f, 0.000579f, 0.000788f,
- 0.000804f, 0.000854f, 0.000937f, 0.000996f, 0.001078f, 0.001218f, 0.001315f, 0.001499f,
- 0.001532f, 0.001642f, 0.001805f, 0.001825f, 0.002077f, 0.002178f, 0.002312f, 0.002396f,
- 0.002575f, 0.002735f, 0.002947f, 0.003317f, 0.003428f, 0.003721f, 0.004185f, 0.004379f,
- 0.004704f, 0.005253f, 0.005650f, 0.006145f, 0.006870f, 0.007515f, 0.008415f, 0.009430f,
- 0.010612f, 0.012093f, 0.013954f, 0.016052f, 0.018967f, 0.022476f, 0.027115f, 0.032898f,
- 0.040649f, 0.050690f, 0.063599f, 0.080811f, 0.103210f, 0.132202f, 0.168823f, 0.213501f,
- 0.266602f, 0.329102f, 0.740234f, 0.756348f, 0.758789f, 0.760254f, 0.761230f, 0.761230f,
- 0.000179f, 0.000181f, 0.000180f, 0.000289f, 0.000413f, 0.000458f, 0.000497f, 0.000620f,
- 0.000646f, 0.000688f, 0.000830f, 0.000868f, 0.000904f, 0.000981f, 0.001024f, 0.001178f,
- 0.001146f, 0.001302f, 0.001382f, 0.001523f, 0.001679f, 0.001737f, 0.001824f, 0.001959f,
- 0.002195f, 0.002283f, 0.002438f, 0.002579f, 0.002703f, 0.002939f, 0.003181f, 0.003454f,
- 0.003677f, 0.004051f, 0.004395f, 0.004738f, 0.005283f, 0.005783f, 0.006420f, 0.007095f,
- 0.007988f, 0.009094f, 0.010384f, 0.011955f, 0.013939f, 0.016434f, 0.019836f, 0.024292f,
- 0.030029f, 0.037659f, 0.048065f, 0.061890f, 0.080811f, 0.105774f, 0.138672f, 0.180542f,
- 0.231934f, 0.293213f, 0.724121f, 0.740234f, 0.744141f, 0.745117f, 0.745605f, 0.746094f,
- 0.000000f, 0.000056f, 0.000263f, 0.000339f, 0.000369f, 0.000357f, 0.000376f, 0.000508f,
- 0.000519f, 0.000558f, 0.000581f, 0.000678f, 0.000767f, 0.000775f, 0.000905f, 0.000849f,
- 0.000992f, 0.000942f, 0.001192f, 0.001169f, 0.001204f, 0.001375f, 0.001439f, 0.001532f,
- 0.001634f, 0.001676f, 0.001799f, 0.001904f, 0.002165f, 0.002262f, 0.002377f, 0.002611f,
- 0.002836f, 0.003103f, 0.003321f, 0.003550f, 0.004005f, 0.004356f, 0.004772f, 0.005295f,
- 0.005962f, 0.006756f, 0.007690f, 0.008690f, 0.010078f, 0.011871f, 0.014252f, 0.017242f,
- 0.021393f, 0.027100f, 0.034851f, 0.046051f, 0.060455f, 0.081848f, 0.110474f, 0.148682f,
- 0.197632f, 0.257568f, 0.706543f, 0.724121f, 0.727539f, 0.729492f, 0.729980f, 0.729492f,
- 0.000000f, 0.000130f, 0.000174f, 0.000312f, 0.000290f, 0.000293f, 0.000372f, 0.000319f,
- 0.000397f, 0.000433f, 0.000550f, 0.000552f, 0.000564f, 0.000593f, 0.000638f, 0.000758f,
- 0.000784f, 0.000797f, 0.000842f, 0.000937f, 0.001011f, 0.001068f, 0.001125f, 0.001231f,
- 0.001228f, 0.001288f, 0.001409f, 0.001465f, 0.001644f, 0.001697f, 0.001965f, 0.001924f,
- 0.002136f, 0.002270f, 0.002436f, 0.002697f, 0.002916f, 0.003202f, 0.003492f, 0.003929f,
- 0.004391f, 0.004887f, 0.005516f, 0.006233f, 0.007240f, 0.008461f, 0.010094f, 0.012070f,
- 0.014854f, 0.018585f, 0.024338f, 0.032379f, 0.043884f, 0.060516f, 0.084656f, 0.118469f,
- 0.164185f, 0.222168f, 0.689941f, 0.708008f, 0.710449f, 0.711914f, 0.712891f, 0.712402f,
- 0.000000f, 0.000000f, 0.000122f, 0.000226f, 0.000145f, 0.000282f, 0.000255f, 0.000247f,
- 0.000323f, 0.000389f, 0.000379f, 0.000435f, 0.000461f, 0.000509f, 0.000535f, 0.000517f,
- 0.000557f, 0.000604f, 0.000649f, 0.000690f, 0.000757f, 0.000773f, 0.000836f, 0.000865f,
- 0.000924f, 0.000957f, 0.001095f, 0.001104f, 0.001243f, 0.001361f, 0.001458f, 0.001486f,
- 0.001619f, 0.001745f, 0.001791f, 0.001993f, 0.002100f, 0.002321f, 0.002539f, 0.002771f,
- 0.003084f, 0.003412f, 0.003866f, 0.004368f, 0.005062f, 0.005821f, 0.006882f, 0.008278f,
- 0.010071f, 0.012756f, 0.016327f, 0.021774f, 0.029785f, 0.042206f, 0.061462f, 0.090149f,
- 0.131348f, 0.187378f, 0.669434f, 0.688965f, 0.692383f, 0.694824f, 0.695801f, 0.695312f,
- 0.000000f, 0.000118f, 0.000113f, 0.000158f, 0.000158f, 0.000176f, 0.000224f, 0.000202f,
- 0.000251f, 0.000260f, 0.000280f, 0.000332f, 0.000316f, 0.000365f, 0.000389f, 0.000419f,
- 0.000454f, 0.000435f, 0.000476f, 0.000494f, 0.000516f, 0.000576f, 0.000609f, 0.000656f,
- 0.000678f, 0.000712f, 0.000792f, 0.000800f, 0.000852f, 0.000919f, 0.000961f, 0.001070f,
- 0.001120f, 0.001238f, 0.001300f, 0.001480f, 0.001459f, 0.001634f, 0.001798f, 0.001947f,
- 0.002111f, 0.002377f, 0.002615f, 0.002966f, 0.003410f, 0.003933f, 0.004585f, 0.005489f,
- 0.006706f, 0.008148f, 0.010757f, 0.013962f, 0.019257f, 0.027771f, 0.041931f, 0.065125f,
- 0.101135f, 0.152832f, 0.650391f, 0.670898f, 0.674316f, 0.675293f, 0.675781f, 0.677246f,
- 0.000000f, 0.000000f, 0.000109f, 0.000106f, 0.000121f, 0.000117f, 0.000130f, 0.000151f,
- 0.000161f, 0.000174f, 0.000234f, 0.000197f, 0.000205f, 0.000236f, 0.000272f, 0.000296f,
- 0.000267f, 0.000296f, 0.000397f, 0.000344f, 0.000413f, 0.000395f, 0.000433f, 0.000434f,
- 0.000504f, 0.000488f, 0.000532f, 0.000550f, 0.000602f, 0.000711f, 0.000675f, 0.000704f,
- 0.000752f, 0.000817f, 0.000896f, 0.000955f, 0.001009f, 0.001091f, 0.001223f, 0.001271f,
- 0.001415f, 0.001560f, 0.001721f, 0.001989f, 0.002214f, 0.002508f, 0.002930f, 0.003504f,
- 0.004208f, 0.005169f, 0.006603f, 0.008606f, 0.011864f, 0.017090f, 0.026367f, 0.043396f,
- 0.072571f, 0.119751f, 0.630859f, 0.650879f, 0.653809f, 0.656250f, 0.657227f, 0.657227f,
- 0.000000f, 0.000111f, 0.000104f, 0.000100f, 0.000096f, 0.000094f, 0.000105f, 0.000096f,
- 0.000101f, 0.000115f, 0.000119f, 0.000155f, 0.000129f, 0.000180f, 0.000186f, 0.000199f,
- 0.000208f, 0.000214f, 0.000232f, 0.000230f, 0.000237f, 0.000247f, 0.000303f, 0.000276f,
- 0.000324f, 0.000332f, 0.000381f, 0.000371f, 0.000393f, 0.000428f, 0.000490f, 0.000468f,
- 0.000512f, 0.000540f, 0.000598f, 0.000670f, 0.000673f, 0.000711f, 0.000767f, 0.000842f,
- 0.000894f, 0.000985f, 0.001120f, 0.001200f, 0.001416f, 0.001544f, 0.001768f, 0.002052f,
- 0.002510f, 0.003044f, 0.003796f, 0.005016f, 0.006870f, 0.009918f, 0.015335f, 0.026077f,
- 0.048004f, 0.088745f, 0.610352f, 0.630859f, 0.634277f, 0.636230f, 0.637207f, 0.638184f,
- 0.000000f, 0.000104f, 0.000098f, 0.000092f, 0.000087f, 0.000084f, 0.000081f, 0.000078f,
- 0.000074f, 0.000070f, 0.000073f, 0.000075f, 0.000081f, 0.000081f, 0.000119f, 0.000124f,
- 0.000129f, 0.000115f, 0.000142f, 0.000169f, 0.000155f, 0.000169f, 0.000172f, 0.000196f,
- 0.000209f, 0.000211f, 0.000203f, 0.000238f, 0.000245f, 0.000260f, 0.000282f, 0.000281f,
- 0.000297f, 0.000333f, 0.000343f, 0.000374f, 0.000398f, 0.000428f, 0.000473f, 0.000494f,
- 0.000534f, 0.000591f, 0.000643f, 0.000708f, 0.000790f, 0.000893f, 0.001040f, 0.001169f,
- 0.001381f, 0.001676f, 0.002123f, 0.002686f, 0.003658f, 0.005329f, 0.008347f, 0.014244f,
- 0.027954f, 0.060638f, 0.587891f, 0.609375f, 0.613281f, 0.614746f, 0.616699f, 0.616211f,
- 0.000110f, 0.000094f, 0.000085f, 0.000079f, 0.000075f, 0.000072f, 0.000069f, 0.000067f,
- 0.000065f, 0.000063f, 0.000059f, 0.000059f, 0.000054f, 0.000051f, 0.000055f, 0.000051f,
- 0.000066f, 0.000066f, 0.000078f, 0.000074f, 0.000089f, 0.000091f, 0.000102f, 0.000109f,
- 0.000114f, 0.000126f, 0.000133f, 0.000130f, 0.000141f, 0.000141f, 0.000156f, 0.000172f,
- 0.000180f, 0.000179f, 0.000206f, 0.000199f, 0.000214f, 0.000254f, 0.000247f, 0.000282f,
- 0.000300f, 0.000324f, 0.000349f, 0.000374f, 0.000413f, 0.000459f, 0.000513f, 0.000619f,
- 0.000711f, 0.000823f, 0.001030f, 0.001269f, 0.001724f, 0.002487f, 0.003948f, 0.007015f,
- 0.014122f, 0.036346f, 0.565430f, 0.586426f, 0.592285f, 0.592773f, 0.594238f, 0.594727f,
- 0.000092f, 0.000073f, 0.000067f, 0.000062f, 0.000057f, 0.000055f, 0.000052f, 0.000052f,
- 0.000049f, 0.000049f, 0.000047f, 0.000046f, 0.000046f, 0.000043f, 0.000041f, 0.000039f,
- 0.000038f, 0.000036f, 0.000039f, 0.000036f, 0.000039f, 0.000037f, 0.000039f, 0.000047f,
- 0.000051f, 0.000057f, 0.000059f, 0.000060f, 0.000067f, 0.000071f, 0.000078f, 0.000085f,
- 0.000087f, 0.000091f, 0.000098f, 0.000095f, 0.000102f, 0.000122f, 0.000122f, 0.000137f,
- 0.000143f, 0.000145f, 0.000168f, 0.000171f, 0.000197f, 0.000209f, 0.000234f, 0.000264f,
- 0.000295f, 0.000349f, 0.000418f, 0.000520f, 0.000678f, 0.000958f, 0.001512f, 0.002745f,
- 0.006092f, 0.017456f, 0.542969f, 0.565430f, 0.568848f, 0.569824f, 0.572266f, 0.572266f,
- 0.000052f, 0.000042f, 0.000037f, 0.000035f, 0.000033f, 0.000033f, 0.000032f, 0.000031f,
- 0.000031f, 0.000029f, 0.000030f, 0.000030f, 0.000029f, 0.000028f, 0.000028f, 0.000028f,
- 0.000028f, 0.000028f, 0.000027f, 0.000026f, 0.000024f, 0.000023f, 0.000022f, 0.000022f,
- 0.000021f, 0.000020f, 0.000019f, 0.000022f, 0.000020f, 0.000023f, 0.000024f, 0.000026f,
- 0.000028f, 0.000035f, 0.000037f, 0.000038f, 0.000039f, 0.000043f, 0.000048f, 0.000050f,
- 0.000053f, 0.000055f, 0.000062f, 0.000059f, 0.000072f, 0.000070f, 0.000087f, 0.000099f,
- 0.000100f, 0.000119f, 0.000142f, 0.000162f, 0.000217f, 0.000283f, 0.000425f, 0.000760f,
- 0.001818f, 0.006405f, 0.519043f, 0.541504f, 0.546387f, 0.548828f, 0.549316f, 0.550781f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f,
- 0.000004f, 0.000006f, 0.000006f, 0.000008f, 0.000009f, 0.000009f, 0.000009f, 0.000010f,
- 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f,
- 0.000012f, 0.000013f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
- 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000008f, 0.000011f,
- 0.000011f, 0.000012f, 0.000015f, 0.000016f, 0.000016f, 0.000018f, 0.000018f, 0.000020f,
- 0.000022f, 0.000024f, 0.000028f, 0.000035f, 0.000036f, 0.000052f, 0.000071f, 0.000117f,
- 0.000260f, 0.001269f, 0.495605f, 0.518555f, 0.523926f, 0.525879f, 0.526855f, 0.527344f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
- 0.000002f, 0.000002f, 0.000003f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f,
- 0.000005f, 0.000021f, 0.473145f, 0.495605f, 0.500000f, 0.502441f, 0.503418f, 0.503906f,
- },
- {
- 0.045868f, 0.130493f, 0.205322f, 0.272705f, 0.331787f, 0.384521f, 0.431885f, 0.473389f,
- 0.511719f, 0.545898f, 0.576660f, 0.605469f, 0.631348f, 0.654785f, 0.676758f, 0.696289f,
- 0.714355f, 0.732422f, 0.749023f, 0.763184f, 0.777832f, 0.790527f, 0.802734f, 0.813477f,
- 0.824219f, 0.834961f, 0.844238f, 0.853027f, 0.862305f, 0.869629f, 0.877441f, 0.884277f,
- 0.892090f, 0.898926f, 0.904297f, 0.910645f, 0.916992f, 0.921875f, 0.926758f, 0.931641f,
- 0.937012f, 0.941406f, 0.945801f, 0.950195f, 0.954102f, 0.958496f, 0.962402f, 0.966309f,
- 0.969238f, 0.973145f, 0.976074f, 0.979492f, 0.982422f, 0.985352f, 0.988281f, 0.991211f,
- 0.993652f, 0.996094f, 0.997070f, 0.993164f, 0.990234f, 0.987305f, 0.984375f, 0.981445f,
- 0.033447f, 0.097717f, 0.160400f, 0.219238f, 0.273438f, 0.323486f, 0.371582f, 0.414062f,
- 0.454834f, 0.491211f, 0.524414f, 0.555176f, 0.583984f, 0.610840f, 0.635254f, 0.658203f,
- 0.678223f, 0.697754f, 0.716309f, 0.732422f, 0.749023f, 0.763184f, 0.776855f, 0.790527f,
- 0.802734f, 0.812988f, 0.824707f, 0.834473f, 0.844238f, 0.853516f, 0.862305f, 0.870117f,
- 0.877930f, 0.884766f, 0.892090f, 0.897949f, 0.905762f, 0.910645f, 0.917480f, 0.923340f,
- 0.927734f, 0.933105f, 0.937988f, 0.942871f, 0.947266f, 0.951172f, 0.955566f, 0.960449f,
- 0.963379f, 0.967285f, 0.970703f, 0.974609f, 0.978027f, 0.981445f, 0.984863f, 0.986816f,
- 0.989746f, 0.993164f, 0.995605f, 0.992188f, 0.988770f, 0.986328f, 0.983398f, 0.980957f,
- 0.024796f, 0.075195f, 0.126221f, 0.176025f, 0.224976f, 0.271729f, 0.317383f, 0.359375f,
- 0.399902f, 0.437744f, 0.472656f, 0.505371f, 0.536133f, 0.565430f, 0.591797f, 0.615723f,
- 0.639648f, 0.660156f, 0.681152f, 0.699219f, 0.718262f, 0.734375f, 0.749512f, 0.764648f,
- 0.777832f, 0.791016f, 0.802734f, 0.813965f, 0.825195f, 0.835449f, 0.844727f, 0.854004f,
- 0.862305f, 0.871094f, 0.878418f, 0.886230f, 0.893555f, 0.900391f, 0.906738f, 0.912598f,
- 0.917969f, 0.923828f, 0.929688f, 0.935059f, 0.939941f, 0.943848f, 0.949219f, 0.953613f,
- 0.958008f, 0.961914f, 0.965332f, 0.969238f, 0.972656f, 0.976074f, 0.979492f, 0.982910f,
- 0.986328f, 0.989258f, 0.993652f, 0.990723f, 0.987793f, 0.985352f, 0.982910f, 0.979980f,
- 0.019119f, 0.058624f, 0.100220f, 0.142578f, 0.185303f, 0.227417f, 0.269287f, 0.310059f,
- 0.348877f, 0.385254f, 0.421875f, 0.455566f, 0.489014f, 0.518555f, 0.546875f, 0.574707f,
- 0.598633f, 0.624023f, 0.645508f, 0.666016f, 0.684082f, 0.702637f, 0.720703f, 0.736816f,
- 0.751465f, 0.766113f, 0.779785f, 0.792969f, 0.804199f, 0.815918f, 0.826660f, 0.836426f,
- 0.846191f, 0.855957f, 0.864746f, 0.872559f, 0.880371f, 0.888184f, 0.895508f, 0.902344f,
- 0.908691f, 0.914062f, 0.919922f, 0.925293f, 0.932129f, 0.936035f, 0.941895f, 0.946289f,
- 0.951172f, 0.955566f, 0.959473f, 0.963867f, 0.967773f, 0.970703f, 0.975586f, 0.978516f,
- 0.981934f, 0.985352f, 0.991699f, 0.988770f, 0.986328f, 0.983887f, 0.981445f, 0.979004f,
- 0.015175f, 0.046997f, 0.080688f, 0.116028f, 0.152466f, 0.189819f, 0.227417f, 0.264404f,
- 0.301758f, 0.338623f, 0.374268f, 0.407471f, 0.439941f, 0.471924f, 0.501465f, 0.529785f,
- 0.556641f, 0.582031f, 0.606445f, 0.629395f, 0.649902f, 0.670898f, 0.688965f, 0.708496f,
- 0.725098f, 0.740723f, 0.755371f, 0.769531f, 0.782715f, 0.795410f, 0.807129f, 0.818848f,
- 0.829590f, 0.839844f, 0.849121f, 0.857910f, 0.866699f, 0.875488f, 0.882812f, 0.890625f,
- 0.897461f, 0.904297f, 0.910645f, 0.916992f, 0.922363f, 0.928223f, 0.933594f, 0.938477f,
- 0.944824f, 0.949707f, 0.953613f, 0.958008f, 0.962402f, 0.966309f, 0.970703f, 0.974121f,
- 0.977539f, 0.981934f, 0.990234f, 0.987793f, 0.984863f, 0.982910f, 0.980469f, 0.978516f,
- 0.012215f, 0.038452f, 0.066101f, 0.095825f, 0.126831f, 0.159180f, 0.192749f, 0.226685f,
- 0.260986f, 0.294922f, 0.328857f, 0.363037f, 0.394531f, 0.426270f, 0.457520f, 0.486572f,
- 0.514648f, 0.541016f, 0.567871f, 0.590820f, 0.614746f, 0.636230f, 0.657227f, 0.676270f,
- 0.694336f, 0.711914f, 0.729492f, 0.744141f, 0.759277f, 0.773438f, 0.786621f, 0.798340f,
- 0.811523f, 0.822266f, 0.833496f, 0.842773f, 0.851562f, 0.861816f, 0.869629f, 0.878418f,
- 0.885742f, 0.893066f, 0.900879f, 0.907715f, 0.913574f, 0.919922f, 0.925781f, 0.932129f,
- 0.937012f, 0.942871f, 0.946777f, 0.951660f, 0.957031f, 0.960938f, 0.965332f, 0.969727f,
- 0.973633f, 0.977051f, 0.988281f, 0.986328f, 0.983887f, 0.981445f, 0.979492f, 0.976562f,
- 0.009903f, 0.031525f, 0.054626f, 0.078979f, 0.105408f, 0.133789f, 0.162720f, 0.192993f,
- 0.224976f, 0.256592f, 0.288330f, 0.320312f, 0.352295f, 0.383545f, 0.414062f, 0.443848f,
- 0.473389f, 0.500488f, 0.526367f, 0.553223f, 0.577637f, 0.600586f, 0.622070f, 0.644043f,
- 0.664551f, 0.683105f, 0.701660f, 0.718262f, 0.734375f, 0.750000f, 0.764648f, 0.778320f,
- 0.791016f, 0.802734f, 0.815430f, 0.826172f, 0.836426f, 0.845703f, 0.855957f, 0.864258f,
- 0.874023f, 0.881348f, 0.889648f, 0.896973f, 0.904297f, 0.911621f, 0.917480f, 0.922852f,
- 0.929199f, 0.935059f, 0.939941f, 0.944824f, 0.950195f, 0.954590f, 0.959961f, 0.964355f,
- 0.968262f, 0.972656f, 0.986328f, 0.984375f, 0.981934f, 0.979980f, 0.978027f, 0.975586f,
- 0.008385f, 0.026154f, 0.045319f, 0.066467f, 0.089111f, 0.113220f, 0.138916f, 0.165405f,
- 0.192871f, 0.222290f, 0.252197f, 0.281494f, 0.311279f, 0.342285f, 0.372314f, 0.402832f,
- 0.431641f, 0.459473f, 0.486572f, 0.513672f, 0.539062f, 0.562988f, 0.587402f, 0.609863f,
- 0.631348f, 0.652344f, 0.671875f, 0.689941f, 0.708008f, 0.724609f, 0.740234f, 0.755371f,
- 0.768066f, 0.783203f, 0.795410f, 0.808105f, 0.819336f, 0.830078f, 0.840332f, 0.851074f,
- 0.860352f, 0.869141f, 0.877930f, 0.885742f, 0.893555f, 0.900879f, 0.907715f, 0.915039f,
- 0.920410f, 0.926758f, 0.933105f, 0.938965f, 0.944336f, 0.949707f, 0.953613f, 0.958984f,
- 0.962891f, 0.967285f, 0.984375f, 0.982910f, 0.980957f, 0.978516f, 0.976562f, 0.974609f,
- 0.006992f, 0.022324f, 0.038544f, 0.056396f, 0.075317f, 0.095947f, 0.117981f, 0.141968f,
- 0.166504f, 0.192627f, 0.219238f, 0.246704f, 0.275879f, 0.304443f, 0.333252f, 0.362305f,
- 0.390869f, 0.419678f, 0.447266f, 0.474121f, 0.500977f, 0.525879f, 0.551270f, 0.574219f,
- 0.597656f, 0.620117f, 0.641602f, 0.661133f, 0.680664f, 0.698242f, 0.715332f, 0.731934f,
- 0.746582f, 0.761230f, 0.775391f, 0.789551f, 0.802246f, 0.813477f, 0.825195f, 0.835938f,
- 0.846191f, 0.855957f, 0.865723f, 0.873535f, 0.882324f, 0.890625f, 0.898438f, 0.905762f,
- 0.912598f, 0.918945f, 0.925781f, 0.931641f, 0.937012f, 0.943848f, 0.948730f, 0.954102f,
- 0.957520f, 0.963379f, 0.981934f, 0.980957f, 0.979004f, 0.977051f, 0.975098f, 0.973145f,
- 0.006260f, 0.018387f, 0.032684f, 0.047821f, 0.064636f, 0.082153f, 0.101318f, 0.122009f,
- 0.143921f, 0.166870f, 0.191406f, 0.216187f, 0.243164f, 0.269287f, 0.297119f, 0.324951f,
- 0.352783f, 0.380859f, 0.408691f, 0.435547f, 0.462402f, 0.489258f, 0.514160f, 0.540039f,
- 0.563965f, 0.585938f, 0.608398f, 0.629395f, 0.649414f, 0.669434f, 0.689453f, 0.705566f,
- 0.722656f, 0.739258f, 0.753418f, 0.769043f, 0.783203f, 0.795898f, 0.807617f, 0.819824f,
- 0.830566f, 0.842285f, 0.852051f, 0.862305f, 0.871094f, 0.878906f, 0.888184f, 0.895996f,
- 0.902832f, 0.910645f, 0.917480f, 0.924316f, 0.930176f, 0.936523f, 0.942383f, 0.946777f,
- 0.953613f, 0.958496f, 0.979980f, 0.979004f, 0.977539f, 0.975586f, 0.973633f, 0.972168f,
- 0.005268f, 0.016418f, 0.028091f, 0.041107f, 0.055420f, 0.070435f, 0.087341f, 0.105347f,
- 0.124512f, 0.144531f, 0.166260f, 0.189453f, 0.213989f, 0.238037f, 0.263184f, 0.290039f,
- 0.317139f, 0.344238f, 0.370850f, 0.398438f, 0.425293f, 0.451660f, 0.477539f, 0.503418f,
- 0.528320f, 0.551270f, 0.576172f, 0.598145f, 0.619629f, 0.640137f, 0.659668f, 0.680176f,
- 0.697754f, 0.714844f, 0.731934f, 0.748047f, 0.762695f, 0.776367f, 0.790039f, 0.803223f,
- 0.814453f, 0.827148f, 0.837891f, 0.847656f, 0.858398f, 0.868164f, 0.876953f, 0.885742f,
- 0.893066f, 0.901855f, 0.908691f, 0.916504f, 0.922852f, 0.929199f, 0.935059f, 0.941895f,
- 0.947754f, 0.953125f, 0.978027f, 0.977539f, 0.975586f, 0.973633f, 0.971680f, 0.969727f,
- 0.004372f, 0.013802f, 0.024185f, 0.036011f, 0.047729f, 0.060944f, 0.075684f, 0.090820f,
- 0.107788f, 0.125488f, 0.144653f, 0.165771f, 0.187012f, 0.210205f, 0.233643f, 0.258545f,
- 0.283447f, 0.309326f, 0.335449f, 0.362305f, 0.388672f, 0.415771f, 0.441650f, 0.468018f,
- 0.492920f, 0.518066f, 0.542480f, 0.564941f, 0.587891f, 0.609863f, 0.630859f, 0.651855f,
- 0.670898f, 0.689453f, 0.707520f, 0.724609f, 0.740723f, 0.755859f, 0.770996f, 0.785156f,
- 0.799316f, 0.809570f, 0.822754f, 0.834473f, 0.845215f, 0.855469f, 0.865723f, 0.874023f,
- 0.883301f, 0.892090f, 0.899902f, 0.907715f, 0.915039f, 0.922363f, 0.928711f, 0.935059f,
- 0.941406f, 0.947266f, 0.975586f, 0.975098f, 0.973633f, 0.971680f, 0.969727f, 0.968262f,
- 0.003809f, 0.012253f, 0.021240f, 0.030884f, 0.041473f, 0.052887f, 0.065308f, 0.079224f,
- 0.094177f, 0.109558f, 0.126709f, 0.145142f, 0.163940f, 0.184814f, 0.207397f, 0.229736f,
- 0.252686f, 0.276855f, 0.302246f, 0.327881f, 0.353271f, 0.380127f, 0.405762f, 0.432129f,
- 0.457520f, 0.482422f, 0.507324f, 0.531250f, 0.556152f, 0.578125f, 0.600586f, 0.622559f,
- 0.642578f, 0.662109f, 0.681641f, 0.700195f, 0.716797f, 0.734375f, 0.750000f, 0.766113f,
- 0.779297f, 0.793457f, 0.807129f, 0.819336f, 0.830078f, 0.842285f, 0.853027f, 0.862793f,
- 0.872559f, 0.881348f, 0.890625f, 0.899414f, 0.907227f, 0.914551f, 0.920898f, 0.928223f,
- 0.935059f, 0.941406f, 0.973633f, 0.973145f, 0.971680f, 0.970215f, 0.968262f, 0.966797f,
- 0.003462f, 0.010796f, 0.018646f, 0.026962f, 0.036377f, 0.046173f, 0.057190f, 0.068665f,
- 0.081726f, 0.095520f, 0.110962f, 0.127563f, 0.144897f, 0.162476f, 0.182373f, 0.202881f,
- 0.225342f, 0.248291f, 0.271729f, 0.294922f, 0.320312f, 0.345459f, 0.370850f, 0.397217f,
- 0.422607f, 0.447998f, 0.473145f, 0.498291f, 0.522461f, 0.546875f, 0.569824f, 0.591797f,
- 0.614258f, 0.635742f, 0.655273f, 0.674805f, 0.693359f, 0.711426f, 0.729492f, 0.745605f,
- 0.760742f, 0.775391f, 0.789551f, 0.803223f, 0.816406f, 0.828125f, 0.839844f, 0.850586f,
- 0.861328f, 0.871094f, 0.880371f, 0.889648f, 0.898438f, 0.906250f, 0.915039f, 0.921875f,
- 0.928223f, 0.935547f, 0.970703f, 0.970215f, 0.970215f, 0.967773f, 0.966309f, 0.965332f,
- 0.002872f, 0.009338f, 0.016174f, 0.024231f, 0.031525f, 0.040558f, 0.050140f, 0.060455f,
- 0.071472f, 0.084167f, 0.097168f, 0.111450f, 0.127197f, 0.143433f, 0.160889f, 0.179565f,
- 0.199463f, 0.220825f, 0.242554f, 0.265625f, 0.288818f, 0.312744f, 0.338135f, 0.362793f,
- 0.387939f, 0.414307f, 0.439453f, 0.464355f, 0.489014f, 0.514648f, 0.537598f, 0.561523f,
- 0.583984f, 0.606445f, 0.627930f, 0.648926f, 0.667480f, 0.687988f, 0.705566f, 0.723633f,
- 0.740234f, 0.756348f, 0.771484f, 0.786621f, 0.799805f, 0.812012f, 0.825195f, 0.836426f,
- 0.849121f, 0.859375f, 0.870605f, 0.879883f, 0.888672f, 0.897461f, 0.905762f, 0.915039f,
- 0.921387f, 0.928711f, 0.967773f, 0.969238f, 0.966797f, 0.966797f, 0.964355f, 0.963379f,
- 0.002750f, 0.008202f, 0.014519f, 0.021301f, 0.028183f, 0.035828f, 0.044342f, 0.053375f,
- 0.063354f, 0.074219f, 0.085876f, 0.098083f, 0.111938f, 0.126343f, 0.142212f, 0.158936f,
- 0.177124f, 0.196411f, 0.216553f, 0.237427f, 0.260010f, 0.282715f, 0.306641f, 0.330811f,
- 0.355957f, 0.381104f, 0.405518f, 0.431152f, 0.456543f, 0.480957f, 0.504883f, 0.529785f,
- 0.553223f, 0.577148f, 0.599121f, 0.620605f, 0.642090f, 0.662598f, 0.682617f, 0.701172f,
- 0.718750f, 0.735352f, 0.751953f, 0.768066f, 0.783691f, 0.796875f, 0.810547f, 0.822754f,
- 0.835938f, 0.847656f, 0.858398f, 0.869141f, 0.879395f, 0.888672f, 0.897949f, 0.906250f,
- 0.914551f, 0.922363f, 0.965820f, 0.966797f, 0.965820f, 0.963867f, 0.963379f, 0.961426f,
- 0.002264f, 0.007446f, 0.012741f, 0.018494f, 0.024536f, 0.031769f, 0.039154f, 0.047424f,
- 0.056122f, 0.065308f, 0.075623f, 0.087219f, 0.098755f, 0.111328f, 0.125854f, 0.140869f,
- 0.157349f, 0.174805f, 0.193115f, 0.212402f, 0.233643f, 0.254883f, 0.276855f, 0.300293f,
- 0.324463f, 0.348389f, 0.374023f, 0.398193f, 0.423340f, 0.448242f, 0.473877f, 0.498291f,
- 0.521973f, 0.545898f, 0.569824f, 0.592773f, 0.614258f, 0.635742f, 0.657227f, 0.676270f,
- 0.695801f, 0.714844f, 0.731445f, 0.749512f, 0.765137f, 0.779785f, 0.793945f, 0.808594f,
- 0.821777f, 0.833496f, 0.846191f, 0.858398f, 0.868652f, 0.879395f, 0.888672f, 0.897949f,
- 0.906738f, 0.916016f, 0.962402f, 0.963867f, 0.962891f, 0.961914f, 0.960938f, 0.958984f,
- 0.002377f, 0.006668f, 0.011467f, 0.016693f, 0.021820f, 0.028091f, 0.034485f, 0.041748f,
- 0.049347f, 0.057678f, 0.066589f, 0.076538f, 0.086975f, 0.098816f, 0.111816f, 0.125366f,
- 0.139404f, 0.155151f, 0.171875f, 0.190186f, 0.208496f, 0.228760f, 0.250244f, 0.271973f,
- 0.294189f, 0.317871f, 0.341797f, 0.365479f, 0.391357f, 0.415771f, 0.440430f, 0.466797f,
- 0.491699f, 0.515625f, 0.539551f, 0.563477f, 0.585938f, 0.608887f, 0.630371f, 0.651855f,
- 0.672363f, 0.692383f, 0.710449f, 0.729492f, 0.745605f, 0.762695f, 0.778320f, 0.792480f,
- 0.807129f, 0.820801f, 0.833984f, 0.846680f, 0.857910f, 0.869141f, 0.879395f, 0.889648f,
- 0.899414f, 0.907715f, 0.959473f, 0.961426f, 0.960449f, 0.959961f, 0.958496f, 0.957031f,
- 0.002062f, 0.006180f, 0.010201f, 0.015053f, 0.019531f, 0.025116f, 0.030960f, 0.037292f,
- 0.043915f, 0.051117f, 0.059570f, 0.067749f, 0.076843f, 0.087708f, 0.099060f, 0.110352f,
- 0.123413f, 0.138062f, 0.153198f, 0.169067f, 0.186768f, 0.204956f, 0.224487f, 0.244873f,
- 0.265625f, 0.288330f, 0.311768f, 0.335205f, 0.359863f, 0.384521f, 0.409668f, 0.434082f,
- 0.459717f, 0.483887f, 0.508789f, 0.533203f, 0.557617f, 0.580566f, 0.603516f, 0.626465f,
- 0.646484f, 0.667969f, 0.687500f, 0.708008f, 0.726074f, 0.744141f, 0.760742f, 0.776367f,
- 0.791504f, 0.806641f, 0.820312f, 0.833496f, 0.846191f, 0.858398f, 0.869629f, 0.879883f,
- 0.890625f, 0.900879f, 0.956543f, 0.958496f, 0.958008f, 0.956543f, 0.955566f, 0.954102f,
- 0.001774f, 0.005459f, 0.009155f, 0.013290f, 0.017807f, 0.022537f, 0.027527f, 0.033081f,
- 0.038818f, 0.045380f, 0.052643f, 0.060516f, 0.068420f, 0.077942f, 0.087952f, 0.098572f,
- 0.109863f, 0.122925f, 0.136230f, 0.150146f, 0.166382f, 0.183105f, 0.201172f, 0.219482f,
- 0.240112f, 0.261230f, 0.283203f, 0.305664f, 0.329590f, 0.353027f, 0.377930f, 0.402344f,
- 0.427490f, 0.453369f, 0.478516f, 0.502930f, 0.527832f, 0.552246f, 0.575684f, 0.598145f,
- 0.621094f, 0.643555f, 0.664551f, 0.685547f, 0.704590f, 0.723633f, 0.742188f, 0.759277f,
- 0.775879f, 0.791016f, 0.806152f, 0.820801f, 0.833496f, 0.847168f, 0.859375f, 0.870605f,
- 0.881348f, 0.893066f, 0.953125f, 0.956055f, 0.955566f, 0.954102f, 0.953125f, 0.951660f,
- 0.001655f, 0.004757f, 0.008308f, 0.011993f, 0.015808f, 0.020187f, 0.024780f, 0.029434f,
- 0.034851f, 0.040741f, 0.046997f, 0.053650f, 0.061096f, 0.069397f, 0.078064f, 0.087280f,
- 0.097351f, 0.108887f, 0.121033f, 0.134277f, 0.148560f, 0.163330f, 0.180054f, 0.197144f,
- 0.215332f, 0.235718f, 0.255859f, 0.277588f, 0.300049f, 0.323730f, 0.347656f, 0.371826f,
- 0.396729f, 0.422607f, 0.447021f, 0.472168f, 0.497803f, 0.521973f, 0.547363f, 0.571289f,
- 0.594238f, 0.618164f, 0.640137f, 0.662109f, 0.682617f, 0.702637f, 0.722168f, 0.739746f,
- 0.758301f, 0.774902f, 0.790527f, 0.806641f, 0.820801f, 0.834961f, 0.848633f, 0.860352f,
- 0.872559f, 0.883789f, 0.949707f, 0.953125f, 0.952148f, 0.951172f, 0.950684f, 0.948730f,
- 0.001418f, 0.004456f, 0.007584f, 0.010803f, 0.014450f, 0.018005f, 0.022186f, 0.026398f,
- 0.031342f, 0.036224f, 0.041687f, 0.048126f, 0.054382f, 0.061676f, 0.069641f, 0.077759f,
- 0.086914f, 0.097168f, 0.107910f, 0.119263f, 0.132446f, 0.145752f, 0.161011f, 0.176758f,
- 0.193726f, 0.211914f, 0.231201f, 0.251709f, 0.272705f, 0.294922f, 0.318604f, 0.342041f,
- 0.366455f, 0.390869f, 0.416992f, 0.441895f, 0.467285f, 0.493164f, 0.517578f, 0.541992f,
- 0.566895f, 0.590820f, 0.614746f, 0.637207f, 0.660156f, 0.681152f, 0.701172f, 0.720703f,
- 0.739746f, 0.758301f, 0.775391f, 0.791992f, 0.807617f, 0.821289f, 0.836426f, 0.850586f,
- 0.863281f, 0.874512f, 0.946777f, 0.949707f, 0.949707f, 0.948730f, 0.947266f, 0.946289f,
- 0.001213f, 0.003864f, 0.006721f, 0.009796f, 0.012932f, 0.016037f, 0.020218f, 0.024231f,
- 0.028275f, 0.032379f, 0.037567f, 0.042603f, 0.048584f, 0.054993f, 0.061798f, 0.069519f,
- 0.077637f, 0.086182f, 0.095703f, 0.106323f, 0.117676f, 0.130127f, 0.143555f, 0.158203f,
- 0.173462f, 0.189941f, 0.207886f, 0.226807f, 0.247192f, 0.267822f, 0.290527f, 0.312500f,
- 0.336670f, 0.360352f, 0.385742f, 0.410889f, 0.437256f, 0.462646f, 0.488281f, 0.513184f,
- 0.539062f, 0.563477f, 0.588379f, 0.612305f, 0.636230f, 0.657715f, 0.679199f, 0.700195f,
- 0.720703f, 0.740234f, 0.758301f, 0.775879f, 0.793945f, 0.809082f, 0.824219f, 0.838867f,
- 0.852539f, 0.865234f, 0.942871f, 0.946777f, 0.946777f, 0.945312f, 0.944824f, 0.943359f,
- 0.001063f, 0.003754f, 0.005909f, 0.008789f, 0.011780f, 0.014671f, 0.017792f, 0.021378f,
- 0.025238f, 0.029221f, 0.033417f, 0.038300f, 0.043488f, 0.048828f, 0.054779f, 0.061554f,
- 0.068604f, 0.076721f, 0.085388f, 0.094482f, 0.104614f, 0.115845f, 0.128296f, 0.141113f,
- 0.155029f, 0.170044f, 0.186401f, 0.204224f, 0.222778f, 0.242188f, 0.263916f, 0.285156f,
- 0.308350f, 0.331787f, 0.355957f, 0.381348f, 0.407227f, 0.432617f, 0.459229f, 0.484619f,
- 0.509277f, 0.536133f, 0.560547f, 0.585938f, 0.609863f, 0.633301f, 0.657715f, 0.678711f,
- 0.699707f, 0.721191f, 0.740723f, 0.759277f, 0.777344f, 0.794922f, 0.811035f, 0.826660f,
- 0.841797f, 0.855469f, 0.939453f, 0.943359f, 0.943359f, 0.942871f, 0.941895f, 0.940918f,
- 0.001175f, 0.003069f, 0.005558f, 0.007912f, 0.010712f, 0.013199f, 0.016235f, 0.019547f,
- 0.022659f, 0.026138f, 0.030151f, 0.034424f, 0.038940f, 0.044067f, 0.049255f, 0.054993f,
- 0.061493f, 0.068359f, 0.075928f, 0.084290f, 0.093262f, 0.103760f, 0.114319f, 0.126099f,
- 0.138550f, 0.152466f, 0.167114f, 0.183472f, 0.200439f, 0.219238f, 0.239014f, 0.259277f,
- 0.281250f, 0.303711f, 0.327148f, 0.351807f, 0.376709f, 0.402344f, 0.428955f, 0.453857f,
- 0.480713f, 0.507324f, 0.533203f, 0.558594f, 0.583984f, 0.609375f, 0.633301f, 0.656738f,
- 0.678711f, 0.700195f, 0.722168f, 0.742188f, 0.761719f, 0.780273f, 0.797852f, 0.813477f,
- 0.830078f, 0.845703f, 0.935547f, 0.939453f, 0.939453f, 0.938965f, 0.937988f, 0.937012f,
- 0.001089f, 0.002945f, 0.005066f, 0.007225f, 0.009575f, 0.012016f, 0.014656f, 0.017288f,
- 0.020142f, 0.023712f, 0.026764f, 0.030640f, 0.034637f, 0.039490f, 0.043854f, 0.048706f,
- 0.054688f, 0.060913f, 0.067871f, 0.075256f, 0.083191f, 0.092163f, 0.101868f, 0.111938f,
- 0.123657f, 0.136108f, 0.149658f, 0.164185f, 0.179932f, 0.196777f, 0.215454f, 0.234375f,
- 0.255371f, 0.276611f, 0.299805f, 0.323486f, 0.347656f, 0.373047f, 0.398682f, 0.425293f,
- 0.451172f, 0.477783f, 0.504883f, 0.530762f, 0.557617f, 0.583008f, 0.607910f, 0.632812f,
- 0.657227f, 0.680664f, 0.702637f, 0.724121f, 0.743652f, 0.764160f, 0.783691f, 0.800781f,
- 0.818848f, 0.833984f, 0.930664f, 0.936035f, 0.936035f, 0.935547f, 0.934570f, 0.933594f,
- 0.000847f, 0.002800f, 0.004562f, 0.006786f, 0.008804f, 0.011017f, 0.013145f, 0.015640f,
- 0.018509f, 0.021255f, 0.024277f, 0.027603f, 0.030991f, 0.035248f, 0.039642f, 0.043854f,
- 0.048798f, 0.054504f, 0.060516f, 0.067017f, 0.073914f, 0.082092f, 0.090515f, 0.099854f,
- 0.109863f, 0.121521f, 0.133545f, 0.146851f, 0.161133f, 0.176514f, 0.192993f, 0.211426f,
- 0.230957f, 0.251465f, 0.272705f, 0.295410f, 0.319092f, 0.343994f, 0.369385f, 0.395020f,
- 0.421631f, 0.448242f, 0.475342f, 0.501953f, 0.529785f, 0.556152f, 0.582031f, 0.608887f,
- 0.633789f, 0.658203f, 0.681152f, 0.704590f, 0.726074f, 0.748535f, 0.768555f, 0.787109f,
- 0.804199f, 0.822754f, 0.926758f, 0.931641f, 0.932129f, 0.931641f, 0.931152f, 0.930176f,
- 0.001035f, 0.002598f, 0.004147f, 0.006062f, 0.007942f, 0.009933f, 0.012405f, 0.014565f,
- 0.016174f, 0.019135f, 0.021988f, 0.024811f, 0.028259f, 0.031616f, 0.035065f, 0.039429f,
- 0.043884f, 0.048615f, 0.053833f, 0.059723f, 0.065796f, 0.072693f, 0.080383f, 0.088745f,
- 0.098206f, 0.107727f, 0.119080f, 0.130981f, 0.143677f, 0.157959f, 0.173218f, 0.189941f,
- 0.207642f, 0.226929f, 0.247437f, 0.269043f, 0.291748f, 0.315674f, 0.340576f, 0.366211f,
- 0.392578f, 0.419434f, 0.446533f, 0.473877f, 0.502441f, 0.528320f, 0.556152f, 0.583008f,
- 0.609375f, 0.635254f, 0.660156f, 0.684082f, 0.706543f, 0.729980f, 0.751953f, 0.771973f,
- 0.792480f, 0.810547f, 0.922363f, 0.927734f, 0.928223f, 0.928223f, 0.927246f, 0.926758f,
- 0.000775f, 0.002325f, 0.003843f, 0.005573f, 0.007397f, 0.009163f, 0.010857f, 0.012939f,
- 0.015312f, 0.017273f, 0.019684f, 0.022537f, 0.025070f, 0.028183f, 0.031616f, 0.035461f,
- 0.038940f, 0.043671f, 0.048096f, 0.053131f, 0.058411f, 0.064941f, 0.071777f, 0.078857f,
- 0.086731f, 0.096130f, 0.105835f, 0.116760f, 0.128296f, 0.140747f, 0.154907f, 0.170410f,
- 0.186646f, 0.204834f, 0.223633f, 0.243896f, 0.265625f, 0.288330f, 0.312012f, 0.337402f,
- 0.363037f, 0.389648f, 0.417480f, 0.444824f, 0.473633f, 0.500000f, 0.529297f, 0.556641f,
- 0.583984f, 0.610840f, 0.638184f, 0.662598f, 0.687988f, 0.711914f, 0.734375f, 0.755859f,
- 0.777832f, 0.798828f, 0.916992f, 0.922852f, 0.923828f, 0.923828f, 0.923340f, 0.922363f,
- 0.000617f, 0.002234f, 0.003510f, 0.005035f, 0.006397f, 0.008156f, 0.010033f, 0.011665f,
- 0.013481f, 0.015717f, 0.017700f, 0.020004f, 0.022766f, 0.025391f, 0.028214f, 0.031586f,
- 0.035217f, 0.038757f, 0.042999f, 0.047668f, 0.052368f, 0.057434f, 0.063538f, 0.070190f,
- 0.077698f, 0.085449f, 0.094299f, 0.103394f, 0.113953f, 0.125610f, 0.137817f, 0.151855f,
- 0.167236f, 0.183228f, 0.200806f, 0.219971f, 0.240479f, 0.262451f, 0.285645f, 0.309570f,
- 0.334961f, 0.360596f, 0.387939f, 0.416016f, 0.444092f, 0.473145f, 0.501465f, 0.529785f,
- 0.558105f, 0.585938f, 0.614258f, 0.640137f, 0.666992f, 0.692383f, 0.716797f, 0.739746f,
- 0.763184f, 0.784180f, 0.912109f, 0.918457f, 0.919434f, 0.919434f, 0.918457f, 0.917969f,
- 0.000665f, 0.002039f, 0.003386f, 0.004520f, 0.005989f, 0.007511f, 0.009262f, 0.010902f,
- 0.012314f, 0.014320f, 0.015869f, 0.018127f, 0.020248f, 0.022476f, 0.025284f, 0.028122f,
- 0.030991f, 0.034668f, 0.038239f, 0.042206f, 0.046539f, 0.051361f, 0.056610f, 0.062347f,
- 0.068604f, 0.075623f, 0.083313f, 0.092041f, 0.101379f, 0.111572f, 0.122986f, 0.135132f,
- 0.148926f, 0.164062f, 0.180054f, 0.197510f, 0.216797f, 0.237183f, 0.259521f, 0.282227f,
- 0.307129f, 0.332764f, 0.358887f, 0.386475f, 0.415527f, 0.443604f, 0.473389f, 0.501465f,
- 0.530762f, 0.560059f, 0.588867f, 0.617676f, 0.645020f, 0.671387f, 0.698242f, 0.722656f,
- 0.746094f, 0.770020f, 0.906738f, 0.913574f, 0.915039f, 0.914551f, 0.914062f, 0.914062f,
- 0.000661f, 0.001754f, 0.002831f, 0.004066f, 0.005333f, 0.006668f, 0.008286f, 0.009773f,
- 0.011124f, 0.012794f, 0.014320f, 0.016357f, 0.018036f, 0.020386f, 0.022766f, 0.025192f,
- 0.027924f, 0.030807f, 0.034027f, 0.037628f, 0.041321f, 0.045349f, 0.050262f, 0.055328f,
- 0.060699f, 0.066833f, 0.073669f, 0.081360f, 0.089600f, 0.099060f, 0.108826f, 0.119995f,
- 0.132324f, 0.145874f, 0.160889f, 0.176880f, 0.194702f, 0.213379f, 0.234497f, 0.256104f,
- 0.280029f, 0.304688f, 0.330811f, 0.358154f, 0.385986f, 0.415039f, 0.444092f, 0.474609f,
- 0.503418f, 0.534180f, 0.563965f, 0.592773f, 0.621094f, 0.650391f, 0.678223f, 0.704590f,
- 0.730469f, 0.754883f, 0.901855f, 0.908691f, 0.910156f, 0.909668f, 0.909668f, 0.908691f,
- 0.000653f, 0.001667f, 0.002666f, 0.003887f, 0.004986f, 0.006359f, 0.007202f, 0.008751f,
- 0.010300f, 0.011757f, 0.012939f, 0.014595f, 0.016281f, 0.018234f, 0.020142f, 0.022415f,
- 0.025101f, 0.027466f, 0.030182f, 0.033539f, 0.036865f, 0.040680f, 0.044342f, 0.048798f,
- 0.053619f, 0.059479f, 0.065491f, 0.071716f, 0.079285f, 0.087341f, 0.096497f, 0.106445f,
- 0.117615f, 0.129395f, 0.142822f, 0.157959f, 0.174194f, 0.192139f, 0.210938f, 0.231567f,
- 0.253906f, 0.277832f, 0.302979f, 0.329590f, 0.357422f, 0.385986f, 0.415283f, 0.446045f,
- 0.475830f, 0.506348f, 0.537109f, 0.567871f, 0.599121f, 0.628418f, 0.657227f, 0.685547f,
- 0.712891f, 0.739746f, 0.895508f, 0.902344f, 0.904297f, 0.904785f, 0.904297f, 0.904297f,
- 0.000372f, 0.001397f, 0.002384f, 0.003529f, 0.004509f, 0.005505f, 0.007015f, 0.008026f,
- 0.009201f, 0.010292f, 0.011536f, 0.013130f, 0.014915f, 0.016266f, 0.018387f, 0.020218f,
- 0.022034f, 0.024399f, 0.026901f, 0.029617f, 0.032623f, 0.035950f, 0.039032f, 0.043030f,
- 0.047577f, 0.052612f, 0.057556f, 0.063477f, 0.070007f, 0.077209f, 0.085083f, 0.094177f,
- 0.103821f, 0.114563f, 0.126709f, 0.140015f, 0.154785f, 0.171143f, 0.188477f, 0.208252f,
- 0.229004f, 0.251709f, 0.275879f, 0.302002f, 0.328613f, 0.356445f, 0.385986f, 0.416504f,
- 0.447510f, 0.478760f, 0.510254f, 0.542480f, 0.573730f, 0.604980f, 0.635742f, 0.665527f,
- 0.694336f, 0.722656f, 0.887695f, 0.897949f, 0.898926f, 0.899414f, 0.897949f, 0.898438f,
- 0.000661f, 0.001222f, 0.002275f, 0.003313f, 0.004181f, 0.005119f, 0.006275f, 0.007126f,
- 0.007988f, 0.009354f, 0.010300f, 0.012062f, 0.013313f, 0.014786f, 0.016251f, 0.018021f,
- 0.019516f, 0.021896f, 0.024017f, 0.026428f, 0.029022f, 0.031799f, 0.034698f, 0.038422f,
- 0.042236f, 0.046265f, 0.050598f, 0.055786f, 0.061493f, 0.067871f, 0.074951f, 0.082458f,
- 0.091187f, 0.101135f, 0.111694f, 0.123779f, 0.137207f, 0.151978f, 0.167969f, 0.186157f,
- 0.205688f, 0.226929f, 0.249756f, 0.274658f, 0.301025f, 0.328613f, 0.357178f, 0.387207f,
- 0.418457f, 0.450195f, 0.482422f, 0.516113f, 0.548340f, 0.580566f, 0.612305f, 0.644043f,
- 0.674805f, 0.705566f, 0.882812f, 0.890625f, 0.892578f, 0.893066f, 0.892578f, 0.893066f,
- 0.000379f, 0.001211f, 0.002066f, 0.003040f, 0.003834f, 0.004616f, 0.005608f, 0.006550f,
- 0.007347f, 0.008408f, 0.009529f, 0.010452f, 0.011940f, 0.013039f, 0.014313f, 0.015961f,
- 0.017746f, 0.019180f, 0.021210f, 0.023239f, 0.025482f, 0.028030f, 0.030640f, 0.033661f,
- 0.036987f, 0.040466f, 0.044617f, 0.048828f, 0.053894f, 0.059235f, 0.065674f, 0.072632f,
- 0.079956f, 0.089050f, 0.098267f, 0.109009f, 0.120789f, 0.134521f, 0.148926f, 0.165405f,
- 0.183228f, 0.202881f, 0.224731f, 0.248779f, 0.273193f, 0.300049f, 0.329346f, 0.358887f,
- 0.390381f, 0.421387f, 0.454590f, 0.488770f, 0.521484f, 0.555176f, 0.588379f, 0.621582f,
- 0.654785f, 0.686523f, 0.875488f, 0.885254f, 0.886719f, 0.886230f, 0.886719f, 0.886230f,
- 0.000282f, 0.001126f, 0.002010f, 0.002661f, 0.003340f, 0.004269f, 0.005192f, 0.005711f,
- 0.006638f, 0.007278f, 0.008377f, 0.009483f, 0.010567f, 0.011742f, 0.012871f, 0.014061f,
- 0.015480f, 0.017242f, 0.018799f, 0.020584f, 0.022461f, 0.024490f, 0.027100f, 0.029434f,
- 0.032532f, 0.035706f, 0.038971f, 0.042969f, 0.047241f, 0.052094f, 0.057373f, 0.063232f,
- 0.070007f, 0.077637f, 0.086243f, 0.095764f, 0.106323f, 0.118164f, 0.131470f, 0.146118f,
- 0.162720f, 0.181030f, 0.200928f, 0.223022f, 0.247070f, 0.272705f, 0.300537f, 0.330322f,
- 0.360107f, 0.393066f, 0.426270f, 0.459473f, 0.494629f, 0.529297f, 0.564453f, 0.598633f,
- 0.633789f, 0.666504f, 0.868652f, 0.878418f, 0.879395f, 0.880371f, 0.879883f, 0.879395f,
- 0.000340f, 0.000963f, 0.001826f, 0.002459f, 0.003307f, 0.003847f, 0.004719f, 0.004936f,
- 0.005802f, 0.006695f, 0.007748f, 0.008522f, 0.009506f, 0.010376f, 0.011383f, 0.012787f,
- 0.013901f, 0.015182f, 0.016663f, 0.018051f, 0.019821f, 0.021759f, 0.023590f, 0.025818f,
- 0.028519f, 0.030975f, 0.034210f, 0.037811f, 0.040802f, 0.045349f, 0.050201f, 0.055298f,
- 0.061310f, 0.067688f, 0.074768f, 0.083557f, 0.092590f, 0.103149f, 0.115479f, 0.128906f,
- 0.142944f, 0.160278f, 0.178345f, 0.198975f, 0.221802f, 0.246094f, 0.272949f, 0.301514f,
- 0.331543f, 0.363525f, 0.396729f, 0.430908f, 0.466553f, 0.501953f, 0.538086f, 0.574707f,
- 0.610840f, 0.646973f, 0.860352f, 0.870605f, 0.873047f, 0.873047f, 0.873535f, 0.872559f,
- 0.000225f, 0.001021f, 0.001653f, 0.002302f, 0.002827f, 0.003448f, 0.003937f, 0.004486f,
- 0.004986f, 0.006252f, 0.007000f, 0.007416f, 0.008224f, 0.009300f, 0.009972f, 0.011322f,
- 0.012115f, 0.013428f, 0.014557f, 0.015991f, 0.017532f, 0.018982f, 0.020706f, 0.022781f,
- 0.024567f, 0.027161f, 0.029770f, 0.032623f, 0.035828f, 0.039551f, 0.043030f, 0.047852f,
- 0.052795f, 0.058716f, 0.065125f, 0.072266f, 0.080566f, 0.089661f, 0.100403f, 0.112854f,
- 0.125732f, 0.140991f, 0.157349f, 0.176514f, 0.197510f, 0.220581f, 0.245850f, 0.273438f,
- 0.302979f, 0.334717f, 0.367676f, 0.401855f, 0.437256f, 0.474609f, 0.512695f, 0.549316f,
- 0.588379f, 0.625000f, 0.853027f, 0.863281f, 0.866211f, 0.866211f, 0.866699f, 0.866211f,
- 0.000324f, 0.000845f, 0.001534f, 0.002172f, 0.002474f, 0.003115f, 0.003824f, 0.003937f,
- 0.004848f, 0.005417f, 0.006222f, 0.006760f, 0.007446f, 0.008186f, 0.009102f, 0.009888f,
- 0.010620f, 0.011551f, 0.012878f, 0.013954f, 0.015106f, 0.016495f, 0.018143f, 0.019669f,
- 0.021713f, 0.023468f, 0.025818f, 0.028183f, 0.031021f, 0.033783f, 0.037445f, 0.041534f,
- 0.045532f, 0.050598f, 0.056152f, 0.062500f, 0.069580f, 0.077698f, 0.086914f, 0.097717f,
- 0.108948f, 0.123047f, 0.138184f, 0.155273f, 0.174438f, 0.196167f, 0.219604f, 0.246094f,
- 0.274902f, 0.305420f, 0.338379f, 0.372314f, 0.408936f, 0.445801f, 0.484131f, 0.523438f,
- 0.562988f, 0.604492f, 0.843262f, 0.856445f, 0.857422f, 0.857910f, 0.858398f, 0.858398f,
- 0.000331f, 0.000944f, 0.001288f, 0.001833f, 0.002388f, 0.002769f, 0.003216f, 0.003664f,
- 0.004276f, 0.004822f, 0.005173f, 0.005951f, 0.006531f, 0.007156f, 0.007896f, 0.008438f,
- 0.009430f, 0.010117f, 0.011208f, 0.012253f, 0.012970f, 0.014297f, 0.015572f, 0.017059f,
- 0.018692f, 0.020264f, 0.022125f, 0.024323f, 0.026474f, 0.029343f, 0.032288f, 0.035461f,
- 0.039062f, 0.043335f, 0.047821f, 0.053558f, 0.059509f, 0.067078f, 0.074341f, 0.083862f,
- 0.094360f, 0.106323f, 0.120117f, 0.135254f, 0.153442f, 0.172852f, 0.195190f, 0.220337f,
- 0.246948f, 0.276611f, 0.308594f, 0.343262f, 0.379150f, 0.416992f, 0.455811f, 0.496582f,
- 0.537598f, 0.579590f, 0.834473f, 0.847656f, 0.850098f, 0.850098f, 0.849609f, 0.850098f,
- 0.000316f, 0.000824f, 0.001088f, 0.001693f, 0.002062f, 0.002403f, 0.003027f, 0.003460f,
- 0.003712f, 0.004166f, 0.004765f, 0.005138f, 0.005871f, 0.006218f, 0.006924f, 0.007431f,
- 0.008255f, 0.008850f, 0.009781f, 0.010590f, 0.011391f, 0.012367f, 0.013474f, 0.014709f,
- 0.015823f, 0.017685f, 0.018982f, 0.020844f, 0.022629f, 0.025070f, 0.027496f, 0.030380f,
- 0.033447f, 0.037140f, 0.041168f, 0.045654f, 0.050720f, 0.057251f, 0.063965f, 0.071777f,
- 0.080811f, 0.091248f, 0.103638f, 0.117126f, 0.133179f, 0.151001f, 0.171631f, 0.194580f,
- 0.220337f, 0.248413f, 0.279785f, 0.313965f, 0.349365f, 0.386963f, 0.426514f, 0.468262f,
- 0.510742f, 0.555176f, 0.825684f, 0.838379f, 0.839844f, 0.841309f, 0.841309f, 0.841309f,
- 0.000210f, 0.000717f, 0.001084f, 0.001454f, 0.001882f, 0.002096f, 0.002468f, 0.002996f,
- 0.003395f, 0.003632f, 0.004066f, 0.004467f, 0.005020f, 0.005569f, 0.005917f, 0.006474f,
- 0.006958f, 0.007576f, 0.008453f, 0.009140f, 0.010002f, 0.010689f, 0.011520f, 0.012596f,
- 0.013695f, 0.014938f, 0.016220f, 0.017593f, 0.019424f, 0.020996f, 0.023331f, 0.025696f,
- 0.028427f, 0.031067f, 0.034668f, 0.038422f, 0.042908f, 0.048096f, 0.054016f, 0.060699f,
- 0.068909f, 0.077515f, 0.088501f, 0.100464f, 0.114624f, 0.130615f, 0.149048f, 0.170654f,
- 0.194214f, 0.222046f, 0.251465f, 0.283936f, 0.319580f, 0.357422f, 0.397461f, 0.440186f,
- 0.484375f, 0.528320f, 0.814941f, 0.828613f, 0.830078f, 0.832031f, 0.831543f, 0.833008f,
- 0.000234f, 0.000576f, 0.000939f, 0.001362f, 0.001481f, 0.001999f, 0.002228f, 0.002714f,
- 0.002846f, 0.003218f, 0.003555f, 0.003933f, 0.004356f, 0.004787f, 0.005169f, 0.005604f,
- 0.006145f, 0.006554f, 0.007275f, 0.007675f, 0.008293f, 0.009201f, 0.009979f, 0.010651f,
- 0.011497f, 0.012527f, 0.013893f, 0.014771f, 0.016373f, 0.017975f, 0.019455f, 0.021683f,
- 0.023895f, 0.026077f, 0.029114f, 0.032257f, 0.036072f, 0.040405f, 0.045197f, 0.050903f,
- 0.057770f, 0.065613f, 0.074524f, 0.085388f, 0.097656f, 0.111694f, 0.128540f, 0.147949f,
- 0.170166f, 0.195435f, 0.223389f, 0.255127f, 0.289551f, 0.327393f, 0.367432f, 0.410400f,
- 0.455078f, 0.502441f, 0.804199f, 0.818848f, 0.821289f, 0.822266f, 0.822754f, 0.822266f,
- 0.000213f, 0.000506f, 0.000756f, 0.001184f, 0.001396f, 0.001697f, 0.002010f, 0.002474f,
- 0.002569f, 0.002918f, 0.003090f, 0.003496f, 0.003855f, 0.004139f, 0.004478f, 0.004852f,
- 0.005253f, 0.005665f, 0.006100f, 0.006638f, 0.007080f, 0.007744f, 0.008293f, 0.009132f,
- 0.009750f, 0.010658f, 0.011536f, 0.012413f, 0.013779f, 0.014908f, 0.016510f, 0.017990f,
- 0.019623f, 0.021637f, 0.024109f, 0.026718f, 0.029922f, 0.033539f, 0.037567f, 0.042572f,
- 0.048279f, 0.054413f, 0.062042f, 0.071472f, 0.081909f, 0.094604f, 0.109436f, 0.127075f,
- 0.146484f, 0.170044f, 0.196533f, 0.226929f, 0.260254f, 0.296875f, 0.337402f, 0.380615f,
- 0.426025f, 0.475342f, 0.792969f, 0.807617f, 0.811035f, 0.811523f, 0.812012f, 0.813477f,
- 0.000119f, 0.000422f, 0.000883f, 0.001027f, 0.001189f, 0.001604f, 0.001783f, 0.001913f,
- 0.002228f, 0.002522f, 0.002645f, 0.003086f, 0.003199f, 0.003534f, 0.003790f, 0.004105f,
- 0.004421f, 0.004902f, 0.005283f, 0.005589f, 0.006039f, 0.006401f, 0.007088f, 0.007519f,
- 0.008217f, 0.008812f, 0.009712f, 0.010460f, 0.011337f, 0.012413f, 0.013596f, 0.014687f,
- 0.016159f, 0.018051f, 0.019913f, 0.022018f, 0.024551f, 0.027359f, 0.030792f, 0.035065f,
- 0.039703f, 0.044983f, 0.051392f, 0.059204f, 0.068176f, 0.079102f, 0.092041f, 0.106873f,
- 0.125000f, 0.145874f, 0.170532f, 0.198975f, 0.230835f, 0.267090f, 0.306641f, 0.349854f,
- 0.395508f, 0.445801f, 0.780762f, 0.796875f, 0.799805f, 0.801270f, 0.801270f, 0.801270f,
- 0.000227f, 0.000521f, 0.000698f, 0.000817f, 0.001236f, 0.001359f, 0.001540f, 0.001619f,
- 0.001940f, 0.002089f, 0.002430f, 0.002552f, 0.002655f, 0.002932f, 0.003241f, 0.003532f,
- 0.003841f, 0.004120f, 0.004292f, 0.004761f, 0.005051f, 0.005459f, 0.005886f, 0.006290f,
- 0.006821f, 0.007320f, 0.007889f, 0.008652f, 0.009399f, 0.010063f, 0.010887f, 0.012215f,
- 0.013206f, 0.014648f, 0.016037f, 0.017853f, 0.019958f, 0.022491f, 0.024994f, 0.028091f,
- 0.032135f, 0.036530f, 0.041809f, 0.048096f, 0.055908f, 0.064941f, 0.076050f, 0.089050f,
- 0.104980f, 0.123596f, 0.146118f, 0.172363f, 0.203003f, 0.237183f, 0.276123f, 0.318359f,
- 0.365479f, 0.416504f, 0.768555f, 0.784668f, 0.788086f, 0.789551f, 0.790039f, 0.790039f,
- 0.000000f, 0.000448f, 0.000566f, 0.000688f, 0.000985f, 0.001144f, 0.001305f, 0.001437f,
- 0.001622f, 0.001731f, 0.001989f, 0.002174f, 0.002338f, 0.002552f, 0.002739f, 0.002924f,
- 0.003239f, 0.003405f, 0.003628f, 0.003933f, 0.004200f, 0.004463f, 0.004948f, 0.005245f,
- 0.005615f, 0.006138f, 0.006699f, 0.006989f, 0.007793f, 0.008247f, 0.008980f, 0.009918f,
- 0.010857f, 0.011795f, 0.013016f, 0.014244f, 0.015930f, 0.017868f, 0.019882f, 0.022659f,
- 0.025543f, 0.029160f, 0.033417f, 0.038635f, 0.044983f, 0.052338f, 0.061859f, 0.072693f,
- 0.086487f, 0.102966f, 0.122864f, 0.146973f, 0.175049f, 0.207764f, 0.245605f, 0.287842f,
- 0.334229f, 0.385986f, 0.755371f, 0.771973f, 0.775879f, 0.777344f, 0.777832f, 0.778809f,
- 0.000000f, 0.000303f, 0.000512f, 0.000752f, 0.000828f, 0.001036f, 0.001184f, 0.001292f,
- 0.001281f, 0.001460f, 0.001717f, 0.001843f, 0.001955f, 0.002060f, 0.002317f, 0.002476f,
- 0.002542f, 0.002869f, 0.003088f, 0.003313f, 0.003559f, 0.003693f, 0.004082f, 0.004318f,
- 0.004696f, 0.005070f, 0.005245f, 0.005741f, 0.006126f, 0.006771f, 0.007298f, 0.007828f,
- 0.008583f, 0.009338f, 0.010246f, 0.011528f, 0.012794f, 0.014160f, 0.015717f, 0.017853f,
- 0.019958f, 0.022995f, 0.026291f, 0.030533f, 0.035553f, 0.041565f, 0.048981f, 0.058350f,
- 0.069824f, 0.083801f, 0.101685f, 0.122437f, 0.148438f, 0.178833f, 0.215454f, 0.256104f,
- 0.302490f, 0.354736f, 0.741699f, 0.758789f, 0.762695f, 0.763672f, 0.764648f, 0.765625f,
- 0.000097f, 0.000306f, 0.000370f, 0.000618f, 0.000713f, 0.000810f, 0.000953f, 0.000920f,
- 0.001167f, 0.001238f, 0.001406f, 0.001483f, 0.001540f, 0.001794f, 0.001970f, 0.002028f,
- 0.002264f, 0.002354f, 0.002459f, 0.002636f, 0.002827f, 0.003096f, 0.003342f, 0.003544f,
- 0.003881f, 0.003948f, 0.004459f, 0.004742f, 0.005005f, 0.005394f, 0.005867f, 0.006374f,
- 0.006901f, 0.007507f, 0.008202f, 0.008881f, 0.010017f, 0.010986f, 0.012451f, 0.013809f,
- 0.015511f, 0.017776f, 0.020325f, 0.023453f, 0.027390f, 0.032349f, 0.038330f, 0.045624f,
- 0.055359f, 0.067078f, 0.082275f, 0.101013f, 0.123657f, 0.151611f, 0.185791f, 0.225342f,
- 0.270752f, 0.322754f, 0.727051f, 0.746094f, 0.749512f, 0.750977f, 0.751953f, 0.751953f,
- 0.000228f, 0.000211f, 0.000504f, 0.000443f, 0.000523f, 0.000672f, 0.000703f, 0.000902f,
- 0.000975f, 0.001010f, 0.001122f, 0.001178f, 0.001257f, 0.001424f, 0.001575f, 0.001631f,
- 0.001789f, 0.001910f, 0.002090f, 0.002144f, 0.002411f, 0.002520f, 0.002703f, 0.002827f,
- 0.003010f, 0.003195f, 0.003403f, 0.003750f, 0.003960f, 0.004276f, 0.004780f, 0.005005f,
- 0.005432f, 0.005981f, 0.006428f, 0.007015f, 0.007812f, 0.008537f, 0.009415f, 0.010658f,
- 0.011963f, 0.013443f, 0.015396f, 0.017731f, 0.020782f, 0.024414f, 0.029083f, 0.034912f,
- 0.042572f, 0.052216f, 0.064392f, 0.080017f, 0.100220f, 0.126099f, 0.157227f, 0.194946f,
- 0.239136f, 0.290283f, 0.712402f, 0.731445f, 0.734863f, 0.736816f, 0.737305f, 0.737793f,
- 0.000211f, 0.000198f, 0.000195f, 0.000413f, 0.000517f, 0.000531f, 0.000586f, 0.000736f,
- 0.000769f, 0.000809f, 0.000970f, 0.001007f, 0.001067f, 0.001134f, 0.001211f, 0.001348f,
- 0.001341f, 0.001534f, 0.001617f, 0.001734f, 0.001942f, 0.002010f, 0.002110f, 0.002268f,
- 0.002523f, 0.002607f, 0.002829f, 0.003004f, 0.003113f, 0.003403f, 0.003681f, 0.003990f,
- 0.004257f, 0.004601f, 0.005039f, 0.005444f, 0.005993f, 0.006561f, 0.007278f, 0.008026f,
- 0.009041f, 0.010124f, 0.011513f, 0.013222f, 0.015320f, 0.017914f, 0.021408f, 0.025833f,
- 0.031433f, 0.039429f, 0.049255f, 0.062286f, 0.079102f, 0.101135f, 0.130005f, 0.164917f,
- 0.207764f, 0.258057f, 0.696289f, 0.716309f, 0.720215f, 0.722168f, 0.722656f, 0.723145f,
- 0.000000f, 0.000080f, 0.000286f, 0.000374f, 0.000434f, 0.000457f, 0.000460f, 0.000568f,
- 0.000610f, 0.000669f, 0.000715f, 0.000773f, 0.000877f, 0.000918f, 0.001030f, 0.000998f,
- 0.001148f, 0.001134f, 0.001305f, 0.001369f, 0.001410f, 0.001534f, 0.001688f, 0.001780f,
- 0.001899f, 0.001963f, 0.002081f, 0.002199f, 0.002470f, 0.002563f, 0.002758f, 0.003006f,
- 0.003273f, 0.003531f, 0.003817f, 0.004093f, 0.004532f, 0.004993f, 0.005463f, 0.006027f,
- 0.006657f, 0.007492f, 0.008537f, 0.009689f, 0.011246f, 0.012985f, 0.015518f, 0.018539f,
- 0.022827f, 0.028534f, 0.036072f, 0.046234f, 0.060028f, 0.078918f, 0.103943f, 0.136353f,
- 0.176514f, 0.225952f, 0.679199f, 0.699707f, 0.703613f, 0.706055f, 0.706543f, 0.708008f,
- 0.000089f, 0.000176f, 0.000232f, 0.000342f, 0.000317f, 0.000319f, 0.000420f, 0.000382f,
- 0.000494f, 0.000515f, 0.000612f, 0.000650f, 0.000671f, 0.000701f, 0.000732f, 0.000859f,
- 0.000888f, 0.000923f, 0.001002f, 0.001048f, 0.001170f, 0.001234f, 0.001292f, 0.001426f,
- 0.001414f, 0.001476f, 0.001622f, 0.001723f, 0.001892f, 0.001976f, 0.002237f, 0.002239f,
- 0.002476f, 0.002645f, 0.002817f, 0.003092f, 0.003355f, 0.003626f, 0.003979f, 0.004459f,
- 0.004948f, 0.005527f, 0.006256f, 0.007027f, 0.008026f, 0.009270f, 0.010918f, 0.013184f,
- 0.016098f, 0.019913f, 0.025253f, 0.033112f, 0.043762f, 0.059113f, 0.079956f, 0.109009f,
- 0.146729f, 0.193726f, 0.660645f, 0.682129f, 0.688477f, 0.690430f, 0.689941f, 0.690918f,
- 0.000000f, 0.000063f, 0.000194f, 0.000281f, 0.000187f, 0.000325f, 0.000278f, 0.000272f,
- 0.000386f, 0.000466f, 0.000462f, 0.000510f, 0.000519f, 0.000587f, 0.000613f, 0.000603f,
- 0.000671f, 0.000709f, 0.000744f, 0.000808f, 0.000858f, 0.000913f, 0.000963f, 0.000999f,
- 0.001062f, 0.001106f, 0.001262f, 0.001266f, 0.001431f, 0.001562f, 0.001672f, 0.001693f,
- 0.001810f, 0.001976f, 0.002090f, 0.002289f, 0.002422f, 0.002666f, 0.002916f, 0.003166f,
- 0.003513f, 0.003862f, 0.004318f, 0.004936f, 0.005646f, 0.006493f, 0.007626f, 0.009048f,
- 0.010826f, 0.013519f, 0.017166f, 0.022476f, 0.030258f, 0.041687f, 0.058807f, 0.083435f,
- 0.117737f, 0.162598f, 0.644043f, 0.666504f, 0.670410f, 0.673340f, 0.674316f, 0.675293f,
- 0.000000f, 0.000117f, 0.000112f, 0.000178f, 0.000216f, 0.000222f, 0.000271f, 0.000229f,
- 0.000280f, 0.000283f, 0.000326f, 0.000376f, 0.000376f, 0.000443f, 0.000456f, 0.000470f,
- 0.000499f, 0.000507f, 0.000547f, 0.000566f, 0.000613f, 0.000667f, 0.000692f, 0.000749f,
- 0.000773f, 0.000803f, 0.000917f, 0.000924f, 0.000997f, 0.001055f, 0.001096f, 0.001236f,
- 0.001261f, 0.001376f, 0.001466f, 0.001693f, 0.001695f, 0.001826f, 0.002077f, 0.002226f,
- 0.002411f, 0.002686f, 0.002985f, 0.003368f, 0.003801f, 0.004353f, 0.005131f, 0.005974f,
- 0.007370f, 0.008842f, 0.011345f, 0.014717f, 0.019699f, 0.027893f, 0.040619f, 0.060730f,
- 0.090454f, 0.132080f, 0.625488f, 0.649414f, 0.653809f, 0.655273f, 0.656250f, 0.658203f,
- 0.000000f, 0.000000f, 0.000108f, 0.000121f, 0.000136f, 0.000154f, 0.000158f, 0.000191f,
- 0.000203f, 0.000213f, 0.000270f, 0.000223f, 0.000232f, 0.000270f, 0.000296f, 0.000342f,
- 0.000324f, 0.000352f, 0.000453f, 0.000407f, 0.000450f, 0.000459f, 0.000486f, 0.000524f,
- 0.000545f, 0.000565f, 0.000630f, 0.000620f, 0.000678f, 0.000803f, 0.000763f, 0.000813f,
- 0.000860f, 0.000937f, 0.001035f, 0.001101f, 0.001141f, 0.001254f, 0.001399f, 0.001449f,
- 0.001616f, 0.001779f, 0.001942f, 0.002220f, 0.002493f, 0.002808f, 0.003258f, 0.003895f,
- 0.004623f, 0.005714f, 0.007111f, 0.009178f, 0.012367f, 0.017319f, 0.025879f, 0.040741f,
- 0.065552f, 0.103577f, 0.606934f, 0.630371f, 0.635254f, 0.637695f, 0.638672f, 0.639648f,
- 0.000000f, 0.000109f, 0.000102f, 0.000098f, 0.000105f, 0.000110f, 0.000113f, 0.000122f,
- 0.000117f, 0.000132f, 0.000147f, 0.000189f, 0.000163f, 0.000212f, 0.000213f, 0.000222f,
- 0.000224f, 0.000233f, 0.000258f, 0.000262f, 0.000274f, 0.000305f, 0.000340f, 0.000329f,
- 0.000358f, 0.000376f, 0.000445f, 0.000418f, 0.000447f, 0.000478f, 0.000546f, 0.000530f,
- 0.000594f, 0.000626f, 0.000679f, 0.000745f, 0.000763f, 0.000804f, 0.000869f, 0.000952f,
- 0.001025f, 0.001119f, 0.001254f, 0.001359f, 0.001584f, 0.001728f, 0.001993f, 0.002295f,
- 0.002790f, 0.003298f, 0.004135f, 0.005363f, 0.007267f, 0.010277f, 0.015350f, 0.024994f,
- 0.043518f, 0.076599f, 0.585938f, 0.611816f, 0.616211f, 0.619141f, 0.619629f, 0.620605f,
- 0.000000f, 0.000102f, 0.000095f, 0.000090f, 0.000085f, 0.000081f, 0.000078f, 0.000073f,
- 0.000075f, 0.000079f, 0.000087f, 0.000092f, 0.000095f, 0.000094f, 0.000133f, 0.000143f,
- 0.000152f, 0.000155f, 0.000161f, 0.000195f, 0.000174f, 0.000183f, 0.000188f, 0.000216f,
- 0.000233f, 0.000241f, 0.000241f, 0.000257f, 0.000269f, 0.000302f, 0.000325f, 0.000321f,
- 0.000350f, 0.000363f, 0.000405f, 0.000426f, 0.000456f, 0.000486f, 0.000539f, 0.000560f,
- 0.000614f, 0.000671f, 0.000722f, 0.000811f, 0.000891f, 0.000989f, 0.001162f, 0.001312f,
- 0.001545f, 0.001863f, 0.002340f, 0.002920f, 0.003963f, 0.005615f, 0.008499f, 0.013931f,
- 0.025833f, 0.052094f, 0.566406f, 0.591797f, 0.597168f, 0.599609f, 0.601074f, 0.601562f,
- 0.000110f, 0.000092f, 0.000084f, 0.000077f, 0.000073f, 0.000070f, 0.000067f, 0.000064f,
- 0.000061f, 0.000058f, 0.000055f, 0.000064f, 0.000051f, 0.000054f, 0.000071f, 0.000059f,
- 0.000082f, 0.000081f, 0.000090f, 0.000087f, 0.000099f, 0.000103f, 0.000127f, 0.000131f,
- 0.000135f, 0.000139f, 0.000142f, 0.000143f, 0.000156f, 0.000162f, 0.000173f, 0.000194f,
- 0.000206f, 0.000201f, 0.000233f, 0.000225f, 0.000246f, 0.000294f, 0.000279f, 0.000313f,
- 0.000333f, 0.000356f, 0.000395f, 0.000432f, 0.000459f, 0.000511f, 0.000577f, 0.000664f,
- 0.000770f, 0.000916f, 0.001114f, 0.001400f, 0.001881f, 0.002665f, 0.004093f, 0.006966f,
- 0.013290f, 0.031525f, 0.545410f, 0.571777f, 0.577637f, 0.579102f, 0.580566f, 0.581055f,
- 0.000093f, 0.000073f, 0.000066f, 0.000061f, 0.000056f, 0.000054f, 0.000051f, 0.000050f,
- 0.000048f, 0.000047f, 0.000045f, 0.000044f, 0.000042f, 0.000040f, 0.000038f, 0.000036f,
- 0.000039f, 0.000033f, 0.000041f, 0.000040f, 0.000046f, 0.000048f, 0.000051f, 0.000057f,
- 0.000060f, 0.000066f, 0.000062f, 0.000067f, 0.000080f, 0.000085f, 0.000088f, 0.000092f,
- 0.000092f, 0.000097f, 0.000109f, 0.000109f, 0.000117f, 0.000132f, 0.000134f, 0.000147f,
- 0.000154f, 0.000156f, 0.000188f, 0.000197f, 0.000219f, 0.000234f, 0.000266f, 0.000286f,
- 0.000335f, 0.000397f, 0.000472f, 0.000566f, 0.000751f, 0.001039f, 0.001626f, 0.002834f,
- 0.005909f, 0.015411f, 0.524414f, 0.551270f, 0.557129f, 0.559570f, 0.561035f, 0.561523f,
- 0.000060f, 0.000046f, 0.000039f, 0.000037f, 0.000034f, 0.000034f, 0.000032f, 0.000032f,
- 0.000031f, 0.000029f, 0.000029f, 0.000029f, 0.000028f, 0.000028f, 0.000028f, 0.000027f,
- 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000021f,
- 0.000020f, 0.000018f, 0.000018f, 0.000023f, 0.000024f, 0.000028f, 0.000032f, 0.000033f,
- 0.000032f, 0.000038f, 0.000039f, 0.000043f, 0.000046f, 0.000050f, 0.000052f, 0.000053f,
- 0.000057f, 0.000067f, 0.000073f, 0.000068f, 0.000076f, 0.000083f, 0.000097f, 0.000110f,
- 0.000116f, 0.000127f, 0.000157f, 0.000185f, 0.000246f, 0.000319f, 0.000466f, 0.000810f,
- 0.001841f, 0.005795f, 0.503418f, 0.531250f, 0.536621f, 0.539062f, 0.540039f, 0.540527f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000004f, 0.000005f, 0.000005f, 0.000008f,
- 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000010f, 0.000010f, 0.000011f,
- 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000012f,
- 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
- 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000012f,
- 0.000013f, 0.000014f, 0.000015f, 0.000017f, 0.000020f, 0.000021f, 0.000018f, 0.000023f,
- 0.000023f, 0.000025f, 0.000030f, 0.000038f, 0.000043f, 0.000059f, 0.000079f, 0.000131f,
- 0.000279f, 0.001210f, 0.481934f, 0.510254f, 0.516113f, 0.518555f, 0.520020f, 0.520508f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f,
- 0.000006f, 0.000022f, 0.460449f, 0.489258f, 0.495850f, 0.498291f, 0.499512f, 0.500000f,
- },
- {
- 0.038544f, 0.111450f, 0.177368f, 0.237061f, 0.290771f, 0.339600f, 0.384277f, 0.425293f,
- 0.462402f, 0.497070f, 0.527344f, 0.556152f, 0.583496f, 0.607910f, 0.630859f, 0.652344f,
- 0.672852f, 0.690918f, 0.708496f, 0.724609f, 0.740723f, 0.754883f, 0.768066f, 0.780273f,
- 0.792480f, 0.803711f, 0.815430f, 0.825684f, 0.835449f, 0.844727f, 0.853516f, 0.861816f,
- 0.870117f, 0.877930f, 0.885254f, 0.892578f, 0.899414f, 0.905762f, 0.912109f, 0.918945f,
- 0.923828f, 0.928711f, 0.934082f, 0.939941f, 0.944824f, 0.949707f, 0.953613f, 0.958496f,
- 0.962402f, 0.967285f, 0.971191f, 0.974609f, 0.979004f, 0.982422f, 0.985352f, 0.989258f,
- 0.992188f, 0.996094f, 0.996094f, 0.990723f, 0.986328f, 0.982422f, 0.978516f, 0.975098f,
- 0.029068f, 0.087219f, 0.142578f, 0.195190f, 0.244629f, 0.291016f, 0.334717f, 0.375000f,
- 0.412842f, 0.446533f, 0.481201f, 0.511230f, 0.539062f, 0.565918f, 0.590820f, 0.614258f,
- 0.636719f, 0.656250f, 0.675293f, 0.693359f, 0.710449f, 0.726562f, 0.741699f, 0.755371f,
- 0.769043f, 0.781738f, 0.793457f, 0.805176f, 0.815918f, 0.826660f, 0.835938f, 0.845703f,
- 0.854980f, 0.862793f, 0.871582f, 0.879395f, 0.885742f, 0.894531f, 0.900879f, 0.907227f,
- 0.913086f, 0.919434f, 0.925293f, 0.931152f, 0.936523f, 0.941406f, 0.946777f, 0.951172f,
- 0.956055f, 0.960449f, 0.964355f, 0.968750f, 0.972656f, 0.976562f, 0.980469f, 0.984375f,
- 0.987793f, 0.991211f, 0.994141f, 0.989258f, 0.984863f, 0.981445f, 0.977539f, 0.974121f,
- 0.023346f, 0.069641f, 0.115601f, 0.160767f, 0.205078f, 0.248047f, 0.289062f, 0.328125f,
- 0.365723f, 0.401367f, 0.435059f, 0.466309f, 0.495361f, 0.523926f, 0.550781f, 0.574707f,
- 0.597168f, 0.620117f, 0.641113f, 0.660156f, 0.679688f, 0.696777f, 0.713379f, 0.728516f,
- 0.743652f, 0.757324f, 0.770996f, 0.784180f, 0.795410f, 0.806641f, 0.817383f, 0.828125f,
- 0.837891f, 0.847168f, 0.855957f, 0.864258f, 0.873047f, 0.880859f, 0.888672f, 0.895996f,
- 0.902832f, 0.909668f, 0.915039f, 0.921875f, 0.927246f, 0.934082f, 0.937988f, 0.943848f,
- 0.948242f, 0.953613f, 0.958496f, 0.962402f, 0.967285f, 0.971191f, 0.975098f, 0.979492f,
- 0.983398f, 0.985840f, 0.992188f, 0.987305f, 0.983398f, 0.979980f, 0.977051f, 0.973633f,
- 0.018600f, 0.056366f, 0.094299f, 0.133545f, 0.172729f, 0.211670f, 0.249756f, 0.285889f,
- 0.322021f, 0.356934f, 0.390869f, 0.421875f, 0.452148f, 0.481201f, 0.509277f, 0.535156f,
- 0.560059f, 0.583496f, 0.605957f, 0.626465f, 0.647949f, 0.665527f, 0.684570f, 0.700684f,
- 0.717285f, 0.731934f, 0.746582f, 0.760254f, 0.773926f, 0.786621f, 0.799316f, 0.809082f,
- 0.820312f, 0.830566f, 0.840332f, 0.850098f, 0.858887f, 0.867188f, 0.875000f, 0.883789f,
- 0.890625f, 0.898926f, 0.904297f, 0.912109f, 0.916992f, 0.924316f, 0.930176f, 0.935547f,
- 0.941406f, 0.945801f, 0.951172f, 0.956055f, 0.960938f, 0.964844f, 0.969727f, 0.974609f,
- 0.978516f, 0.981934f, 0.989746f, 0.985840f, 0.981934f, 0.978516f, 0.975586f, 0.972168f,
- 0.015068f, 0.046143f, 0.077881f, 0.111816f, 0.145264f, 0.179688f, 0.214600f, 0.249023f,
- 0.282715f, 0.316406f, 0.348389f, 0.380615f, 0.411133f, 0.440430f, 0.468018f, 0.494873f,
- 0.520508f, 0.546387f, 0.568848f, 0.591309f, 0.613281f, 0.634277f, 0.653809f, 0.670898f,
- 0.688477f, 0.706055f, 0.721191f, 0.736328f, 0.751465f, 0.764648f, 0.776855f, 0.789551f,
- 0.801270f, 0.812500f, 0.823730f, 0.833496f, 0.843262f, 0.853027f, 0.861328f, 0.869629f,
- 0.878418f, 0.885742f, 0.893555f, 0.900391f, 0.908203f, 0.914551f, 0.921387f, 0.927246f,
- 0.932617f, 0.938965f, 0.943848f, 0.949219f, 0.953613f, 0.959473f, 0.963867f, 0.968262f,
- 0.972656f, 0.977051f, 0.987305f, 0.983887f, 0.980957f, 0.977051f, 0.974121f, 0.970703f,
- 0.012444f, 0.037933f, 0.065613f, 0.093811f, 0.123474f, 0.153809f, 0.185059f, 0.215820f,
- 0.247559f, 0.279297f, 0.310547f, 0.341309f, 0.370361f, 0.399658f, 0.428467f, 0.457031f,
- 0.482910f, 0.507812f, 0.533203f, 0.556152f, 0.579590f, 0.600098f, 0.621094f, 0.641113f,
- 0.659668f, 0.676270f, 0.695312f, 0.710449f, 0.726074f, 0.740723f, 0.756348f, 0.769043f,
- 0.780762f, 0.794434f, 0.805176f, 0.816895f, 0.827637f, 0.837891f, 0.847168f, 0.855957f,
- 0.865723f, 0.873535f, 0.882324f, 0.889648f, 0.897949f, 0.904297f, 0.911133f, 0.917480f,
- 0.924316f, 0.930176f, 0.936523f, 0.941895f, 0.947266f, 0.952637f, 0.958008f, 0.962891f,
- 0.967285f, 0.971680f, 0.984863f, 0.981934f, 0.978516f, 0.975586f, 0.972656f, 0.969238f,
- 0.010353f, 0.032043f, 0.055359f, 0.079529f, 0.104980f, 0.131836f, 0.159424f, 0.187866f,
- 0.216431f, 0.245239f, 0.275146f, 0.304199f, 0.333496f, 0.362061f, 0.390869f, 0.417969f,
- 0.445068f, 0.471191f, 0.496582f, 0.520508f, 0.543457f, 0.566895f, 0.588867f, 0.608398f,
- 0.628906f, 0.648438f, 0.666992f, 0.684570f, 0.701660f, 0.716797f, 0.732422f, 0.746582f,
- 0.760254f, 0.773438f, 0.786133f, 0.798340f, 0.810547f, 0.821777f, 0.832520f, 0.842773f,
- 0.851074f, 0.860352f, 0.869629f, 0.878906f, 0.886230f, 0.894043f, 0.901855f, 0.908691f,
- 0.915527f, 0.922363f, 0.928223f, 0.935059f, 0.939941f, 0.945312f, 0.950684f, 0.956055f,
- 0.962402f, 0.966797f, 0.982910f, 0.979980f, 0.977051f, 0.973633f, 0.970703f, 0.968262f,
- 0.008598f, 0.027328f, 0.046417f, 0.067871f, 0.089905f, 0.113220f, 0.137695f, 0.163330f,
- 0.189087f, 0.216064f, 0.243164f, 0.270752f, 0.298340f, 0.326416f, 0.354004f, 0.381348f,
- 0.407715f, 0.434082f, 0.460205f, 0.484863f, 0.508789f, 0.532227f, 0.555176f, 0.577637f,
- 0.598145f, 0.618652f, 0.637695f, 0.657227f, 0.674805f, 0.691406f, 0.708008f, 0.723633f,
- 0.738770f, 0.751953f, 0.766113f, 0.779785f, 0.791992f, 0.804199f, 0.815918f, 0.825684f,
- 0.836914f, 0.846680f, 0.856934f, 0.866211f, 0.874512f, 0.882324f, 0.890625f, 0.898438f,
- 0.905273f, 0.913086f, 0.919922f, 0.926758f, 0.933105f, 0.938477f, 0.944824f, 0.951172f,
- 0.955566f, 0.960938f, 0.980469f, 0.978027f, 0.974609f, 0.972168f, 0.969238f, 0.966797f,
- 0.007561f, 0.023315f, 0.040344f, 0.058228f, 0.077148f, 0.097534f, 0.119995f, 0.142212f,
- 0.165649f, 0.190063f, 0.214722f, 0.240601f, 0.266846f, 0.293457f, 0.319824f, 0.346924f,
- 0.372314f, 0.398438f, 0.424561f, 0.449463f, 0.474609f, 0.498535f, 0.521973f, 0.544434f,
- 0.566895f, 0.587402f, 0.608398f, 0.628418f, 0.645996f, 0.665039f, 0.683105f, 0.699219f,
- 0.716309f, 0.731445f, 0.745117f, 0.760254f, 0.772949f, 0.786133f, 0.799316f, 0.809570f,
- 0.820801f, 0.832031f, 0.843262f, 0.852051f, 0.861816f, 0.871094f, 0.880371f, 0.887695f,
- 0.895996f, 0.904297f, 0.911133f, 0.917969f, 0.924805f, 0.931641f, 0.937012f, 0.943848f,
- 0.949707f, 0.954590f, 0.978027f, 0.976074f, 0.973145f, 0.970215f, 0.967773f, 0.965332f,
- 0.006416f, 0.020065f, 0.034943f, 0.050537f, 0.067078f, 0.084900f, 0.104065f, 0.123962f,
- 0.145264f, 0.166748f, 0.189575f, 0.213501f, 0.237305f, 0.262451f, 0.288574f, 0.313477f,
- 0.338623f, 0.364502f, 0.389893f, 0.414551f, 0.440186f, 0.464600f, 0.487549f, 0.510742f,
- 0.534668f, 0.556641f, 0.578613f, 0.598145f, 0.618652f, 0.637207f, 0.655273f, 0.674805f,
- 0.690430f, 0.707031f, 0.724121f, 0.739258f, 0.752930f, 0.767090f, 0.779785f, 0.792969f,
- 0.805176f, 0.816895f, 0.827637f, 0.838379f, 0.849121f, 0.858398f, 0.868652f, 0.876465f,
- 0.885742f, 0.894043f, 0.901855f, 0.909180f, 0.916992f, 0.923828f, 0.930176f, 0.937012f,
- 0.943359f, 0.949707f, 0.975586f, 0.973633f, 0.971191f, 0.968262f, 0.965820f, 0.963379f,
- 0.005802f, 0.017502f, 0.030045f, 0.043823f, 0.058014f, 0.074280f, 0.090759f, 0.108459f,
- 0.127197f, 0.146484f, 0.167725f, 0.189087f, 0.211304f, 0.234497f, 0.258301f, 0.282471f,
- 0.307373f, 0.331299f, 0.356689f, 0.381104f, 0.405762f, 0.430420f, 0.455078f, 0.478516f,
- 0.502441f, 0.524414f, 0.545898f, 0.568359f, 0.588867f, 0.608887f, 0.628906f, 0.646973f,
- 0.665527f, 0.684082f, 0.701172f, 0.715820f, 0.731934f, 0.746582f, 0.760742f, 0.774414f,
- 0.787598f, 0.800781f, 0.812500f, 0.823730f, 0.834961f, 0.845703f, 0.855469f, 0.865234f,
- 0.874512f, 0.883789f, 0.892090f, 0.899902f, 0.908203f, 0.916016f, 0.922852f, 0.930176f,
- 0.936523f, 0.942871f, 0.972656f, 0.971191f, 0.968750f, 0.966309f, 0.963867f, 0.961426f,
- 0.004734f, 0.014984f, 0.026169f, 0.038177f, 0.051208f, 0.065186f, 0.079468f, 0.095276f,
- 0.111633f, 0.129639f, 0.148071f, 0.167969f, 0.188599f, 0.208984f, 0.231689f, 0.254639f,
- 0.277832f, 0.301025f, 0.325439f, 0.349854f, 0.373779f, 0.397705f, 0.422607f, 0.446045f,
- 0.469727f, 0.492676f, 0.514648f, 0.537598f, 0.559570f, 0.580078f, 0.600586f, 0.620117f,
- 0.639648f, 0.658203f, 0.676758f, 0.692871f, 0.708984f, 0.725586f, 0.740723f, 0.755859f,
- 0.769531f, 0.783691f, 0.796875f, 0.808594f, 0.820801f, 0.832520f, 0.842285f, 0.852539f,
- 0.862793f, 0.872070f, 0.881836f, 0.890137f, 0.898926f, 0.906738f, 0.915039f, 0.922363f,
- 0.929199f, 0.936523f, 0.969727f, 0.968750f, 0.966797f, 0.964355f, 0.961914f, 0.959473f,
- 0.004055f, 0.013588f, 0.023132f, 0.033722f, 0.044891f, 0.057343f, 0.069763f, 0.083923f,
- 0.098389f, 0.114441f, 0.131226f, 0.148682f, 0.167603f, 0.186768f, 0.207031f, 0.228516f,
- 0.250732f, 0.272949f, 0.295410f, 0.318604f, 0.342285f, 0.365967f, 0.390381f, 0.413574f,
- 0.437744f, 0.460938f, 0.484131f, 0.506348f, 0.528320f, 0.550781f, 0.572266f, 0.592773f,
- 0.613281f, 0.632812f, 0.651367f, 0.669922f, 0.687500f, 0.704102f, 0.720215f, 0.735840f,
- 0.751465f, 0.764160f, 0.778809f, 0.792480f, 0.803711f, 0.816895f, 0.829102f, 0.840332f,
- 0.850586f, 0.860352f, 0.870605f, 0.880371f, 0.889648f, 0.897949f, 0.905762f, 0.914551f,
- 0.922363f, 0.929199f, 0.967285f, 0.966797f, 0.964844f, 0.961426f, 0.959473f, 0.958008f,
- 0.003611f, 0.011971f, 0.020401f, 0.030029f, 0.039185f, 0.050415f, 0.061737f, 0.074341f,
- 0.086975f, 0.101074f, 0.115845f, 0.131958f, 0.148682f, 0.166626f, 0.185059f, 0.205200f,
- 0.224854f, 0.245483f, 0.267334f, 0.290771f, 0.312988f, 0.335449f, 0.359619f, 0.382080f,
- 0.406250f, 0.429443f, 0.452881f, 0.475830f, 0.498779f, 0.520996f, 0.542480f, 0.563477f,
- 0.584473f, 0.604980f, 0.625977f, 0.643555f, 0.663086f, 0.681152f, 0.698242f, 0.714355f,
- 0.729980f, 0.746582f, 0.760742f, 0.774902f, 0.788086f, 0.801758f, 0.814941f, 0.826660f,
- 0.838867f, 0.848633f, 0.859863f, 0.869141f, 0.879395f, 0.889160f, 0.897949f, 0.906250f,
- 0.914551f, 0.922363f, 0.963867f, 0.964355f, 0.961914f, 0.959961f, 0.957520f, 0.955078f,
- 0.003393f, 0.010361f, 0.018494f, 0.026337f, 0.035187f, 0.044556f, 0.054596f, 0.065186f,
- 0.077515f, 0.089783f, 0.102783f, 0.117249f, 0.132446f, 0.148071f, 0.165649f, 0.183838f,
- 0.202026f, 0.221313f, 0.241943f, 0.262939f, 0.285156f, 0.307129f, 0.329102f, 0.352539f,
- 0.375977f, 0.398438f, 0.421875f, 0.445312f, 0.468750f, 0.490723f, 0.512695f, 0.534668f,
- 0.556641f, 0.577637f, 0.598633f, 0.619141f, 0.637695f, 0.656738f, 0.674805f, 0.692383f,
- 0.709473f, 0.726074f, 0.742188f, 0.756836f, 0.771973f, 0.786133f, 0.799316f, 0.812012f,
- 0.824707f, 0.835938f, 0.848145f, 0.858887f, 0.868164f, 0.878906f, 0.888184f, 0.897949f,
- 0.906250f, 0.914551f, 0.960938f, 0.960938f, 0.959473f, 0.957520f, 0.955078f, 0.953125f,
- 0.003084f, 0.009521f, 0.016144f, 0.023346f, 0.031204f, 0.039520f, 0.048523f, 0.057953f,
- 0.068359f, 0.079895f, 0.091309f, 0.104126f, 0.117920f, 0.132324f, 0.147949f, 0.164062f,
- 0.181396f, 0.199219f, 0.218872f, 0.238403f, 0.258545f, 0.279541f, 0.301758f, 0.323486f,
- 0.346191f, 0.368408f, 0.391846f, 0.414795f, 0.437256f, 0.460693f, 0.483643f, 0.505371f,
- 0.527832f, 0.550293f, 0.571289f, 0.591797f, 0.612305f, 0.632324f, 0.651855f, 0.670898f,
- 0.687500f, 0.705566f, 0.722168f, 0.737793f, 0.753418f, 0.768555f, 0.783691f, 0.796875f,
- 0.811035f, 0.823242f, 0.834473f, 0.846191f, 0.857422f, 0.868652f, 0.878418f, 0.887695f,
- 0.897949f, 0.906250f, 0.958008f, 0.958008f, 0.957031f, 0.954590f, 0.952637f, 0.950684f,
- 0.002666f, 0.008293f, 0.014297f, 0.021225f, 0.027847f, 0.035156f, 0.043274f, 0.051666f,
- 0.060791f, 0.070801f, 0.081543f, 0.092407f, 0.104858f, 0.118530f, 0.131836f, 0.146606f,
- 0.162598f, 0.179443f, 0.196777f, 0.215210f, 0.234375f, 0.254150f, 0.274414f, 0.295898f,
- 0.317871f, 0.340088f, 0.362549f, 0.385010f, 0.407959f, 0.430664f, 0.454590f, 0.476562f,
- 0.499268f, 0.521484f, 0.543945f, 0.564941f, 0.585938f, 0.606934f, 0.626465f, 0.646484f,
- 0.665527f, 0.683594f, 0.701660f, 0.717773f, 0.735352f, 0.751465f, 0.766113f, 0.781738f,
- 0.794922f, 0.808105f, 0.821289f, 0.833496f, 0.846191f, 0.857910f, 0.868164f, 0.878906f,
- 0.889160f, 0.899414f, 0.954102f, 0.955566f, 0.953613f, 0.952148f, 0.950195f, 0.948730f,
- 0.002396f, 0.007427f, 0.012978f, 0.018646f, 0.025024f, 0.031403f, 0.038788f, 0.046112f,
- 0.054260f, 0.063354f, 0.072693f, 0.082886f, 0.093689f, 0.105469f, 0.118164f, 0.130859f,
- 0.145996f, 0.161011f, 0.177124f, 0.193359f, 0.211670f, 0.230225f, 0.249634f, 0.270020f,
- 0.290771f, 0.311768f, 0.333740f, 0.356201f, 0.378906f, 0.401855f, 0.424561f, 0.447754f,
- 0.470215f, 0.493408f, 0.515137f, 0.537109f, 0.559570f, 0.580078f, 0.601074f, 0.621582f,
- 0.642090f, 0.661621f, 0.679688f, 0.697754f, 0.715820f, 0.732422f, 0.749512f, 0.765137f,
- 0.779785f, 0.794434f, 0.808594f, 0.821289f, 0.833496f, 0.846191f, 0.857910f, 0.869141f,
- 0.879883f, 0.889648f, 0.950195f, 0.952637f, 0.950684f, 0.948730f, 0.947266f, 0.945801f,
- 0.002029f, 0.006672f, 0.011658f, 0.016937f, 0.022476f, 0.028305f, 0.034332f, 0.041351f,
- 0.048584f, 0.056671f, 0.064697f, 0.073853f, 0.083923f, 0.094482f, 0.105225f, 0.117798f,
- 0.130615f, 0.144287f, 0.159302f, 0.174683f, 0.190430f, 0.208740f, 0.226318f, 0.245483f,
- 0.264893f, 0.285400f, 0.307129f, 0.328369f, 0.350342f, 0.372803f, 0.395264f, 0.418701f,
- 0.441650f, 0.462891f, 0.486816f, 0.509277f, 0.532227f, 0.553711f, 0.575684f, 0.596680f,
- 0.617676f, 0.638672f, 0.657715f, 0.676758f, 0.695312f, 0.712402f, 0.729492f, 0.746582f,
- 0.762695f, 0.778320f, 0.793457f, 0.807129f, 0.820801f, 0.833984f, 0.846191f, 0.858887f,
- 0.869629f, 0.881836f, 0.947266f, 0.949219f, 0.947754f, 0.946289f, 0.944824f, 0.942871f,
- 0.002142f, 0.006401f, 0.010841f, 0.015251f, 0.019760f, 0.025055f, 0.031113f, 0.037201f,
- 0.043671f, 0.050598f, 0.057892f, 0.066101f, 0.075012f, 0.084351f, 0.093994f, 0.105164f,
- 0.117432f, 0.129517f, 0.142822f, 0.157104f, 0.172119f, 0.188110f, 0.204956f, 0.223145f,
- 0.241577f, 0.260498f, 0.280762f, 0.301758f, 0.322998f, 0.345215f, 0.366943f, 0.389893f,
- 0.412842f, 0.435791f, 0.458008f, 0.482178f, 0.504395f, 0.526855f, 0.548828f, 0.571289f,
- 0.592285f, 0.612793f, 0.634277f, 0.654297f, 0.673340f, 0.692383f, 0.710938f, 0.729004f,
- 0.745117f, 0.762207f, 0.777832f, 0.792480f, 0.807129f, 0.821289f, 0.834961f, 0.847168f,
- 0.859863f, 0.871582f, 0.943359f, 0.946289f, 0.944824f, 0.943359f, 0.941895f, 0.940430f,
- 0.001760f, 0.005562f, 0.009621f, 0.013710f, 0.018417f, 0.022736f, 0.027939f, 0.033264f,
- 0.039185f, 0.045166f, 0.052460f, 0.059143f, 0.067261f, 0.075745f, 0.084106f, 0.094177f,
- 0.104980f, 0.116455f, 0.128174f, 0.141113f, 0.155151f, 0.169922f, 0.184937f, 0.201660f,
- 0.219238f, 0.237549f, 0.256348f, 0.276367f, 0.296875f, 0.317871f, 0.339844f, 0.361572f,
- 0.383789f, 0.407227f, 0.430908f, 0.453857f, 0.476807f, 0.498779f, 0.521973f, 0.543945f,
- 0.567383f, 0.589355f, 0.609863f, 0.631348f, 0.651855f, 0.671875f, 0.690918f, 0.709961f,
- 0.727539f, 0.744141f, 0.761719f, 0.777344f, 0.793457f, 0.808594f, 0.823242f, 0.835449f,
- 0.848633f, 0.861328f, 0.938965f, 0.941895f, 0.941406f, 0.940430f, 0.938477f, 0.937012f,
- 0.001594f, 0.005283f, 0.008789f, 0.012383f, 0.016342f, 0.020523f, 0.025284f, 0.029968f,
- 0.035217f, 0.040741f, 0.046417f, 0.052948f, 0.060120f, 0.067566f, 0.076294f, 0.084534f,
- 0.093750f, 0.104614f, 0.115173f, 0.126831f, 0.139160f, 0.152832f, 0.166748f, 0.181885f,
- 0.198853f, 0.215698f, 0.233521f, 0.252197f, 0.271973f, 0.291992f, 0.313477f, 0.334717f,
- 0.357178f, 0.379395f, 0.401855f, 0.425537f, 0.448242f, 0.471924f, 0.495361f, 0.517578f,
- 0.541016f, 0.562988f, 0.585938f, 0.607422f, 0.627930f, 0.649414f, 0.670410f, 0.688965f,
- 0.708496f, 0.727539f, 0.744629f, 0.761719f, 0.778809f, 0.794922f, 0.809082f, 0.824219f,
- 0.838379f, 0.851074f, 0.935059f, 0.938965f, 0.937988f, 0.937012f, 0.936035f, 0.933594f,
- 0.001564f, 0.004665f, 0.007973f, 0.011276f, 0.014908f, 0.018600f, 0.022675f, 0.027176f,
- 0.031464f, 0.036621f, 0.042023f, 0.047974f, 0.054108f, 0.060822f, 0.068237f, 0.075684f,
- 0.084229f, 0.093567f, 0.103210f, 0.113892f, 0.125000f, 0.137329f, 0.150269f, 0.164307f,
- 0.179810f, 0.194946f, 0.212158f, 0.229248f, 0.247925f, 0.267578f, 0.287842f, 0.308350f,
- 0.330322f, 0.352051f, 0.374756f, 0.397461f, 0.420654f, 0.444092f, 0.466797f, 0.490723f,
- 0.514160f, 0.537109f, 0.560059f, 0.582031f, 0.604980f, 0.626953f, 0.648926f, 0.668457f,
- 0.688477f, 0.708008f, 0.727539f, 0.745117f, 0.763672f, 0.779297f, 0.795410f, 0.811523f,
- 0.826660f, 0.840332f, 0.930664f, 0.934570f, 0.934082f, 0.933594f, 0.932129f, 0.930664f,
- 0.001424f, 0.004261f, 0.007122f, 0.010239f, 0.013374f, 0.016693f, 0.020401f, 0.024368f,
- 0.028595f, 0.033325f, 0.037964f, 0.043152f, 0.048340f, 0.054962f, 0.060730f, 0.067749f,
- 0.075684f, 0.083862f, 0.092041f, 0.102051f, 0.112305f, 0.123657f, 0.135376f, 0.148071f,
- 0.161987f, 0.176270f, 0.192139f, 0.208252f, 0.226196f, 0.244141f, 0.263672f, 0.283447f,
- 0.304199f, 0.325195f, 0.346924f, 0.370605f, 0.392822f, 0.416260f, 0.439209f, 0.463623f,
- 0.486084f, 0.511230f, 0.534180f, 0.558105f, 0.580566f, 0.603516f, 0.625000f, 0.647461f,
- 0.668457f, 0.688965f, 0.708496f, 0.727539f, 0.746582f, 0.764160f, 0.781738f, 0.798340f,
- 0.813477f, 0.829590f, 0.926758f, 0.931152f, 0.930664f, 0.929199f, 0.928223f, 0.927246f,
- 0.001294f, 0.004196f, 0.006538f, 0.009346f, 0.012306f, 0.015335f, 0.018845f, 0.022003f,
- 0.025558f, 0.029816f, 0.034149f, 0.038605f, 0.043915f, 0.049042f, 0.054810f, 0.061188f,
- 0.067993f, 0.075256f, 0.083130f, 0.091553f, 0.100769f, 0.110779f, 0.121643f, 0.133057f,
- 0.145630f, 0.159058f, 0.173218f, 0.188721f, 0.204590f, 0.222290f, 0.240234f, 0.259277f,
- 0.279053f, 0.299561f, 0.321533f, 0.343506f, 0.365723f, 0.389404f, 0.412354f, 0.436035f,
- 0.459961f, 0.484131f, 0.508301f, 0.532227f, 0.555176f, 0.579102f, 0.601562f, 0.624512f,
- 0.646484f, 0.668457f, 0.688965f, 0.709473f, 0.729004f, 0.748047f, 0.766602f, 0.784668f,
- 0.800293f, 0.817383f, 0.921875f, 0.926270f, 0.926270f, 0.925781f, 0.924316f, 0.923340f,
- 0.001081f, 0.003603f, 0.006027f, 0.008575f, 0.010979f, 0.013847f, 0.016937f, 0.020020f,
- 0.023315f, 0.026917f, 0.030930f, 0.035156f, 0.039429f, 0.044098f, 0.049622f, 0.054779f,
- 0.060791f, 0.067566f, 0.074341f, 0.082336f, 0.090515f, 0.099548f, 0.109070f, 0.119263f,
- 0.130981f, 0.143188f, 0.156250f, 0.170288f, 0.185303f, 0.201294f, 0.218262f, 0.236450f,
- 0.255615f, 0.275391f, 0.295654f, 0.316895f, 0.339111f, 0.362061f, 0.385498f, 0.408936f,
- 0.432861f, 0.457275f, 0.481689f, 0.505371f, 0.529785f, 0.553711f, 0.577637f, 0.601074f,
- 0.624023f, 0.646484f, 0.669434f, 0.689941f, 0.711426f, 0.731445f, 0.750977f, 0.770020f,
- 0.787598f, 0.804688f, 0.916992f, 0.922363f, 0.922363f, 0.921875f, 0.920898f, 0.918945f,
- 0.001064f, 0.003231f, 0.005322f, 0.007710f, 0.010323f, 0.012489f, 0.015244f, 0.018051f,
- 0.020798f, 0.024338f, 0.027893f, 0.031738f, 0.035553f, 0.039795f, 0.044495f, 0.049133f,
- 0.054657f, 0.060608f, 0.066895f, 0.073792f, 0.081421f, 0.089050f, 0.097717f, 0.106934f,
- 0.117554f, 0.128540f, 0.140503f, 0.153442f, 0.167236f, 0.182129f, 0.197998f, 0.214966f,
- 0.232422f, 0.251465f, 0.271240f, 0.291992f, 0.313232f, 0.335693f, 0.358643f, 0.382080f,
- 0.406006f, 0.430176f, 0.454590f, 0.479004f, 0.503906f, 0.528320f, 0.552734f, 0.577637f,
- 0.601562f, 0.625000f, 0.648438f, 0.670898f, 0.691895f, 0.713867f, 0.733887f, 0.754883f,
- 0.774414f, 0.791992f, 0.912109f, 0.917969f, 0.918457f, 0.916992f, 0.916016f, 0.915039f,
- 0.000998f, 0.003012f, 0.005123f, 0.007114f, 0.009438f, 0.011360f, 0.013763f, 0.016510f,
- 0.018951f, 0.022171f, 0.025101f, 0.028305f, 0.031830f, 0.035736f, 0.039795f, 0.044067f,
- 0.048950f, 0.053864f, 0.059601f, 0.066345f, 0.072815f, 0.079956f, 0.087402f, 0.096375f,
- 0.105835f, 0.115479f, 0.126343f, 0.138184f, 0.150635f, 0.164062f, 0.178711f, 0.194214f,
- 0.210815f, 0.229004f, 0.247314f, 0.267090f, 0.288330f, 0.309570f, 0.332275f, 0.355469f,
- 0.378418f, 0.402832f, 0.427490f, 0.452637f, 0.477783f, 0.501953f, 0.527832f, 0.552734f,
- 0.577637f, 0.602051f, 0.626465f, 0.649902f, 0.672852f, 0.695312f, 0.717773f, 0.737793f,
- 0.758789f, 0.778809f, 0.906250f, 0.913086f, 0.913574f, 0.912598f, 0.911621f, 0.910645f,
- 0.001059f, 0.002985f, 0.004475f, 0.006496f, 0.008545f, 0.010300f, 0.012581f, 0.014969f,
- 0.017471f, 0.019852f, 0.022507f, 0.025864f, 0.028824f, 0.032135f, 0.036041f, 0.039795f,
- 0.043884f, 0.048706f, 0.053680f, 0.059113f, 0.064819f, 0.071472f, 0.078491f, 0.086365f,
- 0.094360f, 0.103577f, 0.113403f, 0.124023f, 0.135620f, 0.147705f, 0.160889f, 0.175537f,
- 0.191284f, 0.207764f, 0.225464f, 0.244263f, 0.264160f, 0.284912f, 0.306641f, 0.329102f,
- 0.352295f, 0.376465f, 0.400635f, 0.426025f, 0.451416f, 0.476562f, 0.502930f, 0.527344f,
- 0.553711f, 0.579102f, 0.603027f, 0.627930f, 0.652344f, 0.675781f, 0.700195f, 0.722168f,
- 0.742676f, 0.764648f, 0.901367f, 0.907715f, 0.908691f, 0.908203f, 0.907227f, 0.906250f,
- 0.000988f, 0.002577f, 0.004124f, 0.006042f, 0.007603f, 0.009506f, 0.011299f, 0.013680f,
- 0.015778f, 0.017883f, 0.020554f, 0.023102f, 0.025940f, 0.028946f, 0.031891f, 0.035431f,
- 0.039825f, 0.043671f, 0.048157f, 0.053009f, 0.058075f, 0.063782f, 0.069885f, 0.077087f,
- 0.084839f, 0.092712f, 0.101379f, 0.110779f, 0.121155f, 0.132446f, 0.144775f, 0.157837f,
- 0.172363f, 0.187744f, 0.204590f, 0.222290f, 0.240601f, 0.260254f, 0.281494f, 0.303223f,
- 0.325439f, 0.349609f, 0.373535f, 0.399170f, 0.424561f, 0.450439f, 0.475586f, 0.501953f,
- 0.528320f, 0.554688f, 0.580566f, 0.605957f, 0.630859f, 0.656250f, 0.680176f, 0.704102f,
- 0.727051f, 0.749512f, 0.895508f, 0.902344f, 0.903320f, 0.902832f, 0.901855f, 0.901855f,
- 0.000842f, 0.002253f, 0.003597f, 0.005352f, 0.007195f, 0.008804f, 0.010460f, 0.012100f,
- 0.014130f, 0.016281f, 0.018341f, 0.021057f, 0.023193f, 0.025742f, 0.029022f, 0.031830f,
- 0.035278f, 0.039246f, 0.042999f, 0.047211f, 0.052032f, 0.056946f, 0.062744f, 0.068848f,
- 0.075195f, 0.082642f, 0.090332f, 0.099060f, 0.108215f, 0.118469f, 0.129517f, 0.141724f,
- 0.154907f, 0.169434f, 0.184448f, 0.201172f, 0.218506f, 0.237427f, 0.257324f, 0.278320f,
- 0.300293f, 0.323242f, 0.347412f, 0.372070f, 0.397217f, 0.423340f, 0.449707f, 0.476807f,
- 0.502930f, 0.529785f, 0.556641f, 0.582520f, 0.609863f, 0.635254f, 0.660645f, 0.686035f,
- 0.710938f, 0.733887f, 0.889648f, 0.897461f, 0.898926f, 0.896973f, 0.896973f, 0.896484f,
- 0.000660f, 0.002014f, 0.003531f, 0.004951f, 0.006424f, 0.007935f, 0.009392f, 0.011322f,
- 0.012924f, 0.014824f, 0.016754f, 0.018906f, 0.020935f, 0.023376f, 0.026245f, 0.028809f,
- 0.031860f, 0.034821f, 0.038330f, 0.042236f, 0.046387f, 0.050812f, 0.056061f, 0.061279f,
- 0.066956f, 0.073547f, 0.080566f, 0.088074f, 0.096802f, 0.106079f, 0.116089f, 0.127075f,
- 0.138672f, 0.151855f, 0.165649f, 0.180908f, 0.197754f, 0.215332f, 0.234375f, 0.254150f,
- 0.275391f, 0.298096f, 0.321533f, 0.344971f, 0.370361f, 0.396973f, 0.422852f, 0.449219f,
- 0.477295f, 0.504395f, 0.532227f, 0.558594f, 0.586914f, 0.614258f, 0.640625f, 0.666016f,
- 0.692871f, 0.718262f, 0.882812f, 0.891602f, 0.892578f, 0.892090f, 0.892090f, 0.890625f,
- 0.000623f, 0.002073f, 0.003298f, 0.004292f, 0.005589f, 0.007401f, 0.008377f, 0.010315f,
- 0.011871f, 0.013596f, 0.015213f, 0.016632f, 0.018829f, 0.020920f, 0.023239f, 0.025726f,
- 0.028381f, 0.031250f, 0.034241f, 0.037781f, 0.041473f, 0.045349f, 0.049469f, 0.054199f,
- 0.059448f, 0.065186f, 0.071716f, 0.078613f, 0.085999f, 0.093872f, 0.103516f, 0.112976f,
- 0.123840f, 0.135620f, 0.148804f, 0.162720f, 0.178223f, 0.194824f, 0.212280f, 0.231079f,
- 0.251953f, 0.273193f, 0.295410f, 0.319580f, 0.343994f, 0.370117f, 0.396729f, 0.422852f,
- 0.450684f, 0.478516f, 0.507324f, 0.534668f, 0.562988f, 0.591797f, 0.619629f, 0.646484f,
- 0.674316f, 0.700195f, 0.875488f, 0.885254f, 0.886719f, 0.886719f, 0.885742f, 0.885254f,
- 0.000583f, 0.001746f, 0.002840f, 0.004143f, 0.005234f, 0.006516f, 0.007835f, 0.009460f,
- 0.010788f, 0.012062f, 0.013428f, 0.015053f, 0.017349f, 0.018753f, 0.021271f, 0.023163f,
- 0.025284f, 0.027924f, 0.030655f, 0.033478f, 0.036957f, 0.040527f, 0.044037f, 0.048309f,
- 0.053223f, 0.058319f, 0.063660f, 0.069763f, 0.076172f, 0.083679f, 0.091431f, 0.100647f,
- 0.110229f, 0.120667f, 0.132690f, 0.145386f, 0.159668f, 0.174805f, 0.191284f, 0.208984f,
- 0.228516f, 0.248535f, 0.270996f, 0.293701f, 0.317383f, 0.342529f, 0.369629f, 0.396240f,
- 0.424072f, 0.452148f, 0.480957f, 0.509277f, 0.539551f, 0.567871f, 0.596680f, 0.625977f,
- 0.654785f, 0.682129f, 0.868652f, 0.878906f, 0.880371f, 0.879883f, 0.879883f, 0.879395f,
- 0.000535f, 0.001538f, 0.002930f, 0.003725f, 0.004986f, 0.005920f, 0.006973f, 0.008247f,
- 0.009575f, 0.010841f, 0.012115f, 0.013550f, 0.015343f, 0.016983f, 0.018814f, 0.020523f,
- 0.022568f, 0.024887f, 0.027206f, 0.029907f, 0.032959f, 0.035828f, 0.039185f, 0.042877f,
- 0.046967f, 0.051605f, 0.056213f, 0.061432f, 0.067749f, 0.073730f, 0.081238f, 0.089111f,
- 0.097656f, 0.107300f, 0.118042f, 0.129883f, 0.142334f, 0.156250f, 0.171875f, 0.187866f,
- 0.206665f, 0.225708f, 0.246704f, 0.268799f, 0.291992f, 0.316650f, 0.342529f, 0.369629f,
- 0.397217f, 0.425537f, 0.454590f, 0.484131f, 0.513672f, 0.544434f, 0.574219f, 0.604492f,
- 0.633789f, 0.664062f, 0.861328f, 0.871582f, 0.873535f, 0.874512f, 0.873047f, 0.872559f,
- 0.000581f, 0.001668f, 0.002563f, 0.003471f, 0.004494f, 0.005562f, 0.006580f, 0.007782f,
- 0.008690f, 0.009766f, 0.011261f, 0.012314f, 0.013901f, 0.014969f, 0.016479f, 0.018265f,
- 0.020294f, 0.022156f, 0.024353f, 0.026505f, 0.029053f, 0.031799f, 0.034607f, 0.037964f,
- 0.041382f, 0.045471f, 0.049591f, 0.054047f, 0.059326f, 0.065186f, 0.071411f, 0.078735f,
- 0.086304f, 0.094971f, 0.104126f, 0.114807f, 0.126587f, 0.138916f, 0.153564f, 0.169067f,
- 0.185669f, 0.203613f, 0.223389f, 0.244629f, 0.266602f, 0.291260f, 0.316406f, 0.342773f,
- 0.370361f, 0.398926f, 0.427734f, 0.458008f, 0.488770f, 0.520020f, 0.550293f, 0.582031f,
- 0.613281f, 0.645020f, 0.854004f, 0.865234f, 0.866699f, 0.867188f, 0.866699f, 0.866699f,
- 0.000571f, 0.001365f, 0.002483f, 0.003033f, 0.004120f, 0.005054f, 0.005981f, 0.006737f,
- 0.007603f, 0.008675f, 0.009789f, 0.011078f, 0.012413f, 0.013626f, 0.014908f, 0.016174f,
- 0.017792f, 0.019699f, 0.021591f, 0.023499f, 0.025635f, 0.028000f, 0.030533f, 0.033417f,
- 0.036499f, 0.039948f, 0.043762f, 0.047943f, 0.052460f, 0.057465f, 0.062622f, 0.068848f,
- 0.076111f, 0.083557f, 0.092102f, 0.101562f, 0.111816f, 0.123230f, 0.135864f, 0.150024f,
- 0.165771f, 0.182373f, 0.200806f, 0.221191f, 0.242920f, 0.265869f, 0.290283f, 0.316406f,
- 0.343262f, 0.371582f, 0.400879f, 0.431396f, 0.463623f, 0.494629f, 0.526367f, 0.558105f,
- 0.591309f, 0.624023f, 0.845215f, 0.856934f, 0.859375f, 0.859375f, 0.859863f, 0.860352f,
- 0.000411f, 0.001296f, 0.002012f, 0.002808f, 0.003754f, 0.004543f, 0.005215f, 0.006012f,
- 0.006725f, 0.007851f, 0.008888f, 0.009979f, 0.010994f, 0.012009f, 0.013062f, 0.014549f,
- 0.016113f, 0.017441f, 0.019073f, 0.020767f, 0.022598f, 0.024689f, 0.026764f, 0.029358f,
- 0.032043f, 0.034760f, 0.038391f, 0.041779f, 0.045380f, 0.050110f, 0.055054f, 0.060394f,
- 0.066650f, 0.073120f, 0.080688f, 0.089233f, 0.098450f, 0.108582f, 0.120178f, 0.133057f,
- 0.146973f, 0.162354f, 0.179565f, 0.198364f, 0.218750f, 0.240967f, 0.264648f, 0.290039f,
- 0.316650f, 0.344971f, 0.374023f, 0.404541f, 0.435791f, 0.467773f, 0.500977f, 0.535156f,
- 0.569336f, 0.601562f, 0.836914f, 0.850098f, 0.852051f, 0.852539f, 0.852539f, 0.852051f,
- 0.000408f, 0.001071f, 0.001857f, 0.002573f, 0.003338f, 0.004078f, 0.004692f, 0.005379f,
- 0.006046f, 0.007275f, 0.007957f, 0.008606f, 0.009598f, 0.010864f, 0.011658f, 0.013084f,
- 0.013977f, 0.015366f, 0.016724f, 0.018402f, 0.019669f, 0.021759f, 0.023697f, 0.025726f,
- 0.027954f, 0.030640f, 0.033356f, 0.036530f, 0.039948f, 0.043701f, 0.047791f, 0.052704f,
- 0.057770f, 0.063782f, 0.070129f, 0.077881f, 0.085999f, 0.095337f, 0.105591f, 0.116882f,
- 0.130005f, 0.143921f, 0.159302f, 0.177246f, 0.196411f, 0.217163f, 0.239746f, 0.263916f,
- 0.290039f, 0.317871f, 0.346924f, 0.377441f, 0.408936f, 0.442139f, 0.476074f, 0.509766f,
- 0.545410f, 0.580078f, 0.828613f, 0.841309f, 0.843262f, 0.844238f, 0.843750f, 0.844238f,
- 0.000322f, 0.001009f, 0.001674f, 0.002262f, 0.002949f, 0.003633f, 0.004250f, 0.004780f,
- 0.005478f, 0.006256f, 0.007248f, 0.007919f, 0.008720f, 0.009552f, 0.010277f, 0.011391f,
- 0.012291f, 0.013466f, 0.014786f, 0.015976f, 0.017288f, 0.019043f, 0.020477f, 0.022385f,
- 0.024292f, 0.026276f, 0.029175f, 0.031769f, 0.034546f, 0.037842f, 0.041626f, 0.045868f,
- 0.050293f, 0.055084f, 0.060669f, 0.067688f, 0.074585f, 0.083008f, 0.092102f, 0.102234f,
- 0.113525f, 0.126587f, 0.140869f, 0.156860f, 0.174805f, 0.194214f, 0.215698f, 0.239014f,
- 0.264404f, 0.291016f, 0.320068f, 0.350098f, 0.382080f, 0.414551f, 0.449463f, 0.485107f,
- 0.520996f, 0.557617f, 0.818848f, 0.833496f, 0.836426f, 0.836914f, 0.836426f, 0.835938f,
- 0.000483f, 0.000841f, 0.001632f, 0.002142f, 0.002678f, 0.003359f, 0.003830f, 0.004333f,
- 0.005077f, 0.005527f, 0.006104f, 0.006908f, 0.007675f, 0.008392f, 0.009216f, 0.009789f,
- 0.010880f, 0.011719f, 0.012817f, 0.013809f, 0.015068f, 0.016357f, 0.017883f, 0.019485f,
- 0.021271f, 0.022995f, 0.025162f, 0.027359f, 0.029755f, 0.032806f, 0.036133f, 0.039459f,
- 0.043091f, 0.047821f, 0.052368f, 0.058258f, 0.064514f, 0.071472f, 0.079224f, 0.088623f,
- 0.098694f, 0.109924f, 0.123230f, 0.137817f, 0.154053f, 0.172363f, 0.192261f, 0.214478f,
- 0.238647f, 0.265137f, 0.292725f, 0.322998f, 0.354492f, 0.387695f, 0.422363f, 0.458740f,
- 0.495605f, 0.533691f, 0.809570f, 0.824219f, 0.826660f, 0.827148f, 0.828125f, 0.827148f,
- 0.000240f, 0.000906f, 0.001379f, 0.001807f, 0.002495f, 0.002916f, 0.003490f, 0.004139f,
- 0.004471f, 0.004898f, 0.005638f, 0.005978f, 0.006874f, 0.007313f, 0.007957f, 0.008698f,
- 0.009560f, 0.010178f, 0.011345f, 0.012177f, 0.012985f, 0.014214f, 0.015274f, 0.016708f,
- 0.017929f, 0.019882f, 0.021393f, 0.023560f, 0.025406f, 0.028137f, 0.030472f, 0.033752f,
- 0.036896f, 0.040619f, 0.044952f, 0.049622f, 0.055298f, 0.061249f, 0.068420f, 0.075928f,
- 0.084900f, 0.095398f, 0.107300f, 0.119934f, 0.134766f, 0.151733f, 0.170410f, 0.191284f,
- 0.213867f, 0.238647f, 0.265869f, 0.295654f, 0.326660f, 0.359863f, 0.394775f, 0.432129f,
- 0.469482f, 0.508789f, 0.798340f, 0.814941f, 0.817871f, 0.818359f, 0.818848f, 0.818848f,
- 0.000376f, 0.000870f, 0.001291f, 0.001619f, 0.002251f, 0.002520f, 0.003016f, 0.003502f,
- 0.004036f, 0.004299f, 0.004723f, 0.005234f, 0.005840f, 0.006512f, 0.006908f, 0.007595f,
- 0.008003f, 0.008797f, 0.009773f, 0.010536f, 0.011284f, 0.012161f, 0.013237f, 0.014465f,
- 0.015579f, 0.016968f, 0.018402f, 0.019882f, 0.021759f, 0.023621f, 0.026138f, 0.028488f,
- 0.031738f, 0.034668f, 0.038239f, 0.042389f, 0.046783f, 0.052094f, 0.058319f, 0.064941f,
- 0.072815f, 0.081726f, 0.092102f, 0.103516f, 0.117188f, 0.132202f, 0.149048f, 0.168091f,
- 0.189941f, 0.213745f, 0.239990f, 0.268311f, 0.299316f, 0.332275f, 0.367188f, 0.403076f,
- 0.442871f, 0.483398f, 0.788086f, 0.805176f, 0.808105f, 0.808594f, 0.809082f, 0.809082f,
- 0.000386f, 0.000765f, 0.000998f, 0.001537f, 0.001833f, 0.002407f, 0.002529f, 0.003113f,
- 0.003334f, 0.003841f, 0.004192f, 0.004585f, 0.005096f, 0.005543f, 0.006073f, 0.006405f,
- 0.007118f, 0.007641f, 0.008278f, 0.008957f, 0.009651f, 0.010498f, 0.011307f, 0.012184f,
- 0.013199f, 0.014343f, 0.015671f, 0.016678f, 0.018585f, 0.019852f, 0.021881f, 0.023987f,
- 0.026398f, 0.029099f, 0.032227f, 0.035339f, 0.039246f, 0.043915f, 0.048859f, 0.054688f,
- 0.061554f, 0.069519f, 0.078247f, 0.088379f, 0.100037f, 0.113770f, 0.129272f, 0.146606f,
- 0.166626f, 0.189575f, 0.214111f, 0.241577f, 0.271973f, 0.304199f, 0.339844f, 0.375977f,
- 0.415527f, 0.457275f, 0.776855f, 0.794434f, 0.797363f, 0.797852f, 0.798828f, 0.799316f,
- 0.000232f, 0.000636f, 0.000996f, 0.001201f, 0.001721f, 0.002029f, 0.002340f, 0.002802f,
- 0.003012f, 0.003462f, 0.003693f, 0.004059f, 0.004295f, 0.004822f, 0.005077f, 0.005623f,
- 0.006126f, 0.006653f, 0.007027f, 0.007561f, 0.008049f, 0.008904f, 0.009399f, 0.010300f,
- 0.011200f, 0.012115f, 0.013092f, 0.014221f, 0.015671f, 0.016891f, 0.018433f, 0.020294f,
- 0.022064f, 0.024277f, 0.026688f, 0.029678f, 0.032654f, 0.036499f, 0.040955f, 0.045715f,
- 0.051514f, 0.058014f, 0.065674f, 0.074707f, 0.084717f, 0.096802f, 0.111023f, 0.126709f,
- 0.144775f, 0.165771f, 0.189209f, 0.215820f, 0.244385f, 0.275879f, 0.310547f, 0.348145f,
- 0.387695f, 0.429932f, 0.765137f, 0.783203f, 0.787109f, 0.788574f, 0.788574f, 0.789551f,
- 0.000171f, 0.000518f, 0.001106f, 0.001242f, 0.001475f, 0.001939f, 0.002092f, 0.002254f,
- 0.002607f, 0.002930f, 0.003084f, 0.003382f, 0.003674f, 0.004040f, 0.004395f, 0.004780f,
- 0.005157f, 0.005653f, 0.006088f, 0.006355f, 0.006870f, 0.007420f, 0.008057f, 0.008667f,
- 0.009361f, 0.010040f, 0.011101f, 0.011803f, 0.012711f, 0.013962f, 0.015343f, 0.016586f,
- 0.018036f, 0.020142f, 0.022079f, 0.024399f, 0.027023f, 0.030075f, 0.033569f, 0.037750f,
- 0.042603f, 0.048096f, 0.054718f, 0.062134f, 0.071045f, 0.081299f, 0.093445f, 0.107605f,
- 0.124268f, 0.142944f, 0.165405f, 0.189941f, 0.218262f, 0.249268f, 0.282227f, 0.319336f,
- 0.359375f, 0.402832f, 0.752930f, 0.771973f, 0.775879f, 0.776855f, 0.777832f, 0.777832f,
- 0.000204f, 0.000608f, 0.000865f, 0.001011f, 0.001362f, 0.001632f, 0.001817f, 0.001930f,
- 0.002274f, 0.002491f, 0.002796f, 0.002932f, 0.003139f, 0.003429f, 0.003736f, 0.004055f,
- 0.004448f, 0.004829f, 0.004971f, 0.005497f, 0.005859f, 0.006298f, 0.006741f, 0.007080f,
- 0.007687f, 0.008308f, 0.009087f, 0.009880f, 0.010735f, 0.011528f, 0.012375f, 0.013664f,
- 0.014862f, 0.016464f, 0.017868f, 0.019852f, 0.022156f, 0.024490f, 0.027435f, 0.030853f,
- 0.034637f, 0.039154f, 0.044495f, 0.050964f, 0.058441f, 0.067383f, 0.077759f, 0.090332f,
- 0.104797f, 0.121826f, 0.142334f, 0.164795f, 0.191528f, 0.221313f, 0.254150f, 0.290771f,
- 0.330078f, 0.374268f, 0.740234f, 0.759277f, 0.763672f, 0.766113f, 0.766602f, 0.766113f,
- 0.000150f, 0.000514f, 0.000666f, 0.000865f, 0.001163f, 0.001389f, 0.001540f, 0.001672f,
- 0.001940f, 0.002110f, 0.002302f, 0.002419f, 0.002745f, 0.002974f, 0.003120f, 0.003366f,
- 0.003695f, 0.003815f, 0.004173f, 0.004574f, 0.004879f, 0.005165f, 0.005646f, 0.006058f,
- 0.006481f, 0.006969f, 0.007626f, 0.007881f, 0.008751f, 0.009445f, 0.010231f, 0.011246f,
- 0.012222f, 0.013268f, 0.014641f, 0.015976f, 0.017792f, 0.019867f, 0.021912f, 0.024704f,
- 0.027786f, 0.031494f, 0.036011f, 0.041229f, 0.047363f, 0.054962f, 0.063904f, 0.074463f,
- 0.087036f, 0.102295f, 0.120483f, 0.141113f, 0.166260f, 0.194214f, 0.226196f, 0.261719f,
- 0.301514f, 0.345459f, 0.727051f, 0.747070f, 0.751953f, 0.753418f, 0.754395f, 0.754883f,
- 0.000103f, 0.000251f, 0.000628f, 0.000912f, 0.000978f, 0.001191f, 0.001365f, 0.001507f,
- 0.001513f, 0.001757f, 0.001980f, 0.002121f, 0.002316f, 0.002373f, 0.002645f, 0.002909f,
- 0.003012f, 0.003305f, 0.003538f, 0.003775f, 0.004070f, 0.004246f, 0.004642f, 0.004986f,
- 0.005394f, 0.005802f, 0.006031f, 0.006565f, 0.006969f, 0.007618f, 0.008293f, 0.008980f,
- 0.009766f, 0.010612f, 0.011528f, 0.012802f, 0.014198f, 0.015671f, 0.017517f, 0.019592f,
- 0.021957f, 0.024918f, 0.028442f, 0.032562f, 0.037567f, 0.043762f, 0.051025f, 0.059753f,
- 0.071045f, 0.084412f, 0.099792f, 0.119385f, 0.141846f, 0.167969f, 0.199341f, 0.233521f,
- 0.272461f, 0.315674f, 0.712891f, 0.733887f, 0.738770f, 0.740234f, 0.741211f, 0.741699f,
- 0.000185f, 0.000434f, 0.000489f, 0.000732f, 0.000874f, 0.000968f, 0.001122f, 0.001124f,
- 0.001371f, 0.001423f, 0.001639f, 0.001693f, 0.001805f, 0.002094f, 0.002241f, 0.002356f,
- 0.002567f, 0.002691f, 0.002871f, 0.003063f, 0.003195f, 0.003582f, 0.003790f, 0.004089f,
- 0.004372f, 0.004536f, 0.005085f, 0.005314f, 0.005699f, 0.006153f, 0.006672f, 0.007202f,
- 0.007805f, 0.008522f, 0.009216f, 0.010071f, 0.011086f, 0.012184f, 0.013596f, 0.015297f,
- 0.017014f, 0.019363f, 0.021988f, 0.025299f, 0.029282f, 0.033936f, 0.040070f, 0.047028f,
- 0.056519f, 0.067932f, 0.080872f, 0.098083f, 0.118469f, 0.143188f, 0.171753f, 0.205200f,
- 0.243286f, 0.286133f, 0.698730f, 0.721680f, 0.725098f, 0.727051f, 0.728027f, 0.728516f,
- 0.000116f, 0.000267f, 0.000565f, 0.000505f, 0.000648f, 0.000772f, 0.000813f, 0.001031f,
- 0.001107f, 0.001184f, 0.001335f, 0.001391f, 0.001451f, 0.001633f, 0.001798f, 0.001874f,
- 0.002090f, 0.002192f, 0.002392f, 0.002464f, 0.002707f, 0.002895f, 0.003044f, 0.003206f,
- 0.003468f, 0.003666f, 0.003887f, 0.004261f, 0.004524f, 0.004898f, 0.005379f, 0.005711f,
- 0.006130f, 0.006721f, 0.007267f, 0.007912f, 0.008659f, 0.009575f, 0.010475f, 0.011749f,
- 0.013252f, 0.014717f, 0.016815f, 0.019302f, 0.022369f, 0.025955f, 0.030502f, 0.036285f,
- 0.043579f, 0.052795f, 0.064453f, 0.078735f, 0.096497f, 0.118591f, 0.145508f, 0.177368f,
- 0.213989f, 0.256592f, 0.683105f, 0.707031f, 0.710938f, 0.713379f, 0.714844f, 0.714844f,
- 0.000223f, 0.000239f, 0.000286f, 0.000476f, 0.000580f, 0.000647f, 0.000715f, 0.000843f,
- 0.000914f, 0.000950f, 0.001090f, 0.001163f, 0.001259f, 0.001328f, 0.001392f, 0.001560f,
- 0.001549f, 0.001775f, 0.001868f, 0.001999f, 0.002199f, 0.002235f, 0.002436f, 0.002575f,
- 0.002842f, 0.002892f, 0.003111f, 0.003401f, 0.003563f, 0.003887f, 0.004196f, 0.004505f,
- 0.004791f, 0.005142f, 0.005684f, 0.006153f, 0.006710f, 0.007378f, 0.008064f, 0.008881f,
- 0.009979f, 0.011177f, 0.012779f, 0.014435f, 0.016647f, 0.019150f, 0.022583f, 0.027252f,
- 0.033051f, 0.040039f, 0.049561f, 0.061340f, 0.076843f, 0.096313f, 0.120544f, 0.150513f,
- 0.185547f, 0.227173f, 0.668457f, 0.692383f, 0.696289f, 0.698242f, 0.699219f, 0.701172f,
- 0.000000f, 0.000109f, 0.000315f, 0.000449f, 0.000511f, 0.000507f, 0.000538f, 0.000653f,
- 0.000724f, 0.000749f, 0.000830f, 0.000893f, 0.001007f, 0.001079f, 0.001189f, 0.001163f,
- 0.001335f, 0.001307f, 0.001502f, 0.001575f, 0.001627f, 0.001778f, 0.001933f, 0.002029f,
- 0.002155f, 0.002254f, 0.002401f, 0.002535f, 0.002829f, 0.002943f, 0.003143f, 0.003422f,
- 0.003710f, 0.003990f, 0.004318f, 0.004627f, 0.005108f, 0.005585f, 0.006142f, 0.006641f,
- 0.007378f, 0.008354f, 0.009430f, 0.010628f, 0.012123f, 0.014015f, 0.016541f, 0.019836f,
- 0.023849f, 0.029312f, 0.036774f, 0.046356f, 0.058868f, 0.075562f, 0.097107f, 0.124634f,
- 0.157837f, 0.197754f, 0.653320f, 0.677734f, 0.682129f, 0.684082f, 0.685547f, 0.684570f,
- 0.000166f, 0.000195f, 0.000256f, 0.000372f, 0.000386f, 0.000415f, 0.000515f, 0.000432f,
- 0.000579f, 0.000606f, 0.000706f, 0.000745f, 0.000764f, 0.000837f, 0.000853f, 0.000993f,
- 0.001034f, 0.001066f, 0.001156f, 0.001203f, 0.001339f, 0.001418f, 0.001470f, 0.001612f,
- 0.001614f, 0.001707f, 0.001850f, 0.001986f, 0.002151f, 0.002254f, 0.002499f, 0.002560f,
- 0.002794f, 0.003000f, 0.003212f, 0.003510f, 0.003761f, 0.004086f, 0.004475f, 0.004967f,
- 0.005428f, 0.006134f, 0.006840f, 0.007786f, 0.008858f, 0.010033f, 0.011909f, 0.014137f,
- 0.016907f, 0.020767f, 0.025894f, 0.033386f, 0.043274f, 0.056854f, 0.075439f, 0.099548f,
- 0.130737f, 0.169434f, 0.634277f, 0.661133f, 0.667480f, 0.668945f, 0.669922f, 0.670898f,
- 0.000115f, 0.000119f, 0.000230f, 0.000304f, 0.000221f, 0.000380f, 0.000322f, 0.000351f,
- 0.000453f, 0.000527f, 0.000535f, 0.000558f, 0.000595f, 0.000675f, 0.000707f, 0.000670f,
- 0.000776f, 0.000812f, 0.000839f, 0.000911f, 0.000974f, 0.001033f, 0.001082f, 0.001154f,
- 0.001209f, 0.001268f, 0.001416f, 0.001432f, 0.001607f, 0.001775f, 0.001877f, 0.001911f,
- 0.002041f, 0.002207f, 0.002380f, 0.002563f, 0.002741f, 0.002956f, 0.003281f, 0.003513f,
- 0.003902f, 0.004353f, 0.004803f, 0.005405f, 0.006256f, 0.007072f, 0.008263f, 0.009659f,
- 0.011627f, 0.014221f, 0.017792f, 0.022919f, 0.030075f, 0.040497f, 0.055878f, 0.076721f,
- 0.104980f, 0.141357f, 0.618652f, 0.644531f, 0.650391f, 0.652832f, 0.653320f, 0.654785f,
- 0.000000f, 0.000122f, 0.000142f, 0.000227f, 0.000248f, 0.000246f, 0.000296f, 0.000254f,
- 0.000308f, 0.000329f, 0.000387f, 0.000437f, 0.000443f, 0.000504f, 0.000515f, 0.000535f,
- 0.000566f, 0.000592f, 0.000618f, 0.000641f, 0.000706f, 0.000746f, 0.000787f, 0.000839f,
- 0.000878f, 0.000920f, 0.001043f, 0.001041f, 0.001136f, 0.001199f, 0.001258f, 0.001393f,
- 0.001428f, 0.001549f, 0.001632f, 0.001856f, 0.001945f, 0.002079f, 0.002310f, 0.002489f,
- 0.002708f, 0.002996f, 0.003315f, 0.003759f, 0.004177f, 0.004803f, 0.005619f, 0.006527f,
- 0.007793f, 0.009468f, 0.011917f, 0.015152f, 0.019897f, 0.027298f, 0.038910f, 0.055908f,
- 0.080811f, 0.114563f, 0.600586f, 0.628906f, 0.634277f, 0.636719f, 0.637207f, 0.638672f,
- 0.000000f, 0.000000f, 0.000106f, 0.000137f, 0.000172f, 0.000211f, 0.000189f, 0.000226f,
- 0.000230f, 0.000248f, 0.000293f, 0.000251f, 0.000264f, 0.000321f, 0.000343f, 0.000399f,
- 0.000368f, 0.000401f, 0.000499f, 0.000479f, 0.000498f, 0.000526f, 0.000550f, 0.000595f,
- 0.000631f, 0.000645f, 0.000726f, 0.000717f, 0.000786f, 0.000902f, 0.000865f, 0.000916f,
- 0.000989f, 0.001059f, 0.001165f, 0.001246f, 0.001279f, 0.001408f, 0.001566f, 0.001628f,
- 0.001808f, 0.001991f, 0.002165f, 0.002466f, 0.002766f, 0.003084f, 0.003534f, 0.004250f,
- 0.005016f, 0.006130f, 0.007584f, 0.009605f, 0.012718f, 0.017395f, 0.025131f, 0.038269f,
- 0.058899f, 0.089661f, 0.582031f, 0.611328f, 0.616699f, 0.620117f, 0.621094f, 0.622559f,
- 0.000000f, 0.000108f, 0.000104f, 0.000095f, 0.000117f, 0.000117f, 0.000122f, 0.000143f,
- 0.000147f, 0.000164f, 0.000174f, 0.000216f, 0.000191f, 0.000227f, 0.000241f, 0.000250f,
- 0.000257f, 0.000271f, 0.000301f, 0.000298f, 0.000317f, 0.000344f, 0.000370f, 0.000392f,
- 0.000404f, 0.000427f, 0.000491f, 0.000491f, 0.000519f, 0.000535f, 0.000611f, 0.000601f,
- 0.000668f, 0.000698f, 0.000767f, 0.000838f, 0.000865f, 0.000895f, 0.000993f, 0.001066f,
- 0.001161f, 0.001242f, 0.001415f, 0.001521f, 0.001743f, 0.001901f, 0.002209f, 0.002523f,
- 0.003038f, 0.003601f, 0.004478f, 0.005699f, 0.007545f, 0.010437f, 0.015175f, 0.023682f,
- 0.039429f, 0.066406f, 0.563477f, 0.593262f, 0.598633f, 0.602051f, 0.602539f, 0.603516f,
- 0.000000f, 0.000101f, 0.000093f, 0.000087f, 0.000082f, 0.000078f, 0.000084f, 0.000087f,
- 0.000093f, 0.000094f, 0.000099f, 0.000104f, 0.000114f, 0.000123f, 0.000158f, 0.000163f,
- 0.000166f, 0.000178f, 0.000177f, 0.000214f, 0.000191f, 0.000208f, 0.000212f, 0.000247f,
- 0.000268f, 0.000263f, 0.000272f, 0.000287f, 0.000310f, 0.000336f, 0.000353f, 0.000368f,
- 0.000396f, 0.000408f, 0.000453f, 0.000476f, 0.000511f, 0.000540f, 0.000615f, 0.000635f,
- 0.000682f, 0.000751f, 0.000812f, 0.000908f, 0.000987f, 0.001116f, 0.001278f, 0.001431f,
- 0.001702f, 0.002047f, 0.002512f, 0.003126f, 0.004181f, 0.005817f, 0.008553f, 0.013489f,
- 0.023697f, 0.045288f, 0.544922f, 0.575684f, 0.581543f, 0.584473f, 0.585938f, 0.587402f,
- 0.000109f, 0.000091f, 0.000081f, 0.000075f, 0.000070f, 0.000067f, 0.000064f, 0.000061f,
- 0.000057f, 0.000054f, 0.000058f, 0.000075f, 0.000062f, 0.000064f, 0.000085f, 0.000068f,
- 0.000092f, 0.000094f, 0.000103f, 0.000110f, 0.000113f, 0.000119f, 0.000141f, 0.000141f,
- 0.000148f, 0.000152f, 0.000159f, 0.000164f, 0.000175f, 0.000188f, 0.000184f, 0.000218f,
- 0.000233f, 0.000223f, 0.000253f, 0.000265f, 0.000282f, 0.000321f, 0.000322f, 0.000351f,
- 0.000371f, 0.000405f, 0.000443f, 0.000478f, 0.000515f, 0.000571f, 0.000652f, 0.000733f,
- 0.000856f, 0.001011f, 0.001227f, 0.001531f, 0.002029f, 0.002817f, 0.004215f, 0.006874f,
- 0.012390f, 0.027405f, 0.525879f, 0.557129f, 0.563477f, 0.566895f, 0.568848f, 0.569824f,
- 0.000094f, 0.000073f, 0.000065f, 0.000060f, 0.000055f, 0.000052f, 0.000049f, 0.000048f,
- 0.000046f, 0.000045f, 0.000042f, 0.000040f, 0.000040f, 0.000037f, 0.000035f, 0.000035f,
- 0.000042f, 0.000036f, 0.000049f, 0.000051f, 0.000055f, 0.000056f, 0.000059f, 0.000062f,
- 0.000064f, 0.000078f, 0.000071f, 0.000079f, 0.000088f, 0.000091f, 0.000093f, 0.000099f,
- 0.000103f, 0.000110f, 0.000125f, 0.000123f, 0.000127f, 0.000151f, 0.000151f, 0.000161f,
- 0.000169f, 0.000179f, 0.000204f, 0.000219f, 0.000240f, 0.000267f, 0.000294f, 0.000321f,
- 0.000378f, 0.000438f, 0.000524f, 0.000628f, 0.000818f, 0.001125f, 0.001693f, 0.002888f,
- 0.005638f, 0.013580f, 0.505859f, 0.539062f, 0.544922f, 0.548340f, 0.550293f, 0.550781f,
- 0.000064f, 0.000048f, 0.000041f, 0.000037f, 0.000035f, 0.000034f, 0.000032f, 0.000031f,
- 0.000030f, 0.000029f, 0.000028f, 0.000028f, 0.000027f, 0.000027f, 0.000026f, 0.000025f,
- 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f, 0.000019f, 0.000019f, 0.000023f,
- 0.000021f, 0.000022f, 0.000026f, 0.000029f, 0.000032f, 0.000031f, 0.000036f, 0.000037f,
- 0.000036f, 0.000044f, 0.000046f, 0.000048f, 0.000052f, 0.000054f, 0.000056f, 0.000061f,
- 0.000070f, 0.000073f, 0.000076f, 0.000081f, 0.000082f, 0.000095f, 0.000105f, 0.000120f,
- 0.000126f, 0.000143f, 0.000173f, 0.000203f, 0.000267f, 0.000346f, 0.000505f, 0.000853f,
- 0.001829f, 0.005222f, 0.487061f, 0.519531f, 0.527344f, 0.529785f, 0.531738f, 0.532715f,
- 0.000000f, 0.000002f, 0.000003f, 0.000004f, 0.000008f, 0.000008f, 0.000008f, 0.000010f,
- 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f,
- 0.000012f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000012f, 0.000011f,
- 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f,
- 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000010f, 0.000012f, 0.000012f, 0.000015f,
- 0.000013f, 0.000015f, 0.000018f, 0.000020f, 0.000021f, 0.000022f, 0.000022f, 0.000024f,
- 0.000026f, 0.000027f, 0.000034f, 0.000043f, 0.000049f, 0.000065f, 0.000089f, 0.000138f,
- 0.000293f, 0.001143f, 0.466553f, 0.500488f, 0.508301f, 0.510742f, 0.512207f, 0.513672f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f,
- 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f,
- 0.000006f, 0.000023f, 0.446777f, 0.482178f, 0.489746f, 0.492676f, 0.494629f, 0.496094f,
- },
- {
- 0.032318f, 0.095032f, 0.152344f, 0.205322f, 0.254883f, 0.299316f, 0.342041f, 0.380859f,
- 0.416504f, 0.449707f, 0.481201f, 0.508789f, 0.537109f, 0.562012f, 0.584961f, 0.608398f,
- 0.628418f, 0.648926f, 0.666504f, 0.684570f, 0.701172f, 0.716797f, 0.731934f, 0.746094f,
- 0.759766f, 0.770996f, 0.784668f, 0.795898f, 0.806641f, 0.817871f, 0.827637f, 0.837402f,
- 0.846680f, 0.855469f, 0.863770f, 0.872559f, 0.879883f, 0.887695f, 0.895508f, 0.901367f,
- 0.909180f, 0.915527f, 0.921387f, 0.927734f, 0.934082f, 0.939453f, 0.944824f, 0.950684f,
- 0.955566f, 0.960449f, 0.965332f, 0.969238f, 0.974121f, 0.978516f, 0.982910f, 0.986816f,
- 0.990723f, 0.994629f, 0.994629f, 0.987793f, 0.981934f, 0.976562f, 0.971680f, 0.966797f,
- 0.025833f, 0.076965f, 0.125854f, 0.173096f, 0.217896f, 0.259766f, 0.299561f, 0.338135f,
- 0.372559f, 0.407471f, 0.437500f, 0.468262f, 0.496582f, 0.522949f, 0.547852f, 0.571289f,
- 0.593750f, 0.614746f, 0.633789f, 0.652832f, 0.671387f, 0.687988f, 0.705078f, 0.719727f,
- 0.734863f, 0.749023f, 0.761719f, 0.774414f, 0.786621f, 0.797363f, 0.808594f, 0.818848f,
- 0.829590f, 0.838867f, 0.848633f, 0.858398f, 0.865723f, 0.874512f, 0.881836f, 0.890137f,
- 0.897949f, 0.904297f, 0.910645f, 0.917480f, 0.923828f, 0.929688f, 0.935547f, 0.941895f,
- 0.947266f, 0.952637f, 0.957520f, 0.962402f, 0.967285f, 0.971680f, 0.976562f, 0.980957f,
- 0.984863f, 0.989258f, 0.992676f, 0.985840f, 0.979980f, 0.975098f, 0.970703f, 0.966309f,
- 0.020828f, 0.063049f, 0.104797f, 0.146606f, 0.187134f, 0.225464f, 0.263916f, 0.299072f,
- 0.333252f, 0.366943f, 0.398438f, 0.429199f, 0.457031f, 0.484131f, 0.509766f, 0.534668f,
- 0.559082f, 0.579590f, 0.600586f, 0.622070f, 0.640625f, 0.659180f, 0.676758f, 0.692383f,
- 0.708984f, 0.722656f, 0.737793f, 0.751465f, 0.764648f, 0.776367f, 0.789062f, 0.801270f,
- 0.811523f, 0.821289f, 0.832031f, 0.841309f, 0.850586f, 0.860352f, 0.868652f, 0.876953f,
- 0.884766f, 0.892090f, 0.899902f, 0.906738f, 0.913086f, 0.920410f, 0.927246f, 0.933105f,
- 0.938477f, 0.944336f, 0.950195f, 0.955078f, 0.959961f, 0.965332f, 0.970215f, 0.975098f,
- 0.979492f, 0.983887f, 0.989746f, 0.983398f, 0.978516f, 0.973633f, 0.969238f, 0.964844f,
- 0.017273f, 0.052429f, 0.088745f, 0.124207f, 0.160034f, 0.195068f, 0.230103f, 0.263916f,
- 0.297119f, 0.329102f, 0.360596f, 0.390625f, 0.418945f, 0.446289f, 0.472656f, 0.498535f,
- 0.521973f, 0.545898f, 0.567871f, 0.588867f, 0.609375f, 0.629395f, 0.646973f, 0.664551f,
- 0.681641f, 0.698242f, 0.712402f, 0.727539f, 0.741699f, 0.755371f, 0.768555f, 0.780762f,
- 0.792480f, 0.803711f, 0.814941f, 0.825195f, 0.834961f, 0.844727f, 0.854004f, 0.863281f,
- 0.871094f, 0.879883f, 0.887695f, 0.895508f, 0.902832f, 0.909668f, 0.916504f, 0.923828f,
- 0.929688f, 0.936035f, 0.941895f, 0.947754f, 0.952637f, 0.958496f, 0.963379f, 0.968750f,
- 0.973633f, 0.978027f, 0.986816f, 0.980957f, 0.976562f, 0.972168f, 0.967285f, 0.963379f,
- 0.014076f, 0.043915f, 0.074951f, 0.106140f, 0.137573f, 0.169189f, 0.201416f, 0.233154f,
- 0.264648f, 0.295166f, 0.324707f, 0.354248f, 0.381836f, 0.410156f, 0.436279f, 0.462891f,
- 0.487793f, 0.510742f, 0.534180f, 0.556152f, 0.576660f, 0.598145f, 0.616211f, 0.636719f,
- 0.653320f, 0.670410f, 0.687500f, 0.703125f, 0.718262f, 0.733398f, 0.746582f, 0.760742f,
- 0.772949f, 0.785156f, 0.796875f, 0.808105f, 0.818848f, 0.829590f, 0.838867f, 0.848145f,
- 0.857910f, 0.867188f, 0.875977f, 0.883301f, 0.891602f, 0.899414f, 0.906738f, 0.913086f,
- 0.919922f, 0.926270f, 0.932617f, 0.938477f, 0.944824f, 0.951660f, 0.957520f, 0.961914f,
- 0.967285f, 0.972168f, 0.984863f, 0.979004f, 0.974609f, 0.970215f, 0.966309f, 0.961914f,
- 0.012077f, 0.037445f, 0.063660f, 0.090881f, 0.118774f, 0.147827f, 0.176636f, 0.206055f,
- 0.234253f, 0.262939f, 0.291504f, 0.320312f, 0.347168f, 0.374756f, 0.401367f, 0.427734f,
- 0.451904f, 0.477051f, 0.500488f, 0.523438f, 0.545898f, 0.566406f, 0.587402f, 0.605957f,
- 0.624512f, 0.643555f, 0.662109f, 0.676758f, 0.693848f, 0.708984f, 0.724609f, 0.738770f,
- 0.751465f, 0.765137f, 0.777344f, 0.790039f, 0.800781f, 0.812500f, 0.823242f, 0.833984f,
- 0.842773f, 0.853027f, 0.861816f, 0.871094f, 0.879395f, 0.887695f, 0.895508f, 0.903320f,
- 0.910156f, 0.917969f, 0.924316f, 0.931152f, 0.937988f, 0.943848f, 0.949219f, 0.955566f,
- 0.960449f, 0.966309f, 0.981445f, 0.977051f, 0.972168f, 0.968262f, 0.964355f, 0.960938f,
- 0.010445f, 0.032562f, 0.054657f, 0.078613f, 0.103333f, 0.128540f, 0.153564f, 0.181274f,
- 0.207520f, 0.234619f, 0.261475f, 0.288818f, 0.315674f, 0.342041f, 0.368408f, 0.394287f,
- 0.418945f, 0.443604f, 0.467773f, 0.490479f, 0.512695f, 0.534180f, 0.555664f, 0.575684f,
- 0.596191f, 0.616211f, 0.633301f, 0.651855f, 0.668457f, 0.685547f, 0.701172f, 0.714844f,
- 0.729492f, 0.743652f, 0.758301f, 0.770996f, 0.783203f, 0.794922f, 0.806641f, 0.817383f,
- 0.827637f, 0.838867f, 0.847656f, 0.857422f, 0.866699f, 0.875000f, 0.884277f, 0.892578f,
- 0.900391f, 0.907227f, 0.914551f, 0.922363f, 0.929199f, 0.935059f, 0.941895f, 0.948242f,
- 0.953125f, 0.959473f, 0.978516f, 0.974609f, 0.970215f, 0.966309f, 0.962402f, 0.958984f,
- 0.009117f, 0.027466f, 0.047424f, 0.067871f, 0.089783f, 0.112244f, 0.135376f, 0.159668f,
- 0.184082f, 0.209106f, 0.233887f, 0.259277f, 0.285400f, 0.311523f, 0.336182f, 0.360840f,
- 0.385986f, 0.410889f, 0.435059f, 0.458252f, 0.480713f, 0.503418f, 0.524902f, 0.546387f,
- 0.566895f, 0.586426f, 0.605469f, 0.624512f, 0.642578f, 0.659668f, 0.676758f, 0.692383f,
- 0.708008f, 0.722168f, 0.736816f, 0.749512f, 0.763184f, 0.776855f, 0.789062f, 0.800781f,
- 0.812012f, 0.823730f, 0.833496f, 0.843750f, 0.854004f, 0.863281f, 0.872559f, 0.880371f,
- 0.889648f, 0.896973f, 0.905762f, 0.912598f, 0.919922f, 0.927734f, 0.934082f, 0.940918f,
- 0.946289f, 0.952637f, 0.976074f, 0.972168f, 0.967773f, 0.963867f, 0.960938f, 0.957031f,
- 0.007561f, 0.024231f, 0.041077f, 0.059631f, 0.078369f, 0.098145f, 0.119507f, 0.140747f,
- 0.163208f, 0.185913f, 0.209839f, 0.233154f, 0.257324f, 0.281494f, 0.305908f, 0.330566f,
- 0.354736f, 0.378906f, 0.402588f, 0.425781f, 0.449219f, 0.471924f, 0.494385f, 0.516602f,
- 0.536621f, 0.557617f, 0.576660f, 0.596680f, 0.616211f, 0.632812f, 0.650879f, 0.668457f,
- 0.684082f, 0.700684f, 0.715332f, 0.729492f, 0.744141f, 0.757812f, 0.771973f, 0.783691f,
- 0.796387f, 0.807129f, 0.818359f, 0.829590f, 0.840820f, 0.850098f, 0.859375f, 0.868652f,
- 0.877930f, 0.886719f, 0.894531f, 0.903320f, 0.910645f, 0.918945f, 0.925781f, 0.932617f,
- 0.939453f, 0.945801f, 0.972656f, 0.969727f, 0.965820f, 0.961914f, 0.958496f, 0.955078f,
- 0.006832f, 0.020676f, 0.036224f, 0.051758f, 0.069214f, 0.086609f, 0.105225f, 0.124146f,
- 0.144653f, 0.165527f, 0.186646f, 0.209106f, 0.232178f, 0.254883f, 0.277588f, 0.301758f,
- 0.325195f, 0.348633f, 0.371826f, 0.395264f, 0.418213f, 0.440674f, 0.463135f, 0.485596f,
- 0.506348f, 0.527832f, 0.548340f, 0.567871f, 0.587891f, 0.606934f, 0.625977f, 0.642578f,
- 0.660645f, 0.677734f, 0.692871f, 0.708008f, 0.723633f, 0.737793f, 0.752441f, 0.765137f,
- 0.778320f, 0.791504f, 0.802734f, 0.814453f, 0.825684f, 0.835449f, 0.847168f, 0.856934f,
- 0.866699f, 0.875488f, 0.884766f, 0.893066f, 0.901367f, 0.910156f, 0.917480f, 0.924805f,
- 0.932129f, 0.938965f, 0.970215f, 0.966797f, 0.963379f, 0.959961f, 0.956543f, 0.953125f,
- 0.006050f, 0.018585f, 0.031860f, 0.045807f, 0.060883f, 0.076538f, 0.093323f, 0.109985f,
- 0.128174f, 0.147949f, 0.167480f, 0.186768f, 0.208496f, 0.230591f, 0.252441f, 0.274170f,
- 0.297363f, 0.319824f, 0.342773f, 0.365723f, 0.388672f, 0.411133f, 0.433350f, 0.455811f,
- 0.477295f, 0.498291f, 0.519531f, 0.539551f, 0.560059f, 0.580566f, 0.599121f, 0.617676f,
- 0.635254f, 0.653320f, 0.669434f, 0.686523f, 0.702148f, 0.717773f, 0.732422f, 0.747070f,
- 0.760742f, 0.773926f, 0.786621f, 0.798340f, 0.811035f, 0.822754f, 0.833008f, 0.843750f,
- 0.854004f, 0.863770f, 0.873047f, 0.882812f, 0.891602f, 0.900879f, 0.908691f, 0.916504f,
- 0.924316f, 0.931152f, 0.966309f, 0.964355f, 0.961426f, 0.957520f, 0.954102f, 0.951172f,
- 0.005352f, 0.016388f, 0.027985f, 0.040222f, 0.053436f, 0.067261f, 0.082520f, 0.098022f,
- 0.114319f, 0.131836f, 0.150146f, 0.167969f, 0.187744f, 0.208008f, 0.228271f, 0.249634f,
- 0.270996f, 0.292969f, 0.314697f, 0.337158f, 0.359375f, 0.380859f, 0.403809f, 0.426025f,
- 0.447510f, 0.469482f, 0.490967f, 0.511719f, 0.532227f, 0.552734f, 0.571777f, 0.591309f,
- 0.609375f, 0.628418f, 0.645508f, 0.663086f, 0.680664f, 0.696289f, 0.711426f, 0.727051f,
- 0.741699f, 0.755859f, 0.768555f, 0.782227f, 0.795410f, 0.807617f, 0.818359f, 0.830078f,
- 0.841309f, 0.851074f, 0.861816f, 0.871582f, 0.880859f, 0.890625f, 0.898438f, 0.907715f,
- 0.915527f, 0.923828f, 0.962402f, 0.961914f, 0.958496f, 0.955078f, 0.951172f, 0.948730f,
- 0.004700f, 0.014397f, 0.025208f, 0.035675f, 0.047485f, 0.060120f, 0.073242f, 0.087097f,
- 0.102173f, 0.117249f, 0.133789f, 0.150513f, 0.168823f, 0.186890f, 0.206665f, 0.225830f,
- 0.246216f, 0.267334f, 0.288574f, 0.309814f, 0.331299f, 0.353271f, 0.375244f, 0.396729f,
- 0.418701f, 0.440674f, 0.461182f, 0.483398f, 0.504883f, 0.524902f, 0.544434f, 0.564941f,
- 0.584473f, 0.603027f, 0.621582f, 0.639648f, 0.656738f, 0.673828f, 0.690430f, 0.705566f,
- 0.721680f, 0.736816f, 0.750977f, 0.764648f, 0.778809f, 0.791016f, 0.804688f, 0.815918f,
- 0.826660f, 0.838867f, 0.850098f, 0.860840f, 0.870605f, 0.879883f, 0.889648f, 0.898438f,
- 0.907227f, 0.915527f, 0.959961f, 0.958496f, 0.955078f, 0.952148f, 0.949219f, 0.946777f,
- 0.004238f, 0.013138f, 0.022202f, 0.031769f, 0.042358f, 0.053040f, 0.065613f, 0.077637f,
- 0.090759f, 0.104980f, 0.119995f, 0.135498f, 0.151855f, 0.167725f, 0.186646f, 0.205078f,
- 0.224121f, 0.243042f, 0.263672f, 0.283936f, 0.305176f, 0.326416f, 0.347168f, 0.369629f,
- 0.390625f, 0.411865f, 0.433350f, 0.454590f, 0.475830f, 0.497314f, 0.517578f, 0.537109f,
- 0.557617f, 0.577637f, 0.596191f, 0.615723f, 0.632812f, 0.651367f, 0.668945f, 0.685059f,
- 0.701172f, 0.716797f, 0.732422f, 0.747559f, 0.761230f, 0.775391f, 0.788574f, 0.800781f,
- 0.813965f, 0.824707f, 0.837402f, 0.848145f, 0.859375f, 0.869141f, 0.879395f, 0.889160f,
- 0.897949f, 0.906250f, 0.956055f, 0.955566f, 0.952148f, 0.950195f, 0.947266f, 0.943848f,
- 0.003944f, 0.011490f, 0.019943f, 0.028748f, 0.037964f, 0.047485f, 0.058014f, 0.069702f,
- 0.081360f, 0.093994f, 0.107361f, 0.121277f, 0.136353f, 0.151978f, 0.167480f, 0.185669f,
- 0.202637f, 0.222168f, 0.240601f, 0.259766f, 0.279541f, 0.300293f, 0.321533f, 0.342285f,
- 0.362549f, 0.384033f, 0.405762f, 0.427002f, 0.447998f, 0.469238f, 0.490479f, 0.510742f,
- 0.532227f, 0.551758f, 0.570312f, 0.589844f, 0.609375f, 0.628418f, 0.645508f, 0.662598f,
- 0.680664f, 0.696777f, 0.712402f, 0.728516f, 0.744141f, 0.757812f, 0.771973f, 0.785156f,
- 0.798828f, 0.811523f, 0.824707f, 0.835449f, 0.847168f, 0.858887f, 0.869141f, 0.878906f,
- 0.888672f, 0.897949f, 0.952148f, 0.952148f, 0.949219f, 0.946777f, 0.944336f, 0.941406f,
- 0.003448f, 0.010574f, 0.017807f, 0.025558f, 0.033875f, 0.042633f, 0.052307f, 0.062134f,
- 0.073059f, 0.084045f, 0.096375f, 0.109192f, 0.122803f, 0.136475f, 0.151367f, 0.167603f,
- 0.183960f, 0.201416f, 0.218506f, 0.237427f, 0.256104f, 0.275635f, 0.295410f, 0.315918f,
- 0.336426f, 0.357178f, 0.378906f, 0.399414f, 0.421143f, 0.442139f, 0.462891f, 0.484375f,
- 0.504883f, 0.524902f, 0.544922f, 0.564941f, 0.583984f, 0.603516f, 0.622070f, 0.640625f,
- 0.658691f, 0.675781f, 0.692871f, 0.709473f, 0.725098f, 0.740234f, 0.754883f, 0.769531f,
- 0.783203f, 0.796875f, 0.809570f, 0.823242f, 0.834473f, 0.846191f, 0.857422f, 0.868164f,
- 0.878906f, 0.889160f, 0.948730f, 0.948242f, 0.946289f, 0.944336f, 0.940918f, 0.938477f,
- 0.003017f, 0.009422f, 0.015900f, 0.023041f, 0.030380f, 0.038574f, 0.047150f, 0.055969f,
- 0.065735f, 0.075684f, 0.086426f, 0.098267f, 0.110535f, 0.123047f, 0.136841f, 0.151489f,
- 0.166138f, 0.182495f, 0.198975f, 0.216553f, 0.233765f, 0.252930f, 0.271484f, 0.291016f,
- 0.310547f, 0.331299f, 0.351562f, 0.372559f, 0.393555f, 0.415039f, 0.435059f, 0.457275f,
- 0.477539f, 0.498047f, 0.519043f, 0.538574f, 0.559570f, 0.579102f, 0.598633f, 0.617188f,
- 0.635742f, 0.654297f, 0.672363f, 0.688965f, 0.706055f, 0.721191f, 0.737793f, 0.752930f,
- 0.768066f, 0.782227f, 0.795898f, 0.809082f, 0.821289f, 0.833496f, 0.846191f, 0.857422f,
- 0.869141f, 0.879883f, 0.944824f, 0.945312f, 0.942871f, 0.940918f, 0.938477f, 0.936035f,
- 0.002802f, 0.008575f, 0.014763f, 0.020844f, 0.027557f, 0.034576f, 0.042084f, 0.050476f,
- 0.058990f, 0.067993f, 0.077942f, 0.087952f, 0.098999f, 0.111267f, 0.122803f, 0.136719f,
- 0.150269f, 0.165527f, 0.180542f, 0.196533f, 0.213257f, 0.230591f, 0.248779f, 0.267334f,
- 0.286865f, 0.306152f, 0.325928f, 0.346436f, 0.367188f, 0.387695f, 0.409424f, 0.429199f,
- 0.450195f, 0.471680f, 0.492920f, 0.513184f, 0.534180f, 0.553711f, 0.573730f, 0.593750f,
- 0.612793f, 0.631836f, 0.649414f, 0.668457f, 0.685059f, 0.703125f, 0.719238f, 0.735352f,
- 0.750000f, 0.766113f, 0.781738f, 0.794434f, 0.808105f, 0.821777f, 0.833984f, 0.846191f,
- 0.858398f, 0.870117f, 0.940918f, 0.941895f, 0.939941f, 0.937500f, 0.935059f, 0.932617f,
- 0.002573f, 0.007603f, 0.013100f, 0.018799f, 0.024719f, 0.031372f, 0.038147f, 0.045105f,
- 0.052795f, 0.061127f, 0.069519f, 0.079529f, 0.089355f, 0.099976f, 0.111084f, 0.123718f,
- 0.136353f, 0.148926f, 0.163574f, 0.178345f, 0.194214f, 0.210083f, 0.227783f, 0.245361f,
- 0.263672f, 0.282471f, 0.301758f, 0.321533f, 0.341797f, 0.361816f, 0.383057f, 0.403320f,
- 0.424316f, 0.445557f, 0.466797f, 0.487061f, 0.507812f, 0.528809f, 0.549805f, 0.569336f,
- 0.589844f, 0.608887f, 0.627930f, 0.646973f, 0.665527f, 0.682129f, 0.700195f, 0.717773f,
- 0.732910f, 0.749512f, 0.765137f, 0.779785f, 0.794434f, 0.808105f, 0.821777f, 0.834473f,
- 0.847168f, 0.859375f, 0.936523f, 0.937988f, 0.936035f, 0.933594f, 0.932129f, 0.929688f,
- 0.002409f, 0.007107f, 0.011833f, 0.017075f, 0.022278f, 0.028351f, 0.034088f, 0.040558f,
- 0.047943f, 0.055389f, 0.063232f, 0.072021f, 0.080322f, 0.090454f, 0.100220f, 0.111389f,
- 0.122986f, 0.135010f, 0.148438f, 0.162109f, 0.176270f, 0.191772f, 0.207642f, 0.224121f,
- 0.241699f, 0.259277f, 0.278076f, 0.297363f, 0.316650f, 0.336670f, 0.356934f, 0.377686f,
- 0.397949f, 0.418701f, 0.439941f, 0.461914f, 0.482178f, 0.502930f, 0.524414f, 0.544922f,
- 0.565918f, 0.585938f, 0.605957f, 0.625000f, 0.643066f, 0.662109f, 0.680176f, 0.698730f,
- 0.715820f, 0.731934f, 0.748047f, 0.764648f, 0.780273f, 0.794434f, 0.808594f, 0.821777f,
- 0.836914f, 0.848145f, 0.932129f, 0.934082f, 0.932617f, 0.930176f, 0.928711f, 0.926270f,
- 0.002066f, 0.006329f, 0.010986f, 0.015541f, 0.020294f, 0.025452f, 0.030975f, 0.037201f,
- 0.043152f, 0.049835f, 0.056824f, 0.064331f, 0.072998f, 0.081177f, 0.090637f, 0.100525f,
- 0.110718f, 0.122131f, 0.134033f, 0.146851f, 0.159912f, 0.173584f, 0.189331f, 0.204468f,
- 0.221191f, 0.237671f, 0.255615f, 0.273682f, 0.292969f, 0.312012f, 0.331543f, 0.352295f,
- 0.372314f, 0.393311f, 0.413818f, 0.435547f, 0.456055f, 0.477539f, 0.499023f, 0.520508f,
- 0.540039f, 0.561523f, 0.581543f, 0.602051f, 0.622070f, 0.641113f, 0.659668f, 0.678223f,
- 0.697266f, 0.714844f, 0.731445f, 0.748535f, 0.765137f, 0.778809f, 0.794922f, 0.810059f,
- 0.824219f, 0.837402f, 0.926758f, 0.930176f, 0.928711f, 0.926758f, 0.924805f, 0.922852f,
- 0.001840f, 0.005703f, 0.009918f, 0.014099f, 0.018311f, 0.023026f, 0.028000f, 0.033508f,
- 0.038971f, 0.045044f, 0.051880f, 0.058289f, 0.065796f, 0.073425f, 0.081482f, 0.090698f,
- 0.100464f, 0.110413f, 0.121216f, 0.132812f, 0.145142f, 0.158203f, 0.171997f, 0.186401f,
- 0.201538f, 0.217651f, 0.234497f, 0.251465f, 0.269287f, 0.288330f, 0.307129f, 0.327148f,
- 0.346924f, 0.367920f, 0.388428f, 0.409668f, 0.430420f, 0.451416f, 0.474121f, 0.494873f,
- 0.516113f, 0.537598f, 0.558105f, 0.579102f, 0.598633f, 0.619629f, 0.639160f, 0.657715f,
- 0.677734f, 0.695801f, 0.713867f, 0.731934f, 0.748047f, 0.764160f, 0.781738f, 0.796875f,
- 0.810547f, 0.826172f, 0.922363f, 0.925781f, 0.924805f, 0.922852f, 0.921387f, 0.919434f,
- 0.001621f, 0.005188f, 0.008888f, 0.012939f, 0.016724f, 0.021271f, 0.025772f, 0.029984f,
- 0.035553f, 0.040741f, 0.046417f, 0.052490f, 0.059265f, 0.066528f, 0.074097f, 0.081482f,
- 0.090271f, 0.100220f, 0.109741f, 0.120178f, 0.131226f, 0.143188f, 0.156006f, 0.169189f,
- 0.183716f, 0.198486f, 0.214233f, 0.230713f, 0.247925f, 0.265381f, 0.284424f, 0.303711f,
- 0.322754f, 0.342773f, 0.363525f, 0.384277f, 0.405518f, 0.427002f, 0.447754f, 0.469727f,
- 0.491455f, 0.512207f, 0.534180f, 0.554688f, 0.576172f, 0.597168f, 0.617188f, 0.636719f,
- 0.657227f, 0.677734f, 0.695312f, 0.713379f, 0.731934f, 0.749512f, 0.766113f, 0.782715f,
- 0.798340f, 0.813477f, 0.917480f, 0.920898f, 0.920410f, 0.919922f, 0.916992f, 0.915039f,
- 0.001581f, 0.004616f, 0.008049f, 0.011917f, 0.015556f, 0.019547f, 0.023270f, 0.027908f,
- 0.031860f, 0.036652f, 0.041992f, 0.047577f, 0.053528f, 0.060150f, 0.066772f, 0.073914f,
- 0.082153f, 0.090088f, 0.099304f, 0.108887f, 0.118835f, 0.129517f, 0.141357f, 0.154297f,
- 0.166992f, 0.180908f, 0.195557f, 0.210815f, 0.227173f, 0.244141f, 0.261963f, 0.279785f,
- 0.299072f, 0.318359f, 0.338379f, 0.358887f, 0.380127f, 0.401123f, 0.422607f, 0.443848f,
- 0.466309f, 0.487793f, 0.509277f, 0.530762f, 0.553223f, 0.573730f, 0.594727f, 0.616699f,
- 0.636719f, 0.656250f, 0.676270f, 0.695801f, 0.713867f, 0.733398f, 0.750488f, 0.767090f,
- 0.784180f, 0.801270f, 0.912598f, 0.916992f, 0.916504f, 0.914551f, 0.913086f, 0.911133f,
- 0.001476f, 0.004410f, 0.007374f, 0.010620f, 0.013931f, 0.017258f, 0.021057f, 0.024979f,
- 0.029144f, 0.033478f, 0.037872f, 0.042969f, 0.048737f, 0.053986f, 0.060150f, 0.066895f,
- 0.074036f, 0.081665f, 0.089417f, 0.098083f, 0.107361f, 0.117371f, 0.127930f, 0.139648f,
- 0.151489f, 0.164062f, 0.178589f, 0.192627f, 0.208130f, 0.223755f, 0.240601f, 0.258057f,
- 0.275879f, 0.295654f, 0.314697f, 0.334961f, 0.354980f, 0.375977f, 0.396729f, 0.418945f,
- 0.440430f, 0.462402f, 0.484619f, 0.506348f, 0.528809f, 0.550781f, 0.572266f, 0.593750f,
- 0.615234f, 0.637207f, 0.656738f, 0.676758f, 0.696289f, 0.716309f, 0.734863f, 0.752930f,
- 0.770508f, 0.788574f, 0.906738f, 0.911621f, 0.912109f, 0.910156f, 0.908691f, 0.907227f,
- 0.001204f, 0.003998f, 0.006786f, 0.009850f, 0.012642f, 0.015762f, 0.019226f, 0.022751f,
- 0.026749f, 0.030502f, 0.034698f, 0.038940f, 0.044006f, 0.048615f, 0.054352f, 0.060608f,
- 0.066711f, 0.073059f, 0.080505f, 0.088318f, 0.097290f, 0.105835f, 0.115845f, 0.126343f,
- 0.137085f, 0.148804f, 0.161377f, 0.175049f, 0.189331f, 0.204346f, 0.219604f, 0.236816f,
- 0.253662f, 0.272217f, 0.291260f, 0.310547f, 0.330811f, 0.350830f, 0.372314f, 0.393799f,
- 0.415771f, 0.437500f, 0.459717f, 0.481934f, 0.504883f, 0.527344f, 0.549316f, 0.571777f,
- 0.593750f, 0.615723f, 0.636230f, 0.657715f, 0.678223f, 0.697754f, 0.718262f, 0.737793f,
- 0.756348f, 0.774902f, 0.900879f, 0.907227f, 0.906738f, 0.905762f, 0.904297f, 0.902832f,
- 0.001290f, 0.003807f, 0.006207f, 0.008652f, 0.011368f, 0.014618f, 0.017792f, 0.020813f,
- 0.023849f, 0.027588f, 0.031036f, 0.035400f, 0.039917f, 0.044250f, 0.049408f, 0.054321f,
- 0.059937f, 0.065918f, 0.072937f, 0.079773f, 0.087463f, 0.095703f, 0.104553f, 0.113892f,
- 0.124146f, 0.134888f, 0.146606f, 0.159058f, 0.171753f, 0.185913f, 0.201416f, 0.216309f,
- 0.232910f, 0.250000f, 0.268555f, 0.287354f, 0.306885f, 0.326904f, 0.347412f, 0.369141f,
- 0.390381f, 0.412842f, 0.434570f, 0.457764f, 0.479736f, 0.502930f, 0.525879f, 0.547852f,
- 0.570801f, 0.592773f, 0.615723f, 0.637207f, 0.659180f, 0.680176f, 0.700684f, 0.720703f,
- 0.740234f, 0.759766f, 0.895996f, 0.901855f, 0.901855f, 0.900879f, 0.899414f, 0.897949f,
- 0.001030f, 0.003561f, 0.005718f, 0.008301f, 0.010582f, 0.013283f, 0.015839f, 0.018753f,
- 0.022156f, 0.025314f, 0.028427f, 0.032318f, 0.035889f, 0.040039f, 0.044434f, 0.048737f,
- 0.054077f, 0.059723f, 0.065613f, 0.072083f, 0.079224f, 0.086426f, 0.094238f, 0.102966f,
- 0.111938f, 0.122253f, 0.132568f, 0.143555f, 0.155884f, 0.168945f, 0.182861f, 0.197510f,
- 0.213379f, 0.229492f, 0.246948f, 0.264648f, 0.283203f, 0.303467f, 0.322998f, 0.343994f,
- 0.365479f, 0.387451f, 0.409912f, 0.432129f, 0.455078f, 0.478760f, 0.501465f, 0.523926f,
- 0.547852f, 0.570801f, 0.593750f, 0.616211f, 0.639160f, 0.661133f, 0.682617f, 0.703613f,
- 0.725098f, 0.745117f, 0.888672f, 0.896484f, 0.896973f, 0.895020f, 0.895508f, 0.893555f,
- 0.001051f, 0.002956f, 0.005398f, 0.007523f, 0.009613f, 0.012024f, 0.014725f, 0.017059f,
- 0.019714f, 0.022537f, 0.025681f, 0.029236f, 0.032715f, 0.036102f, 0.040100f, 0.043945f,
- 0.048859f, 0.053772f, 0.058838f, 0.064880f, 0.070862f, 0.077576f, 0.084839f, 0.092712f,
- 0.101013f, 0.110229f, 0.119446f, 0.130005f, 0.141113f, 0.153198f, 0.166016f, 0.179565f,
- 0.193970f, 0.209351f, 0.225830f, 0.242920f, 0.261230f, 0.280273f, 0.299316f, 0.320068f,
- 0.341309f, 0.363037f, 0.384521f, 0.407227f, 0.429443f, 0.453369f, 0.477051f, 0.500977f,
- 0.524414f, 0.547852f, 0.571777f, 0.595215f, 0.619141f, 0.641602f, 0.664062f, 0.686035f,
- 0.707520f, 0.729004f, 0.882812f, 0.891602f, 0.891113f, 0.890625f, 0.889160f, 0.888184f,
- 0.000934f, 0.002998f, 0.004883f, 0.006859f, 0.009102f, 0.010925f, 0.012871f, 0.015656f,
- 0.017853f, 0.020767f, 0.023422f, 0.026413f, 0.029251f, 0.032593f, 0.036011f, 0.039825f,
- 0.044495f, 0.048645f, 0.053284f, 0.058258f, 0.063782f, 0.069885f, 0.076111f, 0.083313f,
- 0.090881f, 0.099060f, 0.107788f, 0.117126f, 0.127075f, 0.138428f, 0.150391f, 0.162720f,
- 0.176270f, 0.190796f, 0.206177f, 0.222290f, 0.239624f, 0.257568f, 0.276367f, 0.296387f,
- 0.316895f, 0.338623f, 0.360352f, 0.382812f, 0.404785f, 0.428467f, 0.452148f, 0.476562f,
- 0.500488f, 0.524902f, 0.548828f, 0.572754f, 0.597168f, 0.621094f, 0.644531f, 0.667480f,
- 0.689941f, 0.712402f, 0.875977f, 0.883789f, 0.884766f, 0.884766f, 0.883301f, 0.883789f,
- 0.001108f, 0.002474f, 0.004707f, 0.006248f, 0.007744f, 0.009888f, 0.011787f, 0.014244f,
- 0.016205f, 0.018631f, 0.021286f, 0.023758f, 0.026535f, 0.029510f, 0.032654f, 0.035919f,
- 0.039825f, 0.043762f, 0.047852f, 0.052368f, 0.057373f, 0.062561f, 0.068604f, 0.074707f,
- 0.081360f, 0.088623f, 0.096802f, 0.105103f, 0.114624f, 0.124573f, 0.135498f, 0.147217f,
- 0.159424f, 0.172729f, 0.187378f, 0.202881f, 0.219116f, 0.235962f, 0.254639f, 0.273438f,
- 0.293945f, 0.314453f, 0.335449f, 0.358154f, 0.380371f, 0.403564f, 0.428223f, 0.452148f,
- 0.476074f, 0.500977f, 0.525879f, 0.550293f, 0.575195f, 0.599609f, 0.625000f, 0.649414f,
- 0.672852f, 0.695801f, 0.870117f, 0.879395f, 0.879883f, 0.879395f, 0.878906f, 0.877441f,
- 0.000877f, 0.002495f, 0.003918f, 0.005669f, 0.007484f, 0.009148f, 0.010895f, 0.012634f,
- 0.014717f, 0.017014f, 0.019302f, 0.021347f, 0.023849f, 0.026443f, 0.029388f, 0.032532f,
- 0.035492f, 0.039185f, 0.042816f, 0.046906f, 0.051453f, 0.056122f, 0.061310f, 0.066895f,
- 0.072937f, 0.079590f, 0.086548f, 0.094360f, 0.103027f, 0.111938f, 0.121643f, 0.132568f,
- 0.144043f, 0.156006f, 0.169434f, 0.184204f, 0.199341f, 0.215698f, 0.233032f, 0.251221f,
- 0.269531f, 0.290039f, 0.311768f, 0.333740f, 0.355957f, 0.379395f, 0.402344f, 0.426758f,
- 0.451172f, 0.476562f, 0.501465f, 0.526855f, 0.552246f, 0.578613f, 0.603516f, 0.629395f,
- 0.653809f, 0.679199f, 0.863281f, 0.872559f, 0.874023f, 0.873535f, 0.872559f, 0.871094f,
- 0.000779f, 0.002241f, 0.003813f, 0.005371f, 0.006763f, 0.008186f, 0.009827f, 0.011574f,
- 0.013260f, 0.015274f, 0.017303f, 0.019119f, 0.021362f, 0.023972f, 0.026505f, 0.029144f,
- 0.031860f, 0.035126f, 0.038422f, 0.041809f, 0.045929f, 0.050323f, 0.054840f, 0.059631f,
- 0.065002f, 0.070984f, 0.077759f, 0.084656f, 0.091736f, 0.100037f, 0.109436f, 0.118835f,
- 0.129272f, 0.140625f, 0.152832f, 0.166138f, 0.180786f, 0.195679f, 0.211914f, 0.229736f,
- 0.247803f, 0.267822f, 0.287598f, 0.309326f, 0.331055f, 0.354492f, 0.377686f, 0.401855f,
- 0.426270f, 0.451660f, 0.477051f, 0.503418f, 0.529785f, 0.555664f, 0.583008f, 0.608887f,
- 0.635254f, 0.661133f, 0.855957f, 0.865234f, 0.866699f, 0.867188f, 0.866211f, 0.865723f,
- 0.000778f, 0.002155f, 0.003584f, 0.004871f, 0.006149f, 0.007519f, 0.008858f, 0.010498f,
- 0.012100f, 0.013977f, 0.015511f, 0.017303f, 0.019363f, 0.021515f, 0.023880f, 0.026230f,
- 0.028564f, 0.031555f, 0.034241f, 0.037476f, 0.041138f, 0.044983f, 0.048859f, 0.053436f,
- 0.058014f, 0.063232f, 0.069214f, 0.075195f, 0.081848f, 0.089417f, 0.097168f, 0.106201f,
- 0.115479f, 0.126343f, 0.137695f, 0.149658f, 0.162476f, 0.177002f, 0.192993f, 0.209473f,
- 0.226440f, 0.245239f, 0.264404f, 0.285156f, 0.306885f, 0.330078f, 0.353271f, 0.376465f,
- 0.402100f, 0.426758f, 0.453857f, 0.479492f, 0.505859f, 0.532715f, 0.560547f, 0.587402f,
- 0.614258f, 0.640137f, 0.847168f, 0.858398f, 0.860352f, 0.859863f, 0.859863f, 0.858887f,
- 0.000673f, 0.002026f, 0.003120f, 0.004242f, 0.005390f, 0.006874f, 0.008087f, 0.009346f,
- 0.011192f, 0.012642f, 0.013855f, 0.015511f, 0.017502f, 0.019394f, 0.021301f, 0.023331f,
- 0.025681f, 0.028137f, 0.030792f, 0.033295f, 0.036804f, 0.039917f, 0.043488f, 0.047363f,
- 0.051880f, 0.056580f, 0.061646f, 0.066956f, 0.072998f, 0.079407f, 0.086609f, 0.094971f,
- 0.103027f, 0.112793f, 0.122742f, 0.134399f, 0.146118f, 0.159058f, 0.173828f, 0.188599f,
- 0.205444f, 0.223633f, 0.241943f, 0.262451f, 0.283203f, 0.304932f, 0.328369f, 0.352051f,
- 0.376953f, 0.402100f, 0.428467f, 0.454834f, 0.481934f, 0.509766f, 0.537598f, 0.566406f,
- 0.594238f, 0.622559f, 0.838867f, 0.852051f, 0.853516f, 0.853027f, 0.853027f, 0.852051f,
- 0.000419f, 0.001721f, 0.003044f, 0.003881f, 0.005161f, 0.006329f, 0.007500f, 0.009117f,
- 0.009941f, 0.011147f, 0.013023f, 0.014053f, 0.015869f, 0.017181f, 0.018906f, 0.020889f,
- 0.023026f, 0.025085f, 0.027435f, 0.029724f, 0.032440f, 0.035492f, 0.038605f, 0.042175f,
- 0.045898f, 0.049988f, 0.054504f, 0.059143f, 0.064697f, 0.070435f, 0.076721f, 0.083984f,
- 0.091675f, 0.100037f, 0.109009f, 0.119629f, 0.130737f, 0.143066f, 0.156250f, 0.170654f,
- 0.186157f, 0.202393f, 0.220825f, 0.239990f, 0.259521f, 0.281250f, 0.303467f, 0.327148f,
- 0.351318f, 0.376953f, 0.402832f, 0.430664f, 0.458252f, 0.485596f, 0.514648f, 0.543457f,
- 0.572754f, 0.602051f, 0.830566f, 0.844238f, 0.845703f, 0.845703f, 0.845703f, 0.845215f,
- 0.000503f, 0.001644f, 0.002455f, 0.003765f, 0.004906f, 0.005901f, 0.006805f, 0.007744f,
- 0.008789f, 0.009972f, 0.011314f, 0.012688f, 0.014160f, 0.015480f, 0.016953f, 0.018555f,
- 0.020325f, 0.022232f, 0.024338f, 0.026535f, 0.028717f, 0.031403f, 0.034119f, 0.037384f,
- 0.040680f, 0.044128f, 0.047943f, 0.052551f, 0.057098f, 0.062134f, 0.067871f, 0.074158f,
- 0.081543f, 0.088684f, 0.097107f, 0.106262f, 0.116028f, 0.127563f, 0.139404f, 0.152344f,
- 0.167358f, 0.182739f, 0.199951f, 0.217773f, 0.237427f, 0.257812f, 0.279541f, 0.303223f,
- 0.327148f, 0.351807f, 0.377441f, 0.405518f, 0.433105f, 0.460449f, 0.491211f, 0.520020f,
- 0.550293f, 0.581543f, 0.821777f, 0.835938f, 0.837891f, 0.838867f, 0.838867f, 0.837891f,
- 0.000649f, 0.001432f, 0.002455f, 0.003469f, 0.004162f, 0.005192f, 0.006046f, 0.007053f,
- 0.007919f, 0.009148f, 0.010185f, 0.011490f, 0.012558f, 0.013748f, 0.015083f, 0.016663f,
- 0.018341f, 0.019897f, 0.021561f, 0.023376f, 0.025513f, 0.027725f, 0.030075f, 0.032745f,
- 0.035583f, 0.038544f, 0.041901f, 0.045898f, 0.049896f, 0.054443f, 0.059784f, 0.065186f,
- 0.071228f, 0.078247f, 0.085632f, 0.093872f, 0.103088f, 0.113098f, 0.123840f, 0.135986f,
- 0.148682f, 0.163696f, 0.179321f, 0.196533f, 0.214722f, 0.234985f, 0.256104f, 0.278320f,
- 0.302246f, 0.326660f, 0.352783f, 0.379395f, 0.406738f, 0.436279f, 0.465820f, 0.496338f,
- 0.527344f, 0.559082f, 0.813477f, 0.827148f, 0.829590f, 0.830566f, 0.830566f, 0.829590f,
- 0.000427f, 0.001431f, 0.002077f, 0.002947f, 0.004009f, 0.004860f, 0.005501f, 0.006416f,
- 0.007008f, 0.008171f, 0.009155f, 0.010063f, 0.011154f, 0.012474f, 0.013336f, 0.014793f,
- 0.016006f, 0.017471f, 0.019119f, 0.020630f, 0.022079f, 0.024078f, 0.026505f, 0.028687f,
- 0.031128f, 0.033813f, 0.036804f, 0.040283f, 0.043732f, 0.047882f, 0.052094f, 0.057281f,
- 0.062500f, 0.068726f, 0.075012f, 0.082581f, 0.090393f, 0.099487f, 0.109375f, 0.120728f,
- 0.131958f, 0.145508f, 0.160278f, 0.176025f, 0.193848f, 0.212891f, 0.232788f, 0.253906f,
- 0.277344f, 0.302002f, 0.327637f, 0.354248f, 0.382080f, 0.411621f, 0.441162f, 0.472656f,
- 0.504395f, 0.536621f, 0.803223f, 0.818359f, 0.821777f, 0.821777f, 0.822266f, 0.821777f,
- 0.000574f, 0.001416f, 0.001961f, 0.002621f, 0.003527f, 0.004250f, 0.004894f, 0.005653f,
- 0.006340f, 0.007263f, 0.008255f, 0.008965f, 0.009819f, 0.010857f, 0.011864f, 0.012917f,
- 0.014114f, 0.015358f, 0.016678f, 0.018005f, 0.019669f, 0.021347f, 0.023239f, 0.025070f,
- 0.027267f, 0.029434f, 0.032318f, 0.035156f, 0.038269f, 0.041534f, 0.045624f, 0.049469f,
- 0.054321f, 0.059479f, 0.065369f, 0.071655f, 0.078857f, 0.086853f, 0.095886f, 0.105652f,
- 0.116943f, 0.128662f, 0.142090f, 0.156860f, 0.173096f, 0.190918f, 0.210327f, 0.231201f,
- 0.253418f, 0.277100f, 0.302490f, 0.328369f, 0.356445f, 0.385254f, 0.415771f, 0.446533f,
- 0.479736f, 0.513184f, 0.794434f, 0.810547f, 0.812500f, 0.813477f, 0.812988f, 0.813477f,
- 0.000417f, 0.001152f, 0.002066f, 0.002480f, 0.003115f, 0.003778f, 0.004543f, 0.005001f,
- 0.005936f, 0.006420f, 0.007130f, 0.007881f, 0.008789f, 0.009666f, 0.010605f, 0.011276f,
- 0.012352f, 0.013367f, 0.014626f, 0.015732f, 0.017090f, 0.018509f, 0.020096f, 0.021759f,
- 0.023895f, 0.025681f, 0.027740f, 0.030121f, 0.032776f, 0.036011f, 0.039276f, 0.042694f,
- 0.046906f, 0.051575f, 0.056488f, 0.061951f, 0.068481f, 0.075684f, 0.083191f, 0.092102f,
- 0.101990f, 0.112915f, 0.125122f, 0.138672f, 0.153564f, 0.170410f, 0.188477f, 0.208008f,
- 0.229980f, 0.252441f, 0.276855f, 0.303711f, 0.331055f, 0.360596f, 0.391357f, 0.422607f,
- 0.456299f, 0.490234f, 0.783203f, 0.799805f, 0.803223f, 0.804688f, 0.804199f, 0.805176f,
- 0.000422f, 0.000885f, 0.001743f, 0.002075f, 0.002930f, 0.003460f, 0.004105f, 0.004696f,
- 0.005257f, 0.005753f, 0.006550f, 0.006916f, 0.007805f, 0.008308f, 0.009109f, 0.010056f,
- 0.010918f, 0.011627f, 0.012787f, 0.013725f, 0.014732f, 0.016113f, 0.017319f, 0.018906f,
- 0.020264f, 0.022324f, 0.023911f, 0.026230f, 0.028183f, 0.030884f, 0.033661f, 0.036865f,
- 0.040314f, 0.044189f, 0.048615f, 0.053284f, 0.058838f, 0.065491f, 0.072205f, 0.079651f,
- 0.088379f, 0.098389f, 0.109314f, 0.121765f, 0.135010f, 0.150513f, 0.167358f, 0.186035f,
- 0.206543f, 0.228516f, 0.252197f, 0.278320f, 0.305176f, 0.333496f, 0.364746f, 0.396973f,
- 0.430176f, 0.465820f, 0.772949f, 0.790527f, 0.794434f, 0.794922f, 0.795410f, 0.794922f,
- 0.000211f, 0.000970f, 0.001484f, 0.002035f, 0.002586f, 0.003040f, 0.003540f, 0.004086f,
- 0.004696f, 0.005016f, 0.005508f, 0.006100f, 0.006763f, 0.007401f, 0.008011f, 0.008675f,
- 0.009247f, 0.010071f, 0.011009f, 0.011940f, 0.012802f, 0.013870f, 0.014771f, 0.016281f,
- 0.017487f, 0.018890f, 0.020584f, 0.022171f, 0.024200f, 0.026505f, 0.028870f, 0.031372f,
- 0.034363f, 0.037659f, 0.041412f, 0.045685f, 0.050262f, 0.055664f, 0.061768f, 0.068359f,
- 0.076172f, 0.084717f, 0.094666f, 0.105835f, 0.117798f, 0.131958f, 0.147095f, 0.164795f,
- 0.184326f, 0.204956f, 0.228271f, 0.253174f, 0.279785f, 0.307861f, 0.338379f, 0.370361f,
- 0.404785f, 0.440430f, 0.761230f, 0.780273f, 0.783691f, 0.785645f, 0.786133f, 0.785156f,
- 0.000281f, 0.000954f, 0.001275f, 0.001745f, 0.002159f, 0.002810f, 0.003002f, 0.003622f,
- 0.003918f, 0.004471f, 0.004776f, 0.005352f, 0.005852f, 0.006298f, 0.006989f, 0.007339f,
- 0.008087f, 0.008698f, 0.009499f, 0.010208f, 0.010986f, 0.011871f, 0.012802f, 0.013809f,
- 0.014923f, 0.016129f, 0.017624f, 0.018753f, 0.020645f, 0.022156f, 0.024399f, 0.026382f,
- 0.029037f, 0.031769f, 0.034851f, 0.038513f, 0.042542f, 0.047180f, 0.052063f, 0.058136f,
- 0.064819f, 0.072205f, 0.080933f, 0.090698f, 0.101685f, 0.114441f, 0.128784f, 0.144287f,
- 0.162476f, 0.182617f, 0.203979f, 0.228149f, 0.253906f, 0.282227f, 0.312744f, 0.344482f,
- 0.378418f, 0.415039f, 0.749023f, 0.770020f, 0.773438f, 0.774902f, 0.775391f, 0.776367f,
- 0.000200f, 0.000790f, 0.001209f, 0.001475f, 0.002022f, 0.002375f, 0.002754f, 0.003136f,
- 0.003532f, 0.003851f, 0.004253f, 0.004719f, 0.004864f, 0.005455f, 0.005749f, 0.006435f,
- 0.007053f, 0.007557f, 0.007988f, 0.008614f, 0.009216f, 0.010101f, 0.010712f, 0.011604f,
- 0.012596f, 0.013588f, 0.014877f, 0.016052f, 0.017334f, 0.018753f, 0.020401f, 0.022415f,
- 0.024338f, 0.026642f, 0.029282f, 0.032196f, 0.035461f, 0.039215f, 0.043854f, 0.048706f,
- 0.054413f, 0.060913f, 0.068237f, 0.076965f, 0.086792f, 0.097961f, 0.110657f, 0.125488f,
- 0.141846f, 0.160278f, 0.180542f, 0.203857f, 0.229004f, 0.256348f, 0.286133f, 0.317627f,
- 0.351807f, 0.388184f, 0.737305f, 0.757812f, 0.762695f, 0.763672f, 0.764160f, 0.764648f,
- 0.000214f, 0.000700f, 0.001134f, 0.001480f, 0.001724f, 0.002056f, 0.002468f, 0.002672f,
- 0.003069f, 0.003412f, 0.003618f, 0.003883f, 0.004265f, 0.004627f, 0.004971f, 0.005508f,
- 0.005817f, 0.006397f, 0.006866f, 0.007244f, 0.007812f, 0.008446f, 0.009003f, 0.009872f,
- 0.010544f, 0.011345f, 0.012375f, 0.013321f, 0.014275f, 0.015587f, 0.017075f, 0.018372f,
- 0.020050f, 0.022186f, 0.024246f, 0.026596f, 0.029388f, 0.032562f, 0.036285f, 0.040344f,
- 0.045197f, 0.050568f, 0.056946f, 0.064514f, 0.072876f, 0.082886f, 0.093933f, 0.107056f,
- 0.122070f, 0.139404f, 0.158325f, 0.180176f, 0.204590f, 0.231201f, 0.260010f, 0.290771f,
- 0.325195f, 0.361816f, 0.726074f, 0.747070f, 0.751465f, 0.753418f, 0.753906f, 0.754395f,
- 0.000187f, 0.000637f, 0.001095f, 0.001133f, 0.001488f, 0.001872f, 0.002007f, 0.002253f,
- 0.002590f, 0.002880f, 0.003010f, 0.003420f, 0.003593f, 0.003914f, 0.004322f, 0.004650f,
- 0.005051f, 0.005424f, 0.005733f, 0.006134f, 0.006683f, 0.007183f, 0.007671f, 0.008072f,
- 0.008720f, 0.009483f, 0.010201f, 0.011070f, 0.011871f, 0.012863f, 0.013924f, 0.015167f,
- 0.016434f, 0.018143f, 0.019669f, 0.021851f, 0.024109f, 0.026749f, 0.029587f, 0.033020f,
- 0.037109f, 0.041718f, 0.047119f, 0.053192f, 0.060516f, 0.068848f, 0.078857f, 0.090149f,
- 0.104004f, 0.119202f, 0.136841f, 0.157471f, 0.180420f, 0.205322f, 0.234009f, 0.264648f,
- 0.297852f, 0.335449f, 0.711914f, 0.735352f, 0.740234f, 0.741211f, 0.742676f, 0.742676f,
- 0.000201f, 0.000676f, 0.000884f, 0.001044f, 0.001369f, 0.001633f, 0.001786f, 0.002001f,
- 0.002237f, 0.002460f, 0.002680f, 0.002777f, 0.003117f, 0.003408f, 0.003632f, 0.003910f,
- 0.004211f, 0.004375f, 0.004772f, 0.005226f, 0.005520f, 0.005909f, 0.006302f, 0.006882f,
- 0.007385f, 0.007858f, 0.008553f, 0.008919f, 0.009827f, 0.010582f, 0.011398f, 0.012520f,
- 0.013611f, 0.014725f, 0.016190f, 0.017593f, 0.019424f, 0.021622f, 0.023941f, 0.026703f,
- 0.029938f, 0.033539f, 0.038055f, 0.043243f, 0.049408f, 0.056519f, 0.065002f, 0.074951f,
- 0.086548f, 0.100403f, 0.116394f, 0.135132f, 0.156860f, 0.181030f, 0.208252f, 0.238281f,
- 0.271240f, 0.307861f, 0.698730f, 0.722656f, 0.727539f, 0.729980f, 0.730957f, 0.730469f,
- 0.000185f, 0.000371f, 0.000784f, 0.001028f, 0.001153f, 0.001304f, 0.001567f, 0.001792f,
- 0.001790f, 0.002028f, 0.002283f, 0.002424f, 0.002640f, 0.002764f, 0.003044f, 0.003313f,
- 0.003445f, 0.003748f, 0.004044f, 0.004337f, 0.004677f, 0.004879f, 0.005207f, 0.005661f,
- 0.006027f, 0.006481f, 0.006870f, 0.007454f, 0.007874f, 0.008583f, 0.009239f, 0.009880f,
- 0.010849f, 0.011871f, 0.012833f, 0.014153f, 0.015656f, 0.017151f, 0.018967f, 0.021118f,
- 0.023621f, 0.026703f, 0.030197f, 0.034576f, 0.039368f, 0.045441f, 0.052460f, 0.061157f,
- 0.070862f, 0.083069f, 0.097290f, 0.114441f, 0.134155f, 0.157104f, 0.182983f, 0.212158f,
- 0.244507f, 0.281250f, 0.684570f, 0.710449f, 0.715332f, 0.717285f, 0.717773f, 0.718750f,
- 0.000109f, 0.000455f, 0.000558f, 0.000757f, 0.000986f, 0.001166f, 0.001298f, 0.001310f,
- 0.001566f, 0.001614f, 0.001852f, 0.001933f, 0.002062f, 0.002327f, 0.002571f, 0.002699f,
- 0.002909f, 0.003057f, 0.003254f, 0.003496f, 0.003643f, 0.004066f, 0.004295f, 0.004665f,
- 0.004822f, 0.005161f, 0.005722f, 0.006008f, 0.006424f, 0.006897f, 0.007435f, 0.008049f,
- 0.008789f, 0.009529f, 0.010284f, 0.011177f, 0.012321f, 0.013466f, 0.014885f, 0.016586f,
- 0.018417f, 0.020844f, 0.023575f, 0.026810f, 0.030655f, 0.035400f, 0.041412f, 0.048462f,
- 0.056976f, 0.067322f, 0.079712f, 0.094543f, 0.112610f, 0.133789f, 0.158691f, 0.186279f,
- 0.217896f, 0.253418f, 0.670898f, 0.696777f, 0.702148f, 0.704590f, 0.705078f, 0.705566f,
- 0.000000f, 0.000317f, 0.000556f, 0.000619f, 0.000759f, 0.000889f, 0.001012f, 0.001163f,
- 0.001282f, 0.001353f, 0.001531f, 0.001621f, 0.001681f, 0.001862f, 0.001976f, 0.002140f,
- 0.002392f, 0.002502f, 0.002745f, 0.002838f, 0.003019f, 0.003311f, 0.003477f, 0.003639f,
- 0.003889f, 0.004166f, 0.004429f, 0.004784f, 0.005119f, 0.005547f, 0.006042f, 0.006317f,
- 0.006901f, 0.007442f, 0.008110f, 0.008751f, 0.009583f, 0.010590f, 0.011566f, 0.012894f,
- 0.014404f, 0.015930f, 0.018158f, 0.020569f, 0.023697f, 0.027374f, 0.031830f, 0.037567f,
- 0.044434f, 0.053009f, 0.063599f, 0.076538f, 0.092346f, 0.111511f, 0.134521f, 0.161133f,
- 0.191772f, 0.227173f, 0.654297f, 0.684082f, 0.687988f, 0.690918f, 0.691895f, 0.691895f,
- 0.000000f, 0.000275f, 0.000368f, 0.000572f, 0.000683f, 0.000731f, 0.000877f, 0.000979f,
- 0.001039f, 0.001091f, 0.001234f, 0.001332f, 0.001447f, 0.001547f, 0.001601f, 0.001760f,
- 0.001790f, 0.002007f, 0.002119f, 0.002245f, 0.002493f, 0.002565f, 0.002747f, 0.002920f,
- 0.003168f, 0.003235f, 0.003551f, 0.003830f, 0.004040f, 0.004368f, 0.004658f, 0.005001f,
- 0.005337f, 0.005798f, 0.006287f, 0.006794f, 0.007488f, 0.008087f, 0.008865f, 0.009773f,
- 0.010963f, 0.012199f, 0.013649f, 0.015610f, 0.017822f, 0.020493f, 0.023849f, 0.028320f,
- 0.033752f, 0.040466f, 0.049377f, 0.060028f, 0.073853f, 0.090698f, 0.111572f, 0.136841f,
- 0.166016f, 0.199341f, 0.640137f, 0.667969f, 0.675781f, 0.676758f, 0.678223f, 0.678223f,
- 0.000017f, 0.000193f, 0.000383f, 0.000487f, 0.000586f, 0.000597f, 0.000618f, 0.000733f,
- 0.000826f, 0.000863f, 0.000902f, 0.001037f, 0.001121f, 0.001244f, 0.001342f, 0.001329f,
- 0.001514f, 0.001506f, 0.001719f, 0.001793f, 0.001851f, 0.002016f, 0.002182f, 0.002281f,
- 0.002432f, 0.002554f, 0.002708f, 0.002859f, 0.003168f, 0.003344f, 0.003563f, 0.003845f,
- 0.004158f, 0.004478f, 0.004852f, 0.005154f, 0.005714f, 0.006207f, 0.006752f, 0.007370f,
- 0.008186f, 0.009155f, 0.010193f, 0.011490f, 0.013016f, 0.015144f, 0.017517f, 0.020752f,
- 0.024811f, 0.029922f, 0.036835f, 0.045593f, 0.056946f, 0.071533f, 0.090576f, 0.113159f,
- 0.140991f, 0.173340f, 0.624023f, 0.653809f, 0.660156f, 0.663574f, 0.664551f, 0.664062f,
- 0.000194f, 0.000227f, 0.000316f, 0.000451f, 0.000449f, 0.000482f, 0.000610f, 0.000511f,
- 0.000654f, 0.000673f, 0.000804f, 0.000844f, 0.000880f, 0.000955f, 0.000961f, 0.001127f,
- 0.001169f, 0.001210f, 0.001318f, 0.001330f, 0.001507f, 0.001592f, 0.001657f, 0.001771f,
- 0.001839f, 0.001953f, 0.002083f, 0.002214f, 0.002399f, 0.002518f, 0.002815f, 0.002882f,
- 0.003132f, 0.003361f, 0.003605f, 0.003925f, 0.004177f, 0.004528f, 0.004963f, 0.005527f,
- 0.006027f, 0.006783f, 0.007381f, 0.008469f, 0.009644f, 0.010849f, 0.012772f, 0.014748f,
- 0.017578f, 0.021332f, 0.026367f, 0.033142f, 0.042389f, 0.054413f, 0.070129f, 0.091064f,
- 0.116943f, 0.147339f, 0.608887f, 0.640137f, 0.645996f, 0.647461f, 0.650391f, 0.651367f,
- 0.000166f, 0.000146f, 0.000248f, 0.000320f, 0.000288f, 0.000446f, 0.000375f, 0.000407f,
- 0.000468f, 0.000514f, 0.000629f, 0.000638f, 0.000681f, 0.000773f, 0.000806f, 0.000766f,
- 0.000883f, 0.000927f, 0.000959f, 0.001036f, 0.001097f, 0.001172f, 0.001224f, 0.001297f,
- 0.001392f, 0.001425f, 0.001592f, 0.001631f, 0.001793f, 0.001965f, 0.002089f, 0.002157f,
- 0.002321f, 0.002495f, 0.002680f, 0.002874f, 0.003054f, 0.003305f, 0.003632f, 0.003902f,
- 0.004314f, 0.004753f, 0.005306f, 0.005901f, 0.006828f, 0.007645f, 0.008896f, 0.010323f,
- 0.012283f, 0.014816f, 0.018234f, 0.023010f, 0.029678f, 0.039276f, 0.052307f, 0.070190f,
- 0.093811f, 0.123474f, 0.591797f, 0.623535f, 0.631348f, 0.633301f, 0.634766f, 0.635254f,
- 0.000000f, 0.000154f, 0.000184f, 0.000257f, 0.000265f, 0.000266f, 0.000323f, 0.000291f,
- 0.000369f, 0.000384f, 0.000450f, 0.000472f, 0.000505f, 0.000572f, 0.000577f, 0.000604f,
- 0.000636f, 0.000675f, 0.000699f, 0.000736f, 0.000787f, 0.000840f, 0.000890f, 0.000945f,
- 0.000988f, 0.001039f, 0.001165f, 0.001165f, 0.001266f, 0.001318f, 0.001410f, 0.001550f,
- 0.001618f, 0.001743f, 0.001866f, 0.001997f, 0.002151f, 0.002319f, 0.002562f, 0.002779f,
- 0.002975f, 0.003298f, 0.003674f, 0.004131f, 0.004604f, 0.005268f, 0.006065f, 0.007027f,
- 0.008316f, 0.009949f, 0.012390f, 0.015526f, 0.019852f, 0.026733f, 0.036682f, 0.051666f,
- 0.072449f, 0.099792f, 0.574707f, 0.608398f, 0.614746f, 0.618164f, 0.619629f, 0.621094f,
- 0.000000f, 0.000008f, 0.000146f, 0.000181f, 0.000203f, 0.000243f, 0.000206f, 0.000250f,
- 0.000257f, 0.000283f, 0.000335f, 0.000293f, 0.000304f, 0.000368f, 0.000373f, 0.000435f,
- 0.000418f, 0.000468f, 0.000539f, 0.000540f, 0.000564f, 0.000598f, 0.000628f, 0.000657f,
- 0.000716f, 0.000724f, 0.000797f, 0.000807f, 0.000883f, 0.001002f, 0.000974f, 0.001037f,
- 0.001104f, 0.001196f, 0.001316f, 0.001394f, 0.001445f, 0.001574f, 0.001746f, 0.001829f,
- 0.002005f, 0.002222f, 0.002401f, 0.002699f, 0.003057f, 0.003372f, 0.003874f, 0.004505f,
- 0.005360f, 0.006500f, 0.007927f, 0.009972f, 0.012878f, 0.017258f, 0.024155f, 0.035339f,
- 0.052795f, 0.077637f, 0.558105f, 0.592285f, 0.600586f, 0.602539f, 0.604004f, 0.605469f,
- 0.000000f, 0.000107f, 0.000122f, 0.000093f, 0.000133f, 0.000142f, 0.000149f, 0.000174f,
- 0.000174f, 0.000184f, 0.000190f, 0.000234f, 0.000214f, 0.000250f, 0.000273f, 0.000286f,
- 0.000292f, 0.000302f, 0.000329f, 0.000336f, 0.000366f, 0.000391f, 0.000408f, 0.000444f,
- 0.000452f, 0.000495f, 0.000531f, 0.000559f, 0.000578f, 0.000611f, 0.000659f, 0.000675f,
- 0.000757f, 0.000771f, 0.000854f, 0.000906f, 0.000957f, 0.001004f, 0.001102f, 0.001187f,
- 0.001267f, 0.001394f, 0.001546f, 0.001683f, 0.001922f, 0.002094f, 0.002420f, 0.002754f,
- 0.003254f, 0.003878f, 0.004757f, 0.005997f, 0.007812f, 0.010544f, 0.014786f, 0.022324f,
- 0.035522f, 0.057465f, 0.541504f, 0.576172f, 0.583984f, 0.585938f, 0.588379f, 0.590332f,
- 0.000000f, 0.000099f, 0.000091f, 0.000084f, 0.000084f, 0.000086f, 0.000089f, 0.000101f,
- 0.000105f, 0.000109f, 0.000122f, 0.000124f, 0.000132f, 0.000146f, 0.000171f, 0.000172f,
- 0.000176f, 0.000198f, 0.000197f, 0.000239f, 0.000218f, 0.000235f, 0.000240f, 0.000281f,
- 0.000309f, 0.000301f, 0.000312f, 0.000321f, 0.000347f, 0.000370f, 0.000387f, 0.000419f,
- 0.000444f, 0.000458f, 0.000513f, 0.000536f, 0.000570f, 0.000607f, 0.000688f, 0.000703f,
- 0.000754f, 0.000834f, 0.000890f, 0.000997f, 0.001100f, 0.001238f, 0.001410f, 0.001584f,
- 0.001859f, 0.002207f, 0.002665f, 0.003323f, 0.004353f, 0.005947f, 0.008492f, 0.012909f,
- 0.021606f, 0.039368f, 0.522461f, 0.559082f, 0.566406f, 0.569824f, 0.572266f, 0.572754f,
- 0.000108f, 0.000089f, 0.000079f, 0.000072f, 0.000068f, 0.000065f, 0.000061f, 0.000057f,
- 0.000061f, 0.000062f, 0.000063f, 0.000086f, 0.000070f, 0.000071f, 0.000095f, 0.000080f,
- 0.000107f, 0.000113f, 0.000115f, 0.000124f, 0.000121f, 0.000130f, 0.000151f, 0.000154f,
- 0.000164f, 0.000170f, 0.000176f, 0.000189f, 0.000193f, 0.000215f, 0.000211f, 0.000242f,
- 0.000252f, 0.000260f, 0.000280f, 0.000293f, 0.000312f, 0.000350f, 0.000359f, 0.000389f,
- 0.000410f, 0.000452f, 0.000481f, 0.000535f, 0.000578f, 0.000643f, 0.000718f, 0.000812f,
- 0.000939f, 0.001107f, 0.001329f, 0.001644f, 0.002155f, 0.002930f, 0.004284f, 0.006706f,
- 0.011452f, 0.023895f, 0.504395f, 0.542480f, 0.550293f, 0.553711f, 0.555664f, 0.557129f,
- 0.000093f, 0.000072f, 0.000063f, 0.000058f, 0.000053f, 0.000050f, 0.000047f, 0.000046f,
- 0.000044f, 0.000042f, 0.000039f, 0.000037f, 0.000042f, 0.000035f, 0.000036f, 0.000037f,
- 0.000051f, 0.000046f, 0.000057f, 0.000058f, 0.000061f, 0.000062f, 0.000066f, 0.000069f,
- 0.000072f, 0.000087f, 0.000077f, 0.000088f, 0.000093f, 0.000099f, 0.000103f, 0.000109f,
- 0.000115f, 0.000122f, 0.000139f, 0.000134f, 0.000142f, 0.000170f, 0.000175f, 0.000179f,
- 0.000192f, 0.000203f, 0.000228f, 0.000245f, 0.000265f, 0.000291f, 0.000326f, 0.000360f,
- 0.000420f, 0.000481f, 0.000574f, 0.000686f, 0.000887f, 0.001203f, 0.001759f, 0.002892f,
- 0.005318f, 0.011955f, 0.487305f, 0.524902f, 0.534180f, 0.538086f, 0.539551f, 0.540527f,
- 0.000066f, 0.000049f, 0.000041f, 0.000037f, 0.000034f, 0.000033f, 0.000032f, 0.000030f,
- 0.000029f, 0.000028f, 0.000028f, 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f,
- 0.000022f, 0.000021f, 0.000022f, 0.000023f, 0.000019f, 0.000018f, 0.000019f, 0.000024f,
- 0.000026f, 0.000029f, 0.000032f, 0.000032f, 0.000036f, 0.000034f, 0.000040f, 0.000041f,
- 0.000043f, 0.000049f, 0.000049f, 0.000050f, 0.000056f, 0.000059f, 0.000067f, 0.000067f,
- 0.000074f, 0.000078f, 0.000082f, 0.000092f, 0.000094f, 0.000103f, 0.000120f, 0.000130f,
- 0.000141f, 0.000163f, 0.000191f, 0.000230f, 0.000286f, 0.000374f, 0.000543f, 0.000890f,
- 0.001802f, 0.004650f, 0.468994f, 0.507812f, 0.516602f, 0.520508f, 0.522461f, 0.523926f,
- 0.000007f, 0.000008f, 0.000008f, 0.000008f, 0.000011f, 0.000010f, 0.000010f, 0.000011f,
- 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000012f,
- 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
- 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000009f, 0.000009f,
- 0.000009f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000014f, 0.000013f, 0.000016f,
- 0.000015f, 0.000018f, 0.000020f, 0.000021f, 0.000022f, 0.000025f, 0.000024f, 0.000025f,
- 0.000030f, 0.000031f, 0.000040f, 0.000046f, 0.000052f, 0.000071f, 0.000099f, 0.000147f,
- 0.000306f, 0.001072f, 0.450439f, 0.491211f, 0.499756f, 0.503418f, 0.505859f, 0.507324f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f,
- 0.000007f, 0.000024f, 0.432129f, 0.474121f, 0.482666f, 0.486572f, 0.489014f, 0.490234f,
- },
- {
- 0.027573f, 0.080750f, 0.130981f, 0.177734f, 0.222290f, 0.263672f, 0.302002f, 0.338623f,
- 0.373291f, 0.405029f, 0.435791f, 0.464111f, 0.490967f, 0.516602f, 0.540039f, 0.563477f,
- 0.584961f, 0.605469f, 0.625000f, 0.644043f, 0.660645f, 0.677246f, 0.693848f, 0.708496f,
- 0.724121f, 0.738281f, 0.751465f, 0.764648f, 0.776855f, 0.789062f, 0.799805f, 0.810547f,
- 0.821289f, 0.831055f, 0.840820f, 0.850098f, 0.859863f, 0.867676f, 0.876953f, 0.884277f,
- 0.892578f, 0.900391f, 0.907227f, 0.914551f, 0.921875f, 0.928223f, 0.934082f, 0.940430f,
- 0.946777f, 0.952637f, 0.957520f, 0.964355f, 0.968262f, 0.974121f, 0.979004f, 0.983887f,
- 0.989258f, 0.994141f, 0.993164f, 0.983398f, 0.976074f, 0.969238f, 0.962891f, 0.957031f,
- 0.022873f, 0.067871f, 0.111511f, 0.153809f, 0.193359f, 0.232788f, 0.268799f, 0.303223f,
- 0.337402f, 0.368652f, 0.399414f, 0.427734f, 0.455078f, 0.481201f, 0.506348f, 0.529785f,
- 0.552246f, 0.573242f, 0.593750f, 0.613281f, 0.632324f, 0.650391f, 0.667480f, 0.683105f,
- 0.698730f, 0.713867f, 0.728516f, 0.741211f, 0.755371f, 0.767578f, 0.779785f, 0.791504f,
- 0.803223f, 0.813477f, 0.823242f, 0.834473f, 0.843750f, 0.853027f, 0.861816f, 0.870605f,
- 0.878906f, 0.887695f, 0.895996f, 0.901855f, 0.910645f, 0.917480f, 0.923828f, 0.930176f,
- 0.937012f, 0.943359f, 0.949707f, 0.955078f, 0.960938f, 0.966797f, 0.972656f, 0.977051f,
- 0.982422f, 0.987305f, 0.989746f, 0.981445f, 0.973633f, 0.967773f, 0.961426f, 0.956055f,
- 0.019089f, 0.057007f, 0.095215f, 0.132202f, 0.168823f, 0.204712f, 0.238281f, 0.272217f,
- 0.304688f, 0.334717f, 0.364502f, 0.392822f, 0.420898f, 0.446533f, 0.471924f, 0.495850f,
- 0.518555f, 0.541992f, 0.562988f, 0.582520f, 0.602539f, 0.621094f, 0.639160f, 0.655762f,
- 0.672852f, 0.687988f, 0.703613f, 0.718262f, 0.732422f, 0.746094f, 0.758789f, 0.771484f,
- 0.783203f, 0.795898f, 0.807129f, 0.817383f, 0.827637f, 0.837402f, 0.846680f, 0.856445f,
- 0.865234f, 0.874023f, 0.882324f, 0.890137f, 0.898438f, 0.905273f, 0.913574f, 0.920410f,
- 0.927246f, 0.934082f, 0.940918f, 0.946777f, 0.953125f, 0.958496f, 0.964844f, 0.969727f,
- 0.975586f, 0.980957f, 0.986816f, 0.979004f, 0.971680f, 0.965332f, 0.959961f, 0.954590f,
- 0.016327f, 0.048676f, 0.081787f, 0.114807f, 0.147705f, 0.180176f, 0.211426f, 0.243652f,
- 0.273438f, 0.303223f, 0.332031f, 0.360107f, 0.386963f, 0.412598f, 0.438477f, 0.462891f,
- 0.487305f, 0.510254f, 0.530762f, 0.552246f, 0.572754f, 0.590820f, 0.610352f, 0.629883f,
- 0.647461f, 0.662598f, 0.679688f, 0.693848f, 0.709961f, 0.723633f, 0.737305f, 0.750977f,
- 0.763672f, 0.776367f, 0.788086f, 0.799316f, 0.810059f, 0.820801f, 0.832031f, 0.841309f,
- 0.851074f, 0.860352f, 0.868652f, 0.877930f, 0.886230f, 0.894531f, 0.902832f, 0.910156f,
- 0.916504f, 0.924316f, 0.930664f, 0.937500f, 0.943848f, 0.950684f, 0.957031f, 0.962891f,
- 0.968262f, 0.974121f, 0.983887f, 0.976074f, 0.969727f, 0.963867f, 0.958496f, 0.953125f,
- 0.013573f, 0.041901f, 0.070801f, 0.100098f, 0.129517f, 0.159058f, 0.187866f, 0.217041f,
- 0.246216f, 0.274414f, 0.302002f, 0.328857f, 0.354980f, 0.381592f, 0.406738f, 0.431641f,
- 0.455322f, 0.478271f, 0.500000f, 0.521484f, 0.541992f, 0.563477f, 0.583008f, 0.600098f,
- 0.619141f, 0.636719f, 0.653320f, 0.671387f, 0.684570f, 0.699707f, 0.715332f, 0.729492f,
- 0.743164f, 0.755371f, 0.768555f, 0.780762f, 0.792480f, 0.804199f, 0.814453f, 0.824707f,
- 0.835449f, 0.845215f, 0.854980f, 0.864746f, 0.874023f, 0.882812f, 0.890137f, 0.898438f,
- 0.905762f, 0.914062f, 0.921387f, 0.928223f, 0.935059f, 0.941406f, 0.948242f, 0.955078f,
- 0.961426f, 0.966797f, 0.980957f, 0.973633f, 0.967773f, 0.961914f, 0.956543f, 0.951660f,
- 0.011681f, 0.036316f, 0.061584f, 0.087524f, 0.113342f, 0.140259f, 0.167358f, 0.194214f,
- 0.220947f, 0.247437f, 0.273926f, 0.300537f, 0.325684f, 0.351074f, 0.375732f, 0.400146f,
- 0.423828f, 0.446533f, 0.469482f, 0.491943f, 0.512695f, 0.532715f, 0.553223f, 0.573242f,
- 0.592285f, 0.609863f, 0.627930f, 0.644531f, 0.660156f, 0.676758f, 0.691406f, 0.706055f,
- 0.720215f, 0.734863f, 0.749023f, 0.762207f, 0.774414f, 0.786133f, 0.797852f, 0.809082f,
- 0.820801f, 0.831055f, 0.840332f, 0.850098f, 0.859863f, 0.869629f, 0.878418f, 0.886719f,
- 0.895508f, 0.903809f, 0.910645f, 0.918945f, 0.925781f, 0.932617f, 0.939453f, 0.947754f,
- 0.953613f, 0.958984f, 0.977539f, 0.970703f, 0.964844f, 0.959473f, 0.954102f, 0.949707f,
- 0.010330f, 0.031525f, 0.053406f, 0.076538f, 0.100159f, 0.124084f, 0.148193f, 0.173096f,
- 0.197998f, 0.223267f, 0.247681f, 0.273193f, 0.297607f, 0.322021f, 0.346924f, 0.370117f,
- 0.394043f, 0.417236f, 0.439697f, 0.462158f, 0.483887f, 0.504883f, 0.524902f, 0.545410f,
- 0.563477f, 0.583008f, 0.602539f, 0.618652f, 0.636230f, 0.652344f, 0.669922f, 0.685059f,
- 0.699219f, 0.714355f, 0.729004f, 0.741211f, 0.755371f, 0.767578f, 0.780762f, 0.792480f,
- 0.803711f, 0.815918f, 0.825195f, 0.836914f, 0.846191f, 0.855957f, 0.864746f, 0.874512f,
- 0.883301f, 0.891602f, 0.900391f, 0.908203f, 0.916016f, 0.923828f, 0.931152f, 0.937988f,
- 0.945801f, 0.952148f, 0.974121f, 0.967773f, 0.962891f, 0.957520f, 0.952637f, 0.947754f,
- 0.009186f, 0.027359f, 0.047302f, 0.067505f, 0.088806f, 0.109924f, 0.132202f, 0.154907f,
- 0.177246f, 0.201050f, 0.224121f, 0.247925f, 0.271240f, 0.295410f, 0.318359f, 0.341797f,
- 0.365234f, 0.387939f, 0.410156f, 0.432861f, 0.454590f, 0.475586f, 0.495850f, 0.517090f,
- 0.536621f, 0.556152f, 0.575195f, 0.592773f, 0.609863f, 0.628418f, 0.645020f, 0.661133f,
- 0.677246f, 0.692383f, 0.707520f, 0.721191f, 0.735352f, 0.748047f, 0.762207f, 0.774414f,
- 0.786621f, 0.798828f, 0.810547f, 0.820801f, 0.831543f, 0.842285f, 0.852539f, 0.862305f,
- 0.871094f, 0.880859f, 0.889648f, 0.898438f, 0.906738f, 0.914551f, 0.921875f, 0.929199f,
- 0.936035f, 0.944824f, 0.971191f, 0.965332f, 0.959473f, 0.955078f, 0.950195f, 0.945801f,
- 0.008041f, 0.024384f, 0.041321f, 0.059631f, 0.078003f, 0.097656f, 0.117554f, 0.138428f,
- 0.159912f, 0.181152f, 0.203003f, 0.224976f, 0.247070f, 0.269531f, 0.292480f, 0.314697f,
- 0.337891f, 0.360352f, 0.382324f, 0.403809f, 0.426025f, 0.447998f, 0.468018f, 0.488770f,
- 0.508301f, 0.528320f, 0.547852f, 0.567383f, 0.585449f, 0.603516f, 0.620605f, 0.637695f,
- 0.654297f, 0.670410f, 0.686523f, 0.700195f, 0.715820f, 0.729980f, 0.743164f, 0.756836f,
- 0.769531f, 0.782715f, 0.794434f, 0.805664f, 0.816895f, 0.827637f, 0.838379f, 0.848633f,
- 0.859375f, 0.868164f, 0.877930f, 0.887695f, 0.895996f, 0.905273f, 0.912598f, 0.920898f,
- 0.928711f, 0.936035f, 0.966797f, 0.962402f, 0.957031f, 0.952637f, 0.947754f, 0.943848f,
- 0.007095f, 0.021515f, 0.036926f, 0.052704f, 0.069641f, 0.087463f, 0.105347f, 0.123413f,
- 0.143188f, 0.163452f, 0.183105f, 0.204102f, 0.225220f, 0.246704f, 0.268066f, 0.290283f,
- 0.311768f, 0.333740f, 0.355225f, 0.376465f, 0.397949f, 0.419434f, 0.440430f, 0.461670f,
- 0.481445f, 0.500977f, 0.520020f, 0.540527f, 0.559570f, 0.578125f, 0.595703f, 0.613770f,
- 0.630371f, 0.646973f, 0.663086f, 0.678223f, 0.694336f, 0.709473f, 0.723145f, 0.736328f,
- 0.750000f, 0.764648f, 0.777344f, 0.790039f, 0.801270f, 0.812988f, 0.824707f, 0.834961f,
- 0.846191f, 0.856934f, 0.865723f, 0.875977f, 0.884766f, 0.894531f, 0.903320f, 0.911621f,
- 0.919922f, 0.927734f, 0.962891f, 0.959473f, 0.954102f, 0.949219f, 0.945312f, 0.941406f,
- 0.006138f, 0.019150f, 0.033051f, 0.047089f, 0.061829f, 0.077515f, 0.094299f, 0.111084f,
- 0.128174f, 0.146729f, 0.165771f, 0.185059f, 0.205200f, 0.224731f, 0.245361f, 0.265625f,
- 0.286865f, 0.307861f, 0.328857f, 0.350098f, 0.370605f, 0.392090f, 0.413086f, 0.433594f,
- 0.454346f, 0.474609f, 0.493896f, 0.513672f, 0.532227f, 0.552734f, 0.569824f, 0.588867f,
- 0.605957f, 0.623047f, 0.640625f, 0.656738f, 0.672852f, 0.688477f, 0.703613f, 0.717773f,
- 0.732910f, 0.746582f, 0.759766f, 0.772461f, 0.786621f, 0.798340f, 0.810059f, 0.820312f,
- 0.832520f, 0.842773f, 0.853516f, 0.863770f, 0.873535f, 0.883789f, 0.892578f, 0.901367f,
- 0.910645f, 0.919434f, 0.958984f, 0.955566f, 0.951172f, 0.946777f, 0.942871f, 0.938965f,
- 0.005424f, 0.017059f, 0.029541f, 0.042023f, 0.055389f, 0.069397f, 0.083984f, 0.099670f,
- 0.115601f, 0.132324f, 0.149292f, 0.167114f, 0.185547f, 0.204468f, 0.224121f, 0.243896f,
- 0.262939f, 0.283691f, 0.304443f, 0.323486f, 0.345459f, 0.365479f, 0.386230f, 0.407471f,
- 0.426758f, 0.448486f, 0.467529f, 0.487061f, 0.506348f, 0.526367f, 0.545410f, 0.563965f,
- 0.581543f, 0.600098f, 0.617676f, 0.634277f, 0.650391f, 0.666016f, 0.682617f, 0.697754f,
- 0.712891f, 0.727539f, 0.741211f, 0.755859f, 0.769043f, 0.782227f, 0.793945f, 0.806152f,
- 0.818848f, 0.830566f, 0.840332f, 0.851074f, 0.861328f, 0.872070f, 0.881836f, 0.892090f,
- 0.900879f, 0.910645f, 0.955566f, 0.952637f, 0.948730f, 0.943359f, 0.939941f, 0.935547f,
- 0.004833f, 0.015442f, 0.026169f, 0.037689f, 0.049683f, 0.062164f, 0.075806f, 0.089539f,
- 0.103760f, 0.119263f, 0.134888f, 0.151978f, 0.168335f, 0.186646f, 0.204102f, 0.223022f,
- 0.242065f, 0.260986f, 0.280518f, 0.300537f, 0.320801f, 0.340820f, 0.360107f, 0.381104f,
- 0.401367f, 0.421387f, 0.441650f, 0.460449f, 0.480957f, 0.500000f, 0.519531f, 0.538574f,
- 0.557129f, 0.575684f, 0.593262f, 0.610840f, 0.628906f, 0.645508f, 0.662109f, 0.677246f,
- 0.692871f, 0.708008f, 0.723145f, 0.738281f, 0.751465f, 0.766113f, 0.778320f, 0.791504f,
- 0.802246f, 0.816406f, 0.827637f, 0.838867f, 0.850098f, 0.860352f, 0.871582f, 0.881348f,
- 0.890137f, 0.899902f, 0.951660f, 0.948730f, 0.944824f, 0.940918f, 0.937012f, 0.933594f,
- 0.004269f, 0.013809f, 0.023911f, 0.033569f, 0.044342f, 0.056213f, 0.068054f, 0.080811f,
- 0.093933f, 0.107910f, 0.122131f, 0.137451f, 0.152710f, 0.169434f, 0.185791f, 0.203979f,
- 0.221436f, 0.239990f, 0.257812f, 0.277344f, 0.296631f, 0.316162f, 0.335693f, 0.355713f,
- 0.375244f, 0.395996f, 0.416016f, 0.436035f, 0.455078f, 0.474365f, 0.494629f, 0.513184f,
- 0.532715f, 0.550781f, 0.569336f, 0.586914f, 0.604980f, 0.622559f, 0.639648f, 0.655762f,
- 0.672363f, 0.688477f, 0.704102f, 0.718750f, 0.733887f, 0.747559f, 0.761230f, 0.775391f,
- 0.788574f, 0.800781f, 0.814453f, 0.825684f, 0.837402f, 0.848633f, 0.859375f, 0.870605f,
- 0.880371f, 0.891113f, 0.947754f, 0.945312f, 0.941895f, 0.937988f, 0.934082f, 0.931152f,
- 0.004028f, 0.012581f, 0.021133f, 0.030396f, 0.039948f, 0.050323f, 0.061523f, 0.072815f,
- 0.084961f, 0.096985f, 0.110535f, 0.124756f, 0.138916f, 0.153687f, 0.169800f, 0.185669f,
- 0.202881f, 0.219116f, 0.237305f, 0.255615f, 0.273926f, 0.293213f, 0.311768f, 0.331055f,
- 0.351074f, 0.370605f, 0.390381f, 0.409668f, 0.429688f, 0.449707f, 0.468994f, 0.487549f,
- 0.506836f, 0.526367f, 0.545898f, 0.562988f, 0.581543f, 0.599121f, 0.616699f, 0.634766f,
- 0.651367f, 0.667480f, 0.683594f, 0.699707f, 0.714844f, 0.730957f, 0.744141f, 0.758789f,
- 0.772949f, 0.785645f, 0.799316f, 0.812500f, 0.823730f, 0.836914f, 0.847168f, 0.859375f,
- 0.869629f, 0.880371f, 0.942383f, 0.941406f, 0.937500f, 0.934570f, 0.931152f, 0.927734f,
- 0.003613f, 0.011391f, 0.018875f, 0.027679f, 0.036133f, 0.045624f, 0.055420f, 0.065491f,
- 0.076416f, 0.088135f, 0.099487f, 0.112427f, 0.126099f, 0.139771f, 0.154419f, 0.169556f,
- 0.184814f, 0.201050f, 0.218262f, 0.234985f, 0.252441f, 0.271484f, 0.289062f, 0.308594f,
- 0.326660f, 0.346924f, 0.365234f, 0.384521f, 0.404541f, 0.424072f, 0.443359f, 0.463135f,
- 0.482422f, 0.501953f, 0.521484f, 0.539551f, 0.558594f, 0.576660f, 0.595215f, 0.612793f,
- 0.629883f, 0.647949f, 0.663574f, 0.679688f, 0.695801f, 0.711426f, 0.727539f, 0.741699f,
- 0.757324f, 0.770996f, 0.785156f, 0.798828f, 0.811035f, 0.823730f, 0.835449f, 0.848145f,
- 0.858887f, 0.870605f, 0.937988f, 0.937988f, 0.934570f, 0.931152f, 0.927734f, 0.924805f,
- 0.003248f, 0.010185f, 0.017395f, 0.025055f, 0.032928f, 0.041321f, 0.049957f, 0.059265f,
- 0.069092f, 0.079407f, 0.090820f, 0.101746f, 0.113770f, 0.126953f, 0.140381f, 0.154053f,
- 0.168701f, 0.184082f, 0.199951f, 0.216431f, 0.232788f, 0.250000f, 0.267578f, 0.285645f,
- 0.303955f, 0.322998f, 0.341553f, 0.361084f, 0.379150f, 0.399414f, 0.418701f, 0.437988f,
- 0.457275f, 0.477051f, 0.496094f, 0.515137f, 0.534180f, 0.553223f, 0.571289f, 0.589844f,
- 0.606934f, 0.625488f, 0.643066f, 0.659668f, 0.676758f, 0.692871f, 0.708984f, 0.725098f,
- 0.740234f, 0.753906f, 0.769043f, 0.782227f, 0.796387f, 0.810059f, 0.822266f, 0.834961f,
- 0.847168f, 0.859375f, 0.933594f, 0.933594f, 0.931152f, 0.927246f, 0.923828f, 0.921387f,
- 0.002914f, 0.009361f, 0.015793f, 0.022659f, 0.029938f, 0.037354f, 0.045593f, 0.053406f,
- 0.062988f, 0.072083f, 0.081665f, 0.092712f, 0.103943f, 0.114990f, 0.128174f, 0.140503f,
- 0.153809f, 0.167725f, 0.182251f, 0.198242f, 0.213623f, 0.230225f, 0.246826f, 0.263672f,
- 0.281494f, 0.300049f, 0.318604f, 0.337158f, 0.356201f, 0.374756f, 0.394531f, 0.413574f,
- 0.433105f, 0.451904f, 0.471680f, 0.491211f, 0.509766f, 0.529297f, 0.547852f, 0.566895f,
- 0.584961f, 0.603516f, 0.621094f, 0.638672f, 0.656738f, 0.673340f, 0.689453f, 0.706543f,
- 0.722656f, 0.737793f, 0.752930f, 0.767578f, 0.781250f, 0.796875f, 0.809082f, 0.823242f,
- 0.835449f, 0.847656f, 0.929199f, 0.929199f, 0.927246f, 0.923828f, 0.920898f, 0.917969f,
- 0.002766f, 0.008736f, 0.014442f, 0.020691f, 0.027054f, 0.033905f, 0.040924f, 0.048645f,
- 0.056976f, 0.065674f, 0.074951f, 0.084229f, 0.094116f, 0.105225f, 0.116333f, 0.127563f,
- 0.139771f, 0.153564f, 0.166626f, 0.181030f, 0.196411f, 0.211182f, 0.227417f, 0.243896f,
- 0.260742f, 0.277588f, 0.295898f, 0.314209f, 0.332031f, 0.351562f, 0.370117f, 0.389404f,
- 0.408203f, 0.428223f, 0.447266f, 0.467041f, 0.486084f, 0.505859f, 0.524414f, 0.543945f,
- 0.562012f, 0.581543f, 0.600098f, 0.617676f, 0.636230f, 0.654297f, 0.670898f, 0.687500f,
- 0.704102f, 0.720703f, 0.736816f, 0.751465f, 0.766113f, 0.781738f, 0.796387f, 0.809082f,
- 0.823242f, 0.835938f, 0.923828f, 0.925781f, 0.922852f, 0.920410f, 0.916992f, 0.914551f,
- 0.002483f, 0.007599f, 0.013161f, 0.018555f, 0.024551f, 0.030670f, 0.037476f, 0.044464f,
- 0.051636f, 0.059174f, 0.067688f, 0.075928f, 0.085693f, 0.095093f, 0.105591f, 0.116394f,
- 0.127441f, 0.139648f, 0.152344f, 0.165527f, 0.179565f, 0.193970f, 0.208862f, 0.224487f,
- 0.240356f, 0.256836f, 0.274658f, 0.291748f, 0.310059f, 0.328369f, 0.346680f, 0.365234f,
- 0.384521f, 0.404297f, 0.423340f, 0.442139f, 0.462646f, 0.481445f, 0.500977f, 0.520020f,
- 0.540039f, 0.559082f, 0.577148f, 0.596191f, 0.614746f, 0.632812f, 0.651367f, 0.669434f,
- 0.685059f, 0.702637f, 0.718750f, 0.734375f, 0.750488f, 0.766113f, 0.780762f, 0.795410f,
- 0.811035f, 0.823730f, 0.919434f, 0.920898f, 0.918457f, 0.916016f, 0.913086f, 0.910645f,
- 0.002457f, 0.007114f, 0.011757f, 0.016708f, 0.022125f, 0.027786f, 0.033752f, 0.040375f,
- 0.046661f, 0.053864f, 0.061584f, 0.069336f, 0.077515f, 0.086365f, 0.095947f, 0.105896f,
- 0.116638f, 0.127075f, 0.138916f, 0.151245f, 0.164062f, 0.177490f, 0.191528f, 0.206177f,
- 0.221802f, 0.237427f, 0.253906f, 0.270508f, 0.287842f, 0.305664f, 0.323730f, 0.342285f,
- 0.361572f, 0.379639f, 0.399170f, 0.418457f, 0.438965f, 0.458252f, 0.477295f, 0.497559f,
- 0.516113f, 0.536133f, 0.554688f, 0.574707f, 0.593750f, 0.612305f, 0.630859f, 0.648926f,
- 0.666504f, 0.684082f, 0.701660f, 0.717773f, 0.734863f, 0.751465f, 0.766602f, 0.781738f,
- 0.797852f, 0.812012f, 0.913086f, 0.916016f, 0.913574f, 0.911621f, 0.909180f, 0.906250f,
- 0.002132f, 0.006493f, 0.010750f, 0.015717f, 0.020569f, 0.025604f, 0.030823f, 0.036682f,
- 0.043060f, 0.049286f, 0.055786f, 0.062988f, 0.070557f, 0.078918f, 0.086914f, 0.096191f,
- 0.105530f, 0.116028f, 0.126953f, 0.138306f, 0.149902f, 0.162231f, 0.175537f, 0.189453f,
- 0.203491f, 0.218628f, 0.234131f, 0.250000f, 0.266602f, 0.284180f, 0.301514f, 0.319580f,
- 0.338135f, 0.356689f, 0.375977f, 0.395020f, 0.413818f, 0.434082f, 0.452881f, 0.473145f,
- 0.492920f, 0.512207f, 0.532227f, 0.552246f, 0.570801f, 0.591309f, 0.609375f, 0.629395f,
- 0.646973f, 0.665527f, 0.683105f, 0.700684f, 0.717773f, 0.734863f, 0.751465f, 0.767578f,
- 0.782715f, 0.799316f, 0.908203f, 0.911133f, 0.909180f, 0.907227f, 0.904785f, 0.902832f,
- 0.001891f, 0.006008f, 0.010025f, 0.014122f, 0.018616f, 0.023239f, 0.028442f, 0.033691f,
- 0.038757f, 0.044556f, 0.050964f, 0.057465f, 0.064087f, 0.071167f, 0.079224f, 0.087463f,
- 0.096008f, 0.105591f, 0.115356f, 0.125488f, 0.136597f, 0.148193f, 0.160278f, 0.173218f,
- 0.186768f, 0.200684f, 0.215332f, 0.231323f, 0.246338f, 0.262939f, 0.279785f, 0.297607f,
- 0.314941f, 0.333984f, 0.353271f, 0.371094f, 0.391357f, 0.409668f, 0.430420f, 0.448975f,
- 0.469482f, 0.489746f, 0.509277f, 0.528809f, 0.549316f, 0.568848f, 0.588379f, 0.607910f,
- 0.626953f, 0.645996f, 0.664062f, 0.683105f, 0.700684f, 0.718262f, 0.735840f, 0.751953f,
- 0.768555f, 0.785645f, 0.902344f, 0.906250f, 0.904785f, 0.902832f, 0.900391f, 0.898438f,
- 0.001732f, 0.005573f, 0.009193f, 0.012932f, 0.017075f, 0.021286f, 0.025406f, 0.030289f,
- 0.035675f, 0.040344f, 0.046326f, 0.052032f, 0.058411f, 0.064575f, 0.072205f, 0.079834f,
- 0.087708f, 0.095947f, 0.104797f, 0.114380f, 0.124451f, 0.134888f, 0.146606f, 0.158691f,
- 0.170776f, 0.184082f, 0.197510f, 0.212524f, 0.227417f, 0.243164f, 0.259521f, 0.276367f,
- 0.293457f, 0.311768f, 0.329590f, 0.348633f, 0.367188f, 0.386230f, 0.406006f, 0.425781f,
- 0.446533f, 0.465332f, 0.486084f, 0.505859f, 0.526367f, 0.545898f, 0.567383f, 0.585938f,
- 0.605957f, 0.625977f, 0.645508f, 0.664551f, 0.683105f, 0.701172f, 0.718750f, 0.736816f,
- 0.754395f, 0.770508f, 0.896484f, 0.900879f, 0.900391f, 0.897949f, 0.895996f, 0.894043f,
- 0.001713f, 0.004684f, 0.008339f, 0.011818f, 0.015450f, 0.019409f, 0.023605f, 0.027832f,
- 0.032349f, 0.036865f, 0.041809f, 0.047302f, 0.052673f, 0.058838f, 0.065613f, 0.072083f,
- 0.079407f, 0.087280f, 0.095337f, 0.104126f, 0.113037f, 0.122986f, 0.133667f, 0.144897f,
- 0.156250f, 0.168579f, 0.181396f, 0.195068f, 0.208984f, 0.224243f, 0.239624f, 0.255859f,
- 0.272461f, 0.289551f, 0.307617f, 0.326172f, 0.344482f, 0.363770f, 0.383301f, 0.402588f,
- 0.422607f, 0.443115f, 0.463135f, 0.483154f, 0.503418f, 0.523926f, 0.544434f, 0.564941f,
- 0.584473f, 0.604980f, 0.624512f, 0.645508f, 0.664551f, 0.683594f, 0.701660f, 0.721191f,
- 0.738281f, 0.755859f, 0.889648f, 0.895996f, 0.895020f, 0.893066f, 0.891602f, 0.889160f,
- 0.001545f, 0.004745f, 0.007710f, 0.010979f, 0.014450f, 0.017807f, 0.021469f, 0.025238f,
- 0.029282f, 0.033661f, 0.038177f, 0.043182f, 0.048157f, 0.053436f, 0.059326f, 0.065674f,
- 0.072205f, 0.078857f, 0.086548f, 0.094604f, 0.102905f, 0.111816f, 0.121521f, 0.131592f,
- 0.142334f, 0.153442f, 0.165894f, 0.178345f, 0.192139f, 0.205933f, 0.220703f, 0.236084f,
- 0.251709f, 0.268555f, 0.285645f, 0.303467f, 0.321777f, 0.340332f, 0.359619f, 0.379150f,
- 0.398682f, 0.419189f, 0.440430f, 0.460449f, 0.480957f, 0.501465f, 0.521973f, 0.543457f,
- 0.563477f, 0.584961f, 0.604492f, 0.625488f, 0.645508f, 0.665039f, 0.684082f, 0.704102f,
- 0.723145f, 0.741211f, 0.885254f, 0.890137f, 0.889160f, 0.887695f, 0.886719f, 0.884277f,
- 0.001487f, 0.004356f, 0.006828f, 0.010162f, 0.012993f, 0.016022f, 0.019333f, 0.023087f,
- 0.026886f, 0.030518f, 0.034668f, 0.039062f, 0.043671f, 0.048370f, 0.053741f, 0.059326f,
- 0.065308f, 0.071655f, 0.078125f, 0.085693f, 0.093323f, 0.101807f, 0.110657f, 0.119507f,
- 0.129517f, 0.140137f, 0.151367f, 0.163330f, 0.175781f, 0.188843f, 0.202759f, 0.217163f,
- 0.232666f, 0.248413f, 0.264893f, 0.282227f, 0.299805f, 0.318115f, 0.336914f, 0.356445f,
- 0.375488f, 0.395996f, 0.416504f, 0.436279f, 0.457520f, 0.479004f, 0.499023f, 0.520508f,
- 0.541504f, 0.562988f, 0.583984f, 0.604492f, 0.625488f, 0.646973f, 0.666504f, 0.687012f,
- 0.706055f, 0.725098f, 0.877441f, 0.885254f, 0.884766f, 0.882324f, 0.881836f, 0.880371f,
- 0.001443f, 0.003807f, 0.006336f, 0.009171f, 0.011909f, 0.015007f, 0.018097f, 0.020905f,
- 0.024384f, 0.027893f, 0.031555f, 0.035370f, 0.039581f, 0.044128f, 0.048889f, 0.053894f,
- 0.059174f, 0.065125f, 0.070984f, 0.077698f, 0.084656f, 0.091919f, 0.100037f, 0.108093f,
- 0.117493f, 0.127563f, 0.137817f, 0.148438f, 0.159912f, 0.172485f, 0.185547f, 0.199585f,
- 0.213867f, 0.229248f, 0.244995f, 0.261230f, 0.278564f, 0.296387f, 0.314697f, 0.333252f,
- 0.353271f, 0.372314f, 0.393311f, 0.413330f, 0.433594f, 0.455078f, 0.476318f, 0.497314f,
- 0.519531f, 0.540527f, 0.562500f, 0.583496f, 0.605469f, 0.626953f, 0.648438f, 0.669434f,
- 0.689941f, 0.709961f, 0.870605f, 0.878906f, 0.878418f, 0.877441f, 0.875488f, 0.873535f,
- 0.001302f, 0.003712f, 0.005859f, 0.008286f, 0.010910f, 0.013779f, 0.016235f, 0.019135f,
- 0.021912f, 0.025345f, 0.029022f, 0.032166f, 0.036011f, 0.040131f, 0.044128f, 0.048492f,
- 0.053528f, 0.058533f, 0.064209f, 0.070129f, 0.076355f, 0.083191f, 0.090149f, 0.098328f,
- 0.106628f, 0.115662f, 0.124817f, 0.134766f, 0.145630f, 0.157104f, 0.169678f, 0.182495f,
- 0.195801f, 0.210205f, 0.225342f, 0.241455f, 0.257812f, 0.274902f, 0.292725f, 0.311035f,
- 0.330322f, 0.349365f, 0.369873f, 0.390137f, 0.411133f, 0.432373f, 0.453369f, 0.474609f,
- 0.496826f, 0.519043f, 0.541504f, 0.563477f, 0.585449f, 0.606445f, 0.629395f, 0.650391f,
- 0.672363f, 0.693848f, 0.863281f, 0.872070f, 0.872070f, 0.871582f, 0.869629f, 0.868164f,
- 0.001170f, 0.003151f, 0.005295f, 0.007812f, 0.010132f, 0.012466f, 0.015076f, 0.017517f,
- 0.019943f, 0.023178f, 0.026443f, 0.029312f, 0.032471f, 0.036041f, 0.039978f, 0.044037f,
- 0.048828f, 0.053070f, 0.057983f, 0.063232f, 0.068909f, 0.075378f, 0.081909f, 0.088745f,
- 0.096375f, 0.104309f, 0.113281f, 0.122437f, 0.132202f, 0.142944f, 0.154419f, 0.166138f,
- 0.178955f, 0.192505f, 0.206421f, 0.221558f, 0.237183f, 0.253906f, 0.270996f, 0.289062f,
- 0.308105f, 0.326904f, 0.346924f, 0.366455f, 0.387695f, 0.408936f, 0.430176f, 0.451416f,
- 0.474365f, 0.496582f, 0.518066f, 0.541016f, 0.563965f, 0.585938f, 0.608887f, 0.630859f,
- 0.654297f, 0.675781f, 0.856934f, 0.865234f, 0.866211f, 0.864746f, 0.863281f, 0.862793f,
- 0.001049f, 0.003254f, 0.005234f, 0.007263f, 0.009270f, 0.011307f, 0.013596f, 0.015869f,
- 0.018555f, 0.020844f, 0.023972f, 0.026566f, 0.029739f, 0.033020f, 0.036316f, 0.039856f,
- 0.044159f, 0.048096f, 0.052277f, 0.057281f, 0.062439f, 0.067871f, 0.073792f, 0.079956f,
- 0.087158f, 0.094055f, 0.102234f, 0.110535f, 0.119934f, 0.129517f, 0.140259f, 0.151245f,
- 0.162842f, 0.175537f, 0.189209f, 0.203369f, 0.218262f, 0.233643f, 0.250488f, 0.268066f,
- 0.285645f, 0.304443f, 0.324219f, 0.343750f, 0.364014f, 0.385254f, 0.406494f, 0.428223f,
- 0.450928f, 0.472656f, 0.495605f, 0.519043f, 0.541504f, 0.565918f, 0.588379f, 0.612305f,
- 0.635742f, 0.659180f, 0.850098f, 0.859863f, 0.859863f, 0.858398f, 0.857910f, 0.856934f,
- 0.000914f, 0.002861f, 0.004742f, 0.006569f, 0.008415f, 0.010521f, 0.012596f, 0.014648f,
- 0.016708f, 0.019089f, 0.021515f, 0.023865f, 0.026688f, 0.029572f, 0.032928f, 0.036377f,
- 0.039337f, 0.043365f, 0.047333f, 0.051544f, 0.056305f, 0.061066f, 0.066406f, 0.071960f,
- 0.078247f, 0.084961f, 0.092163f, 0.099426f, 0.108215f, 0.116943f, 0.126831f, 0.136719f,
- 0.148193f, 0.159302f, 0.171875f, 0.185669f, 0.199585f, 0.214478f, 0.230469f, 0.247070f,
- 0.264160f, 0.282471f, 0.301270f, 0.321045f, 0.341553f, 0.362061f, 0.383545f, 0.404785f,
- 0.427734f, 0.449951f, 0.473389f, 0.496582f, 0.520020f, 0.543457f, 0.568359f, 0.592285f,
- 0.615723f, 0.639648f, 0.840820f, 0.851074f, 0.853027f, 0.853027f, 0.852051f, 0.850586f,
- 0.000679f, 0.002518f, 0.004173f, 0.006149f, 0.008064f, 0.009369f, 0.011551f, 0.013222f,
- 0.015175f, 0.017212f, 0.019592f, 0.021835f, 0.024048f, 0.026932f, 0.029846f, 0.032623f,
- 0.035675f, 0.038940f, 0.042542f, 0.046295f, 0.050354f, 0.055054f, 0.059601f, 0.064880f,
- 0.070190f, 0.076233f, 0.082703f, 0.089661f, 0.097229f, 0.105103f, 0.113831f, 0.123474f,
- 0.133423f, 0.144409f, 0.156006f, 0.168335f, 0.182495f, 0.196411f, 0.211304f, 0.227295f,
- 0.243530f, 0.260986f, 0.279053f, 0.298828f, 0.318359f, 0.339111f, 0.360107f, 0.381348f,
- 0.403809f, 0.427490f, 0.449463f, 0.473633f, 0.497803f, 0.521484f, 0.546875f, 0.570801f,
- 0.595703f, 0.620605f, 0.833008f, 0.845215f, 0.845703f, 0.845703f, 0.845215f, 0.843750f,
- 0.000719f, 0.002470f, 0.003975f, 0.005337f, 0.007275f, 0.008713f, 0.010376f, 0.012032f,
- 0.013580f, 0.015793f, 0.017609f, 0.019501f, 0.021530f, 0.024277f, 0.026657f, 0.029312f,
- 0.031982f, 0.035187f, 0.038086f, 0.041565f, 0.045288f, 0.049103f, 0.053436f, 0.058136f,
- 0.062927f, 0.068054f, 0.073853f, 0.080383f, 0.087341f, 0.094666f, 0.102173f, 0.111084f,
- 0.120300f, 0.130859f, 0.141235f, 0.152954f, 0.164429f, 0.178223f, 0.192749f, 0.207642f,
- 0.223145f, 0.239868f, 0.258301f, 0.276611f, 0.295654f, 0.316162f, 0.337402f, 0.358643f,
- 0.380859f, 0.403320f, 0.427002f, 0.450684f, 0.474609f, 0.499756f, 0.523926f, 0.550781f,
- 0.575195f, 0.600586f, 0.824707f, 0.836914f, 0.838379f, 0.838867f, 0.837402f, 0.837402f,
- 0.000683f, 0.002361f, 0.003649f, 0.005116f, 0.006416f, 0.008202f, 0.009460f, 0.010941f,
- 0.012817f, 0.014099f, 0.015839f, 0.017593f, 0.019867f, 0.021988f, 0.023926f, 0.026276f,
- 0.028824f, 0.031311f, 0.034363f, 0.036957f, 0.040375f, 0.043823f, 0.047546f, 0.051758f,
- 0.056183f, 0.061249f, 0.066162f, 0.071777f, 0.077942f, 0.084534f, 0.091553f, 0.099487f,
- 0.107910f, 0.116882f, 0.127075f, 0.137451f, 0.148804f, 0.161499f, 0.174805f, 0.188721f,
- 0.203735f, 0.220093f, 0.237427f, 0.254639f, 0.273926f, 0.293457f, 0.313965f, 0.334961f,
- 0.357666f, 0.379883f, 0.403076f, 0.427002f, 0.451660f, 0.476807f, 0.501953f, 0.527344f,
- 0.553711f, 0.581055f, 0.815918f, 0.829102f, 0.831055f, 0.831055f, 0.831055f, 0.830566f,
- 0.000607f, 0.001863f, 0.003416f, 0.004528f, 0.005943f, 0.007191f, 0.008781f, 0.009964f,
- 0.011337f, 0.012939f, 0.014458f, 0.015808f, 0.018051f, 0.019394f, 0.021332f, 0.023529f,
- 0.025803f, 0.028168f, 0.030502f, 0.033020f, 0.036072f, 0.039032f, 0.042419f, 0.046082f,
- 0.049927f, 0.054321f, 0.058411f, 0.063538f, 0.069336f, 0.075684f, 0.081787f, 0.088562f,
- 0.096436f, 0.104553f, 0.113281f, 0.123596f, 0.133667f, 0.145386f, 0.157471f, 0.171021f,
- 0.185547f, 0.200562f, 0.216553f, 0.234619f, 0.251709f, 0.271240f, 0.291504f, 0.312012f,
- 0.333496f, 0.355957f, 0.379395f, 0.403076f, 0.428223f, 0.453857f, 0.479492f, 0.506348f,
- 0.532715f, 0.560059f, 0.805664f, 0.820801f, 0.823730f, 0.822754f, 0.822754f, 0.822266f,
- 0.000593f, 0.001862f, 0.002966f, 0.004341f, 0.005600f, 0.006516f, 0.007626f, 0.008995f,
- 0.010223f, 0.011292f, 0.012848f, 0.014427f, 0.016098f, 0.017532f, 0.019165f, 0.021027f,
- 0.022842f, 0.024918f, 0.027115f, 0.029739f, 0.032013f, 0.034637f, 0.037506f, 0.040955f,
- 0.044220f, 0.048065f, 0.051941f, 0.056305f, 0.061768f, 0.066528f, 0.072327f, 0.078979f,
- 0.085571f, 0.092834f, 0.101135f, 0.110229f, 0.119690f, 0.130127f, 0.141602f, 0.153564f,
- 0.167114f, 0.181763f, 0.196899f, 0.213623f, 0.230957f, 0.249268f, 0.268555f, 0.289062f,
- 0.310059f, 0.333252f, 0.355957f, 0.379883f, 0.404541f, 0.430176f, 0.456055f, 0.483887f,
- 0.510254f, 0.539062f, 0.797852f, 0.812988f, 0.814941f, 0.815430f, 0.815918f, 0.814453f,
- 0.000556f, 0.001811f, 0.002998f, 0.003815f, 0.004658f, 0.005905f, 0.007099f, 0.008232f,
- 0.009239f, 0.010483f, 0.011559f, 0.013016f, 0.014305f, 0.015671f, 0.017090f, 0.018646f,
- 0.020370f, 0.022369f, 0.024124f, 0.026062f, 0.028458f, 0.030624f, 0.033264f, 0.036041f,
- 0.039307f, 0.042053f, 0.045807f, 0.049530f, 0.054016f, 0.058441f, 0.063904f, 0.069641f,
- 0.075745f, 0.082520f, 0.089539f, 0.097717f, 0.106750f, 0.116150f, 0.126587f, 0.137817f,
- 0.150024f, 0.163452f, 0.177490f, 0.193359f, 0.209717f, 0.227539f, 0.246704f, 0.266602f,
- 0.287598f, 0.309326f, 0.332520f, 0.355713f, 0.380371f, 0.406494f, 0.432861f, 0.459961f,
- 0.488525f, 0.517090f, 0.787598f, 0.804199f, 0.806641f, 0.807617f, 0.807617f, 0.807129f,
- 0.000507f, 0.001697f, 0.002468f, 0.003351f, 0.004425f, 0.005486f, 0.006325f, 0.007412f,
- 0.008156f, 0.009270f, 0.010239f, 0.011497f, 0.012520f, 0.013954f, 0.015182f, 0.016617f,
- 0.018036f, 0.019714f, 0.021362f, 0.022934f, 0.024704f, 0.026886f, 0.029419f, 0.031525f,
- 0.034302f, 0.037292f, 0.040558f, 0.043701f, 0.047577f, 0.051849f, 0.056183f, 0.061249f,
- 0.066467f, 0.072876f, 0.078918f, 0.086548f, 0.094116f, 0.102844f, 0.112427f, 0.122620f,
- 0.133667f, 0.146362f, 0.159668f, 0.174438f, 0.190063f, 0.207153f, 0.225098f, 0.244263f,
- 0.264648f, 0.286377f, 0.308350f, 0.332275f, 0.357178f, 0.382080f, 0.408936f, 0.436035f,
- 0.465820f, 0.495361f, 0.776855f, 0.794922f, 0.797852f, 0.799316f, 0.798828f, 0.798340f,
- 0.000366f, 0.001644f, 0.002289f, 0.003046f, 0.004082f, 0.005032f, 0.005550f, 0.006599f,
- 0.007389f, 0.008369f, 0.009201f, 0.010315f, 0.011276f, 0.012405f, 0.013466f, 0.014587f,
- 0.015991f, 0.017303f, 0.018692f, 0.020081f, 0.021851f, 0.023865f, 0.025726f, 0.027771f,
- 0.030136f, 0.032532f, 0.035309f, 0.038422f, 0.041626f, 0.045044f, 0.048767f, 0.053375f,
- 0.057861f, 0.063477f, 0.069031f, 0.075684f, 0.082336f, 0.090515f, 0.099182f, 0.107849f,
- 0.118958f, 0.130005f, 0.142212f, 0.156128f, 0.170898f, 0.186890f, 0.203857f, 0.222534f,
- 0.241821f, 0.263428f, 0.285156f, 0.308105f, 0.332275f, 0.359131f, 0.385010f, 0.413086f,
- 0.441895f, 0.472168f, 0.767090f, 0.785645f, 0.789062f, 0.789551f, 0.790527f, 0.789551f,
- 0.000340f, 0.001434f, 0.002129f, 0.002827f, 0.003696f, 0.004463f, 0.005112f, 0.005730f,
- 0.006836f, 0.007465f, 0.008217f, 0.008972f, 0.009972f, 0.010887f, 0.011948f, 0.012794f,
- 0.013947f, 0.015030f, 0.016266f, 0.017670f, 0.019165f, 0.020813f, 0.022415f, 0.024216f,
- 0.026047f, 0.028336f, 0.030594f, 0.033142f, 0.035858f, 0.039154f, 0.042328f, 0.046265f,
- 0.050537f, 0.055237f, 0.059998f, 0.065918f, 0.072083f, 0.078918f, 0.086243f, 0.094788f,
- 0.104309f, 0.114807f, 0.125854f, 0.138672f, 0.152222f, 0.166992f, 0.183716f, 0.200928f,
- 0.220459f, 0.240112f, 0.261719f, 0.284668f, 0.308838f, 0.333740f, 0.360840f, 0.388672f,
- 0.418213f, 0.448730f, 0.756348f, 0.775391f, 0.779297f, 0.780273f, 0.781250f, 0.780273f,
- 0.000511f, 0.001174f, 0.002163f, 0.002554f, 0.003391f, 0.003990f, 0.004547f, 0.005211f,
- 0.005993f, 0.006653f, 0.007462f, 0.007942f, 0.008781f, 0.009476f, 0.010323f, 0.011444f,
- 0.012207f, 0.013062f, 0.014336f, 0.015427f, 0.016464f, 0.017929f, 0.019287f, 0.021164f,
- 0.022461f, 0.024567f, 0.026474f, 0.028885f, 0.031067f, 0.033630f, 0.036835f, 0.040070f,
- 0.043488f, 0.047394f, 0.051910f, 0.056732f, 0.062378f, 0.068481f, 0.075073f, 0.082764f,
- 0.090881f, 0.100403f, 0.110779f, 0.122009f, 0.134399f, 0.148560f, 0.163940f, 0.180298f,
- 0.198120f, 0.218140f, 0.239014f, 0.260986f, 0.285645f, 0.310059f, 0.336182f, 0.364502f,
- 0.393311f, 0.424316f, 0.744629f, 0.765137f, 0.769531f, 0.770508f, 0.771484f, 0.771484f,
- 0.000374f, 0.000983f, 0.001696f, 0.002279f, 0.002924f, 0.003571f, 0.004139f, 0.004742f,
- 0.005390f, 0.005817f, 0.006371f, 0.006981f, 0.007648f, 0.008354f, 0.009041f, 0.009727f,
- 0.010536f, 0.011375f, 0.012398f, 0.013535f, 0.014389f, 0.015541f, 0.016602f, 0.018112f,
- 0.019516f, 0.020996f, 0.022644f, 0.024582f, 0.026627f, 0.028748f, 0.031586f, 0.034210f,
- 0.037415f, 0.040588f, 0.044464f, 0.048676f, 0.053192f, 0.058472f, 0.064880f, 0.070984f,
- 0.078674f, 0.086914f, 0.096191f, 0.106445f, 0.117859f, 0.130859f, 0.144775f, 0.160522f,
- 0.177490f, 0.196411f, 0.215942f, 0.237793f, 0.261475f, 0.285645f, 0.312012f, 0.339111f,
- 0.368652f, 0.400391f, 0.733887f, 0.755371f, 0.759766f, 0.760742f, 0.761719f, 0.761719f,
- 0.000298f, 0.000924f, 0.001542f, 0.002125f, 0.002439f, 0.003153f, 0.003502f, 0.004196f,
- 0.004585f, 0.005039f, 0.005531f, 0.006054f, 0.006531f, 0.007217f, 0.007935f, 0.008362f,
- 0.009171f, 0.009773f, 0.010704f, 0.011505f, 0.012207f, 0.013321f, 0.014381f, 0.015556f,
- 0.016586f, 0.017792f, 0.019608f, 0.020844f, 0.022583f, 0.024536f, 0.026566f, 0.028885f,
- 0.031494f, 0.034332f, 0.037689f, 0.041260f, 0.045258f, 0.049927f, 0.054901f, 0.060699f,
- 0.067322f, 0.074768f, 0.082764f, 0.091675f, 0.102173f, 0.113831f, 0.126831f, 0.141113f,
- 0.157104f, 0.175049f, 0.194580f, 0.215210f, 0.237305f, 0.261475f, 0.287598f, 0.314697f,
- 0.344482f, 0.375977f, 0.721680f, 0.744629f, 0.749512f, 0.751465f, 0.751465f, 0.751465f,
- 0.000275f, 0.001002f, 0.001335f, 0.001704f, 0.002264f, 0.002790f, 0.003202f, 0.003555f,
- 0.004017f, 0.004368f, 0.004894f, 0.005318f, 0.005592f, 0.006241f, 0.006611f, 0.007317f,
- 0.007851f, 0.008560f, 0.009071f, 0.009758f, 0.010429f, 0.011375f, 0.011986f, 0.013130f,
- 0.013916f, 0.015205f, 0.016403f, 0.017624f, 0.019119f, 0.020660f, 0.022278f, 0.024582f,
- 0.026474f, 0.029007f, 0.031738f, 0.034668f, 0.038025f, 0.041962f, 0.046417f, 0.051270f,
- 0.056915f, 0.063110f, 0.070312f, 0.078369f, 0.087769f, 0.098145f, 0.109863f, 0.123352f,
- 0.137451f, 0.154785f, 0.172363f, 0.192261f, 0.214233f, 0.237793f, 0.262939f, 0.289795f,
- 0.319336f, 0.351074f, 0.708984f, 0.733398f, 0.738281f, 0.740234f, 0.741211f, 0.740723f,
- 0.000334f, 0.000805f, 0.001231f, 0.001640f, 0.002033f, 0.002277f, 0.002871f, 0.003115f,
- 0.003481f, 0.003895f, 0.004147f, 0.004379f, 0.004841f, 0.005306f, 0.005653f, 0.006241f,
- 0.006630f, 0.007217f, 0.007721f, 0.008133f, 0.008842f, 0.009529f, 0.010010f, 0.011017f,
- 0.011780f, 0.012733f, 0.013626f, 0.014824f, 0.015656f, 0.017212f, 0.018829f, 0.020248f,
- 0.021973f, 0.023926f, 0.026306f, 0.028900f, 0.031616f, 0.034973f, 0.038605f, 0.042816f,
- 0.047424f, 0.052765f, 0.059021f, 0.066162f, 0.074219f, 0.083435f, 0.093994f, 0.105835f,
- 0.119385f, 0.134277f, 0.151611f, 0.170532f, 0.191284f, 0.214233f, 0.239014f, 0.265381f,
- 0.293701f, 0.325684f, 0.696289f, 0.722168f, 0.727051f, 0.729004f, 0.729980f, 0.729980f,
- 0.000215f, 0.000635f, 0.001184f, 0.001348f, 0.001758f, 0.002171f, 0.002249f, 0.002596f,
- 0.003004f, 0.003325f, 0.003487f, 0.003906f, 0.004108f, 0.004494f, 0.004955f, 0.005241f,
- 0.005726f, 0.006134f, 0.006485f, 0.006916f, 0.007496f, 0.008072f, 0.008629f, 0.009071f,
- 0.009857f, 0.010651f, 0.011375f, 0.012283f, 0.013283f, 0.014320f, 0.015350f, 0.016739f,
- 0.017975f, 0.019852f, 0.021454f, 0.023712f, 0.025925f, 0.028717f, 0.031769f, 0.035217f,
- 0.038910f, 0.043396f, 0.048767f, 0.054901f, 0.061707f, 0.069824f, 0.078613f, 0.089783f,
- 0.101685f, 0.115479f, 0.131104f, 0.149292f, 0.168823f, 0.190674f, 0.214844f, 0.241211f,
- 0.269775f, 0.299561f, 0.683594f, 0.709961f, 0.715332f, 0.717773f, 0.718262f, 0.718750f,
- 0.000199f, 0.000826f, 0.001047f, 0.001288f, 0.001600f, 0.001857f, 0.002014f, 0.002329f,
- 0.002535f, 0.002785f, 0.003027f, 0.003210f, 0.003580f, 0.003788f, 0.004025f, 0.004444f,
- 0.004791f, 0.004974f, 0.005417f, 0.005909f, 0.006248f, 0.006672f, 0.007118f, 0.007664f,
- 0.008232f, 0.008759f, 0.009598f, 0.009964f, 0.010956f, 0.011650f, 0.012665f, 0.013702f,
- 0.014832f, 0.016144f, 0.017654f, 0.019211f, 0.021118f, 0.023102f, 0.025681f, 0.028320f,
- 0.031708f, 0.035370f, 0.039673f, 0.044739f, 0.050812f, 0.057800f, 0.065796f, 0.074768f,
- 0.085510f, 0.097961f, 0.112000f, 0.128662f, 0.147217f, 0.168213f, 0.190796f, 0.216309f,
- 0.244751f, 0.274902f, 0.669922f, 0.698730f, 0.703613f, 0.705566f, 0.707031f, 0.707031f,
- 0.000212f, 0.000458f, 0.000959f, 0.001192f, 0.001321f, 0.001500f, 0.001823f, 0.002064f,
- 0.002073f, 0.002293f, 0.002512f, 0.002768f, 0.002981f, 0.003138f, 0.003431f, 0.003765f,
- 0.003918f, 0.004238f, 0.004482f, 0.004814f, 0.005245f, 0.005531f, 0.005871f, 0.006214f,
- 0.006660f, 0.007236f, 0.007664f, 0.008331f, 0.008812f, 0.009628f, 0.010277f, 0.010979f,
- 0.012016f, 0.012978f, 0.014084f, 0.015495f, 0.016937f, 0.018494f, 0.020386f, 0.022659f,
- 0.025208f, 0.028183f, 0.031860f, 0.036072f, 0.040894f, 0.046326f, 0.053009f, 0.061127f,
- 0.070374f, 0.081238f, 0.094238f, 0.109314f, 0.126343f, 0.145874f, 0.167847f, 0.192505f,
- 0.219604f, 0.249634f, 0.656738f, 0.686035f, 0.690430f, 0.694336f, 0.694336f, 0.696777f,
- 0.000151f, 0.000529f, 0.000692f, 0.000883f, 0.001153f, 0.001337f, 0.001380f, 0.001520f,
- 0.001753f, 0.001886f, 0.002077f, 0.002243f, 0.002386f, 0.002556f, 0.002832f, 0.003029f,
- 0.003277f, 0.003447f, 0.003683f, 0.003952f, 0.004135f, 0.004578f, 0.004833f, 0.005222f,
- 0.005417f, 0.005810f, 0.006355f, 0.006718f, 0.007076f, 0.007652f, 0.008293f, 0.008980f,
- 0.009674f, 0.010422f, 0.011276f, 0.012283f, 0.013443f, 0.014664f, 0.016113f, 0.017853f,
- 0.019897f, 0.022156f, 0.024826f, 0.028275f, 0.032135f, 0.036865f, 0.042389f, 0.049011f,
- 0.056732f, 0.066223f, 0.077576f, 0.090820f, 0.106384f, 0.124512f, 0.145264f, 0.169067f,
- 0.195190f, 0.224976f, 0.642578f, 0.671387f, 0.679688f, 0.682617f, 0.682617f, 0.683594f,
- 0.000127f, 0.000376f, 0.000600f, 0.000721f, 0.000901f, 0.001066f, 0.001180f, 0.001332f,
- 0.001455f, 0.001549f, 0.001709f, 0.001831f, 0.001947f, 0.002150f, 0.002245f, 0.002443f,
- 0.002682f, 0.002844f, 0.002989f, 0.003201f, 0.003403f, 0.003683f, 0.003883f, 0.004097f,
- 0.004372f, 0.004665f, 0.004963f, 0.005348f, 0.005711f, 0.006165f, 0.006672f, 0.007004f,
- 0.007610f, 0.008278f, 0.008873f, 0.009636f, 0.010475f, 0.011475f, 0.012634f, 0.014053f,
- 0.015404f, 0.017242f, 0.019104f, 0.021774f, 0.024750f, 0.028458f, 0.032745f, 0.038391f,
- 0.044861f, 0.052795f, 0.062103f, 0.073914f, 0.087830f, 0.104553f, 0.123718f, 0.145996f,
- 0.171509f, 0.200439f, 0.627930f, 0.658691f, 0.666504f, 0.668945f, 0.671387f, 0.671387f,
- 0.000013f, 0.000374f, 0.000443f, 0.000688f, 0.000819f, 0.000844f, 0.001004f, 0.001132f,
- 0.001216f, 0.001259f, 0.001405f, 0.001523f, 0.001566f, 0.001753f, 0.001842f, 0.001997f,
- 0.002022f, 0.002287f, 0.002377f, 0.002541f, 0.002787f, 0.002878f, 0.003096f, 0.003283f,
- 0.003551f, 0.003651f, 0.003971f, 0.004272f, 0.004524f, 0.004887f, 0.005196f, 0.005527f,
- 0.005939f, 0.006386f, 0.006977f, 0.007526f, 0.008148f, 0.008835f, 0.009689f, 0.010689f,
- 0.011810f, 0.013000f, 0.014641f, 0.016388f, 0.018799f, 0.021469f, 0.024734f, 0.029022f,
- 0.034210f, 0.040588f, 0.048401f, 0.058319f, 0.070435f, 0.085205f, 0.102905f, 0.123901f,
- 0.147827f, 0.175903f, 0.612793f, 0.645508f, 0.653320f, 0.656250f, 0.657227f, 0.657227f,
- 0.000113f, 0.000234f, 0.000465f, 0.000547f, 0.000646f, 0.000684f, 0.000711f, 0.000832f,
- 0.000963f, 0.000999f, 0.001042f, 0.001183f, 0.001279f, 0.001402f, 0.001494f, 0.001513f,
- 0.001688f, 0.001716f, 0.001919f, 0.001993f, 0.002081f, 0.002253f, 0.002441f, 0.002575f,
- 0.002714f, 0.002876f, 0.003050f, 0.003214f, 0.003531f, 0.003714f, 0.003956f, 0.004276f,
- 0.004604f, 0.004967f, 0.005386f, 0.005718f, 0.006283f, 0.006790f, 0.007290f, 0.008133f,
- 0.008957f, 0.009987f, 0.010956f, 0.012375f, 0.013916f, 0.015991f, 0.018311f, 0.021347f,
- 0.025253f, 0.030289f, 0.036560f, 0.044586f, 0.054779f, 0.067749f, 0.083252f, 0.102722f,
- 0.125732f, 0.152100f, 0.597168f, 0.631836f, 0.639160f, 0.643555f, 0.643066f, 0.645508f,
- 0.000207f, 0.000175f, 0.000364f, 0.000507f, 0.000496f, 0.000569f, 0.000683f, 0.000584f,
- 0.000737f, 0.000764f, 0.000885f, 0.000964f, 0.000999f, 0.001076f, 0.001085f, 0.001272f,
- 0.001327f, 0.001354f, 0.001491f, 0.001494f, 0.001677f, 0.001781f, 0.001862f, 0.001976f,
- 0.002079f, 0.002190f, 0.002338f, 0.002481f, 0.002691f, 0.002811f, 0.003117f, 0.003214f,
- 0.003422f, 0.003706f, 0.003990f, 0.004314f, 0.004608f, 0.004982f, 0.005379f, 0.006027f,
- 0.006580f, 0.007351f, 0.008049f, 0.009041f, 0.010323f, 0.011551f, 0.013428f, 0.015419f,
- 0.018219f, 0.021713f, 0.026550f, 0.032715f, 0.040833f, 0.051605f, 0.065552f, 0.082458f,
- 0.104004f, 0.129395f, 0.582031f, 0.618652f, 0.625488f, 0.627930f, 0.630859f, 0.631348f,
- 0.000189f, 0.000160f, 0.000272f, 0.000387f, 0.000335f, 0.000486f, 0.000424f, 0.000469f,
- 0.000551f, 0.000589f, 0.000700f, 0.000727f, 0.000772f, 0.000859f, 0.000891f, 0.000872f,
- 0.001000f, 0.001048f, 0.001076f, 0.001172f, 0.001224f, 0.001311f, 0.001376f, 0.001450f,
- 0.001554f, 0.001591f, 0.001760f, 0.001838f, 0.001999f, 0.002180f, 0.002333f, 0.002388f,
- 0.002584f, 0.002777f, 0.002907f, 0.003162f, 0.003368f, 0.003677f, 0.003979f, 0.004303f,
- 0.004715f, 0.005188f, 0.005787f, 0.006378f, 0.007313f, 0.008194f, 0.009407f, 0.010887f,
- 0.012779f, 0.015198f, 0.018494f, 0.022888f, 0.029037f, 0.037659f, 0.048920f, 0.064270f,
- 0.083740f, 0.107300f, 0.565918f, 0.603516f, 0.611328f, 0.614746f, 0.617188f, 0.618164f,
- 0.000000f, 0.000170f, 0.000207f, 0.000274f, 0.000292f, 0.000309f, 0.000381f, 0.000326f,
- 0.000418f, 0.000439f, 0.000519f, 0.000519f, 0.000560f, 0.000574f, 0.000652f, 0.000678f,
- 0.000717f, 0.000756f, 0.000782f, 0.000820f, 0.000893f, 0.000937f, 0.000991f, 0.001063f,
- 0.001112f, 0.001174f, 0.001284f, 0.001302f, 0.001408f, 0.001460f, 0.001586f, 0.001711f,
- 0.001826f, 0.001959f, 0.002058f, 0.002207f, 0.002388f, 0.002565f, 0.002836f, 0.003046f,
- 0.003284f, 0.003567f, 0.004009f, 0.004463f, 0.005001f, 0.005661f, 0.006451f, 0.007473f,
- 0.008751f, 0.010368f, 0.012611f, 0.015587f, 0.019730f, 0.025787f, 0.034729f, 0.047272f,
- 0.064392f, 0.087097f, 0.550293f, 0.587891f, 0.596680f, 0.600586f, 0.602539f, 0.603516f,
- 0.000000f, 0.000057f, 0.000175f, 0.000210f, 0.000221f, 0.000261f, 0.000224f, 0.000285f,
- 0.000296f, 0.000329f, 0.000374f, 0.000329f, 0.000344f, 0.000416f, 0.000421f, 0.000479f,
- 0.000455f, 0.000530f, 0.000552f, 0.000598f, 0.000640f, 0.000670f, 0.000695f, 0.000740f,
- 0.000798f, 0.000806f, 0.000883f, 0.000908f, 0.000983f, 0.001094f, 0.001083f, 0.001169f,
- 0.001242f, 0.001340f, 0.001440f, 0.001536f, 0.001601f, 0.001752f, 0.001893f, 0.002029f,
- 0.002218f, 0.002424f, 0.002651f, 0.002934f, 0.003294f, 0.003681f, 0.004200f, 0.004833f,
- 0.005688f, 0.006863f, 0.008202f, 0.010178f, 0.012955f, 0.016846f, 0.023163f, 0.032745f,
- 0.047150f, 0.067383f, 0.534180f, 0.574219f, 0.582031f, 0.584961f, 0.586914f, 0.589844f,
- 0.000000f, 0.000105f, 0.000145f, 0.000101f, 0.000161f, 0.000163f, 0.000165f, 0.000193f,
- 0.000190f, 0.000202f, 0.000205f, 0.000260f, 0.000251f, 0.000281f, 0.000305f, 0.000316f,
- 0.000323f, 0.000346f, 0.000364f, 0.000383f, 0.000413f, 0.000436f, 0.000461f, 0.000486f,
- 0.000515f, 0.000564f, 0.000594f, 0.000616f, 0.000639f, 0.000677f, 0.000729f, 0.000748f,
- 0.000842f, 0.000861f, 0.000943f, 0.000970f, 0.001054f, 0.001120f, 0.001219f, 0.001310f,
- 0.001398f, 0.001534f, 0.001709f, 0.001852f, 0.002096f, 0.002291f, 0.002594f, 0.002987f,
- 0.003481f, 0.004128f, 0.004997f, 0.006218f, 0.007950f, 0.010445f, 0.014313f, 0.020874f,
- 0.032166f, 0.049866f, 0.517578f, 0.558105f, 0.567383f, 0.570801f, 0.573730f, 0.574707f,
- 0.000000f, 0.000097f, 0.000089f, 0.000082f, 0.000092f, 0.000096f, 0.000092f, 0.000118f,
- 0.000126f, 0.000130f, 0.000138f, 0.000138f, 0.000143f, 0.000163f, 0.000181f, 0.000187f,
- 0.000195f, 0.000228f, 0.000221f, 0.000261f, 0.000243f, 0.000254f, 0.000274f, 0.000299f,
- 0.000334f, 0.000332f, 0.000345f, 0.000362f, 0.000394f, 0.000410f, 0.000433f, 0.000463f,
- 0.000497f, 0.000510f, 0.000562f, 0.000594f, 0.000636f, 0.000670f, 0.000731f, 0.000777f,
- 0.000832f, 0.000927f, 0.000991f, 0.001101f, 0.001210f, 0.001350f, 0.001513f, 0.001720f,
- 0.001999f, 0.002373f, 0.002815f, 0.003498f, 0.004478f, 0.006001f, 0.008347f, 0.012299f,
- 0.019669f, 0.034210f, 0.501465f, 0.542969f, 0.552246f, 0.556641f, 0.559082f, 0.559570f,
- 0.000107f, 0.000087f, 0.000077f, 0.000070f, 0.000065f, 0.000066f, 0.000059f, 0.000064f,
- 0.000065f, 0.000071f, 0.000070f, 0.000095f, 0.000081f, 0.000085f, 0.000110f, 0.000097f,
- 0.000117f, 0.000126f, 0.000127f, 0.000133f, 0.000132f, 0.000141f, 0.000169f, 0.000173f,
- 0.000185f, 0.000183f, 0.000192f, 0.000215f, 0.000216f, 0.000235f, 0.000236f, 0.000265f,
- 0.000278f, 0.000290f, 0.000313f, 0.000317f, 0.000347f, 0.000365f, 0.000400f, 0.000422f,
- 0.000457f, 0.000494f, 0.000535f, 0.000586f, 0.000639f, 0.000700f, 0.000786f, 0.000888f,
- 0.001019f, 0.001207f, 0.001435f, 0.001746f, 0.002258f, 0.003019f, 0.004299f, 0.006523f,
- 0.010612f, 0.020859f, 0.484619f, 0.527344f, 0.536621f, 0.541504f, 0.542969f, 0.544922f,
- 0.000092f, 0.000070f, 0.000062f, 0.000056f, 0.000051f, 0.000048f, 0.000045f, 0.000044f,
- 0.000041f, 0.000039f, 0.000038f, 0.000037f, 0.000047f, 0.000039f, 0.000041f, 0.000041f,
- 0.000058f, 0.000053f, 0.000062f, 0.000064f, 0.000068f, 0.000072f, 0.000076f, 0.000076f,
- 0.000078f, 0.000092f, 0.000085f, 0.000101f, 0.000104f, 0.000110f, 0.000115f, 0.000118f,
- 0.000127f, 0.000133f, 0.000152f, 0.000150f, 0.000163f, 0.000190f, 0.000190f, 0.000202f,
- 0.000213f, 0.000225f, 0.000249f, 0.000268f, 0.000296f, 0.000321f, 0.000354f, 0.000402f,
- 0.000458f, 0.000520f, 0.000618f, 0.000744f, 0.000950f, 0.001263f, 0.001822f, 0.002865f,
- 0.005028f, 0.010544f, 0.468018f, 0.511230f, 0.521484f, 0.524902f, 0.529297f, 0.529785f,
- 0.000067f, 0.000049f, 0.000041f, 0.000037f, 0.000034f, 0.000032f, 0.000031f, 0.000029f,
- 0.000028f, 0.000027f, 0.000027f, 0.000026f, 0.000025f, 0.000023f, 0.000022f, 0.000021f,
- 0.000020f, 0.000020f, 0.000023f, 0.000024f, 0.000021f, 0.000022f, 0.000025f, 0.000029f,
- 0.000030f, 0.000034f, 0.000036f, 0.000034f, 0.000039f, 0.000038f, 0.000045f, 0.000045f,
- 0.000048f, 0.000051f, 0.000053f, 0.000055f, 0.000063f, 0.000070f, 0.000073f, 0.000073f,
- 0.000080f, 0.000084f, 0.000089f, 0.000102f, 0.000107f, 0.000115f, 0.000128f, 0.000145f,
- 0.000156f, 0.000178f, 0.000213f, 0.000253f, 0.000311f, 0.000400f, 0.000572f, 0.000916f,
- 0.001751f, 0.004158f, 0.450439f, 0.496338f, 0.505859f, 0.510742f, 0.513184f, 0.514648f,
- 0.000016f, 0.000013f, 0.000011f, 0.000010f, 0.000012f, 0.000012f, 0.000011f, 0.000012f,
- 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f,
- 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f,
- 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000009f, 0.000009f, 0.000009f,
- 0.000009f, 0.000011f, 0.000012f, 0.000012f, 0.000015f, 0.000014f, 0.000014f, 0.000017f,
- 0.000018f, 0.000020f, 0.000020f, 0.000022f, 0.000026f, 0.000027f, 0.000028f, 0.000027f,
- 0.000033f, 0.000036f, 0.000044f, 0.000051f, 0.000057f, 0.000078f, 0.000103f, 0.000159f,
- 0.000315f, 0.000997f, 0.433350f, 0.479980f, 0.490234f, 0.495605f, 0.498291f, 0.499512f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f,
- 0.000007f, 0.000025f, 0.416016f, 0.464111f, 0.474854f, 0.479248f, 0.481934f, 0.484375f,
- },
- {
- 0.023209f, 0.069336f, 0.113037f, 0.154663f, 0.193726f, 0.231812f, 0.267578f, 0.301758f,
- 0.333740f, 0.364258f, 0.393555f, 0.421631f, 0.447510f, 0.473145f, 0.497070f, 0.520020f,
- 0.541992f, 0.562988f, 0.583008f, 0.602539f, 0.620605f, 0.638184f, 0.655762f, 0.671387f,
- 0.687500f, 0.702637f, 0.716309f, 0.729980f, 0.744141f, 0.757812f, 0.769531f, 0.782227f,
- 0.793945f, 0.804688f, 0.815918f, 0.826172f, 0.836426f, 0.846191f, 0.855957f, 0.865234f,
- 0.874023f, 0.882812f, 0.891113f, 0.898926f, 0.907227f, 0.915039f, 0.922852f, 0.929688f,
- 0.937012f, 0.943848f, 0.950684f, 0.956543f, 0.963379f, 0.969238f, 0.976074f, 0.981445f,
- 0.986816f, 0.992676f, 0.991211f, 0.978516f, 0.968750f, 0.960449f, 0.952637f, 0.945312f,
- 0.019730f, 0.059631f, 0.098206f, 0.135864f, 0.172119f, 0.206421f, 0.239624f, 0.272461f,
- 0.304932f, 0.333984f, 0.362549f, 0.389648f, 0.416016f, 0.441406f, 0.466309f, 0.489502f,
- 0.511230f, 0.533203f, 0.554199f, 0.573242f, 0.593262f, 0.611816f, 0.629395f, 0.645508f,
- 0.662598f, 0.678711f, 0.693359f, 0.708496f, 0.722168f, 0.735840f, 0.750000f, 0.762207f,
- 0.773926f, 0.786133f, 0.796875f, 0.808594f, 0.818848f, 0.829590f, 0.839355f, 0.850098f,
- 0.859863f, 0.868652f, 0.877441f, 0.886230f, 0.895020f, 0.903809f, 0.911133f, 0.918457f,
- 0.925781f, 0.933105f, 0.940430f, 0.946777f, 0.954590f, 0.960938f, 0.966797f, 0.973145f,
- 0.979004f, 0.984863f, 0.987793f, 0.976074f, 0.966797f, 0.958496f, 0.951172f, 0.943848f,
- 0.017151f, 0.051636f, 0.085510f, 0.119202f, 0.152466f, 0.184814f, 0.216187f, 0.246582f,
- 0.276855f, 0.305664f, 0.332764f, 0.360107f, 0.385986f, 0.411621f, 0.435791f, 0.459473f,
- 0.481445f, 0.502441f, 0.524414f, 0.546387f, 0.565430f, 0.583496f, 0.602051f, 0.619629f,
- 0.636719f, 0.653320f, 0.669434f, 0.684082f, 0.699707f, 0.713867f, 0.728027f, 0.741211f,
- 0.754883f, 0.767090f, 0.779297f, 0.791016f, 0.802734f, 0.813965f, 0.824219f, 0.833984f,
- 0.843750f, 0.854492f, 0.863281f, 0.873535f, 0.882324f, 0.890137f, 0.898926f, 0.906738f,
- 0.915039f, 0.922852f, 0.930176f, 0.937012f, 0.944336f, 0.951172f, 0.958008f, 0.964844f,
- 0.970703f, 0.977051f, 0.983887f, 0.972656f, 0.964355f, 0.956543f, 0.949219f, 0.942383f,
- 0.014885f, 0.044678f, 0.075195f, 0.104919f, 0.135254f, 0.165649f, 0.194702f, 0.223633f,
- 0.251221f, 0.279053f, 0.305420f, 0.331543f, 0.357422f, 0.382568f, 0.406982f, 0.430420f,
- 0.453369f, 0.475586f, 0.496582f, 0.517090f, 0.536133f, 0.556641f, 0.575684f, 0.592773f,
- 0.611328f, 0.628418f, 0.643555f, 0.661621f, 0.676270f, 0.691406f, 0.705566f, 0.720215f,
- 0.733887f, 0.746582f, 0.759766f, 0.772949f, 0.784668f, 0.795898f, 0.807129f, 0.818359f,
- 0.828125f, 0.838867f, 0.848633f, 0.858887f, 0.867676f, 0.877441f, 0.886230f, 0.894531f,
- 0.903320f, 0.911621f, 0.919434f, 0.927734f, 0.934570f, 0.940918f, 0.948730f, 0.956543f,
- 0.962402f, 0.969238f, 0.979980f, 0.970215f, 0.961914f, 0.954102f, 0.947266f, 0.940918f,
- 0.013046f, 0.038940f, 0.066162f, 0.093323f, 0.120544f, 0.147583f, 0.174683f, 0.201538f,
- 0.228516f, 0.254639f, 0.280518f, 0.304932f, 0.330566f, 0.354492f, 0.379395f, 0.402100f,
- 0.424561f, 0.446533f, 0.467529f, 0.488525f, 0.509277f, 0.529297f, 0.547852f, 0.566895f,
- 0.585449f, 0.602539f, 0.620605f, 0.636230f, 0.653809f, 0.667480f, 0.684570f, 0.698242f,
- 0.712891f, 0.726562f, 0.739746f, 0.753418f, 0.765625f, 0.777344f, 0.789551f, 0.801270f,
- 0.812500f, 0.823730f, 0.833984f, 0.844238f, 0.854004f, 0.863770f, 0.874023f, 0.882324f,
- 0.891113f, 0.899902f, 0.908203f, 0.916504f, 0.924805f, 0.932129f, 0.939453f, 0.947266f,
- 0.954102f, 0.960938f, 0.976562f, 0.967285f, 0.958984f, 0.951660f, 0.944824f, 0.938965f,
- 0.011696f, 0.034698f, 0.058807f, 0.083130f, 0.107727f, 0.132324f, 0.156982f, 0.182251f,
- 0.207153f, 0.232178f, 0.256836f, 0.280762f, 0.304688f, 0.328369f, 0.352295f, 0.375244f,
- 0.397461f, 0.419434f, 0.440430f, 0.461914f, 0.482178f, 0.501953f, 0.522461f, 0.540527f,
- 0.559570f, 0.577148f, 0.595703f, 0.613281f, 0.628418f, 0.644531f, 0.661621f, 0.676270f,
- 0.691406f, 0.705078f, 0.719727f, 0.733887f, 0.746094f, 0.759766f, 0.771973f, 0.784180f,
- 0.795898f, 0.807617f, 0.818359f, 0.829102f, 0.839844f, 0.850098f, 0.859375f, 0.869629f,
- 0.878906f, 0.887695f, 0.896484f, 0.905273f, 0.914062f, 0.921875f, 0.929688f, 0.937988f,
- 0.944824f, 0.952637f, 0.973145f, 0.963379f, 0.956055f, 0.949219f, 0.942871f, 0.937012f,
- 0.010094f, 0.030975f, 0.052063f, 0.073975f, 0.096069f, 0.118713f, 0.141479f, 0.164551f,
- 0.187866f, 0.211182f, 0.234985f, 0.258057f, 0.280518f, 0.303467f, 0.326172f, 0.348145f,
- 0.370117f, 0.392822f, 0.413574f, 0.434814f, 0.455322f, 0.476074f, 0.495361f, 0.515137f,
- 0.533203f, 0.551758f, 0.569824f, 0.586426f, 0.604492f, 0.621582f, 0.637695f, 0.654297f,
- 0.668945f, 0.683594f, 0.699219f, 0.712402f, 0.728516f, 0.741699f, 0.753906f, 0.767090f,
- 0.778320f, 0.790527f, 0.802246f, 0.813965f, 0.824219f, 0.835449f, 0.846680f, 0.855957f,
- 0.865723f, 0.875488f, 0.884766f, 0.894043f, 0.902832f, 0.911133f, 0.919434f, 0.927734f,
- 0.935547f, 0.943359f, 0.968750f, 0.960449f, 0.953125f, 0.946289f, 0.940430f, 0.934570f,
- 0.008797f, 0.027466f, 0.045959f, 0.066223f, 0.086304f, 0.106506f, 0.127441f, 0.149170f,
- 0.170532f, 0.192261f, 0.213867f, 0.236206f, 0.258057f, 0.280273f, 0.301758f, 0.323486f,
- 0.344727f, 0.367188f, 0.388184f, 0.408447f, 0.429443f, 0.450439f, 0.469727f, 0.489014f,
- 0.508301f, 0.526855f, 0.545410f, 0.562500f, 0.581055f, 0.597656f, 0.613770f, 0.630859f,
- 0.647461f, 0.663574f, 0.677734f, 0.693359f, 0.707031f, 0.720703f, 0.735352f, 0.748047f,
- 0.760254f, 0.772461f, 0.785156f, 0.797363f, 0.810059f, 0.819824f, 0.831543f, 0.842285f,
- 0.852051f, 0.862793f, 0.873047f, 0.882324f, 0.891113f, 0.899902f, 0.909180f, 0.917969f,
- 0.925781f, 0.934082f, 0.964355f, 0.957031f, 0.949707f, 0.943359f, 0.937988f, 0.932129f,
- 0.007927f, 0.024414f, 0.041077f, 0.059204f, 0.077148f, 0.095581f, 0.115479f, 0.134644f,
- 0.154785f, 0.175293f, 0.196045f, 0.216553f, 0.236694f, 0.258057f, 0.278809f, 0.300049f,
- 0.321289f, 0.342529f, 0.363281f, 0.383545f, 0.403564f, 0.424072f, 0.444092f, 0.463135f,
- 0.483154f, 0.501953f, 0.519531f, 0.539062f, 0.555664f, 0.574707f, 0.591309f, 0.608398f,
- 0.624512f, 0.640137f, 0.655762f, 0.671875f, 0.686523f, 0.701172f, 0.715820f, 0.729004f,
- 0.742676f, 0.755859f, 0.769043f, 0.781738f, 0.792969f, 0.805176f, 0.816895f, 0.827637f,
- 0.838867f, 0.849121f, 0.859375f, 0.870117f, 0.879395f, 0.889160f, 0.898926f, 0.906738f,
- 0.916504f, 0.924805f, 0.960938f, 0.953125f, 0.947266f, 0.940430f, 0.935547f, 0.929688f,
- 0.007080f, 0.022247f, 0.037445f, 0.053070f, 0.069336f, 0.086975f, 0.103577f, 0.121948f,
- 0.140503f, 0.158936f, 0.178833f, 0.198242f, 0.217651f, 0.237793f, 0.257812f, 0.278076f,
- 0.297607f, 0.318604f, 0.338623f, 0.358643f, 0.378662f, 0.399170f, 0.418213f, 0.438721f,
- 0.457520f, 0.477051f, 0.495361f, 0.513672f, 0.531250f, 0.549316f, 0.567383f, 0.583984f,
- 0.601562f, 0.617676f, 0.634277f, 0.650391f, 0.666016f, 0.680176f, 0.695801f, 0.710449f,
- 0.723633f, 0.737305f, 0.750977f, 0.764648f, 0.776367f, 0.789551f, 0.802246f, 0.813477f,
- 0.824219f, 0.835938f, 0.846680f, 0.857422f, 0.867188f, 0.876953f, 0.887207f, 0.895996f,
- 0.905762f, 0.915527f, 0.955566f, 0.949707f, 0.943359f, 0.937988f, 0.932129f, 0.927246f,
- 0.006363f, 0.019516f, 0.033691f, 0.047577f, 0.062469f, 0.078186f, 0.093933f, 0.110657f,
- 0.127563f, 0.144653f, 0.162598f, 0.181152f, 0.199707f, 0.218384f, 0.237427f, 0.257324f,
- 0.276367f, 0.295166f, 0.315674f, 0.335205f, 0.355225f, 0.374756f, 0.393799f, 0.413574f,
- 0.432617f, 0.451904f, 0.470459f, 0.489258f, 0.508301f, 0.525879f, 0.543945f, 0.560059f,
- 0.578613f, 0.595703f, 0.612793f, 0.628418f, 0.644531f, 0.659668f, 0.675293f, 0.689941f,
- 0.704590f, 0.719238f, 0.732910f, 0.747070f, 0.759766f, 0.773438f, 0.785156f, 0.797852f,
- 0.809570f, 0.821289f, 0.833008f, 0.843750f, 0.854980f, 0.865723f, 0.875977f, 0.886230f,
- 0.895508f, 0.904785f, 0.951660f, 0.945801f, 0.939941f, 0.934570f, 0.929199f, 0.924805f,
- 0.005985f, 0.017776f, 0.030212f, 0.043030f, 0.056488f, 0.070190f, 0.085205f, 0.100342f,
- 0.115723f, 0.132446f, 0.148438f, 0.165771f, 0.183228f, 0.200684f, 0.218994f, 0.237183f,
- 0.255859f, 0.274170f, 0.292725f, 0.313477f, 0.331299f, 0.351318f, 0.369873f, 0.389160f,
- 0.408936f, 0.426758f, 0.446533f, 0.464844f, 0.483154f, 0.501465f, 0.519531f, 0.537598f,
- 0.555664f, 0.572754f, 0.589844f, 0.605957f, 0.622070f, 0.639648f, 0.654297f, 0.670898f,
- 0.685059f, 0.700195f, 0.714844f, 0.728516f, 0.742188f, 0.754883f, 0.769043f, 0.781738f,
- 0.795410f, 0.808105f, 0.818359f, 0.830566f, 0.841797f, 0.853027f, 0.863770f, 0.874023f,
- 0.884766f, 0.893555f, 0.947266f, 0.942383f, 0.936523f, 0.930664f, 0.926270f, 0.921387f,
- 0.005173f, 0.016083f, 0.027359f, 0.038849f, 0.051056f, 0.063843f, 0.077026f, 0.091064f,
- 0.105591f, 0.120422f, 0.135498f, 0.150879f, 0.167480f, 0.184326f, 0.201172f, 0.218384f,
- 0.236084f, 0.254395f, 0.272949f, 0.291260f, 0.309570f, 0.328125f, 0.346680f, 0.365967f,
- 0.384766f, 0.403320f, 0.422119f, 0.440918f, 0.458984f, 0.477783f, 0.496094f, 0.513672f,
- 0.531738f, 0.548828f, 0.566406f, 0.583984f, 0.600098f, 0.617188f, 0.632812f, 0.649902f,
- 0.665527f, 0.681152f, 0.694824f, 0.709473f, 0.724121f, 0.738770f, 0.752441f, 0.765137f,
- 0.778809f, 0.791992f, 0.803711f, 0.815918f, 0.828125f, 0.839844f, 0.851562f, 0.862793f,
- 0.873535f, 0.883789f, 0.941895f, 0.938477f, 0.933105f, 0.927246f, 0.922363f, 0.918457f,
- 0.004791f, 0.014610f, 0.024475f, 0.035126f, 0.046478f, 0.057922f, 0.069885f, 0.083008f,
- 0.096069f, 0.109253f, 0.123840f, 0.137939f, 0.153076f, 0.168701f, 0.185059f, 0.200928f,
- 0.218262f, 0.234985f, 0.252686f, 0.270264f, 0.288086f, 0.306396f, 0.324951f, 0.343018f,
- 0.362305f, 0.379883f, 0.398926f, 0.417236f, 0.435547f, 0.454346f, 0.472656f, 0.491211f,
- 0.508301f, 0.526855f, 0.543457f, 0.561523f, 0.578125f, 0.595215f, 0.612305f, 0.628418f,
- 0.644043f, 0.660645f, 0.675781f, 0.691406f, 0.706055f, 0.720215f, 0.735840f, 0.749023f,
- 0.762695f, 0.776855f, 0.789551f, 0.800781f, 0.814941f, 0.826172f, 0.838867f, 0.851074f,
- 0.862305f, 0.872070f, 0.937500f, 0.933594f, 0.929199f, 0.923828f, 0.919434f, 0.915527f,
- 0.004387f, 0.013268f, 0.022385f, 0.031860f, 0.041962f, 0.052612f, 0.063171f, 0.075073f,
- 0.086792f, 0.099854f, 0.113037f, 0.125977f, 0.140381f, 0.154663f, 0.169678f, 0.184814f,
- 0.200562f, 0.217773f, 0.234131f, 0.250732f, 0.268066f, 0.284912f, 0.303223f, 0.321289f,
- 0.339355f, 0.357666f, 0.375488f, 0.394043f, 0.411865f, 0.430664f, 0.448730f, 0.467041f,
- 0.485352f, 0.503418f, 0.520508f, 0.539062f, 0.556152f, 0.573242f, 0.590820f, 0.606934f,
- 0.624512f, 0.640625f, 0.655762f, 0.672363f, 0.687500f, 0.702148f, 0.718750f, 0.731934f,
- 0.746582f, 0.759766f, 0.772949f, 0.787109f, 0.800781f, 0.813477f, 0.825195f, 0.838379f,
- 0.850098f, 0.861816f, 0.932617f, 0.929688f, 0.925293f, 0.919922f, 0.915527f, 0.912109f,
- 0.003941f, 0.011986f, 0.020630f, 0.029144f, 0.038544f, 0.048035f, 0.058075f, 0.068542f,
- 0.079590f, 0.090942f, 0.102661f, 0.115295f, 0.128296f, 0.141602f, 0.155518f, 0.170654f,
- 0.185425f, 0.200684f, 0.216309f, 0.231812f, 0.249146f, 0.265137f, 0.282471f, 0.299072f,
- 0.317139f, 0.334717f, 0.352783f, 0.371338f, 0.388916f, 0.406982f, 0.425537f, 0.443848f,
- 0.461914f, 0.479980f, 0.498291f, 0.515625f, 0.533203f, 0.550293f, 0.568359f, 0.585449f,
- 0.603027f, 0.618652f, 0.635742f, 0.652344f, 0.668457f, 0.684082f, 0.699219f, 0.713867f,
- 0.729004f, 0.743652f, 0.757812f, 0.771484f, 0.785645f, 0.798828f, 0.812012f, 0.824219f,
- 0.836914f, 0.850098f, 0.927246f, 0.925293f, 0.920410f, 0.916504f, 0.912598f, 0.908203f,
- 0.003790f, 0.011009f, 0.018829f, 0.026779f, 0.035339f, 0.043762f, 0.053223f, 0.062408f,
- 0.072693f, 0.082947f, 0.093689f, 0.105469f, 0.117554f, 0.130005f, 0.142822f, 0.156494f,
- 0.170166f, 0.184448f, 0.198975f, 0.213745f, 0.230469f, 0.246460f, 0.262939f, 0.279541f,
- 0.296143f, 0.313721f, 0.331299f, 0.348633f, 0.367188f, 0.384521f, 0.402344f, 0.420410f,
- 0.438965f, 0.457275f, 0.475830f, 0.493164f, 0.510742f, 0.528809f, 0.546387f, 0.564453f,
- 0.581055f, 0.598145f, 0.615234f, 0.631836f, 0.647461f, 0.665527f, 0.680664f, 0.696289f,
- 0.711914f, 0.728027f, 0.741211f, 0.756836f, 0.770508f, 0.783691f, 0.798340f, 0.811523f,
- 0.824219f, 0.837402f, 0.921387f, 0.920410f, 0.916504f, 0.913086f, 0.908691f, 0.904785f,
- 0.003479f, 0.009949f, 0.016937f, 0.024445f, 0.031708f, 0.039948f, 0.048218f, 0.056793f,
- 0.066223f, 0.075928f, 0.085632f, 0.096313f, 0.107178f, 0.118958f, 0.130493f, 0.143311f,
- 0.156494f, 0.170044f, 0.183960f, 0.197876f, 0.213501f, 0.228027f, 0.244019f, 0.260010f,
- 0.276611f, 0.293213f, 0.309814f, 0.327393f, 0.344482f, 0.363037f, 0.379883f, 0.398438f,
- 0.416504f, 0.434082f, 0.451904f, 0.470215f, 0.488525f, 0.505859f, 0.523926f, 0.541504f,
- 0.559570f, 0.577637f, 0.594238f, 0.611328f, 0.628418f, 0.645020f, 0.661133f, 0.677246f,
- 0.693848f, 0.709961f, 0.725586f, 0.739746f, 0.755371f, 0.769531f, 0.783203f, 0.797852f,
- 0.810547f, 0.824707f, 0.916016f, 0.915527f, 0.912109f, 0.908691f, 0.904785f, 0.900879f,
- 0.003014f, 0.008842f, 0.015640f, 0.022018f, 0.028885f, 0.036163f, 0.044250f, 0.051819f,
- 0.059967f, 0.069031f, 0.078247f, 0.088135f, 0.098267f, 0.108337f, 0.119751f, 0.131470f,
- 0.143433f, 0.156006f, 0.169189f, 0.183105f, 0.196655f, 0.211304f, 0.226196f, 0.241211f,
- 0.257080f, 0.273438f, 0.289307f, 0.306396f, 0.323975f, 0.340576f, 0.358398f, 0.375732f,
- 0.393799f, 0.411133f, 0.429688f, 0.447998f, 0.466064f, 0.483887f, 0.501465f, 0.519531f,
- 0.537598f, 0.555664f, 0.573242f, 0.590820f, 0.607910f, 0.625000f, 0.642578f, 0.658203f,
- 0.675293f, 0.691406f, 0.707520f, 0.724121f, 0.738770f, 0.753418f, 0.769531f, 0.783203f,
- 0.797363f, 0.811523f, 0.910156f, 0.910645f, 0.907715f, 0.904785f, 0.900879f, 0.896973f,
- 0.002861f, 0.008591f, 0.014000f, 0.020203f, 0.026962f, 0.033203f, 0.040161f, 0.047485f,
- 0.055237f, 0.062988f, 0.071594f, 0.080750f, 0.089905f, 0.099854f, 0.109741f, 0.120056f,
- 0.131592f, 0.143311f, 0.155640f, 0.167969f, 0.181763f, 0.195190f, 0.209229f, 0.223877f,
- 0.238647f, 0.254150f, 0.269531f, 0.285889f, 0.302979f, 0.319824f, 0.336426f, 0.354004f,
- 0.372070f, 0.389893f, 0.406982f, 0.424805f, 0.443359f, 0.461182f, 0.479492f, 0.498047f,
- 0.515625f, 0.533691f, 0.551270f, 0.569336f, 0.587402f, 0.604492f, 0.622070f, 0.639160f,
- 0.656738f, 0.673828f, 0.689941f, 0.705566f, 0.722168f, 0.737793f, 0.753418f, 0.768066f,
- 0.783203f, 0.798340f, 0.904297f, 0.905762f, 0.902832f, 0.899414f, 0.895996f, 0.893066f,
- 0.002535f, 0.007812f, 0.013252f, 0.018738f, 0.024384f, 0.030548f, 0.036774f, 0.043427f,
- 0.050476f, 0.057556f, 0.065491f, 0.073425f, 0.082458f, 0.091370f, 0.100525f, 0.110413f,
- 0.120605f, 0.131592f, 0.142822f, 0.154663f, 0.166870f, 0.180176f, 0.193237f, 0.207031f,
- 0.221191f, 0.236084f, 0.250732f, 0.266602f, 0.282959f, 0.299072f, 0.315430f, 0.332520f,
- 0.350342f, 0.367676f, 0.385010f, 0.403076f, 0.421631f, 0.439209f, 0.457520f, 0.475342f,
- 0.494141f, 0.512695f, 0.530273f, 0.547852f, 0.565918f, 0.584473f, 0.602051f, 0.619629f,
- 0.637207f, 0.655273f, 0.671387f, 0.688965f, 0.706055f, 0.721191f, 0.737305f, 0.752930f,
- 0.769531f, 0.784668f, 0.898438f, 0.900879f, 0.897949f, 0.894531f, 0.891602f, 0.888672f,
- 0.002411f, 0.007103f, 0.012161f, 0.017105f, 0.022385f, 0.027985f, 0.033203f, 0.039581f,
- 0.045532f, 0.052521f, 0.059814f, 0.067261f, 0.074768f, 0.083313f, 0.092041f, 0.101013f,
- 0.110291f, 0.120361f, 0.130615f, 0.141724f, 0.153076f, 0.165283f, 0.177612f, 0.190918f,
- 0.204346f, 0.218506f, 0.233154f, 0.247559f, 0.263428f, 0.279053f, 0.295166f, 0.312256f,
- 0.328857f, 0.345947f, 0.363281f, 0.381348f, 0.398926f, 0.417236f, 0.435547f, 0.453369f,
- 0.471191f, 0.489502f, 0.508301f, 0.525879f, 0.545410f, 0.563477f, 0.581055f, 0.600098f,
- 0.617676f, 0.635254f, 0.653809f, 0.670410f, 0.687500f, 0.705078f, 0.720703f, 0.736816f,
- 0.753418f, 0.769531f, 0.892090f, 0.895020f, 0.892578f, 0.889648f, 0.887207f, 0.884277f,
- 0.002344f, 0.006565f, 0.011322f, 0.015686f, 0.020630f, 0.025574f, 0.030807f, 0.035980f,
- 0.042084f, 0.048279f, 0.054352f, 0.061432f, 0.068848f, 0.076172f, 0.083618f, 0.092590f,
- 0.101135f, 0.109619f, 0.120178f, 0.130249f, 0.140991f, 0.151978f, 0.163696f, 0.175781f,
- 0.188721f, 0.202026f, 0.215820f, 0.230103f, 0.244873f, 0.259766f, 0.275635f, 0.291504f,
- 0.307617f, 0.324219f, 0.342041f, 0.358887f, 0.376709f, 0.394775f, 0.412354f, 0.431152f,
- 0.448975f, 0.468018f, 0.486328f, 0.504883f, 0.523438f, 0.541992f, 0.560547f, 0.579102f,
- 0.597656f, 0.615234f, 0.633789f, 0.651855f, 0.669434f, 0.687500f, 0.704590f, 0.721680f,
- 0.738770f, 0.755859f, 0.886719f, 0.889648f, 0.887695f, 0.884766f, 0.882812f, 0.879883f,
- 0.002003f, 0.006268f, 0.009987f, 0.014198f, 0.018875f, 0.023605f, 0.028259f, 0.033203f,
- 0.038513f, 0.044495f, 0.049866f, 0.056152f, 0.062500f, 0.069458f, 0.076660f, 0.084473f,
- 0.092163f, 0.100586f, 0.109741f, 0.119324f, 0.128662f, 0.139526f, 0.150146f, 0.161499f,
- 0.173706f, 0.185791f, 0.199341f, 0.212891f, 0.227051f, 0.241455f, 0.256592f, 0.271729f,
- 0.288330f, 0.304199f, 0.321045f, 0.337891f, 0.355469f, 0.373291f, 0.391113f, 0.408936f,
- 0.426758f, 0.446289f, 0.464600f, 0.483643f, 0.500977f, 0.520996f, 0.539551f, 0.558594f,
- 0.577148f, 0.595703f, 0.614746f, 0.632324f, 0.650879f, 0.669434f, 0.687012f, 0.704590f,
- 0.722656f, 0.740234f, 0.880371f, 0.883301f, 0.881836f, 0.879883f, 0.877441f, 0.875000f,
- 0.001739f, 0.005779f, 0.009598f, 0.013245f, 0.017334f, 0.021637f, 0.025955f, 0.030121f,
- 0.035217f, 0.040131f, 0.045990f, 0.051453f, 0.056915f, 0.063354f, 0.070007f, 0.076965f,
- 0.084351f, 0.091980f, 0.100281f, 0.108826f, 0.117981f, 0.127441f, 0.137939f, 0.148315f,
- 0.160034f, 0.171753f, 0.183594f, 0.196167f, 0.209961f, 0.223511f, 0.238037f, 0.252930f,
- 0.268066f, 0.284180f, 0.300537f, 0.317139f, 0.333740f, 0.351074f, 0.368896f, 0.386719f,
- 0.405273f, 0.423584f, 0.442871f, 0.460938f, 0.479736f, 0.499512f, 0.517578f, 0.537109f,
- 0.555664f, 0.575195f, 0.594238f, 0.613770f, 0.632324f, 0.650879f, 0.669922f, 0.687988f,
- 0.706055f, 0.724121f, 0.873047f, 0.876953f, 0.875488f, 0.874023f, 0.872559f, 0.869141f,
- 0.001648f, 0.005039f, 0.008675f, 0.012161f, 0.015823f, 0.019760f, 0.023865f, 0.028015f,
- 0.032318f, 0.036865f, 0.041504f, 0.046906f, 0.051758f, 0.057922f, 0.064087f, 0.070435f,
- 0.077209f, 0.084290f, 0.091736f, 0.099243f, 0.108215f, 0.117004f, 0.126343f, 0.135620f,
- 0.146484f, 0.157349f, 0.168823f, 0.180908f, 0.193848f, 0.206909f, 0.220459f, 0.234619f,
- 0.249634f, 0.264404f, 0.280273f, 0.296631f, 0.313232f, 0.329834f, 0.347412f, 0.365479f,
- 0.383545f, 0.401855f, 0.420166f, 0.438721f, 0.458252f, 0.477783f, 0.496826f, 0.516602f,
- 0.535156f, 0.554199f, 0.574219f, 0.593750f, 0.612305f, 0.631836f, 0.651367f, 0.670410f,
- 0.689453f, 0.708984f, 0.865234f, 0.872070f, 0.870605f, 0.868652f, 0.866699f, 0.863770f,
- 0.001492f, 0.004704f, 0.007973f, 0.011124f, 0.014603f, 0.017792f, 0.021652f, 0.025314f,
- 0.029526f, 0.033722f, 0.038147f, 0.042694f, 0.047668f, 0.052673f, 0.057983f, 0.064209f,
- 0.070068f, 0.076233f, 0.083313f, 0.090942f, 0.098572f, 0.106750f, 0.115295f, 0.124512f,
- 0.134277f, 0.144287f, 0.154663f, 0.166504f, 0.178345f, 0.190063f, 0.203247f, 0.217041f,
- 0.231079f, 0.245850f, 0.260986f, 0.276611f, 0.293213f, 0.309570f, 0.326172f, 0.343994f,
- 0.361816f, 0.379395f, 0.397949f, 0.417480f, 0.436523f, 0.455322f, 0.474854f, 0.493896f,
- 0.514160f, 0.533691f, 0.553711f, 0.573730f, 0.593262f, 0.612793f, 0.632812f, 0.651855f,
- 0.672363f, 0.690918f, 0.857910f, 0.865723f, 0.864746f, 0.863281f, 0.860352f, 0.858887f,
- 0.001657f, 0.004684f, 0.007290f, 0.010201f, 0.013657f, 0.016541f, 0.019989f, 0.023636f,
- 0.026932f, 0.030548f, 0.034576f, 0.039154f, 0.043793f, 0.048126f, 0.053162f, 0.058319f,
- 0.063721f, 0.069885f, 0.076355f, 0.082947f, 0.089844f, 0.097046f, 0.105286f, 0.113281f,
- 0.122559f, 0.131348f, 0.141357f, 0.152100f, 0.163330f, 0.175415f, 0.187256f, 0.199951f,
- 0.213501f, 0.227051f, 0.241943f, 0.257324f, 0.273193f, 0.288818f, 0.305420f, 0.322754f,
- 0.340576f, 0.358643f, 0.375732f, 0.394775f, 0.414307f, 0.433105f, 0.453613f, 0.472168f,
- 0.492188f, 0.512695f, 0.532715f, 0.552246f, 0.573242f, 0.593262f, 0.613770f, 0.632812f,
- 0.654785f, 0.673828f, 0.851074f, 0.859375f, 0.858398f, 0.856934f, 0.855469f, 0.853027f,
- 0.001457f, 0.003944f, 0.006870f, 0.009392f, 0.012543f, 0.015190f, 0.018417f, 0.021576f,
- 0.024811f, 0.028122f, 0.031708f, 0.035278f, 0.039398f, 0.043793f, 0.048218f, 0.052887f,
- 0.058044f, 0.063477f, 0.069397f, 0.075256f, 0.081360f, 0.088318f, 0.095398f, 0.103210f,
- 0.111084f, 0.120361f, 0.129150f, 0.139038f, 0.149292f, 0.160645f, 0.172241f, 0.183716f,
- 0.196533f, 0.209595f, 0.224121f, 0.238647f, 0.253174f, 0.268799f, 0.286133f, 0.302490f,
- 0.319092f, 0.337158f, 0.355225f, 0.373535f, 0.392090f, 0.411133f, 0.430908f, 0.450928f,
- 0.470947f, 0.490967f, 0.511719f, 0.531250f, 0.551758f, 0.573730f, 0.594238f, 0.614746f,
- 0.636230f, 0.656738f, 0.842773f, 0.852051f, 0.851562f, 0.851074f, 0.848633f, 0.846680f,
- 0.001404f, 0.003891f, 0.006233f, 0.008751f, 0.011353f, 0.014175f, 0.017075f, 0.019592f,
- 0.022842f, 0.025772f, 0.028839f, 0.032410f, 0.036011f, 0.039764f, 0.043671f, 0.048126f,
- 0.052704f, 0.057373f, 0.062561f, 0.067688f, 0.074158f, 0.080200f, 0.086853f, 0.093445f,
- 0.101379f, 0.109192f, 0.117432f, 0.126709f, 0.136353f, 0.146484f, 0.157227f, 0.168823f,
- 0.180542f, 0.193115f, 0.206299f, 0.219727f, 0.234375f, 0.249756f, 0.265869f, 0.281738f,
- 0.298096f, 0.315674f, 0.333252f, 0.352051f, 0.370850f, 0.389160f, 0.409180f, 0.428955f,
- 0.448730f, 0.469971f, 0.489502f, 0.510742f, 0.531738f, 0.552246f, 0.574707f, 0.595215f,
- 0.617676f, 0.639160f, 0.835449f, 0.845215f, 0.845215f, 0.844238f, 0.843262f, 0.840332f,
- 0.001275f, 0.003536f, 0.005600f, 0.007881f, 0.010628f, 0.012878f, 0.015610f, 0.018097f,
- 0.020996f, 0.023376f, 0.026443f, 0.029556f, 0.032867f, 0.036163f, 0.039581f, 0.043915f,
- 0.047943f, 0.052216f, 0.056763f, 0.061981f, 0.067322f, 0.072449f, 0.078796f, 0.084717f,
- 0.091919f, 0.098999f, 0.106995f, 0.115417f, 0.124084f, 0.133667f, 0.143433f, 0.154297f,
- 0.165161f, 0.177124f, 0.189697f, 0.202759f, 0.216309f, 0.230713f, 0.245728f, 0.261719f,
- 0.278320f, 0.295410f, 0.312256f, 0.330566f, 0.349365f, 0.367676f, 0.386719f, 0.406494f,
- 0.427246f, 0.447266f, 0.468506f, 0.489746f, 0.510742f, 0.532227f, 0.553711f, 0.575684f,
- 0.597656f, 0.619141f, 0.826172f, 0.837402f, 0.837891f, 0.837402f, 0.835449f, 0.833984f,
- 0.001134f, 0.003105f, 0.005337f, 0.007462f, 0.009628f, 0.011833f, 0.014137f, 0.016113f,
- 0.018875f, 0.021484f, 0.024063f, 0.026581f, 0.029709f, 0.032623f, 0.036194f, 0.039703f,
- 0.043335f, 0.047058f, 0.051422f, 0.055908f, 0.060608f, 0.065491f, 0.071167f, 0.076843f,
- 0.083313f, 0.089661f, 0.097168f, 0.104492f, 0.112122f, 0.121155f, 0.130615f, 0.140137f,
- 0.150757f, 0.161499f, 0.173462f, 0.185547f, 0.199341f, 0.212524f, 0.227051f, 0.242310f,
- 0.258057f, 0.274414f, 0.291016f, 0.309082f, 0.327148f, 0.345459f, 0.364990f, 0.384521f,
- 0.404297f, 0.425781f, 0.445801f, 0.467285f, 0.489258f, 0.510254f, 0.533203f, 0.555664f,
- 0.578125f, 0.601074f, 0.817871f, 0.830078f, 0.831055f, 0.830078f, 0.829102f, 0.828125f,
- 0.001101f, 0.003019f, 0.004818f, 0.006725f, 0.008781f, 0.010864f, 0.013069f, 0.014801f,
- 0.017151f, 0.019531f, 0.021973f, 0.024429f, 0.026917f, 0.030121f, 0.033112f, 0.036041f,
- 0.039337f, 0.042542f, 0.046509f, 0.050537f, 0.054596f, 0.058990f, 0.064209f, 0.069519f,
- 0.075134f, 0.080994f, 0.087158f, 0.094177f, 0.102051f, 0.109741f, 0.117981f, 0.127319f,
- 0.136963f, 0.147095f, 0.158081f, 0.169434f, 0.182251f, 0.195557f, 0.208984f, 0.223267f,
- 0.238281f, 0.254639f, 0.270996f, 0.288330f, 0.305908f, 0.324219f, 0.343018f, 0.362549f,
- 0.382324f, 0.402832f, 0.424805f, 0.445312f, 0.467529f, 0.489258f, 0.511230f, 0.535645f,
- 0.558594f, 0.582031f, 0.809082f, 0.822266f, 0.824219f, 0.823242f, 0.821777f, 0.820801f,
- 0.000987f, 0.002644f, 0.004562f, 0.006344f, 0.008133f, 0.009918f, 0.011696f, 0.013527f,
- 0.015572f, 0.017746f, 0.019714f, 0.021942f, 0.024155f, 0.027069f, 0.029678f, 0.032288f,
- 0.035156f, 0.038574f, 0.041779f, 0.045319f, 0.049225f, 0.053284f, 0.057678f, 0.062225f,
- 0.067505f, 0.072571f, 0.078613f, 0.084961f, 0.092041f, 0.098938f, 0.106506f, 0.115112f,
- 0.123779f, 0.133667f, 0.143311f, 0.154541f, 0.165894f, 0.178345f, 0.191406f, 0.205200f,
- 0.219238f, 0.234985f, 0.250977f, 0.267578f, 0.284912f, 0.302734f, 0.321289f, 0.340332f,
- 0.360352f, 0.380615f, 0.401611f, 0.423340f, 0.445312f, 0.467529f, 0.490967f, 0.514160f,
- 0.537598f, 0.561035f, 0.800293f, 0.814453f, 0.815918f, 0.815918f, 0.814941f, 0.813965f,
- 0.000932f, 0.002567f, 0.004009f, 0.005722f, 0.007538f, 0.008812f, 0.010864f, 0.012413f,
- 0.014290f, 0.015991f, 0.018051f, 0.019836f, 0.022247f, 0.024506f, 0.026520f, 0.029175f,
- 0.031769f, 0.034332f, 0.037689f, 0.040466f, 0.043945f, 0.047607f, 0.051605f, 0.055817f,
- 0.060486f, 0.065125f, 0.070557f, 0.076111f, 0.081909f, 0.088806f, 0.095886f, 0.103210f,
- 0.111755f, 0.120422f, 0.130249f, 0.140137f, 0.150513f, 0.162109f, 0.174561f, 0.187256f,
- 0.200928f, 0.215698f, 0.231323f, 0.246582f, 0.264160f, 0.281982f, 0.299561f, 0.319092f,
- 0.338623f, 0.358643f, 0.379883f, 0.400879f, 0.423096f, 0.445557f, 0.468750f, 0.492188f,
- 0.516113f, 0.541504f, 0.791016f, 0.805664f, 0.808105f, 0.808594f, 0.807129f, 0.806641f,
- 0.000871f, 0.002337f, 0.003727f, 0.005474f, 0.006641f, 0.008377f, 0.009567f, 0.011154f,
- 0.012848f, 0.014610f, 0.016235f, 0.017960f, 0.019958f, 0.021729f, 0.023926f, 0.026154f,
- 0.028351f, 0.030975f, 0.033722f, 0.036407f, 0.039459f, 0.042694f, 0.046082f, 0.049896f,
- 0.053833f, 0.058167f, 0.062744f, 0.067932f, 0.073608f, 0.079468f, 0.085632f, 0.092651f,
- 0.100098f, 0.108521f, 0.116699f, 0.126099f, 0.136108f, 0.146606f, 0.157959f, 0.170410f,
- 0.183594f, 0.197510f, 0.212280f, 0.227295f, 0.243652f, 0.260986f, 0.278564f, 0.297607f,
- 0.316406f, 0.336426f, 0.357178f, 0.378662f, 0.400146f, 0.422852f, 0.446045f, 0.470215f,
- 0.494873f, 0.520020f, 0.781250f, 0.796875f, 0.800293f, 0.800781f, 0.799805f, 0.799316f,
- 0.000782f, 0.002131f, 0.003649f, 0.004715f, 0.006054f, 0.007458f, 0.008759f, 0.010269f,
- 0.011711f, 0.012970f, 0.014664f, 0.016327f, 0.017914f, 0.019699f, 0.021423f, 0.023499f,
- 0.025391f, 0.027374f, 0.029999f, 0.032501f, 0.035156f, 0.037872f, 0.040710f, 0.044403f,
- 0.047791f, 0.051880f, 0.055969f, 0.060364f, 0.065247f, 0.070496f, 0.076172f, 0.082825f,
- 0.089294f, 0.096497f, 0.104431f, 0.112854f, 0.122375f, 0.132202f, 0.142700f, 0.153931f,
- 0.166260f, 0.179565f, 0.193481f, 0.208008f, 0.223877f, 0.240479f, 0.257568f, 0.275879f,
- 0.294922f, 0.314453f, 0.334961f, 0.355957f, 0.377686f, 0.400391f, 0.423828f, 0.448730f,
- 0.472900f, 0.498535f, 0.771484f, 0.789062f, 0.791504f, 0.792480f, 0.791016f, 0.791016f,
- 0.000742f, 0.001822f, 0.003183f, 0.004444f, 0.005600f, 0.006550f, 0.008087f, 0.009247f,
- 0.010559f, 0.011650f, 0.013184f, 0.014565f, 0.016083f, 0.017548f, 0.019119f, 0.020737f,
- 0.022644f, 0.024597f, 0.026627f, 0.028809f, 0.031281f, 0.033539f, 0.036469f, 0.039429f,
- 0.042480f, 0.045654f, 0.049561f, 0.053406f, 0.057739f, 0.062469f, 0.067749f, 0.073364f,
- 0.079773f, 0.086121f, 0.093262f, 0.100647f, 0.109253f, 0.118042f, 0.128174f, 0.138550f,
- 0.150024f, 0.162231f, 0.175171f, 0.189087f, 0.204468f, 0.220215f, 0.236938f, 0.254639f,
- 0.273438f, 0.292236f, 0.312012f, 0.333252f, 0.355957f, 0.377686f, 0.401367f, 0.425781f,
- 0.451416f, 0.476318f, 0.761230f, 0.779785f, 0.782227f, 0.782715f, 0.782715f, 0.782715f,
- 0.000632f, 0.001970f, 0.003042f, 0.004025f, 0.005173f, 0.006435f, 0.007343f, 0.008522f,
- 0.009369f, 0.010475f, 0.011726f, 0.012962f, 0.014145f, 0.015411f, 0.016922f, 0.018478f,
- 0.020111f, 0.021835f, 0.023682f, 0.025253f, 0.027466f, 0.029678f, 0.032196f, 0.034607f,
- 0.037415f, 0.040497f, 0.043610f, 0.047089f, 0.051178f, 0.055573f, 0.059845f, 0.064758f,
- 0.070068f, 0.076111f, 0.082275f, 0.089417f, 0.096863f, 0.105286f, 0.114441f, 0.123535f,
- 0.134399f, 0.145508f, 0.157959f, 0.171387f, 0.185425f, 0.200806f, 0.216919f, 0.233521f,
- 0.251953f, 0.270508f, 0.290527f, 0.310791f, 0.332275f, 0.355469f, 0.378418f, 0.403564f,
- 0.428223f, 0.455322f, 0.750977f, 0.770996f, 0.774414f, 0.774414f, 0.774902f, 0.773926f,
- 0.000517f, 0.001554f, 0.002741f, 0.003695f, 0.004669f, 0.005417f, 0.006466f, 0.007545f,
- 0.008453f, 0.009499f, 0.010468f, 0.011490f, 0.012718f, 0.013985f, 0.014977f, 0.016235f,
- 0.017868f, 0.019211f, 0.020630f, 0.022263f, 0.024078f, 0.026291f, 0.028275f, 0.030380f,
- 0.032928f, 0.035675f, 0.038513f, 0.041656f, 0.044769f, 0.048523f, 0.052216f, 0.057007f,
- 0.061493f, 0.066711f, 0.072510f, 0.078735f, 0.085327f, 0.093201f, 0.101135f, 0.109619f,
- 0.119690f, 0.130371f, 0.141602f, 0.154053f, 0.167480f, 0.181396f, 0.197021f, 0.213623f,
- 0.230835f, 0.248901f, 0.268066f, 0.289062f, 0.310303f, 0.332520f, 0.355225f, 0.379639f,
- 0.405273f, 0.432373f, 0.740234f, 0.760742f, 0.763672f, 0.765625f, 0.765625f, 0.765625f,
- 0.000588f, 0.001405f, 0.002306f, 0.003370f, 0.004375f, 0.005116f, 0.005817f, 0.006630f,
- 0.007797f, 0.008507f, 0.009216f, 0.010254f, 0.011246f, 0.012154f, 0.013191f, 0.014366f,
- 0.015503f, 0.016785f, 0.018127f, 0.019562f, 0.021072f, 0.022919f, 0.024643f, 0.026749f,
- 0.028564f, 0.031006f, 0.033203f, 0.036072f, 0.039032f, 0.042114f, 0.045654f, 0.049561f,
- 0.053650f, 0.058380f, 0.063049f, 0.068848f, 0.075256f, 0.081543f, 0.088562f, 0.096924f,
- 0.105652f, 0.115173f, 0.125977f, 0.137207f, 0.149902f, 0.163208f, 0.177979f, 0.193726f,
- 0.210205f, 0.228027f, 0.247070f, 0.266602f, 0.287842f, 0.309326f, 0.333008f, 0.356934f,
- 0.382568f, 0.408691f, 0.729004f, 0.751953f, 0.755371f, 0.756348f, 0.757324f, 0.756348f,
- 0.000431f, 0.001562f, 0.002253f, 0.003088f, 0.003944f, 0.004536f, 0.005066f, 0.006020f,
- 0.006840f, 0.007542f, 0.008347f, 0.008949f, 0.009827f, 0.010719f, 0.011696f, 0.012756f,
- 0.013649f, 0.014679f, 0.015808f, 0.017288f, 0.018356f, 0.019913f, 0.021332f, 0.023148f,
- 0.024719f, 0.026840f, 0.029007f, 0.031250f, 0.033661f, 0.036469f, 0.039490f, 0.042969f,
- 0.046326f, 0.050293f, 0.054901f, 0.059845f, 0.064941f, 0.071289f, 0.077454f, 0.084656f,
- 0.092529f, 0.101562f, 0.111145f, 0.121460f, 0.132935f, 0.145386f, 0.159302f, 0.174438f,
- 0.190186f, 0.206909f, 0.225098f, 0.244751f, 0.265381f, 0.287109f, 0.310059f, 0.333984f,
- 0.359131f, 0.386230f, 0.716797f, 0.740723f, 0.744629f, 0.746582f, 0.747070f, 0.747070f,
- 0.000576f, 0.001266f, 0.002028f, 0.002766f, 0.003317f, 0.004051f, 0.004742f, 0.005459f,
- 0.006054f, 0.006641f, 0.007240f, 0.007919f, 0.008644f, 0.009300f, 0.010170f, 0.010925f,
- 0.011795f, 0.012733f, 0.013855f, 0.014885f, 0.015900f, 0.017212f, 0.018326f, 0.019684f,
- 0.021469f, 0.023178f, 0.024734f, 0.026794f, 0.028946f, 0.031204f, 0.033844f, 0.036682f,
- 0.039948f, 0.043335f, 0.047150f, 0.051422f, 0.055969f, 0.061066f, 0.067139f, 0.073242f,
- 0.080444f, 0.088440f, 0.096985f, 0.106445f, 0.116943f, 0.128906f, 0.141479f, 0.154907f,
- 0.170410f, 0.186523f, 0.204102f, 0.222900f, 0.243774f, 0.264160f, 0.286865f, 0.310791f,
- 0.336182f, 0.362793f, 0.705078f, 0.730469f, 0.735352f, 0.736816f, 0.737793f, 0.736816f,
- 0.000307f, 0.001126f, 0.001758f, 0.002436f, 0.002911f, 0.003540f, 0.004047f, 0.004711f,
- 0.005245f, 0.005749f, 0.006302f, 0.006844f, 0.007355f, 0.008095f, 0.008835f, 0.009438f,
- 0.010139f, 0.010941f, 0.011963f, 0.012878f, 0.013519f, 0.014847f, 0.015945f, 0.017029f,
- 0.018250f, 0.019669f, 0.021362f, 0.022675f, 0.024750f, 0.026657f, 0.028854f, 0.031219f,
- 0.033844f, 0.036804f, 0.040222f, 0.043793f, 0.047791f, 0.052185f, 0.057251f, 0.062866f,
- 0.069275f, 0.075867f, 0.083923f, 0.092407f, 0.102295f, 0.112366f, 0.124207f, 0.137085f,
- 0.151489f, 0.167114f, 0.183838f, 0.202148f, 0.221558f, 0.242065f, 0.263916f, 0.287842f,
- 0.312256f, 0.339111f, 0.693848f, 0.719727f, 0.724609f, 0.726074f, 0.727539f, 0.727051f,
- 0.000428f, 0.000939f, 0.001581f, 0.002033f, 0.002665f, 0.003222f, 0.003660f, 0.004059f,
- 0.004475f, 0.004997f, 0.005554f, 0.006031f, 0.006371f, 0.007080f, 0.007511f, 0.008263f,
- 0.008820f, 0.009552f, 0.010124f, 0.010948f, 0.011665f, 0.012550f, 0.013397f, 0.014526f,
- 0.015388f, 0.016754f, 0.017960f, 0.019257f, 0.020844f, 0.022583f, 0.024246f, 0.026642f,
- 0.028656f, 0.031128f, 0.033783f, 0.036865f, 0.040253f, 0.044312f, 0.048523f, 0.053314f,
- 0.058655f, 0.064880f, 0.071594f, 0.079102f, 0.087891f, 0.097107f, 0.108276f, 0.119751f,
- 0.133179f, 0.148071f, 0.163818f, 0.180908f, 0.199951f, 0.219849f, 0.241699f, 0.264160f,
- 0.288818f, 0.315918f, 0.680176f, 0.708496f, 0.713867f, 0.716309f, 0.716797f, 0.717285f,
- 0.000467f, 0.001054f, 0.001476f, 0.001825f, 0.002386f, 0.002644f, 0.003218f, 0.003553f,
- 0.003866f, 0.004433f, 0.004700f, 0.004948f, 0.005505f, 0.006023f, 0.006405f, 0.006920f,
- 0.007484f, 0.008057f, 0.008598f, 0.009178f, 0.009857f, 0.010551f, 0.011169f, 0.012199f,
- 0.013092f, 0.014084f, 0.015091f, 0.016205f, 0.017303f, 0.018845f, 0.020538f, 0.021957f,
- 0.023773f, 0.025833f, 0.028152f, 0.030716f, 0.033661f, 0.036896f, 0.040405f, 0.044708f,
- 0.049286f, 0.054321f, 0.060333f, 0.067322f, 0.074890f, 0.083435f, 0.092651f, 0.103516f,
- 0.115784f, 0.129028f, 0.144287f, 0.160278f, 0.178345f, 0.197632f, 0.218994f, 0.241089f,
- 0.265869f, 0.292725f, 0.667969f, 0.697266f, 0.702637f, 0.704590f, 0.706055f, 0.707031f,
- 0.000348f, 0.000841f, 0.001292f, 0.001580f, 0.001961f, 0.002508f, 0.002630f, 0.002993f,
- 0.003458f, 0.003738f, 0.003952f, 0.004425f, 0.004639f, 0.005070f, 0.005547f, 0.005840f,
- 0.006462f, 0.006844f, 0.007214f, 0.007698f, 0.008339f, 0.008980f, 0.009560f, 0.010094f,
- 0.010941f, 0.011711f, 0.012550f, 0.013565f, 0.014404f, 0.015579f, 0.016754f, 0.018082f,
- 0.019592f, 0.021439f, 0.023209f, 0.025375f, 0.027863f, 0.030411f, 0.033478f, 0.037018f,
- 0.040680f, 0.045105f, 0.050476f, 0.056183f, 0.062805f, 0.070251f, 0.078613f, 0.088196f,
- 0.099060f, 0.111450f, 0.125122f, 0.140869f, 0.158203f, 0.176880f, 0.197266f, 0.218506f,
- 0.242798f, 0.268555f, 0.655273f, 0.686035f, 0.691406f, 0.694336f, 0.695312f, 0.695801f,
- 0.000170f, 0.000976f, 0.001161f, 0.001441f, 0.001846f, 0.002144f, 0.002367f, 0.002632f,
- 0.002892f, 0.003178f, 0.003435f, 0.003618f, 0.004021f, 0.004292f, 0.004562f, 0.005028f,
- 0.005405f, 0.005623f, 0.006069f, 0.006577f, 0.006973f, 0.007431f, 0.007904f, 0.008484f,
- 0.009018f, 0.009659f, 0.010559f, 0.010994f, 0.012009f, 0.012840f, 0.013901f, 0.014915f,
- 0.016129f, 0.017502f, 0.019089f, 0.020676f, 0.022568f, 0.024673f, 0.027252f, 0.029984f,
- 0.033234f, 0.037079f, 0.041016f, 0.045868f, 0.051758f, 0.058014f, 0.065613f, 0.073853f,
- 0.083801f, 0.094727f, 0.107483f, 0.121826f, 0.137573f, 0.156006f, 0.175049f, 0.196167f,
- 0.219482f, 0.245850f, 0.641113f, 0.673340f, 0.679688f, 0.681641f, 0.683594f, 0.684082f,
- 0.000293f, 0.000601f, 0.001049f, 0.001358f, 0.001532f, 0.001719f, 0.001882f, 0.002298f,
- 0.002317f, 0.002628f, 0.002750f, 0.003143f, 0.003363f, 0.003559f, 0.003866f, 0.004204f,
- 0.004383f, 0.004753f, 0.005028f, 0.005348f, 0.005863f, 0.006176f, 0.006569f, 0.006954f,
- 0.007401f, 0.008057f, 0.008537f, 0.009178f, 0.009735f, 0.010521f, 0.011208f, 0.011978f,
- 0.013130f, 0.014099f, 0.015289f, 0.016739f, 0.018219f, 0.019821f, 0.021713f, 0.024200f,
- 0.026749f, 0.029785f, 0.033386f, 0.036987f, 0.041840f, 0.047089f, 0.053253f, 0.060760f,
- 0.069214f, 0.079224f, 0.090515f, 0.103638f, 0.118652f, 0.135376f, 0.154175f, 0.174561f,
- 0.196777f, 0.222534f, 0.628906f, 0.660645f, 0.668457f, 0.670410f, 0.672852f, 0.673340f,
- 0.000258f, 0.000656f, 0.000811f, 0.001049f, 0.001288f, 0.001462f, 0.001599f, 0.001740f,
- 0.002012f, 0.002171f, 0.002367f, 0.002535f, 0.002705f, 0.002880f, 0.003115f, 0.003429f,
- 0.003666f, 0.003897f, 0.004116f, 0.004398f, 0.004635f, 0.005066f, 0.005341f, 0.005779f,
- 0.006042f, 0.006454f, 0.006954f, 0.007450f, 0.007835f, 0.008400f, 0.009132f, 0.009819f,
- 0.010536f, 0.011307f, 0.012245f, 0.013229f, 0.014580f, 0.015900f, 0.017303f, 0.019119f,
- 0.021103f, 0.023468f, 0.026123f, 0.029495f, 0.033112f, 0.037628f, 0.042938f, 0.048859f,
- 0.056152f, 0.064941f, 0.074829f, 0.086548f, 0.100281f, 0.115967f, 0.133545f, 0.153198f,
- 0.175171f, 0.199341f, 0.613770f, 0.648926f, 0.655273f, 0.658691f, 0.660645f, 0.662598f,
- 0.000176f, 0.000474f, 0.000602f, 0.000854f, 0.001030f, 0.001240f, 0.001349f, 0.001505f,
- 0.001580f, 0.001738f, 0.001957f, 0.002068f, 0.002230f, 0.002420f, 0.002556f, 0.002705f,
- 0.002998f, 0.003178f, 0.003345f, 0.003567f, 0.003811f, 0.004105f, 0.004284f, 0.004593f,
- 0.004848f, 0.005173f, 0.005527f, 0.005939f, 0.006306f, 0.006817f, 0.007366f, 0.007729f,
- 0.008339f, 0.008995f, 0.009644f, 0.010551f, 0.011360f, 0.012344f, 0.013710f, 0.015030f,
- 0.016510f, 0.018143f, 0.020279f, 0.022751f, 0.025650f, 0.029144f, 0.033508f, 0.038452f,
- 0.044556f, 0.052032f, 0.060364f, 0.070923f, 0.082642f, 0.097290f, 0.113525f, 0.132446f,
- 0.153442f, 0.176880f, 0.600586f, 0.636719f, 0.644531f, 0.647461f, 0.648926f, 0.649414f,
- 0.000121f, 0.000426f, 0.000509f, 0.000778f, 0.000931f, 0.000992f, 0.001135f, 0.001303f,
- 0.001359f, 0.001410f, 0.001519f, 0.001722f, 0.001751f, 0.001951f, 0.002060f, 0.002218f,
- 0.002287f, 0.002487f, 0.002670f, 0.002848f, 0.003061f, 0.003233f, 0.003452f, 0.003664f,
- 0.003883f, 0.004078f, 0.004379f, 0.004692f, 0.004982f, 0.005329f, 0.005756f, 0.006081f,
- 0.006504f, 0.007019f, 0.007599f, 0.008217f, 0.008850f, 0.009628f, 0.010437f, 0.011597f,
- 0.012650f, 0.013931f, 0.015480f, 0.017380f, 0.019577f, 0.022247f, 0.025513f, 0.029617f,
- 0.034363f, 0.040314f, 0.047241f, 0.056274f, 0.066711f, 0.079773f, 0.094482f, 0.112488f,
- 0.132446f, 0.154907f, 0.585449f, 0.624023f, 0.630371f, 0.634277f, 0.636230f, 0.637207f,
- 0.000161f, 0.000263f, 0.000526f, 0.000627f, 0.000723f, 0.000775f, 0.000856f, 0.000960f,
- 0.001079f, 0.001158f, 0.001208f, 0.001272f, 0.001441f, 0.001557f, 0.001657f, 0.001702f,
- 0.001897f, 0.001918f, 0.002151f, 0.002232f, 0.002337f, 0.002522f, 0.002720f, 0.002865f,
- 0.003029f, 0.003193f, 0.003387f, 0.003601f, 0.003887f, 0.004124f, 0.004356f, 0.004639f,
- 0.005070f, 0.005466f, 0.005863f, 0.006298f, 0.006874f, 0.007290f, 0.007965f, 0.008774f,
- 0.009560f, 0.010666f, 0.011719f, 0.013077f, 0.014679f, 0.016693f, 0.019058f, 0.021881f,
- 0.025528f, 0.030121f, 0.036011f, 0.043396f, 0.052460f, 0.063477f, 0.076721f, 0.093079f,
- 0.112305f, 0.133667f, 0.572266f, 0.609375f, 0.618164f, 0.622070f, 0.623535f, 0.625488f,
- 0.000109f, 0.000212f, 0.000404f, 0.000578f, 0.000567f, 0.000655f, 0.000763f, 0.000676f,
- 0.000824f, 0.000869f, 0.000971f, 0.001064f, 0.001132f, 0.001210f, 0.001212f, 0.001398f,
- 0.001486f, 0.001525f, 0.001653f, 0.001676f, 0.001867f, 0.001953f, 0.002062f, 0.002199f,
- 0.002295f, 0.002443f, 0.002586f, 0.002766f, 0.002979f, 0.003128f, 0.003429f, 0.003551f,
- 0.003763f, 0.004074f, 0.004349f, 0.004688f, 0.005032f, 0.005470f, 0.005894f, 0.006519f,
- 0.007092f, 0.007896f, 0.008629f, 0.009659f, 0.010910f, 0.012215f, 0.013962f, 0.015991f,
- 0.018646f, 0.021881f, 0.026428f, 0.032074f, 0.039276f, 0.048645f, 0.060455f, 0.075256f,
- 0.092773f, 0.113220f, 0.554688f, 0.596191f, 0.605957f, 0.608887f, 0.610352f, 0.612305f,
- 0.000202f, 0.000186f, 0.000312f, 0.000433f, 0.000382f, 0.000543f, 0.000482f, 0.000546f,
- 0.000621f, 0.000666f, 0.000789f, 0.000802f, 0.000859f, 0.000950f, 0.000970f, 0.000975f,
- 0.001113f, 0.001162f, 0.001207f, 0.001312f, 0.001362f, 0.001433f, 0.001541f, 0.001618f,
- 0.001720f, 0.001791f, 0.001966f, 0.002035f, 0.002199f, 0.002413f, 0.002546f, 0.002626f,
- 0.002855f, 0.003063f, 0.003204f, 0.003448f, 0.003693f, 0.003986f, 0.004364f, 0.004684f,
- 0.005127f, 0.005619f, 0.006271f, 0.006870f, 0.007748f, 0.008713f, 0.009911f, 0.011368f,
- 0.013191f, 0.015518f, 0.018646f, 0.022644f, 0.028107f, 0.035645f, 0.045471f, 0.058502f,
- 0.074646f, 0.093994f, 0.541016f, 0.583008f, 0.591797f, 0.596191f, 0.599121f, 0.600098f,
- 0.000000f, 0.000179f, 0.000242f, 0.000318f, 0.000341f, 0.000345f, 0.000432f, 0.000364f,
- 0.000475f, 0.000483f, 0.000572f, 0.000576f, 0.000619f, 0.000640f, 0.000716f, 0.000737f,
- 0.000791f, 0.000845f, 0.000871f, 0.000907f, 0.000998f, 0.001025f, 0.001107f, 0.001181f,
- 0.001244f, 0.001303f, 0.001391f, 0.001462f, 0.001549f, 0.001631f, 0.001756f, 0.001906f,
- 0.001984f, 0.002161f, 0.002264f, 0.002419f, 0.002613f, 0.002825f, 0.003103f, 0.003321f,
- 0.003584f, 0.003893f, 0.004349f, 0.004799f, 0.005383f, 0.006020f, 0.006836f, 0.007858f,
- 0.009117f, 0.010674f, 0.012825f, 0.015533f, 0.019363f, 0.024780f, 0.032593f, 0.043274f,
- 0.057770f, 0.076111f, 0.525879f, 0.569336f, 0.578613f, 0.583008f, 0.585449f, 0.586426f,
- 0.000000f, 0.000088f, 0.000192f, 0.000227f, 0.000230f, 0.000286f, 0.000255f, 0.000317f,
- 0.000321f, 0.000371f, 0.000401f, 0.000373f, 0.000391f, 0.000457f, 0.000474f, 0.000530f,
- 0.000509f, 0.000585f, 0.000625f, 0.000664f, 0.000707f, 0.000746f, 0.000772f, 0.000817f,
- 0.000877f, 0.000887f, 0.000978f, 0.001007f, 0.001069f, 0.001202f, 0.001192f, 0.001290f,
- 0.001356f, 0.001464f, 0.001583f, 0.001678f, 0.001771f, 0.001929f, 0.002050f, 0.002230f,
- 0.002424f, 0.002651f, 0.002888f, 0.003176f, 0.003534f, 0.003967f, 0.004475f, 0.005154f,
- 0.005993f, 0.007118f, 0.008469f, 0.010338f, 0.012794f, 0.016403f, 0.021957f, 0.030090f,
- 0.042419f, 0.059052f, 0.510254f, 0.554199f, 0.564453f, 0.570312f, 0.572754f, 0.573242f,
- 0.000000f, 0.000126f, 0.000180f, 0.000121f, 0.000178f, 0.000176f, 0.000177f, 0.000212f,
- 0.000210f, 0.000228f, 0.000238f, 0.000291f, 0.000280f, 0.000298f, 0.000336f, 0.000350f,
- 0.000369f, 0.000387f, 0.000395f, 0.000427f, 0.000460f, 0.000476f, 0.000515f, 0.000536f,
- 0.000573f, 0.000619f, 0.000650f, 0.000670f, 0.000703f, 0.000746f, 0.000798f, 0.000836f,
- 0.000902f, 0.000949f, 0.001031f, 0.001062f, 0.001162f, 0.001227f, 0.001349f, 0.001442f,
- 0.001533f, 0.001690f, 0.001865f, 0.001995f, 0.002228f, 0.002495f, 0.002800f, 0.003191f,
- 0.003653f, 0.004349f, 0.005203f, 0.006393f, 0.008026f, 0.010307f, 0.013710f, 0.019379f,
- 0.028854f, 0.043457f, 0.494873f, 0.541016f, 0.550781f, 0.555664f, 0.558105f, 0.559570f,
- 0.000000f, 0.000095f, 0.000086f, 0.000079f, 0.000105f, 0.000124f, 0.000111f, 0.000137f,
- 0.000141f, 0.000142f, 0.000147f, 0.000151f, 0.000160f, 0.000181f, 0.000202f, 0.000207f,
- 0.000214f, 0.000248f, 0.000244f, 0.000282f, 0.000273f, 0.000283f, 0.000306f, 0.000334f,
- 0.000367f, 0.000378f, 0.000376f, 0.000399f, 0.000437f, 0.000459f, 0.000474f, 0.000516f,
- 0.000552f, 0.000567f, 0.000616f, 0.000649f, 0.000693f, 0.000743f, 0.000805f, 0.000851f,
- 0.000918f, 0.000999f, 0.001085f, 0.001195f, 0.001309f, 0.001466f, 0.001644f, 0.001850f,
- 0.002151f, 0.002487f, 0.002974f, 0.003654f, 0.004574f, 0.006001f, 0.008156f, 0.011452f,
- 0.017853f, 0.029739f, 0.478271f, 0.526367f, 0.537109f, 0.541504f, 0.544434f, 0.545898f,
- 0.000106f, 0.000085f, 0.000074f, 0.000067f, 0.000066f, 0.000070f, 0.000069f, 0.000073f,
- 0.000073f, 0.000080f, 0.000084f, 0.000109f, 0.000093f, 0.000098f, 0.000119f, 0.000108f,
- 0.000128f, 0.000135f, 0.000137f, 0.000149f, 0.000150f, 0.000157f, 0.000182f, 0.000185f,
- 0.000207f, 0.000206f, 0.000214f, 0.000234f, 0.000237f, 0.000253f, 0.000267f, 0.000289f,
- 0.000306f, 0.000313f, 0.000344f, 0.000352f, 0.000384f, 0.000406f, 0.000445f, 0.000467f,
- 0.000503f, 0.000543f, 0.000593f, 0.000634f, 0.000697f, 0.000764f, 0.000850f, 0.000963f,
- 0.001105f, 0.001298f, 0.001536f, 0.001856f, 0.002333f, 0.003069f, 0.004299f, 0.006271f,
- 0.009789f, 0.018234f, 0.462402f, 0.511719f, 0.522949f, 0.527344f, 0.530762f, 0.532715f,
- 0.000091f, 0.000069f, 0.000060f, 0.000054f, 0.000049f, 0.000046f, 0.000043f, 0.000041f,
- 0.000040f, 0.000044f, 0.000040f, 0.000040f, 0.000054f, 0.000044f, 0.000045f, 0.000044f,
- 0.000062f, 0.000062f, 0.000069f, 0.000071f, 0.000074f, 0.000079f, 0.000081f, 0.000081f,
- 0.000085f, 0.000099f, 0.000098f, 0.000115f, 0.000115f, 0.000119f, 0.000125f, 0.000130f,
- 0.000140f, 0.000144f, 0.000165f, 0.000172f, 0.000178f, 0.000191f, 0.000205f, 0.000222f,
- 0.000234f, 0.000251f, 0.000276f, 0.000293f, 0.000327f, 0.000354f, 0.000392f, 0.000437f,
- 0.000494f, 0.000562f, 0.000662f, 0.000800f, 0.001005f, 0.001315f, 0.001852f, 0.002825f,
- 0.004723f, 0.009285f, 0.446533f, 0.497803f, 0.508301f, 0.514160f, 0.516602f, 0.519043f,
- 0.000067f, 0.000048f, 0.000040f, 0.000036f, 0.000033f, 0.000031f, 0.000030f, 0.000028f,
- 0.000027f, 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000022f, 0.000021f, 0.000020f,
- 0.000019f, 0.000020f, 0.000024f, 0.000026f, 0.000025f, 0.000027f, 0.000031f, 0.000032f,
- 0.000032f, 0.000037f, 0.000041f, 0.000038f, 0.000045f, 0.000042f, 0.000048f, 0.000049f,
- 0.000053f, 0.000055f, 0.000059f, 0.000062f, 0.000071f, 0.000074f, 0.000077f, 0.000081f,
- 0.000086f, 0.000091f, 0.000098f, 0.000109f, 0.000116f, 0.000125f, 0.000137f, 0.000158f,
- 0.000173f, 0.000193f, 0.000230f, 0.000273f, 0.000335f, 0.000425f, 0.000603f, 0.000935f,
- 0.001694f, 0.003727f, 0.431396f, 0.481934f, 0.493652f, 0.499512f, 0.502930f, 0.504883f,
- 0.000021f, 0.000016f, 0.000013f, 0.000012f, 0.000013f, 0.000012f, 0.000012f, 0.000012f,
- 0.000012f, 0.000012f, 0.000011f, 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f,
- 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f,
- 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000009f, 0.000009f, 0.000010f,
- 0.000010f, 0.000013f, 0.000014f, 0.000013f, 0.000015f, 0.000016f, 0.000017f, 0.000019f,
- 0.000019f, 0.000020f, 0.000023f, 0.000026f, 0.000027f, 0.000027f, 0.000032f, 0.000030f,
- 0.000036f, 0.000039f, 0.000050f, 0.000056f, 0.000063f, 0.000082f, 0.000109f, 0.000168f,
- 0.000317f, 0.000922f, 0.415283f, 0.467773f, 0.479980f, 0.486328f, 0.489014f, 0.490723f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000005f,
- 0.000008f, 0.000026f, 0.398926f, 0.452881f, 0.465576f, 0.471436f, 0.474854f, 0.477051f,
- },
- {
- 0.019653f, 0.058990f, 0.097473f, 0.134277f, 0.169189f, 0.203491f, 0.236450f, 0.267578f,
- 0.297852f, 0.326416f, 0.354004f, 0.380859f, 0.406250f, 0.431641f, 0.455078f, 0.477539f,
- 0.500000f, 0.520996f, 0.541504f, 0.560547f, 0.580566f, 0.598633f, 0.615723f, 0.633301f,
- 0.649902f, 0.666016f, 0.681641f, 0.695801f, 0.709961f, 0.724609f, 0.738770f, 0.751953f,
- 0.765137f, 0.775879f, 0.788574f, 0.799805f, 0.812012f, 0.822754f, 0.833496f, 0.844238f,
- 0.854004f, 0.864258f, 0.874023f, 0.883301f, 0.891602f, 0.900391f, 0.909668f, 0.917969f,
- 0.925781f, 0.934570f, 0.941895f, 0.949707f, 0.956543f, 0.963379f, 0.970703f, 0.977539f,
- 0.984863f, 0.991211f, 0.988770f, 0.972656f, 0.960449f, 0.949707f, 0.940430f, 0.931641f,
- 0.017303f, 0.052399f, 0.086548f, 0.119446f, 0.153076f, 0.183594f, 0.214722f, 0.245117f,
- 0.273193f, 0.301270f, 0.328613f, 0.354492f, 0.379883f, 0.404541f, 0.427979f, 0.450195f,
- 0.472656f, 0.494629f, 0.515137f, 0.534668f, 0.554199f, 0.573242f, 0.591309f, 0.608887f,
- 0.625977f, 0.642578f, 0.658203f, 0.672852f, 0.688477f, 0.704102f, 0.717285f, 0.731445f,
- 0.744629f, 0.756836f, 0.769531f, 0.782715f, 0.793945f, 0.805664f, 0.816406f, 0.828125f,
- 0.838379f, 0.849121f, 0.858887f, 0.868652f, 0.877930f, 0.888184f, 0.896973f, 0.905762f,
- 0.915039f, 0.921875f, 0.930176f, 0.937988f, 0.946777f, 0.954102f, 0.960938f, 0.968750f,
- 0.975586f, 0.982422f, 0.984375f, 0.969238f, 0.957520f, 0.947754f, 0.938477f, 0.930176f,
- 0.015221f, 0.045837f, 0.076843f, 0.107666f, 0.136719f, 0.166504f, 0.196045f, 0.223999f,
- 0.250244f, 0.278320f, 0.303711f, 0.329346f, 0.353271f, 0.378906f, 0.401367f, 0.424316f,
- 0.447266f, 0.468018f, 0.487793f, 0.508301f, 0.529297f, 0.547363f, 0.566406f, 0.583984f,
- 0.601562f, 0.618652f, 0.634766f, 0.650879f, 0.666016f, 0.681641f, 0.695801f, 0.710449f,
- 0.724121f, 0.737305f, 0.750488f, 0.762695f, 0.775391f, 0.788086f, 0.799316f, 0.811035f,
- 0.821777f, 0.833008f, 0.844238f, 0.854004f, 0.864258f, 0.874023f, 0.882812f, 0.892578f,
- 0.901367f, 0.910156f, 0.918457f, 0.926758f, 0.936035f, 0.942871f, 0.950684f, 0.958496f,
- 0.965820f, 0.973145f, 0.980469f, 0.965820f, 0.955078f, 0.945312f, 0.936523f, 0.928223f,
- 0.013420f, 0.041138f, 0.068359f, 0.096436f, 0.124023f, 0.150879f, 0.177246f, 0.204224f,
- 0.230103f, 0.255859f, 0.281494f, 0.305420f, 0.329834f, 0.352783f, 0.376709f, 0.398682f,
- 0.420654f, 0.442627f, 0.462646f, 0.483887f, 0.502441f, 0.521484f, 0.540527f, 0.559082f,
- 0.576172f, 0.595703f, 0.611328f, 0.627930f, 0.644043f, 0.659668f, 0.674316f, 0.688965f,
- 0.703613f, 0.717285f, 0.730957f, 0.744629f, 0.756836f, 0.770020f, 0.781738f, 0.793945f,
- 0.805176f, 0.816895f, 0.828125f, 0.838379f, 0.849121f, 0.859375f, 0.869141f, 0.878418f,
- 0.888184f, 0.897461f, 0.906738f, 0.915039f, 0.923828f, 0.932129f, 0.940430f, 0.947754f,
- 0.956543f, 0.963867f, 0.976074f, 0.962402f, 0.951660f, 0.942383f, 0.934082f, 0.926758f,
- 0.012001f, 0.036591f, 0.061737f, 0.086670f, 0.112000f, 0.136719f, 0.161743f, 0.186768f,
- 0.211792f, 0.235840f, 0.259521f, 0.283203f, 0.307129f, 0.329590f, 0.352295f, 0.374268f,
- 0.395996f, 0.416992f, 0.437744f, 0.457520f, 0.477295f, 0.497314f, 0.515625f, 0.534180f,
- 0.553223f, 0.570312f, 0.588379f, 0.604492f, 0.621582f, 0.636719f, 0.653320f, 0.666992f,
- 0.683105f, 0.697266f, 0.710449f, 0.724609f, 0.737793f, 0.750977f, 0.764160f, 0.775879f,
- 0.788086f, 0.799805f, 0.812012f, 0.823242f, 0.833496f, 0.844238f, 0.854492f, 0.864746f,
- 0.875000f, 0.884277f, 0.894043f, 0.902832f, 0.911621f, 0.920898f, 0.929688f, 0.937500f,
- 0.945801f, 0.953613f, 0.971191f, 0.958984f, 0.949219f, 0.939941f, 0.932129f, 0.924316f,
- 0.010612f, 0.032684f, 0.054810f, 0.077759f, 0.100952f, 0.124023f, 0.146851f, 0.171021f,
- 0.193604f, 0.217163f, 0.239380f, 0.261963f, 0.284424f, 0.307129f, 0.328613f, 0.351318f,
- 0.371826f, 0.392334f, 0.413574f, 0.432617f, 0.453613f, 0.472656f, 0.491943f, 0.510254f,
- 0.528320f, 0.546387f, 0.563965f, 0.580078f, 0.598633f, 0.613770f, 0.629883f, 0.645996f,
- 0.661621f, 0.675293f, 0.688965f, 0.705078f, 0.718262f, 0.731934f, 0.745605f, 0.757812f,
- 0.770996f, 0.782715f, 0.795410f, 0.807129f, 0.818359f, 0.829102f, 0.839844f, 0.851074f,
- 0.860840f, 0.871094f, 0.880859f, 0.891113f, 0.900391f, 0.909668f, 0.917969f, 0.927246f,
- 0.935547f, 0.943848f, 0.966797f, 0.955566f, 0.945801f, 0.937012f, 0.929199f, 0.921875f,
- 0.009483f, 0.029556f, 0.050140f, 0.070129f, 0.091797f, 0.112549f, 0.134155f, 0.156372f,
- 0.177368f, 0.198975f, 0.220825f, 0.243286f, 0.263916f, 0.285645f, 0.306885f, 0.327393f,
- 0.348145f, 0.368896f, 0.389404f, 0.409424f, 0.429199f, 0.448730f, 0.467529f, 0.486572f,
- 0.505371f, 0.522461f, 0.540039f, 0.558105f, 0.574219f, 0.591309f, 0.607422f, 0.623535f,
- 0.639648f, 0.654785f, 0.669922f, 0.685547f, 0.698730f, 0.712891f, 0.726074f, 0.740234f,
- 0.752441f, 0.765625f, 0.778320f, 0.789551f, 0.802246f, 0.813477f, 0.825195f, 0.836426f,
- 0.847168f, 0.856934f, 0.868164f, 0.877930f, 0.888184f, 0.897461f, 0.906738f, 0.915527f,
- 0.925293f, 0.935059f, 0.962402f, 0.951660f, 0.942383f, 0.933594f, 0.926270f, 0.919434f,
- 0.008934f, 0.026581f, 0.044708f, 0.063354f, 0.082825f, 0.102844f, 0.122437f, 0.141968f,
- 0.162720f, 0.183105f, 0.202515f, 0.224609f, 0.244995f, 0.265381f, 0.285645f, 0.306152f,
- 0.326416f, 0.346680f, 0.365967f, 0.385498f, 0.406006f, 0.425293f, 0.444092f, 0.461914f,
- 0.480225f, 0.499268f, 0.517090f, 0.535156f, 0.552246f, 0.568359f, 0.585449f, 0.601562f,
- 0.616699f, 0.633789f, 0.649414f, 0.663574f, 0.678711f, 0.693848f, 0.706543f, 0.721680f,
- 0.734375f, 0.746582f, 0.760742f, 0.773438f, 0.786133f, 0.797852f, 0.809082f, 0.821777f,
- 0.832031f, 0.843262f, 0.854492f, 0.864746f, 0.875000f, 0.884766f, 0.895020f, 0.904785f,
- 0.914062f, 0.922852f, 0.957520f, 0.947266f, 0.938965f, 0.930664f, 0.923340f, 0.916992f,
- 0.007668f, 0.024017f, 0.040405f, 0.057831f, 0.075195f, 0.093079f, 0.111694f, 0.130127f,
- 0.148926f, 0.168213f, 0.187500f, 0.206543f, 0.226440f, 0.246460f, 0.265869f, 0.285400f,
- 0.305176f, 0.324707f, 0.344238f, 0.363281f, 0.383057f, 0.401123f, 0.420166f, 0.439941f,
- 0.457764f, 0.475586f, 0.493164f, 0.511719f, 0.528809f, 0.545898f, 0.562988f, 0.579590f,
- 0.596191f, 0.612305f, 0.627441f, 0.643555f, 0.658203f, 0.672363f, 0.687988f, 0.702637f,
- 0.715332f, 0.728516f, 0.742676f, 0.756348f, 0.768555f, 0.781250f, 0.794434f, 0.806152f,
- 0.818359f, 0.828613f, 0.840332f, 0.851074f, 0.861816f, 0.872559f, 0.882812f, 0.892578f,
- 0.903320f, 0.912598f, 0.952637f, 0.943848f, 0.935059f, 0.927246f, 0.920410f, 0.914062f,
- 0.007263f, 0.021530f, 0.037048f, 0.052429f, 0.068909f, 0.084961f, 0.102112f, 0.119568f,
- 0.136475f, 0.154541f, 0.172852f, 0.191528f, 0.209717f, 0.228638f, 0.246948f, 0.265869f,
- 0.284912f, 0.304199f, 0.322510f, 0.341309f, 0.360596f, 0.379639f, 0.397461f, 0.416504f,
- 0.434570f, 0.452881f, 0.470947f, 0.489014f, 0.505859f, 0.523438f, 0.541016f, 0.557129f,
- 0.574219f, 0.590332f, 0.606445f, 0.622070f, 0.637695f, 0.653809f, 0.667969f, 0.682129f,
- 0.697754f, 0.711426f, 0.724609f, 0.737793f, 0.750977f, 0.765625f, 0.777832f, 0.790039f,
- 0.801270f, 0.813477f, 0.825684f, 0.837402f, 0.848145f, 0.859375f, 0.870117f, 0.880859f,
- 0.891602f, 0.900391f, 0.947754f, 0.938965f, 0.931152f, 0.923828f, 0.917480f, 0.911133f,
- 0.006401f, 0.019730f, 0.033813f, 0.047729f, 0.062561f, 0.077515f, 0.093140f, 0.108948f,
- 0.125366f, 0.141968f, 0.159058f, 0.175781f, 0.193726f, 0.212036f, 0.229980f, 0.247681f,
- 0.265869f, 0.284424f, 0.302734f, 0.320557f, 0.339111f, 0.357910f, 0.376221f, 0.394287f,
- 0.412109f, 0.429688f, 0.448486f, 0.466064f, 0.483398f, 0.500977f, 0.517090f, 0.535156f,
- 0.552246f, 0.568359f, 0.583984f, 0.600586f, 0.616699f, 0.632324f, 0.647949f, 0.662598f,
- 0.677246f, 0.692383f, 0.706543f, 0.719727f, 0.734375f, 0.747070f, 0.761230f, 0.773926f,
- 0.786621f, 0.797852f, 0.811523f, 0.823242f, 0.834961f, 0.846680f, 0.857422f, 0.868652f,
- 0.879395f, 0.890137f, 0.942383f, 0.934082f, 0.927246f, 0.919922f, 0.913574f, 0.908203f,
- 0.005836f, 0.018158f, 0.030746f, 0.043335f, 0.057007f, 0.070801f, 0.085754f, 0.099548f,
- 0.115112f, 0.130127f, 0.146362f, 0.162354f, 0.178711f, 0.195801f, 0.212769f, 0.230103f,
- 0.247925f, 0.264893f, 0.283203f, 0.300293f, 0.318604f, 0.336426f, 0.354492f, 0.372314f,
- 0.390137f, 0.408203f, 0.425537f, 0.443848f, 0.461182f, 0.478271f, 0.496094f, 0.513184f,
- 0.529297f, 0.546387f, 0.563477f, 0.580566f, 0.595703f, 0.611816f, 0.626465f, 0.642090f,
- 0.658691f, 0.671875f, 0.686523f, 0.702148f, 0.716797f, 0.729980f, 0.744629f, 0.757324f,
- 0.770020f, 0.783203f, 0.796875f, 0.808105f, 0.820312f, 0.832520f, 0.844727f, 0.855957f,
- 0.867188f, 0.877930f, 0.937012f, 0.930176f, 0.922852f, 0.916504f, 0.910645f, 0.904785f,
- 0.005486f, 0.016525f, 0.028030f, 0.039612f, 0.052185f, 0.064636f, 0.077576f, 0.091553f,
- 0.105347f, 0.119568f, 0.134521f, 0.149536f, 0.164917f, 0.180664f, 0.197388f, 0.213623f,
- 0.230347f, 0.246826f, 0.264160f, 0.280518f, 0.298584f, 0.315674f, 0.334229f, 0.350830f,
- 0.369141f, 0.386963f, 0.404053f, 0.422119f, 0.438477f, 0.456299f, 0.474121f, 0.491211f,
- 0.507812f, 0.524902f, 0.541504f, 0.557617f, 0.574707f, 0.590820f, 0.606934f, 0.622559f,
- 0.637207f, 0.652832f, 0.668945f, 0.683105f, 0.698730f, 0.711914f, 0.726074f, 0.740723f,
- 0.753906f, 0.766602f, 0.780273f, 0.792969f, 0.805664f, 0.818848f, 0.830566f, 0.842285f,
- 0.854492f, 0.866211f, 0.931641f, 0.925781f, 0.918945f, 0.913086f, 0.907227f, 0.900879f,
- 0.004810f, 0.014847f, 0.025604f, 0.036621f, 0.047577f, 0.059174f, 0.071472f, 0.084106f,
- 0.096985f, 0.109863f, 0.124146f, 0.137939f, 0.152954f, 0.167358f, 0.182495f, 0.197754f,
- 0.213745f, 0.230103f, 0.246216f, 0.262939f, 0.279297f, 0.296387f, 0.313477f, 0.329834f,
- 0.348145f, 0.365479f, 0.382080f, 0.399658f, 0.417480f, 0.434082f, 0.452148f, 0.469238f,
- 0.486084f, 0.502441f, 0.520020f, 0.536621f, 0.552734f, 0.569336f, 0.585938f, 0.601562f,
- 0.617676f, 0.632812f, 0.648438f, 0.664062f, 0.679688f, 0.693848f, 0.708008f, 0.722656f,
- 0.735840f, 0.750488f, 0.765137f, 0.777832f, 0.791016f, 0.803711f, 0.816895f, 0.829102f,
- 0.841309f, 0.853027f, 0.925781f, 0.921387f, 0.914551f, 0.908203f, 0.903320f, 0.897461f,
- 0.004494f, 0.013809f, 0.023331f, 0.033264f, 0.043549f, 0.053833f, 0.065369f, 0.076660f,
- 0.088684f, 0.100708f, 0.113464f, 0.127075f, 0.140381f, 0.154419f, 0.169067f, 0.183472f,
- 0.198975f, 0.213623f, 0.229370f, 0.245117f, 0.261475f, 0.277832f, 0.294678f, 0.311523f,
- 0.327148f, 0.344727f, 0.362061f, 0.378418f, 0.395996f, 0.413086f, 0.430176f, 0.447021f,
- 0.464111f, 0.481689f, 0.498047f, 0.514648f, 0.531738f, 0.547363f, 0.565430f, 0.582031f,
- 0.597656f, 0.612793f, 0.628418f, 0.644043f, 0.660645f, 0.674805f, 0.689941f, 0.705078f,
- 0.718750f, 0.734375f, 0.747559f, 0.761719f, 0.775391f, 0.788086f, 0.803223f, 0.814453f,
- 0.828125f, 0.840332f, 0.919434f, 0.916504f, 0.909668f, 0.904785f, 0.898926f, 0.894043f,
- 0.004120f, 0.012512f, 0.021423f, 0.030655f, 0.039673f, 0.049500f, 0.059845f, 0.070374f,
- 0.081543f, 0.093323f, 0.104614f, 0.116577f, 0.129395f, 0.142456f, 0.156250f, 0.169434f,
- 0.183594f, 0.198364f, 0.213257f, 0.228638f, 0.244141f, 0.259766f, 0.275635f, 0.291748f,
- 0.308105f, 0.324707f, 0.341309f, 0.359131f, 0.375244f, 0.391846f, 0.408447f, 0.426025f,
- 0.442871f, 0.459473f, 0.477051f, 0.494141f, 0.510254f, 0.527344f, 0.543457f, 0.560059f,
- 0.577148f, 0.592773f, 0.608887f, 0.625977f, 0.640625f, 0.656738f, 0.671875f, 0.686523f,
- 0.702637f, 0.716797f, 0.731445f, 0.746582f, 0.759277f, 0.773926f, 0.787598f, 0.800293f,
- 0.814453f, 0.827148f, 0.914062f, 0.911133f, 0.905273f, 0.899902f, 0.895508f, 0.890625f,
- 0.004120f, 0.011566f, 0.019180f, 0.027969f, 0.036255f, 0.045746f, 0.054901f, 0.064941f,
- 0.074707f, 0.085327f, 0.096436f, 0.107239f, 0.119324f, 0.131470f, 0.144165f, 0.157104f,
- 0.169922f, 0.183594f, 0.198242f, 0.212769f, 0.227295f, 0.242188f, 0.257568f, 0.273193f,
- 0.289307f, 0.305420f, 0.321289f, 0.337891f, 0.354492f, 0.371094f, 0.387451f, 0.405029f,
- 0.421143f, 0.438477f, 0.455322f, 0.472656f, 0.488525f, 0.505859f, 0.521973f, 0.539551f,
- 0.555664f, 0.572754f, 0.588867f, 0.605469f, 0.621582f, 0.637207f, 0.653320f, 0.668945f,
- 0.684570f, 0.698242f, 0.714844f, 0.729492f, 0.745117f, 0.758301f, 0.771973f, 0.787109f,
- 0.800781f, 0.813477f, 0.907715f, 0.905762f, 0.900879f, 0.895508f, 0.890625f, 0.886719f,
- 0.003464f, 0.010536f, 0.018143f, 0.025604f, 0.033600f, 0.041992f, 0.050659f, 0.059631f,
- 0.068481f, 0.078552f, 0.088196f, 0.099060f, 0.110107f, 0.121033f, 0.133057f, 0.145020f,
- 0.157349f, 0.170166f, 0.183838f, 0.197632f, 0.210938f, 0.225464f, 0.241089f, 0.255371f,
- 0.270508f, 0.286377f, 0.302246f, 0.317871f, 0.334229f, 0.349854f, 0.367188f, 0.383789f,
- 0.399414f, 0.417236f, 0.433838f, 0.450928f, 0.468018f, 0.484131f, 0.501465f, 0.519043f,
- 0.535156f, 0.551758f, 0.568359f, 0.585449f, 0.601074f, 0.617676f, 0.634277f, 0.649902f,
- 0.666016f, 0.681152f, 0.695801f, 0.711914f, 0.727539f, 0.741699f, 0.756836f, 0.770508f,
- 0.785645f, 0.800293f, 0.901855f, 0.900391f, 0.895996f, 0.891113f, 0.886230f, 0.881836f,
- 0.003197f, 0.009903f, 0.016525f, 0.023849f, 0.030853f, 0.038605f, 0.046265f, 0.054657f,
- 0.063232f, 0.072266f, 0.081543f, 0.090881f, 0.100769f, 0.112061f, 0.123047f, 0.134155f,
- 0.145752f, 0.157471f, 0.170166f, 0.182861f, 0.196289f, 0.210327f, 0.223755f, 0.238525f,
- 0.253418f, 0.268066f, 0.283203f, 0.299316f, 0.314697f, 0.330811f, 0.346680f, 0.363281f,
- 0.379639f, 0.396484f, 0.412842f, 0.429443f, 0.446289f, 0.462891f, 0.480225f, 0.497559f,
- 0.514648f, 0.531250f, 0.547852f, 0.564453f, 0.581055f, 0.598145f, 0.615234f, 0.631836f,
- 0.646484f, 0.663086f, 0.679199f, 0.694824f, 0.710449f, 0.726074f, 0.740234f, 0.755859f,
- 0.770508f, 0.784668f, 0.895020f, 0.894531f, 0.890625f, 0.886719f, 0.881836f, 0.877441f,
- 0.003071f, 0.009163f, 0.015602f, 0.021729f, 0.028412f, 0.035522f, 0.042755f, 0.050598f,
- 0.057983f, 0.066284f, 0.075317f, 0.083862f, 0.092773f, 0.102905f, 0.113342f, 0.123840f,
- 0.134399f, 0.145752f, 0.157593f, 0.169556f, 0.182129f, 0.194702f, 0.207886f, 0.222046f,
- 0.235840f, 0.250977f, 0.265137f, 0.280273f, 0.295898f, 0.311279f, 0.326660f, 0.342773f,
- 0.359375f, 0.375732f, 0.392090f, 0.409180f, 0.425049f, 0.441895f, 0.459473f, 0.476318f,
- 0.493652f, 0.510742f, 0.527344f, 0.544434f, 0.561035f, 0.578125f, 0.595215f, 0.611328f,
- 0.628418f, 0.645020f, 0.661133f, 0.677246f, 0.693359f, 0.708496f, 0.724609f, 0.740723f,
- 0.755859f, 0.771484f, 0.889160f, 0.889160f, 0.885254f, 0.881348f, 0.876953f, 0.873047f,
- 0.002748f, 0.008171f, 0.014084f, 0.019638f, 0.026108f, 0.032318f, 0.039154f, 0.045990f,
- 0.053619f, 0.061066f, 0.068665f, 0.076477f, 0.085632f, 0.094727f, 0.104187f, 0.113831f,
- 0.123535f, 0.134888f, 0.145508f, 0.157104f, 0.168701f, 0.181030f, 0.193481f, 0.206665f,
- 0.220093f, 0.233398f, 0.248169f, 0.262695f, 0.277344f, 0.292236f, 0.307617f, 0.322998f,
- 0.339355f, 0.355469f, 0.371582f, 0.388184f, 0.404541f, 0.420410f, 0.438477f, 0.455322f,
- 0.472656f, 0.489014f, 0.506348f, 0.523926f, 0.541016f, 0.557617f, 0.575195f, 0.591309f,
- 0.608887f, 0.625977f, 0.643555f, 0.659180f, 0.674805f, 0.691406f, 0.707520f, 0.724121f,
- 0.739746f, 0.755371f, 0.882812f, 0.883789f, 0.879883f, 0.875977f, 0.872559f, 0.868652f,
- 0.002491f, 0.007809f, 0.012764f, 0.018448f, 0.024094f, 0.029861f, 0.036102f, 0.042572f,
- 0.049500f, 0.056091f, 0.063293f, 0.070984f, 0.079285f, 0.087036f, 0.095825f, 0.104858f,
- 0.114441f, 0.124084f, 0.133789f, 0.144653f, 0.156250f, 0.167480f, 0.179199f, 0.191650f,
- 0.204102f, 0.217896f, 0.231445f, 0.245239f, 0.259521f, 0.274170f, 0.289307f, 0.304199f,
- 0.319580f, 0.334961f, 0.351074f, 0.367676f, 0.384277f, 0.400635f, 0.417480f, 0.434570f,
- 0.451660f, 0.468994f, 0.485352f, 0.502441f, 0.520508f, 0.537109f, 0.554688f, 0.571777f,
- 0.588867f, 0.605957f, 0.623047f, 0.639648f, 0.656738f, 0.673828f, 0.690430f, 0.708008f,
- 0.723633f, 0.739746f, 0.874023f, 0.876953f, 0.874023f, 0.871582f, 0.867188f, 0.862793f,
- 0.002279f, 0.007130f, 0.012291f, 0.016922f, 0.022171f, 0.027847f, 0.033325f, 0.039185f,
- 0.045349f, 0.051849f, 0.058411f, 0.064880f, 0.072144f, 0.080017f, 0.087891f, 0.096313f,
- 0.105103f, 0.114197f, 0.123779f, 0.134155f, 0.144043f, 0.155151f, 0.166016f, 0.177246f,
- 0.189697f, 0.202271f, 0.214722f, 0.228271f, 0.242310f, 0.256592f, 0.270752f, 0.285400f,
- 0.300537f, 0.315674f, 0.331543f, 0.347656f, 0.363525f, 0.379639f, 0.396729f, 0.414307f,
- 0.430908f, 0.447754f, 0.465088f, 0.482178f, 0.499512f, 0.517090f, 0.533203f, 0.552246f,
- 0.568848f, 0.586426f, 0.603516f, 0.621582f, 0.639648f, 0.656250f, 0.673828f, 0.690918f,
- 0.707520f, 0.724121f, 0.867676f, 0.870605f, 0.868164f, 0.865723f, 0.861328f, 0.857910f,
- 0.002220f, 0.006565f, 0.011238f, 0.015961f, 0.020401f, 0.025558f, 0.030853f, 0.036133f,
- 0.041199f, 0.047180f, 0.053436f, 0.059723f, 0.066162f, 0.073853f, 0.080688f, 0.088440f,
- 0.096436f, 0.105042f, 0.114319f, 0.123047f, 0.132446f, 0.142822f, 0.153198f, 0.164062f,
- 0.175659f, 0.187378f, 0.199463f, 0.212402f, 0.225464f, 0.239014f, 0.252686f, 0.266846f,
- 0.281494f, 0.296631f, 0.312500f, 0.328369f, 0.343750f, 0.359863f, 0.376221f, 0.393066f,
- 0.409668f, 0.426514f, 0.444336f, 0.461670f, 0.478760f, 0.496826f, 0.513672f, 0.532227f,
- 0.549316f, 0.567383f, 0.584961f, 0.602051f, 0.620605f, 0.637207f, 0.655273f, 0.672363f,
- 0.689941f, 0.708008f, 0.860840f, 0.864746f, 0.862793f, 0.859375f, 0.855957f, 0.853027f,
- 0.002190f, 0.005993f, 0.010117f, 0.014420f, 0.018738f, 0.023361f, 0.028015f, 0.033142f,
- 0.037781f, 0.043732f, 0.048920f, 0.054840f, 0.061218f, 0.067810f, 0.074219f, 0.081299f,
- 0.088562f, 0.096130f, 0.104614f, 0.113098f, 0.122253f, 0.131714f, 0.141113f, 0.151245f,
- 0.162109f, 0.173462f, 0.184692f, 0.196899f, 0.209473f, 0.222534f, 0.236206f, 0.249634f,
- 0.263672f, 0.277588f, 0.293213f, 0.308350f, 0.323975f, 0.339844f, 0.355957f, 0.372070f,
- 0.389404f, 0.405762f, 0.422852f, 0.439941f, 0.458008f, 0.475098f, 0.492920f, 0.510742f,
- 0.528320f, 0.546875f, 0.564453f, 0.583496f, 0.601074f, 0.619141f, 0.636719f, 0.654785f,
- 0.672852f, 0.691406f, 0.852539f, 0.858398f, 0.856445f, 0.853516f, 0.850586f, 0.847656f,
- 0.001787f, 0.005753f, 0.009300f, 0.013611f, 0.017410f, 0.021576f, 0.025665f, 0.030533f,
- 0.035126f, 0.040039f, 0.044952f, 0.050446f, 0.055817f, 0.061890f, 0.068054f, 0.074707f,
- 0.081482f, 0.088501f, 0.095764f, 0.103943f, 0.112183f, 0.120850f, 0.130249f, 0.139526f,
- 0.149658f, 0.160400f, 0.171021f, 0.182007f, 0.194336f, 0.206421f, 0.219360f, 0.232666f,
- 0.245850f, 0.260010f, 0.274170f, 0.289307f, 0.304443f, 0.319580f, 0.335693f, 0.352295f,
- 0.369141f, 0.385498f, 0.402344f, 0.419189f, 0.437012f, 0.454346f, 0.472412f, 0.490234f,
- 0.507812f, 0.525879f, 0.545410f, 0.562500f, 0.581055f, 0.600098f, 0.618164f, 0.636719f,
- 0.655273f, 0.674316f, 0.845703f, 0.852051f, 0.849609f, 0.847168f, 0.845215f, 0.841309f,
- 0.001766f, 0.005241f, 0.008881f, 0.012024f, 0.016129f, 0.020233f, 0.024124f, 0.027664f,
- 0.032135f, 0.036835f, 0.041321f, 0.046173f, 0.051392f, 0.056946f, 0.062225f, 0.068604f,
- 0.074524f, 0.080933f, 0.088135f, 0.095398f, 0.103210f, 0.110779f, 0.119263f, 0.128296f,
- 0.137695f, 0.147217f, 0.157349f, 0.168091f, 0.179688f, 0.191284f, 0.203613f, 0.215942f,
- 0.228882f, 0.242554f, 0.255859f, 0.270508f, 0.285400f, 0.300537f, 0.316406f, 0.331787f,
- 0.348877f, 0.364746f, 0.382080f, 0.398682f, 0.415771f, 0.434082f, 0.451416f, 0.469482f,
- 0.487793f, 0.505859f, 0.524414f, 0.542969f, 0.562012f, 0.580566f, 0.598145f, 0.618652f,
- 0.637695f, 0.657227f, 0.837891f, 0.844727f, 0.843750f, 0.841309f, 0.838379f, 0.836426f,
- 0.001598f, 0.004887f, 0.008217f, 0.011497f, 0.014786f, 0.018326f, 0.021652f, 0.025513f,
- 0.029541f, 0.033813f, 0.038086f, 0.042236f, 0.046844f, 0.052032f, 0.057251f, 0.062622f,
- 0.068237f, 0.074280f, 0.080505f, 0.086975f, 0.094116f, 0.101074f, 0.109314f, 0.117554f,
- 0.126587f, 0.135254f, 0.144775f, 0.155029f, 0.165405f, 0.176392f, 0.187744f, 0.199829f,
- 0.212646f, 0.224976f, 0.238647f, 0.252441f, 0.267090f, 0.281738f, 0.296631f, 0.312256f,
- 0.328369f, 0.344971f, 0.361328f, 0.377686f, 0.395264f, 0.412842f, 0.430908f, 0.448730f,
- 0.467041f, 0.485596f, 0.503906f, 0.522461f, 0.541504f, 0.561523f, 0.580078f, 0.599121f,
- 0.618164f, 0.639648f, 0.828613f, 0.837891f, 0.836914f, 0.834473f, 0.833008f, 0.830566f,
- 0.001709f, 0.004494f, 0.007416f, 0.010628f, 0.013680f, 0.016785f, 0.020203f, 0.023712f,
- 0.027435f, 0.031006f, 0.034424f, 0.038635f, 0.043182f, 0.047668f, 0.052307f, 0.057159f,
- 0.062042f, 0.067749f, 0.073730f, 0.079956f, 0.086182f, 0.092773f, 0.100159f, 0.107727f,
- 0.115479f, 0.123962f, 0.132935f, 0.142578f, 0.151978f, 0.162476f, 0.173340f, 0.184570f,
- 0.196411f, 0.208740f, 0.221436f, 0.235229f, 0.248779f, 0.262939f, 0.277832f, 0.293213f,
- 0.308105f, 0.324219f, 0.341309f, 0.357178f, 0.374756f, 0.391846f, 0.409424f, 0.427490f,
- 0.446533f, 0.464844f, 0.483643f, 0.501953f, 0.521484f, 0.541504f, 0.561035f, 0.579590f,
- 0.599609f, 0.620605f, 0.821289f, 0.830566f, 0.830078f, 0.828125f, 0.825684f, 0.823242f,
- 0.001367f, 0.004105f, 0.007023f, 0.009552f, 0.012611f, 0.015289f, 0.018341f, 0.021652f,
- 0.024857f, 0.027878f, 0.031769f, 0.035614f, 0.039276f, 0.043610f, 0.047333f, 0.052155f,
- 0.056549f, 0.061401f, 0.066895f, 0.072449f, 0.078613f, 0.084778f, 0.091309f, 0.098083f,
- 0.105774f, 0.113281f, 0.121399f, 0.130371f, 0.139648f, 0.148926f, 0.159546f, 0.169922f,
- 0.180908f, 0.192749f, 0.204834f, 0.217651f, 0.231567f, 0.244385f, 0.259277f, 0.273926f,
- 0.289307f, 0.304688f, 0.320557f, 0.336914f, 0.354248f, 0.371338f, 0.388184f, 0.406982f,
- 0.424316f, 0.443115f, 0.462646f, 0.481445f, 0.501465f, 0.520508f, 0.541016f, 0.559570f,
- 0.580078f, 0.601074f, 0.812988f, 0.823242f, 0.823242f, 0.821289f, 0.819824f, 0.817383f,
- 0.001398f, 0.003883f, 0.006351f, 0.008911f, 0.011559f, 0.014343f, 0.017212f, 0.020035f,
- 0.022797f, 0.026062f, 0.028793f, 0.031891f, 0.035858f, 0.039368f, 0.043213f, 0.047607f,
- 0.051483f, 0.056030f, 0.060883f, 0.065979f, 0.071350f, 0.076843f, 0.083130f, 0.089172f,
- 0.096069f, 0.103333f, 0.111023f, 0.119019f, 0.127319f, 0.136719f, 0.145996f, 0.156128f,
- 0.166138f, 0.177368f, 0.189453f, 0.201416f, 0.213745f, 0.227295f, 0.240601f, 0.255371f,
- 0.269287f, 0.285400f, 0.301270f, 0.317139f, 0.333740f, 0.350586f, 0.367920f, 0.385986f,
- 0.404297f, 0.422852f, 0.442383f, 0.460938f, 0.479980f, 0.500488f, 0.520508f, 0.541016f,
- 0.560547f, 0.582520f, 0.803711f, 0.814941f, 0.815430f, 0.814453f, 0.812500f, 0.810547f,
- 0.001259f, 0.003464f, 0.006332f, 0.008286f, 0.010384f, 0.013000f, 0.015587f, 0.018234f,
- 0.021027f, 0.023422f, 0.026566f, 0.029480f, 0.032379f, 0.035919f, 0.039215f, 0.043060f,
- 0.046997f, 0.050995f, 0.055267f, 0.059998f, 0.065002f, 0.069946f, 0.075317f, 0.081299f,
- 0.087280f, 0.094116f, 0.101135f, 0.108276f, 0.116150f, 0.124695f, 0.133545f, 0.142700f,
- 0.152222f, 0.162720f, 0.173950f, 0.185303f, 0.197754f, 0.210205f, 0.223022f, 0.237061f,
- 0.250732f, 0.265869f, 0.281250f, 0.297119f, 0.313477f, 0.330322f, 0.347656f, 0.364746f,
- 0.383301f, 0.401367f, 0.420898f, 0.440186f, 0.459229f, 0.479736f, 0.499512f, 0.520996f,
- 0.541016f, 0.562988f, 0.794434f, 0.807129f, 0.807617f, 0.807129f, 0.805176f, 0.803711f,
- 0.001070f, 0.003237f, 0.005432f, 0.007359f, 0.009857f, 0.012337f, 0.014191f, 0.016586f,
- 0.019257f, 0.021561f, 0.024094f, 0.026901f, 0.029724f, 0.032745f, 0.035675f, 0.039368f,
- 0.042572f, 0.045990f, 0.050354f, 0.054535f, 0.058746f, 0.063232f, 0.068420f, 0.073608f,
- 0.079529f, 0.085266f, 0.091370f, 0.098083f, 0.105835f, 0.113159f, 0.121094f, 0.129639f,
- 0.139038f, 0.148926f, 0.159058f, 0.169678f, 0.181274f, 0.193481f, 0.205811f, 0.219482f,
- 0.233032f, 0.247192f, 0.262207f, 0.277100f, 0.293213f, 0.309814f, 0.326660f, 0.344238f,
- 0.361816f, 0.380615f, 0.398926f, 0.418945f, 0.438477f, 0.458008f, 0.479004f, 0.499512f,
- 0.520996f, 0.543945f, 0.784668f, 0.798828f, 0.800293f, 0.799805f, 0.797852f, 0.796875f,
- 0.001074f, 0.002916f, 0.004955f, 0.007149f, 0.009033f, 0.011055f, 0.013268f, 0.015495f,
- 0.017365f, 0.019485f, 0.022095f, 0.024002f, 0.026688f, 0.029633f, 0.032593f, 0.035370f,
- 0.038361f, 0.041870f, 0.045319f, 0.049225f, 0.052948f, 0.057068f, 0.061676f, 0.066345f,
- 0.071167f, 0.076782f, 0.082581f, 0.088867f, 0.095886f, 0.102539f, 0.109802f, 0.118042f,
- 0.126709f, 0.135132f, 0.144897f, 0.155151f, 0.165771f, 0.177368f, 0.189209f, 0.201904f,
- 0.215210f, 0.229370f, 0.242798f, 0.258057f, 0.274170f, 0.290039f, 0.306885f, 0.323242f,
- 0.341309f, 0.359375f, 0.378418f, 0.397461f, 0.416260f, 0.437500f, 0.457031f, 0.479004f,
- 0.501465f, 0.522461f, 0.775391f, 0.790527f, 0.791992f, 0.791504f, 0.791016f, 0.789551f,
- 0.000837f, 0.002916f, 0.004738f, 0.006477f, 0.008575f, 0.010170f, 0.012161f, 0.014023f,
- 0.015808f, 0.017792f, 0.020111f, 0.022064f, 0.024414f, 0.026794f, 0.029251f, 0.032074f,
- 0.034698f, 0.037598f, 0.040741f, 0.043915f, 0.047577f, 0.051361f, 0.055389f, 0.059692f,
- 0.064209f, 0.068787f, 0.074585f, 0.079712f, 0.085632f, 0.092346f, 0.099487f, 0.106323f,
- 0.114929f, 0.122925f, 0.131958f, 0.141235f, 0.151123f, 0.161865f, 0.172974f, 0.184937f,
- 0.197632f, 0.210693f, 0.224854f, 0.239136f, 0.254395f, 0.269531f, 0.285889f, 0.302979f,
- 0.320557f, 0.338623f, 0.356689f, 0.375977f, 0.395752f, 0.415527f, 0.436523f, 0.458252f,
- 0.479248f, 0.501465f, 0.765137f, 0.781738f, 0.783691f, 0.784180f, 0.783203f, 0.781250f,
- 0.000854f, 0.002817f, 0.004089f, 0.005684f, 0.007675f, 0.009277f, 0.010864f, 0.012413f,
- 0.014427f, 0.016235f, 0.017838f, 0.019913f, 0.021805f, 0.023987f, 0.026276f, 0.028915f,
- 0.030960f, 0.033875f, 0.036652f, 0.039551f, 0.042816f, 0.045837f, 0.049591f, 0.053589f,
- 0.057526f, 0.061829f, 0.066650f, 0.071655f, 0.077393f, 0.083008f, 0.088989f, 0.096008f,
- 0.103210f, 0.110657f, 0.119141f, 0.127930f, 0.137085f, 0.146973f, 0.157593f, 0.169312f,
- 0.181274f, 0.193481f, 0.207031f, 0.220581f, 0.235229f, 0.250732f, 0.266357f, 0.282227f,
- 0.299805f, 0.317627f, 0.335449f, 0.354736f, 0.374268f, 0.394531f, 0.415527f, 0.436279f,
- 0.458252f, 0.481689f, 0.754883f, 0.773438f, 0.775391f, 0.775879f, 0.774902f, 0.773926f,
- 0.000852f, 0.002520f, 0.003937f, 0.005527f, 0.006836f, 0.008408f, 0.009773f, 0.011620f,
- 0.013039f, 0.014687f, 0.016327f, 0.017944f, 0.019760f, 0.021774f, 0.023697f, 0.025894f,
- 0.027969f, 0.030121f, 0.032501f, 0.035370f, 0.038208f, 0.041046f, 0.044098f, 0.047791f,
- 0.051453f, 0.055176f, 0.059570f, 0.064026f, 0.068787f, 0.074158f, 0.079834f, 0.085938f,
- 0.092590f, 0.099304f, 0.106873f, 0.114990f, 0.124023f, 0.133301f, 0.143066f, 0.153687f,
- 0.164551f, 0.176392f, 0.189209f, 0.202637f, 0.216553f, 0.231323f, 0.246704f, 0.262451f,
- 0.279297f, 0.296387f, 0.314697f, 0.333496f, 0.353516f, 0.373047f, 0.394775f, 0.415039f,
- 0.437500f, 0.460449f, 0.745117f, 0.763672f, 0.766602f, 0.767090f, 0.767090f, 0.765625f,
- 0.000762f, 0.002342f, 0.003563f, 0.004787f, 0.006447f, 0.007648f, 0.009193f, 0.010353f,
- 0.012016f, 0.013138f, 0.014557f, 0.016312f, 0.017929f, 0.019470f, 0.021103f, 0.023056f,
- 0.024918f, 0.026886f, 0.029099f, 0.031586f, 0.034058f, 0.036499f, 0.039307f, 0.042450f,
- 0.045685f, 0.049072f, 0.052826f, 0.056915f, 0.061096f, 0.065918f, 0.070984f, 0.076538f,
- 0.082520f, 0.088928f, 0.095520f, 0.102905f, 0.111206f, 0.119629f, 0.128662f, 0.138184f,
- 0.148682f, 0.160156f, 0.171997f, 0.184937f, 0.198364f, 0.212524f, 0.227173f, 0.243042f,
- 0.259277f, 0.276611f, 0.294189f, 0.312500f, 0.331055f, 0.350830f, 0.372070f, 0.392334f,
- 0.415771f, 0.438232f, 0.734375f, 0.754395f, 0.758789f, 0.758789f, 0.758789f, 0.757812f,
- 0.000848f, 0.002024f, 0.003553f, 0.004646f, 0.005726f, 0.007050f, 0.008362f, 0.009438f,
- 0.010536f, 0.011810f, 0.013123f, 0.014481f, 0.015778f, 0.017242f, 0.018753f, 0.020447f,
- 0.022278f, 0.023819f, 0.025940f, 0.027771f, 0.029999f, 0.032410f, 0.034851f, 0.037354f,
- 0.040375f, 0.043610f, 0.046631f, 0.050354f, 0.054108f, 0.058563f, 0.062805f, 0.067871f,
- 0.073242f, 0.078796f, 0.085083f, 0.091797f, 0.098816f, 0.106689f, 0.115540f, 0.124207f,
- 0.134155f, 0.144409f, 0.155762f, 0.167725f, 0.180664f, 0.193848f, 0.208618f, 0.223389f,
- 0.239746f, 0.256104f, 0.273438f, 0.291260f, 0.310059f, 0.330078f, 0.349854f, 0.370850f,
- 0.393555f, 0.416992f, 0.724121f, 0.744629f, 0.748535f, 0.750000f, 0.749512f, 0.749512f,
- 0.000736f, 0.001780f, 0.002937f, 0.004314f, 0.005211f, 0.006214f, 0.007423f, 0.008537f,
- 0.009392f, 0.010773f, 0.011726f, 0.012970f, 0.014183f, 0.015373f, 0.016724f, 0.017990f,
- 0.019730f, 0.021194f, 0.022644f, 0.024368f, 0.026443f, 0.028610f, 0.030685f, 0.032898f,
- 0.035583f, 0.038300f, 0.041351f, 0.044556f, 0.047638f, 0.051422f, 0.055359f, 0.059875f,
- 0.064392f, 0.069580f, 0.075195f, 0.080872f, 0.087646f, 0.094849f, 0.102173f, 0.110596f,
- 0.119690f, 0.129761f, 0.139893f, 0.151367f, 0.163452f, 0.176147f, 0.190063f, 0.204590f,
- 0.219238f, 0.235718f, 0.252441f, 0.270264f, 0.289062f, 0.307861f, 0.328613f, 0.350098f,
- 0.372314f, 0.395020f, 0.712402f, 0.734863f, 0.739746f, 0.740723f, 0.740723f, 0.740234f,
- 0.000589f, 0.001616f, 0.002674f, 0.003841f, 0.004940f, 0.005676f, 0.006554f, 0.007442f,
- 0.008812f, 0.009537f, 0.010277f, 0.011528f, 0.012634f, 0.013527f, 0.014671f, 0.016037f,
- 0.017136f, 0.018631f, 0.019943f, 0.021530f, 0.023071f, 0.025146f, 0.026825f, 0.029037f,
- 0.030853f, 0.033447f, 0.035736f, 0.038849f, 0.041656f, 0.044922f, 0.048462f, 0.052277f,
- 0.056519f, 0.061127f, 0.065796f, 0.071411f, 0.077148f, 0.083435f, 0.090393f, 0.097900f,
- 0.106079f, 0.115356f, 0.125122f, 0.135132f, 0.146729f, 0.158936f, 0.171509f, 0.185059f,
- 0.200439f, 0.215576f, 0.232056f, 0.249756f, 0.267822f, 0.286621f, 0.306885f, 0.328125f,
- 0.349854f, 0.373291f, 0.701172f, 0.725586f, 0.729980f, 0.730957f, 0.731934f, 0.730957f,
- 0.000547f, 0.001666f, 0.002367f, 0.003559f, 0.004238f, 0.005028f, 0.005852f, 0.006859f,
- 0.007755f, 0.008530f, 0.009163f, 0.010056f, 0.010956f, 0.011978f, 0.013062f, 0.014076f,
- 0.015053f, 0.016251f, 0.017471f, 0.018921f, 0.020233f, 0.021774f, 0.023315f, 0.025162f,
- 0.026871f, 0.029007f, 0.031204f, 0.033661f, 0.036102f, 0.039062f, 0.042053f, 0.045380f,
- 0.048859f, 0.053040f, 0.057343f, 0.062225f, 0.067261f, 0.073120f, 0.079407f, 0.086243f,
- 0.093567f, 0.101868f, 0.110596f, 0.120239f, 0.130859f, 0.141968f, 0.154053f, 0.167358f,
- 0.181274f, 0.196045f, 0.212158f, 0.229248f, 0.247192f, 0.265381f, 0.285400f, 0.305664f,
- 0.327637f, 0.350586f, 0.689453f, 0.715820f, 0.720215f, 0.722168f, 0.722168f, 0.722168f,
- 0.000492f, 0.001634f, 0.002342f, 0.003111f, 0.003866f, 0.004574f, 0.005417f, 0.005928f,
- 0.006588f, 0.007393f, 0.008041f, 0.008873f, 0.009689f, 0.010391f, 0.011375f, 0.012146f,
- 0.013100f, 0.014183f, 0.015274f, 0.016479f, 0.017456f, 0.018768f, 0.020157f, 0.021606f,
- 0.023300f, 0.024933f, 0.026855f, 0.028885f, 0.031143f, 0.033417f, 0.036133f, 0.039032f,
- 0.042236f, 0.045776f, 0.049713f, 0.053680f, 0.058228f, 0.063232f, 0.069092f, 0.074829f,
- 0.081482f, 0.089050f, 0.096924f, 0.105591f, 0.115417f, 0.126221f, 0.137329f, 0.149658f,
- 0.162964f, 0.176880f, 0.192505f, 0.208740f, 0.226318f, 0.244873f, 0.263428f, 0.283936f,
- 0.306396f, 0.329346f, 0.676270f, 0.705078f, 0.709961f, 0.711914f, 0.712891f, 0.711914f,
- 0.000506f, 0.001342f, 0.002157f, 0.002813f, 0.003353f, 0.004105f, 0.004658f, 0.005344f,
- 0.005871f, 0.006538f, 0.007050f, 0.007751f, 0.008247f, 0.009109f, 0.009865f, 0.010559f,
- 0.011269f, 0.012169f, 0.013290f, 0.014191f, 0.015015f, 0.016312f, 0.017395f, 0.018570f,
- 0.019989f, 0.021439f, 0.023102f, 0.024536f, 0.026535f, 0.028702f, 0.030899f, 0.033356f,
- 0.035980f, 0.039093f, 0.042328f, 0.046051f, 0.049927f, 0.054199f, 0.059052f, 0.064575f,
- 0.070496f, 0.076782f, 0.084412f, 0.092285f, 0.100708f, 0.110779f, 0.121399f, 0.132690f,
- 0.145508f, 0.158813f, 0.173584f, 0.189453f, 0.205688f, 0.223755f, 0.242554f, 0.263184f,
- 0.284180f, 0.306641f, 0.664551f, 0.693848f, 0.699707f, 0.702148f, 0.702637f, 0.703125f,
- 0.000500f, 0.001122f, 0.001810f, 0.002363f, 0.002987f, 0.003576f, 0.004158f, 0.004620f,
- 0.005032f, 0.005627f, 0.006161f, 0.006721f, 0.007179f, 0.007790f, 0.008385f, 0.009163f,
- 0.009758f, 0.010536f, 0.011284f, 0.011986f, 0.012878f, 0.013710f, 0.014725f, 0.015823f,
- 0.016937f, 0.018326f, 0.019547f, 0.020874f, 0.022522f, 0.024399f, 0.026077f, 0.028427f,
- 0.030609f, 0.032990f, 0.035736f, 0.038788f, 0.042236f, 0.045990f, 0.050354f, 0.054901f,
- 0.059967f, 0.065918f, 0.072205f, 0.079468f, 0.087219f, 0.096252f, 0.105713f, 0.116272f,
- 0.128174f, 0.140747f, 0.154419f, 0.169556f, 0.186279f, 0.203125f, 0.221313f, 0.240601f,
- 0.261719f, 0.284424f, 0.652344f, 0.683105f, 0.688965f, 0.691406f, 0.692383f, 0.693359f,
- 0.000482f, 0.001184f, 0.001604f, 0.002171f, 0.002562f, 0.003029f, 0.003656f, 0.003941f,
- 0.004410f, 0.004948f, 0.005325f, 0.005577f, 0.006157f, 0.006702f, 0.007172f, 0.007751f,
- 0.008331f, 0.008904f, 0.009514f, 0.010063f, 0.010925f, 0.011719f, 0.012306f, 0.013321f,
- 0.014275f, 0.015465f, 0.016510f, 0.017593f, 0.018845f, 0.020401f, 0.022095f, 0.023682f,
- 0.025513f, 0.027679f, 0.029968f, 0.032593f, 0.035461f, 0.038757f, 0.042175f, 0.046326f,
- 0.050873f, 0.055939f, 0.061462f, 0.067444f, 0.074402f, 0.082520f, 0.091125f, 0.100830f,
- 0.111572f, 0.123413f, 0.136719f, 0.150513f, 0.165894f, 0.182251f, 0.200684f, 0.219727f,
- 0.240234f, 0.261963f, 0.640137f, 0.671387f, 0.679199f, 0.680664f, 0.682617f, 0.683105f,
- 0.000501f, 0.000919f, 0.001424f, 0.001853f, 0.002266f, 0.002789f, 0.002998f, 0.003397f,
- 0.003902f, 0.004192f, 0.004417f, 0.004974f, 0.005207f, 0.005676f, 0.006134f, 0.006527f,
- 0.007179f, 0.007465f, 0.008018f, 0.008537f, 0.009178f, 0.009888f, 0.010544f, 0.011093f,
- 0.011986f, 0.012794f, 0.013664f, 0.014717f, 0.015747f, 0.016983f, 0.018127f, 0.019470f,
- 0.021103f, 0.022919f, 0.024826f, 0.026962f, 0.029358f, 0.031769f, 0.035065f, 0.038239f,
- 0.042297f, 0.046570f, 0.051422f, 0.056671f, 0.062805f, 0.069763f, 0.077698f, 0.086182f,
- 0.095825f, 0.106812f, 0.119080f, 0.132568f, 0.147217f, 0.162598f, 0.180176f, 0.198730f,
- 0.218628f, 0.241211f, 0.627441f, 0.660156f, 0.668457f, 0.669922f, 0.672363f, 0.671875f,
- 0.000235f, 0.001120f, 0.001356f, 0.001651f, 0.002117f, 0.002441f, 0.002678f, 0.002993f,
- 0.003244f, 0.003519f, 0.003876f, 0.004086f, 0.004505f, 0.004787f, 0.005085f, 0.005604f,
- 0.005985f, 0.006271f, 0.006783f, 0.007145f, 0.007679f, 0.008217f, 0.008728f, 0.009277f,
- 0.009956f, 0.010605f, 0.011490f, 0.012062f, 0.013084f, 0.013962f, 0.014984f, 0.016113f,
- 0.017395f, 0.018829f, 0.020416f, 0.022125f, 0.023972f, 0.025955f, 0.028625f, 0.031616f,
- 0.034515f, 0.038147f, 0.042114f, 0.046783f, 0.052094f, 0.058075f, 0.065002f, 0.072510f,
- 0.081604f, 0.091125f, 0.102539f, 0.114807f, 0.128662f, 0.143921f, 0.160034f, 0.178467f,
- 0.198364f, 0.218750f, 0.613281f, 0.648926f, 0.657227f, 0.659668f, 0.661621f, 0.661621f,
- 0.000382f, 0.000704f, 0.001099f, 0.001557f, 0.001774f, 0.001976f, 0.002132f, 0.002575f,
- 0.002634f, 0.002916f, 0.003103f, 0.003494f, 0.003754f, 0.003956f, 0.004269f, 0.004684f,
- 0.004902f, 0.005234f, 0.005569f, 0.005890f, 0.006416f, 0.006786f, 0.007160f, 0.007645f,
- 0.008118f, 0.008781f, 0.009346f, 0.010025f, 0.010658f, 0.011475f, 0.012230f, 0.013016f,
- 0.014122f, 0.015251f, 0.016342f, 0.017807f, 0.019424f, 0.021103f, 0.023026f, 0.025436f,
- 0.027817f, 0.030914f, 0.034210f, 0.037750f, 0.042450f, 0.047455f, 0.053101f, 0.059998f,
- 0.067688f, 0.076660f, 0.086670f, 0.097961f, 0.110779f, 0.125366f, 0.140747f, 0.158081f,
- 0.176880f, 0.197632f, 0.600098f, 0.637207f, 0.644531f, 0.647949f, 0.649414f, 0.651855f,
- 0.000182f, 0.000738f, 0.000942f, 0.001220f, 0.001469f, 0.001634f, 0.001820f, 0.002005f,
- 0.002291f, 0.002441f, 0.002636f, 0.002832f, 0.003019f, 0.003242f, 0.003502f, 0.003824f,
- 0.004017f, 0.004333f, 0.004570f, 0.004883f, 0.005173f, 0.005615f, 0.005909f, 0.006317f,
- 0.006649f, 0.007160f, 0.007656f, 0.008156f, 0.008583f, 0.009209f, 0.009857f, 0.010696f,
- 0.011322f, 0.012367f, 0.013229f, 0.014259f, 0.015686f, 0.016815f, 0.018402f, 0.020126f,
- 0.022095f, 0.024414f, 0.027176f, 0.030273f, 0.033722f, 0.038086f, 0.042969f, 0.048645f,
- 0.055237f, 0.063171f, 0.071960f, 0.082031f, 0.093994f, 0.107300f, 0.122131f, 0.138550f,
- 0.156494f, 0.177002f, 0.586426f, 0.625488f, 0.633789f, 0.637207f, 0.638672f, 0.639648f,
- 0.000199f, 0.000534f, 0.000745f, 0.000995f, 0.001190f, 0.001387f, 0.001516f, 0.001691f,
- 0.001790f, 0.001941f, 0.002214f, 0.002346f, 0.002449f, 0.002686f, 0.002832f, 0.003042f,
- 0.003304f, 0.003531f, 0.003662f, 0.003952f, 0.004181f, 0.004517f, 0.004704f, 0.005074f,
- 0.005352f, 0.005718f, 0.006096f, 0.006481f, 0.006947f, 0.007454f, 0.007988f, 0.008484f,
- 0.009140f, 0.009804f, 0.010475f, 0.011307f, 0.012299f, 0.013268f, 0.014511f, 0.015823f,
- 0.017410f, 0.018936f, 0.021225f, 0.023621f, 0.026367f, 0.029770f, 0.033661f, 0.038452f,
- 0.044067f, 0.050812f, 0.058411f, 0.067444f, 0.077942f, 0.090149f, 0.104187f, 0.119812f,
- 0.137085f, 0.156372f, 0.572754f, 0.613770f, 0.621582f, 0.625977f, 0.627441f, 0.628906f,
- 0.000165f, 0.000486f, 0.000618f, 0.000880f, 0.001063f, 0.001140f, 0.001258f, 0.001464f,
- 0.001498f, 0.001561f, 0.001707f, 0.001899f, 0.001976f, 0.002171f, 0.002285f, 0.002474f,
- 0.002571f, 0.002764f, 0.002968f, 0.003170f, 0.003389f, 0.003580f, 0.003822f, 0.004036f,
- 0.004269f, 0.004505f, 0.004738f, 0.005157f, 0.005474f, 0.005821f, 0.006279f, 0.006649f,
- 0.007107f, 0.007610f, 0.008240f, 0.008835f, 0.009598f, 0.010361f, 0.011276f, 0.012299f,
- 0.013466f, 0.014740f, 0.016251f, 0.018021f, 0.020294f, 0.022797f, 0.025833f, 0.029739f,
- 0.034058f, 0.039612f, 0.046021f, 0.053833f, 0.063110f, 0.074158f, 0.086914f, 0.101562f,
- 0.118164f, 0.136841f, 0.558594f, 0.601074f, 0.608887f, 0.613281f, 0.615234f, 0.617188f,
- 0.000096f, 0.000348f, 0.000585f, 0.000707f, 0.000837f, 0.000866f, 0.000972f, 0.001095f,
- 0.001198f, 0.001309f, 0.001355f, 0.001417f, 0.001615f, 0.001740f, 0.001863f, 0.001880f,
- 0.002048f, 0.002159f, 0.002380f, 0.002487f, 0.002613f, 0.002777f, 0.003000f, 0.003143f,
- 0.003353f, 0.003521f, 0.003748f, 0.003963f, 0.004265f, 0.004490f, 0.004776f, 0.005093f,
- 0.005577f, 0.005966f, 0.006321f, 0.006828f, 0.007320f, 0.007904f, 0.008575f, 0.009392f,
- 0.010231f, 0.011276f, 0.012321f, 0.013832f, 0.015343f, 0.017242f, 0.019501f, 0.022247f,
- 0.025696f, 0.029922f, 0.035187f, 0.041779f, 0.049683f, 0.059387f, 0.070801f, 0.084106f,
- 0.100037f, 0.117798f, 0.544434f, 0.588867f, 0.597656f, 0.602539f, 0.604492f, 0.605469f,
- 0.000123f, 0.000248f, 0.000443f, 0.000625f, 0.000663f, 0.000733f, 0.000843f, 0.000780f,
- 0.000921f, 0.000986f, 0.001081f, 0.001178f, 0.001254f, 0.001348f, 0.001364f, 0.001515f,
- 0.001565f, 0.001705f, 0.001824f, 0.001870f, 0.002066f, 0.002155f, 0.002274f, 0.002422f,
- 0.002525f, 0.002695f, 0.002863f, 0.003038f, 0.003271f, 0.003441f, 0.003736f, 0.003901f,
- 0.004112f, 0.004478f, 0.004719f, 0.005093f, 0.005482f, 0.005913f, 0.006413f, 0.007019f,
- 0.007626f, 0.008408f, 0.009201f, 0.010201f, 0.011436f, 0.012749f, 0.014389f, 0.016373f,
- 0.018906f, 0.022034f, 0.025909f, 0.031082f, 0.037628f, 0.045715f, 0.055939f, 0.068176f,
- 0.082764f, 0.099365f, 0.529785f, 0.574707f, 0.584961f, 0.589844f, 0.591797f, 0.593750f,
- 0.000210f, 0.000212f, 0.000365f, 0.000494f, 0.000438f, 0.000597f, 0.000538f, 0.000623f,
- 0.000638f, 0.000736f, 0.000866f, 0.000882f, 0.000954f, 0.001040f, 0.001070f, 0.001086f,
- 0.001220f, 0.001274f, 0.001341f, 0.001457f, 0.001513f, 0.001598f, 0.001697f, 0.001781f,
- 0.001898f, 0.001970f, 0.002131f, 0.002241f, 0.002401f, 0.002645f, 0.002783f, 0.002892f,
- 0.003120f, 0.003347f, 0.003508f, 0.003757f, 0.004032f, 0.004314f, 0.004688f, 0.005066f,
- 0.005520f, 0.006012f, 0.006702f, 0.007332f, 0.008171f, 0.009140f, 0.010399f, 0.011787f,
- 0.013496f, 0.015732f, 0.018509f, 0.022278f, 0.027267f, 0.033813f, 0.042328f, 0.053070f,
- 0.066406f, 0.082825f, 0.516602f, 0.562500f, 0.573242f, 0.577637f, 0.580078f, 0.581543f,
- 0.000000f, 0.000216f, 0.000281f, 0.000346f, 0.000374f, 0.000388f, 0.000491f, 0.000416f,
- 0.000516f, 0.000535f, 0.000635f, 0.000625f, 0.000681f, 0.000719f, 0.000790f, 0.000813f,
- 0.000879f, 0.000926f, 0.000968f, 0.001004f, 0.001097f, 0.001135f, 0.001229f, 0.001300f,
- 0.001361f, 0.001431f, 0.001541f, 0.001610f, 0.001711f, 0.001802f, 0.001922f, 0.002094f,
- 0.002169f, 0.002346f, 0.002468f, 0.002644f, 0.002844f, 0.003094f, 0.003368f, 0.003586f,
- 0.003883f, 0.004223f, 0.004662f, 0.005093f, 0.005680f, 0.006348f, 0.007206f, 0.008202f,
- 0.009392f, 0.010895f, 0.012939f, 0.015465f, 0.018906f, 0.023682f, 0.030502f, 0.039825f,
- 0.051331f, 0.066528f, 0.500977f, 0.548828f, 0.560059f, 0.564453f, 0.567871f, 0.569336f,
- 0.000000f, 0.000106f, 0.000201f, 0.000252f, 0.000251f, 0.000322f, 0.000281f, 0.000340f,
- 0.000359f, 0.000428f, 0.000443f, 0.000419f, 0.000444f, 0.000500f, 0.000524f, 0.000590f,
- 0.000574f, 0.000650f, 0.000693f, 0.000732f, 0.000778f, 0.000821f, 0.000848f, 0.000900f,
- 0.000965f, 0.000982f, 0.001072f, 0.001109f, 0.001169f, 0.001307f, 0.001301f, 0.001409f,
- 0.001483f, 0.001610f, 0.001734f, 0.001835f, 0.001940f, 0.002098f, 0.002241f, 0.002426f,
- 0.002634f, 0.002865f, 0.003136f, 0.003431f, 0.003763f, 0.004211f, 0.004742f, 0.005417f,
- 0.006229f, 0.007298f, 0.008621f, 0.010330f, 0.012650f, 0.015808f, 0.020569f, 0.027908f,
- 0.037994f, 0.051514f, 0.485840f, 0.536133f, 0.547363f, 0.551758f, 0.554688f, 0.557617f,
- 0.000026f, 0.000156f, 0.000201f, 0.000136f, 0.000188f, 0.000187f, 0.000192f, 0.000240f,
- 0.000245f, 0.000254f, 0.000262f, 0.000311f, 0.000309f, 0.000331f, 0.000374f, 0.000385f,
- 0.000411f, 0.000431f, 0.000443f, 0.000461f, 0.000507f, 0.000522f, 0.000562f, 0.000596f,
- 0.000634f, 0.000684f, 0.000718f, 0.000735f, 0.000776f, 0.000815f, 0.000875f, 0.000927f,
- 0.000982f, 0.001053f, 0.001123f, 0.001162f, 0.001271f, 0.001346f, 0.001473f, 0.001577f,
- 0.001670f, 0.001838f, 0.002005f, 0.002161f, 0.002405f, 0.002670f, 0.002993f, 0.003399f,
- 0.003860f, 0.004528f, 0.005386f, 0.006523f, 0.008003f, 0.010063f, 0.013206f, 0.017990f,
- 0.026031f, 0.038086f, 0.471191f, 0.522949f, 0.534668f, 0.540039f, 0.543457f, 0.544922f,
- 0.000000f, 0.000093f, 0.000084f, 0.000085f, 0.000124f, 0.000145f, 0.000122f, 0.000149f,
- 0.000152f, 0.000152f, 0.000158f, 0.000167f, 0.000186f, 0.000209f, 0.000217f, 0.000225f,
- 0.000231f, 0.000272f, 0.000273f, 0.000301f, 0.000303f, 0.000310f, 0.000338f, 0.000361f,
- 0.000387f, 0.000423f, 0.000413f, 0.000436f, 0.000478f, 0.000503f, 0.000525f, 0.000570f,
- 0.000608f, 0.000626f, 0.000677f, 0.000706f, 0.000753f, 0.000813f, 0.000884f, 0.000929f,
- 0.001000f, 0.001094f, 0.001183f, 0.001302f, 0.001412f, 0.001563f, 0.001769f, 0.001974f,
- 0.002277f, 0.002626f, 0.003124f, 0.003761f, 0.004665f, 0.005993f, 0.007935f, 0.010818f,
- 0.016205f, 0.026138f, 0.456299f, 0.509277f, 0.520996f, 0.527344f, 0.530762f, 0.532715f,
- 0.000105f, 0.000083f, 0.000072f, 0.000065f, 0.000071f, 0.000072f, 0.000077f, 0.000084f,
- 0.000088f, 0.000093f, 0.000095f, 0.000120f, 0.000100f, 0.000108f, 0.000126f, 0.000118f,
- 0.000139f, 0.000149f, 0.000153f, 0.000165f, 0.000169f, 0.000172f, 0.000194f, 0.000203f,
- 0.000233f, 0.000225f, 0.000233f, 0.000253f, 0.000266f, 0.000275f, 0.000299f, 0.000319f,
- 0.000338f, 0.000345f, 0.000374f, 0.000384f, 0.000415f, 0.000448f, 0.000483f, 0.000511f,
- 0.000543f, 0.000585f, 0.000647f, 0.000692f, 0.000755f, 0.000827f, 0.000924f, 0.001041f,
- 0.001186f, 0.001372f, 0.001608f, 0.001953f, 0.002411f, 0.003098f, 0.004238f, 0.005989f,
- 0.009003f, 0.016006f, 0.441406f, 0.495361f, 0.508301f, 0.514160f, 0.518066f, 0.520508f,
- 0.000090f, 0.000067f, 0.000058f, 0.000052f, 0.000047f, 0.000044f, 0.000044f, 0.000040f,
- 0.000042f, 0.000049f, 0.000042f, 0.000045f, 0.000059f, 0.000047f, 0.000050f, 0.000054f,
- 0.000071f, 0.000073f, 0.000075f, 0.000078f, 0.000079f, 0.000084f, 0.000087f, 0.000090f,
- 0.000097f, 0.000109f, 0.000108f, 0.000124f, 0.000124f, 0.000131f, 0.000138f, 0.000143f,
- 0.000155f, 0.000164f, 0.000178f, 0.000182f, 0.000192f, 0.000209f, 0.000225f, 0.000244f,
- 0.000259f, 0.000274f, 0.000303f, 0.000321f, 0.000357f, 0.000385f, 0.000429f, 0.000470f,
- 0.000537f, 0.000608f, 0.000710f, 0.000852f, 0.001052f, 0.001371f, 0.001877f, 0.002762f,
- 0.004406f, 0.008202f, 0.426270f, 0.483154f, 0.495605f, 0.500977f, 0.505371f, 0.507324f,
- 0.000067f, 0.000047f, 0.000039f, 0.000035f, 0.000032f, 0.000030f, 0.000029f, 0.000027f,
- 0.000026f, 0.000025f, 0.000024f, 0.000023f, 0.000021f, 0.000020f, 0.000019f, 0.000021f,
- 0.000020f, 0.000024f, 0.000028f, 0.000030f, 0.000029f, 0.000032f, 0.000035f, 0.000034f,
- 0.000036f, 0.000044f, 0.000046f, 0.000040f, 0.000048f, 0.000047f, 0.000051f, 0.000053f,
- 0.000059f, 0.000059f, 0.000064f, 0.000066f, 0.000077f, 0.000079f, 0.000081f, 0.000091f,
- 0.000094f, 0.000100f, 0.000108f, 0.000119f, 0.000129f, 0.000137f, 0.000148f, 0.000173f,
- 0.000191f, 0.000210f, 0.000249f, 0.000292f, 0.000357f, 0.000448f, 0.000629f, 0.000943f,
- 0.001630f, 0.003332f, 0.411377f, 0.468506f, 0.482910f, 0.488770f, 0.492188f, 0.495117f,
- 0.000025f, 0.000018f, 0.000015f, 0.000013f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
- 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f,
- 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f,
- 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000010f, 0.000010f, 0.000010f,
- 0.000012f, 0.000014f, 0.000014f, 0.000014f, 0.000016f, 0.000018f, 0.000019f, 0.000021f,
- 0.000020f, 0.000023f, 0.000025f, 0.000027f, 0.000027f, 0.000029f, 0.000035f, 0.000033f,
- 0.000040f, 0.000044f, 0.000052f, 0.000061f, 0.000069f, 0.000087f, 0.000117f, 0.000174f,
- 0.000319f, 0.000847f, 0.395996f, 0.454834f, 0.468750f, 0.475586f, 0.479004f, 0.481689f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000005f,
- 0.000009f, 0.000027f, 0.381348f, 0.441406f, 0.455566f, 0.462891f, 0.466309f, 0.468994f,
- },
- {
- 0.016769f, 0.050629f, 0.083740f, 0.116638f, 0.148071f, 0.178955f, 0.208374f, 0.236938f,
- 0.265137f, 0.291992f, 0.317871f, 0.343994f, 0.368164f, 0.391846f, 0.415527f, 0.437988f,
- 0.459717f, 0.480469f, 0.501465f, 0.520996f, 0.540527f, 0.559082f, 0.577637f, 0.594727f,
- 0.612305f, 0.628418f, 0.644531f, 0.661133f, 0.676270f, 0.691406f, 0.705566f, 0.719727f,
- 0.734375f, 0.747070f, 0.760254f, 0.773438f, 0.786133f, 0.798828f, 0.810059f, 0.821777f,
- 0.833008f, 0.843262f, 0.854492f, 0.865234f, 0.875488f, 0.885254f, 0.895508f, 0.904297f,
- 0.913574f, 0.923340f, 0.932617f, 0.940918f, 0.949707f, 0.958008f, 0.966309f, 0.974609f,
- 0.981934f, 0.990234f, 0.985352f, 0.965332f, 0.950195f, 0.937500f, 0.926270f, 0.915527f,
- 0.015083f, 0.045929f, 0.075806f, 0.105408f, 0.135254f, 0.163208f, 0.191772f, 0.219238f,
- 0.245239f, 0.271973f, 0.297363f, 0.321045f, 0.345947f, 0.369141f, 0.391846f, 0.414062f,
- 0.435791f, 0.456787f, 0.477295f, 0.497314f, 0.516113f, 0.535645f, 0.554199f, 0.571777f,
- 0.588867f, 0.606445f, 0.623047f, 0.639160f, 0.654785f, 0.669434f, 0.685059f, 0.699219f,
- 0.713379f, 0.728027f, 0.741211f, 0.754883f, 0.767578f, 0.780273f, 0.792480f, 0.804688f,
- 0.815918f, 0.826660f, 0.838867f, 0.850098f, 0.859863f, 0.871094f, 0.880859f, 0.891113f,
- 0.900879f, 0.909180f, 0.919434f, 0.929688f, 0.937500f, 0.946289f, 0.954590f, 0.963379f,
- 0.971191f, 0.979004f, 0.980469f, 0.961426f, 0.947266f, 0.935059f, 0.924316f, 0.914062f,
- 0.013573f, 0.040955f, 0.068848f, 0.096313f, 0.123169f, 0.150635f, 0.175537f, 0.202026f,
- 0.228271f, 0.251709f, 0.276367f, 0.300781f, 0.323730f, 0.347168f, 0.369385f, 0.390625f,
- 0.412354f, 0.433594f, 0.454346f, 0.473145f, 0.491943f, 0.512207f, 0.529785f, 0.549316f,
- 0.566406f, 0.583008f, 0.600586f, 0.616211f, 0.633301f, 0.648438f, 0.663574f, 0.679199f,
- 0.693359f, 0.708008f, 0.721680f, 0.735840f, 0.748535f, 0.762207f, 0.773926f, 0.786621f,
- 0.798340f, 0.811035f, 0.822754f, 0.833984f, 0.845215f, 0.855957f, 0.865723f, 0.876465f,
- 0.886719f, 0.895508f, 0.906738f, 0.916016f, 0.925293f, 0.934570f, 0.943848f, 0.952148f,
- 0.960449f, 0.969238f, 0.976074f, 0.958008f, 0.944336f, 0.932617f, 0.921875f, 0.912109f,
- 0.012329f, 0.037201f, 0.062164f, 0.087646f, 0.112488f, 0.137451f, 0.161865f, 0.187134f,
- 0.210938f, 0.234253f, 0.258301f, 0.281006f, 0.303467f, 0.325195f, 0.347656f, 0.368652f,
- 0.389648f, 0.410400f, 0.430664f, 0.450928f, 0.470215f, 0.488770f, 0.507812f, 0.525391f,
- 0.543457f, 0.560059f, 0.579102f, 0.593750f, 0.611816f, 0.627441f, 0.643066f, 0.658203f,
- 0.672363f, 0.687500f, 0.702148f, 0.715820f, 0.729004f, 0.742676f, 0.755371f, 0.768066f,
- 0.781738f, 0.792969f, 0.805176f, 0.816895f, 0.829102f, 0.839844f, 0.850586f, 0.861816f,
- 0.872559f, 0.882812f, 0.893066f, 0.902832f, 0.912109f, 0.921875f, 0.930664f, 0.940430f,
- 0.948242f, 0.958008f, 0.970703f, 0.953613f, 0.940430f, 0.929199f, 0.919434f, 0.910156f,
- 0.010979f, 0.033752f, 0.056763f, 0.080139f, 0.103516f, 0.126221f, 0.149414f, 0.172485f,
- 0.195435f, 0.218262f, 0.240356f, 0.261719f, 0.284180f, 0.306396f, 0.326416f, 0.347900f,
- 0.368408f, 0.389160f, 0.408691f, 0.427979f, 0.447754f, 0.467041f, 0.484863f, 0.502441f,
- 0.520996f, 0.538086f, 0.555664f, 0.573242f, 0.589355f, 0.604980f, 0.622559f, 0.637207f,
- 0.652832f, 0.666992f, 0.680664f, 0.695801f, 0.710938f, 0.724121f, 0.737305f, 0.750977f,
- 0.763672f, 0.776855f, 0.789062f, 0.799805f, 0.812012f, 0.824219f, 0.835449f, 0.846680f,
- 0.857910f, 0.868164f, 0.878418f, 0.889160f, 0.898926f, 0.909180f, 0.917969f, 0.928223f,
- 0.937012f, 0.946777f, 0.965820f, 0.949707f, 0.937012f, 0.926270f, 0.916504f, 0.907715f,
- 0.009941f, 0.030746f, 0.051514f, 0.073181f, 0.094116f, 0.116028f, 0.137817f, 0.158691f,
- 0.180664f, 0.202637f, 0.223511f, 0.244873f, 0.265869f, 0.285889f, 0.307129f, 0.327881f,
- 0.347412f, 0.367188f, 0.387207f, 0.405762f, 0.425537f, 0.444092f, 0.462646f, 0.481201f,
- 0.499756f, 0.516602f, 0.533691f, 0.550781f, 0.567383f, 0.583984f, 0.599609f, 0.616211f,
- 0.630859f, 0.647461f, 0.661621f, 0.676758f, 0.689453f, 0.704590f, 0.718750f, 0.731934f,
- 0.745117f, 0.757812f, 0.770996f, 0.783691f, 0.796387f, 0.807617f, 0.819824f, 0.831543f,
- 0.842773f, 0.854004f, 0.864258f, 0.875488f, 0.885742f, 0.895508f, 0.905762f, 0.915527f,
- 0.925781f, 0.934570f, 0.960449f, 0.945312f, 0.933594f, 0.922852f, 0.913574f, 0.905273f,
- 0.009003f, 0.027756f, 0.046997f, 0.066711f, 0.085999f, 0.106506f, 0.127075f, 0.146973f,
- 0.166992f, 0.187500f, 0.207886f, 0.228149f, 0.248169f, 0.268311f, 0.287842f, 0.307861f,
- 0.327393f, 0.347656f, 0.365967f, 0.385010f, 0.404541f, 0.422363f, 0.441162f, 0.458740f,
- 0.477783f, 0.495117f, 0.512207f, 0.529297f, 0.546387f, 0.562012f, 0.578613f, 0.595215f,
- 0.610840f, 0.625977f, 0.641113f, 0.656738f, 0.670410f, 0.685059f, 0.699707f, 0.714355f,
- 0.727051f, 0.741699f, 0.752441f, 0.767090f, 0.778809f, 0.791504f, 0.803711f, 0.815430f,
- 0.827148f, 0.838867f, 0.850098f, 0.860840f, 0.872070f, 0.881836f, 0.893066f, 0.903809f,
- 0.913574f, 0.923828f, 0.955078f, 0.940918f, 0.929199f, 0.919922f, 0.911133f, 0.902344f,
- 0.008469f, 0.025375f, 0.043121f, 0.060944f, 0.079468f, 0.097961f, 0.116394f, 0.135620f,
- 0.154541f, 0.174072f, 0.193115f, 0.212280f, 0.231689f, 0.250732f, 0.270264f, 0.289307f,
- 0.307861f, 0.327148f, 0.345215f, 0.364990f, 0.382812f, 0.401123f, 0.418945f, 0.437012f,
- 0.455811f, 0.472900f, 0.490234f, 0.507812f, 0.524414f, 0.541016f, 0.558105f, 0.573242f,
- 0.590332f, 0.605469f, 0.620117f, 0.636230f, 0.651367f, 0.665039f, 0.679688f, 0.694336f,
- 0.708496f, 0.722168f, 0.735840f, 0.750000f, 0.762695f, 0.774902f, 0.787598f, 0.798828f,
- 0.811523f, 0.823730f, 0.834473f, 0.846191f, 0.857910f, 0.868652f, 0.879883f, 0.891113f,
- 0.900391f, 0.911133f, 0.949219f, 0.937012f, 0.925293f, 0.916016f, 0.907227f, 0.899414f,
- 0.007618f, 0.023178f, 0.039490f, 0.055542f, 0.072937f, 0.090271f, 0.107605f, 0.125122f,
- 0.142944f, 0.160889f, 0.178955f, 0.197510f, 0.216553f, 0.234497f, 0.252686f, 0.271240f,
- 0.289795f, 0.307861f, 0.326172f, 0.344238f, 0.362549f, 0.380859f, 0.398438f, 0.416504f,
- 0.433838f, 0.452393f, 0.468994f, 0.485840f, 0.502930f, 0.519531f, 0.536133f, 0.553223f,
- 0.569336f, 0.584473f, 0.599609f, 0.615234f, 0.631348f, 0.646484f, 0.659668f, 0.675293f,
- 0.689941f, 0.703125f, 0.716797f, 0.730957f, 0.744141f, 0.756836f, 0.771484f, 0.782227f,
- 0.795898f, 0.807617f, 0.819824f, 0.831543f, 0.843750f, 0.854980f, 0.866211f, 0.877441f,
- 0.888672f, 0.898438f, 0.943359f, 0.931641f, 0.921387f, 0.912109f, 0.903809f, 0.896484f,
- 0.007118f, 0.021255f, 0.035889f, 0.051514f, 0.066895f, 0.083191f, 0.098999f, 0.115540f,
- 0.132324f, 0.149292f, 0.166260f, 0.183716f, 0.200928f, 0.218628f, 0.236084f, 0.253906f,
- 0.272217f, 0.289795f, 0.307617f, 0.325439f, 0.342529f, 0.360596f, 0.378906f, 0.395996f,
- 0.413330f, 0.430908f, 0.447510f, 0.465332f, 0.481934f, 0.497803f, 0.514648f, 0.531738f,
- 0.547852f, 0.562988f, 0.579102f, 0.595215f, 0.610840f, 0.625977f, 0.641113f, 0.655273f,
- 0.670410f, 0.685059f, 0.698730f, 0.712891f, 0.726074f, 0.739258f, 0.753418f, 0.766113f,
- 0.779785f, 0.791992f, 0.803711f, 0.816406f, 0.829102f, 0.839844f, 0.852539f, 0.863770f,
- 0.874512f, 0.886719f, 0.937988f, 0.926758f, 0.917480f, 0.908203f, 0.900391f, 0.893066f,
- 0.006481f, 0.019775f, 0.032928f, 0.047272f, 0.061371f, 0.076233f, 0.091064f, 0.107117f,
- 0.122559f, 0.138062f, 0.154663f, 0.170532f, 0.187256f, 0.204346f, 0.220947f, 0.237915f,
- 0.254883f, 0.272217f, 0.289062f, 0.306641f, 0.323730f, 0.341064f, 0.358643f, 0.375732f,
- 0.393555f, 0.410645f, 0.426758f, 0.444580f, 0.461182f, 0.477783f, 0.494141f, 0.510254f,
- 0.526855f, 0.543457f, 0.559082f, 0.574219f, 0.590332f, 0.605957f, 0.621094f, 0.634766f,
- 0.650879f, 0.665039f, 0.679688f, 0.694824f, 0.708008f, 0.722656f, 0.736816f, 0.749023f,
- 0.762695f, 0.775391f, 0.788086f, 0.801270f, 0.813965f, 0.826172f, 0.838379f, 0.849121f,
- 0.861328f, 0.873535f, 0.932129f, 0.921875f, 0.912598f, 0.904297f, 0.896484f, 0.889160f,
- 0.005924f, 0.017899f, 0.030426f, 0.043427f, 0.056824f, 0.070435f, 0.084106f, 0.098755f,
- 0.112976f, 0.128052f, 0.143311f, 0.158936f, 0.174072f, 0.189575f, 0.206421f, 0.222534f,
- 0.238403f, 0.255615f, 0.271729f, 0.288818f, 0.305908f, 0.322021f, 0.339355f, 0.356445f,
- 0.373291f, 0.390137f, 0.407227f, 0.423584f, 0.440430f, 0.457031f, 0.472900f, 0.489502f,
- 0.506836f, 0.521973f, 0.538574f, 0.554688f, 0.570312f, 0.585449f, 0.601074f, 0.616211f,
- 0.631348f, 0.646484f, 0.661621f, 0.675781f, 0.690430f, 0.704590f, 0.717285f, 0.731934f,
- 0.746094f, 0.759277f, 0.771973f, 0.785156f, 0.798340f, 0.810547f, 0.823242f, 0.835938f,
- 0.848145f, 0.860352f, 0.925781f, 0.916504f, 0.908203f, 0.900391f, 0.893066f, 0.886719f,
- 0.005573f, 0.016693f, 0.028366f, 0.040192f, 0.052277f, 0.064880f, 0.078064f, 0.090698f,
- 0.105042f, 0.118591f, 0.133057f, 0.147461f, 0.162231f, 0.177612f, 0.192383f, 0.207886f,
- 0.223633f, 0.239502f, 0.255615f, 0.272217f, 0.288330f, 0.304932f, 0.320312f, 0.337646f,
- 0.354004f, 0.369873f, 0.386719f, 0.403320f, 0.419922f, 0.437012f, 0.453369f, 0.469482f,
- 0.485596f, 0.501465f, 0.517578f, 0.534180f, 0.549316f, 0.565918f, 0.581055f, 0.595703f,
- 0.611328f, 0.626953f, 0.641602f, 0.657227f, 0.671387f, 0.686523f, 0.699707f, 0.714355f,
- 0.729004f, 0.742676f, 0.756348f, 0.769043f, 0.782715f, 0.795410f, 0.809082f, 0.821289f,
- 0.833984f, 0.846680f, 0.919434f, 0.911133f, 0.903320f, 0.895508f, 0.888672f, 0.882324f,
- 0.005016f, 0.015396f, 0.026169f, 0.037231f, 0.048126f, 0.059937f, 0.071716f, 0.084167f,
- 0.096680f, 0.109558f, 0.123169f, 0.136719f, 0.150269f, 0.164917f, 0.179077f, 0.194580f,
- 0.208984f, 0.223877f, 0.239746f, 0.255127f, 0.270996f, 0.286377f, 0.302490f, 0.319336f,
- 0.335205f, 0.351318f, 0.367432f, 0.383545f, 0.399902f, 0.415771f, 0.432373f, 0.448975f,
- 0.465088f, 0.481934f, 0.497314f, 0.513672f, 0.529785f, 0.544434f, 0.561035f, 0.576660f,
- 0.592285f, 0.607422f, 0.622559f, 0.638184f, 0.652344f, 0.667480f, 0.681641f, 0.696777f,
- 0.711426f, 0.725586f, 0.738770f, 0.753418f, 0.766602f, 0.779297f, 0.793945f, 0.807129f,
- 0.819824f, 0.833008f, 0.913086f, 0.906738f, 0.898438f, 0.890625f, 0.884277f, 0.878418f,
- 0.004738f, 0.014053f, 0.024017f, 0.033752f, 0.044495f, 0.055328f, 0.066467f, 0.078064f,
- 0.089661f, 0.102051f, 0.114258f, 0.126831f, 0.139771f, 0.153564f, 0.167114f, 0.181030f,
- 0.195190f, 0.209839f, 0.224731f, 0.239136f, 0.253906f, 0.269531f, 0.285156f, 0.300293f,
- 0.317139f, 0.332520f, 0.348145f, 0.364990f, 0.380859f, 0.396240f, 0.412109f, 0.428711f,
- 0.444336f, 0.460938f, 0.477295f, 0.492676f, 0.509277f, 0.524902f, 0.540527f, 0.556641f,
- 0.572266f, 0.587402f, 0.604004f, 0.618164f, 0.633301f, 0.648438f, 0.664062f, 0.678223f,
- 0.693359f, 0.708008f, 0.722656f, 0.736328f, 0.750000f, 0.764160f, 0.777832f, 0.791016f,
- 0.805176f, 0.817871f, 0.907227f, 0.900879f, 0.894043f, 0.886719f, 0.880371f, 0.874512f,
- 0.004105f, 0.012741f, 0.022491f, 0.031769f, 0.041107f, 0.051208f, 0.061249f, 0.071777f,
- 0.083069f, 0.093811f, 0.105896f, 0.117554f, 0.129761f, 0.142212f, 0.155273f, 0.168579f,
- 0.182251f, 0.196167f, 0.210449f, 0.223755f, 0.238525f, 0.253662f, 0.268799f, 0.283447f,
- 0.298828f, 0.313965f, 0.329834f, 0.344971f, 0.361328f, 0.376953f, 0.393066f, 0.408691f,
- 0.424561f, 0.441406f, 0.457031f, 0.472656f, 0.488770f, 0.504883f, 0.520996f, 0.536133f,
- 0.551758f, 0.567871f, 0.583496f, 0.599121f, 0.614258f, 0.629395f, 0.645996f, 0.660156f,
- 0.675781f, 0.689453f, 0.704102f, 0.719727f, 0.733398f, 0.747559f, 0.761719f, 0.776367f,
- 0.789062f, 0.803223f, 0.899902f, 0.895020f, 0.888184f, 0.881836f, 0.875488f, 0.870117f,
- 0.003925f, 0.011978f, 0.020538f, 0.028763f, 0.038269f, 0.047028f, 0.056732f, 0.066223f,
- 0.076904f, 0.086731f, 0.097900f, 0.109314f, 0.120483f, 0.132324f, 0.144653f, 0.156982f,
- 0.169678f, 0.183228f, 0.196289f, 0.209961f, 0.223633f, 0.237427f, 0.251953f, 0.266602f,
- 0.281982f, 0.296875f, 0.312012f, 0.326660f, 0.342041f, 0.357910f, 0.373779f, 0.389404f,
- 0.404785f, 0.420166f, 0.436768f, 0.452637f, 0.468506f, 0.484863f, 0.500977f, 0.516602f,
- 0.531738f, 0.546875f, 0.563965f, 0.579102f, 0.595215f, 0.610840f, 0.625977f, 0.641602f,
- 0.657227f, 0.671387f, 0.687500f, 0.702148f, 0.716309f, 0.731445f, 0.746094f, 0.760742f,
- 0.774414f, 0.788086f, 0.893066f, 0.889648f, 0.882812f, 0.876953f, 0.870605f, 0.865723f,
- 0.003704f, 0.011169f, 0.019165f, 0.026550f, 0.035339f, 0.043488f, 0.052277f, 0.061066f,
- 0.071045f, 0.080933f, 0.090576f, 0.101074f, 0.111877f, 0.122925f, 0.134277f, 0.146118f,
- 0.157837f, 0.170288f, 0.183105f, 0.195557f, 0.209351f, 0.222900f, 0.236328f, 0.250732f,
- 0.264893f, 0.279297f, 0.294189f, 0.308838f, 0.323975f, 0.339844f, 0.354736f, 0.370117f,
- 0.385986f, 0.401367f, 0.416504f, 0.432861f, 0.448486f, 0.463867f, 0.480469f, 0.497070f,
- 0.511719f, 0.527832f, 0.544434f, 0.559570f, 0.575684f, 0.591797f, 0.606934f, 0.623047f,
- 0.638184f, 0.654297f, 0.668945f, 0.684570f, 0.699219f, 0.714355f, 0.729492f, 0.744629f,
- 0.758789f, 0.773926f, 0.886230f, 0.883301f, 0.877441f, 0.871582f, 0.866211f, 0.860840f,
- 0.003500f, 0.010292f, 0.017395f, 0.024963f, 0.032440f, 0.040344f, 0.048462f, 0.057098f,
- 0.065063f, 0.074646f, 0.083679f, 0.093445f, 0.103882f, 0.114136f, 0.124451f, 0.135498f,
- 0.146606f, 0.158447f, 0.170410f, 0.182739f, 0.195435f, 0.208008f, 0.221558f, 0.234863f,
- 0.248657f, 0.262695f, 0.276855f, 0.291748f, 0.306152f, 0.320801f, 0.335693f, 0.350830f,
- 0.365967f, 0.382080f, 0.396973f, 0.413330f, 0.429199f, 0.444336f, 0.459473f, 0.476074f,
- 0.492188f, 0.507812f, 0.524414f, 0.540039f, 0.555664f, 0.571777f, 0.586914f, 0.604004f,
- 0.619629f, 0.635742f, 0.650391f, 0.666504f, 0.682129f, 0.697754f, 0.712891f, 0.728027f,
- 0.743164f, 0.758301f, 0.878906f, 0.877441f, 0.871582f, 0.866699f, 0.860840f, 0.856445f,
- 0.003084f, 0.009697f, 0.016403f, 0.022659f, 0.029892f, 0.037354f, 0.044281f, 0.052338f,
- 0.060516f, 0.068970f, 0.077515f, 0.086243f, 0.096069f, 0.105713f, 0.115356f, 0.125610f,
- 0.136353f, 0.147339f, 0.158081f, 0.170410f, 0.181396f, 0.194458f, 0.207275f, 0.219482f,
- 0.232910f, 0.246704f, 0.260010f, 0.274170f, 0.288330f, 0.302979f, 0.317383f, 0.332764f,
- 0.347656f, 0.363037f, 0.378174f, 0.392578f, 0.408936f, 0.424316f, 0.440430f, 0.456299f,
- 0.472656f, 0.488525f, 0.503906f, 0.519531f, 0.535645f, 0.552734f, 0.568359f, 0.584961f,
- 0.600586f, 0.616699f, 0.633301f, 0.648438f, 0.663574f, 0.679199f, 0.694824f, 0.710938f,
- 0.726074f, 0.742188f, 0.872559f, 0.870605f, 0.865723f, 0.860840f, 0.855957f, 0.851074f,
- 0.002913f, 0.008781f, 0.014938f, 0.021759f, 0.027878f, 0.034393f, 0.041412f, 0.048737f,
- 0.055969f, 0.063599f, 0.072021f, 0.080200f, 0.088928f, 0.097839f, 0.106934f, 0.116150f,
- 0.126587f, 0.136353f, 0.147095f, 0.157715f, 0.169189f, 0.181519f, 0.193481f, 0.205933f,
- 0.217773f, 0.231323f, 0.244629f, 0.257812f, 0.271240f, 0.285400f, 0.299561f, 0.314453f,
- 0.329590f, 0.343506f, 0.358887f, 0.373779f, 0.389648f, 0.405029f, 0.420410f, 0.437012f,
- 0.452393f, 0.468262f, 0.484375f, 0.500000f, 0.516113f, 0.532227f, 0.548828f, 0.564941f,
- 0.581055f, 0.597168f, 0.612793f, 0.629883f, 0.645508f, 0.662109f, 0.678223f, 0.694336f,
- 0.709473f, 0.726074f, 0.863770f, 0.864258f, 0.859863f, 0.854980f, 0.850586f, 0.846191f,
- 0.002815f, 0.008194f, 0.013954f, 0.019653f, 0.025696f, 0.031982f, 0.038177f, 0.044830f,
- 0.051819f, 0.058502f, 0.066162f, 0.073792f, 0.082031f, 0.090393f, 0.098999f, 0.107605f,
- 0.117493f, 0.126709f, 0.137207f, 0.146729f, 0.157593f, 0.168579f, 0.179810f, 0.191772f,
- 0.203369f, 0.215820f, 0.228882f, 0.241455f, 0.254395f, 0.268311f, 0.282227f, 0.296631f,
- 0.310303f, 0.325439f, 0.339844f, 0.354736f, 0.370361f, 0.385742f, 0.400879f, 0.416504f,
- 0.432617f, 0.448486f, 0.464355f, 0.479980f, 0.496094f, 0.513184f, 0.528809f, 0.545410f,
- 0.561035f, 0.578613f, 0.594727f, 0.611328f, 0.626953f, 0.643555f, 0.660156f, 0.676270f,
- 0.693359f, 0.709473f, 0.856445f, 0.858398f, 0.854492f, 0.849121f, 0.845215f, 0.841309f,
- 0.002583f, 0.007492f, 0.012878f, 0.018417f, 0.023941f, 0.029495f, 0.035339f, 0.041779f,
- 0.047577f, 0.054047f, 0.061523f, 0.068787f, 0.075562f, 0.083313f, 0.091858f, 0.099792f,
- 0.108521f, 0.117615f, 0.126709f, 0.136108f, 0.146851f, 0.156860f, 0.166992f, 0.178345f,
- 0.189819f, 0.202148f, 0.213623f, 0.225830f, 0.238892f, 0.252197f, 0.265137f, 0.278809f,
- 0.292480f, 0.306885f, 0.321045f, 0.336914f, 0.350830f, 0.366943f, 0.381348f, 0.396240f,
- 0.412354f, 0.428223f, 0.444336f, 0.460449f, 0.476318f, 0.493408f, 0.509277f, 0.525879f,
- 0.542480f, 0.559082f, 0.574707f, 0.591797f, 0.608398f, 0.625488f, 0.642090f, 0.659180f,
- 0.675781f, 0.691406f, 0.848145f, 0.851562f, 0.848145f, 0.843750f, 0.838867f, 0.835449f,
- 0.002512f, 0.007374f, 0.012115f, 0.016983f, 0.022064f, 0.027359f, 0.032715f, 0.038147f,
- 0.044373f, 0.050354f, 0.056641f, 0.063293f, 0.070190f, 0.077026f, 0.084717f, 0.092041f,
- 0.100342f, 0.108398f, 0.117554f, 0.126221f, 0.135742f, 0.145142f, 0.155151f, 0.165771f,
- 0.176758f, 0.187988f, 0.199341f, 0.210815f, 0.223389f, 0.236206f, 0.249023f, 0.261719f,
- 0.275879f, 0.289062f, 0.303467f, 0.317627f, 0.332520f, 0.347412f, 0.361816f, 0.377197f,
- 0.393066f, 0.407959f, 0.424072f, 0.440186f, 0.457031f, 0.473145f, 0.489502f, 0.505859f,
- 0.522461f, 0.540039f, 0.555664f, 0.572754f, 0.589844f, 0.606445f, 0.623535f, 0.640625f,
- 0.658203f, 0.675781f, 0.840820f, 0.843750f, 0.841309f, 0.836914f, 0.833984f, 0.830566f,
- 0.002369f, 0.006668f, 0.011093f, 0.015778f, 0.020523f, 0.025223f, 0.030701f, 0.035339f,
- 0.040710f, 0.046600f, 0.051971f, 0.058075f, 0.064819f, 0.071228f, 0.077942f, 0.085205f,
- 0.092224f, 0.100464f, 0.108398f, 0.116882f, 0.125610f, 0.134155f, 0.143555f, 0.153564f,
- 0.164062f, 0.174316f, 0.185303f, 0.196899f, 0.208496f, 0.220093f, 0.232666f, 0.245239f,
- 0.258057f, 0.271729f, 0.285645f, 0.299561f, 0.313721f, 0.328613f, 0.342773f, 0.358154f,
- 0.373535f, 0.388916f, 0.405518f, 0.419922f, 0.437012f, 0.453125f, 0.469238f, 0.486328f,
- 0.502930f, 0.519531f, 0.536133f, 0.553223f, 0.571289f, 0.588379f, 0.605469f, 0.623047f,
- 0.640137f, 0.656250f, 0.833008f, 0.837402f, 0.834473f, 0.831055f, 0.827637f, 0.824219f,
- 0.002188f, 0.006027f, 0.010582f, 0.014297f, 0.018921f, 0.023270f, 0.028183f, 0.032593f,
- 0.037781f, 0.042999f, 0.048584f, 0.053650f, 0.059601f, 0.065369f, 0.071899f, 0.078369f,
- 0.085449f, 0.092407f, 0.099609f, 0.107788f, 0.115601f, 0.124451f, 0.133301f, 0.142212f,
- 0.151978f, 0.161865f, 0.172363f, 0.182617f, 0.193970f, 0.205566f, 0.217407f, 0.229858f,
- 0.241943f, 0.254639f, 0.268311f, 0.281494f, 0.295654f, 0.310059f, 0.324219f, 0.339600f,
- 0.353760f, 0.369629f, 0.385010f, 0.400879f, 0.417725f, 0.433594f, 0.449219f, 0.465820f,
- 0.482910f, 0.499512f, 0.517090f, 0.534180f, 0.551270f, 0.568848f, 0.586426f, 0.604004f,
- 0.622559f, 0.639160f, 0.824219f, 0.830078f, 0.827637f, 0.824707f, 0.821777f, 0.818359f,
- 0.002098f, 0.005634f, 0.009354f, 0.013557f, 0.017685f, 0.021576f, 0.025604f, 0.030380f,
- 0.034943f, 0.039429f, 0.044281f, 0.049255f, 0.055023f, 0.060577f, 0.066101f, 0.072144f,
- 0.078491f, 0.085083f, 0.091858f, 0.098999f, 0.106873f, 0.114502f, 0.122498f, 0.131592f,
- 0.140137f, 0.149536f, 0.159424f, 0.169556f, 0.180054f, 0.191162f, 0.202026f, 0.213989f,
- 0.226318f, 0.239136f, 0.250977f, 0.264648f, 0.278320f, 0.291748f, 0.305908f, 0.320557f,
- 0.334961f, 0.350342f, 0.365479f, 0.381592f, 0.397461f, 0.413818f, 0.429199f, 0.446289f,
- 0.462891f, 0.479736f, 0.496338f, 0.514160f, 0.530762f, 0.548828f, 0.566406f, 0.584473f,
- 0.602539f, 0.621582f, 0.815918f, 0.823730f, 0.821289f, 0.817871f, 0.815430f, 0.812500f,
- 0.001772f, 0.005249f, 0.008995f, 0.012260f, 0.016251f, 0.020020f, 0.024216f, 0.027603f,
- 0.032196f, 0.036377f, 0.041199f, 0.045410f, 0.050110f, 0.055603f, 0.061005f, 0.066406f,
- 0.072327f, 0.077820f, 0.084290f, 0.090942f, 0.098083f, 0.105164f, 0.113037f, 0.120789f,
- 0.129272f, 0.138062f, 0.147339f, 0.156982f, 0.166626f, 0.176758f, 0.187866f, 0.199097f,
- 0.210449f, 0.222412f, 0.234985f, 0.247559f, 0.260742f, 0.273682f, 0.287598f, 0.302002f,
- 0.316650f, 0.331299f, 0.346191f, 0.362061f, 0.377686f, 0.393066f, 0.409668f, 0.426514f,
- 0.443115f, 0.459717f, 0.476807f, 0.494629f, 0.511230f, 0.529785f, 0.547852f, 0.565430f,
- 0.583984f, 0.602539f, 0.806152f, 0.814453f, 0.813965f, 0.811035f, 0.809082f, 0.806641f,
- 0.001631f, 0.005131f, 0.008186f, 0.011673f, 0.014938f, 0.018463f, 0.021957f, 0.025635f,
- 0.029083f, 0.033325f, 0.037445f, 0.041840f, 0.046478f, 0.050751f, 0.055634f, 0.060760f,
- 0.065979f, 0.071472f, 0.077515f, 0.083801f, 0.090027f, 0.096802f, 0.104065f, 0.110840f,
- 0.119080f, 0.127197f, 0.135498f, 0.144775f, 0.153931f, 0.163574f, 0.173462f, 0.184570f,
- 0.195312f, 0.207153f, 0.218506f, 0.230591f, 0.243652f, 0.256348f, 0.270020f, 0.283691f,
- 0.297852f, 0.312744f, 0.326904f, 0.342529f, 0.357910f, 0.373535f, 0.389404f, 0.406494f,
- 0.421875f, 0.439941f, 0.457275f, 0.474365f, 0.492432f, 0.509766f, 0.527832f, 0.546875f,
- 0.564941f, 0.584473f, 0.797852f, 0.807129f, 0.807129f, 0.804199f, 0.801758f, 0.799316f,
- 0.001632f, 0.004704f, 0.007912f, 0.010788f, 0.013870f, 0.017105f, 0.020187f, 0.023483f,
- 0.026932f, 0.030563f, 0.034332f, 0.038086f, 0.042694f, 0.046631f, 0.050995f, 0.055725f,
- 0.060486f, 0.065674f, 0.070862f, 0.076721f, 0.082825f, 0.088623f, 0.094910f, 0.102112f,
- 0.109070f, 0.116516f, 0.124695f, 0.133057f, 0.141968f, 0.151001f, 0.160522f, 0.170776f,
- 0.181030f, 0.191650f, 0.202881f, 0.214722f, 0.227417f, 0.239624f, 0.252686f, 0.265625f,
- 0.279785f, 0.293213f, 0.308350f, 0.323242f, 0.338867f, 0.354248f, 0.370117f, 0.386475f,
- 0.403076f, 0.420410f, 0.437012f, 0.454102f, 0.471924f, 0.490234f, 0.508789f, 0.526855f,
- 0.545410f, 0.564453f, 0.788086f, 0.799316f, 0.798828f, 0.797852f, 0.794434f, 0.791992f,
- 0.001594f, 0.004177f, 0.007122f, 0.010201f, 0.012344f, 0.015839f, 0.018372f, 0.021683f,
- 0.024857f, 0.028534f, 0.031464f, 0.035034f, 0.038879f, 0.042572f, 0.046295f, 0.051056f,
- 0.055389f, 0.059723f, 0.064697f, 0.069763f, 0.075073f, 0.080750f, 0.087219f, 0.093445f,
- 0.099548f, 0.107056f, 0.114136f, 0.121887f, 0.130249f, 0.138794f, 0.147217f, 0.157104f,
- 0.166748f, 0.177124f, 0.187988f, 0.199097f, 0.210693f, 0.222778f, 0.235352f, 0.248169f,
- 0.261719f, 0.275635f, 0.289062f, 0.303955f, 0.319336f, 0.334717f, 0.350098f, 0.365479f,
- 0.382324f, 0.398926f, 0.416016f, 0.433594f, 0.451904f, 0.469238f, 0.487549f, 0.506348f,
- 0.525391f, 0.544922f, 0.779297f, 0.791504f, 0.791504f, 0.789551f, 0.788086f, 0.786133f,
- 0.001365f, 0.004173f, 0.006222f, 0.008842f, 0.011703f, 0.014366f, 0.017242f, 0.020218f,
- 0.022903f, 0.025787f, 0.028824f, 0.032227f, 0.035522f, 0.038818f, 0.042511f, 0.046326f,
- 0.050507f, 0.054657f, 0.058594f, 0.063660f, 0.068359f, 0.073914f, 0.078918f, 0.085083f,
- 0.091125f, 0.097534f, 0.104126f, 0.111511f, 0.118896f, 0.126831f, 0.135742f, 0.144043f,
- 0.153564f, 0.163330f, 0.173462f, 0.184082f, 0.195068f, 0.206787f, 0.218628f, 0.231079f,
- 0.243896f, 0.257080f, 0.270996f, 0.285645f, 0.300049f, 0.314941f, 0.330322f, 0.346191f,
- 0.362305f, 0.379395f, 0.395508f, 0.412842f, 0.431641f, 0.448975f, 0.468262f, 0.487549f,
- 0.505371f, 0.525391f, 0.769531f, 0.783691f, 0.783691f, 0.782715f, 0.781250f, 0.778809f,
- 0.001230f, 0.003925f, 0.006268f, 0.008659f, 0.010796f, 0.013145f, 0.015617f, 0.018234f,
- 0.021133f, 0.023682f, 0.026215f, 0.029251f, 0.032349f, 0.035400f, 0.038696f, 0.042206f,
- 0.045807f, 0.049377f, 0.053925f, 0.057953f, 0.062500f, 0.067078f, 0.071777f, 0.077271f,
- 0.082703f, 0.088806f, 0.094910f, 0.101379f, 0.109192f, 0.115967f, 0.123779f, 0.131470f,
- 0.140259f, 0.149536f, 0.159302f, 0.169312f, 0.180054f, 0.190674f, 0.202515f, 0.214722f,
- 0.226562f, 0.239624f, 0.253174f, 0.266602f, 0.281738f, 0.295898f, 0.311035f, 0.326904f,
- 0.342529f, 0.359131f, 0.375732f, 0.393066f, 0.410400f, 0.428467f, 0.447510f, 0.466064f,
- 0.485596f, 0.504883f, 0.759277f, 0.774902f, 0.775879f, 0.774902f, 0.773438f, 0.771973f,
- 0.001031f, 0.003601f, 0.005604f, 0.007858f, 0.009880f, 0.012146f, 0.014549f, 0.016998f,
- 0.019043f, 0.021362f, 0.024475f, 0.026566f, 0.029358f, 0.032196f, 0.035248f, 0.038391f,
- 0.041656f, 0.045044f, 0.048553f, 0.052582f, 0.056213f, 0.060669f, 0.065186f, 0.070068f,
- 0.074768f, 0.080322f, 0.086060f, 0.092102f, 0.098877f, 0.105408f, 0.112366f, 0.120239f,
- 0.128540f, 0.136597f, 0.145874f, 0.155396f, 0.165283f, 0.175537f, 0.186401f, 0.198120f,
- 0.210083f, 0.222534f, 0.235229f, 0.248657f, 0.262451f, 0.277344f, 0.291504f, 0.307617f,
- 0.322998f, 0.339111f, 0.354980f, 0.372559f, 0.390625f, 0.408936f, 0.426758f, 0.445312f,
- 0.466064f, 0.485840f, 0.749512f, 0.765137f, 0.767578f, 0.767090f, 0.765137f, 0.764648f,
- 0.001161f, 0.003078f, 0.005310f, 0.007282f, 0.009201f, 0.011330f, 0.013214f, 0.015404f,
- 0.017273f, 0.019409f, 0.021988f, 0.024078f, 0.026550f, 0.029358f, 0.032043f, 0.034454f,
- 0.037415f, 0.040710f, 0.043854f, 0.047272f, 0.050659f, 0.054840f, 0.058777f, 0.063293f,
- 0.067566f, 0.072449f, 0.077759f, 0.083069f, 0.088928f, 0.095886f, 0.102478f, 0.109070f,
- 0.116760f, 0.124390f, 0.132935f, 0.141479f, 0.151123f, 0.161011f, 0.171143f, 0.182007f,
- 0.193726f, 0.205688f, 0.218018f, 0.230835f, 0.244507f, 0.258789f, 0.272949f, 0.287109f,
- 0.303467f, 0.319336f, 0.335449f, 0.352539f, 0.369873f, 0.387939f, 0.406250f, 0.425049f,
- 0.444824f, 0.464844f, 0.739258f, 0.756348f, 0.758789f, 0.758789f, 0.757324f, 0.756836f,
- 0.001004f, 0.002939f, 0.005005f, 0.006779f, 0.008453f, 0.010323f, 0.012177f, 0.013870f,
- 0.016052f, 0.018051f, 0.019638f, 0.022141f, 0.023956f, 0.026413f, 0.028870f, 0.031281f,
- 0.033661f, 0.036591f, 0.039429f, 0.042542f, 0.045776f, 0.049011f, 0.053009f, 0.056885f,
- 0.061035f, 0.065186f, 0.069885f, 0.075134f, 0.080505f, 0.085999f, 0.091858f, 0.098633f,
- 0.105591f, 0.112732f, 0.120667f, 0.128662f, 0.137573f, 0.146729f, 0.156372f, 0.166748f,
- 0.177490f, 0.189331f, 0.201294f, 0.213501f, 0.226807f, 0.239746f, 0.254150f, 0.268555f,
- 0.283936f, 0.298828f, 0.316162f, 0.332275f, 0.349609f, 0.367432f, 0.385498f, 0.404053f,
- 0.423828f, 0.443848f, 0.728516f, 0.747559f, 0.750488f, 0.750488f, 0.749512f, 0.748047f,
- 0.000970f, 0.002523f, 0.004665f, 0.006203f, 0.007759f, 0.009491f, 0.011070f, 0.012802f,
- 0.014336f, 0.016266f, 0.017944f, 0.019852f, 0.021805f, 0.023911f, 0.025818f, 0.028137f,
- 0.030579f, 0.032837f, 0.035248f, 0.038055f, 0.041046f, 0.044189f, 0.047333f, 0.050842f,
- 0.054504f, 0.058502f, 0.062866f, 0.067383f, 0.071960f, 0.077393f, 0.082642f, 0.088928f,
- 0.095093f, 0.101685f, 0.108765f, 0.116272f, 0.124451f, 0.133423f, 0.142212f, 0.152100f,
- 0.162354f, 0.172729f, 0.184692f, 0.196411f, 0.209106f, 0.221802f, 0.235718f, 0.250000f,
- 0.265137f, 0.280029f, 0.296143f, 0.312012f, 0.329346f, 0.346924f, 0.364990f, 0.384277f,
- 0.403564f, 0.423340f, 0.718262f, 0.738770f, 0.741211f, 0.742188f, 0.741211f, 0.740234f,
- 0.000785f, 0.002600f, 0.004028f, 0.005390f, 0.007275f, 0.008774f, 0.010124f, 0.011620f,
- 0.013306f, 0.014427f, 0.015991f, 0.017838f, 0.019577f, 0.021469f, 0.023254f, 0.024902f,
- 0.027115f, 0.029190f, 0.031677f, 0.034088f, 0.036682f, 0.039307f, 0.042175f, 0.045410f,
- 0.048553f, 0.052002f, 0.055908f, 0.060028f, 0.064270f, 0.068909f, 0.074097f, 0.079163f,
- 0.085022f, 0.091309f, 0.097473f, 0.104797f, 0.112183f, 0.120239f, 0.128662f, 0.137451f,
- 0.146973f, 0.157471f, 0.168213f, 0.179810f, 0.191650f, 0.204468f, 0.217529f, 0.231201f,
- 0.245605f, 0.260254f, 0.275879f, 0.292236f, 0.308838f, 0.326416f, 0.344238f, 0.363037f,
- 0.382080f, 0.403076f, 0.707031f, 0.729980f, 0.732422f, 0.733398f, 0.733398f, 0.732910f,
- 0.000775f, 0.002190f, 0.003696f, 0.005081f, 0.006397f, 0.007858f, 0.009239f, 0.010323f,
- 0.011803f, 0.012978f, 0.014328f, 0.015915f, 0.017349f, 0.019058f, 0.020630f, 0.022339f,
- 0.024445f, 0.025909f, 0.028275f, 0.030151f, 0.032532f, 0.035065f, 0.037476f, 0.040283f,
- 0.042969f, 0.046448f, 0.049469f, 0.053314f, 0.056976f, 0.061371f, 0.065613f, 0.070435f,
- 0.075623f, 0.081360f, 0.087341f, 0.093628f, 0.100220f, 0.107788f, 0.115845f, 0.123901f,
- 0.133057f, 0.142456f, 0.152832f, 0.163574f, 0.174561f, 0.187012f, 0.199463f, 0.212646f,
- 0.226562f, 0.241455f, 0.256836f, 0.272705f, 0.288818f, 0.305664f, 0.323486f, 0.341797f,
- 0.362305f, 0.382080f, 0.695312f, 0.719238f, 0.722656f, 0.724121f, 0.724121f, 0.723633f,
- 0.000906f, 0.002022f, 0.003521f, 0.004963f, 0.005756f, 0.006847f, 0.008446f, 0.009392f,
- 0.010437f, 0.012039f, 0.012863f, 0.014343f, 0.015457f, 0.016876f, 0.018295f, 0.019730f,
- 0.021484f, 0.023102f, 0.024689f, 0.026581f, 0.028717f, 0.030945f, 0.032928f, 0.035370f,
- 0.037872f, 0.040894f, 0.043915f, 0.047028f, 0.050415f, 0.054169f, 0.058167f, 0.062286f,
- 0.067078f, 0.071960f, 0.077209f, 0.082947f, 0.089417f, 0.096008f, 0.103271f, 0.110718f,
- 0.119324f, 0.128052f, 0.137817f, 0.147705f, 0.158691f, 0.169922f, 0.181519f, 0.195435f,
- 0.208496f, 0.222534f, 0.237305f, 0.252441f, 0.268799f, 0.285645f, 0.302979f, 0.322266f,
- 0.340332f, 0.360840f, 0.683594f, 0.708984f, 0.714355f, 0.715332f, 0.715820f, 0.715332f,
- 0.000700f, 0.002043f, 0.003139f, 0.004219f, 0.005417f, 0.006477f, 0.007442f, 0.008415f,
- 0.009499f, 0.010475f, 0.011497f, 0.012619f, 0.013824f, 0.014969f, 0.016190f, 0.017639f,
- 0.018799f, 0.020386f, 0.021896f, 0.023560f, 0.025131f, 0.027176f, 0.028900f, 0.031067f,
- 0.033295f, 0.035919f, 0.038239f, 0.041229f, 0.044373f, 0.047394f, 0.050934f, 0.054871f,
- 0.058838f, 0.063293f, 0.068115f, 0.073303f, 0.078857f, 0.084839f, 0.091309f, 0.098328f,
- 0.106079f, 0.114136f, 0.123230f, 0.132690f, 0.143066f, 0.153442f, 0.165161f, 0.177368f,
- 0.190186f, 0.203979f, 0.218262f, 0.232910f, 0.248901f, 0.265381f, 0.282227f, 0.301025f,
- 0.319580f, 0.339355f, 0.672852f, 0.699707f, 0.704590f, 0.706055f, 0.706543f, 0.706055f,
- 0.000762f, 0.001804f, 0.002762f, 0.003914f, 0.004791f, 0.005764f, 0.006542f, 0.007622f,
- 0.008606f, 0.009232f, 0.010178f, 0.011093f, 0.012108f, 0.013191f, 0.014412f, 0.015289f,
- 0.016510f, 0.017731f, 0.019119f, 0.020615f, 0.022049f, 0.023483f, 0.025345f, 0.027100f,
- 0.028885f, 0.031067f, 0.033417f, 0.035797f, 0.038422f, 0.041382f, 0.044495f, 0.047638f,
- 0.051178f, 0.055267f, 0.059387f, 0.064026f, 0.069092f, 0.074585f, 0.080566f, 0.087097f,
- 0.093811f, 0.101624f, 0.109619f, 0.117798f, 0.127319f, 0.137817f, 0.148682f, 0.160278f,
- 0.172607f, 0.185669f, 0.199097f, 0.214233f, 0.229492f, 0.245850f, 0.261963f, 0.280273f,
- 0.299316f, 0.319580f, 0.660645f, 0.689453f, 0.694824f, 0.696777f, 0.697266f, 0.697266f,
- 0.000499f, 0.001527f, 0.002565f, 0.003622f, 0.004429f, 0.005138f, 0.005955f, 0.006691f,
- 0.007317f, 0.008156f, 0.008949f, 0.009903f, 0.010635f, 0.011452f, 0.012512f, 0.013451f,
- 0.014503f, 0.015610f, 0.016632f, 0.017746f, 0.019073f, 0.020355f, 0.021957f, 0.023453f,
- 0.025208f, 0.026932f, 0.028732f, 0.030945f, 0.033142f, 0.035614f, 0.038300f, 0.041199f,
- 0.044464f, 0.047760f, 0.051514f, 0.055573f, 0.059998f, 0.064819f, 0.070312f, 0.075867f,
- 0.082275f, 0.088806f, 0.096436f, 0.104797f, 0.113342f, 0.122559f, 0.132568f, 0.143799f,
- 0.155396f, 0.167725f, 0.181274f, 0.195068f, 0.209961f, 0.225708f, 0.242310f, 0.259766f,
- 0.277832f, 0.297363f, 0.648926f, 0.678711f, 0.685059f, 0.687500f, 0.687500f, 0.687988f,
- 0.000653f, 0.001627f, 0.002562f, 0.003166f, 0.003872f, 0.004562f, 0.005287f, 0.005905f,
- 0.006557f, 0.007309f, 0.007835f, 0.008621f, 0.009140f, 0.010109f, 0.010773f, 0.011627f,
- 0.012428f, 0.013351f, 0.014488f, 0.015472f, 0.016479f, 0.017578f, 0.018845f, 0.020157f,
- 0.021591f, 0.023132f, 0.024765f, 0.026337f, 0.028473f, 0.030594f, 0.032867f, 0.035309f,
- 0.037933f, 0.041107f, 0.044403f, 0.047852f, 0.051666f, 0.055756f, 0.060455f, 0.065552f,
- 0.070740f, 0.077454f, 0.083862f, 0.091125f, 0.099304f, 0.107971f, 0.117859f, 0.127808f,
- 0.139038f, 0.150757f, 0.163574f, 0.176880f, 0.191162f, 0.206665f, 0.222656f, 0.239258f,
- 0.257568f, 0.277100f, 0.636230f, 0.667969f, 0.675293f, 0.677734f, 0.678223f, 0.678711f,
- 0.000393f, 0.001375f, 0.002174f, 0.002773f, 0.003334f, 0.004070f, 0.004692f, 0.005047f,
- 0.005672f, 0.006298f, 0.006893f, 0.007454f, 0.007957f, 0.008636f, 0.009171f, 0.010002f,
- 0.010674f, 0.011574f, 0.012451f, 0.013145f, 0.014091f, 0.014893f, 0.016083f, 0.017151f,
- 0.018402f, 0.019714f, 0.021042f, 0.022415f, 0.024155f, 0.026108f, 0.027786f, 0.030212f,
- 0.032379f, 0.034698f, 0.037415f, 0.040436f, 0.043793f, 0.047455f, 0.051727f, 0.056030f,
- 0.061218f, 0.066284f, 0.072571f, 0.079041f, 0.086121f, 0.094299f, 0.102844f, 0.112305f,
- 0.122925f, 0.134033f, 0.145752f, 0.158569f, 0.172729f, 0.187378f, 0.203003f, 0.219238f,
- 0.237671f, 0.255859f, 0.624023f, 0.657227f, 0.664062f, 0.666992f, 0.668457f, 0.668457f,
- 0.000379f, 0.001404f, 0.001893f, 0.002403f, 0.002840f, 0.003458f, 0.004021f, 0.004459f,
- 0.004894f, 0.005527f, 0.005844f, 0.006256f, 0.006866f, 0.007423f, 0.007957f, 0.008476f,
- 0.009155f, 0.009735f, 0.010422f, 0.011078f, 0.011925f, 0.012787f, 0.013458f, 0.014526f,
- 0.015541f, 0.016632f, 0.017838f, 0.019028f, 0.020248f, 0.021851f, 0.023514f, 0.024979f,
- 0.027054f, 0.029236f, 0.031555f, 0.034180f, 0.036713f, 0.040375f, 0.043854f, 0.047607f,
- 0.051727f, 0.056549f, 0.061768f, 0.067627f, 0.073792f, 0.081116f, 0.089111f, 0.097595f,
- 0.107056f, 0.117371f, 0.128906f, 0.141113f, 0.154053f, 0.168579f, 0.183960f, 0.199585f,
- 0.216309f, 0.235352f, 0.612793f, 0.647949f, 0.652832f, 0.656250f, 0.658691f, 0.658203f,
- 0.000506f, 0.001164f, 0.001575f, 0.002136f, 0.002600f, 0.003054f, 0.003405f, 0.003735f,
- 0.004364f, 0.004681f, 0.004944f, 0.005569f, 0.005810f, 0.006187f, 0.006813f, 0.007233f,
- 0.007881f, 0.008217f, 0.008850f, 0.009293f, 0.010109f, 0.010788f, 0.011543f, 0.012161f,
- 0.012993f, 0.013931f, 0.014809f, 0.015945f, 0.016983f, 0.018234f, 0.019440f, 0.020813f,
- 0.022491f, 0.024261f, 0.026169f, 0.028458f, 0.030701f, 0.033295f, 0.036560f, 0.039520f,
- 0.043121f, 0.047333f, 0.052032f, 0.056885f, 0.062561f, 0.068909f, 0.076111f, 0.083496f,
- 0.092407f, 0.101929f, 0.112671f, 0.124451f, 0.136719f, 0.150146f, 0.165039f, 0.180786f,
- 0.197510f, 0.215210f, 0.597656f, 0.636230f, 0.642578f, 0.647461f, 0.647949f, 0.649902f,
- 0.000344f, 0.001057f, 0.001456f, 0.001907f, 0.002377f, 0.002735f, 0.002983f, 0.003359f,
- 0.003651f, 0.003960f, 0.004311f, 0.004471f, 0.005009f, 0.005283f, 0.005653f, 0.006145f,
- 0.006592f, 0.006889f, 0.007469f, 0.007889f, 0.008423f, 0.008911f, 0.009567f, 0.010124f,
- 0.010788f, 0.011574f, 0.012466f, 0.013123f, 0.014053f, 0.015091f, 0.016159f, 0.017288f,
- 0.018539f, 0.020111f, 0.021698f, 0.023285f, 0.025024f, 0.027405f, 0.029800f, 0.032501f,
- 0.035583f, 0.039001f, 0.042908f, 0.047302f, 0.052185f, 0.057465f, 0.063843f, 0.070984f,
- 0.078857f, 0.087463f, 0.097168f, 0.108215f, 0.120117f, 0.132812f, 0.146851f, 0.161865f,
- 0.177856f, 0.195557f, 0.585449f, 0.624023f, 0.633301f, 0.636230f, 0.637695f, 0.638672f,
- 0.000516f, 0.000847f, 0.001210f, 0.001663f, 0.002012f, 0.002218f, 0.002424f, 0.002861f,
- 0.002947f, 0.003275f, 0.003469f, 0.003819f, 0.004169f, 0.004337f, 0.004658f, 0.005169f,
- 0.005424f, 0.005795f, 0.006138f, 0.006500f, 0.007057f, 0.007458f, 0.007874f, 0.008369f,
- 0.008888f, 0.009583f, 0.010147f, 0.010864f, 0.011589f, 0.012428f, 0.013161f, 0.013931f,
- 0.015076f, 0.016266f, 0.017456f, 0.018845f, 0.020432f, 0.022232f, 0.024094f, 0.026459f,
- 0.028809f, 0.031586f, 0.034973f, 0.038513f, 0.042755f, 0.047485f, 0.052643f, 0.058929f,
- 0.065796f, 0.073792f, 0.082581f, 0.092407f, 0.103516f, 0.115723f, 0.128906f, 0.142944f,
- 0.158813f, 0.175781f, 0.572266f, 0.613770f, 0.621094f, 0.625977f, 0.626953f, 0.628418f,
- 0.000262f, 0.000864f, 0.001096f, 0.001409f, 0.001576f, 0.001852f, 0.002047f, 0.002247f,
- 0.002518f, 0.002741f, 0.002956f, 0.003157f, 0.003359f, 0.003597f, 0.003872f, 0.004230f,
- 0.004406f, 0.004772f, 0.005035f, 0.005379f, 0.005695f, 0.006153f, 0.006485f, 0.006935f,
- 0.007275f, 0.007801f, 0.008301f, 0.008789f, 0.009300f, 0.009949f, 0.010727f, 0.011482f,
- 0.012245f, 0.013145f, 0.014236f, 0.015236f, 0.016525f, 0.017838f, 0.019348f, 0.021088f,
- 0.023010f, 0.025253f, 0.027878f, 0.031128f, 0.034149f, 0.038269f, 0.042694f, 0.047852f,
- 0.053833f, 0.060852f, 0.068665f, 0.077698f, 0.087891f, 0.099182f, 0.111633f, 0.125732f,
- 0.140381f, 0.157227f, 0.558105f, 0.601562f, 0.610840f, 0.614746f, 0.617188f, 0.619141f,
- 0.000270f, 0.000683f, 0.000851f, 0.001138f, 0.001346f, 0.001561f, 0.001701f, 0.001884f,
- 0.001984f, 0.002193f, 0.002455f, 0.002609f, 0.002743f, 0.002993f, 0.003159f, 0.003361f,
- 0.003593f, 0.003883f, 0.004044f, 0.004360f, 0.004532f, 0.004971f, 0.005169f, 0.005573f,
- 0.005863f, 0.006252f, 0.006653f, 0.007095f, 0.007572f, 0.008110f, 0.008713f, 0.009056f,
- 0.009827f, 0.010574f, 0.011307f, 0.012070f, 0.013069f, 0.014122f, 0.015297f, 0.016678f,
- 0.018234f, 0.019775f, 0.021835f, 0.024216f, 0.026917f, 0.030151f, 0.033875f, 0.038147f,
- 0.043121f, 0.049408f, 0.056091f, 0.064026f, 0.073059f, 0.083801f, 0.095276f, 0.108459f,
- 0.122803f, 0.138794f, 0.545410f, 0.590332f, 0.599609f, 0.603516f, 0.606445f, 0.607422f,
- 0.000190f, 0.000607f, 0.000724f, 0.000989f, 0.001171f, 0.001265f, 0.001416f, 0.001602f,
- 0.001666f, 0.001761f, 0.001893f, 0.002102f, 0.002199f, 0.002413f, 0.002537f, 0.002743f,
- 0.002850f, 0.003027f, 0.003258f, 0.003494f, 0.003729f, 0.003937f, 0.004204f, 0.004410f,
- 0.004616f, 0.004921f, 0.005192f, 0.005604f, 0.005936f, 0.006298f, 0.006836f, 0.007233f,
- 0.007694f, 0.008224f, 0.008827f, 0.009506f, 0.010262f, 0.011055f, 0.011978f, 0.012955f,
- 0.014099f, 0.015434f, 0.017029f, 0.018677f, 0.020813f, 0.023193f, 0.026169f, 0.029541f,
- 0.033783f, 0.038513f, 0.044403f, 0.051208f, 0.059387f, 0.068665f, 0.079468f, 0.091858f,
- 0.105774f, 0.120728f, 0.530762f, 0.578125f, 0.588379f, 0.592773f, 0.595215f, 0.597168f,
- 0.000151f, 0.000443f, 0.000673f, 0.000793f, 0.000937f, 0.000987f, 0.001092f, 0.001192f,
- 0.001324f, 0.001460f, 0.001495f, 0.001565f, 0.001778f, 0.001944f, 0.002054f, 0.002096f,
- 0.002254f, 0.002338f, 0.002594f, 0.002737f, 0.002886f, 0.003048f, 0.003294f, 0.003460f,
- 0.003679f, 0.003868f, 0.004086f, 0.004322f, 0.004642f, 0.004894f, 0.005199f, 0.005554f,
- 0.006035f, 0.006451f, 0.006836f, 0.007359f, 0.007820f, 0.008461f, 0.009163f, 0.009956f,
- 0.010803f, 0.011871f, 0.012917f, 0.014343f, 0.015900f, 0.017670f, 0.019791f, 0.022400f,
- 0.025589f, 0.029404f, 0.034210f, 0.039948f, 0.046936f, 0.055298f, 0.064941f, 0.076172f,
- 0.089172f, 0.103821f, 0.517090f, 0.565918f, 0.576172f, 0.582031f, 0.584961f, 0.586426f,
- 0.000203f, 0.000287f, 0.000531f, 0.000688f, 0.000738f, 0.000820f, 0.000915f, 0.000875f,
- 0.001036f, 0.001117f, 0.001215f, 0.001317f, 0.001374f, 0.001476f, 0.001524f, 0.001682f,
- 0.001726f, 0.001867f, 0.002014f, 0.002056f, 0.002209f, 0.002365f, 0.002495f, 0.002663f,
- 0.002775f, 0.002953f, 0.003134f, 0.003325f, 0.003567f, 0.003736f, 0.004070f, 0.004261f,
- 0.004494f, 0.004845f, 0.005116f, 0.005459f, 0.005928f, 0.006329f, 0.006863f, 0.007458f,
- 0.008087f, 0.008873f, 0.009689f, 0.010651f, 0.011826f, 0.013130f, 0.014732f, 0.016617f,
- 0.018890f, 0.021912f, 0.025482f, 0.029938f, 0.035736f, 0.042847f, 0.051453f, 0.061615f,
- 0.074158f, 0.087952f, 0.504395f, 0.554199f, 0.565918f, 0.569336f, 0.573242f, 0.574219f,
- 0.000215f, 0.000259f, 0.000423f, 0.000534f, 0.000499f, 0.000649f, 0.000622f, 0.000690f,
- 0.000717f, 0.000817f, 0.000937f, 0.000984f, 0.001045f, 0.001148f, 0.001182f, 0.001211f,
- 0.001339f, 0.001406f, 0.001463f, 0.001590f, 0.001666f, 0.001759f, 0.001867f, 0.001949f,
- 0.002064f, 0.002176f, 0.002342f, 0.002453f, 0.002619f, 0.002871f, 0.003033f, 0.003101f,
- 0.003389f, 0.003620f, 0.003794f, 0.004059f, 0.004368f, 0.004681f, 0.005035f, 0.005466f,
- 0.005917f, 0.006405f, 0.007092f, 0.007744f, 0.008591f, 0.009506f, 0.010567f, 0.011993f,
- 0.013710f, 0.015762f, 0.018326f, 0.021759f, 0.026077f, 0.031891f, 0.039124f, 0.048462f,
- 0.059570f, 0.072571f, 0.489258f, 0.542480f, 0.553223f, 0.558594f, 0.562012f, 0.563965f,
- 0.000067f, 0.000253f, 0.000305f, 0.000367f, 0.000422f, 0.000431f, 0.000530f, 0.000466f,
- 0.000565f, 0.000590f, 0.000702f, 0.000690f, 0.000746f, 0.000795f, 0.000859f, 0.000897f,
- 0.000962f, 0.001021f, 0.001069f, 0.001105f, 0.001207f, 0.001257f, 0.001354f, 0.001424f,
- 0.001483f, 0.001570f, 0.001687f, 0.001750f, 0.001857f, 0.001982f, 0.002071f, 0.002281f,
- 0.002361f, 0.002527f, 0.002684f, 0.002846f, 0.003092f, 0.003342f, 0.003622f, 0.003866f,
- 0.004173f, 0.004520f, 0.004955f, 0.005428f, 0.006023f, 0.006687f, 0.007481f, 0.008446f,
- 0.009628f, 0.011047f, 0.012840f, 0.015205f, 0.018326f, 0.022629f, 0.028442f, 0.036102f,
- 0.046051f, 0.058197f, 0.476318f, 0.529785f, 0.541992f, 0.547852f, 0.550293f, 0.553223f,
- 0.000000f, 0.000118f, 0.000216f, 0.000288f, 0.000272f, 0.000350f, 0.000312f, 0.000374f,
- 0.000395f, 0.000470f, 0.000488f, 0.000477f, 0.000495f, 0.000548f, 0.000573f, 0.000646f,
- 0.000636f, 0.000714f, 0.000763f, 0.000803f, 0.000852f, 0.000897f, 0.000930f, 0.000985f,
- 0.001056f, 0.001089f, 0.001163f, 0.001210f, 0.001281f, 0.001432f, 0.001431f, 0.001548f,
- 0.001622f, 0.001743f, 0.001869f, 0.001991f, 0.002104f, 0.002262f, 0.002428f, 0.002632f,
- 0.002815f, 0.003077f, 0.003344f, 0.003656f, 0.004002f, 0.004478f, 0.004974f, 0.005627f,
- 0.006435f, 0.007481f, 0.008713f, 0.010307f, 0.012291f, 0.015289f, 0.019409f, 0.025497f,
- 0.033966f, 0.045013f, 0.461914f, 0.517090f, 0.529297f, 0.536133f, 0.539551f, 0.541504f,
- 0.000073f, 0.000175f, 0.000165f, 0.000149f, 0.000200f, 0.000208f, 0.000215f, 0.000260f,
- 0.000268f, 0.000277f, 0.000292f, 0.000341f, 0.000334f, 0.000370f, 0.000413f, 0.000424f,
- 0.000449f, 0.000474f, 0.000488f, 0.000507f, 0.000555f, 0.000574f, 0.000616f, 0.000652f,
- 0.000696f, 0.000746f, 0.000780f, 0.000804f, 0.000849f, 0.000888f, 0.000949f, 0.001011f,
- 0.001075f, 0.001151f, 0.001225f, 0.001266f, 0.001385f, 0.001466f, 0.001596f, 0.001699f,
- 0.001808f, 0.001980f, 0.002157f, 0.002329f, 0.002544f, 0.002850f, 0.003178f, 0.003593f,
- 0.004047f, 0.004658f, 0.005508f, 0.006565f, 0.007935f, 0.009819f, 0.012527f, 0.016647f,
- 0.023514f, 0.033173f, 0.447510f, 0.503906f, 0.517578f, 0.523926f, 0.527344f, 0.529297f,
- 0.000000f, 0.000106f, 0.000097f, 0.000099f, 0.000136f, 0.000157f, 0.000129f, 0.000162f,
- 0.000167f, 0.000172f, 0.000180f, 0.000186f, 0.000209f, 0.000227f, 0.000232f, 0.000248f,
- 0.000260f, 0.000291f, 0.000300f, 0.000327f, 0.000335f, 0.000343f, 0.000363f, 0.000395f,
- 0.000428f, 0.000459f, 0.000458f, 0.000477f, 0.000515f, 0.000549f, 0.000578f, 0.000621f,
- 0.000659f, 0.000683f, 0.000741f, 0.000767f, 0.000818f, 0.000877f, 0.000952f, 0.001010f,
- 0.001085f, 0.001177f, 0.001275f, 0.001406f, 0.001516f, 0.001664f, 0.001884f, 0.002096f,
- 0.002415f, 0.002745f, 0.003231f, 0.003843f, 0.004715f, 0.005936f, 0.007629f, 0.010139f,
- 0.014763f, 0.022812f, 0.433350f, 0.491455f, 0.506348f, 0.511719f, 0.515625f, 0.518066f,
- 0.000104f, 0.000080f, 0.000069f, 0.000062f, 0.000074f, 0.000074f, 0.000089f, 0.000097f,
- 0.000099f, 0.000102f, 0.000105f, 0.000126f, 0.000106f, 0.000119f, 0.000139f, 0.000135f,
- 0.000154f, 0.000164f, 0.000166f, 0.000175f, 0.000188f, 0.000194f, 0.000211f, 0.000220f,
- 0.000252f, 0.000248f, 0.000260f, 0.000272f, 0.000293f, 0.000301f, 0.000328f, 0.000347f,
- 0.000365f, 0.000371f, 0.000401f, 0.000422f, 0.000447f, 0.000489f, 0.000524f, 0.000553f,
- 0.000588f, 0.000635f, 0.000701f, 0.000751f, 0.000816f, 0.000897f, 0.000997f, 0.001109f,
- 0.001265f, 0.001460f, 0.001686f, 0.002035f, 0.002457f, 0.003130f, 0.004124f, 0.005676f,
- 0.008263f, 0.014114f, 0.418945f, 0.479492f, 0.493652f, 0.500000f, 0.503418f, 0.506836f,
- 0.000089f, 0.000065f, 0.000056f, 0.000050f, 0.000045f, 0.000042f, 0.000046f, 0.000042f,
- 0.000043f, 0.000055f, 0.000046f, 0.000049f, 0.000065f, 0.000055f, 0.000057f, 0.000063f,
- 0.000075f, 0.000080f, 0.000078f, 0.000084f, 0.000085f, 0.000092f, 0.000097f, 0.000102f,
- 0.000108f, 0.000117f, 0.000118f, 0.000138f, 0.000135f, 0.000142f, 0.000151f, 0.000160f,
- 0.000172f, 0.000180f, 0.000195f, 0.000197f, 0.000210f, 0.000230f, 0.000244f, 0.000266f,
- 0.000279f, 0.000299f, 0.000324f, 0.000352f, 0.000383f, 0.000414f, 0.000457f, 0.000509f,
- 0.000575f, 0.000650f, 0.000756f, 0.000904f, 0.001103f, 0.001410f, 0.001880f, 0.002668f,
- 0.004112f, 0.007290f, 0.404541f, 0.466309f, 0.481201f, 0.488037f, 0.492432f, 0.495361f,
- 0.000066f, 0.000046f, 0.000038f, 0.000034f, 0.000031f, 0.000029f, 0.000027f, 0.000026f,
- 0.000025f, 0.000023f, 0.000022f, 0.000024f, 0.000020f, 0.000021f, 0.000021f, 0.000026f,
- 0.000024f, 0.000028f, 0.000031f, 0.000032f, 0.000032f, 0.000035f, 0.000040f, 0.000038f,
- 0.000041f, 0.000047f, 0.000049f, 0.000043f, 0.000050f, 0.000052f, 0.000056f, 0.000059f,
- 0.000066f, 0.000062f, 0.000067f, 0.000071f, 0.000082f, 0.000083f, 0.000089f, 0.000098f,
- 0.000104f, 0.000107f, 0.000116f, 0.000125f, 0.000141f, 0.000149f, 0.000160f, 0.000183f,
- 0.000207f, 0.000228f, 0.000264f, 0.000311f, 0.000376f, 0.000469f, 0.000646f, 0.000937f,
- 0.001554f, 0.002983f, 0.390381f, 0.454346f, 0.469727f, 0.476318f, 0.480713f, 0.484131f,
- 0.000028f, 0.000019f, 0.000015f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
- 0.000012f, 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f,
- 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f,
- 0.000008f, 0.000009f, 0.000009f, 0.000010f, 0.000010f, 0.000011f, 0.000012f, 0.000011f,
- 0.000014f, 0.000015f, 0.000016f, 0.000016f, 0.000018f, 0.000019f, 0.000019f, 0.000022f,
- 0.000023f, 0.000024f, 0.000026f, 0.000028f, 0.000029f, 0.000032f, 0.000037f, 0.000037f,
- 0.000042f, 0.000048f, 0.000056f, 0.000066f, 0.000077f, 0.000091f, 0.000124f, 0.000183f,
- 0.000318f, 0.000779f, 0.376465f, 0.441406f, 0.457275f, 0.464600f, 0.468994f, 0.471924f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f,
- 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f,
- 0.000010f, 0.000027f, 0.363037f, 0.428223f, 0.444580f, 0.452881f, 0.457031f, 0.459961f,
- },
- {
- 0.014420f, 0.043488f, 0.072388f, 0.100830f, 0.129150f, 0.156494f, 0.183350f, 0.210327f,
- 0.235352f, 0.260986f, 0.285645f, 0.309082f, 0.332764f, 0.355713f, 0.377441f, 0.399658f,
- 0.420898f, 0.441650f, 0.461914f, 0.481445f, 0.500977f, 0.520508f, 0.538574f, 0.556641f,
- 0.574707f, 0.591797f, 0.608398f, 0.624512f, 0.641602f, 0.657227f, 0.672363f, 0.687500f,
- 0.702148f, 0.717285f, 0.730957f, 0.745117f, 0.758789f, 0.772461f, 0.783203f, 0.797363f,
- 0.810547f, 0.822266f, 0.833984f, 0.845703f, 0.857422f, 0.868652f, 0.879395f, 0.890625f,
- 0.901367f, 0.911621f, 0.921875f, 0.932129f, 0.941895f, 0.951660f, 0.960938f, 0.970215f,
- 0.979492f, 0.987793f, 0.981934f, 0.957031f, 0.938965f, 0.923340f, 0.909668f, 0.897461f,
- 0.013199f, 0.039978f, 0.066284f, 0.093445f, 0.119324f, 0.145386f, 0.170410f, 0.195801f,
- 0.220581f, 0.244019f, 0.268066f, 0.291260f, 0.314453f, 0.335938f, 0.358154f, 0.379639f,
- 0.399902f, 0.420898f, 0.441406f, 0.460938f, 0.480225f, 0.498291f, 0.516602f, 0.535156f,
- 0.553223f, 0.570312f, 0.587891f, 0.603516f, 0.620117f, 0.636719f, 0.652832f, 0.667480f,
- 0.682617f, 0.696777f, 0.711914f, 0.726074f, 0.739746f, 0.753418f, 0.766602f, 0.779785f,
- 0.791992f, 0.804688f, 0.817871f, 0.829102f, 0.841309f, 0.852539f, 0.864258f, 0.875488f,
- 0.886230f, 0.896973f, 0.907227f, 0.917969f, 0.928223f, 0.937500f, 0.947266f, 0.957520f,
- 0.966797f, 0.975586f, 0.976562f, 0.952637f, 0.935547f, 0.920898f, 0.907715f, 0.895996f,
- 0.011932f, 0.036499f, 0.061554f, 0.085999f, 0.110962f, 0.135010f, 0.158813f, 0.182373f,
- 0.206421f, 0.229004f, 0.251221f, 0.274170f, 0.295654f, 0.317871f, 0.339111f, 0.360107f,
- 0.379395f, 0.399414f, 0.420654f, 0.440430f, 0.458252f, 0.477295f, 0.496094f, 0.513672f,
- 0.531738f, 0.549805f, 0.566406f, 0.583984f, 0.599121f, 0.616211f, 0.631348f, 0.647461f,
- 0.662598f, 0.677734f, 0.692383f, 0.705566f, 0.720703f, 0.734863f, 0.748047f, 0.761230f,
- 0.774414f, 0.787598f, 0.799805f, 0.812500f, 0.824707f, 0.837402f, 0.848633f, 0.859375f,
- 0.871094f, 0.882324f, 0.892578f, 0.904297f, 0.913574f, 0.924316f, 0.934570f, 0.943848f,
- 0.954102f, 0.963867f, 0.970703f, 0.948242f, 0.931641f, 0.917480f, 0.905273f, 0.894043f,
- 0.011070f, 0.033478f, 0.056396f, 0.079529f, 0.101990f, 0.125244f, 0.147705f, 0.170410f,
- 0.192139f, 0.214111f, 0.235596f, 0.257812f, 0.279053f, 0.300293f, 0.320557f, 0.340576f,
- 0.360596f, 0.381104f, 0.400635f, 0.420166f, 0.438965f, 0.458008f, 0.476562f, 0.493652f,
- 0.511230f, 0.527832f, 0.545898f, 0.562012f, 0.579102f, 0.595703f, 0.610840f, 0.627930f,
- 0.642578f, 0.657227f, 0.672363f, 0.686523f, 0.701660f, 0.715332f, 0.729492f, 0.742676f,
- 0.756348f, 0.769531f, 0.782227f, 0.795898f, 0.807617f, 0.820312f, 0.832031f, 0.843262f,
- 0.855469f, 0.866699f, 0.877441f, 0.889648f, 0.899414f, 0.910156f, 0.920410f, 0.930664f,
- 0.940430f, 0.950684f, 0.964844f, 0.943848f, 0.927734f, 0.914551f, 0.902344f, 0.891602f,
- 0.010010f, 0.031067f, 0.051880f, 0.073303f, 0.094421f, 0.116577f, 0.136963f, 0.157959f,
- 0.180542f, 0.200684f, 0.221436f, 0.242676f, 0.262939f, 0.283447f, 0.303467f, 0.323242f,
- 0.342529f, 0.362305f, 0.381348f, 0.399414f, 0.418701f, 0.437256f, 0.455322f, 0.472412f,
- 0.490479f, 0.507812f, 0.524902f, 0.541992f, 0.558105f, 0.574219f, 0.591309f, 0.606445f,
- 0.622070f, 0.637695f, 0.652344f, 0.666504f, 0.683594f, 0.695801f, 0.710449f, 0.724121f,
- 0.737305f, 0.751465f, 0.765137f, 0.777344f, 0.790039f, 0.802734f, 0.814941f, 0.827637f,
- 0.839355f, 0.851074f, 0.862305f, 0.874512f, 0.885254f, 0.895996f, 0.906738f, 0.917480f,
- 0.927246f, 0.937988f, 0.958984f, 0.939453f, 0.923828f, 0.911133f, 0.899414f, 0.889160f,
- 0.009491f, 0.028305f, 0.047699f, 0.067810f, 0.087341f, 0.107849f, 0.127686f, 0.147827f,
- 0.167725f, 0.187744f, 0.207886f, 0.227051f, 0.247314f, 0.266846f, 0.286377f, 0.305908f,
- 0.324463f, 0.343262f, 0.361572f, 0.380371f, 0.399658f, 0.416748f, 0.435547f, 0.452881f,
- 0.470703f, 0.488281f, 0.503906f, 0.522461f, 0.538086f, 0.554199f, 0.571289f, 0.586914f,
- 0.602051f, 0.617676f, 0.633789f, 0.647949f, 0.663086f, 0.677246f, 0.692871f, 0.705078f,
- 0.718750f, 0.732910f, 0.746582f, 0.759766f, 0.773438f, 0.785645f, 0.798340f, 0.811035f,
- 0.823242f, 0.834961f, 0.847168f, 0.859863f, 0.870117f, 0.881348f, 0.893066f, 0.903320f,
- 0.914551f, 0.924316f, 0.953125f, 0.934082f, 0.919434f, 0.906738f, 0.896484f, 0.885742f,
- 0.008598f, 0.026245f, 0.044495f, 0.062622f, 0.081177f, 0.100098f, 0.119019f, 0.137817f,
- 0.156616f, 0.175903f, 0.194946f, 0.213745f, 0.232788f, 0.251221f, 0.269775f, 0.288330f,
- 0.307129f, 0.325928f, 0.344238f, 0.362305f, 0.380371f, 0.397705f, 0.415771f, 0.433105f,
- 0.450928f, 0.468262f, 0.484863f, 0.501953f, 0.518555f, 0.534668f, 0.550293f, 0.566406f,
- 0.582520f, 0.598145f, 0.612305f, 0.627930f, 0.643555f, 0.657715f, 0.672852f, 0.687500f,
- 0.700684f, 0.715332f, 0.728516f, 0.742188f, 0.755371f, 0.769531f, 0.781738f, 0.794434f,
- 0.807129f, 0.818359f, 0.831543f, 0.843262f, 0.855469f, 0.865723f, 0.877930f, 0.889160f,
- 0.900391f, 0.911621f, 0.946777f, 0.929199f, 0.915039f, 0.903320f, 0.892578f, 0.883301f,
- 0.007896f, 0.024490f, 0.041138f, 0.057892f, 0.075439f, 0.092712f, 0.110229f, 0.128296f,
- 0.146118f, 0.164429f, 0.181885f, 0.200562f, 0.218628f, 0.236572f, 0.255127f, 0.272949f,
- 0.291016f, 0.308594f, 0.326172f, 0.343994f, 0.361816f, 0.380127f, 0.396973f, 0.414551f,
- 0.430908f, 0.447998f, 0.465576f, 0.481445f, 0.497559f, 0.514160f, 0.529785f, 0.546387f,
- 0.562988f, 0.578613f, 0.593262f, 0.609375f, 0.623047f, 0.638672f, 0.653809f, 0.667480f,
- 0.681641f, 0.697266f, 0.710938f, 0.724121f, 0.737305f, 0.752441f, 0.765625f, 0.776367f,
- 0.790527f, 0.803223f, 0.815918f, 0.827637f, 0.839844f, 0.851562f, 0.863281f, 0.875000f,
- 0.886719f, 0.898926f, 0.940430f, 0.923828f, 0.910645f, 0.899414f, 0.889160f, 0.879883f,
- 0.007320f, 0.022369f, 0.038055f, 0.053925f, 0.070190f, 0.086609f, 0.103027f, 0.119568f,
- 0.136475f, 0.153320f, 0.170532f, 0.187988f, 0.204834f, 0.223022f, 0.240112f, 0.257324f,
- 0.275391f, 0.291504f, 0.308838f, 0.326904f, 0.344727f, 0.361572f, 0.378662f, 0.395020f,
- 0.411865f, 0.428711f, 0.445068f, 0.462646f, 0.478271f, 0.494141f, 0.510254f, 0.525879f,
- 0.542480f, 0.557129f, 0.573242f, 0.588867f, 0.603516f, 0.618164f, 0.633789f, 0.648438f,
- 0.663086f, 0.678223f, 0.691895f, 0.706543f, 0.720215f, 0.733398f, 0.746582f, 0.759766f,
- 0.774414f, 0.786621f, 0.799805f, 0.811523f, 0.823730f, 0.836914f, 0.848145f, 0.860840f,
- 0.872070f, 0.884277f, 0.933594f, 0.918945f, 0.906250f, 0.895020f, 0.885254f, 0.876953f,
- 0.006760f, 0.021011f, 0.034973f, 0.050049f, 0.065369f, 0.080261f, 0.095337f, 0.111633f,
- 0.127319f, 0.142822f, 0.159668f, 0.176514f, 0.192383f, 0.209106f, 0.225586f, 0.242554f,
- 0.259277f, 0.275635f, 0.292480f, 0.309326f, 0.326904f, 0.343750f, 0.359619f, 0.376465f,
- 0.393066f, 0.409424f, 0.426514f, 0.442871f, 0.458252f, 0.475586f, 0.490967f, 0.505859f,
- 0.522461f, 0.539062f, 0.554199f, 0.569336f, 0.583984f, 0.600586f, 0.614258f, 0.630371f,
- 0.643555f, 0.658691f, 0.673340f, 0.687500f, 0.702148f, 0.715332f, 0.729980f, 0.743652f,
- 0.756348f, 0.770020f, 0.782715f, 0.796387f, 0.808105f, 0.820801f, 0.833008f, 0.846680f,
- 0.857910f, 0.870117f, 0.927246f, 0.913574f, 0.901367f, 0.891113f, 0.881348f, 0.873047f,
- 0.006367f, 0.019165f, 0.032379f, 0.046295f, 0.060089f, 0.074463f, 0.088867f, 0.103821f,
- 0.118835f, 0.133911f, 0.149048f, 0.164673f, 0.180298f, 0.196289f, 0.212524f, 0.228516f,
- 0.244385f, 0.260742f, 0.277344f, 0.293213f, 0.309570f, 0.326416f, 0.342773f, 0.358887f,
- 0.374512f, 0.391113f, 0.406982f, 0.423340f, 0.439453f, 0.455078f, 0.470947f, 0.487793f,
- 0.502441f, 0.519043f, 0.533691f, 0.550293f, 0.564941f, 0.580078f, 0.595703f, 0.610840f,
- 0.625488f, 0.640137f, 0.654785f, 0.669434f, 0.683594f, 0.696777f, 0.710938f, 0.725586f,
- 0.738770f, 0.752441f, 0.766113f, 0.778320f, 0.791016f, 0.805176f, 0.818359f, 0.830566f,
- 0.842773f, 0.854980f, 0.920410f, 0.908203f, 0.896484f, 0.886230f, 0.877441f, 0.868652f,
- 0.005981f, 0.017914f, 0.030350f, 0.042908f, 0.056213f, 0.069092f, 0.083008f, 0.096619f,
- 0.111084f, 0.124634f, 0.139526f, 0.154297f, 0.169312f, 0.184570f, 0.199951f, 0.215454f,
- 0.230713f, 0.245728f, 0.261963f, 0.277588f, 0.293213f, 0.309326f, 0.325195f, 0.340820f,
- 0.356934f, 0.373047f, 0.388916f, 0.404785f, 0.420410f, 0.436279f, 0.452148f, 0.468506f,
- 0.483154f, 0.499756f, 0.515137f, 0.530762f, 0.545898f, 0.560059f, 0.576172f, 0.590820f,
- 0.606445f, 0.621094f, 0.635254f, 0.649902f, 0.663574f, 0.678223f, 0.692383f, 0.706543f,
- 0.720703f, 0.733887f, 0.748535f, 0.762695f, 0.775391f, 0.789551f, 0.801758f, 0.814941f,
- 0.828125f, 0.840332f, 0.913574f, 0.902344f, 0.890625f, 0.881836f, 0.872559f, 0.865234f,
- 0.005402f, 0.016617f, 0.028061f, 0.039948f, 0.051758f, 0.064270f, 0.076782f, 0.089600f,
- 0.102600f, 0.116455f, 0.130371f, 0.144165f, 0.158936f, 0.172607f, 0.187744f, 0.201904f,
- 0.216431f, 0.232422f, 0.247192f, 0.261719f, 0.277100f, 0.292480f, 0.308838f, 0.323975f,
- 0.339355f, 0.355469f, 0.371338f, 0.386230f, 0.402344f, 0.417725f, 0.433350f, 0.448486f,
- 0.464600f, 0.480225f, 0.495361f, 0.510742f, 0.525879f, 0.541992f, 0.557129f, 0.571777f,
- 0.586914f, 0.601562f, 0.616211f, 0.631836f, 0.645508f, 0.661621f, 0.674805f, 0.688965f,
- 0.703125f, 0.717773f, 0.731934f, 0.745605f, 0.757812f, 0.772949f, 0.785156f, 0.799316f,
- 0.812012f, 0.826172f, 0.906738f, 0.896484f, 0.886230f, 0.876465f, 0.868164f, 0.860840f,
- 0.005264f, 0.015457f, 0.026474f, 0.037170f, 0.048157f, 0.059845f, 0.071594f, 0.083984f,
- 0.096191f, 0.109070f, 0.121887f, 0.134766f, 0.148193f, 0.161255f, 0.175781f, 0.189209f,
- 0.203369f, 0.218384f, 0.233032f, 0.247681f, 0.261963f, 0.277100f, 0.292480f, 0.307129f,
- 0.322998f, 0.337891f, 0.352539f, 0.368652f, 0.384033f, 0.399170f, 0.414307f, 0.430420f,
- 0.445801f, 0.460693f, 0.475342f, 0.491211f, 0.506836f, 0.521973f, 0.537598f, 0.551758f,
- 0.567383f, 0.582520f, 0.598145f, 0.612305f, 0.627441f, 0.642090f, 0.656738f, 0.670898f,
- 0.685059f, 0.698730f, 0.713867f, 0.728516f, 0.742188f, 0.755371f, 0.770020f, 0.782715f,
- 0.796387f, 0.810547f, 0.899414f, 0.889648f, 0.879883f, 0.872070f, 0.863770f, 0.856445f,
- 0.004719f, 0.014229f, 0.024384f, 0.034607f, 0.044708f, 0.055756f, 0.066895f, 0.077942f,
- 0.089600f, 0.101624f, 0.113525f, 0.125854f, 0.138428f, 0.151245f, 0.164673f, 0.177734f,
- 0.191650f, 0.205078f, 0.219360f, 0.233154f, 0.247925f, 0.261475f, 0.276367f, 0.291504f,
- 0.305908f, 0.320312f, 0.335449f, 0.350098f, 0.365723f, 0.380615f, 0.395996f, 0.411133f,
- 0.427002f, 0.441895f, 0.456543f, 0.472656f, 0.487793f, 0.502441f, 0.518555f, 0.533203f,
- 0.547852f, 0.562988f, 0.577637f, 0.593262f, 0.607910f, 0.623535f, 0.638184f, 0.652344f,
- 0.666992f, 0.681641f, 0.696777f, 0.711426f, 0.725098f, 0.738281f, 0.753418f, 0.766113f,
- 0.782227f, 0.794922f, 0.892090f, 0.884277f, 0.875000f, 0.866699f, 0.858887f, 0.852539f,
- 0.004280f, 0.013329f, 0.022476f, 0.031982f, 0.042114f, 0.051849f, 0.062225f, 0.072449f,
- 0.083679f, 0.095032f, 0.105530f, 0.117676f, 0.129517f, 0.141357f, 0.154297f, 0.166748f,
- 0.178711f, 0.192505f, 0.205933f, 0.219727f, 0.233521f, 0.247070f, 0.260986f, 0.275391f,
- 0.290039f, 0.303955f, 0.319580f, 0.333740f, 0.347412f, 0.363037f, 0.377686f, 0.392822f,
- 0.408203f, 0.422852f, 0.437988f, 0.453125f, 0.468506f, 0.483398f, 0.498779f, 0.514160f,
- 0.527832f, 0.543945f, 0.559570f, 0.574707f, 0.588867f, 0.604492f, 0.619141f, 0.634277f,
- 0.648438f, 0.663086f, 0.678223f, 0.692383f, 0.707520f, 0.721680f, 0.735352f, 0.749512f,
- 0.764648f, 0.778320f, 0.884277f, 0.877441f, 0.868652f, 0.861328f, 0.854492f, 0.847656f,
- 0.004280f, 0.012138f, 0.021103f, 0.029999f, 0.038940f, 0.048279f, 0.057831f, 0.067566f,
- 0.077454f, 0.087524f, 0.098816f, 0.109558f, 0.120728f, 0.131958f, 0.143799f, 0.155762f,
- 0.168091f, 0.180176f, 0.193359f, 0.206177f, 0.219360f, 0.232910f, 0.246338f, 0.260254f,
- 0.273682f, 0.287598f, 0.302246f, 0.316650f, 0.331299f, 0.344971f, 0.359863f, 0.374268f,
- 0.389648f, 0.404297f, 0.419434f, 0.434326f, 0.449463f, 0.464844f, 0.479492f, 0.494141f,
- 0.509766f, 0.524414f, 0.540039f, 0.555176f, 0.569824f, 0.584961f, 0.600098f, 0.615723f,
- 0.629883f, 0.645508f, 0.659668f, 0.675293f, 0.689453f, 0.704590f, 0.719238f, 0.732422f,
- 0.748535f, 0.762207f, 0.876953f, 0.871582f, 0.863281f, 0.855957f, 0.849609f, 0.842773f,
- 0.003744f, 0.011436f, 0.019348f, 0.027893f, 0.036102f, 0.044739f, 0.053711f, 0.063110f,
- 0.072205f, 0.081970f, 0.091919f, 0.101746f, 0.112732f, 0.122864f, 0.134521f, 0.145996f,
- 0.157715f, 0.169434f, 0.181519f, 0.193848f, 0.206665f, 0.219360f, 0.231445f, 0.245361f,
- 0.259033f, 0.272217f, 0.286621f, 0.299805f, 0.314209f, 0.328125f, 0.342285f, 0.357178f,
- 0.371826f, 0.386475f, 0.400635f, 0.415527f, 0.430420f, 0.445068f, 0.459717f, 0.476074f,
- 0.490234f, 0.505371f, 0.521484f, 0.536133f, 0.551758f, 0.565430f, 0.581543f, 0.595703f,
- 0.611816f, 0.626465f, 0.641602f, 0.656738f, 0.671875f, 0.686523f, 0.701172f, 0.715820f,
- 0.731445f, 0.746582f, 0.868652f, 0.864746f, 0.856934f, 0.851074f, 0.844727f, 0.837891f,
- 0.003595f, 0.011093f, 0.018265f, 0.025711f, 0.033600f, 0.041656f, 0.050140f, 0.058350f,
- 0.067505f, 0.076416f, 0.085632f, 0.095093f, 0.104919f, 0.115295f, 0.125610f, 0.136108f,
- 0.147583f, 0.157959f, 0.169800f, 0.181519f, 0.193359f, 0.205933f, 0.218140f, 0.231323f,
- 0.243652f, 0.257324f, 0.270508f, 0.283447f, 0.297363f, 0.311523f, 0.325928f, 0.339111f,
- 0.353516f, 0.367432f, 0.382812f, 0.396973f, 0.412109f, 0.426758f, 0.441406f, 0.456055f,
- 0.471436f, 0.486328f, 0.501953f, 0.516113f, 0.531738f, 0.546875f, 0.562500f, 0.577637f,
- 0.592773f, 0.607910f, 0.622559f, 0.638184f, 0.653809f, 0.669434f, 0.684082f, 0.699219f,
- 0.714355f, 0.729492f, 0.860840f, 0.857422f, 0.852051f, 0.844727f, 0.839355f, 0.832520f,
- 0.003349f, 0.009933f, 0.016754f, 0.024063f, 0.031204f, 0.038849f, 0.046356f, 0.054413f,
- 0.062744f, 0.070984f, 0.080017f, 0.088989f, 0.097778f, 0.107361f, 0.117004f, 0.127197f,
- 0.137451f, 0.148071f, 0.159180f, 0.169922f, 0.181519f, 0.192993f, 0.204956f, 0.217407f,
- 0.229980f, 0.242188f, 0.254883f, 0.267578f, 0.281494f, 0.294434f, 0.307861f, 0.321533f,
- 0.335693f, 0.350098f, 0.364258f, 0.379150f, 0.393066f, 0.407715f, 0.422607f, 0.437500f,
- 0.452148f, 0.467041f, 0.482422f, 0.497314f, 0.512695f, 0.527832f, 0.542969f, 0.558594f,
- 0.573730f, 0.589844f, 0.604004f, 0.619629f, 0.635254f, 0.651367f, 0.665527f, 0.681152f,
- 0.696289f, 0.711914f, 0.852539f, 0.851562f, 0.846191f, 0.838867f, 0.832520f, 0.827637f,
- 0.003290f, 0.009415f, 0.015976f, 0.022095f, 0.028946f, 0.036255f, 0.043396f, 0.050598f,
- 0.058502f, 0.066284f, 0.074036f, 0.082275f, 0.091187f, 0.099731f, 0.108826f, 0.118652f,
- 0.128296f, 0.137939f, 0.148193f, 0.159302f, 0.170166f, 0.180786f, 0.191895f, 0.203491f,
- 0.215210f, 0.227661f, 0.240112f, 0.252686f, 0.265625f, 0.278564f, 0.291748f, 0.305176f,
- 0.318604f, 0.332764f, 0.346924f, 0.360352f, 0.375000f, 0.389160f, 0.404297f, 0.418213f,
- 0.433105f, 0.448486f, 0.463135f, 0.477783f, 0.493408f, 0.508301f, 0.523438f, 0.540039f,
- 0.554199f, 0.570312f, 0.585938f, 0.601074f, 0.617188f, 0.633301f, 0.648926f, 0.664062f,
- 0.679688f, 0.695312f, 0.844727f, 0.844238f, 0.838867f, 0.833008f, 0.827148f, 0.822266f,
- 0.002913f, 0.008621f, 0.014595f, 0.020950f, 0.027496f, 0.033600f, 0.040558f, 0.047119f,
- 0.054260f, 0.061615f, 0.068970f, 0.076782f, 0.084717f, 0.093140f, 0.101562f, 0.109985f,
- 0.118591f, 0.129150f, 0.138306f, 0.148682f, 0.158447f, 0.169189f, 0.180054f, 0.191162f,
- 0.202148f, 0.213379f, 0.225586f, 0.237305f, 0.250488f, 0.262939f, 0.275391f, 0.288086f,
- 0.302490f, 0.315186f, 0.329346f, 0.342529f, 0.356934f, 0.370117f, 0.385742f, 0.400146f,
- 0.414795f, 0.429199f, 0.444336f, 0.459473f, 0.473389f, 0.489258f, 0.503906f, 0.519531f,
- 0.535645f, 0.551270f, 0.566895f, 0.582520f, 0.598145f, 0.614258f, 0.629395f, 0.645996f,
- 0.661621f, 0.677734f, 0.837402f, 0.836914f, 0.832520f, 0.826660f, 0.821777f, 0.816406f,
- 0.002748f, 0.008018f, 0.014168f, 0.019196f, 0.025040f, 0.031250f, 0.037506f, 0.043732f,
- 0.050415f, 0.057098f, 0.063721f, 0.071167f, 0.078979f, 0.086609f, 0.094299f, 0.102783f,
- 0.111145f, 0.119812f, 0.128296f, 0.138306f, 0.147583f, 0.157593f, 0.168213f, 0.178711f,
- 0.188843f, 0.200317f, 0.211792f, 0.223511f, 0.235352f, 0.247192f, 0.259521f, 0.272461f,
- 0.285156f, 0.298584f, 0.312012f, 0.324707f, 0.339111f, 0.352783f, 0.366943f, 0.381348f,
- 0.395996f, 0.410889f, 0.425537f, 0.439941f, 0.454834f, 0.470459f, 0.485352f, 0.501953f,
- 0.516113f, 0.531738f, 0.547363f, 0.563477f, 0.579102f, 0.595703f, 0.611328f, 0.626953f,
- 0.642578f, 0.659668f, 0.828125f, 0.830566f, 0.825684f, 0.820801f, 0.815430f, 0.811035f,
- 0.002630f, 0.007412f, 0.012978f, 0.018356f, 0.023758f, 0.028931f, 0.034729f, 0.040894f,
- 0.046631f, 0.053101f, 0.059143f, 0.065979f, 0.073669f, 0.080200f, 0.087585f, 0.095276f,
- 0.102844f, 0.111633f, 0.119812f, 0.128296f, 0.137573f, 0.146729f, 0.156128f, 0.166382f,
- 0.176880f, 0.187256f, 0.197998f, 0.209351f, 0.220581f, 0.232422f, 0.244385f, 0.256592f,
- 0.268799f, 0.281982f, 0.294922f, 0.308105f, 0.321045f, 0.334717f, 0.348633f, 0.363525f,
- 0.378174f, 0.391846f, 0.406006f, 0.420898f, 0.436279f, 0.451660f, 0.466064f, 0.481934f,
- 0.496826f, 0.513184f, 0.528320f, 0.543945f, 0.560059f, 0.576660f, 0.592285f, 0.608887f,
- 0.625000f, 0.640625f, 0.819336f, 0.822266f, 0.818848f, 0.813965f, 0.810059f, 0.805664f,
- 0.002201f, 0.007240f, 0.011803f, 0.016617f, 0.021622f, 0.027344f, 0.032288f, 0.037598f,
- 0.043427f, 0.049194f, 0.055267f, 0.061462f, 0.067566f, 0.073853f, 0.080872f, 0.088013f,
- 0.095703f, 0.103821f, 0.111145f, 0.119446f, 0.127563f, 0.136597f, 0.145752f, 0.155273f,
- 0.165039f, 0.174683f, 0.185181f, 0.195801f, 0.206543f, 0.218140f, 0.229370f, 0.241455f,
- 0.253174f, 0.265381f, 0.278564f, 0.291504f, 0.304199f, 0.317383f, 0.331299f, 0.344971f,
- 0.358643f, 0.373291f, 0.386963f, 0.402100f, 0.416016f, 0.431641f, 0.447266f, 0.462646f,
- 0.477295f, 0.493652f, 0.509277f, 0.524902f, 0.541504f, 0.557617f, 0.574219f, 0.589844f,
- 0.605957f, 0.623047f, 0.810059f, 0.814453f, 0.811035f, 0.807129f, 0.803223f, 0.798828f,
- 0.002293f, 0.006927f, 0.010994f, 0.015617f, 0.020584f, 0.025131f, 0.029663f, 0.034760f,
- 0.040192f, 0.045532f, 0.050964f, 0.056793f, 0.062805f, 0.068726f, 0.074890f, 0.081482f,
- 0.088806f, 0.096069f, 0.103333f, 0.110535f, 0.118896f, 0.126709f, 0.135254f, 0.144165f,
- 0.153442f, 0.162720f, 0.172119f, 0.182495f, 0.192749f, 0.203735f, 0.214600f, 0.225952f,
- 0.237793f, 0.250000f, 0.261719f, 0.274170f, 0.287354f, 0.300293f, 0.313477f, 0.326904f,
- 0.340820f, 0.354980f, 0.369385f, 0.383545f, 0.396973f, 0.411865f, 0.427734f, 0.442871f,
- 0.458740f, 0.473633f, 0.489502f, 0.505859f, 0.522461f, 0.537598f, 0.553711f, 0.572754f,
- 0.588379f, 0.604492f, 0.802246f, 0.807617f, 0.804199f, 0.800781f, 0.797363f, 0.792969f,
- 0.002081f, 0.006172f, 0.010460f, 0.014503f, 0.019104f, 0.023163f, 0.027832f, 0.032410f,
- 0.037354f, 0.041992f, 0.047211f, 0.052490f, 0.057831f, 0.063232f, 0.069458f, 0.075317f,
- 0.082153f, 0.088257f, 0.094910f, 0.102295f, 0.110107f, 0.117554f, 0.125122f, 0.133667f,
- 0.142456f, 0.151001f, 0.160767f, 0.169922f, 0.179443f, 0.190430f, 0.200562f, 0.211914f,
- 0.222412f, 0.234009f, 0.245850f, 0.258545f, 0.270752f, 0.283203f, 0.296387f, 0.309082f,
- 0.322998f, 0.336670f, 0.350098f, 0.364990f, 0.378906f, 0.393311f, 0.408936f, 0.423096f,
- 0.438965f, 0.454834f, 0.470703f, 0.486572f, 0.502441f, 0.518555f, 0.534668f, 0.551270f,
- 0.569336f, 0.585938f, 0.792480f, 0.799316f, 0.797363f, 0.793457f, 0.790039f, 0.786621f,
- 0.002028f, 0.005669f, 0.009705f, 0.013565f, 0.017532f, 0.021286f, 0.025574f, 0.030197f,
- 0.034180f, 0.038757f, 0.043488f, 0.048737f, 0.053497f, 0.058594f, 0.064026f, 0.070007f,
- 0.075623f, 0.081360f, 0.088135f, 0.094238f, 0.101379f, 0.108643f, 0.116028f, 0.123718f,
- 0.131592f, 0.140137f, 0.149048f, 0.157715f, 0.167114f, 0.176636f, 0.187012f, 0.197388f,
- 0.208130f, 0.219238f, 0.230347f, 0.241943f, 0.254150f, 0.266113f, 0.279053f, 0.291504f,
- 0.304932f, 0.318848f, 0.332031f, 0.345947f, 0.360107f, 0.375000f, 0.389404f, 0.404541f,
- 0.419922f, 0.434814f, 0.450684f, 0.466553f, 0.482910f, 0.499023f, 0.516113f, 0.533203f,
- 0.550293f, 0.567383f, 0.783203f, 0.790527f, 0.789551f, 0.786621f, 0.783691f, 0.780762f,
- 0.001852f, 0.005554f, 0.008957f, 0.012642f, 0.016296f, 0.020172f, 0.024033f, 0.027878f,
- 0.031677f, 0.035919f, 0.040253f, 0.044952f, 0.049255f, 0.053955f, 0.058960f, 0.063965f,
- 0.069336f, 0.074951f, 0.080933f, 0.087219f, 0.093201f, 0.100159f, 0.106689f, 0.114197f,
- 0.121521f, 0.129517f, 0.137817f, 0.146118f, 0.155151f, 0.164307f, 0.173462f, 0.183472f,
- 0.193970f, 0.204224f, 0.215210f, 0.226562f, 0.238037f, 0.250244f, 0.262451f, 0.274902f,
- 0.287598f, 0.301025f, 0.314209f, 0.327393f, 0.342041f, 0.356445f, 0.370850f, 0.385254f,
- 0.400879f, 0.415771f, 0.431396f, 0.446777f, 0.463379f, 0.480469f, 0.497314f, 0.514160f,
- 0.530273f, 0.547363f, 0.774414f, 0.783203f, 0.782715f, 0.779297f, 0.776367f, 0.773438f,
- 0.001690f, 0.005207f, 0.008278f, 0.011696f, 0.015068f, 0.018784f, 0.022186f, 0.025909f,
- 0.029221f, 0.033508f, 0.037109f, 0.041321f, 0.045471f, 0.049774f, 0.054108f, 0.058838f,
- 0.063843f, 0.069214f, 0.074280f, 0.080078f, 0.086243f, 0.091980f, 0.098083f, 0.105164f,
- 0.111877f, 0.119446f, 0.126953f, 0.134888f, 0.143555f, 0.151978f, 0.161133f, 0.170532f,
- 0.180176f, 0.189697f, 0.200684f, 0.211182f, 0.222412f, 0.234009f, 0.245972f, 0.257568f,
- 0.270508f, 0.282959f, 0.295898f, 0.309570f, 0.323486f, 0.337158f, 0.351562f, 0.366211f,
- 0.381104f, 0.396729f, 0.411865f, 0.427490f, 0.443604f, 0.459961f, 0.477051f, 0.494385f,
- 0.510742f, 0.529297f, 0.763184f, 0.774902f, 0.773438f, 0.771973f, 0.769043f, 0.767578f,
- 0.001528f, 0.004692f, 0.007587f, 0.010956f, 0.014221f, 0.016907f, 0.020218f, 0.023407f,
- 0.027283f, 0.030273f, 0.033997f, 0.038055f, 0.041809f, 0.045959f, 0.049683f, 0.053955f,
- 0.058838f, 0.063171f, 0.068176f, 0.073120f, 0.078491f, 0.084473f, 0.090332f, 0.096619f,
- 0.102905f, 0.109619f, 0.116699f, 0.124207f, 0.131958f, 0.140503f, 0.148438f, 0.157349f,
- 0.166626f, 0.176392f, 0.186157f, 0.196045f, 0.207031f, 0.218018f, 0.229736f, 0.241699f,
- 0.253174f, 0.265381f, 0.278320f, 0.291748f, 0.305176f, 0.318848f, 0.333496f, 0.347412f,
- 0.362305f, 0.376709f, 0.392822f, 0.407715f, 0.424072f, 0.440430f, 0.457031f, 0.473633f,
- 0.491211f, 0.508789f, 0.753906f, 0.766602f, 0.767090f, 0.764160f, 0.761719f, 0.759766f,
- 0.001261f, 0.004250f, 0.007389f, 0.010185f, 0.013023f, 0.015976f, 0.018692f, 0.021713f,
- 0.024734f, 0.028183f, 0.031464f, 0.034943f, 0.038452f, 0.041870f, 0.045410f, 0.049561f,
- 0.054047f, 0.058044f, 0.062164f, 0.067017f, 0.071838f, 0.077332f, 0.082581f, 0.088318f,
- 0.094360f, 0.100525f, 0.107117f, 0.114258f, 0.121643f, 0.128540f, 0.136841f, 0.144897f,
- 0.153931f, 0.162476f, 0.171875f, 0.182007f, 0.192139f, 0.202637f, 0.213623f, 0.224854f,
- 0.237183f, 0.248657f, 0.260986f, 0.274170f, 0.287354f, 0.300781f, 0.314453f, 0.328613f,
- 0.343018f, 0.358643f, 0.373291f, 0.388916f, 0.404785f, 0.420654f, 0.437744f, 0.454590f,
- 0.471924f, 0.489990f, 0.744629f, 0.757812f, 0.757812f, 0.756836f, 0.754395f, 0.752441f,
- 0.001527f, 0.004047f, 0.006680f, 0.009369f, 0.012024f, 0.014618f, 0.017288f, 0.020248f,
- 0.022705f, 0.025803f, 0.028778f, 0.031769f, 0.034912f, 0.038330f, 0.041595f, 0.045166f,
- 0.048737f, 0.052673f, 0.056885f, 0.061218f, 0.065552f, 0.070251f, 0.075012f, 0.080505f,
- 0.086060f, 0.091614f, 0.097656f, 0.104065f, 0.110901f, 0.118225f, 0.125366f, 0.133179f,
- 0.141357f, 0.149902f, 0.158569f, 0.168213f, 0.177734f, 0.187866f, 0.198364f, 0.208984f,
- 0.220581f, 0.232422f, 0.244019f, 0.256836f, 0.269287f, 0.282471f, 0.296143f, 0.309326f,
- 0.324463f, 0.338379f, 0.353760f, 0.368652f, 0.385498f, 0.400635f, 0.417725f, 0.434570f,
- 0.451660f, 0.469482f, 0.733887f, 0.749023f, 0.750977f, 0.749023f, 0.747070f, 0.744629f,
- 0.001313f, 0.003803f, 0.006126f, 0.008507f, 0.011185f, 0.013550f, 0.015839f, 0.018219f,
- 0.021027f, 0.023438f, 0.026520f, 0.029129f, 0.031738f, 0.034821f, 0.037964f, 0.041138f,
- 0.044434f, 0.048035f, 0.051636f, 0.055420f, 0.059540f, 0.063782f, 0.068176f, 0.073181f,
- 0.077881f, 0.083496f, 0.088989f, 0.094849f, 0.101440f, 0.107849f, 0.114441f, 0.121887f,
- 0.129395f, 0.137207f, 0.145874f, 0.154419f, 0.163574f, 0.173462f, 0.183228f, 0.193726f,
- 0.204712f, 0.216064f, 0.227661f, 0.239624f, 0.251709f, 0.264648f, 0.277832f, 0.291504f,
- 0.305664f, 0.320312f, 0.334473f, 0.349854f, 0.365479f, 0.380615f, 0.397217f, 0.414551f,
- 0.432129f, 0.449951f, 0.722656f, 0.740234f, 0.741699f, 0.741211f, 0.739746f, 0.737793f,
- 0.001137f, 0.003654f, 0.005871f, 0.007881f, 0.010262f, 0.012268f, 0.014496f, 0.017059f,
- 0.018890f, 0.021317f, 0.023605f, 0.026291f, 0.029007f, 0.031494f, 0.034515f, 0.036987f,
- 0.040375f, 0.043457f, 0.046936f, 0.050385f, 0.053925f, 0.058044f, 0.061981f, 0.066650f,
- 0.070679f, 0.075562f, 0.080994f, 0.085938f, 0.091919f, 0.098450f, 0.104370f, 0.110840f,
- 0.118164f, 0.125366f, 0.133301f, 0.141357f, 0.150024f, 0.159546f, 0.168457f, 0.178711f,
- 0.189453f, 0.199707f, 0.211060f, 0.222656f, 0.234741f, 0.247314f, 0.260010f, 0.272705f,
- 0.287354f, 0.300781f, 0.315674f, 0.330322f, 0.345947f, 0.362061f, 0.377441f, 0.394775f,
- 0.412109f, 0.429199f, 0.712891f, 0.730957f, 0.733398f, 0.733398f, 0.731445f, 0.729492f,
- 0.001163f, 0.003218f, 0.005329f, 0.007542f, 0.009331f, 0.011330f, 0.013367f, 0.015434f,
- 0.017685f, 0.019714f, 0.021515f, 0.024139f, 0.026062f, 0.028763f, 0.031204f, 0.033722f,
- 0.036163f, 0.039398f, 0.041992f, 0.045624f, 0.048553f, 0.051971f, 0.056000f, 0.059937f,
- 0.063904f, 0.068054f, 0.072876f, 0.077820f, 0.083374f, 0.088623f, 0.094116f, 0.100830f,
- 0.107117f, 0.114197f, 0.121399f, 0.129272f, 0.136963f, 0.145630f, 0.154785f, 0.163696f,
- 0.173828f, 0.184204f, 0.194946f, 0.205933f, 0.217529f, 0.229614f, 0.242676f, 0.255859f,
- 0.269043f, 0.282471f, 0.296387f, 0.311523f, 0.326172f, 0.341553f, 0.357910f, 0.374756f,
- 0.391846f, 0.409180f, 0.701660f, 0.721680f, 0.723633f, 0.724609f, 0.723145f, 0.722656f,
- 0.001008f, 0.003147f, 0.004818f, 0.006882f, 0.008530f, 0.010468f, 0.012390f, 0.013832f,
- 0.016006f, 0.017899f, 0.019608f, 0.021866f, 0.023849f, 0.025940f, 0.027847f, 0.030350f,
- 0.032806f, 0.035187f, 0.037994f, 0.040619f, 0.043732f, 0.046875f, 0.050110f, 0.053833f,
- 0.057617f, 0.061371f, 0.065613f, 0.070068f, 0.074768f, 0.079895f, 0.085144f, 0.090637f,
- 0.096863f, 0.103149f, 0.110107f, 0.116943f, 0.124634f, 0.132568f, 0.140991f, 0.149536f,
- 0.159302f, 0.169189f, 0.179443f, 0.189575f, 0.201538f, 0.213013f, 0.225342f, 0.236938f,
- 0.250244f, 0.264160f, 0.278320f, 0.292236f, 0.307617f, 0.322021f, 0.337891f, 0.354248f,
- 0.371582f, 0.389160f, 0.689941f, 0.712891f, 0.715820f, 0.715820f, 0.715820f, 0.714355f,
- 0.001126f, 0.002708f, 0.004486f, 0.006313f, 0.007927f, 0.009659f, 0.011238f, 0.012833f,
- 0.014435f, 0.015823f, 0.017670f, 0.019485f, 0.021347f, 0.023453f, 0.025101f, 0.027161f,
- 0.029160f, 0.031525f, 0.033752f, 0.036560f, 0.039154f, 0.041687f, 0.044891f, 0.047943f,
- 0.051453f, 0.054871f, 0.058655f, 0.062622f, 0.067078f, 0.071411f, 0.076355f, 0.081665f,
- 0.086792f, 0.092957f, 0.098877f, 0.105713f, 0.112549f, 0.119995f, 0.127563f, 0.135864f,
- 0.144897f, 0.154297f, 0.164185f, 0.173828f, 0.185059f, 0.196045f, 0.208008f, 0.219849f,
- 0.232666f, 0.245483f, 0.259033f, 0.273438f, 0.287842f, 0.302734f, 0.318604f, 0.334473f,
- 0.351318f, 0.369385f, 0.679688f, 0.702637f, 0.707031f, 0.707031f, 0.707031f, 0.705566f,
- 0.000980f, 0.002733f, 0.004021f, 0.005688f, 0.007084f, 0.008553f, 0.010345f, 0.011513f,
- 0.012962f, 0.014297f, 0.015823f, 0.017609f, 0.019119f, 0.020721f, 0.022568f, 0.024200f,
- 0.026291f, 0.028000f, 0.030457f, 0.032410f, 0.034912f, 0.037476f, 0.039734f, 0.042786f,
- 0.045563f, 0.048920f, 0.052185f, 0.055817f, 0.059662f, 0.063660f, 0.067993f, 0.072632f,
- 0.077759f, 0.083191f, 0.088623f, 0.094971f, 0.101135f, 0.107849f, 0.115479f, 0.122864f,
- 0.131592f, 0.139893f, 0.149414f, 0.158447f, 0.169067f, 0.179443f, 0.191040f, 0.202393f,
- 0.214478f, 0.227539f, 0.240723f, 0.255127f, 0.268555f, 0.283447f, 0.298828f, 0.315186f,
- 0.331787f, 0.348389f, 0.667480f, 0.693359f, 0.697754f, 0.698730f, 0.698242f, 0.697754f,
- 0.000870f, 0.002420f, 0.003994f, 0.005165f, 0.006584f, 0.007763f, 0.009209f, 0.010468f,
- 0.011604f, 0.013336f, 0.013977f, 0.015442f, 0.016830f, 0.018509f, 0.020065f, 0.021606f,
- 0.023224f, 0.024933f, 0.026672f, 0.028656f, 0.030914f, 0.033112f, 0.035187f, 0.037689f,
- 0.040344f, 0.043335f, 0.046234f, 0.049438f, 0.052948f, 0.056427f, 0.060394f, 0.064331f,
- 0.069031f, 0.073853f, 0.078735f, 0.084412f, 0.090271f, 0.096436f, 0.103455f, 0.110229f,
- 0.118042f, 0.126099f, 0.134766f, 0.143921f, 0.153198f, 0.163696f, 0.174438f, 0.185913f,
- 0.197754f, 0.210083f, 0.222778f, 0.235962f, 0.250000f, 0.264648f, 0.279053f, 0.294922f,
- 0.311279f, 0.328613f, 0.655273f, 0.684082f, 0.688477f, 0.689941f, 0.689941f, 0.689941f,
- 0.000790f, 0.002153f, 0.003576f, 0.004726f, 0.005966f, 0.007172f, 0.008186f, 0.009453f,
- 0.010521f, 0.011482f, 0.012772f, 0.013771f, 0.015144f, 0.016434f, 0.017792f, 0.019226f,
- 0.020355f, 0.022049f, 0.023666f, 0.025375f, 0.027145f, 0.029297f, 0.030975f, 0.033142f,
- 0.035339f, 0.037964f, 0.040405f, 0.043365f, 0.046478f, 0.049744f, 0.053101f, 0.057068f,
- 0.060944f, 0.065063f, 0.069763f, 0.074646f, 0.079956f, 0.085938f, 0.091675f, 0.098083f,
- 0.105164f, 0.112732f, 0.121033f, 0.129395f, 0.138428f, 0.148560f, 0.158325f, 0.169067f,
- 0.180664f, 0.192139f, 0.205078f, 0.217529f, 0.231934f, 0.246094f, 0.260010f, 0.275391f,
- 0.292236f, 0.309570f, 0.644043f, 0.673340f, 0.678711f, 0.680664f, 0.680664f, 0.680176f,
- 0.000538f, 0.002022f, 0.003185f, 0.004456f, 0.005360f, 0.006321f, 0.007286f, 0.008484f,
- 0.009422f, 0.010185f, 0.011177f, 0.012283f, 0.013191f, 0.014435f, 0.015587f, 0.016769f,
- 0.017914f, 0.019302f, 0.020584f, 0.022171f, 0.023819f, 0.025391f, 0.027222f, 0.028992f,
- 0.030914f, 0.033234f, 0.035461f, 0.037903f, 0.040649f, 0.043396f, 0.046326f, 0.049561f,
- 0.053131f, 0.056946f, 0.061279f, 0.065613f, 0.070374f, 0.075439f, 0.080811f, 0.086731f,
- 0.093140f, 0.100037f, 0.107544f, 0.115662f, 0.124023f, 0.132935f, 0.143066f, 0.153320f,
- 0.163696f, 0.175415f, 0.187012f, 0.200195f, 0.213013f, 0.227173f, 0.241455f, 0.256592f,
- 0.272461f, 0.288330f, 0.632812f, 0.663574f, 0.669434f, 0.670898f, 0.671387f, 0.671875f,
- 0.000686f, 0.001864f, 0.002884f, 0.003883f, 0.004829f, 0.005592f, 0.006504f, 0.007454f,
- 0.008064f, 0.008995f, 0.009850f, 0.010948f, 0.011711f, 0.012581f, 0.013763f, 0.014618f,
- 0.015701f, 0.016953f, 0.018112f, 0.019180f, 0.020691f, 0.021973f, 0.023560f, 0.025192f,
- 0.026962f, 0.028717f, 0.030624f, 0.032959f, 0.035004f, 0.037567f, 0.040314f, 0.043121f,
- 0.046204f, 0.049713f, 0.053284f, 0.057129f, 0.061157f, 0.065796f, 0.071167f, 0.076477f,
- 0.082214f, 0.088379f, 0.095276f, 0.102600f, 0.110596f, 0.118652f, 0.127808f, 0.137817f,
- 0.147705f, 0.158569f, 0.170166f, 0.182251f, 0.195068f, 0.208008f, 0.222656f, 0.237671f,
- 0.252686f, 0.269287f, 0.620605f, 0.653320f, 0.659180f, 0.661621f, 0.663086f, 0.663574f,
- 0.000782f, 0.001828f, 0.002949f, 0.003487f, 0.004421f, 0.005032f, 0.005878f, 0.006557f,
- 0.007332f, 0.008110f, 0.008591f, 0.009537f, 0.010094f, 0.011147f, 0.011864f, 0.012779f,
- 0.013573f, 0.014549f, 0.015625f, 0.016846f, 0.017822f, 0.018936f, 0.020279f, 0.021729f,
- 0.023117f, 0.024704f, 0.026505f, 0.028183f, 0.030289f, 0.032349f, 0.034546f, 0.037109f,
- 0.039703f, 0.042786f, 0.045837f, 0.049133f, 0.053009f, 0.056763f, 0.061584f, 0.066284f,
- 0.071411f, 0.076843f, 0.083191f, 0.089722f, 0.097290f, 0.104919f, 0.113647f, 0.122498f,
- 0.132324f, 0.142578f, 0.153809f, 0.164917f, 0.177612f, 0.190430f, 0.203857f, 0.218506f,
- 0.233887f, 0.249390f, 0.606934f, 0.642578f, 0.649414f, 0.653320f, 0.652832f, 0.654785f,
- 0.000604f, 0.001636f, 0.002550f, 0.003180f, 0.003799f, 0.004498f, 0.005051f, 0.005573f,
- 0.006325f, 0.006836f, 0.007607f, 0.008087f, 0.008820f, 0.009483f, 0.010132f, 0.010918f,
- 0.011665f, 0.012527f, 0.013535f, 0.014297f, 0.015251f, 0.016190f, 0.017288f, 0.018433f,
- 0.019791f, 0.021133f, 0.022400f, 0.023865f, 0.025742f, 0.027664f, 0.029373f, 0.031677f,
- 0.034027f, 0.036255f, 0.039032f, 0.042023f, 0.045197f, 0.048798f, 0.052643f, 0.056824f,
- 0.061493f, 0.066467f, 0.072327f, 0.078308f, 0.084473f, 0.091858f, 0.099609f, 0.108032f,
- 0.117249f, 0.126831f, 0.137451f, 0.148193f, 0.160034f, 0.172729f, 0.186035f, 0.199829f,
- 0.214722f, 0.229980f, 0.596680f, 0.632812f, 0.638672f, 0.642578f, 0.644531f, 0.645020f,
- 0.000447f, 0.001384f, 0.001986f, 0.002697f, 0.003225f, 0.003828f, 0.004501f, 0.005009f,
- 0.005459f, 0.006027f, 0.006474f, 0.006935f, 0.007591f, 0.008217f, 0.008644f, 0.009308f,
- 0.010025f, 0.010498f, 0.011330f, 0.012100f, 0.012909f, 0.013924f, 0.014618f, 0.015610f,
- 0.016739f, 0.017807f, 0.019043f, 0.020340f, 0.021622f, 0.023178f, 0.024979f, 0.026520f,
- 0.028366f, 0.030640f, 0.032959f, 0.035492f, 0.038239f, 0.041260f, 0.044495f, 0.048340f,
- 0.052399f, 0.056732f, 0.061768f, 0.067017f, 0.072754f, 0.079224f, 0.086304f, 0.093994f,
- 0.102478f, 0.111511f, 0.121521f, 0.132080f, 0.143311f, 0.155518f, 0.168213f, 0.181763f,
- 0.196411f, 0.211548f, 0.583008f, 0.621094f, 0.629395f, 0.632324f, 0.634766f, 0.635742f,
- 0.000375f, 0.001324f, 0.001728f, 0.002466f, 0.002872f, 0.003384f, 0.003685f, 0.004185f,
- 0.004845f, 0.005184f, 0.005444f, 0.006130f, 0.006401f, 0.006844f, 0.007446f, 0.007957f,
- 0.008636f, 0.008965f, 0.009659f, 0.010139f, 0.010971f, 0.011742f, 0.012497f, 0.013138f,
- 0.014099f, 0.014992f, 0.015900f, 0.017166f, 0.018143f, 0.019485f, 0.020676f, 0.022156f,
- 0.023697f, 0.025528f, 0.027374f, 0.029556f, 0.031921f, 0.034424f, 0.037445f, 0.040375f,
- 0.044067f, 0.047577f, 0.052155f, 0.056824f, 0.062042f, 0.067688f, 0.074158f, 0.081055f,
- 0.088745f, 0.097351f, 0.106323f, 0.116455f, 0.127075f, 0.138672f, 0.151123f, 0.164062f,
- 0.177856f, 0.192871f, 0.570801f, 0.610840f, 0.619629f, 0.623047f, 0.625488f, 0.625977f,
- 0.000432f, 0.000921f, 0.001664f, 0.002056f, 0.002697f, 0.003061f, 0.003326f, 0.003757f,
- 0.004044f, 0.004379f, 0.004761f, 0.004948f, 0.005463f, 0.005791f, 0.006199f, 0.006752f,
- 0.007229f, 0.007526f, 0.008156f, 0.008621f, 0.009193f, 0.009712f, 0.010330f, 0.010994f,
- 0.011688f, 0.012466f, 0.013374f, 0.014153f, 0.015099f, 0.016083f, 0.017212f, 0.018250f,
- 0.019623f, 0.021210f, 0.022614f, 0.024445f, 0.026321f, 0.028351f, 0.030762f, 0.033325f,
- 0.036377f, 0.039642f, 0.043304f, 0.047485f, 0.051880f, 0.056885f, 0.062469f, 0.068542f,
- 0.075623f, 0.083374f, 0.091919f, 0.101135f, 0.111389f, 0.122559f, 0.134277f, 0.146606f,
- 0.160278f, 0.174683f, 0.557617f, 0.600098f, 0.609375f, 0.612793f, 0.615723f, 0.616699f,
- 0.000255f, 0.000997f, 0.001393f, 0.001908f, 0.002239f, 0.002512f, 0.002720f, 0.003166f,
- 0.003283f, 0.003616f, 0.003866f, 0.004223f, 0.004597f, 0.004795f, 0.005127f, 0.005573f,
- 0.005939f, 0.006359f, 0.006657f, 0.007133f, 0.007687f, 0.008041f, 0.008545f, 0.009087f,
- 0.009636f, 0.010300f, 0.010910f, 0.011757f, 0.012489f, 0.013313f, 0.014153f, 0.014954f,
- 0.016037f, 0.017258f, 0.018555f, 0.019867f, 0.021530f, 0.023239f, 0.025055f, 0.027252f,
- 0.029663f, 0.032379f, 0.035339f, 0.038666f, 0.042664f, 0.047058f, 0.051849f, 0.057465f,
- 0.063416f, 0.070557f, 0.078369f, 0.086731f, 0.096313f, 0.106384f, 0.117798f, 0.129761f,
- 0.143311f, 0.156982f, 0.544922f, 0.588867f, 0.599121f, 0.602539f, 0.605469f, 0.606445f,
- 0.000353f, 0.000879f, 0.001276f, 0.001613f, 0.001785f, 0.002075f, 0.002300f, 0.002501f,
- 0.002808f, 0.003010f, 0.003283f, 0.003487f, 0.003714f, 0.003967f, 0.004269f, 0.004597f,
- 0.004837f, 0.005230f, 0.005512f, 0.005878f, 0.006203f, 0.006626f, 0.007030f, 0.007519f,
- 0.007866f, 0.008354f, 0.009010f, 0.009468f, 0.010017f, 0.010765f, 0.011444f, 0.012291f,
- 0.013100f, 0.014030f, 0.015030f, 0.016098f, 0.017441f, 0.018646f, 0.020157f, 0.021912f,
- 0.023804f, 0.026047f, 0.028488f, 0.031342f, 0.034424f, 0.037994f, 0.042206f, 0.046997f,
- 0.052338f, 0.058533f, 0.065369f, 0.073364f, 0.081787f, 0.091492f, 0.102356f, 0.113647f,
- 0.126343f, 0.139526f, 0.531250f, 0.579102f, 0.587891f, 0.592773f, 0.595703f, 0.596680f,
- 0.000295f, 0.000784f, 0.000912f, 0.001261f, 0.001517f, 0.001761f, 0.001893f, 0.002113f,
- 0.002211f, 0.002432f, 0.002676f, 0.002861f, 0.002993f, 0.003294f, 0.003479f, 0.003700f,
- 0.003933f, 0.004242f, 0.004452f, 0.004745f, 0.004974f, 0.005428f, 0.005642f, 0.006081f,
- 0.006401f, 0.006817f, 0.007240f, 0.007641f, 0.008209f, 0.008667f, 0.009361f, 0.009720f,
- 0.010506f, 0.011261f, 0.012024f, 0.012794f, 0.013840f, 0.014893f, 0.016113f, 0.017395f,
- 0.018860f, 0.020493f, 0.022446f, 0.024658f, 0.027283f, 0.030228f, 0.033691f, 0.037659f,
- 0.042145f, 0.047546f, 0.053467f, 0.060547f, 0.068359f, 0.077332f, 0.087158f, 0.098145f,
- 0.109741f, 0.123230f, 0.517090f, 0.566895f, 0.576660f, 0.581543f, 0.584961f, 0.587402f,
- 0.000247f, 0.000702f, 0.000849f, 0.001033f, 0.001304f, 0.001416f, 0.001576f, 0.001754f,
- 0.001860f, 0.001953f, 0.002104f, 0.002327f, 0.002419f, 0.002651f, 0.002785f, 0.003014f,
- 0.003134f, 0.003315f, 0.003584f, 0.003813f, 0.004078f, 0.004295f, 0.004555f, 0.004784f,
- 0.005013f, 0.005329f, 0.005669f, 0.006069f, 0.006439f, 0.006821f, 0.007381f, 0.007797f,
- 0.008301f, 0.008812f, 0.009430f, 0.010139f, 0.010948f, 0.011642f, 0.012573f, 0.013664f,
- 0.014671f, 0.016052f, 0.017502f, 0.019135f, 0.021255f, 0.023438f, 0.026199f, 0.029312f,
- 0.033203f, 0.037476f, 0.042725f, 0.048828f, 0.055695f, 0.063721f, 0.072937f, 0.082947f,
- 0.094666f, 0.107117f, 0.504883f, 0.555664f, 0.566406f, 0.572754f, 0.574707f, 0.577148f,
- 0.000217f, 0.000516f, 0.000750f, 0.000898f, 0.001011f, 0.001117f, 0.001203f, 0.001307f,
- 0.001470f, 0.001604f, 0.001659f, 0.001750f, 0.001945f, 0.002121f, 0.002249f, 0.002316f,
- 0.002478f, 0.002581f, 0.002832f, 0.003000f, 0.003164f, 0.003334f, 0.003593f, 0.003784f,
- 0.003990f, 0.004196f, 0.004440f, 0.004673f, 0.005035f, 0.005329f, 0.005642f, 0.005981f,
- 0.006462f, 0.006916f, 0.007313f, 0.007805f, 0.008377f, 0.008987f, 0.009727f, 0.010521f,
- 0.011314f, 0.012421f, 0.013466f, 0.014755f, 0.016235f, 0.017914f, 0.019913f, 0.022461f,
- 0.025330f, 0.028778f, 0.033081f, 0.038239f, 0.044189f, 0.051422f, 0.059662f, 0.069336f,
- 0.080200f, 0.091980f, 0.492676f, 0.543945f, 0.555664f, 0.561035f, 0.564453f, 0.566406f,
- 0.000131f, 0.000355f, 0.000605f, 0.000759f, 0.000832f, 0.000904f, 0.001018f, 0.000975f,
- 0.001144f, 0.001235f, 0.001336f, 0.001447f, 0.001518f, 0.001620f, 0.001668f, 0.001835f,
- 0.001901f, 0.002045f, 0.002188f, 0.002270f, 0.002424f, 0.002577f, 0.002707f, 0.002893f,
- 0.003002f, 0.003223f, 0.003407f, 0.003572f, 0.003851f, 0.004017f, 0.004391f, 0.004608f,
- 0.004833f, 0.005203f, 0.005497f, 0.005886f, 0.006351f, 0.006771f, 0.007278f, 0.007858f,
- 0.008560f, 0.009315f, 0.010086f, 0.011078f, 0.012222f, 0.013443f, 0.015022f, 0.016769f,
- 0.018967f, 0.021591f, 0.024780f, 0.028931f, 0.033875f, 0.039734f, 0.047241f, 0.056122f,
- 0.066101f, 0.077637f, 0.477783f, 0.532715f, 0.544922f, 0.551270f, 0.553711f, 0.555664f,
- 0.000245f, 0.000303f, 0.000473f, 0.000498f, 0.000544f, 0.000707f, 0.000700f, 0.000767f,
- 0.000802f, 0.000892f, 0.001021f, 0.001086f, 0.001140f, 0.001260f, 0.001303f, 0.001325f,
- 0.001462f, 0.001553f, 0.001603f, 0.001746f, 0.001816f, 0.001904f, 0.002043f, 0.002127f,
- 0.002254f, 0.002356f, 0.002548f, 0.002672f, 0.002851f, 0.003092f, 0.003265f, 0.003374f,
- 0.003647f, 0.003891f, 0.004097f, 0.004360f, 0.004669f, 0.004997f, 0.005390f, 0.005810f,
- 0.006226f, 0.006756f, 0.007450f, 0.008095f, 0.008934f, 0.009827f, 0.010902f, 0.012268f,
- 0.013840f, 0.015701f, 0.018036f, 0.021072f, 0.024948f, 0.029800f, 0.035980f, 0.043945f,
- 0.053345f, 0.063843f, 0.465576f, 0.520996f, 0.535645f, 0.540039f, 0.543457f, 0.545898f,
- 0.000108f, 0.000275f, 0.000332f, 0.000402f, 0.000462f, 0.000468f, 0.000580f, 0.000522f,
- 0.000616f, 0.000657f, 0.000758f, 0.000762f, 0.000812f, 0.000870f, 0.000945f, 0.000978f,
- 0.001054f, 0.001109f, 0.001179f, 0.001213f, 0.001311f, 0.001371f, 0.001473f, 0.001558f,
- 0.001629f, 0.001718f, 0.001837f, 0.001903f, 0.002016f, 0.002159f, 0.002258f, 0.002478f,
- 0.002548f, 0.002731f, 0.002909f, 0.003086f, 0.003317f, 0.003580f, 0.003885f, 0.004116f,
- 0.004421f, 0.004818f, 0.005264f, 0.005745f, 0.006294f, 0.006966f, 0.007748f, 0.008667f,
- 0.009766f, 0.011086f, 0.012787f, 0.014908f, 0.017746f, 0.021271f, 0.026382f, 0.032990f,
- 0.041199f, 0.051239f, 0.452393f, 0.509277f, 0.522461f, 0.529297f, 0.533203f, 0.535156f,
- 0.000016f, 0.000143f, 0.000244f, 0.000315f, 0.000309f, 0.000391f, 0.000344f, 0.000402f,
- 0.000429f, 0.000517f, 0.000522f, 0.000526f, 0.000546f, 0.000606f, 0.000628f, 0.000705f,
- 0.000692f, 0.000781f, 0.000837f, 0.000868f, 0.000923f, 0.000969f, 0.001013f, 0.001070f,
- 0.001142f, 0.001186f, 0.001273f, 0.001326f, 0.001397f, 0.001534f, 0.001561f, 0.001685f,
- 0.001775f, 0.001873f, 0.002024f, 0.002153f, 0.002272f, 0.002443f, 0.002611f, 0.002800f,
- 0.003014f, 0.003250f, 0.003529f, 0.003868f, 0.004227f, 0.004692f, 0.005192f, 0.005836f,
- 0.006603f, 0.007587f, 0.008751f, 0.010193f, 0.012001f, 0.014610f, 0.018219f, 0.023392f,
- 0.030594f, 0.039795f, 0.437744f, 0.498291f, 0.512207f, 0.517578f, 0.521484f, 0.525391f,
- 0.000102f, 0.000186f, 0.000171f, 0.000181f, 0.000227f, 0.000229f, 0.000231f, 0.000278f,
- 0.000293f, 0.000304f, 0.000314f, 0.000375f, 0.000365f, 0.000411f, 0.000446f, 0.000457f,
- 0.000496f, 0.000513f, 0.000533f, 0.000554f, 0.000603f, 0.000622f, 0.000669f, 0.000708f,
- 0.000757f, 0.000789f, 0.000843f, 0.000875f, 0.000925f, 0.000964f, 0.001037f, 0.001094f,
- 0.001172f, 0.001243f, 0.001324f, 0.001373f, 0.001497f, 0.001570f, 0.001712f, 0.001829f,
- 0.001947f, 0.002123f, 0.002291f, 0.002472f, 0.002703f, 0.003008f, 0.003342f, 0.003757f,
- 0.004204f, 0.004810f, 0.005539f, 0.006554f, 0.007828f, 0.009537f, 0.011894f, 0.015442f,
- 0.021072f, 0.029282f, 0.424561f, 0.486084f, 0.500488f, 0.506836f, 0.512207f, 0.514648f,
- 0.000014f, 0.000127f, 0.000112f, 0.000109f, 0.000143f, 0.000165f, 0.000141f, 0.000180f,
- 0.000185f, 0.000191f, 0.000196f, 0.000203f, 0.000233f, 0.000252f, 0.000260f, 0.000274f,
- 0.000288f, 0.000314f, 0.000328f, 0.000363f, 0.000362f, 0.000374f, 0.000400f, 0.000436f,
- 0.000464f, 0.000501f, 0.000504f, 0.000521f, 0.000563f, 0.000593f, 0.000635f, 0.000671f,
- 0.000712f, 0.000740f, 0.000800f, 0.000837f, 0.000892f, 0.000955f, 0.001030f, 0.001092f,
- 0.001167f, 0.001270f, 0.001369f, 0.001491f, 0.001626f, 0.001769f, 0.001993f, 0.002209f,
- 0.002523f, 0.002863f, 0.003325f, 0.003880f, 0.004715f, 0.005764f, 0.007320f, 0.009468f,
- 0.013344f, 0.020187f, 0.410645f, 0.473877f, 0.489258f, 0.496826f, 0.500488f, 0.503906f,
- 0.000103f, 0.000078f, 0.000067f, 0.000065f, 0.000086f, 0.000085f, 0.000101f, 0.000106f,
- 0.000106f, 0.000107f, 0.000115f, 0.000133f, 0.000118f, 0.000133f, 0.000154f, 0.000150f,
- 0.000167f, 0.000177f, 0.000180f, 0.000190f, 0.000207f, 0.000213f, 0.000228f, 0.000238f,
- 0.000267f, 0.000277f, 0.000287f, 0.000298f, 0.000313f, 0.000325f, 0.000347f, 0.000375f,
- 0.000393f, 0.000405f, 0.000440f, 0.000463f, 0.000486f, 0.000527f, 0.000562f, 0.000599f,
- 0.000639f, 0.000688f, 0.000757f, 0.000807f, 0.000879f, 0.000961f, 0.001059f, 0.001180f,
- 0.001342f, 0.001533f, 0.001762f, 0.002102f, 0.002502f, 0.003128f, 0.004028f, 0.005379f,
- 0.007591f, 0.012505f, 0.397217f, 0.462891f, 0.478760f, 0.485840f, 0.490479f, 0.492676f,
- 0.000087f, 0.000063f, 0.000054f, 0.000048f, 0.000047f, 0.000044f, 0.000046f, 0.000047f,
- 0.000047f, 0.000060f, 0.000053f, 0.000056f, 0.000072f, 0.000060f, 0.000064f, 0.000069f,
- 0.000078f, 0.000085f, 0.000084f, 0.000090f, 0.000094f, 0.000102f, 0.000105f, 0.000111f,
- 0.000116f, 0.000126f, 0.000132f, 0.000150f, 0.000147f, 0.000158f, 0.000167f, 0.000178f,
- 0.000185f, 0.000192f, 0.000211f, 0.000216f, 0.000226f, 0.000246f, 0.000265f, 0.000284f,
- 0.000299f, 0.000325f, 0.000349f, 0.000381f, 0.000415f, 0.000448f, 0.000490f, 0.000544f,
- 0.000612f, 0.000694f, 0.000798f, 0.000943f, 0.001139f, 0.001436f, 0.001870f, 0.002586f,
- 0.003817f, 0.006474f, 0.383545f, 0.450195f, 0.467041f, 0.474365f, 0.478760f, 0.482422f,
- 0.000065f, 0.000045f, 0.000037f, 0.000033f, 0.000030f, 0.000028f, 0.000026f, 0.000025f,
- 0.000024f, 0.000022f, 0.000021f, 0.000025f, 0.000020f, 0.000021f, 0.000025f, 0.000029f,
- 0.000028f, 0.000031f, 0.000033f, 0.000034f, 0.000036f, 0.000041f, 0.000045f, 0.000040f,
- 0.000045f, 0.000049f, 0.000051f, 0.000048f, 0.000055f, 0.000057f, 0.000061f, 0.000066f,
- 0.000072f, 0.000068f, 0.000073f, 0.000078f, 0.000087f, 0.000089f, 0.000097f, 0.000104f,
- 0.000113f, 0.000115f, 0.000128f, 0.000137f, 0.000148f, 0.000160f, 0.000174f, 0.000194f,
- 0.000221f, 0.000248f, 0.000283f, 0.000324f, 0.000396f, 0.000496f, 0.000657f, 0.000928f,
- 0.001479f, 0.002684f, 0.371094f, 0.438477f, 0.455078f, 0.463867f, 0.468750f, 0.471191f,
- 0.000029f, 0.000019f, 0.000016f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
- 0.000012f, 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f,
- 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000007f, 0.000008f, 0.000007f,
- 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000011f, 0.000012f, 0.000013f,
- 0.000015f, 0.000017f, 0.000018f, 0.000018f, 0.000020f, 0.000019f, 0.000021f, 0.000024f,
- 0.000024f, 0.000026f, 0.000028f, 0.000031f, 0.000031f, 0.000035f, 0.000040f, 0.000041f,
- 0.000045f, 0.000052f, 0.000059f, 0.000071f, 0.000083f, 0.000099f, 0.000132f, 0.000188f,
- 0.000315f, 0.000712f, 0.356934f, 0.426514f, 0.444824f, 0.452637f, 0.457520f, 0.460938f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000001f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000006f,
- 0.000010f, 0.000027f, 0.343750f, 0.414795f, 0.433105f, 0.441895f, 0.446289f, 0.449951f,
- },
- {
- 0.012436f, 0.037598f, 0.062805f, 0.087891f, 0.113037f, 0.137329f, 0.161621f, 0.185425f,
- 0.209717f, 0.232544f, 0.255371f, 0.278076f, 0.300049f, 0.321289f, 0.343506f, 0.364014f,
- 0.385010f, 0.404785f, 0.424561f, 0.444824f, 0.463623f, 0.482422f, 0.501465f, 0.520020f,
- 0.537598f, 0.554688f, 0.572266f, 0.589355f, 0.605957f, 0.622070f, 0.639648f, 0.655273f,
- 0.670410f, 0.685547f, 0.700684f, 0.715332f, 0.730469f, 0.744629f, 0.758301f, 0.771973f,
- 0.785156f, 0.799316f, 0.812012f, 0.825684f, 0.837891f, 0.850586f, 0.863281f, 0.875000f,
- 0.887207f, 0.898926f, 0.910156f, 0.921387f, 0.933105f, 0.944336f, 0.954102f, 0.964844f,
- 0.976074f, 0.985840f, 0.978027f, 0.947266f, 0.925781f, 0.907715f, 0.892090f, 0.877930f,
- 0.011276f, 0.034546f, 0.058289f, 0.082031f, 0.105469f, 0.128662f, 0.152344f, 0.174805f,
- 0.197876f, 0.219604f, 0.241455f, 0.263672f, 0.284912f, 0.306152f, 0.326416f, 0.347168f,
- 0.366699f, 0.387695f, 0.406494f, 0.426025f, 0.444824f, 0.463379f, 0.481934f, 0.500000f,
- 0.518066f, 0.535645f, 0.552246f, 0.569824f, 0.586426f, 0.603027f, 0.619141f, 0.634766f,
- 0.650391f, 0.666016f, 0.681152f, 0.695801f, 0.710938f, 0.725586f, 0.739258f, 0.753906f,
- 0.768066f, 0.781250f, 0.794922f, 0.807617f, 0.821289f, 0.833496f, 0.846191f, 0.858398f,
- 0.870605f, 0.882812f, 0.894531f, 0.906250f, 0.917480f, 0.929199f, 0.939453f, 0.951660f,
- 0.961426f, 0.972656f, 0.971680f, 0.942871f, 0.921875f, 0.904785f, 0.889160f, 0.875977f,
- 0.010628f, 0.032288f, 0.054932f, 0.076172f, 0.099060f, 0.121216f, 0.142700f, 0.164795f,
- 0.186279f, 0.207642f, 0.229248f, 0.249756f, 0.269531f, 0.291016f, 0.310791f, 0.331543f,
- 0.349609f, 0.369385f, 0.388916f, 0.409180f, 0.427246f, 0.444824f, 0.463135f, 0.480713f,
- 0.499512f, 0.516602f, 0.533203f, 0.550293f, 0.567383f, 0.583496f, 0.599609f, 0.615723f,
- 0.630859f, 0.646973f, 0.661621f, 0.677246f, 0.691895f, 0.705566f, 0.720703f, 0.735352f,
- 0.749512f, 0.763184f, 0.776367f, 0.790039f, 0.803223f, 0.816406f, 0.828613f, 0.842285f,
- 0.854492f, 0.867676f, 0.878418f, 0.890137f, 0.902832f, 0.913086f, 0.925293f, 0.936035f,
- 0.947754f, 0.958008f, 0.964844f, 0.937500f, 0.917480f, 0.901367f, 0.886719f, 0.873535f,
- 0.009926f, 0.030167f, 0.050995f, 0.071594f, 0.092346f, 0.113892f, 0.134399f, 0.154663f,
- 0.175537f, 0.195679f, 0.216309f, 0.235840f, 0.256104f, 0.276611f, 0.295654f, 0.314453f,
- 0.333496f, 0.353027f, 0.370850f, 0.389404f, 0.408936f, 0.427490f, 0.445312f, 0.462891f,
- 0.480225f, 0.497803f, 0.513672f, 0.531250f, 0.547363f, 0.563965f, 0.580078f, 0.597168f,
- 0.612305f, 0.627930f, 0.642578f, 0.658691f, 0.673340f, 0.687500f, 0.702637f, 0.717285f,
- 0.731445f, 0.744629f, 0.758301f, 0.772461f, 0.786133f, 0.799316f, 0.811523f, 0.824707f,
- 0.837891f, 0.849121f, 0.861816f, 0.874023f, 0.887207f, 0.898438f, 0.910156f, 0.920898f,
- 0.932617f, 0.943848f, 0.958008f, 0.932129f, 0.913086f, 0.897461f, 0.883301f, 0.871094f,
- 0.009178f, 0.028107f, 0.047729f, 0.066895f, 0.086182f, 0.106384f, 0.125977f, 0.145386f,
- 0.165527f, 0.184937f, 0.203857f, 0.224121f, 0.242676f, 0.261475f, 0.281006f, 0.300049f,
- 0.318604f, 0.336426f, 0.355469f, 0.372314f, 0.391113f, 0.409424f, 0.426514f, 0.444092f,
- 0.461426f, 0.477783f, 0.495850f, 0.512207f, 0.528809f, 0.544434f, 0.561035f, 0.576660f,
- 0.593262f, 0.608398f, 0.623047f, 0.638184f, 0.655273f, 0.668945f, 0.682617f, 0.697754f,
- 0.712402f, 0.726562f, 0.740234f, 0.753906f, 0.768066f, 0.781250f, 0.794434f, 0.807617f,
- 0.820312f, 0.833496f, 0.845215f, 0.858398f, 0.870605f, 0.881836f, 0.894043f, 0.906738f,
- 0.917480f, 0.928711f, 0.951172f, 0.926758f, 0.909180f, 0.893555f, 0.880859f, 0.868164f,
- 0.008667f, 0.025986f, 0.044922f, 0.062805f, 0.081421f, 0.099854f, 0.118347f, 0.137085f,
- 0.155518f, 0.173828f, 0.193115f, 0.211304f, 0.229858f, 0.248413f, 0.266602f, 0.285400f,
- 0.303223f, 0.321045f, 0.339111f, 0.357178f, 0.373779f, 0.391357f, 0.409424f, 0.426270f,
- 0.443115f, 0.460449f, 0.476807f, 0.494141f, 0.510254f, 0.526855f, 0.541992f, 0.559082f,
- 0.574219f, 0.589355f, 0.605469f, 0.620117f, 0.636230f, 0.649902f, 0.664551f, 0.678711f,
- 0.693848f, 0.707031f, 0.723145f, 0.736328f, 0.750977f, 0.762695f, 0.776855f, 0.790039f,
- 0.803223f, 0.816406f, 0.828613f, 0.842285f, 0.853516f, 0.866211f, 0.878906f, 0.890625f,
- 0.902832f, 0.913574f, 0.944336f, 0.921875f, 0.903809f, 0.889160f, 0.876953f, 0.865234f,
- 0.008057f, 0.024658f, 0.041321f, 0.058411f, 0.075989f, 0.093811f, 0.110535f, 0.128784f,
- 0.146729f, 0.164307f, 0.182007f, 0.200073f, 0.217773f, 0.234619f, 0.252930f, 0.271240f,
- 0.288086f, 0.306152f, 0.322998f, 0.341064f, 0.357910f, 0.374756f, 0.391357f, 0.409180f,
- 0.425293f, 0.442383f, 0.458496f, 0.475342f, 0.491455f, 0.507324f, 0.523438f, 0.539551f,
- 0.555176f, 0.570312f, 0.585938f, 0.601074f, 0.616699f, 0.631836f, 0.646484f, 0.660645f,
- 0.676270f, 0.688477f, 0.704102f, 0.718262f, 0.731445f, 0.745117f, 0.760254f, 0.771484f,
- 0.785156f, 0.799316f, 0.812500f, 0.824707f, 0.836914f, 0.850098f, 0.862793f, 0.874512f,
- 0.886719f, 0.898438f, 0.937500f, 0.915527f, 0.899414f, 0.885254f, 0.872559f, 0.861816f,
- 0.007477f, 0.022919f, 0.038971f, 0.054901f, 0.070801f, 0.087646f, 0.104065f, 0.121155f,
- 0.137573f, 0.155029f, 0.171875f, 0.188721f, 0.206177f, 0.222778f, 0.240112f, 0.257080f,
- 0.274170f, 0.290283f, 0.308350f, 0.324463f, 0.342041f, 0.358154f, 0.375488f, 0.391113f,
- 0.407471f, 0.424561f, 0.440430f, 0.456787f, 0.474121f, 0.489746f, 0.505371f, 0.521484f,
- 0.536133f, 0.552246f, 0.565918f, 0.582031f, 0.597168f, 0.613281f, 0.626953f, 0.642578f,
- 0.656738f, 0.670898f, 0.684570f, 0.699219f, 0.712891f, 0.727539f, 0.741211f, 0.754395f,
- 0.768066f, 0.781738f, 0.794434f, 0.808105f, 0.820312f, 0.833984f, 0.846680f, 0.858887f,
- 0.871582f, 0.883301f, 0.930176f, 0.910156f, 0.894043f, 0.880371f, 0.868652f, 0.858398f,
- 0.007023f, 0.021240f, 0.036224f, 0.051300f, 0.066467f, 0.082092f, 0.097900f, 0.113892f,
- 0.129517f, 0.145752f, 0.161743f, 0.178223f, 0.194702f, 0.210327f, 0.227661f, 0.243408f,
- 0.260986f, 0.276855f, 0.292725f, 0.309814f, 0.326172f, 0.342041f, 0.358398f, 0.375732f,
- 0.391113f, 0.406982f, 0.422852f, 0.438965f, 0.454590f, 0.471191f, 0.486816f, 0.502441f,
- 0.517578f, 0.533203f, 0.548340f, 0.562988f, 0.578613f, 0.593750f, 0.609375f, 0.623535f,
- 0.638184f, 0.652832f, 0.666992f, 0.680664f, 0.695312f, 0.708984f, 0.722656f, 0.736816f,
- 0.750000f, 0.764160f, 0.777344f, 0.789551f, 0.803223f, 0.816895f, 0.830078f, 0.842773f,
- 0.854980f, 0.868652f, 0.922852f, 0.904297f, 0.889160f, 0.875977f, 0.864746f, 0.854492f,
- 0.006458f, 0.019913f, 0.033691f, 0.048126f, 0.062744f, 0.077026f, 0.092224f, 0.106567f,
- 0.122192f, 0.137207f, 0.152222f, 0.167725f, 0.183838f, 0.199951f, 0.215088f, 0.231323f,
- 0.246826f, 0.262695f, 0.279053f, 0.294678f, 0.310547f, 0.326172f, 0.342041f, 0.358887f,
- 0.374268f, 0.389893f, 0.405518f, 0.421143f, 0.437012f, 0.452637f, 0.467773f, 0.483643f,
- 0.499512f, 0.513672f, 0.529785f, 0.545410f, 0.560059f, 0.575195f, 0.590332f, 0.604980f,
- 0.618652f, 0.634277f, 0.648438f, 0.662598f, 0.676270f, 0.690918f, 0.704102f, 0.718750f,
- 0.732422f, 0.745605f, 0.760254f, 0.773438f, 0.786621f, 0.801270f, 0.812988f, 0.826172f,
- 0.839844f, 0.851562f, 0.915527f, 0.897949f, 0.883789f, 0.871094f, 0.860352f, 0.850586f,
- 0.006077f, 0.018921f, 0.031464f, 0.045258f, 0.058411f, 0.072144f, 0.085999f, 0.100220f,
- 0.114258f, 0.129028f, 0.143677f, 0.158691f, 0.173584f, 0.188477f, 0.203247f, 0.219238f,
- 0.234497f, 0.249634f, 0.264893f, 0.280273f, 0.295410f, 0.310791f, 0.326904f, 0.342285f,
- 0.357910f, 0.373535f, 0.388428f, 0.404053f, 0.420166f, 0.435303f, 0.450195f, 0.465332f,
- 0.481201f, 0.496338f, 0.511230f, 0.525879f, 0.540527f, 0.556641f, 0.570312f, 0.585938f,
- 0.600098f, 0.614746f, 0.629883f, 0.644531f, 0.657715f, 0.672363f, 0.687012f, 0.700684f,
- 0.714355f, 0.729004f, 0.742188f, 0.755371f, 0.769531f, 0.782227f, 0.796875f, 0.810059f,
- 0.823242f, 0.836426f, 0.907715f, 0.891602f, 0.877930f, 0.866211f, 0.855957f, 0.846680f,
- 0.005596f, 0.017654f, 0.029587f, 0.041840f, 0.055115f, 0.067871f, 0.080566f, 0.093994f,
- 0.107361f, 0.120911f, 0.134766f, 0.149414f, 0.163452f, 0.177979f, 0.192261f, 0.206787f,
- 0.221191f, 0.236816f, 0.250732f, 0.266113f, 0.281250f, 0.295898f, 0.311279f, 0.326904f,
- 0.342041f, 0.356201f, 0.371826f, 0.387451f, 0.402344f, 0.417236f, 0.432373f, 0.447266f,
- 0.462891f, 0.477539f, 0.492432f, 0.506836f, 0.522949f, 0.536621f, 0.551758f, 0.566895f,
- 0.582031f, 0.596191f, 0.610352f, 0.625488f, 0.640625f, 0.653320f, 0.668457f, 0.682617f,
- 0.696777f, 0.710449f, 0.724609f, 0.739258f, 0.751465f, 0.765625f, 0.780273f, 0.792480f,
- 0.806152f, 0.820801f, 0.899902f, 0.885742f, 0.872070f, 0.861328f, 0.851562f, 0.842285f,
- 0.005451f, 0.016479f, 0.028259f, 0.039856f, 0.051331f, 0.063416f, 0.075867f, 0.088196f,
- 0.100952f, 0.113770f, 0.126953f, 0.140747f, 0.153564f, 0.167847f, 0.181519f, 0.195679f,
- 0.210083f, 0.223633f, 0.237427f, 0.252197f, 0.267334f, 0.281738f, 0.296143f, 0.311035f,
- 0.325928f, 0.340332f, 0.355469f, 0.370361f, 0.385010f, 0.400635f, 0.415039f, 0.429688f,
- 0.444092f, 0.459717f, 0.474121f, 0.489258f, 0.503906f, 0.519043f, 0.533203f, 0.548828f,
- 0.562012f, 0.577637f, 0.591797f, 0.606445f, 0.621582f, 0.635742f, 0.650391f, 0.664551f,
- 0.678223f, 0.692871f, 0.706055f, 0.721191f, 0.733887f, 0.747559f, 0.762207f, 0.775879f,
- 0.791016f, 0.804199f, 0.892090f, 0.878906f, 0.866699f, 0.855957f, 0.846191f, 0.837891f,
- 0.004963f, 0.015343f, 0.026169f, 0.037079f, 0.047943f, 0.059570f, 0.070801f, 0.083008f,
- 0.095093f, 0.106750f, 0.119507f, 0.132080f, 0.145142f, 0.158569f, 0.171143f, 0.184692f,
- 0.198730f, 0.211792f, 0.225830f, 0.239380f, 0.253662f, 0.267578f, 0.281738f, 0.295898f,
- 0.309814f, 0.324219f, 0.340088f, 0.353760f, 0.368164f, 0.383057f, 0.397705f, 0.412842f,
- 0.426758f, 0.441406f, 0.456787f, 0.470947f, 0.485352f, 0.500000f, 0.515137f, 0.529785f,
- 0.543945f, 0.559082f, 0.572754f, 0.588379f, 0.602539f, 0.616699f, 0.631348f, 0.645996f,
- 0.659180f, 0.674805f, 0.689453f, 0.703125f, 0.716797f, 0.729980f, 0.744629f, 0.758789f,
- 0.772461f, 0.786621f, 0.883789f, 0.872070f, 0.860840f, 0.850586f, 0.841309f, 0.833008f,
- 0.004726f, 0.014549f, 0.024109f, 0.034668f, 0.044708f, 0.055573f, 0.066467f, 0.077820f,
- 0.088928f, 0.100342f, 0.112000f, 0.124390f, 0.136230f, 0.148804f, 0.161621f, 0.173950f,
- 0.186768f, 0.200439f, 0.213623f, 0.226074f, 0.239868f, 0.253418f, 0.267090f, 0.281250f,
- 0.295410f, 0.309570f, 0.323486f, 0.337891f, 0.352295f, 0.365967f, 0.381104f, 0.394775f,
- 0.409180f, 0.423828f, 0.438477f, 0.452881f, 0.467773f, 0.481689f, 0.496582f, 0.511230f,
- 0.525391f, 0.539551f, 0.554199f, 0.568848f, 0.583984f, 0.599121f, 0.612305f, 0.627441f,
- 0.641113f, 0.656250f, 0.669922f, 0.684570f, 0.699219f, 0.713379f, 0.727539f, 0.741699f,
- 0.755859f, 0.771484f, 0.875488f, 0.865723f, 0.854492f, 0.845215f, 0.836426f, 0.828613f,
- 0.004452f, 0.013359f, 0.022690f, 0.032745f, 0.042297f, 0.051910f, 0.061920f, 0.072693f,
- 0.083496f, 0.094177f, 0.105408f, 0.116760f, 0.128174f, 0.140137f, 0.151855f, 0.164185f,
- 0.176758f, 0.189087f, 0.201660f, 0.214478f, 0.227173f, 0.240356f, 0.253906f, 0.267578f,
- 0.280273f, 0.294922f, 0.307373f, 0.321045f, 0.336670f, 0.350098f, 0.363770f, 0.378174f,
- 0.392334f, 0.406006f, 0.420410f, 0.434082f, 0.448975f, 0.463623f, 0.478271f, 0.492676f,
- 0.506836f, 0.520996f, 0.536133f, 0.550781f, 0.565430f, 0.580078f, 0.593750f, 0.608887f,
- 0.623047f, 0.638184f, 0.651367f, 0.666016f, 0.681152f, 0.695312f, 0.709473f, 0.723145f,
- 0.738281f, 0.752930f, 0.867676f, 0.858398f, 0.848633f, 0.839355f, 0.831055f, 0.823730f,
- 0.004143f, 0.012794f, 0.021713f, 0.030396f, 0.039551f, 0.048645f, 0.058563f, 0.068176f,
- 0.078308f, 0.088928f, 0.098328f, 0.109924f, 0.120728f, 0.131592f, 0.142944f, 0.154175f,
- 0.165771f, 0.178223f, 0.190186f, 0.202881f, 0.214844f, 0.227417f, 0.240845f, 0.253906f,
- 0.265869f, 0.279541f, 0.293213f, 0.305908f, 0.320068f, 0.333496f, 0.347168f, 0.361816f,
- 0.375000f, 0.389160f, 0.403320f, 0.417236f, 0.431396f, 0.444824f, 0.459473f, 0.473633f,
- 0.488525f, 0.503418f, 0.517578f, 0.532227f, 0.545410f, 0.560547f, 0.575684f, 0.590332f,
- 0.604004f, 0.618652f, 0.632812f, 0.647949f, 0.663086f, 0.676758f, 0.691895f, 0.706543f,
- 0.721191f, 0.735840f, 0.859375f, 0.852539f, 0.842773f, 0.833496f, 0.824707f, 0.818848f,
- 0.003839f, 0.012062f, 0.020126f, 0.028366f, 0.036774f, 0.045593f, 0.054718f, 0.063416f,
- 0.073120f, 0.082825f, 0.092957f, 0.102966f, 0.113464f, 0.123535f, 0.134277f, 0.145020f,
- 0.155762f, 0.167847f, 0.179199f, 0.190796f, 0.202393f, 0.214844f, 0.227417f, 0.239868f,
- 0.252197f, 0.264648f, 0.277588f, 0.291016f, 0.304199f, 0.317383f, 0.330811f, 0.343750f,
- 0.357422f, 0.371826f, 0.385254f, 0.399902f, 0.413574f, 0.427246f, 0.441162f, 0.455566f,
- 0.469971f, 0.484375f, 0.498535f, 0.514160f, 0.527344f, 0.541992f, 0.556152f, 0.570312f,
- 0.585449f, 0.600098f, 0.614746f, 0.629883f, 0.645508f, 0.658203f, 0.673340f, 0.688477f,
- 0.703125f, 0.718262f, 0.851074f, 0.844727f, 0.835938f, 0.827637f, 0.820312f, 0.812988f,
- 0.003786f, 0.011147f, 0.018921f, 0.026550f, 0.034729f, 0.042664f, 0.051117f, 0.060028f,
- 0.068298f, 0.077454f, 0.086914f, 0.096130f, 0.105835f, 0.115662f, 0.126343f, 0.136475f,
- 0.146606f, 0.157715f, 0.168457f, 0.180176f, 0.191528f, 0.202759f, 0.215088f, 0.226929f,
- 0.239014f, 0.251221f, 0.263428f, 0.275391f, 0.289062f, 0.301514f, 0.314941f, 0.328369f,
- 0.341797f, 0.354736f, 0.367676f, 0.382324f, 0.395264f, 0.409912f, 0.423340f, 0.437012f,
- 0.451660f, 0.465576f, 0.480469f, 0.494629f, 0.508301f, 0.522949f, 0.538086f, 0.551758f,
- 0.567383f, 0.582031f, 0.596191f, 0.610840f, 0.625977f, 0.639648f, 0.655273f, 0.670410f,
- 0.685547f, 0.700684f, 0.842285f, 0.837402f, 0.829590f, 0.821289f, 0.813965f, 0.808105f,
- 0.003504f, 0.010445f, 0.017609f, 0.025131f, 0.032349f, 0.040314f, 0.047485f, 0.055756f,
- 0.064026f, 0.072571f, 0.080872f, 0.089661f, 0.099426f, 0.108459f, 0.118286f, 0.127930f,
- 0.137817f, 0.147583f, 0.158203f, 0.169189f, 0.180908f, 0.191040f, 0.203003f, 0.214111f,
- 0.225708f, 0.237549f, 0.249023f, 0.261475f, 0.273926f, 0.286865f, 0.299316f, 0.311768f,
- 0.325684f, 0.338623f, 0.351562f, 0.364746f, 0.378418f, 0.392578f, 0.405518f, 0.419678f,
- 0.433105f, 0.447998f, 0.461670f, 0.475830f, 0.490479f, 0.503906f, 0.519531f, 0.533203f,
- 0.547852f, 0.562988f, 0.576660f, 0.591797f, 0.606445f, 0.622070f, 0.636719f, 0.652344f,
- 0.666504f, 0.682617f, 0.833496f, 0.830078f, 0.822754f, 0.815918f, 0.808594f, 0.802734f,
- 0.003447f, 0.009941f, 0.016373f, 0.023300f, 0.030228f, 0.037689f, 0.044128f, 0.052551f,
- 0.059845f, 0.068115f, 0.076538f, 0.083862f, 0.092896f, 0.101440f, 0.110596f, 0.119995f,
- 0.129028f, 0.138916f, 0.148926f, 0.158936f, 0.169189f, 0.180176f, 0.190308f, 0.201416f,
- 0.212769f, 0.224365f, 0.235962f, 0.247192f, 0.259033f, 0.271973f, 0.283936f, 0.296631f,
- 0.309570f, 0.321777f, 0.334961f, 0.348389f, 0.361572f, 0.374756f, 0.388184f, 0.401611f,
- 0.415771f, 0.429443f, 0.443359f, 0.457520f, 0.471436f, 0.486084f, 0.500977f, 0.514648f,
- 0.528809f, 0.543457f, 0.558594f, 0.573242f, 0.588867f, 0.603516f, 0.617676f, 0.633301f,
- 0.648926f, 0.664551f, 0.824219f, 0.823242f, 0.815918f, 0.809082f, 0.802246f, 0.796387f,
- 0.003141f, 0.009407f, 0.015251f, 0.021851f, 0.028107f, 0.034882f, 0.041779f, 0.048340f,
- 0.056244f, 0.062988f, 0.071106f, 0.078796f, 0.087036f, 0.094910f, 0.103149f, 0.112305f,
- 0.121460f, 0.130371f, 0.139404f, 0.149048f, 0.159180f, 0.169189f, 0.179565f, 0.189087f,
- 0.200317f, 0.211548f, 0.222412f, 0.233765f, 0.245117f, 0.257324f, 0.269043f, 0.281006f,
- 0.293213f, 0.305664f, 0.318848f, 0.331055f, 0.343750f, 0.358398f, 0.369873f, 0.384033f,
- 0.397217f, 0.411865f, 0.424805f, 0.438965f, 0.453125f, 0.467529f, 0.481689f, 0.495850f,
- 0.510254f, 0.524414f, 0.539551f, 0.554688f, 0.569824f, 0.584961f, 0.599121f, 0.614258f,
- 0.629883f, 0.645020f, 0.815430f, 0.814453f, 0.809570f, 0.802734f, 0.796875f, 0.791504f,
- 0.002838f, 0.008461f, 0.014236f, 0.020676f, 0.026749f, 0.032593f, 0.039032f, 0.045715f,
- 0.052216f, 0.059479f, 0.066467f, 0.073608f, 0.080933f, 0.088623f, 0.096619f, 0.104919f,
- 0.113098f, 0.121521f, 0.130493f, 0.139526f, 0.148560f, 0.158203f, 0.167969f, 0.177979f,
- 0.187988f, 0.198730f, 0.208862f, 0.220093f, 0.231323f, 0.242798f, 0.253906f, 0.265869f,
- 0.278320f, 0.289551f, 0.302246f, 0.314941f, 0.327393f, 0.340088f, 0.353516f, 0.365967f,
- 0.379883f, 0.392822f, 0.406738f, 0.420898f, 0.434814f, 0.447998f, 0.462891f, 0.477539f,
- 0.491455f, 0.506836f, 0.520996f, 0.536133f, 0.550781f, 0.565918f, 0.581055f, 0.596680f,
- 0.611816f, 0.627441f, 0.806152f, 0.807617f, 0.801270f, 0.796387f, 0.790039f, 0.784668f,
- 0.002689f, 0.008102f, 0.013618f, 0.019058f, 0.024719f, 0.030548f, 0.036560f, 0.042725f,
- 0.048615f, 0.054779f, 0.061615f, 0.068604f, 0.075012f, 0.082703f, 0.090271f, 0.097900f,
- 0.105530f, 0.113586f, 0.121826f, 0.130371f, 0.139282f, 0.147705f, 0.157349f, 0.166504f,
- 0.176147f, 0.186401f, 0.196289f, 0.207520f, 0.217651f, 0.228394f, 0.239868f, 0.251465f,
- 0.262451f, 0.274414f, 0.286377f, 0.298828f, 0.311035f, 0.323730f, 0.336670f, 0.349121f,
- 0.362549f, 0.375244f, 0.389160f, 0.402344f, 0.417236f, 0.429932f, 0.443848f, 0.458984f,
- 0.472168f, 0.487793f, 0.501953f, 0.517578f, 0.531738f, 0.546875f, 0.561523f, 0.576660f,
- 0.593262f, 0.608398f, 0.797852f, 0.798828f, 0.794922f, 0.789551f, 0.784668f, 0.779297f,
- 0.002666f, 0.007462f, 0.012596f, 0.018066f, 0.023026f, 0.028412f, 0.033813f, 0.039398f,
- 0.045166f, 0.051239f, 0.057587f, 0.063721f, 0.070312f, 0.077148f, 0.084167f, 0.090820f,
- 0.098267f, 0.105591f, 0.113159f, 0.121460f, 0.129761f, 0.138428f, 0.147217f, 0.156128f,
- 0.165283f, 0.174438f, 0.183960f, 0.194092f, 0.204834f, 0.214844f, 0.225830f, 0.236816f,
- 0.247925f, 0.259033f, 0.270752f, 0.282227f, 0.294678f, 0.306641f, 0.319336f, 0.332031f,
- 0.344482f, 0.357910f, 0.371094f, 0.384033f, 0.398682f, 0.412109f, 0.425781f, 0.440186f,
- 0.454102f, 0.468018f, 0.482910f, 0.497314f, 0.512207f, 0.528320f, 0.542969f, 0.558594f,
- 0.573242f, 0.589355f, 0.787598f, 0.791016f, 0.787109f, 0.781738f, 0.777344f, 0.772461f,
- 0.002569f, 0.007069f, 0.012199f, 0.016739f, 0.021393f, 0.026672f, 0.031189f, 0.037109f,
- 0.042480f, 0.047729f, 0.053345f, 0.059387f, 0.065430f, 0.071838f, 0.078186f, 0.084167f,
- 0.091492f, 0.098816f, 0.105774f, 0.112976f, 0.121155f, 0.129028f, 0.136963f, 0.145508f,
- 0.153687f, 0.163086f, 0.172363f, 0.181885f, 0.191406f, 0.201782f, 0.211670f, 0.222412f,
- 0.233032f, 0.244263f, 0.255371f, 0.266846f, 0.278809f, 0.290527f, 0.302734f, 0.314697f,
- 0.327393f, 0.340820f, 0.353027f, 0.366455f, 0.380127f, 0.393799f, 0.406006f, 0.421143f,
- 0.435059f, 0.449707f, 0.463623f, 0.479248f, 0.494141f, 0.509277f, 0.523438f, 0.539551f,
- 0.555176f, 0.570801f, 0.778320f, 0.783203f, 0.779785f, 0.775879f, 0.770996f, 0.767090f,
- 0.002398f, 0.006733f, 0.010918f, 0.015495f, 0.020203f, 0.024963f, 0.029663f, 0.034485f,
- 0.039246f, 0.044678f, 0.049896f, 0.055267f, 0.060486f, 0.066345f, 0.072693f, 0.078857f,
- 0.085083f, 0.091370f, 0.097961f, 0.105530f, 0.112244f, 0.119629f, 0.127563f, 0.135376f,
- 0.143799f, 0.152100f, 0.160889f, 0.169922f, 0.178833f, 0.188843f, 0.198608f, 0.208496f,
- 0.218628f, 0.229492f, 0.240479f, 0.251953f, 0.262695f, 0.274902f, 0.286377f, 0.298340f,
- 0.310547f, 0.323242f, 0.335693f, 0.349365f, 0.362061f, 0.375000f, 0.388916f, 0.402832f,
- 0.416748f, 0.430420f, 0.445068f, 0.459473f, 0.474854f, 0.489258f, 0.504883f, 0.519531f,
- 0.535645f, 0.551758f, 0.769043f, 0.774902f, 0.771973f, 0.768555f, 0.764160f, 0.759766f,
- 0.002062f, 0.006191f, 0.010384f, 0.014786f, 0.018402f, 0.023270f, 0.027435f, 0.031891f,
- 0.036163f, 0.041199f, 0.045685f, 0.051208f, 0.056244f, 0.061371f, 0.066772f, 0.072510f,
- 0.078369f, 0.084656f, 0.091125f, 0.097290f, 0.104309f, 0.111145f, 0.118164f, 0.126221f,
- 0.133301f, 0.141724f, 0.149658f, 0.157837f, 0.167236f, 0.176025f, 0.185547f, 0.195190f,
- 0.205444f, 0.215332f, 0.225830f, 0.236084f, 0.247314f, 0.259033f, 0.270020f, 0.281982f,
- 0.293701f, 0.305908f, 0.318848f, 0.331787f, 0.344482f, 0.357178f, 0.370361f, 0.384521f,
- 0.397461f, 0.411621f, 0.426025f, 0.440674f, 0.455322f, 0.470703f, 0.485596f, 0.500977f,
- 0.517578f, 0.532227f, 0.759277f, 0.766602f, 0.764160f, 0.761230f, 0.757324f, 0.753418f,
- 0.002064f, 0.005859f, 0.009613f, 0.013626f, 0.017456f, 0.021606f, 0.025574f, 0.029526f,
- 0.034302f, 0.038422f, 0.042938f, 0.047485f, 0.052155f, 0.056763f, 0.061951f, 0.067139f,
- 0.072754f, 0.078308f, 0.084167f, 0.090149f, 0.096191f, 0.102722f, 0.109558f, 0.116699f,
- 0.123901f, 0.131104f, 0.139160f, 0.146729f, 0.155273f, 0.163940f, 0.173096f, 0.182129f,
- 0.192017f, 0.201172f, 0.211060f, 0.221558f, 0.232544f, 0.243530f, 0.254150f, 0.266113f,
- 0.277588f, 0.289307f, 0.301758f, 0.313965f, 0.326904f, 0.338867f, 0.352051f, 0.366211f,
- 0.379150f, 0.393066f, 0.407471f, 0.421875f, 0.436768f, 0.450439f, 0.466553f, 0.481201f,
- 0.497314f, 0.513184f, 0.749512f, 0.758301f, 0.756348f, 0.753906f, 0.750000f, 0.746582f,
- 0.001851f, 0.005405f, 0.009109f, 0.012589f, 0.016129f, 0.020020f, 0.023926f, 0.027481f,
- 0.031738f, 0.035492f, 0.039734f, 0.044128f, 0.048065f, 0.052765f, 0.057373f, 0.061859f,
- 0.066711f, 0.072388f, 0.077393f, 0.083130f, 0.088745f, 0.094727f, 0.101135f, 0.107666f,
- 0.114380f, 0.121704f, 0.128540f, 0.136108f, 0.144043f, 0.151733f, 0.160522f, 0.169678f,
- 0.178589f, 0.187622f, 0.197998f, 0.207397f, 0.217285f, 0.227905f, 0.238892f, 0.250000f,
- 0.261230f, 0.272461f, 0.284180f, 0.296387f, 0.308838f, 0.321533f, 0.334473f, 0.347656f,
- 0.361328f, 0.375000f, 0.388672f, 0.402588f, 0.417969f, 0.432617f, 0.447021f, 0.461914f,
- 0.478516f, 0.493652f, 0.739258f, 0.749512f, 0.749023f, 0.745605f, 0.742188f, 0.739746f,
- 0.001666f, 0.005405f, 0.008575f, 0.011696f, 0.015327f, 0.018646f, 0.022293f, 0.025650f,
- 0.029327f, 0.032776f, 0.036530f, 0.040619f, 0.044128f, 0.048828f, 0.052887f, 0.057098f,
- 0.061829f, 0.066467f, 0.071350f, 0.076355f, 0.081909f, 0.087341f, 0.092896f, 0.099304f,
- 0.105469f, 0.112000f, 0.118835f, 0.125977f, 0.133545f, 0.140991f, 0.148438f, 0.156982f,
- 0.165771f, 0.174805f, 0.183960f, 0.193115f, 0.203369f, 0.212891f, 0.223389f, 0.234497f,
- 0.244751f, 0.256348f, 0.268066f, 0.279541f, 0.291260f, 0.303955f, 0.316406f, 0.329590f,
- 0.342529f, 0.355957f, 0.369385f, 0.384766f, 0.398926f, 0.413330f, 0.428467f, 0.442383f,
- 0.458740f, 0.474609f, 0.728516f, 0.740723f, 0.740234f, 0.738281f, 0.735352f, 0.732910f,
- 0.001534f, 0.004936f, 0.007980f, 0.011223f, 0.013893f, 0.017212f, 0.020294f, 0.023361f,
- 0.026688f, 0.030182f, 0.033600f, 0.037537f, 0.040924f, 0.044495f, 0.048340f, 0.052155f,
- 0.056732f, 0.061035f, 0.065430f, 0.069824f, 0.075073f, 0.080078f, 0.085571f, 0.091003f,
- 0.096863f, 0.103271f, 0.109009f, 0.115723f, 0.123230f, 0.129639f, 0.137207f, 0.145264f,
- 0.153320f, 0.161499f, 0.170410f, 0.179688f, 0.189087f, 0.198364f, 0.208740f, 0.218750f,
- 0.229126f, 0.240356f, 0.251465f, 0.263184f, 0.274902f, 0.286621f, 0.299072f, 0.311768f,
- 0.324463f, 0.337402f, 0.351074f, 0.364746f, 0.378662f, 0.394287f, 0.408936f, 0.423096f,
- 0.439453f, 0.455322f, 0.716797f, 0.731934f, 0.732422f, 0.729980f, 0.728027f, 0.725586f,
- 0.001639f, 0.004337f, 0.007439f, 0.009888f, 0.013092f, 0.015717f, 0.018921f, 0.021805f,
- 0.024612f, 0.027542f, 0.030762f, 0.034088f, 0.037598f, 0.041107f, 0.044189f, 0.047699f,
- 0.051666f, 0.055664f, 0.059723f, 0.064148f, 0.068542f, 0.073425f, 0.078003f, 0.083435f,
- 0.088806f, 0.094360f, 0.100159f, 0.106079f, 0.112915f, 0.119690f, 0.125977f, 0.133667f,
- 0.141357f, 0.149414f, 0.157349f, 0.166260f, 0.175049f, 0.184326f, 0.193970f, 0.203735f,
- 0.214355f, 0.224609f, 0.235352f, 0.246460f, 0.257568f, 0.269287f, 0.281738f, 0.294189f,
- 0.305908f, 0.319824f, 0.332520f, 0.346680f, 0.360596f, 0.375244f, 0.389648f, 0.404297f,
- 0.419189f, 0.435791f, 0.707520f, 0.723145f, 0.723633f, 0.722656f, 0.720703f, 0.717773f,
- 0.001469f, 0.004345f, 0.006844f, 0.009483f, 0.012428f, 0.014679f, 0.017166f, 0.019989f,
- 0.022949f, 0.025574f, 0.028320f, 0.031525f, 0.034088f, 0.037323f, 0.040710f, 0.043762f,
- 0.047119f, 0.050873f, 0.054352f, 0.058441f, 0.062561f, 0.066711f, 0.071167f, 0.075989f,
- 0.080627f, 0.086426f, 0.091553f, 0.097473f, 0.103210f, 0.109680f, 0.115723f, 0.122986f,
- 0.129761f, 0.137451f, 0.145142f, 0.153198f, 0.161621f, 0.170654f, 0.179688f, 0.189087f,
- 0.198730f, 0.209229f, 0.219604f, 0.230225f, 0.241211f, 0.252197f, 0.264404f, 0.276367f,
- 0.288574f, 0.301270f, 0.314453f, 0.328125f, 0.341309f, 0.354980f, 0.370117f, 0.385498f,
- 0.399902f, 0.415771f, 0.696289f, 0.714355f, 0.715820f, 0.714355f, 0.712891f, 0.710449f,
- 0.001227f, 0.003862f, 0.006245f, 0.008644f, 0.010796f, 0.013344f, 0.015823f, 0.018448f,
- 0.020645f, 0.023331f, 0.025681f, 0.028305f, 0.030975f, 0.033722f, 0.036987f, 0.039673f,
- 0.043121f, 0.046112f, 0.049774f, 0.053406f, 0.056854f, 0.060760f, 0.064697f, 0.069397f,
- 0.073364f, 0.078369f, 0.083313f, 0.088257f, 0.094116f, 0.100098f, 0.105957f, 0.112122f,
- 0.118774f, 0.125854f, 0.133057f, 0.140869f, 0.148682f, 0.157227f, 0.165405f, 0.174927f,
- 0.184082f, 0.193726f, 0.204102f, 0.214111f, 0.225098f, 0.236328f, 0.247314f, 0.259277f,
- 0.270752f, 0.282959f, 0.296143f, 0.309082f, 0.322510f, 0.336426f, 0.350830f, 0.365479f,
- 0.380371f, 0.396240f, 0.684570f, 0.705078f, 0.706543f, 0.706543f, 0.705078f, 0.703125f,
- 0.001069f, 0.003525f, 0.006062f, 0.008286f, 0.010178f, 0.012589f, 0.014542f, 0.017075f,
- 0.019241f, 0.021179f, 0.023499f, 0.026047f, 0.028137f, 0.030762f, 0.033417f, 0.035889f,
- 0.038757f, 0.041779f, 0.044586f, 0.048309f, 0.051056f, 0.054810f, 0.058777f, 0.062347f,
- 0.066528f, 0.070740f, 0.075256f, 0.080261f, 0.085205f, 0.090393f, 0.095886f, 0.102478f,
- 0.108154f, 0.114441f, 0.121399f, 0.128784f, 0.135742f, 0.144165f, 0.151978f, 0.160767f,
- 0.169434f, 0.178833f, 0.188721f, 0.198608f, 0.208984f, 0.220215f, 0.230957f, 0.241943f,
- 0.253906f, 0.265869f, 0.278564f, 0.291260f, 0.304443f, 0.318359f, 0.332031f, 0.346680f,
- 0.361572f, 0.377197f, 0.673828f, 0.695801f, 0.698242f, 0.697754f, 0.697266f, 0.695312f,
- 0.001211f, 0.003250f, 0.005112f, 0.007195f, 0.009651f, 0.011414f, 0.013641f, 0.015205f,
- 0.017334f, 0.019608f, 0.021164f, 0.023712f, 0.025726f, 0.027863f, 0.029984f, 0.032410f,
- 0.035034f, 0.037689f, 0.040466f, 0.042938f, 0.046478f, 0.049591f, 0.052856f, 0.056274f,
- 0.060089f, 0.063721f, 0.068115f, 0.072266f, 0.076904f, 0.081970f, 0.087036f, 0.092285f,
- 0.097961f, 0.104309f, 0.110535f, 0.117126f, 0.124084f, 0.131226f, 0.139038f, 0.147095f,
- 0.155884f, 0.164429f, 0.174194f, 0.183228f, 0.192749f, 0.203491f, 0.214233f, 0.224976f,
- 0.236206f, 0.247925f, 0.260498f, 0.272705f, 0.285889f, 0.299805f, 0.312988f, 0.327637f,
- 0.342529f, 0.356934f, 0.662598f, 0.686523f, 0.689453f, 0.689453f, 0.688965f, 0.687500f,
- 0.001138f, 0.003206f, 0.005180f, 0.007309f, 0.008377f, 0.010635f, 0.012352f, 0.014153f,
- 0.015640f, 0.017487f, 0.019272f, 0.021164f, 0.023026f, 0.025314f, 0.027222f, 0.029282f,
- 0.031433f, 0.033600f, 0.036041f, 0.038788f, 0.041626f, 0.044281f, 0.047455f, 0.050507f,
- 0.054047f, 0.057556f, 0.061188f, 0.065063f, 0.069214f, 0.073486f, 0.078369f, 0.083191f,
- 0.088196f, 0.093811f, 0.099609f, 0.106018f, 0.112305f, 0.119385f, 0.126343f, 0.134033f,
- 0.142090f, 0.150635f, 0.159546f, 0.168579f, 0.177734f, 0.187500f, 0.198242f, 0.208618f,
- 0.219604f, 0.231812f, 0.242188f, 0.254883f, 0.267578f, 0.281494f, 0.294434f, 0.308350f,
- 0.322998f, 0.338379f, 0.651367f, 0.676758f, 0.681152f, 0.680664f, 0.680664f, 0.679688f,
- 0.000977f, 0.002806f, 0.004559f, 0.006176f, 0.008034f, 0.009476f, 0.011131f, 0.012741f,
- 0.014275f, 0.015732f, 0.017334f, 0.019104f, 0.020767f, 0.022293f, 0.024323f, 0.026016f,
- 0.028198f, 0.030197f, 0.032257f, 0.034515f, 0.036957f, 0.039856f, 0.042084f, 0.044891f,
- 0.047791f, 0.051147f, 0.054535f, 0.058197f, 0.061768f, 0.065674f, 0.069946f, 0.074585f,
- 0.079102f, 0.084412f, 0.089600f, 0.095398f, 0.101196f, 0.107544f, 0.114258f, 0.121094f,
- 0.128662f, 0.137085f, 0.145020f, 0.153687f, 0.162720f, 0.172607f, 0.182129f, 0.192749f,
- 0.203125f, 0.214111f, 0.226074f, 0.237671f, 0.249878f, 0.262207f, 0.275635f, 0.289551f,
- 0.304199f, 0.318848f, 0.639160f, 0.666992f, 0.671387f, 0.671875f, 0.671875f, 0.671387f,
- 0.000968f, 0.002722f, 0.004318f, 0.005634f, 0.007393f, 0.008667f, 0.010139f, 0.011383f,
- 0.012856f, 0.014389f, 0.015427f, 0.016907f, 0.018387f, 0.020081f, 0.021683f, 0.023315f,
- 0.025085f, 0.026840f, 0.028641f, 0.030624f, 0.032837f, 0.035065f, 0.037445f, 0.039948f,
- 0.042542f, 0.045410f, 0.048340f, 0.051514f, 0.054840f, 0.058502f, 0.062408f, 0.066223f,
- 0.070679f, 0.075134f, 0.080078f, 0.085388f, 0.090515f, 0.096436f, 0.102722f, 0.109314f,
- 0.116333f, 0.123352f, 0.131592f, 0.139526f, 0.147949f, 0.156860f, 0.166748f, 0.176758f,
- 0.187134f, 0.197632f, 0.209106f, 0.220337f, 0.232666f, 0.244751f, 0.257568f, 0.270996f,
- 0.284912f, 0.300537f, 0.627441f, 0.657227f, 0.662598f, 0.663574f, 0.663574f, 0.663086f,
- 0.001081f, 0.002466f, 0.003862f, 0.005348f, 0.006447f, 0.007927f, 0.009018f, 0.010490f,
- 0.011436f, 0.012627f, 0.013916f, 0.015015f, 0.016449f, 0.017563f, 0.019165f, 0.020706f,
- 0.021973f, 0.023834f, 0.025467f, 0.027130f, 0.029175f, 0.030991f, 0.033081f, 0.035156f,
- 0.037384f, 0.040039f, 0.042603f, 0.045502f, 0.048492f, 0.051636f, 0.054962f, 0.058716f,
- 0.062439f, 0.066467f, 0.071045f, 0.075378f, 0.080811f, 0.085815f, 0.091492f, 0.098022f,
- 0.103943f, 0.111023f, 0.118164f, 0.125732f, 0.133911f, 0.142456f, 0.151367f, 0.161011f,
- 0.170898f, 0.181396f, 0.192139f, 0.203247f, 0.214844f, 0.227173f, 0.239380f, 0.252441f,
- 0.266602f, 0.281006f, 0.616699f, 0.647949f, 0.653320f, 0.655273f, 0.654785f, 0.655273f,
- 0.000735f, 0.002331f, 0.003601f, 0.005005f, 0.005825f, 0.007061f, 0.008049f, 0.009148f,
- 0.010315f, 0.011131f, 0.012230f, 0.013367f, 0.014328f, 0.015541f, 0.016968f, 0.018234f,
- 0.019257f, 0.020798f, 0.022202f, 0.023666f, 0.025452f, 0.027115f, 0.028885f, 0.030792f,
- 0.032715f, 0.035034f, 0.037323f, 0.039825f, 0.042419f, 0.045258f, 0.048157f, 0.051422f,
- 0.054810f, 0.058411f, 0.062378f, 0.066528f, 0.071106f, 0.076233f, 0.081116f, 0.086853f,
- 0.092407f, 0.098938f, 0.105469f, 0.112854f, 0.120361f, 0.128418f, 0.136841f, 0.145752f,
- 0.155273f, 0.165283f, 0.175537f, 0.186646f, 0.197510f, 0.209473f, 0.221558f, 0.234619f,
- 0.248047f, 0.261719f, 0.603516f, 0.636719f, 0.644531f, 0.645020f, 0.645508f, 0.646484f,
- 0.000837f, 0.002073f, 0.003357f, 0.004292f, 0.005409f, 0.006271f, 0.007271f, 0.007973f,
- 0.008873f, 0.009956f, 0.010811f, 0.012032f, 0.012848f, 0.013664f, 0.014870f, 0.015839f,
- 0.017090f, 0.018280f, 0.019333f, 0.020691f, 0.022186f, 0.023453f, 0.025223f, 0.026779f,
- 0.028595f, 0.030441f, 0.032410f, 0.034729f, 0.036743f, 0.039307f, 0.042023f, 0.044434f,
- 0.047791f, 0.050781f, 0.054413f, 0.058075f, 0.061951f, 0.066711f, 0.071106f, 0.076355f,
- 0.081848f, 0.087341f, 0.093872f, 0.099854f, 0.107483f, 0.114441f, 0.122925f, 0.131104f,
- 0.140381f, 0.149414f, 0.159180f, 0.170166f, 0.181152f, 0.192139f, 0.204468f, 0.216553f,
- 0.230103f, 0.244507f, 0.592773f, 0.626953f, 0.635254f, 0.637207f, 0.636719f, 0.637695f,
- 0.000524f, 0.001863f, 0.003014f, 0.003777f, 0.004852f, 0.005516f, 0.006428f, 0.007111f,
- 0.008095f, 0.008888f, 0.009476f, 0.010345f, 0.011063f, 0.012016f, 0.012810f, 0.013786f,
- 0.014648f, 0.015717f, 0.016891f, 0.017929f, 0.019150f, 0.020401f, 0.021606f, 0.023193f,
- 0.024597f, 0.026276f, 0.027939f, 0.029770f, 0.031738f, 0.033936f, 0.036194f, 0.038574f,
- 0.041107f, 0.043945f, 0.047180f, 0.050385f, 0.054291f, 0.057770f, 0.061981f, 0.066345f,
- 0.071167f, 0.076355f, 0.082153f, 0.088074f, 0.094666f, 0.101685f, 0.109131f, 0.117249f,
- 0.125610f, 0.134399f, 0.143921f, 0.154175f, 0.164795f, 0.175659f, 0.187256f, 0.199341f,
- 0.211670f, 0.225464f, 0.580078f, 0.617676f, 0.625000f, 0.627930f, 0.628906f, 0.628906f,
- 0.000657f, 0.001829f, 0.002909f, 0.003525f, 0.004295f, 0.005051f, 0.005592f, 0.006123f,
- 0.006920f, 0.007553f, 0.008339f, 0.008888f, 0.009689f, 0.010262f, 0.011017f, 0.011848f,
- 0.012634f, 0.013489f, 0.014572f, 0.015427f, 0.016449f, 0.017426f, 0.018539f, 0.019852f,
- 0.021133f, 0.022507f, 0.023834f, 0.025375f, 0.027084f, 0.028976f, 0.030792f, 0.032959f,
- 0.035400f, 0.037720f, 0.040405f, 0.043243f, 0.046356f, 0.049530f, 0.053314f, 0.057190f,
- 0.061554f, 0.066223f, 0.071472f, 0.076782f, 0.082825f, 0.089417f, 0.096191f, 0.103210f,
- 0.111633f, 0.119934f, 0.128662f, 0.138550f, 0.148315f, 0.158813f, 0.170288f, 0.182373f,
- 0.194458f, 0.207642f, 0.567383f, 0.606445f, 0.615234f, 0.619141f, 0.620117f, 0.620117f,
- 0.000584f, 0.001548f, 0.002333f, 0.003086f, 0.003660f, 0.004303f, 0.005020f, 0.005543f,
- 0.006042f, 0.006538f, 0.007118f, 0.007641f, 0.008301f, 0.008919f, 0.009499f, 0.010147f,
- 0.010918f, 0.011414f, 0.012222f, 0.013084f, 0.013901f, 0.014954f, 0.015671f, 0.016724f,
- 0.017914f, 0.019012f, 0.020325f, 0.021698f, 0.022949f, 0.024445f, 0.026215f, 0.027954f,
- 0.029755f, 0.032043f, 0.034210f, 0.036591f, 0.039215f, 0.042297f, 0.045441f, 0.048676f,
- 0.052612f, 0.056580f, 0.061432f, 0.066040f, 0.071350f, 0.077332f, 0.083496f, 0.090393f,
- 0.097717f, 0.105835f, 0.114380f, 0.123413f, 0.133301f, 0.143066f, 0.153931f, 0.165039f,
- 0.177124f, 0.190308f, 0.555176f, 0.597656f, 0.604980f, 0.609375f, 0.609863f, 0.611328f,
- 0.000438f, 0.001456f, 0.001925f, 0.002811f, 0.003246f, 0.003731f, 0.004108f, 0.004669f,
- 0.005344f, 0.005535f, 0.005913f, 0.006641f, 0.007038f, 0.007473f, 0.008049f, 0.008675f,
- 0.009361f, 0.009689f, 0.010513f, 0.011032f, 0.011894f, 0.012695f, 0.013390f, 0.014183f,
- 0.015114f, 0.016037f, 0.016998f, 0.018280f, 0.019272f, 0.020645f, 0.022003f, 0.023361f,
- 0.024796f, 0.026779f, 0.028656f, 0.030685f, 0.032928f, 0.035370f, 0.038147f, 0.040955f,
- 0.044403f, 0.047821f, 0.052032f, 0.056183f, 0.060974f, 0.066162f, 0.071777f, 0.078125f,
- 0.084656f, 0.092102f, 0.100159f, 0.109009f, 0.117981f, 0.127563f, 0.138306f, 0.148804f,
- 0.160645f, 0.173218f, 0.542969f, 0.586914f, 0.594727f, 0.599609f, 0.601074f, 0.601074f,
- 0.000520f, 0.001104f, 0.001921f, 0.002256f, 0.002886f, 0.003389f, 0.003689f, 0.004063f,
- 0.004440f, 0.004829f, 0.005230f, 0.005466f, 0.005966f, 0.006332f, 0.006786f, 0.007347f,
- 0.007835f, 0.008232f, 0.008812f, 0.009216f, 0.009865f, 0.010490f, 0.011124f, 0.011803f,
- 0.012573f, 0.013390f, 0.014275f, 0.015121f, 0.016144f, 0.016953f, 0.018234f, 0.019257f,
- 0.020782f, 0.022064f, 0.023743f, 0.025360f, 0.027176f, 0.029327f, 0.031616f, 0.034058f,
- 0.036957f, 0.039917f, 0.043182f, 0.047272f, 0.051025f, 0.055695f, 0.060913f, 0.066345f,
- 0.072693f, 0.079285f, 0.086548f, 0.094543f, 0.103271f, 0.112793f, 0.122864f, 0.132812f,
- 0.144531f, 0.156616f, 0.530273f, 0.576660f, 0.585449f, 0.590332f, 0.592285f, 0.593262f,
- 0.000366f, 0.001040f, 0.001583f, 0.002129f, 0.002522f, 0.002792f, 0.003012f, 0.003420f,
- 0.003630f, 0.003967f, 0.004246f, 0.004623f, 0.005039f, 0.005253f, 0.005627f, 0.006096f,
- 0.006447f, 0.006939f, 0.007179f, 0.007710f, 0.008324f, 0.008698f, 0.009247f, 0.009796f,
- 0.010414f, 0.011063f, 0.011627f, 0.012543f, 0.013191f, 0.014099f, 0.014938f, 0.015930f,
- 0.016983f, 0.018219f, 0.019440f, 0.020813f, 0.022324f, 0.024002f, 0.025818f, 0.027969f,
- 0.030289f, 0.032898f, 0.035583f, 0.038727f, 0.042450f, 0.046234f, 0.050781f, 0.055695f,
- 0.061157f, 0.067383f, 0.074158f, 0.081360f, 0.089478f, 0.098267f, 0.107788f, 0.117737f,
- 0.129028f, 0.140503f, 0.517578f, 0.566406f, 0.575195f, 0.581055f, 0.582520f, 0.584473f,
- 0.000482f, 0.001008f, 0.001481f, 0.001818f, 0.002001f, 0.002296f, 0.002569f, 0.002781f,
- 0.002998f, 0.003319f, 0.003620f, 0.003828f, 0.004082f, 0.004364f, 0.004658f, 0.004978f,
- 0.005257f, 0.005665f, 0.005993f, 0.006340f, 0.006725f, 0.007160f, 0.007576f, 0.008095f,
- 0.008522f, 0.008980f, 0.009621f, 0.010170f, 0.010765f, 0.011543f, 0.012161f, 0.013023f,
- 0.013840f, 0.014801f, 0.015869f, 0.016861f, 0.018127f, 0.019379f, 0.020859f, 0.022583f,
- 0.024261f, 0.026596f, 0.028839f, 0.031555f, 0.034271f, 0.037628f, 0.041504f, 0.045837f,
- 0.050598f, 0.056000f, 0.062134f, 0.068726f, 0.076172f, 0.084656f, 0.093567f, 0.103088f,
- 0.113586f, 0.125000f, 0.504883f, 0.554688f, 0.565918f, 0.570801f, 0.573242f, 0.574219f,
- 0.000400f, 0.000803f, 0.001046f, 0.001427f, 0.001657f, 0.001952f, 0.002033f, 0.002337f,
- 0.002453f, 0.002678f, 0.002871f, 0.003120f, 0.003286f, 0.003605f, 0.003817f, 0.004036f,
- 0.004299f, 0.004604f, 0.004848f, 0.005142f, 0.005428f, 0.005871f, 0.006107f, 0.006584f,
- 0.006908f, 0.007332f, 0.007736f, 0.008186f, 0.008820f, 0.009308f, 0.009964f, 0.010422f,
- 0.011200f, 0.011993f, 0.012726f, 0.013512f, 0.014511f, 0.015610f, 0.016724f, 0.017914f,
- 0.019440f, 0.021057f, 0.022827f, 0.024933f, 0.027466f, 0.030197f, 0.033295f, 0.036896f,
- 0.041077f, 0.045776f, 0.050995f, 0.056976f, 0.063721f, 0.071167f, 0.079773f, 0.089172f,
- 0.098633f, 0.109314f, 0.491699f, 0.543457f, 0.555176f, 0.561035f, 0.563477f, 0.565430f,
- 0.000279f, 0.000821f, 0.000974f, 0.001161f, 0.001382f, 0.001583f, 0.001670f, 0.001934f,
- 0.002064f, 0.002153f, 0.002306f, 0.002544f, 0.002670f, 0.002909f, 0.003052f, 0.003288f,
- 0.003429f, 0.003624f, 0.003893f, 0.004082f, 0.004406f, 0.004635f, 0.004925f, 0.005196f,
- 0.005444f, 0.005764f, 0.006134f, 0.006546f, 0.006947f, 0.007343f, 0.007858f, 0.008270f,
- 0.008858f, 0.009346f, 0.010010f, 0.010757f, 0.011475f, 0.012260f, 0.013206f, 0.014214f,
- 0.015236f, 0.016479f, 0.017975f, 0.019623f, 0.021515f, 0.023590f, 0.026062f, 0.028976f,
- 0.032471f, 0.036224f, 0.040833f, 0.046082f, 0.052094f, 0.059052f, 0.066650f, 0.075684f,
- 0.084778f, 0.094971f, 0.479492f, 0.532715f, 0.545898f, 0.551270f, 0.553711f, 0.555664f,
- 0.000253f, 0.000612f, 0.000835f, 0.000998f, 0.001111f, 0.001228f, 0.001334f, 0.001452f,
- 0.001619f, 0.001757f, 0.001837f, 0.001920f, 0.002140f, 0.002321f, 0.002453f, 0.002544f,
- 0.002670f, 0.002790f, 0.003086f, 0.003260f, 0.003422f, 0.003620f, 0.003893f, 0.004101f,
- 0.004326f, 0.004528f, 0.004761f, 0.005051f, 0.005444f, 0.005756f, 0.006065f, 0.006435f,
- 0.006882f, 0.007378f, 0.007763f, 0.008286f, 0.008865f, 0.009506f, 0.010162f, 0.011024f,
- 0.011826f, 0.012917f, 0.013916f, 0.015175f, 0.016602f, 0.018204f, 0.020035f, 0.022293f,
- 0.024948f, 0.028076f, 0.031921f, 0.036377f, 0.041565f, 0.047577f, 0.054535f, 0.062622f,
- 0.071777f, 0.081787f, 0.465576f, 0.522461f, 0.535645f, 0.541992f, 0.544922f, 0.546875f,
- 0.000155f, 0.000398f, 0.000680f, 0.000828f, 0.000907f, 0.000989f, 0.001113f, 0.001081f,
- 0.001253f, 0.001350f, 0.001453f, 0.001573f, 0.001661f, 0.001777f, 0.001829f, 0.001978f,
- 0.002062f, 0.002216f, 0.002346f, 0.002470f, 0.002644f, 0.002804f, 0.002930f, 0.003134f,
- 0.003265f, 0.003485f, 0.003674f, 0.003866f, 0.004154f, 0.004333f, 0.004707f, 0.004910f,
- 0.005180f, 0.005581f, 0.005875f, 0.006283f, 0.006729f, 0.007164f, 0.007713f, 0.008270f,
- 0.008934f, 0.009727f, 0.010513f, 0.011482f, 0.012520f, 0.013710f, 0.015152f, 0.016815f,
- 0.018799f, 0.021118f, 0.024048f, 0.027756f, 0.032104f, 0.037201f, 0.043518f, 0.050903f,
- 0.059418f, 0.068420f, 0.453125f, 0.511719f, 0.525391f, 0.530762f, 0.535156f, 0.536621f,
- 0.000303f, 0.000337f, 0.000498f, 0.000560f, 0.000603f, 0.000721f, 0.000782f, 0.000845f,
- 0.000880f, 0.000988f, 0.001119f, 0.001184f, 0.001258f, 0.001377f, 0.001420f, 0.001446f,
- 0.001590f, 0.001666f, 0.001754f, 0.001889f, 0.001980f, 0.002073f, 0.002216f, 0.002308f,
- 0.002447f, 0.002562f, 0.002758f, 0.002899f, 0.003084f, 0.003328f, 0.003506f, 0.003641f,
- 0.003922f, 0.004147f, 0.004391f, 0.004665f, 0.004959f, 0.005322f, 0.005695f, 0.006119f,
- 0.006588f, 0.007072f, 0.007790f, 0.008392f, 0.009178f, 0.010056f, 0.011124f, 0.012383f,
- 0.013832f, 0.015587f, 0.017685f, 0.020309f, 0.023926f, 0.028076f, 0.033447f, 0.039978f,
- 0.047638f, 0.056335f, 0.440186f, 0.500000f, 0.514160f, 0.520996f, 0.524414f, 0.526855f,
- 0.000132f, 0.000296f, 0.000368f, 0.000444f, 0.000501f, 0.000519f, 0.000631f, 0.000580f,
- 0.000675f, 0.000735f, 0.000820f, 0.000840f, 0.000882f, 0.000946f, 0.001029f, 0.001070f,
- 0.001164f, 0.001221f, 0.001286f, 0.001317f, 0.001416f, 0.001494f, 0.001607f, 0.001681f,
- 0.001763f, 0.001863f, 0.001978f, 0.002069f, 0.002169f, 0.002348f, 0.002451f, 0.002661f,
- 0.002754f, 0.002943f, 0.003130f, 0.003323f, 0.003553f, 0.003813f, 0.004124f, 0.004364f,
- 0.004669f, 0.005062f, 0.005493f, 0.005985f, 0.006546f, 0.007172f, 0.007950f, 0.008850f,
- 0.009857f, 0.011116f, 0.012695f, 0.014603f, 0.016983f, 0.020157f, 0.024490f, 0.029968f,
- 0.036957f, 0.045166f, 0.426025f, 0.488770f, 0.503906f, 0.511719f, 0.515137f, 0.517578f,
- 0.000063f, 0.000160f, 0.000267f, 0.000282f, 0.000339f, 0.000417f, 0.000377f, 0.000433f,
- 0.000472f, 0.000570f, 0.000563f, 0.000578f, 0.000599f, 0.000663f, 0.000681f, 0.000759f,
- 0.000760f, 0.000845f, 0.000910f, 0.000941f, 0.000997f, 0.001057f, 0.001110f, 0.001169f,
- 0.001238f, 0.001288f, 0.001381f, 0.001441f, 0.001514f, 0.001655f, 0.001693f, 0.001815f,
- 0.001910f, 0.002028f, 0.002153f, 0.002308f, 0.002441f, 0.002607f, 0.002783f, 0.002962f,
- 0.003214f, 0.003458f, 0.003744f, 0.004051f, 0.004444f, 0.004883f, 0.005402f, 0.006031f,
- 0.006699f, 0.007610f, 0.008766f, 0.009933f, 0.011688f, 0.013931f, 0.017075f, 0.021454f,
- 0.027313f, 0.035004f, 0.414307f, 0.478271f, 0.493652f, 0.501465f, 0.505859f, 0.508301f,
- 0.000120f, 0.000194f, 0.000194f, 0.000205f, 0.000245f, 0.000246f, 0.000251f, 0.000301f,
- 0.000322f, 0.000332f, 0.000343f, 0.000413f, 0.000397f, 0.000448f, 0.000481f, 0.000494f,
- 0.000545f, 0.000556f, 0.000582f, 0.000601f, 0.000653f, 0.000676f, 0.000726f, 0.000767f,
- 0.000821f, 0.000840f, 0.000919f, 0.000952f, 0.001011f, 0.001054f, 0.001116f, 0.001186f,
- 0.001263f, 0.001337f, 0.001418f, 0.001482f, 0.001607f, 0.001685f, 0.001842f, 0.001965f,
- 0.002090f, 0.002235f, 0.002420f, 0.002613f, 0.002851f, 0.003159f, 0.003492f, 0.003887f,
- 0.004345f, 0.004906f, 0.005600f, 0.006474f, 0.007645f, 0.009186f, 0.011230f, 0.014305f,
- 0.019135f, 0.025848f, 0.400635f, 0.466797f, 0.483398f, 0.490967f, 0.495117f, 0.498047f,
- 0.000030f, 0.000140f, 0.000121f, 0.000114f, 0.000147f, 0.000178f, 0.000159f, 0.000195f,
- 0.000199f, 0.000204f, 0.000216f, 0.000223f, 0.000255f, 0.000271f, 0.000288f, 0.000302f,
- 0.000314f, 0.000346f, 0.000357f, 0.000395f, 0.000397f, 0.000408f, 0.000436f, 0.000470f,
- 0.000501f, 0.000542f, 0.000547f, 0.000566f, 0.000612f, 0.000641f, 0.000692f, 0.000722f,
- 0.000767f, 0.000798f, 0.000861f, 0.000898f, 0.000963f, 0.001030f, 0.001107f, 0.001164f,
- 0.001255f, 0.001361f, 0.001464f, 0.001591f, 0.001719f, 0.001871f, 0.002111f, 0.002312f,
- 0.002617f, 0.002964f, 0.003368f, 0.003902f, 0.004654f, 0.005653f, 0.006958f, 0.008888f,
- 0.012161f, 0.017822f, 0.388672f, 0.456543f, 0.473389f, 0.481201f, 0.486328f, 0.489014f,
- 0.000102f, 0.000076f, 0.000076f, 0.000075f, 0.000095f, 0.000092f, 0.000109f, 0.000111f,
- 0.000112f, 0.000113f, 0.000126f, 0.000147f, 0.000135f, 0.000144f, 0.000165f, 0.000161f,
- 0.000179f, 0.000192f, 0.000198f, 0.000202f, 0.000224f, 0.000232f, 0.000248f, 0.000259f,
- 0.000278f, 0.000295f, 0.000308f, 0.000320f, 0.000340f, 0.000353f, 0.000379f, 0.000402f,
- 0.000423f, 0.000440f, 0.000472f, 0.000503f, 0.000526f, 0.000564f, 0.000610f, 0.000644f,
- 0.000690f, 0.000741f, 0.000810f, 0.000862f, 0.000946f, 0.001024f, 0.001121f, 0.001247f,
- 0.001407f, 0.001603f, 0.001822f, 0.002144f, 0.002539f, 0.003098f, 0.003901f, 0.005096f,
- 0.006931f, 0.011024f, 0.375244f, 0.444092f, 0.462158f, 0.470215f, 0.475586f, 0.478760f,
- 0.000085f, 0.000061f, 0.000052f, 0.000047f, 0.000049f, 0.000046f, 0.000047f, 0.000050f,
- 0.000055f, 0.000069f, 0.000060f, 0.000062f, 0.000077f, 0.000066f, 0.000069f, 0.000075f,
- 0.000084f, 0.000093f, 0.000093f, 0.000098f, 0.000102f, 0.000108f, 0.000111f, 0.000121f,
- 0.000129f, 0.000136f, 0.000142f, 0.000154f, 0.000162f, 0.000172f, 0.000182f, 0.000187f,
- 0.000197f, 0.000209f, 0.000225f, 0.000231f, 0.000246f, 0.000262f, 0.000290f, 0.000306f,
- 0.000321f, 0.000349f, 0.000380f, 0.000402f, 0.000437f, 0.000480f, 0.000525f, 0.000579f,
- 0.000649f, 0.000735f, 0.000842f, 0.000984f, 0.001173f, 0.001451f, 0.001855f, 0.002485f,
- 0.003542f, 0.005753f, 0.362305f, 0.434326f, 0.451904f, 0.460693f, 0.465576f, 0.468506f,
- 0.000064f, 0.000044f, 0.000036f, 0.000032f, 0.000029f, 0.000027f, 0.000025f, 0.000024f,
- 0.000022f, 0.000023f, 0.000021f, 0.000027f, 0.000023f, 0.000022f, 0.000028f, 0.000031f,
- 0.000030f, 0.000034f, 0.000036f, 0.000038f, 0.000040f, 0.000045f, 0.000048f, 0.000042f,
- 0.000047f, 0.000053f, 0.000055f, 0.000054f, 0.000060f, 0.000062f, 0.000065f, 0.000072f,
- 0.000078f, 0.000075f, 0.000079f, 0.000087f, 0.000093f, 0.000098f, 0.000106f, 0.000113f,
- 0.000121f, 0.000126f, 0.000136f, 0.000150f, 0.000159f, 0.000173f, 0.000190f, 0.000209f,
- 0.000235f, 0.000265f, 0.000302f, 0.000343f, 0.000416f, 0.000515f, 0.000665f, 0.000917f,
- 0.001396f, 0.002401f, 0.349854f, 0.421875f, 0.440918f, 0.449951f, 0.455811f, 0.458008f,
- 0.000030f, 0.000020f, 0.000016f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
- 0.000011f, 0.000011f, 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000009f, 0.000009f,
- 0.000009f, 0.000008f, 0.000008f, 0.000008f, 0.000007f, 0.000007f, 0.000008f, 0.000008f,
- 0.000009f, 0.000011f, 0.000011f, 0.000013f, 0.000013f, 0.000012f, 0.000013f, 0.000014f,
- 0.000016f, 0.000018f, 0.000018f, 0.000019f, 0.000021f, 0.000021f, 0.000023f, 0.000027f,
- 0.000025f, 0.000028f, 0.000031f, 0.000032f, 0.000033f, 0.000038f, 0.000043f, 0.000046f,
- 0.000050f, 0.000055f, 0.000062f, 0.000074f, 0.000088f, 0.000106f, 0.000138f, 0.000191f,
- 0.000312f, 0.000653f, 0.337402f, 0.410645f, 0.431152f, 0.438965f, 0.445068f, 0.448975f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000006f,
- 0.000010f, 0.000026f, 0.324219f, 0.399902f, 0.419922f, 0.429688f, 0.435059f, 0.438965f,
- },
- {
- 0.010521f, 0.032043f, 0.054443f, 0.076843f, 0.098572f, 0.121216f, 0.142700f, 0.164062f,
- 0.185913f, 0.207275f, 0.229004f, 0.249268f, 0.270508f, 0.290527f, 0.311035f, 0.331055f,
- 0.350586f, 0.370361f, 0.389648f, 0.408936f, 0.428223f, 0.446533f, 0.465088f, 0.482666f,
- 0.500977f, 0.519043f, 0.536133f, 0.553223f, 0.570801f, 0.587891f, 0.604980f, 0.621582f,
- 0.637207f, 0.653320f, 0.668945f, 0.685547f, 0.700684f, 0.716309f, 0.730957f, 0.745605f,
- 0.760254f, 0.774902f, 0.789551f, 0.803711f, 0.816895f, 0.831543f, 0.845703f, 0.858887f,
- 0.871582f, 0.885254f, 0.897949f, 0.910645f, 0.923340f, 0.936035f, 0.948242f, 0.959961f,
- 0.972168f, 0.984375f, 0.972656f, 0.936035f, 0.910645f, 0.890137f, 0.872070f, 0.855957f,
- 0.010048f, 0.030350f, 0.051392f, 0.072266f, 0.093506f, 0.114319f, 0.135620f, 0.155273f,
- 0.177124f, 0.197144f, 0.217773f, 0.237915f, 0.257568f, 0.277588f, 0.298096f, 0.316895f,
- 0.336182f, 0.355225f, 0.374268f, 0.393311f, 0.411865f, 0.430176f, 0.448486f, 0.466309f,
- 0.483398f, 0.501465f, 0.519043f, 0.535645f, 0.552734f, 0.570312f, 0.586426f, 0.602539f,
- 0.618652f, 0.635254f, 0.650879f, 0.666016f, 0.682129f, 0.697266f, 0.712402f, 0.727539f,
- 0.741699f, 0.756836f, 0.770996f, 0.785645f, 0.799805f, 0.812988f, 0.826660f, 0.840332f,
- 0.854004f, 0.867676f, 0.881348f, 0.893066f, 0.907715f, 0.919434f, 0.932617f, 0.943848f,
- 0.955566f, 0.968262f, 0.965332f, 0.930664f, 0.906738f, 0.886719f, 0.869629f, 0.854004f,
- 0.009254f, 0.028961f, 0.048615f, 0.068054f, 0.088562f, 0.108093f, 0.128540f, 0.147705f,
- 0.167236f, 0.188599f, 0.207886f, 0.227295f, 0.244873f, 0.265625f, 0.284668f, 0.303955f,
- 0.322510f, 0.340820f, 0.358887f, 0.378662f, 0.396484f, 0.414307f, 0.431885f, 0.448975f,
- 0.466797f, 0.484619f, 0.500977f, 0.519043f, 0.535645f, 0.551758f, 0.568359f, 0.584961f,
- 0.600586f, 0.616699f, 0.632324f, 0.647949f, 0.663086f, 0.678223f, 0.693848f, 0.708984f,
- 0.723633f, 0.738281f, 0.752930f, 0.767578f, 0.780762f, 0.794922f, 0.809082f, 0.822754f,
- 0.835938f, 0.849609f, 0.863770f, 0.875488f, 0.888672f, 0.902344f, 0.915527f, 0.927246f,
- 0.939453f, 0.952637f, 0.958008f, 0.925293f, 0.901855f, 0.882812f, 0.866211f, 0.851562f,
- 0.008736f, 0.027039f, 0.045807f, 0.064514f, 0.083801f, 0.102844f, 0.121826f, 0.140869f,
- 0.159302f, 0.179077f, 0.197388f, 0.216064f, 0.234741f, 0.253662f, 0.271729f, 0.290283f,
- 0.308350f, 0.327148f, 0.344238f, 0.362061f, 0.381836f, 0.398926f, 0.416016f, 0.432373f,
- 0.450195f, 0.466797f, 0.484375f, 0.500977f, 0.517090f, 0.533691f, 0.550781f, 0.567871f,
- 0.582031f, 0.598145f, 0.613770f, 0.629395f, 0.645020f, 0.659668f, 0.675781f, 0.689941f,
- 0.705566f, 0.719727f, 0.734375f, 0.749512f, 0.763184f, 0.776855f, 0.791016f, 0.804688f,
- 0.818848f, 0.832031f, 0.845215f, 0.858398f, 0.872559f, 0.884766f, 0.897949f, 0.909668f,
- 0.922852f, 0.936035f, 0.950684f, 0.919434f, 0.896973f, 0.878906f, 0.862793f, 0.848633f,
- 0.008339f, 0.025543f, 0.043427f, 0.060974f, 0.078979f, 0.097168f, 0.115051f, 0.133179f,
- 0.151367f, 0.169678f, 0.187988f, 0.206055f, 0.223999f, 0.241821f, 0.260742f, 0.277832f,
- 0.295166f, 0.313232f, 0.331299f, 0.347412f, 0.365479f, 0.383057f, 0.399902f, 0.416992f,
- 0.433350f, 0.450195f, 0.467773f, 0.484863f, 0.499756f, 0.515625f, 0.532715f, 0.548340f,
- 0.564941f, 0.580566f, 0.596191f, 0.610840f, 0.626953f, 0.641602f, 0.656738f, 0.671875f,
- 0.686035f, 0.701660f, 0.714844f, 0.730469f, 0.745117f, 0.759766f, 0.772461f, 0.786621f,
- 0.801270f, 0.814453f, 0.827637f, 0.841309f, 0.854004f, 0.867676f, 0.880859f, 0.893555f,
- 0.907227f, 0.919434f, 0.943359f, 0.913086f, 0.891602f, 0.874512f, 0.858887f, 0.845703f,
- 0.008102f, 0.024002f, 0.040802f, 0.057098f, 0.074768f, 0.091553f, 0.108826f, 0.126343f,
- 0.143921f, 0.161377f, 0.179077f, 0.195923f, 0.213745f, 0.230835f, 0.248047f, 0.265869f,
- 0.282227f, 0.299561f, 0.316895f, 0.334473f, 0.350586f, 0.367920f, 0.384277f, 0.400391f,
- 0.417725f, 0.434326f, 0.450195f, 0.467285f, 0.482910f, 0.498291f, 0.514648f, 0.530762f,
- 0.546387f, 0.561523f, 0.577637f, 0.593262f, 0.608398f, 0.623535f, 0.637695f, 0.654297f,
- 0.668457f, 0.682617f, 0.698242f, 0.711914f, 0.727051f, 0.741211f, 0.754395f, 0.768066f,
- 0.782715f, 0.796387f, 0.810547f, 0.823730f, 0.836426f, 0.849609f, 0.863770f, 0.876465f,
- 0.889648f, 0.902344f, 0.934570f, 0.907715f, 0.887207f, 0.870117f, 0.854980f, 0.842285f,
- 0.007504f, 0.022812f, 0.038727f, 0.054871f, 0.070312f, 0.087097f, 0.103088f, 0.119446f,
- 0.136475f, 0.153442f, 0.169556f, 0.186523f, 0.203369f, 0.219971f, 0.236450f, 0.253418f,
- 0.270264f, 0.287109f, 0.302979f, 0.319824f, 0.336182f, 0.353271f, 0.369141f, 0.386230f,
- 0.402100f, 0.417725f, 0.433594f, 0.450684f, 0.466553f, 0.482178f, 0.498047f, 0.513184f,
- 0.528809f, 0.543945f, 0.559082f, 0.575195f, 0.589844f, 0.605469f, 0.621094f, 0.634277f,
- 0.649414f, 0.665039f, 0.679688f, 0.694824f, 0.708496f, 0.722168f, 0.736816f, 0.750000f,
- 0.763184f, 0.778809f, 0.791504f, 0.805664f, 0.819336f, 0.832520f, 0.845703f, 0.858887f,
- 0.872070f, 0.885742f, 0.927246f, 0.900879f, 0.881836f, 0.864746f, 0.851074f, 0.838867f,
- 0.006836f, 0.021683f, 0.036224f, 0.051666f, 0.066772f, 0.081970f, 0.098022f, 0.113831f,
- 0.129517f, 0.145264f, 0.161011f, 0.177856f, 0.193359f, 0.209106f, 0.226196f, 0.241821f,
- 0.257812f, 0.274414f, 0.290283f, 0.306641f, 0.322754f, 0.338623f, 0.354492f, 0.370361f,
- 0.386230f, 0.402100f, 0.417725f, 0.433838f, 0.449463f, 0.465088f, 0.480469f, 0.495605f,
- 0.511719f, 0.527344f, 0.541016f, 0.556641f, 0.571777f, 0.587402f, 0.601562f, 0.617676f,
- 0.631836f, 0.646484f, 0.660645f, 0.674805f, 0.689941f, 0.704102f, 0.718262f, 0.731934f,
- 0.746582f, 0.760254f, 0.774414f, 0.786621f, 0.801758f, 0.815430f, 0.828125f, 0.842285f,
- 0.854980f, 0.868652f, 0.918457f, 0.894531f, 0.875977f, 0.859863f, 0.846680f, 0.834961f,
- 0.006672f, 0.020401f, 0.034088f, 0.048462f, 0.062927f, 0.077820f, 0.092529f, 0.107666f,
- 0.122803f, 0.137695f, 0.152954f, 0.169067f, 0.183716f, 0.199829f, 0.214722f, 0.230347f,
- 0.246704f, 0.262207f, 0.277832f, 0.292969f, 0.308105f, 0.324219f, 0.339600f, 0.354492f,
- 0.371094f, 0.386963f, 0.401855f, 0.418457f, 0.432861f, 0.449219f, 0.463379f, 0.478271f,
- 0.494385f, 0.508301f, 0.523438f, 0.539551f, 0.553711f, 0.568848f, 0.583984f, 0.598633f,
- 0.612793f, 0.627441f, 0.642578f, 0.656250f, 0.670898f, 0.685547f, 0.698730f, 0.714355f,
- 0.728027f, 0.742188f, 0.755859f, 0.769531f, 0.783691f, 0.795898f, 0.810059f, 0.824707f,
- 0.838379f, 0.850586f, 0.910645f, 0.887695f, 0.870117f, 0.854980f, 0.842285f, 0.831055f,
- 0.006207f, 0.019211f, 0.032623f, 0.046112f, 0.059662f, 0.073181f, 0.087585f, 0.102051f,
- 0.116577f, 0.130249f, 0.145142f, 0.159790f, 0.175171f, 0.189575f, 0.205322f, 0.219238f,
- 0.235474f, 0.249634f, 0.265137f, 0.280029f, 0.294678f, 0.310547f, 0.325928f, 0.340820f,
- 0.356201f, 0.371094f, 0.386230f, 0.401367f, 0.416504f, 0.431885f, 0.446533f, 0.461670f,
- 0.476074f, 0.492188f, 0.507324f, 0.520996f, 0.535645f, 0.550781f, 0.564941f, 0.580078f,
- 0.594727f, 0.609863f, 0.623535f, 0.637695f, 0.652832f, 0.667480f, 0.681152f, 0.695312f,
- 0.709473f, 0.723633f, 0.737793f, 0.751953f, 0.765137f, 0.779297f, 0.793945f, 0.807129f,
- 0.819824f, 0.833496f, 0.901855f, 0.880859f, 0.864258f, 0.850098f, 0.837891f, 0.826660f,
- 0.006020f, 0.018219f, 0.030579f, 0.043365f, 0.055908f, 0.069153f, 0.082336f, 0.096802f,
- 0.109497f, 0.123535f, 0.137451f, 0.151855f, 0.165649f, 0.180054f, 0.194702f, 0.208252f,
- 0.223999f, 0.238037f, 0.252930f, 0.267334f, 0.281982f, 0.296875f, 0.312012f, 0.326904f,
- 0.340820f, 0.355957f, 0.370850f, 0.385986f, 0.400391f, 0.415039f, 0.430176f, 0.445801f,
- 0.459229f, 0.474365f, 0.489014f, 0.502441f, 0.518066f, 0.533203f, 0.547363f, 0.562012f,
- 0.576660f, 0.590820f, 0.605469f, 0.619629f, 0.633789f, 0.647949f, 0.663574f, 0.676758f,
- 0.690918f, 0.705566f, 0.719238f, 0.733398f, 0.746582f, 0.760254f, 0.774414f, 0.788574f,
- 0.802246f, 0.816406f, 0.894043f, 0.874023f, 0.858398f, 0.844238f, 0.832031f, 0.822266f,
- 0.005520f, 0.017059f, 0.028625f, 0.040649f, 0.053131f, 0.065552f, 0.077698f, 0.091187f,
- 0.104065f, 0.117371f, 0.130859f, 0.143677f, 0.157349f, 0.171021f, 0.184814f, 0.198730f,
- 0.213135f, 0.226807f, 0.241211f, 0.255127f, 0.269775f, 0.283691f, 0.298096f, 0.312744f,
- 0.326660f, 0.341553f, 0.355957f, 0.370117f, 0.384766f, 0.399170f, 0.414307f, 0.427979f,
- 0.442627f, 0.457764f, 0.471924f, 0.486084f, 0.500488f, 0.515137f, 0.529785f, 0.543945f,
- 0.558594f, 0.572754f, 0.587402f, 0.601074f, 0.615234f, 0.629395f, 0.644043f, 0.657715f,
- 0.672852f, 0.685547f, 0.700684f, 0.714844f, 0.728027f, 0.743164f, 0.756348f, 0.770508f,
- 0.785645f, 0.798340f, 0.885254f, 0.867676f, 0.852051f, 0.839355f, 0.828125f, 0.817871f,
- 0.005241f, 0.015854f, 0.027481f, 0.038605f, 0.050171f, 0.061859f, 0.073853f, 0.085693f,
- 0.098328f, 0.111206f, 0.123474f, 0.136475f, 0.149658f, 0.162598f, 0.175293f, 0.188477f,
- 0.202148f, 0.216431f, 0.229858f, 0.242798f, 0.256104f, 0.270264f, 0.284668f, 0.298828f,
- 0.312744f, 0.326904f, 0.341064f, 0.355469f, 0.369141f, 0.383057f, 0.396729f, 0.411621f,
- 0.426025f, 0.439697f, 0.454590f, 0.468506f, 0.482666f, 0.497070f, 0.512207f, 0.525391f,
- 0.540527f, 0.555176f, 0.567871f, 0.582031f, 0.596191f, 0.610840f, 0.625488f, 0.639648f,
- 0.653809f, 0.668457f, 0.681641f, 0.695801f, 0.710449f, 0.724121f, 0.738770f, 0.751953f,
- 0.766602f, 0.780273f, 0.876465f, 0.860352f, 0.845703f, 0.833984f, 0.822754f, 0.812988f,
- 0.004982f, 0.015274f, 0.025681f, 0.036438f, 0.047119f, 0.058167f, 0.069397f, 0.081055f,
- 0.092957f, 0.104492f, 0.116577f, 0.128418f, 0.141113f, 0.153442f, 0.166504f, 0.179321f,
- 0.192261f, 0.205200f, 0.218506f, 0.231934f, 0.244629f, 0.258301f, 0.271729f, 0.284912f,
- 0.299072f, 0.312988f, 0.325684f, 0.340088f, 0.353271f, 0.367676f, 0.381836f, 0.395508f,
- 0.408936f, 0.423584f, 0.438232f, 0.451416f, 0.466309f, 0.479736f, 0.493896f, 0.507812f,
- 0.521973f, 0.536133f, 0.550293f, 0.563965f, 0.578613f, 0.592773f, 0.606934f, 0.620605f,
- 0.635254f, 0.649414f, 0.663086f, 0.677246f, 0.691406f, 0.706543f, 0.720703f, 0.734375f,
- 0.748047f, 0.762695f, 0.868164f, 0.853027f, 0.839355f, 0.828125f, 0.817383f, 0.808105f,
- 0.004745f, 0.014290f, 0.024506f, 0.034393f, 0.044617f, 0.054749f, 0.065308f, 0.076538f,
- 0.087646f, 0.098938f, 0.110535f, 0.121582f, 0.134155f, 0.145264f, 0.157837f, 0.170166f,
- 0.182373f, 0.194824f, 0.207153f, 0.220337f, 0.233276f, 0.245728f, 0.259277f, 0.271973f,
- 0.285645f, 0.298584f, 0.311768f, 0.325684f, 0.338623f, 0.352539f, 0.365967f, 0.379395f,
- 0.393066f, 0.406738f, 0.421143f, 0.434326f, 0.448730f, 0.462402f, 0.475586f, 0.490479f,
- 0.503906f, 0.518066f, 0.532227f, 0.546387f, 0.560059f, 0.574219f, 0.588379f, 0.602539f,
- 0.616211f, 0.630371f, 0.644531f, 0.658691f, 0.673340f, 0.686523f, 0.701660f, 0.715332f,
- 0.730469f, 0.745117f, 0.858887f, 0.845215f, 0.833008f, 0.821777f, 0.812012f, 0.802734f,
- 0.004494f, 0.013550f, 0.022675f, 0.032227f, 0.042145f, 0.052002f, 0.061554f, 0.072205f,
- 0.082520f, 0.093323f, 0.104614f, 0.115112f, 0.126099f, 0.137817f, 0.149536f, 0.160767f,
- 0.172607f, 0.184692f, 0.196167f, 0.208862f, 0.221924f, 0.233765f, 0.246216f, 0.258545f,
- 0.272461f, 0.284424f, 0.297119f, 0.310547f, 0.323242f, 0.336914f, 0.350586f, 0.363281f,
- 0.376953f, 0.390869f, 0.403564f, 0.416992f, 0.431152f, 0.444824f, 0.458496f, 0.472656f,
- 0.486084f, 0.500000f, 0.513672f, 0.527832f, 0.541504f, 0.555664f, 0.569824f, 0.583496f,
- 0.598145f, 0.611816f, 0.626465f, 0.639648f, 0.654297f, 0.668457f, 0.683594f, 0.697754f,
- 0.711914f, 0.726562f, 0.849609f, 0.838867f, 0.826172f, 0.815918f, 0.806641f, 0.796875f,
- 0.004288f, 0.012619f, 0.021713f, 0.030945f, 0.039368f, 0.048737f, 0.058533f, 0.067932f,
- 0.077759f, 0.088013f, 0.098755f, 0.108398f, 0.119080f, 0.129639f, 0.141235f, 0.152466f,
- 0.163940f, 0.174927f, 0.186768f, 0.198608f, 0.210205f, 0.222290f, 0.234131f, 0.246094f,
- 0.258789f, 0.270508f, 0.283203f, 0.296631f, 0.309326f, 0.321777f, 0.335449f, 0.348145f,
- 0.361084f, 0.374023f, 0.386963f, 0.400391f, 0.414062f, 0.427734f, 0.441162f, 0.455078f,
- 0.467773f, 0.482422f, 0.495117f, 0.509277f, 0.523926f, 0.536621f, 0.550781f, 0.564941f,
- 0.579102f, 0.593262f, 0.607422f, 0.621582f, 0.635742f, 0.649902f, 0.664551f, 0.678711f,
- 0.693848f, 0.708008f, 0.840820f, 0.831055f, 0.819336f, 0.809570f, 0.801270f, 0.792969f,
- 0.004013f, 0.012070f, 0.019989f, 0.029190f, 0.037415f, 0.045776f, 0.055023f, 0.064392f,
- 0.073669f, 0.083374f, 0.092224f, 0.102295f, 0.112610f, 0.122742f, 0.133057f, 0.143799f,
- 0.155273f, 0.165527f, 0.176880f, 0.188110f, 0.199463f, 0.210815f, 0.222534f, 0.234619f,
- 0.245972f, 0.258301f, 0.270508f, 0.282715f, 0.294678f, 0.307129f, 0.320557f, 0.333008f,
- 0.345947f, 0.358398f, 0.371826f, 0.384277f, 0.397461f, 0.410889f, 0.424561f, 0.437256f,
- 0.451416f, 0.464600f, 0.477783f, 0.491455f, 0.504395f, 0.518555f, 0.532715f, 0.546875f,
- 0.560547f, 0.574219f, 0.588379f, 0.604004f, 0.617188f, 0.631348f, 0.645020f, 0.660645f,
- 0.674316f, 0.689941f, 0.832031f, 0.823242f, 0.813477f, 0.803711f, 0.794922f, 0.787109f,
- 0.003790f, 0.011559f, 0.019119f, 0.027069f, 0.035034f, 0.043762f, 0.052032f, 0.060059f,
- 0.069153f, 0.078369f, 0.087280f, 0.096741f, 0.105957f, 0.115967f, 0.125732f, 0.135620f,
- 0.146118f, 0.156128f, 0.166992f, 0.177612f, 0.188965f, 0.199829f, 0.210815f, 0.222290f,
- 0.233887f, 0.244873f, 0.257324f, 0.268799f, 0.281006f, 0.292969f, 0.305420f, 0.317627f,
- 0.329834f, 0.341797f, 0.355469f, 0.368164f, 0.380859f, 0.393311f, 0.407227f, 0.419434f,
- 0.433350f, 0.446533f, 0.459961f, 0.473633f, 0.486328f, 0.500488f, 0.515625f, 0.528320f,
- 0.541504f, 0.556152f, 0.570312f, 0.584473f, 0.598633f, 0.612305f, 0.626465f, 0.640625f,
- 0.655762f, 0.670410f, 0.822266f, 0.815918f, 0.805664f, 0.796387f, 0.788574f, 0.782227f,
- 0.003599f, 0.010727f, 0.018219f, 0.025177f, 0.033203f, 0.041046f, 0.048981f, 0.057220f,
- 0.065247f, 0.073792f, 0.082764f, 0.091064f, 0.100220f, 0.108826f, 0.118591f, 0.128052f,
- 0.137573f, 0.147705f, 0.158081f, 0.167603f, 0.177979f, 0.188721f, 0.198975f, 0.210205f,
- 0.221924f, 0.232544f, 0.243774f, 0.255615f, 0.267090f, 0.278564f, 0.290039f, 0.302490f,
- 0.314941f, 0.327393f, 0.338623f, 0.352295f, 0.364014f, 0.377441f, 0.390381f, 0.403564f,
- 0.415039f, 0.428955f, 0.441895f, 0.455078f, 0.468994f, 0.482666f, 0.496094f, 0.509277f,
- 0.523926f, 0.537598f, 0.551270f, 0.565430f, 0.579590f, 0.594238f, 0.608887f, 0.622559f,
- 0.637207f, 0.651855f, 0.813477f, 0.807617f, 0.798340f, 0.790527f, 0.782715f, 0.775391f,
- 0.003355f, 0.009918f, 0.017105f, 0.023911f, 0.031281f, 0.038147f, 0.045990f, 0.053284f,
- 0.061493f, 0.069214f, 0.077026f, 0.085571f, 0.093567f, 0.102600f, 0.111755f, 0.120728f,
- 0.129761f, 0.138916f, 0.148804f, 0.158447f, 0.167725f, 0.177979f, 0.188965f, 0.198608f,
- 0.209473f, 0.220215f, 0.231567f, 0.242554f, 0.253906f, 0.264160f, 0.276123f, 0.287109f,
- 0.300049f, 0.312012f, 0.323975f, 0.336182f, 0.348145f, 0.360840f, 0.372803f, 0.385986f,
- 0.398438f, 0.411621f, 0.424316f, 0.437256f, 0.450439f, 0.464844f, 0.478027f, 0.490723f,
- 0.504395f, 0.518066f, 0.532715f, 0.546387f, 0.561523f, 0.575684f, 0.589355f, 0.604004f,
- 0.618164f, 0.632324f, 0.802246f, 0.800293f, 0.792480f, 0.783691f, 0.776367f, 0.769531f,
- 0.003265f, 0.009575f, 0.016144f, 0.022415f, 0.029510f, 0.036316f, 0.042755f, 0.050812f,
- 0.057556f, 0.065002f, 0.072388f, 0.080200f, 0.087952f, 0.096680f, 0.104858f, 0.113281f,
- 0.122070f, 0.130493f, 0.139771f, 0.148926f, 0.158447f, 0.168335f, 0.177612f, 0.187500f,
- 0.198120f, 0.208130f, 0.218750f, 0.229492f, 0.240234f, 0.250732f, 0.262207f, 0.273682f,
- 0.285156f, 0.296143f, 0.308594f, 0.320068f, 0.332520f, 0.344482f, 0.357178f, 0.368652f,
- 0.381836f, 0.394043f, 0.406494f, 0.420410f, 0.433105f, 0.445801f, 0.459717f, 0.473633f,
- 0.486816f, 0.500000f, 0.513672f, 0.527832f, 0.541992f, 0.556152f, 0.570312f, 0.585449f,
- 0.598633f, 0.613770f, 0.794434f, 0.791504f, 0.784180f, 0.776855f, 0.770020f, 0.764160f,
- 0.002954f, 0.008904f, 0.014961f, 0.021210f, 0.027420f, 0.033905f, 0.040619f, 0.047363f,
- 0.053986f, 0.060883f, 0.068054f, 0.075378f, 0.082703f, 0.090515f, 0.098022f, 0.105896f,
- 0.114319f, 0.122742f, 0.131592f, 0.139771f, 0.149170f, 0.157959f, 0.167480f, 0.177124f,
- 0.186768f, 0.196411f, 0.206543f, 0.216919f, 0.227539f, 0.237671f, 0.248413f, 0.259277f,
- 0.270264f, 0.281738f, 0.292725f, 0.304443f, 0.315918f, 0.327637f, 0.340576f, 0.352539f,
- 0.364746f, 0.377930f, 0.390137f, 0.401855f, 0.415039f, 0.428223f, 0.441406f, 0.454834f,
- 0.468506f, 0.481689f, 0.494873f, 0.509277f, 0.523438f, 0.537598f, 0.551758f, 0.565918f,
- 0.580078f, 0.594727f, 0.783691f, 0.783203f, 0.776855f, 0.770508f, 0.763672f, 0.757324f,
- 0.002836f, 0.008659f, 0.014351f, 0.019913f, 0.025772f, 0.032074f, 0.037933f, 0.044128f,
- 0.050903f, 0.057159f, 0.064026f, 0.070496f, 0.077698f, 0.085022f, 0.091919f, 0.099426f,
- 0.107727f, 0.114990f, 0.123169f, 0.131226f, 0.140015f, 0.148682f, 0.157349f, 0.166260f,
- 0.175171f, 0.184692f, 0.194214f, 0.203979f, 0.214355f, 0.224487f, 0.234985f, 0.245728f,
- 0.256104f, 0.267334f, 0.278320f, 0.288818f, 0.301025f, 0.312256f, 0.324219f, 0.335938f,
- 0.347900f, 0.360596f, 0.372070f, 0.384521f, 0.397217f, 0.410400f, 0.423340f, 0.436279f,
- 0.449463f, 0.463135f, 0.476807f, 0.490723f, 0.503906f, 0.517578f, 0.532227f, 0.546875f,
- 0.561035f, 0.575684f, 0.773926f, 0.775391f, 0.769043f, 0.763672f, 0.757812f, 0.751953f,
- 0.002506f, 0.008080f, 0.013100f, 0.018738f, 0.024384f, 0.029953f, 0.035797f, 0.041473f,
- 0.047485f, 0.053558f, 0.059265f, 0.065918f, 0.072693f, 0.079468f, 0.086426f, 0.093384f,
- 0.100708f, 0.108032f, 0.115417f, 0.122986f, 0.130615f, 0.139038f, 0.147827f, 0.156494f,
- 0.165039f, 0.173828f, 0.182617f, 0.192139f, 0.201782f, 0.211426f, 0.221558f, 0.231323f,
- 0.242188f, 0.252686f, 0.263672f, 0.274414f, 0.284912f, 0.296143f, 0.308105f, 0.319824f,
- 0.331543f, 0.343750f, 0.355225f, 0.367432f, 0.379883f, 0.393066f, 0.405273f, 0.418457f,
- 0.431641f, 0.444580f, 0.457764f, 0.471924f, 0.485840f, 0.499268f, 0.512695f, 0.527344f,
- 0.542480f, 0.556641f, 0.764160f, 0.766602f, 0.761719f, 0.756348f, 0.750488f, 0.745605f,
- 0.002640f, 0.007809f, 0.012497f, 0.017593f, 0.023102f, 0.028122f, 0.033569f, 0.038879f,
- 0.044250f, 0.049988f, 0.055908f, 0.061615f, 0.067627f, 0.074036f, 0.080566f, 0.087524f,
- 0.093262f, 0.100769f, 0.107910f, 0.114929f, 0.121948f, 0.130371f, 0.137939f, 0.146362f,
- 0.154297f, 0.163208f, 0.171509f, 0.180664f, 0.189697f, 0.199341f, 0.208618f, 0.218506f,
- 0.228394f, 0.238892f, 0.248779f, 0.259277f, 0.270752f, 0.281250f, 0.292236f, 0.303467f,
- 0.315186f, 0.326660f, 0.338867f, 0.351074f, 0.362305f, 0.374756f, 0.387939f, 0.400146f,
- 0.413330f, 0.426514f, 0.439209f, 0.452881f, 0.466553f, 0.480225f, 0.494141f, 0.508301f,
- 0.522949f, 0.537109f, 0.753906f, 0.758301f, 0.754395f, 0.749023f, 0.743652f, 0.739258f,
- 0.002441f, 0.007088f, 0.011993f, 0.016266f, 0.021255f, 0.026031f, 0.031189f, 0.036072f,
- 0.041260f, 0.046753f, 0.052155f, 0.057587f, 0.063232f, 0.068787f, 0.075623f, 0.081055f,
- 0.087341f, 0.094177f, 0.100647f, 0.106689f, 0.113892f, 0.121399f, 0.129028f, 0.136841f,
- 0.144287f, 0.152222f, 0.160522f, 0.169312f, 0.178101f, 0.186523f, 0.196045f, 0.205200f,
- 0.214966f, 0.224487f, 0.234863f, 0.244751f, 0.255371f, 0.265625f, 0.276367f, 0.287842f,
- 0.298828f, 0.310303f, 0.321533f, 0.333984f, 0.345459f, 0.357666f, 0.370117f, 0.382568f,
- 0.394287f, 0.407959f, 0.421875f, 0.433838f, 0.446777f, 0.461426f, 0.475098f, 0.488525f,
- 0.504395f, 0.517578f, 0.744141f, 0.749512f, 0.746094f, 0.741699f, 0.736816f, 0.732422f,
- 0.002172f, 0.006695f, 0.011093f, 0.015266f, 0.020081f, 0.024521f, 0.029388f, 0.033966f,
- 0.038727f, 0.043427f, 0.048706f, 0.053772f, 0.059418f, 0.064270f, 0.069580f, 0.075500f,
- 0.081421f, 0.087280f, 0.093262f, 0.099670f, 0.106567f, 0.113220f, 0.119995f, 0.127197f,
- 0.134644f, 0.142212f, 0.150146f, 0.157959f, 0.166382f, 0.174927f, 0.184082f, 0.192505f,
- 0.201904f, 0.211792f, 0.220825f, 0.230713f, 0.240601f, 0.251221f, 0.261719f, 0.272461f,
- 0.282715f, 0.294434f, 0.305420f, 0.316650f, 0.328369f, 0.340088f, 0.352783f, 0.364746f,
- 0.377197f, 0.389648f, 0.402832f, 0.416016f, 0.429443f, 0.442627f, 0.456055f, 0.469971f,
- 0.484863f, 0.499268f, 0.733887f, 0.741211f, 0.737793f, 0.734375f, 0.729980f, 0.725586f,
- 0.002045f, 0.006187f, 0.010406f, 0.014664f, 0.018570f, 0.022675f, 0.027176f, 0.031586f,
- 0.035858f, 0.040253f, 0.045227f, 0.049774f, 0.054504f, 0.059692f, 0.065186f, 0.070374f,
- 0.075500f, 0.080627f, 0.086792f, 0.092285f, 0.098999f, 0.104675f, 0.111816f, 0.118286f,
- 0.125610f, 0.132324f, 0.139771f, 0.147339f, 0.155029f, 0.163696f, 0.171631f, 0.180420f,
- 0.189087f, 0.197754f, 0.207275f, 0.216309f, 0.226440f, 0.236694f, 0.246338f, 0.256836f,
- 0.267334f, 0.278320f, 0.289062f, 0.300537f, 0.312012f, 0.323975f, 0.335449f, 0.347168f,
- 0.359375f, 0.372314f, 0.384521f, 0.396973f, 0.410400f, 0.423584f, 0.437500f, 0.450928f,
- 0.465332f, 0.479736f, 0.723145f, 0.732422f, 0.729980f, 0.726562f, 0.722656f, 0.718750f,
- 0.002148f, 0.005802f, 0.009811f, 0.013565f, 0.017578f, 0.021179f, 0.025040f, 0.029053f,
- 0.033417f, 0.037445f, 0.042114f, 0.046112f, 0.050720f, 0.055511f, 0.060028f, 0.065002f,
- 0.069458f, 0.075134f, 0.080078f, 0.085693f, 0.091492f, 0.097290f, 0.103394f, 0.109802f,
- 0.116089f, 0.122925f, 0.129883f, 0.136963f, 0.144165f, 0.151733f, 0.160156f, 0.167847f,
- 0.176392f, 0.184692f, 0.193848f, 0.203003f, 0.212402f, 0.221680f, 0.231689f, 0.242065f,
- 0.251953f, 0.262207f, 0.273193f, 0.283936f, 0.295410f, 0.306152f, 0.318359f, 0.329590f,
- 0.342285f, 0.354248f, 0.366455f, 0.379150f, 0.391846f, 0.405273f, 0.418701f, 0.432617f,
- 0.446289f, 0.460205f, 0.712891f, 0.723633f, 0.722168f, 0.718750f, 0.715332f, 0.712402f,
- 0.001963f, 0.005642f, 0.009071f, 0.012756f, 0.016006f, 0.020020f, 0.023422f, 0.027679f,
- 0.030762f, 0.034943f, 0.038605f, 0.042969f, 0.047028f, 0.051178f, 0.055542f, 0.060120f,
- 0.064575f, 0.069153f, 0.074280f, 0.079041f, 0.084595f, 0.089905f, 0.095276f, 0.101440f,
- 0.107300f, 0.113586f, 0.119751f, 0.127075f, 0.134033f, 0.141357f, 0.148438f, 0.155884f,
- 0.164062f, 0.172729f, 0.180542f, 0.190063f, 0.198364f, 0.207764f, 0.217163f, 0.226807f,
- 0.236938f, 0.247070f, 0.257324f, 0.268066f, 0.278320f, 0.289795f, 0.301025f, 0.312744f,
- 0.324707f, 0.336182f, 0.347900f, 0.360840f, 0.372803f, 0.386230f, 0.399902f, 0.413574f,
- 0.427246f, 0.441162f, 0.702148f, 0.714355f, 0.713867f, 0.711426f, 0.707520f, 0.704590f,
- 0.001995f, 0.005245f, 0.008553f, 0.011543f, 0.015015f, 0.018326f, 0.021881f, 0.025131f,
- 0.028641f, 0.032349f, 0.035675f, 0.039520f, 0.043549f, 0.047089f, 0.051086f, 0.054962f,
- 0.059265f, 0.063782f, 0.068054f, 0.072571f, 0.077759f, 0.082520f, 0.088013f, 0.093323f,
- 0.098755f, 0.104858f, 0.111145f, 0.117371f, 0.123840f, 0.130615f, 0.137207f, 0.144897f,
- 0.152344f, 0.160278f, 0.167969f, 0.176514f, 0.185425f, 0.193848f, 0.202881f, 0.212524f,
- 0.221924f, 0.231323f, 0.241821f, 0.251953f, 0.262451f, 0.272949f, 0.284424f, 0.295166f,
- 0.306396f, 0.319092f, 0.329590f, 0.343018f, 0.355225f, 0.368652f, 0.381348f, 0.393799f,
- 0.408447f, 0.422852f, 0.691406f, 0.706055f, 0.706055f, 0.703125f, 0.700684f, 0.697754f,
- 0.001692f, 0.004898f, 0.007828f, 0.011070f, 0.013992f, 0.017227f, 0.020187f, 0.023499f,
- 0.026520f, 0.029526f, 0.033081f, 0.036377f, 0.039459f, 0.043396f, 0.047028f, 0.050323f,
- 0.054199f, 0.058350f, 0.062317f, 0.066711f, 0.071106f, 0.075928f, 0.080750f, 0.085510f,
- 0.090820f, 0.096497f, 0.102234f, 0.107727f, 0.114075f, 0.120300f, 0.126587f, 0.133789f,
- 0.141113f, 0.148193f, 0.156006f, 0.163696f, 0.171753f, 0.180542f, 0.188965f, 0.198120f,
- 0.207275f, 0.216797f, 0.226318f, 0.236206f, 0.246338f, 0.256836f, 0.267334f, 0.278809f,
- 0.289795f, 0.300781f, 0.313232f, 0.324707f, 0.337402f, 0.349365f, 0.362305f, 0.376221f,
- 0.389404f, 0.403809f, 0.680176f, 0.696289f, 0.697266f, 0.695312f, 0.692871f, 0.689941f,
- 0.001606f, 0.004543f, 0.007450f, 0.010269f, 0.012962f, 0.015900f, 0.018677f, 0.021591f,
- 0.024628f, 0.027618f, 0.030182f, 0.033783f, 0.036194f, 0.039734f, 0.042725f, 0.046478f,
- 0.049652f, 0.053253f, 0.057251f, 0.060883f, 0.065186f, 0.069336f, 0.073730f, 0.078247f,
- 0.083252f, 0.088501f, 0.093628f, 0.099182f, 0.104553f, 0.110718f, 0.116577f, 0.123108f,
- 0.129883f, 0.136719f, 0.143921f, 0.151367f, 0.159302f, 0.167114f, 0.175415f, 0.183960f,
- 0.192871f, 0.202148f, 0.210938f, 0.221436f, 0.230713f, 0.240723f, 0.250977f, 0.261963f,
- 0.272461f, 0.283691f, 0.295166f, 0.306885f, 0.319092f, 0.331055f, 0.343750f, 0.356689f,
- 0.370361f, 0.383545f, 0.669434f, 0.687500f, 0.688965f, 0.687500f, 0.685547f, 0.682617f,
- 0.001701f, 0.004345f, 0.006802f, 0.009514f, 0.012283f, 0.014793f, 0.017288f, 0.019958f,
- 0.022614f, 0.025177f, 0.027695f, 0.030487f, 0.033081f, 0.035858f, 0.039185f, 0.042236f,
- 0.045319f, 0.048523f, 0.051941f, 0.055847f, 0.059326f, 0.063171f, 0.067139f, 0.071594f,
- 0.075928f, 0.080566f, 0.085571f, 0.090454f, 0.095520f, 0.101196f, 0.106567f, 0.112427f,
- 0.119019f, 0.125610f, 0.132324f, 0.139282f, 0.146973f, 0.154419f, 0.161987f, 0.170532f,
- 0.178833f, 0.187134f, 0.196777f, 0.206177f, 0.214966f, 0.225220f, 0.235352f, 0.246094f,
- 0.255615f, 0.266846f, 0.278320f, 0.290039f, 0.301270f, 0.313477f, 0.325195f, 0.338867f,
- 0.352539f, 0.365234f, 0.657715f, 0.678711f, 0.679688f, 0.679199f, 0.677734f, 0.675293f,
- 0.001310f, 0.003979f, 0.006393f, 0.008522f, 0.011223f, 0.013557f, 0.015976f, 0.018433f,
- 0.020737f, 0.022842f, 0.025421f, 0.027649f, 0.030289f, 0.032806f, 0.035645f, 0.038025f,
- 0.041199f, 0.044220f, 0.047058f, 0.050720f, 0.053589f, 0.057281f, 0.061157f, 0.064941f,
- 0.068787f, 0.072998f, 0.077698f, 0.082153f, 0.086975f, 0.092102f, 0.097229f, 0.103027f,
- 0.108826f, 0.114746f, 0.121094f, 0.127930f, 0.134521f, 0.141846f, 0.149292f, 0.157227f,
- 0.164673f, 0.173218f, 0.182007f, 0.190552f, 0.199951f, 0.209717f, 0.219360f, 0.229004f,
- 0.239502f, 0.250244f, 0.260986f, 0.272461f, 0.282959f, 0.295166f, 0.307373f, 0.320557f,
- 0.333252f, 0.346436f, 0.646973f, 0.668945f, 0.670898f, 0.671387f, 0.669922f, 0.668457f,
- 0.001348f, 0.003523f, 0.005863f, 0.008133f, 0.010338f, 0.012520f, 0.014511f, 0.016464f,
- 0.018768f, 0.020920f, 0.022888f, 0.025665f, 0.027588f, 0.029861f, 0.032135f, 0.034485f,
- 0.037140f, 0.040039f, 0.042725f, 0.045532f, 0.048859f, 0.051971f, 0.055237f, 0.058594f,
- 0.062408f, 0.066101f, 0.070251f, 0.074280f, 0.078735f, 0.083435f, 0.088318f, 0.093567f,
- 0.098633f, 0.104431f, 0.110291f, 0.116455f, 0.122986f, 0.129517f, 0.136963f, 0.143921f,
- 0.152222f, 0.159546f, 0.167358f, 0.176514f, 0.185181f, 0.194214f, 0.203857f, 0.213623f,
- 0.223389f, 0.233521f, 0.244385f, 0.255127f, 0.266602f, 0.277832f, 0.289307f, 0.301758f,
- 0.314697f, 0.328613f, 0.635254f, 0.659668f, 0.663086f, 0.663086f, 0.662109f, 0.660156f,
- 0.001084f, 0.003263f, 0.005554f, 0.007416f, 0.009445f, 0.011185f, 0.013161f, 0.015366f,
- 0.017136f, 0.019058f, 0.020935f, 0.022781f, 0.024857f, 0.026886f, 0.029160f, 0.031097f,
- 0.033569f, 0.035858f, 0.038361f, 0.040924f, 0.043427f, 0.046478f, 0.049500f, 0.052948f,
- 0.056122f, 0.059418f, 0.063293f, 0.067139f, 0.070923f, 0.075073f, 0.079712f, 0.084229f,
- 0.089233f, 0.094604f, 0.100037f, 0.105774f, 0.111694f, 0.117798f, 0.124634f, 0.131226f,
- 0.139038f, 0.146484f, 0.154175f, 0.162231f, 0.170654f, 0.179199f, 0.188599f, 0.197754f,
- 0.207153f, 0.217407f, 0.227295f, 0.238159f, 0.248657f, 0.260986f, 0.271973f, 0.284912f,
- 0.296631f, 0.308838f, 0.623535f, 0.650391f, 0.653809f, 0.654297f, 0.653809f, 0.652832f,
- 0.001070f, 0.003069f, 0.005108f, 0.006855f, 0.008522f, 0.010384f, 0.011993f, 0.013847f,
- 0.015549f, 0.016968f, 0.018677f, 0.020660f, 0.022079f, 0.024048f, 0.026077f, 0.027954f,
- 0.030014f, 0.032135f, 0.034210f, 0.036560f, 0.038971f, 0.041840f, 0.044434f, 0.047089f,
- 0.049896f, 0.053284f, 0.056763f, 0.060120f, 0.063477f, 0.067505f, 0.071533f, 0.075928f,
- 0.080261f, 0.085205f, 0.089905f, 0.095520f, 0.100830f, 0.106567f, 0.113159f, 0.119385f,
- 0.126221f, 0.133301f, 0.140259f, 0.148560f, 0.156494f, 0.165039f, 0.173462f, 0.182861f,
- 0.192017f, 0.201172f, 0.211548f, 0.221802f, 0.232666f, 0.243286f, 0.254639f, 0.265869f,
- 0.278809f, 0.291260f, 0.611816f, 0.640625f, 0.645508f, 0.645996f, 0.645508f, 0.645020f,
- 0.001057f, 0.002815f, 0.004646f, 0.006187f, 0.007935f, 0.009583f, 0.011139f, 0.012428f,
- 0.013878f, 0.015404f, 0.016830f, 0.018433f, 0.019836f, 0.021637f, 0.023300f, 0.024857f,
- 0.026855f, 0.028519f, 0.030533f, 0.032593f, 0.034790f, 0.037140f, 0.039520f, 0.041748f,
- 0.044525f, 0.047302f, 0.050232f, 0.053497f, 0.056580f, 0.059998f, 0.063721f, 0.067627f,
- 0.071777f, 0.076111f, 0.080627f, 0.085571f, 0.090698f, 0.096130f, 0.101624f, 0.107849f,
- 0.114258f, 0.120544f, 0.127686f, 0.135132f, 0.142700f, 0.150269f, 0.158813f, 0.167725f,
- 0.176392f, 0.185791f, 0.195312f, 0.205444f, 0.216064f, 0.226562f, 0.237793f, 0.248657f,
- 0.260254f, 0.272949f, 0.600098f, 0.631348f, 0.636230f, 0.637207f, 0.637695f, 0.636719f,
- 0.001022f, 0.002628f, 0.004486f, 0.005684f, 0.007179f, 0.008636f, 0.009911f, 0.011307f,
- 0.012428f, 0.013771f, 0.015152f, 0.016342f, 0.017822f, 0.018997f, 0.020584f, 0.022263f,
- 0.023651f, 0.025482f, 0.027191f, 0.028793f, 0.030960f, 0.032715f, 0.034912f, 0.036987f,
- 0.039368f, 0.041840f, 0.044495f, 0.047180f, 0.050110f, 0.053314f, 0.056580f, 0.060059f,
- 0.063660f, 0.067383f, 0.071777f, 0.075928f, 0.081055f, 0.085938f, 0.091187f, 0.096619f,
- 0.102356f, 0.108826f, 0.115051f, 0.121948f, 0.129150f, 0.136475f, 0.144653f, 0.152832f,
- 0.161621f, 0.170288f, 0.179932f, 0.189209f, 0.198730f, 0.209595f, 0.220459f, 0.231201f,
- 0.242798f, 0.255615f, 0.588867f, 0.621094f, 0.626953f, 0.629883f, 0.629395f, 0.629883f,
- 0.001016f, 0.002304f, 0.003975f, 0.005024f, 0.006584f, 0.007812f, 0.008926f, 0.009987f,
- 0.011024f, 0.012199f, 0.013321f, 0.014595f, 0.015617f, 0.016830f, 0.018326f, 0.019577f,
- 0.020798f, 0.022293f, 0.023758f, 0.025253f, 0.027145f, 0.028656f, 0.030640f, 0.032501f,
- 0.034546f, 0.036682f, 0.039001f, 0.041412f, 0.044037f, 0.046875f, 0.049622f, 0.052917f,
- 0.056030f, 0.059387f, 0.063354f, 0.067383f, 0.071655f, 0.075928f, 0.080750f, 0.085876f,
- 0.091248f, 0.097168f, 0.102905f, 0.109497f, 0.116272f, 0.123413f, 0.130859f, 0.138550f,
- 0.147217f, 0.155518f, 0.164551f, 0.173828f, 0.183350f, 0.193481f, 0.204102f, 0.214600f,
- 0.225342f, 0.237915f, 0.575684f, 0.611816f, 0.617188f, 0.621094f, 0.621582f, 0.620605f,
- 0.000768f, 0.002398f, 0.003801f, 0.004875f, 0.005848f, 0.006889f, 0.008072f, 0.008820f,
- 0.009758f, 0.010910f, 0.011810f, 0.013023f, 0.013878f, 0.014786f, 0.016083f, 0.017166f,
- 0.018402f, 0.019577f, 0.020691f, 0.022125f, 0.023743f, 0.025009f, 0.026779f, 0.028336f,
- 0.030075f, 0.031921f, 0.033997f, 0.036255f, 0.038452f, 0.040833f, 0.043488f, 0.045959f,
- 0.049011f, 0.052216f, 0.055634f, 0.059052f, 0.062744f, 0.066956f, 0.071289f, 0.075745f,
- 0.080566f, 0.086060f, 0.091614f, 0.097351f, 0.103821f, 0.110291f, 0.117432f, 0.124939f,
- 0.132568f, 0.140869f, 0.149414f, 0.158325f, 0.168213f, 0.177368f, 0.187744f, 0.197876f,
- 0.208984f, 0.219849f, 0.563965f, 0.602051f, 0.608887f, 0.610840f, 0.613770f, 0.612305f,
- 0.000764f, 0.002028f, 0.003302f, 0.004276f, 0.005325f, 0.006035f, 0.007034f, 0.007843f,
- 0.008904f, 0.009628f, 0.010323f, 0.011192f, 0.012039f, 0.013092f, 0.013924f, 0.014854f,
- 0.015793f, 0.016953f, 0.018036f, 0.019211f, 0.020355f, 0.021667f, 0.023010f, 0.024582f,
- 0.026016f, 0.027771f, 0.029434f, 0.031235f, 0.033264f, 0.035217f, 0.037628f, 0.039886f,
- 0.042084f, 0.044952f, 0.048126f, 0.051392f, 0.054779f, 0.058197f, 0.062164f, 0.066223f,
- 0.070740f, 0.075439f, 0.080566f, 0.086182f, 0.091919f, 0.098145f, 0.104431f, 0.111633f,
- 0.119080f, 0.126587f, 0.134888f, 0.143311f, 0.152710f, 0.162109f, 0.171631f, 0.182129f,
- 0.192139f, 0.203491f, 0.552246f, 0.591309f, 0.599609f, 0.602539f, 0.604004f, 0.604980f,
- 0.000782f, 0.001970f, 0.003082f, 0.003859f, 0.004635f, 0.005611f, 0.006123f, 0.006767f,
- 0.007595f, 0.008270f, 0.009140f, 0.009674f, 0.010490f, 0.011040f, 0.011902f, 0.012749f,
- 0.013573f, 0.014526f, 0.015656f, 0.016541f, 0.017548f, 0.018631f, 0.019730f, 0.021103f,
- 0.022446f, 0.023758f, 0.025162f, 0.026611f, 0.028458f, 0.030441f, 0.032074f, 0.034302f,
- 0.036316f, 0.038727f, 0.041138f, 0.044098f, 0.046997f, 0.050232f, 0.053711f, 0.057281f,
- 0.061340f, 0.065491f, 0.070435f, 0.075256f, 0.080688f, 0.086426f, 0.092346f, 0.098694f,
- 0.105896f, 0.113098f, 0.120911f, 0.129028f, 0.137695f, 0.146606f, 0.155884f, 0.165894f,
- 0.175903f, 0.186768f, 0.540527f, 0.582520f, 0.590332f, 0.593750f, 0.594727f, 0.596191f,
- 0.000711f, 0.001649f, 0.002529f, 0.003332f, 0.004036f, 0.004799f, 0.005444f, 0.006050f,
- 0.006638f, 0.007160f, 0.007771f, 0.008331f, 0.008980f, 0.009644f, 0.010307f, 0.010887f,
- 0.011787f, 0.012306f, 0.013176f, 0.014099f, 0.014915f, 0.015839f, 0.016708f, 0.017822f,
- 0.019073f, 0.020233f, 0.021423f, 0.022690f, 0.024033f, 0.025589f, 0.027344f, 0.028976f,
- 0.030930f, 0.032990f, 0.035156f, 0.037445f, 0.040131f, 0.042847f, 0.045776f, 0.049042f,
- 0.052551f, 0.056519f, 0.060486f, 0.064941f, 0.069458f, 0.074951f, 0.080444f, 0.086487f,
- 0.092957f, 0.099915f, 0.107361f, 0.114929f, 0.123535f, 0.131714f, 0.140747f, 0.150513f,
- 0.160767f, 0.171265f, 0.527832f, 0.572754f, 0.581543f, 0.583496f, 0.586426f, 0.587402f,
- 0.000504f, 0.001575f, 0.002235f, 0.003147f, 0.003641f, 0.004150f, 0.004570f, 0.005173f,
- 0.005863f, 0.006016f, 0.006462f, 0.007111f, 0.007660f, 0.008156f, 0.008736f, 0.009354f,
- 0.010094f, 0.010475f, 0.011253f, 0.011879f, 0.012657f, 0.013603f, 0.014267f, 0.015099f,
- 0.016144f, 0.017014f, 0.017990f, 0.019104f, 0.020416f, 0.021652f, 0.022919f, 0.024353f,
- 0.025986f, 0.027710f, 0.029602f, 0.031494f, 0.033722f, 0.036102f, 0.038635f, 0.041412f,
- 0.044525f, 0.047729f, 0.051636f, 0.055511f, 0.059540f, 0.064331f, 0.069580f, 0.075073f,
- 0.080750f, 0.087341f, 0.094116f, 0.101379f, 0.109558f, 0.117676f, 0.126221f, 0.135376f,
- 0.145874f, 0.155518f, 0.516113f, 0.562012f, 0.571777f, 0.576172f, 0.578125f, 0.579102f,
- 0.000445f, 0.001304f, 0.002201f, 0.002535f, 0.003126f, 0.003664f, 0.004047f, 0.004463f,
- 0.004887f, 0.005234f, 0.005711f, 0.005997f, 0.006500f, 0.006901f, 0.007389f, 0.007904f,
- 0.008293f, 0.008919f, 0.009499f, 0.009941f, 0.010635f, 0.011269f, 0.011948f, 0.012589f,
- 0.013435f, 0.014252f, 0.015091f, 0.016052f, 0.017059f, 0.017960f, 0.019241f, 0.020264f,
- 0.021667f, 0.022995f, 0.024628f, 0.026230f, 0.027985f, 0.029984f, 0.032288f, 0.034515f,
- 0.037140f, 0.040009f, 0.043152f, 0.046722f, 0.050354f, 0.054504f, 0.059143f, 0.064026f,
- 0.069458f, 0.075256f, 0.081726f, 0.088562f, 0.095825f, 0.103516f, 0.112000f, 0.120850f,
- 0.130005f, 0.140381f, 0.502441f, 0.551758f, 0.562012f, 0.566406f, 0.568848f, 0.571289f,
- 0.000396f, 0.001226f, 0.001812f, 0.002357f, 0.002796f, 0.003094f, 0.003328f, 0.003763f,
- 0.003979f, 0.004364f, 0.004642f, 0.005051f, 0.005489f, 0.005745f, 0.006126f, 0.006611f,
- 0.007004f, 0.007473f, 0.007771f, 0.008293f, 0.008919f, 0.009392f, 0.009941f, 0.010483f,
- 0.011169f, 0.011765f, 0.012436f, 0.013344f, 0.014030f, 0.014908f, 0.015778f, 0.016769f,
- 0.017838f, 0.018997f, 0.020279f, 0.021622f, 0.023056f, 0.024704f, 0.026474f, 0.028580f,
- 0.030579f, 0.033051f, 0.035706f, 0.038605f, 0.041840f, 0.045380f, 0.049500f, 0.053986f,
- 0.058685f, 0.063843f, 0.069885f, 0.076050f, 0.083191f, 0.090576f, 0.098511f, 0.107056f,
- 0.115479f, 0.125122f, 0.491211f, 0.541504f, 0.552734f, 0.557617f, 0.560547f, 0.562012f,
- 0.000559f, 0.001152f, 0.001668f, 0.001955f, 0.002234f, 0.002550f, 0.002821f, 0.003057f,
- 0.003296f, 0.003635f, 0.003948f, 0.004189f, 0.004448f, 0.004761f, 0.005077f, 0.005417f,
- 0.005699f, 0.006142f, 0.006458f, 0.006844f, 0.007271f, 0.007717f, 0.008156f, 0.008675f,
- 0.009132f, 0.009590f, 0.010277f, 0.010864f, 0.011482f, 0.012131f, 0.012901f, 0.013741f,
- 0.014595f, 0.015549f, 0.016525f, 0.017563f, 0.018799f, 0.020111f, 0.021484f, 0.023087f,
- 0.024765f, 0.026840f, 0.028992f, 0.031403f, 0.034119f, 0.037323f, 0.040680f, 0.044464f,
- 0.048584f, 0.053345f, 0.058838f, 0.064514f, 0.071045f, 0.078247f, 0.085571f, 0.093567f,
- 0.101685f, 0.111023f, 0.477539f, 0.531738f, 0.542969f, 0.548340f, 0.552246f, 0.553711f,
- 0.000459f, 0.000939f, 0.001184f, 0.001600f, 0.001761f, 0.002144f, 0.002258f, 0.002546f,
- 0.002708f, 0.002922f, 0.003157f, 0.003414f, 0.003588f, 0.003918f, 0.004154f, 0.004387f,
- 0.004662f, 0.004993f, 0.005249f, 0.005566f, 0.005867f, 0.006252f, 0.006573f, 0.007061f,
- 0.007408f, 0.007858f, 0.008270f, 0.008713f, 0.009361f, 0.009911f, 0.010513f, 0.011047f,
- 0.011841f, 0.012566f, 0.013252f, 0.014175f, 0.015182f, 0.016220f, 0.017258f, 0.018524f,
- 0.019882f, 0.021454f, 0.023132f, 0.025146f, 0.027405f, 0.029877f, 0.032745f, 0.035919f,
- 0.039642f, 0.043823f, 0.048492f, 0.053619f, 0.059235f, 0.065735f, 0.072693f, 0.080383f,
- 0.088867f, 0.097412f, 0.466309f, 0.520508f, 0.533691f, 0.539062f, 0.542480f, 0.543945f,
- 0.000369f, 0.000915f, 0.001124f, 0.001297f, 0.001534f, 0.001741f, 0.001833f, 0.002111f,
- 0.002272f, 0.002369f, 0.002516f, 0.002766f, 0.002920f, 0.003162f, 0.003317f, 0.003551f,
- 0.003723f, 0.003941f, 0.004211f, 0.004425f, 0.004757f, 0.004993f, 0.005306f, 0.005581f,
- 0.005859f, 0.006203f, 0.006592f, 0.007015f, 0.007450f, 0.007828f, 0.008377f, 0.008797f,
- 0.009361f, 0.009895f, 0.010582f, 0.011322f, 0.012016f, 0.012772f, 0.013687f, 0.014748f,
- 0.015778f, 0.016907f, 0.018326f, 0.019821f, 0.021622f, 0.023483f, 0.025742f, 0.028473f,
- 0.031525f, 0.034943f, 0.038910f, 0.043457f, 0.048645f, 0.054749f, 0.061279f, 0.068420f,
- 0.076111f, 0.084778f, 0.453613f, 0.510742f, 0.523926f, 0.529785f, 0.533203f, 0.536133f,
- 0.000186f, 0.000582f, 0.000925f, 0.001026f, 0.001228f, 0.001351f, 0.001470f, 0.001606f,
- 0.001765f, 0.001908f, 0.001999f, 0.002104f, 0.002281f, 0.002476f, 0.002659f, 0.002766f,
- 0.002911f, 0.003040f, 0.003344f, 0.003475f, 0.003683f, 0.003922f, 0.004185f, 0.004417f,
- 0.004673f, 0.004890f, 0.005123f, 0.005440f, 0.005817f, 0.006126f, 0.006481f, 0.006859f,
- 0.007275f, 0.007740f, 0.008202f, 0.008728f, 0.009315f, 0.009972f, 0.010597f, 0.011391f,
- 0.012268f, 0.013252f, 0.014221f, 0.015388f, 0.016724f, 0.018265f, 0.020004f, 0.022049f,
- 0.024445f, 0.027206f, 0.030762f, 0.034424f, 0.038971f, 0.044220f, 0.050262f, 0.056976f,
- 0.064575f, 0.072083f, 0.441650f, 0.500488f, 0.514160f, 0.520020f, 0.524414f, 0.526855f,
- 0.000194f, 0.000467f, 0.000775f, 0.000911f, 0.000994f, 0.001081f, 0.001221f, 0.001204f,
- 0.001368f, 0.001479f, 0.001582f, 0.001707f, 0.001801f, 0.001921f, 0.001993f, 0.002146f,
- 0.002245f, 0.002398f, 0.002531f, 0.002674f, 0.002871f, 0.003033f, 0.003172f, 0.003374f,
- 0.003519f, 0.003742f, 0.003963f, 0.004158f, 0.004448f, 0.004650f, 0.005032f, 0.005230f,
- 0.005550f, 0.005932f, 0.006241f, 0.006634f, 0.007088f, 0.007572f, 0.008110f, 0.008636f,
- 0.009323f, 0.010071f, 0.010834f, 0.011757f, 0.012779f, 0.013863f, 0.015190f, 0.016769f,
- 0.018555f, 0.020706f, 0.023331f, 0.026352f, 0.030182f, 0.034760f, 0.040039f, 0.046356f,
- 0.053406f, 0.060638f, 0.427979f, 0.489502f, 0.504883f, 0.511719f, 0.515137f, 0.518066f,
- 0.000339f, 0.000388f, 0.000559f, 0.000617f, 0.000667f, 0.000795f, 0.000853f, 0.000938f,
- 0.000972f, 0.001079f, 0.001217f, 0.001274f, 0.001369f, 0.001480f, 0.001536f, 0.001581f,
- 0.001711f, 0.001804f, 0.001900f, 0.002047f, 0.002129f, 0.002245f, 0.002394f, 0.002493f,
- 0.002645f, 0.002773f, 0.002974f, 0.003124f, 0.003307f, 0.003559f, 0.003757f, 0.003893f,
- 0.004169f, 0.004353f, 0.004684f, 0.004963f, 0.005272f, 0.005615f, 0.005981f, 0.006420f,
- 0.006878f, 0.007378f, 0.008080f, 0.008682f, 0.009438f, 0.010239f, 0.011299f, 0.012459f,
- 0.013809f, 0.015305f, 0.017212f, 0.019501f, 0.022583f, 0.026245f, 0.030838f, 0.036255f,
- 0.042938f, 0.049988f, 0.416504f, 0.479492f, 0.495361f, 0.501465f, 0.505859f, 0.508789f,
- 0.000148f, 0.000349f, 0.000414f, 0.000480f, 0.000554f, 0.000575f, 0.000675f, 0.000641f,
- 0.000743f, 0.000809f, 0.000882f, 0.000919f, 0.000967f, 0.001019f, 0.001122f, 0.001156f,
- 0.001264f, 0.001322f, 0.001392f, 0.001431f, 0.001529f, 0.001625f, 0.001735f, 0.001802f,
- 0.001912f, 0.002007f, 0.002131f, 0.002237f, 0.002338f, 0.002525f, 0.002638f, 0.002850f,
- 0.002962f, 0.003130f, 0.003347f, 0.003536f, 0.003784f, 0.004063f, 0.004364f, 0.004623f,
- 0.004929f, 0.005314f, 0.005714f, 0.006191f, 0.006760f, 0.007385f, 0.008080f, 0.008919f,
- 0.009933f, 0.011078f, 0.012390f, 0.014130f, 0.016251f, 0.019012f, 0.022720f, 0.027496f,
- 0.033234f, 0.040192f, 0.403320f, 0.468994f, 0.485352f, 0.491943f, 0.497070f, 0.500000f,
- 0.000093f, 0.000191f, 0.000299f, 0.000284f, 0.000367f, 0.000453f, 0.000420f, 0.000467f,
- 0.000519f, 0.000611f, 0.000607f, 0.000626f, 0.000647f, 0.000722f, 0.000741f, 0.000815f,
- 0.000829f, 0.000910f, 0.000967f, 0.001023f, 0.001076f, 0.001138f, 0.001197f, 0.001260f,
- 0.001334f, 0.001393f, 0.001490f, 0.001562f, 0.001633f, 0.001772f, 0.001831f, 0.001949f,
- 0.002056f, 0.002167f, 0.002312f, 0.002472f, 0.002607f, 0.002781f, 0.002972f, 0.003145f,
- 0.003387f, 0.003647f, 0.003941f, 0.004253f, 0.004604f, 0.005051f, 0.005558f, 0.006165f,
- 0.006836f, 0.007660f, 0.008652f, 0.009796f, 0.011284f, 0.013260f, 0.015945f, 0.019608f,
- 0.024734f, 0.031082f, 0.390625f, 0.459229f, 0.475586f, 0.482910f, 0.488037f, 0.490723f,
- 0.000132f, 0.000208f, 0.000217f, 0.000221f, 0.000267f, 0.000272f, 0.000277f, 0.000320f,
- 0.000356f, 0.000372f, 0.000372f, 0.000446f, 0.000436f, 0.000487f, 0.000514f, 0.000531f,
- 0.000587f, 0.000601f, 0.000629f, 0.000658f, 0.000707f, 0.000736f, 0.000784f, 0.000816f,
- 0.000880f, 0.000909f, 0.000978f, 0.001035f, 0.001084f, 0.001135f, 0.001200f, 0.001278f,
- 0.001357f, 0.001429f, 0.001516f, 0.001588f, 0.001724f, 0.001802f, 0.001949f, 0.002085f,
- 0.002230f, 0.002373f, 0.002554f, 0.002743f, 0.003000f, 0.003300f, 0.003611f, 0.003963f,
- 0.004425f, 0.004967f, 0.005630f, 0.006424f, 0.007462f, 0.008812f, 0.010551f, 0.013184f,
- 0.017258f, 0.022980f, 0.377686f, 0.448242f, 0.465820f, 0.474121f, 0.478760f, 0.481934f,
- 0.000041f, 0.000149f, 0.000126f, 0.000128f, 0.000158f, 0.000196f, 0.000174f, 0.000206f,
- 0.000216f, 0.000223f, 0.000231f, 0.000244f, 0.000276f, 0.000291f, 0.000312f, 0.000326f,
- 0.000338f, 0.000374f, 0.000387f, 0.000423f, 0.000430f, 0.000447f, 0.000471f, 0.000509f,
- 0.000538f, 0.000583f, 0.000591f, 0.000613f, 0.000659f, 0.000688f, 0.000743f, 0.000779f,
- 0.000833f, 0.000865f, 0.000924f, 0.000966f, 0.001033f, 0.001106f, 0.001186f, 0.001245f,
- 0.001336f, 0.001453f, 0.001559f, 0.001685f, 0.001807f, 0.001980f, 0.002207f, 0.002417f,
- 0.002689f, 0.003027f, 0.003418f, 0.003933f, 0.004604f, 0.005482f, 0.006641f, 0.008263f,
- 0.011017f, 0.015778f, 0.364746f, 0.437256f, 0.456055f, 0.463623f, 0.469238f, 0.472656f,
- 0.000100f, 0.000089f, 0.000085f, 0.000081f, 0.000101f, 0.000096f, 0.000116f, 0.000116f,
- 0.000119f, 0.000126f, 0.000141f, 0.000157f, 0.000149f, 0.000158f, 0.000179f, 0.000176f,
- 0.000195f, 0.000206f, 0.000216f, 0.000222f, 0.000240f, 0.000246f, 0.000269f, 0.000279f,
- 0.000303f, 0.000320f, 0.000333f, 0.000345f, 0.000365f, 0.000379f, 0.000409f, 0.000434f,
- 0.000453f, 0.000477f, 0.000511f, 0.000541f, 0.000569f, 0.000608f, 0.000656f, 0.000689f,
- 0.000738f, 0.000795f, 0.000867f, 0.000918f, 0.001005f, 0.001087f, 0.001189f, 0.001312f,
- 0.001465f, 0.001656f, 0.001873f, 0.002171f, 0.002546f, 0.003056f, 0.003767f, 0.004765f,
- 0.006390f, 0.009811f, 0.353516f, 0.426758f, 0.446045f, 0.455078f, 0.459717f, 0.464111f,
- 0.000084f, 0.000059f, 0.000050f, 0.000049f, 0.000049f, 0.000047f, 0.000052f, 0.000058f,
- 0.000061f, 0.000075f, 0.000065f, 0.000066f, 0.000080f, 0.000071f, 0.000076f, 0.000082f,
- 0.000092f, 0.000102f, 0.000100f, 0.000105f, 0.000110f, 0.000115f, 0.000121f, 0.000133f,
- 0.000140f, 0.000146f, 0.000152f, 0.000164f, 0.000177f, 0.000185f, 0.000192f, 0.000202f,
- 0.000213f, 0.000224f, 0.000241f, 0.000252f, 0.000268f, 0.000283f, 0.000310f, 0.000328f,
- 0.000348f, 0.000374f, 0.000406f, 0.000431f, 0.000470f, 0.000515f, 0.000560f, 0.000614f,
- 0.000688f, 0.000771f, 0.000884f, 0.001019f, 0.001202f, 0.001466f, 0.001827f, 0.002369f,
- 0.003269f, 0.005184f, 0.341797f, 0.416016f, 0.435791f, 0.445557f, 0.450928f, 0.455078f,
- 0.000062f, 0.000042f, 0.000035f, 0.000030f, 0.000028f, 0.000026f, 0.000024f, 0.000023f,
- 0.000023f, 0.000023f, 0.000023f, 0.000030f, 0.000024f, 0.000024f, 0.000031f, 0.000034f,
- 0.000035f, 0.000037f, 0.000039f, 0.000040f, 0.000043f, 0.000048f, 0.000050f, 0.000046f,
- 0.000051f, 0.000057f, 0.000059f, 0.000058f, 0.000063f, 0.000068f, 0.000070f, 0.000077f,
- 0.000082f, 0.000082f, 0.000086f, 0.000093f, 0.000100f, 0.000106f, 0.000114f, 0.000120f,
- 0.000131f, 0.000136f, 0.000145f, 0.000161f, 0.000171f, 0.000186f, 0.000204f, 0.000222f,
- 0.000251f, 0.000281f, 0.000318f, 0.000364f, 0.000430f, 0.000530f, 0.000672f, 0.000902f,
- 0.001316f, 0.002153f, 0.329346f, 0.406006f, 0.426758f, 0.436035f, 0.441650f, 0.445801f,
- 0.000031f, 0.000020f, 0.000016f, 0.000014f, 0.000014f, 0.000013f, 0.000012f, 0.000012f,
- 0.000011f, 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f,
- 0.000008f, 0.000008f, 0.000007f, 0.000007f, 0.000007f, 0.000008f, 0.000009f, 0.000010f,
- 0.000011f, 0.000012f, 0.000012f, 0.000014f, 0.000014f, 0.000013f, 0.000015f, 0.000016f,
- 0.000018f, 0.000019f, 0.000019f, 0.000020f, 0.000023f, 0.000023f, 0.000025f, 0.000027f,
- 0.000028f, 0.000031f, 0.000034f, 0.000034f, 0.000037f, 0.000041f, 0.000045f, 0.000049f,
- 0.000053f, 0.000059f, 0.000066f, 0.000079f, 0.000093f, 0.000112f, 0.000144f, 0.000196f,
- 0.000307f, 0.000598f, 0.317383f, 0.394531f, 0.416504f, 0.425781f, 0.432129f, 0.436279f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000007f,
- 0.000010f, 0.000026f, 0.305420f, 0.384277f, 0.405762f, 0.416504f, 0.423340f, 0.427246f,
- },
- {
- 0.009338f, 0.028412f, 0.047394f, 0.066895f, 0.086548f, 0.105774f, 0.125854f, 0.145142f,
- 0.165039f, 0.184570f, 0.204712f, 0.223389f, 0.243164f, 0.261719f, 0.280762f, 0.299805f,
- 0.318848f, 0.338135f, 0.356445f, 0.374512f, 0.393066f, 0.412354f, 0.429932f, 0.447510f,
- 0.465576f, 0.483887f, 0.501465f, 0.518555f, 0.536133f, 0.553711f, 0.570312f, 0.587402f,
- 0.604492f, 0.621094f, 0.637695f, 0.653809f, 0.670898f, 0.687012f, 0.702637f, 0.719238f,
- 0.734863f, 0.750488f, 0.765137f, 0.780762f, 0.795898f, 0.811523f, 0.825684f, 0.840820f,
- 0.855469f, 0.870605f, 0.884277f, 0.899414f, 0.913086f, 0.926758f, 0.940918f, 0.955078f,
- 0.967773f, 0.981934f, 0.966797f, 0.923828f, 0.894531f, 0.870605f, 0.850586f, 0.832520f,
- 0.008652f, 0.026825f, 0.045380f, 0.063965f, 0.082703f, 0.101807f, 0.120544f, 0.139282f,
- 0.158569f, 0.177246f, 0.196167f, 0.214722f, 0.233521f, 0.252197f, 0.270508f, 0.289062f,
- 0.307861f, 0.325928f, 0.343994f, 0.361328f, 0.380615f, 0.397705f, 0.415771f, 0.433594f,
- 0.450928f, 0.469238f, 0.485596f, 0.502930f, 0.520020f, 0.537598f, 0.553223f, 0.570801f,
- 0.586914f, 0.603516f, 0.620117f, 0.636719f, 0.652832f, 0.668945f, 0.683594f, 0.700684f,
- 0.716309f, 0.731934f, 0.746582f, 0.762695f, 0.777344f, 0.792480f, 0.807617f, 0.821777f,
- 0.836914f, 0.850586f, 0.865723f, 0.880371f, 0.894043f, 0.908691f, 0.921875f, 0.937012f,
- 0.950195f, 0.963867f, 0.958496f, 0.917969f, 0.889648f, 0.867188f, 0.847656f, 0.830566f,
- 0.008293f, 0.025620f, 0.042999f, 0.061035f, 0.079163f, 0.097656f, 0.115112f, 0.132812f,
- 0.151367f, 0.170532f, 0.188599f, 0.206787f, 0.223999f, 0.242920f, 0.259766f, 0.278809f,
- 0.296143f, 0.313232f, 0.331055f, 0.349609f, 0.367432f, 0.385010f, 0.401611f, 0.418945f,
- 0.435791f, 0.453369f, 0.469727f, 0.487061f, 0.503906f, 0.520508f, 0.537598f, 0.553223f,
- 0.569824f, 0.586426f, 0.603027f, 0.619141f, 0.634277f, 0.650879f, 0.666504f, 0.682129f,
- 0.697754f, 0.713379f, 0.729004f, 0.743164f, 0.758301f, 0.773926f, 0.789062f, 0.803711f,
- 0.818359f, 0.833008f, 0.847168f, 0.862305f, 0.875488f, 0.890137f, 0.903809f, 0.917480f,
- 0.931152f, 0.945801f, 0.950195f, 0.911133f, 0.884766f, 0.862793f, 0.844238f, 0.828125f,
- 0.008148f, 0.024506f, 0.041016f, 0.058289f, 0.075256f, 0.092712f, 0.109802f, 0.127319f,
- 0.145020f, 0.162964f, 0.180298f, 0.198120f, 0.215454f, 0.232300f, 0.250244f, 0.267822f,
- 0.285400f, 0.302734f, 0.318848f, 0.335693f, 0.354004f, 0.371582f, 0.388672f, 0.405029f,
- 0.421143f, 0.438965f, 0.455078f, 0.472168f, 0.487549f, 0.503906f, 0.521484f, 0.537598f,
- 0.551758f, 0.568359f, 0.584961f, 0.601562f, 0.616211f, 0.633301f, 0.648926f, 0.664062f,
- 0.679199f, 0.694824f, 0.709473f, 0.725098f, 0.740234f, 0.755371f, 0.770020f, 0.785156f,
- 0.799805f, 0.813965f, 0.828125f, 0.842773f, 0.856934f, 0.871582f, 0.884766f, 0.898926f,
- 0.912598f, 0.926270f, 0.941895f, 0.905273f, 0.879883f, 0.858887f, 0.840332f, 0.824707f,
- 0.007523f, 0.023010f, 0.039246f, 0.055542f, 0.072021f, 0.088257f, 0.105347f, 0.122070f,
- 0.138306f, 0.155273f, 0.172852f, 0.189575f, 0.206421f, 0.223145f, 0.240112f, 0.256592f,
- 0.274170f, 0.291260f, 0.307617f, 0.323730f, 0.340576f, 0.358154f, 0.374023f, 0.390137f,
- 0.406738f, 0.422852f, 0.440430f, 0.456543f, 0.472656f, 0.489014f, 0.504395f, 0.520996f,
- 0.537109f, 0.552734f, 0.568848f, 0.584473f, 0.599121f, 0.615234f, 0.630859f, 0.645020f,
- 0.660645f, 0.677246f, 0.690918f, 0.706055f, 0.721680f, 0.736328f, 0.750977f, 0.766113f,
- 0.780273f, 0.794922f, 0.809570f, 0.823730f, 0.837891f, 0.852539f, 0.866211f, 0.880371f,
- 0.894531f, 0.908691f, 0.933105f, 0.898438f, 0.874023f, 0.853516f, 0.836426f, 0.821289f,
- 0.007339f, 0.021912f, 0.037170f, 0.052948f, 0.068665f, 0.084412f, 0.100281f, 0.116333f,
- 0.133057f, 0.149048f, 0.164795f, 0.181274f, 0.198242f, 0.214233f, 0.230835f, 0.247314f,
- 0.262939f, 0.279053f, 0.295898f, 0.312500f, 0.328613f, 0.344971f, 0.360107f, 0.376953f,
- 0.392578f, 0.408691f, 0.425293f, 0.441406f, 0.456787f, 0.472656f, 0.488525f, 0.504883f,
- 0.520020f, 0.535156f, 0.550781f, 0.567383f, 0.582520f, 0.597656f, 0.612793f, 0.628418f,
- 0.642578f, 0.657715f, 0.673340f, 0.688477f, 0.702637f, 0.718750f, 0.731445f, 0.748047f,
- 0.762207f, 0.775879f, 0.791016f, 0.804199f, 0.818848f, 0.833008f, 0.847656f, 0.861328f,
- 0.875000f, 0.890625f, 0.924316f, 0.891602f, 0.868164f, 0.849121f, 0.832520f, 0.817871f,
- 0.006817f, 0.021133f, 0.035675f, 0.050018f, 0.065186f, 0.080505f, 0.096069f, 0.111389f,
- 0.126831f, 0.142456f, 0.158203f, 0.174194f, 0.189819f, 0.205444f, 0.220703f, 0.237183f,
- 0.253174f, 0.268555f, 0.284668f, 0.300049f, 0.316406f, 0.332275f, 0.347656f, 0.363281f,
- 0.379395f, 0.394775f, 0.409668f, 0.426270f, 0.442139f, 0.457275f, 0.472656f, 0.488037f,
- 0.503906f, 0.518555f, 0.534668f, 0.548828f, 0.564941f, 0.579590f, 0.595215f, 0.610352f,
- 0.625000f, 0.640137f, 0.654785f, 0.669434f, 0.685059f, 0.699707f, 0.713379f, 0.728027f,
- 0.742676f, 0.758301f, 0.770996f, 0.786621f, 0.799316f, 0.813965f, 0.828613f, 0.842285f,
- 0.856445f, 0.871094f, 0.915527f, 0.884766f, 0.862305f, 0.843750f, 0.827637f, 0.813965f,
- 0.006611f, 0.020111f, 0.033752f, 0.047974f, 0.062378f, 0.076843f, 0.091431f, 0.106262f,
- 0.120911f, 0.136230f, 0.151123f, 0.166382f, 0.181396f, 0.196899f, 0.211670f, 0.227295f,
- 0.242554f, 0.257812f, 0.272705f, 0.288086f, 0.304199f, 0.318848f, 0.334473f, 0.349609f,
- 0.365967f, 0.379883f, 0.395996f, 0.410889f, 0.426270f, 0.441895f, 0.457764f, 0.472412f,
- 0.487061f, 0.502930f, 0.517090f, 0.532227f, 0.547363f, 0.563477f, 0.577637f, 0.592285f,
- 0.606934f, 0.621582f, 0.636230f, 0.651367f, 0.665039f, 0.679688f, 0.694336f, 0.709473f,
- 0.724121f, 0.738770f, 0.752930f, 0.767578f, 0.780762f, 0.795410f, 0.809082f, 0.823242f,
- 0.837891f, 0.852539f, 0.906250f, 0.877441f, 0.855957f, 0.838379f, 0.823242f, 0.809570f,
- 0.006153f, 0.019150f, 0.031952f, 0.045624f, 0.059326f, 0.073303f, 0.087158f, 0.101562f,
- 0.115540f, 0.129395f, 0.144653f, 0.159180f, 0.173584f, 0.187866f, 0.203613f, 0.217651f,
- 0.232300f, 0.247559f, 0.262207f, 0.277344f, 0.292969f, 0.307617f, 0.322021f, 0.336914f,
- 0.352051f, 0.367188f, 0.381592f, 0.396729f, 0.411377f, 0.427002f, 0.440918f, 0.456787f,
- 0.471436f, 0.486572f, 0.500977f, 0.514648f, 0.530273f, 0.545410f, 0.560059f, 0.574219f,
- 0.589355f, 0.604004f, 0.618164f, 0.632324f, 0.647461f, 0.661133f, 0.676270f, 0.691406f,
- 0.705078f, 0.719727f, 0.733887f, 0.748047f, 0.763184f, 0.777344f, 0.791016f, 0.805176f,
- 0.819336f, 0.833496f, 0.896973f, 0.870117f, 0.849609f, 0.833008f, 0.818359f, 0.805176f,
- 0.005947f, 0.018311f, 0.030731f, 0.043243f, 0.056732f, 0.069580f, 0.083435f, 0.096558f,
- 0.110474f, 0.123962f, 0.137695f, 0.152100f, 0.166016f, 0.180054f, 0.194092f, 0.208862f,
- 0.222656f, 0.236816f, 0.251465f, 0.266113f, 0.281250f, 0.294922f, 0.309814f, 0.324219f,
- 0.338623f, 0.352783f, 0.368164f, 0.382568f, 0.397461f, 0.411377f, 0.426025f, 0.441162f,
- 0.455078f, 0.469971f, 0.484131f, 0.499268f, 0.513672f, 0.528320f, 0.542969f, 0.557129f,
- 0.571289f, 0.585449f, 0.599609f, 0.614258f, 0.628418f, 0.643066f, 0.657227f, 0.671875f,
- 0.686523f, 0.700195f, 0.714355f, 0.729004f, 0.743164f, 0.756836f, 0.770996f, 0.785645f,
- 0.800293f, 0.814453f, 0.888184f, 0.862305f, 0.843262f, 0.827148f, 0.813477f, 0.800781f,
- 0.005646f, 0.017136f, 0.029388f, 0.041534f, 0.053802f, 0.066162f, 0.078979f, 0.092285f,
- 0.104980f, 0.118408f, 0.130981f, 0.144897f, 0.158203f, 0.172363f, 0.185547f, 0.199951f,
- 0.213501f, 0.226440f, 0.240356f, 0.254883f, 0.269287f, 0.283691f, 0.297607f, 0.311279f,
- 0.325439f, 0.339600f, 0.353760f, 0.368408f, 0.382812f, 0.396973f, 0.410645f, 0.425049f,
- 0.439697f, 0.454102f, 0.468262f, 0.482178f, 0.496094f, 0.510742f, 0.524902f, 0.539551f,
- 0.554199f, 0.568359f, 0.582031f, 0.596191f, 0.610352f, 0.624023f, 0.639160f, 0.652832f,
- 0.667969f, 0.681152f, 0.696289f, 0.709961f, 0.723633f, 0.738770f, 0.752441f, 0.765625f,
- 0.780273f, 0.794922f, 0.878418f, 0.855469f, 0.836914f, 0.821289f, 0.808105f, 0.796387f,
- 0.005478f, 0.016174f, 0.027740f, 0.038849f, 0.051270f, 0.063293f, 0.075317f, 0.087402f,
- 0.099854f, 0.112793f, 0.125366f, 0.138184f, 0.151001f, 0.164307f, 0.177734f, 0.190918f,
- 0.204102f, 0.217529f, 0.231079f, 0.244141f, 0.257324f, 0.271240f, 0.284668f, 0.299072f,
- 0.312744f, 0.326660f, 0.339600f, 0.354004f, 0.368408f, 0.382324f, 0.395264f, 0.410156f,
- 0.423096f, 0.437500f, 0.452148f, 0.465332f, 0.480469f, 0.493408f, 0.507812f, 0.521484f,
- 0.535645f, 0.549316f, 0.563477f, 0.578125f, 0.592285f, 0.605957f, 0.620605f, 0.634766f,
- 0.647949f, 0.662109f, 0.676758f, 0.691406f, 0.705078f, 0.718750f, 0.732910f, 0.747559f,
- 0.762207f, 0.777344f, 0.869141f, 0.847656f, 0.830078f, 0.815430f, 0.802734f, 0.791504f,
- 0.005005f, 0.015762f, 0.026657f, 0.037384f, 0.048218f, 0.059998f, 0.071594f, 0.083618f,
- 0.095215f, 0.107666f, 0.119141f, 0.131958f, 0.144043f, 0.156128f, 0.169800f, 0.182129f,
- 0.194824f, 0.207031f, 0.219849f, 0.233032f, 0.247559f, 0.260010f, 0.272949f, 0.286133f,
- 0.300293f, 0.313477f, 0.326172f, 0.339844f, 0.353516f, 0.367188f, 0.381592f, 0.394531f,
- 0.407959f, 0.422363f, 0.436279f, 0.449463f, 0.462891f, 0.477539f, 0.490723f, 0.504395f,
- 0.518066f, 0.532227f, 0.545898f, 0.560059f, 0.574219f, 0.586914f, 0.602051f, 0.616211f,
- 0.629395f, 0.644531f, 0.657227f, 0.671875f, 0.685547f, 0.699707f, 0.713867f, 0.728516f,
- 0.742676f, 0.756836f, 0.859375f, 0.840332f, 0.823730f, 0.809082f, 0.797363f, 0.786621f,
- 0.004894f, 0.014786f, 0.025269f, 0.035614f, 0.045990f, 0.057129f, 0.068420f, 0.079224f,
- 0.090698f, 0.102112f, 0.113708f, 0.125610f, 0.137817f, 0.149536f, 0.161377f, 0.174316f,
- 0.185791f, 0.198486f, 0.211670f, 0.223389f, 0.236816f, 0.249512f, 0.261230f, 0.274414f,
- 0.287598f, 0.300537f, 0.313232f, 0.326904f, 0.340576f, 0.353027f, 0.366211f, 0.379883f,
- 0.393066f, 0.406006f, 0.419678f, 0.433350f, 0.446289f, 0.460205f, 0.473633f, 0.487305f,
- 0.500977f, 0.515137f, 0.528320f, 0.542480f, 0.554688f, 0.569824f, 0.583008f, 0.597656f,
- 0.610840f, 0.625488f, 0.638672f, 0.652832f, 0.666504f, 0.681152f, 0.694824f, 0.708984f,
- 0.723145f, 0.737793f, 0.850098f, 0.833008f, 0.817383f, 0.802734f, 0.791992f, 0.780762f,
- 0.004536f, 0.014160f, 0.023972f, 0.033630f, 0.043823f, 0.053955f, 0.064697f, 0.075195f,
- 0.086365f, 0.096802f, 0.108276f, 0.119751f, 0.130493f, 0.142212f, 0.153687f, 0.165405f,
- 0.177246f, 0.189331f, 0.201538f, 0.213501f, 0.225464f, 0.237915f, 0.250244f, 0.262939f,
- 0.274902f, 0.288086f, 0.300781f, 0.312988f, 0.326172f, 0.339600f, 0.352051f, 0.365479f,
- 0.377930f, 0.390625f, 0.403564f, 0.417480f, 0.430420f, 0.444092f, 0.457520f, 0.470215f,
- 0.483643f, 0.497559f, 0.510742f, 0.524414f, 0.537598f, 0.551270f, 0.564941f, 0.579102f,
- 0.592285f, 0.605957f, 0.619629f, 0.633789f, 0.647949f, 0.661621f, 0.675293f, 0.689453f,
- 0.704102f, 0.718262f, 0.840332f, 0.825195f, 0.809570f, 0.797363f, 0.786133f, 0.776367f,
- 0.004433f, 0.013138f, 0.022720f, 0.032013f, 0.041199f, 0.051147f, 0.061462f, 0.071716f,
- 0.082336f, 0.091919f, 0.102722f, 0.113586f, 0.124390f, 0.135010f, 0.145996f, 0.157837f,
- 0.168823f, 0.180054f, 0.192383f, 0.203491f, 0.215332f, 0.227417f, 0.239502f, 0.251221f,
- 0.263672f, 0.275635f, 0.287842f, 0.300537f, 0.312500f, 0.324707f, 0.338135f, 0.350342f,
- 0.363037f, 0.375977f, 0.388672f, 0.401611f, 0.413818f, 0.427246f, 0.440186f, 0.453613f,
- 0.466064f, 0.479736f, 0.492920f, 0.506836f, 0.519531f, 0.533203f, 0.546875f, 0.560059f,
- 0.573242f, 0.587402f, 0.600098f, 0.614746f, 0.628418f, 0.642578f, 0.657227f, 0.670898f,
- 0.685059f, 0.699707f, 0.830566f, 0.816406f, 0.802734f, 0.791016f, 0.780273f, 0.770996f,
- 0.004372f, 0.012619f, 0.021393f, 0.030350f, 0.039276f, 0.048523f, 0.058289f, 0.067505f,
- 0.077393f, 0.087585f, 0.097290f, 0.107727f, 0.118225f, 0.128296f, 0.138550f, 0.149414f,
- 0.160278f, 0.171631f, 0.182739f, 0.193359f, 0.205200f, 0.216187f, 0.228027f, 0.240234f,
- 0.251465f, 0.263428f, 0.275146f, 0.287598f, 0.298828f, 0.311523f, 0.323242f, 0.336182f,
- 0.348633f, 0.360107f, 0.372803f, 0.385986f, 0.398682f, 0.411621f, 0.424072f, 0.436523f,
- 0.449951f, 0.462891f, 0.475098f, 0.488525f, 0.501953f, 0.514648f, 0.527344f, 0.541992f,
- 0.555176f, 0.569336f, 0.582031f, 0.596191f, 0.609863f, 0.623047f, 0.637695f, 0.651855f,
- 0.665527f, 0.679688f, 0.821289f, 0.808105f, 0.795410f, 0.784180f, 0.774902f, 0.765137f,
- 0.003937f, 0.012169f, 0.020477f, 0.028641f, 0.037781f, 0.046448f, 0.055481f, 0.064209f,
- 0.073181f, 0.082458f, 0.092651f, 0.101990f, 0.111572f, 0.121948f, 0.132202f, 0.142212f,
- 0.151978f, 0.162720f, 0.173340f, 0.184326f, 0.195312f, 0.206055f, 0.217163f, 0.228516f,
- 0.239990f, 0.250977f, 0.262695f, 0.274658f, 0.285889f, 0.297363f, 0.308838f, 0.321045f,
- 0.333496f, 0.345459f, 0.357422f, 0.370117f, 0.382324f, 0.395020f, 0.407227f, 0.419922f,
- 0.432617f, 0.444336f, 0.458008f, 0.470703f, 0.483398f, 0.497559f, 0.510254f, 0.522949f,
- 0.536133f, 0.550293f, 0.562988f, 0.577637f, 0.590820f, 0.603516f, 0.618164f, 0.632324f,
- 0.645508f, 0.660645f, 0.811035f, 0.800293f, 0.788086f, 0.777832f, 0.768555f, 0.760254f,
- 0.003868f, 0.011368f, 0.019257f, 0.027512f, 0.035431f, 0.043274f, 0.051880f, 0.060852f,
- 0.069214f, 0.078003f, 0.087524f, 0.096924f, 0.105896f, 0.115112f, 0.124817f, 0.134766f,
- 0.144409f, 0.154663f, 0.164673f, 0.175415f, 0.184814f, 0.196289f, 0.206299f, 0.216797f,
- 0.228394f, 0.239380f, 0.250244f, 0.260986f, 0.273193f, 0.284424f, 0.295410f, 0.307373f,
- 0.319092f, 0.331299f, 0.342285f, 0.354248f, 0.366455f, 0.378662f, 0.390869f, 0.403809f,
- 0.415771f, 0.427734f, 0.440430f, 0.453369f, 0.466309f, 0.479736f, 0.492188f, 0.504883f,
- 0.518066f, 0.531250f, 0.544922f, 0.558105f, 0.571777f, 0.584473f, 0.598633f, 0.612305f,
- 0.626465f, 0.641602f, 0.801758f, 0.792480f, 0.781738f, 0.770508f, 0.761230f, 0.753906f,
- 0.003616f, 0.010872f, 0.018387f, 0.026077f, 0.033875f, 0.041351f, 0.049591f, 0.057434f,
- 0.065674f, 0.073669f, 0.082153f, 0.091064f, 0.100098f, 0.109009f, 0.117981f, 0.127563f,
- 0.137207f, 0.146362f, 0.156494f, 0.165894f, 0.176025f, 0.186157f, 0.196655f, 0.206421f,
- 0.216919f, 0.227539f, 0.237915f, 0.249268f, 0.260254f, 0.270752f, 0.282471f, 0.293945f,
- 0.305176f, 0.316406f, 0.328125f, 0.338867f, 0.350342f, 0.361816f, 0.375244f, 0.387207f,
- 0.398926f, 0.411133f, 0.423584f, 0.436523f, 0.448730f, 0.461182f, 0.474121f, 0.485840f,
- 0.499756f, 0.513672f, 0.525391f, 0.539062f, 0.552734f, 0.565918f, 0.580566f, 0.593750f,
- 0.608398f, 0.621094f, 0.790527f, 0.783691f, 0.773926f, 0.764160f, 0.755859f, 0.747559f,
- 0.003450f, 0.010429f, 0.017487f, 0.024445f, 0.031860f, 0.039581f, 0.046631f, 0.054718f,
- 0.061951f, 0.070251f, 0.078003f, 0.086121f, 0.094910f, 0.102905f, 0.111572f, 0.120300f,
- 0.129761f, 0.138428f, 0.147217f, 0.156982f, 0.166992f, 0.176147f, 0.186157f, 0.196045f,
- 0.206299f, 0.216187f, 0.226318f, 0.236938f, 0.247437f, 0.258301f, 0.268311f, 0.279785f,
- 0.290527f, 0.301758f, 0.312744f, 0.324219f, 0.335449f, 0.346680f, 0.359131f, 0.370605f,
- 0.382812f, 0.394531f, 0.406982f, 0.419189f, 0.430908f, 0.443604f, 0.456055f, 0.468506f,
- 0.481445f, 0.494873f, 0.506836f, 0.520996f, 0.534180f, 0.547363f, 0.561035f, 0.573730f,
- 0.588379f, 0.601074f, 0.780762f, 0.775879f, 0.766602f, 0.757324f, 0.748535f, 0.741699f,
- 0.003281f, 0.009811f, 0.016174f, 0.023438f, 0.030060f, 0.037109f, 0.044464f, 0.051239f,
- 0.058441f, 0.066345f, 0.073792f, 0.081238f, 0.089539f, 0.097229f, 0.105286f, 0.113647f,
- 0.122498f, 0.130615f, 0.139526f, 0.148438f, 0.157837f, 0.166626f, 0.176636f, 0.185547f,
- 0.195312f, 0.204956f, 0.215088f, 0.224976f, 0.234863f, 0.245239f, 0.255859f, 0.266113f,
- 0.276367f, 0.287354f, 0.298096f, 0.309326f, 0.320801f, 0.331787f, 0.343018f, 0.355225f,
- 0.366211f, 0.378418f, 0.389893f, 0.401611f, 0.413574f, 0.425781f, 0.438721f, 0.451416f,
- 0.463135f, 0.476074f, 0.489014f, 0.501465f, 0.514648f, 0.528809f, 0.541992f, 0.554688f,
- 0.568848f, 0.582520f, 0.770508f, 0.767090f, 0.758789f, 0.750488f, 0.743164f, 0.735352f,
- 0.002901f, 0.009422f, 0.015488f, 0.021729f, 0.028290f, 0.035278f, 0.041321f, 0.048523f,
- 0.055420f, 0.062195f, 0.069336f, 0.076477f, 0.084412f, 0.091858f, 0.099609f, 0.107361f,
- 0.115112f, 0.123535f, 0.131592f, 0.140137f, 0.148438f, 0.157715f, 0.166382f, 0.174927f,
- 0.184692f, 0.193970f, 0.203369f, 0.212646f, 0.222656f, 0.232910f, 0.242920f, 0.252197f,
- 0.263184f, 0.273438f, 0.284180f, 0.294922f, 0.305664f, 0.316895f, 0.327881f, 0.338867f,
- 0.349854f, 0.361328f, 0.373291f, 0.385254f, 0.397461f, 0.408691f, 0.420898f, 0.433350f,
- 0.445801f, 0.458252f, 0.470703f, 0.483154f, 0.496826f, 0.510254f, 0.522461f, 0.535645f,
- 0.549805f, 0.562988f, 0.760742f, 0.758789f, 0.750488f, 0.743652f, 0.736328f, 0.729492f,
- 0.002861f, 0.008606f, 0.014488f, 0.021057f, 0.026810f, 0.032898f, 0.038879f, 0.045532f,
- 0.051666f, 0.058319f, 0.065125f, 0.072449f, 0.079224f, 0.086426f, 0.093689f, 0.100830f,
- 0.108276f, 0.116089f, 0.123962f, 0.131958f, 0.140625f, 0.148560f, 0.156494f, 0.164795f,
- 0.174194f, 0.183228f, 0.192017f, 0.201294f, 0.210815f, 0.220093f, 0.229858f, 0.239746f,
- 0.249390f, 0.260010f, 0.270508f, 0.280518f, 0.290771f, 0.301758f, 0.312744f, 0.323486f,
- 0.334473f, 0.345215f, 0.356934f, 0.368408f, 0.379883f, 0.391846f, 0.403564f, 0.416016f,
- 0.427490f, 0.439453f, 0.452881f, 0.465332f, 0.478271f, 0.490234f, 0.503906f, 0.517090f,
- 0.529785f, 0.543945f, 0.750000f, 0.750000f, 0.743164f, 0.736328f, 0.729492f, 0.723145f,
- 0.002977f, 0.008492f, 0.013931f, 0.019745f, 0.024948f, 0.030991f, 0.036804f, 0.042755f,
- 0.048889f, 0.055267f, 0.061737f, 0.067932f, 0.074829f, 0.081116f, 0.087646f, 0.095215f,
- 0.102356f, 0.109436f, 0.116760f, 0.124023f, 0.131714f, 0.139648f, 0.147461f, 0.155762f,
- 0.164185f, 0.172485f, 0.181152f, 0.189697f, 0.198730f, 0.208130f, 0.217285f, 0.226685f,
- 0.236572f, 0.245850f, 0.255859f, 0.265869f, 0.276367f, 0.286377f, 0.297607f, 0.307861f,
- 0.318359f, 0.329102f, 0.340576f, 0.351807f, 0.363281f, 0.374023f, 0.386230f, 0.397949f,
- 0.409668f, 0.422119f, 0.434082f, 0.446777f, 0.459229f, 0.471924f, 0.484863f, 0.497803f,
- 0.511230f, 0.525391f, 0.739746f, 0.741211f, 0.735352f, 0.729004f, 0.722656f, 0.717285f,
- 0.002441f, 0.007896f, 0.013443f, 0.018402f, 0.023911f, 0.029343f, 0.034454f, 0.040375f,
- 0.045868f, 0.051453f, 0.057800f, 0.063721f, 0.070068f, 0.075928f, 0.082520f, 0.089233f,
- 0.095703f, 0.102478f, 0.109314f, 0.116638f, 0.123596f, 0.131348f, 0.138550f, 0.145996f,
- 0.153809f, 0.162109f, 0.170044f, 0.179199f, 0.187866f, 0.196045f, 0.205078f, 0.213745f,
- 0.223389f, 0.233032f, 0.242554f, 0.252197f, 0.261963f, 0.271973f, 0.281982f, 0.292236f,
- 0.303223f, 0.312988f, 0.324463f, 0.335693f, 0.346191f, 0.357910f, 0.368652f, 0.380371f,
- 0.391846f, 0.404541f, 0.415527f, 0.428467f, 0.440674f, 0.453369f, 0.466553f, 0.479248f,
- 0.491455f, 0.505371f, 0.729492f, 0.732422f, 0.727539f, 0.721191f, 0.716309f, 0.709961f,
- 0.002457f, 0.007553f, 0.012489f, 0.017548f, 0.022217f, 0.027405f, 0.032471f, 0.037689f,
- 0.043060f, 0.048553f, 0.054230f, 0.059631f, 0.065369f, 0.071533f, 0.077393f, 0.083069f,
- 0.089417f, 0.096069f, 0.102356f, 0.108398f, 0.115417f, 0.122925f, 0.130127f, 0.137451f,
- 0.144531f, 0.152100f, 0.160156f, 0.168091f, 0.176514f, 0.184570f, 0.192871f, 0.201660f,
- 0.210571f, 0.219238f, 0.229126f, 0.238281f, 0.248413f, 0.257812f, 0.267578f, 0.277588f,
- 0.287354f, 0.298096f, 0.308594f, 0.319336f, 0.329590f, 0.340820f, 0.351318f, 0.363770f,
- 0.375732f, 0.386963f, 0.397949f, 0.409912f, 0.422363f, 0.434326f, 0.446533f, 0.459473f,
- 0.473145f, 0.486084f, 0.718750f, 0.723633f, 0.719727f, 0.713867f, 0.708984f, 0.703613f,
- 0.002436f, 0.006939f, 0.011612f, 0.016113f, 0.021072f, 0.025497f, 0.030640f, 0.035339f,
- 0.040222f, 0.045441f, 0.050690f, 0.055725f, 0.060669f, 0.066589f, 0.072144f, 0.077881f,
- 0.083740f, 0.089294f, 0.095215f, 0.101501f, 0.108032f, 0.114868f, 0.121643f, 0.128052f,
- 0.135010f, 0.142334f, 0.150024f, 0.157349f, 0.164917f, 0.173340f, 0.181274f, 0.189697f,
- 0.198120f, 0.206909f, 0.215698f, 0.224365f, 0.234497f, 0.243652f, 0.252930f, 0.262695f,
- 0.272461f, 0.282471f, 0.292480f, 0.302979f, 0.313721f, 0.324463f, 0.335205f, 0.346436f,
- 0.357666f, 0.369141f, 0.380859f, 0.391602f, 0.404541f, 0.416016f, 0.428467f, 0.440918f,
- 0.454102f, 0.466553f, 0.708496f, 0.715820f, 0.711426f, 0.706055f, 0.701660f, 0.696777f,
- 0.002188f, 0.006599f, 0.011032f, 0.015068f, 0.019897f, 0.024048f, 0.028656f, 0.033264f,
- 0.037720f, 0.042236f, 0.047028f, 0.051941f, 0.056824f, 0.062012f, 0.067444f, 0.072449f,
- 0.077942f, 0.083374f, 0.088867f, 0.094727f, 0.100769f, 0.106750f, 0.112732f, 0.119263f,
- 0.126099f, 0.133179f, 0.139648f, 0.146729f, 0.154175f, 0.161987f, 0.170044f, 0.177612f,
- 0.185791f, 0.194214f, 0.203125f, 0.211670f, 0.220581f, 0.229370f, 0.238770f, 0.248047f,
- 0.257812f, 0.267822f, 0.277344f, 0.287109f, 0.297363f, 0.307861f, 0.318848f, 0.329590f,
- 0.341064f, 0.351562f, 0.363037f, 0.374512f, 0.385498f, 0.397461f, 0.409668f, 0.422363f,
- 0.434326f, 0.447021f, 0.697266f, 0.706543f, 0.703125f, 0.698730f, 0.694336f, 0.689941f,
- 0.002024f, 0.006165f, 0.010399f, 0.014481f, 0.018555f, 0.022797f, 0.026627f, 0.030869f,
- 0.035187f, 0.039459f, 0.043732f, 0.047943f, 0.052917f, 0.057434f, 0.062622f, 0.067261f,
- 0.071838f, 0.077454f, 0.082581f, 0.087891f, 0.093628f, 0.099182f, 0.105469f, 0.111206f,
- 0.117126f, 0.123779f, 0.130371f, 0.137085f, 0.143921f, 0.151001f, 0.158691f, 0.166016f,
- 0.173950f, 0.181641f, 0.190063f, 0.198120f, 0.206909f, 0.215698f, 0.224976f, 0.233398f,
- 0.242798f, 0.252197f, 0.262207f, 0.271973f, 0.281738f, 0.291992f, 0.302734f, 0.313477f,
- 0.323242f, 0.334229f, 0.345459f, 0.355957f, 0.368652f, 0.380615f, 0.391602f, 0.403809f,
- 0.415771f, 0.428467f, 0.686523f, 0.696777f, 0.695312f, 0.691895f, 0.687500f, 0.683105f,
- 0.001931f, 0.005970f, 0.009651f, 0.013557f, 0.017136f, 0.021088f, 0.024902f, 0.028748f,
- 0.032623f, 0.036743f, 0.040833f, 0.044983f, 0.049591f, 0.053467f, 0.057800f, 0.062500f,
- 0.066833f, 0.071533f, 0.076538f, 0.081238f, 0.086670f, 0.092224f, 0.097290f, 0.103088f,
- 0.108887f, 0.114990f, 0.120972f, 0.127197f, 0.134277f, 0.140503f, 0.147705f, 0.154663f,
- 0.162231f, 0.169922f, 0.177612f, 0.185303f, 0.193604f, 0.201904f, 0.210815f, 0.219238f,
- 0.228516f, 0.237427f, 0.247070f, 0.256592f, 0.265869f, 0.275879f, 0.285645f, 0.295898f,
- 0.306396f, 0.317139f, 0.328369f, 0.338623f, 0.350342f, 0.362305f, 0.374023f, 0.385010f,
- 0.397461f, 0.410156f, 0.675781f, 0.687988f, 0.687012f, 0.683594f, 0.680664f, 0.676270f,
- 0.001725f, 0.005436f, 0.009171f, 0.012589f, 0.016190f, 0.019485f, 0.023132f, 0.026978f,
- 0.030899f, 0.034180f, 0.037659f, 0.041565f, 0.045074f, 0.049438f, 0.053345f, 0.057739f,
- 0.061768f, 0.065918f, 0.070679f, 0.075073f, 0.080078f, 0.084656f, 0.089966f, 0.095215f,
- 0.100464f, 0.106445f, 0.112000f, 0.117615f, 0.124207f, 0.130737f, 0.136719f, 0.144043f,
- 0.151123f, 0.158081f, 0.165405f, 0.173096f, 0.181152f, 0.189087f, 0.197510f, 0.205688f,
- 0.214600f, 0.223145f, 0.232178f, 0.241699f, 0.250732f, 0.260254f, 0.270264f, 0.279785f,
- 0.289795f, 0.300293f, 0.310791f, 0.322510f, 0.333496f, 0.344238f, 0.355713f, 0.367188f,
- 0.379395f, 0.392090f, 0.664551f, 0.678711f, 0.678223f, 0.675781f, 0.672852f, 0.669922f,
- 0.001741f, 0.005077f, 0.008522f, 0.011810f, 0.014946f, 0.018524f, 0.021332f, 0.024872f,
- 0.028519f, 0.031799f, 0.034973f, 0.038727f, 0.041992f, 0.045654f, 0.049072f, 0.052856f,
- 0.056671f, 0.060638f, 0.064819f, 0.069092f, 0.073425f, 0.078125f, 0.082886f, 0.087280f,
- 0.092651f, 0.098206f, 0.103638f, 0.109192f, 0.114563f, 0.120667f, 0.126709f, 0.133057f,
- 0.139771f, 0.146851f, 0.153931f, 0.160767f, 0.168457f, 0.175903f, 0.183838f, 0.192505f,
- 0.200195f, 0.208618f, 0.217407f, 0.226562f, 0.236084f, 0.245239f, 0.254639f, 0.263672f,
- 0.273926f, 0.283447f, 0.294189f, 0.304932f, 0.315674f, 0.326172f, 0.337402f, 0.348877f,
- 0.360107f, 0.373291f, 0.653809f, 0.670410f, 0.669922f, 0.667480f, 0.665527f, 0.662109f,
- 0.001639f, 0.004951f, 0.007996f, 0.010857f, 0.013779f, 0.016968f, 0.019974f, 0.023392f,
- 0.026001f, 0.029373f, 0.032013f, 0.035370f, 0.038513f, 0.041992f, 0.044586f, 0.048706f,
- 0.052124f, 0.055634f, 0.059723f, 0.063354f, 0.067444f, 0.071289f, 0.075745f, 0.080444f,
- 0.085022f, 0.089722f, 0.095032f, 0.100220f, 0.105347f, 0.111206f, 0.117126f, 0.123108f,
- 0.129395f, 0.135620f, 0.142090f, 0.148682f, 0.156372f, 0.163574f, 0.170898f, 0.178711f,
- 0.186890f, 0.194580f, 0.203613f, 0.211426f, 0.220459f, 0.229492f, 0.238281f, 0.248169f,
- 0.257324f, 0.267578f, 0.277832f, 0.287354f, 0.298340f, 0.308350f, 0.319824f, 0.331543f,
- 0.342041f, 0.354248f, 0.641602f, 0.660645f, 0.662109f, 0.660645f, 0.658203f, 0.654785f,
- 0.001569f, 0.004539f, 0.007538f, 0.010368f, 0.013359f, 0.016006f, 0.018539f, 0.021210f,
- 0.024384f, 0.026855f, 0.029892f, 0.032471f, 0.035034f, 0.038177f, 0.041199f, 0.044434f,
- 0.047485f, 0.050781f, 0.054321f, 0.057953f, 0.061523f, 0.065430f, 0.069275f, 0.073547f,
- 0.077820f, 0.082092f, 0.086731f, 0.091736f, 0.096985f, 0.101990f, 0.107361f, 0.112549f,
- 0.118774f, 0.124878f, 0.131104f, 0.137573f, 0.144409f, 0.150635f, 0.157837f, 0.165283f,
- 0.173340f, 0.181274f, 0.188599f, 0.197510f, 0.205933f, 0.214600f, 0.223633f, 0.232056f,
- 0.241577f, 0.251709f, 0.261230f, 0.270996f, 0.281250f, 0.291260f, 0.302246f, 0.313477f,
- 0.323730f, 0.336182f, 0.630859f, 0.651855f, 0.652832f, 0.652344f, 0.650391f, 0.647461f,
- 0.001558f, 0.004139f, 0.007103f, 0.009560f, 0.012077f, 0.014313f, 0.016983f, 0.019653f,
- 0.021988f, 0.024490f, 0.027023f, 0.029526f, 0.031891f, 0.034821f, 0.037903f, 0.040192f,
- 0.043457f, 0.046417f, 0.049316f, 0.052795f, 0.055725f, 0.059357f, 0.063354f, 0.066895f,
- 0.070740f, 0.074890f, 0.078979f, 0.083801f, 0.088440f, 0.093018f, 0.097961f, 0.103394f,
- 0.108704f, 0.114563f, 0.120239f, 0.126343f, 0.132690f, 0.139038f, 0.145874f, 0.152710f,
- 0.159912f, 0.168091f, 0.175537f, 0.183228f, 0.191650f, 0.199707f, 0.208130f, 0.216797f,
- 0.226074f, 0.235352f, 0.244507f, 0.254395f, 0.264404f, 0.274414f, 0.285156f, 0.296631f,
- 0.307373f, 0.318604f, 0.619141f, 0.643066f, 0.644531f, 0.644043f, 0.642578f, 0.639648f,
- 0.001314f, 0.004002f, 0.006603f, 0.009056f, 0.011490f, 0.013184f, 0.015587f, 0.017883f,
- 0.020157f, 0.022415f, 0.024582f, 0.027206f, 0.029160f, 0.031677f, 0.034088f, 0.036530f,
- 0.039337f, 0.042206f, 0.044891f, 0.047729f, 0.050751f, 0.053955f, 0.057312f, 0.060486f,
- 0.064148f, 0.068054f, 0.071960f, 0.075867f, 0.079895f, 0.084595f, 0.089172f, 0.094238f,
- 0.098999f, 0.104492f, 0.109802f, 0.115173f, 0.121338f, 0.127686f, 0.134033f, 0.140991f,
- 0.147095f, 0.154541f, 0.161865f, 0.169800f, 0.177368f, 0.185547f, 0.193848f, 0.201904f,
- 0.211060f, 0.219116f, 0.229004f, 0.238525f, 0.248047f, 0.257812f, 0.267822f, 0.277832f,
- 0.289062f, 0.300537f, 0.607910f, 0.633301f, 0.636230f, 0.635742f, 0.634766f, 0.633301f,
- 0.001217f, 0.003571f, 0.005947f, 0.008011f, 0.010391f, 0.012207f, 0.014313f, 0.016617f,
- 0.018280f, 0.020523f, 0.022537f, 0.024475f, 0.026443f, 0.028778f, 0.030884f, 0.032867f,
- 0.035553f, 0.037872f, 0.040375f, 0.042938f, 0.045593f, 0.048431f, 0.051605f, 0.054688f,
- 0.057953f, 0.061279f, 0.065002f, 0.068665f, 0.072266f, 0.076294f, 0.080872f, 0.085083f,
- 0.089783f, 0.094482f, 0.099915f, 0.104736f, 0.110901f, 0.116272f, 0.122314f, 0.128784f,
- 0.134888f, 0.142090f, 0.148560f, 0.155884f, 0.163574f, 0.171753f, 0.179077f, 0.187500f,
- 0.195679f, 0.204346f, 0.213745f, 0.222656f, 0.231812f, 0.241455f, 0.250977f, 0.261230f,
- 0.272461f, 0.282959f, 0.596680f, 0.623535f, 0.627441f, 0.627930f, 0.627441f, 0.625000f,
- 0.001111f, 0.003542f, 0.005569f, 0.007504f, 0.009338f, 0.011452f, 0.012939f, 0.015030f,
- 0.016678f, 0.018326f, 0.020203f, 0.022217f, 0.023788f, 0.025604f, 0.027771f, 0.029877f,
- 0.031860f, 0.033813f, 0.036102f, 0.038605f, 0.040985f, 0.043579f, 0.046448f, 0.049042f,
- 0.051849f, 0.055054f, 0.058319f, 0.061615f, 0.065125f, 0.068909f, 0.072815f, 0.076843f,
- 0.080872f, 0.085571f, 0.089905f, 0.095398f, 0.100159f, 0.105713f, 0.111206f, 0.116882f,
- 0.122925f, 0.129517f, 0.135742f, 0.142822f, 0.149902f, 0.157349f, 0.165161f, 0.172852f,
- 0.181152f, 0.189331f, 0.198120f, 0.206909f, 0.215820f, 0.225342f, 0.235474f, 0.245239f,
- 0.254883f, 0.266602f, 0.584473f, 0.614746f, 0.619141f, 0.619629f, 0.619141f, 0.618164f,
- 0.001149f, 0.003147f, 0.004826f, 0.006886f, 0.008629f, 0.010452f, 0.012024f, 0.013359f,
- 0.015175f, 0.016647f, 0.018143f, 0.019882f, 0.021332f, 0.023026f, 0.024902f, 0.026550f,
- 0.028397f, 0.030045f, 0.032318f, 0.034393f, 0.036682f, 0.038910f, 0.041107f, 0.043671f,
- 0.046295f, 0.048950f, 0.051819f, 0.054993f, 0.058258f, 0.061523f, 0.065063f, 0.068481f,
- 0.072510f, 0.076965f, 0.081055f, 0.085510f, 0.090393f, 0.095093f, 0.100342f, 0.105774f,
- 0.111694f, 0.117371f, 0.124084f, 0.130371f, 0.136963f, 0.143921f, 0.151245f, 0.159058f,
- 0.166626f, 0.174927f, 0.182983f, 0.191650f, 0.200195f, 0.209473f, 0.218750f, 0.228149f,
- 0.238037f, 0.249146f, 0.572266f, 0.604980f, 0.609863f, 0.611328f, 0.610352f, 0.611328f,
- 0.001009f, 0.003059f, 0.004620f, 0.006283f, 0.007881f, 0.009415f, 0.010864f, 0.011940f,
- 0.013443f, 0.014847f, 0.016403f, 0.017700f, 0.019012f, 0.020493f, 0.021927f, 0.023697f,
- 0.025177f, 0.026947f, 0.028732f, 0.030472f, 0.032654f, 0.034302f, 0.036591f, 0.038757f,
- 0.041046f, 0.043488f, 0.045837f, 0.048706f, 0.051544f, 0.054810f, 0.057770f, 0.061188f,
- 0.064331f, 0.068237f, 0.072083f, 0.076416f, 0.080872f, 0.085388f, 0.090149f, 0.095276f,
- 0.100403f, 0.105896f, 0.111877f, 0.117798f, 0.124329f, 0.130859f, 0.138062f, 0.145020f,
- 0.152710f, 0.160034f, 0.168335f, 0.176514f, 0.185059f, 0.193481f, 0.203125f, 0.212158f,
- 0.221924f, 0.232178f, 0.562500f, 0.594727f, 0.601074f, 0.602539f, 0.603516f, 0.602539f,
- 0.000865f, 0.002674f, 0.004444f, 0.005615f, 0.007233f, 0.008430f, 0.009827f, 0.010880f,
- 0.011917f, 0.013206f, 0.014412f, 0.015717f, 0.016876f, 0.018173f, 0.019501f, 0.020950f,
- 0.022217f, 0.023773f, 0.025284f, 0.026749f, 0.028610f, 0.030151f, 0.032166f, 0.034149f,
- 0.036041f, 0.038330f, 0.040558f, 0.042877f, 0.045532f, 0.048157f, 0.050934f, 0.053894f,
- 0.056946f, 0.060303f, 0.063843f, 0.067566f, 0.071472f, 0.075806f, 0.080261f, 0.084778f,
- 0.089600f, 0.094971f, 0.100220f, 0.105896f, 0.111877f, 0.118103f, 0.125000f, 0.131348f,
- 0.138550f, 0.146362f, 0.153687f, 0.161987f, 0.169678f, 0.178223f, 0.187134f, 0.196045f,
- 0.205811f, 0.215698f, 0.549805f, 0.584961f, 0.592773f, 0.594238f, 0.593750f, 0.595215f,
- 0.000951f, 0.002476f, 0.003956f, 0.005062f, 0.006268f, 0.007637f, 0.008888f, 0.009666f,
- 0.010628f, 0.011810f, 0.012856f, 0.013878f, 0.014946f, 0.015900f, 0.017227f, 0.018356f,
- 0.019592f, 0.020889f, 0.022003f, 0.023438f, 0.025101f, 0.026489f, 0.028122f, 0.029739f,
- 0.031555f, 0.033295f, 0.035431f, 0.037537f, 0.039795f, 0.041962f, 0.044647f, 0.047302f,
- 0.049957f, 0.052979f, 0.056122f, 0.059387f, 0.062927f, 0.066956f, 0.070679f, 0.074951f,
- 0.079468f, 0.084167f, 0.089294f, 0.094482f, 0.100098f, 0.106018f, 0.112061f, 0.118835f,
- 0.125366f, 0.132446f, 0.139893f, 0.147827f, 0.155762f, 0.163574f, 0.172607f, 0.180786f,
- 0.190063f, 0.199951f, 0.536621f, 0.576172f, 0.583496f, 0.586914f, 0.587402f, 0.586914f,
- 0.000788f, 0.002115f, 0.003592f, 0.004780f, 0.005939f, 0.006615f, 0.007740f, 0.008598f,
- 0.009514f, 0.010376f, 0.011200f, 0.012138f, 0.013016f, 0.014069f, 0.014977f, 0.015961f,
- 0.016922f, 0.018036f, 0.019043f, 0.020447f, 0.021606f, 0.022995f, 0.024323f, 0.025864f,
- 0.027344f, 0.028946f, 0.030731f, 0.032593f, 0.034515f, 0.036530f, 0.038910f, 0.041016f,
- 0.043274f, 0.046021f, 0.048981f, 0.051819f, 0.055176f, 0.058472f, 0.062012f, 0.065857f,
- 0.069946f, 0.074219f, 0.078796f, 0.083801f, 0.088806f, 0.094299f, 0.100281f, 0.106018f,
- 0.112793f, 0.119446f, 0.126343f, 0.133545f, 0.141357f, 0.149292f, 0.157104f, 0.165894f,
- 0.174683f, 0.184326f, 0.524902f, 0.566895f, 0.575195f, 0.576660f, 0.579102f, 0.579590f,
- 0.000661f, 0.001961f, 0.003382f, 0.004311f, 0.005161f, 0.006062f, 0.006737f, 0.007427f,
- 0.008286f, 0.008995f, 0.009857f, 0.010368f, 0.011230f, 0.011955f, 0.012833f, 0.013786f,
- 0.014565f, 0.015480f, 0.016647f, 0.017578f, 0.018677f, 0.019806f, 0.020950f, 0.022263f,
- 0.023651f, 0.024994f, 0.026306f, 0.027863f, 0.029724f, 0.031525f, 0.033325f, 0.035370f,
- 0.037292f, 0.039673f, 0.042114f, 0.044769f, 0.047546f, 0.050537f, 0.053680f, 0.057098f,
- 0.060852f, 0.064514f, 0.069031f, 0.073303f, 0.078064f, 0.083069f, 0.088379f, 0.094238f,
- 0.100220f, 0.106689f, 0.113342f, 0.120300f, 0.127563f, 0.135132f, 0.142700f, 0.151245f,
- 0.160034f, 0.168823f, 0.512695f, 0.557129f, 0.566406f, 0.569824f, 0.569824f, 0.571289f,
- 0.000757f, 0.001709f, 0.002844f, 0.003582f, 0.004448f, 0.005192f, 0.005989f, 0.006519f,
- 0.007038f, 0.007801f, 0.008453f, 0.009071f, 0.009727f, 0.010391f, 0.011009f, 0.011726f,
- 0.012650f, 0.013184f, 0.014107f, 0.014977f, 0.015900f, 0.016800f, 0.017776f, 0.018936f,
- 0.020172f, 0.021271f, 0.022446f, 0.023697f, 0.025055f, 0.026703f, 0.028397f, 0.030014f,
- 0.031921f, 0.033905f, 0.035919f, 0.038177f, 0.040680f, 0.043243f, 0.045898f, 0.049072f,
- 0.052216f, 0.055725f, 0.059784f, 0.063538f, 0.067688f, 0.072327f, 0.077271f, 0.082764f,
- 0.088379f, 0.094299f, 0.100708f, 0.107239f, 0.114136f, 0.121582f, 0.128906f, 0.136963f,
- 0.145630f, 0.153564f, 0.500977f, 0.547852f, 0.556641f, 0.561523f, 0.562500f, 0.563965f,
- 0.000704f, 0.001769f, 0.002542f, 0.003523f, 0.004036f, 0.004562f, 0.005032f, 0.005661f,
- 0.006176f, 0.006542f, 0.007072f, 0.007698f, 0.008339f, 0.008827f, 0.009323f, 0.010094f,
- 0.010757f, 0.011276f, 0.012093f, 0.012733f, 0.013489f, 0.014488f, 0.015244f, 0.016006f,
- 0.017151f, 0.017975f, 0.018967f, 0.020142f, 0.021255f, 0.022552f, 0.023880f, 0.025314f,
- 0.026840f, 0.028503f, 0.030441f, 0.032166f, 0.034424f, 0.036438f, 0.039001f, 0.041656f,
- 0.044464f, 0.047455f, 0.050842f, 0.054443f, 0.058167f, 0.062286f, 0.066956f, 0.071899f,
- 0.076904f, 0.082458f, 0.088501f, 0.094482f, 0.101196f, 0.108337f, 0.115662f, 0.123352f,
- 0.130981f, 0.139282f, 0.489746f, 0.538574f, 0.547852f, 0.551270f, 0.554688f, 0.555176f,
- 0.000579f, 0.001450f, 0.002396f, 0.002857f, 0.003454f, 0.004032f, 0.004356f, 0.004791f,
- 0.005333f, 0.005718f, 0.006130f, 0.006485f, 0.007042f, 0.007473f, 0.007988f, 0.008476f,
- 0.008865f, 0.009613f, 0.010086f, 0.010651f, 0.011345f, 0.012047f, 0.012764f, 0.013435f,
- 0.014282f, 0.015144f, 0.015884f, 0.016846f, 0.017868f, 0.018814f, 0.020050f, 0.021164f,
- 0.022507f, 0.023773f, 0.025192f, 0.026978f, 0.028564f, 0.030640f, 0.032623f, 0.034882f,
- 0.037231f, 0.039886f, 0.042786f, 0.046143f, 0.049286f, 0.052979f, 0.057098f, 0.061279f,
- 0.066223f, 0.071167f, 0.076660f, 0.082581f, 0.088989f, 0.095581f, 0.102661f, 0.109863f,
- 0.117737f, 0.125488f, 0.476807f, 0.528320f, 0.538574f, 0.543945f, 0.546875f, 0.546875f,
- 0.000510f, 0.001428f, 0.002037f, 0.002613f, 0.003086f, 0.003290f, 0.003672f, 0.004108f,
- 0.004345f, 0.004768f, 0.005035f, 0.005470f, 0.005959f, 0.006207f, 0.006599f, 0.007095f,
- 0.007568f, 0.008003f, 0.008377f, 0.008904f, 0.009575f, 0.010010f, 0.010643f, 0.011131f,
- 0.011871f, 0.012535f, 0.013199f, 0.014038f, 0.014839f, 0.015640f, 0.016586f, 0.017502f,
- 0.018585f, 0.019745f, 0.021088f, 0.022354f, 0.023727f, 0.025253f, 0.026962f, 0.028870f,
- 0.030762f, 0.033051f, 0.035492f, 0.038177f, 0.041229f, 0.044403f, 0.048004f, 0.051880f,
- 0.056213f, 0.060516f, 0.065857f, 0.071045f, 0.077271f, 0.083374f, 0.090027f, 0.096863f,
- 0.104492f, 0.112183f, 0.463623f, 0.518066f, 0.529785f, 0.535156f, 0.538086f, 0.540039f,
- 0.000473f, 0.001222f, 0.001771f, 0.002117f, 0.002323f, 0.002796f, 0.003096f, 0.003355f,
- 0.003601f, 0.003975f, 0.004295f, 0.004543f, 0.004833f, 0.005142f, 0.005455f, 0.005848f,
- 0.006165f, 0.006535f, 0.006947f, 0.007370f, 0.007809f, 0.008240f, 0.008690f, 0.009216f,
- 0.009758f, 0.010223f, 0.010925f, 0.011536f, 0.012146f, 0.012833f, 0.013573f, 0.014389f,
- 0.015244f, 0.016220f, 0.017120f, 0.018219f, 0.019379f, 0.020599f, 0.021988f, 0.023514f,
- 0.025131f, 0.027054f, 0.029037f, 0.031311f, 0.033752f, 0.036591f, 0.039520f, 0.042999f,
- 0.046661f, 0.050873f, 0.055603f, 0.060333f, 0.066101f, 0.071960f, 0.078491f, 0.084961f,
- 0.091797f, 0.099426f, 0.452148f, 0.508301f, 0.520508f, 0.526367f, 0.528809f, 0.530273f,
- 0.000299f, 0.001057f, 0.001329f, 0.001771f, 0.001957f, 0.002350f, 0.002483f, 0.002697f,
- 0.002964f, 0.003181f, 0.003441f, 0.003653f, 0.003904f, 0.004238f, 0.004501f, 0.004738f,
- 0.005024f, 0.005390f, 0.005657f, 0.005985f, 0.006279f, 0.006714f, 0.007053f, 0.007507f,
- 0.007881f, 0.008369f, 0.008774f, 0.009300f, 0.009888f, 0.010483f, 0.011093f, 0.011627f,
- 0.012398f, 0.013130f, 0.013855f, 0.014717f, 0.015686f, 0.016739f, 0.017761f, 0.018890f,
- 0.020248f, 0.021698f, 0.023376f, 0.025131f, 0.027237f, 0.029556f, 0.032166f, 0.035004f,
- 0.038208f, 0.041962f, 0.045868f, 0.050507f, 0.055359f, 0.060852f, 0.066772f, 0.073242f,
- 0.080017f, 0.087097f, 0.440674f, 0.498047f, 0.511719f, 0.517090f, 0.520508f, 0.522949f,
- 0.000427f, 0.001020f, 0.001253f, 0.001431f, 0.001690f, 0.001900f, 0.002018f, 0.002304f,
- 0.002481f, 0.002569f, 0.002731f, 0.002998f, 0.003157f, 0.003424f, 0.003592f, 0.003838f,
- 0.004017f, 0.004253f, 0.004551f, 0.004776f, 0.005100f, 0.005379f, 0.005699f, 0.005932f,
- 0.006290f, 0.006630f, 0.007038f, 0.007465f, 0.007927f, 0.008286f, 0.008858f, 0.009293f,
- 0.009888f, 0.010429f, 0.011086f, 0.011765f, 0.012482f, 0.013298f, 0.014168f, 0.015068f,
- 0.016129f, 0.017288f, 0.018585f, 0.019943f, 0.021622f, 0.023361f, 0.025436f, 0.027847f,
- 0.030655f, 0.033447f, 0.037079f, 0.041229f, 0.045776f, 0.050568f, 0.056061f, 0.062317f,
- 0.068726f, 0.075684f, 0.427734f, 0.488525f, 0.502441f, 0.508789f, 0.513184f, 0.513672f,
- 0.000255f, 0.000597f, 0.001032f, 0.001150f, 0.001353f, 0.001493f, 0.001608f, 0.001750f,
- 0.001933f, 0.002062f, 0.002178f, 0.002302f, 0.002474f, 0.002670f, 0.002872f, 0.002995f,
- 0.003147f, 0.003298f, 0.003565f, 0.003729f, 0.003941f, 0.004219f, 0.004436f, 0.004719f,
- 0.005005f, 0.005230f, 0.005489f, 0.005806f, 0.006191f, 0.006496f, 0.006897f, 0.007267f,
- 0.007671f, 0.008179f, 0.008636f, 0.009163f, 0.009766f, 0.010368f, 0.011047f, 0.011810f,
- 0.012611f, 0.013527f, 0.014519f, 0.015640f, 0.016800f, 0.018265f, 0.019897f, 0.021698f,
- 0.023895f, 0.026260f, 0.029175f, 0.032715f, 0.036682f, 0.041168f, 0.045929f, 0.051758f,
- 0.057922f, 0.064575f, 0.415771f, 0.478271f, 0.493652f, 0.500000f, 0.503906f, 0.505859f,
- 0.000255f, 0.000544f, 0.000863f, 0.000994f, 0.001086f, 0.001183f, 0.001317f, 0.001328f,
- 0.001491f, 0.001608f, 0.001716f, 0.001851f, 0.001943f, 0.002075f, 0.002161f, 0.002319f,
- 0.002426f, 0.002596f, 0.002741f, 0.002884f, 0.003088f, 0.003265f, 0.003391f, 0.003620f,
- 0.003777f, 0.004005f, 0.004215f, 0.004452f, 0.004734f, 0.004963f, 0.005341f, 0.005577f,
- 0.005875f, 0.006271f, 0.006603f, 0.006996f, 0.007450f, 0.007919f, 0.008446f, 0.009003f,
- 0.009674f, 0.010338f, 0.011101f, 0.011909f, 0.012917f, 0.013977f, 0.015190f, 0.016495f,
- 0.018112f, 0.020325f, 0.022415f, 0.025146f, 0.028473f, 0.032349f, 0.036804f, 0.041992f,
- 0.047913f, 0.054077f, 0.404541f, 0.468506f, 0.484131f, 0.490967f, 0.495361f, 0.498291f,
- 0.000377f, 0.000440f, 0.000606f, 0.000685f, 0.000735f, 0.000876f, 0.000929f, 0.001035f,
- 0.001068f, 0.001157f, 0.001307f, 0.001381f, 0.001473f, 0.001595f, 0.001664f, 0.001708f,
- 0.001850f, 0.001957f, 0.002043f, 0.002195f, 0.002291f, 0.002422f, 0.002571f, 0.002687f,
- 0.002842f, 0.002979f, 0.003183f, 0.003345f, 0.003532f, 0.003794f, 0.004002f, 0.004154f,
- 0.004429f, 0.004635f, 0.004967f, 0.005253f, 0.005573f, 0.005909f, 0.006275f, 0.006695f,
- 0.007183f, 0.007660f, 0.008316f, 0.008934f, 0.009644f, 0.010429f, 0.011360f, 0.012497f,
- 0.013634f, 0.014977f, 0.016663f, 0.018875f, 0.021423f, 0.024643f, 0.028549f, 0.033020f,
- 0.038483f, 0.044525f, 0.391602f, 0.458984f, 0.474854f, 0.482178f, 0.488037f, 0.489990f,
- 0.000159f, 0.000401f, 0.000450f, 0.000522f, 0.000605f, 0.000634f, 0.000728f, 0.000702f,
- 0.000808f, 0.000882f, 0.000959f, 0.000991f, 0.001043f, 0.001112f, 0.001205f, 0.001245f,
- 0.001357f, 0.001419f, 0.001513f, 0.001546f, 0.001648f, 0.001752f, 0.001863f, 0.001942f,
- 0.002056f, 0.002159f, 0.002289f, 0.002392f, 0.002506f, 0.002697f, 0.002827f, 0.003023f,
- 0.003172f, 0.003330f, 0.003542f, 0.003750f, 0.004017f, 0.004292f, 0.004559f, 0.004871f,
- 0.005161f, 0.005539f, 0.005932f, 0.006416f, 0.006973f, 0.007526f, 0.008232f, 0.008980f,
- 0.009918f, 0.010895f, 0.012085f, 0.013680f, 0.015472f, 0.017975f, 0.021103f, 0.025146f,
- 0.029938f, 0.035645f, 0.379395f, 0.448486f, 0.465820f, 0.473633f, 0.478760f, 0.481689f,
- 0.000112f, 0.000220f, 0.000321f, 0.000322f, 0.000401f, 0.000489f, 0.000469f, 0.000510f,
- 0.000568f, 0.000653f, 0.000659f, 0.000676f, 0.000703f, 0.000789f, 0.000811f, 0.000886f,
- 0.000888f, 0.000994f, 0.001048f, 0.001096f, 0.001155f, 0.001220f, 0.001289f, 0.001357f,
- 0.001431f, 0.001496f, 0.001599f, 0.001675f, 0.001759f, 0.001894f, 0.001965f, 0.002083f,
- 0.002193f, 0.002310f, 0.002464f, 0.002634f, 0.002758f, 0.002949f, 0.003134f, 0.003319f,
- 0.003551f, 0.003830f, 0.004120f, 0.004440f, 0.004784f, 0.005188f, 0.005680f, 0.006222f,
- 0.006886f, 0.007614f, 0.008461f, 0.009529f, 0.010864f, 0.012596f, 0.014961f, 0.018097f,
- 0.022263f, 0.027466f, 0.367920f, 0.438232f, 0.456543f, 0.465332f, 0.470215f, 0.472900f,
- 0.000140f, 0.000219f, 0.000241f, 0.000245f, 0.000290f, 0.000291f, 0.000302f, 0.000342f,
- 0.000380f, 0.000409f, 0.000408f, 0.000485f, 0.000473f, 0.000527f, 0.000556f, 0.000575f,
- 0.000630f, 0.000642f, 0.000673f, 0.000711f, 0.000762f, 0.000800f, 0.000852f, 0.000886f,
- 0.000952f, 0.000982f, 0.001049f, 0.001108f, 0.001159f, 0.001220f, 0.001281f, 0.001369f,
- 0.001454f, 0.001522f, 0.001595f, 0.001695f, 0.001839f, 0.001928f, 0.002068f, 0.002209f,
- 0.002337f, 0.002504f, 0.002686f, 0.002876f, 0.003139f, 0.003437f, 0.003723f, 0.004078f,
- 0.004509f, 0.005009f, 0.005615f, 0.006332f, 0.007317f, 0.008461f, 0.009926f, 0.012154f,
- 0.015640f, 0.020325f, 0.356445f, 0.429199f, 0.447266f, 0.456299f, 0.462158f, 0.464844f,
- 0.000048f, 0.000154f, 0.000141f, 0.000147f, 0.000174f, 0.000207f, 0.000188f, 0.000221f,
- 0.000233f, 0.000242f, 0.000248f, 0.000271f, 0.000299f, 0.000312f, 0.000337f, 0.000350f,
- 0.000367f, 0.000403f, 0.000416f, 0.000458f, 0.000465f, 0.000483f, 0.000507f, 0.000546f,
- 0.000576f, 0.000625f, 0.000637f, 0.000659f, 0.000705f, 0.000742f, 0.000797f, 0.000837f,
- 0.000890f, 0.000925f, 0.000978f, 0.001036f, 0.001103f, 0.001181f, 0.001253f, 0.001329f,
- 0.001421f, 0.001529f, 0.001647f, 0.001782f, 0.001906f, 0.002075f, 0.002291f, 0.002483f,
- 0.002758f, 0.003059f, 0.003450f, 0.003906f, 0.004536f, 0.005306f, 0.006325f, 0.007713f,
- 0.010101f, 0.014084f, 0.343262f, 0.418457f, 0.437744f, 0.447510f, 0.452881f, 0.456543f,
- 0.000099f, 0.000100f, 0.000091f, 0.000085f, 0.000105f, 0.000099f, 0.000127f, 0.000127f,
- 0.000130f, 0.000137f, 0.000152f, 0.000164f, 0.000164f, 0.000172f, 0.000195f, 0.000186f,
- 0.000209f, 0.000222f, 0.000231f, 0.000241f, 0.000258f, 0.000266f, 0.000290f, 0.000301f,
- 0.000324f, 0.000343f, 0.000357f, 0.000369f, 0.000392f, 0.000409f, 0.000440f, 0.000463f,
- 0.000484f, 0.000513f, 0.000544f, 0.000578f, 0.000607f, 0.000650f, 0.000702f, 0.000737f,
- 0.000787f, 0.000846f, 0.000918f, 0.000977f, 0.001062f, 0.001146f, 0.001259f, 0.001379f,
- 0.001524f, 0.001701f, 0.001924f, 0.002207f, 0.002542f, 0.003006f, 0.003628f, 0.004494f,
- 0.005821f, 0.008774f, 0.332031f, 0.409180f, 0.428467f, 0.438965f, 0.444336f, 0.447998f,
- 0.000082f, 0.000057f, 0.000048f, 0.000051f, 0.000055f, 0.000054f, 0.000057f, 0.000064f,
- 0.000066f, 0.000079f, 0.000070f, 0.000070f, 0.000084f, 0.000078f, 0.000084f, 0.000091f,
- 0.000099f, 0.000108f, 0.000108f, 0.000114f, 0.000119f, 0.000124f, 0.000129f, 0.000144f,
- 0.000151f, 0.000158f, 0.000163f, 0.000176f, 0.000188f, 0.000196f, 0.000208f, 0.000220f,
- 0.000227f, 0.000239f, 0.000259f, 0.000273f, 0.000290f, 0.000303f, 0.000331f, 0.000351f,
- 0.000376f, 0.000402f, 0.000432f, 0.000460f, 0.000500f, 0.000547f, 0.000593f, 0.000648f,
- 0.000720f, 0.000805f, 0.000918f, 0.001045f, 0.001225f, 0.001462f, 0.001788f, 0.002264f,
- 0.003029f, 0.004623f, 0.320801f, 0.398682f, 0.419922f, 0.430420f, 0.436279f, 0.440674f,
- 0.000061f, 0.000041f, 0.000033f, 0.000029f, 0.000026f, 0.000025f, 0.000024f, 0.000024f,
- 0.000023f, 0.000023f, 0.000025f, 0.000032f, 0.000026f, 0.000027f, 0.000035f, 0.000037f,
- 0.000039f, 0.000041f, 0.000041f, 0.000041f, 0.000044f, 0.000050f, 0.000054f, 0.000051f,
- 0.000055f, 0.000060f, 0.000061f, 0.000062f, 0.000069f, 0.000074f, 0.000075f, 0.000081f,
- 0.000087f, 0.000090f, 0.000093f, 0.000098f, 0.000108f, 0.000114f, 0.000123f, 0.000130f,
- 0.000142f, 0.000144f, 0.000156f, 0.000173f, 0.000179f, 0.000200f, 0.000218f, 0.000237f,
- 0.000267f, 0.000299f, 0.000335f, 0.000382f, 0.000448f, 0.000544f, 0.000677f, 0.000883f,
- 0.001233f, 0.001933f, 0.309570f, 0.388672f, 0.410889f, 0.421143f, 0.427246f, 0.431885f,
- 0.000031f, 0.000020f, 0.000016f, 0.000014f, 0.000013f, 0.000012f, 0.000012f, 0.000011f,
- 0.000011f, 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000009f,
- 0.000009f, 0.000007f, 0.000007f, 0.000007f, 0.000008f, 0.000009f, 0.000011f, 0.000012f,
- 0.000012f, 0.000012f, 0.000013f, 0.000015f, 0.000015f, 0.000014f, 0.000016f, 0.000017f,
- 0.000019f, 0.000020f, 0.000020f, 0.000022f, 0.000025f, 0.000023f, 0.000026f, 0.000029f,
- 0.000031f, 0.000034f, 0.000036f, 0.000037f, 0.000040f, 0.000044f, 0.000048f, 0.000052f,
- 0.000056f, 0.000063f, 0.000068f, 0.000083f, 0.000098f, 0.000117f, 0.000149f, 0.000201f,
- 0.000301f, 0.000544f, 0.297607f, 0.379150f, 0.400879f, 0.411865f, 0.419189f, 0.423340f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000002f, 0.000003f, 0.000004f, 0.000004f, 0.000004f, 0.000005f, 0.000007f,
- 0.000011f, 0.000026f, 0.286621f, 0.368896f, 0.391846f, 0.402588f, 0.409912f, 0.414551f,
- },
- {
- 0.007935f, 0.024429f, 0.041290f, 0.058838f, 0.076355f, 0.093933f, 0.111145f, 0.128174f,
- 0.146606f, 0.164429f, 0.182617f, 0.200562f, 0.218750f, 0.236206f, 0.254150f, 0.271729f,
- 0.289551f, 0.308105f, 0.325684f, 0.342773f, 0.360596f, 0.379150f, 0.396240f, 0.414795f,
- 0.431641f, 0.450439f, 0.468018f, 0.484619f, 0.502441f, 0.520020f, 0.536621f, 0.554688f,
- 0.571777f, 0.588379f, 0.605469f, 0.622559f, 0.640137f, 0.657227f, 0.672852f, 0.689941f,
- 0.707031f, 0.723633f, 0.740234f, 0.756836f, 0.773926f, 0.789551f, 0.805664f, 0.821777f,
- 0.838379f, 0.854980f, 0.870117f, 0.885742f, 0.901855f, 0.917480f, 0.932617f, 0.948730f,
- 0.963379f, 0.979492f, 0.960449f, 0.909668f, 0.876465f, 0.850098f, 0.827637f, 0.807617f,
- 0.007530f, 0.023422f, 0.039764f, 0.056610f, 0.073303f, 0.090149f, 0.107300f, 0.124084f,
- 0.141968f, 0.158569f, 0.176392f, 0.193604f, 0.210815f, 0.228760f, 0.246094f, 0.262695f,
- 0.280518f, 0.298340f, 0.315430f, 0.333252f, 0.350586f, 0.367432f, 0.384766f, 0.402344f,
- 0.419678f, 0.436768f, 0.453613f, 0.471436f, 0.488037f, 0.504883f, 0.521973f, 0.538574f,
- 0.556641f, 0.573242f, 0.589844f, 0.605957f, 0.623535f, 0.639160f, 0.656250f, 0.673340f,
- 0.688477f, 0.706055f, 0.721680f, 0.738770f, 0.754883f, 0.770508f, 0.786133f, 0.803711f,
- 0.817871f, 0.834473f, 0.850586f, 0.866211f, 0.881348f, 0.896973f, 0.913086f, 0.928223f,
- 0.942871f, 0.958984f, 0.951172f, 0.903320f, 0.871094f, 0.845703f, 0.824219f, 0.805664f,
- 0.007320f, 0.022552f, 0.038391f, 0.054260f, 0.070312f, 0.086792f, 0.103271f, 0.120178f,
- 0.136841f, 0.153564f, 0.170410f, 0.187256f, 0.203735f, 0.220825f, 0.237793f, 0.255127f,
- 0.271240f, 0.288086f, 0.305420f, 0.322021f, 0.339844f, 0.356689f, 0.373047f, 0.390137f,
- 0.406738f, 0.423340f, 0.440186f, 0.456787f, 0.474121f, 0.490967f, 0.507324f, 0.523926f,
- 0.540527f, 0.557129f, 0.573242f, 0.590332f, 0.606445f, 0.623047f, 0.638672f, 0.655273f,
- 0.671875f, 0.687500f, 0.703613f, 0.720215f, 0.735840f, 0.751953f, 0.767578f, 0.783203f,
- 0.799316f, 0.814941f, 0.830078f, 0.845703f, 0.861328f, 0.877441f, 0.892090f, 0.908203f,
- 0.922852f, 0.938477f, 0.941895f, 0.895996f, 0.865723f, 0.841309f, 0.820801f, 0.802734f,
- 0.007008f, 0.021667f, 0.036865f, 0.052216f, 0.067871f, 0.083862f, 0.099426f, 0.115479f,
- 0.131470f, 0.148315f, 0.164551f, 0.180298f, 0.196899f, 0.213379f, 0.229370f, 0.246460f,
- 0.262695f, 0.279541f, 0.295410f, 0.311523f, 0.329102f, 0.345215f, 0.360840f, 0.378174f,
- 0.394043f, 0.410156f, 0.427246f, 0.443115f, 0.459717f, 0.476318f, 0.493652f, 0.508789f,
- 0.524902f, 0.541016f, 0.557129f, 0.573242f, 0.589844f, 0.605469f, 0.621582f, 0.638672f,
- 0.652832f, 0.669434f, 0.685547f, 0.701660f, 0.717285f, 0.731934f, 0.749023f, 0.764160f,
- 0.779785f, 0.794922f, 0.810059f, 0.826172f, 0.841309f, 0.856445f, 0.872070f, 0.886719f,
- 0.902344f, 0.917480f, 0.932129f, 0.889648f, 0.859863f, 0.835938f, 0.816895f, 0.799316f,
- 0.006817f, 0.020645f, 0.035156f, 0.050110f, 0.065247f, 0.080383f, 0.096313f, 0.111450f,
- 0.126587f, 0.142456f, 0.158447f, 0.174316f, 0.189819f, 0.205566f, 0.221802f, 0.237427f,
- 0.253662f, 0.269775f, 0.285889f, 0.301514f, 0.317627f, 0.333740f, 0.349609f, 0.366211f,
- 0.381348f, 0.397705f, 0.414307f, 0.429932f, 0.447266f, 0.462646f, 0.477539f, 0.494385f,
- 0.509766f, 0.525879f, 0.541992f, 0.557617f, 0.571777f, 0.588379f, 0.605469f, 0.619629f,
- 0.636230f, 0.651855f, 0.666992f, 0.681152f, 0.698242f, 0.714355f, 0.729980f, 0.745117f,
- 0.759766f, 0.775391f, 0.790527f, 0.806152f, 0.821289f, 0.835938f, 0.850586f, 0.866211f,
- 0.882324f, 0.896484f, 0.922363f, 0.882324f, 0.854004f, 0.831543f, 0.812500f, 0.795898f,
- 0.006378f, 0.019989f, 0.034027f, 0.048004f, 0.062744f, 0.077148f, 0.091980f, 0.107178f,
- 0.122192f, 0.137207f, 0.152466f, 0.167603f, 0.183960f, 0.199097f, 0.214111f, 0.229736f,
- 0.244995f, 0.260254f, 0.276367f, 0.291504f, 0.306641f, 0.322998f, 0.338623f, 0.354248f,
- 0.369629f, 0.385254f, 0.400879f, 0.416504f, 0.432617f, 0.447510f, 0.464111f, 0.479492f,
- 0.494141f, 0.511230f, 0.525879f, 0.541016f, 0.556641f, 0.572754f, 0.586914f, 0.602051f,
- 0.617676f, 0.633789f, 0.648926f, 0.665039f, 0.679688f, 0.695312f, 0.710449f, 0.726074f,
- 0.739746f, 0.755859f, 0.771484f, 0.785645f, 0.800781f, 0.815918f, 0.831055f, 0.846680f,
- 0.860840f, 0.875977f, 0.912598f, 0.874512f, 0.847656f, 0.826172f, 0.807617f, 0.791504f,
- 0.006603f, 0.019287f, 0.032776f, 0.046356f, 0.060272f, 0.073914f, 0.088135f, 0.102905f,
- 0.117554f, 0.132690f, 0.147095f, 0.161377f, 0.176636f, 0.191162f, 0.205444f, 0.221680f,
- 0.236572f, 0.251465f, 0.267090f, 0.281250f, 0.296875f, 0.312256f, 0.327393f, 0.342285f,
- 0.357666f, 0.373291f, 0.388184f, 0.403076f, 0.418457f, 0.433838f, 0.448975f, 0.465088f,
- 0.479980f, 0.494385f, 0.509277f, 0.525879f, 0.540039f, 0.555176f, 0.570801f, 0.586426f,
- 0.601074f, 0.616211f, 0.631348f, 0.646484f, 0.661133f, 0.676270f, 0.692383f, 0.705078f,
- 0.720215f, 0.735352f, 0.751953f, 0.766602f, 0.781250f, 0.796387f, 0.810059f, 0.825684f,
- 0.840820f, 0.855469f, 0.902344f, 0.866699f, 0.841797f, 0.820312f, 0.803223f, 0.787598f,
- 0.006111f, 0.018433f, 0.031097f, 0.044739f, 0.057892f, 0.071472f, 0.085205f, 0.099304f,
- 0.113037f, 0.127319f, 0.141357f, 0.156128f, 0.169678f, 0.183838f, 0.198608f, 0.213745f,
- 0.227661f, 0.243652f, 0.257324f, 0.272705f, 0.286865f, 0.301025f, 0.316406f, 0.331543f,
- 0.345703f, 0.360107f, 0.375000f, 0.390625f, 0.405762f, 0.420410f, 0.435303f, 0.449951f,
- 0.465088f, 0.479492f, 0.494141f, 0.509277f, 0.523926f, 0.538574f, 0.553711f, 0.569336f,
- 0.583496f, 0.598145f, 0.612793f, 0.628418f, 0.642578f, 0.657227f, 0.671387f, 0.687012f,
- 0.702637f, 0.716797f, 0.731934f, 0.745605f, 0.761230f, 0.775391f, 0.790527f, 0.805176f,
- 0.819824f, 0.834961f, 0.892578f, 0.858887f, 0.834473f, 0.814941f, 0.798340f, 0.783203f,
- 0.005756f, 0.017761f, 0.029907f, 0.042572f, 0.055481f, 0.068420f, 0.081482f, 0.095276f,
- 0.108826f, 0.122070f, 0.135620f, 0.149902f, 0.163330f, 0.177368f, 0.191284f, 0.206421f,
- 0.219482f, 0.233521f, 0.247925f, 0.262451f, 0.277100f, 0.290771f, 0.304688f, 0.319580f,
- 0.334229f, 0.348389f, 0.362549f, 0.377441f, 0.391602f, 0.406250f, 0.421143f, 0.435791f,
- 0.450439f, 0.463867f, 0.478760f, 0.493164f, 0.507812f, 0.521973f, 0.537109f, 0.551270f,
- 0.565430f, 0.580078f, 0.594727f, 0.609863f, 0.624023f, 0.638672f, 0.653320f, 0.668457f,
- 0.682129f, 0.697266f, 0.711914f, 0.726562f, 0.740723f, 0.755859f, 0.770996f, 0.785156f,
- 0.799805f, 0.814453f, 0.882812f, 0.851562f, 0.827148f, 0.808594f, 0.792969f, 0.778809f,
- 0.005741f, 0.017166f, 0.029053f, 0.041138f, 0.053345f, 0.065796f, 0.078674f, 0.091248f,
- 0.104614f, 0.117004f, 0.130737f, 0.143921f, 0.156860f, 0.170288f, 0.183960f, 0.197754f,
- 0.211304f, 0.224976f, 0.238892f, 0.251953f, 0.266357f, 0.280273f, 0.294922f, 0.308594f,
- 0.322021f, 0.336914f, 0.350098f, 0.364502f, 0.378174f, 0.393066f, 0.407471f, 0.420166f,
- 0.435059f, 0.449219f, 0.463135f, 0.477295f, 0.491699f, 0.506348f, 0.520996f, 0.534668f,
- 0.549316f, 0.563477f, 0.577148f, 0.591309f, 0.605469f, 0.620605f, 0.634766f, 0.648438f,
- 0.663086f, 0.677734f, 0.691895f, 0.706543f, 0.720215f, 0.734863f, 0.750488f, 0.765137f,
- 0.779297f, 0.793945f, 0.872559f, 0.843262f, 0.820801f, 0.803223f, 0.787598f, 0.773926f,
- 0.005283f, 0.016052f, 0.028030f, 0.039246f, 0.050751f, 0.063232f, 0.074829f, 0.087341f,
- 0.099976f, 0.112732f, 0.125122f, 0.138062f, 0.150757f, 0.163696f, 0.176758f, 0.189697f,
- 0.203125f, 0.216553f, 0.229614f, 0.243286f, 0.256592f, 0.269775f, 0.283203f, 0.297119f,
- 0.310547f, 0.324463f, 0.337891f, 0.351807f, 0.365234f, 0.378662f, 0.392822f, 0.406738f,
- 0.419922f, 0.434814f, 0.448730f, 0.461182f, 0.476562f, 0.489746f, 0.502930f, 0.517578f,
- 0.531738f, 0.545410f, 0.559082f, 0.573730f, 0.587402f, 0.602051f, 0.615723f, 0.629395f,
- 0.644043f, 0.658203f, 0.672363f, 0.686523f, 0.701660f, 0.714844f, 0.729980f, 0.743652f,
- 0.758301f, 0.774414f, 0.862305f, 0.835449f, 0.813965f, 0.796875f, 0.782227f, 0.769043f,
- 0.005272f, 0.015427f, 0.026230f, 0.037506f, 0.049164f, 0.060516f, 0.072021f, 0.083740f,
- 0.095825f, 0.108521f, 0.120361f, 0.132324f, 0.144897f, 0.156738f, 0.169922f, 0.182373f,
- 0.195068f, 0.208008f, 0.220459f, 0.233887f, 0.246948f, 0.260254f, 0.272461f, 0.285889f,
- 0.299561f, 0.312500f, 0.325684f, 0.338867f, 0.352783f, 0.365479f, 0.378906f, 0.392334f,
- 0.406006f, 0.419189f, 0.432861f, 0.446777f, 0.460693f, 0.473877f, 0.486572f, 0.500977f,
- 0.515137f, 0.528809f, 0.542480f, 0.555176f, 0.569824f, 0.583984f, 0.597656f, 0.611328f,
- 0.625000f, 0.639648f, 0.653320f, 0.667480f, 0.681641f, 0.695801f, 0.709961f, 0.723633f,
- 0.738281f, 0.752930f, 0.852539f, 0.827148f, 0.807129f, 0.790527f, 0.776367f, 0.764160f,
- 0.004822f, 0.014885f, 0.025360f, 0.035767f, 0.046570f, 0.057587f, 0.068726f, 0.080139f,
- 0.091736f, 0.103577f, 0.115479f, 0.126709f, 0.138672f, 0.150879f, 0.162231f, 0.174805f,
- 0.187622f, 0.199951f, 0.212524f, 0.224854f, 0.236694f, 0.249878f, 0.262207f, 0.275391f,
- 0.287842f, 0.300293f, 0.313477f, 0.326904f, 0.340088f, 0.353027f, 0.365479f, 0.378174f,
- 0.391602f, 0.404541f, 0.417236f, 0.431641f, 0.444336f, 0.457764f, 0.470703f, 0.484375f,
- 0.497803f, 0.510742f, 0.524902f, 0.537598f, 0.552246f, 0.564941f, 0.579590f, 0.592285f,
- 0.606445f, 0.621094f, 0.634277f, 0.646973f, 0.662109f, 0.675781f, 0.689453f, 0.704102f,
- 0.718262f, 0.733398f, 0.842285f, 0.818848f, 0.799805f, 0.784180f, 0.770996f, 0.758301f,
- 0.004745f, 0.014427f, 0.024277f, 0.034546f, 0.044800f, 0.055176f, 0.066040f, 0.076477f,
- 0.087341f, 0.099060f, 0.110474f, 0.121216f, 0.132690f, 0.144165f, 0.156006f, 0.167358f,
- 0.179688f, 0.191284f, 0.203247f, 0.216187f, 0.227905f, 0.239868f, 0.252441f, 0.264648f,
- 0.277100f, 0.289307f, 0.301270f, 0.314453f, 0.326660f, 0.338867f, 0.352539f, 0.364990f,
- 0.377686f, 0.390137f, 0.403076f, 0.416016f, 0.428467f, 0.441406f, 0.453857f, 0.468262f,
- 0.480957f, 0.494385f, 0.507324f, 0.520020f, 0.534180f, 0.547363f, 0.560059f, 0.573730f,
- 0.586914f, 0.601074f, 0.615234f, 0.628418f, 0.641602f, 0.656250f, 0.669434f, 0.683594f,
- 0.697754f, 0.712402f, 0.832520f, 0.809570f, 0.792480f, 0.778320f, 0.764160f, 0.753906f,
- 0.004612f, 0.013840f, 0.023483f, 0.033081f, 0.042999f, 0.052490f, 0.063049f, 0.073303f,
- 0.083801f, 0.094238f, 0.105042f, 0.115967f, 0.127319f, 0.138062f, 0.149048f, 0.160645f,
- 0.171875f, 0.183228f, 0.194946f, 0.206665f, 0.218384f, 0.230347f, 0.241699f, 0.253906f,
- 0.265869f, 0.277832f, 0.290039f, 0.301758f, 0.314209f, 0.326660f, 0.339111f, 0.351074f,
- 0.363281f, 0.375977f, 0.388428f, 0.401123f, 0.413330f, 0.426270f, 0.439453f, 0.451904f,
- 0.464111f, 0.478027f, 0.489746f, 0.503418f, 0.515625f, 0.529297f, 0.542480f, 0.556152f,
- 0.569336f, 0.582031f, 0.595215f, 0.608887f, 0.622559f, 0.636230f, 0.649902f, 0.663574f,
- 0.677246f, 0.691895f, 0.821289f, 0.802246f, 0.785645f, 0.771484f, 0.758789f, 0.748047f,
- 0.004345f, 0.012985f, 0.022156f, 0.030884f, 0.040802f, 0.050568f, 0.060303f, 0.069946f,
- 0.079956f, 0.090393f, 0.100403f, 0.111084f, 0.120667f, 0.131714f, 0.142700f, 0.153198f,
- 0.164429f, 0.175659f, 0.186523f, 0.197876f, 0.208496f, 0.220337f, 0.231567f, 0.243286f,
- 0.254639f, 0.266113f, 0.277832f, 0.289795f, 0.301758f, 0.313477f, 0.325439f, 0.337402f,
- 0.349609f, 0.361328f, 0.373779f, 0.385986f, 0.398193f, 0.410889f, 0.423340f, 0.435059f,
- 0.447998f, 0.460205f, 0.473389f, 0.486084f, 0.499023f, 0.511230f, 0.524414f, 0.537109f,
- 0.549805f, 0.563477f, 0.576172f, 0.589355f, 0.603027f, 0.616699f, 0.629883f, 0.644531f,
- 0.658691f, 0.670898f, 0.811035f, 0.792969f, 0.777832f, 0.764648f, 0.752441f, 0.742676f,
- 0.004002f, 0.012718f, 0.021210f, 0.029877f, 0.039246f, 0.048431f, 0.057281f, 0.067078f,
- 0.076538f, 0.086121f, 0.096008f, 0.105957f, 0.115540f, 0.125732f, 0.136475f, 0.146729f,
- 0.157227f, 0.167236f, 0.177979f, 0.189819f, 0.200195f, 0.210693f, 0.221802f, 0.232788f,
- 0.243896f, 0.255127f, 0.266602f, 0.278320f, 0.289062f, 0.300293f, 0.312012f, 0.323975f,
- 0.335449f, 0.347168f, 0.359131f, 0.371094f, 0.382812f, 0.394775f, 0.406982f, 0.419434f,
- 0.431152f, 0.443604f, 0.455566f, 0.468506f, 0.481445f, 0.493408f, 0.506348f, 0.519043f,
- 0.531738f, 0.544922f, 0.558105f, 0.570801f, 0.583984f, 0.597168f, 0.610352f, 0.624512f,
- 0.637695f, 0.651855f, 0.800293f, 0.785156f, 0.770508f, 0.757812f, 0.747070f, 0.737305f,
- 0.003967f, 0.011940f, 0.020203f, 0.028931f, 0.037109f, 0.045898f, 0.054840f, 0.063477f,
- 0.073059f, 0.082214f, 0.090942f, 0.100647f, 0.110535f, 0.120178f, 0.129639f, 0.139648f,
- 0.149902f, 0.160156f, 0.170044f, 0.180786f, 0.190674f, 0.201416f, 0.211792f, 0.222412f,
- 0.233521f, 0.244751f, 0.255615f, 0.266113f, 0.276855f, 0.288574f, 0.299561f, 0.311279f,
- 0.322266f, 0.333984f, 0.344727f, 0.356934f, 0.368164f, 0.379395f, 0.390869f, 0.403076f,
- 0.415283f, 0.427246f, 0.439453f, 0.451172f, 0.464111f, 0.476807f, 0.488281f, 0.500977f,
- 0.513672f, 0.526367f, 0.538574f, 0.551758f, 0.564453f, 0.577637f, 0.590820f, 0.604492f,
- 0.618164f, 0.631836f, 0.790039f, 0.775879f, 0.763184f, 0.750977f, 0.740723f, 0.731445f,
- 0.003679f, 0.011749f, 0.019135f, 0.027237f, 0.035431f, 0.043884f, 0.052399f, 0.060577f,
- 0.069153f, 0.077881f, 0.086731f, 0.095947f, 0.104797f, 0.114380f, 0.123535f, 0.133057f,
- 0.142700f, 0.152588f, 0.162231f, 0.171753f, 0.182129f, 0.192261f, 0.202026f, 0.212524f,
- 0.222900f, 0.233643f, 0.243896f, 0.254395f, 0.264893f, 0.276123f, 0.286621f, 0.297119f,
- 0.308105f, 0.319336f, 0.331299f, 0.341553f, 0.353027f, 0.364258f, 0.375977f, 0.387451f,
- 0.399414f, 0.410645f, 0.422607f, 0.434814f, 0.445801f, 0.458984f, 0.470703f, 0.482910f,
- 0.495361f, 0.508301f, 0.520020f, 0.532227f, 0.545410f, 0.558594f, 0.570801f, 0.584961f,
- 0.597656f, 0.611816f, 0.778809f, 0.768066f, 0.754883f, 0.743652f, 0.733887f, 0.725098f,
- 0.003525f, 0.010956f, 0.018433f, 0.026260f, 0.033295f, 0.041870f, 0.049377f, 0.057709f,
- 0.065735f, 0.074463f, 0.082764f, 0.091736f, 0.099976f, 0.108582f, 0.118103f, 0.126465f,
- 0.135742f, 0.144775f, 0.154175f, 0.164307f, 0.173218f, 0.182983f, 0.192505f, 0.202759f,
- 0.212646f, 0.221924f, 0.232910f, 0.242188f, 0.252930f, 0.262939f, 0.273926f, 0.284180f,
- 0.294922f, 0.305420f, 0.316162f, 0.327637f, 0.338867f, 0.349609f, 0.361084f, 0.371826f,
- 0.382812f, 0.395020f, 0.406494f, 0.417725f, 0.429688f, 0.441406f, 0.452637f, 0.465088f,
- 0.477783f, 0.489258f, 0.501953f, 0.514160f, 0.527344f, 0.539062f, 0.551758f, 0.564941f,
- 0.578125f, 0.591797f, 0.768555f, 0.759277f, 0.748047f, 0.736816f, 0.728027f, 0.718750f,
- 0.003363f, 0.010353f, 0.017548f, 0.024765f, 0.032196f, 0.039673f, 0.046936f, 0.054565f,
- 0.062561f, 0.070496f, 0.078308f, 0.086731f, 0.094910f, 0.103333f, 0.111633f, 0.120422f,
- 0.129150f, 0.137695f, 0.146973f, 0.155762f, 0.164673f, 0.173950f, 0.183228f, 0.193359f,
- 0.201782f, 0.212036f, 0.221436f, 0.231323f, 0.241699f, 0.251221f, 0.261719f, 0.271729f,
- 0.281494f, 0.291992f, 0.302734f, 0.312988f, 0.323730f, 0.334961f, 0.345459f, 0.357666f,
- 0.367432f, 0.378662f, 0.389893f, 0.401855f, 0.412842f, 0.424316f, 0.435791f, 0.447266f,
- 0.459473f, 0.471436f, 0.482910f, 0.495605f, 0.507324f, 0.520508f, 0.533203f, 0.545898f,
- 0.558594f, 0.570801f, 0.757812f, 0.750488f, 0.740234f, 0.729980f, 0.720703f, 0.712402f,
- 0.003254f, 0.010048f, 0.016815f, 0.023453f, 0.030609f, 0.037537f, 0.044617f, 0.051971f,
- 0.059265f, 0.066833f, 0.074280f, 0.082153f, 0.089905f, 0.097717f, 0.106018f, 0.113770f,
- 0.122131f, 0.131104f, 0.139282f, 0.147705f, 0.155762f, 0.165161f, 0.173950f, 0.183228f,
- 0.192139f, 0.200928f, 0.210693f, 0.220093f, 0.229736f, 0.239258f, 0.248657f, 0.259277f,
- 0.268799f, 0.279053f, 0.288574f, 0.299561f, 0.309814f, 0.319580f, 0.330322f, 0.340820f,
- 0.352783f, 0.362549f, 0.374023f, 0.385010f, 0.395752f, 0.407471f, 0.418701f, 0.429688f,
- 0.441650f, 0.453125f, 0.465088f, 0.477539f, 0.489014f, 0.500977f, 0.513184f, 0.526855f,
- 0.539062f, 0.552246f, 0.747559f, 0.741699f, 0.731934f, 0.722656f, 0.714355f, 0.707031f,
- 0.003345f, 0.009262f, 0.015900f, 0.022614f, 0.029282f, 0.035522f, 0.042633f, 0.048981f,
- 0.056000f, 0.063110f, 0.070801f, 0.077454f, 0.084839f, 0.092590f, 0.100281f, 0.107849f,
- 0.116089f, 0.123169f, 0.131348f, 0.139648f, 0.148193f, 0.156616f, 0.164795f, 0.173584f,
- 0.182617f, 0.191284f, 0.200073f, 0.208740f, 0.218140f, 0.227417f, 0.236694f, 0.246338f,
- 0.255859f, 0.265381f, 0.275146f, 0.285889f, 0.294922f, 0.305420f, 0.315918f, 0.325928f,
- 0.336670f, 0.347412f, 0.358154f, 0.368652f, 0.378662f, 0.390381f, 0.402100f, 0.412842f,
- 0.424316f, 0.435059f, 0.447021f, 0.458984f, 0.470459f, 0.482422f, 0.494873f, 0.508301f,
- 0.520020f, 0.532227f, 0.737305f, 0.732910f, 0.723633f, 0.715820f, 0.708008f, 0.700195f,
- 0.003195f, 0.009010f, 0.015137f, 0.021225f, 0.027466f, 0.033844f, 0.040161f, 0.046417f,
- 0.053497f, 0.059875f, 0.066711f, 0.073425f, 0.080505f, 0.087280f, 0.094788f, 0.102173f,
- 0.109070f, 0.117004f, 0.124634f, 0.132446f, 0.139893f, 0.147705f, 0.155884f, 0.163940f,
- 0.172729f, 0.180908f, 0.189697f, 0.198242f, 0.206665f, 0.215820f, 0.225220f, 0.233765f,
- 0.243408f, 0.251953f, 0.262207f, 0.271484f, 0.281494f, 0.291260f, 0.300537f, 0.311035f,
- 0.320801f, 0.332520f, 0.341797f, 0.352051f, 0.362305f, 0.373535f, 0.384521f, 0.395264f,
- 0.406494f, 0.417480f, 0.429443f, 0.440430f, 0.451904f, 0.463867f, 0.476074f, 0.487793f,
- 0.499268f, 0.513184f, 0.726562f, 0.723633f, 0.716309f, 0.708496f, 0.700684f, 0.694336f,
- 0.002859f, 0.008507f, 0.014366f, 0.020203f, 0.026123f, 0.031891f, 0.038025f, 0.044281f,
- 0.050354f, 0.056519f, 0.062683f, 0.069275f, 0.075195f, 0.082458f, 0.088806f, 0.095947f,
- 0.102783f, 0.110046f, 0.117065f, 0.124878f, 0.132080f, 0.139282f, 0.146851f, 0.154907f,
- 0.162598f, 0.171265f, 0.178833f, 0.187500f, 0.195435f, 0.204590f, 0.213013f, 0.221680f,
- 0.231079f, 0.239502f, 0.248047f, 0.258301f, 0.267334f, 0.277100f, 0.286133f, 0.296387f,
- 0.306641f, 0.316162f, 0.326416f, 0.336426f, 0.346924f, 0.357422f, 0.367188f, 0.378418f,
- 0.389160f, 0.400391f, 0.411865f, 0.422852f, 0.433594f, 0.445557f, 0.457520f, 0.468994f,
- 0.481445f, 0.493408f, 0.715332f, 0.715332f, 0.708984f, 0.700684f, 0.693848f, 0.687988f,
- 0.002701f, 0.008080f, 0.013718f, 0.019058f, 0.024582f, 0.030197f, 0.035675f, 0.041748f,
- 0.047302f, 0.053589f, 0.059082f, 0.065308f, 0.071777f, 0.077576f, 0.084106f, 0.090332f,
- 0.097107f, 0.103577f, 0.110046f, 0.117493f, 0.124146f, 0.131470f, 0.138550f, 0.145508f,
- 0.153564f, 0.161377f, 0.169067f, 0.176880f, 0.184814f, 0.192627f, 0.201294f, 0.209717f,
- 0.218140f, 0.226929f, 0.235229f, 0.245117f, 0.253418f, 0.262939f, 0.272705f, 0.281738f,
- 0.290771f, 0.300781f, 0.310791f, 0.321289f, 0.330566f, 0.341064f, 0.351562f, 0.361572f,
- 0.372559f, 0.382568f, 0.393066f, 0.405273f, 0.415771f, 0.426758f, 0.438721f, 0.450439f,
- 0.461670f, 0.474121f, 0.704102f, 0.706543f, 0.700195f, 0.693359f, 0.687012f, 0.681152f,
- 0.002546f, 0.007771f, 0.012985f, 0.017975f, 0.023392f, 0.028976f, 0.034180f, 0.039368f,
- 0.044556f, 0.050110f, 0.055847f, 0.061218f, 0.066895f, 0.072815f, 0.078674f, 0.085083f,
- 0.091309f, 0.097168f, 0.103516f, 0.110107f, 0.116821f, 0.123413f, 0.130371f, 0.137329f,
- 0.144165f, 0.151733f, 0.158813f, 0.166382f, 0.174438f, 0.182129f, 0.190063f, 0.197510f,
- 0.206055f, 0.214355f, 0.222778f, 0.231812f, 0.240723f, 0.249023f, 0.258789f, 0.267578f,
- 0.276855f, 0.285889f, 0.295654f, 0.305420f, 0.315430f, 0.324463f, 0.334961f, 0.345215f,
- 0.354492f, 0.365234f, 0.376221f, 0.387451f, 0.398926f, 0.409424f, 0.419678f, 0.432129f,
- 0.443848f, 0.455566f, 0.693848f, 0.697266f, 0.691895f, 0.686523f, 0.680176f, 0.674805f,
- 0.002542f, 0.007271f, 0.012337f, 0.017181f, 0.021744f, 0.026840f, 0.031555f, 0.037231f,
- 0.042236f, 0.046906f, 0.051941f, 0.057709f, 0.063049f, 0.068542f, 0.073853f, 0.079712f,
- 0.085266f, 0.091064f, 0.096985f, 0.103027f, 0.109009f, 0.115417f, 0.122192f, 0.128540f,
- 0.135132f, 0.141846f, 0.148926f, 0.156250f, 0.163696f, 0.171387f, 0.178223f, 0.186035f,
- 0.194580f, 0.202271f, 0.210327f, 0.218994f, 0.227173f, 0.235596f, 0.244385f, 0.252930f,
- 0.262451f, 0.271240f, 0.280762f, 0.290771f, 0.299805f, 0.309082f, 0.318359f, 0.329102f,
- 0.338623f, 0.348633f, 0.358643f, 0.370117f, 0.379639f, 0.390869f, 0.401611f, 0.413330f,
- 0.425293f, 0.436523f, 0.682129f, 0.688477f, 0.684082f, 0.678711f, 0.673340f, 0.667969f,
- 0.002300f, 0.007076f, 0.011505f, 0.016251f, 0.020401f, 0.025665f, 0.029816f, 0.034790f,
- 0.039368f, 0.044159f, 0.048798f, 0.053955f, 0.059174f, 0.064148f, 0.069153f, 0.074463f,
- 0.079346f, 0.085266f, 0.090759f, 0.096191f, 0.102112f, 0.108032f, 0.114075f, 0.120117f,
- 0.126587f, 0.133057f, 0.139648f, 0.146240f, 0.153442f, 0.160400f, 0.167725f, 0.174683f,
- 0.182739f, 0.190308f, 0.198120f, 0.206177f, 0.214355f, 0.222656f, 0.230713f, 0.239258f,
- 0.248413f, 0.257080f, 0.265869f, 0.274658f, 0.284424f, 0.292725f, 0.302490f, 0.313232f,
- 0.321777f, 0.331787f, 0.341797f, 0.352295f, 0.363281f, 0.373535f, 0.383545f, 0.395264f,
- 0.405762f, 0.416992f, 0.671387f, 0.679688f, 0.675293f, 0.670898f, 0.666016f, 0.661133f,
- 0.002104f, 0.006474f, 0.010506f, 0.015099f, 0.018875f, 0.023911f, 0.028534f, 0.032715f,
- 0.036652f, 0.041290f, 0.046021f, 0.050171f, 0.054535f, 0.059570f, 0.064575f, 0.069458f,
- 0.074341f, 0.079346f, 0.084351f, 0.089844f, 0.095032f, 0.100830f, 0.106628f, 0.112122f,
- 0.117859f, 0.124084f, 0.130249f, 0.136841f, 0.143188f, 0.149780f, 0.157349f, 0.163940f,
- 0.171021f, 0.178345f, 0.186279f, 0.193848f, 0.201172f, 0.209717f, 0.217529f, 0.225464f,
- 0.233765f, 0.242676f, 0.251221f, 0.260254f, 0.268311f, 0.278076f, 0.287109f, 0.296143f,
- 0.305908f, 0.315674f, 0.325195f, 0.335449f, 0.344971f, 0.355469f, 0.365967f, 0.377441f,
- 0.387939f, 0.398193f, 0.660645f, 0.670410f, 0.667969f, 0.663086f, 0.659180f, 0.654785f,
- 0.002085f, 0.006306f, 0.010506f, 0.014107f, 0.018448f, 0.022293f, 0.026215f, 0.029953f,
- 0.034515f, 0.038391f, 0.042786f, 0.046844f, 0.051361f, 0.055573f, 0.059784f, 0.064331f,
- 0.068970f, 0.073425f, 0.078430f, 0.083313f, 0.088318f, 0.093567f, 0.098816f, 0.104126f,
- 0.109924f, 0.115662f, 0.121521f, 0.127197f, 0.133545f, 0.139771f, 0.146729f, 0.153076f,
- 0.160278f, 0.166992f, 0.174316f, 0.181274f, 0.188965f, 0.196045f, 0.204468f, 0.212036f,
- 0.220459f, 0.228638f, 0.237183f, 0.245483f, 0.254150f, 0.262451f, 0.271484f, 0.281250f,
- 0.290283f, 0.299561f, 0.308350f, 0.318115f, 0.328369f, 0.337158f, 0.349121f, 0.358887f,
- 0.370117f, 0.380615f, 0.649414f, 0.661133f, 0.659668f, 0.655762f, 0.651855f, 0.647949f,
- 0.001922f, 0.005867f, 0.009399f, 0.013565f, 0.017380f, 0.020859f, 0.024551f, 0.028442f,
- 0.032318f, 0.035980f, 0.039551f, 0.043488f, 0.047333f, 0.051239f, 0.055573f, 0.059875f,
- 0.063660f, 0.067810f, 0.072876f, 0.077087f, 0.081726f, 0.086304f, 0.091370f, 0.096863f,
- 0.101746f, 0.107483f, 0.112732f, 0.117920f, 0.124329f, 0.130005f, 0.136108f, 0.142822f,
- 0.149170f, 0.155396f, 0.162598f, 0.169434f, 0.176636f, 0.183838f, 0.191772f, 0.198975f,
- 0.206665f, 0.214478f, 0.222290f, 0.230835f, 0.239258f, 0.247803f, 0.256836f, 0.264893f,
- 0.274414f, 0.283203f, 0.292725f, 0.301758f, 0.311035f, 0.321289f, 0.332275f, 0.340820f,
- 0.351562f, 0.363037f, 0.637695f, 0.652832f, 0.651367f, 0.647949f, 0.644531f, 0.641602f,
- 0.002052f, 0.005253f, 0.009117f, 0.012482f, 0.016113f, 0.019302f, 0.022842f, 0.026230f,
- 0.029831f, 0.033447f, 0.036682f, 0.040588f, 0.044189f, 0.047333f, 0.051178f, 0.055267f,
- 0.058807f, 0.062683f, 0.067200f, 0.070984f, 0.075195f, 0.079895f, 0.084534f, 0.088806f,
- 0.093933f, 0.098999f, 0.104309f, 0.109619f, 0.114807f, 0.120422f, 0.126587f, 0.132080f,
- 0.138550f, 0.144775f, 0.151245f, 0.157837f, 0.164551f, 0.171387f, 0.178467f, 0.186157f,
- 0.193359f, 0.201294f, 0.208740f, 0.216797f, 0.224854f, 0.233398f, 0.241211f, 0.250000f,
- 0.258545f, 0.267822f, 0.276855f, 0.286133f, 0.295410f, 0.304932f, 0.314697f, 0.324463f,
- 0.334229f, 0.344238f, 0.626953f, 0.642578f, 0.643066f, 0.641113f, 0.637695f, 0.634277f,
- 0.001711f, 0.005424f, 0.008347f, 0.012024f, 0.014977f, 0.018066f, 0.021500f, 0.024399f,
- 0.027756f, 0.030869f, 0.034058f, 0.037048f, 0.040558f, 0.044006f, 0.046906f, 0.050690f,
- 0.054169f, 0.057983f, 0.061584f, 0.065247f, 0.069336f, 0.073425f, 0.077576f, 0.082092f,
- 0.086670f, 0.091064f, 0.095886f, 0.101196f, 0.105957f, 0.111267f, 0.116943f, 0.122559f,
- 0.128174f, 0.133789f, 0.140259f, 0.146118f, 0.153076f, 0.159424f, 0.166016f, 0.173462f,
- 0.180542f, 0.187744f, 0.195435f, 0.203003f, 0.209961f, 0.218994f, 0.226562f, 0.234619f,
- 0.243286f, 0.251709f, 0.260742f, 0.269531f, 0.277832f, 0.287354f, 0.297363f, 0.306885f,
- 0.316406f, 0.326660f, 0.615234f, 0.633789f, 0.634277f, 0.632812f, 0.630371f, 0.626953f,
- 0.001721f, 0.004829f, 0.008034f, 0.010857f, 0.013893f, 0.016953f, 0.019806f, 0.022705f,
- 0.025589f, 0.028793f, 0.031616f, 0.034180f, 0.036926f, 0.039978f, 0.043213f, 0.046356f,
- 0.049744f, 0.052887f, 0.056305f, 0.059906f, 0.063416f, 0.067322f, 0.070862f, 0.075134f,
- 0.079285f, 0.083435f, 0.088074f, 0.092712f, 0.097534f, 0.102173f, 0.107544f, 0.112305f,
- 0.118225f, 0.123657f, 0.129272f, 0.135376f, 0.141602f, 0.147705f, 0.153931f, 0.160889f,
- 0.167847f, 0.174683f, 0.181885f, 0.189209f, 0.196533f, 0.204224f, 0.212524f, 0.219727f,
- 0.228271f, 0.236572f, 0.245483f, 0.253418f, 0.261719f, 0.270996f, 0.280029f, 0.289307f,
- 0.300537f, 0.309326f, 0.604004f, 0.625000f, 0.626953f, 0.625000f, 0.622559f, 0.620117f,
- 0.001624f, 0.004730f, 0.007412f, 0.010300f, 0.013199f, 0.015717f, 0.018448f, 0.020935f,
- 0.023163f, 0.026138f, 0.028687f, 0.031204f, 0.033875f, 0.036743f, 0.039825f, 0.042389f,
- 0.045166f, 0.048523f, 0.051422f, 0.054535f, 0.057953f, 0.061249f, 0.064880f, 0.068542f,
- 0.072388f, 0.076355f, 0.080505f, 0.084534f, 0.089294f, 0.093750f, 0.098389f, 0.103210f,
- 0.108337f, 0.113647f, 0.118896f, 0.124817f, 0.130737f, 0.135986f, 0.142212f, 0.148560f,
- 0.155151f, 0.162109f, 0.168579f, 0.175415f, 0.183105f, 0.190552f, 0.197998f, 0.205322f,
- 0.213623f, 0.221436f, 0.229370f, 0.237915f, 0.246216f, 0.254883f, 0.264160f, 0.273438f,
- 0.282471f, 0.292236f, 0.593262f, 0.615723f, 0.618164f, 0.617188f, 0.615234f, 0.612793f,
- 0.001355f, 0.004463f, 0.007061f, 0.009506f, 0.011612f, 0.014381f, 0.016830f, 0.019394f,
- 0.021576f, 0.023697f, 0.026428f, 0.028778f, 0.030975f, 0.033386f, 0.035950f, 0.038513f,
- 0.041260f, 0.044067f, 0.046967f, 0.049622f, 0.052612f, 0.055847f, 0.059052f, 0.062164f,
- 0.065918f, 0.069397f, 0.073242f, 0.077271f, 0.081055f, 0.085327f, 0.089661f, 0.094177f,
- 0.098877f, 0.103455f, 0.108582f, 0.113647f, 0.119812f, 0.125000f, 0.130981f, 0.137085f,
- 0.142944f, 0.149414f, 0.156006f, 0.162354f, 0.169434f, 0.176514f, 0.183716f, 0.191284f,
- 0.198975f, 0.206421f, 0.214844f, 0.222412f, 0.231323f, 0.238647f, 0.247437f, 0.256592f,
- 0.265625f, 0.276367f, 0.581055f, 0.606445f, 0.609863f, 0.608887f, 0.607910f, 0.606445f,
- 0.001413f, 0.004128f, 0.006180f, 0.008781f, 0.010994f, 0.013496f, 0.015427f, 0.017654f,
- 0.019684f, 0.021881f, 0.024139f, 0.025879f, 0.028137f, 0.030334f, 0.032471f, 0.034821f,
- 0.037354f, 0.039642f, 0.042236f, 0.044708f, 0.047394f, 0.050079f, 0.053223f, 0.056244f,
- 0.059479f, 0.062622f, 0.066223f, 0.069946f, 0.073608f, 0.077209f, 0.081604f, 0.085632f,
- 0.089722f, 0.094360f, 0.098999f, 0.103943f, 0.108826f, 0.114319f, 0.119568f, 0.125122f,
- 0.131104f, 0.137085f, 0.143433f, 0.150024f, 0.156494f, 0.163330f, 0.170044f, 0.177490f,
- 0.184326f, 0.191895f, 0.199707f, 0.207764f, 0.215698f, 0.223755f, 0.231812f, 0.240845f,
- 0.249756f, 0.258789f, 0.568848f, 0.598145f, 0.601562f, 0.600586f, 0.600586f, 0.599121f,
- 0.001182f, 0.003773f, 0.005970f, 0.008293f, 0.010277f, 0.012512f, 0.014030f, 0.016129f,
- 0.017929f, 0.019791f, 0.021683f, 0.023590f, 0.025452f, 0.027328f, 0.029404f, 0.031677f,
- 0.033539f, 0.035583f, 0.037903f, 0.040314f, 0.042877f, 0.045319f, 0.048126f, 0.050690f,
- 0.053436f, 0.056519f, 0.059723f, 0.062744f, 0.066284f, 0.069702f, 0.073608f, 0.077209f,
- 0.081055f, 0.085754f, 0.089783f, 0.094421f, 0.099060f, 0.103821f, 0.109192f, 0.114563f,
- 0.119934f, 0.125488f, 0.131104f, 0.137695f, 0.144043f, 0.149780f, 0.156738f, 0.163940f,
- 0.170654f, 0.177856f, 0.185181f, 0.192871f, 0.200439f, 0.208740f, 0.216675f, 0.225342f,
- 0.233521f, 0.242554f, 0.557617f, 0.587891f, 0.592285f, 0.592773f, 0.592285f, 0.592285f,
- 0.001198f, 0.003677f, 0.005547f, 0.007561f, 0.009468f, 0.011253f, 0.012833f, 0.014465f,
- 0.016205f, 0.017792f, 0.019394f, 0.021240f, 0.022751f, 0.024475f, 0.026260f, 0.028015f,
- 0.030136f, 0.031708f, 0.034088f, 0.036102f, 0.038361f, 0.040497f, 0.042816f, 0.045288f,
- 0.047882f, 0.050476f, 0.053284f, 0.056183f, 0.059174f, 0.062500f, 0.065796f, 0.069153f,
- 0.072998f, 0.076904f, 0.080994f, 0.085083f, 0.089478f, 0.094116f, 0.098633f, 0.103394f,
- 0.108704f, 0.113953f, 0.119934f, 0.125366f, 0.131348f, 0.137329f, 0.143555f, 0.150391f,
- 0.157227f, 0.163818f, 0.170776f, 0.178467f, 0.185791f, 0.193359f, 0.201538f, 0.209717f,
- 0.218018f, 0.226807f, 0.544922f, 0.578613f, 0.583984f, 0.584961f, 0.585449f, 0.584473f,
- 0.001067f, 0.003101f, 0.004974f, 0.006855f, 0.008522f, 0.009949f, 0.011635f, 0.012985f,
- 0.014595f, 0.016052f, 0.017685f, 0.019012f, 0.020264f, 0.021851f, 0.023346f, 0.025146f,
- 0.026688f, 0.028336f, 0.030304f, 0.031860f, 0.034119f, 0.035889f, 0.038025f, 0.040283f,
- 0.042450f, 0.044952f, 0.047302f, 0.050049f, 0.052765f, 0.055908f, 0.058594f, 0.061859f,
- 0.064880f, 0.068481f, 0.072327f, 0.076172f, 0.080200f, 0.084290f, 0.088684f, 0.093262f,
- 0.098145f, 0.102905f, 0.108337f, 0.113708f, 0.119080f, 0.125000f, 0.131348f, 0.137329f,
- 0.143921f, 0.150391f, 0.157593f, 0.164551f, 0.171753f, 0.179077f, 0.186768f, 0.194702f,
- 0.203003f, 0.210815f, 0.534180f, 0.569336f, 0.575684f, 0.577637f, 0.577637f, 0.577148f,
- 0.001196f, 0.003178f, 0.004601f, 0.006241f, 0.007782f, 0.009262f, 0.010391f, 0.011795f,
- 0.012955f, 0.014198f, 0.015518f, 0.016785f, 0.018097f, 0.019409f, 0.020782f, 0.022247f,
- 0.023544f, 0.025269f, 0.026749f, 0.028152f, 0.030045f, 0.031555f, 0.033630f, 0.035645f,
- 0.037567f, 0.039642f, 0.041992f, 0.044281f, 0.046692f, 0.049042f, 0.052094f, 0.054779f,
- 0.057831f, 0.060760f, 0.064209f, 0.067627f, 0.071228f, 0.075256f, 0.079224f, 0.083557f,
- 0.087891f, 0.092468f, 0.097168f, 0.102356f, 0.107605f, 0.113098f, 0.119019f, 0.124878f,
- 0.130859f, 0.137451f, 0.144287f, 0.150635f, 0.157471f, 0.164917f, 0.171997f, 0.179932f,
- 0.187378f, 0.196899f, 0.521973f, 0.560547f, 0.566895f, 0.569824f, 0.570312f, 0.568848f,
- 0.001242f, 0.002674f, 0.004421f, 0.005573f, 0.006882f, 0.008354f, 0.009491f, 0.010559f,
- 0.011406f, 0.012695f, 0.013893f, 0.014908f, 0.015854f, 0.017044f, 0.018234f, 0.019501f,
- 0.020752f, 0.022003f, 0.023254f, 0.024689f, 0.026154f, 0.027802f, 0.029434f, 0.031113f,
- 0.032898f, 0.034668f, 0.036774f, 0.038910f, 0.040802f, 0.043030f, 0.045593f, 0.048065f,
- 0.050873f, 0.053680f, 0.056458f, 0.059692f, 0.062866f, 0.066467f, 0.069946f, 0.074036f,
- 0.077942f, 0.082275f, 0.086731f, 0.091614f, 0.096313f, 0.101562f, 0.106934f, 0.112671f,
- 0.118591f, 0.124634f, 0.130859f, 0.137207f, 0.144043f, 0.151123f, 0.157593f, 0.165283f,
- 0.173218f, 0.180664f, 0.510254f, 0.550781f, 0.558105f, 0.561035f, 0.562012f, 0.562012f,
- 0.000842f, 0.002552f, 0.003769f, 0.005333f, 0.006149f, 0.007298f, 0.008362f, 0.009224f,
- 0.010254f, 0.011230f, 0.012108f, 0.013092f, 0.014000f, 0.014992f, 0.016006f, 0.016953f,
- 0.017990f, 0.019196f, 0.020142f, 0.021622f, 0.022827f, 0.024216f, 0.025513f, 0.026993f,
- 0.028564f, 0.030212f, 0.032013f, 0.033813f, 0.035706f, 0.037598f, 0.039703f, 0.041840f,
- 0.044159f, 0.046539f, 0.049347f, 0.052155f, 0.055084f, 0.058228f, 0.061554f, 0.065002f,
- 0.068909f, 0.072693f, 0.076599f, 0.081238f, 0.085388f, 0.090515f, 0.095764f, 0.100891f,
- 0.106689f, 0.112366f, 0.118103f, 0.124634f, 0.130859f, 0.137573f, 0.144287f, 0.151855f,
- 0.158447f, 0.166260f, 0.498535f, 0.541992f, 0.549805f, 0.553711f, 0.554199f, 0.554688f,
- 0.000874f, 0.002186f, 0.003445f, 0.004807f, 0.005562f, 0.006607f, 0.007378f, 0.008102f,
- 0.008919f, 0.009666f, 0.010513f, 0.011131f, 0.012039f, 0.012848f, 0.013779f, 0.014671f,
- 0.015465f, 0.016464f, 0.017517f, 0.018585f, 0.019730f, 0.020798f, 0.022018f, 0.023300f,
- 0.024612f, 0.026093f, 0.027374f, 0.029022f, 0.030624f, 0.032440f, 0.034180f, 0.036285f,
- 0.038116f, 0.040344f, 0.042725f, 0.045349f, 0.047913f, 0.050476f, 0.053406f, 0.056488f,
- 0.059998f, 0.063354f, 0.067383f, 0.071289f, 0.075562f, 0.079834f, 0.084656f, 0.089478f,
- 0.094849f, 0.100342f, 0.106140f, 0.111877f, 0.118042f, 0.124573f, 0.130981f, 0.137451f,
- 0.144653f, 0.152588f, 0.486816f, 0.531738f, 0.541016f, 0.545410f, 0.547363f, 0.546875f,
- 0.000667f, 0.002001f, 0.003244f, 0.003895f, 0.004936f, 0.005608f, 0.006477f, 0.006901f,
- 0.007648f, 0.008354f, 0.009132f, 0.009766f, 0.010490f, 0.011177f, 0.011780f, 0.012543f,
- 0.013420f, 0.014084f, 0.015045f, 0.015961f, 0.016876f, 0.017822f, 0.018768f, 0.019958f,
- 0.021255f, 0.022232f, 0.023560f, 0.024780f, 0.026108f, 0.027634f, 0.029221f, 0.030762f,
- 0.032684f, 0.034576f, 0.036621f, 0.038605f, 0.040985f, 0.043488f, 0.046021f, 0.049042f,
- 0.051727f, 0.054901f, 0.058441f, 0.061981f, 0.065552f, 0.069885f, 0.074097f, 0.078857f,
- 0.083923f, 0.088623f, 0.094360f, 0.099854f, 0.105957f, 0.111694f, 0.118164f, 0.124817f,
- 0.131836f, 0.138794f, 0.474365f, 0.522949f, 0.532227f, 0.536621f, 0.538574f, 0.539062f,
- 0.000876f, 0.002020f, 0.002857f, 0.003855f, 0.004436f, 0.005009f, 0.005482f, 0.006130f,
- 0.006588f, 0.007084f, 0.007656f, 0.008286f, 0.008949f, 0.009506f, 0.010025f, 0.010803f,
- 0.011444f, 0.012047f, 0.012802f, 0.013512f, 0.014305f, 0.015282f, 0.016052f, 0.016846f,
- 0.017914f, 0.018829f, 0.019882f, 0.021027f, 0.022232f, 0.023453f, 0.024689f, 0.026169f,
- 0.027573f, 0.029327f, 0.031036f, 0.032806f, 0.034882f, 0.036743f, 0.039032f, 0.041626f,
- 0.044312f, 0.046936f, 0.050018f, 0.053253f, 0.056610f, 0.060272f, 0.064392f, 0.068542f,
- 0.072937f, 0.078003f, 0.082886f, 0.088318f, 0.093933f, 0.099670f, 0.106140f, 0.112000f,
- 0.118713f, 0.125732f, 0.463135f, 0.513672f, 0.524414f, 0.528809f, 0.530762f, 0.532227f,
- 0.000573f, 0.001698f, 0.002670f, 0.003082f, 0.003735f, 0.004318f, 0.004673f, 0.005161f,
- 0.005779f, 0.006203f, 0.006565f, 0.007015f, 0.007591f, 0.007965f, 0.008583f, 0.009094f,
- 0.009491f, 0.010239f, 0.010780f, 0.011353f, 0.012047f, 0.012787f, 0.013504f, 0.014206f,
- 0.015060f, 0.015915f, 0.016708f, 0.017685f, 0.018677f, 0.019653f, 0.020828f, 0.021866f,
- 0.023224f, 0.024445f, 0.025818f, 0.027557f, 0.029114f, 0.030991f, 0.032928f, 0.035034f,
- 0.037201f, 0.039581f, 0.042328f, 0.045166f, 0.048157f, 0.051392f, 0.054962f, 0.058685f,
- 0.062988f, 0.067444f, 0.072021f, 0.077148f, 0.082520f, 0.088196f, 0.093750f, 0.100403f,
- 0.106201f, 0.112976f, 0.450928f, 0.503906f, 0.515137f, 0.520020f, 0.522949f, 0.524414f,
- 0.000643f, 0.001637f, 0.002197f, 0.002800f, 0.003376f, 0.003613f, 0.003914f, 0.004391f,
- 0.004742f, 0.005150f, 0.005466f, 0.005924f, 0.006344f, 0.006645f, 0.007046f, 0.007591f,
- 0.008118f, 0.008560f, 0.008934f, 0.009529f, 0.010147f, 0.010651f, 0.011276f, 0.011787f,
- 0.012543f, 0.013229f, 0.013916f, 0.014740f, 0.015564f, 0.016388f, 0.017258f, 0.018188f,
- 0.019257f, 0.020355f, 0.021729f, 0.022766f, 0.024277f, 0.025696f, 0.027237f, 0.029022f,
- 0.030945f, 0.033020f, 0.035248f, 0.037689f, 0.040405f, 0.043182f, 0.046295f, 0.049866f,
- 0.053528f, 0.057526f, 0.061920f, 0.066284f, 0.071716f, 0.077209f, 0.082703f, 0.088196f,
- 0.094177f, 0.101074f, 0.438965f, 0.494629f, 0.507324f, 0.512207f, 0.515137f, 0.516113f,
- 0.000484f, 0.001272f, 0.001968f, 0.002327f, 0.002573f, 0.003054f, 0.003338f, 0.003660f,
- 0.003906f, 0.004303f, 0.004658f, 0.004921f, 0.005222f, 0.005547f, 0.005878f, 0.006290f,
- 0.006542f, 0.007015f, 0.007442f, 0.007851f, 0.008339f, 0.008713f, 0.009247f, 0.009811f,
- 0.010345f, 0.010849f, 0.011490f, 0.012123f, 0.012733f, 0.013428f, 0.014183f, 0.014961f,
- 0.015839f, 0.016815f, 0.017731f, 0.018768f, 0.019821f, 0.021072f, 0.022385f, 0.023727f,
- 0.025345f, 0.027084f, 0.028946f, 0.030914f, 0.033295f, 0.035614f, 0.038513f, 0.041473f,
- 0.044678f, 0.048462f, 0.052338f, 0.056671f, 0.061310f, 0.066101f, 0.071533f, 0.077148f,
- 0.083069f, 0.089172f, 0.427246f, 0.485352f, 0.498535f, 0.503906f, 0.508301f, 0.509766f,
- 0.000416f, 0.001121f, 0.001410f, 0.001959f, 0.002159f, 0.002558f, 0.002724f, 0.002939f,
- 0.003220f, 0.003447f, 0.003733f, 0.003944f, 0.004219f, 0.004578f, 0.004810f, 0.005100f,
- 0.005402f, 0.005783f, 0.006077f, 0.006382f, 0.006729f, 0.007141f, 0.007526f, 0.007965f,
- 0.008354f, 0.008858f, 0.009300f, 0.009789f, 0.010452f, 0.010986f, 0.011658f, 0.012131f,
- 0.012833f, 0.013702f, 0.014435f, 0.015266f, 0.016113f, 0.017136f, 0.018143f, 0.019241f,
- 0.020493f, 0.021820f, 0.023346f, 0.025085f, 0.027023f, 0.028976f, 0.031174f, 0.033966f,
- 0.036743f, 0.039856f, 0.043396f, 0.047180f, 0.051605f, 0.056152f, 0.061127f, 0.066284f,
- 0.072021f, 0.078247f, 0.415283f, 0.475586f, 0.490234f, 0.496338f, 0.499756f, 0.501953f,
- 0.000493f, 0.001126f, 0.001391f, 0.001574f, 0.001786f, 0.002073f, 0.002188f, 0.002417f,
- 0.002657f, 0.002785f, 0.002964f, 0.003189f, 0.003384f, 0.003687f, 0.003859f, 0.004124f,
- 0.004330f, 0.004555f, 0.004890f, 0.005119f, 0.005451f, 0.005749f, 0.006054f, 0.006348f,
- 0.006683f, 0.007050f, 0.007458f, 0.007889f, 0.008339f, 0.008751f, 0.009323f, 0.009766f,
- 0.010353f, 0.010887f, 0.011520f, 0.012192f, 0.012932f, 0.013748f, 0.014542f, 0.015434f,
- 0.016434f, 0.017471f, 0.018723f, 0.019989f, 0.021500f, 0.023117f, 0.024948f, 0.027100f,
- 0.029770f, 0.032166f, 0.035248f, 0.038696f, 0.042633f, 0.046875f, 0.051605f, 0.056427f,
- 0.061859f, 0.067688f, 0.403320f, 0.467041f, 0.480957f, 0.487793f, 0.491699f, 0.494385f,
- 0.000336f, 0.000673f, 0.001150f, 0.001274f, 0.001482f, 0.001630f, 0.001748f, 0.001904f,
- 0.002087f, 0.002232f, 0.002306f, 0.002497f, 0.002672f, 0.002872f, 0.003092f, 0.003225f,
- 0.003387f, 0.003553f, 0.003819f, 0.003979f, 0.004230f, 0.004517f, 0.004738f, 0.005016f,
- 0.005322f, 0.005569f, 0.005848f, 0.006184f, 0.006573f, 0.006851f, 0.007271f, 0.007660f,
- 0.008064f, 0.008568f, 0.009048f, 0.009567f, 0.010139f, 0.010788f, 0.011391f, 0.012161f,
- 0.012939f, 0.013763f, 0.014694f, 0.015717f, 0.016815f, 0.018097f, 0.019714f, 0.021149f,
- 0.023270f, 0.025421f, 0.028015f, 0.030991f, 0.034271f, 0.038116f, 0.042328f, 0.046997f,
- 0.052094f, 0.057770f, 0.391113f, 0.457031f, 0.472412f, 0.479736f, 0.484375f, 0.486816f,
- 0.000309f, 0.000612f, 0.000953f, 0.001086f, 0.001191f, 0.001281f, 0.001351f, 0.001442f,
- 0.001610f, 0.001733f, 0.001783f, 0.001991f, 0.002087f, 0.002232f, 0.002337f, 0.002495f,
- 0.002611f, 0.002775f, 0.002935f, 0.003101f, 0.003302f, 0.003496f, 0.003622f, 0.003839f,
- 0.004047f, 0.004265f, 0.004494f, 0.004738f, 0.005039f, 0.005272f, 0.005650f, 0.005898f,
- 0.006210f, 0.006588f, 0.006950f, 0.007332f, 0.007782f, 0.008240f, 0.008766f, 0.009331f,
- 0.009964f, 0.010612f, 0.011314f, 0.012062f, 0.013023f, 0.014038f, 0.015007f, 0.016251f,
- 0.017761f, 0.019501f, 0.021530f, 0.023926f, 0.026718f, 0.030106f, 0.033905f, 0.038361f,
- 0.043060f, 0.048370f, 0.379395f, 0.446777f, 0.464111f, 0.471191f, 0.475586f, 0.479492f,
- 0.000439f, 0.000476f, 0.000672f, 0.000752f, 0.000810f, 0.000949f, 0.001011f, 0.001121f,
- 0.001160f, 0.001249f, 0.001408f, 0.001493f, 0.001591f, 0.001719f, 0.001788f, 0.001845f,
- 0.001982f, 0.002106f, 0.002201f, 0.002357f, 0.002460f, 0.002598f, 0.002724f, 0.002869f,
- 0.003036f, 0.003187f, 0.003397f, 0.003569f, 0.003763f, 0.004017f, 0.004211f, 0.004414f,
- 0.004704f, 0.004890f, 0.005234f, 0.005524f, 0.005825f, 0.006187f, 0.006535f, 0.006977f,
- 0.007423f, 0.007874f, 0.008553f, 0.009079f, 0.009857f, 0.010567f, 0.011360f, 0.012306f,
- 0.013390f, 0.014702f, 0.016220f, 0.017960f, 0.020157f, 0.022995f, 0.026352f, 0.030212f,
- 0.034790f, 0.039459f, 0.368408f, 0.437744f, 0.455322f, 0.463379f, 0.468018f, 0.471436f,
- 0.000202f, 0.000437f, 0.000488f, 0.000579f, 0.000664f, 0.000692f, 0.000792f, 0.000762f,
- 0.000875f, 0.000949f, 0.001038f, 0.001068f, 0.001116f, 0.001196f, 0.001300f, 0.001352f,
- 0.001458f, 0.001529f, 0.001623f, 0.001667f, 0.001770f, 0.001884f, 0.001989f, 0.002071f,
- 0.002203f, 0.002310f, 0.002445f, 0.002556f, 0.002680f, 0.002876f, 0.002991f, 0.003206f,
- 0.003365f, 0.003531f, 0.003759f, 0.003956f, 0.004227f, 0.004513f, 0.004768f, 0.005074f,
- 0.005402f, 0.005756f, 0.006142f, 0.006603f, 0.007160f, 0.007645f, 0.008339f, 0.008987f,
- 0.009819f, 0.010780f, 0.011803f, 0.013153f, 0.014763f, 0.016876f, 0.019623f, 0.022995f,
- 0.026978f, 0.031708f, 0.356445f, 0.428223f, 0.446533f, 0.455078f, 0.460449f, 0.463379f,
- 0.000126f, 0.000241f, 0.000344f, 0.000353f, 0.000437f, 0.000522f, 0.000513f, 0.000552f,
- 0.000613f, 0.000699f, 0.000717f, 0.000727f, 0.000763f, 0.000848f, 0.000877f, 0.000956f,
- 0.000963f, 0.001068f, 0.001128f, 0.001170f, 0.001238f, 0.001311f, 0.001385f, 0.001454f,
- 0.001534f, 0.001603f, 0.001714f, 0.001779f, 0.001885f, 0.002016f, 0.002092f, 0.002214f,
- 0.002331f, 0.002460f, 0.002613f, 0.002777f, 0.002924f, 0.003120f, 0.003298f, 0.003496f,
- 0.003708f, 0.004009f, 0.004292f, 0.004601f, 0.004951f, 0.005341f, 0.005772f, 0.006260f,
- 0.006901f, 0.007572f, 0.008324f, 0.009300f, 0.010445f, 0.011848f, 0.013870f, 0.016678f,
- 0.020218f, 0.024536f, 0.345703f, 0.419189f, 0.437500f, 0.447021f, 0.452393f, 0.455811f,
- 0.000146f, 0.000240f, 0.000268f, 0.000268f, 0.000310f, 0.000311f, 0.000331f, 0.000366f,
- 0.000410f, 0.000447f, 0.000446f, 0.000517f, 0.000511f, 0.000571f, 0.000596f, 0.000618f,
- 0.000674f, 0.000691f, 0.000723f, 0.000762f, 0.000822f, 0.000856f, 0.000912f, 0.000950f,
- 0.001014f, 0.001049f, 0.001128f, 0.001188f, 0.001237f, 0.001303f, 0.001371f, 0.001466f,
- 0.001532f, 0.001623f, 0.001701f, 0.001805f, 0.001945f, 0.002035f, 0.002186f, 0.002329f,
- 0.002460f, 0.002632f, 0.002819f, 0.003012f, 0.003271f, 0.003550f, 0.003819f, 0.004162f,
- 0.004539f, 0.005024f, 0.005585f, 0.006233f, 0.007050f, 0.008072f, 0.009331f, 0.011269f,
- 0.014160f, 0.018112f, 0.333740f, 0.408447f, 0.428711f, 0.438232f, 0.443359f, 0.447510f,
- 0.000053f, 0.000163f, 0.000155f, 0.000160f, 0.000191f, 0.000228f, 0.000206f, 0.000233f,
- 0.000248f, 0.000263f, 0.000267f, 0.000294f, 0.000324f, 0.000335f, 0.000364f, 0.000378f,
- 0.000396f, 0.000435f, 0.000445f, 0.000490f, 0.000502f, 0.000522f, 0.000543f, 0.000582f,
- 0.000619f, 0.000665f, 0.000679f, 0.000705f, 0.000755f, 0.000797f, 0.000856f, 0.000887f,
- 0.000953f, 0.000988f, 0.001043f, 0.001103f, 0.001177f, 0.001256f, 0.001331f, 0.001410f,
- 0.001508f, 0.001612f, 0.001734f, 0.001873f, 0.001999f, 0.002163f, 0.002378f, 0.002565f,
- 0.002827f, 0.003119f, 0.003479f, 0.003899f, 0.004463f, 0.005116f, 0.005951f, 0.007153f,
- 0.009163f, 0.012535f, 0.322510f, 0.400146f, 0.420654f, 0.430176f, 0.436523f, 0.440430f,
- 0.000097f, 0.000107f, 0.000095f, 0.000087f, 0.000107f, 0.000110f, 0.000137f, 0.000139f,
- 0.000140f, 0.000147f, 0.000168f, 0.000175f, 0.000177f, 0.000184f, 0.000210f, 0.000200f,
- 0.000224f, 0.000239f, 0.000246f, 0.000258f, 0.000278f, 0.000288f, 0.000312f, 0.000324f,
- 0.000347f, 0.000368f, 0.000382f, 0.000395f, 0.000418f, 0.000440f, 0.000471f, 0.000495f,
- 0.000521f, 0.000547f, 0.000577f, 0.000620f, 0.000649f, 0.000695f, 0.000749f, 0.000785f,
- 0.000838f, 0.000897f, 0.000972f, 0.001028f, 0.001118f, 0.001204f, 0.001316f, 0.001432f,
- 0.001580f, 0.001748f, 0.001961f, 0.002207f, 0.002533f, 0.002941f, 0.003487f, 0.004223f,
- 0.005371f, 0.007809f, 0.311523f, 0.390381f, 0.411377f, 0.421875f, 0.428467f, 0.432617f,
- 0.000000f, 0.000055f, 0.000046f, 0.000054f, 0.000060f, 0.000058f, 0.000060f, 0.000068f,
- 0.000068f, 0.000082f, 0.000076f, 0.000078f, 0.000092f, 0.000087f, 0.000091f, 0.000097f,
- 0.000105f, 0.000115f, 0.000118f, 0.000124f, 0.000128f, 0.000133f, 0.000139f, 0.000154f,
- 0.000160f, 0.000172f, 0.000175f, 0.000191f, 0.000201f, 0.000211f, 0.000221f, 0.000238f,
- 0.000242f, 0.000257f, 0.000277f, 0.000295f, 0.000309f, 0.000326f, 0.000351f, 0.000375f,
- 0.000400f, 0.000428f, 0.000459f, 0.000490f, 0.000535f, 0.000579f, 0.000626f, 0.000683f,
- 0.000754f, 0.000836f, 0.000952f, 0.001064f, 0.001237f, 0.001460f, 0.001751f, 0.002157f,
- 0.002800f, 0.004189f, 0.299561f, 0.380127f, 0.403076f, 0.413574f, 0.419922f, 0.424072f,
- 0.000059f, 0.000039f, 0.000032f, 0.000028f, 0.000025f, 0.000025f, 0.000025f, 0.000024f,
- 0.000023f, 0.000024f, 0.000026f, 0.000034f, 0.000029f, 0.000031f, 0.000038f, 0.000040f,
- 0.000042f, 0.000043f, 0.000042f, 0.000043f, 0.000048f, 0.000054f, 0.000058f, 0.000056f,
- 0.000060f, 0.000062f, 0.000066f, 0.000069f, 0.000072f, 0.000078f, 0.000082f, 0.000085f,
- 0.000093f, 0.000096f, 0.000099f, 0.000106f, 0.000116f, 0.000123f, 0.000132f, 0.000140f,
- 0.000150f, 0.000154f, 0.000167f, 0.000184f, 0.000192f, 0.000212f, 0.000231f, 0.000251f,
- 0.000282f, 0.000314f, 0.000350f, 0.000401f, 0.000463f, 0.000554f, 0.000679f, 0.000861f,
- 0.001157f, 0.001750f, 0.289307f, 0.371582f, 0.394043f, 0.406006f, 0.412109f, 0.417236f,
- 0.000031f, 0.000020f, 0.000016f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000011f,
- 0.000010f, 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000008f, 0.000008f, 0.000009f,
- 0.000009f, 0.000007f, 0.000008f, 0.000008f, 0.000010f, 0.000011f, 0.000012f, 0.000013f,
- 0.000013f, 0.000013f, 0.000014f, 0.000017f, 0.000017f, 0.000016f, 0.000018f, 0.000019f,
- 0.000021f, 0.000021f, 0.000022f, 0.000025f, 0.000027f, 0.000025f, 0.000028f, 0.000030f,
- 0.000033f, 0.000036f, 0.000038f, 0.000040f, 0.000042f, 0.000047f, 0.000052f, 0.000057f,
- 0.000060f, 0.000068f, 0.000073f, 0.000089f, 0.000104f, 0.000124f, 0.000153f, 0.000204f,
- 0.000293f, 0.000497f, 0.278076f, 0.362793f, 0.385498f, 0.397705f, 0.405029f, 0.409912f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000000f, 0.000000f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000005f, 0.000008f,
- 0.000012f, 0.000026f, 0.267822f, 0.353027f, 0.376953f, 0.388916f, 0.395996f, 0.401367f,
- },
- {
- 0.006824f, 0.021286f, 0.036285f, 0.051208f, 0.066467f, 0.082825f, 0.098694f, 0.114563f,
- 0.130737f, 0.146973f, 0.162720f, 0.179932f, 0.196411f, 0.212646f, 0.229370f, 0.246338f,
- 0.263184f, 0.279785f, 0.297363f, 0.314209f, 0.331055f, 0.348389f, 0.365479f, 0.383301f,
- 0.400146f, 0.417725f, 0.435303f, 0.451904f, 0.469971f, 0.486816f, 0.503906f, 0.521484f,
- 0.539551f, 0.556641f, 0.573730f, 0.592285f, 0.609375f, 0.627441f, 0.644531f, 0.662598f,
- 0.679688f, 0.696777f, 0.714355f, 0.731934f, 0.749512f, 0.768066f, 0.784180f, 0.802246f,
- 0.820312f, 0.837891f, 0.854980f, 0.871582f, 0.889648f, 0.906738f, 0.924805f, 0.941406f,
- 0.959473f, 0.976074f, 0.953125f, 0.895020f, 0.857422f, 0.827637f, 0.803223f, 0.781738f,
- 0.006741f, 0.020706f, 0.035187f, 0.049866f, 0.065125f, 0.079895f, 0.095581f, 0.111206f,
- 0.126953f, 0.142822f, 0.158569f, 0.174561f, 0.190796f, 0.207031f, 0.223511f, 0.239380f,
- 0.256104f, 0.272705f, 0.289307f, 0.305664f, 0.322754f, 0.338867f, 0.356201f, 0.372314f,
- 0.389404f, 0.406494f, 0.423828f, 0.440430f, 0.457520f, 0.474854f, 0.491211f, 0.508789f,
- 0.525391f, 0.541992f, 0.559082f, 0.576660f, 0.594238f, 0.610840f, 0.627930f, 0.645508f,
- 0.662598f, 0.679199f, 0.696289f, 0.713379f, 0.731445f, 0.747559f, 0.765137f, 0.782715f,
- 0.799805f, 0.816895f, 0.834473f, 0.851074f, 0.868164f, 0.884766f, 0.902344f, 0.919434f,
- 0.936523f, 0.953613f, 0.942871f, 0.887695f, 0.851562f, 0.823730f, 0.799805f, 0.779297f,
- 0.006504f, 0.020004f, 0.033875f, 0.048676f, 0.063110f, 0.077759f, 0.092712f, 0.108032f,
- 0.123230f, 0.138672f, 0.153931f, 0.170044f, 0.185791f, 0.200806f, 0.217041f, 0.233276f,
- 0.248901f, 0.265137f, 0.280762f, 0.297363f, 0.313721f, 0.329834f, 0.346680f, 0.363037f,
- 0.378418f, 0.395752f, 0.411621f, 0.428467f, 0.445312f, 0.461670f, 0.479004f, 0.494873f,
- 0.511230f, 0.527832f, 0.544434f, 0.561523f, 0.578613f, 0.594727f, 0.611328f, 0.628906f,
- 0.645508f, 0.662109f, 0.679199f, 0.695312f, 0.712402f, 0.729004f, 0.746094f, 0.762695f,
- 0.779297f, 0.796387f, 0.812500f, 0.829590f, 0.846191f, 0.863281f, 0.879395f, 0.896973f,
- 0.914062f, 0.930176f, 0.932129f, 0.879395f, 0.845703f, 0.818848f, 0.795898f, 0.776367f,
- 0.006226f, 0.019318f, 0.032959f, 0.046631f, 0.060699f, 0.075745f, 0.089966f, 0.104553f,
- 0.119385f, 0.134277f, 0.149292f, 0.164917f, 0.179932f, 0.195190f, 0.210693f, 0.226562f,
- 0.242188f, 0.257568f, 0.273438f, 0.289062f, 0.304932f, 0.320557f, 0.336426f, 0.352539f,
- 0.368652f, 0.384766f, 0.400391f, 0.417236f, 0.433105f, 0.448730f, 0.465088f, 0.481689f,
- 0.497559f, 0.513672f, 0.528809f, 0.546875f, 0.562500f, 0.578613f, 0.595215f, 0.612793f,
- 0.627930f, 0.645508f, 0.661621f, 0.677246f, 0.693848f, 0.709961f, 0.726562f, 0.743164f,
- 0.759766f, 0.774902f, 0.791992f, 0.808594f, 0.825195f, 0.841309f, 0.856934f, 0.874023f,
- 0.890625f, 0.907715f, 0.921387f, 0.872070f, 0.839355f, 0.813477f, 0.791504f, 0.772461f,
- 0.005928f, 0.018997f, 0.031830f, 0.045380f, 0.059235f, 0.072754f, 0.087463f, 0.101562f,
- 0.115723f, 0.130371f, 0.145264f, 0.159668f, 0.175049f, 0.189453f, 0.204468f, 0.219482f,
- 0.234497f, 0.250000f, 0.266113f, 0.280273f, 0.295410f, 0.311768f, 0.327393f, 0.343018f,
- 0.357422f, 0.373779f, 0.389404f, 0.404785f, 0.421143f, 0.437012f, 0.452881f, 0.468262f,
- 0.484375f, 0.499512f, 0.515137f, 0.531738f, 0.546875f, 0.562500f, 0.579102f, 0.595215f,
- 0.610840f, 0.627441f, 0.643555f, 0.659180f, 0.674805f, 0.691406f, 0.708008f, 0.723145f,
- 0.738770f, 0.755371f, 0.771484f, 0.787598f, 0.803711f, 0.819824f, 0.835449f, 0.851562f,
- 0.867676f, 0.884277f, 0.910156f, 0.864258f, 0.832520f, 0.808105f, 0.787109f, 0.769043f,
- 0.005939f, 0.018066f, 0.030991f, 0.043488f, 0.057312f, 0.070557f, 0.084473f, 0.098328f,
- 0.112610f, 0.126587f, 0.140259f, 0.154907f, 0.169678f, 0.184326f, 0.198608f, 0.213379f,
- 0.227783f, 0.242065f, 0.257568f, 0.272705f, 0.287109f, 0.302246f, 0.318115f, 0.333252f,
- 0.347656f, 0.362549f, 0.378418f, 0.393555f, 0.408936f, 0.423828f, 0.439697f, 0.455078f,
- 0.471191f, 0.484863f, 0.500488f, 0.517578f, 0.532227f, 0.547363f, 0.562500f, 0.579102f,
- 0.594727f, 0.610352f, 0.625488f, 0.641602f, 0.657227f, 0.671875f, 0.687500f, 0.704102f,
- 0.719238f, 0.733887f, 0.750488f, 0.767090f, 0.782715f, 0.798340f, 0.813965f, 0.830566f,
- 0.845215f, 0.862305f, 0.899902f, 0.855469f, 0.825684f, 0.801758f, 0.782227f, 0.764648f,
- 0.005684f, 0.017639f, 0.030334f, 0.042572f, 0.055298f, 0.068054f, 0.081787f, 0.095276f,
- 0.108765f, 0.122192f, 0.136353f, 0.150513f, 0.164307f, 0.178467f, 0.192627f, 0.206665f,
- 0.221436f, 0.234985f, 0.249634f, 0.264404f, 0.278564f, 0.293213f, 0.308350f, 0.321533f,
- 0.337646f, 0.353027f, 0.367432f, 0.381592f, 0.395996f, 0.411865f, 0.426758f, 0.441895f,
- 0.456543f, 0.471680f, 0.485840f, 0.501465f, 0.517090f, 0.531738f, 0.546387f, 0.562012f,
- 0.576660f, 0.592773f, 0.608398f, 0.623047f, 0.638672f, 0.654297f, 0.668457f, 0.684082f,
- 0.699707f, 0.714844f, 0.730469f, 0.745605f, 0.761230f, 0.777832f, 0.791504f, 0.807617f,
- 0.823242f, 0.839355f, 0.889160f, 0.847656f, 0.818848f, 0.796387f, 0.776855f, 0.760254f,
- 0.005417f, 0.017136f, 0.028778f, 0.041016f, 0.054047f, 0.066528f, 0.079590f, 0.092102f,
- 0.105225f, 0.118652f, 0.131714f, 0.145630f, 0.158813f, 0.172607f, 0.186523f, 0.200317f,
- 0.213745f, 0.227905f, 0.242188f, 0.256104f, 0.270020f, 0.283936f, 0.299072f, 0.312744f,
- 0.327148f, 0.341797f, 0.355957f, 0.369629f, 0.384766f, 0.399414f, 0.413574f, 0.427490f,
- 0.443115f, 0.457764f, 0.472656f, 0.487061f, 0.501465f, 0.516602f, 0.530762f, 0.545898f,
- 0.560547f, 0.574707f, 0.589844f, 0.605469f, 0.619629f, 0.633301f, 0.648926f, 0.665527f,
- 0.679688f, 0.694824f, 0.709961f, 0.725586f, 0.739746f, 0.755371f, 0.770020f, 0.786133f,
- 0.802246f, 0.817383f, 0.877930f, 0.838867f, 0.812012f, 0.790039f, 0.771973f, 0.755371f,
- 0.005520f, 0.016464f, 0.027695f, 0.039948f, 0.051575f, 0.063965f, 0.076660f, 0.089111f,
- 0.101807f, 0.114319f, 0.126953f, 0.140381f, 0.153564f, 0.166992f, 0.180298f, 0.193970f,
- 0.207153f, 0.220337f, 0.234131f, 0.248169f, 0.261475f, 0.275146f, 0.288818f, 0.302734f,
- 0.316162f, 0.330566f, 0.345459f, 0.358887f, 0.372803f, 0.386719f, 0.401367f, 0.415527f,
- 0.429199f, 0.443848f, 0.458008f, 0.472412f, 0.486572f, 0.500977f, 0.515137f, 0.529785f,
- 0.544434f, 0.558105f, 0.572754f, 0.587891f, 0.601074f, 0.617188f, 0.631836f, 0.645020f,
- 0.660645f, 0.674805f, 0.689453f, 0.704590f, 0.719727f, 0.734375f, 0.750000f, 0.764160f,
- 0.780273f, 0.794922f, 0.866699f, 0.830566f, 0.804688f, 0.784180f, 0.766113f, 0.750977f,
- 0.005222f, 0.016022f, 0.026962f, 0.038086f, 0.050049f, 0.061798f, 0.074158f, 0.085876f,
- 0.098145f, 0.110718f, 0.122986f, 0.135864f, 0.148438f, 0.161133f, 0.173584f, 0.187378f,
- 0.199707f, 0.213501f, 0.226440f, 0.240112f, 0.252441f, 0.266113f, 0.279785f, 0.292725f,
- 0.306152f, 0.320068f, 0.333984f, 0.347900f, 0.361572f, 0.374512f, 0.387695f, 0.402344f,
- 0.416504f, 0.429688f, 0.443604f, 0.458008f, 0.471680f, 0.485596f, 0.499023f, 0.513184f,
- 0.527832f, 0.541016f, 0.555664f, 0.569336f, 0.583984f, 0.598633f, 0.612793f, 0.626465f,
- 0.641602f, 0.656250f, 0.669922f, 0.684570f, 0.698730f, 0.713867f, 0.728516f, 0.742188f,
- 0.757812f, 0.771484f, 0.855957f, 0.822266f, 0.797852f, 0.777832f, 0.760742f, 0.746094f,
- 0.004944f, 0.015327f, 0.026230f, 0.037201f, 0.048187f, 0.059448f, 0.071167f, 0.082642f,
- 0.094727f, 0.106506f, 0.119019f, 0.130371f, 0.143555f, 0.155640f, 0.167725f, 0.180908f,
- 0.193604f, 0.206177f, 0.218506f, 0.231812f, 0.244873f, 0.257568f, 0.270996f, 0.283203f,
- 0.296387f, 0.309814f, 0.322754f, 0.336670f, 0.348877f, 0.362061f, 0.376465f, 0.389893f,
- 0.402588f, 0.415283f, 0.429443f, 0.443115f, 0.457031f, 0.470459f, 0.483887f, 0.497314f,
- 0.511230f, 0.524414f, 0.538574f, 0.551758f, 0.565918f, 0.579590f, 0.593750f, 0.606934f,
- 0.621094f, 0.635254f, 0.649902f, 0.664062f, 0.678223f, 0.692871f, 0.707031f, 0.721191f,
- 0.735840f, 0.750488f, 0.846191f, 0.813477f, 0.790527f, 0.770996f, 0.754883f, 0.740723f,
- 0.004951f, 0.014656f, 0.025253f, 0.035309f, 0.046417f, 0.057465f, 0.068665f, 0.079773f,
- 0.091370f, 0.102844f, 0.114441f, 0.126099f, 0.138062f, 0.150391f, 0.161987f, 0.174561f,
- 0.186523f, 0.198730f, 0.211060f, 0.223267f, 0.235352f, 0.248779f, 0.260986f, 0.274414f,
- 0.286621f, 0.298584f, 0.312256f, 0.324463f, 0.337158f, 0.350342f, 0.363281f, 0.376953f,
- 0.389404f, 0.402344f, 0.415283f, 0.428955f, 0.441162f, 0.455322f, 0.467285f, 0.481201f,
- 0.493896f, 0.507324f, 0.520996f, 0.534668f, 0.547852f, 0.561035f, 0.575195f, 0.588867f,
- 0.603027f, 0.616211f, 0.630371f, 0.643555f, 0.658203f, 0.671875f, 0.686035f, 0.699707f,
- 0.714844f, 0.729492f, 0.833984f, 0.804688f, 0.782227f, 0.764160f, 0.749512f, 0.735352f,
- 0.004700f, 0.014343f, 0.024200f, 0.034515f, 0.044586f, 0.055176f, 0.066162f, 0.077209f,
- 0.087830f, 0.098816f, 0.110413f, 0.121826f, 0.132690f, 0.144897f, 0.156372f, 0.168213f,
- 0.179443f, 0.191650f, 0.203369f, 0.215088f, 0.227661f, 0.239990f, 0.251709f, 0.263916f,
- 0.276611f, 0.289551f, 0.301270f, 0.313965f, 0.325928f, 0.338135f, 0.350586f, 0.363037f,
- 0.376465f, 0.388428f, 0.401123f, 0.414062f, 0.426514f, 0.439209f, 0.452393f, 0.465088f,
- 0.478271f, 0.491455f, 0.503906f, 0.517090f, 0.530273f, 0.543457f, 0.556641f, 0.570312f,
- 0.583008f, 0.597168f, 0.610352f, 0.624512f, 0.638184f, 0.651367f, 0.665527f, 0.679199f,
- 0.692871f, 0.708496f, 0.823242f, 0.796387f, 0.774902f, 0.757812f, 0.742676f, 0.729980f,
- 0.004395f, 0.013802f, 0.023499f, 0.033173f, 0.043121f, 0.053345f, 0.063538f, 0.073730f,
- 0.085083f, 0.095581f, 0.106140f, 0.116760f, 0.127930f, 0.139160f, 0.150757f, 0.161621f,
- 0.173096f, 0.184814f, 0.196289f, 0.207520f, 0.219971f, 0.231201f, 0.242920f, 0.254150f,
- 0.266602f, 0.278320f, 0.290527f, 0.302490f, 0.314209f, 0.326904f, 0.338867f, 0.349854f,
- 0.362305f, 0.375488f, 0.387451f, 0.400146f, 0.412354f, 0.424805f, 0.436768f, 0.449219f,
- 0.461914f, 0.475098f, 0.487061f, 0.500000f, 0.512695f, 0.525391f, 0.538574f, 0.551758f,
- 0.564453f, 0.577148f, 0.590820f, 0.604004f, 0.618164f, 0.631348f, 0.644531f, 0.658203f,
- 0.672363f, 0.686523f, 0.812500f, 0.786621f, 0.767090f, 0.750977f, 0.736816f, 0.724609f,
- 0.004425f, 0.013405f, 0.022385f, 0.032043f, 0.041565f, 0.051605f, 0.061340f, 0.071106f,
- 0.081116f, 0.091125f, 0.101868f, 0.112671f, 0.123169f, 0.133667f, 0.144897f, 0.155029f,
- 0.166748f, 0.177246f, 0.188599f, 0.199585f, 0.211182f, 0.222046f, 0.233643f, 0.245361f,
- 0.255615f, 0.268066f, 0.279053f, 0.291260f, 0.303223f, 0.314209f, 0.325684f, 0.338379f,
- 0.349854f, 0.361572f, 0.374023f, 0.385254f, 0.397949f, 0.409912f, 0.421143f, 0.434082f,
- 0.445801f, 0.457764f, 0.470215f, 0.482910f, 0.495361f, 0.508301f, 0.520996f, 0.534180f,
- 0.546387f, 0.560059f, 0.572266f, 0.584961f, 0.597168f, 0.610840f, 0.624023f, 0.638184f,
- 0.650879f, 0.666016f, 0.801270f, 0.778320f, 0.760254f, 0.744141f, 0.730469f, 0.719238f,
- 0.004261f, 0.012543f, 0.021591f, 0.031052f, 0.039734f, 0.049164f, 0.058838f, 0.068420f,
- 0.077881f, 0.087402f, 0.098145f, 0.108276f, 0.118225f, 0.128784f, 0.138550f, 0.149292f,
- 0.159790f, 0.170654f, 0.181519f, 0.191772f, 0.203003f, 0.213623f, 0.225098f, 0.235107f,
- 0.247070f, 0.257324f, 0.269287f, 0.280273f, 0.291260f, 0.302246f, 0.313721f, 0.325439f,
- 0.336670f, 0.348145f, 0.359619f, 0.371338f, 0.382812f, 0.395020f, 0.406738f, 0.418213f,
- 0.429932f, 0.442139f, 0.454102f, 0.466309f, 0.479004f, 0.490723f, 0.502930f, 0.515625f,
- 0.526855f, 0.540527f, 0.552246f, 0.565918f, 0.578613f, 0.591309f, 0.604492f, 0.617188f,
- 0.630859f, 0.644043f, 0.790039f, 0.769531f, 0.751953f, 0.737305f, 0.724121f, 0.713379f,
- 0.003983f, 0.012329f, 0.020538f, 0.029312f, 0.038452f, 0.047241f, 0.056244f, 0.065552f,
- 0.075195f, 0.084290f, 0.094238f, 0.103638f, 0.113403f, 0.123413f, 0.133057f, 0.143066f,
- 0.153076f, 0.163696f, 0.173584f, 0.184204f, 0.194580f, 0.204834f, 0.215332f, 0.225952f,
- 0.237305f, 0.247803f, 0.258545f, 0.269531f, 0.280518f, 0.291260f, 0.301758f, 0.312988f,
- 0.324219f, 0.335205f, 0.346191f, 0.357178f, 0.368896f, 0.380127f, 0.391113f, 0.403076f,
- 0.414551f, 0.426270f, 0.437500f, 0.449951f, 0.460938f, 0.473389f, 0.485596f, 0.497314f,
- 0.509277f, 0.522461f, 0.533691f, 0.546875f, 0.558594f, 0.571289f, 0.583496f, 0.596680f,
- 0.608887f, 0.623047f, 0.778809f, 0.761230f, 0.744141f, 0.730957f, 0.718262f, 0.707031f,
- 0.003717f, 0.012016f, 0.020142f, 0.028137f, 0.036682f, 0.045441f, 0.053711f, 0.062927f,
- 0.071777f, 0.080627f, 0.090210f, 0.099060f, 0.108643f, 0.118164f, 0.127808f, 0.137329f,
- 0.147095f, 0.156128f, 0.166748f, 0.175903f, 0.186157f, 0.196655f, 0.206909f, 0.216797f,
- 0.227417f, 0.236816f, 0.247559f, 0.258301f, 0.268799f, 0.278809f, 0.289795f, 0.299805f,
- 0.310547f, 0.321777f, 0.333008f, 0.343262f, 0.354492f, 0.365234f, 0.376953f, 0.387939f,
- 0.398438f, 0.410400f, 0.421387f, 0.433105f, 0.444824f, 0.455811f, 0.467529f, 0.479736f,
- 0.491943f, 0.502930f, 0.515625f, 0.527344f, 0.540039f, 0.551758f, 0.563965f, 0.576660f,
- 0.589844f, 0.602539f, 0.767578f, 0.751465f, 0.736328f, 0.723633f, 0.711914f, 0.701660f,
- 0.003813f, 0.011337f, 0.019028f, 0.027252f, 0.035583f, 0.043396f, 0.051849f, 0.060028f,
- 0.068481f, 0.077026f, 0.086121f, 0.095093f, 0.103821f, 0.112610f, 0.121765f, 0.131470f,
- 0.140503f, 0.149780f, 0.159058f, 0.168701f, 0.178711f, 0.187744f, 0.197998f, 0.207397f,
- 0.217651f, 0.227661f, 0.236694f, 0.246704f, 0.257080f, 0.267334f, 0.277832f, 0.288330f,
- 0.298584f, 0.308838f, 0.319336f, 0.329590f, 0.340332f, 0.351318f, 0.361816f, 0.372559f,
- 0.383301f, 0.395020f, 0.405273f, 0.416260f, 0.427734f, 0.439209f, 0.450195f, 0.462158f,
- 0.473389f, 0.485107f, 0.497314f, 0.508301f, 0.520996f, 0.533203f, 0.544922f, 0.557617f,
- 0.568848f, 0.582031f, 0.757324f, 0.742676f, 0.729004f, 0.716309f, 0.705566f, 0.695801f,
- 0.003633f, 0.011040f, 0.018280f, 0.026062f, 0.033569f, 0.041229f, 0.049591f, 0.057373f,
- 0.065308f, 0.073975f, 0.082214f, 0.090393f, 0.099243f, 0.107544f, 0.116028f, 0.125854f,
- 0.134155f, 0.143311f, 0.151978f, 0.160767f, 0.170410f, 0.179321f, 0.188477f, 0.198242f,
- 0.207764f, 0.217896f, 0.227051f, 0.236328f, 0.246338f, 0.256104f, 0.265869f, 0.276123f,
- 0.285645f, 0.295898f, 0.306152f, 0.316162f, 0.326172f, 0.336914f, 0.347412f, 0.358154f,
- 0.368164f, 0.378906f, 0.389648f, 0.400146f, 0.410889f, 0.421631f, 0.432861f, 0.444824f,
- 0.456055f, 0.466797f, 0.479004f, 0.490234f, 0.501465f, 0.514160f, 0.525879f, 0.537598f,
- 0.549316f, 0.561523f, 0.745605f, 0.733887f, 0.721191f, 0.708496f, 0.699219f, 0.689453f,
- 0.003469f, 0.010429f, 0.017609f, 0.024612f, 0.032135f, 0.039520f, 0.047516f, 0.055206f,
- 0.062347f, 0.070618f, 0.078308f, 0.085938f, 0.094727f, 0.102417f, 0.111511f, 0.119446f,
- 0.127441f, 0.136475f, 0.144897f, 0.154175f, 0.162476f, 0.171509f, 0.180054f, 0.189697f,
- 0.198486f, 0.207886f, 0.216553f, 0.225830f, 0.235229f, 0.244873f, 0.254395f, 0.263428f,
- 0.273193f, 0.283203f, 0.292969f, 0.302734f, 0.312744f, 0.322510f, 0.333008f, 0.342773f,
- 0.353027f, 0.363037f, 0.374023f, 0.384521f, 0.395264f, 0.405762f, 0.416260f, 0.427002f,
- 0.438232f, 0.449219f, 0.460449f, 0.471924f, 0.482910f, 0.494629f, 0.506348f, 0.517578f,
- 0.529785f, 0.541504f, 0.734375f, 0.725098f, 0.712891f, 0.701660f, 0.692383f, 0.683594f,
- 0.003328f, 0.009804f, 0.016373f, 0.023727f, 0.030746f, 0.037994f, 0.044952f, 0.052032f,
- 0.059998f, 0.067383f, 0.074707f, 0.082214f, 0.089783f, 0.097961f, 0.105774f, 0.114197f,
- 0.122131f, 0.129517f, 0.137695f, 0.146118f, 0.154419f, 0.163330f, 0.171997f, 0.180664f,
- 0.188477f, 0.197388f, 0.206055f, 0.215332f, 0.224365f, 0.233765f, 0.242798f, 0.251709f,
- 0.260986f, 0.270020f, 0.279785f, 0.289062f, 0.299561f, 0.308594f, 0.318115f, 0.328613f,
- 0.338135f, 0.348877f, 0.358154f, 0.368408f, 0.378174f, 0.388916f, 0.399658f, 0.410156f,
- 0.420898f, 0.431885f, 0.442871f, 0.453369f, 0.463867f, 0.475342f, 0.486572f, 0.498535f,
- 0.510742f, 0.521973f, 0.723633f, 0.715820f, 0.705078f, 0.694336f, 0.686035f, 0.677246f,
- 0.003090f, 0.009628f, 0.016129f, 0.022644f, 0.029068f, 0.036407f, 0.042633f, 0.049866f,
- 0.056946f, 0.063904f, 0.071167f, 0.078186f, 0.085327f, 0.092896f, 0.100098f, 0.107788f,
- 0.115662f, 0.123230f, 0.131104f, 0.139160f, 0.146973f, 0.154907f, 0.162964f, 0.171265f,
- 0.179565f, 0.188110f, 0.196777f, 0.204834f, 0.213745f, 0.222168f, 0.231079f, 0.239868f,
- 0.248779f, 0.258057f, 0.267090f, 0.276611f, 0.285645f, 0.294434f, 0.304688f, 0.314209f,
- 0.323242f, 0.332520f, 0.342773f, 0.353027f, 0.362549f, 0.373047f, 0.383057f, 0.393311f,
- 0.404053f, 0.414307f, 0.424561f, 0.435059f, 0.445801f, 0.456787f, 0.467773f, 0.479004f,
- 0.490479f, 0.501953f, 0.712891f, 0.707031f, 0.696777f, 0.687500f, 0.679199f, 0.671387f,
- 0.003096f, 0.009026f, 0.015450f, 0.021606f, 0.027695f, 0.034302f, 0.040833f, 0.047455f,
- 0.054077f, 0.060669f, 0.067444f, 0.074097f, 0.081604f, 0.088501f, 0.095337f, 0.102295f,
- 0.109375f, 0.116821f, 0.124146f, 0.131592f, 0.139404f, 0.147217f, 0.155029f, 0.162231f,
- 0.170288f, 0.177979f, 0.186646f, 0.194092f, 0.203247f, 0.211670f, 0.219604f, 0.228149f,
- 0.236816f, 0.245605f, 0.254639f, 0.263184f, 0.272217f, 0.281250f, 0.290527f, 0.299805f,
- 0.308838f, 0.318604f, 0.327637f, 0.337646f, 0.347900f, 0.356934f, 0.367432f, 0.376953f,
- 0.387451f, 0.397217f, 0.407227f, 0.417480f, 0.427979f, 0.439209f, 0.449463f, 0.459717f,
- 0.470947f, 0.482666f, 0.701172f, 0.698242f, 0.688477f, 0.680176f, 0.671875f, 0.665039f,
- 0.002831f, 0.008789f, 0.014702f, 0.020523f, 0.026642f, 0.032684f, 0.038757f, 0.044708f,
- 0.051666f, 0.057312f, 0.063660f, 0.070190f, 0.076904f, 0.083435f, 0.090454f, 0.097046f,
- 0.103821f, 0.110535f, 0.117981f, 0.124817f, 0.131714f, 0.138916f, 0.146606f, 0.153687f,
- 0.161011f, 0.168823f, 0.176270f, 0.184570f, 0.192139f, 0.200317f, 0.208008f, 0.216309f,
- 0.224609f, 0.233032f, 0.241821f, 0.250244f, 0.258789f, 0.268066f, 0.276611f, 0.285400f,
- 0.294678f, 0.303223f, 0.312500f, 0.322021f, 0.331787f, 0.340088f, 0.350830f, 0.360596f,
- 0.369385f, 0.380371f, 0.389893f, 0.399658f, 0.410645f, 0.420654f, 0.430908f, 0.442383f,
- 0.452148f, 0.464111f, 0.690430f, 0.688965f, 0.681152f, 0.672852f, 0.665039f, 0.658691f,
- 0.002712f, 0.008553f, 0.013878f, 0.019638f, 0.025360f, 0.030716f, 0.037231f, 0.042633f,
- 0.048615f, 0.054810f, 0.060638f, 0.066650f, 0.072205f, 0.078796f, 0.085083f, 0.091492f,
- 0.097961f, 0.104065f, 0.110718f, 0.117859f, 0.124207f, 0.130981f, 0.138550f, 0.145142f,
- 0.152588f, 0.160156f, 0.166992f, 0.174561f, 0.181885f, 0.189453f, 0.197754f, 0.205444f,
- 0.213013f, 0.220825f, 0.229004f, 0.237061f, 0.246094f, 0.254639f, 0.262939f, 0.271484f,
- 0.280273f, 0.288818f, 0.298584f, 0.307129f, 0.316162f, 0.325195f, 0.334229f, 0.344482f,
- 0.353516f, 0.363525f, 0.372803f, 0.382812f, 0.392822f, 0.402344f, 0.412842f, 0.423096f,
- 0.433350f, 0.444092f, 0.679199f, 0.679688f, 0.672852f, 0.665039f, 0.658203f, 0.651855f,
- 0.002674f, 0.007828f, 0.013290f, 0.018723f, 0.023743f, 0.029160f, 0.034790f, 0.040100f,
- 0.045929f, 0.051544f, 0.057068f, 0.063110f, 0.068359f, 0.074280f, 0.080078f, 0.086243f,
- 0.092346f, 0.098206f, 0.104919f, 0.110779f, 0.117493f, 0.123291f, 0.130005f, 0.136963f,
- 0.143677f, 0.150635f, 0.157471f, 0.164307f, 0.171631f, 0.179199f, 0.186279f, 0.193604f,
- 0.201904f, 0.209229f, 0.217163f, 0.224976f, 0.233154f, 0.240967f, 0.249634f, 0.258301f,
- 0.266113f, 0.274414f, 0.283691f, 0.291748f, 0.301025f, 0.310059f, 0.319336f, 0.327148f,
- 0.337402f, 0.347168f, 0.355957f, 0.364746f, 0.375488f, 0.385498f, 0.394043f, 0.405273f,
- 0.415283f, 0.426025f, 0.667969f, 0.670410f, 0.664551f, 0.657227f, 0.651367f, 0.645508f,
- 0.002731f, 0.007622f, 0.012627f, 0.017868f, 0.022781f, 0.028107f, 0.032959f, 0.037811f,
- 0.043121f, 0.048615f, 0.053925f, 0.059235f, 0.064514f, 0.070007f, 0.075562f, 0.080688f,
- 0.086914f, 0.092102f, 0.098083f, 0.104309f, 0.110107f, 0.115906f, 0.122314f, 0.128540f,
- 0.135010f, 0.141479f, 0.147949f, 0.154663f, 0.161865f, 0.168579f, 0.175415f, 0.182739f,
- 0.191040f, 0.197510f, 0.205200f, 0.212891f, 0.219971f, 0.228638f, 0.236328f, 0.244263f,
- 0.252686f, 0.260498f, 0.268799f, 0.278076f, 0.286133f, 0.294434f, 0.303223f, 0.312500f,
- 0.320801f, 0.329834f, 0.339844f, 0.347656f, 0.357910f, 0.367676f, 0.376709f, 0.386963f,
- 0.396729f, 0.406982f, 0.656738f, 0.662598f, 0.656738f, 0.649902f, 0.644531f, 0.638672f,
- 0.002411f, 0.007168f, 0.012238f, 0.016739f, 0.021957f, 0.026184f, 0.031311f, 0.035583f,
- 0.041016f, 0.045685f, 0.050568f, 0.055573f, 0.060791f, 0.065735f, 0.070557f, 0.076111f,
- 0.081238f, 0.086792f, 0.092163f, 0.097534f, 0.103271f, 0.108887f, 0.114563f, 0.120605f,
- 0.126587f, 0.132446f, 0.139038f, 0.145508f, 0.152100f, 0.158447f, 0.165527f, 0.171997f,
- 0.178833f, 0.186035f, 0.193481f, 0.200928f, 0.207886f, 0.215820f, 0.222900f, 0.230713f,
- 0.238770f, 0.246948f, 0.255127f, 0.262695f, 0.271484f, 0.280029f, 0.287842f, 0.296631f,
- 0.305420f, 0.313965f, 0.322754f, 0.331787f, 0.340576f, 0.350342f, 0.359375f, 0.369385f,
- 0.379150f, 0.388184f, 0.645508f, 0.652832f, 0.648438f, 0.643066f, 0.637695f, 0.632324f,
- 0.002480f, 0.006691f, 0.011452f, 0.015900f, 0.020828f, 0.024734f, 0.029327f, 0.033752f,
- 0.038513f, 0.042999f, 0.047638f, 0.052429f, 0.056671f, 0.061859f, 0.066040f, 0.071289f,
- 0.075684f, 0.080688f, 0.086243f, 0.091248f, 0.096436f, 0.101562f, 0.107300f, 0.112366f,
- 0.118347f, 0.124146f, 0.130249f, 0.135864f, 0.141968f, 0.148438f, 0.155029f, 0.161377f,
- 0.167969f, 0.174683f, 0.181641f, 0.188599f, 0.195679f, 0.203247f, 0.210449f, 0.217529f,
- 0.225342f, 0.233398f, 0.241577f, 0.249023f, 0.256592f, 0.264893f, 0.273193f, 0.281494f,
- 0.289795f, 0.297607f, 0.306885f, 0.315430f, 0.323730f, 0.333496f, 0.342529f, 0.351318f,
- 0.360840f, 0.370605f, 0.634766f, 0.643555f, 0.640625f, 0.635742f, 0.630859f, 0.625488f,
- 0.002230f, 0.006477f, 0.010582f, 0.014870f, 0.019073f, 0.023270f, 0.027893f, 0.031860f,
- 0.036072f, 0.040253f, 0.044373f, 0.048706f, 0.052856f, 0.057312f, 0.061859f, 0.066406f,
- 0.070984f, 0.075317f, 0.080139f, 0.084839f, 0.089661f, 0.094910f, 0.099792f, 0.104858f,
- 0.110718f, 0.115356f, 0.121399f, 0.126831f, 0.132690f, 0.138672f, 0.145142f, 0.151001f,
- 0.157471f, 0.164185f, 0.170532f, 0.177002f, 0.184082f, 0.191040f, 0.197876f, 0.205200f,
- 0.212402f, 0.219604f, 0.227295f, 0.234985f, 0.242188f, 0.250244f, 0.257812f, 0.266113f,
- 0.274170f, 0.282471f, 0.290771f, 0.299072f, 0.307373f, 0.316162f, 0.326416f, 0.333984f,
- 0.343750f, 0.353271f, 0.622070f, 0.634277f, 0.631836f, 0.627930f, 0.623535f, 0.619141f,
- 0.002220f, 0.006039f, 0.010353f, 0.014328f, 0.017838f, 0.022141f, 0.025742f, 0.029510f,
- 0.033600f, 0.037781f, 0.041443f, 0.045502f, 0.049469f, 0.053436f, 0.057190f, 0.061462f,
- 0.065735f, 0.069946f, 0.074524f, 0.078674f, 0.083069f, 0.087830f, 0.092468f, 0.097412f,
- 0.102783f, 0.107910f, 0.112793f, 0.118164f, 0.123901f, 0.129395f, 0.135132f, 0.140991f,
- 0.147339f, 0.152954f, 0.159302f, 0.165527f, 0.172363f, 0.178589f, 0.185425f, 0.191895f,
- 0.199219f, 0.206665f, 0.213989f, 0.221069f, 0.228516f, 0.236206f, 0.243042f, 0.251709f,
- 0.258789f, 0.266846f, 0.275146f, 0.283203f, 0.291260f, 0.300537f, 0.308350f, 0.317627f,
- 0.326904f, 0.335938f, 0.611816f, 0.625000f, 0.624023f, 0.620117f, 0.616211f, 0.612793f,
- 0.001965f, 0.005882f, 0.009613f, 0.013184f, 0.016785f, 0.020370f, 0.024384f, 0.027664f,
- 0.031311f, 0.035126f, 0.038727f, 0.042572f, 0.046112f, 0.049347f, 0.053253f, 0.056915f,
- 0.060883f, 0.064697f, 0.068909f, 0.072693f, 0.076843f, 0.081055f, 0.085754f, 0.090088f,
- 0.094849f, 0.099609f, 0.104614f, 0.109741f, 0.114746f, 0.119995f, 0.125488f, 0.130981f,
- 0.136719f, 0.142700f, 0.148315f, 0.154541f, 0.160522f, 0.166870f, 0.173828f, 0.179932f,
- 0.186768f, 0.193604f, 0.200439f, 0.207764f, 0.214844f, 0.221802f, 0.228882f, 0.236328f,
- 0.244385f, 0.252197f, 0.259277f, 0.268066f, 0.275635f, 0.283447f, 0.292236f, 0.301270f,
- 0.309570f, 0.318848f, 0.600098f, 0.616211f, 0.615234f, 0.612793f, 0.609375f, 0.605469f,
- 0.001966f, 0.005653f, 0.009109f, 0.012428f, 0.015945f, 0.018967f, 0.022537f, 0.025894f,
- 0.029175f, 0.032440f, 0.035797f, 0.038818f, 0.042389f, 0.046051f, 0.049072f, 0.052521f,
- 0.056335f, 0.059906f, 0.063293f, 0.067017f, 0.070923f, 0.075134f, 0.078979f, 0.083496f,
- 0.087646f, 0.091980f, 0.096619f, 0.101196f, 0.105957f, 0.111145f, 0.116028f, 0.121277f,
- 0.126831f, 0.132080f, 0.137817f, 0.143311f, 0.149780f, 0.155029f, 0.161621f, 0.167847f,
- 0.173950f, 0.180786f, 0.187622f, 0.194214f, 0.201050f, 0.207764f, 0.215210f, 0.222046f,
- 0.229370f, 0.236816f, 0.244751f, 0.251953f, 0.260010f, 0.268311f, 0.276123f, 0.284180f,
- 0.293213f, 0.301514f, 0.588379f, 0.606934f, 0.607422f, 0.604980f, 0.602051f, 0.599609f,
- 0.001963f, 0.005333f, 0.008377f, 0.011589f, 0.014450f, 0.017593f, 0.021133f, 0.023972f,
- 0.027145f, 0.030075f, 0.033295f, 0.035858f, 0.038818f, 0.041992f, 0.045288f, 0.048279f,
- 0.051849f, 0.054840f, 0.058289f, 0.061737f, 0.065186f, 0.068848f, 0.072632f, 0.076721f,
- 0.080505f, 0.084717f, 0.088806f, 0.093079f, 0.097717f, 0.102356f, 0.106934f, 0.111755f,
- 0.116882f, 0.121887f, 0.127319f, 0.132935f, 0.138306f, 0.144287f, 0.149902f, 0.156250f,
- 0.162109f, 0.168579f, 0.174316f, 0.180908f, 0.187500f, 0.194458f, 0.201538f, 0.208252f,
- 0.215210f, 0.222656f, 0.229980f, 0.237061f, 0.244629f, 0.252441f, 0.260254f, 0.267334f,
- 0.276123f, 0.284180f, 0.576660f, 0.597656f, 0.599609f, 0.598145f, 0.595215f, 0.591797f,
- 0.001631f, 0.004906f, 0.007805f, 0.010826f, 0.013802f, 0.016983f, 0.019485f, 0.022079f,
- 0.024750f, 0.027939f, 0.030136f, 0.033112f, 0.035797f, 0.038727f, 0.041443f, 0.044281f,
- 0.047058f, 0.050018f, 0.053253f, 0.056396f, 0.059662f, 0.063049f, 0.066406f, 0.069946f,
- 0.073730f, 0.077454f, 0.081360f, 0.085388f, 0.089417f, 0.093750f, 0.098267f, 0.102844f,
- 0.107727f, 0.112244f, 0.117615f, 0.122253f, 0.127441f, 0.133057f, 0.138550f, 0.144287f,
- 0.150024f, 0.156250f, 0.161987f, 0.167969f, 0.174805f, 0.181274f, 0.187744f, 0.194580f,
- 0.201294f, 0.208374f, 0.215210f, 0.222412f, 0.229736f, 0.237183f, 0.244629f, 0.252197f,
- 0.260010f, 0.269287f, 0.566406f, 0.588867f, 0.590820f, 0.590332f, 0.587891f, 0.585938f,
- 0.001858f, 0.004318f, 0.007465f, 0.010246f, 0.012550f, 0.015793f, 0.018143f, 0.020782f,
- 0.022980f, 0.025116f, 0.027924f, 0.030106f, 0.032623f, 0.035126f, 0.037720f, 0.040283f,
- 0.042847f, 0.045380f, 0.048492f, 0.051300f, 0.054321f, 0.057373f, 0.060516f, 0.063599f,
- 0.067139f, 0.070496f, 0.074219f, 0.078003f, 0.081848f, 0.085754f, 0.089783f, 0.093994f,
- 0.098267f, 0.102783f, 0.107239f, 0.112366f, 0.117371f, 0.122498f, 0.127686f, 0.132935f,
- 0.138428f, 0.144043f, 0.150024f, 0.155884f, 0.161865f, 0.168091f, 0.174316f, 0.180664f,
- 0.187622f, 0.194214f, 0.200928f, 0.207520f, 0.214966f, 0.221680f, 0.229370f, 0.236816f,
- 0.244751f, 0.252441f, 0.553223f, 0.579102f, 0.583496f, 0.582031f, 0.581055f, 0.579590f,
- 0.001425f, 0.004284f, 0.007019f, 0.009521f, 0.011894f, 0.014191f, 0.016632f, 0.018723f,
- 0.021210f, 0.023209f, 0.025482f, 0.027344f, 0.029617f, 0.032043f, 0.034210f, 0.036407f,
- 0.039001f, 0.041077f, 0.043976f, 0.046448f, 0.049133f, 0.051819f, 0.054932f, 0.057770f,
- 0.060730f, 0.063965f, 0.067322f, 0.070862f, 0.074280f, 0.077698f, 0.082031f, 0.085571f,
- 0.089844f, 0.093994f, 0.098022f, 0.102722f, 0.107178f, 0.111877f, 0.116821f, 0.121887f,
- 0.127075f, 0.132446f, 0.138062f, 0.143799f, 0.149414f, 0.155518f, 0.161377f, 0.167480f,
- 0.173950f, 0.180176f, 0.186890f, 0.193481f, 0.200562f, 0.207397f, 0.214355f, 0.221313f,
- 0.229492f, 0.237427f, 0.541504f, 0.570801f, 0.575195f, 0.575195f, 0.573730f, 0.572266f,
- 0.001613f, 0.004181f, 0.006252f, 0.008774f, 0.011108f, 0.013054f, 0.015152f, 0.016937f,
- 0.019150f, 0.021011f, 0.023163f, 0.024826f, 0.026993f, 0.028793f, 0.030823f, 0.033081f,
- 0.035156f, 0.037201f, 0.039612f, 0.041748f, 0.044464f, 0.046814f, 0.049438f, 0.052155f,
- 0.054840f, 0.057831f, 0.060699f, 0.063599f, 0.067078f, 0.070374f, 0.073853f, 0.077087f,
- 0.081177f, 0.085083f, 0.089111f, 0.093262f, 0.097473f, 0.101929f, 0.106689f, 0.111023f,
- 0.116455f, 0.121277f, 0.126343f, 0.132080f, 0.137573f, 0.142700f, 0.148682f, 0.154907f,
- 0.161133f, 0.167236f, 0.173340f, 0.179688f, 0.186768f, 0.193115f, 0.200684f, 0.207275f,
- 0.214233f, 0.221924f, 0.530273f, 0.561523f, 0.565430f, 0.567383f, 0.564941f, 0.564941f,
- 0.001237f, 0.003775f, 0.006348f, 0.008141f, 0.010117f, 0.012184f, 0.013763f, 0.015656f,
- 0.017319f, 0.018967f, 0.020645f, 0.022507f, 0.023926f, 0.025757f, 0.027573f, 0.029449f,
- 0.031677f, 0.033325f, 0.035645f, 0.037659f, 0.039734f, 0.041809f, 0.044189f, 0.046692f,
- 0.049133f, 0.051697f, 0.054504f, 0.057251f, 0.060059f, 0.063110f, 0.066467f, 0.069763f,
- 0.072937f, 0.076477f, 0.080505f, 0.084290f, 0.088013f, 0.092407f, 0.096436f, 0.101013f,
- 0.105713f, 0.110352f, 0.115356f, 0.120605f, 0.125488f, 0.130981f, 0.136353f, 0.142090f,
- 0.148438f, 0.153931f, 0.159912f, 0.166260f, 0.172485f, 0.179321f, 0.185791f, 0.193115f,
- 0.199463f, 0.206665f, 0.520020f, 0.552246f, 0.558105f, 0.559570f, 0.559082f, 0.557617f,
- 0.001151f, 0.003399f, 0.005611f, 0.007439f, 0.009354f, 0.010925f, 0.012489f, 0.014061f,
- 0.015610f, 0.017258f, 0.018845f, 0.020248f, 0.021484f, 0.023193f, 0.024796f, 0.026459f,
- 0.028183f, 0.029785f, 0.031738f, 0.033386f, 0.035309f, 0.037384f, 0.039368f, 0.041626f,
- 0.043701f, 0.046204f, 0.048553f, 0.051178f, 0.053955f, 0.056488f, 0.059418f, 0.062256f,
- 0.065308f, 0.068542f, 0.071899f, 0.075623f, 0.079224f, 0.082947f, 0.087097f, 0.091064f,
- 0.095520f, 0.099854f, 0.104736f, 0.109314f, 0.114136f, 0.119324f, 0.124756f, 0.130127f,
- 0.135498f, 0.141113f, 0.146973f, 0.153198f, 0.159180f, 0.165527f, 0.172241f, 0.178711f,
- 0.185425f, 0.192749f, 0.507324f, 0.543945f, 0.549316f, 0.552246f, 0.551270f, 0.551270f,
- 0.001070f, 0.002996f, 0.004986f, 0.006851f, 0.008514f, 0.009850f, 0.011330f, 0.012596f,
- 0.014015f, 0.015259f, 0.016586f, 0.017731f, 0.019287f, 0.020676f, 0.022079f, 0.023468f,
- 0.024765f, 0.026489f, 0.028030f, 0.029465f, 0.031311f, 0.032898f, 0.034851f, 0.036743f,
- 0.038940f, 0.040833f, 0.043091f, 0.045074f, 0.047729f, 0.050079f, 0.052673f, 0.055389f,
- 0.058136f, 0.061188f, 0.064087f, 0.067261f, 0.070618f, 0.074158f, 0.077942f, 0.081726f,
- 0.085815f, 0.089783f, 0.094055f, 0.098572f, 0.103088f, 0.107971f, 0.113037f, 0.118164f,
- 0.123413f, 0.128784f, 0.134521f, 0.140137f, 0.146118f, 0.152100f, 0.158325f, 0.164307f,
- 0.171387f, 0.177368f, 0.496094f, 0.534668f, 0.541992f, 0.543945f, 0.544434f, 0.544434f,
- 0.001086f, 0.003069f, 0.004463f, 0.006256f, 0.007393f, 0.009026f, 0.010178f, 0.011276f,
- 0.012260f, 0.013542f, 0.014648f, 0.015808f, 0.016861f, 0.017899f, 0.019333f, 0.020599f,
- 0.021942f, 0.023117f, 0.024384f, 0.025833f, 0.027344f, 0.028992f, 0.030579f, 0.032318f,
- 0.034149f, 0.035828f, 0.037842f, 0.039764f, 0.041901f, 0.044037f, 0.046539f, 0.048645f,
- 0.051147f, 0.053894f, 0.056641f, 0.059631f, 0.062500f, 0.065735f, 0.069031f, 0.072754f,
- 0.076294f, 0.080139f, 0.083984f, 0.088379f, 0.092712f, 0.097229f, 0.101929f, 0.106873f,
- 0.111694f, 0.117004f, 0.122314f, 0.127930f, 0.133789f, 0.139282f, 0.145142f, 0.151367f,
- 0.157349f, 0.163818f, 0.484619f, 0.525391f, 0.534180f, 0.536621f, 0.536133f, 0.536621f,
- 0.001125f, 0.002892f, 0.003883f, 0.005867f, 0.006603f, 0.007935f, 0.009026f, 0.009911f,
- 0.010956f, 0.012077f, 0.012909f, 0.013901f, 0.014977f, 0.015671f, 0.016983f, 0.018021f,
- 0.019058f, 0.020279f, 0.021225f, 0.022598f, 0.023941f, 0.025299f, 0.026535f, 0.028107f,
- 0.029755f, 0.031113f, 0.033020f, 0.034668f, 0.036682f, 0.038483f, 0.040527f, 0.042511f,
- 0.044708f, 0.046936f, 0.049744f, 0.052216f, 0.054840f, 0.057800f, 0.060791f, 0.064087f,
- 0.067505f, 0.071045f, 0.074463f, 0.078491f, 0.082397f, 0.086609f, 0.091248f, 0.095581f,
- 0.100342f, 0.105530f, 0.110474f, 0.116272f, 0.120972f, 0.126953f, 0.132812f, 0.138672f,
- 0.144287f, 0.150513f, 0.472412f, 0.516113f, 0.524902f, 0.528809f, 0.529785f, 0.529785f,
- 0.000859f, 0.002470f, 0.003815f, 0.005226f, 0.005913f, 0.007206f, 0.007942f, 0.008652f,
- 0.009583f, 0.010406f, 0.011223f, 0.011971f, 0.012856f, 0.013664f, 0.014664f, 0.015549f,
- 0.016464f, 0.017487f, 0.018478f, 0.019592f, 0.020767f, 0.021774f, 0.023117f, 0.024338f,
- 0.025604f, 0.027008f, 0.028519f, 0.029953f, 0.031525f, 0.033173f, 0.034943f, 0.036865f,
- 0.038696f, 0.040863f, 0.042969f, 0.045471f, 0.048004f, 0.050293f, 0.052979f, 0.055847f,
- 0.058960f, 0.062042f, 0.065491f, 0.069153f, 0.072937f, 0.076660f, 0.080750f, 0.085144f,
- 0.089539f, 0.094177f, 0.099304f, 0.104187f, 0.109741f, 0.114807f, 0.120483f, 0.125977f,
- 0.131836f, 0.138306f, 0.460449f, 0.507812f, 0.516602f, 0.520020f, 0.522461f, 0.522949f,
- 0.000906f, 0.002359f, 0.003643f, 0.004356f, 0.005310f, 0.005989f, 0.007030f, 0.007507f,
- 0.008255f, 0.009010f, 0.009834f, 0.010483f, 0.011230f, 0.011887f, 0.012573f, 0.013367f,
- 0.014252f, 0.014954f, 0.015900f, 0.016785f, 0.017776f, 0.018631f, 0.019775f, 0.020874f,
- 0.022110f, 0.023117f, 0.024368f, 0.025589f, 0.026932f, 0.028549f, 0.029938f, 0.031525f,
- 0.033325f, 0.035187f, 0.037109f, 0.038971f, 0.041138f, 0.043396f, 0.045715f, 0.048370f,
- 0.051025f, 0.053772f, 0.057129f, 0.060089f, 0.063416f, 0.067261f, 0.070679f, 0.075012f,
- 0.079285f, 0.083618f, 0.088379f, 0.093018f, 0.098083f, 0.102478f, 0.108093f, 0.114380f,
- 0.119507f, 0.125488f, 0.448975f, 0.498291f, 0.508789f, 0.513672f, 0.514648f, 0.516113f,
- 0.000728f, 0.001932f, 0.003067f, 0.003990f, 0.004784f, 0.005295f, 0.005974f, 0.006584f,
- 0.007099f, 0.007652f, 0.008255f, 0.008904f, 0.009491f, 0.010109f, 0.010658f, 0.011497f,
- 0.012131f, 0.012718f, 0.013535f, 0.014336f, 0.015083f, 0.016083f, 0.016785f, 0.017761f,
- 0.018738f, 0.019669f, 0.020691f, 0.021805f, 0.023010f, 0.024170f, 0.025467f, 0.026794f,
- 0.028336f, 0.029922f, 0.031555f, 0.033203f, 0.035034f, 0.036987f, 0.039062f, 0.041290f,
- 0.043671f, 0.046143f, 0.048920f, 0.051880f, 0.054901f, 0.058228f, 0.061615f, 0.065369f,
- 0.069214f, 0.073425f, 0.077637f, 0.082214f, 0.087097f, 0.091797f, 0.096497f, 0.102356f,
- 0.107483f, 0.113464f, 0.437256f, 0.489746f, 0.500977f, 0.504883f, 0.507812f, 0.509277f,
- 0.000724f, 0.001842f, 0.002728f, 0.003332f, 0.004101f, 0.004707f, 0.005020f, 0.005497f,
- 0.006245f, 0.006603f, 0.007027f, 0.007515f, 0.008156f, 0.008537f, 0.009125f, 0.009659f,
- 0.010101f, 0.010864f, 0.011482f, 0.012070f, 0.012756f, 0.013496f, 0.014236f, 0.014931f,
- 0.015808f, 0.016632f, 0.017487f, 0.018433f, 0.019379f, 0.020416f, 0.021530f, 0.022583f,
- 0.023804f, 0.024979f, 0.026443f, 0.027939f, 0.029526f, 0.031235f, 0.033020f, 0.035004f,
- 0.037018f, 0.039185f, 0.041595f, 0.044159f, 0.046783f, 0.049866f, 0.052856f, 0.056274f,
- 0.059906f, 0.063721f, 0.067749f, 0.072327f, 0.076172f, 0.081299f, 0.085938f, 0.091309f,
- 0.096558f, 0.101807f, 0.426270f, 0.480469f, 0.492676f, 0.498047f, 0.500488f, 0.501953f,
- 0.000673f, 0.001715f, 0.002426f, 0.002953f, 0.003588f, 0.003944f, 0.004200f, 0.004776f,
- 0.005131f, 0.005527f, 0.005886f, 0.006371f, 0.006790f, 0.007076f, 0.007538f, 0.008133f,
- 0.008644f, 0.009140f, 0.009483f, 0.010071f, 0.010689f, 0.011230f, 0.011879f, 0.012474f,
- 0.013222f, 0.013916f, 0.014587f, 0.015411f, 0.016190f, 0.016983f, 0.017883f, 0.018845f,
- 0.019867f, 0.020935f, 0.022141f, 0.023270f, 0.024567f, 0.026001f, 0.027481f, 0.029114f,
- 0.030777f, 0.032684f, 0.034698f, 0.036865f, 0.039337f, 0.041748f, 0.044647f, 0.047882f,
- 0.050964f, 0.054260f, 0.058258f, 0.062195f, 0.066528f, 0.070679f, 0.075623f, 0.080505f,
- 0.085510f, 0.090515f, 0.414307f, 0.472168f, 0.484131f, 0.490234f, 0.492920f, 0.495850f,
- 0.000484f, 0.001445f, 0.002169f, 0.002569f, 0.002836f, 0.003317f, 0.003569f, 0.003952f,
- 0.004215f, 0.004623f, 0.004959f, 0.005306f, 0.005592f, 0.005951f, 0.006306f, 0.006737f,
- 0.007004f, 0.007492f, 0.007942f, 0.008331f, 0.008865f, 0.009270f, 0.009781f, 0.010338f,
- 0.010887f, 0.011429f, 0.012047f, 0.012726f, 0.013336f, 0.014030f, 0.014771f, 0.015572f,
- 0.016418f, 0.017258f, 0.018234f, 0.019196f, 0.020279f, 0.021423f, 0.022675f, 0.023987f,
- 0.025375f, 0.027039f, 0.028702f, 0.030563f, 0.032623f, 0.034698f, 0.037262f, 0.040039f,
- 0.042664f, 0.046051f, 0.049194f, 0.052948f, 0.057129f, 0.061371f, 0.065613f, 0.070007f,
- 0.075317f, 0.080200f, 0.402588f, 0.462402f, 0.476807f, 0.482666f, 0.485107f, 0.487061f,
- 0.000459f, 0.001265f, 0.001572f, 0.002138f, 0.002365f, 0.002775f, 0.002920f, 0.003189f,
- 0.003454f, 0.003723f, 0.003986f, 0.004250f, 0.004536f, 0.004906f, 0.005150f, 0.005463f,
- 0.005787f, 0.006172f, 0.006481f, 0.006794f, 0.007156f, 0.007542f, 0.007980f, 0.008430f,
- 0.008827f, 0.009361f, 0.009796f, 0.010300f, 0.010910f, 0.011497f, 0.012161f, 0.012672f,
- 0.013336f, 0.014183f, 0.014893f, 0.015640f, 0.016541f, 0.017517f, 0.018448f, 0.019485f,
- 0.020676f, 0.021912f, 0.023392f, 0.024979f, 0.026627f, 0.028351f, 0.030457f, 0.032806f,
- 0.035034f, 0.037933f, 0.041229f, 0.044373f, 0.047821f, 0.052002f, 0.056244f, 0.060547f,
- 0.065247f, 0.069885f, 0.390869f, 0.453857f, 0.468018f, 0.475098f, 0.478027f, 0.480469f,
- 0.000332f, 0.001075f, 0.001464f, 0.001721f, 0.001911f, 0.002235f, 0.002375f, 0.002558f,
- 0.002834f, 0.002998f, 0.003185f, 0.003441f, 0.003647f, 0.003952f, 0.004139f, 0.004421f,
- 0.004631f, 0.004879f, 0.005180f, 0.005447f, 0.005795f, 0.006115f, 0.006416f, 0.006718f,
- 0.007099f, 0.007462f, 0.007881f, 0.008331f, 0.008797f, 0.009140f, 0.009735f, 0.010223f,
- 0.010803f, 0.011337f, 0.011986f, 0.012611f, 0.013283f, 0.014076f, 0.014847f, 0.015732f,
- 0.016693f, 0.017700f, 0.018784f, 0.019897f, 0.021317f, 0.022873f, 0.024429f, 0.026306f,
- 0.028473f, 0.030960f, 0.033600f, 0.036407f, 0.039856f, 0.043549f, 0.047119f, 0.051392f,
- 0.055969f, 0.060394f, 0.379639f, 0.444580f, 0.458984f, 0.467529f, 0.470947f, 0.472900f,
- 0.000408f, 0.000770f, 0.001271f, 0.001390f, 0.001601f, 0.001762f, 0.001848f, 0.002052f,
- 0.002247f, 0.002401f, 0.002491f, 0.002684f, 0.002878f, 0.003086f, 0.003304f, 0.003452f,
- 0.003626f, 0.003805f, 0.004074f, 0.004257f, 0.004513f, 0.004807f, 0.005039f, 0.005299f,
- 0.005638f, 0.005905f, 0.006191f, 0.006516f, 0.006927f, 0.007206f, 0.007645f, 0.008034f,
- 0.008415f, 0.008911f, 0.009384f, 0.009941f, 0.010483f, 0.011116f, 0.011711f, 0.012428f,
- 0.013191f, 0.013969f, 0.014862f, 0.015854f, 0.016785f, 0.017975f, 0.019348f, 0.020721f,
- 0.022461f, 0.024445f, 0.026733f, 0.029175f, 0.032227f, 0.035248f, 0.038788f, 0.042755f,
- 0.046967f, 0.051636f, 0.367920f, 0.435059f, 0.452148f, 0.459229f, 0.463623f, 0.466797f,
- 0.000382f, 0.000669f, 0.001037f, 0.001185f, 0.001293f, 0.001379f, 0.001470f, 0.001565f,
- 0.001729f, 0.001864f, 0.001928f, 0.002138f, 0.002237f, 0.002398f, 0.002510f, 0.002672f,
- 0.002802f, 0.002966f, 0.003134f, 0.003319f, 0.003517f, 0.003723f, 0.003870f, 0.004089f,
- 0.004311f, 0.004532f, 0.004772f, 0.005013f, 0.005314f, 0.005573f, 0.005924f, 0.006203f,
- 0.006523f, 0.006897f, 0.007240f, 0.007660f, 0.008041f, 0.008530f, 0.009048f, 0.009621f,
- 0.010201f, 0.010841f, 0.011467f, 0.012192f, 0.013138f, 0.013969f, 0.014931f, 0.016113f,
- 0.017380f, 0.018936f, 0.020630f, 0.022751f, 0.025208f, 0.027924f, 0.031311f, 0.034851f,
- 0.038879f, 0.043274f, 0.356689f, 0.426270f, 0.443848f, 0.451660f, 0.456055f, 0.459473f,
- 0.000482f, 0.000542f, 0.000723f, 0.000822f, 0.000881f, 0.001025f, 0.001100f, 0.001209f,
- 0.001249f, 0.001355f, 0.001522f, 0.001599f, 0.001708f, 0.001836f, 0.001918f, 0.001970f,
- 0.002129f, 0.002251f, 0.002357f, 0.002522f, 0.002636f, 0.002768f, 0.002911f, 0.003056f,
- 0.003237f, 0.003393f, 0.003605f, 0.003771f, 0.003994f, 0.004234f, 0.004444f, 0.004635f,
- 0.004932f, 0.005150f, 0.005486f, 0.005779f, 0.006081f, 0.006458f, 0.006775f, 0.007179f,
- 0.007668f, 0.008110f, 0.008690f, 0.009209f, 0.009926f, 0.010551f, 0.011330f, 0.012184f,
- 0.013184f, 0.014297f, 0.015610f, 0.017181f, 0.019165f, 0.021500f, 0.024384f, 0.027618f,
- 0.031372f, 0.035614f, 0.345459f, 0.417236f, 0.435303f, 0.443604f, 0.448730f, 0.451904f,
- 0.000240f, 0.000479f, 0.000533f, 0.000625f, 0.000716f, 0.000746f, 0.000857f, 0.000835f,
- 0.000941f, 0.001024f, 0.001104f, 0.001155f, 0.001204f, 0.001282f, 0.001396f, 0.001453f,
- 0.001554f, 0.001627f, 0.001737f, 0.001787f, 0.001894f, 0.002012f, 0.002119f, 0.002218f,
- 0.002335f, 0.002453f, 0.002611f, 0.002714f, 0.002848f, 0.003050f, 0.003168f, 0.003395f,
- 0.003529f, 0.003740f, 0.003963f, 0.004158f, 0.004429f, 0.004688f, 0.004982f, 0.005280f,
- 0.005600f, 0.005959f, 0.006340f, 0.006775f, 0.007252f, 0.007748f, 0.008369f, 0.008980f,
- 0.009705f, 0.010513f, 0.011513f, 0.012665f, 0.014069f, 0.015869f, 0.018158f, 0.020950f,
- 0.024338f, 0.028366f, 0.335205f, 0.408203f, 0.427002f, 0.435547f, 0.441162f, 0.445312f,
- 0.000138f, 0.000265f, 0.000381f, 0.000386f, 0.000465f, 0.000556f, 0.000558f, 0.000597f,
- 0.000659f, 0.000748f, 0.000770f, 0.000786f, 0.000829f, 0.000904f, 0.000940f, 0.001021f,
- 0.001043f, 0.001139f, 0.001201f, 0.001253f, 0.001327f, 0.001396f, 0.001481f, 0.001555f,
- 0.001637f, 0.001712f, 0.001813f, 0.001899f, 0.002005f, 0.002140f, 0.002220f, 0.002348f,
- 0.002462f, 0.002600f, 0.002733f, 0.002932f, 0.003075f, 0.003279f, 0.003452f, 0.003630f,
- 0.003872f, 0.004166f, 0.004436f, 0.004742f, 0.005077f, 0.005459f, 0.005848f, 0.006310f,
- 0.006874f, 0.007492f, 0.008171f, 0.009026f, 0.009995f, 0.011307f, 0.013008f, 0.015343f,
- 0.018265f, 0.021881f, 0.323486f, 0.399170f, 0.418945f, 0.428467f, 0.434326f, 0.437988f,
- 0.000165f, 0.000260f, 0.000287f, 0.000296f, 0.000331f, 0.000339f, 0.000360f, 0.000395f,
- 0.000442f, 0.000482f, 0.000487f, 0.000551f, 0.000546f, 0.000611f, 0.000640f, 0.000667f,
- 0.000711f, 0.000742f, 0.000775f, 0.000816f, 0.000876f, 0.000916f, 0.000974f, 0.001015f,
- 0.001081f, 0.001123f, 0.001195f, 0.001267f, 0.001317f, 0.001388f, 0.001459f, 0.001558f,
- 0.001630f, 0.001718f, 0.001804f, 0.001916f, 0.002033f, 0.002148f, 0.002295f, 0.002455f,
- 0.002583f, 0.002754f, 0.002941f, 0.003134f, 0.003386f, 0.003639f, 0.003910f, 0.004215f,
- 0.004597f, 0.005013f, 0.005520f, 0.006130f, 0.006821f, 0.007690f, 0.008789f, 0.010452f,
- 0.012909f, 0.016174f, 0.312012f, 0.390381f, 0.410645f, 0.420654f, 0.426270f, 0.430664f,
- 0.000057f, 0.000171f, 0.000164f, 0.000170f, 0.000211f, 0.000213f, 0.000229f, 0.000247f,
- 0.000267f, 0.000279f, 0.000289f, 0.000317f, 0.000349f, 0.000364f, 0.000390f, 0.000407f,
- 0.000427f, 0.000467f, 0.000476f, 0.000521f, 0.000537f, 0.000561f, 0.000578f, 0.000626f,
- 0.000667f, 0.000714f, 0.000729f, 0.000753f, 0.000806f, 0.000855f, 0.000911f, 0.000945f,
- 0.001004f, 0.001054f, 0.001112f, 0.001172f, 0.001251f, 0.001333f, 0.001406f, 0.001489f,
- 0.001595f, 0.001694f, 0.001811f, 0.001952f, 0.002090f, 0.002243f, 0.002453f, 0.002638f,
- 0.002888f, 0.003143f, 0.003489f, 0.003870f, 0.004353f, 0.004921f, 0.005672f, 0.006664f,
- 0.008423f, 0.011230f, 0.301758f, 0.381104f, 0.402832f, 0.413330f, 0.418457f, 0.423828f,
- 0.000096f, 0.000112f, 0.000097f, 0.000090f, 0.000113f, 0.000119f, 0.000144f, 0.000149f,
- 0.000151f, 0.000158f, 0.000181f, 0.000184f, 0.000179f, 0.000201f, 0.000224f, 0.000216f,
- 0.000237f, 0.000255f, 0.000263f, 0.000276f, 0.000297f, 0.000308f, 0.000332f, 0.000347f,
- 0.000369f, 0.000395f, 0.000408f, 0.000422f, 0.000447f, 0.000471f, 0.000500f, 0.000531f,
- 0.000554f, 0.000583f, 0.000617f, 0.000660f, 0.000690f, 0.000739f, 0.000795f, 0.000833f,
- 0.000885f, 0.000948f, 0.001022f, 0.001085f, 0.001175f, 0.001262f, 0.001371f, 0.001487f,
- 0.001633f, 0.001778f, 0.001986f, 0.002218f, 0.002502f, 0.002865f, 0.003330f, 0.003979f,
- 0.004932f, 0.007000f, 0.291260f, 0.372070f, 0.394043f, 0.404541f, 0.412109f, 0.416260f,
- 0.000000f, 0.000056f, 0.000049f, 0.000061f, 0.000064f, 0.000061f, 0.000062f, 0.000071f,
- 0.000072f, 0.000088f, 0.000083f, 0.000086f, 0.000097f, 0.000094f, 0.000098f, 0.000105f,
- 0.000116f, 0.000122f, 0.000126f, 0.000134f, 0.000137f, 0.000143f, 0.000150f, 0.000164f,
- 0.000171f, 0.000183f, 0.000188f, 0.000204f, 0.000214f, 0.000224f, 0.000236f, 0.000255f,
- 0.000258f, 0.000277f, 0.000293f, 0.000315f, 0.000328f, 0.000349f, 0.000376f, 0.000396f,
- 0.000426f, 0.000454f, 0.000486f, 0.000521f, 0.000563f, 0.000605f, 0.000657f, 0.000714f,
- 0.000791f, 0.000866f, 0.000977f, 0.001085f, 0.001243f, 0.001441f, 0.001703f, 0.002058f,
- 0.002573f, 0.003740f, 0.280029f, 0.362793f, 0.385742f, 0.397217f, 0.404297f, 0.408936f,
- 0.000058f, 0.000038f, 0.000031f, 0.000027f, 0.000025f, 0.000026f, 0.000025f, 0.000024f,
- 0.000024f, 0.000027f, 0.000030f, 0.000038f, 0.000032f, 0.000035f, 0.000040f, 0.000041f,
- 0.000044f, 0.000045f, 0.000045f, 0.000047f, 0.000052f, 0.000058f, 0.000061f, 0.000059f,
- 0.000065f, 0.000067f, 0.000069f, 0.000073f, 0.000078f, 0.000083f, 0.000089f, 0.000091f,
- 0.000099f, 0.000103f, 0.000106f, 0.000114f, 0.000124f, 0.000132f, 0.000141f, 0.000150f,
- 0.000158f, 0.000164f, 0.000180f, 0.000193f, 0.000205f, 0.000225f, 0.000245f, 0.000267f,
- 0.000297f, 0.000329f, 0.000365f, 0.000416f, 0.000479f, 0.000563f, 0.000676f, 0.000839f,
- 0.001088f, 0.001589f, 0.270264f, 0.353760f, 0.377197f, 0.390137f, 0.396973f, 0.402100f,
- 0.000030f, 0.000019f, 0.000016f, 0.000014f, 0.000013f, 0.000012f, 0.000011f, 0.000011f,
- 0.000010f, 0.000010f, 0.000009f, 0.000009f, 0.000009f, 0.000008f, 0.000007f, 0.000009f,
- 0.000009f, 0.000008f, 0.000009f, 0.000010f, 0.000011f, 0.000012f, 0.000012f, 0.000014f,
- 0.000014f, 0.000014f, 0.000015f, 0.000018f, 0.000017f, 0.000017f, 0.000019f, 0.000020f,
- 0.000022f, 0.000022f, 0.000023f, 0.000026f, 0.000028f, 0.000027f, 0.000030f, 0.000032f,
- 0.000035f, 0.000038f, 0.000040f, 0.000042f, 0.000045f, 0.000049f, 0.000055f, 0.000060f,
- 0.000065f, 0.000074f, 0.000078f, 0.000095f, 0.000109f, 0.000129f, 0.000160f, 0.000205f,
- 0.000284f, 0.000452f, 0.259766f, 0.345703f, 0.369629f, 0.382812f, 0.390625f, 0.395264f,
- 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f, 0.000001f,
- 0.000001f, 0.000001f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f, 0.000002f,
- 0.000002f, 0.000003f, 0.000003f, 0.000004f, 0.000004f, 0.000005f, 0.000006f, 0.000009f,
- 0.000012f, 0.000026f, 0.249878f, 0.336182f, 0.362061f, 0.374512f, 0.382080f, 0.387695f,
- }};
-
-/* 4 different blue noise, one per channel */
-static float blue_noise[64 * 64][4] = {
- {0.367188f, 0.855469f, 0.523438f, 0.375000f}, {0.242188f, 0.699219f, 0.164062f, 0.292969f},
- {0.828125f, 0.257812f, 0.449219f, 0.679688f}, {0.128906f, 0.523438f, 0.058594f, 0.164062f},
- {0.214844f, 0.648438f, 0.750000f, 0.492188f}, {0.535156f, 0.226562f, 0.492188f, 0.429688f},
- {0.050781f, 0.425781f, 0.886719f, 0.019531f}, {0.199219f, 0.785156f, 0.378906f, 0.984375f},
- {0.390625f, 0.039062f, 0.222656f, 0.777344f}, {0.574219f, 0.460938f, 0.687500f, 0.085938f},
- {0.757812f, 0.117188f, 0.968750f, 0.343750f}, {0.109375f, 0.398438f, 0.500000f, 0.871094f},
- {0.871094f, 0.796875f, 0.628906f, 0.132812f}, {0.289062f, 0.480469f, 0.851562f, 0.484375f},
- {0.519531f, 0.035156f, 0.234375f, 0.832031f}, {0.390625f, 0.558594f, 0.738281f, 0.636719f},
- {0.015625f, 0.648438f, 0.910156f, 0.507812f}, {0.199219f, 0.257812f, 0.640625f, 0.578125f},
- {0.359375f, 0.976562f, 0.855469f, 0.726562f}, {0.523438f, 0.445312f, 0.335938f, 0.304688f},
- {0.046875f, 0.296875f, 0.921875f, 0.687500f}, {0.476562f, 0.929688f, 0.777344f, 0.164062f},
- {0.726562f, 0.515625f, 0.398438f, 0.781250f}, {0.652344f, 0.156250f, 0.191406f, 0.015625f},
- {0.300781f, 0.695312f, 0.011719f, 0.417969f}, {0.433594f, 0.882812f, 0.738281f, 0.843750f},
- {0.890625f, 0.308594f, 0.523438f, 0.496094f}, {0.589844f, 0.730469f, 0.050781f, 0.886719f},
- {0.738281f, 0.539062f, 0.683594f, 0.640625f}, {0.421875f, 0.191406f, 0.265625f, 0.996094f},
- {0.609375f, 0.339844f, 0.617188f, 0.066406f}, {0.371094f, 0.398438f, 0.378906f, 0.898438f},
- {0.937500f, 0.578125f, 0.136719f, 0.136719f}, {0.453125f, 0.820312f, 0.664062f, 0.968750f},
- {0.828125f, 0.070312f, 0.316406f, 0.328125f}, {0.558594f, 0.714844f, 0.593750f, 0.714844f},
- {0.351562f, 0.781250f, 0.355469f, 0.804688f}, {0.203125f, 0.398438f, 0.214844f, 0.519531f},
- {0.785156f, 0.207031f, 0.398438f, 0.453125f}, {0.617188f, 0.289062f, 0.281250f, 0.257812f},
- {0.171875f, 0.609375f, 0.792969f, 0.027344f}, {0.539062f, 0.871094f, 0.007812f, 0.886719f},
- {0.019531f, 0.246094f, 0.226562f, 0.363281f}, {0.988281f, 0.582031f, 0.777344f, 0.054688f},
- {0.468750f, 0.933594f, 0.312500f, 0.246094f}, {0.218750f, 0.015625f, 0.851562f, 0.167969f},
- {0.566406f, 0.699219f, 0.519531f, 0.902344f}, {0.125000f, 0.507812f, 0.136719f, 0.386719f},
- {0.296875f, 0.812500f, 0.558594f, 0.203125f}, {0.402344f, 0.199219f, 0.058594f, 0.875000f},
- {0.898438f, 0.386719f, 0.664062f, 0.660156f}, {0.027344f, 0.078125f, 0.296875f, 0.453125f},
- {0.667969f, 0.828125f, 0.808594f, 0.171875f}, {0.257812f, 0.535156f, 0.464844f, 0.914062f},
- {0.597656f, 0.363281f, 0.886719f, 0.718750f}, {0.332031f, 0.042969f, 0.683594f, 0.003906f},
- {0.632812f, 0.480469f, 0.429688f, 0.425781f}, {0.226562f, 0.910156f, 0.566406f, 0.558594f},
- {0.496094f, 0.062500f, 0.863281f, 0.226562f}, {0.105469f, 0.976562f, 0.707031f, 0.941406f},
- {0.394531f, 0.203125f, 0.285156f, 0.277344f}, {0.003906f, 0.804688f, 0.781250f, 0.050781f},
- {0.210938f, 0.289062f, 0.117188f, 0.601562f}, {0.972656f, 0.179688f, 0.589844f, 0.144531f},
- {0.152344f, 0.359375f, 0.730469f, 0.449219f}, {0.765625f, 0.105469f, 0.292969f, 0.101562f},
- {0.519531f, 0.812500f, 0.617188f, 0.976562f}, {0.988281f, 0.960938f, 0.902344f, 0.054688f},
- {0.457031f, 0.738281f, 0.335938f, 0.875000f}, {0.871094f, 0.121094f, 0.195312f, 0.210938f},
- {0.781250f, 0.296875f, 0.539062f, 0.585938f}, {0.636719f, 0.667969f, 0.621094f, 0.328125f},
- {0.324219f, 0.929688f, 0.855469f, 0.148438f}, {0.984375f, 0.718750f, 0.421875f, 0.824219f},
- {0.500000f, 0.308594f, 0.757812f, 0.699219f}, {0.664062f, 0.214844f, 0.269531f, 0.558594f},
- {0.414062f, 0.984375f, 0.074219f, 0.757812f}, {0.589844f, 0.339844f, 0.925781f, 0.273438f},
- {0.089844f, 0.847656f, 0.316406f, 0.398438f}, {0.695312f, 0.921875f, 0.460938f, 0.890625f},
- {0.894531f, 0.093750f, 0.113281f, 0.347656f}, {0.562500f, 0.386719f, 0.289062f, 0.964844f},
- {0.121094f, 0.820312f, 0.003906f, 0.214844f}, {0.765625f, 0.187500f, 0.710938f, 0.914062f},
- {0.878906f, 0.773438f, 0.445312f, 0.078125f}, {0.218750f, 0.117188f, 0.613281f, 0.617188f},
- {0.085938f, 0.652344f, 0.996094f, 0.339844f}, {0.863281f, 0.359375f, 0.496094f, 0.531250f},
- {0.148438f, 0.437500f, 0.320312f, 0.695312f}, {0.503906f, 0.613281f, 0.792969f, 0.082031f},
- {0.097656f, 0.109375f, 0.960938f, 0.238281f}, {0.246094f, 0.914062f, 0.414062f, 0.328125f},
- {0.011719f, 0.648438f, 0.828125f, 0.738281f}, {0.980469f, 0.457031f, 0.343750f, 0.117188f},
- {0.140625f, 0.937500f, 0.976562f, 0.601562f}, {0.234375f, 0.867188f, 0.574219f, 0.230469f},
- {0.542969f, 0.519531f, 0.902344f, 0.402344f}, {0.027344f, 0.300781f, 0.253906f, 0.503906f},
- {0.757812f, 0.964844f, 0.949219f, 0.058594f}, {0.152344f, 0.234375f, 0.039062f, 0.925781f},
- {0.687500f, 0.628906f, 0.492188f, 0.386719f}, {0.929688f, 0.546875f, 0.667969f, 0.109375f},
- {0.269531f, 0.136719f, 0.964844f, 0.617188f}, {0.320312f, 0.464844f, 0.542969f, 0.972656f},
- {0.960938f, 0.960938f, 0.171875f, 0.093750f}, {0.355469f, 0.523438f, 0.429688f, 0.765625f},
- {0.246094f, 0.328125f, 0.992188f, 0.496094f}, {0.648438f, 0.074219f, 0.097656f, 0.605469f},
- {0.144531f, 0.648438f, 0.476562f, 0.808594f}, {0.855469f, 0.832031f, 0.195312f, 0.546875f},
- {0.925781f, 0.414062f, 0.960938f, 0.675781f}, {0.000000f, 0.113281f, 0.746094f, 0.835938f},
- {0.828125f, 0.324219f, 0.613281f, 0.500000f}, {0.699219f, 0.738281f, 0.332031f, 0.125000f},
- {0.542969f, 0.906250f, 0.898438f, 0.250000f}, {0.105469f, 0.632812f, 0.511719f, 0.062500f},
- {0.433594f, 0.273438f, 0.097656f, 0.816406f}, {0.511719f, 0.707031f, 0.593750f, 0.632812f},
- {0.179688f, 0.980469f, 0.367188f, 0.335938f}, {0.882812f, 0.113281f, 0.031250f, 0.980469f},
- {0.410156f, 0.656250f, 0.253906f, 0.675781f}, {0.039062f, 0.300781f, 0.785156f, 0.800781f},
- {0.695312f, 0.382812f, 0.386719f, 0.156250f}, {0.847656f, 0.457031f, 0.000000f, 0.847656f},
- {0.945312f, 0.542969f, 0.664062f, 0.683594f}, {0.730469f, 0.707031f, 0.238281f, 0.535156f},
- {0.472656f, 0.921875f, 0.871094f, 0.910156f}, {0.867188f, 0.601562f, 0.031250f, 0.812500f},
- {0.632812f, 0.769531f, 0.925781f, 0.625000f}, {0.433594f, 0.558594f, 0.078125f, 0.851562f},
- {0.015625f, 0.187500f, 0.792969f, 0.515625f}, {0.343750f, 0.386719f, 0.562500f, 0.773438f},
- {0.679688f, 0.035156f, 0.121094f, 0.347656f}, {0.300781f, 0.582031f, 0.703125f, 0.660156f},
- {0.152344f, 0.878906f, 0.929688f, 0.902344f}, {0.433594f, 0.507812f, 0.093750f, 0.460938f},
- {0.714844f, 0.171875f, 0.042969f, 0.531250f}, {0.828125f, 0.550781f, 0.312500f, 0.945312f},
- {0.011719f, 0.894531f, 0.136719f, 0.417969f}, {0.257812f, 0.046875f, 0.562500f, 0.226562f},
- {0.187500f, 0.601562f, 0.800781f, 0.929688f}, {0.949219f, 0.128906f, 0.437500f, 0.613281f},
- {0.816406f, 0.277344f, 0.054688f, 0.035156f}, {0.226562f, 0.425781f, 0.542969f, 0.183594f},
- {0.628906f, 0.750000f, 0.984375f, 0.113281f}, {0.839844f, 0.003906f, 0.792969f, 0.796875f},
- {0.269531f, 0.324219f, 0.496094f, 0.003906f}, {0.683594f, 0.601562f, 0.574219f, 0.546875f},
- {0.957031f, 0.703125f, 0.164062f, 0.378906f}, {0.605469f, 0.398438f, 0.078125f, 0.855469f},
- {0.449219f, 0.250000f, 0.257812f, 0.988281f}, {0.367188f, 0.964844f, 0.859375f, 0.195312f},
- {0.820312f, 0.007812f, 0.125000f, 0.753906f}, {0.625000f, 0.832031f, 0.453125f, 0.609375f},
- {0.929688f, 0.230469f, 0.246094f, 0.925781f}, {0.394531f, 0.375000f, 0.097656f, 0.550781f},
- {0.558594f, 0.148438f, 0.183594f, 0.191406f}, {0.480469f, 0.796875f, 0.488281f, 0.785156f},
- {0.714844f, 0.250000f, 0.011719f, 0.296875f}, {0.660156f, 0.085938f, 0.804688f, 0.691406f},
- {0.890625f, 0.695312f, 0.101562f, 0.855469f}, {0.320312f, 0.195312f, 0.441406f, 0.761719f},
- {0.265625f, 0.375000f, 0.765625f, 0.191406f}, {0.996094f, 0.113281f, 0.832031f, 0.585938f},
- {0.101562f, 0.882812f, 0.152344f, 0.285156f}, {0.468750f, 0.332031f, 0.722656f, 0.882812f},
- {0.656250f, 0.816406f, 0.105469f, 0.339844f}, {0.035156f, 0.703125f, 0.855469f, 0.687500f},
- {0.738281f, 0.003906f, 0.601562f, 0.566406f}, {0.441406f, 0.664062f, 0.703125f, 0.843750f},
- {0.875000f, 0.789062f, 0.839844f, 0.187500f}, {0.781250f, 0.457031f, 0.640625f, 0.996094f},
- {0.050781f, 0.210938f, 0.355469f, 0.332031f}, {0.363281f, 0.351562f, 0.039062f, 0.421875f},
- {0.429688f, 0.550781f, 0.699219f, 0.089844f}, {0.753906f, 0.917969f, 0.269531f, 0.285156f},
- {0.496094f, 0.058594f, 0.929688f, 0.980469f}, {0.343750f, 0.445312f, 0.445312f, 0.566406f},
- {0.152344f, 0.160156f, 0.003906f, 0.750000f}, {0.738281f, 0.570312f, 0.847656f, 0.941406f},
- {0.808594f, 0.027344f, 0.167969f, 0.292969f}, {0.992188f, 0.867188f, 0.921875f, 0.519531f},
- {0.074219f, 0.187500f, 0.761719f, 0.199219f}, {0.750000f, 0.597656f, 0.312500f, 0.472656f},
- {0.277344f, 0.753906f, 0.945312f, 0.089844f}, {0.796875f, 0.820312f, 0.511719f, 0.375000f},
- {0.542969f, 0.878906f, 0.191406f, 0.503906f}, {0.175781f, 0.632812f, 0.597656f, 0.109375f},
- {0.257812f, 0.335938f, 0.980469f, 0.339844f}, {0.664062f, 0.000000f, 0.542969f, 0.417969f},
- {0.324219f, 0.144531f, 0.410156f, 0.078125f}, {0.062500f, 0.437500f, 0.472656f, 0.250000f},
- {0.925781f, 0.058594f, 0.636719f, 0.332031f}, {0.269531f, 0.671875f, 0.234375f, 0.175781f},
- {0.714844f, 0.285156f, 0.382812f, 0.574219f}, {0.570312f, 0.906250f, 0.988281f, 0.414062f},
- {0.097656f, 0.460938f, 0.425781f, 0.257812f}, {0.953125f, 0.796875f, 0.265625f, 0.117188f},
- {0.589844f, 0.367188f, 0.777344f, 0.746094f}, {0.035156f, 0.082031f, 0.457031f, 0.062500f},
- {0.226562f, 0.253906f, 0.953125f, 0.628906f}, {0.527344f, 0.417969f, 0.519531f, 0.261719f},
- {0.132812f, 0.812500f, 0.828125f, 0.000000f}, {0.906250f, 0.660156f, 0.386719f, 0.367188f},
- {0.742188f, 0.500000f, 0.207031f, 0.093750f}, {0.359375f, 0.769531f, 0.609375f, 0.718750f},
- {0.480469f, 0.695312f, 0.679688f, 0.539062f}, {0.144531f, 0.179688f, 0.757812f, 0.765625f},
- {0.332031f, 0.625000f, 0.179688f, 0.679688f}, {0.445312f, 0.492188f, 0.378906f, 0.425781f},
- {0.035156f, 0.550781f, 0.230469f, 0.476562f}, {0.402344f, 0.898438f, 0.898438f, 0.652344f},
- {0.156250f, 0.046875f, 0.820312f, 0.132812f}, {0.328125f, 0.484375f, 0.679688f, 0.246094f},
- {0.746094f, 0.750000f, 0.363281f, 0.453125f}, {0.238281f, 0.863281f, 0.558594f, 0.105469f},
- {0.023438f, 0.289062f, 0.648438f, 0.292969f}, {0.683594f, 0.566406f, 0.906250f, 0.804688f},
- {0.335938f, 0.773438f, 0.601562f, 0.375000f}, {0.781250f, 0.496094f, 0.710938f, 0.023438f},
- {0.847656f, 0.996094f, 0.929688f, 0.425781f}, {0.308594f, 0.027344f, 0.656250f, 0.871094f},
- {0.183594f, 0.625000f, 0.292969f, 0.480469f}, {0.089844f, 0.753906f, 0.164062f, 0.363281f},
- {0.804688f, 0.476562f, 0.687500f, 0.011719f}, {0.503906f, 0.910156f, 0.523438f, 0.644531f},
- {0.605469f, 0.609375f, 0.203125f, 0.441406f}, {0.417969f, 0.742188f, 0.621094f, 0.085938f},
- {0.839844f, 0.441406f, 0.296875f, 0.679688f}, {0.531250f, 0.042969f, 0.929688f, 0.781250f},
- {0.378906f, 0.929688f, 0.460938f, 0.148438f}, {0.902344f, 0.238281f, 0.050781f, 0.222656f},
- {0.570312f, 0.378906f, 0.328125f, 0.390625f}, {0.105469f, 0.121094f, 0.253906f, 0.460938f},
- {0.500000f, 0.906250f, 0.515625f, 0.281250f}, {0.296875f, 0.160156f, 0.148438f, 0.664062f},
- {0.699219f, 0.722656f, 0.757812f, 0.007812f}, {0.539062f, 0.968750f, 0.589844f, 0.914062f},
- {0.253906f, 0.246094f, 0.406250f, 0.769531f}, {0.609375f, 0.613281f, 0.105469f, 0.707031f},
- {0.195312f, 0.687500f, 0.179688f, 0.031250f}, {0.949219f, 0.523438f, 0.785156f, 0.339844f},
- {0.863281f, 0.804688f, 0.234375f, 0.433594f}, {0.230469f, 0.355469f, 0.648438f, 0.687500f},
- {0.304688f, 0.757812f, 0.421875f, 0.378906f}, {0.375000f, 0.464844f, 0.539062f, 0.046875f},
- {0.558594f, 0.324219f, 0.214844f, 0.761719f}, {0.679688f, 0.410156f, 0.074219f, 0.839844f},
- {0.464844f, 0.519531f, 0.710938f, 0.281250f}, {0.968750f, 0.152344f, 0.140625f, 0.925781f},
- {0.359375f, 0.230469f, 0.902344f, 0.609375f}, {0.593750f, 0.097656f, 0.457031f, 0.761719f},
- {0.441406f, 0.785156f, 0.058594f, 0.960938f}, {0.125000f, 0.890625f, 0.312500f, 0.203125f},
- {0.812500f, 0.488281f, 0.804688f, 0.878906f}, {0.558594f, 0.992188f, 0.175781f, 0.742188f},
- {0.179688f, 0.222656f, 0.343750f, 0.039062f}, {0.789062f, 0.871094f, 0.843750f, 0.949219f},
- {0.902344f, 0.503906f, 0.507812f, 0.718750f}, {0.402344f, 0.625000f, 0.027344f, 0.011719f},
- {0.195312f, 0.152344f, 0.605469f, 0.929688f}, {0.753906f, 0.214844f, 0.160156f, 0.839844f},
- {0.488281f, 0.687500f, 0.671875f, 0.390625f}, {0.851562f, 0.992188f, 0.363281f, 0.191406f},
- {0.933594f, 0.617188f, 0.230469f, 0.308594f}, {0.375000f, 0.746094f, 0.656250f, 0.867188f},
- {0.613281f, 0.105469f, 0.898438f, 0.671875f}, {0.316406f, 0.371094f, 0.714844f, 0.503906f},
- {0.687500f, 0.234375f, 0.031250f, 0.808594f}, {0.550781f, 0.957031f, 0.957031f, 0.433594f},
- {0.023438f, 0.539062f, 0.351562f, 0.308594f}, {0.964844f, 0.359375f, 0.261719f, 0.980469f},
- {0.750000f, 0.941406f, 0.863281f, 0.234375f}, {0.906250f, 0.863281f, 0.605469f, 0.863281f},
- {0.503906f, 0.109375f, 0.093750f, 0.289062f}, {0.582031f, 0.238281f, 0.414062f, 0.949219f},
- {0.792969f, 0.992188f, 0.308594f, 0.757812f}, {0.062500f, 0.164062f, 0.039062f, 0.816406f},
- {0.902344f, 0.542969f, 0.933594f, 0.675781f}, {0.554688f, 0.085938f, 0.726562f, 0.507812f},
- {0.984375f, 0.460938f, 0.175781f, 0.890625f}, {0.468750f, 0.179688f, 0.027344f, 0.140625f},
- {0.125000f, 0.679688f, 0.304688f, 0.468750f}, {0.203125f, 0.058594f, 0.531250f, 0.953125f},
- {0.070312f, 0.328125f, 0.375000f, 0.667969f}, {0.746094f, 0.554688f, 0.785156f, 0.578125f},
- {0.917969f, 0.421875f, 0.558594f, 0.089844f}, {0.445312f, 0.289062f, 0.855469f, 0.937500f},
- {0.378906f, 0.156250f, 0.398438f, 0.539062f}, {0.066406f, 0.015625f, 0.335938f, 0.265625f},
- {0.730469f, 0.812500f, 0.878906f, 0.820312f}, {0.191406f, 0.535156f, 0.015625f, 0.988281f},
- {0.046875f, 0.171875f, 0.554688f, 0.484375f}, {0.777344f, 0.656250f, 0.375000f, 0.015625f},
- {0.230469f, 0.488281f, 0.238281f, 0.535156f}, {0.144531f, 0.578125f, 0.750000f, 0.910156f},
- {0.812500f, 0.757812f, 0.910156f, 0.714844f}, {0.207031f, 0.429688f, 0.386719f, 0.042969f},
- {0.945312f, 0.292969f, 0.023438f, 0.136719f}, {0.597656f, 0.859375f, 0.941406f, 0.742188f},
- {0.171875f, 0.593750f, 0.289062f, 0.519531f}, {0.914062f, 0.031250f, 0.886719f, 0.234375f},
- {0.808594f, 0.773438f, 0.824219f, 0.160156f}, {0.082031f, 0.132812f, 0.496094f, 0.464844f},
- {0.664062f, 0.871094f, 0.675781f, 0.597656f}, {0.042969f, 0.289062f, 0.546875f, 0.195312f},
- {0.453125f, 0.996094f, 0.363281f, 0.859375f}, {0.585938f, 0.226562f, 0.718750f, 0.140625f},
- {0.648438f, 0.093750f, 0.277344f, 0.609375f}, {0.035156f, 0.933594f, 0.980469f, 0.898438f},
- {0.910156f, 0.671875f, 0.625000f, 0.410156f}, {0.210938f, 0.246094f, 0.472656f, 0.578125f},
- {0.136719f, 0.960938f, 0.832031f, 0.031250f}, {0.066406f, 0.054688f, 0.656250f, 0.660156f},
- {0.898438f, 0.714844f, 0.347656f, 0.218750f}, {0.765625f, 0.589844f, 0.820312f, 0.449219f},
- {0.023438f, 0.398438f, 0.734375f, 0.011719f}, {0.960938f, 0.253906f, 0.132812f, 0.582031f},
- {0.378906f, 0.644531f, 0.945312f, 0.480469f}, {0.496094f, 0.320312f, 0.683594f, 0.656250f},
- {0.085938f, 0.722656f, 0.105469f, 0.386719f}, {0.316406f, 0.414062f, 0.753906f, 0.226562f},
- {0.046875f, 0.011719f, 0.199219f, 0.464844f}, {0.621094f, 0.968750f, 0.714844f, 0.300781f},
- {0.878906f, 0.726562f, 0.863281f, 0.593750f}, {0.257812f, 0.312500f, 0.324219f, 0.523438f},
- {0.347656f, 0.835938f, 0.816406f, 0.687500f}, {0.074219f, 0.480469f, 0.000000f, 0.972656f},
- {0.656250f, 0.007812f, 0.578125f, 0.785156f}, {0.792969f, 0.914062f, 0.152344f, 0.570312f},
- {0.464844f, 0.292969f, 0.292969f, 0.152344f}, {0.863281f, 0.843750f, 0.101562f, 0.957031f},
- {0.066406f, 0.449219f, 0.484375f, 0.199219f}, {0.437500f, 0.019531f, 0.878906f, 0.886719f},
- {0.800781f, 0.074219f, 0.132812f, 0.136719f}, {0.296875f, 0.800781f, 0.511719f, 0.488281f},
- {0.656250f, 0.253906f, 0.019531f, 0.371094f}, {0.101562f, 0.148438f, 0.726562f, 0.609375f},
- {0.203125f, 0.664062f, 0.660156f, 0.089844f}, {0.976562f, 0.437500f, 0.972656f, 0.175781f},
- {0.289062f, 0.781250f, 0.765625f, 0.578125f}, {0.660156f, 0.343750f, 0.519531f, 0.312500f},
- {0.507812f, 0.625000f, 0.441406f, 0.019531f}, {0.175781f, 0.933594f, 0.230469f, 0.394531f},
- {0.796875f, 0.722656f, 0.824219f, 0.570312f}, {0.277344f, 0.410156f, 0.406250f, 0.226562f},
- {0.597656f, 0.949219f, 0.761719f, 0.707031f}, {0.949219f, 0.609375f, 0.882812f, 0.070312f},
- {0.519531f, 0.859375f, 0.128906f, 0.273438f}, {0.632812f, 0.203125f, 0.042969f, 0.156250f},
- {0.265625f, 0.890625f, 0.449219f, 0.812500f}, {0.585938f, 0.664062f, 0.230469f, 0.210938f},
- {0.968750f, 0.960938f, 0.742188f, 0.726562f}, {0.226562f, 0.339844f, 0.992188f, 0.117188f},
- {0.875000f, 0.410156f, 0.093750f, 0.894531f}, {0.640625f, 0.261719f, 0.710938f, 0.324219f},
- {0.917969f, 0.980469f, 0.425781f, 0.234375f}, {0.308594f, 0.300781f, 0.804688f, 0.628906f},
- {0.589844f, 0.105469f, 0.648438f, 0.421875f}, {0.714844f, 0.847656f, 0.125000f, 0.808594f},
- {0.406250f, 0.187500f, 0.480469f, 0.300781f}, {0.667969f, 0.992188f, 0.679688f, 0.960938f},
- {0.070312f, 0.542969f, 0.800781f, 0.859375f}, {0.835938f, 0.082031f, 0.554688f, 0.578125f},
- {0.398438f, 0.496094f, 0.449219f, 0.402344f}, {0.113281f, 0.398438f, 0.222656f, 0.828125f},
- {0.460938f, 0.308594f, 0.054688f, 0.625000f}, {0.976562f, 0.472656f, 0.984375f, 0.375000f},
- {0.281250f, 0.203125f, 0.312500f, 0.937500f}, {0.386719f, 0.000000f, 0.875000f, 0.785156f},
- {0.785156f, 0.402344f, 0.078125f, 0.527344f}, {0.117188f, 0.644531f, 0.812500f, 0.082031f},
- {0.941406f, 0.503906f, 0.132812f, 0.972656f}, {0.488281f, 0.140625f, 0.023438f, 0.238281f},
- {0.832031f, 0.843750f, 0.859375f, 0.167969f}, {0.335938f, 0.011719f, 0.382812f, 0.730469f},
- {0.628906f, 0.777344f, 0.570312f, 0.875000f}, {0.527344f, 0.355469f, 0.285156f, 0.132812f},
- {0.234375f, 0.472656f, 0.093750f, 0.312500f}, {0.308594f, 0.941406f, 0.214844f, 0.820312f},
- {0.640625f, 0.164062f, 0.628906f, 0.714844f}, {0.871094f, 0.832031f, 0.390625f, 0.156250f},
- {0.218750f, 0.531250f, 0.265625f, 0.289062f}, {0.699219f, 0.117188f, 0.550781f, 0.796875f},
- {0.980469f, 0.578125f, 0.890625f, 0.125000f}, {0.523438f, 0.824219f, 0.460938f, 0.890625f},
- {0.445312f, 0.347656f, 0.285156f, 0.675781f}, {0.816406f, 0.097656f, 0.949219f, 0.781250f},
- {0.140625f, 0.550781f, 0.089844f, 0.160156f}, {0.675781f, 0.421875f, 0.484375f, 0.074219f},
- {0.542969f, 0.062500f, 0.535156f, 0.230469f}, {0.421875f, 0.570312f, 0.886719f, 0.484375f},
- {0.167969f, 0.339844f, 0.734375f, 0.035156f}, {0.277344f, 0.199219f, 0.425781f, 0.441406f},
- {0.093750f, 0.527344f, 0.996094f, 0.714844f}, {0.214844f, 0.148438f, 0.632812f, 0.335938f},
- {0.941406f, 0.585938f, 0.242188f, 0.593750f}, {0.160156f, 0.886719f, 0.410156f, 0.652344f},
- {0.597656f, 0.679688f, 0.812500f, 0.019531f}, {0.242188f, 0.312500f, 0.585938f, 0.562500f},
- {0.531250f, 0.460938f, 0.937500f, 0.921875f}, {0.375000f, 0.734375f, 0.328125f, 0.054688f},
- {0.703125f, 0.382812f, 0.472656f, 0.734375f}, {0.824219f, 0.835938f, 0.140625f, 0.519531f},
- {0.441406f, 0.289062f, 0.203125f, 0.414062f}, {0.121094f, 0.691406f, 0.628906f, 0.925781f},
- {0.378906f, 0.019531f, 0.105469f, 0.082031f}, {0.714844f, 0.222656f, 0.347656f, 0.734375f},
- {0.046875f, 0.816406f, 0.968750f, 0.976562f}, {0.421875f, 0.320312f, 0.078125f, 0.628906f},
- {0.871094f, 0.097656f, 0.484375f, 0.835938f}, {0.695312f, 0.265625f, 0.207031f, 0.332031f},
- {0.351562f, 0.718750f, 0.273438f, 0.761719f}, {0.406250f, 0.382812f, 0.957031f, 0.511719f},
- {0.042969f, 0.785156f, 0.628906f, 0.980469f}, {0.832031f, 0.117188f, 0.910156f, 0.343750f},
- {0.144531f, 0.500000f, 0.058594f, 0.421875f}, {0.699219f, 0.843750f, 0.589844f, 0.601562f},
- {0.546875f, 0.574219f, 0.488281f, 0.164062f}, {0.363281f, 0.054688f, 0.265625f, 0.390625f},
- {0.128906f, 0.785156f, 0.949219f, 0.746094f}, {0.492188f, 0.691406f, 0.175781f, 0.949219f},
- {0.972656f, 0.902344f, 0.894531f, 0.183594f}, {0.027344f, 0.359375f, 0.570312f, 0.070312f},
- {0.273438f, 0.062500f, 0.207031f, 0.500000f}, {0.472656f, 0.730469f, 0.972656f, 0.613281f},
- {0.351562f, 0.640625f, 0.089844f, 0.363281f}, {0.742188f, 0.226562f, 0.187500f, 0.195312f},
- {0.234375f, 0.699219f, 0.730469f, 0.945312f}, {0.625000f, 0.945312f, 0.636719f, 0.082031f},
- {0.328125f, 0.839844f, 0.378906f, 0.312500f}, {0.707031f, 0.652344f, 0.574219f, 0.875000f},
- {0.566406f, 0.742188f, 0.148438f, 0.050781f}, {0.882812f, 0.921875f, 0.460938f, 0.246094f},
- {0.519531f, 0.585938f, 0.917969f, 0.656250f}, {0.730469f, 0.718750f, 0.597656f, 0.316406f},
- {0.261719f, 0.808594f, 0.500000f, 0.460938f}, {0.171875f, 0.285156f, 0.324219f, 0.796875f},
- {0.773438f, 0.562500f, 0.746094f, 0.546875f}, {0.433594f, 0.429688f, 0.183594f, 0.343750f},
- {0.726562f, 0.628906f, 0.050781f, 0.488281f}, {0.859375f, 0.898438f, 0.972656f, 0.996094f},
- {0.402344f, 0.542969f, 0.429688f, 0.402344f}, {0.101562f, 0.304688f, 0.535156f, 0.542969f},
- {0.476562f, 0.675781f, 0.863281f, 0.902344f}, {0.734375f, 0.035156f, 0.488281f, 0.359375f},
- {0.289062f, 0.761719f, 0.773438f, 0.976562f}, {0.589844f, 0.949219f, 0.007812f, 0.519531f},
- {0.843750f, 0.269531f, 0.417969f, 0.835938f}, {0.664062f, 0.183594f, 0.144531f, 0.554688f},
- {0.226562f, 0.652344f, 0.656250f, 0.085938f}, {0.367188f, 0.789062f, 0.562500f, 0.957031f},
- {0.972656f, 0.238281f, 0.394531f, 0.433594f}, {0.000000f, 0.894531f, 0.207031f, 0.644531f},
- {0.777344f, 0.136719f, 0.968750f, 0.820312f}, {0.910156f, 0.949219f, 0.261719f, 0.355469f},
- {0.722656f, 0.785156f, 0.070312f, 0.917969f}, {0.996094f, 0.707031f, 0.792969f, 0.105469f},
- {0.562500f, 0.644531f, 0.511719f, 0.246094f}, {0.648438f, 0.937500f, 0.335938f, 0.851562f},
- {0.398438f, 0.738281f, 0.777344f, 0.078125f}, {0.832031f, 0.410156f, 0.695312f, 0.285156f},
- {0.722656f, 0.210938f, 0.167969f, 0.785156f}, {0.042969f, 0.609375f, 0.296875f, 0.214844f},
- {0.863281f, 0.976562f, 0.441406f, 0.824219f}, {0.167969f, 0.027344f, 0.066406f, 0.664062f},
- {0.609375f, 0.562500f, 0.828125f, 0.347656f}, {0.000000f, 0.191406f, 0.562500f, 0.839844f},
- {0.250000f, 0.070312f, 0.281250f, 0.207031f}, {0.875000f, 0.875000f, 0.917969f, 0.644531f},
- {0.941406f, 0.523438f, 0.781250f, 0.867188f}, {0.617188f, 0.378906f, 0.687500f, 0.343750f},
- {0.316406f, 0.132812f, 0.546875f, 0.171875f}, {0.542969f, 0.574219f, 0.609375f, 0.101562f},
- {0.230469f, 0.484375f, 0.851562f, 0.433594f}, {0.007812f, 0.828125f, 0.671875f, 0.910156f},
- {0.160156f, 0.160156f, 0.734375f, 0.605469f}, {0.890625f, 0.527344f, 0.351562f, 0.394531f},
- {0.757812f, 0.042969f, 0.511719f, 0.039062f}, {0.507812f, 0.593750f, 0.144531f, 0.640625f},
- {0.335938f, 0.238281f, 0.316406f, 0.781250f}, {0.464844f, 0.726562f, 0.191406f, 0.500000f},
- {0.000000f, 0.093750f, 0.667969f, 0.707031f}, {0.273438f, 0.636719f, 0.843750f, 0.031250f},
- {0.746094f, 0.210938f, 0.101562f, 0.570312f}, {0.437500f, 0.421875f, 0.343750f, 0.832031f},
- {0.625000f, 0.519531f, 0.027344f, 0.355469f}, {0.824219f, 0.613281f, 0.777344f, 0.667969f},
- {0.886719f, 0.261719f, 0.296875f, 0.121094f}, {0.554688f, 0.476562f, 0.609375f, 0.777344f},
- {0.992188f, 0.328125f, 0.417969f, 0.253906f}, {0.007812f, 0.812500f, 0.339844f, 0.050781f},
- {0.519531f, 0.371094f, 0.921875f, 0.476562f}, {0.867188f, 0.167969f, 0.121094f, 0.660156f},
- {0.773438f, 0.054688f, 0.789062f, 0.718750f}, {0.066406f, 0.535156f, 0.253906f, 0.128906f},
- {0.156250f, 0.343750f, 0.753906f, 0.503906f}, {0.218750f, 0.437500f, 0.027344f, 0.410156f},
- {0.347656f, 0.070312f, 0.398438f, 0.839844f}, {0.019531f, 0.175781f, 0.222656f, 0.714844f},
- {0.410156f, 0.375000f, 0.953125f, 0.011719f}, {0.605469f, 0.886719f, 0.652344f, 0.640625f},
- {0.093750f, 0.082031f, 0.414062f, 0.097656f}, {0.289062f, 0.707031f, 0.886719f, 0.269531f},
- {0.003906f, 0.195312f, 0.242188f, 0.691406f}, {0.980469f, 0.261719f, 0.781250f, 0.070312f},
- {0.671875f, 0.070312f, 0.722656f, 0.621094f}, {0.820312f, 0.851562f, 0.914062f, 0.250000f},
- {0.550781f, 0.429688f, 0.164062f, 0.097656f}, {0.140625f, 0.210938f, 0.082031f, 0.671875f},
- {0.042969f, 0.367188f, 0.996094f, 0.054688f}, {0.394531f, 0.457031f, 0.605469f, 0.613281f},
- {0.164062f, 0.695312f, 0.312500f, 0.417969f}, {0.109375f, 0.132812f, 0.929688f, 0.320312f},
- {0.734375f, 0.937500f, 0.800781f, 0.207031f}, {0.578125f, 0.476562f, 0.039062f, 0.367188f},
- {0.500000f, 0.382812f, 0.761719f, 0.859375f}, {0.304688f, 0.750000f, 0.628906f, 0.273438f},
- {0.207031f, 0.617188f, 0.121094f, 0.730469f}, {0.597656f, 0.269531f, 0.683594f, 0.140625f},
- {0.324219f, 0.445312f, 0.371094f, 0.613281f}, {0.027344f, 0.386719f, 0.187500f, 0.761719f},
- {0.507812f, 0.093750f, 0.597656f, 0.546875f}, {0.769531f, 0.250000f, 0.015625f, 0.386719f},
- {0.265625f, 0.335938f, 0.914062f, 0.472656f}, {0.335938f, 0.113281f, 0.539062f, 0.972656f},
- {0.496094f, 0.828125f, 0.078125f, 0.730469f}, {0.980469f, 0.507812f, 0.656250f, 0.410156f},
- {0.410156f, 0.093750f, 0.871094f, 0.148438f}, {0.777344f, 0.910156f, 0.238281f, 0.464844f},
- {0.929688f, 0.644531f, 0.746094f, 0.253906f}, {0.343750f, 0.488281f, 0.394531f, 0.992188f},
- {0.566406f, 0.949219f, 0.011719f, 0.117188f}, {0.476562f, 0.597656f, 0.859375f, 0.476562f},
- {0.210938f, 0.449219f, 0.476562f, 0.273438f}, {0.816406f, 0.902344f, 0.156250f, 0.542969f},
- {0.093750f, 0.738281f, 0.253906f, 0.773438f}, {0.964844f, 0.640625f, 0.316406f, 0.500000f},
- {0.738281f, 0.925781f, 0.007812f, 0.257812f}, {0.828125f, 0.066406f, 0.433594f, 0.000000f},
- {0.457031f, 0.437500f, 0.578125f, 0.187500f}, {0.667969f, 0.980469f, 0.089844f, 0.699219f},
- {0.207031f, 0.351562f, 0.824219f, 0.886719f}, {0.105469f, 0.902344f, 0.703125f, 0.246094f},
- {0.933594f, 0.183594f, 0.796875f, 0.070312f}, {0.796875f, 0.449219f, 0.457031f, 0.925781f},
- {0.656250f, 0.945312f, 0.378906f, 0.289062f}, {0.957031f, 0.878906f, 0.769531f, 0.875000f},
- {0.847656f, 0.335938f, 0.531250f, 0.097656f}, {0.089844f, 0.128906f, 0.628906f, 0.464844f},
- {0.199219f, 0.824219f, 0.437500f, 0.273438f}, {0.335938f, 0.035156f, 0.507812f, 0.925781f},
- {0.113281f, 0.773438f, 0.839844f, 0.554688f}, {0.160156f, 0.925781f, 0.042969f, 0.437500f},
- {0.695312f, 0.132812f, 0.875000f, 0.687500f}, {0.300781f, 0.007812f, 0.519531f, 0.878906f},
- {0.921875f, 0.898438f, 0.671875f, 0.800781f}, {0.187500f, 0.582031f, 0.000000f, 0.539062f},
- {0.421875f, 0.253906f, 0.484375f, 0.265625f}, {0.503906f, 0.800781f, 0.945312f, 0.988281f},
- {0.917969f, 0.117188f, 0.625000f, 0.753906f}, {0.812500f, 0.859375f, 0.707031f, 0.578125f},
- {0.671875f, 0.269531f, 0.296875f, 0.171875f}, {0.984375f, 0.949219f, 0.769531f, 0.367188f},
- {0.847656f, 0.476562f, 0.156250f, 0.957031f}, {0.703125f, 0.613281f, 0.554688f, 0.867188f},
- {0.890625f, 0.328125f, 0.101562f, 0.421875f}, {0.503906f, 0.976562f, 0.687500f, 0.910156f},
- {0.570312f, 0.511719f, 0.503906f, 0.777344f}, {0.156250f, 0.808594f, 0.597656f, 0.179688f},
- {0.355469f, 0.125000f, 0.019531f, 0.839844f}, {0.199219f, 0.730469f, 0.308594f, 0.738281f},
- {0.949219f, 0.984375f, 0.671875f, 0.496094f}, {0.429688f, 0.613281f, 0.246094f, 0.199219f},
- {0.910156f, 0.085938f, 0.363281f, 0.765625f}, {0.769531f, 0.878906f, 0.707031f, 0.261719f},
- {0.472656f, 0.519531f, 0.187500f, 0.000000f}, {0.894531f, 0.328125f, 0.519531f, 0.750000f},
- {0.277344f, 0.593750f, 0.238281f, 0.632812f}, {0.058594f, 0.855469f, 0.359375f, 0.500000f},
- {0.855469f, 0.023438f, 0.910156f, 0.027344f}, {0.699219f, 0.523438f, 0.449219f, 0.562500f},
- {0.457031f, 0.667969f, 0.308594f, 0.980469f}, {0.125000f, 0.175781f, 0.824219f, 0.312500f},
- {0.867188f, 0.867188f, 0.476562f, 0.414062f}, {0.375000f, 0.027344f, 0.929688f, 0.882812f},
- {0.683594f, 0.812500f, 0.851562f, 0.175781f}, {0.117188f, 0.480469f, 0.125000f, 0.804688f},
- {0.878906f, 0.980469f, 0.210938f, 0.679688f}, {0.058594f, 0.554688f, 0.378906f, 0.042969f},
- {0.628906f, 0.167969f, 0.976562f, 0.527344f}, {0.132812f, 0.757812f, 0.769531f, 0.621094f},
- {0.308594f, 0.371094f, 0.191406f, 0.312500f}, {0.464844f, 0.273438f, 0.527344f, 0.898438f},
- {0.085938f, 0.808594f, 0.960938f, 0.007812f}, {0.734375f, 0.324219f, 0.691406f, 0.757812f},
- {0.671875f, 0.105469f, 0.339844f, 0.593750f}, {0.058594f, 0.765625f, 0.585938f, 0.703125f},
- {0.761719f, 0.246094f, 0.062500f, 0.031250f}, {0.156250f, 0.167969f, 0.417969f, 0.917969f},
- {0.355469f, 0.035156f, 0.800781f, 0.382812f}, {0.644531f, 0.281250f, 0.925781f, 0.683594f},
- {0.496094f, 0.773438f, 0.136719f, 0.957031f}, {0.121094f, 0.226562f, 0.890625f, 0.562500f},
- {0.304688f, 0.699219f, 0.187500f, 0.824219f}, {0.992188f, 0.628906f, 0.980469f, 0.457031f},
- {0.550781f, 0.300781f, 0.410156f, 0.308594f}, {0.621094f, 0.761719f, 0.242188f, 0.148438f},
- {0.292969f, 0.671875f, 0.609375f, 0.816406f}, {0.414062f, 0.386719f, 0.000000f, 0.445312f},
- {0.167969f, 0.289062f, 0.890625f, 0.207031f}, {0.238281f, 0.542969f, 0.140625f, 0.523438f},
- {0.566406f, 0.710938f, 0.218750f, 0.625000f}, {0.382812f, 0.464844f, 0.980469f, 0.156250f},
- {0.785156f, 0.972656f, 0.695312f, 0.730469f}, {0.535156f, 0.199219f, 0.246094f, 0.863281f},
- {0.648438f, 0.390625f, 0.371094f, 0.210938f}, {0.425781f, 0.550781f, 0.722656f, 0.000000f},
- {0.773438f, 0.671875f, 0.140625f, 0.980469f}, {0.585938f, 0.425781f, 0.234375f, 0.304688f},
- {0.105469f, 0.734375f, 0.812500f, 0.164062f}, {0.656250f, 0.460938f, 0.281250f, 0.421875f},
- {0.277344f, 0.632812f, 0.863281f, 0.351562f}, {0.031250f, 0.968750f, 0.347656f, 0.015625f},
- {0.613281f, 0.195312f, 0.195312f, 0.214844f}, {0.445312f, 0.507812f, 0.527344f, 0.906250f},
- {0.296875f, 0.777344f, 0.855469f, 0.093750f}, {0.132812f, 0.660156f, 0.062500f, 0.285156f},
- {0.546875f, 0.031250f, 0.457031f, 0.496094f}, {0.195312f, 0.230469f, 0.808594f, 0.144531f},
- {0.375000f, 0.750000f, 0.273438f, 0.210938f}, {0.933594f, 0.156250f, 0.941406f, 0.601562f},
- {0.230469f, 0.402344f, 0.355469f, 0.367188f}, {0.753906f, 0.656250f, 0.128906f, 0.449219f},
- {0.058594f, 0.351562f, 0.464844f, 0.015625f}, {0.597656f, 0.570312f, 0.398438f, 0.957031f},
- {0.789062f, 0.289062f, 0.824219f, 0.386719f}, {0.246094f, 0.492188f, 0.578125f, 0.863281f},
- {0.636719f, 0.792969f, 0.046875f, 0.457031f}, {0.332031f, 0.019531f, 0.839844f, 0.929688f},
- {0.207031f, 0.410156f, 0.109375f, 0.707031f}, {0.617188f, 0.765625f, 0.621094f, 0.992188f},
- {0.960938f, 0.066406f, 0.691406f, 0.132812f}, {0.417969f, 0.289062f, 0.074219f, 0.906250f},
- {0.789062f, 0.207031f, 0.851562f, 0.769531f}, {0.093750f, 0.972656f, 0.171875f, 0.183594f},
- {0.937500f, 0.101562f, 0.726562f, 0.066406f}, {0.253906f, 0.324219f, 0.554688f, 0.527344f},
- {0.820312f, 0.503906f, 0.062500f, 0.656250f}, {0.476562f, 0.593750f, 0.648438f, 0.007812f},
- {0.179688f, 0.910156f, 0.281250f, 0.289062f}, {0.957031f, 0.062500f, 0.445312f, 0.921875f},
- {0.441406f, 0.632812f, 0.726562f, 0.128906f}, {0.574219f, 0.292969f, 0.621094f, 0.234375f},
- {0.203125f, 0.875000f, 0.476562f, 0.363281f}, {0.679688f, 0.667969f, 0.031250f, 0.945312f},
- {0.914062f, 0.441406f, 0.347656f, 0.097656f}, {0.546875f, 0.214844f, 0.609375f, 0.687500f},
- {0.191406f, 0.718750f, 0.113281f, 0.550781f}, {0.269531f, 0.148438f, 0.164062f, 0.375000f},
- {0.992188f, 0.414062f, 0.898438f, 0.164062f}, {0.398438f, 0.652344f, 0.652344f, 0.429688f},
- {0.523438f, 0.351562f, 0.210938f, 0.800781f}, {0.863281f, 0.820312f, 0.992188f, 0.218750f},
- {0.437500f, 0.988281f, 0.707031f, 0.066406f}, {0.261719f, 0.421875f, 0.382812f, 0.859375f},
- {0.921875f, 0.339844f, 0.644531f, 0.132812f}, {0.585938f, 0.539062f, 0.746094f, 0.359375f},
- {0.386719f, 0.855469f, 0.488281f, 0.738281f}, {0.804688f, 0.019531f, 0.289062f, 0.105469f},
- {0.253906f, 0.480469f, 0.050781f, 0.539062f}, {0.027344f, 0.109375f, 0.867188f, 0.945312f},
- {0.898438f, 0.828125f, 0.523438f, 0.582031f}, {0.718750f, 0.046875f, 0.964844f, 0.339844f},
- {0.519531f, 0.152344f, 0.281250f, 0.675781f}, {0.062500f, 0.765625f, 0.570312f, 0.984375f},
- {0.886719f, 0.003906f, 0.738281f, 0.792969f}, {0.687500f, 0.257812f, 0.316406f, 0.410156f},
- {0.019531f, 0.585938f, 0.078125f, 0.039062f}, {0.964844f, 0.660156f, 0.164062f, 0.320312f},
- {0.257812f, 0.863281f, 0.941406f, 0.597656f}, {0.906250f, 0.292969f, 0.640625f, 0.386719f},
- {0.214844f, 0.960938f, 0.472656f, 0.746094f}, {0.464844f, 0.214844f, 0.996094f, 0.628906f},
- {0.378906f, 0.851562f, 0.558594f, 0.097656f}, {0.820312f, 0.300781f, 0.394531f, 0.898438f},
- {0.718750f, 0.066406f, 0.597656f, 0.566406f}, {0.968750f, 0.406250f, 0.085938f, 0.843750f},
- {0.363281f, 0.687500f, 0.433594f, 0.683594f}, {0.750000f, 0.574219f, 0.125000f, 0.437500f},
- {0.078125f, 0.316406f, 0.980469f, 0.617188f}, {0.636719f, 0.136719f, 0.675781f, 0.812500f},
- {0.468750f, 0.910156f, 0.367188f, 0.757812f}, {0.324219f, 0.546875f, 0.910156f, 0.554688f},
- {0.050781f, 0.832031f, 0.003906f, 0.671875f}, {0.808594f, 0.054688f, 0.203125f, 0.042969f},
- {0.625000f, 0.929688f, 0.632812f, 0.937500f}, {0.460938f, 0.468750f, 0.796875f, 0.523438f},
- {0.882812f, 0.003906f, 0.964844f, 0.292969f}, {0.304688f, 0.902344f, 0.195312f, 0.589844f},
- {0.503906f, 0.160156f, 0.515625f, 0.128906f}, {0.011719f, 0.671875f, 0.933594f, 0.328125f},
- {0.714844f, 0.250000f, 0.765625f, 0.570312f}, {0.539062f, 0.921875f, 0.472656f, 0.167969f},
- {0.820312f, 0.187500f, 0.871094f, 0.355469f}, {0.031250f, 0.996094f, 0.953125f, 0.476562f},
- {0.355469f, 0.628906f, 0.425781f, 0.289062f}, {0.554688f, 0.449219f, 0.578125f, 0.593750f},
- {0.183594f, 0.710938f, 0.273438f, 0.398438f}, {0.644531f, 0.359375f, 0.511719f, 0.695312f},
- {0.398438f, 0.820312f, 0.015625f, 0.464844f}, {0.535156f, 0.925781f, 0.941406f, 0.933594f},
- {0.628906f, 0.691406f, 0.238281f, 0.222656f}, {0.074219f, 0.222656f, 0.402344f, 0.707031f},
- {0.785156f, 0.757812f, 0.761719f, 0.496094f}, {0.242188f, 0.367188f, 0.570312f, 0.589844f},
- {0.726562f, 0.718750f, 0.320312f, 0.445312f}, {0.925781f, 0.417969f, 0.890625f, 0.863281f},
- {0.382812f, 0.000000f, 0.261719f, 0.753906f}, {0.753906f, 0.953125f, 0.839844f, 0.179688f},
- {0.023438f, 0.078125f, 0.414062f, 0.832031f}, {0.843750f, 0.597656f, 0.906250f, 0.496094f},
- {0.617188f, 0.894531f, 0.492188f, 0.792969f}, {0.886719f, 0.542969f, 0.261719f, 0.289062f},
- {0.140625f, 0.968750f, 0.437500f, 0.960938f}, {0.296875f, 0.046875f, 0.757812f, 0.851562f},
- {0.601562f, 0.710938f, 0.300781f, 0.324219f}, {0.699219f, 0.500000f, 0.496094f, 0.574219f},
- {0.019531f, 0.558594f, 0.035156f, 0.648438f}, {0.785156f, 0.675781f, 0.535156f, 0.449219f},
- {0.078125f, 0.089844f, 0.234375f, 0.300781f}, {0.191406f, 0.175781f, 0.339844f, 0.617188f},
- {0.714844f, 0.398438f, 0.785156f, 0.222656f}, {0.054688f, 0.921875f, 0.562500f, 0.875000f},
- {0.488281f, 0.257812f, 0.683594f, 0.652344f}, {0.765625f, 0.566406f, 0.335938f, 0.386719f},
- {0.371094f, 0.957031f, 0.121094f, 0.750000f}, {0.117188f, 0.511719f, 0.718750f, 0.007812f},
- {0.820312f, 0.871094f, 0.421875f, 0.125000f}, {0.453125f, 0.617188f, 0.062500f, 0.371094f},
- {0.613281f, 0.937500f, 0.914062f, 0.246094f}, {0.300781f, 0.371094f, 0.460938f, 0.703125f},
- {0.480469f, 0.078125f, 0.863281f, 0.957031f}, {0.730469f, 0.746094f, 0.785156f, 0.488281f},
- {0.363281f, 0.164062f, 0.566406f, 0.812500f}, {0.074219f, 0.093750f, 0.093750f, 0.140625f},
- {0.859375f, 0.503906f, 0.320312f, 0.527344f}, {0.039062f, 0.050781f, 0.765625f, 0.464844f},
- {0.953125f, 0.566406f, 0.058594f, 0.222656f}, {0.531250f, 0.156250f, 0.156250f, 0.773438f},
- {0.230469f, 0.914062f, 0.738281f, 0.644531f}, {0.117188f, 0.750000f, 0.898438f, 0.152344f},
- {0.574219f, 0.363281f, 0.656250f, 0.484375f}, {0.179688f, 0.011719f, 0.808594f, 0.312500f},
- {0.894531f, 0.980469f, 0.328125f, 0.941406f}, {0.246094f, 0.730469f, 0.242188f, 0.066406f},
- {0.949219f, 0.386719f, 0.609375f, 0.398438f}, {0.781250f, 0.445312f, 0.511719f, 0.257812f},
- {0.675781f, 0.679688f, 0.730469f, 0.843750f}, {0.121094f, 0.273438f, 0.433594f, 0.324219f},
- {0.273438f, 0.582031f, 0.855469f, 0.726562f}, {0.390625f, 0.863281f, 0.289062f, 0.816406f},
- {0.699219f, 0.226562f, 0.707031f, 0.218750f}, {0.925781f, 0.757812f, 0.078125f, 0.687500f},
- {0.128906f, 0.382812f, 0.640625f, 0.906250f}, {0.382812f, 0.101562f, 0.140625f, 0.789062f},
- {0.988281f, 0.843750f, 0.273438f, 0.074219f}, {0.093750f, 0.562500f, 0.386719f, 0.660156f},
- {0.441406f, 0.726562f, 0.230469f, 0.218750f}, {0.746094f, 0.238281f, 0.023438f, 0.875000f},
- {0.683594f, 0.109375f, 0.750000f, 0.042969f}, {0.238281f, 0.898438f, 0.328125f, 0.812500f},
- {0.902344f, 0.796875f, 0.988281f, 0.230469f}, {0.335938f, 0.574219f, 0.792969f, 0.335938f},
- {0.015625f, 0.035156f, 0.613281f, 0.835938f}, {0.738281f, 0.414062f, 0.343750f, 0.101562f},
- {0.976562f, 0.128906f, 0.867188f, 0.789062f}, {0.308594f, 0.285156f, 0.148438f, 0.371094f},
- {0.554688f, 0.535156f, 0.980469f, 0.964844f}, {0.351562f, 0.191406f, 0.046875f, 0.074219f},
- {0.003906f, 0.140625f, 0.812500f, 0.324219f}, {0.515625f, 0.804688f, 0.101562f, 0.644531f},
- {0.292969f, 0.242188f, 0.152344f, 0.546875f}, {0.816406f, 0.527344f, 0.554688f, 0.277344f},
- {0.246094f, 0.343750f, 0.664062f, 0.050781f}, {0.425781f, 0.839844f, 0.058594f, 0.425781f},
- {0.347656f, 0.031250f, 0.714844f, 0.207031f}, {0.496094f, 0.460938f, 0.804688f, 0.652344f},
- {0.800781f, 0.226562f, 0.078125f, 0.058594f}, {0.039062f, 0.859375f, 0.546875f, 0.484375f},
- {0.945312f, 0.300781f, 0.847656f, 0.109375f}, {0.226562f, 0.121094f, 0.121094f, 0.933594f},
- {0.906250f, 0.210938f, 0.878906f, 0.746094f}, {0.546875f, 0.875000f, 0.601562f, 0.187500f},
- {0.675781f, 0.953125f, 0.085938f, 0.804688f}, {0.339844f, 0.601562f, 0.933594f, 0.507812f},
- {0.859375f, 0.792969f, 0.023438f, 0.996094f}, {0.429688f, 0.128906f, 0.156250f, 0.031250f},
- {0.929688f, 0.742188f, 0.906250f, 0.269531f}, {0.179688f, 0.203125f, 0.453125f, 0.484375f},
- {0.671875f, 0.640625f, 0.644531f, 0.195312f}, {0.582031f, 0.328125f, 0.191406f, 0.847656f},
- {0.976562f, 0.425781f, 0.832031f, 0.601562f}, {0.343750f, 0.191406f, 0.347656f, 0.906250f},
- {0.210938f, 0.488281f, 0.605469f, 0.062500f}, {0.941406f, 0.804688f, 0.023438f, 0.546875f},
- {0.101562f, 0.910156f, 0.527344f, 0.191406f}, {0.175781f, 0.437500f, 0.402344f, 0.648438f},
- {0.820312f, 0.332031f, 0.265625f, 0.914062f}, {0.515625f, 0.636719f, 0.882812f, 0.062500f},
- {0.621094f, 0.785156f, 0.429688f, 0.253906f}, {0.746094f, 0.707031f, 0.199219f, 0.937500f},
- {0.152344f, 0.355469f, 0.683594f, 0.332031f}, {0.332031f, 0.804688f, 0.457031f, 0.074219f},
- {0.878906f, 0.492188f, 0.964844f, 0.968750f}, {0.480469f, 0.109375f, 0.226562f, 0.382812f},
- {0.792969f, 0.867188f, 0.035156f, 0.042969f}, {0.417969f, 0.234375f, 0.480469f, 0.734375f},
- {0.843750f, 0.464844f, 0.566406f, 0.539062f}, {0.511719f, 0.609375f, 0.171875f, 0.187500f},
- {0.011719f, 0.062500f, 0.046875f, 0.703125f}, {0.582031f, 0.191406f, 0.871094f, 0.968750f},
- {0.429688f, 0.347656f, 0.308594f, 0.121094f}, {0.988281f, 0.777344f, 0.578125f, 0.484375f},
- {0.527344f, 0.109375f, 0.152344f, 0.078125f}, {0.085938f, 0.320312f, 0.050781f, 0.160156f},
- {0.835938f, 0.699219f, 0.539062f, 0.640625f}, {0.558594f, 0.531250f, 0.890625f, 0.433594f},
- {0.183594f, 0.968750f, 0.332031f, 0.031250f}, {0.660156f, 0.449219f, 0.433594f, 0.269531f},
- {0.851562f, 0.640625f, 0.722656f, 0.503906f}, {0.289062f, 0.347656f, 0.558594f, 0.835938f},
- {0.156250f, 0.488281f, 0.171875f, 0.101562f}, {0.878906f, 0.828125f, 0.804688f, 0.550781f},
- {0.511719f, 0.386719f, 0.492188f, 0.437500f}, {0.132812f, 0.531250f, 0.148438f, 0.671875f},
- {0.765625f, 0.144531f, 0.101562f, 0.117188f}, {0.484375f, 0.257812f, 0.210938f, 0.910156f},
- {0.835938f, 0.480469f, 0.433594f, 0.574219f}, {0.152344f, 0.628906f, 0.699219f, 0.269531f},
- {0.214844f, 0.773438f, 0.089844f, 0.441406f}, {0.417969f, 0.992188f, 0.535156f, 0.152344f},
- {0.898438f, 0.453125f, 0.667969f, 0.746094f}, {0.640625f, 0.867188f, 0.195312f, 0.207031f},
- {0.148438f, 0.578125f, 0.507812f, 0.796875f}, {0.855469f, 0.921875f, 0.699219f, 0.027344f},
- {0.097656f, 0.468750f, 0.960938f, 0.988281f}, {0.585938f, 0.625000f, 0.757812f, 0.382812f},
- {0.160156f, 0.773438f, 0.300781f, 0.613281f}, {0.714844f, 0.183594f, 0.214844f, 0.875000f},
- {0.070312f, 0.691406f, 0.980469f, 0.937500f}, {0.656250f, 0.375000f, 0.332031f, 0.125000f},
- {0.746094f, 0.789062f, 0.621094f, 0.738281f}, {0.457031f, 0.585938f, 0.949219f, 0.605469f},
- {0.335938f, 0.933594f, 0.179688f, 0.253906f}, {0.171875f, 0.625000f, 0.359375f, 0.523438f},
- {0.386719f, 0.457031f, 0.730469f, 0.394531f}, {0.472656f, 0.003906f, 0.273438f, 0.039062f},
- {0.281250f, 0.726562f, 0.457031f, 0.902344f}, {0.972656f, 0.488281f, 0.832031f, 0.093750f},
- {0.617188f, 0.312500f, 0.406250f, 0.414062f}, {0.136719f, 0.660156f, 0.613281f, 0.687500f},
- {0.562500f, 0.441406f, 0.226562f, 0.781250f}, {0.324219f, 0.375000f, 0.800781f, 0.074219f},
- {0.871094f, 0.808594f, 0.082031f, 0.964844f}, {0.269531f, 0.089844f, 0.941406f, 0.699219f},
- {0.011719f, 0.250000f, 0.503906f, 0.503906f}, {0.148438f, 0.671875f, 0.242188f, 0.300781f},
- {0.707031f, 0.125000f, 0.679688f, 0.453125f}, {0.843750f, 0.296875f, 0.812500f, 0.835938f},
- {0.417969f, 0.566406f, 0.187500f, 0.113281f}, {0.578125f, 0.226562f, 0.652344f, 0.285156f},
- {0.675781f, 0.523438f, 0.718750f, 0.363281f}, {0.312500f, 0.894531f, 0.039062f, 0.691406f},
- {0.406250f, 0.398438f, 0.605469f, 0.781250f}, {0.265625f, 0.246094f, 0.917969f, 0.851562f},
- {0.570312f, 0.992188f, 0.843750f, 0.589844f}, {0.644531f, 0.605469f, 0.339844f, 0.714844f},
- {0.003906f, 0.269531f, 0.531250f, 0.511719f}, {0.699219f, 0.652344f, 0.296875f, 0.277344f},
- {0.312500f, 0.546875f, 0.710938f, 0.824219f}, {0.054688f, 0.152344f, 0.402344f, 0.238281f},
- {0.667969f, 0.796875f, 0.914062f, 0.875000f}, {0.351562f, 0.281250f, 0.769531f, 0.351562f},
- {0.730469f, 0.839844f, 0.691406f, 0.000000f}, {0.289062f, 0.894531f, 0.394531f, 0.632812f},
- {0.152344f, 0.519531f, 0.113281f, 0.429688f}, {0.867188f, 0.988281f, 0.992188f, 0.582031f},
- {0.210938f, 0.636719f, 0.480469f, 0.878906f}, {0.640625f, 0.171875f, 0.753906f, 0.984375f},
- {0.023438f, 0.425781f, 0.371094f, 0.343750f}, {0.437500f, 0.039062f, 0.222656f, 0.539062f},
- {0.257812f, 0.800781f, 0.835938f, 0.718750f}, {0.777344f, 0.300781f, 0.007812f, 0.964844f},
- {0.484375f, 0.054688f, 0.984375f, 0.406250f}, {0.582031f, 0.140625f, 0.664062f, 0.617188f},
- {0.398438f, 0.597656f, 0.906250f, 0.933594f}, {0.933594f, 0.019531f, 0.367188f, 0.726562f},
- {0.312500f, 0.691406f, 0.601562f, 0.164062f}, {0.074219f, 0.320312f, 0.882812f, 0.964844f},
- {0.589844f, 0.644531f, 0.679688f, 0.515625f}, {0.949219f, 0.964844f, 0.375000f, 0.742188f},
- {0.281250f, 0.187500f, 0.910156f, 0.023438f}, {0.687500f, 0.886719f, 0.773438f, 0.640625f},
- {0.597656f, 0.343750f, 0.292969f, 0.871094f}, {0.054688f, 0.089844f, 0.464844f, 0.535156f},
- {0.808594f, 0.015625f, 0.839844f, 0.613281f}, {0.710938f, 0.675781f, 0.339844f, 0.902344f},
- {0.484375f, 0.320312f, 0.429688f, 0.406250f}, {0.988281f, 0.062500f, 0.242188f, 0.687500f},
- {0.664062f, 0.707031f, 0.375000f, 0.140625f}, {0.460938f, 0.128906f, 0.019531f, 0.480469f},
- {0.960938f, 0.296875f, 0.453125f, 0.707031f}, {0.535156f, 0.980469f, 0.828125f, 0.246094f},
- {0.894531f, 0.101562f, 0.578125f, 0.570312f}, {0.218750f, 0.273438f, 0.398438f, 0.335938f},
- {0.113281f, 0.507812f, 0.000000f, 0.406250f}, {0.554688f, 0.160156f, 0.242188f, 0.890625f},
- {0.828125f, 0.066406f, 0.671875f, 0.695312f}, {0.632812f, 0.398438f, 0.425781f, 0.148438f},
- {0.730469f, 0.781250f, 0.785156f, 0.968750f}, {0.125000f, 0.273438f, 0.964844f, 0.281250f},
- {0.820312f, 0.371094f, 0.191406f, 0.707031f}, {0.031250f, 0.218750f, 0.695312f, 0.585938f},
- {0.507812f, 0.054688f, 0.511719f, 0.343750f}, {0.242188f, 0.890625f, 0.988281f, 0.167969f},
- {0.734375f, 0.972656f, 0.730469f, 0.531250f}, {0.070312f, 0.011719f, 0.285156f, 0.316406f},
- {0.460938f, 0.707031f, 0.394531f, 0.417969f}, {0.781250f, 0.546875f, 0.585938f, 0.234375f},
- {0.402344f, 0.992188f, 0.769531f, 0.152344f}, {0.644531f, 0.738281f, 0.148438f, 0.773438f},
- {0.757812f, 0.855469f, 0.976562f, 0.636719f}, {0.539062f, 0.050781f, 0.382812f, 0.390625f},
- {0.246094f, 0.714844f, 0.296875f, 0.742188f}, {0.910156f, 0.972656f, 0.125000f, 0.886719f},
- {0.128906f, 0.011719f, 0.960938f, 0.445312f}, {0.984375f, 0.828125f, 0.351562f, 0.554688f},
- {0.054688f, 0.132812f, 0.511719f, 0.175781f}, {0.800781f, 0.464844f, 0.117188f, 0.398438f},
- {0.921875f, 0.027344f, 0.257812f, 0.019531f}, {0.437500f, 0.191406f, 0.015625f, 0.441406f},
- {0.203125f, 0.433594f, 0.785156f, 0.195312f}, {0.996094f, 0.953125f, 0.632812f, 0.917969f},
- {0.257812f, 0.335938f, 0.144531f, 0.652344f}, {0.617188f, 0.703125f, 0.835938f, 0.101562f},
- {0.941406f, 0.929688f, 0.265625f, 0.597656f}, {0.109375f, 0.503906f, 0.097656f, 0.468750f},
- {0.195312f, 0.093750f, 0.957031f, 0.785156f}, {0.917969f, 0.714844f, 0.218750f, 0.906250f},
- {0.761719f, 0.242188f, 0.648438f, 0.281250f}, {0.367188f, 0.019531f, 0.789062f, 0.195312f},
- {0.707031f, 0.480469f, 0.253906f, 0.386719f}, {0.328125f, 0.828125f, 0.917969f, 0.757812f},
- {0.960938f, 0.941406f, 0.667969f, 0.242188f}, {0.742188f, 0.601562f, 0.601562f, 0.105469f},
- {0.347656f, 0.203125f, 0.496094f, 0.871094f}, {0.886719f, 0.687500f, 0.777344f, 0.152344f},
- {0.046875f, 0.886719f, 0.089844f, 0.316406f}, {0.222656f, 0.957031f, 0.316406f, 0.773438f},
- {0.625000f, 0.750000f, 0.527344f, 0.253906f}, {0.003906f, 0.277344f, 0.050781f, 0.382812f},
- {0.660156f, 0.937500f, 0.250000f, 0.328125f}, {0.808594f, 0.078125f, 0.734375f, 0.625000f},
- {0.437500f, 0.425781f, 0.460938f, 0.281250f}, {0.386719f, 0.738281f, 0.566406f, 0.394531f},
- {0.039062f, 0.050781f, 0.035156f, 0.175781f}, {0.523438f, 0.546875f, 0.175781f, 0.996094f},
- {0.925781f, 0.714844f, 0.957031f, 0.347656f}, {0.453125f, 0.843750f, 0.585938f, 0.039062f},
- {0.109375f, 0.617188f, 0.003906f, 0.296875f}, {0.269531f, 0.406250f, 0.750000f, 0.109375f},
- {0.390625f, 0.949219f, 0.933594f, 0.519531f}, {0.207031f, 0.222656f, 0.597656f, 0.238281f},
- {0.332031f, 0.378906f, 0.640625f, 0.820312f}, {0.785156f, 0.898438f, 0.914062f, 0.906250f},
- {0.054688f, 0.496094f, 0.523438f, 0.085938f}, {0.386719f, 0.417969f, 0.089844f, 0.777344f},
- {0.304688f, 0.562500f, 0.148438f, 0.031250f}, {0.929688f, 0.925781f, 0.773438f, 0.519531f},
- {0.414062f, 0.667969f, 0.468750f, 0.195312f}, {0.257812f, 0.738281f, 0.835938f, 0.800781f},
- {0.972656f, 0.332031f, 0.519531f, 0.003906f}, {0.078125f, 0.847656f, 0.062500f, 0.359375f},
- {0.882812f, 0.691406f, 0.566406f, 0.625000f}, {0.585938f, 0.148438f, 0.140625f, 0.777344f},
- {0.214844f, 0.941406f, 0.652344f, 0.476562f}, {0.757812f, 0.824219f, 0.308594f, 0.238281f},
- {0.402344f, 0.527344f, 0.113281f, 0.867188f}, {0.945312f, 0.585938f, 0.359375f, 0.937500f},
- {0.839844f, 0.277344f, 0.062500f, 0.621094f}, {0.632812f, 0.167969f, 0.550781f, 0.804688f},
- {0.222656f, 0.464844f, 0.894531f, 0.914062f}, {0.535156f, 0.882812f, 0.011719f, 0.566406f},
- {0.886719f, 0.039062f, 0.312500f, 0.085938f}, {0.496094f, 0.394531f, 0.449219f, 0.875000f},
- {0.085938f, 0.593750f, 0.097656f, 0.972656f}, {0.289062f, 0.343750f, 0.742188f, 0.011719f},
- {0.031250f, 0.460938f, 0.894531f, 0.589844f}, {0.777344f, 0.156250f, 0.488281f, 0.222656f},
- {0.468750f, 0.679688f, 0.835938f, 0.042969f}, {0.195312f, 0.281250f, 0.230469f, 0.992188f},
- {0.718750f, 0.589844f, 0.796875f, 0.109375f}, {0.492188f, 0.921875f, 0.667969f, 0.667969f},
- {0.097656f, 0.667969f, 0.390625f, 0.292969f}, {0.835938f, 0.871094f, 0.582031f, 0.871094f},
- {0.378906f, 0.097656f, 0.878906f, 0.128906f}, {0.753906f, 0.765625f, 0.078125f, 0.558594f},
- {0.503906f, 0.039062f, 0.937500f, 0.761719f}, {0.148438f, 0.207031f, 0.515625f, 0.425781f},
- {0.816406f, 0.421875f, 0.593750f, 0.996094f}, {0.390625f, 0.367188f, 0.335938f, 0.136719f},
- {0.550781f, 0.656250f, 0.441406f, 0.226562f}, {0.488281f, 0.144531f, 0.828125f, 0.523438f},
- {0.605469f, 0.593750f, 0.531250f, 0.734375f}, {0.035156f, 0.390625f, 0.347656f, 0.671875f},
- {0.464844f, 0.742188f, 0.019531f, 0.023438f}, {0.812500f, 0.265625f, 0.421875f, 0.492188f},
- {0.164062f, 0.359375f, 0.101562f, 0.605469f}, {0.507812f, 0.121094f, 0.171875f, 0.800781f},
- {0.605469f, 0.503906f, 0.933594f, 0.453125f}, {0.082031f, 0.250000f, 0.261719f, 0.203125f},
- {0.968750f, 0.550781f, 0.460938f, 0.570312f}, {0.718750f, 0.410156f, 0.628906f, 0.054688f},
- {0.835938f, 0.105469f, 0.710938f, 0.468750f}, {0.359375f, 0.457031f, 0.421875f, 0.894531f},
- {0.250000f, 0.875000f, 0.968750f, 0.015625f}, {0.996094f, 0.210938f, 0.074219f, 0.855469f},
- {0.179688f, 0.785156f, 0.304688f, 0.074219f}, {0.714844f, 0.855469f, 0.832031f, 0.804688f},
- {0.230469f, 0.296875f, 0.500000f, 0.488281f}, {0.859375f, 0.394531f, 0.253906f, 0.222656f},
- {0.324219f, 0.230469f, 0.640625f, 0.679688f}, {0.765625f, 0.511719f, 0.390625f, 0.820312f},
- {0.179688f, 0.269531f, 0.222656f, 0.726562f}, {0.843750f, 0.121094f, 0.128906f, 0.468750f},
- {0.609375f, 0.781250f, 0.859375f, 0.960938f}, {0.035156f, 0.531250f, 0.066406f, 0.335938f},
- {0.734375f, 0.855469f, 0.167969f, 0.578125f}, {0.261719f, 0.023438f, 0.324219f, 0.175781f},
- {0.867188f, 0.652344f, 0.875000f, 0.304688f}, {0.632812f, 0.746094f, 0.683594f, 0.371094f},
- {0.183594f, 0.214844f, 0.273438f, 0.851562f}, {0.773438f, 0.832031f, 0.921875f, 0.667969f},
- {0.589844f, 0.011719f, 0.703125f, 0.992188f}, {0.691406f, 0.433594f, 0.113281f, 0.300781f},
- {0.003906f, 0.246094f, 0.933594f, 0.457031f}, {0.511719f, 0.984375f, 0.320312f, 0.843750f},
- {0.300781f, 0.496094f, 0.886719f, 0.203125f}, {0.433594f, 0.578125f, 0.390625f, 0.539062f},
- {0.914062f, 0.648438f, 0.007812f, 0.121094f}, {0.085938f, 0.421875f, 0.867188f, 0.824219f},
- {0.683594f, 0.117188f, 0.753906f, 0.015625f}, {0.304688f, 0.750000f, 0.210938f, 0.460938f},
- {0.113281f, 0.355469f, 0.828125f, 0.113281f}, {0.367188f, 0.843750f, 0.472656f, 0.718750f},
- {0.988281f, 0.621094f, 0.167969f, 0.035156f}, {0.050781f, 0.308594f, 0.710938f, 0.363281f},
- {0.171875f, 0.144531f, 0.871094f, 0.667969f}, {0.929688f, 0.515625f, 0.648438f, 0.265625f},
- {0.363281f, 0.781250f, 0.542969f, 0.183594f}, {0.859375f, 0.203125f, 0.226562f, 0.335938f},
- {0.609375f, 0.878906f, 0.574219f, 0.496094f}, {0.386719f, 0.621094f, 0.003906f, 0.800781f},
- {0.644531f, 0.378906f, 0.628906f, 0.625000f}, {0.871094f, 0.757812f, 0.437500f, 0.324219f},
- {0.238281f, 0.082031f, 0.160156f, 0.750000f}, {0.355469f, 0.535156f, 0.984375f, 0.519531f},
- {0.691406f, 0.308594f, 0.734375f, 0.960938f}, {0.167969f, 0.722656f, 0.480469f, 0.628906f},
- {0.550781f, 0.390625f, 0.179688f, 0.792969f}, {0.070312f, 0.511719f, 0.441406f, 0.347656f},
- {0.906250f, 0.843750f, 0.363281f, 0.023438f}, {0.589844f, 0.636719f, 0.203125f, 0.289062f},
- {0.449219f, 0.070312f, 0.007812f, 0.695312f}, {0.238281f, 0.566406f, 0.746094f, 0.382812f},
- {0.683594f, 0.953125f, 0.492188f, 0.832031f}, {0.855469f, 0.324219f, 0.062500f, 0.328125f},
- {0.093750f, 0.812500f, 0.156250f, 0.093750f}, {0.253906f, 0.917969f, 0.609375f, 0.929688f},
- {0.925781f, 0.550781f, 0.710938f, 0.812500f}, {0.574219f, 0.082031f, 0.843750f, 0.304688f},
- {0.109375f, 0.894531f, 0.308594f, 0.066406f}, {0.234375f, 0.718750f, 0.550781f, 0.941406f},
- {0.683594f, 0.851562f, 0.699219f, 0.371094f}, {0.410156f, 0.773438f, 0.402344f, 0.636719f},
- {0.308594f, 0.335938f, 0.136719f, 0.843750f}, {0.519531f, 0.175781f, 0.820312f, 0.687500f},
- {0.109375f, 0.820312f, 0.292969f, 0.527344f}, {0.457031f, 0.539062f, 0.183594f, 0.191406f},
- {0.742188f, 0.617188f, 0.847656f, 0.750000f}, {0.539062f, 0.363281f, 0.617188f, 0.566406f},
- {0.085938f, 0.500000f, 0.140625f, 0.449219f}, {0.890625f, 0.578125f, 0.937500f, 0.699219f},
- {0.632812f, 0.113281f, 0.664062f, 0.917969f}, {0.128906f, 0.660156f, 0.105469f, 0.582031f},
- {0.375000f, 0.933594f, 0.812500f, 0.410156f}, {0.652344f, 0.160156f, 0.882812f, 0.132812f},
- {0.503906f, 0.820312f, 0.691406f, 0.253906f}, {0.941406f, 0.457031f, 0.300781f, 0.851562f},
- {0.550781f, 0.734375f, 0.546875f, 0.656250f}, {0.902344f, 0.175781f, 0.488281f, 0.000000f},
- {0.437500f, 0.593750f, 0.730469f, 0.753906f}, {0.125000f, 0.261719f, 0.785156f, 0.437500f},
- {0.570312f, 0.816406f, 0.203125f, 0.632812f}, {0.500000f, 0.074219f, 0.417969f, 0.949219f},
- {0.031250f, 0.351562f, 0.632812f, 0.472656f}, {0.839844f, 0.601562f, 0.343750f, 0.152344f},
- {0.136719f, 0.128906f, 0.187500f, 0.753906f}, {0.476562f, 0.886719f, 0.597656f, 0.101562f},
- {0.371094f, 0.550781f, 0.265625f, 0.578125f}, {0.792969f, 0.187500f, 0.722656f, 0.925781f},
- {0.164062f, 0.089844f, 0.203125f, 0.070312f}, {0.660156f, 0.035156f, 0.617188f, 0.417969f},
- {0.359375f, 0.324219f, 0.476562f, 0.671875f}, {0.539062f, 0.871094f, 0.542969f, 0.300781f},
- {0.812500f, 0.195312f, 0.925781f, 0.750000f}, {0.171875f, 0.675781f, 0.433594f, 0.394531f},
- {0.492188f, 0.066406f, 0.597656f, 0.210938f}, {0.710938f, 0.507812f, 0.675781f, 0.281250f},
- {0.574219f, 0.765625f, 0.964844f, 0.851562f}, {0.808594f, 0.226562f, 0.250000f, 0.468750f},
- {0.316406f, 0.925781f, 0.367188f, 0.757812f}, {0.675781f, 0.656250f, 0.816406f, 0.429688f},
- {0.214844f, 0.265625f, 0.062500f, 0.539062f}, {0.457031f, 0.953125f, 0.937500f, 0.722656f},
- {0.972656f, 0.101562f, 0.410156f, 0.132812f}, {0.070312f, 0.800781f, 0.320312f, 0.929688f},
- {0.320312f, 0.500000f, 0.769531f, 0.261719f}, {0.527344f, 0.218750f, 0.085938f, 0.472656f},
- {0.015625f, 0.851562f, 0.550781f, 0.820312f}, {0.960938f, 0.359375f, 0.285156f, 0.210938f},
- {0.609375f, 0.144531f, 0.062500f, 0.371094f}, {0.292969f, 0.812500f, 0.925781f, 0.058594f},
- {0.664062f, 0.226562f, 0.308594f, 0.242188f}, {0.863281f, 0.582031f, 0.671875f, 0.488281f},
- {0.332031f, 0.292969f, 0.765625f, 0.945312f}, {0.023438f, 0.910156f, 0.988281f, 0.183594f},
- {0.726562f, 0.734375f, 0.621094f, 0.531250f}, {0.968750f, 0.261719f, 0.898438f, 0.902344f},
- {0.058594f, 0.851562f, 0.675781f, 0.046875f}, {0.320312f, 0.187500f, 0.292969f, 0.609375f},
- {0.781250f, 0.449219f, 0.949219f, 0.167969f}, {0.410156f, 0.054688f, 0.882812f, 0.441406f},
- {0.667969f, 0.210938f, 0.207031f, 0.542969f}, {0.296875f, 0.667969f, 0.468750f, 0.855469f},
- {0.871094f, 0.417969f, 0.980469f, 0.148438f}, {0.761719f, 0.164062f, 0.765625f, 0.699219f},
- {0.914062f, 0.460938f, 0.035156f, 0.511719f}, {0.148438f, 0.027344f, 0.871094f, 0.007812f},
- {0.800781f, 0.929688f, 0.210938f, 0.988281f}, {0.199219f, 0.675781f, 0.945312f, 0.128906f},
- {0.574219f, 0.230469f, 0.027344f, 0.796875f}, {0.875000f, 0.980469f, 0.781250f, 0.648438f},
- {0.140625f, 0.144531f, 0.542969f, 0.968750f}, {0.609375f, 0.003906f, 0.359375f, 0.238281f},
- {0.335938f, 0.683594f, 0.222656f, 0.148438f}, {0.476562f, 0.171875f, 0.761719f, 0.308594f},
- {0.757812f, 0.902344f, 0.402344f, 0.105469f}, {0.562500f, 0.445312f, 0.324219f, 0.757812f},
- {0.972656f, 0.039062f, 0.527344f, 0.050781f}, {0.019531f, 0.570312f, 0.054688f, 0.933594f},
- {0.296875f, 0.964844f, 0.457031f, 0.562500f}, {0.695312f, 0.351562f, 0.984375f, 0.183594f},
- {0.078125f, 0.636719f, 0.800781f, 0.382812f}, {0.347656f, 0.082031f, 0.402344f, 0.093750f},
- {0.804688f, 0.988281f, 0.257812f, 0.921875f}, {0.191406f, 0.316406f, 0.101562f, 0.535156f},
- {0.707031f, 0.453125f, 0.570312f, 0.722656f}, {0.937500f, 0.160156f, 0.996094f, 0.050781f},
- {0.363281f, 0.960938f, 0.023438f, 0.230469f}, {0.671875f, 0.480469f, 0.496094f, 0.414062f},
- {0.320312f, 0.296875f, 0.859375f, 0.554688f}, {0.949219f, 0.644531f, 0.386719f, 0.261719f},
- {0.867188f, 0.757812f, 0.035156f, 0.648438f}, {0.226562f, 0.359375f, 0.460938f, 0.726562f},
- {0.714844f, 0.804688f, 0.816406f, 0.328125f}, {0.996094f, 0.914062f, 0.980469f, 0.886719f},
- {0.023438f, 0.257812f, 0.250000f, 0.976562f}, {0.265625f, 0.773438f, 0.789062f, 0.171875f},
- {0.605469f, 0.472656f, 0.046875f, 0.636719f}, {0.449219f, 0.945312f, 0.273438f, 0.957031f},
- {0.902344f, 0.250000f, 0.128906f, 0.582031f}, {0.000000f, 0.906250f, 0.332031f, 0.519531f},
- {0.273438f, 0.101562f, 0.042969f, 0.175781f}, {0.421875f, 0.386719f, 0.515625f, 0.988281f},
- {0.742188f, 0.820312f, 0.605469f, 0.605469f}, {0.589844f, 0.453125f, 0.132812f, 0.066406f},
- {0.128906f, 0.066406f, 0.285156f, 0.910156f}, {0.800781f, 0.550781f, 0.714844f, 0.835938f},
- {0.699219f, 0.421875f, 0.855469f, 0.398438f}, {0.175781f, 0.304688f, 0.175781f, 0.664062f},
- {0.738281f, 0.039062f, 0.683594f, 0.074219f}, {0.832031f, 0.984375f, 0.898438f, 0.867188f},
- {0.574219f, 0.437500f, 0.363281f, 0.144531f}, {0.421875f, 0.640625f, 0.859375f, 0.597656f},
- {0.898438f, 0.937500f, 0.640625f, 0.906250f}, {0.125000f, 0.484375f, 0.214844f, 0.449219f},
- {0.472656f, 0.000000f, 0.808594f, 0.675781f}, {0.218750f, 0.960938f, 0.109375f, 0.847656f},
- {0.425781f, 0.167969f, 0.539062f, 0.585938f}, {0.800781f, 0.460938f, 0.257812f, 0.734375f},
- {0.289062f, 0.125000f, 0.402344f, 0.070312f}, {0.179688f, 0.777344f, 0.125000f, 0.648438f},
- {0.890625f, 0.011719f, 0.187500f, 0.480469f}, {0.628906f, 0.492188f, 0.558594f, 0.761719f},
- {0.144531f, 0.691406f, 0.769531f, 0.957031f}, {0.957031f, 0.765625f, 0.378906f, 0.351562f},
- {0.187500f, 0.292969f, 0.074219f, 0.222656f}, {0.496094f, 0.957031f, 0.589844f, 0.652344f},
- {0.378906f, 0.597656f, 0.128906f, 0.410156f}, {0.007812f, 0.316406f, 0.269531f, 0.273438f},
- {0.449219f, 0.644531f, 0.367188f, 0.777344f}, {0.542969f, 0.093750f, 0.648438f, 0.234375f},
- {0.660156f, 0.582031f, 0.503906f, 0.335938f}, {0.941406f, 0.382812f, 0.585938f, 0.421875f},
- {0.031250f, 0.042969f, 0.117188f, 0.285156f}, {0.414062f, 0.304688f, 0.679688f, 0.082031f},
- {0.781250f, 0.722656f, 0.484375f, 0.351562f}, {0.277344f, 0.800781f, 0.875000f, 0.496094f},
- {0.914062f, 0.265625f, 0.007812f, 0.816406f}, {0.406250f, 0.968750f, 0.445312f, 0.628906f},
- {0.066406f, 0.339844f, 0.710938f, 0.375000f}, {0.261719f, 0.746094f, 0.968750f, 0.878906f},
- {0.203125f, 0.800781f, 0.160156f, 0.511719f}, {0.812500f, 0.312500f, 0.613281f, 0.328125f},
- {0.414062f, 0.691406f, 0.359375f, 0.445312f}, {0.148438f, 0.007812f, 0.179688f, 0.625000f},
- {0.238281f, 0.226562f, 0.027344f, 0.785156f}, {0.476562f, 0.507812f, 0.664062f, 0.875000f},
- {0.648438f, 0.390625f, 0.945312f, 0.210938f}, {0.972656f, 0.710938f, 0.367188f, 0.269531f},
- {0.285156f, 0.558594f, 0.464844f, 0.128906f}, {0.082031f, 0.679688f, 0.816406f, 0.832031f},
- {0.457031f, 0.769531f, 0.078125f, 0.601562f}, {0.242188f, 0.867188f, 0.738281f, 0.898438f},
- {0.750000f, 0.394531f, 0.554688f, 0.019531f}, {0.101562f, 0.042969f, 0.968750f, 0.367188f},
- {0.621094f, 0.957031f, 0.769531f, 0.820312f}, {0.046875f, 0.449219f, 0.660156f, 0.492188f},
- {0.562500f, 0.613281f, 0.089844f, 0.234375f}, {0.480469f, 0.710938f, 0.335938f, 0.027344f},
- {0.851562f, 0.402344f, 0.156250f, 0.566406f}, {0.144531f, 0.554688f, 0.691406f, 0.507812f},
- {0.957031f, 0.023438f, 0.378906f, 0.355469f}, {0.750000f, 0.605469f, 0.640625f, 0.054688f},
- {0.207031f, 0.722656f, 0.941406f, 0.878906f}, {0.644531f, 0.429688f, 0.847656f, 0.660156f},
- {0.847656f, 0.558594f, 0.773438f, 0.328125f}, {0.089844f, 0.691406f, 0.425781f, 0.125000f},
- {0.480469f, 0.000000f, 0.195312f, 0.816406f}, {0.960938f, 0.332031f, 0.992188f, 0.226562f},
- {0.019531f, 0.750000f, 0.457031f, 0.304688f}, {0.546875f, 0.175781f, 0.503906f, 0.027344f},
- {0.253906f, 0.703125f, 0.046875f, 0.566406f}, {0.433594f, 0.898438f, 0.601562f, 0.199219f},
- {0.925781f, 0.582031f, 0.972656f, 0.359375f}, {0.136719f, 0.687500f, 0.250000f, 0.699219f},
- {0.269531f, 0.183594f, 0.468750f, 0.417969f}, {0.792969f, 0.066406f, 0.031250f, 0.003906f},
- {0.050781f, 0.566406f, 0.578125f, 0.718750f}, {0.710938f, 0.273438f, 0.414062f, 0.093750f},
- {0.769531f, 0.695312f, 0.500000f, 0.300781f}, {0.976562f, 0.792969f, 0.867188f, 0.152344f},
- {0.093750f, 0.613281f, 0.054688f, 0.410156f}, {0.652344f, 0.339844f, 0.722656f, 0.808594f},
- {0.570312f, 0.527344f, 0.804688f, 0.214844f}, {0.480469f, 0.398438f, 0.324219f, 0.312500f},
- {0.371094f, 0.996094f, 0.851562f, 0.867188f}, {0.531250f, 0.621094f, 0.429688f, 0.250000f},
- {0.441406f, 0.117188f, 0.039062f, 0.574219f}, {0.718750f, 0.355469f, 0.250000f, 0.703125f},
- {0.843750f, 0.867188f, 0.515625f, 0.050781f}, {0.078125f, 0.511719f, 0.816406f, 0.976562f},
- {0.621094f, 0.000000f, 0.667969f, 0.589844f}, {0.992188f, 0.800781f, 0.441406f, 0.882812f},
- {0.277344f, 0.988281f, 0.898438f, 0.093750f}, {0.058594f, 0.277344f, 0.070312f, 0.722656f},
- {0.351562f, 0.867188f, 0.746094f, 0.914062f}, {0.246094f, 0.507812f, 0.343750f, 0.601562f},
- {0.707031f, 0.433594f, 0.996094f, 0.875000f}, {0.972656f, 0.640625f, 0.394531f, 0.406250f},
- {0.664062f, 0.894531f, 0.253906f, 0.710938f}, {0.195312f, 0.406250f, 0.640625f, 0.906250f},
- {0.015625f, 0.480469f, 0.921875f, 0.035156f}, {0.800781f, 0.070312f, 0.582031f, 0.953125f},
- {0.679688f, 0.628906f, 0.062500f, 0.199219f}, {0.855469f, 0.218750f, 0.273438f, 0.265625f},
- {0.449219f, 0.492188f, 0.792969f, 0.664062f}, {0.714844f, 0.101562f, 0.906250f, 0.808594f},
- {0.578125f, 0.894531f, 0.714844f, 0.980469f}, {0.957031f, 0.421875f, 0.246094f, 0.058594f},
- {0.757812f, 0.851562f, 0.578125f, 0.304688f}, {0.886719f, 0.789062f, 0.839844f, 0.488281f},
- {0.000000f, 0.925781f, 0.140625f, 0.679688f}, {0.523438f, 0.121094f, 0.617188f, 0.355469f},
- {0.406250f, 0.886719f, 0.710938f, 0.984375f}, {0.769531f, 0.035156f, 0.285156f, 0.503906f},
- {0.890625f, 0.242188f, 0.906250f, 0.292969f}, {0.574219f, 0.531250f, 0.242188f, 0.703125f},
- {0.171875f, 0.179688f, 0.121094f, 0.769531f}, {0.527344f, 0.718750f, 0.308594f, 0.968750f},
- {0.433594f, 0.226562f, 0.171875f, 0.171875f}, {0.281250f, 0.105469f, 0.523438f, 0.125000f},
- {0.761719f, 0.285156f, 0.417969f, 0.402344f}, {0.328125f, 0.515625f, 0.574219f, 0.691406f},
- {0.406250f, 0.164062f, 0.910156f, 0.792969f}, {0.652344f, 0.996094f, 0.101562f, 0.109375f},
- {0.062500f, 0.121094f, 0.507812f, 0.832031f}, {0.320312f, 0.378906f, 0.742188f, 0.242188f},
- {0.390625f, 0.316406f, 0.175781f, 0.703125f}, {0.527344f, 0.156250f, 0.558594f, 0.417969f},
- {0.933594f, 0.972656f, 0.085938f, 0.000000f}, {0.160156f, 0.199219f, 0.722656f, 0.734375f},
- {0.242188f, 0.589844f, 0.898438f, 0.378906f}, {0.386719f, 0.941406f, 0.664062f, 0.503906f},
- {0.652344f, 0.851562f, 0.339844f, 0.695312f}, {0.910156f, 0.628906f, 0.765625f, 0.953125f},
- {0.343750f, 0.367188f, 0.218750f, 0.460938f}, {0.503906f, 0.136719f, 0.386719f, 0.769531f},
- {0.078125f, 0.816406f, 0.117188f, 0.976562f}, {0.632812f, 0.257812f, 0.523438f, 0.511719f},
- {0.378906f, 0.335938f, 0.722656f, 0.281250f}, {0.203125f, 0.769531f, 0.789062f, 0.558594f},
- {0.511719f, 0.882812f, 0.144531f, 0.953125f}, {0.347656f, 0.117188f, 0.695312f, 0.769531f},
- {0.253906f, 0.371094f, 0.964844f, 0.523438f}, {0.542969f, 0.425781f, 0.355469f, 0.878906f},
- {0.382812f, 0.082031f, 0.167969f, 0.109375f}, {0.910156f, 0.894531f, 0.582031f, 0.363281f},
- {0.132812f, 0.707031f, 0.472656f, 0.980469f}, {0.765625f, 0.210938f, 0.023438f, 0.445312f},
- {0.000000f, 0.304688f, 0.976562f, 0.148438f}, {0.820312f, 0.542969f, 0.695312f, 0.023438f},
- {0.230469f, 0.925781f, 0.625000f, 0.398438f}, {0.042969f, 0.429688f, 0.902344f, 0.792969f},
- {0.554688f, 0.152344f, 0.738281f, 0.117188f}, {0.339844f, 0.730469f, 0.320312f, 0.480469f},
- {0.804688f, 0.234375f, 0.960938f, 0.187500f}, {0.714844f, 0.375000f, 0.183594f, 0.347656f},
- {0.578125f, 0.492188f, 0.539062f, 0.457031f}, {0.859375f, 0.203125f, 0.230469f, 0.550781f},
- {0.769531f, 0.730469f, 0.832031f, 0.175781f}, {0.484375f, 0.789062f, 0.453125f, 0.031250f},
- {0.308594f, 0.953125f, 0.718750f, 0.746094f}, {0.066406f, 0.554688f, 0.890625f, 0.214844f},
- {0.378906f, 0.105469f, 0.085938f, 0.121094f}, {0.503906f, 0.195312f, 0.316406f, 0.605469f},
- {0.949219f, 0.867188f, 0.167969f, 0.429688f}, {0.546875f, 0.531250f, 0.824219f, 0.542969f},
- {0.316406f, 0.832031f, 0.207031f, 0.718750f}, {0.117188f, 0.390625f, 0.554688f, 0.460938f},
- {0.515625f, 0.152344f, 0.492188f, 0.011719f}, {0.906250f, 0.597656f, 0.117188f, 0.156250f},
- {0.046875f, 0.261719f, 0.417969f, 0.234375f}, {0.625000f, 0.542969f, 0.773438f, 0.707031f},
- {0.386719f, 0.667969f, 0.476562f, 0.121094f}, {0.308594f, 0.062500f, 0.320312f, 0.593750f},
- {0.167969f, 0.285156f, 0.886719f, 0.417969f}, {0.601562f, 0.199219f, 0.042969f, 0.777344f},
- {0.835938f, 0.425781f, 0.187500f, 0.082031f}, {0.214844f, 0.343750f, 0.539062f, 0.648438f},
- {0.023438f, 0.632812f, 0.398438f, 0.390625f}, {0.640625f, 0.093750f, 0.671875f, 0.195312f},
- {0.984375f, 0.820312f, 0.445312f, 0.074219f}, {0.382812f, 0.921875f, 0.617188f, 0.449219f},
- {0.910156f, 0.492188f, 0.828125f, 0.531250f}, {0.832031f, 0.683594f, 0.941406f, 0.859375f},
- {0.125000f, 0.859375f, 0.046875f, 0.941406f}, {0.929688f, 0.058594f, 0.750000f, 0.617188f},
- {0.218750f, 0.816406f, 0.835938f, 0.273438f}, {0.730469f, 0.222656f, 0.296875f, 0.441406f},
- {0.574219f, 0.652344f, 0.441406f, 0.921875f}, {0.832031f, 0.886719f, 0.878906f, 0.484375f},
- {0.117188f, 0.835938f, 0.226562f, 0.085938f}, {0.773438f, 0.050781f, 0.476562f, 0.781250f},
- {0.343750f, 0.789062f, 0.292969f, 0.929688f}, {0.695312f, 0.468750f, 0.382812f, 0.535156f},
- {0.882812f, 0.281250f, 0.019531f, 0.898438f}, {0.785156f, 0.125000f, 0.804688f, 0.160156f},
- {0.304688f, 0.507812f, 0.101562f, 0.640625f}, {0.093750f, 0.230469f, 0.546875f, 0.105469f},
- {0.839844f, 0.968750f, 0.929688f, 0.253906f}, {0.593750f, 0.476562f, 0.652344f, 0.605469f},
- {0.773438f, 0.011719f, 0.816406f, 0.046875f}, {0.976562f, 0.527344f, 0.304688f, 0.890625f},
- {0.464844f, 0.941406f, 0.187500f, 0.183594f}, {0.660156f, 0.460938f, 0.921875f, 0.804688f},
- {0.875000f, 0.718750f, 0.328125f, 0.335938f}, {0.933594f, 0.175781f, 0.246094f, 0.214844f},
- {0.011719f, 0.636719f, 0.000000f, 0.640625f}, {0.628906f, 0.980469f, 0.632812f, 0.925781f},
- {0.187500f, 0.246094f, 0.281250f, 0.261719f}, {0.835938f, 0.046875f, 0.921875f, 0.617188f},
- {0.273438f, 0.832031f, 0.660156f, 0.542969f}, {0.691406f, 0.648438f, 0.226562f, 0.726562f},
- {0.988281f, 0.882812f, 0.527344f, 0.675781f}, {0.597656f, 0.039062f, 0.351562f, 0.921875f},
- {0.304688f, 0.253906f, 0.152344f, 0.515625f}, {0.902344f, 0.804688f, 0.484375f, 0.277344f},
- {0.656250f, 0.632812f, 0.113281f, 0.898438f}, {0.257812f, 0.078125f, 0.410156f, 0.742188f},
- {0.132812f, 0.566406f, 0.000000f, 0.828125f}, {0.210938f, 0.914062f, 0.781250f, 0.042969f},
- {0.394531f, 0.675781f, 0.613281f, 0.949219f}, {0.171875f, 0.117188f, 0.929688f, 0.664062f},
- {0.910156f, 0.351562f, 0.300781f, 0.808594f}, {0.605469f, 0.160156f, 0.160156f, 0.503906f},
- {0.214844f, 0.695312f, 0.597656f, 0.980469f}, {0.550781f, 0.246094f, 0.207031f, 0.562500f},
- {0.847656f, 0.335938f, 0.789062f, 0.851562f}, {0.152344f, 0.601562f, 0.519531f, 0.277344f},
- {0.722656f, 0.738281f, 0.742188f, 0.171875f}, {0.226562f, 0.296875f, 0.375000f, 0.777344f},
- {0.625000f, 0.031250f, 0.683594f, 0.078125f}, {0.984375f, 0.917969f, 0.867188f, 0.851562f},
- {0.171875f, 0.710938f, 0.339844f, 0.585938f}, {0.351562f, 0.996094f, 0.011719f, 0.746094f},
- {0.277344f, 0.765625f, 0.636719f, 0.406250f}, {0.101562f, 0.183594f, 0.964844f, 0.890625f},
- {0.539062f, 0.332031f, 0.089844f, 0.542969f}, {0.847656f, 0.472656f, 0.218750f, 0.960938f},
- {0.722656f, 0.621094f, 0.515625f, 0.015625f}, {0.109375f, 0.750000f, 0.750000f, 0.859375f},
- {0.355469f, 0.835938f, 0.347656f, 0.167969f}, {0.679688f, 0.976562f, 0.949219f, 0.562500f},
- {0.496094f, 0.468750f, 0.148438f, 0.812500f}, {0.292969f, 0.281250f, 0.789062f, 0.945312f},
- {0.789062f, 0.585938f, 0.882812f, 0.335938f}, {0.062500f, 0.324219f, 0.007812f, 0.679688f},
- {0.695312f, 0.410156f, 0.214844f, 0.597656f}, {0.191406f, 0.140625f, 0.371094f, 0.292969f},
- {0.636719f, 0.933594f, 0.261719f, 0.054688f}, {0.078125f, 0.351562f, 0.675781f, 0.753906f},
- {0.515625f, 0.585938f, 0.191406f, 0.195312f}, {0.886719f, 0.742188f, 0.625000f, 0.332031f},
- {0.441406f, 0.457031f, 0.988281f, 0.726562f}, {0.253906f, 0.265625f, 0.015625f, 0.156250f},
- {0.980469f, 0.511719f, 0.355469f, 0.570312f}, {0.031250f, 0.628906f, 0.824219f, 0.296875f},
- {0.617188f, 0.347656f, 0.949219f, 0.203125f}, {0.566406f, 0.875000f, 0.636719f, 0.621094f},
- {0.058594f, 0.664062f, 0.246094f, 0.257812f}, {0.515625f, 0.734375f, 0.574219f, 0.437500f},
- {0.183594f, 0.406250f, 0.167969f, 0.796875f}, {0.414062f, 0.062500f, 0.273438f, 0.343750f},
- {0.703125f, 0.292969f, 0.843750f, 0.855469f}, {0.222656f, 0.781250f, 0.011719f, 0.152344f},
- {0.023438f, 0.648438f, 0.437500f, 0.312500f}, {0.292969f, 0.382812f, 0.582031f, 0.738281f},
- {0.726562f, 0.851562f, 0.074219f, 0.628906f}, {0.066406f, 0.050781f, 0.406250f, 0.121094f},
- {0.171875f, 0.300781f, 0.843750f, 0.464844f}, {0.585938f, 0.542969f, 0.539062f, 0.386719f},
- {0.804688f, 0.839844f, 0.750000f, 0.039062f}, {0.453125f, 0.500000f, 0.882812f, 0.707031f},
- {0.722656f, 0.757812f, 0.445312f, 0.484375f}, {0.066406f, 0.578125f, 0.382812f, 0.007812f},
- {0.429688f, 0.449219f, 0.835938f, 0.789062f}, {0.347656f, 0.109375f, 0.085938f, 0.089844f},
- {0.203125f, 0.378906f, 0.781250f, 0.343750f}, {0.085938f, 0.742188f, 0.269531f, 0.835938f},
- {0.742188f, 0.585938f, 0.929688f, 0.179688f}, {0.394531f, 0.191406f, 0.839844f, 0.632812f},
- {0.964844f, 0.960938f, 0.210938f, 0.328125f}, {0.515625f, 0.464844f, 0.570312f, 0.539062f},
- {0.460938f, 0.828125f, 0.710938f, 0.226562f}, {0.941406f, 0.042969f, 0.351562f, 0.613281f},
- {0.671875f, 0.425781f, 0.085938f, 0.386719f}, {0.085938f, 0.882812f, 0.484375f, 0.128906f},
- {0.437500f, 0.617188f, 0.660156f, 0.253906f}, {0.125000f, 0.058594f, 0.015625f, 0.324219f},
- {0.929688f, 0.468750f, 0.550781f, 0.632812f}, {0.792969f, 0.824219f, 0.425781f, 0.468750f},
- {0.636719f, 0.023438f, 0.949219f, 0.007812f}, {0.335938f, 0.937500f, 0.046875f, 0.667969f},
- {0.882812f, 0.437500f, 0.468750f, 0.339844f}, {0.437500f, 0.125000f, 0.976562f, 0.976562f},
- {0.085938f, 0.671875f, 0.082031f, 0.394531f}, {0.398438f, 0.562500f, 0.433594f, 0.308594f},
- {0.773438f, 0.351562f, 0.937500f, 0.925781f}, {0.664062f, 0.453125f, 0.742188f, 0.523438f},
- {0.871094f, 0.046875f, 0.289062f, 0.351562f}, {0.792969f, 0.871094f, 0.847656f, 0.832031f},
- {0.195312f, 0.132812f, 0.378906f, 0.261719f}, {0.425781f, 0.964844f, 0.687500f, 0.187500f},
- {0.996094f, 0.570312f, 0.933594f, 0.734375f}, {0.253906f, 0.011719f, 0.429688f, 0.316406f},
- {0.906250f, 0.519531f, 0.820312f, 0.457031f}, {0.140625f, 0.132812f, 0.644531f, 0.250000f},
- {0.820312f, 0.667969f, 0.074219f, 0.035156f}, {0.089844f, 0.902344f, 0.500000f, 0.488281f},
- {0.449219f, 0.781250f, 0.324219f, 0.871094f}, {0.339844f, 0.000000f, 0.562500f, 0.230469f},
- {0.246094f, 0.546875f, 0.695312f, 0.101562f}, {0.578125f, 0.644531f, 0.898438f, 0.804688f},
- {0.460938f, 0.757812f, 0.496094f, 0.367188f}, {0.796875f, 0.437500f, 0.117188f, 0.476562f},
- {0.359375f, 0.304688f, 0.347656f, 0.984375f}, {0.015625f, 0.906250f, 0.542969f, 0.015625f},
- {0.175781f, 0.007812f, 0.074219f, 0.605469f}, {0.660156f, 0.703125f, 0.718750f, 0.882812f},
- {0.496094f, 0.183594f, 0.582031f, 0.382812f}, {0.410156f, 0.761719f, 0.687500f, 0.968750f},
- {0.199219f, 0.093750f, 0.117188f, 0.460938f}, {0.285156f, 0.222656f, 0.519531f, 0.070312f},
- {0.445312f, 0.539062f, 0.855469f, 0.859375f}, {0.746094f, 0.023438f, 0.445312f, 0.039062f},
- {0.996094f, 0.828125f, 0.957031f, 0.558594f}, {0.625000f, 0.914062f, 0.714844f, 0.707031f},
- {0.890625f, 0.574219f, 0.484375f, 0.917969f}, {0.144531f, 0.089844f, 0.355469f, 0.527344f},
- {0.367188f, 0.710938f, 0.894531f, 0.390625f}, {0.906250f, 0.160156f, 0.746094f, 0.441406f},
- {0.531250f, 0.218750f, 0.671875f, 0.062500f}, {0.828125f, 0.605469f, 0.957031f, 0.851562f},
- {0.324219f, 0.414062f, 0.617188f, 0.992188f}, {0.406250f, 0.917969f, 0.113281f, 0.601562f},
- {0.125000f, 0.023438f, 0.480469f, 0.160156f}, {0.296875f, 0.328125f, 0.199219f, 0.828125f},
- {0.953125f, 0.191406f, 0.070312f, 0.429688f}, {0.527344f, 0.941406f, 0.730469f, 0.199219f},
- {0.609375f, 0.289062f, 0.140625f, 0.894531f}, {0.929688f, 0.160156f, 0.949219f, 0.285156f},
- {0.503906f, 0.812500f, 0.601562f, 0.582031f}, {0.863281f, 0.484375f, 0.421875f, 0.464844f},
- {0.457031f, 0.082031f, 0.058594f, 0.078125f}, {0.164062f, 0.398438f, 0.644531f, 0.968750f},
- {0.097656f, 0.281250f, 0.300781f, 0.425781f}, {0.781250f, 0.695312f, 0.945312f, 0.003906f},
- {0.015625f, 0.328125f, 0.871094f, 0.695312f}, {0.851562f, 0.179688f, 0.257812f, 0.292969f},
- {0.531250f, 0.777344f, 0.144531f, 0.765625f}, {0.328125f, 0.527344f, 0.859375f, 0.863281f},
- {0.824219f, 0.296875f, 0.375000f, 0.437500f}, {0.726562f, 0.917969f, 0.808594f, 0.062500f},
- {0.273438f, 0.394531f, 0.109375f, 0.164062f}, {0.417969f, 0.515625f, 0.332031f, 0.378906f},
- {0.097656f, 0.761719f, 0.695312f, 0.792969f}, {0.472656f, 0.652344f, 0.609375f, 0.898438f},
- {0.039062f, 0.171875f, 0.277344f, 0.511719f}, {0.261719f, 0.976562f, 0.136719f, 0.695312f},
- {0.828125f, 0.238281f, 0.648438f, 0.140625f}, {0.585938f, 0.792969f, 0.234375f, 0.632812f},
- {0.007812f, 0.082031f, 0.593750f, 0.218750f}, {0.492188f, 0.281250f, 0.152344f, 0.097656f},
- {0.234375f, 0.636719f, 0.199219f, 0.652344f}, {0.457031f, 0.402344f, 0.542969f, 0.035156f},
- {0.691406f, 0.714844f, 0.050781f, 0.476562f}, {0.054688f, 0.808594f, 0.625000f, 0.382812f},
- {0.628906f, 0.371094f, 0.125000f, 0.617188f}, {0.480469f, 0.253906f, 0.261719f, 0.933594f},
- {0.558594f, 0.699219f, 0.015625f, 0.667969f}, {0.414062f, 0.394531f, 0.585938f, 0.902344f},
- {0.964844f, 0.214844f, 0.230469f, 0.746094f}, {0.726562f, 0.070312f, 0.968750f, 0.136719f},
- {0.609375f, 0.714844f, 0.742188f, 0.628906f}, {0.871094f, 0.171875f, 0.109375f, 0.425781f},
- {0.035156f, 0.988281f, 0.421875f, 0.917969f}, {0.742188f, 0.253906f, 0.781250f, 0.710938f},
- {0.972656f, 0.039062f, 0.605469f, 0.554688f}, {0.285156f, 0.191406f, 0.968750f, 0.140625f},
- {0.554688f, 0.531250f, 0.851562f, 0.656250f}, {0.949219f, 0.101562f, 0.406250f, 0.828125f},
- {0.710938f, 0.394531f, 0.242188f, 0.507812f}, {0.312500f, 0.953125f, 0.796875f, 0.265625f},
- {0.816406f, 0.566406f, 0.156250f, 0.683594f}, {0.902344f, 0.433594f, 0.425781f, 0.121094f},
- {0.726562f, 0.921875f, 0.210938f, 0.820312f}, {0.953125f, 0.386719f, 0.054688f, 0.726562f},
- {0.132812f, 0.988281f, 0.761719f, 0.320312f}, {0.847656f, 0.167969f, 0.320312f, 0.996094f},
- {0.007812f, 0.445312f, 0.398438f, 0.406250f}, {0.261719f, 0.621094f, 0.632812f, 0.210938f},
- {0.472656f, 0.343750f, 0.082031f, 0.011719f}, {0.804688f, 0.882812f, 0.207031f, 0.656250f},
- {0.574219f, 0.429688f, 0.140625f, 0.816406f}, {0.429688f, 0.988281f, 0.265625f, 0.937500f},
- {0.246094f, 0.757812f, 0.488281f, 0.242188f}, {0.109375f, 0.109375f, 0.042969f, 0.675781f},
- {0.691406f, 0.675781f, 0.367188f, 0.507812f}, {0.992188f, 0.234375f, 0.292969f, 0.269531f},
- {0.500000f, 0.730469f, 0.808594f, 0.753906f}, {0.761719f, 0.128906f, 0.984375f, 0.312500f},
- {0.234375f, 0.667969f, 0.648438f, 0.964844f}, {0.851562f, 0.398438f, 0.550781f, 0.664062f},
- {0.039062f, 0.523438f, 0.312500f, 0.136719f}, {0.152344f, 0.699219f, 0.492188f, 0.406250f},
- {0.644531f, 0.976562f, 0.187500f, 0.945312f}, {0.253906f, 0.320312f, 0.710938f, 0.210938f},
- {0.687500f, 0.667969f, 0.546875f, 0.761719f}, {0.570312f, 0.898438f, 0.757812f, 0.667969f},
- {0.882812f, 0.769531f, 0.097656f, 0.144531f}, {0.359375f, 0.519531f, 0.460938f, 0.878906f},
- {0.597656f, 0.105469f, 0.675781f, 0.472656f}, {0.285156f, 0.976562f, 0.523438f, 0.996094f},
- {0.750000f, 0.250000f, 0.421875f, 0.082031f}, {0.050781f, 0.578125f, 0.980469f, 0.523438f},
- {0.625000f, 0.738281f, 0.742188f, 0.683594f}, {0.500000f, 0.214844f, 0.269531f, 0.937500f},
- {0.000000f, 0.992188f, 0.917969f, 0.296875f}, {0.187500f, 0.144531f, 0.832031f, 0.726562f},
- {0.988281f, 0.277344f, 0.156250f, 0.226562f}, {0.769531f, 0.363281f, 0.398438f, 0.097656f},
- {0.562500f, 0.570312f, 0.898438f, 0.437500f}, {0.687500f, 0.851562f, 0.531250f, 0.246094f},
- {0.941406f, 0.410156f, 0.839844f, 0.027344f}, {0.730469f, 0.511719f, 0.308594f, 0.867188f},
- {0.300781f, 0.199219f, 0.796875f, 0.492188f}, {0.914062f, 0.828125f, 0.496094f, 0.781250f},
- {0.132812f, 0.949219f, 0.703125f, 0.171875f}, {0.953125f, 0.527344f, 0.445312f, 0.941406f},
- {0.582031f, 0.230469f, 0.878906f, 0.691406f}, {0.339844f, 0.085938f, 0.781250f, 0.816406f},
- {0.804688f, 0.890625f, 0.570312f, 0.062500f}, {0.082031f, 0.164062f, 0.312500f, 0.523438f},
- {0.765625f, 0.785156f, 0.859375f, 0.101562f}, {0.312500f, 0.925781f, 0.453125f, 0.359375f},
- {0.230469f, 0.558594f, 0.691406f, 0.578125f}, {0.535156f, 0.335938f, 0.378906f, 0.277344f},
- {0.167969f, 0.441406f, 0.273438f, 0.777344f}, {0.941406f, 0.875000f, 0.855469f, 0.000000f},
- {0.507812f, 0.371094f, 0.160156f, 0.507812f}, {0.394531f, 0.800781f, 0.050781f, 0.191406f},
- {0.148438f, 0.597656f, 0.304688f, 0.261719f}, {0.679688f, 0.960938f, 0.457031f, 0.894531f},
- {0.226562f, 0.855469f, 0.027344f, 0.410156f}, {0.843750f, 0.675781f, 0.765625f, 0.093750f},
- {0.601562f, 0.796875f, 0.937500f, 0.222656f}, {0.097656f, 0.148438f, 0.488281f, 0.785156f},
- {0.148438f, 0.300781f, 0.320312f, 0.035156f}, {0.539062f, 0.039062f, 0.906250f, 0.632812f},
- {0.070312f, 0.609375f, 0.609375f, 0.363281f}, {0.671875f, 0.816406f, 0.972656f, 0.500000f},
- {0.371094f, 0.312500f, 0.699219f, 0.585938f}, {0.589844f, 0.699219f, 0.136719f, 0.148438f},
- {0.328125f, 0.261719f, 0.031250f, 0.773438f}, {0.546875f, 0.746094f, 0.910156f, 0.277344f},
- {0.105469f, 0.195312f, 0.589844f, 0.472656f}, {0.679688f, 0.519531f, 0.773438f, 0.109375f},
- {0.937500f, 0.246094f, 0.996094f, 0.722656f}, {0.179688f, 0.324219f, 0.558594f, 0.195312f},
- {0.753906f, 0.562500f, 0.878906f, 0.562500f}, {0.601562f, 0.488281f, 0.222656f, 0.355469f},
- {0.867188f, 0.949219f, 0.773438f, 0.105469f}, {0.210938f, 0.808594f, 0.167969f, 0.867188f},
- {0.648438f, 0.363281f, 0.574219f, 0.058594f}, {0.078125f, 0.468750f, 0.410156f, 0.574219f},
- {0.375000f, 0.878906f, 0.035156f, 0.515625f}, {0.679688f, 0.796875f, 0.234375f, 0.351562f},
- {0.316406f, 0.007812f, 0.765625f, 0.742188f}, {0.792969f, 0.609375f, 0.375000f, 0.625000f},
- {0.402344f, 0.234375f, 0.890625f, 0.808594f}, {0.019531f, 0.871094f, 0.007812f, 0.054688f},
- {0.824219f, 0.546875f, 0.332031f, 0.546875f}, {0.320312f, 0.015625f, 0.812500f, 0.363281f},
- {0.222656f, 0.144531f, 0.390625f, 0.246094f}, {0.722656f, 0.363281f, 0.167969f, 0.597656f},
- {0.417969f, 0.859375f, 0.031250f, 0.792969f}, {0.179688f, 0.648438f, 0.800781f, 0.167969f},
- {0.917969f, 0.402344f, 0.632812f, 0.351562f}, {0.246094f, 0.007812f, 0.058594f, 0.207031f},
- {0.964844f, 0.839844f, 0.191406f, 0.585938f}, {0.367188f, 0.097656f, 0.503906f, 0.820312f},
- {0.878906f, 0.609375f, 0.039062f, 0.117188f}, {0.589844f, 0.871094f, 0.640625f, 0.914062f},
- {0.675781f, 0.058594f, 0.230469f, 0.542969f}, {0.296875f, 0.796875f, 0.773438f, 0.613281f},
- {0.898438f, 0.484375f, 0.019531f, 0.828125f}, {0.140625f, 0.007812f, 0.730469f, 0.937500f},
- {0.355469f, 0.304688f, 0.363281f, 0.578125f}, {0.191406f, 0.753906f, 0.070312f, 0.722656f},
- {0.535156f, 0.906250f, 0.902344f, 0.433594f}, {0.636719f, 0.578125f, 0.031250f, 0.992188f},
- {0.367188f, 0.019531f, 0.992188f, 0.332031f}, {0.738281f, 0.683594f, 0.343750f, 0.554688f},
- {0.027344f, 0.320312f, 0.250000f, 0.128906f}, {0.285156f, 0.441406f, 0.167969f, 0.296875f},
- {0.933594f, 0.605469f, 0.488281f, 0.234375f}, {0.179688f, 0.500000f, 0.980469f, 0.785156f},
- {0.660156f, 0.304688f, 0.734375f, 0.433594f}, {0.011719f, 0.035156f, 0.183594f, 0.207031f},
- {0.855469f, 0.843750f, 0.906250f, 0.703125f}, {0.371094f, 0.617188f, 0.042969f, 0.988281f},
- {0.105469f, 0.269531f, 0.480469f, 0.398438f}, {0.656250f, 0.519531f, 0.640625f, 0.328125f},
- {0.773438f, 0.097656f, 0.941406f, 0.843750f}, {0.312500f, 0.472656f, 0.539062f, 0.964844f},
- {0.894531f, 0.703125f, 0.238281f, 0.046875f}, {0.109375f, 0.132812f, 0.703125f, 0.769531f},
- {0.429688f, 0.273438f, 0.175781f, 0.585938f}, {0.046875f, 0.492188f, 0.574219f, 0.347656f},
- {0.382812f, 0.355469f, 0.285156f, 0.953125f}, {0.472656f, 0.636719f, 0.660156f, 0.437500f},
- {0.769531f, 0.847656f, 0.093750f, 0.542969f}, {0.347656f, 0.246094f, 0.832031f, 0.910156f},
- {0.250000f, 0.726562f, 0.371094f, 0.175781f}, {0.875000f, 0.136719f, 0.273438f, 0.238281f},
- {0.492188f, 0.484375f, 0.500000f, 0.671875f}, {0.210938f, 0.562500f, 0.871094f, 0.089844f},
- {0.820312f, 0.078125f, 0.234375f, 0.890625f}, {0.718750f, 0.957031f, 0.812500f, 0.621094f},
- {0.398438f, 0.121094f, 0.515625f, 0.949219f}, {0.035156f, 0.804688f, 0.300781f, 0.367188f},
- {0.308594f, 0.015625f, 0.386719f, 0.589844f}, {0.640625f, 0.636719f, 0.707031f, 0.296875f},
- {0.054688f, 0.898438f, 0.101562f, 0.023438f}, {0.468750f, 0.042969f, 0.445312f, 0.789062f},
- {0.359375f, 0.285156f, 0.652344f, 0.714844f}, {0.027344f, 0.167969f, 0.925781f, 0.421875f},
- {0.554688f, 0.539062f, 0.710938f, 0.929688f}, {0.890625f, 0.621094f, 0.332031f, 0.226562f},
- {0.164062f, 0.093750f, 0.906250f, 0.109375f}, {0.578125f, 0.265625f, 0.855469f, 0.882812f},
- {0.460938f, 0.910156f, 0.671875f, 0.042969f}, {0.914062f, 0.367188f, 0.105469f, 0.250000f},
- {0.734375f, 0.070312f, 0.621094f, 0.492188f}, {0.542969f, 0.183594f, 0.996094f, 0.308594f},
- {0.980469f, 0.421875f, 0.238281f, 0.703125f}, {0.128906f, 0.621094f, 0.503906f, 0.933594f},
- {0.632812f, 0.925781f, 0.906250f, 0.839844f}, {0.953125f, 0.218750f, 0.597656f, 0.109375f},
- {0.039062f, 0.589844f, 0.960938f, 0.402344f}, {0.667969f, 0.714844f, 0.218750f, 0.550781f},
- {0.472656f, 0.484375f, 0.312500f, 0.718750f}, {0.558594f, 0.152344f, 0.582031f, 0.894531f},
- {0.152344f, 0.355469f, 0.691406f, 0.023438f}, {0.691406f, 0.671875f, 0.445312f, 0.410156f},
- {0.753906f, 0.316406f, 0.867188f, 0.496094f}, {0.527344f, 0.546875f, 0.562500f, 0.656250f},
- {0.125000f, 0.714844f, 0.304688f, 0.042969f}, {0.390625f, 0.218750f, 0.988281f, 0.320312f},
- {0.218750f, 0.894531f, 0.585938f, 0.183594f}, {0.511719f, 0.691406f, 0.187500f, 0.761719f},
- {0.457031f, 0.101562f, 0.457031f, 0.296875f}, {0.050781f, 0.628906f, 0.671875f, 0.371094f},
- {0.816406f, 0.148438f, 0.554688f, 0.054688f}, {0.082031f, 0.371094f, 0.386719f, 0.269531f},
- {0.417969f, 0.472656f, 0.753906f, 0.617188f}, {0.839844f, 0.175781f, 0.109375f, 0.750000f},
- {0.218750f, 0.933594f, 0.656250f, 0.421875f}, {0.527344f, 0.742188f, 0.910156f, 0.910156f},
- {0.875000f, 0.050781f, 0.402344f, 0.589844f}, {0.390625f, 0.988281f, 0.082031f, 0.972656f},
- {0.460938f, 0.652344f, 0.355469f, 0.148438f}, {0.921875f, 0.464844f, 0.546875f, 0.847656f},
- {0.601562f, 0.113281f, 0.132812f, 0.484375f}, {0.710938f, 0.964844f, 0.773438f, 0.089844f},
- {0.273438f, 0.761719f, 0.593750f, 0.550781f}, {0.433594f, 0.664062f, 0.199219f, 0.156250f},
- {0.203125f, 0.222656f, 0.355469f, 0.664062f}, {0.000000f, 0.835938f, 0.812500f, 0.609375f},
- {0.625000f, 0.320312f, 0.738281f, 0.445312f}, {0.804688f, 0.410156f, 0.914062f, 0.304688f},
- {0.523438f, 0.617188f, 0.644531f, 0.695312f}, {0.738281f, 0.070312f, 0.121094f, 0.179688f},
- {0.886719f, 0.210938f, 0.890625f, 0.859375f}, {0.210938f, 0.984375f, 0.531250f, 0.730469f},
- {0.988281f, 0.464844f, 0.000000f, 0.312500f}, {0.628906f, 0.527344f, 0.726562f, 0.078125f},
- {0.433594f, 0.902344f, 0.472656f, 0.765625f}, {0.789062f, 0.058594f, 0.171875f, 0.957031f},
- {0.042969f, 0.656250f, 0.570312f, 0.441406f}, {0.652344f, 0.796875f, 0.656250f, 0.832031f},
- {0.914062f, 0.371094f, 0.339844f, 0.332031f}, {0.164062f, 0.875000f, 0.453125f, 0.515625f},
- {0.968750f, 0.476562f, 0.167969f, 0.750000f}, {0.777344f, 0.683594f, 0.683594f, 0.160156f},
- {0.492188f, 0.851562f, 0.019531f, 0.843750f}, {0.855469f, 0.144531f, 0.808594f, 0.972656f},
- {0.960938f, 0.449219f, 0.332031f, 0.453125f}, {0.265625f, 0.781250f, 0.531250f, 0.898438f},
- {0.781250f, 0.394531f, 0.851562f, 0.183594f}, {0.921875f, 0.855469f, 0.015625f, 0.628906f},
- {0.285156f, 0.066406f, 0.132812f, 0.378906f}, {0.421875f, 0.992188f, 0.507812f, 0.796875f},
- {0.816406f, 0.753906f, 0.269531f, 0.695312f}, {0.972656f, 0.570312f, 0.468750f, 0.449219f},
- {0.113281f, 0.148438f, 0.160156f, 0.554688f}, {0.199219f, 0.726562f, 0.796875f, 0.992188f},
- {0.285156f, 0.464844f, 0.289062f, 0.164062f}, {0.070312f, 0.785156f, 0.453125f, 0.875000f},
- {0.375000f, 0.832031f, 0.843750f, 0.437500f}, {0.500000f, 0.269531f, 0.125000f, 0.023438f},
- {0.445312f, 0.726562f, 0.687500f, 0.507812f}, {0.089844f, 0.457031f, 0.277344f, 0.289062f},
- {0.839844f, 0.046875f, 0.359375f, 0.917969f}, {0.773438f, 0.300781f, 0.761719f, 0.050781f},
- {0.347656f, 0.945312f, 0.882812f, 0.640625f}, {0.101562f, 0.902344f, 0.117188f, 0.460938f},
- {0.816406f, 0.785156f, 0.937500f, 0.265625f}, {0.445312f, 0.453125f, 0.351562f, 0.765625f},
- {0.226562f, 0.171875f, 0.726562f, 0.351562f}, {0.324219f, 0.921875f, 0.082031f, 0.839844f},
- {0.808594f, 0.402344f, 0.421875f, 0.988281f}, {0.027344f, 0.113281f, 0.492188f, 0.398438f},
- {0.855469f, 0.589844f, 0.109375f, 0.480469f}, {0.648438f, 0.339844f, 0.878906f, 0.066406f},
- {0.976562f, 0.945312f, 0.257812f, 0.539062f}, {0.765625f, 0.433594f, 0.953125f, 0.160156f},
- {0.250000f, 0.726562f, 0.140625f, 0.820312f}, {0.570312f, 0.261719f, 0.210938f, 0.894531f},
- {0.964844f, 0.789062f, 0.613281f, 0.097656f}, {0.160156f, 0.117188f, 0.300781f, 0.210938f},
- {0.488281f, 0.839844f, 0.820312f, 0.859375f}, {0.707031f, 0.542969f, 0.019531f, 0.496094f},
- {0.605469f, 0.273438f, 0.714844f, 0.007812f}, {0.125000f, 0.820312f, 0.222656f, 0.718750f},
- {0.750000f, 0.363281f, 0.652344f, 0.339844f}, {0.207031f, 0.195312f, 0.804688f, 0.636719f},
- {0.050781f, 0.718750f, 0.300781f, 0.039062f}, {0.492188f, 0.406250f, 0.406250f, 0.906250f},
- {0.910156f, 0.152344f, 0.992188f, 0.796875f}, {0.832031f, 0.015625f, 0.683594f, 0.214844f},
- {0.570312f, 0.937500f, 0.085938f, 0.738281f}, {0.984375f, 0.570312f, 0.472656f, 0.371094f},
- {0.468750f, 0.050781f, 0.394531f, 0.121094f}, {0.253906f, 0.886719f, 0.066406f, 0.820312f},
- {0.328125f, 0.769531f, 0.332031f, 0.535156f}, {0.937500f, 0.921875f, 0.441406f, 0.011719f},
- {0.640625f, 0.718750f, 0.199219f, 0.488281f}, {0.289062f, 0.031250f, 0.390625f, 0.136719f},
- {0.007812f, 0.773438f, 0.992188f, 0.601562f}, {0.566406f, 0.398438f, 0.230469f, 0.406250f},
- {0.171875f, 0.191406f, 0.785156f, 0.855469f}, {0.933594f, 0.343750f, 0.046875f, 0.285156f},
- {0.121094f, 0.949219f, 0.921875f, 0.003906f}, {0.292969f, 0.218750f, 0.097656f, 0.558594f},
- {0.441406f, 0.027344f, 0.734375f, 0.199219f}, {0.515625f, 0.597656f, 0.976562f, 0.050781f},
- {0.250000f, 0.402344f, 0.066406f, 0.425781f}, {0.363281f, 0.300781f, 0.859375f, 0.250000f},
- {0.203125f, 0.546875f, 0.433594f, 0.066406f}, {0.117188f, 0.363281f, 0.613281f, 0.644531f},
- {0.542969f, 0.726562f, 0.191406f, 0.535156f}, {0.410156f, 0.199219f, 0.964844f, 0.125000f},
- {0.140625f, 0.578125f, 0.261719f, 0.316406f}, {0.667969f, 0.660156f, 0.394531f, 0.496094f},
- {0.488281f, 0.441406f, 0.625000f, 0.003906f}, {0.734375f, 0.304688f, 0.820312f, 0.601562f},
- {0.007812f, 0.203125f, 0.082031f, 0.292969f}, {0.250000f, 0.417969f, 0.593750f, 0.191406f},
- {0.511719f, 0.503906f, 0.953125f, 0.832031f}, {0.703125f, 0.960938f, 0.417969f, 0.656250f},
- {0.605469f, 0.656250f, 0.566406f, 0.386719f}, {0.886719f, 0.312500f, 0.070312f, 0.097656f},
- {0.753906f, 0.511719f, 0.640625f, 0.777344f}, {0.191406f, 0.109375f, 0.203125f, 0.621094f},
- {0.917969f, 0.992188f, 0.738281f, 0.175781f}, {0.300781f, 0.390625f, 0.437500f, 0.664062f},
- {0.515625f, 0.816406f, 0.078125f, 0.742188f}, {0.230469f, 0.085938f, 0.488281f, 0.226562f},
- {0.589844f, 0.203125f, 0.546875f, 0.324219f}, {0.894531f, 0.558594f, 0.406250f, 0.832031f},
- {0.292969f, 0.261719f, 0.250000f, 0.964844f}, {0.058594f, 0.027344f, 0.789062f, 0.179688f},
- {0.968750f, 0.812500f, 0.515625f, 0.554688f}, {0.484375f, 0.496094f, 0.207031f, 0.242188f},
- {0.914062f, 0.253906f, 0.921875f, 0.144531f}, {0.605469f, 0.968750f, 0.816406f, 0.714844f},
- {0.734375f, 0.457031f, 0.699219f, 0.648438f}, {0.097656f, 0.183594f, 0.332031f, 0.882812f},
- {0.410156f, 0.832031f, 0.605469f, 0.957031f}, {0.292969f, 0.542969f, 0.761719f, 0.679688f},
- {0.691406f, 0.039062f, 0.421875f, 0.597656f}, {0.878906f, 0.984375f, 0.859375f, 0.468750f},
- {0.324219f, 0.601562f, 0.507812f, 0.710938f}, {0.664062f, 0.343750f, 0.925781f, 0.363281f},
- {0.785156f, 0.640625f, 0.453125f, 0.070312f}, {0.093750f, 0.214844f, 0.582031f, 0.652344f},
- {0.347656f, 0.417969f, 0.519531f, 0.390625f}, {0.949219f, 0.140625f, 0.843750f, 0.277344f},
- {0.261719f, 0.769531f, 0.937500f, 0.546875f}, {0.566406f, 0.535156f, 0.066406f, 0.757812f},
- {0.328125f, 0.250000f, 0.503906f, 0.253906f}, {0.796875f, 0.589844f, 0.871094f, 0.445312f},
- {0.144531f, 0.898438f, 0.003906f, 0.304688f}, {0.074219f, 0.308594f, 0.261719f, 0.953125f},
- {0.355469f, 0.390625f, 0.839844f, 0.492188f}, {0.691406f, 0.742188f, 0.144531f, 0.062500f},
- {0.863281f, 0.183594f, 0.589844f, 0.917969f}, {0.175781f, 0.527344f, 0.976562f, 0.230469f},
- {0.582031f, 0.238281f, 0.511719f, 0.992188f}, {0.074219f, 0.441406f, 0.855469f, 0.644531f},
- {0.140625f, 0.554688f, 0.750000f, 0.277344f}, {0.488281f, 0.328125f, 0.687500f, 0.941406f},
- {0.824219f, 0.121094f, 0.582031f, 0.210938f}, {0.703125f, 0.687500f, 0.332031f, 0.699219f},
- {0.324219f, 0.593750f, 0.625000f, 0.519531f}, {0.734375f, 0.859375f, 0.429688f, 0.644531f},
- {0.390625f, 0.433594f, 0.839844f, 0.378906f}, {0.609375f, 0.515625f, 0.390625f, 0.738281f},
- {0.761719f, 0.714844f, 0.539062f, 0.976562f}, {0.074219f, 0.269531f, 0.277344f, 0.679688f},
- {0.882812f, 0.167969f, 0.636719f, 0.796875f}, {0.667969f, 0.769531f, 0.226562f, 0.886719f},
- {0.593750f, 0.925781f, 0.941406f, 0.492188f}, {0.734375f, 0.078125f, 0.128906f, 0.386719f},
- {0.332031f, 0.980469f, 0.722656f, 0.765625f}, {0.699219f, 0.269531f, 0.058594f, 0.265625f},
- {0.835938f, 0.105469f, 0.476562f, 0.699219f}, {0.058594f, 0.917969f, 0.753906f, 0.984375f},
- {0.191406f, 0.710938f, 0.214844f, 0.847656f}, {0.609375f, 0.023438f, 0.976562f, 0.144531f},
- {0.332031f, 0.894531f, 0.683594f, 0.953125f}, {0.640625f, 0.339844f, 0.355469f, 0.761719f},
- {0.867188f, 0.839844f, 0.023438f, 0.027344f}, {0.359375f, 0.117188f, 0.222656f, 0.328125f},
- {0.441406f, 0.242188f, 0.718750f, 0.726562f}, {0.136719f, 0.933594f, 0.878906f, 0.585938f},
- {0.656250f, 0.027344f, 0.382812f, 0.218750f}, {0.796875f, 0.566406f, 0.531250f, 0.976562f},
- {0.582031f, 0.160156f, 0.023438f, 0.339844f}, {0.703125f, 0.664062f, 0.921875f, 0.425781f},
- {0.390625f, 0.765625f, 0.851562f, 0.812500f}, {0.132812f, 0.515625f, 0.156250f, 0.945312f},
- {0.996094f, 0.871094f, 0.718750f, 0.140625f}, {0.718750f, 0.417969f, 0.003906f, 0.593750f},
- {0.406250f, 0.632812f, 0.621094f, 0.066406f}, {0.652344f, 0.738281f, 0.148438f, 0.679688f},
- {0.167969f, 0.363281f, 0.285156f, 0.929688f}, {0.082031f, 0.078125f, 0.667969f, 0.000000f},
- {0.429688f, 0.675781f, 0.027344f, 0.453125f}, {0.261719f, 0.617188f, 0.382812f, 0.796875f},
- {0.339844f, 0.785156f, 0.234375f, 0.265625f}, {0.546875f, 0.050781f, 0.523438f, 0.105469f},
- {0.164062f, 0.273438f, 0.007812f, 0.222656f}, {0.910156f, 0.667969f, 0.804688f, 0.390625f},
- {0.492188f, 0.203125f, 0.082031f, 0.011719f}, {0.121094f, 0.863281f, 0.269531f, 0.242188f},
- {0.011719f, 0.414062f, 0.695312f, 0.519531f}, {0.449219f, 0.496094f, 0.058594f, 0.972656f},
- {0.238281f, 0.914062f, 0.191406f, 0.765625f}, {0.855469f, 0.078125f, 0.367188f, 0.179688f},
- {0.046875f, 0.882812f, 0.281250f, 0.828125f}, {0.437500f, 0.687500f, 0.148438f, 0.113281f},
- {0.816406f, 0.015625f, 0.613281f, 0.949219f}, {0.683594f, 0.937500f, 0.437500f, 0.187500f},
- {0.988281f, 0.859375f, 0.238281f, 0.867188f}, {0.398438f, 0.085938f, 0.574219f, 0.597656f},
- {0.636719f, 0.496094f, 0.722656f, 0.683594f}, {0.742188f, 0.808594f, 0.339844f, 0.019531f},
- {0.234375f, 0.625000f, 0.531250f, 0.574219f}, {0.535156f, 0.460938f, 0.890625f, 0.269531f},
- {0.050781f, 0.976562f, 0.289062f, 0.781250f}, {0.730469f, 0.109375f, 0.214844f, 0.460938f},
- {0.371094f, 0.363281f, 0.789062f, 0.390625f}, {0.789062f, 0.656250f, 0.042969f, 0.074219f},
- {0.679688f, 0.164062f, 0.269531f, 0.757812f}, {0.402344f, 0.839844f, 0.105469f, 0.359375f},
- {0.875000f, 0.261719f, 0.875000f, 0.808594f}, {0.234375f, 0.933594f, 0.144531f, 0.046875f},
- {0.062500f, 0.082031f, 0.945312f, 0.125000f}, {0.523438f, 0.285156f, 0.289062f, 0.937500f},
- {0.855469f, 0.753906f, 0.691406f, 0.164062f}, {0.984375f, 0.148438f, 0.207031f, 0.464844f},
- {0.027344f, 0.894531f, 0.132812f, 0.265625f}, {0.562500f, 0.976562f, 0.785156f, 0.593750f},
- {0.144531f, 0.625000f, 0.476562f, 0.136719f}, {0.824219f, 0.046875f, 0.355469f, 0.320312f},
- {0.445312f, 0.226562f, 0.558594f, 0.710938f}, {0.000000f, 0.664062f, 0.289062f, 0.207031f},
- {0.910156f, 0.468750f, 0.835938f, 0.921875f}, {0.222656f, 0.609375f, 0.589844f, 0.039062f},
- {0.582031f, 0.820312f, 0.898438f, 0.812500f}, {0.984375f, 0.347656f, 0.308594f, 0.445312f},
- {0.378906f, 0.238281f, 0.550781f, 0.238281f}, {0.796875f, 0.523438f, 0.437500f, 0.542969f},
- {0.937500f, 0.792969f, 0.179688f, 0.355469f}, {0.097656f, 0.687500f, 0.742188f, 0.429688f},
- {0.761719f, 0.597656f, 0.523438f, 0.511719f}, {0.035156f, 0.050781f, 0.929688f, 0.132812f},
- {0.957031f, 0.406250f, 0.328125f, 0.921875f}, {0.230469f, 0.609375f, 0.148438f, 0.472656f},
- {0.335938f, 0.707031f, 0.777344f, 0.285156f}, {0.019531f, 0.351562f, 0.976562f, 0.824219f},
- {0.261719f, 0.859375f, 0.316406f, 0.058594f}, {0.058594f, 0.230469f, 0.570312f, 0.570312f},
- {0.882812f, 0.324219f, 0.652344f, 0.484375f}, {0.628906f, 0.601562f, 0.210938f, 0.015625f},
- {0.195312f, 0.132812f, 0.988281f, 0.371094f}, {0.015625f, 0.699219f, 0.832031f, 0.527344f},
- {0.535156f, 0.066406f, 0.335938f, 0.433594f}, {0.851562f, 0.976562f, 0.953125f, 0.742188f},
- {0.574219f, 0.578125f, 0.468750f, 0.621094f}, {0.773438f, 0.855469f, 0.843750f, 0.316406f},
- {0.703125f, 0.148438f, 0.750000f, 0.898438f}, {0.187500f, 0.300781f, 0.136719f, 0.582031f},
- {0.960938f, 0.742188f, 0.644531f, 0.359375f}, {0.796875f, 0.378906f, 0.972656f, 0.523438f},
- {0.031250f, 0.917969f, 0.171875f, 0.847656f}, {0.593750f, 0.507812f, 0.468750f, 0.445312f},
- {0.207031f, 0.332031f, 0.359375f, 0.785156f}, {0.753906f, 0.105469f, 0.566406f, 0.914062f},
- {0.386719f, 0.695312f, 0.960938f, 0.128906f}, {0.613281f, 0.000000f, 0.128906f, 0.308594f},
- {0.914062f, 0.296875f, 0.792969f, 0.570312f}, {0.300781f, 0.730469f, 0.734375f, 0.457031f},
- {0.550781f, 0.574219f, 0.972656f, 0.890625f}, {0.644531f, 0.480469f, 0.046875f, 0.687500f},
- {0.160156f, 0.312500f, 0.335938f, 0.500000f}, {0.507812f, 0.625000f, 0.765625f, 0.417969f},
- {0.093750f, 0.433594f, 0.164062f, 0.082031f}, {0.195312f, 0.347656f, 0.953125f, 0.355469f},
- {0.468750f, 0.699219f, 0.109375f, 0.140625f}, {0.941406f, 0.210938f, 0.449219f, 0.832031f},
- {0.296875f, 0.039062f, 0.656250f, 0.410156f}, {0.417969f, 0.277344f, 0.761719f, 0.878906f},
- {0.121094f, 0.679688f, 0.027344f, 0.625000f}, {0.910156f, 0.792969f, 0.699219f, 0.156250f},
- {0.449219f, 0.863281f, 0.625000f, 0.710938f}, {0.968750f, 0.011719f, 0.367188f, 0.871094f},
- {0.199219f, 0.964844f, 0.554688f, 0.546875f}, {0.531250f, 0.605469f, 0.816406f, 0.441406f},
- {0.105469f, 0.496094f, 0.460938f, 0.906250f}, {0.960938f, 0.804688f, 0.062500f, 0.484375f},
- {0.457031f, 0.546875f, 0.515625f, 0.324219f}, {0.660156f, 0.003906f, 0.753906f, 0.578125f},
- {0.199219f, 0.636719f, 0.035156f, 0.804688f}, {0.265625f, 0.320312f, 0.593750f, 0.093750f},
- {0.347656f, 0.101562f, 0.957031f, 0.906250f}, {0.710938f, 0.453125f, 0.875000f, 0.363281f},
- {0.402344f, 0.824219f, 0.027344f, 0.019531f}, {0.292969f, 0.531250f, 0.750000f, 0.554688f},
- {0.976562f, 0.414062f, 0.910156f, 0.949219f}, {0.078125f, 0.863281f, 0.507812f, 0.089844f},
- {0.792969f, 0.312500f, 0.390625f, 0.609375f}, {0.500000f, 0.000000f, 0.664062f, 0.347656f},
- {0.304688f, 0.507812f, 0.160156f, 0.570312f}, {0.089844f, 0.152344f, 0.109375f, 0.097656f},
- {0.457031f, 0.957031f, 0.800781f, 0.664062f}, {0.539062f, 0.636719f, 0.066406f, 0.738281f},
- {0.144531f, 0.085938f, 0.878906f, 0.082031f}, {0.414062f, 0.175781f, 0.277344f, 0.886719f},
- {0.292969f, 0.285156f, 0.835938f, 0.636719f}, {0.570312f, 0.750000f, 0.617188f, 0.257812f},
- {0.812500f, 0.886719f, 0.058594f, 0.851562f}, {0.527344f, 0.199219f, 0.464844f, 0.082031f},
- {0.851562f, 0.773438f, 0.664062f, 0.535156f}, {0.414062f, 0.441406f, 0.257812f, 0.679688f},
- {0.976562f, 0.914062f, 0.109375f, 0.148438f}, {0.539062f, 0.488281f, 0.812500f, 0.886719f},
- {0.816406f, 0.000000f, 0.371094f, 0.257812f}, {0.316406f, 0.960938f, 0.285156f, 0.703125f},
- {0.484375f, 0.382812f, 0.457031f, 0.785156f}, {0.785156f, 0.277344f, 0.675781f, 0.875000f},
- {0.265625f, 0.476562f, 0.070312f, 0.289062f}, {0.355469f, 0.207031f, 0.585938f, 0.109375f},
- {0.636719f, 0.917969f, 0.179688f, 0.851562f}, {0.929688f, 0.519531f, 0.347656f, 0.515625f},
- {0.007812f, 0.425781f, 0.554688f, 0.199219f}, {0.507812f, 0.011719f, 0.445312f, 0.085938f},
- {0.667969f, 0.886719f, 0.859375f, 0.976562f}, {0.382812f, 0.476562f, 0.300781f, 0.738281f},
- {0.843750f, 0.128906f, 0.726562f, 0.613281f}, {0.437500f, 0.808594f, 0.898438f, 0.183594f},
- {0.652344f, 0.582031f, 0.667969f, 0.332031f}, {0.984375f, 0.753906f, 0.835938f, 0.699219f},
- {0.812500f, 0.242188f, 0.320312f, 0.636719f}, {0.511719f, 0.945312f, 0.625000f, 0.816406f},
- {0.183594f, 0.796875f, 0.421875f, 0.027344f}, {0.742188f, 0.179688f, 0.882812f, 0.253906f},
- {0.972656f, 0.375000f, 0.660156f, 0.613281f}, {0.378906f, 0.964844f, 0.480469f, 0.324219f},
- {0.015625f, 0.222656f, 0.863281f, 0.046875f}, {0.871094f, 0.058594f, 0.695312f, 0.800781f},
- {0.289062f, 0.792969f, 0.382812f, 0.644531f}, {0.765625f, 0.171875f, 0.636719f, 0.929688f},
- {0.554688f, 0.988281f, 0.808594f, 0.531250f}, {0.023438f, 0.546875f, 0.218750f, 0.730469f},
- {0.882812f, 0.886719f, 0.929688f, 0.191406f}, {0.605469f, 0.136719f, 0.167969f, 0.332031f},
- {0.812500f, 0.335938f, 0.414062f, 0.519531f}, {0.652344f, 0.585938f, 0.953125f, 0.093750f},
- {0.269531f, 0.488281f, 0.132812f, 0.312500f}, {0.019531f, 0.292969f, 0.472656f, 0.589844f},
- {0.316406f, 0.410156f, 0.914062f, 0.195312f}, {0.613281f, 0.742188f, 0.175781f, 0.023438f},
- {0.761719f, 0.207031f, 0.398438f, 0.660156f}, {0.363281f, 0.363281f, 0.664062f, 0.253906f},
- {0.585938f, 0.449219f, 0.246094f, 0.746094f}, {0.796875f, 0.996094f, 0.902344f, 0.882812f},
- {0.136719f, 0.835938f, 0.367188f, 0.230469f}, {0.492188f, 0.390625f, 0.492188f, 0.707031f},
- {0.812500f, 0.562500f, 0.316406f, 0.515625f}, {0.636719f, 0.687500f, 0.421875f, 0.839844f},
- {0.898438f, 0.343750f, 0.164062f, 0.664062f}, {0.179688f, 0.125000f, 0.695312f, 0.453125f},
- {0.527344f, 0.746094f, 0.097656f, 0.816406f}, {0.625000f, 0.183594f, 0.207031f, 0.156250f},
- {0.371094f, 0.906250f, 0.003906f, 0.421875f}, {0.160156f, 0.707031f, 0.781250f, 0.683594f},
- {0.656250f, 0.773438f, 0.343750f, 0.894531f}, {0.875000f, 0.406250f, 0.945312f, 0.171875f},
- {0.242188f, 0.859375f, 0.699219f, 0.394531f}, {0.703125f, 0.460938f, 0.375000f, 0.281250f},
- {0.902344f, 0.371094f, 0.636719f, 0.937500f}, {0.207031f, 0.558594f, 0.476562f, 0.574219f},
- {0.679688f, 0.980469f, 0.121094f, 0.203125f}, {0.476562f, 0.484375f, 0.402344f, 0.773438f},
- {0.171875f, 0.332031f, 0.808594f, 0.699219f}, {0.718750f, 0.144531f, 0.906250f, 0.417969f},
- {0.113281f, 0.527344f, 0.195312f, 0.351562f}, {0.617188f, 0.066406f, 0.507812f, 0.933594f},
- {0.460938f, 0.277344f, 0.417969f, 0.734375f}, {0.160156f, 0.640625f, 0.613281f, 0.394531f},
- {0.730469f, 0.738281f, 0.039062f, 0.105469f}, {0.078125f, 0.187500f, 0.777344f, 0.617188f},
- {0.425781f, 0.824219f, 0.527344f, 0.171875f}, {0.679688f, 0.898438f, 0.128906f, 0.984375f},
- {0.949219f, 0.769531f, 0.414062f, 0.230469f}, {0.128906f, 0.320312f, 0.886719f, 0.402344f},
- {0.234375f, 0.648438f, 0.046875f, 0.160156f}, {0.394531f, 0.242188f, 0.964844f, 0.691406f},
- {0.312500f, 0.800781f, 0.265625f, 0.769531f}, {0.875000f, 0.695312f, 0.785156f, 0.414062f},
- {0.132812f, 0.562500f, 0.085938f, 0.046875f}, {0.238281f, 0.218750f, 0.574219f, 0.292969f},
- {0.722656f, 0.640625f, 0.394531f, 0.136719f}, {0.304688f, 0.062500f, 0.222656f, 0.941406f},
- {0.074219f, 0.972656f, 0.039062f, 0.078125f}, {0.351562f, 0.445312f, 0.152344f, 0.542969f},
- {0.265625f, 0.148438f, 0.500000f, 0.417969f}, {0.054688f, 0.531250f, 0.246094f, 0.203125f},
- {0.687500f, 0.621094f, 0.007812f, 0.937500f}, {0.113281f, 0.457031f, 0.535156f, 0.378906f},
- {0.472656f, 0.105469f, 0.210938f, 0.144531f}, {0.218750f, 0.664062f, 0.113281f, 0.996094f},
- {0.703125f, 0.843750f, 0.261719f, 0.218750f}, {0.925781f, 0.523438f, 0.550781f, 0.722656f},
- {0.613281f, 0.730469f, 0.019531f, 0.289062f}, {0.367188f, 0.269531f, 0.886719f, 0.472656f},
- {0.843750f, 0.074219f, 0.304688f, 0.238281f}, {0.703125f, 0.648438f, 0.054688f, 0.984375f},
- {0.171875f, 0.425781f, 0.371094f, 0.078125f}, {0.335938f, 0.734375f, 0.566406f, 0.660156f},
- {0.496094f, 0.949219f, 0.500000f, 0.906250f}, {0.214844f, 0.058594f, 0.312500f, 0.750000f},
- {0.554688f, 0.203125f, 0.867188f, 0.964844f}, {0.839844f, 0.707031f, 0.238281f, 0.257812f},
- {0.707031f, 0.113281f, 0.679688f, 0.828125f}, {0.890625f, 0.890625f, 0.296875f, 0.144531f},
- {0.164062f, 0.042969f, 0.968750f, 0.972656f}, {0.273438f, 0.671875f, 0.796875f, 0.609375f},
- {0.019531f, 0.156250f, 0.562500f, 0.078125f}, {0.910156f, 0.246094f, 0.183594f, 0.371094f},
- {0.414062f, 0.707031f, 0.824219f, 0.437500f}, {0.085938f, 0.195312f, 0.082031f, 0.046875f},
- {0.945312f, 0.781250f, 0.683594f, 0.308594f}, {0.218750f, 0.023438f, 0.621094f, 0.175781f},
- {0.464844f, 0.234375f, 0.261719f, 0.964844f}, {0.105469f, 0.957031f, 0.582031f, 0.234375f},
- {0.750000f, 0.488281f, 0.808594f, 0.738281f}, {0.253906f, 0.582031f, 0.457031f, 0.285156f},
- {0.855469f, 0.367188f, 0.984375f, 0.859375f}, {0.425781f, 0.121094f, 0.250000f, 0.492188f},
- {0.945312f, 0.550781f, 0.433594f, 0.222656f}, {0.738281f, 0.214844f, 0.503906f, 0.953125f},
- {0.019531f, 0.046875f, 0.226562f, 0.515625f}, {0.324219f, 0.734375f, 0.574219f, 0.785156f},
- {0.589844f, 0.257812f, 0.011719f, 0.015625f}, {0.843750f, 0.812500f, 0.988281f, 0.468750f},
- {0.992188f, 0.007812f, 0.238281f, 0.312500f}, {0.082031f, 0.425781f, 0.699219f, 0.054688f},
- {0.382812f, 0.843750f, 0.304688f, 0.972656f}, {0.890625f, 0.667969f, 0.558594f, 0.183594f},
- {0.281250f, 0.968750f, 0.000000f, 0.003906f}, {0.687500f, 0.812500f, 0.742188f, 0.632812f},
- {0.910156f, 0.121094f, 0.867188f, 0.207031f}, {0.347656f, 0.574219f, 0.957031f, 0.511719f},
- {0.238281f, 0.421875f, 0.183594f, 0.957031f}, {0.960938f, 0.097656f, 0.707031f, 0.316406f},
- {0.585938f, 0.667969f, 0.921875f, 0.445312f}, {0.835938f, 0.535156f, 0.238281f, 0.660156f},
- {0.039062f, 0.031250f, 0.800781f, 0.074219f}, {0.464844f, 0.125000f, 0.734375f, 0.808594f},
- {0.742188f, 0.390625f, 0.503906f, 0.367188f}, {0.828125f, 0.054688f, 0.113281f, 0.953125f},
- {0.550781f, 0.996094f, 0.621094f, 0.472656f}, {0.625000f, 0.175781f, 0.203125f, 0.636719f},
- {0.472656f, 0.347656f, 0.941406f, 0.871094f}, {0.046875f, 0.945312f, 0.050781f, 0.675781f},
- {0.937500f, 0.414062f, 0.503906f, 0.492188f}, {0.500000f, 0.265625f, 0.632812f, 0.832031f},
- {0.894531f, 0.683594f, 0.992188f, 0.753906f}, {0.148438f, 0.367188f, 0.437500f, 0.277344f},
- {0.550781f, 0.890625f, 0.777344f, 0.050781f}, {0.945312f, 0.316406f, 0.710938f, 0.871094f},
- {0.410156f, 0.046875f, 0.343750f, 0.484375f}, {0.597656f, 0.855469f, 0.949219f, 0.671875f},
- {0.843750f, 0.261719f, 0.398438f, 0.781250f}, {0.781250f, 0.769531f, 0.597656f, 0.515625f},
- {0.320312f, 0.140625f, 0.796875f, 0.578125f}, {0.425781f, 0.406250f, 0.988281f, 0.894531f},
- {0.062500f, 0.593750f, 0.191406f, 0.160156f}, {0.246094f, 0.875000f, 0.515625f, 0.824219f},
- {0.132812f, 0.484375f, 0.468750f, 0.031250f}, {0.437500f, 0.367188f, 0.605469f, 0.375000f},
- {0.976562f, 0.835938f, 0.859375f, 0.785156f}, {0.046875f, 0.242188f, 0.726562f, 0.433594f},
- {0.765625f, 0.519531f, 0.089844f, 0.226562f}, {0.921875f, 0.394531f, 0.824219f, 0.003906f},
- {0.105469f, 0.921875f, 0.585938f, 0.382812f}, {0.390625f, 0.824219f, 0.007812f, 0.476562f},
- {0.484375f, 0.558594f, 0.738281f, 0.683594f}, {0.070312f, 0.441406f, 0.082031f, 0.347656f},
- {0.433594f, 0.332031f, 0.605469f, 0.417969f}, {0.949219f, 0.765625f, 0.339844f, 0.789062f},
- {0.738281f, 0.906250f, 0.015625f, 0.183594f}, {0.312500f, 0.601562f, 0.441406f, 0.527344f},
- {0.695312f, 0.089844f, 0.722656f, 0.992188f}, {0.605469f, 0.867188f, 0.925781f, 0.644531f},
- {0.539062f, 0.500000f, 0.218750f, 0.769531f}, {0.011719f, 0.929688f, 0.847656f, 0.414062f},
- {0.777344f, 0.296875f, 0.972656f, 0.613281f}, {0.332031f, 0.644531f, 0.398438f, 0.058594f},
- {0.937500f, 0.835938f, 0.328125f, 0.378906f}, {0.691406f, 0.042969f, 0.867188f, 0.542969f},
- {0.039062f, 0.257812f, 0.625000f, 0.011719f}, {0.546875f, 0.964844f, 0.562500f, 0.753906f},
- {0.117188f, 0.632812f, 0.738281f, 0.320312f}, {0.605469f, 0.296875f, 0.054688f, 0.050781f},
- {0.824219f, 0.902344f, 0.820312f, 0.621094f}, {0.507812f, 0.589844f, 0.906250f, 0.863281f},
- {0.058594f, 0.136719f, 0.324219f, 0.152344f}, {0.445312f, 0.929688f, 0.753906f, 0.671875f},
- {0.253906f, 0.703125f, 0.167969f, 0.828125f}, {0.644531f, 0.218750f, 0.593750f, 0.375000f},
- {0.781250f, 0.574219f, 0.085938f, 0.609375f}, {0.000000f, 0.042969f, 0.964844f, 0.550781f},
- {0.500000f, 0.296875f, 0.359375f, 0.871094f}, {0.207031f, 0.394531f, 0.683594f, 0.457031f},
- {0.062500f, 0.214844f, 0.136719f, 0.277344f}, {0.777344f, 0.933594f, 0.480469f, 0.847656f},
- {0.648438f, 0.863281f, 0.332031f, 0.765625f}, {0.121094f, 0.351562f, 0.089844f, 0.042969f},
- {0.367188f, 0.250000f, 0.390625f, 0.554688f}, {0.183594f, 0.433594f, 0.566406f, 0.730469f},
- {0.300781f, 0.593750f, 0.300781f, 0.500000f}, {0.894531f, 0.726562f, 0.636719f, 0.589844f},
- {0.105469f, 0.839844f, 0.375000f, 0.296875f}, {0.199219f, 0.468750f, 0.710938f, 0.125000f},
- {0.062500f, 0.289062f, 0.902344f, 0.027344f}, {0.992188f, 0.609375f, 0.410156f, 0.250000f},
- {0.281250f, 0.101562f, 0.687500f, 0.343750f}, {0.789062f, 0.718750f, 0.343750f, 0.558594f},
- {0.578125f, 0.832031f, 0.878906f, 0.214844f}, {0.187500f, 0.539062f, 0.746094f, 0.378906f},
- {0.691406f, 0.187500f, 0.277344f, 0.457031f}, {0.621094f, 0.031250f, 0.105469f, 0.984375f},
- {0.859375f, 0.812500f, 0.917969f, 0.597656f}, {0.757812f, 0.656250f, 0.558594f, 0.343750f},
- {0.332031f, 0.402344f, 0.179688f, 0.726562f}, {0.027344f, 0.996094f, 0.812500f, 0.085938f},
- {0.261719f, 0.554688f, 0.074219f, 0.851562f}, {0.144531f, 0.351562f, 0.742188f, 0.003906f},
- {0.519531f, 0.925781f, 0.449219f, 0.406250f}, {0.585938f, 0.027344f, 0.324219f, 0.347656f},
- {0.824219f, 0.320312f, 0.097656f, 0.109375f}, {0.953125f, 0.953125f, 0.707031f, 0.558594f},
- {0.671875f, 0.121094f, 0.773438f, 0.695312f}, {0.523438f, 0.773438f, 0.128906f, 0.609375f},
- {0.273438f, 0.003906f, 0.964844f, 0.496094f}, {0.621094f, 0.617188f, 0.265625f, 0.132812f},
- {0.367188f, 0.167969f, 0.199219f, 0.847656f}, {0.722656f, 0.761719f, 0.652344f, 0.539062f},
- {0.156250f, 0.652344f, 0.437500f, 0.621094f}, {0.996094f, 0.253906f, 0.359375f, 0.777344f},
- {0.648438f, 0.148438f, 0.937500f, 0.109375f}, {0.242188f, 0.632812f, 0.496094f, 0.902344f},
- {0.828125f, 0.957031f, 0.769531f, 0.562500f}, {0.558594f, 0.074219f, 0.136719f, 0.289062f},
- {0.503906f, 0.531250f, 0.878906f, 0.703125f}, {0.175781f, 0.476562f, 0.636719f, 0.843750f},
- {0.878906f, 0.277344f, 0.292969f, 0.132812f}, {0.367188f, 0.417969f, 0.125000f, 0.574219f},
- {0.281250f, 0.062500f, 0.550781f, 0.910156f}, {0.847656f, 0.589844f, 0.054688f, 0.273438f},
- {0.664062f, 0.730469f, 0.511719f, 0.121094f}, {0.394531f, 0.402344f, 0.140625f, 0.503906f},
- {0.578125f, 0.089844f, 0.039062f, 0.914062f}, {0.480469f, 0.777344f, 0.714844f, 0.652344f},
- {0.195312f, 0.445312f, 0.179688f, 0.976562f}, {0.785156f, 0.675781f, 0.113281f, 0.132812f},
- {0.351562f, 0.816406f, 0.886719f, 0.835938f}, {0.265625f, 0.488281f, 0.296875f, 0.453125f},
- {0.175781f, 0.093750f, 0.144531f, 0.722656f}, {0.386719f, 0.335938f, 0.656250f, 0.339844f},
- {0.753906f, 0.656250f, 0.531250f, 0.234375f}, {0.132812f, 0.398438f, 0.421875f, 0.421875f},
- {0.351562f, 0.515625f, 0.929688f, 0.925781f}, {0.917969f, 0.105469f, 0.500000f, 0.492188f},
- {0.601562f, 0.914062f, 0.773438f, 0.136719f}, {0.324219f, 0.613281f, 0.441406f, 0.750000f},
- {0.949219f, 0.730469f, 0.222656f, 0.324219f}, {0.578125f, 0.480469f, 0.824219f, 0.808594f},
- {0.402344f, 0.660156f, 0.289062f, 0.062500f}, {0.863281f, 0.761719f, 0.585938f, 0.578125f},
- {0.488281f, 0.515625f, 0.898438f, 0.132812f}, {0.550781f, 0.050781f, 0.644531f, 0.355469f},
- {0.921875f, 0.968750f, 0.832031f, 0.882812f}, {0.710938f, 0.796875f, 0.011719f, 0.261719f},
- {0.511719f, 0.160156f, 0.980469f, 0.019531f}, {0.605469f, 0.945312f, 0.199219f, 0.921875f},
- {0.343750f, 0.214844f, 0.789062f, 0.218750f}, {0.675781f, 0.550781f, 0.019531f, 0.570312f},
- {0.437500f, 0.746094f, 0.468750f, 0.734375f}, {0.707031f, 0.875000f, 0.542969f, 0.804688f},
- {0.144531f, 0.503906f, 0.285156f, 0.910156f}, {0.406250f, 0.019531f, 0.121094f, 0.101562f},
- {0.742188f, 0.312500f, 0.816406f, 0.714844f}, {0.097656f, 0.933594f, 0.183594f, 0.007812f},
- {0.371094f, 0.761719f, 0.589844f, 0.648438f}, {0.453125f, 0.492188f, 0.378906f, 0.167969f},
- {0.222656f, 0.585938f, 0.847656f, 0.796875f}, {0.121094f, 0.214844f, 0.058594f, 0.128906f},
- {0.484375f, 0.730469f, 0.632812f, 0.546875f}, {0.914062f, 0.078125f, 0.871094f, 0.296875f},
- {0.640625f, 0.191406f, 0.304688f, 0.441406f}, {0.886719f, 0.714844f, 0.148438f, 0.242188f},
- {0.082031f, 0.464844f, 0.933594f, 0.750000f}, {0.742188f, 0.632812f, 0.640625f, 0.667969f},
- {0.183594f, 0.230469f, 0.386719f, 0.953125f}, {0.484375f, 0.687500f, 0.917969f, 0.445312f},
- {0.007812f, 0.187500f, 0.226562f, 0.308594f}, {0.804688f, 0.570312f, 0.417969f, 0.914062f},
- {0.195312f, 0.304688f, 0.671875f, 0.253906f}, {0.878906f, 0.902344f, 0.351562f, 0.960938f},
- {0.078125f, 0.082031f, 0.042969f, 0.710938f}, {0.460938f, 0.449219f, 0.988281f, 0.292969f},
- {0.300781f, 0.320312f, 0.781250f, 0.058594f}, {0.593750f, 0.023438f, 0.171875f, 0.949219f},
- {0.796875f, 0.500000f, 0.539062f, 0.207031f}, {0.339844f, 0.839844f, 0.218750f, 0.503906f},
- {0.132812f, 0.289062f, 0.417969f, 0.070312f}, {0.675781f, 0.218750f, 0.269531f, 0.871094f},
- {0.042969f, 0.378906f, 0.996094f, 0.035156f}, {0.230469f, 0.816406f, 0.515625f, 0.472656f},
- {0.453125f, 0.964844f, 0.375000f, 0.332031f}, {0.746094f, 0.664062f, 0.792969f, 0.214844f},
- {0.058594f, 0.351562f, 0.457031f, 0.000000f}, {0.968750f, 0.882812f, 0.343750f, 0.718750f},
- {0.160156f, 0.140625f, 0.765625f, 0.878906f}, {0.238281f, 0.207031f, 0.675781f, 0.789062f},
- {0.070312f, 0.535156f, 0.945312f, 0.335938f}, {0.894531f, 0.917969f, 0.277344f, 0.179688f},
- {0.296875f, 0.332031f, 0.535156f, 0.597656f}, {0.988281f, 0.167969f, 0.359375f, 0.398438f},
- {0.718750f, 0.015625f, 0.671875f, 0.257812f}, {0.472656f, 0.414062f, 0.960938f, 0.554688f},
- {0.890625f, 0.996094f, 0.460938f, 0.109375f}, {0.964844f, 0.789062f, 0.199219f, 0.996094f},
- {0.667969f, 0.875000f, 0.089844f, 0.585938f}, {0.804688f, 0.183594f, 0.859375f, 0.703125f},
- {0.546875f, 0.312500f, 0.261719f, 0.089844f}, {0.050781f, 0.769531f, 0.046875f, 0.273438f},
- {0.187500f, 0.253906f, 0.843750f, 0.894531f}, {0.441406f, 0.367188f, 0.644531f, 0.230469f},
- {0.742188f, 0.171875f, 0.105469f, 0.097656f}, {0.824219f, 0.890625f, 0.535156f, 0.984375f},
- {0.144531f, 0.015625f, 0.394531f, 0.656250f}, {0.296875f, 0.316406f, 0.058594f, 0.402344f},
- {0.019531f, 0.144531f, 0.210938f, 0.691406f}, {0.753906f, 0.621094f, 0.730469f, 0.929688f},
- {0.250000f, 0.703125f, 0.492188f, 0.191406f}, {0.054688f, 0.292969f, 0.152344f, 0.414062f},
- {0.410156f, 0.492188f, 0.445312f, 0.777344f}, {0.796875f, 0.339844f, 0.871094f, 0.855469f},
- {0.902344f, 0.085938f, 0.250000f, 0.632812f}, {0.531250f, 0.906250f, 0.324219f, 0.394531f},
- {0.250000f, 0.132812f, 0.839844f, 0.976562f}, {0.917969f, 0.375000f, 0.160156f, 0.523438f},
- {0.859375f, 0.792969f, 0.601562f, 0.160156f}, {0.335938f, 0.453125f, 0.714844f, 0.425781f},
- {0.523438f, 0.152344f, 0.464844f, 0.949219f}, {0.957031f, 0.625000f, 0.000000f, 0.863281f},
- {0.800781f, 0.089844f, 0.531250f, 0.257812f}, {0.000000f, 0.863281f, 0.316406f, 0.511719f},
- {0.308594f, 0.285156f, 0.679688f, 0.906250f}, {0.824219f, 0.132812f, 0.472656f, 0.230469f},
- {0.535156f, 0.917969f, 0.265625f, 0.656250f}, {0.683594f, 0.503906f, 0.429688f, 0.960938f},
- {0.363281f, 0.609375f, 0.515625f, 0.171875f}, {0.445312f, 0.289062f, 0.683594f, 0.917969f},
- {0.964844f, 0.808594f, 0.238281f, 0.617188f}, {0.277344f, 0.085938f, 0.042969f, 0.062500f},
- {0.394531f, 0.511719f, 0.839844f, 0.203125f}, {0.636719f, 0.753906f, 0.585938f, 0.843750f},
- {0.343750f, 0.417969f, 0.289062f, 0.761719f}, {0.746094f, 0.933594f, 0.011719f, 0.171875f},
- {0.566406f, 0.472656f, 0.816406f, 0.066406f}, {0.398438f, 0.671875f, 0.550781f, 0.566406f},
- {0.675781f, 0.855469f, 0.750000f, 0.351562f}, {0.832031f, 0.546875f, 0.488281f, 0.179688f},
- {0.222656f, 0.992188f, 0.285156f, 0.449219f}, {0.531250f, 0.792969f, 0.117188f, 0.839844f},
- {0.003906f, 0.382812f, 0.875000f, 0.320312f}, {0.718750f, 0.722656f, 0.625000f, 0.718750f},
- {0.925781f, 0.574219f, 0.843750f, 0.636719f}, {0.382812f, 0.878906f, 0.070312f, 0.238281f},
- {0.621094f, 0.015625f, 0.707031f, 0.398438f}, {0.988281f, 0.738281f, 0.195312f, 0.925781f},
- {0.796875f, 0.125000f, 0.039062f, 0.667969f}, {0.136719f, 0.179688f, 0.953125f, 0.796875f},
- {0.632812f, 0.542969f, 0.648438f, 0.382812f}, {0.496094f, 0.804688f, 0.253906f, 0.550781f},
- {0.433594f, 0.449219f, 0.894531f, 0.457031f}, {0.730469f, 0.988281f, 0.203125f, 0.675781f},
- {0.800781f, 0.273438f, 0.484375f, 0.222656f}, {0.136719f, 0.710938f, 0.414062f, 0.074219f},
- {0.617188f, 0.597656f, 0.789062f, 0.472656f}, {0.417969f, 0.851562f, 0.843750f, 0.800781f},
- {0.027344f, 0.242188f, 0.031250f, 0.695312f}, {0.566406f, 0.699219f, 0.398438f, 0.898438f},
- {0.089844f, 0.195312f, 0.593750f, 0.187500f}, {0.617188f, 0.531250f, 0.792969f, 0.382812f},
- {0.199219f, 0.445312f, 0.351562f, 0.769531f}, {0.289062f, 0.074219f, 0.675781f, 0.035156f},
- {0.492188f, 0.632812f, 0.730469f, 0.535156f}, {0.699219f, 0.976562f, 0.382812f, 0.800781f},
- {0.875000f, 0.464844f, 0.308594f, 0.640625f}, {0.121094f, 0.800781f, 0.171875f, 0.437500f},
- {0.257812f, 0.078125f, 0.925781f, 0.714844f}, {0.523438f, 0.550781f, 0.718750f, 0.507812f},
- {0.625000f, 0.992188f, 0.996094f, 0.171875f}, {0.968750f, 0.238281f, 0.781250f, 0.246094f},
- {0.191406f, 0.453125f, 0.433594f, 0.468750f}, {0.441406f, 0.839844f, 0.269531f, 0.812500f},
- {0.855469f, 0.203125f, 0.941406f, 0.621094f}, {0.652344f, 0.890625f, 0.347656f, 0.113281f},
- {0.972656f, 0.007812f, 0.687500f, 0.480469f}, {0.156250f, 0.679688f, 0.585938f, 0.683594f},
- {0.015625f, 0.617188f, 0.519531f, 0.078125f}, {0.761719f, 0.437500f, 0.945312f, 0.453125f},
- {0.371094f, 0.261719f, 0.078125f, 0.320312f}, {0.585938f, 0.652344f, 0.757812f, 0.054688f},
- {0.031250f, 0.207031f, 0.972656f, 0.609375f}, {0.644531f, 0.585938f, 0.375000f, 0.292969f},
- {0.210938f, 0.894531f, 0.242188f, 0.769531f}, {0.269531f, 0.246094f, 0.902344f, 0.574219f},
- {0.882812f, 0.390625f, 0.957031f, 0.355469f}, {0.570312f, 0.457031f, 0.769531f, 0.062500f},
- {0.726562f, 0.953125f, 0.214844f, 0.406250f}, {0.988281f, 0.347656f, 0.136719f, 0.742188f},
- {0.066406f, 0.785156f, 0.972656f, 0.035156f}, {0.156250f, 0.425781f, 0.726562f, 0.375000f},
- {0.207031f, 0.015625f, 0.015625f, 0.589844f}, {0.710938f, 0.898438f, 0.894531f, 0.480469f},
- {0.031250f, 0.160156f, 0.562500f, 0.792969f}, {0.546875f, 0.980469f, 0.480469f, 0.273438f},
- {0.863281f, 0.859375f, 0.738281f, 0.535156f}, {0.101562f, 0.355469f, 0.171875f, 0.371094f},
- {0.910156f, 0.054688f, 0.523438f, 0.011719f}, {0.296875f, 0.808594f, 0.894531f, 0.640625f},
- {0.937500f, 0.257812f, 0.457031f, 0.414062f}, {0.125000f, 0.113281f, 0.152344f, 0.804688f},
- {0.507812f, 0.363281f, 0.617188f, 0.882812f}, {0.957031f, 0.195312f, 0.394531f, 0.656250f},
- {0.054688f, 0.695312f, 0.906250f, 0.750000f}, {0.902344f, 0.070312f, 0.703125f, 0.582031f},
- {0.421875f, 0.929688f, 0.031250f, 0.140625f}, {0.187500f, 0.167969f, 0.671875f, 0.433594f},
- {0.476562f, 0.101562f, 0.363281f, 0.980469f}, {0.281250f, 0.683594f, 0.570312f, 0.765625f},
- {0.847656f, 0.437500f, 0.472656f, 0.167969f}, {0.078125f, 0.628906f, 0.832031f, 0.605469f},
- {0.570312f, 0.328125f, 0.593750f, 0.101562f}, {0.261719f, 0.765625f, 0.738281f, 0.503906f},
- {0.906250f, 0.242188f, 0.164062f, 0.960938f}, {0.324219f, 0.007812f, 0.824219f, 0.164062f},
- {0.593750f, 0.683594f, 0.570312f, 0.089844f}, {0.921875f, 0.617188f, 0.105469f, 0.296875f},
- {0.527344f, 0.050781f, 0.632812f, 0.851562f}, {0.359375f, 0.375000f, 0.910156f, 0.726562f},
- {0.835938f, 0.128906f, 0.070312f, 0.937500f}, {0.664062f, 0.515625f, 0.226562f, 0.027344f},
- {0.226562f, 0.890625f, 0.500000f, 0.300781f}, {0.851562f, 0.574219f, 0.757812f, 0.648438f},
- {0.316406f, 0.753906f, 0.257812f, 0.058594f}, {0.429688f, 0.277344f, 0.937500f, 0.507812f},
- {0.007812f, 0.031250f, 0.019531f, 0.878906f}, {0.933594f, 0.714844f, 0.550781f, 0.308594f},
- {0.835938f, 0.847656f, 0.136719f, 0.164062f}, {0.234375f, 0.546875f, 0.617188f, 0.968750f},
- {0.394531f, 0.132812f, 0.902344f, 0.355469f}, {0.980469f, 0.679688f, 0.566406f, 0.019531f},
- {0.671875f, 0.839844f, 0.468750f, 0.585938f}, {0.046875f, 0.417969f, 0.250000f, 0.378906f},
- {0.375000f, 0.597656f, 0.023438f, 0.898438f}, {0.695312f, 0.789062f, 0.625000f, 0.753906f},
- {0.898438f, 0.375000f, 0.875000f, 0.007812f}, {0.328125f, 0.542969f, 0.113281f, 0.531250f},
- {0.578125f, 0.109375f, 0.542969f, 0.300781f}, {0.085938f, 0.406250f, 0.765625f, 0.988281f},
- {0.285156f, 0.566406f, 0.062500f, 0.339844f}, {0.472656f, 0.777344f, 0.128906f, 0.164062f},
- {0.636719f, 0.363281f, 0.628906f, 0.750000f}, {0.832031f, 0.035156f, 0.394531f, 0.835938f},
- {0.109375f, 0.972656f, 0.667969f, 0.195312f}, {0.183594f, 0.710938f, 0.222656f, 0.890625f},
- {0.808594f, 0.066406f, 0.046875f, 0.707031f}, {0.460938f, 0.953125f, 0.855469f, 0.476562f},
- {0.082031f, 0.335938f, 0.652344f, 0.203125f}, {0.667969f, 0.738281f, 0.093750f, 0.121094f},
- {0.425781f, 0.664062f, 0.417969f, 0.683594f}, {0.164062f, 0.007812f, 0.613281f, 0.964844f},
- {0.632812f, 0.703125f, 0.042969f, 0.617188f}, {0.250000f, 0.554688f, 0.804688f, 0.464844f},
- {0.394531f, 0.242188f, 0.371094f, 0.878906f}, {0.937500f, 0.847656f, 0.601562f, 0.816406f},
- {0.804688f, 0.679688f, 0.195312f, 0.113281f}, {0.601562f, 0.378906f, 0.335938f, 0.320312f},
- {0.339844f, 0.562500f, 0.812500f, 0.867188f}, {0.785156f, 0.437500f, 0.125000f, 0.140625f},
- {0.230469f, 0.273438f, 0.355469f, 0.980469f}, {0.687500f, 0.656250f, 0.957031f, 0.468750f},
- {0.156250f, 0.148438f, 0.082031f, 0.726562f}, {0.464844f, 0.535156f, 0.703125f, 0.898438f},
- {0.039062f, 0.722656f, 0.324219f, 0.285156f}, {0.250000f, 0.945312f, 0.945312f, 0.117188f},
- {0.777344f, 0.589844f, 0.093750f, 0.484375f}, {0.328125f, 0.285156f, 0.222656f, 0.023438f},
- {0.609375f, 0.421875f, 0.828125f, 0.390625f}, {0.746094f, 0.617188f, 0.335938f, 0.929688f},
- {0.261719f, 0.238281f, 0.449219f, 0.265625f}, {0.863281f, 0.472656f, 0.953125f, 0.031250f},
- {0.105469f, 0.316406f, 0.292969f, 0.355469f}, {0.765625f, 0.976562f, 0.152344f, 0.531250f},
- {0.523438f, 0.195312f, 0.933594f, 0.828125f}, {0.343750f, 0.554688f, 0.242188f, 0.304688f},
- {0.414062f, 0.890625f, 0.414062f, 0.742188f}, {0.695312f, 0.496094f, 0.085938f, 0.250000f},
- {0.824219f, 0.933594f, 0.316406f, 0.832031f}, {0.109375f, 0.386719f, 0.433594f, 0.347656f},
- {0.199219f, 0.304688f, 0.000000f, 0.632812f}, {0.023438f, 0.843750f, 0.378906f, 0.988281f},
- {0.679688f, 0.480469f, 0.746094f, 0.429688f}, {0.265625f, 0.769531f, 0.312500f, 0.574219f},
- {0.058594f, 0.941406f, 0.593750f, 0.359375f}, {0.507812f, 0.074219f, 0.992188f, 0.527344f},
- {0.160156f, 0.308594f, 0.167969f, 0.214844f}, {0.945312f, 0.382812f, 0.644531f, 0.964844f},
- {0.789062f, 0.105469f, 0.117188f, 0.441406f}, {0.523438f, 0.613281f, 0.875000f, 0.812500f},
- {0.722656f, 0.953125f, 0.492188f, 0.226562f}, {0.371094f, 0.347656f, 0.226562f, 0.617188f},
- {0.101562f, 0.214844f, 0.984375f, 0.464844f}, {0.628906f, 0.406250f, 0.433594f, 0.742188f},
- {0.777344f, 0.011719f, 0.035156f, 0.199219f}, {0.480469f, 0.277344f, 0.753906f, 0.855469f},
- {0.339844f, 0.332031f, 0.347656f, 0.281250f}, {0.093750f, 0.207031f, 0.671875f, 0.792969f},
- {0.808594f, 0.699219f, 0.156250f, 0.121094f}, {0.226562f, 0.097656f, 0.507812f, 0.335938f},
- {0.476562f, 0.941406f, 0.367188f, 0.945312f}, {0.109375f, 0.660156f, 0.187500f, 0.210938f},
- {0.800781f, 0.750000f, 0.609375f, 0.066406f}, {0.382812f, 0.984375f, 0.824219f, 0.714844f},
- {0.738281f, 0.242188f, 0.296875f, 0.554688f}, {0.222656f, 0.832031f, 0.917969f, 0.906250f},
- {0.320312f, 0.929688f, 0.464844f, 0.503906f}, {0.980469f, 0.519531f, 0.175781f, 0.277344f},
- {0.500000f, 0.312500f, 0.808594f, 0.664062f}, {0.285156f, 0.816406f, 0.562500f, 0.789062f},
- {0.929688f, 0.542969f, 0.437500f, 0.382812f}, {0.542969f, 0.414062f, 0.507812f, 0.023438f},
- {0.777344f, 0.847656f, 0.308594f, 0.843750f}, {0.976562f, 0.121094f, 0.738281f, 0.527344f},
- {0.042969f, 0.511719f, 0.164062f, 0.316406f}, {0.507812f, 0.812500f, 0.492188f, 0.824219f},
- {0.339844f, 0.183594f, 0.875000f, 0.089844f}, {0.773438f, 0.074219f, 0.546875f, 0.281250f},
- {0.460938f, 0.640625f, 0.929688f, 0.195312f}, {0.558594f, 0.121094f, 0.105469f, 0.695312f},
- {0.285156f, 0.316406f, 0.781250f, 0.523438f}, {0.875000f, 0.769531f, 0.414062f, 0.019531f},
- {0.121094f, 0.222656f, 0.984375f, 0.710938f}, {0.488281f, 0.710938f, 0.269531f, 0.398438f},
- {0.992188f, 0.031250f, 0.625000f, 0.656250f}, {0.421875f, 0.597656f, 0.437500f, 0.101562f},
- {0.593750f, 0.890625f, 0.777344f, 0.226562f}, {0.839844f, 0.214844f, 0.601562f, 0.589844f},
- {0.718750f, 0.402344f, 0.253906f, 0.523438f}, {0.644531f, 0.019531f, 0.855469f, 0.687500f},
- {0.433594f, 0.820312f, 0.667969f, 0.992188f}, {0.167969f, 0.746094f, 0.050781f, 0.238281f},
- {0.109375f, 0.128906f, 0.582031f, 0.105469f}, {0.363281f, 0.847656f, 0.527344f, 0.527344f},
- {0.687500f, 0.531250f, 0.191406f, 0.804688f}, {0.562500f, 0.777344f, 0.101562f, 0.683594f},
- {0.636719f, 0.597656f, 0.796875f, 0.890625f}, {0.953125f, 0.402344f, 0.726562f, 0.113281f},
- {0.164062f, 0.832031f, 0.011719f, 0.453125f}, {0.734375f, 0.265625f, 0.343750f, 0.019531f},
- {0.210938f, 0.046875f, 0.675781f, 0.941406f}, {0.003906f, 0.089844f, 0.910156f, 0.421875f},
- {0.535156f, 0.703125f, 0.523438f, 0.058594f}, {0.382812f, 0.578125f, 0.980469f, 0.582031f},
- {0.984375f, 0.113281f, 0.699219f, 0.761719f}, {0.304688f, 0.906250f, 0.851562f, 0.023438f},
- {0.859375f, 0.167969f, 0.250000f, 0.261719f}, {0.453125f, 0.230469f, 0.144531f, 0.113281f},
- {0.960938f, 0.429688f, 0.453125f, 0.828125f}, {0.757812f, 0.628906f, 0.695312f, 0.156250f},
- {0.375000f, 0.792969f, 0.343750f, 0.757812f}, {0.691406f, 0.476562f, 0.558594f, 0.593750f},
- {0.250000f, 0.906250f, 0.300781f, 0.332031f}, {0.140625f, 0.152344f, 0.707031f, 0.136719f},
- {0.871094f, 0.824219f, 0.394531f, 0.667969f}, {0.582031f, 0.496094f, 0.828125f, 0.941406f},
- {0.453125f, 0.589844f, 0.769531f, 0.394531f}, {0.167969f, 0.910156f, 0.285156f, 0.058594f},
- {0.027344f, 0.750000f, 0.195312f, 0.675781f}, {0.570312f, 0.949219f, 0.867188f, 0.515625f},
- {0.843750f, 0.519531f, 0.078125f, 0.933594f}, {0.937500f, 0.878906f, 0.835938f, 0.070312f},
- {0.539062f, 0.039062f, 0.292969f, 0.625000f}, {0.761719f, 0.492188f, 0.796875f, 0.558594f},
- {0.597656f, 0.285156f, 0.703125f, 0.828125f}, {0.160156f, 0.171875f, 0.957031f, 0.656250f},
- {0.671875f, 0.058594f, 0.035156f, 0.433594f}, {0.503906f, 0.324219f, 0.417969f, 0.863281f},
- {0.925781f, 0.453125f, 0.230469f, 0.250000f}, {0.566406f, 0.136719f, 0.742188f, 0.031250f},
- {0.066406f, 0.195312f, 0.097656f, 0.968750f}, {0.417969f, 0.753906f, 0.988281f, 0.097656f},
- {0.675781f, 0.113281f, 0.273438f, 0.546875f}, {0.726562f, 0.468750f, 0.339844f, 0.136719f},
- {0.394531f, 0.171875f, 0.914062f, 0.253906f}, {0.144531f, 0.277344f, 0.128906f, 0.996094f},
- {0.316406f, 0.039062f, 0.578125f, 0.644531f}, {0.714844f, 0.574219f, 0.820312f, 0.910156f},
- {0.378906f, 0.222656f, 0.269531f, 0.437500f}, {0.906250f, 0.984375f, 0.707031f, 0.175781f},
- {0.113281f, 0.371094f, 0.339844f, 0.765625f}, {0.851562f, 0.882812f, 0.242188f, 0.570312f},
- {0.015625f, 0.472656f, 0.453125f, 0.343750f}, {0.664062f, 0.972656f, 0.292969f, 0.984375f},
- {0.097656f, 0.523438f, 0.660156f, 0.421875f}, {0.429688f, 0.058594f, 0.527344f, 0.234375f},
- {0.187500f, 0.933594f, 0.070312f, 0.925781f}, {0.628906f, 0.132812f, 0.679688f, 0.558594f},
- {0.753906f, 0.796875f, 0.203125f, 0.773438f}, {0.070312f, 0.484375f, 0.847656f, 0.328125f},
- {0.355469f, 0.964844f, 0.035156f, 0.855469f}, {0.527344f, 0.335938f, 0.390625f, 0.933594f},
- {0.210938f, 0.625000f, 0.191406f, 0.367188f}, {0.976562f, 0.460938f, 0.507812f, 0.191406f},
- {0.582031f, 0.171875f, 0.425781f, 0.765625f}, {0.882812f, 0.507812f, 0.761719f, 0.332031f},
- {0.812500f, 0.914062f, 0.265625f, 0.636719f}, {0.496094f, 0.050781f, 0.976562f, 0.875000f},
- {0.980469f, 0.355469f, 0.738281f, 0.187500f}, {0.031250f, 0.898438f, 0.605469f, 0.476562f},
- {0.320312f, 0.027344f, 0.410156f, 0.597656f}, {0.441406f, 0.734375f, 0.507812f, 0.218750f},
- {0.066406f, 0.140625f, 0.894531f, 0.714844f}, {0.894531f, 0.468750f, 0.550781f, 0.562500f},
- {0.652344f, 0.789062f, 0.785156f, 0.648438f}, {0.863281f, 0.972656f, 0.132812f, 0.191406f},
- {0.457031f, 0.425781f, 0.277344f, 0.894531f}, {0.738281f, 0.203125f, 0.605469f, 0.683594f},
- {0.640625f, 0.808594f, 0.480469f, 0.472656f}, {0.777344f, 0.515625f, 0.183594f, 0.199219f},
- {0.125000f, 0.339844f, 0.953125f, 0.921875f}, {0.570312f, 0.671875f, 0.539062f, 0.500000f},
- {0.210938f, 0.730469f, 0.781250f, 0.671875f}, {0.097656f, 0.019531f, 0.019531f, 0.890625f},
- {0.597656f, 0.968750f, 0.835938f, 0.406250f}, {0.468750f, 0.191406f, 0.914062f, 0.082031f},
- {0.042969f, 0.667969f, 0.445312f, 0.847656f}, {0.648438f, 0.421875f, 0.050781f, 0.722656f},
- {0.335938f, 0.773438f, 0.179688f, 0.000000f}, {0.992188f, 0.300781f, 0.636719f, 0.257812f},
- {0.273438f, 0.066406f, 0.093750f, 0.562500f}, {0.750000f, 0.171875f, 0.476562f, 0.902344f},
- {0.902344f, 0.660156f, 0.691406f, 0.320312f}, {0.300781f, 0.445312f, 0.527344f, 0.144531f},
- {0.195312f, 0.621094f, 0.406250f, 0.457031f}, {0.429688f, 0.152344f, 0.968750f, 0.707031f},
- {0.273438f, 0.734375f, 0.453125f, 0.414062f}, {0.003906f, 0.914062f, 0.578125f, 0.265625f},
- {0.410156f, 0.355469f, 0.093750f, 0.484375f}, {0.996094f, 0.847656f, 0.316406f, 0.148438f},
- {0.839844f, 0.605469f, 0.484375f, 0.359375f}, {0.031250f, 0.511719f, 0.898438f, 0.773438f},
- {0.187500f, 0.726562f, 0.679688f, 0.589844f}, {0.867188f, 0.644531f, 0.355469f, 0.390625f},
- {0.136719f, 0.878906f, 0.843750f, 0.640625f}, {0.597656f, 0.589844f, 0.597656f, 0.441406f},
- {0.222656f, 0.394531f, 0.714844f, 0.355469f}, {0.003906f, 0.863281f, 0.031250f, 0.925781f},
- {0.871094f, 0.691406f, 0.761719f, 0.597656f}, {0.621094f, 0.628906f, 0.195312f, 0.414062f},
- {0.230469f, 0.769531f, 0.941406f, 0.074219f}, {0.582031f, 0.929688f, 0.023438f, 0.230469f},
- {0.812500f, 0.433594f, 0.398438f, 0.722656f}, {0.195312f, 0.304688f, 0.996094f, 0.000000f},
- {0.679688f, 0.761719f, 0.089844f, 0.496094f}, {0.593750f, 0.605469f, 0.636719f, 0.925781f},
- {0.222656f, 0.277344f, 0.750000f, 0.136719f}, {0.902344f, 0.730469f, 0.164062f, 0.644531f},
- {0.515625f, 0.191406f, 0.863281f, 0.785156f}, {0.722656f, 0.585938f, 0.031250f, 0.601562f},
- {0.949219f, 0.457031f, 0.921875f, 0.183594f}, {0.312500f, 0.851562f, 0.468750f, 0.066406f},
- {0.003906f, 0.390625f, 0.750000f, 0.257812f}, {0.265625f, 0.304688f, 0.308594f, 0.496094f},
- {0.808594f, 0.097656f, 0.542969f, 0.035156f}, {0.894531f, 0.761719f, 0.136719f, 0.152344f},
- {0.089844f, 0.691406f, 0.992188f, 0.445312f}, {0.382812f, 0.070312f, 0.792969f, 0.070312f},
- {0.011719f, 0.984375f, 0.355469f, 0.843750f}, {0.281250f, 0.308594f, 0.910156f, 0.593750f},
- {0.660156f, 0.648438f, 0.152344f, 0.429688f}, {0.210938f, 0.210938f, 0.468750f, 0.722656f},
- {0.406250f, 0.703125f, 0.019531f, 0.304688f}, {0.148438f, 0.273438f, 0.882812f, 0.078125f},
- {0.832031f, 0.089844f, 0.250000f, 0.968750f}, {0.242188f, 0.863281f, 0.652344f, 0.335938f},
- {0.601562f, 0.371094f, 0.199219f, 0.847656f}, {0.484375f, 0.679688f, 0.062500f, 0.277344f},
- {0.289062f, 0.617188f, 0.453125f, 0.378906f}, {0.941406f, 0.343750f, 0.863281f, 0.515625f},
- {0.152344f, 0.281250f, 0.218750f, 0.128906f}, {0.238281f, 0.746094f, 0.039062f, 0.316406f},
- {0.046875f, 0.636719f, 0.792969f, 0.871094f}, {0.496094f, 0.031250f, 0.351562f, 0.390625f},
- {0.406250f, 0.980469f, 0.660156f, 0.789062f}, {0.707031f, 0.558594f, 0.054688f, 0.609375f},
- {0.886719f, 0.859375f, 0.890625f, 0.320312f}, {0.312500f, 0.132812f, 0.394531f, 0.039062f},
- {0.816406f, 0.265625f, 0.250000f, 0.242188f}, {0.906250f, 0.355469f, 0.097656f, 0.488281f},
- {0.410156f, 0.539062f, 0.746094f, 0.921875f}, {0.769531f, 0.093750f, 0.972656f, 0.539062f},
- {0.203125f, 0.246094f, 0.527344f, 0.425781f}, {0.070312f, 0.695312f, 0.324219f, 0.800781f},
- {0.820312f, 0.878906f, 0.906250f, 0.117188f}, {0.515625f, 0.375000f, 0.574219f, 0.761719f},
- {0.660156f, 0.238281f, 0.941406f, 0.605469f}, {0.113281f, 0.105469f, 0.132812f, 0.835938f},
- {0.710938f, 0.820312f, 0.652344f, 0.238281f}, {0.621094f, 0.394531f, 0.214844f, 0.992188f},
- {0.136719f, 0.253906f, 0.011719f, 0.187500f}, {0.921875f, 0.578125f, 0.902344f, 0.046875f},
- {0.730469f, 0.441406f, 0.246094f, 0.886719f}, {0.300781f, 0.800781f, 0.847656f, 0.957031f},
- {0.238281f, 0.222656f, 0.648438f, 0.687500f}, {0.355469f, 0.894531f, 0.136719f, 0.109375f},
- {0.707031f, 0.027344f, 0.554688f, 0.199219f}, {0.453125f, 0.285156f, 0.003906f, 0.800781f},
- {0.953125f, 0.074219f, 0.511719f, 0.156250f}, {0.750000f, 0.671875f, 0.152344f, 0.863281f},
- {0.824219f, 0.238281f, 0.402344f, 0.699219f}, {0.339844f, 0.003906f, 0.492188f, 0.042969f},
- {0.964844f, 0.980469f, 0.867188f, 0.753906f}, {0.101562f, 0.367188f, 0.617188f, 0.511719f},
- {0.492188f, 0.488281f, 0.363281f, 0.300781f}, {0.062500f, 0.156250f, 0.667969f, 0.800781f},
- {0.277344f, 0.652344f, 0.550781f, 0.355469f}, {0.441406f, 0.062500f, 0.847656f, 0.601562f},
- {0.953125f, 0.535156f, 0.199219f, 0.847656f}, {0.316406f, 0.140625f, 0.011719f, 0.250000f},
- {0.757812f, 0.019531f, 0.910156f, 0.390625f}, {0.359375f, 0.390625f, 0.570312f, 0.042969f},
- {0.054688f, 0.902344f, 0.386719f, 0.863281f}, {0.824219f, 0.339844f, 0.714844f, 0.304688f},
- {0.390625f, 0.632812f, 0.242188f, 0.457031f}, {0.562500f, 0.238281f, 0.589844f, 0.734375f},
- {0.921875f, 0.683594f, 0.097656f, 0.953125f}, {0.507812f, 0.550781f, 0.949219f, 0.816406f},
- {0.671875f, 0.191406f, 0.878906f, 0.617188f}, {0.175781f, 0.835938f, 0.644531f, 0.703125f},
- {0.316406f, 0.273438f, 0.718750f, 0.789062f}, {0.757812f, 0.871094f, 0.000000f, 0.550781f},
- {0.546875f, 0.566406f, 0.113281f, 0.265625f}, {0.472656f, 0.382812f, 0.621094f, 0.941406f},
- {0.925781f, 0.796875f, 0.699219f, 0.156250f}, {0.058594f, 0.437500f, 0.386719f, 0.050781f},
- {0.777344f, 0.945312f, 0.308594f, 0.781250f}, {0.535156f, 0.496094f, 0.820312f, 0.394531f},
- {0.906250f, 0.644531f, 0.125000f, 0.656250f}, {0.703125f, 0.542969f, 0.371094f, 0.144531f},
- {0.804688f, 0.226562f, 0.988281f, 0.914062f}, {0.378906f, 0.906250f, 0.300781f, 0.046875f},
- {0.035156f, 0.175781f, 0.753906f, 0.785156f}, {0.570312f, 0.566406f, 0.628906f, 0.976562f},
- {0.343750f, 0.125000f, 0.390625f, 0.730469f}, {0.804688f, 0.878906f, 0.722656f, 0.238281f},
- {0.605469f, 0.453125f, 0.921875f, 0.539062f}, {0.953125f, 0.257812f, 0.089844f, 0.093750f},
- {0.179688f, 0.085938f, 0.429688f, 0.714844f}, {0.347656f, 0.402344f, 0.281250f, 0.167969f},
- {0.628906f, 0.300781f, 0.613281f, 0.449219f}, {0.007812f, 0.503906f, 0.507812f, 0.984375f},
- {0.539062f, 0.601562f, 0.187500f, 0.710938f}, {0.281250f, 0.835938f, 0.660156f, 0.632812f},
- {0.113281f, 0.738281f, 0.363281f, 0.285156f}, {0.953125f, 0.933594f, 0.593750f, 0.191406f},
- {0.554688f, 0.007812f, 0.238281f, 0.355469f}, {0.683594f, 0.625000f, 0.800781f, 0.980469f},
- {0.417969f, 0.472656f, 0.000000f, 0.500000f}, {0.222656f, 0.984375f, 0.371094f, 0.218750f},
- {0.382812f, 0.777344f, 0.253906f, 0.070312f}, {0.972656f, 0.566406f, 0.808594f, 0.378906f},
- {0.472656f, 0.308594f, 0.316406f, 0.542969f}, {0.789062f, 0.058594f, 0.609375f, 0.781250f},
- {0.855469f, 0.972656f, 0.726562f, 0.648438f}, {0.359375f, 0.652344f, 0.519531f, 0.746094f},
- {0.511719f, 0.000000f, 0.425781f, 0.582031f}, {0.074219f, 0.125000f, 0.750000f, 0.296875f},
- {0.625000f, 0.683594f, 0.382812f, 0.027344f}, {0.546875f, 0.960938f, 0.199219f, 0.523438f},
- {0.792969f, 0.414062f, 0.964844f, 0.917969f}, {0.269531f, 0.488281f, 0.773438f, 0.308594f},
- {0.375000f, 0.332031f, 0.312500f, 0.007812f}, {0.519531f, 0.941406f, 0.894531f, 0.570312f},
- {0.175781f, 0.777344f, 0.226562f, 0.210938f}, {0.558594f, 0.558594f, 0.687500f, 0.324219f},
- {0.449219f, 0.316406f, 0.078125f, 0.828125f}, {0.656250f, 0.101562f, 0.449219f, 0.164062f},
- {0.839844f, 0.832031f, 0.250000f, 0.683594f}, {0.914062f, 0.253906f, 0.777344f, 0.554688f},
- {0.738281f, 0.906250f, 0.144531f, 0.125000f}, {0.550781f, 0.714844f, 0.472656f, 0.945312f},
- {0.039062f, 0.863281f, 0.695312f, 0.660156f}, {0.140625f, 0.445312f, 0.421875f, 0.453125f},
- {0.476562f, 0.832031f, 0.796875f, 0.738281f}, {0.980469f, 0.679688f, 0.496094f, 0.101562f},
- {0.269531f, 0.792969f, 0.121094f, 0.500000f}, {0.160156f, 0.101562f, 0.324219f, 0.152344f},
- {0.656250f, 0.960938f, 0.820312f, 0.894531f}, {0.226562f, 0.000000f, 0.406250f, 0.640625f},
- {0.851562f, 0.742188f, 0.156250f, 0.343750f}, {0.136719f, 0.917969f, 0.359375f, 0.425781f},
- {0.414062f, 0.054688f, 0.492188f, 0.210938f}, {0.613281f, 0.441406f, 0.257812f, 0.300781f},
- {0.941406f, 0.511719f, 0.449219f, 0.972656f}, {0.699219f, 0.128906f, 0.570312f, 0.652344f},
- {0.847656f, 0.226562f, 0.281250f, 0.003906f}, {0.128906f, 0.734375f, 0.871094f, 0.375000f},
- {0.339844f, 0.007812f, 0.535156f, 0.507812f}, {0.726562f, 0.117188f, 0.074219f, 0.894531f},
- {0.257812f, 0.582031f, 0.933594f, 0.570312f}, {0.593750f, 0.171875f, 0.566406f, 0.250000f},
- {0.351562f, 0.410156f, 0.484375f, 0.488281f}, {0.117188f, 0.996094f, 0.703125f, 0.761719f},
- {0.191406f, 0.308594f, 0.843750f, 0.425781f}, {0.992188f, 0.003906f, 0.578125f, 0.609375f},
- {0.769531f, 0.503906f, 0.164062f, 0.097656f}, {0.105469f, 0.816406f, 0.945312f, 0.460938f},
- {0.699219f, 0.046875f, 0.109375f, 0.824219f}, {0.421875f, 0.957031f, 0.535156f, 0.007812f},
- {0.898438f, 0.359375f, 0.312500f, 0.636719f}, {0.281250f, 0.718750f, 0.582031f, 0.964844f},
- {0.082031f, 0.605469f, 0.863281f, 0.285156f}, {0.847656f, 0.800781f, 0.757812f, 0.070312f},
- {0.445312f, 0.203125f, 0.125000f, 0.820312f}, {0.980469f, 0.902344f, 0.714844f, 0.562500f},
- {0.164062f, 0.691406f, 0.921875f, 0.359375f}, {0.734375f, 0.046875f, 0.812500f, 0.144531f},
- {0.613281f, 0.457031f, 0.480469f, 0.777344f}, {0.359375f, 0.320312f, 0.140625f, 0.089844f},
- {0.488281f, 0.574219f, 0.886719f, 0.863281f}, {0.152344f, 0.855469f, 0.703125f, 0.636719f},
- {0.921875f, 0.136719f, 0.421875f, 0.296875f}, {0.011719f, 0.527344f, 0.167969f, 0.710938f},
- {0.601562f, 0.027344f, 0.742188f, 0.441406f}, {0.328125f, 0.707031f, 0.066406f, 0.882812f},
- {0.050781f, 0.906250f, 0.875000f, 0.015625f}, {0.246094f, 0.500000f, 0.378906f, 0.339844f},
- {0.566406f, 0.769531f, 0.117188f, 0.121094f}, {0.179688f, 0.195312f, 0.175781f, 0.386719f},
- {0.656250f, 0.527344f, 0.988281f, 0.816406f}, {0.882812f, 0.304688f, 0.042969f, 0.449219f},
- {0.425781f, 0.375000f, 0.601562f, 0.242188f}, {0.929688f, 0.562500f, 0.812500f, 0.617188f},
- {0.101562f, 0.164062f, 0.261719f, 0.468750f}, {0.644531f, 0.820312f, 0.441406f, 0.718750f},
- {0.023438f, 0.523438f, 0.632812f, 0.261719f}, {0.898438f, 0.437500f, 0.945312f, 0.953125f},
- {0.066406f, 0.140625f, 0.109375f, 0.492188f}, {0.281250f, 0.882812f, 0.832031f, 0.902344f},
- {0.781250f, 0.207031f, 0.292969f, 0.445312f}, {0.148438f, 0.722656f, 0.976562f, 0.089844f},
- {0.402344f, 0.593750f, 0.523438f, 0.960938f}, {0.351562f, 0.046875f, 0.066406f, 0.871094f},
- {0.175781f, 0.402344f, 0.316406f, 0.402344f}, {0.640625f, 0.339844f, 0.937500f, 0.046875f},
- {0.871094f, 0.199219f, 0.589844f, 0.203125f}, {0.414062f, 0.945312f, 0.355469f, 0.316406f},
- {0.691406f, 0.246094f, 0.277344f, 0.902344f}, {0.539062f, 0.507812f, 0.980469f, 0.566406f},
- {0.609375f, 0.167969f, 0.214844f, 0.679688f}, {0.781250f, 0.429688f, 0.617188f, 0.820312f},
- {0.464844f, 0.285156f, 0.875000f, 0.375000f}, {0.101562f, 0.488281f, 0.511719f, 0.019531f},
- {0.710938f, 0.156250f, 0.691406f, 0.121094f}, {0.363281f, 0.359375f, 0.792969f, 0.578125f},
- {0.792969f, 0.593750f, 0.046875f, 0.906250f}, {0.476562f, 0.972656f, 0.199219f, 0.089844f},
- {0.031250f, 0.667969f, 0.824219f, 0.390625f}, {0.242188f, 0.343750f, 0.933594f, 0.480469f},
- {0.421875f, 0.937500f, 0.339844f, 0.132812f}, {0.191406f, 0.613281f, 0.183594f, 0.750000f},
- {0.617188f, 0.472656f, 0.800781f, 0.675781f}, {0.867188f, 0.855469f, 0.230469f, 0.203125f},
- {0.449219f, 0.328125f, 0.660156f, 0.953125f}, {0.964844f, 0.746094f, 0.769531f, 0.828125f},
- {0.007812f, 0.824219f, 0.179688f, 0.011719f}, {0.503906f, 0.125000f, 0.085938f, 0.531250f},
- {0.421875f, 0.777344f, 0.433594f, 0.199219f}, {0.660156f, 0.710938f, 0.027344f, 0.679688f},
- {0.261719f, 0.941406f, 0.347656f, 0.257812f}, {0.527344f, 0.386719f, 0.492188f, 0.351562f},
- {0.843750f, 0.660156f, 0.671875f, 0.179688f}, {0.195312f, 0.195312f, 0.246094f, 0.578125f},
- {0.062500f, 0.539062f, 0.828125f, 0.429688f}, {0.519531f, 0.847656f, 0.156250f, 0.363281f},
- {0.730469f, 0.156250f, 0.472656f, 0.855469f}, {0.789062f, 0.941406f, 0.210938f, 0.527344f},
- {0.250000f, 0.445312f, 0.960938f, 0.218750f}, {0.671875f, 0.078125f, 0.320312f, 0.753906f},
- {0.500000f, 0.378906f, 0.417969f, 0.015625f}, {0.222656f, 0.988281f, 0.066406f, 0.949219f},
- {0.828125f, 0.164062f, 0.285156f, 0.453125f}, {0.031250f, 0.222656f, 0.761719f, 0.589844f},
- {0.878906f, 0.800781f, 0.042969f, 0.691406f}, {0.308594f, 0.351562f, 0.460938f, 0.027344f},
- {0.789062f, 0.417969f, 0.656250f, 0.160156f}, {0.726562f, 0.285156f, 0.972656f, 0.941406f},
- {0.859375f, 0.207031f, 0.597656f, 0.796875f}, {0.535156f, 0.839844f, 0.496094f, 0.621094f},
- {0.941406f, 0.343750f, 0.445312f, 0.285156f}, {0.097656f, 0.164062f, 0.949219f, 0.914062f},
- {0.687500f, 0.421875f, 0.789062f, 0.492188f}, {0.453125f, 0.871094f, 0.675781f, 0.214844f},
- {0.035156f, 0.710938f, 0.289062f, 0.078125f}, {0.781250f, 0.941406f, 0.542969f, 0.703125f},
- {0.207031f, 0.777344f, 0.101562f, 0.867188f}, {0.152344f, 0.089844f, 0.339844f, 0.984375f},
- {0.480469f, 0.257812f, 0.707031f, 0.371094f}, {0.843750f, 0.722656f, 0.070312f, 0.835938f},
- {0.230469f, 0.199219f, 0.750000f, 0.417969f}, {0.417969f, 0.054688f, 0.542969f, 0.773438f},
- {0.617188f, 0.632812f, 0.375000f, 0.070312f}, {0.710938f, 0.386719f, 0.578125f, 0.613281f},
- {0.921875f, 0.500000f, 0.652344f, 0.281250f}, {0.246094f, 0.921875f, 0.164062f, 0.644531f},
- {0.687500f, 0.445312f, 0.890625f, 0.218750f}, {0.023438f, 0.789062f, 0.718750f, 0.476562f},
- {0.996094f, 0.523438f, 0.820312f, 0.269531f}, {0.507812f, 0.117188f, 0.234375f, 0.710938f},
- {0.253906f, 0.628906f, 0.105469f, 0.531250f}, {0.824219f, 0.574219f, 0.886719f, 0.800781f},
- {0.070312f, 0.316406f, 0.050781f, 0.164062f}, {0.199219f, 0.039062f, 0.664062f, 0.964844f},
- {0.867188f, 0.652344f, 0.769531f, 0.277344f}, {0.023438f, 0.867188f, 0.078125f, 0.222656f},
- {0.335938f, 0.769531f, 0.960938f, 0.535156f}, {0.898438f, 0.535156f, 0.015625f, 0.996094f},
- {0.585938f, 0.890625f, 0.269531f, 0.691406f}, {0.054688f, 0.644531f, 0.925781f, 0.175781f},
- {0.980469f, 0.261719f, 0.585938f, 0.511719f}, {0.285156f, 0.789062f, 0.667969f, 0.742188f},
- {0.113281f, 0.023438f, 0.402344f, 0.859375f}, {0.578125f, 0.417969f, 0.066406f, 0.230469f},
- {0.800781f, 0.816406f, 0.753906f, 0.921875f}, {0.992188f, 0.164062f, 0.492188f, 0.816406f},
- {0.519531f, 0.281250f, 0.414062f, 0.289062f}, {0.085938f, 0.675781f, 0.968750f, 0.449219f},
- {0.167969f, 0.964844f, 0.046875f, 0.347656f}, {0.671875f, 0.035156f, 0.347656f, 0.113281f},
- {0.761719f, 0.257812f, 0.277344f, 0.714844f}, {0.300781f, 0.457031f, 0.925781f, 0.316406f},
- {0.578125f, 0.605469f, 0.617188f, 0.984375f}, {0.875000f, 0.082031f, 0.789062f, 0.851562f},
- {0.156250f, 0.437500f, 0.265625f, 0.558594f}, {0.453125f, 0.253906f, 0.738281f, 0.898438f},
- {0.968750f, 0.761719f, 0.882812f, 0.703125f}, {0.312500f, 0.480469f, 0.406250f, 0.949219f},
- {0.679688f, 0.097656f, 0.031250f, 0.773438f}, {0.589844f, 0.308594f, 0.996094f, 0.125000f},
- {0.375000f, 0.679688f, 0.691406f, 0.675781f}, {0.128906f, 0.000000f, 0.375000f, 0.929688f},
- {0.562500f, 0.753906f, 0.570312f, 0.421875f}, {0.050781f, 0.562500f, 0.003906f, 0.304688f},
- {0.386719f, 0.250000f, 0.531250f, 0.648438f}, {0.937500f, 0.781250f, 0.621094f, 0.843750f},
- {0.437500f, 0.636719f, 0.953125f, 0.515625f}, {0.695312f, 0.515625f, 0.214844f, 0.242188f},
- {0.253906f, 0.949219f, 0.562500f, 0.910156f}, {0.636719f, 0.097656f, 0.296875f, 0.406250f},
- {0.453125f, 0.746094f, 0.109375f, 0.566406f}, {0.121094f, 0.917969f, 0.832031f, 0.480469f},
- {0.269531f, 0.632812f, 0.207031f, 0.105469f}, {0.183594f, 0.449219f, 0.281250f, 0.179688f},
- {0.746094f, 0.675781f, 0.031250f, 0.691406f}, {0.402344f, 0.113281f, 0.558594f, 0.574219f},
- {0.894531f, 0.613281f, 0.238281f, 0.839844f}, {0.277344f, 0.277344f, 0.351562f, 0.964844f},
- {0.976562f, 0.074219f, 0.832031f, 0.535156f}, {0.332031f, 0.472656f, 0.464844f, 0.335938f},
- {0.738281f, 0.597656f, 0.882812f, 0.171875f}, {0.601562f, 0.855469f, 0.937500f, 0.125000f},
- {0.292969f, 0.648438f, 0.500000f, 0.058594f}, {0.687500f, 0.996094f, 0.175781f, 0.660156f},
- {0.984375f, 0.582031f, 0.820312f, 0.527344f}, {0.757812f, 0.761719f, 0.253906f, 0.339844f},
- {0.488281f, 0.843750f, 0.472656f, 0.128906f}, {0.324219f, 0.265625f, 0.007812f, 0.726562f},
- {0.085938f, 0.023438f, 0.792969f, 0.386719f}, {0.519531f, 0.664062f, 0.414062f, 0.789062f},
- {0.578125f, 0.175781f, 0.351562f, 0.015625f}, {0.792969f, 0.292969f, 0.035156f, 0.585938f},
- {0.308594f, 0.992188f, 0.441406f, 0.769531f}, {0.105469f, 0.683594f, 0.648438f, 0.988281f},
- {0.765625f, 0.804688f, 0.519531f, 0.093750f}, {0.371094f, 0.074219f, 0.734375f, 0.621094f},
- {0.929688f, 0.746094f, 0.156250f, 0.359375f}, {0.296875f, 0.964844f, 0.546875f, 0.011719f},
- {0.722656f, 0.554688f, 0.453125f, 0.414062f}, {0.402344f, 0.347656f, 0.371094f, 0.761719f},
- {0.964844f, 0.207031f, 0.187500f, 0.078125f}, {0.511719f, 0.074219f, 0.558594f, 0.476562f},
- {0.257812f, 0.808594f, 0.433594f, 0.781250f}, {0.191406f, 0.410156f, 0.746094f, 0.839844f},
- {0.750000f, 0.109375f, 0.117188f, 0.281250f}, {0.531250f, 0.195312f, 0.312500f, 0.031250f},
- {0.859375f, 0.562500f, 0.976562f, 0.570312f}, {0.664062f, 0.703125f, 0.148438f, 0.320312f},
- {0.363281f, 0.078125f, 0.687500f, 0.613281f}, {0.062500f, 0.531250f, 0.593750f, 0.082031f},
- {0.703125f, 0.886719f, 0.105469f, 0.539062f}, {0.316406f, 0.382812f, 0.632812f, 0.035156f},
- {0.390625f, 0.218750f, 0.453125f, 0.644531f}, {0.835938f, 0.562500f, 0.718750f, 0.582031f},
- {0.214844f, 0.660156f, 0.546875f, 0.886719f}, {0.933594f, 0.359375f, 0.875000f, 0.160156f},
- {0.089844f, 0.890625f, 0.218750f, 0.378906f}, {0.730469f, 0.210938f, 0.519531f, 0.062500f},
- {0.359375f, 0.558594f, 0.972656f, 0.480469f}, {0.621094f, 0.324219f, 0.074219f, 0.136719f},
- {0.042969f, 0.871094f, 0.191406f, 0.304688f}, {0.761719f, 0.589844f, 0.449219f, 0.050781f},
- {0.476562f, 0.914062f, 0.750000f, 0.253906f}, {0.929688f, 0.414062f, 0.621094f, 0.476562f},
- {0.218750f, 0.234375f, 0.269531f, 0.195312f}, {0.867188f, 0.519531f, 0.082031f, 0.042969f},
- {0.320312f, 0.648438f, 0.773438f, 0.613281f}, {0.898438f, 0.328125f, 0.882812f, 0.882812f},
- {0.769531f, 0.882812f, 0.175781f, 0.113281f}, {0.093750f, 0.109375f, 0.828125f, 0.183594f},
- {0.566406f, 0.406250f, 0.687500f, 0.378906f}, {0.179688f, 0.714844f, 0.394531f, 0.054688f},
- {0.984375f, 0.042969f, 0.863281f, 0.316406f}, {0.066406f, 0.671875f, 0.937500f, 0.824219f},
- {0.574219f, 0.183594f, 0.351562f, 0.757812f}, {0.371094f, 0.570312f, 0.531250f, 0.347656f},
- {0.675781f, 0.070312f, 0.718750f, 0.261719f}, {0.480469f, 0.949219f, 0.902344f, 0.976562f},
- {0.808594f, 0.250000f, 0.648438f, 0.398438f}, {0.343750f, 0.539062f, 0.761719f, 0.054688f},
- {0.601562f, 0.984375f, 0.082031f, 0.152344f}, {0.828125f, 0.828125f, 0.917969f, 0.730469f},
- {0.121094f, 0.355469f, 0.625000f, 0.636719f}, {0.554688f, 0.226562f, 0.148438f, 0.406250f},
- {0.398438f, 0.148438f, 0.222656f, 0.792969f}, {0.945312f, 0.429688f, 0.664062f, 0.562500f},
- {0.082031f, 0.015625f, 0.410156f, 0.753906f}, {0.351562f, 0.367188f, 0.039062f, 0.187500f},
- {0.562500f, 0.121094f, 0.359375f, 0.238281f}, {0.191406f, 0.308594f, 0.992188f, 0.886719f},
- {0.128906f, 0.703125f, 0.144531f, 0.988281f}, {0.812500f, 0.539062f, 0.707031f, 0.558594f},
- {0.968750f, 0.968750f, 0.933594f, 0.179688f}, {0.429688f, 0.335938f, 0.214844f, 0.929688f},
- {0.195312f, 0.753906f, 0.554688f, 0.859375f}, {0.902344f, 0.867188f, 0.613281f, 0.363281f},
- {0.468750f, 0.031250f, 0.960938f, 0.152344f}, {0.613281f, 0.234375f, 0.183594f, 0.304688f},
- {0.210938f, 0.417969f, 0.292969f, 0.429688f}, {0.570312f, 0.476562f, 0.855469f, 0.882812f},
- {0.652344f, 0.828125f, 0.406250f, 0.480469f}, {0.453125f, 0.386719f, 0.941406f, 0.722656f},
- {0.085938f, 0.117188f, 0.246094f, 0.585938f}, {0.558594f, 0.710938f, 0.730469f, 0.933594f},
- {0.140625f, 0.609375f, 0.804688f, 0.632812f}, {0.828125f, 0.996094f, 0.652344f, 0.320312f},
- {0.687500f, 0.312500f, 0.335938f, 0.234375f}, {0.441406f, 0.472656f, 0.222656f, 0.402344f},
- {0.632812f, 0.730469f, 0.890625f, 0.937500f}, {0.332031f, 0.871094f, 0.531250f, 0.675781f},
- {0.164062f, 0.304688f, 0.464844f, 0.445312f}, {0.906250f, 0.914062f, 0.851562f, 0.160156f},
- {0.460938f, 0.238281f, 0.246094f, 0.722656f}, {0.273438f, 0.753906f, 0.917969f, 0.398438f},
- {0.777344f, 0.046875f, 0.304688f, 0.992188f}, {0.941406f, 0.496094f, 0.863281f, 0.847656f},
- {0.554688f, 0.781250f, 0.144531f, 0.179688f}, {0.050781f, 0.097656f, 0.816406f, 0.406250f},
- {0.621094f, 0.925781f, 0.003906f, 0.789062f}, {0.468750f, 0.515625f, 0.406250f, 0.273438f},
- {0.820312f, 0.156250f, 0.679688f, 0.621094f}, {0.027344f, 0.691406f, 0.140625f, 0.734375f},
- {0.234375f, 0.828125f, 0.382812f, 0.808594f}, {0.890625f, 0.054688f, 0.640625f, 0.410156f},
- {0.398438f, 0.144531f, 0.582031f, 0.652344f}, {0.117188f, 0.722656f, 0.804688f, 0.519531f},
- {0.265625f, 0.035156f, 0.132812f, 0.835938f}, {0.824219f, 0.781250f, 0.335938f, 0.589844f},
- {0.015625f, 0.972656f, 0.503906f, 0.324219f}, {0.644531f, 0.367188f, 0.843750f, 0.792969f},
- {0.460938f, 0.839844f, 0.656250f, 0.375000f}, {0.707031f, 0.179688f, 0.445312f, 0.496094f},
- {0.148438f, 0.484375f, 0.253906f, 0.269531f}, {0.292969f, 0.585938f, 0.347656f, 0.710938f},
- {0.800781f, 0.292969f, 0.101562f, 0.792969f}, {0.343750f, 0.847656f, 0.503906f, 0.992188f},
- {0.511719f, 0.453125f, 0.160156f, 0.542969f}, {0.843750f, 0.261719f, 0.628906f, 0.207031f},
- {0.214844f, 0.878906f, 0.777344f, 0.082031f}, {0.957031f, 0.492188f, 0.054688f, 0.855469f},
- {0.890625f, 0.382812f, 0.136719f, 0.656250f}, {0.019531f, 0.804688f, 0.328125f, 0.519531f},
- {0.636719f, 0.042969f, 0.402344f, 0.753906f}, {0.148438f, 0.753906f, 0.179688f, 0.449219f},
- {0.046875f, 0.398438f, 0.507812f, 0.320312f}, {0.511719f, 0.019531f, 0.429688f, 0.253906f},
- {0.222656f, 0.660156f, 0.003906f, 0.003906f}, {0.707031f, 0.910156f, 0.726562f, 0.933594f},
- {0.011719f, 0.742188f, 0.781250f, 0.281250f}, {0.863281f, 0.316406f, 0.281250f, 0.445312f},
- {0.515625f, 0.496094f, 0.570312f, 0.910156f}, {0.785156f, 0.875000f, 0.867188f, 0.605469f},
- {0.042969f, 0.230469f, 0.207031f, 0.824219f}, {0.667969f, 0.468750f, 0.605469f, 0.472656f},
- {0.878906f, 0.906250f, 0.316406f, 0.046875f}, {0.382812f, 0.164062f, 0.765625f, 0.671875f},
- {0.015625f, 0.093750f, 0.070312f, 0.312500f}, {0.640625f, 0.425781f, 0.277344f, 0.457031f},
- {0.847656f, 0.613281f, 0.859375f, 0.113281f}, {0.062500f, 0.128906f, 0.128906f, 0.691406f},
- {0.726562f, 0.558594f, 0.761719f, 0.503906f}, {0.398438f, 0.355469f, 0.382812f, 0.917969f},
- {0.886719f, 0.925781f, 0.000000f, 0.667969f}, {0.000000f, 0.148438f, 0.792969f, 0.062500f},
- {0.156250f, 0.277344f, 0.597656f, 0.242188f}, {0.808594f, 0.191406f, 0.316406f, 0.855469f},
- {0.945312f, 0.910156f, 0.042969f, 0.117188f}, {0.226562f, 0.453125f, 0.914062f, 0.191406f},
- {0.761719f, 0.250000f, 0.109375f, 0.441406f}, {0.308594f, 0.015625f, 0.480469f, 0.882812f},
- {0.015625f, 0.671875f, 0.847656f, 0.132812f}, {0.878906f, 0.144531f, 0.074219f, 0.605469f},
- {0.933594f, 0.945312f, 0.613281f, 0.074219f}, {0.074219f, 0.503906f, 0.777344f, 0.359375f},
- {0.406250f, 0.378906f, 0.050781f, 0.796875f}, {0.718750f, 0.605469f, 0.367188f, 0.886719f},
- {0.003906f, 0.449219f, 0.554688f, 0.500000f}, {0.218750f, 0.988281f, 0.015625f, 0.218750f},
- {0.640625f, 0.636719f, 0.730469f, 0.769531f}, {0.117188f, 0.144531f, 0.375000f, 0.269531f},
- {0.429688f, 0.429688f, 0.250000f, 0.691406f}, {0.902344f, 0.839844f, 0.488281f, 0.957031f},
- {0.261719f, 0.316406f, 0.949219f, 0.460938f}, {0.339844f, 0.738281f, 0.304688f, 0.085938f},
- {0.531250f, 0.015625f, 0.101562f, 0.507812f}, {0.691406f, 0.984375f, 0.832031f, 0.941406f},
- {0.945312f, 0.378906f, 0.890625f, 0.015625f}, {0.562500f, 0.628906f, 0.324219f, 0.203125f},
- {0.796875f, 0.953125f, 0.011719f, 0.921875f}, {0.656250f, 0.285156f, 0.953125f, 0.730469f},
- {0.167969f, 0.183594f, 0.542969f, 0.085938f}, {0.542969f, 0.468750f, 0.906250f, 0.890625f},
- {0.410156f, 0.617188f, 0.046875f, 0.695312f}, {0.996094f, 0.128906f, 0.199219f, 0.972656f},
- {0.191406f, 0.050781f, 0.945312f, 0.148438f}, {0.511719f, 0.937500f, 0.117188f, 0.738281f},
- {0.613281f, 0.734375f, 0.722656f, 0.910156f}, {0.921875f, 0.019531f, 0.988281f, 0.429688f},
- {0.652344f, 0.972656f, 0.601562f, 0.601562f}, {0.003906f, 0.136719f, 0.746094f, 0.664062f},
- {0.722656f, 0.359375f, 0.011719f, 0.148438f}, {0.402344f, 0.609375f, 0.257812f, 0.718750f},
- {0.765625f, 0.785156f, 0.414062f, 0.437500f}, {0.082031f, 0.296875f, 0.480469f, 0.605469f},
- {0.542969f, 0.144531f, 0.996094f, 0.011719f}, {0.312500f, 0.699219f, 0.589844f, 0.882812f},
- {0.242188f, 0.328125f, 0.859375f, 0.222656f}, {0.968750f, 0.593750f, 0.699219f, 0.804688f},
- {0.425781f, 0.156250f, 0.964844f, 0.902344f}, {0.753906f, 0.492188f, 0.296875f, 0.605469f},
- {0.917969f, 0.792969f, 0.582031f, 0.472656f}, {0.468750f, 0.546875f, 0.382812f, 0.847656f},
- {0.632812f, 0.058594f, 0.074219f, 0.066406f}, {0.261719f, 0.937500f, 0.968750f, 0.683594f},
- {0.160156f, 0.687500f, 0.125000f, 0.320312f}, {0.441406f, 0.781250f, 0.648438f, 0.019531f},
- {0.320312f, 0.972656f, 0.023438f, 0.710938f}, {0.937500f, 0.070312f, 0.429688f, 0.164062f},
- {0.273438f, 0.406250f, 0.886719f, 0.414062f}, {0.585938f, 0.789062f, 0.511719f, 0.804688f},
- {0.234375f, 0.574219f, 0.636719f, 0.230469f}, {0.750000f, 0.832031f, 0.460938f, 0.531250f},
- {0.355469f, 0.250000f, 0.695312f, 0.750000f}, {0.281250f, 0.480469f, 0.328125f, 0.250000f},
- {0.132812f, 0.726562f, 0.500000f, 0.035156f}, {0.671875f, 0.886719f, 0.917969f, 0.601562f},
- {0.972656f, 0.621094f, 0.664062f, 0.199219f}, {0.328125f, 0.699219f, 0.472656f, 0.789062f},
- {0.511719f, 0.519531f, 0.121094f, 0.519531f}, {0.695312f, 0.593750f, 0.699219f, 0.300781f},
- {0.351562f, 0.054688f, 0.503906f, 0.683594f}, {0.621094f, 0.757812f, 0.628906f, 0.351562f},
- {0.484375f, 0.882812f, 0.285156f, 0.808594f}, {0.660156f, 0.394531f, 0.152344f, 0.046875f},
- {0.386719f, 0.574219f, 0.992188f, 0.660156f}, {0.121094f, 0.824219f, 0.691406f, 0.738281f},
- {0.242188f, 0.234375f, 0.410156f, 0.531250f}, {0.601562f, 0.031250f, 0.171875f, 0.191406f},
- {0.773438f, 0.085938f, 0.277344f, 0.960938f}, {0.507812f, 0.839844f, 0.656250f, 0.113281f},
- {0.968750f, 0.179688f, 0.812500f, 0.023438f}, {0.566406f, 0.351562f, 0.203125f, 0.632812f},
- {0.878906f, 0.289062f, 0.515625f, 0.343750f}, {0.484375f, 0.710938f, 0.996094f, 0.121094f},
- {0.183594f, 0.957031f, 0.589844f, 0.519531f}, {0.734375f, 0.191406f, 0.187500f, 0.042969f},
- {0.804688f, 0.621094f, 0.644531f, 0.222656f}, {0.148438f, 0.269531f, 0.757812f, 0.898438f},
- {0.406250f, 0.480469f, 0.574219f, 0.664062f}, {0.109375f, 0.789062f, 0.457031f, 0.328125f},
- {0.296875f, 0.234375f, 0.718750f, 0.246094f}, {0.191406f, 0.523438f, 0.500000f, 0.570312f},
- {0.500000f, 0.449219f, 0.281250f, 0.351562f}, {0.324219f, 0.347656f, 0.218750f, 0.160156f},
- {0.953125f, 0.683594f, 0.378906f, 0.441406f}, {0.710938f, 0.539062f, 0.703125f, 0.382812f},
- {0.097656f, 0.886719f, 0.425781f, 0.003906f}, {0.347656f, 0.281250f, 0.296875f, 0.546875f},
- {0.761719f, 0.695312f, 0.554688f, 0.246094f}, {0.039062f, 0.433594f, 0.386719f, 0.078125f},
- {0.253906f, 0.230469f, 0.496094f, 0.566406f}, {0.378906f, 0.804688f, 0.058594f, 0.023438f},
- {0.449219f, 0.648438f, 0.304688f, 0.335938f}, {0.875000f, 0.199219f, 0.437500f, 0.101562f},
- {0.136719f, 0.917969f, 0.917969f, 0.476562f}, {0.285156f, 0.539062f, 0.847656f, 0.902344f},
- {0.617188f, 0.003906f, 0.703125f, 0.250000f}, {0.167969f, 0.996094f, 0.210938f, 0.953125f},
- {0.429688f, 0.437500f, 0.800781f, 0.308594f}, {0.738281f, 0.847656f, 0.265625f, 0.140625f},
- {0.847656f, 0.210938f, 0.019531f, 0.566406f}, {0.558594f, 0.929688f, 0.125000f, 0.085938f},
- {0.660156f, 0.878906f, 0.808594f, 0.363281f}, {0.179688f, 0.289062f, 0.203125f, 0.671875f},
- {0.308594f, 0.203125f, 0.851562f, 0.117188f}, {0.367188f, 0.414062f, 0.902344f, 0.746094f},
- {0.101562f, 0.621094f, 0.527344f, 0.210938f}, {0.804688f, 0.265625f, 0.332031f, 0.500000f},
- {0.914062f, 0.175781f, 0.464844f, 0.960938f}, {0.726562f, 0.535156f, 0.734375f, 0.378906f},
- {0.628906f, 0.656250f, 0.539062f, 0.628906f}, {0.074219f, 0.601562f, 0.804688f, 0.273438f},
- {0.453125f, 0.347656f, 0.109375f, 0.578125f}, {0.531250f, 0.210938f, 0.378906f, 0.867188f},
- {0.699219f, 0.683594f, 0.175781f, 0.085938f}, {0.156250f, 0.050781f, 0.832031f, 0.972656f},
- {0.492188f, 0.945312f, 0.972656f, 0.625000f}, {0.953125f, 0.382812f, 0.085938f, 0.820312f},
- {0.550781f, 0.199219f, 0.253906f, 0.417969f}, {0.246094f, 0.082031f, 0.566406f, 0.847656f},
- {0.449219f, 0.308594f, 0.070312f, 0.371094f}, {0.785156f, 0.003906f, 0.234375f, 0.132812f},
- {0.097656f, 0.984375f, 0.984375f, 0.746094f}, {0.269531f, 0.847656f, 0.187500f, 0.980469f},
- {0.871094f, 0.656250f, 0.824219f, 0.031250f}, {0.039062f, 0.296875f, 0.398438f, 0.550781f},
- {0.187500f, 0.503906f, 0.882812f, 0.917969f}, {0.992188f, 0.179688f, 0.589844f, 0.500000f},
- {0.789062f, 0.718750f, 0.363281f, 0.289062f}, {0.558594f, 0.332031f, 0.007812f, 0.980469f},
- {0.464844f, 0.531250f, 0.507812f, 0.460938f}, {0.824219f, 0.640625f, 0.902344f, 0.253906f},
- {0.203125f, 0.781250f, 0.722656f, 0.593750f}, {0.304688f, 0.687500f, 0.960938f, 0.308594f},
- {0.136719f, 0.117188f, 0.125000f, 0.707031f}, {0.839844f, 0.550781f, 0.410156f, 0.917969f},
- {0.351562f, 0.808594f, 0.769531f, 0.468750f}, {0.289062f, 0.000000f, 0.074219f, 0.863281f},
- {0.667969f, 0.582031f, 0.691406f, 0.597656f}, {0.015625f, 0.375000f, 0.117188f, 0.371094f},
- {0.578125f, 0.054688f, 0.902344f, 0.765625f}, {0.957031f, 0.882812f, 0.351562f, 0.558594f},
- {0.644531f, 0.417969f, 0.058594f, 0.128906f}, {0.847656f, 0.664062f, 0.238281f, 0.429688f},
- {0.464844f, 0.070312f, 0.171875f, 0.773438f}, {0.746094f, 0.917969f, 0.929688f, 0.855469f},
- {0.000000f, 0.109375f, 0.777344f, 0.613281f}, {0.867188f, 0.851562f, 0.660156f, 0.996094f},
- {0.609375f, 0.796875f, 0.851562f, 0.273438f}, {0.445312f, 0.222656f, 0.160156f, 0.777344f},
- {0.808594f, 0.078125f, 0.597656f, 0.199219f}, {0.277344f, 0.394531f, 0.800781f, 0.636719f},
- {0.582031f, 0.824219f, 0.753906f, 0.464844f}, {0.945312f, 0.511719f, 0.632812f, 0.851562f},
- {0.835938f, 0.316406f, 0.226562f, 0.941406f}, {0.082031f, 0.554688f, 0.863281f, 0.210938f},
- {0.546875f, 0.378906f, 0.785156f, 0.812500f}, {0.222656f, 0.468750f, 0.191406f, 0.289062f},
- {0.953125f, 0.753906f, 0.535156f, 0.843750f}, {0.484375f, 0.089844f, 0.652344f, 0.367188f},
- {0.828125f, 0.226562f, 0.089844f, 0.042969f}, {0.687500f, 0.722656f, 0.566406f, 0.746094f},
- {0.937500f, 0.640625f, 0.375000f, 0.488281f}, {0.496094f, 0.105469f, 0.675781f, 0.386719f},
- {0.113281f, 0.527344f, 0.460938f, 0.699219f}, {0.375000f, 0.453125f, 0.546875f, 0.945312f},
- {0.878906f, 0.679688f, 0.343750f, 0.511719f}, {0.070312f, 0.085938f, 0.644531f, 0.179688f},
- {0.820312f, 0.718750f, 0.480469f, 0.996094f}, {0.992188f, 0.957031f, 0.160156f, 0.390625f},
- {0.683594f, 0.121094f, 0.695312f, 0.582031f}, {0.582031f, 0.824219f, 0.242188f, 0.148438f},
- {0.203125f, 0.382812f, 0.835938f, 0.867188f}, {0.386719f, 0.042969f, 0.925781f, 0.105469f},
- {0.832031f, 0.285156f, 0.296875f, 0.792969f}, {0.152344f, 0.738281f, 0.671875f, 0.945312f},
- {0.765625f, 0.855469f, 0.234375f, 0.347656f}, {0.855469f, 0.511719f, 0.914062f, 0.734375f},
- {0.101562f, 0.917969f, 0.582031f, 0.000000f}, {0.917969f, 0.316406f, 0.019531f, 0.394531f},
- {0.804688f, 0.636719f, 0.410156f, 0.328125f}, {0.601562f, 0.765625f, 0.199219f, 0.171875f},
- {0.027344f, 0.515625f, 0.800781f, 0.949219f}, {0.761719f, 0.835938f, 0.890625f, 0.285156f},
- {0.183594f, 0.429688f, 0.734375f, 0.554688f}, {0.855469f, 0.773438f, 0.433594f, 0.925781f},
- {0.593750f, 0.222656f, 0.871094f, 0.457031f}, {0.402344f, 0.351562f, 0.351562f, 0.625000f},
- {0.917969f, 0.414062f, 0.554688f, 0.402344f}, {0.539062f, 0.136719f, 0.023438f, 0.257812f},
- {0.433594f, 0.792969f, 0.718750f, 0.757812f}, {0.082031f, 0.960938f, 0.210938f, 0.160156f},
- {0.281250f, 0.097656f, 0.789062f, 0.378906f}, {0.714844f, 0.863281f, 0.304688f, 0.859375f},
- {0.343750f, 0.433594f, 0.828125f, 0.000000f}, {0.953125f, 0.976562f, 0.226562f, 0.769531f},
- {0.042969f, 0.273438f, 0.566406f, 0.843750f}, {0.691406f, 0.402344f, 0.335938f, 0.425781f},
- {0.394531f, 0.937500f, 0.476562f, 0.550781f}, {0.613281f, 0.476562f, 0.636719f, 0.808594f},
- {0.093750f, 0.878906f, 0.890625f, 0.167969f}, {0.789062f, 0.234375f, 0.324219f, 0.066406f},
- {0.980469f, 0.511719f, 0.441406f, 0.933594f}, {0.382812f, 0.675781f, 0.796875f, 0.710938f},
- {0.500000f, 0.765625f, 0.273438f, 0.312500f}, {0.078125f, 0.125000f, 0.527344f, 0.839844f},
- {0.757812f, 0.554688f, 0.980469f, 0.187500f}, {0.246094f, 0.332031f, 0.816406f, 0.960938f},
- {0.589844f, 0.167969f, 0.421875f, 0.687500f}, {0.984375f, 0.582031f, 0.609375f, 0.074219f},
- {0.089844f, 0.746094f, 0.097656f, 0.472656f}, {0.375000f, 0.406250f, 0.046875f, 0.117188f},
- {0.238281f, 0.023438f, 0.468750f, 0.664062f}, {0.042969f, 0.570312f, 0.984375f, 0.527344f},
- {0.894531f, 0.988281f, 0.097656f, 0.917969f}, {0.679688f, 0.750000f, 0.882812f, 0.824219f},
- {0.121094f, 0.156250f, 0.015625f, 0.296875f}, {0.417969f, 0.601562f, 0.152344f, 0.675781f},
- {0.714844f, 0.062500f, 0.925781f, 0.367188f}, {0.187500f, 0.878906f, 0.679688f, 0.515625f},
- {0.789062f, 0.097656f, 0.574219f, 0.632812f}, {0.671875f, 0.683594f, 0.132812f, 0.968750f},
- {0.593750f, 0.828125f, 0.363281f, 0.695312f}, {0.332031f, 0.324219f, 0.281250f, 0.535156f},
- {0.058594f, 0.406250f, 0.957031f, 0.585938f}, {0.250000f, 0.871094f, 0.164062f, 0.800781f},
- {0.355469f, 0.574219f, 0.894531f, 0.187500f}, {0.042969f, 0.359375f, 0.070312f, 0.625000f},
- {0.207031f, 0.265625f, 0.949219f, 0.839844f}, {0.703125f, 0.031250f, 0.746094f, 0.039062f},
- {0.273438f, 0.609375f, 0.242188f, 0.246094f}, {0.601562f, 0.371094f, 0.093750f, 0.781250f},
- {0.535156f, 0.859375f, 0.765625f, 0.542969f}, {0.140625f, 0.324219f, 0.035156f, 0.292969f},
- {0.425781f, 0.476562f, 0.605469f, 0.812500f}, {0.292969f, 0.585938f, 0.417969f, 0.660156f},
- {0.023438f, 0.890625f, 0.066406f, 0.246094f}, {0.542969f, 0.445312f, 0.183594f, 0.539062f},
- {0.484375f, 0.152344f, 0.976562f, 0.027344f}, {0.226562f, 0.953125f, 0.480469f, 0.488281f},
- {0.988281f, 0.003906f, 0.054688f, 0.128906f}, {0.339844f, 0.125000f, 0.703125f, 0.648438f},
- {0.406250f, 0.265625f, 0.281250f, 0.511719f}, {0.203125f, 0.453125f, 0.746094f, 0.890625f},
- {0.308594f, 0.164062f, 0.535156f, 0.105469f}, {0.425781f, 0.023438f, 0.679688f, 0.574219f},
- {0.871094f, 0.976562f, 0.609375f, 0.718750f}, {0.371094f, 0.664062f, 0.367188f, 0.078125f},
- {0.531250f, 0.140625f, 0.160156f, 0.660156f}, {0.050781f, 0.570312f, 0.289062f, 0.007812f},
- {0.710938f, 0.488281f, 0.636719f, 0.332031f}, {0.214844f, 0.089844f, 0.773438f, 0.207031f},
- {0.132812f, 0.937500f, 0.097656f, 0.871094f}, {0.746094f, 0.554688f, 0.257812f, 0.097656f},
- {0.832031f, 0.039062f, 0.964844f, 0.601562f}, {0.597656f, 0.625000f, 0.464844f, 0.703125f},
- {0.898438f, 0.371094f, 0.539062f, 0.218750f}, {0.160156f, 0.207031f, 0.132812f, 0.574219f},
- {0.515625f, 0.050781f, 0.937500f, 0.121094f}, {0.089844f, 0.734375f, 0.449219f, 0.343750f},
- {0.640625f, 0.156250f, 0.093750f, 0.671875f}, {0.894531f, 0.578125f, 0.039062f, 0.058594f},
- {0.449219f, 0.218750f, 0.847656f, 0.226562f}, {0.753906f, 0.726562f, 0.175781f, 0.382812f},
- {0.035156f, 0.082031f, 0.261719f, 0.281250f}, {0.542969f, 0.328125f, 0.023438f, 0.652344f},
- {0.234375f, 0.910156f, 0.562500f, 0.433594f}, {0.707031f, 0.449219f, 0.855469f, 0.242188f},
- {0.312500f, 0.941406f, 0.394531f, 0.003906f}, {0.203125f, 0.218750f, 0.035156f, 0.625000f},
- {0.917969f, 0.835938f, 0.628906f, 0.492188f}, {0.363281f, 0.972656f, 0.699219f, 0.382812f},
- {0.156250f, 0.710938f, 0.125000f, 0.035156f}, {0.425781f, 0.265625f, 0.367188f, 0.535156f},
- {0.667969f, 0.875000f, 0.535156f, 0.300781f}, {0.527344f, 0.640625f, 0.742188f, 0.753906f},
- {0.769531f, 0.148438f, 0.328125f, 0.871094f}, {0.152344f, 0.484375f, 0.230469f, 0.046875f},
- {0.488281f, 0.332031f, 0.511719f, 0.339844f}, {0.214844f, 0.656250f, 0.265625f, 0.105469f},
- {0.539062f, 0.906250f, 0.363281f, 0.417969f}, {0.878906f, 0.207031f, 0.464844f, 0.167969f},
- {0.304688f, 0.957031f, 0.324219f, 0.769531f}, {0.496094f, 0.726562f, 0.039062f, 0.117188f},
- {0.980469f, 0.273438f, 0.406250f, 0.453125f}, {0.031250f, 0.167969f, 0.976562f, 0.058594f},
- {0.414062f, 0.585938f, 0.804688f, 0.156250f}, {0.117188f, 0.960938f, 0.023438f, 0.222656f},
- {0.882812f, 0.507812f, 0.449219f, 0.414062f}, {0.554688f, 0.066406f, 0.757812f, 0.113281f},
- {0.808594f, 0.175781f, 0.515625f, 0.984375f}, {0.621094f, 0.937500f, 0.304688f, 0.269531f},
- {0.769531f, 0.824219f, 0.609375f, 0.449219f}, {0.906250f, 0.750000f, 0.386719f, 0.738281f},
- {0.464844f, 0.980469f, 0.878906f, 0.335938f}, {0.000000f, 0.542969f, 0.441406f, 0.429688f},
- {0.781250f, 0.179688f, 0.984375f, 0.027344f}, {0.238281f, 0.765625f, 0.304688f, 0.914062f},
- {0.500000f, 0.011719f, 0.914062f, 0.082031f}, {0.871094f, 0.238281f, 0.792969f, 0.355469f},
- {0.750000f, 0.707031f, 0.632812f, 0.742188f}, {0.945312f, 0.796875f, 0.382812f, 0.433594f},
- {0.109375f, 0.207031f, 0.570312f, 0.316406f}, {0.707031f, 0.492188f, 0.761719f, 0.203125f},
- {0.597656f, 0.390625f, 0.328125f, 0.917969f}, {0.003906f, 0.554688f, 0.941406f, 0.261719f},
- {0.519531f, 0.777344f, 0.453125f, 0.445312f}, {0.628906f, 0.699219f, 0.144531f, 0.679688f},
- {0.066406f, 0.867188f, 0.878906f, 0.226562f}, {0.683594f, 0.589844f, 0.308594f, 0.777344f},
- {0.117188f, 0.246094f, 0.464844f, 0.437500f}, {0.933594f, 0.339844f, 0.027344f, 0.488281f},
- {0.632812f, 0.917969f, 0.925781f, 0.234375f}, {0.320312f, 0.273438f, 0.535156f, 0.886719f},
- {0.980469f, 0.816406f, 0.050781f, 0.734375f}, {0.476562f, 0.734375f, 0.488281f, 0.152344f},
- {0.648438f, 0.187500f, 0.687500f, 0.824219f}, {0.308594f, 0.875000f, 0.847656f, 0.460938f},
- {0.367188f, 0.695312f, 0.417969f, 0.949219f}, {0.234375f, 0.281250f, 0.097656f, 0.035156f},
- {0.007812f, 0.468750f, 0.667969f, 0.421875f}, {0.664062f, 0.921875f, 0.753906f, 0.914062f},
- {0.863281f, 0.597656f, 0.605469f, 0.718750f}, {0.378906f, 0.320312f, 0.386719f, 0.476562f},
- {0.273438f, 0.492188f, 0.683594f, 0.953125f}, {0.550781f, 0.851562f, 0.781250f, 0.144531f},
- {0.167969f, 0.027344f, 0.593750f, 0.613281f}, {0.250000f, 0.367188f, 0.925781f, 0.976562f},
- {0.941406f, 0.656250f, 0.511719f, 0.746094f}, {0.468750f, 0.757812f, 0.675781f, 0.531250f},
- {0.156250f, 0.140625f, 0.953125f, 0.132812f}, {0.890625f, 0.269531f, 0.164062f, 0.792969f},
- {0.820312f, 0.074219f, 0.734375f, 0.988281f}, {0.449219f, 0.605469f, 0.476562f, 0.105469f},
- {0.546875f, 0.503906f, 0.210938f, 0.738281f}, {0.058594f, 0.019531f, 0.320312f, 0.277344f},
- {0.875000f, 0.390625f, 0.867188f, 0.914062f}, {0.718750f, 0.468750f, 0.261719f, 0.808594f},
- {0.281250f, 0.207031f, 0.953125f, 0.175781f}, {0.832031f, 0.312500f, 0.835938f, 0.402344f},
- {0.914062f, 0.945312f, 0.640625f, 0.230469f}, {0.316406f, 0.816406f, 0.402344f, 0.457031f},
- {0.648438f, 0.257812f, 0.730469f, 0.593750f}, {0.976562f, 0.441406f, 0.667969f, 0.730469f},
- {0.363281f, 0.011719f, 0.957031f, 0.984375f}, {0.015625f, 0.363281f, 0.820312f, 0.019531f},
- {0.636719f, 0.476562f, 0.531250f, 0.574219f}, {0.144531f, 0.632812f, 0.734375f, 0.878906f},
- {0.355469f, 0.421875f, 0.253906f, 0.269531f}, {0.269531f, 0.929688f, 0.484375f, 0.730469f},
- {0.773438f, 0.027344f, 0.621094f, 0.339844f}, {0.921875f, 0.253906f, 0.707031f, 0.925781f},
- {0.722656f, 0.660156f, 0.328125f, 0.867188f}, {0.453125f, 0.777344f, 0.839844f, 0.679688f},
- {0.156250f, 0.292969f, 0.234375f, 0.324219f}, {0.988281f, 0.699219f, 0.128906f, 0.062500f},
- {0.523438f, 0.402344f, 0.820312f, 0.898438f}, {0.128906f, 0.140625f, 0.183594f, 0.160156f},
- {0.394531f, 0.238281f, 0.050781f, 0.597656f}, {0.964844f, 0.062500f, 0.660156f, 0.855469f},
- {0.339844f, 0.429688f, 0.558594f, 0.707031f}, {0.722656f, 0.648438f, 0.363281f, 0.628906f},
- {0.921875f, 0.515625f, 0.207031f, 0.460938f}, {0.054688f, 0.988281f, 0.503906f, 0.878906f},
- {0.652344f, 0.089844f, 0.718750f, 0.179688f}, {0.351562f, 0.339844f, 0.140625f, 0.980469f},
- {0.800781f, 0.902344f, 0.085938f, 0.679688f}, {0.429688f, 0.679688f, 0.859375f, 0.765625f},
- {0.296875f, 0.820312f, 0.195312f, 0.546875f}, {0.675781f, 0.613281f, 0.621094f, 0.839844f},
- {0.882812f, 0.933594f, 0.816406f, 0.167969f}, {0.769531f, 0.070312f, 0.363281f, 0.812500f},
- {0.964844f, 0.367188f, 0.062500f, 0.937500f}, {0.480469f, 0.421875f, 0.988281f, 0.351562f},
- {0.226562f, 0.113281f, 0.121094f, 0.144531f}, {0.277344f, 0.726562f, 0.828125f, 0.992188f},
- {0.742188f, 0.464844f, 0.695312f, 0.804688f}, {0.152344f, 0.058594f, 0.398438f, 0.382812f},
- {0.421875f, 0.675781f, 0.960938f, 0.574219f}, {0.792969f, 0.601562f, 0.144531f, 0.511719f},
- {0.031250f, 0.320312f, 0.332031f, 0.648438f}, {0.933594f, 0.441406f, 0.578125f, 0.292969f},
- {0.703125f, 0.230469f, 0.179688f, 0.789062f}, {0.492188f, 0.773438f, 0.925781f, 0.527344f},
- {0.960938f, 0.535156f, 0.339844f, 0.324219f}, {0.425781f, 0.671875f, 0.035156f, 0.820312f},
- {0.734375f, 0.804688f, 0.257812f, 0.628906f}, {0.207031f, 0.113281f, 0.164062f, 0.187500f},
- {0.808594f, 0.902344f, 0.984375f, 0.289062f}, {0.988281f, 0.636719f, 0.300781f, 0.886719f},
- {0.707031f, 0.441406f, 0.214844f, 0.507812f}, {0.328125f, 0.968750f, 0.371094f, 0.015625f},
- {0.859375f, 0.183594f, 0.742188f, 0.839844f}, {0.656250f, 0.570312f, 0.121094f, 0.332031f},
- {0.398438f, 0.414062f, 0.343750f, 0.882812f}, {0.113281f, 0.816406f, 0.234375f, 0.476562f},
- {0.613281f, 0.703125f, 0.656250f, 0.398438f}, {0.027344f, 0.359375f, 0.093750f, 0.550781f},
- {0.683594f, 0.292969f, 0.789062f, 0.855469f}, {0.785156f, 0.804688f, 0.917969f, 0.214844f},
- {0.328125f, 0.910156f, 0.574219f, 0.617188f}, {0.621094f, 0.085938f, 0.007812f, 0.359375f},
- {0.199219f, 0.687500f, 0.445312f, 0.964844f}, {0.117188f, 0.519531f, 0.183594f, 0.699219f},
- {0.574219f, 0.066406f, 0.121094f, 0.628906f}, {0.394531f, 0.605469f, 0.914062f, 0.945312f},
- {0.730469f, 0.718750f, 0.574219f, 0.144531f}, {0.078125f, 0.105469f, 0.066406f, 0.265625f},
- {0.800781f, 0.546875f, 0.191406f, 0.523438f}, {0.460938f, 0.792969f, 0.609375f, 0.703125f},
- {0.746094f, 0.847656f, 0.101562f, 0.218750f}, {0.582031f, 0.125000f, 0.914062f, 0.945312f},
- {0.859375f, 0.335938f, 0.851562f, 0.402344f}, {0.695312f, 0.535156f, 0.070312f, 0.785156f},
- {0.523438f, 0.792969f, 0.207031f, 0.593750f}, {0.210938f, 0.445312f, 0.886719f, 0.464844f},
- {0.628906f, 0.132812f, 0.582031f, 0.000000f}, {0.285156f, 0.902344f, 0.054688f, 0.515625f},
- {0.019531f, 0.472656f, 0.648438f, 0.773438f}, {0.410156f, 0.011719f, 0.414062f, 0.558594f},
- {0.312500f, 0.632812f, 0.699219f, 0.652344f}, {0.230469f, 0.500000f, 0.527344f, 0.500000f},
- {0.656250f, 0.789062f, 0.921875f, 0.109375f}, {0.843750f, 0.308594f, 0.265625f, 0.960938f},
- {0.183594f, 0.835938f, 0.734375f, 0.218750f}, {0.632812f, 0.925781f, 0.109375f, 0.140625f},
- {0.093750f, 0.136719f, 0.847656f, 0.269531f}, {0.394531f, 0.371094f, 0.011719f, 0.523438f},
- {0.191406f, 0.625000f, 0.273438f, 0.046875f}, {0.269531f, 0.566406f, 0.894531f, 0.593750f},
- {0.574219f, 0.035156f, 0.359375f, 0.906250f}, {0.164062f, 0.300781f, 0.523438f, 0.085938f},
- {0.925781f, 0.101562f, 0.425781f, 0.359375f}, {0.089844f, 0.230469f, 0.003906f, 0.054688f},
- {0.257812f, 0.332031f, 0.550781f, 0.589844f}, {0.378906f, 0.187500f, 0.242188f, 0.300781f},
- {0.167969f, 0.531250f, 0.785156f, 0.023438f}, {0.722656f, 0.824219f, 0.640625f, 0.628906f},
- {0.578125f, 0.898438f, 0.519531f, 0.546875f}, {0.835938f, 0.621094f, 0.257812f, 0.054688f},
- {0.503906f, 0.175781f, 0.195312f, 0.691406f}, {0.074219f, 0.394531f, 0.601562f, 0.304688f},
- {0.882812f, 0.953125f, 0.796875f, 0.085938f}, {0.574219f, 0.015625f, 0.230469f, 0.968750f},
- {0.273438f, 0.515625f, 0.886719f, 0.050781f}, {0.113281f, 0.828125f, 0.742188f, 0.367188f},
- {0.816406f, 0.101562f, 0.281250f, 0.183594f}, {0.187500f, 0.968750f, 0.625000f, 0.671875f},
- {0.562500f, 0.003906f, 0.796875f, 0.113281f}, {0.320312f, 0.164062f, 0.898438f, 0.257812f},
- {0.128906f, 0.257812f, 0.503906f, 0.062500f}, {0.593750f, 0.390625f, 0.843750f, 0.542969f},
- {0.472656f, 0.757812f, 0.726562f, 0.402344f}, {0.023438f, 0.062500f, 0.539062f, 0.792969f},
- {0.113281f, 0.296875f, 0.425781f, 0.722656f}, {0.523438f, 0.808594f, 0.054688f, 0.449219f},
- {0.800781f, 0.515625f, 0.816406f, 0.093750f}, {0.054688f, 0.867188f, 0.460938f, 0.207031f},
- {0.566406f, 0.019531f, 0.605469f, 0.582031f}, {0.742188f, 0.992188f, 0.882812f, 0.671875f},
- {0.265625f, 0.472656f, 0.546875f, 0.171875f}, {0.992188f, 0.171875f, 0.964844f, 0.316406f},
- {0.406250f, 0.746094f, 0.429688f, 0.695312f}, {0.132812f, 0.628906f, 0.160156f, 0.453125f},
- {0.488281f, 0.140625f, 0.507812f, 0.136719f}, {0.937500f, 0.562500f, 0.679688f, 0.566406f},
- {0.019531f, 0.789062f, 0.769531f, 0.085938f}, {0.464844f, 0.898438f, 0.597656f, 0.492188f},
- {0.957031f, 0.378906f, 0.304688f, 0.011719f}, {0.050781f, 0.179688f, 0.027344f, 0.765625f},
- {0.261719f, 0.859375f, 0.875000f, 0.375000f}, {0.609375f, 0.964844f, 0.437500f, 0.812500f},
- {0.175781f, 0.296875f, 0.781250f, 0.894531f}, {0.929688f, 0.691406f, 0.289062f, 0.468750f},
- {0.238281f, 0.234375f, 0.382812f, 0.347656f}, {0.093750f, 0.054688f, 0.160156f, 0.652344f},
- {0.914062f, 0.750000f, 0.656250f, 0.035156f}, {0.445312f, 0.863281f, 0.320312f, 0.187500f},
- {0.167969f, 0.199219f, 0.519531f, 0.828125f}, {0.070312f, 0.703125f, 0.117188f, 0.644531f},
- {0.371094f, 0.382812f, 0.386719f, 0.289062f}, {0.949219f, 0.601562f, 0.917969f, 0.144531f},
- {0.675781f, 0.218750f, 0.476562f, 0.394531f}, {0.867188f, 0.550781f, 0.988281f, 0.933594f},
- {0.585938f, 0.960938f, 0.003906f, 0.199219f}, {0.753906f, 0.339844f, 0.328125f, 0.371094f},
- {0.078125f, 0.914062f, 0.773438f, 0.796875f}, {0.542969f, 0.593750f, 0.488281f, 0.308594f},
- {0.449219f, 0.683594f, 0.148438f, 0.558594f}, {0.289062f, 0.218750f, 0.406250f, 0.402344f},
- {0.582031f, 0.281250f, 0.589844f, 0.929688f}, {0.828125f, 0.734375f, 0.941406f, 0.714844f},
- {0.460938f, 0.867188f, 0.449219f, 0.832031f}, {0.960938f, 0.453125f, 0.660156f, 0.398438f},
- {0.027344f, 0.757812f, 0.234375f, 0.230469f}, {0.742188f, 0.972656f, 0.730469f, 0.468750f},
- {0.488281f, 0.429688f, 0.128906f, 0.640625f}, {0.839844f, 0.722656f, 0.968750f, 0.960938f},
- {0.558594f, 0.484375f, 0.664062f, 0.742188f}, {0.039062f, 0.964844f, 0.894531f, 0.390625f},
- {0.812500f, 0.753906f, 0.183594f, 0.503906f}, {0.335938f, 0.281250f, 0.417969f, 0.757812f},
- {0.441406f, 0.035156f, 0.726562f, 0.878906f}, {0.019531f, 0.496094f, 0.347656f, 0.269531f},
- {0.921875f, 0.777344f, 0.867188f, 0.175781f}, {0.679688f, 0.859375f, 0.074219f, 0.605469f},
- {0.355469f, 0.242188f, 0.449219f, 0.433594f}, {0.175781f, 0.363281f, 0.656250f, 0.765625f},
- {0.515625f, 0.898438f, 0.003906f, 0.246094f}, {0.613281f, 0.152344f, 0.468750f, 0.894531f},
- {0.386719f, 0.402344f, 0.523438f, 0.566406f}, {0.066406f, 0.613281f, 0.062500f, 0.988281f},
- {0.765625f, 0.347656f, 0.390625f, 0.449219f}, {0.851562f, 0.843750f, 0.203125f, 0.875000f},
- {0.054688f, 0.445312f, 0.441406f, 0.750000f}, {0.929688f, 0.992188f, 0.644531f, 0.937500f},
- {0.769531f, 0.554688f, 0.000000f, 0.597656f}, {0.632812f, 0.234375f, 0.132812f, 0.101562f},
- {0.367188f, 0.691406f, 0.867188f, 0.347656f}, {0.425781f, 0.125000f, 0.632812f, 0.261719f},
- {0.183594f, 0.613281f, 0.968750f, 0.691406f}, {0.285156f, 0.250000f, 0.078125f, 0.929688f},
- {0.917969f, 0.320312f, 0.292969f, 0.039062f}, {0.347656f, 0.644531f, 0.800781f, 0.269531f},
- {0.851562f, 0.539062f, 0.019531f, 0.945312f}, {0.515625f, 0.882812f, 0.359375f, 0.070312f},
- {0.218750f, 0.050781f, 0.277344f, 0.886719f}, {0.898438f, 0.242188f, 0.714844f, 0.019531f},
- {0.558594f, 0.441406f, 0.062500f, 0.773438f}, {0.250000f, 0.964844f, 0.390625f, 0.902344f},
- {0.820312f, 0.343750f, 0.226562f, 0.265625f}, {0.343750f, 0.003906f, 0.972656f, 0.832031f},
- {0.757812f, 0.753906f, 0.484375f, 0.316406f}, {0.507812f, 0.234375f, 0.808594f, 0.554688f},
- {0.859375f, 0.410156f, 0.347656f, 0.203125f}, {0.425781f, 0.503906f, 0.140625f, 0.062500f},
- {0.687500f, 0.140625f, 0.496094f, 0.601562f}, {0.292969f, 0.582031f, 0.996094f, 0.093750f},
- {0.828125f, 0.386719f, 0.707031f, 0.300781f}, {0.398438f, 0.980469f, 0.578125f, 0.859375f},
- {0.042969f, 0.496094f, 0.441406f, 0.500000f}, {0.320312f, 0.609375f, 0.777344f, 0.550781f},
- {0.601562f, 0.304688f, 0.945312f, 0.089844f}, {0.851562f, 0.093750f, 0.269531f, 0.234375f},
- {0.492188f, 0.988281f, 0.753906f, 0.953125f}, {0.792969f, 0.332031f, 0.175781f, 0.847656f},
- {0.089844f, 0.843750f, 0.726562f, 0.710938f}, {0.183594f, 0.082031f, 0.277344f, 0.246094f},
- {0.476562f, 0.714844f, 0.566406f, 0.039062f}, {0.925781f, 0.187500f, 0.835938f, 0.878906f},
- {0.035156f, 0.109375f, 0.214844f, 0.691406f}, {0.695312f, 0.464844f, 0.621094f, 0.007812f},
- {0.949219f, 0.023438f, 0.968750f, 0.472656f}, {0.136719f, 0.558594f, 0.800781f, 0.769531f},
- {0.773438f, 0.410156f, 0.679688f, 0.066406f}, {0.519531f, 0.816406f, 0.320312f, 0.644531f},
- {0.683594f, 0.066406f, 0.171875f, 0.296875f}, {0.867188f, 0.253906f, 0.820312f, 0.125000f},
- {0.386719f, 0.523438f, 0.054688f, 0.562500f}, {0.332031f, 0.156250f, 0.601562f, 0.863281f},
- {0.648438f, 0.851562f, 0.796875f, 0.281250f}, {0.214844f, 0.644531f, 0.269531f, 0.425781f},
- {0.417969f, 0.023438f, 0.390625f, 0.140625f}, {0.917969f, 0.132812f, 0.082031f, 0.902344f},
- {0.617188f, 0.664062f, 0.496094f, 0.093750f}, {0.101562f, 0.578125f, 0.589844f, 0.207031f},
- {0.996094f, 0.222656f, 0.015625f, 0.414062f}, {0.199219f, 0.996094f, 0.949219f, 0.824219f},
- {0.398438f, 0.316406f, 0.757812f, 0.480469f}, {0.605469f, 0.550781f, 0.562500f, 0.929688f},
- {0.246094f, 0.085938f, 0.300781f, 0.855469f}, {0.832031f, 0.648438f, 0.363281f, 0.128906f},
- {0.914062f, 0.757812f, 0.914062f, 0.699219f}, {0.691406f, 0.566406f, 0.828125f, 0.410156f},
- {0.980469f, 0.292969f, 0.121094f, 0.007812f}, {0.457031f, 0.742188f, 0.949219f, 0.730469f},
- {0.648438f, 0.914062f, 0.714844f, 0.148438f}, {0.257812f, 0.511719f, 0.566406f, 0.503906f},
- {0.527344f, 0.082031f, 0.105469f, 0.375000f}, {0.398438f, 0.707031f, 0.285156f, 0.019531f},
- {0.300781f, 0.183594f, 0.359375f, 0.230469f}, {0.222656f, 0.355469f, 0.933594f, 0.867188f},
- {0.867188f, 0.500000f, 0.476562f, 0.167969f}, {0.964844f, 0.945312f, 0.257812f, 0.636719f},
- {0.683594f, 0.386719f, 0.171875f, 0.535156f}, {0.601562f, 0.074219f, 0.710938f, 0.781250f},
- {0.484375f, 0.785156f, 0.414062f, 0.359375f}, {0.074219f, 0.214844f, 0.503906f, 0.742188f},
- {0.167969f, 0.113281f, 0.144531f, 0.609375f}, {0.640625f, 0.378906f, 0.746094f, 0.800781f},
- {0.304688f, 0.949219f, 0.851562f, 0.507812f}, {0.750000f, 0.507812f, 0.613281f, 0.339844f},
- {0.082031f, 0.671875f, 0.894531f, 0.656250f}, {0.660156f, 0.195312f, 0.324219f, 0.410156f},
- {0.414062f, 0.281250f, 0.824219f, 0.722656f}, {0.703125f, 0.640625f, 0.085938f, 0.167969f},
- {0.597656f, 0.464844f, 0.718750f, 0.437500f}, {0.140625f, 0.578125f, 0.253906f, 0.863281f},
- {0.207031f, 0.667969f, 0.546875f, 0.921875f}, {0.968750f, 0.042969f, 0.679688f, 0.667969f},
- {0.531250f, 0.875000f, 0.218750f, 0.410156f}, {0.117188f, 0.761719f, 0.000000f, 0.164062f},
- {0.488281f, 0.179688f, 0.894531f, 0.800781f}, {0.562500f, 0.660156f, 0.238281f, 0.722656f},
- {0.789062f, 0.265625f, 0.050781f, 0.125000f}, {0.664062f, 0.007812f, 0.835938f, 0.992188f},
- {0.996094f, 0.894531f, 0.410156f, 0.375000f}, {0.753906f, 0.566406f, 0.636719f, 0.757812f},
- {0.234375f, 0.804688f, 0.550781f, 0.437500f}, {0.562500f, 0.046875f, 0.082031f, 0.074219f},
- {0.343750f, 0.757812f, 0.359375f, 0.597656f}, {0.726562f, 0.429688f, 0.863281f, 0.480469f},
- {0.257812f, 0.875000f, 0.136719f, 0.753906f}, {0.816406f, 0.261719f, 0.437500f, 0.429688f},
- {0.332031f, 0.390625f, 0.089844f, 0.273438f}, {0.382812f, 0.742188f, 0.351562f, 0.621094f},
- {0.222656f, 0.890625f, 0.027344f, 0.839844f}, {0.890625f, 0.093750f, 0.246094f, 0.988281f},
- {0.011719f, 0.968750f, 0.539062f, 0.203125f}, {0.316406f, 0.484375f, 0.074219f, 0.363281f},
- {0.238281f, 0.187500f, 0.500000f, 0.496094f}, {0.105469f, 0.660156f, 0.996094f, 0.796875f},
- {0.777344f, 0.386719f, 0.414062f, 0.167969f}, {0.531250f, 0.589844f, 0.308594f, 0.730469f},
- {0.976562f, 0.347656f, 0.871094f, 0.027344f}, {0.125000f, 0.261719f, 0.468750f, 0.691406f},
- {0.710938f, 0.910156f, 0.703125f, 0.531250f}, {0.468750f, 0.812500f, 0.328125f, 0.250000f},
- {0.277344f, 0.441406f, 0.765625f, 0.667969f}, {0.535156f, 0.375000f, 0.917969f, 0.972656f},
- {0.648438f, 0.074219f, 0.292969f, 0.324219f}, {0.785156f, 0.687500f, 0.156250f, 0.710938f},
- {0.304688f, 0.136719f, 0.484375f, 0.011719f}, {0.089844f, 0.714844f, 0.113281f, 0.652344f},
- {0.769531f, 0.453125f, 0.992188f, 0.214844f}, {0.437500f, 0.199219f, 0.703125f, 0.328125f},
- {0.003906f, 0.980469f, 0.171875f, 0.488281f}, {0.300781f, 0.476562f, 0.410156f, 0.621094f},
- {0.218750f, 0.695312f, 0.218750f, 0.843750f}, {0.140625f, 0.058594f, 0.652344f, 0.222656f},
- {0.347656f, 0.199219f, 0.320312f, 0.335938f}, {0.945312f, 0.652344f, 0.863281f, 0.652344f},
- {0.703125f, 0.312500f, 0.976562f, 0.808594f}, {0.171875f, 0.585938f, 0.753906f, 0.292969f},
- {0.906250f, 0.863281f, 0.808594f, 0.683594f}, {0.082031f, 0.781250f, 0.582031f, 0.488281f},
- {0.562500f, 0.007812f, 0.691406f, 0.988281f}, {0.734375f, 0.886719f, 0.332031f, 0.406250f},
- {0.000000f, 0.730469f, 0.550781f, 0.894531f}, {0.234375f, 0.460938f, 0.894531f, 0.117188f},
- {0.761719f, 0.929688f, 0.207031f, 0.492188f}, {0.957031f, 0.683594f, 0.933594f, 0.441406f},
- {0.386719f, 0.828125f, 0.644531f, 0.152344f}, {0.718750f, 0.593750f, 0.246094f, 0.394531f},
- {0.011719f, 0.308594f, 0.484375f, 0.242188f}, {0.839844f, 0.851562f, 0.113281f, 0.972656f},
- {0.359375f, 0.765625f, 0.195312f, 0.199219f}, {0.957031f, 0.406250f, 0.933594f, 0.531250f},
- {0.175781f, 0.117188f, 0.535156f, 0.054688f}, {0.039062f, 0.863281f, 0.648438f, 0.992188f},
- {0.285156f, 0.996094f, 0.152344f, 0.648438f}, {0.898438f, 0.074219f, 0.410156f, 0.117188f},
- {0.375000f, 0.808594f, 0.929688f, 0.507812f}, {0.777344f, 0.347656f, 0.761719f, 0.277344f},
- {0.007812f, 0.937500f, 0.617188f, 0.757812f}, {0.339844f, 0.433594f, 0.816406f, 0.972656f},
- {0.718750f, 0.085938f, 0.328125f, 0.621094f}, {0.957031f, 0.921875f, 0.542969f, 0.250000f},
- {0.214844f, 0.460938f, 0.132812f, 0.421875f}, {0.128906f, 0.734375f, 0.691406f, 0.882812f},
- {0.277344f, 0.398438f, 0.195312f, 0.312500f}, {0.011719f, 0.179688f, 0.011719f, 0.667969f},
- {0.406250f, 0.476562f, 0.960938f, 0.566406f}, {0.140625f, 0.644531f, 0.796875f, 0.175781f},
- {0.898438f, 0.277344f, 0.222656f, 0.343750f}, {0.433594f, 0.156250f, 0.675781f, 0.980469f},
- {0.613281f, 0.664062f, 0.601562f, 0.125000f}, {0.117188f, 0.539062f, 0.953125f, 0.546875f},
- {0.511719f, 0.820312f, 0.722656f, 0.914062f}, {0.859375f, 0.625000f, 0.902344f, 0.156250f},
- {0.593750f, 0.355469f, 0.464844f, 0.332031f}, {0.421875f, 0.167969f, 0.871094f, 0.101562f},
- {0.730469f, 0.707031f, 0.714844f, 0.582031f}, {0.996094f, 0.613281f, 0.375000f, 0.746094f},
- {0.156250f, 0.328125f, 0.769531f, 0.039062f}, {0.625000f, 0.929688f, 0.628906f, 0.949219f},
- {0.449219f, 0.113281f, 0.910156f, 0.625000f}, {0.257812f, 0.800781f, 0.562500f, 0.339844f},
- {0.046875f, 0.054688f, 0.031250f, 0.996094f}, {0.792969f, 0.496094f, 0.160156f, 0.195312f},
- {0.324219f, 0.562500f, 0.929688f, 0.847656f}, {0.175781f, 0.203125f, 0.210938f, 0.789062f},
- {0.863281f, 0.304688f, 0.847656f, 0.468750f}, {0.746094f, 0.925781f, 0.070312f, 0.609375f},
- {0.136719f, 0.843750f, 0.675781f, 0.156250f}, {0.886719f, 0.605469f, 0.390625f, 0.562500f},
- {0.519531f, 0.414062f, 0.636719f, 0.113281f}, {0.710938f, 0.910156f, 0.214844f, 0.375000f},
- {0.964844f, 0.808594f, 0.785156f, 0.531250f}, {0.128906f, 0.281250f, 0.066406f, 0.957031f},
- {0.488281f, 0.031250f, 0.609375f, 0.816406f}, {0.750000f, 0.128906f, 0.542969f, 0.101562f},
- {0.550781f, 0.878906f, 0.757812f, 0.281250f}, {0.886719f, 0.250000f, 0.261719f, 0.917969f},
- {0.808594f, 0.417969f, 0.476562f, 0.585938f}, {0.585938f, 0.812500f, 0.156250f, 0.085938f},
- {0.011719f, 0.027344f, 0.042969f, 0.968750f}, {0.445312f, 0.941406f, 0.515625f, 0.429688f},
- {0.671875f, 0.136719f, 0.179688f, 0.136719f}, {0.812500f, 0.640625f, 0.230469f, 0.832031f},
- {0.480469f, 0.433594f, 0.070312f, 0.562500f}, {0.144531f, 0.281250f, 0.789062f, 0.031250f},
- {0.320312f, 0.179688f, 0.023438f, 0.304688f}, {0.886719f, 0.558594f, 0.757812f, 0.234375f},
- {0.445312f, 0.347656f, 0.371094f, 0.968750f}, {0.121094f, 0.039062f, 0.585938f, 0.863281f},
- {0.816406f, 0.421875f, 0.054688f, 0.648438f}, {0.578125f, 0.160156f, 0.992188f, 0.089844f},
- {0.429688f, 0.722656f, 0.402344f, 0.574219f}, {0.148438f, 0.097656f, 0.562500f, 0.835938f},
- {0.613281f, 0.035156f, 0.785156f, 0.117188f}, {0.468750f, 0.605469f, 0.449219f, 0.296875f},
- {0.851562f, 0.800781f, 0.035156f, 0.609375f}, {0.535156f, 0.523438f, 0.367188f, 0.789062f},
- {0.796875f, 0.152344f, 0.863281f, 0.238281f}, {0.667969f, 0.300781f, 0.585938f, 0.343750f},
- {0.074219f, 0.722656f, 0.042969f, 0.714844f}, {0.574219f, 0.199219f, 0.300781f, 0.039062f},
- {0.648438f, 0.269531f, 0.089844f, 0.464844f}, {0.847656f, 0.621094f, 0.402344f, 0.367188f},
- {0.164062f, 0.527344f, 0.457031f, 0.003906f}, {0.617188f, 0.328125f, 0.742188f, 0.566406f},
- {0.367188f, 0.835938f, 0.972656f, 0.195312f}, {0.468750f, 0.136719f, 0.351562f, 0.695312f},
- {0.542969f, 0.679688f, 0.496094f, 0.480469f}, {0.695312f, 0.941406f, 0.855469f, 0.046875f},
- {0.933594f, 0.234375f, 0.312500f, 0.902344f}, {0.640625f, 0.527344f, 0.429688f, 0.804688f},
- {0.832031f, 0.375000f, 0.500000f, 0.640625f}, {0.046875f, 0.949219f, 0.066406f, 0.292969f},
- {0.984375f, 0.460938f, 0.390625f, 0.824219f}, {0.675781f, 0.066406f, 0.179688f, 0.058594f},
- {0.175781f, 0.992188f, 0.531250f, 0.664062f}, {0.785156f, 0.230469f, 0.660156f, 0.511719f},
- {0.089844f, 0.792969f, 0.300781f, 0.242188f}, {0.652344f, 0.292969f, 0.121094f, 0.699219f},
- {0.480469f, 0.535156f, 0.195312f, 0.433594f}, {0.363281f, 0.777344f, 0.933594f, 0.894531f},
- {0.550781f, 0.011719f, 0.273438f, 0.265625f}, {0.886719f, 0.871094f, 0.144531f, 0.410156f},
- {0.937500f, 0.679688f, 0.699219f, 0.515625f}, {0.183594f, 0.214844f, 0.218750f, 0.097656f},
- {0.855469f, 0.988281f, 0.777344f, 0.457031f}, {0.566406f, 0.761719f, 0.519531f, 0.593750f},
- {0.664062f, 0.394531f, 0.593750f, 0.308594f}, {0.960938f, 0.695312f, 0.113281f, 0.070312f},
- {0.007812f, 0.101562f, 0.425781f, 0.359375f}, {0.242188f, 0.742188f, 0.546875f, 0.042969f},
- {0.355469f, 0.480469f, 0.250000f, 0.921875f}, {0.433594f, 0.187500f, 0.828125f, 0.859375f},
- {0.035156f, 0.000000f, 0.894531f, 0.789062f}, {0.218750f, 0.343750f, 0.535156f, 0.285156f},
- {0.558594f, 0.523438f, 0.433594f, 0.734375f}, {0.371094f, 0.625000f, 0.273438f, 0.031250f},
- {0.652344f, 0.835938f, 0.875000f, 0.171875f}, {0.851562f, 0.375000f, 0.332031f, 0.550781f},
- {0.062500f, 0.605469f, 0.968750f, 0.371094f}, {0.417969f, 0.539062f, 0.031250f, 0.460938f},
- {0.097656f, 0.957031f, 0.820312f, 0.761719f}, {0.500000f, 0.750000f, 0.601562f, 0.191406f},
- {0.242188f, 0.472656f, 0.371094f, 0.535156f}, {0.757812f, 0.269531f, 0.660156f, 0.625000f},
- {0.343750f, 0.394531f, 0.453125f, 0.730469f}, {0.613281f, 0.535156f, 0.914062f, 0.332031f},
- {0.265625f, 0.085938f, 0.410156f, 0.097656f}, {0.410156f, 0.835938f, 0.980469f, 0.757812f},
- {0.832031f, 0.664062f, 0.484375f, 0.812500f}, {0.644531f, 0.128906f, 0.664062f, 0.593750f},
- {0.546875f, 0.761719f, 0.109375f, 0.191406f}, {0.207031f, 0.503906f, 0.304688f, 0.007812f},
- {0.667969f, 0.898438f, 0.812500f, 0.300781f}, {0.253906f, 0.230469f, 0.687500f, 0.921875f},
- {0.976562f, 0.468750f, 0.339844f, 0.687500f}, {0.519531f, 0.554688f, 0.003906f, 0.468750f},
- {0.769531f, 0.359375f, 0.632812f, 0.746094f}, {0.230469f, 0.929688f, 0.289062f, 0.933594f},
- {0.109375f, 0.695312f, 0.691406f, 0.367188f}, {0.328125f, 0.242188f, 0.246094f, 0.484375f},
- {0.984375f, 0.429688f, 0.984375f, 0.082031f}, {0.242188f, 0.910156f, 0.464844f, 0.582031f},
- {0.480469f, 0.488281f, 0.199219f, 0.957031f}, {0.300781f, 0.558594f, 0.835938f, 0.816406f},
- {0.437500f, 0.023438f, 0.957031f, 0.214844f}, {0.933594f, 0.687500f, 0.527344f, 0.859375f},
- {0.269531f, 0.800781f, 0.179688f, 0.511719f}, {0.039062f, 0.222656f, 0.871094f, 0.921875f},
- {0.894531f, 0.062500f, 0.628906f, 0.074219f}, {0.746094f, 0.546875f, 0.277344f, 0.820312f},
- {0.863281f, 0.343750f, 0.589844f, 0.265625f}, {0.335938f, 0.855469f, 0.105469f, 0.140625f},
- {0.078125f, 0.109375f, 0.707031f, 0.515625f}, {0.515625f, 0.722656f, 0.617188f, 0.226562f},
- {0.292969f, 0.886719f, 0.878906f, 0.027344f}, {0.214844f, 0.003906f, 0.937500f, 0.699219f},
- {0.554688f, 0.601562f, 0.757812f, 0.402344f}, {0.390625f, 0.324219f, 0.281250f, 0.207031f},
- {0.304688f, 0.128906f, 0.039062f, 0.957031f}, {0.960938f, 0.500000f, 0.808594f, 0.367188f},
- {0.265625f, 0.031250f, 0.406250f, 0.808594f}, {0.054688f, 0.925781f, 0.613281f, 0.871094f},
- {0.195312f, 0.429688f, 0.558594f, 0.539062f}, {0.835938f, 0.136719f, 0.828125f, 0.121094f},
- {0.699219f, 0.242188f, 0.015625f, 0.660156f}, {0.035156f, 0.464844f, 0.480469f, 0.835938f},
- {0.312500f, 0.554688f, 0.320312f, 0.003906f}, {0.738281f, 0.308594f, 0.093750f, 0.785156f},
- {0.484375f, 0.621094f, 0.406250f, 0.890625f}, {0.375000f, 0.160156f, 0.957031f, 0.386719f},
- {0.093750f, 0.882812f, 0.355469f, 0.125000f}, {0.410156f, 0.015625f, 0.644531f, 0.941406f},
- {0.593750f, 0.597656f, 0.722656f, 0.542969f}, {0.492188f, 0.531250f, 0.984375f, 0.734375f},
- {0.683594f, 0.265625f, 0.464844f, 0.398438f}, {0.835938f, 0.968750f, 0.035156f, 0.242188f},
- {0.945312f, 0.761719f, 0.328125f, 0.453125f}, {0.625000f, 0.246094f, 0.730469f, 0.910156f},
- {0.328125f, 0.078125f, 0.937500f, 0.593750f}, {0.902344f, 0.945312f, 0.015625f, 0.425781f},
- {0.171875f, 0.433594f, 0.488281f, 0.687500f}, {0.250000f, 0.312500f, 0.804688f, 0.781250f},
- {0.609375f, 0.781250f, 0.093750f, 0.941406f}, {0.312500f, 0.097656f, 0.687500f, 0.667969f},
- {0.710938f, 0.160156f, 0.425781f, 0.031250f}, {0.164062f, 0.355469f, 0.945312f, 0.878906f},
- {0.968750f, 0.628906f, 0.738281f, 0.261719f}, {0.839844f, 0.218750f, 0.296875f, 0.058594f},
- {0.128906f, 0.902344f, 0.875000f, 0.933594f}, {0.035156f, 0.726562f, 0.113281f, 0.207031f},
- {0.996094f, 0.335938f, 0.625000f, 0.464844f}, {0.531250f, 0.984375f, 0.277344f, 0.660156f},
- {0.066406f, 0.589844f, 0.148438f, 0.367188f}, {0.363281f, 0.242188f, 0.867188f, 0.707031f},
- {0.945312f, 0.953125f, 0.437500f, 0.527344f}, {0.042969f, 0.292969f, 0.535156f, 0.828125f},
- {0.492188f, 0.617188f, 0.175781f, 0.730469f}, {0.332031f, 0.785156f, 0.886719f, 0.351562f},
- {0.875000f, 0.984375f, 0.226562f, 0.179688f}, {0.062500f, 0.269531f, 0.839844f, 0.039062f},
- {0.292969f, 0.875000f, 0.960938f, 0.421875f}, {0.917969f, 0.175781f, 0.167969f, 0.867188f},
- {0.714844f, 0.324219f, 0.753906f, 0.000000f}, {0.593750f, 0.582031f, 0.523438f, 0.671875f},
- {0.421875f, 0.089844f, 0.117188f, 0.910156f}, {0.136719f, 0.652344f, 0.730469f, 0.402344f},
- {0.750000f, 0.363281f, 0.335938f, 0.179688f}, {0.906250f, 0.824219f, 0.660156f, 0.550781f},
- {0.199219f, 0.976562f, 0.128906f, 0.128906f}, {0.101562f, 0.125000f, 0.714844f, 0.664062f},
- {0.800781f, 0.378906f, 0.257812f, 0.296875f}, {0.515625f, 0.890625f, 0.027344f, 0.773438f},
- {0.414062f, 0.605469f, 0.082031f, 0.351562f}, {0.070312f, 0.765625f, 0.804688f, 0.585938f},
- {0.187500f, 0.433594f, 0.910156f, 0.968750f}, {0.796875f, 0.031250f, 0.468750f, 0.726562f},
- {0.457031f, 0.589844f, 0.156250f, 0.410156f}, {0.160156f, 0.312500f, 0.257812f, 0.949219f},
- {0.718750f, 0.785156f, 0.027344f, 0.363281f}, {0.773438f, 0.210938f, 0.554688f, 0.863281f},
- {0.476562f, 0.683594f, 0.335938f, 0.488281f}, {0.007812f, 0.765625f, 0.839844f, 0.769531f},
- {0.707031f, 0.859375f, 0.488281f, 0.605469f}, {0.445312f, 0.406250f, 0.230469f, 0.082031f},
- {0.566406f, 0.675781f, 0.746094f, 0.464844f}, {0.757812f, 0.582031f, 0.957031f, 0.023438f},
- {0.925781f, 0.843750f, 0.066406f, 0.183594f}, {0.281250f, 0.367188f, 0.429688f, 0.976562f},
- {0.125000f, 0.957031f, 0.644531f, 0.324219f}, {0.421875f, 0.746094f, 0.757812f, 0.214844f},
- {0.675781f, 0.410156f, 0.976562f, 0.933594f}, {0.074219f, 0.914062f, 0.851562f, 0.558594f},
- {0.617188f, 0.070312f, 0.667969f, 0.238281f}, {0.910156f, 0.457031f, 0.246094f, 0.742188f},
- {0.285156f, 0.335938f, 0.824219f, 0.636719f}, {0.722656f, 0.832031f, 0.007812f, 0.828125f},
- {0.816406f, 0.949219f, 0.289062f, 0.273438f}, {0.925781f, 0.152344f, 0.148438f, 0.675781f},
- {0.085938f, 0.359375f, 0.789062f, 0.187500f}, {0.277344f, 0.640625f, 0.585938f, 0.507812f},
- {0.164062f, 0.867188f, 0.105469f, 0.640625f}, {0.457031f, 0.570312f, 0.183594f, 0.050781f},
- {0.789062f, 0.675781f, 0.371094f, 0.203125f}, {0.050781f, 0.164062f, 0.675781f, 0.996094f},
- {0.726562f, 0.718750f, 0.152344f, 0.316406f}, {0.992188f, 0.210938f, 0.578125f, 0.066406f},
- {0.464844f, 0.894531f, 0.386719f, 0.242188f}, {0.792969f, 0.500000f, 0.203125f, 0.140625f},
- {0.925781f, 0.687500f, 0.527344f, 0.414062f}, {0.644531f, 0.062500f, 0.132812f, 0.824219f},
- {0.289062f, 0.847656f, 0.234375f, 0.492188f}, {0.390625f, 0.570312f, 0.054688f, 0.394531f},
- {0.554688f, 0.042969f, 0.546875f, 0.890625f}, {0.917969f, 0.796875f, 0.695312f, 0.589844f},
- {0.203125f, 0.207031f, 0.839844f, 0.273438f}, {0.773438f, 0.484375f, 0.355469f, 0.960938f},
- {0.699219f, 0.035156f, 0.593750f, 0.152344f}, {0.171875f, 0.410156f, 0.218750f, 0.050781f},
- {0.289062f, 0.824219f, 0.921875f, 0.406250f}, {0.851562f, 0.078125f, 0.765625f, 0.261719f},
- {0.781250f, 0.703125f, 0.066406f, 0.457031f}, {0.105469f, 0.000000f, 0.460938f, 0.546875f},
- {0.695312f, 0.140625f, 0.734375f, 0.792969f}, {0.187500f, 0.660156f, 0.515625f, 0.632812f},
- {0.636719f, 0.433594f, 0.085938f, 0.257812f}, {0.402344f, 0.500000f, 0.425781f, 0.562500f},
- {0.003906f, 0.019531f, 0.890625f, 0.214844f}, {0.878906f, 0.953125f, 0.816406f, 0.156250f},
- {0.503906f, 0.847656f, 0.058594f, 0.835938f}, {0.062500f, 0.746094f, 0.617188f, 0.738281f},
- {0.839844f, 0.058594f, 0.902344f, 0.312500f}, {0.691406f, 0.171875f, 0.496094f, 0.640625f},
- {0.390625f, 0.417969f, 0.378906f, 0.433594f}, {0.593750f, 0.742188f, 0.578125f, 0.945312f},
- {0.734375f, 0.484375f, 0.917969f, 0.722656f}, {0.316406f, 0.289062f, 0.667969f, 0.113281f},
- {0.675781f, 0.164062f, 0.429688f, 0.460938f}, {0.972656f, 0.984375f, 0.371094f, 0.628906f},
- {0.628906f, 0.257812f, 0.218750f, 0.015625f}, {0.242188f, 0.656250f, 0.773438f, 0.320312f},
- {0.589844f, 0.957031f, 0.984375f, 0.777344f}, {0.957031f, 0.492188f, 0.402344f, 0.550781f},
- {0.359375f, 0.144531f, 0.726562f, 0.105469f}, {0.859375f, 0.425781f, 0.203125f, 0.582031f},
- {0.113281f, 0.921875f, 0.128906f, 0.261719f}, {0.933594f, 0.253906f, 0.628906f, 0.144531f},
- {0.812500f, 0.570312f, 0.992188f, 0.890625f}, {0.148438f, 0.179688f, 0.093750f, 0.308594f},
- {0.894531f, 0.734375f, 0.160156f, 0.734375f}, {0.339844f, 0.269531f, 0.343750f, 0.628906f},
- {0.621094f, 0.089844f, 0.500000f, 0.394531f}, {0.523438f, 0.644531f, 0.906250f, 0.773438f},
- {0.796875f, 0.507812f, 0.203125f, 0.480469f}, {0.582031f, 0.042969f, 0.367188f, 0.710938f},
-};
+extern const float ltc_mat_ggx[64 * 64 * 4];
+extern const float ltc_mag_ggx[64 * 64 * 2];
+extern const float bsdf_split_sum_ggx[64 * 64 * 2];
+extern const float ltc_disk_integral[64 * 64];
+extern const float btdf_split_sum_ggx[32][64 * 64];
+extern const float blue_noise[64 * 64][4];
#endif /* __EEVEE_LUT_H__ */
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 61da9e21cc8..738745f3072 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -382,11 +382,6 @@ static void add_standard_uniforms(DRWShadingGroup *shgrp,
LightCache *lcache = vedata->stl->g_data->light_cache;
EEVEE_EffectsInfo *effects = vedata->stl->effects;
- if (ssr_id == NULL) {
- static int no_ssr = -1.0f;
- ssr_id = &no_ssr;
- }
-
DRW_shgroup_uniform_block(shgrp, "probe_block", sldata->probe_ubo);
DRW_shgroup_uniform_block(shgrp, "grid_block", sldata->grid_ubo);
DRW_shgroup_uniform_block(shgrp, "planar_block", sldata->planar_ubo);
@@ -394,6 +389,8 @@ static void add_standard_uniforms(DRWShadingGroup *shgrp,
DRW_shgroup_uniform_block(shgrp, "shadow_block", sldata->shadow_ubo);
DRW_shgroup_uniform_block(shgrp, "common_block", sldata->common_ubo);
+ DRW_shgroup_uniform_int_copy(shgrp, "outputSssId", 1);
+
if (use_diffuse || use_glossy || use_refract) {
DRW_shgroup_uniform_texture(shgrp, "utilTex", e_data.util_tex);
DRW_shgroup_uniform_texture_ref(shgrp, "shadowCubeTexture", &sldata->shadow_cube_pool);
@@ -411,7 +408,7 @@ static void add_standard_uniforms(DRWShadingGroup *shgrp,
}
if (use_glossy) {
DRW_shgroup_uniform_texture_ref(shgrp, "probePlanars", &vedata->txl->planar_pool);
- DRW_shgroup_uniform_int(shgrp, "outputSsrId", ssr_id, 1);
+ DRW_shgroup_uniform_int_copy(shgrp, "outputSsrId", ssr_id ? *ssr_id : 0);
}
if (use_refract) {
DRW_shgroup_uniform_float_copy(
@@ -736,7 +733,6 @@ struct GPUMaterial *EEVEE_material_mesh_get(struct Scene *scene,
Material *ma,
EEVEE_Data *vedata,
bool use_blend,
- bool use_multiply,
bool use_refract,
bool use_translucency,
int shadow_method)
@@ -746,7 +742,6 @@ struct GPUMaterial *EEVEE_material_mesh_get(struct Scene *scene,
int options = VAR_MAT_MESH;
SET_FLAG_FROM_TEST(options, use_blend, VAR_MAT_BLEND);
- SET_FLAG_FROM_TEST(options, use_multiply, VAR_MAT_MULT);
SET_FLAG_FROM_TEST(options, use_refract, VAR_MAT_REFRACT);
SET_FLAG_FROM_TEST(options, effects->sss_separate_albedo, VAR_MAT_SSSALBED);
SET_FLAG_FROM_TEST(options, use_translucency, VAR_MAT_TRANSLUC);
@@ -1191,15 +1186,11 @@ static void material_opaque(Material *ma,
*shgrp_depth_clip = emsg->depth_clip_grp;
/* This will have been created already, just perform a lookup. */
- *gpumat = (use_gpumat) ? EEVEE_material_mesh_get(scene,
- ma,
- vedata,
- false,
- false,
- use_ssrefract,
- use_translucency,
- linfo->shadow_method) :
- NULL;
+ *gpumat =
+ (use_gpumat) ?
+ EEVEE_material_mesh_get(
+ scene, ma, vedata, false, use_ssrefract, use_translucency, linfo->shadow_method) :
+ NULL;
*gpumat_depth = (use_gpumat) ? EEVEE_material_mesh_depth_get(
scene, ma, (ma->blend_method == MA_BM_HASHED), false) :
NULL;
@@ -1213,7 +1204,7 @@ static void material_opaque(Material *ma,
/* Shading */
*gpumat = EEVEE_material_mesh_get(
- scene, ma, vedata, false, false, use_ssrefract, use_translucency, linfo->shadow_method);
+ scene, ma, vedata, false, use_ssrefract, use_translucency, linfo->shadow_method);
eGPUMaterialStatus status_mat_surface = GPU_material_status(*gpumat);
@@ -1286,7 +1277,7 @@ static void material_opaque(Material *ma,
switch (status_mat_surface) {
case GPU_MAT_SUCCESS: {
- static int no_ssr = -1;
+ static int no_ssr = 0;
static int first_ssr = 1;
int *ssr_id = (((effects->enabled_effects & EFFECT_SSR) != 0) && !use_ssrefract) ?
&first_ssr :
@@ -1426,22 +1417,16 @@ static void material_transparent(Material *ma,
static float half = 0.5f;
/* Shading */
- *gpumat = EEVEE_material_mesh_get(scene,
- ma,
- vedata,
- true,
- (ma->blend_method == MA_BM_MULTIPLY),
- use_ssrefract,
- false,
- linfo->shadow_method);
+ *gpumat = EEVEE_material_mesh_get(
+ scene, ma, vedata, true, use_ssrefract, false, linfo->shadow_method);
switch (GPU_material_status(*gpumat)) {
case GPU_MAT_SUCCESS: {
static int ssr_id = -1; /* TODO transparent SSR */
- bool use_blend = (ma->blend_method & MA_BM_BLEND) != 0;
*shgrp = DRW_shgroup_material_create(*gpumat, psl->transparent_pass);
+ bool use_blend = true;
bool use_diffuse = GPU_material_flag_get(*gpumat, GPU_MATFLAG_DIFFUSE);
bool use_glossy = GPU_material_flag_get(*gpumat, GPU_MATFLAG_GLOSSY);
bool use_refract = GPU_material_flag_get(*gpumat, GPU_MATFLAG_REFRACT);
@@ -1487,27 +1472,12 @@ static void material_transparent(Material *ma,
DRWState all_state = (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_CULL_BACK |
DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_DEPTH_EQUAL |
- DRW_STATE_BLEND_ALPHA | DRW_STATE_BLEND_ADD | DRW_STATE_BLEND_MUL);
+ DRW_STATE_BLEND_CUSTOM);
- DRWState cur_state = DRW_STATE_WRITE_COLOR;
+ DRWState cur_state = DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND_CUSTOM;
cur_state |= (use_prepass) ? DRW_STATE_DEPTH_EQUAL : DRW_STATE_DEPTH_LESS_EQUAL;
cur_state |= (do_cull) ? DRW_STATE_CULL_BACK : 0;
- switch (ma->blend_method) {
- case MA_BM_ADD:
- cur_state |= DRW_STATE_BLEND_ADD;
- break;
- case MA_BM_MULTIPLY:
- cur_state |= DRW_STATE_BLEND_MUL;
- break;
- case MA_BM_BLEND:
- cur_state |= DRW_STATE_BLEND_ALPHA;
- break;
- default:
- BLI_assert(0);
- break;
- }
-
/* Disable other blend modes and use the one we want. */
DRW_shgroup_state_disable(*shgrp, all_state);
DRW_shgroup_state_enable(*shgrp, cur_state);
@@ -1583,8 +1553,6 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata,
&shgrp_depth_array[i],
&shgrp_depth_clip_array[i]);
break;
- case MA_BM_ADD:
- case MA_BM_MULTIPLY:
case MA_BM_BLEND:
material_transparent(ma_array[i],
sldata,
diff --git a/source/blender/draw/engines/eevee/eevee_mist.c b/source/blender/draw/engines/eevee/eevee_mist.c
index 2e56b64bd50..7209651a1d4 100644
--- a/source/blender/draw/engines/eevee/eevee_mist.c
+++ b/source/blender/draw/engines/eevee/eevee_mist.c
@@ -66,8 +66,9 @@ void EEVEE_mist_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
}
/* Create FrameBuffer. */
- DRW_texture_ensure_fullscreen_2d(
- &txl->mist_accum, GPU_R32F, 0); /* Should be enough precision for many samples. */
+
+ /* Should be enough precision for many samples. */
+ DRW_texture_ensure_fullscreen_2d(&txl->mist_accum, GPU_R32F, 0);
GPU_framebuffer_ensure_config(&fbl->mist_accum_fb,
{GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->mist_accum)});
diff --git a/source/blender/draw/engines/eevee/eevee_occlusion.c b/source/blender/draw/engines/eevee/eevee_occlusion.c
index 49f62c6bf5e..924b3d3b19b 100644
--- a/source/blender/draw/engines/eevee/eevee_occlusion.c
+++ b/source/blender/draw/engines/eevee/eevee_occlusion.c
@@ -146,8 +146,8 @@ void EEVEE_occlusion_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
- DRW_texture_ensure_fullscreen_2d(
- &txl->ao_accum, GPU_R32F, 0); /* Should be enough precision for many samples. */
+ /* Should be enough precision for many samples. */
+ DRW_texture_ensure_fullscreen_2d(&txl->ao_accum, GPU_R32F, 0);
GPU_framebuffer_ensure_config(&fbl->ao_accum_fb,
{GPU_ATTACHMENT_NONE, GPU_ATTACHMENT_TEXTURE(txl->ao_accum)});
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 8aeddc72316..3cdafee95a2 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -30,7 +30,6 @@ struct EEVEE_ShadowCasterBuffer;
struct GPUFrameBuffer;
struct Object;
struct RenderLayer;
-struct RenderResult;
extern struct DrawEngineType draw_engine_eevee_type;
@@ -897,7 +896,6 @@ struct GPUMaterial *EEVEE_material_mesh_get(struct Scene *scene,
Material *ma,
EEVEE_Data *vedata,
bool use_blend,
- bool use_multiply,
bool use_refract,
bool use_translucency,
int shadow_method);
diff --git a/source/blender/draw/engines/eevee/eevee_render.c b/source/blender/draw/engines/eevee/eevee_render.c
index ebd13ef1cf5..f840fa23bd2 100644
--- a/source/blender/draw/engines/eevee/eevee_render.c
+++ b/source/blender/draw/engines/eevee/eevee_render.c
@@ -628,7 +628,11 @@ void EEVEE_render_draw(EEVEE_Data *vedata, RenderEngine *engine, RenderLayer *rl
/* Mist output */
EEVEE_mist_output_accumulate(sldata, vedata);
/* Transparent */
+ GPU_framebuffer_texture_attach(fbl->main_color_fb, dtxl->depth, 0, 0);
+ GPU_framebuffer_bind(fbl->main_color_fb);
DRW_draw_pass(psl->transparent_pass);
+ GPU_framebuffer_bind(fbl->main_fb);
+ GPU_framebuffer_texture_detach(fbl->main_color_fb, dtxl->depth);
/* Result Z */
eevee_render_result_z(rl, viewname, rect, vedata, sldata);
/* Post Process */
diff --git a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
index 274269846bc..7f795eaac2b 100644
--- a/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/bsdf_common_lib.glsl
@@ -164,6 +164,19 @@ float sum(vec4 v)
return dot(vec4(1.0), v);
}
+float avg(vec2 v)
+{
+ return dot(vec2(1.0 / 2.0), v);
+}
+float avg(vec3 v)
+{
+ return dot(vec3(1.0 / 3.0), v);
+}
+float avg(vec4 v)
+{
+ return dot(vec4(1.0 / 4.0), v);
+}
+
float saturate(float a)
{
return clamp(a, 0.0, 1.0);
@@ -716,6 +729,7 @@ float cone_cosine(float r)
}
/* --------- Closure ---------- */
+
#ifdef VOLUMETRICS
struct Closure {
@@ -725,6 +739,8 @@ struct Closure {
float anisotropy;
};
+Closure nodetree_exec(void); /* Prototype */
+
# define CLOSURE_DEFAULT Closure(vec3(0.0), vec3(0.0), vec3(0.0), 0.0)
Closure closure_mix(Closure cl1, Closure cl2, float fac)
@@ -758,7 +774,8 @@ Closure closure_emission(vec3 rgb)
struct Closure {
vec3 radiance;
- float opacity;
+ vec3 transmittance;
+ float holdout;
# ifdef USE_SSS
vec4 sss_data;
# ifdef USE_SSS_ALBEDO
@@ -767,110 +784,117 @@ struct Closure {
# endif
vec4 ssr_data;
vec2 ssr_normal;
- int ssr_id;
+ int flag;
};
-/* This is hacking ssr_id to tag transparent bsdf */
-# define TRANSPARENT_CLOSURE_FLAG -2
-# define REFRACT_CLOSURE_FLAG -3
-# define NO_SSR -999
+Closure nodetree_exec(void); /* Prototype */
+
+# define FLAG_TEST(flag, val) (((flag) & (val)) != 0)
+
+# define CLOSURE_SSR_FLAG 1
+# define CLOSURE_SSS_FLAG 2
+# define CLOSURE_HOLDOUT_FLAG 4
# ifdef USE_SSS
# ifdef USE_SSS_ALBEDO
# define CLOSURE_DEFAULT \
- Closure(vec3(0.0), 1.0, vec4(0.0), vec3(0.0), vec4(0.0), vec2(0.0), -1)
+ Closure(vec3(0.0), vec3(0.0), 0.0, vec4(0.0), vec3(0.0), vec4(0.0), vec2(0.0), 0)
# else
-# define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec4(0.0), vec2(0.0), -1)
+# define CLOSURE_DEFAULT \
+ Closure(vec3(0.0), vec3(0.0), 0.0, vec4(0.0), vec4(0.0), vec2(0.0), 0)
# endif
# else
-# define CLOSURE_DEFAULT Closure(vec3(0.0), 1.0, vec4(0.0), vec2(0.0), -1)
+# define CLOSURE_DEFAULT Closure(vec3(0.0), vec3(0.0), 0.0, vec4(0.0), vec2(0.0), 0)
# endif
-uniform int outputSsrId;
+uniform int outputSsrId = 1;
+uniform int outputSssId = 1;
-Closure closure_mix(Closure cl1, Closure cl2, float fac)
+void closure_load_ssr_data(
+ vec3 ssr_spec, float roughness, vec3 N, vec3 viewVec, int ssr_id, inout Closure cl)
{
- Closure cl;
+ /* Still encode to avoid artifacts in the SSR pass. */
+ vec3 vN = normalize(mat3(ViewMatrix) * N);
+ cl.ssr_normal = normal_encode(vN, viewVec);
+
+ if (ssr_id == outputSsrId) {
+ cl.ssr_data = vec4(ssr_spec, roughness);
+ cl.flag |= CLOSURE_SSR_FLAG;
+ }
+}
- if (cl1.ssr_id == TRANSPARENT_CLOSURE_FLAG) {
- cl.ssr_normal = cl2.ssr_normal;
- cl.ssr_data = cl2.ssr_data;
- cl.ssr_id = cl2.ssr_id;
# ifdef USE_SSS
- cl1.sss_data = cl2.sss_data;
+void closure_load_sss_data(float radius,
+ vec3 sss_radiance,
# ifdef USE_SSS_ALBEDO
- cl1.sss_albedo = cl2.sss_albedo;
+ vec3 sss_albedo,
# endif
-# endif
- }
- else if (cl2.ssr_id == TRANSPARENT_CLOSURE_FLAG) {
- cl.ssr_normal = cl1.ssr_normal;
- cl.ssr_data = cl1.ssr_data;
- cl.ssr_id = cl1.ssr_id;
-# ifdef USE_SSS
- cl2.sss_data = cl1.sss_data;
+ int sss_id,
+ inout Closure cl)
+{
+ if (sss_id == outputSssId) {
+ cl.sss_data = vec4(sss_radiance, radius);
# ifdef USE_SSS_ALBEDO
- cl2.sss_albedo = cl1.sss_albedo;
+ cl.sss_albedo = sss_albedo;
# endif
-# endif
- }
- else if (cl1.ssr_id == outputSsrId) {
- /* When mixing SSR don't blend roughness.
- *
- * It makes no sense to mix them really, so we take either one of them and
- * tone down its specularity (ssr_data.xyz) while keeping its roughness (ssr_data.w).
- */
- cl.ssr_data = mix(cl1.ssr_data.xyzw, vec4(vec3(0.0), cl1.ssr_data.w), fac);
- cl.ssr_normal = cl1.ssr_normal;
- cl.ssr_id = cl1.ssr_id;
+ cl.flag |= CLOSURE_SSS_FLAG;
}
else {
- cl.ssr_data = mix(vec4(vec3(0.0), cl2.ssr_data.w), cl2.ssr_data.xyzw, fac);
- cl.ssr_normal = cl2.ssr_normal;
- cl.ssr_id = cl2.ssr_id;
+ cl.radiance += sss_radiance;
+# ifdef USE_SSS_ALBEDO
+ cl.radiance += sss_radiance * sss_albedo;
+# endif
}
+}
+# endif
- cl.opacity = mix(cl1.opacity, cl2.opacity, fac);
- cl.radiance = mix(cl1.radiance * cl1.opacity, cl2.radiance * cl2.opacity, fac);
- cl.radiance /= max(1e-8, cl.opacity);
+Closure closure_mix(Closure cl1, Closure cl2, float fac)
+{
+ Closure cl;
+ cl.holdout = mix(cl1.holdout, cl2.holdout, fac);
+ cl.transmittance = mix(cl1.transmittance, cl2.transmittance, fac);
+ cl.radiance = mix(cl1.radiance, cl2.radiance, fac);
+ cl.flag = cl1.flag | cl2.flag;
+ cl.ssr_data = mix(cl1.ssr_data, cl2.ssr_data, fac);
+ bool use_cl1_ssr = FLAG_TEST(cl1.flag, CLOSURE_SSR_FLAG);
+ /* When mixing SSR don't blend roughness and normals but only specular (ssr_data.xyz).*/
+ cl.ssr_data.w = (use_cl1_ssr) ? cl1.ssr_data.w : cl2.ssr_data.w;
+ cl.ssr_normal = (use_cl1_ssr) ? cl1.ssr_normal : cl2.ssr_normal;
# ifdef USE_SSS
- /* Apply Mix on input */
- cl1.sss_data.rgb *= 1.0 - fac;
- cl2.sss_data.rgb *= fac;
-
- /* Select biggest radius. */
- bool use_cl1 = (cl1.sss_data.a > cl2.sss_data.a);
- cl.sss_data = (use_cl1) ? cl1.sss_data : cl2.sss_data;
-
+ cl.sss_data = mix(cl1.sss_data, cl2.sss_data, fac);
+ bool use_cl1_sss = FLAG_TEST(cl1.flag, CLOSURE_SSS_FLAG);
+ /* It also does not make sense to mix SSS radius or albedo. */
+ cl.sss_data.w = (use_cl1_sss) ? cl1.sss_data.w : cl2.sss_data.w;
# ifdef USE_SSS_ALBEDO
- /* TODO Find a solution to this. Dither? */
- cl.sss_albedo = (use_cl1) ? cl1.sss_albedo : cl2.sss_albedo;
- /* Add radiance that was supposed to be filtered but was rejected. */
- cl.radiance += (use_cl1) ? cl2.sss_data.rgb * cl2.sss_albedo : cl1.sss_data.rgb * cl1.sss_albedo;
-# else
- /* Add radiance that was supposed to be filtered but was rejected. */
- cl.radiance += (use_cl1) ? cl2.sss_data.rgb : cl1.sss_data.rgb;
+ cl.sss_albedo = (use_cl1_sss) ? cl1.sss_albedo : cl2.sss_albedo;
# endif
# endif
-
return cl;
}
Closure closure_add(Closure cl1, Closure cl2)
{
- Closure cl = (cl1.ssr_id == outputSsrId) ? cl1 : cl2;
+ Closure cl;
+ cl.transmittance = cl1.transmittance + cl2.transmittance;
cl.radiance = cl1.radiance + cl2.radiance;
+ cl.holdout = cl1.holdout + cl2.holdout;
+ cl.flag = cl1.flag | cl2.flag;
+ cl.ssr_data = cl1.ssr_data + cl2.ssr_data;
+ bool use_cl1_ssr = FLAG_TEST(cl1.flag, CLOSURE_SSR_FLAG);
+ /* When mixing SSR don't blend roughness and normals.*/
+ cl.ssr_data.w = (use_cl1_ssr) ? cl1.ssr_data.w : cl2.ssr_data.w;
+ cl.ssr_normal = (use_cl1_ssr) ? cl1.ssr_normal : cl2.ssr_normal;
+
# ifdef USE_SSS
- cl.sss_data = (cl1.sss_data.a > 0.0) ? cl1.sss_data : cl2.sss_data;
- /* Add radiance that was supposed to be filtered but was rejected. */
- cl.radiance += (cl1.sss_data.a > 0.0) ? cl2.sss_data.rgb : cl1.sss_data.rgb;
+ cl.sss_data = cl1.sss_data + cl2.sss_data;
+ bool use_cl1_sss = FLAG_TEST(cl1.flag, CLOSURE_SSS_FLAG);
+ /* It also does not make sense to mix SSS radius or albedo. */
+ cl.sss_data.w = (use_cl1_sss) ? cl1.sss_data.w : cl2.sss_data.w;
# ifdef USE_SSS_ALBEDO
- /* TODO Find a solution to this. Dither? */
- cl.sss_albedo = (cl1.sss_data.a > 0.0) ? cl1.sss_albedo : cl2.sss_albedo;
+ cl.sss_albedo = (use_cl1_sss) ? cl1.sss_albedo : cl2.sss_albedo;
# endif
# endif
- cl.opacity = saturate(cl1.opacity + cl2.opacity);
return cl;
}
@@ -883,19 +907,23 @@ Closure closure_emission(vec3 rgb)
/* Breaking this across multiple lines causes issues for some older GLSL compilers. */
/* clang-format off */
-# if defined(MESH_SHADER) && !defined(USE_ALPHA_HASH) && !defined(USE_ALPHA_CLIP) && !defined(SHADOW_SHADER) && !defined(USE_MULTIPLY)
+# if defined(MESH_SHADER) && !defined(USE_ALPHA_HASH) && !defined(USE_ALPHA_CLIP) && !defined(SHADOW_SHADER)
/* clang-format on */
-layout(location = 0) out vec4 fragColor;
-layout(location = 1) out vec4 ssrNormals;
+# ifndef USE_ALPHA_BLEND
+layout(location = 0) out vec4 outRadiance;
+layout(location = 1) out vec2 ssrNormals;
layout(location = 2) out vec4 ssrData;
-# ifdef USE_SSS
+# ifdef USE_SSS
layout(location = 3) out vec4 sssData;
-# ifdef USE_SSS_ALBEDO
+# ifdef USE_SSS_ALBEDO
layout(location = 4) out vec4 sssAlbedo;
-# endif /* USE_SSS_ALBEDO */
-# endif /* USE_SSS */
-
-Closure nodetree_exec(void); /* Prototype */
+# endif
+# endif
+# else /* USE_ALPHA_BLEND */
+/* Use dual source blending to be able to make a whole range of effects. */
+layout(location = 0, index = 0) out vec4 outRadiance;
+layout(location = 0, index = 1) out vec4 outTransmittance;
+# endif /* USE_ALPHA_BLEND */
# if defined(USE_ALPHA_BLEND)
/* Prototype because this file is included before volumetric_lib.glsl */
@@ -909,27 +937,26 @@ void volumetric_resolve(vec2 frag_uvs,
void main()
{
Closure cl = nodetree_exec();
-# ifndef USE_ALPHA_BLEND
- /* Prevent alpha hash material writing into alpha channel. */
- cl.opacity = 1.0;
-# endif
-# if defined(USE_ALPHA_BLEND)
+ float holdout = 1.0 - saturate(cl.holdout);
+
+# ifdef USE_ALPHA_BLEND
vec2 uvs = gl_FragCoord.xy * volCoordScale.zw;
- vec3 transmittance, scattering;
- volumetric_resolve(uvs, gl_FragCoord.z, transmittance, scattering);
- fragColor.rgb = cl.radiance * transmittance + scattering;
- fragColor.a = cl.opacity;
-# else
- fragColor = vec4(cl.radiance, cl.opacity);
-# endif
+ vec3 vol_transmit, vol_scatter;
+ volumetric_resolve(uvs, gl_FragCoord.z, vol_transmit, vol_scatter);
- ssrNormals = cl.ssr_normal.xyyy;
+ float transmit = saturate(avg(cl.transmittance));
+ outRadiance = vec4(cl.radiance * vol_transmit + vol_scatter, (1.0 - transmit) * holdout);
+ outTransmittance = vec4(cl.transmittance, transmit * holdout);
+# else
+ outRadiance = vec4(cl.radiance, holdout);
+ ssrNormals = cl.ssr_normal;
ssrData = cl.ssr_data;
-# ifdef USE_SSS
+# ifdef USE_SSS
sssData = cl.sss_data;
-# ifdef USE_SSS_ALBEDO
+# ifdef USE_SSS_ALBEDO
sssAlbedo = cl.sss_albedo.rgbb;
+# endif
# endif
# endif
@@ -945,9 +972,9 @@ void main()
# endif
# ifdef USE_SSS_ALBEDO
- fragColor.rgb += cl.sss_data.rgb * cl.sss_albedo.rgb * fac;
+ outRadiance.rgb += cl.sss_data.rgb * cl.sss_albedo.rgb * fac;
# else
- fragColor.rgb += cl.sss_data.rgb * fac;
+ outRadiance.rgb += cl.sss_data.rgb * fac;
# endif
# endif
}
@@ -955,18 +982,3 @@ void main()
# endif /* MESH_SHADER && !SHADOW_SHADER */
#endif /* VOLUMETRICS */
-
-Closure nodetree_exec(void); /* Prototype */
-
-/* TODO find a better place */
-#ifdef USE_MULTIPLY
-
-out vec4 fragColor;
-
-# define NODETREE_EXEC
-void main()
-{
- Closure cl = nodetree_exec();
- fragColor = vec4(mix(vec3(1.0), cl.radiance, cl.opacity), 1.0);
-}
-#endif
diff --git a/source/blender/draw/engines/eevee/shaders/default_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_frag.glsl
index 64a1c725a6b..1f60661d234 100644
--- a/source/blender/draw/engines/eevee/shaders/default_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/default_frag.glsl
@@ -33,15 +33,13 @@ Closure nodetree_exec(void)
vec3 out_diff, out_spec, ssr_spec;
eevee_closure_default(N, albedo, f0, f90, 1, roughness, 1.0, out_diff, out_spec, ssr_spec);
- Closure result = Closure(out_spec + out_diff * albedo,
- 1.0,
- vec4(ssr_spec, roughness),
- normal_encode(vN, viewCameraVec),
- 0);
+ Closure cl = CLOSURE_DEFAULT;
+ cl.radiance = out_spec + out_diff * albedo;
+ closure_load_ssr_data(ssr_spec, roughness, N, viewCameraVec, 1, cl);
#ifdef LOOKDEV
gl_FragDepth = 0.0;
#endif
- return result;
+ return cl;
}
diff --git a/source/blender/draw/engines/eevee/shaders/lights_lib.glsl b/source/blender/draw/engines/eevee/shaders/lights_lib.glsl
index 2d14f52d7e6..c3643cccbfc 100644
--- a/source/blender/draw/engines/eevee/shaders/lights_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lights_lib.glsl
@@ -393,8 +393,8 @@ vec3 light_translucent(LightData ld, vec3 W, vec3 N, vec4 l_vector, float scale)
return vec3(0.0);
}
- float range = abs(data.sh_far -
- data.sh_near); /* Same factor as in get_cascade_world_distance(). */
+ /* Same factor as in get_cascade_world_distance(). */
+ float range = abs(data.sh_far - data.sh_near);
vec4 shpos = shadows_cascade_data[scd_id].shadowmat[int(id)] * vec4(W, 1.0);
float dist = shpos.z * range;
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
index e7b31b94f81..dea6bc020ec 100644
--- a/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/prepass_frag.glsl
@@ -71,14 +71,16 @@ void main()
Closure cl = nodetree_exec();
+ float opacity = saturate(1.0 - avg(cl.transmittance));
+
# if defined(USE_ALPHA_HASH)
/* Hashed Alpha Testing */
- if (cl.opacity < hashed_alpha_threshold(worldPosition)) {
+ if (opacity < hashed_alpha_threshold(worldPosition)) {
discard;
}
# elif defined(USE_ALPHA_CLIP)
/* Alpha clip */
- if (cl.opacity <= alphaThreshold) {
+ if (opacity <= alphaThreshold) {
discard;
}
# endif
diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
index 67ffe62f3c6..33e6d73eeeb 100644
--- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
@@ -274,11 +274,6 @@ static GpencilBatchCache *gpencil_batch_cache_init(Object *ob, int cfra)
cache->cache_frame = cfra;
- /* create array of derived frames equal to number of layers */
- cache->tot_layers = BLI_listbase_count(&gpd->layers);
- CLAMP_MIN(cache->tot_layers, 1);
- cache->derived_array = MEM_callocN(sizeof(struct bGPDframe) * cache->tot_layers, "Derived GPF");
-
return cache;
}
@@ -301,18 +296,16 @@ static void gpencil_batch_cache_clear(GpencilBatchCache *cache)
MEM_SAFE_FREE(cache->b_edit.batch);
MEM_SAFE_FREE(cache->b_edlin.batch);
+ /* internal format data */
+ MEM_SAFE_FREE(cache->b_stroke.format);
+ MEM_SAFE_FREE(cache->b_point.format);
+ MEM_SAFE_FREE(cache->b_fill.format);
+ MEM_SAFE_FREE(cache->b_edit.format);
+ MEM_SAFE_FREE(cache->b_edlin.format);
+
MEM_SAFE_FREE(cache->grp_cache);
cache->grp_size = 0;
cache->grp_used = 0;
-
- /* clear all frames derived data */
- for (int i = 0; i < cache->tot_layers; i++) {
- bGPDframe *derived_gpf = &cache->derived_array[i];
- BKE_gpencil_free_frame_runtime_data(derived_gpf);
- derived_gpf = NULL;
- }
- cache->tot_layers = 0;
- MEM_SAFE_FREE(cache->derived_array);
}
/* get cache */
@@ -355,4 +348,14 @@ void DRW_gpencil_freecache(struct Object *ob)
gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
}
}
+
+ /* clear all frames evaluated data */
+ for (int i = 0; i < ob->runtime.gpencil_tot_layers; i++) {
+ bGPDframe *gpf_eval = &ob->runtime.gpencil_evaluated_frames[i];
+ BKE_gpencil_free_frame_runtime_data(gpf_eval);
+ gpf_eval = NULL;
+ }
+
+ ob->runtime.gpencil_tot_layers = 0;
+ MEM_SAFE_FREE(ob->runtime.gpencil_evaluated_frames);
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index d5f8d062593..541a9e31586 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -129,6 +129,13 @@ static void gpencil_vbo_ensure_size(GpencilBatchCacheElem *be, int totvertex)
}
}
+static void gpencil_elem_format_ensure(GpencilBatchCacheElem *be)
+{
+ if (be->format == NULL) {
+ be->format = MEM_callocN(sizeof(GPUVertFormat), __func__);
+ }
+}
+
/* create batch geometry data for points stroke shader */
void gpencil_get_point_geom(GpencilBatchCacheElem *be,
bGPDstroke *gps,
@@ -138,16 +145,17 @@ void gpencil_get_point_geom(GpencilBatchCacheElem *be,
{
int totvertex = gps->totpoints;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->thickness_id = GPU_vertformat_attr_add(
- &be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
be->uvdata_id = GPU_vertformat_attr_add(
- &be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
be->prev_pos_id = GPU_vertformat_attr_add(
- &be->format, "prev_pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->format, "prev_pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -223,14 +231,15 @@ void gpencil_get_stroke_geom(struct GpencilBatchCacheElem *be,
int totvertex = totpoints + cyclic_add + 2;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->thickness_id = GPU_vertformat_attr_add(
- &be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
be->uvdata_id = GPU_vertformat_attr_add(
- &be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -336,12 +345,13 @@ void gpencil_get_fill_geom(struct GpencilBatchCacheElem *be,
int totvertex = gps->tot_triangles * 3;
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->uvdata_id = GPU_vertformat_attr_add(
- &be->format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ be->format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -703,6 +713,7 @@ void gpencil_get_edit_geom(struct GpencilBatchCacheElem *be,
Object *ob = draw_ctx->obact;
bGPdata *gpd = ob->data;
const bool is_weight_paint = (gpd) && (gpd->flag & GP_DATA_STROKE_WEIGHTMODE);
+ const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
int vgindex = ob->actdef - 1;
if (!BLI_findlink(&ob->defbase, vgindex)) {
@@ -733,13 +744,17 @@ void gpencil_get_edit_geom(struct GpencilBatchCacheElem *be,
UI_GetThemeColor3fv(TH_GP_VERTEX, unselectColor);
unselectColor[3] = alpha;
+ float linecolor[4];
+ copy_v4_v4(linecolor, gpd->line_color);
+
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
be->thickness_id = GPU_vertformat_attr_add(
- &be->format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -776,6 +791,12 @@ void gpencil_get_edit_geom(struct GpencilBatchCacheElem *be,
ARRAY_SET_ITEMS(fcolor, 1.0f, 0.0f, 0.0f, 1.0f);
fsize = vsize + 1;
}
+ else if ((!is_multiedit) && (pt->runtime.pt_orig == NULL)) {
+ ARRAY_SET_ITEMS(fcolor, linecolor[0], linecolor[1], linecolor[2], selectColor[3]);
+ mul_v4_fl(fcolor, 0.9f);
+ copy_v4_v4(fcolor, fcolor);
+ fsize = vsize * 0.8f;
+ }
else if (pt->flag & GP_SPOINT_SELECT) {
copy_v4_v4(fcolor, selectColor);
fsize = vsize;
@@ -800,7 +821,7 @@ void gpencil_get_edit_geom(struct GpencilBatchCacheElem *be,
void gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be,
bGPDstroke *gps,
float alpha,
- short UNUSED(dflag))
+ const bool hide_select)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
Object *ob = draw_ctx->obact;
@@ -819,10 +840,11 @@ void gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be,
copy_v4_v4(linecolor, gpd->line_color);
if (be->vbo == NULL) {
- be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ gpencil_elem_format_ensure(be);
+ be->pos_id = GPU_vertformat_attr_add(be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ be->vbo = GPU_vertbuf_create_with_format(be->format);
GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
be->vbo_len = 0;
}
@@ -844,7 +866,7 @@ void gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be,
copy_v4_v4(fcolor, selectColor);
}
else {
- if (pt->flag & GP_SPOINT_SELECT) {
+ if ((pt->flag & GP_SPOINT_SELECT) && (!hide_select)) {
copy_v4_v4(fcolor, selectColor);
}
else {
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 9b755217946..93040afe2c7 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -61,16 +61,11 @@
#define TEXTURE 4
#define PATTERN 5
-#define GP_SET_SRC_GPS(src_gps) \
- if (src_gps) \
- src_gps = src_gps->next
-
/* Get number of vertex for using in GPU VBOs */
static void gpencil_calc_vertex(GPENCIL_StorageList *stl,
tGPencilObjectCache *cache_ob,
GpencilBatchCache *cache,
- bGPdata *gpd,
- int cfra_eval)
+ bGPdata *gpd)
{
if (!cache->is_dirty) {
return;
@@ -88,16 +83,17 @@ static void gpencil_calc_vertex(GPENCIL_StorageList *stl,
const bool do_onion = (bool)((gpd->flag & GP_DATA_STROKE_WEIGHTMODE) == 0) && overlay &&
main_onion && gpencil_onion_active(gpd) && !playing;
- const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
cache_ob->tot_vertex = 0;
cache_ob->tot_triangles = 0;
+ int idx_eval = 0;
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
bGPDframe *init_gpf = NULL;
const bool is_onion = ((do_onion) && (gpl->onion_flag & GP_LAYER_ONIONSKIN));
if (gpl->flag & GP_LAYER_HIDE) {
+ idx_eval++;
continue;
}
@@ -106,15 +102,7 @@ static void gpencil_calc_vertex(GPENCIL_StorageList *stl,
init_gpf = gpl->frames.first;
}
else {
- /* verify time modifiers */
- if ((time_remap) && (!stl->storage->simplify_modif)) {
- int remap_cfra = BKE_gpencil_time_modifier(
- draw_ctx->depsgraph, draw_ctx->scene, ob, gpl, cfra_eval, stl->storage->is_render);
- init_gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
- }
- else {
- init_gpf = gpl->actframe;
- }
+ init_gpf = &ob->runtime.gpencil_evaluated_frames[idx_eval];
}
if (init_gpf == NULL) {
@@ -130,6 +118,7 @@ static void gpencil_calc_vertex(GPENCIL_StorageList *stl,
break;
}
}
+ idx_eval++;
}
cache->b_fill.tot_vertex = cache_ob->tot_triangles * 3;
@@ -949,6 +938,12 @@ static void gpencil_add_editpoints_vertexdata(GpencilBatchCache *cache,
{
const DRWContextState *draw_ctx = DRW_context_state_get();
View3D *v3d = draw_ctx->v3d;
+ ToolSettings *ts = draw_ctx->scene->toolsettings;
+ const bool use_sculpt_mask = (GPENCIL_SCULPT_MODE(gpd) && (ts->gpencil_selectmode_sculpt &
+ (GP_SCULPT_MASK_SELECTMODE_POINT |
+ GP_SCULPT_MASK_SELECTMODE_STROKE |
+ GP_SCULPT_MASK_SELECTMODE_SEGMENT)));
+
MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
/* alpha factor for edit points/line to make them more subtle */
@@ -960,12 +955,14 @@ static void gpencil_add_editpoints_vertexdata(GpencilBatchCache *cache,
return;
}
const bool is_weight_paint = (gpd) && (gpd->flag & GP_DATA_STROKE_WEIGHTMODE);
+ const bool hide_select = GPENCIL_SCULPT_MODE(gpd) && !use_sculpt_mask;
if (cache->is_dirty) {
if ((obact == ob) && ((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) &&
(v3d->gp_flag & V3D_GP_SHOW_EDIT_LINES)) {
+
/* line of the original stroke */
- gpencil_get_edlin_geom(&cache->b_edlin, gps, edit_alpha, gpd->flag);
+ gpencil_get_edlin_geom(&cache->b_edlin, gps, edit_alpha, hide_select);
/* add to list of groups */
cache->grp_cache = gpencil_group_cache_add(cache->grp_cache,
@@ -978,6 +975,12 @@ static void gpencil_add_editpoints_vertexdata(GpencilBatchCache *cache,
&cache->grp_size,
&cache->grp_used);
}
+
+ /* In sculpt mode, the point are only visible if masking is enabled. */
+ if (hide_select) {
+ return;
+ }
+
/* edit points */
if ((gps->flag & GP_STROKE_SELECT) || (is_weight_paint)) {
if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) ||
@@ -1009,8 +1012,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
Object *ob,
bGPdata *gpd,
bGPDlayer *gpl,
- bGPDframe *src_gpf,
- bGPDframe *derived_gpf,
+ bGPDframe *gpf,
const float opacity,
const float tintcolor[4],
const bool custonion,
@@ -1021,7 +1023,7 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
const DRWContextState *draw_ctx = DRW_context_state_get();
Scene *scene = draw_ctx->scene;
View3D *v3d = draw_ctx->v3d;
- bGPDstroke *gps, *src_gps;
+ bGPDstroke *gps;
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
const bool playing = stl->storage->is_playing;
const bool is_render = (bool)stl->storage->is_render;
@@ -1036,42 +1038,24 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
/* get parent matrix and save as static data */
if ((cache_ob != NULL) && (cache_ob->is_dup_ob)) {
- copy_m4_m4(derived_gpf->runtime.parent_obmat, cache_ob->obmat);
+ copy_m4_m4(gpf->runtime.parent_obmat, cache_ob->obmat);
}
else {
- ED_gpencil_parent_location(depsgraph, ob, gpd, gpl, derived_gpf->runtime.parent_obmat);
+ ED_gpencil_parent_location(depsgraph, ob, gpd, gpl, gpf->runtime.parent_obmat);
}
- /* apply geometry modifiers */
- if ((cache->is_dirty) && (ob->greasepencil_modifiers.first) && (!is_multiedit)) {
- if (!stl->storage->simplify_modif) {
- if (BKE_gpencil_has_geometry_modifiers(ob)) {
- BKE_gpencil_geometry_modifiers(depsgraph, ob, gpl, derived_gpf, stl->storage->is_render);
- }
- }
- }
-
- if (src_gpf) {
- src_gps = src_gpf->strokes.first;
- }
- else {
- src_gps = NULL;
- }
-
- for (gps = derived_gpf->strokes.first; gps; gps = gps->next) {
+ for (gps = gpf->strokes.first; gps; gps = gps->next) {
MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
/* check if stroke can be drawn */
if (gpencil_can_draw_stroke(gp_style, gps, false, is_mat_preview) == false) {
- GP_SET_SRC_GPS(src_gps);
continue;
}
/* be sure recalc all cache in source stroke to avoid recalculation when frame change
* and improve fps */
- if (src_gps) {
- gpencil_recalc_geometry_caches(ob, gpl, gp_style, src_gps);
- }
+ gpencil_recalc_geometry_caches(
+ ob, gpl, gp_style, (gps->runtime.gps_orig) ? gps->runtime.gps_orig : gps);
/* if the fill has any value, it's considered a fill and is not drawn if simplify fill is
* enabled */
@@ -1080,32 +1064,19 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
if ((gp_style->fill_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH) ||
(gp_style->fill_style > GP_STYLE_FILL_STYLE_SOLID) ||
(gpl->blend_mode != eGplBlendMode_Regular)) {
- GP_SET_SRC_GPS(src_gps);
+
continue;
}
}
- if ((gpl->actframe->framenum == derived_gpf->framenum) || (!is_multiedit) ||
- (overlay_multiedit)) {
- /* copy color to temp fields to apply temporal changes in the stroke */
- copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
- copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
-
- /* apply modifiers (only modify geometry, but not create ) */
- if ((cache->is_dirty) && (ob->greasepencil_modifiers.first) && (!is_multiedit)) {
- if (!stl->storage->simplify_modif) {
- BKE_gpencil_stroke_modifiers(
- depsgraph, ob, gpl, derived_gpf, gps, stl->storage->is_render);
- }
- }
-
+ if ((gpl->actframe->framenum == gpf->framenum) || (!is_multiedit) || (overlay_multiedit)) {
/* hide any blend layer */
if ((!stl->storage->simplify_blend) || (gpl->blend_mode == eGplBlendMode_Regular)) {
/* fill */
if ((gp_style->flag & GP_STYLE_FILL_SHOW) && (!stl->storage->simplify_fill) &&
((gps->flag & GP_STROKE_NOFILL) == 0)) {
gpencil_add_fill_vertexdata(
- cache, ob, gpl, derived_gpf, gps, opacity, tintcolor, false, custonion);
+ cache, ob, gpl, gpf, gps, opacity, tintcolor, false, custonion);
}
/* stroke */
/* No fill strokes, must show stroke always */
@@ -1118,14 +1089,13 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
}
gpencil_add_stroke_vertexdata(
- cache, ob, gpl, derived_gpf, gps, opacity, tintcolor, false, custonion);
+ cache, ob, gpl, gpf, gps, opacity, tintcolor, false, custonion);
}
}
}
/* edit points (only in edit mode and not play animation not render) */
- if ((draw_ctx->obact == ob) && (src_gps) && (!playing) && (!is_render) &&
- (!cache_ob->is_dup_ob)) {
+ if ((draw_ctx->obact == ob) && (!playing) && (!is_render) && (!cache_ob->is_dup_ob)) {
if ((gpl->flag & GP_LAYER_LOCKED) == 0) {
if (!stl->g_data->shgrps_edit_line) {
stl->g_data->shgrps_edit_line = DRW_shgroup_create(e_data->gpencil_line_sh,
@@ -1138,11 +1108,9 @@ static void gpencil_draw_strokes(GpencilBatchCache *cache,
DRW_shgroup_uniform_vec2(stl->g_data->shgrps_edit_point, "Viewport", viewport_size, 1);
}
- gpencil_add_editpoints_vertexdata(cache, ob, gpd, gpl, derived_gpf, src_gps);
+ gpencil_add_editpoints_vertexdata(cache, ob, gpd, gpl, gpf, gps);
}
}
-
- GP_SET_SRC_GPS(src_gps);
}
}
@@ -1356,25 +1324,6 @@ static void gpencil_draw_onionskins(GpencilBatchCache *cache,
}
}
-static void gpencil_copy_frame(bGPDframe *gpf, bGPDframe *derived_gpf)
-{
- derived_gpf->prev = gpf->prev;
- derived_gpf->next = gpf->next;
- derived_gpf->framenum = gpf->framenum;
- derived_gpf->flag = gpf->flag;
- derived_gpf->key_type = gpf->key_type;
- derived_gpf->runtime = gpf->runtime;
- copy_m4_m4(derived_gpf->runtime.parent_obmat, gpf->runtime.parent_obmat);
-
- /* copy strokes */
- BLI_listbase_clear(&derived_gpf->strokes);
- for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) {
- /* make copy of source stroke */
- bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
- BLI_addtail(&derived_gpf->strokes, gps_dst);
- }
-}
-
/* Triangulate stroke for high quality fill (this is done only if cache is null or stroke was
* modified) */
void gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
@@ -1456,7 +1405,8 @@ void gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
/* Check if stencil is required */
static bool gpencil_is_stencil_required(MaterialGPencilStyle *gp_style)
{
- return (bool)(gp_style->stroke_style == GP_STYLE_STROKE_STYLE_SOLID);
+ return (bool)((gp_style->stroke_style == GP_STYLE_STROKE_STYLE_SOLID) &&
+ ((gp_style->flag & GP_STYLE_DISABLE_STENCIL) == 0));
}
/* draw stroke in drawing buffer */
@@ -1860,7 +1810,7 @@ void gpencil_populate_multiedit(GPENCIL_e_data *e_data,
const bool playing = stl->storage->is_playing;
/* calc max size of VBOs */
- gpencil_calc_vertex(stl, cache_ob, cache, gpd, cfra_eval);
+ gpencil_calc_vertex(stl, cache_ob, cache, gpd);
/* draw strokes */
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
@@ -1880,7 +1830,6 @@ void gpencil_populate_multiedit(GPENCIL_e_data *e_data,
gpd,
gpl,
gpf,
- gpf,
gpl->opacity,
gpl->tintcolor,
false,
@@ -1898,7 +1847,6 @@ void gpencil_populate_multiedit(GPENCIL_e_data *e_data,
gpd,
gpl,
gpf,
- gpf,
gpl->opacity,
gpl->tintcolor,
false,
@@ -1914,28 +1862,6 @@ void gpencil_populate_multiedit(GPENCIL_e_data *e_data,
cache->is_dirty = false;
}
-/* ensure there is a derived frame */
-static void gpencil_ensure_derived_frame(bGPdata *gpd,
- bGPDlayer *gpl,
- bGPDframe *gpf,
- GpencilBatchCache *cache,
- bGPDframe **derived_gpf)
-{
- /* create derived frames array data or expand */
- int derived_idx = BLI_findindex(&gpd->layers, gpl);
- *derived_gpf = &cache->derived_array[derived_idx];
-
- /* if no derived frame or dirty cache, create a new one */
- if ((*derived_gpf == NULL) || (cache->is_dirty)) {
- if (*derived_gpf != NULL) {
- /* first clear temp data */
- BKE_gpencil_free_frame_runtime_data(*derived_gpf);
- }
- /* create new data (do not assign new memory)*/
- gpencil_copy_frame(gpf, *derived_gpf);
- }
-}
-
/* helper for populate a complete grease pencil datablock */
void gpencil_populate_datablock(GPENCIL_e_data *e_data,
void *vedata,
@@ -1947,12 +1873,14 @@ void gpencil_populate_datablock(GPENCIL_e_data *e_data,
const ViewLayer *view_layer = DEG_get_evaluated_view_layer(draw_ctx->depsgraph);
Scene *scene = draw_ctx->scene;
- bGPdata *gpd = (bGPdata *)ob->data;
+ /* Use original data to shared in edit/transform operators */
+ bGPdata *gpd_eval = (bGPdata *)ob->data;
+ bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id);
View3D *v3d = draw_ctx->v3d;
int cfra_eval = (int)DEG_get_ctime(draw_ctx->depsgraph);
- bGPDframe *derived_gpf = NULL;
+ bGPDframe *gpf_eval = NULL;
const bool overlay = v3d != NULL ? (bool)((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0) : true;
const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
@@ -1972,14 +1900,8 @@ void gpencil_populate_datablock(GPENCIL_e_data *e_data,
}
/* calc max size of VBOs */
- gpencil_calc_vertex(stl, cache_ob, cache, gpd, cfra_eval);
+ gpencil_calc_vertex(stl, cache_ob, cache, gpd);
- /* init general modifiers data */
- if (!stl->storage->simplify_modif) {
- if ((cache->is_dirty) && (ob->greasepencil_modifiers.first)) {
- BKE_gpencil_lattice_init(ob);
- }
- }
/* draw normal strokes */
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
/* don't draw layer if hidden */
@@ -2027,8 +1949,9 @@ void gpencil_populate_datablock(GPENCIL_e_data *e_data,
opacity = opacity * v3d->overlay.gpencil_fade_layer;
}
- /* create derived frames array data or expand */
- gpencil_ensure_derived_frame(gpd, gpl, gpf, cache, &derived_gpf);
+ /* Get evaluated frames array data */
+ int idx_eval = BLI_findindex(&gpd->layers, gpl);
+ gpf_eval = &ob->runtime.gpencil_evaluated_frames[idx_eval];
/* draw onion skins */
if (!ID_IS_LINKED(&gpd->id)) {
@@ -2042,23 +1965,8 @@ void gpencil_populate_datablock(GPENCIL_e_data *e_data,
}
}
/* draw normal strokes */
- gpencil_draw_strokes(cache,
- e_data,
- vedata,
- ob,
- gpd,
- gpl,
- gpf,
- derived_gpf,
- opacity,
- gpl->tintcolor,
- false,
- cache_ob);
- }
-
- /* clear any lattice data */
- if ((cache->is_dirty) && (ob->greasepencil_modifiers.first)) {
- BKE_gpencil_lattice_clear(ob);
+ gpencil_draw_strokes(
+ cache, e_data, vedata, ob, gpd, gpl, gpf_eval, opacity, gpl->tintcolor, false, cache_ob);
}
/* create batchs and shading groups */
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 5f6f5650ca7..aa5918feaa8 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -410,10 +410,10 @@ void GPENCIL_cache_init(void *vedata)
}
/* save simplify flags (can change while drawing, so it's better to save) */
- stl->storage->simplify_fill = GP_SIMPLIFY_FILL(scene, stl->storage->is_playing);
- stl->storage->simplify_modif = GP_SIMPLIFY_MODIF(scene, stl->storage->is_playing);
- stl->storage->simplify_fx = GP_SIMPLIFY_FX(scene, stl->storage->is_playing);
- stl->storage->simplify_blend = GP_SIMPLIFY_BLEND(scene, stl->storage->is_playing);
+ stl->storage->simplify_fill = GPENCIL_SIMPLIFY_FILL(scene, stl->storage->is_playing);
+ stl->storage->simplify_modif = GPENCIL_SIMPLIFY_MODIF(scene, stl->storage->is_playing);
+ stl->storage->simplify_fx = GPENCIL_SIMPLIFY_FX(scene, stl->storage->is_playing);
+ stl->storage->simplify_blend = GPENCIL_SIMPLIFY_BLEND(scene, stl->storage->is_playing);
/* xray mode */
if (v3d) {
@@ -571,6 +571,8 @@ static void gpencil_add_draw_data(void *vedata, Object *ob)
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
bGPdata *gpd = (bGPdata *)ob->data;
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ const View3D *v3d = draw_ctx->v3d;
tGPencilObjectCache_shgrp *array_elm = NULL;
int i = stl->g_data->gp_cache_used - 1;
@@ -598,7 +600,9 @@ static void gpencil_add_draw_data(void *vedata, Object *ob)
/* FX passses */
cache_ob->has_fx = false;
- if ((!stl->storage->simplify_fx) && (!ELEM(cache_ob->shading_type[0], OB_WIRE, OB_SOLID)) &&
+ if ((!stl->storage->simplify_fx) &&
+ ((!ELEM(cache_ob->shading_type[0], OB_WIRE, OB_SOLID)) ||
+ ((v3d->spacetype != SPACE_VIEW3D))) &&
(BKE_shaderfx_has_gpencil(ob))) {
cache_ob->has_fx = true;
if ((!stl->storage->simplify_fx) && (!is_multiedit)) {
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 14615a19760..f723bd16634 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -28,12 +28,14 @@
struct GPENCIL_Data;
struct GPENCIL_StorageList;
struct MaterialGPencilStyle;
-struct ModifierData;
struct Object;
struct RenderEngine;
struct RenderLayer;
struct bGPDstroke;
-struct tGPspoint;
+
+struct GPUBatch;
+struct GPUVertBuf;
+struct GPUVertFormat;
#define GPENCIL_CACHE_BLOCK_SIZE 8
#define GPENCIL_MAX_SHGROUPS 65536
@@ -46,23 +48,6 @@ struct tGPspoint;
#define GPENCIL_COLOR_TEXTURE 1
#define GPENCIL_COLOR_PATTERN 2
-#define GP_SIMPLIFY(scene) ((scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ENABLE))
-#define GP_SIMPLIFY_ONPLAY(playing) \
- (((playing == true) && (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ON_PLAY)) || \
- ((scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_ON_PLAY) == 0))
-#define GP_SIMPLIFY_FILL(scene, playing) \
- ((GP_SIMPLIFY_ONPLAY(playing) && (GP_SIMPLIFY(scene)) && \
- (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_FILL)))
-#define GP_SIMPLIFY_MODIF(scene, playing) \
- ((GP_SIMPLIFY_ONPLAY(playing) && (GP_SIMPLIFY(scene)) && \
- (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_MODIFIER)))
-#define GP_SIMPLIFY_FX(scene, playing) \
- ((GP_SIMPLIFY_ONPLAY(playing) && (GP_SIMPLIFY(scene)) && \
- (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_FX)))
-#define GP_SIMPLIFY_BLEND(scene, playing) \
- ((GP_SIMPLIFY_ONPLAY(playing) && (GP_SIMPLIFY(scene)) && \
- (scene->r.simplify_gpencil & SIMPLIFY_GPENCIL_BLEND)))
-
#define GP_IS_CAMERAVIEW ((rv3d != NULL) && (rv3d->persp == RV3D_CAMOB && v3d->camera))
/* *********** OBJECTS CACHE *********** */
@@ -345,13 +330,13 @@ typedef struct GPENCIL_e_data {
} GPENCIL_e_data; /* Engine data */
-/* GPUBatch Cache */
+/* GPUBatch Cache Element */
typedef struct GpencilBatchCacheElem {
GPUBatch *batch;
GPUVertBuf *vbo;
int vbo_len;
/* attr ids */
- GPUVertFormat format;
+ GPUVertFormat *format;
uint pos_id;
uint color_id;
uint thickness_id;
@@ -362,6 +347,7 @@ typedef struct GpencilBatchCacheElem {
int tot_vertex;
} GpencilBatchCacheElem;
+/* Defines each batch group to define later the shgroup */
typedef struct GpencilBatchGroup {
struct bGPDlayer *gpl; /* reference to original layer */
struct bGPDframe *gpf; /* reference to original frame */
@@ -379,6 +365,7 @@ typedef enum GpencilBatchGroup_Type {
eGpencilBatchGroupType_Edlin = 5,
} GpencilBatchGroup_Type;
+/* Runtime data for GPU and evaluated frames after applying modifiers */
typedef struct GpencilBatchCache {
GpencilBatchCacheElem b_stroke;
GpencilBatchCacheElem b_point;
@@ -386,18 +373,19 @@ typedef struct GpencilBatchCache {
GpencilBatchCacheElem b_edit;
GpencilBatchCacheElem b_edlin;
- /* settings to determine if cache is invalid */
+ /** Cache is dirty */
bool is_dirty;
+ /** Edit mode flag */
bool is_editmode;
+ /** Last cache frame */
int cache_frame;
- /* data with the shading groups */
- int grp_used; /* total groups in arrays */
- int grp_size; /* max size of the array */
- struct GpencilBatchGroup *grp_cache; /* array of elements */
-
- int tot_layers;
- struct bGPDframe *derived_array; /* runtime data created by modifiers */
+ /** Total groups in arrays */
+ int grp_used;
+ /** Max size of the array */
+ int grp_size;
+ /** Array of cache elements */
+ struct GpencilBatchGroup *grp_cache;
} GpencilBatchCache;
/* general drawing functions */
@@ -453,7 +441,7 @@ void gpencil_get_edit_geom(struct GpencilBatchCacheElem *be,
void gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be,
struct bGPDstroke *gps,
float alpha,
- short dflag);
+ const bool hide_select);
struct GPUBatch *gpencil_get_buffer_stroke_geom(struct bGPdata *gpd, short thickness);
struct GPUBatch *gpencil_get_buffer_fill_geom(struct bGPdata *gpd);
diff --git a/source/blender/draw/engines/select/select_draw_utils.c b/source/blender/draw/engines/select/select_draw_utils.c
index 08c6c2ac865..ec47d6ea8eb 100644
--- a/source/blender/draw/engines/select/select_draw_utils.c
+++ b/source/blender/draw/engines/select/select_draw_utils.c
@@ -23,6 +23,8 @@
*/
#include "BKE_editmesh.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
#include "DNA_mesh_types.h"
#include "DNA_scene_types.h"
@@ -32,6 +34,8 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
+#include "DRW_select_buffer.h"
+
#include "draw_cache_impl.h"
#include "select_private.h"
@@ -40,6 +44,40 @@
/** \name Draw Utilities
* \{ */
+void select_id_object_min_max(Object *obj, float r_min[3], float r_max[3])
+{
+ BoundBox *bb;
+ BMEditMesh *em = BKE_editmesh_from_object(obj);
+ if (em) {
+ /* Use Object Texture Space. */
+ bb = BKE_mesh_texspace_get(em->mesh_eval_cage, NULL, NULL, NULL);
+ }
+ else {
+ bb = BKE_object_boundbox_get(obj);
+ }
+ copy_v3_v3(r_min, bb->vec[0]);
+ copy_v3_v3(r_max, bb->vec[6]);
+}
+
+short select_id_get_object_select_mode(Scene *scene, Object *ob)
+{
+ short r_select_mode = 0;
+ if (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_TEXTURE_PAINT)) {
+ Mesh *me_orig = DEG_get_original_object(ob)->data;
+ if (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) {
+ r_select_mode = SCE_SELECT_FACE;
+ }
+ if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) {
+ r_select_mode |= SCE_SELECT_VERTEX;
+ }
+ }
+ else {
+ r_select_mode = scene->toolsettings->selectmode;
+ }
+
+ return r_select_mode;
+}
+
static bool check_ob_drawface_dot(short select_mode, const View3D *v3d, char dt)
{
if (select_mode & SCE_SELECT_FACE) {
@@ -71,32 +109,33 @@ static void draw_select_id_edit_mesh(SELECTID_StorageList *stl,
BM_mesh_elem_table_ensure(em->bm, BM_VERT | BM_EDGE | BM_FACE);
- struct GPUBatch *geom_faces = DRW_mesh_batch_cache_get_triangles_with_select_id(me);
- DRWShadingGroup *face_shgrp;
if (select_mode & SCE_SELECT_FACE) {
- face_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_face_flat);
+ struct GPUBatch *geom_faces = DRW_mesh_batch_cache_get_triangles_with_select_id(me);
+ DRWShadingGroup *face_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_face_flat);
DRW_shgroup_uniform_int_copy(face_shgrp, "offset", *(int *)&initial_offset);
+ DRW_shgroup_call_no_cull(face_shgrp, geom_faces, ob);
if (draw_facedot) {
struct GPUBatch *geom_facedots = DRW_mesh_batch_cache_get_facedots_with_select_id(me);
- DRW_shgroup_call(face_shgrp, geom_facedots, ob);
+ DRW_shgroup_call_no_cull(face_shgrp, geom_facedots, ob);
}
*r_face_offset = initial_offset + em->bm->totface;
}
else {
- face_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_face_unif);
- DRW_shgroup_uniform_int_copy(face_shgrp, "id", 0);
-
+ if (ob->dt >= OB_SOLID) {
+ struct GPUBatch *geom_faces = DRW_mesh_batch_cache_get_surface(me);
+ DRWShadingGroup *face_shgrp = stl->g_data->shgrp_face_unif;
+ DRW_shgroup_call_no_cull(face_shgrp, geom_faces, ob);
+ }
*r_face_offset = initial_offset;
}
- DRW_shgroup_call(face_shgrp, geom_faces, ob);
/* Unlike faces, only draw edges if edge select mode. */
if (select_mode & SCE_SELECT_EDGE) {
struct GPUBatch *geom_edges = DRW_mesh_batch_cache_get_edges_with_select_id(me);
DRWShadingGroup *edge_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_edge);
DRW_shgroup_uniform_int_copy(edge_shgrp, "offset", *(int *)r_face_offset);
- DRW_shgroup_call(edge_shgrp, geom_edges, ob);
+ DRW_shgroup_call_no_cull(edge_shgrp, geom_edges, ob);
*r_edge_offset = *r_face_offset + em->bm->totedge;
}
else {
@@ -110,7 +149,7 @@ static void draw_select_id_edit_mesh(SELECTID_StorageList *stl,
struct GPUBatch *geom_verts = DRW_mesh_batch_cache_get_verts_with_select_id(me);
DRWShadingGroup *vert_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_vert);
DRW_shgroup_uniform_int_copy(vert_shgrp, "offset", *(int *)r_edge_offset);
- DRW_shgroup_call(vert_shgrp, geom_verts, ob);
+ DRW_shgroup_call_no_cull(vert_shgrp, geom_verts, ob);
*r_vert_offset = *r_edge_offset + em->bm->totvert;
}
else {
@@ -137,17 +176,16 @@ static void draw_select_id_mesh(SELECTID_StorageList *stl,
}
else {
/* Only draw faces to mask out verts, we don't want their selection ID's. */
- face_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_face_unif);
- DRW_shgroup_uniform_int_copy(face_shgrp, "id", 0);
+ face_shgrp = stl->g_data->shgrp_face_unif;
*r_face_offset = initial_offset;
}
- DRW_shgroup_call(face_shgrp, geom_faces, ob);
+ DRW_shgroup_call_no_cull(face_shgrp, geom_faces, ob);
if (select_mode & SCE_SELECT_EDGE) {
struct GPUBatch *geom_edges = DRW_mesh_batch_cache_get_edges_with_select_id(me);
DRWShadingGroup *edge_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_edge);
DRW_shgroup_uniform_int_copy(edge_shgrp, "offset", *(int *)r_face_offset);
- DRW_shgroup_call(edge_shgrp, geom_edges, ob);
+ DRW_shgroup_call_no_cull(edge_shgrp, geom_edges, ob);
*r_edge_offset = *r_face_offset + me->totedge;
}
else {
@@ -157,10 +195,13 @@ static void draw_select_id_mesh(SELECTID_StorageList *stl,
if (select_mode & SCE_SELECT_VERTEX) {
struct GPUBatch *geom_verts = DRW_mesh_batch_cache_get_verts_with_select_id(me);
DRWShadingGroup *vert_shgrp = DRW_shgroup_create_sub(stl->g_data->shgrp_vert);
- DRW_shgroup_uniform_int_copy(vert_shgrp, "offset", 1);
- DRW_shgroup_call(vert_shgrp, geom_verts, ob);
+ DRW_shgroup_uniform_int_copy(vert_shgrp, "offset", *r_edge_offset);
+ DRW_shgroup_call_no_cull(vert_shgrp, geom_verts, ob);
*r_vert_offset = *r_edge_offset + me->totvert;
}
+ else {
+ *r_vert_offset = *r_edge_offset;
+ }
}
void select_id_draw_object(void *vedata,
@@ -190,16 +231,6 @@ void select_id_draw_object(void *vedata,
r_face_offset);
}
else {
- if (ob->mode & (OB_MODE_WEIGHT_PAINT | OB_MODE_VERTEX_PAINT | OB_MODE_TEXTURE_PAINT)) {
- Mesh *me_orig = DEG_get_original_object(ob)->data;
- select_mode = 0;
- if (me_orig->editflag & ME_EDIT_PAINT_FACE_SEL) {
- select_mode = SCE_SELECT_FACE;
- }
- if (me_orig->editflag & ME_EDIT_PAINT_VERT_SEL) {
- select_mode |= SCE_SELECT_VERTEX;
- }
- }
draw_select_id_mesh(
stl, ob, select_mode, initial_offset, r_vert_offset, r_edge_offset, r_face_offset);
}
diff --git a/source/blender/draw/engines/select/select_engine.c b/source/blender/draw/engines/select/select_engine.c
index 68b4a8084f0..5dc20a589f0 100644
--- a/source/blender/draw/engines/select/select_engine.c
+++ b/source/blender/draw/engines/select/select_engine.c
@@ -22,16 +22,15 @@
* Engine for drawing a selection map where the pixels indicate the selection indices.
*/
-#include "BLI_rect.h"
-
#include "DNA_screen_types.h"
-#include "GPU_shader.h"
-#include "GPU_select.h"
-
#include "UI_resources.h"
#include "DRW_engine.h"
+#include "DRW_select_buffer.h"
+
+#include "draw_cache_impl.h"
+#include "draw_manager.h"
#include "select_private.h"
#include "select_engine.h"
@@ -41,21 +40,13 @@
/* *********** STATIC *********** */
static struct {
- SELECTID_Shaders sh_data[GPU_SHADER_CFG_LEN];
-
struct GPUFrameBuffer *framebuffer_select_id;
struct GPUTexture *texture_u32;
- struct {
- struct BaseOffset *base_array_index_offsets;
- uint bases_len;
- uint last_base_drawn;
- /** Total number of items `base_array_index_offsets[bases_len - 1].vert`. */
- uint last_index_drawn;
-
- short select_mode;
- } context;
-} e_data = {{{NULL}}}; /* Engine data */
+ SELECTID_Shaders sh_data[GPU_SHADER_CFG_LEN];
+ struct SELECTID_Context context;
+ uint runtime_new_objects;
+} e_data = {NULL}; /* Engine data */
/* Shaders */
extern char datatoc_common_view_lib_glsl[];
@@ -63,10 +54,10 @@ extern char datatoc_selection_id_3D_vert_glsl[];
extern char datatoc_selection_id_frag_glsl[];
/* -------------------------------------------------------------------- */
-/** \name Selection Utilities
+/** \name Utils
* \{ */
-static void draw_select_framebuffer_select_id_setup(void)
+static void select_engine_framebuffer_setup(void)
{
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
int size[2];
@@ -79,7 +70,6 @@ static void draw_select_framebuffer_select_id_setup(void)
if ((e_data.texture_u32 != NULL) && ((GPU_texture_width(e_data.texture_u32) != size[0]) ||
(GPU_texture_height(e_data.texture_u32) != size[1]))) {
-
GPU_texture_free(e_data.texture_u32);
e_data.texture_u32 = NULL;
}
@@ -91,6 +81,7 @@ static void draw_select_framebuffer_select_id_setup(void)
if (e_data.texture_u32 == NULL) {
e_data.texture_u32 = GPU_texture_create_2d(size[0], size[1], GPU_R32UI, NULL, NULL);
GPU_framebuffer_texture_attach(e_data.framebuffer_select_id, e_data.texture_u32, 0, 0);
+
GPU_framebuffer_check_valid(e_data.framebuffer_select_id, NULL);
}
}
@@ -139,8 +130,23 @@ static void select_engine_init(void *vedata)
}
{
+ /* Create view from a subregion */
+ const DRWView *view_default = DRW_view_default_get();
+ float viewmat[4][4], winmat[4][4], winmat_subregion[4][4];
+ DRW_view_viewmat_get(view_default, viewmat, false);
+ DRW_view_winmat_get(view_default, winmat, false);
+ projmat_from_subregion(winmat,
+ (int[2]){draw_ctx->ar->winx, draw_ctx->ar->winy},
+ e_data.context.last_rect.xmin,
+ e_data.context.last_rect.xmax,
+ e_data.context.last_rect.ymin,
+ e_data.context.last_rect.ymax,
+ winmat_subregion);
+
+ stl->g_data->view_subregion = DRW_view_create(viewmat, winmat_subregion, NULL, NULL, NULL);
+
/* Create view with depth offset */
- stl->g_data->view_faces = (DRWView *)DRW_view_default_get();
+ stl->g_data->view_faces = (DRWView *)view_default;
stl->g_data->view_edges = DRW_view_create_with_zoffset(draw_ctx->rv3d, 1.0f);
stl->g_data->view_verts = DRW_view_create_with_zoffset(draw_ctx->rv3d, 1.1f);
}
@@ -153,64 +159,148 @@ static void select_cache_init(void *vedata)
const DRWContextState *draw_ctx = DRW_context_state_get();
SELECTID_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+
+ if (e_data.context.select_mode == -1) {
+ e_data.context.select_mode = select_id_get_object_select_mode(draw_ctx->scene,
+ draw_ctx->obact);
+ BLI_assert(e_data.context.select_mode != 0);
+ }
+
{
+ psl->depth_only_pass = DRW_pass_create("Depth Only Pass", DRW_STATE_DEFAULT);
+ stl->g_data->shgrp_depth_only = DRW_shgroup_create(sh_data->select_id_uniform,
+ psl->depth_only_pass);
+
+ if (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) {
+ DRW_shgroup_state_enable(stl->g_data->shgrp_depth_only, DRW_STATE_CLIP_PLANES);
+ }
+
psl->select_id_face_pass = DRW_pass_create("Face Pass", DRW_STATE_DEFAULT);
- stl->g_data->shgrp_face_unif = DRW_shgroup_create(sh_data->select_id_uniform,
- psl->select_id_face_pass);
- stl->g_data->shgrp_face_flat = DRW_shgroup_create(sh_data->select_id_flat,
- psl->select_id_face_pass);
+ if (e_data.context.select_mode & SCE_SELECT_FACE) {
+ stl->g_data->shgrp_face_flat = DRW_shgroup_create(sh_data->select_id_flat,
+ psl->select_id_face_pass);
- psl->select_id_edge_pass = DRW_pass_create(
- "Edge Pass", DRW_STATE_DEFAULT | DRW_STATE_FIRST_VERTEX_CONVENTION);
+ if (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) {
+ DRW_shgroup_state_enable(stl->g_data->shgrp_face_flat, DRW_STATE_CLIP_PLANES);
+ }
+ }
+ else {
+ stl->g_data->shgrp_face_unif = DRW_shgroup_create(sh_data->select_id_uniform,
+ psl->select_id_face_pass);
+ DRW_shgroup_uniform_int_copy(stl->g_data->shgrp_face_unif, "id", 0);
+
+ if (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) {
+ DRW_shgroup_state_enable(stl->g_data->shgrp_face_unif, DRW_STATE_CLIP_PLANES);
+ }
+ }
- stl->g_data->shgrp_edge = DRW_shgroup_create(sh_data->select_id_flat,
- psl->select_id_edge_pass);
+ if (e_data.context.select_mode & SCE_SELECT_EDGE) {
+ psl->select_id_edge_pass = DRW_pass_create(
+ "Edge Pass", DRW_STATE_DEFAULT | DRW_STATE_FIRST_VERTEX_CONVENTION);
- psl->select_id_vert_pass = DRW_pass_create("Vert Pass", DRW_STATE_DEFAULT);
- stl->g_data->shgrp_vert = DRW_shgroup_create(sh_data->select_id_flat,
- psl->select_id_vert_pass);
+ stl->g_data->shgrp_edge = DRW_shgroup_create(sh_data->select_id_flat,
+ psl->select_id_edge_pass);
- DRW_shgroup_uniform_float_copy(stl->g_data->shgrp_vert, "sizeVertex", G_draw.block.sizeVertex);
+ if (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) {
+ DRW_shgroup_state_enable(stl->g_data->shgrp_edge, DRW_STATE_CLIP_PLANES);
+ }
+ }
- if (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) {
- DRW_shgroup_state_enable(stl->g_data->shgrp_face_unif, DRW_STATE_CLIP_PLANES);
- DRW_shgroup_state_enable(stl->g_data->shgrp_face_flat, DRW_STATE_CLIP_PLANES);
- DRW_shgroup_state_enable(stl->g_data->shgrp_edge, DRW_STATE_CLIP_PLANES);
- DRW_shgroup_state_enable(stl->g_data->shgrp_vert, DRW_STATE_CLIP_PLANES);
+ if (e_data.context.select_mode & SCE_SELECT_VERTEX) {
+ psl->select_id_vert_pass = DRW_pass_create("Vert Pass", DRW_STATE_DEFAULT);
+ stl->g_data->shgrp_vert = DRW_shgroup_create(sh_data->select_id_flat,
+ psl->select_id_vert_pass);
+ DRW_shgroup_uniform_float_copy(
+ stl->g_data->shgrp_vert, "sizeVertex", G_draw.block.sizeVertex);
+
+ if (draw_ctx->sh_cfg == GPU_SHADER_CFG_CLIPPED) {
+ DRW_shgroup_state_enable(stl->g_data->shgrp_vert, DRW_STATE_CLIP_PLANES);
+ }
}
}
- e_data.context.last_base_drawn = 0;
- e_data.context.last_index_drawn = 1;
+ /* Check if the viewport has changed. */
+ float(*persmat)[4] = draw_ctx->rv3d->persmat;
+ e_data.context.is_dirty = !compare_m4m4(e_data.context.persmat, persmat, FLT_EPSILON);
+ if (e_data.context.is_dirty) {
+ /* Remove all tags from drawn or culled objects. */
+ copy_m4_m4(e_data.context.persmat, persmat);
+ e_data.context.objects_drawn_len = 0;
+ e_data.context.index_drawn_len = 1;
+ select_engine_framebuffer_setup();
+ GPU_framebuffer_bind(e_data.framebuffer_select_id);
+ GPU_framebuffer_clear_color_depth(e_data.framebuffer_select_id, (const float[4]){0.0f}, 1.0f);
+ }
+ e_data.runtime_new_objects = 0;
}
static void select_cache_populate(void *vedata, Object *ob)
{
+ SELECTID_StorageList *stl = ((SELECTID_Data *)vedata)->stl;
const DRWContextState *draw_ctx = DRW_context_state_get();
- short select_mode = e_data.context.select_mode;
- if (select_mode == -1) {
- ToolSettings *ts = draw_ctx->scene->toolsettings;
- select_mode = ts->selectmode;
- }
+ SELECTID_ObjectData *sel_data = (SELECTID_ObjectData *)DRW_drawdata_get(
+ &ob->id, &draw_engine_select_type);
- struct BaseOffset *base_ofs =
- &e_data.context.base_array_index_offsets[e_data.context.last_base_drawn++];
+ if (!e_data.context.is_dirty && sel_data && sel_data->is_drawn) {
+ /* The object indices have already been drawn. Fill depth pass.
+ * Opti: Most of the time this depth pass is not used. */
+ struct Mesh *me = ob->data;
+ if (e_data.context.select_mode & SCE_SELECT_FACE) {
+ struct GPUBatch *geom_faces = DRW_mesh_batch_cache_get_triangles_with_select_id(me);
+ DRW_shgroup_call_obmat(stl->g_data->shgrp_depth_only, geom_faces, ob->obmat);
+ }
+ else if (ob->dt >= OB_SOLID) {
+ struct GPUBatch *geom_faces = DRW_mesh_batch_cache_get_surface(me);
+ DRW_shgroup_call_obmat(stl->g_data->shgrp_depth_only, geom_faces, ob->obmat);
+ }
- uint offset = e_data.context.last_index_drawn;
+ if (e_data.context.select_mode & SCE_SELECT_EDGE) {
+ struct GPUBatch *geom_edges = DRW_mesh_batch_cache_get_edges_with_select_id(me);
+ DRW_shgroup_call_obmat(stl->g_data->shgrp_depth_only, geom_edges, ob->obmat);
+ }
- select_id_draw_object(vedata,
- draw_ctx->v3d,
- ob,
- select_mode,
- offset,
- &base_ofs->vert,
- &base_ofs->edge,
- &base_ofs->face);
+ if (e_data.context.select_mode & SCE_SELECT_VERTEX) {
+ struct GPUBatch *geom_verts = DRW_mesh_batch_cache_get_verts_with_select_id(me);
+ DRW_shgroup_call_obmat(stl->g_data->shgrp_depth_only, geom_verts, ob->obmat);
+ }
+ return;
+ }
- base_ofs->offset = offset;
- e_data.context.last_index_drawn = base_ofs->vert;
+ float min[3], max[3];
+ select_id_object_min_max(ob, min, max);
+
+ if (DRW_culling_min_max_test(stl->g_data->view_subregion, ob->obmat, min, max)) {
+ if (sel_data == NULL) {
+ sel_data = (SELECTID_ObjectData *)DRW_drawdata_ensure(
+ &ob->id, &draw_engine_select_type, sizeof(SELECTID_ObjectData), NULL, NULL);
+ }
+ sel_data->drawn_index = e_data.context.objects_drawn_len;
+ sel_data->is_drawn = true;
+
+ struct ObjectOffsets *ob_offsets =
+ &e_data.context.index_offsets[e_data.context.objects_drawn_len];
+
+ uint offset = e_data.context.index_drawn_len;
+ select_id_draw_object(vedata,
+ draw_ctx->v3d,
+ ob,
+ e_data.context.select_mode,
+ offset,
+ &ob_offsets->vert,
+ &ob_offsets->edge,
+ &ob_offsets->face);
+
+ ob_offsets->offset = offset;
+ e_data.context.index_drawn_len = ob_offsets->vert;
+ e_data.context.objects_drawn[e_data.context.objects_drawn_len] = ob;
+ e_data.context.objects_drawn_len++;
+ e_data.runtime_new_objects++;
+ }
+ else if (sel_data) {
+ sel_data->is_drawn = false;
+ }
}
static void select_draw_scene(void *vedata)
@@ -218,23 +308,37 @@ static void select_draw_scene(void *vedata)
SELECTID_StorageList *stl = ((SELECTID_Data *)vedata)->stl;
SELECTID_PassList *psl = ((SELECTID_Data *)vedata)->psl;
- /* Setup framebuffer */
- draw_select_framebuffer_select_id_setup();
- GPU_framebuffer_bind(e_data.framebuffer_select_id);
+ if (!e_data.runtime_new_objects) {
+ /* Nothing new needs to be drawn. */
+ return;
+ }
/* dithering and AA break color coding, so disable */
glDisable(GL_DITHER);
- GPU_framebuffer_clear_color_depth(e_data.framebuffer_select_id, (const float[4]){0.0f}, 1.0f);
-
DRW_view_set_active(stl->g_data->view_faces);
+
+ if (!DRW_pass_is_empty(psl->depth_only_pass)) {
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ GPU_framebuffer_bind(dfbl->depth_only_fb);
+ GPU_framebuffer_clear_depth(dfbl->depth_only_fb, 1.0f);
+ DRW_draw_pass(psl->depth_only_pass);
+ }
+
+ /* Setup framebuffer */
+ GPU_framebuffer_bind(e_data.framebuffer_select_id);
+
DRW_draw_pass(psl->select_id_face_pass);
- DRW_view_set_active(stl->g_data->view_edges);
- DRW_draw_pass(psl->select_id_edge_pass);
+ if (e_data.context.select_mode & SCE_SELECT_EDGE) {
+ DRW_view_set_active(stl->g_data->view_edges);
+ DRW_draw_pass(psl->select_id_edge_pass);
+ }
- DRW_view_set_active(stl->g_data->view_verts);
- DRW_draw_pass(psl->select_id_vert_pass);
+ if (e_data.context.select_mode & SCE_SELECT_VERTEX) {
+ DRW_view_set_active(stl->g_data->view_verts);
+ DRW_draw_pass(psl->select_id_vert_pass);
+ }
}
static void select_engine_free(void)
@@ -247,143 +351,9 @@ static void select_engine_free(void)
DRW_TEXTURE_FREE_SAFE(e_data.texture_u32);
GPU_FRAMEBUFFER_FREE_SAFE(e_data.framebuffer_select_id);
- MEM_SAFE_FREE(e_data.context.base_array_index_offsets);
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Exposed `DRW_engine.h` functions
- * \{ */
-
-bool DRW_select_elem_get(const uint sel_id, uint *r_elem, uint *r_base_index, char *r_elem_type)
-{
- char elem_type = 0;
- uint elem_id;
- uint base_index = 0;
-
- for (; base_index < e_data.context.bases_len; base_index++) {
- struct BaseOffset *base_ofs = &e_data.context.base_array_index_offsets[base_index];
-
- if (base_ofs->face > sel_id) {
- elem_id = sel_id - base_ofs->face_start;
- elem_type = SCE_SELECT_FACE;
- break;
- }
- if (base_ofs->edge > sel_id) {
- elem_id = sel_id - base_ofs->edge_start;
- elem_type = SCE_SELECT_EDGE;
- break;
- }
- if (base_ofs->vert > sel_id) {
- elem_id = sel_id - base_ofs->vert_start;
- elem_type = SCE_SELECT_VERTEX;
- break;
- }
- }
-
- if (base_index == e_data.context.bases_len) {
- return false;
- }
-
- *r_elem = elem_id;
-
- if (r_base_index) {
- *r_base_index = base_index;
- }
-
- if (r_elem_type) {
- *r_elem_type = elem_type;
- }
-
- return true;
-}
-
-uint DRW_select_context_offset_for_object_elem(const uint base_index, char elem_type)
-{
- struct BaseOffset *base_ofs = &e_data.context.base_array_index_offsets[base_index];
-
- if (elem_type == SCE_SELECT_VERTEX) {
- return base_ofs->vert_start - 1;
- }
- if (elem_type == SCE_SELECT_EDGE) {
- return base_ofs->edge_start - 1;
- }
- if (elem_type == SCE_SELECT_FACE) {
- return base_ofs->face_start - 1;
- }
- BLI_assert(0);
- return 0;
-}
-
-uint DRW_select_context_elem_len(void)
-{
- return e_data.context.last_index_drawn;
-}
-
-/* Read a block of pixels from the select frame buffer. */
-void DRW_framebuffer_select_id_read(const rcti *rect, uint *r_buf)
-{
- /* clamp rect by texture */
- rcti r = {
- .xmin = 0,
- .xmax = GPU_texture_width(e_data.texture_u32),
- .ymin = 0,
- .ymax = GPU_texture_height(e_data.texture_u32),
- };
-
- rcti rect_clamp = *rect;
- if (BLI_rcti_isect(&r, &rect_clamp, &rect_clamp)) {
- DRW_opengl_context_enable();
- GPU_framebuffer_bind(e_data.framebuffer_select_id);
- glReadBuffer(GL_COLOR_ATTACHMENT0);
- glReadPixels(rect_clamp.xmin,
- rect_clamp.ymin,
- BLI_rcti_size_x(&rect_clamp),
- BLI_rcti_size_y(&rect_clamp),
- GL_RED_INTEGER,
- GL_UNSIGNED_INT,
- r_buf);
-
- GPU_framebuffer_restore();
- DRW_opengl_context_disable();
-
- if (!BLI_rcti_compare(rect, &rect_clamp)) {
- GPU_select_buffer_stride_realign(rect, &rect_clamp, r_buf);
- }
- }
- else {
- size_t buf_size = BLI_rcti_size_x(rect) * BLI_rcti_size_y(rect) * sizeof(*r_buf);
-
- memset(r_buf, 0, buf_size);
- }
-}
-
-void DRW_select_context_create(Base **UNUSED(bases), const uint bases_len, short select_mode)
-{
- e_data.context.select_mode = select_mode;
- e_data.context.bases_len = bases_len;
-
- MEM_SAFE_FREE(e_data.context.base_array_index_offsets);
- e_data.context.base_array_index_offsets = MEM_mallocN(
- sizeof(*e_data.context.base_array_index_offsets) * bases_len, __func__);
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Legacy
- * \{ */
-
-void DRW_draw_select_id_object(Depsgraph *depsgraph,
- ViewLayer *view_layer,
- ARegion *ar,
- View3D *v3d,
- Object *ob,
- short select_mode)
-{
- Base *base = BKE_view_layer_base_find(view_layer, ob);
- DRW_draw_select_id(depsgraph, ar, v3d, &base, 1, select_mode);
+ MEM_SAFE_FREE(e_data.context.objects);
+ MEM_SAFE_FREE(e_data.context.index_offsets);
+ MEM_SAFE_FREE(e_data.context.objects_drawn);
}
/** \} */
@@ -432,4 +402,25 @@ RenderEngineType DRW_engine_viewport_select_type = {
/** \} */
+/* -------------------------------------------------------------------- */
+/** \name Exposed `select_private.h` functions
+ * \{ */
+
+struct SELECTID_Context *DRW_select_engine_context_get(void)
+{
+ return &e_data.context;
+}
+
+GPUFrameBuffer *DRW_engine_select_framebuffer_get(void)
+{
+ return e_data.framebuffer_select_id;
+}
+
+GPUTexture *DRW_engine_select_texture_get(void)
+{
+ return e_data.texture_u32;
+}
+
+/** \} */
+
#undef SELECT_ENGINE
diff --git a/source/blender/draw/engines/select/select_engine.h b/source/blender/draw/engines/select/select_engine.h
index 5b900ccaf27..79139d9deaf 100644
--- a/source/blender/draw/engines/select/select_engine.h
+++ b/source/blender/draw/engines/select/select_engine.h
@@ -26,4 +26,9 @@
extern DrawEngineType draw_engine_select_type;
extern RenderEngineType DRW_engine_viewport_select_type;
-#endif /* __SELECT_ID_ENGINE_H__ */
+struct SELECTID_Context *DRW_select_engine_context_get(void);
+
+struct GPUFrameBuffer *DRW_engine_select_framebuffer_get(void);
+struct GPUTexture *DRW_engine_select_texture_get(void);
+
+#endif /* __SELECT_ENGINE_H__ */
diff --git a/source/blender/draw/engines/select/select_private.h b/source/blender/draw/engines/select/select_private.h
index 9b0addb0fb8..642cd6ffc56 100644
--- a/source/blender/draw/engines/select/select_private.h
+++ b/source/blender/draw/engines/select/select_private.h
@@ -32,6 +32,7 @@ typedef struct SELECTID_StorageList {
} SELECTID_StorageList;
typedef struct SELECTID_PassList {
+ struct DRWPass *depth_only_pass;
struct DRWPass *select_id_face_pass;
struct DRWPass *select_id_edge_pass;
struct DRWPass *select_id_vert_pass;
@@ -52,33 +53,21 @@ typedef struct SELECTID_Shaders {
} SELECTID_Shaders;
typedef struct SELECTID_PrivateData {
+ DRWShadingGroup *shgrp_depth_only;
DRWShadingGroup *shgrp_face_unif;
DRWShadingGroup *shgrp_face_flat;
DRWShadingGroup *shgrp_edge;
DRWShadingGroup *shgrp_vert;
+ DRWView *view_subregion;
DRWView *view_faces;
DRWView *view_edges;
DRWView *view_verts;
} SELECTID_PrivateData; /* Transient data */
-struct BaseOffset {
- /* For convenience only. */
- union {
- uint offset;
- uint face_start;
- };
- union {
- uint face;
- uint edge_start;
- };
- union {
- uint edge;
- uint vert_start;
- };
- uint vert;
-};
-
+/* select_draw_utils.c */
+void select_id_object_min_max(struct Object *obj, float r_min[3], float r_max[3]);
+short select_id_get_object_select_mode(Scene *scene, Object *ob);
void select_id_draw_object(void *vedata,
View3D *v3d,
Object *ob,
diff --git a/source/blender/draw/engines/select/shaders/selection_id_frag.glsl b/source/blender/draw/engines/select/shaders/selection_id_frag.glsl
index ea86ddc7301..a84bbbb2cac 100644
--- a/source/blender/draw/engines/select/shaders/selection_id_frag.glsl
+++ b/source/blender/draw/engines/select/shaders/selection_id_frag.glsl
@@ -1,14 +1,15 @@
#ifdef UNIFORM_ID
uniform int id;
-# define id floatBitsToUint(intBitsToFloat(id))
+# define _id floatBitsToUint(intBitsToFloat(id))
#else
flat in uint id;
+# define _id id
#endif
out uint fragColor;
void main()
{
- fragColor = id;
+ fragColor = _id;
}
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index 735a0dcf7a0..add49462de1 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -475,7 +475,7 @@ void workbench_deferred_engine_init(WORKBENCH_Data *vedata)
const eGPUTextureFormat nor_tex_format = NORMAL_ENCODING_ENABLED() ? GPU_RG16 : GPU_RGBA32F;
const eGPUTextureFormat comp_tex_format = DRW_state_is_image_render() ? GPU_RGBA16F :
GPU_R11F_G11F_B10F;
- const eGPUTextureFormat col_tex_format = DRW_state_is_image_render() ? GPU_RGBA16F : GPU_RGBA8;
+ const eGPUTextureFormat col_tex_format = workbench_color_texture_format(wpd);
const eGPUTextureFormat id_tex_format = OBJECT_ID_PASS_ENABLED(wpd) ? GPU_R32UI : GPU_R8;
e_data.object_id_tx = NULL;
diff --git a/source/blender/draw/engines/workbench/workbench_effect_taa.c b/source/blender/draw/engines/workbench/workbench_effect_taa.c
index 88f1f30941a..06442060623 100644
--- a/source/blender/draw/engines/workbench/workbench_effect_taa.c
+++ b/source/blender/draw/engines/workbench/workbench_effect_taa.c
@@ -170,10 +170,10 @@ DRWPass *workbench_taa_create_pass(WORKBENCH_Data *vedata, GPUTexture **color_bu
WORKBENCH_TextureList *txl = vedata->txl;
WORKBENCH_EffectInfo *effect_info = stl->effects;
WORKBENCH_FramebufferList *fbl = vedata->fbl;
+ const WORKBENCH_PrivateData *wpd = stl->g_data;
{
- const eGPUTextureFormat hist_buffer_format = DRW_state_is_image_render() ? GPU_RGBA16F :
- GPU_RGBA8;
+ const eGPUTextureFormat hist_buffer_format = workbench_color_texture_format(wpd);
DRW_texture_ensure_fullscreen_2d(&txl->history_buffer_tx, hist_buffer_format, 0);
DRW_texture_ensure_fullscreen_2d(&txl->depth_buffer_tx, GPU_DEPTH24_STENCIL8, 0);
}
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index 17144c4dc10..255b036eebb 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -381,6 +381,30 @@ BLI_INLINE bool workbench_is_matdata_pass_enabled(WORKBENCH_PrivateData *wpd)
workbench_is_in_texture_paint_mode();
}
+/**
+ * Get the default texture format to be used by the color and history buffers.
+ *
+ * Use GPU_RGBA16F for final renderings and for drawing textures. This
+ * allows displaying HDRI textures. Vertex Colors uses GPU_RGBA16 to resolve
+ * color banding issues (T66100). All other modes use GPU_RGBA8 to reduce
+ * bandwidth and gpu memory.
+ */
+BLI_INLINE eGPUTextureFormat workbench_color_texture_format(const WORKBENCH_PrivateData *wpd)
+{
+ eGPUTextureFormat result;
+ if (DRW_state_is_image_render() || workbench_is_in_texture_paint_mode() ||
+ TEXTURE_DRAWING_ENABLED(wpd)) {
+ result = GPU_RGBA16F;
+ }
+ else if (VERTEX_COLORS_ENABLED(wpd)) {
+ result = GPU_RGBA16;
+ }
+ else {
+ result = GPU_RGBA8;
+ }
+ return result;
+}
+
/* workbench_deferred.c */
void workbench_deferred_engine_init(WORKBENCH_Data *vedata);
void workbench_deferred_engine_free(void);
diff --git a/source/blender/draw/engines/workbench/workbench_studiolight.c b/source/blender/draw/engines/workbench/workbench_studiolight.c
index 944bca73993..1a09498b228 100644
--- a/source/blender/draw/engines/workbench/workbench_studiolight.c
+++ b/source/blender/draw/engines/workbench/workbench_studiolight.c
@@ -82,8 +82,9 @@ void studiolight_update_world(WORKBENCH_PrivateData *wpd,
-sl->spherical_harmonics_coefs[3][i],
sl->spherical_harmonics_coefs[2][i],
-sl->spherical_harmonics_coefs[1][i]);
- mul_v3_fl(wd->spherical_harmonics_coefs[i + 1],
- M_1_PI * 1.5f); /* 1.5f is to improve the contrast a bit. */
+
+ /* 1.5f is to improve the contrast a bit. */
+ mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], M_1_PI * 1.5f);
}
/* Precompute as much as we can. See shader code for derivation. */
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index a8f67e10a4d..10ab7c13631 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -61,7 +61,6 @@
#include "DEG_depsgraph.h"
-struct DRWTextStore;
struct DefaultFramebufferList;
struct DefaultTextureList;
struct GPUBatch;
@@ -70,12 +69,9 @@ struct GPUMaterial;
struct GPUShader;
struct GPUTexture;
struct GPUUniformBuffer;
-struct LightEngineData;
struct Object;
struct ParticleSystem;
struct RenderEngineType;
-struct ViewportEngineData;
-struct ViewportEngineData_Info;
struct bContext;
struct rcti;
@@ -597,6 +593,7 @@ bool DRW_view_is_persp_get(const DRWView *view);
bool DRW_culling_sphere_test(const DRWView *view, const BoundSphere *bsphere);
bool DRW_culling_box_test(const DRWView *view, const BoundBox *bbox);
bool DRW_culling_plane_test(const DRWView *view, const float plane[4]);
+bool DRW_culling_min_max_test(const DRWView *view, float obmat[4][4], float min[3], float max[3]);
void DRW_culling_frustum_corners_get(const DRWView *view, BoundBox *corners);
void DRW_culling_frustum_planes_get(const DRWView *view, float planes[6][4]);
diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index 30e51333f0f..865cfea14e3 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -694,17 +694,17 @@ static bool set_pchan_color(short colCode,
uchar cp[4] = {255};
if (boneflag & BONE_DRAW_ACTIVE) {
- copy_v3_v3_char((char *)cp, bcolor->active);
+ copy_v3_v3_uchar(cp, bcolor->active);
if (!(boneflag & BONE_SELECTED)) {
cp_shade_color3ub(cp, -80);
}
}
else if (boneflag & BONE_SELECTED) {
- copy_v3_v3_char((char *)cp, bcolor->select);
+ copy_v3_v3_uchar(cp, bcolor->select);
}
else {
/* a bit darker than solid */
- copy_v3_v3_char((char *)cp, bcolor->solid);
+ copy_v3_v3_uchar(cp, bcolor->solid);
cp_shade_color3ub(cp, -50);
}
@@ -742,16 +742,16 @@ static bool set_pchan_color(short colCode,
if ((bcolor == NULL) || (bcolor->flag & TH_WIRECOLOR_CONSTCOLS)) {
uchar cp[4];
if (constflag & PCHAN_HAS_TARGET) {
- rgba_char_args_set((char *)cp, 255, 150, 0, 80);
+ rgba_uchar_args_set(cp, 255, 150, 0, 80);
}
else if (constflag & PCHAN_HAS_IK) {
- rgba_char_args_set((char *)cp, 255, 255, 0, 80);
+ rgba_uchar_args_set(cp, 255, 255, 0, 80);
}
else if (constflag & PCHAN_HAS_SPLINEIK) {
- rgba_char_args_set((char *)cp, 200, 255, 0, 80);
+ rgba_uchar_args_set(cp, 200, 255, 0, 80);
}
else if (constflag & PCHAN_HAS_CONST) {
- rgba_char_args_set((char *)cp, 0, 255, 120, 80);
+ rgba_uchar_args_set(cp, 0, 255, 120, 80);
}
else {
return false;
@@ -768,13 +768,13 @@ static bool set_pchan_color(short colCode,
uchar cp[4] = {255};
if (boneflag & BONE_DRAW_ACTIVE) {
- copy_v3_v3_char((char *)cp, bcolor->active);
+ copy_v3_v3_uchar(cp, bcolor->active);
}
else if (boneflag & BONE_SELECTED) {
- copy_v3_v3_char((char *)cp, bcolor->select);
+ copy_v3_v3_uchar(cp, bcolor->select);
}
else {
- copy_v3_v3_char((char *)cp, bcolor->solid);
+ copy_v3_v3_uchar(cp, bcolor->solid);
}
rgb_uchar_to_float(fcolor, cp);
@@ -798,15 +798,15 @@ static bool set_pchan_color(short colCode,
uchar cp[4] = {255};
if (boneflag & BONE_DRAW_ACTIVE) {
- copy_v3_v3_char((char *)cp, bcolor->active);
+ copy_v3_v3_uchar(cp, bcolor->active);
cp_shade_color3ub(cp, 10);
}
else if (boneflag & BONE_SELECTED) {
- copy_v3_v3_char((char *)cp, bcolor->select);
+ copy_v3_v3_uchar(cp, bcolor->select);
cp_shade_color3ub(cp, -30);
}
else {
- copy_v3_v3_char((char *)cp, bcolor->solid);
+ copy_v3_v3_uchar(cp, bcolor->solid);
cp_shade_color3ub(cp, -30);
}
@@ -830,16 +830,16 @@ static bool set_pchan_color(short colCode,
if ((constflag) && ((bcolor == NULL) || (bcolor->flag & TH_WIRECOLOR_CONSTCOLS))) {
uchar cp[4];
if (constflag & PCHAN_HAS_TARGET) {
- rgba_char_args_set((char *)cp, 255, 150, 0, 255);
+ rgba_uchar_args_set(cp, 255, 150, 0, 255);
}
else if (constflag & PCHAN_HAS_IK) {
- rgba_char_args_set((char *)cp, 255, 255, 0, 255);
+ rgba_uchar_args_set(cp, 255, 255, 0, 255);
}
else if (constflag & PCHAN_HAS_SPLINEIK) {
- rgba_char_args_set((char *)cp, 200, 255, 0, 255);
+ rgba_uchar_args_set(cp, 200, 255, 0, 255);
}
else if (constflag & PCHAN_HAS_CONST) {
- rgba_char_args_set((char *)cp, 0, 255, 120, 255);
+ rgba_uchar_args_set(cp, 0, 255, 120, 255);
}
else if (constflag) {
UI_GetThemeColor4ubv(TH_BONE_POSE, cp);
@@ -849,7 +849,7 @@ static bool set_pchan_color(short colCode,
}
else {
if (bcolor) {
- const char *cp = bcolor->solid;
+ const uchar *cp = bcolor->solid;
rgb_uchar_to_float(fcolor, (uchar *)cp);
fcolor[3] = 204.f / 255.f;
}
diff --git a/source/blender/draw/intern/draw_cache.c b/source/blender/draw/intern/draw_cache.c
index e2e98a2db5a..520932bc429 100644
--- a/source/blender/draw/intern/draw_cache.c
+++ b/source/blender/draw/intern/draw_cache.c
@@ -4001,7 +4001,7 @@ GPUBatch *DRW_cache_cursor_get(bool crosshair_lines)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Batch Cache Impl. common
+/** \name Batch Cache Implementation (common)
* \{ */
void drw_batch_cache_validate(Object *ob)
@@ -4033,7 +4033,7 @@ void drw_batch_cache_validate(Object *ob)
void drw_batch_cache_generate_requested(Object *ob)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
- const ToolSettings *ts = draw_ctx->scene->toolsettings;
+ const Scene *scene = draw_ctx->scene;
const enum eContextObjectMode mode = CTX_data_mode_enum_ex(
draw_ctx->object_edit, draw_ctx->obact, draw_ctx->object_mode);
const bool is_paint_mode = ELEM(
@@ -4047,13 +4047,13 @@ void drw_batch_cache_generate_requested(Object *ob)
struct Mesh *mesh_eval = ob->runtime.mesh_eval;
switch (ob->type) {
case OB_MESH:
- DRW_mesh_batch_cache_create_requested(ob, (Mesh *)ob->data, ts, is_paint_mode, use_hide);
+ DRW_mesh_batch_cache_create_requested(ob, (Mesh *)ob->data, scene, is_paint_mode, use_hide);
break;
case OB_CURVE:
case OB_FONT:
case OB_SURF:
if (mesh_eval) {
- DRW_mesh_batch_cache_create_requested(ob, mesh_eval, ts, is_paint_mode, use_hide);
+ DRW_mesh_batch_cache_create_requested(ob, mesh_eval, scene, is_paint_mode, use_hide);
}
DRW_curve_batch_cache_create_requested(ob);
break;
diff --git a/source/blender/draw/intern/draw_cache.h b/source/blender/draw/intern/draw_cache.h
index 129b180957a..273e97c6e49 100644
--- a/source/blender/draw/intern/draw_cache.h
+++ b/source/blender/draw/intern/draw_cache.h
@@ -28,6 +28,7 @@ struct GPUMaterial;
struct ModifierData;
struct Object;
struct PTCacheEdit;
+struct ParticleSystem;
void DRW_shape_cache_free(void);
void DRW_shape_cache_reset(void);
@@ -58,7 +59,7 @@ struct GPUBatch **DRW_cache_object_surface_material_get(struct Object *ob,
char **auto_layer_names,
int **auto_layer_is_srgb,
int *auto_layer_count);
-struct GPUBatch *DRW_cache_object_face_wireframe_get(Object *ob);
+struct GPUBatch *DRW_cache_object_face_wireframe_get(struct Object *ob);
/* Empties */
struct GPUBatch *DRW_cache_plain_axes_get(void);
@@ -152,7 +153,7 @@ struct GPUBatch **DRW_cache_curve_surface_shaded_get(struct Object *ob,
uint gpumat_array_len);
struct GPUBatch *DRW_cache_curve_loose_edges_get(struct Object *ob);
struct GPUBatch *DRW_cache_curve_edge_wire_get(struct Object *ob);
-struct GPUBatch *DRW_cache_curve_face_wireframe_get(Object *ob);
+struct GPUBatch *DRW_cache_curve_face_wireframe_get(struct Object *ob);
struct GPUBatch *DRW_cache_curve_edge_detection_get(struct Object *ob, bool *r_is_manifold);
/* edit-mode */
struct GPUBatch *DRW_cache_curve_edge_normal_get(struct Object *ob);
@@ -161,13 +162,13 @@ struct GPUBatch *DRW_cache_curve_vert_overlay_get(struct Object *ob, bool handle
/* Font */
struct GPUBatch *DRW_cache_text_surface_get(struct Object *ob);
-struct GPUBatch *DRW_cache_text_edge_detection_get(Object *ob, bool *r_is_manifold);
+struct GPUBatch *DRW_cache_text_edge_detection_get(struct Object *ob, bool *r_is_manifold);
struct GPUBatch *DRW_cache_text_loose_edges_get(struct Object *ob);
struct GPUBatch *DRW_cache_text_edge_wire_get(struct Object *ob);
struct GPUBatch **DRW_cache_text_surface_shaded_get(struct Object *ob,
struct GPUMaterial **gpumat_array,
uint gpumat_array_len);
-struct GPUBatch *DRW_cache_text_face_wireframe_get(Object *ob);
+struct GPUBatch *DRW_cache_text_face_wireframe_get(struct Object *ob);
/* Surface */
struct GPUBatch *DRW_cache_surf_surface_get(struct Object *ob);
@@ -176,7 +177,7 @@ struct GPUBatch *DRW_cache_surf_loose_edges_get(struct Object *ob);
struct GPUBatch **DRW_cache_surf_surface_shaded_get(struct Object *ob,
struct GPUMaterial **gpumat_array,
uint gpumat_array_len);
-struct GPUBatch *DRW_cache_surf_face_wireframe_get(Object *ob);
+struct GPUBatch *DRW_cache_surf_face_wireframe_get(struct Object *ob);
struct GPUBatch *DRW_cache_surf_edge_detection_get(struct Object *ob, bool *r_is_manifold);
/* Lattice */
@@ -206,7 +207,7 @@ struct GPUBatch *DRW_cache_mball_surface_get(struct Object *ob);
struct GPUBatch **DRW_cache_mball_surface_shaded_get(struct Object *ob,
struct GPUMaterial **gpumat_array,
uint gpumat_array_len);
-struct GPUBatch *DRW_cache_mball_face_wireframe_get(Object *ob);
+struct GPUBatch *DRW_cache_mball_face_wireframe_get(struct Object *ob);
struct GPUBatch *DRW_cache_mball_edge_detection_get(struct Object *ob, bool *r_is_manifold);
#endif /* __DRAW_CACHE_H__ */
diff --git a/source/blender/draw/intern/draw_cache_extract.h b/source/blender/draw/intern/draw_cache_extract.h
new file mode 100644
index 00000000000..9305dc6eef7
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_extract.h
@@ -0,0 +1,250 @@
+/*
+ * 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.
+ *
+ * Copyright 2019, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw
+ */
+
+#ifndef __DRAW_CACHE_EXTRACT_MESH_H__
+#define __DRAW_CACHE_EXTRACT_MESH_H__
+
+/* Vertex Group Selection and display options */
+typedef struct DRW_MeshWeightState {
+ int defgroup_active;
+ int defgroup_len;
+
+ short flags;
+ char alert_mode;
+
+ /* Set of all selected bones for Multipaint. */
+ bool *defgroup_sel; /* [defgroup_len] */
+ int defgroup_sel_count;
+} DRW_MeshWeightState;
+
+/* DRW_MeshWeightState.flags */
+enum {
+ DRW_MESH_WEIGHT_STATE_MULTIPAINT = (1 << 0),
+ DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE = (1 << 1),
+};
+
+typedef struct DRW_MeshCDMask {
+ uint32_t uv : 8;
+ uint32_t tan : 8;
+ uint32_t vcol : 8;
+ uint32_t orco : 1;
+ uint32_t tan_orco : 1;
+} DRW_MeshCDMask;
+
+typedef enum eMRIterType {
+ MR_ITER_LOOPTRI = 1 << 0,
+ MR_ITER_LOOP = 1 << 1,
+ MR_ITER_LEDGE = 1 << 2,
+ MR_ITER_LVERT = 1 << 3,
+} eMRIterType;
+
+typedef enum eMRDataType {
+ MR_DATA_POLY_NOR = 1 << 1,
+ MR_DATA_LOOP_NOR = 1 << 2,
+ MR_DATA_LOOPTRI = 1 << 3,
+ /** Force loop normals calculation. */
+ MR_DATA_TAN_LOOP_NOR = 1 << 4,
+} eMRDataType;
+
+typedef enum eMRExtractType {
+ MR_EXTRACT_BMESH,
+ MR_EXTRACT_MAPPED,
+ MR_EXTRACT_MESH,
+} eMRExtractType;
+
+BLI_INLINE int mesh_render_mat_len_get(Mesh *me)
+{
+ return MAX2(1, me->totcol);
+}
+
+typedef struct MeshBufferCache {
+ /* Every VBO below contains at least enough
+ * data for every loops in the mesh (except fdots).
+ * For some VBOs, it extends to (in this exact order) :
+ * loops + loose_edges*2 + loose_verts */
+ struct {
+ GPUVertBuf *pos_nor; /* extend */
+ GPUVertBuf *lnor; /* extend */
+ GPUVertBuf *edge_fac; /* extend */
+ GPUVertBuf *weights; /* extend */
+ GPUVertBuf *uv;
+ GPUVertBuf *tan;
+ GPUVertBuf *vcol;
+ GPUVertBuf *orco;
+ /* Only for edit mode. */
+ GPUVertBuf *edit_data; /* extend */
+ GPUVertBuf *edituv_data;
+ GPUVertBuf *stretch_area;
+ GPUVertBuf *stretch_angle;
+ GPUVertBuf *mesh_analysis;
+ GPUVertBuf *fdots_pos;
+ GPUVertBuf *fdots_nor;
+ GPUVertBuf *fdots_uv;
+ // GPUVertBuf *fdots_edit_data; /* inside fdots_nor for now. */
+ GPUVertBuf *fdots_edituv_data;
+ /* Selection */
+ GPUVertBuf *vert_idx; /* extend */
+ GPUVertBuf *edge_idx; /* extend */
+ GPUVertBuf *poly_idx;
+ GPUVertBuf *fdot_idx;
+ } vbo;
+ /* Index Buffers:
+ * Only need to be updated when topology changes. */
+ struct {
+ /* Indices to vloops. */
+ GPUIndexBuf *tris; /* Ordered per material. */
+ GPUIndexBuf *lines; /* Loose edges last. */
+ GPUIndexBuf *points;
+ GPUIndexBuf *fdots;
+ /* 3D overlays. */
+ GPUIndexBuf *lines_paint_mask; /* no loose edges. */
+ GPUIndexBuf *lines_adjacency;
+ /* Uv overlays. (visibility can differ from 3D view) */
+ GPUIndexBuf *edituv_tris;
+ GPUIndexBuf *edituv_lines;
+ GPUIndexBuf *edituv_points;
+ GPUIndexBuf *edituv_fdots;
+ } ibo;
+} MeshBufferCache;
+
+typedef enum DRWBatchFlag {
+ MBC_SURFACE = (1 << 0),
+ MBC_SURFACE_WEIGHTS = (1 << 1),
+ MBC_EDIT_TRIANGLES = (1 << 2),
+ MBC_EDIT_VERTICES = (1 << 3),
+ MBC_EDIT_EDGES = (1 << 4),
+ MBC_EDIT_VNOR = (1 << 5),
+ MBC_EDIT_LNOR = (1 << 6),
+ MBC_EDIT_FACEDOTS = (1 << 7),
+ MBC_EDIT_MESH_ANALYSIS = (1 << 8),
+ MBC_EDITUV_FACES_STRECH_AREA = (1 << 9),
+ MBC_EDITUV_FACES_STRECH_ANGLE = (1 << 10),
+ MBC_EDITUV_FACES = (1 << 11),
+ MBC_EDITUV_EDGES = (1 << 12),
+ MBC_EDITUV_VERTS = (1 << 13),
+ MBC_EDITUV_FACEDOTS = (1 << 14),
+ MBC_EDIT_SELECTION_VERTS = (1 << 15),
+ MBC_EDIT_SELECTION_EDGES = (1 << 16),
+ MBC_EDIT_SELECTION_FACES = (1 << 17),
+ MBC_EDIT_SELECTION_FACEDOTS = (1 << 18),
+ MBC_ALL_VERTS = (1 << 19),
+ MBC_ALL_EDGES = (1 << 20),
+ MBC_LOOSE_EDGES = (1 << 21),
+ MBC_EDGE_DETECTION = (1 << 22),
+ MBC_WIRE_EDGES = (1 << 23),
+ MBC_WIRE_LOOPS = (1 << 24),
+ MBC_WIRE_LOOPS_UVS = (1 << 25),
+ MBC_SURF_PER_MAT = (1 << 26),
+} DRWBatchFlag;
+
+#define MBC_EDITUV \
+ (MBC_EDITUV_FACES_STRECH_AREA | MBC_EDITUV_FACES_STRECH_ANGLE | MBC_EDITUV_FACES | \
+ MBC_EDITUV_EDGES | MBC_EDITUV_VERTS | MBC_EDITUV_FACEDOTS | MBC_WIRE_LOOPS_UVS)
+
+#define FOREACH_MESH_BUFFER_CACHE(batch_cache, mbc) \
+ for (MeshBufferCache *mbc = &batch_cache->final; \
+ mbc == &batch_cache->final || mbc == &batch_cache->cage || mbc == &batch_cache->uv_cage; \
+ mbc = (mbc == &batch_cache->final) ? \
+ &batch_cache->cage : \
+ ((mbc == &batch_cache->cage) ? &batch_cache->uv_cage : NULL))
+
+typedef struct MeshBatchCache {
+ MeshBufferCache final, cage, uv_cage;
+
+ struct {
+ /* Surfaces / Render */
+ GPUBatch *surface;
+ GPUBatch *surface_weights;
+ /* Edit mode */
+ GPUBatch *edit_triangles;
+ GPUBatch *edit_vertices;
+ GPUBatch *edit_edges;
+ GPUBatch *edit_vnor;
+ GPUBatch *edit_lnor;
+ GPUBatch *edit_fdots;
+ GPUBatch *edit_mesh_analysis;
+ /* Edit UVs */
+ GPUBatch *edituv_faces_strech_area;
+ GPUBatch *edituv_faces_strech_angle;
+ GPUBatch *edituv_faces;
+ GPUBatch *edituv_edges;
+ GPUBatch *edituv_verts;
+ GPUBatch *edituv_fdots;
+ /* Edit selection */
+ GPUBatch *edit_selection_verts;
+ GPUBatch *edit_selection_edges;
+ GPUBatch *edit_selection_faces;
+ GPUBatch *edit_selection_fdots;
+ /* Common display / Other */
+ GPUBatch *all_verts;
+ GPUBatch *all_edges;
+ GPUBatch *loose_edges;
+ GPUBatch *edge_detection;
+ GPUBatch *wire_edges; /* Individual edges with face normals. */
+ GPUBatch *wire_loops; /* Loops around faces. no edges between selected faces */
+ GPUBatch *wire_loops_uvs; /* Same as wire_loops but only has uvs. */
+ } batch;
+
+ GPUBatch **surface_per_mat;
+
+ /* arrays of bool uniform names (and value) that will be use to
+ * set srgb conversion for auto attributes.*/
+ char *auto_layer_names;
+ int *auto_layer_is_srgb;
+ int auto_layer_len;
+
+ DRWBatchFlag batch_requested;
+ DRWBatchFlag batch_ready;
+
+ /* settings to determine if cache is invalid */
+ int edge_len;
+ int tri_len;
+ int poly_len;
+ int vert_len;
+ int mat_len;
+ bool is_dirty; /* Instantly invalidates cache, skipping mesh check */
+ bool is_editmode;
+ bool is_uvsyncsel;
+
+ struct DRW_MeshWeightState weight_state;
+
+ DRW_MeshCDMask cd_used, cd_needed, cd_used_over_time;
+
+ int lastmatch;
+
+ /* Valid only if edge_detection is up to date. */
+ bool is_manifold;
+
+ bool no_loose_wire;
+} MeshBatchCache;
+
+void mesh_buffer_cache_create_requested(MeshBatchCache *cache,
+ MeshBufferCache mbc,
+ Mesh *me,
+ const bool do_final,
+ const bool do_uvedit,
+ const bool use_subsurf_fdots,
+ const DRW_MeshCDMask *cd_layer_used,
+ const ToolSettings *ts,
+ const bool use_hide);
+
+#endif /* __DRAW_CACHE_EXTRACT_MESH_H__ */
diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c b/source/blender/draw/intern/draw_cache_extract_mesh.c
new file mode 100644
index 00000000000..b0a0766eedb
--- /dev/null
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.c
@@ -0,0 +1,4398 @@
+/*
+ * 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) 2017 by Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup draw
+ *
+ * \brief Extraction of Mesh data into VBO to feed to GPU.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_bitmap.h"
+#include "BLI_buffer.h"
+#include "BLI_utildefines.h"
+#include "BLI_math_vector.h"
+#include "BLI_math_bits.h"
+#include "BLI_string.h"
+#include "BLI_alloca.h"
+#include "BLI_edgehash.h"
+#include "BLI_task.h"
+#include "BLI_jitter_2d.h"
+
+#include "DNA_mesh_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+
+#include "BKE_bvhutils.h"
+#include "BKE_customdata.h"
+#include "BKE_deform.h"
+#include "BKE_editmesh.h"
+#include "BKE_editmesh_cache.h"
+#include "BKE_editmesh_tangent.h"
+#include "BKE_editmesh_bvh.h"
+#include "BKE_mesh.h"
+#include "BKE_mesh_tangent.h"
+#include "BKE_mesh_runtime.h"
+#include "BKE_modifier.h"
+#include "BKE_object_deform.h"
+
+#include "atomic_ops.h"
+
+#include "bmesh.h"
+
+#include "GPU_batch.h"
+#include "GPU_extensions.h"
+#include "GPU_material.h"
+
+#include "DRW_render.h"
+
+#include "ED_mesh.h"
+#include "ED_uvedit.h"
+
+#include "draw_cache_inline.h"
+#include "draw_cache_impl.h"
+
+#include "draw_cache_extract.h"
+
+// #define DEBUG_TIME
+
+#ifdef DEBUG_TIME
+# include "PIL_time_utildefines.h"
+#endif
+
+/* ---------------------------------------------------------------------- */
+/** \name Mesh/BMesh Interface (indirect, partially cached access to complex data).
+ * \{ */
+
+typedef struct MeshRenderData {
+ eMRExtractType extract_type;
+
+ int poly_len, edge_len, vert_len, loop_len;
+ int edge_loose_len;
+ int vert_loose_len;
+ int loop_loose_len;
+ int tri_len;
+ int mat_len;
+
+ bool use_hide;
+ bool use_subsurf_fdots;
+ bool use_final_mesh;
+
+ const ToolSettings *toolsettings;
+ /* HACK not supposed to be there but it's needed. */
+ struct MeshBatchCache *cache;
+ /** Edit Mesh */
+ BMEditMesh *edit_bmesh;
+ BMesh *bm;
+ EditMeshData *edit_data;
+ int *v_origindex, *e_origindex, *p_origindex;
+ int crease_ofs;
+ int bweight_ofs;
+ int freestyle_edge_ofs;
+ int freestyle_face_ofs;
+ /** Mesh */
+ Mesh *me;
+ const MVert *mvert;
+ const MEdge *medge;
+ const MLoop *mloop;
+ const MPoly *mpoly;
+ BMVert *eve_act;
+ BMEdge *eed_act;
+ BMFace *efa_act;
+ BMFace *efa_act_uv;
+ /* Data created on-demand (usually not for bmesh-based data). */
+ MLoopTri *mlooptri;
+ float (*loop_normals)[3];
+ float (*poly_normals)[3];
+ int *lverts, *ledges;
+} MeshRenderData;
+
+static MeshRenderData *mesh_render_data_create(Mesh *me,
+ const bool do_final,
+ const bool do_uvedit,
+ const eMRIterType iter_type,
+ const eMRDataType data_flag,
+ const DRW_MeshCDMask *UNUSED(cd_used),
+ const ToolSettings *ts)
+{
+ MeshRenderData *mr = MEM_callocN(sizeof(*mr), __func__);
+ mr->toolsettings = ts;
+ mr->mat_len = mesh_render_mat_len_get(me);
+
+ const bool is_auto_smooth = (me->flag & ME_AUTOSMOOTH) != 0;
+ const float split_angle = is_auto_smooth ? me->smoothresh : (float)M_PI;
+
+ if (me->edit_mesh) {
+ BLI_assert(me->edit_mesh->mesh_eval_cage && me->edit_mesh->mesh_eval_final);
+ mr->bm = me->edit_mesh->bm;
+ mr->edit_bmesh = me->edit_mesh;
+ mr->edit_data = me->runtime.edit_data;
+ mr->me = (do_final) ? me->edit_mesh->mesh_eval_final : me->edit_mesh->mesh_eval_cage;
+ bool use_mapped = !do_uvedit && mr->me && !mr->me->runtime.is_original;
+
+ int bm_ensure_types = BM_VERT | BM_EDGE | BM_LOOP | BM_FACE;
+
+ BM_mesh_elem_index_ensure(mr->bm, bm_ensure_types);
+ BM_mesh_elem_table_ensure(mr->bm, bm_ensure_types & ~BM_LOOP);
+
+ mr->efa_act_uv = EDBM_uv_active_face_get(mr->edit_bmesh, false, false);
+ mr->efa_act = BM_mesh_active_face_get(mr->bm, false, true);
+ mr->eed_act = BM_mesh_active_edge_get(mr->bm);
+ mr->eve_act = BM_mesh_active_vert_get(mr->bm);
+
+ mr->crease_ofs = CustomData_get_offset(&mr->bm->edata, CD_CREASE);
+ mr->bweight_ofs = CustomData_get_offset(&mr->bm->edata, CD_BWEIGHT);
+#ifdef WITH_FREESTYLE
+ mr->freestyle_edge_ofs = CustomData_get_offset(&mr->bm->edata, CD_FREESTYLE_EDGE);
+ mr->freestyle_face_ofs = CustomData_get_offset(&mr->bm->pdata, CD_FREESTYLE_FACE);
+#endif
+
+ if (use_mapped) {
+ mr->v_origindex = CustomData_get_layer(&mr->me->vdata, CD_ORIGINDEX);
+ mr->e_origindex = CustomData_get_layer(&mr->me->edata, CD_ORIGINDEX);
+ mr->p_origindex = CustomData_get_layer(&mr->me->pdata, CD_ORIGINDEX);
+
+ use_mapped = (mr->v_origindex || mr->e_origindex || mr->p_origindex);
+ }
+
+ mr->extract_type = use_mapped ? MR_EXTRACT_MAPPED : MR_EXTRACT_BMESH;
+
+ /* Seems like the mesh_eval_final do not have the right origin indices.
+ * Force not mapped in this case. */
+ if (do_final && me->edit_mesh->mesh_eval_final != me->edit_mesh->mesh_eval_cage) {
+ // mr->edit_bmesh = NULL;
+ mr->extract_type = MR_EXTRACT_MESH;
+ }
+ }
+ else {
+ mr->me = me;
+ mr->edit_bmesh = NULL;
+ mr->extract_type = MR_EXTRACT_MESH;
+ }
+
+ if (mr->extract_type != MR_EXTRACT_BMESH) {
+ /* Mesh */
+ mr->vert_len = mr->me->totvert;
+ mr->edge_len = mr->me->totedge;
+ mr->loop_len = mr->me->totloop;
+ mr->poly_len = mr->me->totpoly;
+ mr->tri_len = poly_to_tri_count(mr->poly_len, mr->loop_len);
+
+ mr->mvert = CustomData_get_layer(&mr->me->vdata, CD_MVERT);
+ mr->medge = CustomData_get_layer(&mr->me->edata, CD_MEDGE);
+ mr->mloop = CustomData_get_layer(&mr->me->ldata, CD_MLOOP);
+ mr->mpoly = CustomData_get_layer(&mr->me->pdata, CD_MPOLY);
+
+ mr->v_origindex = CustomData_get_layer(&mr->me->vdata, CD_ORIGINDEX);
+ mr->e_origindex = CustomData_get_layer(&mr->me->edata, CD_ORIGINDEX);
+ mr->p_origindex = CustomData_get_layer(&mr->me->pdata, CD_ORIGINDEX);
+
+ if (data_flag & (MR_DATA_POLY_NOR | MR_DATA_LOOP_NOR | MR_DATA_TAN_LOOP_NOR)) {
+ mr->poly_normals = MEM_mallocN(sizeof(*mr->poly_normals) * mr->poly_len, __func__);
+ BKE_mesh_calc_normals_poly((MVert *)mr->mvert,
+ NULL,
+ mr->vert_len,
+ mr->mloop,
+ mr->mpoly,
+ mr->loop_len,
+ mr->poly_len,
+ mr->poly_normals,
+ true);
+ }
+ if (((data_flag & MR_DATA_LOOP_NOR) && is_auto_smooth) || (data_flag & MR_DATA_TAN_LOOP_NOR)) {
+ mr->loop_normals = MEM_mallocN(sizeof(*mr->loop_normals) * mr->loop_len, __func__);
+ short(*clnors)[2] = CustomData_get_layer(&mr->me->ldata, CD_CUSTOMLOOPNORMAL);
+ BKE_mesh_normals_loop_split(mr->me->mvert,
+ mr->vert_len,
+ mr->me->medge,
+ mr->edge_len,
+ mr->me->mloop,
+ mr->loop_normals,
+ mr->loop_len,
+ mr->me->mpoly,
+ mr->poly_normals,
+ mr->poly_len,
+ is_auto_smooth,
+ split_angle,
+ NULL,
+ clnors,
+ NULL);
+ }
+ if ((iter_type & MR_ITER_LOOPTRI) || (data_flag & MR_DATA_LOOPTRI)) {
+ mr->mlooptri = MEM_mallocN(sizeof(*mr->mlooptri) * mr->tri_len, "MR_DATATYPE_LOOPTRI");
+ BKE_mesh_recalc_looptri(mr->me->mloop,
+ mr->me->mpoly,
+ mr->me->mvert,
+ mr->me->totloop,
+ mr->me->totpoly,
+ mr->mlooptri);
+ }
+ if (iter_type & (MR_ITER_LEDGE | MR_ITER_LVERT)) {
+ mr->vert_loose_len = 0;
+ mr->edge_loose_len = 0;
+
+ BLI_bitmap *lvert_map = BLI_BITMAP_NEW(mr->vert_len, "lvert map");
+
+ mr->ledges = MEM_mallocN(mr->edge_len * sizeof(int), __func__);
+ const MEdge *medge = mr->medge;
+ for (int e = 0; e < mr->edge_len; e++, medge++) {
+ if (medge->flag & ME_LOOSEEDGE) {
+ mr->ledges[mr->edge_loose_len++] = e;
+ }
+ /* Tag verts as not loose. */
+ BLI_BITMAP_ENABLE(lvert_map, medge->v1);
+ BLI_BITMAP_ENABLE(lvert_map, medge->v2);
+ }
+ if (mr->edge_loose_len < mr->edge_len) {
+ mr->ledges = MEM_reallocN(mr->ledges, mr->edge_loose_len * sizeof(*mr->ledges));
+ }
+
+ mr->lverts = MEM_mallocN(mr->vert_len * sizeof(*mr->lverts), __func__);
+ for (int v = 0; v < mr->vert_len; v++) {
+ if (!BLI_BITMAP_TEST(lvert_map, v)) {
+ mr->lverts[mr->vert_loose_len++] = v;
+ }
+ }
+ if (mr->vert_loose_len < mr->vert_len) {
+ mr->lverts = MEM_reallocN(mr->lverts, mr->vert_loose_len * sizeof(*mr->lverts));
+ }
+
+ MEM_freeN(lvert_map);
+
+ mr->loop_loose_len = mr->vert_loose_len + mr->edge_loose_len * 2;
+ }
+ }
+ else {
+ /* BMesh */
+ BMesh *bm = mr->bm;
+
+ mr->vert_len = bm->totvert;
+ mr->edge_len = bm->totedge;
+ mr->loop_len = bm->totloop;
+ mr->poly_len = bm->totface;
+ mr->tri_len = poly_to_tri_count(mr->poly_len, mr->loop_len);
+
+ if (data_flag & MR_DATA_POLY_NOR) {
+ /* Use bmface->no instead. */
+ }
+ if (((data_flag & MR_DATA_LOOP_NOR) && is_auto_smooth) || (data_flag & MR_DATA_TAN_LOOP_NOR)) {
+ mr->loop_normals = MEM_mallocN(sizeof(*mr->loop_normals) * mr->loop_len, __func__);
+ int clnors_offset = CustomData_get_offset(&mr->bm->ldata, CD_CUSTOMLOOPNORMAL);
+ BM_loops_calc_normal_vcos(mr->bm,
+ NULL,
+ NULL,
+ NULL,
+ is_auto_smooth,
+ split_angle,
+ mr->loop_normals,
+ NULL,
+ NULL,
+ clnors_offset,
+ false);
+ }
+ if ((iter_type & MR_ITER_LOOPTRI) || (data_flag & MR_DATA_LOOPTRI)) {
+ /* Edit mode ensures this is valid, no need to calculate. */
+ BLI_assert((bm->totloop == 0) || (mr->edit_bmesh->looptris != NULL));
+ }
+ if (iter_type & (MR_ITER_LEDGE | MR_ITER_LVERT)) {
+ int elem_id;
+ BMIter iter;
+ BMVert *eve;
+ BMEdge *ede;
+ mr->vert_loose_len = 0;
+ mr->edge_loose_len = 0;
+
+ mr->lverts = MEM_mallocN(mr->vert_len * sizeof(*mr->lverts), __func__);
+ BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, elem_id) {
+ if (eve->e == NULL) {
+ mr->lverts[mr->vert_loose_len++] = elem_id;
+ }
+ }
+ if (mr->vert_loose_len < mr->vert_len) {
+ mr->lverts = MEM_reallocN(mr->lverts, mr->vert_loose_len * sizeof(*mr->lverts));
+ }
+
+ mr->ledges = MEM_mallocN(mr->edge_len * sizeof(*mr->ledges), __func__);
+ BM_ITER_MESH_INDEX (ede, &iter, bm, BM_EDGES_OF_MESH, elem_id) {
+ if (ede->l == NULL) {
+ mr->ledges[mr->edge_loose_len++] = elem_id;
+ }
+ }
+ if (mr->edge_loose_len < mr->edge_len) {
+ mr->ledges = MEM_reallocN(mr->ledges, mr->edge_loose_len * sizeof(*mr->ledges));
+ }
+
+ mr->loop_loose_len = mr->vert_loose_len + mr->edge_loose_len * 2;
+ }
+ }
+ return mr;
+}
+
+static void mesh_render_data_free(MeshRenderData *mr)
+{
+ MEM_SAFE_FREE(mr->mlooptri);
+ MEM_SAFE_FREE(mr->poly_normals);
+ MEM_SAFE_FREE(mr->loop_normals);
+
+ MEM_SAFE_FREE(mr->lverts);
+ MEM_SAFE_FREE(mr->ledges);
+
+ MEM_freeN(mr);
+}
+
+BLI_INLINE BMFace *bm_original_face_get(const MeshRenderData *mr, int idx)
+{
+ return ((mr->p_origindex != NULL) && (mr->p_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ?
+ BM_face_at_index(mr->bm, mr->p_origindex[idx]) :
+ NULL;
+}
+
+BLI_INLINE BMEdge *bm_original_edge_get(const MeshRenderData *mr, int idx)
+{
+ return ((mr->e_origindex != NULL) && (mr->e_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ?
+ BM_edge_at_index(mr->bm, mr->e_origindex[idx]) :
+ NULL;
+}
+
+BLI_INLINE BMVert *bm_original_vert_get(const MeshRenderData *mr, int idx)
+{
+ return ((mr->v_origindex != NULL) && (mr->v_origindex[idx] != ORIGINDEX_NONE) && mr->bm) ?
+ BM_vert_at_index(mr->bm, mr->v_origindex[idx]) :
+ NULL;
+}
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Mesh Elements Extract Iter
+ * \{ */
+
+typedef void *(ExtractInitFn)(const MeshRenderData *mr, void *buffer);
+typedef void(ExtractEditTriFn)(const MeshRenderData *mr, int t, BMLoop **e, void *data);
+typedef void(ExtractEditLoopFn)(const MeshRenderData *mr, int l, BMLoop *el, void *data);
+typedef void(ExtractEditLedgeFn)(const MeshRenderData *mr, int e, BMEdge *ed, void *data);
+typedef void(ExtractEditLvertFn)(const MeshRenderData *mr, int v, BMVert *ev, void *data);
+typedef void(ExtractTriFn)(const MeshRenderData *mr, int t, const MLoopTri *mlt, void *data);
+typedef void(ExtractLoopFn)(
+ const MeshRenderData *mr, int l, const MLoop *mloop, int p, const MPoly *mpoly, void *data);
+typedef void(ExtractLedgeFn)(const MeshRenderData *mr, int e, const MEdge *medge, void *data);
+typedef void(ExtractLvertFn)(const MeshRenderData *mr, int v, const MVert *mvert, void *data);
+typedef void(ExtractFinishFn)(const MeshRenderData *mr, void *buffer, void *data);
+
+typedef struct MeshExtract {
+ /** Executed on main thread and return user data for iter functions. */
+ ExtractInitFn *init;
+ /** Executed on one (or more if use_threading) worker thread(s). */
+ ExtractEditTriFn *iter_looptri_bm;
+ ExtractTriFn *iter_looptri;
+ ExtractEditLoopFn *iter_loop_bm;
+ ExtractLoopFn *iter_loop;
+ ExtractEditLedgeFn *iter_ledge_bm;
+ ExtractLedgeFn *iter_ledge;
+ ExtractEditLvertFn *iter_lvert_bm;
+ ExtractLvertFn *iter_lvert;
+ /** Executed on one worker thread after all elements iterations. */
+ ExtractFinishFn *finish;
+ /** Used to request common data. */
+ const eMRDataType data_flag;
+ /** Used to know if the element callbacks are threadsafe and can be parallelized. */
+ const bool use_threading;
+} MeshExtract;
+
+BLI_INLINE eMRIterType mesh_extract_iter_type(const MeshExtract *ext)
+{
+ eMRIterType type = 0;
+ SET_FLAG_FROM_TEST(type, (ext->iter_looptri_bm || ext->iter_looptri), MR_ITER_LOOPTRI);
+ SET_FLAG_FROM_TEST(type, (ext->iter_loop_bm || ext->iter_loop), MR_ITER_LOOP);
+ SET_FLAG_FROM_TEST(type, (ext->iter_ledge_bm || ext->iter_ledge), MR_ITER_LEDGE);
+ SET_FLAG_FROM_TEST(type, (ext->iter_lvert_bm || ext->iter_lvert), MR_ITER_LVERT);
+ return type;
+}
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Triangles Indices
+ * \{ */
+
+typedef struct MeshExtract_Tri_Data {
+ GPUIndexBufBuilder elb;
+ int *tri_mat_start;
+ int *tri_mat_end;
+} MeshExtract_Tri_Data;
+
+static void *extract_tris_init(const MeshRenderData *mr, void *UNUSED(ibo))
+{
+ MeshExtract_Tri_Data *data = MEM_callocN(sizeof(*data), __func__);
+
+ size_t mat_tri_idx_size = sizeof(int) * mr->mat_len;
+ data->tri_mat_start = MEM_callocN(mat_tri_idx_size, __func__);
+ data->tri_mat_end = MEM_callocN(mat_tri_idx_size, __func__);
+
+ int *mat_tri_len = data->tri_mat_start;
+ /* Count how many triangle for each material. */
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMIter iter;
+ BMFace *efa;
+ BM_ITER_MESH (efa, &iter, mr->bm, BM_FACES_OF_MESH) {
+ if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
+ int mat = min_ii(efa->mat_nr, mr->mat_len - 1);
+ mat_tri_len[mat] += efa->len - 2;
+ }
+ }
+ }
+ else {
+ const MPoly *mpoly = mr->mpoly;
+ for (int p = 0; p < mr->poly_len; p++, mpoly++) {
+ if (!(mr->use_hide && (mpoly->flag & ME_HIDE))) {
+ int mat = min_ii(mpoly->mat_nr, mr->mat_len - 1);
+ mat_tri_len[mat] += mpoly->totloop - 2;
+ }
+ }
+ }
+ /* Accumulate tri len per mat to have correct offsets. */
+ int ofs = mat_tri_len[0];
+ mat_tri_len[0] = 0;
+ for (int i = 1; i < mr->mat_len; i++) {
+ int tmp = mat_tri_len[i];
+ mat_tri_len[i] = ofs;
+ ofs += tmp;
+ }
+
+ memcpy(data->tri_mat_end, mat_tri_len, mat_tri_idx_size);
+
+ int visible_tri_tot = ofs;
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_TRIS, visible_tri_tot, mr->loop_len);
+
+ return data;
+}
+
+static void extract_tris_looptri_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(t),
+ BMLoop **elt,
+ void *_data)
+{
+ if (!BM_elem_flag_test(elt[0]->f, BM_ELEM_HIDDEN)) {
+ MeshExtract_Tri_Data *data = _data;
+ int *mat_tri_ofs = data->tri_mat_end;
+ GPU_indexbuf_set_tri_verts(&data->elb,
+ mat_tri_ofs[elt[0]->f->mat_nr]++,
+ BM_elem_index_get(elt[0]),
+ BM_elem_index_get(elt[1]),
+ BM_elem_index_get(elt[2]));
+ }
+}
+
+static void extract_tris_looptri_mesh(const MeshRenderData *mr,
+ int UNUSED(t),
+ const MLoopTri *mlt,
+ void *_data)
+{
+ const MPoly *mpoly = &mr->mpoly[mlt->poly];
+ if (!(mr->use_hide && (mpoly->flag & ME_HIDE))) {
+ MeshExtract_Tri_Data *data = _data;
+ int *mat_tri_ofs = data->tri_mat_end;
+ int mat = min_ii(mpoly->mat_nr, mr->mat_len - 1);
+ GPU_indexbuf_set_tri_verts(
+ &data->elb, mat_tri_ofs[mat]++, mlt->tri[0], mlt->tri[1], mlt->tri[2]);
+ }
+}
+
+static void extract_tris_finish(const MeshRenderData *mr, void *ibo, void *_data)
+{
+ MeshExtract_Tri_Data *data = _data;
+ GPU_indexbuf_build_in_place(&data->elb, ibo);
+ /* HACK Create ibo subranges and assign them to each GPUBatch. */
+ if (mr->use_final_mesh && mr->cache->surface_per_mat && mr->cache->surface_per_mat[0]) {
+ BLI_assert(mr->cache->surface_per_mat[0]->elem == ibo);
+ for (int i = 0; i < mr->mat_len; ++i) {
+ /* Multiply by 3 because these are triangle indices. */
+ int start = data->tri_mat_start[i] * 3;
+ int len = data->tri_mat_end[i] * 3 - data->tri_mat_start[i] * 3;
+ GPUIndexBuf *sub_ibo = GPU_indexbuf_create_subrange(ibo, start, len);
+ /* WARNING: We modify the GPUBatch here! */
+ GPU_batch_elembuf_set(mr->cache->surface_per_mat[i], sub_ibo, true);
+ }
+ }
+ MEM_freeN(data->tri_mat_start);
+ MEM_freeN(data->tri_mat_end);
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_tris = {
+ extract_tris_init,
+ extract_tris_looptri_bmesh,
+ extract_tris_looptri_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_tris_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edges Indices
+ * \{ */
+
+static void *extract_lines_init(const MeshRenderData *mr, void *UNUSED(buf))
+{
+ GPUIndexBufBuilder *elb = MEM_mallocN(sizeof(*elb), __func__);
+ /* Put loose edges at the end. */
+ GPU_indexbuf_init(
+ elb, GPU_PRIM_LINES, mr->edge_len + mr->edge_loose_len, mr->loop_len + mr->loop_loose_len);
+ return elb;
+}
+
+static void extract_lines_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *elb)
+{
+ if (!BM_elem_flag_test(loop->e, BM_ELEM_HIDDEN)) {
+ GPU_indexbuf_set_line_verts(elb, BM_elem_index_get(loop->e), l, BM_elem_index_get(loop->next));
+ }
+ else {
+ GPU_indexbuf_set_line_restart(elb, BM_elem_index_get(loop->e));
+ }
+}
+
+static void extract_lines_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *mpoly,
+ void *elb)
+{
+ const MEdge *medge = &mr->medge[mloop->e];
+ if (!((mr->use_hide && (medge->flag & ME_HIDE)) ||
+ ((mr->extract_type == MR_EXTRACT_MAPPED) &&
+ (mr->e_origindex[mloop->e] == ORIGINDEX_NONE)))) {
+ int loopend = mpoly->totloop + mpoly->loopstart - 1;
+ int other_loop = (l == loopend) ? mpoly->loopstart : (l + 1);
+ GPU_indexbuf_set_line_verts(elb, mloop->e, l, other_loop);
+ }
+ else {
+ GPU_indexbuf_set_line_restart(elb, mloop->e);
+ }
+}
+
+static void extract_lines_ledge_bmesh(const MeshRenderData *mr, int e, BMEdge *eed, void *elb)
+{
+ int ledge_idx = mr->edge_len + e;
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ int l = mr->loop_len + e * 2;
+ GPU_indexbuf_set_line_verts(elb, ledge_idx, l, l + 1);
+ }
+ else {
+ GPU_indexbuf_set_line_restart(elb, ledge_idx);
+ }
+ /* Don't render the edge twice. */
+ GPU_indexbuf_set_line_restart(elb, BM_elem_index_get(eed));
+}
+
+static void extract_lines_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *medge,
+ void *elb)
+{
+ int ledge_idx = mr->edge_len + e;
+ int edge_idx = mr->ledges[e];
+ if (!((mr->use_hide && (medge->flag & ME_HIDE)) ||
+ ((mr->extract_type == MR_EXTRACT_MAPPED) &&
+ (mr->e_origindex[edge_idx] == ORIGINDEX_NONE)))) {
+ int l = mr->loop_len + e * 2;
+ GPU_indexbuf_set_line_verts(elb, ledge_idx, l, l + 1);
+ }
+ else {
+ GPU_indexbuf_set_line_restart(elb, ledge_idx);
+ }
+ /* Don't render the edge twice. */
+ GPU_indexbuf_set_line_restart(elb, edge_idx);
+}
+
+static void extract_lines_finish(const MeshRenderData *mr, void *ibo, void *elb)
+{
+ GPU_indexbuf_build_in_place(elb, ibo);
+ MEM_freeN(elb);
+ /* HACK Create ibo subranges and assign them to GPUBatch. */
+ if (mr->use_final_mesh && mr->cache->batch.loose_edges) {
+ BLI_assert(mr->cache->batch.loose_edges->elem == ibo);
+ /* Multiply by 2 because these are edges indices. */
+ int start = mr->edge_len * 2;
+ int len = mr->edge_loose_len * 2;
+ GPUIndexBuf *sub_ibo = GPU_indexbuf_create_subrange(ibo, start, len);
+ /* WARNING: We modify the GPUBatch here! */
+ GPU_batch_elembuf_set(mr->cache->batch.loose_edges, sub_ibo, true);
+ }
+}
+
+static const MeshExtract extract_lines = {
+ extract_lines_init,
+ NULL,
+ NULL,
+ extract_lines_loop_bmesh,
+ extract_lines_loop_mesh,
+ extract_lines_ledge_bmesh,
+ extract_lines_ledge_mesh,
+ NULL,
+ NULL,
+ extract_lines_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Point Indices
+ * \{ */
+
+static void *extract_points_init(const MeshRenderData *mr, void *UNUSED(buf))
+{
+ GPUIndexBufBuilder *elb = MEM_mallocN(sizeof(*elb), __func__);
+ GPU_indexbuf_init(elb, GPU_PRIM_POINTS, mr->vert_len, mr->loop_len + mr->loop_loose_len);
+ return elb;
+}
+
+BLI_INLINE void vert_set_bmesh(GPUIndexBufBuilder *elb, BMVert *eve, int loop)
+{
+ int vert_idx = BM_elem_index_get(eve);
+ if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
+ GPU_indexbuf_set_point_vert(elb, vert_idx, loop);
+ }
+ else {
+ GPU_indexbuf_set_point_restart(elb, vert_idx);
+ }
+}
+
+BLI_INLINE void vert_set_mesh(GPUIndexBufBuilder *elb,
+ const MeshRenderData *mr,
+ int vert_idx,
+ int loop)
+{
+ const MVert *mvert = &mr->mvert[vert_idx];
+ if (!((mr->use_hide && (mvert->flag & ME_HIDE)) ||
+ ((mr->extract_type == MR_EXTRACT_MAPPED) &&
+ (mr->v_origindex[vert_idx] == ORIGINDEX_NONE)))) {
+ GPU_indexbuf_set_point_vert(elb, vert_idx, loop);
+ }
+ else {
+ GPU_indexbuf_set_point_restart(elb, vert_idx);
+ }
+}
+
+static void extract_points_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *elb)
+{
+ vert_set_bmesh(elb, loop->v, l);
+}
+
+static void extract_points_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *UNUSED(mpoly),
+ void *elb)
+{
+ vert_set_mesh(elb, mr, mloop->v, l);
+}
+
+static void extract_points_ledge_bmesh(const MeshRenderData *mr, int e, BMEdge *eed, void *elb)
+{
+ vert_set_bmesh(elb, eed->v1, mr->loop_len + e * 2);
+ vert_set_bmesh(elb, eed->v2, mr->loop_len + e * 2 + 1);
+}
+
+static void extract_points_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *medge,
+ void *elb)
+{
+ vert_set_mesh(elb, mr, medge->v1, mr->loop_len + e * 2);
+ vert_set_mesh(elb, mr, medge->v2, mr->loop_len + e * 2 + 1);
+}
+
+static void extract_points_lvert_bmesh(const MeshRenderData *mr, int v, BMVert *eve, void *elb)
+{
+ vert_set_bmesh(elb, eve, mr->loop_len + mr->edge_loose_len * 2 + v);
+}
+
+static void extract_points_lvert_mesh(const MeshRenderData *mr,
+ int v,
+ const MVert *UNUSED(mvert),
+ void *elb)
+{
+ vert_set_mesh(elb, mr, mr->lverts[v], mr->loop_len + mr->edge_loose_len * 2 + v);
+}
+
+static void extract_points_finish(const MeshRenderData *UNUSED(mr), void *ibo, void *elb)
+{
+ GPU_indexbuf_build_in_place(elb, ibo);
+ MEM_freeN(elb);
+}
+
+static const MeshExtract extract_points = {
+ extract_points_init,
+ NULL,
+ NULL,
+ extract_points_loop_bmesh,
+ extract_points_loop_mesh,
+ extract_points_ledge_bmesh,
+ extract_points_ledge_mesh,
+ extract_points_lvert_bmesh,
+ extract_points_lvert_mesh,
+ extract_points_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Facedots Indices
+ * \{ */
+
+static void *extract_fdots_init(const MeshRenderData *mr, void *UNUSED(buf))
+{
+ GPUIndexBufBuilder *elb = MEM_mallocN(sizeof(*elb), __func__);
+ GPU_indexbuf_init(elb, GPU_PRIM_POINTS, mr->poly_len, mr->poly_len);
+ return elb;
+}
+
+static void extract_fdots_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(l),
+ BMLoop *loop,
+ void *elb)
+{
+ int face_idx = BM_elem_index_get(loop->f);
+ if (!BM_elem_flag_test(loop->f, BM_ELEM_HIDDEN)) {
+ GPU_indexbuf_set_point_vert(elb, face_idx, face_idx);
+ }
+ else {
+ GPU_indexbuf_set_point_restart(elb, face_idx);
+ }
+}
+
+static void extract_fdots_loop_mesh(const MeshRenderData *mr,
+ int UNUSED(l),
+ const MLoop *mloop,
+ int p,
+ const MPoly *mpoly,
+ void *elb)
+{
+ const MVert *mvert = &mr->mvert[mloop->v];
+ if ((!mr->use_subsurf_fdots || (mvert->flag & ME_VERT_FACEDOT)) &&
+ !(mr->use_hide && (mpoly->flag & ME_HIDE))) {
+ GPU_indexbuf_set_point_vert(elb, p, p);
+ }
+ else {
+ GPU_indexbuf_set_point_restart(elb, p);
+ }
+}
+
+static void extract_fdots_finish(const MeshRenderData *UNUSED(mr), void *ibo, void *elb)
+{
+ GPU_indexbuf_build_in_place(elb, ibo);
+ MEM_freeN(elb);
+}
+
+static const MeshExtract extract_fdots = {
+ extract_fdots_init,
+ NULL,
+ NULL,
+ extract_fdots_loop_bmesh,
+ extract_fdots_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_fdots_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Paint Mask Line Indices
+ * \{ */
+
+typedef struct MeshExtract_LinePaintMask_Data {
+ GPUIndexBufBuilder elb;
+ /** One bit per edge set if face is selected. */
+ BLI_bitmap select_map[0];
+} MeshExtract_LinePaintMask_Data;
+
+static void *extract_lines_paint_mask_init(const MeshRenderData *mr, void *UNUSED(buf))
+{
+ size_t bitmap_size = BLI_BITMAP_SIZE(mr->edge_len);
+ MeshExtract_LinePaintMask_Data *data = MEM_callocN(sizeof(*data) + bitmap_size, __func__);
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES, mr->edge_len, mr->loop_len);
+ return data;
+}
+
+static void extract_lines_paint_mask_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *mpoly,
+ void *_data)
+{
+ MeshExtract_LinePaintMask_Data *data = (MeshExtract_LinePaintMask_Data *)_data;
+ if (!(mr->use_hide && (mpoly->flag & ME_HIDE))) {
+ int loopend = mpoly->totloop + mpoly->loopstart - 1;
+ int other_loop = (l == loopend) ? mpoly->loopstart : (l + 1);
+ int edge_idx = mloop->e;
+ if (mpoly->flag & ME_FACE_SEL) {
+ if (BLI_BITMAP_TEST_AND_SET_ATOMIC(data->select_map, edge_idx)) {
+ /* Hide edge as it has more than 2 selected loop. */
+ GPU_indexbuf_set_line_restart(&data->elb, edge_idx);
+ }
+ else {
+ /* First selected loop. Set edge visible, overwritting any unsel loop. */
+ GPU_indexbuf_set_line_verts(&data->elb, edge_idx, l, other_loop);
+ }
+ }
+ else {
+ /* Set theses unselected loop only if this edge has no other selected loop. */
+ if (!BLI_BITMAP_TEST(data->select_map, edge_idx)) {
+ GPU_indexbuf_set_line_verts(&data->elb, edge_idx, l, other_loop);
+ }
+ }
+ }
+}
+static void extract_lines_paint_mask_finish(const MeshRenderData *UNUSED(mr),
+ void *ibo,
+ void *_data)
+{
+ MeshExtract_LinePaintMask_Data *data = (MeshExtract_LinePaintMask_Data *)_data;
+
+ GPU_indexbuf_build_in_place(&data->elb, ibo);
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_lines_paint_mask = {
+ extract_lines_paint_mask_init,
+ NULL,
+ NULL,
+ NULL,
+ extract_lines_paint_mask_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_lines_paint_mask_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Line Adjacency Indices
+ * \{ */
+
+#define NO_EDGE INT_MAX
+
+typedef struct MeshExtract_LineAdjacency_Data {
+ GPUIndexBufBuilder elb;
+ EdgeHash *eh;
+ bool is_manifold;
+ /* Array to convert vert index to any loop index of this vert. */
+ uint vert_to_loop[0];
+} MeshExtract_LineAdjacency_Data;
+
+static void *extract_lines_adjacency_init(const MeshRenderData *mr, void *UNUSED(buf))
+{
+ /* Similar to poly_to_tri_count().
+ * There is always loop + tri - 1 edges inside a polygon.
+ * Accumulate for all polys and you get : */
+ uint tess_edge_len = mr->loop_len + mr->tri_len - mr->poly_len;
+
+ size_t vert_to_loop_size = sizeof(uint) * mr->vert_len;
+
+ MeshExtract_LineAdjacency_Data *data = MEM_callocN(sizeof(*data) + vert_to_loop_size, __func__);
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES_ADJ, tess_edge_len, mr->loop_len);
+ data->eh = BLI_edgehash_new_ex(__func__, tess_edge_len);
+ data->is_manifold = true;
+ return data;
+}
+
+BLI_INLINE void lines_adjacency_triangle(
+ uint v1, uint v2, uint v3, uint l1, uint l2, uint l3, MeshExtract_LineAdjacency_Data *data)
+{
+ GPUIndexBufBuilder *elb = &data->elb;
+ /* Iter around the triangle's edges. */
+ for (int e = 0; e < 3; e++) {
+ uint tmp = v1;
+ v1 = v2, v2 = v3, v3 = tmp;
+ tmp = l1;
+ l1 = l2, l2 = l3, l3 = tmp;
+
+ bool inv_indices = (v2 > v3);
+ void **pval;
+ bool value_is_init = BLI_edgehash_ensure_p(data->eh, v2, v3, &pval);
+ int v_data = POINTER_AS_INT(*pval);
+ if (!value_is_init || v_data == NO_EDGE) {
+ /* Save the winding order inside the sign bit. Because the
+ * edgehash sort the keys and we need to compare winding later. */
+ int value = (int)l1 + 1; /* 0 cannot be signed so add one. */
+ *pval = POINTER_FROM_INT((inv_indices) ? -value : value);
+ /* Store loop indices for remaining non-manifold edges. */
+ data->vert_to_loop[v2] = l2;
+ data->vert_to_loop[v3] = l3;
+ }
+ else {
+ /* HACK Tag as not used. Prevent overhead of BLI_edgehash_remove. */
+ *pval = POINTER_FROM_INT(NO_EDGE);
+ bool inv_opposite = (v_data < 0);
+ uint l_opposite = (uint)abs(v_data) - 1;
+ /* TODO Make this part threadsafe. */
+ if (inv_opposite == inv_indices) {
+ /* Don't share edge if triangles have non matching winding. */
+ GPU_indexbuf_add_line_adj_verts(elb, l1, l2, l3, l1);
+ GPU_indexbuf_add_line_adj_verts(elb, l_opposite, l2, l3, l_opposite);
+ data->is_manifold = false;
+ }
+ else {
+ GPU_indexbuf_add_line_adj_verts(elb, l1, l2, l3, l_opposite);
+ }
+ }
+ }
+}
+
+static void extract_lines_adjacency_looptri_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(t),
+ BMLoop **elt,
+ void *data)
+{
+ if (!BM_elem_flag_test(elt[0]->f, BM_ELEM_HIDDEN)) {
+ lines_adjacency_triangle(BM_elem_index_get(elt[0]->v),
+ BM_elem_index_get(elt[1]->v),
+ BM_elem_index_get(elt[2]->v),
+ BM_elem_index_get(elt[0]),
+ BM_elem_index_get(elt[1]),
+ BM_elem_index_get(elt[2]),
+ data);
+ }
+}
+
+static void extract_lines_adjacency_looptri_mesh(const MeshRenderData *mr,
+ int UNUSED(t),
+ const MLoopTri *mlt,
+ void *data)
+{
+ const MPoly *mpoly = &mr->mpoly[mlt->poly];
+ if (!(mpoly->flag & ME_HIDE)) {
+ lines_adjacency_triangle(mr->mloop[mlt->tri[0]].v,
+ mr->mloop[mlt->tri[1]].v,
+ mr->mloop[mlt->tri[2]].v,
+ mlt->tri[0],
+ mlt->tri[1],
+ mlt->tri[2],
+ data);
+ }
+}
+
+static void extract_lines_adjacency_finish(const MeshRenderData *mr, void *ibo, void *_data)
+{
+ MeshExtract_LineAdjacency_Data *data = (MeshExtract_LineAdjacency_Data *)_data;
+ /* Create edges for remaining non manifold edges. */
+ EdgeHashIterator *ehi = BLI_edgehashIterator_new(data->eh);
+ for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
+ uint v2, v3, l1, l2, l3;
+ int v_data = POINTER_AS_INT(BLI_edgehashIterator_getValue(ehi));
+ if (v_data != NO_EDGE) {
+ BLI_edgehashIterator_getKey(ehi, &v2, &v3);
+ l1 = (uint)abs(v_data) - 1;
+ if (v_data < 0) { /* inv_opposite */
+ SWAP(uint, v2, v3);
+ }
+ l2 = data->vert_to_loop[v2];
+ l3 = data->vert_to_loop[v3];
+ GPU_indexbuf_add_line_adj_verts(&data->elb, l1, l2, l3, l1);
+ data->is_manifold = false;
+ }
+ }
+ BLI_edgehashIterator_free(ehi);
+ BLI_edgehash_free(data->eh, NULL);
+
+ mr->cache->is_manifold = data->is_manifold;
+
+ GPU_indexbuf_build_in_place(&data->elb, ibo);
+ MEM_freeN(data);
+}
+
+#undef NO_EDGE
+
+static const MeshExtract extract_lines_adjacency = {
+ extract_lines_adjacency_init,
+ extract_lines_adjacency_looptri_bmesh,
+ extract_lines_adjacency_looptri_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_lines_adjacency_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV Triangles Indices
+ * \{ */
+
+typedef struct MeshExtract_EditUvElem_Data {
+ GPUIndexBufBuilder elb;
+ bool sync_selection;
+} MeshExtract_EditUvElem_Data;
+
+static void *extract_edituv_tris_init(const MeshRenderData *mr, void *UNUSED(ibo))
+{
+ MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_TRIS, mr->tri_len, mr->loop_len);
+ data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
+ return data;
+}
+
+BLI_INLINE void edituv_tri_add(
+ MeshExtract_EditUvElem_Data *data, bool hidden, bool selected, int v1, int v2, int v3)
+{
+ if (!hidden && (data->sync_selection || selected)) {
+ GPU_indexbuf_add_tri_verts(&data->elb, v1, v2, v3);
+ }
+}
+
+static void extract_edituv_tris_looptri_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(t),
+ BMLoop **elt,
+ void *data)
+{
+ edituv_tri_add(data,
+ BM_elem_flag_test(elt[0]->f, BM_ELEM_HIDDEN),
+ BM_elem_flag_test(elt[0]->f, BM_ELEM_SELECT),
+ BM_elem_index_get(elt[0]),
+ BM_elem_index_get(elt[1]),
+ BM_elem_index_get(elt[2]));
+}
+
+static void extract_edituv_tris_looptri_mesh(const MeshRenderData *mr,
+ int UNUSED(t),
+ const MLoopTri *mlt,
+ void *data)
+{
+ const MPoly *mpoly = &mr->mpoly[mlt->poly];
+ edituv_tri_add(data,
+ (mpoly->flag & ME_HIDE) != 0,
+ (mpoly->flag & ME_FACE_SEL) != 0,
+ mlt->tri[0],
+ mlt->tri[1],
+ mlt->tri[2]);
+}
+
+static void extract_edituv_tris_finish(const MeshRenderData *UNUSED(mr), void *ibo, void *data)
+{
+ MeshExtract_EditUvElem_Data *extract_data = (MeshExtract_EditUvElem_Data *)data;
+ GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
+ MEM_freeN(extract_data);
+}
+
+static const MeshExtract extract_edituv_tris = {
+ extract_edituv_tris_init,
+ extract_edituv_tris_looptri_bmesh,
+ extract_edituv_tris_looptri_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_edituv_tris_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV Line Indices around faces
+ * \{ */
+
+static void *extract_edituv_lines_init(const MeshRenderData *mr, void *UNUSED(ibo))
+{
+ MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_LINES, mr->loop_len, mr->loop_len);
+
+ data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
+ return data;
+}
+
+BLI_INLINE void edituv_edge_add(
+ MeshExtract_EditUvElem_Data *data, bool hidden, bool selected, int v1, int v2)
+{
+ if (!hidden && (data->sync_selection || selected)) {
+ GPU_indexbuf_add_line_verts(&data->elb, v1, v2);
+ }
+}
+
+static void extract_edituv_lines_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *data)
+{
+ edituv_edge_add(data,
+ BM_elem_flag_test(loop->f, BM_ELEM_HIDDEN),
+ BM_elem_flag_test(loop->f, BM_ELEM_SELECT),
+ l,
+ BM_elem_index_get(loop->next));
+}
+
+static void extract_edituv_lines_loop_mesh(const MeshRenderData *mr,
+ int loop_idx,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *mpoly,
+ void *data)
+{
+ int loopend = mpoly->totloop + mpoly->loopstart - 1;
+ int loop_next_idx = (loop_idx == loopend) ? mpoly->loopstart : (loop_idx + 1);
+ const bool real_edge = (mr->extract_type == MR_EXTRACT_MAPPED &&
+ mr->e_origindex[mloop->e] != ORIGINDEX_NONE);
+ edituv_edge_add(data,
+ (mpoly->flag & ME_HIDE) != 0 || !real_edge,
+ (mpoly->flag & ME_FACE_SEL) != 0,
+ loop_idx,
+ loop_next_idx);
+}
+
+static void extract_edituv_lines_finish(const MeshRenderData *UNUSED(mr), void *ibo, void *data)
+{
+ MeshExtract_EditUvElem_Data *extract_data = (MeshExtract_EditUvElem_Data *)data;
+ GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
+ MEM_freeN(extract_data);
+}
+
+static const MeshExtract extract_edituv_lines = {
+ extract_edituv_lines_init,
+ NULL,
+ NULL,
+ extract_edituv_lines_loop_bmesh,
+ extract_edituv_lines_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_edituv_lines_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV Points Indices
+ * \{ */
+
+static void *extract_edituv_points_init(const MeshRenderData *mr, void *UNUSED(ibo))
+{
+ MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->loop_len, mr->loop_len);
+
+ data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
+ return data;
+}
+
+BLI_INLINE void edituv_point_add(MeshExtract_EditUvElem_Data *data,
+ bool hidden,
+ bool selected,
+ int v1)
+{
+ if (!hidden && (data->sync_selection || selected)) {
+ GPU_indexbuf_add_point_vert(&data->elb, v1);
+ }
+}
+
+static void extract_edituv_points_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *data)
+{
+ edituv_point_add(data,
+ BM_elem_flag_test(loop->f, BM_ELEM_HIDDEN),
+ BM_elem_flag_test(loop->f, BM_ELEM_SELECT),
+ l);
+}
+
+static void extract_edituv_points_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *mpoly,
+ void *data)
+{
+ const bool real_vert = (mr->extract_type == MR_EXTRACT_MAPPED &&
+ mr->v_origindex[mloop->v] != ORIGINDEX_NONE);
+ edituv_point_add(
+ data, ((mpoly->flag & ME_HIDE) != 0) || !real_vert, (mpoly->flag & ME_FACE_SEL) != 0, l);
+}
+
+static void extract_edituv_points_finish(const MeshRenderData *UNUSED(mr), void *ibo, void *data)
+{
+ MeshExtract_EditUvElem_Data *extract_data = (MeshExtract_EditUvElem_Data *)data;
+ GPU_indexbuf_build_in_place(&extract_data->elb, ibo);
+ MEM_freeN(extract_data);
+}
+
+static const MeshExtract extract_edituv_points = {
+ extract_edituv_points_init,
+ NULL,
+ NULL,
+ extract_edituv_points_loop_bmesh,
+ extract_edituv_points_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_edituv_points_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV Facedots Indices
+ * \{ */
+
+static void *extract_edituv_fdots_init(const MeshRenderData *mr, void *UNUSED(ibo))
+{
+ MeshExtract_EditUvElem_Data *data = MEM_callocN(sizeof(*data), __func__);
+ GPU_indexbuf_init(&data->elb, GPU_PRIM_POINTS, mr->poly_len, mr->poly_len);
+
+ data->sync_selection = (mr->toolsettings->uv_flag & UV_SYNC_SELECTION) != 0;
+ return data;
+}
+
+BLI_INLINE void edituv_facedot_add(MeshExtract_EditUvElem_Data *data,
+ bool hidden,
+ bool selected,
+ int face_idx)
+{
+ if (!hidden && (data->sync_selection || selected)) {
+ GPU_indexbuf_set_point_vert(&data->elb, face_idx, face_idx);
+ }
+ else {
+ GPU_indexbuf_set_point_restart(&data->elb, face_idx);
+ }
+}
+
+static void extract_edituv_fdots_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(l),
+ BMLoop *loop,
+ void *data)
+{
+ edituv_facedot_add(data,
+ BM_elem_flag_test(loop->f, BM_ELEM_HIDDEN),
+ BM_elem_flag_test(loop->f, BM_ELEM_SELECT),
+ BM_elem_index_get(loop->f));
+}
+
+static void extract_edituv_fdots_loop_mesh(const MeshRenderData *mr,
+ int UNUSED(l),
+ const MLoop *mloop,
+ int p,
+ const MPoly *mpoly,
+ void *data)
+{
+ const bool real_fdot = (mr->extract_type == MR_EXTRACT_MAPPED &&
+ mr->p_origindex[p] != ORIGINDEX_NONE);
+ const bool subd_fdot = (!mr->use_subsurf_fdots ||
+ (mr->mvert[mloop->v].flag & ME_VERT_FACEDOT) != 0);
+ edituv_facedot_add(data,
+ ((mpoly->flag & ME_HIDE) != 0) || !real_fdot || !subd_fdot,
+ (mpoly->flag & ME_FACE_SEL) != 0,
+ p);
+}
+
+static void extract_edituv_fdots_finish(const MeshRenderData *UNUSED(mr), void *ibo, void *_data)
+{
+ MeshExtract_EditUvElem_Data *data = (MeshExtract_EditUvElem_Data *)_data;
+ GPU_indexbuf_build_in_place(&data->elb, ibo);
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_edituv_fdots = {
+ extract_edituv_fdots_init,
+ NULL,
+ NULL,
+ extract_edituv_fdots_loop_bmesh,
+ extract_edituv_fdots_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_edituv_fdots_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Position and Vertex Normal
+ * \{ */
+
+typedef struct PosNorLoop {
+ float pos[3];
+ GPUPackedNormal nor;
+} PosNorLoop;
+
+typedef struct MeshExtract_PosNor_Data {
+ PosNorLoop *vbo_data;
+ GPUPackedNormal packed_nor[];
+} MeshExtract_PosNor_Data;
+
+static void *extract_pos_nor_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* WARNING Adjust PosNorLoop struct accordingly. */
+ GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ GPU_vertformat_alias_add(&format, "vnor");
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
+
+ /* Pack normals per vert, reduce amount of computation. */
+ size_t packed_nor_len = sizeof(GPUPackedNormal) * mr->vert_len;
+ MeshExtract_PosNor_Data *data = MEM_mallocN(sizeof(*data) + packed_nor_len, __func__);
+ data->vbo_data = (PosNorLoop *)vbo->data;
+
+ /* Quicker than doing it for each loop. */
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMIter iter;
+ BMVert *eve;
+ int v;
+ BM_ITER_MESH_INDEX (eve, &iter, mr->bm, BM_VERTS_OF_MESH, v) {
+ data->packed_nor[v] = GPU_normal_convert_i10_v3(eve->no);
+ }
+ }
+ else {
+ const MVert *mvert = mr->mvert;
+ for (int v = 0; v < mr->vert_len; v++, mvert++) {
+ data->packed_nor[v] = GPU_normal_convert_i10_s3(mvert->no);
+ }
+ }
+ return data;
+}
+
+static void extract_pos_nor_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_PosNor_Data *data = _data;
+ PosNorLoop *vert = data->vbo_data + l;
+ copy_v3_v3(vert->pos, loop->v->co);
+ vert->nor = data->packed_nor[BM_elem_index_get(loop->v)];
+}
+
+static void extract_pos_nor_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *mpoly,
+ void *_data)
+{
+ MeshExtract_PosNor_Data *data = _data;
+ PosNorLoop *vert = data->vbo_data + l;
+ const MVert *mvert = &mr->mvert[mloop->v];
+ copy_v3_v3(vert->pos, mvert->co);
+ vert->nor = data->packed_nor[mloop->v];
+ /* Flag for paint mode overlay. */
+ if (mpoly->flag & ME_HIDE)
+ vert->nor.w = -1;
+ else if (mpoly->flag & ME_FACE_SEL)
+ vert->nor.w = 1;
+ else
+ vert->nor.w = 0;
+}
+
+static void extract_pos_nor_ledge_bmesh(const MeshRenderData *mr, int e, BMEdge *eed, void *_data)
+{
+ int l = mr->loop_len + e * 2;
+ MeshExtract_PosNor_Data *data = _data;
+ PosNorLoop *vert = data->vbo_data + l;
+ copy_v3_v3(vert[0].pos, eed->v1->co);
+ copy_v3_v3(vert[1].pos, eed->v2->co);
+ vert[0].nor = data->packed_nor[BM_elem_index_get(eed->v1)];
+ vert[1].nor = data->packed_nor[BM_elem_index_get(eed->v2)];
+}
+
+static void extract_pos_nor_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *medge,
+ void *_data)
+{
+ int l = mr->loop_len + e * 2;
+ MeshExtract_PosNor_Data *data = _data;
+ PosNorLoop *vert = data->vbo_data + l;
+ copy_v3_v3(vert[0].pos, mr->mvert[medge->v1].co);
+ copy_v3_v3(vert[1].pos, mr->mvert[medge->v2].co);
+ vert[0].nor = data->packed_nor[medge->v1];
+ vert[1].nor = data->packed_nor[medge->v2];
+}
+
+static void extract_pos_nor_lvert_bmesh(const MeshRenderData *mr, int v, BMVert *eve, void *_data)
+{
+ int l = mr->loop_len + mr->edge_loose_len * 2 + v;
+ MeshExtract_PosNor_Data *data = _data;
+ PosNorLoop *vert = data->vbo_data + l;
+ copy_v3_v3(vert->pos, eve->co);
+ vert->nor = data->packed_nor[BM_elem_index_get(eve)];
+}
+
+static void extract_pos_nor_lvert_mesh(const MeshRenderData *mr,
+ int v,
+ const MVert *mvert,
+ void *_data)
+{
+ int l = mr->loop_len + mr->edge_loose_len * 2 + v;
+ int v_idx = mr->lverts[v];
+ MeshExtract_PosNor_Data *data = _data;
+ PosNorLoop *vert = data->vbo_data + l;
+ copy_v3_v3(vert->pos, mvert->co);
+ vert->nor = data->packed_nor[v_idx];
+}
+
+static void extract_pos_nor_finish(const MeshRenderData *UNUSED(mr), void *UNUSED(vbo), void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_pos_nor = {
+ extract_pos_nor_init,
+ NULL,
+ NULL,
+ extract_pos_nor_loop_bmesh,
+ extract_pos_nor_loop_mesh,
+ extract_pos_nor_ledge_bmesh,
+ extract_pos_nor_ledge_mesh,
+ extract_pos_nor_lvert_bmesh,
+ extract_pos_nor_lvert_mesh,
+ extract_pos_nor_finish,
+ 0,
+ true,
+};
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Loop Normal
+ * \{ */
+
+static void *extract_lnor_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "nor", GPU_COMP_I10, 3, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ GPU_vertformat_alias_add(&format, "lnor");
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ return vbo->data;
+}
+
+static void extract_lnor_loop_bmesh(const MeshRenderData *mr, int l, BMLoop *loop, void *data)
+{
+ if (mr->loop_normals) {
+ ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_v3(mr->loop_normals[l]);
+ }
+ else if (BM_elem_flag_test(loop->f, BM_ELEM_SMOOTH)) {
+ ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_v3(loop->v->no);
+ }
+ else {
+ ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_v3(loop->f->no);
+ }
+}
+
+static void extract_lnor_loop_mesh(
+ const MeshRenderData *mr, int l, const MLoop *mloop, int p, const MPoly *mpoly, void *data)
+{
+ if (mr->loop_normals) {
+ ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_v3(mr->loop_normals[l]);
+ }
+ else if (mpoly->flag & ME_SMOOTH) {
+ ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_s3(mr->mvert[mloop->v].no);
+ }
+ else {
+ ((GPUPackedNormal *)data)[l] = GPU_normal_convert_i10_v3(mr->poly_normals[p]);
+ }
+}
+
+static const MeshExtract extract_lnor = {
+ extract_lnor_init,
+ NULL,
+ NULL,
+ extract_lnor_loop_bmesh,
+ extract_lnor_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ MR_DATA_LOOP_NOR,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract UV layers
+ * \{ */
+
+static void *extract_uv_init(const MeshRenderData *mr, void *buf)
+{
+ GPUVertFormat format = {0};
+ GPU_vertformat_deinterleave(&format);
+
+ CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata;
+ uint32_t uv_layers = mr->cache->cd_used.uv;
+
+ for (int i = 0; i < MAX_MTFACE; i++) {
+ if (uv_layers & (1 << i)) {
+ char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i);
+
+ GPU_vertformat_safe_attrib_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
+ /* UV layer name. */
+ BLI_snprintf(attr_name, sizeof(attr_name), "u%s", attr_safe_name);
+ GPU_vertformat_attr_add(&format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ /* Auto layer name. */
+ BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
+ GPU_vertformat_alias_add(&format, attr_name);
+ /* Active render layer name. */
+ if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPUV)) {
+ GPU_vertformat_alias_add(&format, "u");
+ }
+ /* Active display layer name. */
+ if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) {
+ GPU_vertformat_alias_add(&format, "au");
+ /* Alias to pos for edit uvs. */
+ GPU_vertformat_alias_add(&format, "pos");
+ }
+ /* Stencil mask uv layer name. */
+ if (i == CustomData_get_stencil_layer(cd_ldata, CD_MLOOPUV)) {
+ GPU_vertformat_alias_add(&format, "mu");
+ }
+ }
+ }
+
+ int v_len = mr->loop_len;
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "dummy", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ /* VBO will not be used, only allocate minimum of memory. */
+ v_len = 1;
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, v_len);
+
+ float(*uv_data)[2] = (float(*)[2])vbo->data;
+ for (int i = 0; i < MAX_MTFACE; i++) {
+ if (uv_layers & (1 << i)) {
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ int cd_ofs = CustomData_get_n_offset(cd_ldata, CD_MLOOPUV, i);
+ BMIter f_iter, l_iter;
+ BMFace *efa;
+ BMLoop *loop;
+ BM_ITER_MESH (efa, &f_iter, mr->bm, BM_FACES_OF_MESH) {
+ BM_ITER_ELEM (loop, &l_iter, efa, BM_LOOPS_OF_FACE) {
+ MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(loop, cd_ofs);
+ memcpy(uv_data, luv->uv, sizeof(*uv_data));
+ uv_data++;
+ }
+ }
+ }
+ else {
+ MLoopUV *layer_data = CustomData_get_layer_n(cd_ldata, CD_MLOOPUV, i);
+ for (int l = 0; l < mr->loop_len; l++, uv_data++, layer_data++) {
+ memcpy(uv_data, layer_data->uv, sizeof(*uv_data));
+ }
+ }
+ }
+ }
+
+ return NULL;
+}
+
+static const MeshExtract extract_uv = {
+ extract_uv_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Tangent layers
+ * \{ */
+
+static void *extract_tan_init(const MeshRenderData *mr, void *buf)
+{
+ GPUVertFormat format = {0};
+ GPU_vertformat_deinterleave(&format);
+
+ CustomData *cd_ldata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->ldata : &mr->me->ldata;
+ CustomData *cd_vdata = (mr->extract_type == MR_EXTRACT_BMESH) ? &mr->bm->vdata : &mr->me->vdata;
+ uint32_t tan_layers = mr->cache->cd_used.tan;
+ float(*orco)[3] = CustomData_get_layer(cd_vdata, CD_ORCO);
+ bool orco_allocated = false;
+ const bool use_orco_tan = mr->cache->cd_used.tan_orco != 0;
+
+ int tan_len = 0;
+ char tangent_names[MAX_MTFACE][MAX_CUSTOMDATA_LAYER_NAME];
+
+ for (int i = 0; i < MAX_MTFACE; i++) {
+ if (tan_layers & (1 << i)) {
+ char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i);
+ GPU_vertformat_safe_attrib_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
+ /* Tangent layer name. */
+ BLI_snprintf(attr_name, sizeof(attr_name), "t%s", attr_safe_name);
+ GPU_vertformat_attr_add(&format, attr_name, GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ /* Active render layer name. */
+ if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPUV)) {
+ GPU_vertformat_alias_add(&format, "t");
+ }
+ /* Active display layer name. */
+ if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPUV)) {
+ GPU_vertformat_alias_add(&format, "at");
+ }
+
+ BLI_strncpy(tangent_names[tan_len++], layer_name, MAX_CUSTOMDATA_LAYER_NAME);
+ }
+ }
+ if (use_orco_tan && orco == NULL) {
+ /* If orco is not available compute it ourselves */
+ orco_allocated = true;
+ orco = MEM_mallocN(sizeof(*orco) * mr->vert_len, __func__);
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMesh *bm = mr->bm;
+ for (int v = 0; v < mr->vert_len; v++) {
+ copy_v3_v3(orco[v], BM_vert_at_index(bm, v)->co);
+ }
+ }
+ else {
+ const MVert *mvert = mr->mvert;
+ for (int v = 0; v < mr->vert_len; v++, mvert++) {
+ copy_v3_v3(orco[v], mvert->co);
+ }
+ }
+ BKE_mesh_orco_verts_transform(mr->me, orco, mr->vert_len, 0);
+ }
+
+ /* Start Fresh */
+ CustomData_free_layers(cd_ldata, CD_TANGENT, mr->loop_len);
+
+ if (tan_len != 0 || use_orco_tan) {
+ short tangent_mask = 0;
+ bool calc_active_tangent = false;
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BKE_editmesh_loop_tangent_calc(mr->edit_bmesh,
+ calc_active_tangent,
+ tangent_names,
+ tan_len,
+ mr->poly_normals,
+ mr->loop_normals,
+ orco,
+ cd_ldata,
+ mr->loop_len,
+ &tangent_mask);
+ }
+ else {
+ BKE_mesh_calc_loop_tangent_ex(mr->mvert,
+ mr->mpoly,
+ mr->poly_len,
+ mr->mloop,
+ mr->mlooptri,
+ mr->tri_len,
+ cd_ldata,
+ calc_active_tangent,
+ tangent_names,
+ tan_len,
+ mr->poly_normals,
+ mr->loop_normals,
+ orco,
+ cd_ldata,
+ mr->loop_len,
+ &tangent_mask);
+ }
+ }
+
+ if (use_orco_tan) {
+ char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_TANGENT, 0);
+ GPU_vertformat_safe_attrib_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
+ BLI_snprintf(attr_name, sizeof(*attr_name), "t%s", attr_safe_name);
+ GPU_vertformat_attr_add(&format, attr_name, GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ GPU_vertformat_alias_add(&format, "t");
+ GPU_vertformat_alias_add(&format, "at");
+ }
+
+ if (orco_allocated) {
+ MEM_SAFE_FREE(orco);
+ }
+
+ int v_len = mr->loop_len;
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "dummy", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ /* VBO will not be used, only allocate minimum of memory. */
+ v_len = 1;
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, v_len);
+
+ float(*tan_data)[4] = (float(*)[4])vbo->data;
+ for (int i = 0; i < tan_len; i++) {
+ void *layer_data = CustomData_get_layer_named(cd_ldata, CD_TANGENT, tangent_names[i]);
+ memcpy(tan_data, layer_data, sizeof(*tan_data) * mr->loop_len);
+ tan_data += mr->loop_len;
+ }
+ if (use_orco_tan) {
+ void *layer_data = CustomData_get_layer_n(cd_ldata, CD_TANGENT, 0);
+ memcpy(tan_data, layer_data, sizeof(*tan_data) * mr->loop_len);
+ }
+
+ CustomData_free_layers(cd_ldata, CD_TANGENT, mr->loop_len);
+
+ return NULL;
+}
+
+static const MeshExtract extract_tan = {
+ extract_tan_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ MR_DATA_POLY_NOR | MR_DATA_TAN_LOOP_NOR | MR_DATA_LOOPTRI,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract VCol
+ * \{ */
+
+static void *extract_vcol_init(const MeshRenderData *mr, void *buf)
+{
+ GPUVertFormat format = {0};
+ GPU_vertformat_deinterleave(&format);
+
+ CustomData *cd_ldata = &mr->me->ldata;
+ uint32_t vcol_layers = mr->cache->cd_used.vcol;
+
+ for (int i = 0; i < 8; i++) {
+ if (vcol_layers & (1 << i)) {
+ char attr_name[32], attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ const char *layer_name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i);
+ GPU_vertformat_safe_attrib_name(layer_name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
+
+ BLI_snprintf(attr_name, sizeof(attr_name), "c%s", attr_safe_name);
+ GPU_vertformat_attr_add(&format, attr_name, GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
+
+ if (i == CustomData_get_render_layer(cd_ldata, CD_MLOOPCOL)) {
+ GPU_vertformat_alias_add(&format, "c");
+ }
+ if (i == CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL)) {
+ GPU_vertformat_alias_add(&format, "ac");
+ }
+ /* Gather number of auto layers. */
+ /* We only do vcols that are not overridden by uvs */
+ if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, layer_name) == -1) {
+ BLI_snprintf(attr_name, sizeof(attr_name), "a%s", attr_safe_name);
+ GPU_vertformat_alias_add(&format, attr_name);
+ }
+ }
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ MLoopCol *vcol_data = (MLoopCol *)vbo->data;
+ for (int i = 0; i < 8; i++) {
+ if (vcol_layers & (1 << i)) {
+ void *layer_data = CustomData_get_layer_n(cd_ldata, CD_MLOOPCOL, i);
+ memcpy(vcol_data, layer_data, sizeof(*vcol_data) * mr->loop_len);
+ vcol_data += mr->loop_len;
+ }
+ }
+ return NULL;
+}
+
+static const MeshExtract extract_vcol = {
+ extract_vcol_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Orco
+ * \{ */
+
+typedef struct MeshExtract_Orco_Data {
+ float (*vbo_data)[4];
+ float (*orco)[3];
+} MeshExtract_Orco_Data;
+
+static void *extract_orco_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* FIXME(fclem): We use the last component as a way to differentiate from generic vertex
+ * attribs. This is a substantial waste of Vram and should be done another way.
+ * Unfortunately, at the time of writing, I did not found any other "non disruptive"
+ * alternative. */
+ GPU_vertformat_attr_add(&format, "orco", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ CustomData *cd_vdata = &mr->me->vdata;
+
+ MeshExtract_Orco_Data *data = MEM_mallocN(sizeof(*data), __func__);
+ data->vbo_data = (float(*)[4])vbo->data;
+ data->orco = CustomData_get_layer(cd_vdata, CD_ORCO);
+ /* Make sure orco layer was requested only if needed! */
+ BLI_assert(data->orco);
+ return data;
+}
+
+static void extract_orco_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *data)
+{
+ MeshExtract_Orco_Data *orco_data = (MeshExtract_Orco_Data *)data;
+ float *loop_orco = orco_data->vbo_data[l];
+ copy_v3_v3(loop_orco, orco_data->orco[BM_elem_index_get(loop->v)]);
+ loop_orco[3] = 0.0; /* Tag as not a generic attrib */
+}
+
+static void extract_orco_loop_mesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *UNUSED(mpoly),
+ void *data)
+{
+ MeshExtract_Orco_Data *orco_data = (MeshExtract_Orco_Data *)data;
+ float *loop_orco = orco_data->vbo_data[l];
+ copy_v3_v3(loop_orco, orco_data->orco[mloop->v]);
+ loop_orco[3] = 0.0; /* Tag as not a generic attrib */
+}
+
+static void extract_orco_finish(const MeshRenderData *UNUSED(mr), void *UNUSED(buf), void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_orco = {
+ extract_orco_init,
+ NULL,
+ NULL,
+ extract_orco_loop_bmesh,
+ extract_orco_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_orco_finish,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edge Factor
+ * Defines how much an edge is visible.
+ * \{ */
+
+typedef struct MeshExtract_EdgeFac_Data {
+ uchar *vbo_data;
+ bool use_edge_render;
+ /* Number of loop per edge. */
+ uchar edge_loop_count[0];
+} MeshExtract_EdgeFac_Data;
+
+static float loop_edge_factor_get(const float f_no[3],
+ const float v_co[3],
+ const float v_no[3],
+ const float v_next_co[3])
+{
+ float enor[3], evec[3];
+ sub_v3_v3v3(evec, v_next_co, v_co);
+ cross_v3_v3v3(enor, v_no, evec);
+ normalize_v3(enor);
+ float d = fabsf(dot_v3v3(enor, f_no));
+ /* Rescale to the slider range. */
+ d *= (1.0f / 0.065f);
+ CLAMP(d, 0.0f, 1.0f);
+ return d;
+}
+
+static void *extract_edge_fac_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "wd", GPU_COMP_U8, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
+
+ MeshExtract_EdgeFac_Data *data;
+
+ if (mr->extract_type == MR_EXTRACT_MESH) {
+ size_t edge_loop_count_size = sizeof(uint32_t) * mr->edge_len;
+ data = MEM_callocN(sizeof(*data) + edge_loop_count_size, __func__);
+
+ /* HACK(fclem) Detecting the need for edge render.
+ * We could have a flag in the mesh instead or check the modifier stack. */
+ const MEdge *medge = mr->medge;
+ for (int e = 0; e < mr->edge_len; e++, medge++) {
+ if ((medge->flag & ME_EDGERENDER) == 0) {
+ data->use_edge_render = true;
+ break;
+ }
+ }
+ }
+ else {
+ data = MEM_callocN(sizeof(*data), __func__);
+ /* HACK to bypass non-manifold check in mesh_edge_fac_finish(). */
+ data->use_edge_render = true;
+ }
+
+ data->vbo_data = vbo->data;
+ return data;
+}
+
+static void extract_edge_fac_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_EdgeFac_Data *data = (MeshExtract_EdgeFac_Data *)_data;
+ if (BM_edge_is_manifold(loop->e)) {
+ float ratio = loop_edge_factor_get(loop->f->no, loop->v->co, loop->v->no, loop->next->v->co);
+ data->vbo_data[l] = ratio * 253 + 1;
+ }
+ else {
+ data->vbo_data[l] = 255;
+ }
+}
+
+static void extract_edge_fac_loop_mesh(
+ const MeshRenderData *mr, int l, const MLoop *mloop, int p, const MPoly *mpoly, void *_data)
+{
+ MeshExtract_EdgeFac_Data *data = (MeshExtract_EdgeFac_Data *)_data;
+ if (data->use_edge_render) {
+ const MEdge *medge = &mr->medge[mloop->e];
+ data->vbo_data[l] = (medge->flag & ME_EDGERENDER) ? 255 : 0;
+ }
+ else {
+ /* Count loop per edge to detect non-manifold. */
+ if (data->edge_loop_count[mloop->e] < 3) {
+ data->edge_loop_count[mloop->e]++;
+ }
+ if (data->edge_loop_count[mloop->e] == 2) {
+ /* Manifold */
+ int loopend = mpoly->totloop + mpoly->loopstart - 1;
+ int other_loop = (l == loopend) ? mpoly->loopstart : (l + 1);
+ const MLoop *mloop_next = &mr->mloop[other_loop];
+ const MVert *v1 = &mr->mvert[mloop->v];
+ const MVert *v2 = &mr->mvert[mloop_next->v];
+ float vnor_f[3];
+ normal_short_to_float_v3(vnor_f, v1->no);
+ float ratio = loop_edge_factor_get(mr->poly_normals[p], v1->co, vnor_f, v2->co);
+ data->vbo_data[l] = ratio * 253 + 1;
+ }
+ else {
+ /* Non-manifold */
+ data->vbo_data[l] = 255;
+ }
+ }
+}
+
+static void extract_edge_fac_ledge_bmesh(const MeshRenderData *mr,
+ int e,
+ BMEdge *UNUSED(eed),
+ void *_data)
+{
+ MeshExtract_EdgeFac_Data *data = (MeshExtract_EdgeFac_Data *)_data;
+ data->vbo_data[mr->loop_len + e * 2 + 0] = 255;
+ data->vbo_data[mr->loop_len + e * 2 + 1] = 255;
+}
+
+static void extract_edge_fac_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *UNUSED(edge),
+ void *_data)
+{
+ MeshExtract_EdgeFac_Data *data = (MeshExtract_EdgeFac_Data *)_data;
+ data->vbo_data[mr->loop_len + e * 2 + 0] = 255;
+ data->vbo_data[mr->loop_len + e * 2 + 1] = 255;
+}
+
+static void extract_edge_fac_finish(const MeshRenderData *mr, void *buf, void *_data)
+{
+ MeshExtract_EdgeFac_Data *data = (MeshExtract_EdgeFac_Data *)_data;
+
+ if (GPU_crappy_amd_driver()) {
+ GPUVertBuf *vbo = (GPUVertBuf *)buf;
+ /* Some AMD drivers strangely crash with VBOs with a one byte format.
+ * To workaround we reinit the vbo with another format and convert
+ * all bytes to floats. */
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "wd", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ }
+ /* We keep the data reference in data->vbo_data. */
+ vbo->data = NULL;
+ GPU_vertbuf_clear(vbo);
+
+ int buf_len = mr->loop_len + mr->loop_loose_len;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, buf_len);
+
+ float *fdata = (float *)vbo->data;
+ for (int l = 0; l < buf_len; l++, fdata++) {
+ *fdata = data->vbo_data[l] / 255.0f;
+ }
+ /* Free old byte data. */
+ MEM_freeN(data->vbo_data);
+ }
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_edge_fac = {
+ extract_edge_fac_init,
+ NULL,
+ NULL,
+ extract_edge_fac_loop_bmesh,
+ extract_edge_fac_loop_mesh,
+ extract_edge_fac_ledge_bmesh,
+ extract_edge_fac_ledge_mesh,
+ NULL,
+ NULL,
+ extract_edge_fac_finish,
+ MR_DATA_POLY_NOR,
+ false,
+};
+
+/** \} */
+/* ---------------------------------------------------------------------- */
+/** \name Extract Vertex Weight
+ * \{ */
+
+typedef struct MeshExtract_Weight_Data {
+ float *vbo_data;
+ const DRW_MeshWeightState *wstate;
+ const MDeformVert *dvert; /* For Mesh. */
+ int cd_ofs; /* For BMesh. */
+} MeshExtract_Weight_Data;
+
+static float evaluate_vertex_weight(const MDeformVert *dvert, const DRW_MeshWeightState *wstate)
+{
+ /* Error state. */
+ if ((wstate->defgroup_active < 0) && (wstate->defgroup_len > 0)) {
+ return -2.0f;
+ }
+ else if (dvert == NULL) {
+ return (wstate->alert_mode != OB_DRAW_GROUPUSER_NONE) ? -1.0f : 0.0f;
+ }
+
+ float input = 0.0f;
+ if (wstate->flags & DRW_MESH_WEIGHT_STATE_MULTIPAINT) {
+ /* Multi-Paint feature */
+ input = BKE_defvert_multipaint_collective_weight(
+ dvert,
+ wstate->defgroup_len,
+ wstate->defgroup_sel,
+ wstate->defgroup_sel_count,
+ (wstate->flags & DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE) != 0);
+ /* make it black if the selected groups have no weight on a vertex */
+ if (input == 0.0f) {
+ return -1.0f;
+ }
+ }
+ else {
+ /* default, non tricky behavior */
+ input = defvert_find_weight(dvert, wstate->defgroup_active);
+
+ if (input == 0.0f) {
+ switch (wstate->alert_mode) {
+ case OB_DRAW_GROUPUSER_ACTIVE:
+ return -1.0f;
+ break;
+ case OB_DRAW_GROUPUSER_ALL:
+ if (defvert_is_weight_zero(dvert, wstate->defgroup_len)) {
+ return -1.0f;
+ }
+ break;
+ }
+ }
+ }
+ CLAMP(input, 0.0f, 1.0f);
+ return input;
+}
+
+static void *extract_weights_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "weight", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
+
+ MeshExtract_Weight_Data *data = MEM_callocN(sizeof(*data), __func__);
+ data->vbo_data = (float *)vbo->data;
+ data->wstate = &mr->cache->weight_state;
+
+ if (data->wstate->defgroup_active == -1) {
+ /* Nothing to show. */
+ data->dvert = NULL;
+ data->cd_ofs = -1;
+ }
+ else if (mr->extract_type == MR_EXTRACT_BMESH) {
+ data->dvert = NULL;
+ data->cd_ofs = CustomData_get_offset(&mr->bm->vdata, CD_MDEFORMVERT);
+ }
+ else {
+ data->dvert = CustomData_get_layer(&mr->me->vdata, CD_MDEFORMVERT);
+ data->cd_ofs = -1;
+ }
+ return data;
+}
+
+static void extract_weights_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_Weight_Data *data = (MeshExtract_Weight_Data *)_data;
+ const MDeformVert *dvert = (data->cd_ofs != -1) ? BM_ELEM_CD_GET_VOID_P(loop->v, data->cd_ofs) :
+ NULL;
+ data->vbo_data[l] = evaluate_vertex_weight(dvert, data->wstate);
+}
+
+static void extract_weights_loop_mesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *UNUSED(mpoly),
+ void *_data)
+{
+ MeshExtract_Weight_Data *data = (MeshExtract_Weight_Data *)_data;
+ const MDeformVert *dvert = data->dvert ? &data->dvert[mloop->v] : NULL;
+ data->vbo_data[l] = evaluate_vertex_weight(dvert, data->wstate);
+}
+
+static void extract_weights_finish(const MeshRenderData *UNUSED(mr), void *UNUSED(buf), void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_weights = {
+ extract_weights_init,
+ NULL,
+ NULL,
+ extract_weights_loop_bmesh,
+ extract_weights_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_weights_finish,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit Mode Data / Flags
+ * \{ */
+
+typedef struct EditLoopData {
+ uchar v_flag;
+ uchar e_flag;
+ uchar crease;
+ uchar bweight;
+} EditLoopData;
+
+static void mesh_render_data_face_flag(const MeshRenderData *mr,
+ BMFace *efa,
+ const int cd_ofs,
+ EditLoopData *eattr)
+{
+ if (efa == mr->efa_act) {
+ eattr->v_flag |= VFLAG_FACE_ACTIVE;
+ }
+ if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
+ eattr->v_flag |= VFLAG_FACE_SELECTED;
+ }
+
+ if (efa == mr->efa_act_uv) {
+ eattr->v_flag |= VFLAG_FACE_UV_ACTIVE;
+ }
+ if ((cd_ofs != -1) && uvedit_face_select_test_ex(mr->toolsettings, (BMFace *)efa, cd_ofs)) {
+ eattr->v_flag |= VFLAG_FACE_UV_SELECT;
+ }
+
+#ifdef WITH_FREESTYLE
+ if (mr->freestyle_face_ofs != -1) {
+ const FreestyleFace *ffa = BM_ELEM_CD_GET_VOID_P(efa, mr->freestyle_face_ofs);
+ if (ffa->flag & FREESTYLE_FACE_MARK) {
+ eattr->v_flag |= VFLAG_FACE_FREESTYLE;
+ }
+ }
+#endif
+}
+
+static void mesh_render_data_edge_flag(const MeshRenderData *mr, BMEdge *eed, EditLoopData *eattr)
+{
+ const ToolSettings *ts = mr->toolsettings;
+ const bool is_vertex_select_mode = (ts != NULL) && (ts->selectmode & SCE_SELECT_VERTEX) != 0;
+ const bool is_face_only_select_mode = (ts != NULL) && (ts->selectmode == SCE_SELECT_FACE);
+
+ if (eed == mr->eed_act) {
+ eattr->e_flag |= VFLAG_EDGE_ACTIVE;
+ }
+ if (!is_vertex_select_mode && BM_elem_flag_test(eed, BM_ELEM_SELECT)) {
+ eattr->e_flag |= VFLAG_EDGE_SELECTED;
+ }
+ if (is_vertex_select_mode && BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) &&
+ BM_elem_flag_test(eed->v2, BM_ELEM_SELECT)) {
+ eattr->e_flag |= VFLAG_EDGE_SELECTED;
+ eattr->e_flag |= VFLAG_VERT_SELECTED;
+ }
+ if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) {
+ eattr->e_flag |= VFLAG_EDGE_SEAM;
+ }
+ if (!BM_elem_flag_test(eed, BM_ELEM_SMOOTH)) {
+ eattr->e_flag |= VFLAG_EDGE_SHARP;
+ }
+
+ /* Use active edge color for active face edges because
+ * specular highlights make it hard to see T55456#510873.
+ *
+ * This isn't ideal since it can't be used when mixing edge/face modes
+ * but it's still better then not being able to see the active face. */
+ if (is_face_only_select_mode) {
+ if (mr->efa_act != NULL) {
+ if (BM_edge_in_face(eed, mr->efa_act)) {
+ eattr->e_flag |= VFLAG_EDGE_ACTIVE;
+ }
+ }
+ }
+
+ /* Use a byte for value range */
+ if (mr->crease_ofs != -1) {
+ float crease = BM_ELEM_CD_GET_FLOAT(eed, mr->crease_ofs);
+ if (crease > 0) {
+ eattr->crease = (uchar)(crease * 255.0f);
+ }
+ }
+ /* Use a byte for value range */
+ if (mr->bweight_ofs != -1) {
+ float bweight = BM_ELEM_CD_GET_FLOAT(eed, mr->bweight_ofs);
+ if (bweight > 0) {
+ eattr->bweight = (uchar)(bweight * 255.0f);
+ }
+ }
+#ifdef WITH_FREESTYLE
+ if (mr->freestyle_edge_ofs != -1) {
+ const FreestyleEdge *fed = BM_ELEM_CD_GET_VOID_P(eed, mr->freestyle_edge_ofs);
+ if (fed->flag & FREESTYLE_EDGE_MARK) {
+ eattr->e_flag |= VFLAG_EDGE_FREESTYLE;
+ }
+ }
+#endif
+}
+
+static void mesh_render_data_loop_flag(const MeshRenderData *mr,
+ BMLoop *loop,
+ const int cd_ofs,
+ EditLoopData *eattr)
+{
+ if (cd_ofs == -1) {
+ return;
+ }
+ MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(loop, cd_ofs);
+ if (luv != NULL && (luv->flag & MLOOPUV_PINNED)) {
+ eattr->v_flag |= VFLAG_VERT_UV_PINNED;
+ }
+ if (uvedit_uv_select_test_ex(mr->toolsettings, loop, cd_ofs)) {
+ eattr->v_flag |= VFLAG_VERT_UV_SELECT;
+ }
+}
+
+static void mesh_render_data_loop_edge_flag(const MeshRenderData *mr,
+ BMLoop *loop,
+ const int cd_ofs,
+ EditLoopData *eattr)
+{
+ if (cd_ofs == -1) {
+ return;
+ }
+ if (uvedit_edge_select_test_ex(mr->toolsettings, loop, cd_ofs)) {
+ eattr->v_flag |= VFLAG_EDGE_UV_SELECT;
+ eattr->v_flag |= VFLAG_VERT_UV_SELECT;
+ }
+}
+
+static void mesh_render_data_vert_flag(const MeshRenderData *mr, BMVert *eve, EditLoopData *eattr)
+{
+ if (eve == mr->eve_act) {
+ eattr->e_flag |= VFLAG_VERT_ACTIVE;
+ }
+ if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
+ eattr->e_flag |= VFLAG_VERT_SELECTED;
+ }
+}
+
+static void *extract_edit_data_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* WARNING Adjust EditLoopData struct accordingly. */
+ GPU_vertformat_attr_add(&format, "data", GPU_COMP_U8, 4, GPU_FETCH_INT);
+ GPU_vertformat_alias_add(&format, "flag");
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
+ return vbo->data;
+}
+
+static void extract_edit_data_loop_bmesh(const MeshRenderData *mr,
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ EditLoopData *data = (EditLoopData *)_data + l;
+ memset(data, 0x0, sizeof(*data));
+ mesh_render_data_face_flag(mr, loop->f, -1, data);
+ mesh_render_data_edge_flag(mr, loop->e, data);
+ mesh_render_data_vert_flag(mr, loop->v, data);
+}
+
+static void extract_edit_data_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int p,
+ const MPoly *UNUSED(mpoly),
+ void *_data)
+{
+ EditLoopData *data = (EditLoopData *)_data + l;
+ memset(data, 0x0, sizeof(*data));
+ BMFace *efa = bm_original_face_get(mr, p);
+ BMEdge *eed = bm_original_edge_get(mr, mloop->e);
+ BMVert *eve = bm_original_vert_get(mr, mloop->v);
+ if (efa) {
+ mesh_render_data_face_flag(mr, efa, -1, data);
+ }
+ if (eed) {
+ mesh_render_data_edge_flag(mr, eed, data);
+ }
+ if (eve) {
+ mesh_render_data_vert_flag(mr, eve, data);
+ }
+}
+
+static void extract_edit_data_ledge_bmesh(const MeshRenderData *mr,
+ int e,
+ BMEdge *eed,
+ void *_data)
+{
+ EditLoopData *data = (EditLoopData *)_data + mr->loop_len + e * 2;
+ memset(data, 0x0, sizeof(*data) * 2);
+ mesh_render_data_edge_flag(mr, eed, &data[0]);
+ data[1] = data[0];
+ mesh_render_data_vert_flag(mr, eed->v1, &data[0]);
+ mesh_render_data_vert_flag(mr, eed->v2, &data[1]);
+}
+
+static void extract_edit_data_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *edge,
+ void *_data)
+{
+ EditLoopData *data = (EditLoopData *)_data + mr->loop_len + e * 2;
+ memset(data, 0x0, sizeof(*data) * 2);
+ int e_idx = mr->ledges[e];
+ BMEdge *eed = bm_original_edge_get(mr, e_idx);
+ BMVert *eve1 = bm_original_vert_get(mr, edge->v1);
+ BMVert *eve2 = bm_original_vert_get(mr, edge->v2);
+ if (eed) {
+ mesh_render_data_edge_flag(mr, eed, &data[0]);
+ data[1] = data[0];
+ }
+ if (eve1) {
+ mesh_render_data_vert_flag(mr, eve1, &data[0]);
+ }
+ if (eve2) {
+ mesh_render_data_vert_flag(mr, eve2, &data[1]);
+ }
+}
+
+static void extract_edit_data_lvert_bmesh(const MeshRenderData *mr,
+ int v,
+ BMVert *eve,
+ void *_data)
+{
+ EditLoopData *data = (EditLoopData *)_data + mr->loop_len + mr->edge_loose_len * 2 + v;
+ memset(data, 0x0, sizeof(*data));
+ mesh_render_data_vert_flag(mr, eve, data);
+}
+
+static void extract_edit_data_lvert_mesh(const MeshRenderData *mr,
+ int v,
+ const MVert *UNUSED(mvert),
+ void *_data)
+{
+ EditLoopData *data = (EditLoopData *)_data + mr->loop_len + mr->edge_loose_len * 2 + v;
+ memset(data, 0x0, sizeof(*data));
+ int v_idx = mr->lverts[v];
+ BMVert *eve = bm_original_vert_get(mr, v_idx);
+ if (eve) {
+ mesh_render_data_vert_flag(mr, eve, data);
+ }
+}
+
+static const MeshExtract extract_edit_data = {
+ extract_edit_data_init,
+ NULL,
+ NULL,
+ extract_edit_data_loop_bmesh,
+ extract_edit_data_loop_mesh,
+ extract_edit_data_ledge_bmesh,
+ extract_edit_data_ledge_mesh,
+ extract_edit_data_lvert_bmesh,
+ extract_edit_data_lvert_mesh,
+ NULL,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV Data / Flags
+ * \{ */
+
+typedef struct MeshExtract_EditUVData_Data {
+ EditLoopData *vbo_data;
+ int cd_ofs;
+} MeshExtract_EditUVData_Data;
+
+static void *extract_edituv_data_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* WARNING Adjust EditLoopData struct accordingly. */
+ GPU_vertformat_attr_add(&format, "data", GPU_COMP_U8, 4, GPU_FETCH_INT);
+ GPU_vertformat_alias_add(&format, "flag");
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ CustomData *cd_ldata = &mr->me->ldata;
+
+ MeshExtract_EditUVData_Data *data = MEM_callocN(sizeof(*data), __func__);
+ data->vbo_data = (EditLoopData *)vbo->data;
+ data->cd_ofs = CustomData_get_offset(cd_ldata, CD_MLOOPUV);
+ return data;
+}
+
+static void extract_edituv_data_loop_bmesh(const MeshRenderData *mr,
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_EditUVData_Data *data = (MeshExtract_EditUVData_Data *)_data;
+ EditLoopData *eldata = data->vbo_data + l;
+ memset(eldata, 0x0, sizeof(*eldata));
+ mesh_render_data_loop_flag(mr, loop, data->cd_ofs, eldata);
+ mesh_render_data_loop_edge_flag(mr, loop, data->cd_ofs, eldata);
+}
+
+static void extract_edituv_data_loop_mesh(
+ const MeshRenderData *mr, int l, const MLoop *mloop, int p, const MPoly *mpoly, void *_data)
+{
+ MeshExtract_EditUVData_Data *data = (MeshExtract_EditUVData_Data *)_data;
+ EditLoopData *eldata = data->vbo_data + l;
+ memset(eldata, 0x0, sizeof(*eldata));
+ BMFace *efa = bm_original_face_get(mr, p);
+ if (efa) {
+ BMEdge *eed = bm_original_edge_get(mr, mloop->e);
+ BMVert *eve = bm_original_vert_get(mr, mloop->v);
+ if (eed && eve) {
+ /* Loop on an edge endpoint. */
+ BMLoop *loop = BM_face_edge_share_loop(efa, eed);
+ mesh_render_data_loop_flag(mr, loop, data->cd_ofs, eldata);
+ mesh_render_data_loop_edge_flag(mr, loop, data->cd_ofs, eldata);
+ }
+ else {
+ if (eed == NULL) {
+ /* Find if the loop's vert is not part of an edit edge.
+ * For this, we check if the previous loop was on an edge. */
+ int loopend = mpoly->loopstart + mpoly->totloop - 1;
+ int l_prev = (l == mpoly->loopstart) ? loopend : (l - 1);
+ const MLoop *mloop_prev = &mr->mloop[l_prev];
+ eed = bm_original_edge_get(mr, mloop_prev->e);
+ }
+ if (eed) {
+ /* Mapped points on an edge between two edit verts. */
+ BMLoop *loop = BM_face_edge_share_loop(efa, eed);
+ mesh_render_data_loop_edge_flag(mr, loop, data->cd_ofs, eldata);
+ }
+ }
+ }
+}
+
+static void extract_edituv_data_finish(const MeshRenderData *UNUSED(mr),
+ void *UNUSED(buf),
+ void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_edituv_data = {
+ extract_edituv_data_init,
+ NULL,
+ NULL,
+ extract_edituv_data_loop_bmesh,
+ extract_edituv_data_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_edituv_data_finish,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV area stretch
+ * \{ */
+
+static void *extract_stretch_area_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "stretch", GPU_COMP_U16, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ return NULL;
+}
+
+BLI_INLINE float area_ratio_get(float area, float uvarea)
+{
+ if (area >= FLT_EPSILON && uvarea >= FLT_EPSILON) {
+ /* Tag inversion by using the sign. */
+ return (area > uvarea) ? (uvarea / area) : -(area / uvarea);
+ }
+ return 0.0f;
+}
+
+BLI_INLINE float area_ratio_to_stretch(float ratio, float tot_ratio, float inv_tot_ratio)
+{
+ ratio *= (ratio > 0.0f) ? tot_ratio : -inv_tot_ratio;
+ return (ratio > 1.0f) ? (1.0f / ratio) : ratio;
+}
+
+static void mesh_stretch_area_finish(const MeshRenderData *mr, void *buf, void *UNUSED(data))
+{
+ float totarea = 0, totuvarea = 0;
+ float *area_ratio = MEM_mallocN(sizeof(float) * mr->poly_len, __func__);
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ CustomData *cd_ldata = &mr->bm->ldata;
+ int uv_ofs = CustomData_get_offset(cd_ldata, CD_MLOOPUV);
+
+ BMFace *efa;
+ BMIter f_iter;
+ int f;
+ BM_ITER_MESH_INDEX (efa, &f_iter, mr->bm, BM_FACES_OF_MESH, f) {
+ float area = BM_face_calc_area(efa);
+ float uvarea = BM_face_calc_area_uv(efa, uv_ofs);
+ totarea += area;
+ totuvarea += uvarea;
+ area_ratio[f] = area_ratio_get(area, uvarea);
+ }
+ }
+ else if (mr->extract_type == MR_EXTRACT_MAPPED) {
+ const MLoopUV *uv_data = CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV);
+ const MPoly *mpoly = mr->mpoly;
+ for (int p = 0; p < mr->poly_len; p++, mpoly++) {
+ float area = BKE_mesh_calc_poly_area(mpoly, &mr->mloop[mpoly->loopstart], mr->mvert);
+ float uvarea = BKE_mesh_calc_poly_uv_area(mpoly, uv_data);
+ totarea += area;
+ totuvarea += uvarea;
+ area_ratio[p] = area_ratio_get(area, uvarea);
+ }
+ }
+ else {
+ /* Should not happen. */
+ BLI_assert(0);
+ }
+
+ float tot_ratio, inv_tot_ratio;
+ if (totarea < FLT_EPSILON || totuvarea < FLT_EPSILON) {
+ tot_ratio = 0.0f;
+ inv_tot_ratio = 0.0f;
+ }
+ else {
+ tot_ratio = totarea / totuvarea;
+ inv_tot_ratio = totuvarea / totarea;
+ }
+
+ /* Convert in place to avoid an extra allocation */
+ uint16_t *poly_stretch = (uint16_t *)area_ratio;
+ for (int p = 0; p < mr->poly_len; p++) {
+ float stretch = area_ratio_to_stretch(area_ratio[p], tot_ratio, inv_tot_ratio);
+ poly_stretch[p] = (1.0f - stretch) * 65534.0f;
+ }
+
+ /* Copy face data for each loop. */
+ GPUVertBuf *vbo = buf;
+ uint16_t *loop_stretch = (uint16_t *)vbo->data;
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMFace *efa;
+ BMIter f_iter;
+ int f, l = 0;
+ BM_ITER_MESH_INDEX (efa, &f_iter, mr->bm, BM_FACES_OF_MESH, f) {
+ for (int i = 0; i < efa->len; i++, l++) {
+ loop_stretch[l] = poly_stretch[f];
+ }
+ }
+ }
+ else if (mr->extract_type == MR_EXTRACT_MAPPED) {
+ const MPoly *mpoly = mr->mpoly;
+ for (int p = 0, l = 0; p < mr->poly_len; p++, mpoly++) {
+ for (int i = 0; i < mpoly->totloop; i++, l++) {
+ loop_stretch[l] = poly_stretch[p];
+ }
+ }
+ }
+ else {
+ /* Should not happen. */
+ BLI_assert(0);
+ }
+
+ MEM_freeN(area_ratio);
+}
+
+static const MeshExtract extract_stretch_area = {
+ extract_stretch_area_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ mesh_stretch_area_finish,
+ 0,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV angle stretch
+ * \{ */
+
+typedef struct UVStretchAngle {
+ int16_t angle;
+ int16_t uv_angles[2];
+} UVStretchAngle;
+
+typedef struct MeshExtract_StretchAngle_Data {
+ UVStretchAngle *vbo_data;
+ MLoopUV *luv;
+ float auv[2][2], last_auv[2];
+ float av[2][3], last_av[3];
+ int cd_ofs;
+} MeshExtract_StretchAngle_Data;
+
+static void compute_normalize_edge_vectors(float auv[2][2],
+ float av[2][3],
+ const float uv[2],
+ const float uv_prev[2],
+ const float co[2],
+ const float co_prev[2])
+{
+ /* Move previous edge. */
+ copy_v2_v2(auv[0], auv[1]);
+ copy_v3_v3(av[0], av[1]);
+ /* 2d edge */
+ sub_v2_v2v2(auv[1], uv_prev, uv);
+ normalize_v2(auv[1]);
+ /* 3d edge */
+ sub_v3_v3v3(av[1], co_prev, co);
+ normalize_v3(av[1]);
+}
+
+static short v2_to_short_angle(float v[2])
+{
+ return atan2f(v[1], v[0]) * (float)M_1_PI * SHRT_MAX;
+}
+
+static void edituv_get_stretch_angle(float auv[2][2], float av[2][3], UVStretchAngle *r_stretch)
+{
+ /* Send uvs to the shader and let it compute the aspect corrected angle. */
+ r_stretch->uv_angles[0] = v2_to_short_angle(auv[0]);
+ r_stretch->uv_angles[1] = v2_to_short_angle(auv[1]);
+ /* Compute 3D angle here. */
+ r_stretch->angle = angle_normalized_v3v3(av[0], av[1]) * (float)M_1_PI * SHRT_MAX;
+
+#if 0 /* here for reference, this is done in shader now. */
+ float uvang = angle_normalized_v2v2(auv0, auv1);
+ float ang = angle_normalized_v3v3(av0, av1);
+ float stretch = fabsf(uvang - ang) / (float)M_PI;
+ return 1.0f - pow2f(1.0f - stretch);
+#endif
+}
+
+static void *extract_stretch_angle_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* WARNING Adjust UVStretchAngle struct accordingly. */
+ GPU_vertformat_attr_add(&format, "angle", GPU_COMP_I16, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ GPU_vertformat_attr_add(&format, "uv_angles", GPU_COMP_I16, 2, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ MeshExtract_StretchAngle_Data *data = MEM_callocN(sizeof(*data), __func__);
+ data->vbo_data = (UVStretchAngle *)vbo->data;
+
+ /* Special iter nneded to save about half of the computing cost. */
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV);
+ }
+ else if (mr->extract_type == MR_EXTRACT_MAPPED) {
+ data->luv = CustomData_get_layer(&mr->me->ldata, CD_MLOOPUV);
+ }
+ else {
+ BLI_assert(0);
+ }
+ return data;
+}
+
+static void extract_stretch_angle_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_StretchAngle_Data *data = (MeshExtract_StretchAngle_Data *)_data;
+ float(*auv)[2] = data->auv, *last_auv = data->last_auv;
+ float(*av)[3] = data->av, *last_av = data->last_av;
+ const MLoopUV *luv, *luv_next;
+ BMLoop *l_next = loop->next;
+ BMFace *efa = loop->f;
+ if (loop == efa->l_first) {
+ /* First loop in face. */
+ BMLoop *l_tmp = loop->prev;
+ BMLoop *l_next_tmp = loop;
+ luv = BM_ELEM_CD_GET_VOID_P(l_tmp, data->cd_ofs);
+ luv_next = BM_ELEM_CD_GET_VOID_P(l_next_tmp, data->cd_ofs);
+ compute_normalize_edge_vectors(
+ auv, av, luv->uv, luv_next->uv, l_tmp->v->co, l_next_tmp->v->co);
+ /* Save last edge. */
+ copy_v2_v2(last_auv, auv[1]);
+ copy_v3_v3(last_av, av[1]);
+ }
+ if (l_next == efa->l_first) {
+ /* Move previous edge. */
+ copy_v2_v2(auv[0], auv[1]);
+ copy_v3_v3(av[0], av[1]);
+ /* Copy already calculated last edge. */
+ copy_v2_v2(auv[1], last_auv);
+ copy_v3_v3(av[1], last_av);
+ }
+ else {
+ luv = BM_ELEM_CD_GET_VOID_P(loop, data->cd_ofs);
+ luv_next = BM_ELEM_CD_GET_VOID_P(l_next, data->cd_ofs);
+ compute_normalize_edge_vectors(auv, av, luv->uv, luv_next->uv, loop->v->co, l_next->v->co);
+ }
+ edituv_get_stretch_angle(auv, av, data->vbo_data + l);
+}
+
+static void extract_stretch_angle_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *UNUSED(mloop),
+ int UNUSED(p),
+ const MPoly *mpoly,
+ void *_data)
+{
+ MeshExtract_StretchAngle_Data *data = (MeshExtract_StretchAngle_Data *)_data;
+ float(*auv)[2] = data->auv, *last_auv = data->last_auv;
+ float(*av)[3] = data->av, *last_av = data->last_av;
+ int l_next = l + 1, loopend = mpoly->loopstart + mpoly->totloop;
+ const MVert *v, *v_next;
+ if (l == mpoly->loopstart) {
+ /* First loop in face. */
+ int l_tmp = loopend - 1;
+ int l_next_tmp = mpoly->loopstart;
+ v = &mr->mvert[mr->mloop[l_tmp].v];
+ v_next = &mr->mvert[mr->mloop[l_next_tmp].v];
+ compute_normalize_edge_vectors(
+ auv, av, data->luv[l_tmp].uv, data->luv[l_next_tmp].uv, v->co, v_next->co);
+ /* Save last edge. */
+ copy_v2_v2(last_auv, auv[1]);
+ copy_v3_v3(last_av, av[1]);
+ }
+ if (l_next == loopend) {
+ l_next = mpoly->loopstart;
+ /* Move previous edge. */
+ copy_v2_v2(auv[0], auv[1]);
+ copy_v3_v3(av[0], av[1]);
+ /* Copy already calculated last edge. */
+ copy_v2_v2(auv[1], last_auv);
+ copy_v3_v3(av[1], last_av);
+ }
+ else {
+ v = &mr->mvert[mr->mloop[l].v];
+ v_next = &mr->mvert[mr->mloop[l_next].v];
+ compute_normalize_edge_vectors(
+ auv, av, data->luv[l].uv, data->luv[l_next].uv, v->co, v_next->co);
+ }
+ edituv_get_stretch_angle(auv, av, data->vbo_data + l);
+}
+
+static void extract_stretch_angle_finish(const MeshRenderData *UNUSED(mr),
+ void *UNUSED(buf),
+ void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_stretch_angle = {
+ extract_stretch_angle_init,
+ NULL,
+ NULL,
+ extract_stretch_angle_loop_bmesh,
+ extract_stretch_angle_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_stretch_angle_finish,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Edit UV angle stretch
+ * \{ */
+
+static void *extract_mesh_analysis_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "weight", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ }
+
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len);
+
+ return NULL;
+}
+
+static void axis_from_enum_v3(float v[3], const char axis)
+{
+ zero_v3(v);
+ if (axis < 3) {
+ v[axis] = 1.0f;
+ }
+ else {
+ v[axis - 3] = -1.0f;
+ }
+}
+
+BLI_INLINE float overhang_remap(float fac, float min, float max, float minmax_irange)
+{
+ if (fac < min) {
+ fac = 1.0f;
+ }
+ else if (fac > max) {
+ fac = -1.0f;
+ }
+ else {
+ fac = (fac - min) * minmax_irange;
+ fac = 1.0f - fac;
+ CLAMP(fac, 0.0f, 1.0f);
+ }
+ return fac;
+}
+
+static void statvis_calc_overhang(const MeshRenderData *mr, float *r_overhang)
+{
+ const MeshStatVis *statvis = &mr->toolsettings->statvis;
+ const float min = statvis->overhang_min / (float)M_PI;
+ const float max = statvis->overhang_max / (float)M_PI;
+ const char axis = statvis->overhang_axis;
+ BMEditMesh *em = mr->edit_bmesh;
+ BMIter iter;
+ BMesh *bm = em->bm;
+ BMFace *f;
+ float dir[3];
+ const float minmax_irange = 1.0f / (max - min);
+
+ BLI_assert(min <= max);
+
+ axis_from_enum_v3(dir, axis);
+
+ if (em && LIKELY(em->ob)) {
+ /* now convert into global space */
+ mul_transposed_mat3_m4_v3(em->ob->obmat, dir);
+ normalize_v3(dir);
+ }
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ int l = 0;
+ BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+ float fac = angle_normalized_v3v3(f->no, dir) / (float)M_PI;
+ fac = overhang_remap(fac, min, max, minmax_irange);
+ for (int i = 0; i < f->len; i++, l++) {
+ r_overhang[l] = fac;
+ }
+ }
+ }
+ else {
+ const MPoly *mpoly = mr->mpoly;
+ for (int p = 0, l = 0; p < mr->poly_len; p++, mpoly++) {
+ float fac = angle_normalized_v3v3(mr->poly_normals[p], dir) / (float)M_PI;
+ fac = overhang_remap(fac, min, max, minmax_irange);
+ for (int i = 0; i < mpoly->totloop; i++, l++) {
+ r_overhang[l] = fac;
+ }
+ }
+ }
+}
+
+/* so we can use jitter values for face interpolation */
+static void uv_from_jitter_v2(float uv[2])
+{
+ uv[0] += 0.5f;
+ uv[1] += 0.5f;
+ if (uv[0] + uv[1] > 1.0f) {
+ uv[0] = 1.0f - uv[0];
+ uv[1] = 1.0f - uv[1];
+ }
+
+ CLAMP(uv[0], 0.0f, 1.0f);
+ CLAMP(uv[1], 0.0f, 1.0f);
+}
+
+BLI_INLINE float thickness_remap(float fac, float min, float max, float minmax_irange)
+{
+ /* important not '<=' */
+ if (fac < max) {
+ fac = (fac - min) * minmax_irange;
+ fac = 1.0f - fac;
+ CLAMP(fac, 0.0f, 1.0f);
+ }
+ else {
+ fac = -1.0f;
+ }
+ return fac;
+}
+
+static void statvis_calc_thickness(const MeshRenderData *mr, float *r_thickness)
+{
+ const float eps_offset = 0.00002f; /* values <= 0.00001 give errors */
+ /* cheating to avoid another allocation */
+ float *face_dists = r_thickness + (mr->loop_len - mr->poly_len);
+ BMEditMesh *em = mr->edit_bmesh;
+ const float scale = 1.0f / mat4_to_scale(em->ob->obmat);
+ const MeshStatVis *statvis = &mr->toolsettings->statvis;
+ const float min = statvis->thickness_min * scale;
+ const float max = statvis->thickness_max * scale;
+ const float minmax_irange = 1.0f / (max - min);
+ const int samples = statvis->thickness_samples;
+ float jit_ofs[32][2];
+ BLI_assert(samples <= 32);
+ BLI_assert(min <= max);
+
+ copy_vn_fl(face_dists, mr->poly_len, max);
+
+ BLI_jitter_init(jit_ofs, samples);
+ for (int j = 0; j < samples; j++) {
+ uv_from_jitter_v2(jit_ofs[j]);
+ }
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMesh *bm = em->bm;
+ BM_mesh_elem_index_ensure(bm, BM_FACE);
+
+ struct BMBVHTree *bmtree = BKE_bmbvh_new_from_editmesh(em, 0, NULL, false);
+ struct BMLoop *(*looptris)[3] = em->looptris;
+ for (int i = 0; i < mr->tri_len; i++) {
+ BMLoop **ltri = looptris[i];
+ const int index = BM_elem_index_get(ltri[0]->f);
+ const float *cos[3] = {ltri[0]->v->co, ltri[1]->v->co, ltri[2]->v->co};
+ float ray_co[3];
+ float ray_no[3];
+
+ normal_tri_v3(ray_no, cos[2], cos[1], cos[0]);
+
+ for (int j = 0; j < samples; j++) {
+ float dist = face_dists[index];
+ interp_v3_v3v3v3_uv(ray_co, cos[0], cos[1], cos[2], jit_ofs[j]);
+ madd_v3_v3fl(ray_co, ray_no, eps_offset);
+
+ BMFace *f_hit = BKE_bmbvh_ray_cast(bmtree, ray_co, ray_no, 0.0f, &dist, NULL, NULL);
+ if (f_hit && dist < face_dists[index]) {
+ float angle_fac = fabsf(dot_v3v3(ltri[0]->f->no, f_hit->no));
+ angle_fac = 1.0f - angle_fac;
+ angle_fac = angle_fac * angle_fac * angle_fac;
+ angle_fac = 1.0f - angle_fac;
+ dist /= angle_fac;
+ if (dist < face_dists[index]) {
+ face_dists[index] = dist;
+ }
+ }
+ }
+ }
+ BKE_bmbvh_free(bmtree);
+
+ BMIter iter;
+ BMFace *f;
+ int l = 0;
+ BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+ float fac = face_dists[BM_elem_index_get(f)];
+ fac = thickness_remap(fac, min, max, minmax_irange);
+ for (int i = 0; i < f->len; i++, l++) {
+ r_thickness[l] = fac;
+ }
+ }
+ }
+ else {
+ BVHTreeFromMesh treeData = {NULL};
+
+ BVHTree *tree = BKE_bvhtree_from_mesh_get(&treeData, mr->me, BVHTREE_FROM_LOOPTRI, 4);
+ const MLoopTri *mlooptri = mr->mlooptri;
+ for (int i = 0; i < mr->tri_len; i++, mlooptri++) {
+ const int index = mlooptri->poly;
+ const float *cos[3] = {mr->mvert[mr->mloop[mlooptri->tri[0]].v].co,
+ mr->mvert[mr->mloop[mlooptri->tri[1]].v].co,
+ mr->mvert[mr->mloop[mlooptri->tri[2]].v].co};
+ float ray_co[3];
+ float ray_no[3];
+
+ normal_tri_v3(ray_no, cos[2], cos[1], cos[0]);
+
+ for (int j = 0; j < samples; j++) {
+ interp_v3_v3v3v3_uv(ray_co, cos[0], cos[1], cos[2], jit_ofs[j]);
+ madd_v3_v3fl(ray_co, ray_no, eps_offset);
+
+ BVHTreeRayHit hit;
+ hit.index = -1;
+ hit.dist = face_dists[index];
+ if ((BLI_bvhtree_ray_cast(
+ tree, ray_co, ray_no, 0.0f, &hit, treeData.raycast_callback, &treeData) != -1) &&
+ hit.dist < face_dists[index]) {
+ float angle_fac = fabsf(dot_v3v3(mr->poly_normals[index], hit.no));
+ angle_fac = 1.0f - angle_fac;
+ angle_fac = angle_fac * angle_fac * angle_fac;
+ angle_fac = 1.0f - angle_fac;
+ hit.dist /= angle_fac;
+ if (hit.dist < face_dists[index]) {
+ face_dists[index] = hit.dist;
+ }
+ }
+ }
+ }
+
+ const MPoly *mpoly = mr->mpoly;
+ for (int p = 0, l = 0; p < mr->poly_len; p++, mpoly++) {
+ float fac = face_dists[p];
+ fac = thickness_remap(fac, min, max, minmax_irange);
+ for (int i = 0; i < mpoly->totloop; i++, l++) {
+ r_thickness[l] = fac;
+ }
+ }
+ }
+}
+
+struct BVHTree_OverlapData {
+ const Mesh *me;
+ const MLoopTri *mlooptri;
+ float epsilon;
+};
+
+static bool bvh_overlap_cb(void *userdata, int index_a, int index_b, int UNUSED(thread))
+{
+ struct BVHTree_OverlapData *data = userdata;
+ const Mesh *me = data->me;
+
+ const MLoopTri *tri_a = &data->mlooptri[index_a];
+ const MLoopTri *tri_b = &data->mlooptri[index_b];
+
+ if (UNLIKELY(tri_a->poly == tri_b->poly)) {
+ return false;
+ }
+
+ const float *tri_a_co[3] = {me->mvert[me->mloop[tri_a->tri[0]].v].co,
+ me->mvert[me->mloop[tri_a->tri[1]].v].co,
+ me->mvert[me->mloop[tri_a->tri[2]].v].co};
+ const float *tri_b_co[3] = {me->mvert[me->mloop[tri_b->tri[0]].v].co,
+ me->mvert[me->mloop[tri_b->tri[1]].v].co,
+ me->mvert[me->mloop[tri_b->tri[2]].v].co};
+ float ix_pair[2][3];
+ int verts_shared = 0;
+
+ verts_shared = (ELEM(tri_a_co[0], UNPACK3(tri_b_co)) + ELEM(tri_a_co[1], UNPACK3(tri_b_co)) +
+ ELEM(tri_a_co[2], UNPACK3(tri_b_co)));
+
+ /* if 2 points are shared, bail out */
+ if (verts_shared >= 2) {
+ return false;
+ }
+
+ return (isect_tri_tri_epsilon_v3(
+ UNPACK3(tri_a_co), UNPACK3(tri_b_co), ix_pair[0], ix_pair[1], data->epsilon) &&
+ /* if we share a vertex, check the intersection isn't a 'point' */
+ ((verts_shared == 0) || (len_squared_v3v3(ix_pair[0], ix_pair[1]) > data->epsilon)));
+}
+
+static void statvis_calc_intersect(const MeshRenderData *mr, float *r_intersect)
+{
+ BMEditMesh *em = mr->edit_bmesh;
+
+ for (int l = 0; l < mr->loop_len; l++) {
+ r_intersect[l] = -1.0f;
+ }
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ uint overlap_len;
+ BMesh *bm = em->bm;
+
+ BM_mesh_elem_index_ensure(bm, BM_FACE);
+
+ struct BMBVHTree *bmtree = BKE_bmbvh_new_from_editmesh(em, 0, NULL, false);
+ BVHTreeOverlap *overlap = BKE_bmbvh_overlap(bmtree, bmtree, &overlap_len);
+
+ if (overlap) {
+ for (int i = 0; i < overlap_len; i++) {
+ BMFace *f_hit_pair[2] = {
+ em->looptris[overlap[i].indexA][0]->f,
+ em->looptris[overlap[i].indexB][0]->f,
+ };
+ for (int j = 0; j < 2; j++) {
+ BMFace *f_hit = f_hit_pair[j];
+ BMLoop *l_first = BM_FACE_FIRST_LOOP(f_hit);
+ int l = BM_elem_index_get(l_first);
+ for (int k = 0; k < f_hit->len; k++, l++) {
+ r_intersect[l] = 1.0f;
+ }
+ }
+ }
+ MEM_freeN(overlap);
+ }
+
+ BKE_bmbvh_free(bmtree);
+ }
+ else {
+ uint overlap_len;
+ BVHTreeFromMesh treeData = {NULL};
+
+ BVHTree *tree = BKE_bvhtree_from_mesh_get(&treeData, mr->me, BVHTREE_FROM_LOOPTRI, 4);
+
+ struct BVHTree_OverlapData data = {
+ .me = mr->me, .mlooptri = mr->mlooptri, .epsilon = BLI_bvhtree_get_epsilon(tree)};
+
+ BVHTreeOverlap *overlap = BLI_bvhtree_overlap(tree, tree, &overlap_len, bvh_overlap_cb, &data);
+ if (overlap) {
+ for (int i = 0; i < overlap_len; i++) {
+ const MPoly *f_hit_pair[2] = {
+ &mr->mpoly[mr->mlooptri[overlap[i].indexA].poly],
+ &mr->mpoly[mr->mlooptri[overlap[i].indexB].poly],
+ };
+ for (int j = 0; j < 2; j++) {
+ const MPoly *f_hit = f_hit_pair[j];
+ int l = f_hit->loopstart;
+ for (int k = 0; k < f_hit->totloop; k++, l++) {
+ r_intersect[l] = 1.0f;
+ }
+ }
+ }
+ MEM_freeN(overlap);
+ }
+ }
+}
+
+BLI_INLINE float distort_remap(float fac, float min, float UNUSED(max), float minmax_irange)
+{
+ if (fac >= min) {
+ fac = (fac - min) * minmax_irange;
+ CLAMP(fac, 0.0f, 1.0f);
+ }
+ else {
+ /* fallback */
+ fac = -1.0f;
+ }
+ return fac;
+}
+
+static void statvis_calc_distort(const MeshRenderData *mr, float *r_distort)
+{
+ BMEditMesh *em = mr->edit_bmesh;
+ const MeshStatVis *statvis = &mr->toolsettings->statvis;
+ const float min = statvis->distort_min;
+ const float max = statvis->distort_max;
+ const float minmax_irange = 1.0f / (max - min);
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMIter iter;
+ BMesh *bm = em->bm;
+ BMFace *f;
+
+ int l = 0;
+ BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+ float fac = -1.0f;
+
+ if (f->len > 3) {
+ BMLoop *l_iter, *l_first;
+
+ fac = 0.0f;
+ l_iter = l_first = BM_FACE_FIRST_LOOP(f);
+ do {
+ float no_corner[3];
+ BM_loop_calc_face_normal_safe(l_iter, no_corner);
+ /* simple way to detect (what is most likely) concave */
+ if (dot_v3v3(f->no, no_corner) < 0.0f) {
+ negate_v3(no_corner);
+ }
+ fac = max_ff(fac, angle_normalized_v3v3(f->no, no_corner));
+ } while ((l_iter = l_iter->next) != l_first);
+ fac *= 2.0f;
+ }
+
+ fac = distort_remap(fac, min, max, minmax_irange);
+ for (int i = 0; i < f->len; i++, l++) {
+ r_distort[l] = fac;
+ }
+ }
+ }
+ else {
+ const MPoly *mpoly = mr->mpoly;
+ for (int p = 0, l = 0; p < mr->poly_len; p++, mpoly++) {
+ float fac = -1.0f;
+
+ if (mpoly->totloop > 3) {
+ float *f_no = mr->poly_normals[p];
+ fac = 0.0f;
+
+ for (int i = 1; i <= mpoly->totloop; i++) {
+ const MLoop *l_prev = &mr->mloop[mpoly->loopstart + (i - 1) % mpoly->totloop];
+ const MLoop *l_curr = &mr->mloop[mpoly->loopstart + (i + 0) % mpoly->totloop];
+ const MLoop *l_next = &mr->mloop[mpoly->loopstart + (i + 1) % mpoly->totloop];
+ float no_corner[3];
+ normal_tri_v3(no_corner,
+ mr->mvert[l_prev->v].co,
+ mr->mvert[l_curr->v].co,
+ mr->mvert[l_next->v].co);
+ /* simple way to detect (what is most likely) concave */
+ if (dot_v3v3(f_no, no_corner) < 0.0f) {
+ negate_v3(no_corner);
+ }
+ fac = max_ff(fac, angle_normalized_v3v3(f_no, no_corner));
+ }
+ fac *= 2.0f;
+ }
+
+ fac = distort_remap(fac, min, max, minmax_irange);
+ for (int i = 0; i < mpoly->totloop; i++, l++) {
+ r_distort[l] = fac;
+ }
+ }
+ }
+}
+
+BLI_INLINE float sharp_remap(float fac, float min, float UNUSED(max), float minmax_irange)
+{
+ /* important not '>=' */
+ if (fac > min) {
+ fac = (fac - min) * minmax_irange;
+ CLAMP(fac, 0.0f, 1.0f);
+ }
+ else {
+ /* fallback */
+ fac = -1.0f;
+ }
+ return fac;
+}
+
+static void statvis_calc_sharp(const MeshRenderData *mr, float *r_sharp)
+{
+ BMEditMesh *em = mr->edit_bmesh;
+ const MeshStatVis *statvis = &mr->toolsettings->statvis;
+ const float min = statvis->sharp_min;
+ const float max = statvis->sharp_max;
+ const float minmax_irange = 1.0f / (max - min);
+
+ /* Can we avoid this extra allocation? */
+ float *vert_angles = MEM_mallocN(sizeof(float) * mr->vert_len, __func__);
+ copy_vn_fl(vert_angles, mr->vert_len, -M_PI);
+
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ BMIter iter, l_iter;
+ BMesh *bm = em->bm;
+ BMFace *efa;
+ BMEdge *e;
+ BMLoop *loop;
+ /* first assign float values to verts */
+ BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
+ float angle = BM_edge_calc_face_angle_signed(e);
+ float *col1 = &vert_angles[BM_elem_index_get(e->v1)];
+ float *col2 = &vert_angles[BM_elem_index_get(e->v2)];
+ *col1 = max_ff(*col1, angle);
+ *col2 = max_ff(*col2, angle);
+ }
+ /* Copy vert value to loops. */
+ BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
+ BM_ITER_ELEM (loop, &l_iter, efa, BM_LOOPS_OF_FACE) {
+ int l = BM_elem_index_get(loop);
+ int v = BM_elem_index_get(loop->v);
+ r_sharp[l] = sharp_remap(vert_angles[v], min, max, minmax_irange);
+ }
+ }
+ }
+ else {
+ /* first assign float values to verts */
+ const MPoly *mpoly = mr->mpoly;
+
+ EdgeHash *eh = BLI_edgehash_new_ex(__func__, mr->edge_len);
+
+ for (int p = 0; p < mr->poly_len; p++, mpoly++) {
+ for (int i = 0; i < mpoly->totloop; i++) {
+ const MLoop *l_curr = &mr->mloop[mpoly->loopstart + (i + 0) % mpoly->totloop];
+ const MLoop *l_next = &mr->mloop[mpoly->loopstart + (i + 1) % mpoly->totloop];
+ const MVert *v_curr = &mr->mvert[l_curr->v];
+ const MVert *v_next = &mr->mvert[l_next->v];
+ float angle;
+ void **pval;
+ bool value_is_init = BLI_edgehash_ensure_p(eh, l_curr->v, l_next->v, &pval);
+ if (!value_is_init) {
+ *pval = mr->poly_normals[p];
+ /* non-manifold edge, yet... */
+ continue;
+ }
+ else if (*pval != NULL) {
+ const float *f1_no = mr->poly_normals[p];
+ const float *f2_no = *pval;
+ angle = angle_normalized_v3v3(f1_no, f2_no);
+ angle = is_edge_convex_v3(v_curr->co, v_next->co, f1_no, f2_no) ? angle : -angle;
+ /* Tag as manifold. */
+ *pval = NULL;
+ }
+ else {
+ /* non-manifold edge */
+ angle = DEG2RADF(90.0f);
+ }
+ float *col1 = &vert_angles[l_curr->v];
+ float *col2 = &vert_angles[l_next->v];
+ *col1 = max_ff(*col1, angle);
+ *col2 = max_ff(*col2, angle);
+ }
+ }
+ /* Remaining non manifold edges. */
+ EdgeHashIterator *ehi = BLI_edgehashIterator_new(eh);
+ for (; !BLI_edgehashIterator_isDone(ehi); BLI_edgehashIterator_step(ehi)) {
+ if (BLI_edgehashIterator_getValue(ehi) != NULL) {
+ uint v1, v2;
+ const float angle = DEG2RADF(90.0f);
+ BLI_edgehashIterator_getKey(ehi, &v1, &v2);
+ float *col1 = &vert_angles[v1];
+ float *col2 = &vert_angles[v2];
+ *col1 = max_ff(*col1, angle);
+ *col2 = max_ff(*col2, angle);
+ }
+ }
+ BLI_edgehashIterator_free(ehi);
+ BLI_edgehash_free(eh, NULL);
+
+ const MLoop *mloop = mr->mloop;
+ for (int l = 0; l < mr->loop_len; l++, mloop++) {
+ r_sharp[l] = sharp_remap(vert_angles[mloop->v], min, max, minmax_irange);
+ }
+ }
+
+ MEM_freeN(vert_angles);
+}
+
+static void extract_mesh_analysis_finish(const MeshRenderData *mr, void *buf, void *UNUSED(data))
+{
+ BLI_assert(mr->edit_bmesh);
+
+ GPUVertBuf *vbo = buf;
+ float *l_weight = (float *)vbo->data;
+
+ switch (mr->toolsettings->statvis.type) {
+ case SCE_STATVIS_OVERHANG:
+ statvis_calc_overhang(mr, l_weight);
+ break;
+ case SCE_STATVIS_THICKNESS:
+ statvis_calc_thickness(mr, l_weight);
+ break;
+ case SCE_STATVIS_INTERSECT:
+ statvis_calc_intersect(mr, l_weight);
+ break;
+ case SCE_STATVIS_DISTORT:
+ statvis_calc_distort(mr, l_weight);
+ break;
+ case SCE_STATVIS_SHARP:
+ statvis_calc_sharp(mr, l_weight);
+ break;
+ }
+}
+
+static const MeshExtract extract_mesh_analysis = {
+ extract_mesh_analysis_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_mesh_analysis_finish,
+ /* This is not needed for all vis type.
+ * Maybe split into different extract. */
+ MR_DATA_POLY_NOR | MR_DATA_LOOPTRI,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Facedots positions
+ * \{ */
+
+static void *extract_fdots_pos_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->poly_len);
+ if (!mr->use_subsurf_fdots) {
+ /* Clear so we can accumulate on it. */
+ memset(vbo->data, 0x0, mr->poly_len * vbo->format.stride);
+ }
+ return vbo->data;
+}
+
+static void extract_fdots_pos_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(l),
+ BMLoop *loop,
+ void *data)
+{
+ float(*center)[3] = (float(*)[3])data;
+ float w = 1.0f / (float)loop->f->len;
+ madd_v3_v3fl(center[BM_elem_index_get(loop->f)], loop->v->co, w);
+}
+
+static void extract_fdots_pos_loop_mesh(const MeshRenderData *mr,
+ int UNUSED(l),
+ const MLoop *mloop,
+ int p,
+ const MPoly *mpoly,
+ void *data)
+{
+ float(*center)[3] = (float(*)[3])data;
+ const MVert *mvert = &mr->mvert[mloop->v];
+ if (mr->use_subsurf_fdots) {
+ if (mvert->flag & ME_VERT_FACEDOT) {
+ copy_v3_v3(center[p], mvert->co);
+ }
+ }
+ else {
+ float w = 1.0f / (float)mpoly->totloop;
+ madd_v3_v3fl(center[p], mvert->co, w);
+ }
+}
+
+static const MeshExtract extract_fdots_pos = {
+ extract_fdots_pos_init,
+ NULL,
+ NULL,
+ extract_fdots_pos_loop_bmesh,
+ extract_fdots_pos_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Facedots Normal and edit flag
+ * \{ */
+
+static void *extract_fdots_nor_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "norAndFlag", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->poly_len);
+
+ return NULL;
+}
+
+static void extract_fdots_nor_finish(const MeshRenderData *mr, void *buf, void *UNUSED(data))
+{
+ GPUVertBuf *vbo = buf;
+ GPUPackedNormal *nor = (GPUPackedNormal *)vbo->data;
+ BMFace *efa;
+
+ /* Quicker than doing it for each loop. */
+ if (mr->extract_type == MR_EXTRACT_BMESH) {
+ for (int f = 0; f < mr->poly_len; f++) {
+ efa = BM_face_at_index(mr->bm, f);
+ nor[f] = GPU_normal_convert_i10_v3(efa->no);
+ /* Select / Active Flag. */
+ nor[f].w = BM_elem_flag_test(efa, BM_ELEM_SELECT) ? ((efa == mr->efa_act) ? -1 : 1) : 0;
+ }
+ }
+ else {
+ for (int f = 0; f < mr->poly_len; f++) {
+ nor[f] = GPU_normal_convert_i10_v3(mr->poly_normals[f]);
+ if ((efa = bm_original_face_get(mr, f))) {
+ /* Select / Active Flag. */
+ nor[f].w = BM_elem_flag_test(efa, BM_ELEM_SELECT) ? ((efa == mr->efa_act) ? -1 : 1) : 0;
+ }
+ }
+ }
+}
+
+static const MeshExtract extract_fdots_nor = {
+ extract_fdots_nor_init,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_fdots_nor_finish,
+ MR_DATA_POLY_NOR,
+ false,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Facedots Normal and edit flag
+ * \{ */
+
+typedef struct MeshExtract_FdotUV_Data {
+ float (*vbo_data)[2];
+ MLoopUV *uv_data;
+} MeshExtract_FdotUV_Data;
+
+static void *extract_fdots_uv_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "u", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ GPU_vertformat_alias_add(&format, "au");
+ GPU_vertformat_alias_add(&format, "pos");
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->poly_len);
+
+ if (!mr->use_subsurf_fdots) {
+ /* Clear so we can accumulate on it. */
+ memset(vbo->data, 0x0, mr->poly_len * vbo->format.stride);
+ }
+
+ CustomData *cd_ldata = &mr->me->ldata;
+
+ MeshExtract_FdotUV_Data *data = MEM_callocN(sizeof(*data), __func__);
+ data->vbo_data = (float(*)[2])vbo->data;
+ data->uv_data = CustomData_get_layer(cd_ldata, CD_MLOOPUV);
+ return data;
+}
+
+static void extract_fdots_uv_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_FdotUV_Data *data = (MeshExtract_FdotUV_Data *)_data;
+ float w = 1.0f / (float)loop->f->len;
+ madd_v2_v2fl(data->vbo_data[BM_elem_index_get(loop->f)], data->uv_data[l].uv, w);
+}
+
+static void extract_fdots_uv_loop_mesh(
+ const MeshRenderData *mr, int l, const MLoop *mloop, int p, const MPoly *mpoly, void *_data)
+{
+ MeshExtract_FdotUV_Data *data = (MeshExtract_FdotUV_Data *)_data;
+ if (mr->use_subsurf_fdots) {
+ const MVert *mvert = &mr->mvert[mloop->v];
+ if (mvert->flag & ME_VERT_FACEDOT) {
+ copy_v2_v2(data->vbo_data[p], data->uv_data[l].uv);
+ }
+ }
+ else {
+ float w = 1.0f / (float)mpoly->totloop;
+ madd_v2_v2fl(data->vbo_data[p], data->uv_data[l].uv, w);
+ }
+}
+
+static void extract_fdots_uv_finish(const MeshRenderData *UNUSED(mr),
+ void *UNUSED(buf),
+ void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_fdots_uv = {
+ extract_fdots_uv_init,
+ NULL,
+ NULL,
+ extract_fdots_uv_loop_bmesh,
+ extract_fdots_uv_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_fdots_uv_finish,
+ 0,
+ true,
+};
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Facedots Edit UV flag
+ * \{ */
+
+typedef struct MeshExtract_EditUVFdotData_Data {
+ EditLoopData *vbo_data;
+ int cd_ofs;
+} MeshExtract_EditUVFdotData_Data;
+
+static void *extract_fdots_edituv_data_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ GPU_vertformat_attr_add(&format, "flag", GPU_COMP_U8, 4, GPU_FETCH_INT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->poly_len);
+
+ MeshExtract_EditUVFdotData_Data *data = MEM_callocN(sizeof(*data), __func__);
+ data->vbo_data = (EditLoopData *)vbo->data;
+ data->cd_ofs = CustomData_get_offset(&mr->bm->ldata, CD_MLOOPUV);
+ return data;
+}
+
+static void extract_fdots_edituv_data_loop_bmesh(const MeshRenderData *mr,
+ int UNUSED(l),
+ BMLoop *loop,
+ void *_data)
+{
+ MeshExtract_EditUVFdotData_Data *data = (MeshExtract_EditUVFdotData_Data *)_data;
+ EditLoopData *eldata = data->vbo_data + BM_elem_index_get(loop->f);
+ memset(eldata, 0x0, sizeof(*eldata));
+ mesh_render_data_face_flag(mr, loop->f, data->cd_ofs, eldata);
+}
+
+static void extract_fdots_edituv_data_loop_mesh(const MeshRenderData *mr,
+ int UNUSED(l),
+ const MLoop *UNUSED(mloop),
+ int p,
+ const MPoly *UNUSED(mpoly),
+ void *_data)
+{
+ MeshExtract_EditUVFdotData_Data *data = (MeshExtract_EditUVFdotData_Data *)_data;
+ EditLoopData *eldata = data->vbo_data + p;
+ memset(eldata, 0x0, sizeof(*eldata));
+ BMFace *efa = bm_original_face_get(mr, p);
+ if (efa) {
+ mesh_render_data_face_flag(mr, efa, data->cd_ofs, eldata);
+ }
+}
+
+static void extract_fdots_edituv_data_finish(const MeshRenderData *UNUSED(mr),
+ void *UNUSED(buf),
+ void *data)
+{
+ MEM_freeN(data);
+}
+
+static const MeshExtract extract_fdots_edituv_data = {
+ extract_fdots_edituv_data_init,
+ NULL,
+ NULL,
+ extract_fdots_edituv_data_loop_bmesh,
+ extract_fdots_edituv_data_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ extract_fdots_edituv_data_finish,
+ 0,
+ true,
+};
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Selection Index
+ * \{ */
+
+static void *extract_select_idx_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* TODO rename "color" to something more descriptive. */
+ GPU_vertformat_attr_add(&format, "color", GPU_COMP_U32, 1, GPU_FETCH_INT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->loop_len + mr->loop_loose_len);
+ return vbo->data;
+}
+
+/* TODO Use glVertexID to get loop index and use the data structure on the CPU to retrieve the
+ * select element associated with this loop ID. This would remove the need for this separate index
+ * VBOs. We could upload the p/e/v_origindex as a buffer texture and sample it inside the shader to
+ * output original index. */
+
+static void extract_poly_idx_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *data)
+{
+ ((uint32_t *)data)[l] = BM_elem_index_get(loop->f);
+}
+
+static void extract_edge_idx_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *data)
+{
+ ((uint32_t *)data)[l] = BM_elem_index_get(loop->e);
+}
+
+static void extract_vert_idx_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int l,
+ BMLoop *loop,
+ void *data)
+{
+ ((uint32_t *)data)[l] = BM_elem_index_get(loop->v);
+}
+
+static void extract_edge_idx_ledge_bmesh(const MeshRenderData *mr, int e, BMEdge *eed, void *data)
+{
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 0] = BM_elem_index_get(eed);
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 1] = BM_elem_index_get(eed);
+}
+
+static void extract_vert_idx_ledge_bmesh(const MeshRenderData *mr, int e, BMEdge *eed, void *data)
+{
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 0] = BM_elem_index_get(eed->v1);
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 1] = BM_elem_index_get(eed->v2);
+}
+
+static void extract_vert_idx_lvert_bmesh(const MeshRenderData *mr, int v, BMVert *eve, void *data)
+{
+ ((uint32_t *)data)[mr->loop_len + mr->edge_loose_len * 2 + v] = BM_elem_index_get(eve);
+}
+
+static void extract_poly_idx_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *UNUSED(mloop),
+ int p,
+ const MPoly *UNUSED(mpoly),
+ void *data)
+{
+ ((uint32_t *)data)[l] = (mr->p_origindex) ? mr->p_origindex[p] : p;
+}
+
+static void extract_edge_idx_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *UNUSED(mpoly),
+ void *data)
+{
+ ((uint32_t *)data)[l] = (mr->e_origindex) ? mr->e_origindex[mloop->e] : mloop->e;
+}
+
+static void extract_vert_idx_loop_mesh(const MeshRenderData *mr,
+ int l,
+ const MLoop *mloop,
+ int UNUSED(p),
+ const MPoly *UNUSED(mpoly),
+ void *data)
+{
+ ((uint32_t *)data)[l] = (mr->v_origindex) ? mr->v_origindex[mloop->v] : mloop->v;
+}
+
+static void extract_edge_idx_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *UNUSED(medge),
+ void *data)
+{
+ int e_idx = mr->ledges[e];
+ int e_orig = (mr->e_origindex) ? mr->e_origindex[e_idx] : e_idx;
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 0] = e_orig;
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 1] = e_orig;
+}
+
+static void extract_vert_idx_ledge_mesh(const MeshRenderData *mr,
+ int e,
+ const MEdge *medge,
+ void *data)
+{
+ int v1_orig = (mr->v_origindex) ? mr->v_origindex[medge->v1] : medge->v1;
+ int v2_orig = (mr->v_origindex) ? mr->v_origindex[medge->v2] : medge->v2;
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 0] = v1_orig;
+ ((uint32_t *)data)[mr->loop_len + e * 2 + 1] = v2_orig;
+}
+
+static void extract_vert_idx_lvert_mesh(const MeshRenderData *mr,
+ int v,
+ const MVert *UNUSED(mvert),
+ void *data)
+{
+ int v_idx = mr->lverts[v];
+ int v_orig = (mr->v_origindex) ? mr->v_origindex[v_idx] : v_idx;
+ ((uint32_t *)data)[mr->loop_len + mr->edge_loose_len * 2 + v] = v_orig;
+}
+
+static const MeshExtract extract_poly_idx = {
+ extract_select_idx_init,
+ NULL,
+ NULL,
+ extract_poly_idx_loop_bmesh,
+ extract_poly_idx_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ true,
+};
+
+static const MeshExtract extract_edge_idx = {
+ extract_select_idx_init,
+ NULL,
+ NULL,
+ extract_edge_idx_loop_bmesh,
+ extract_edge_idx_loop_mesh,
+ extract_edge_idx_ledge_bmesh,
+ extract_edge_idx_ledge_mesh,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ true,
+};
+
+static const MeshExtract extract_vert_idx = {
+ extract_select_idx_init,
+ NULL,
+ NULL,
+ extract_vert_idx_loop_bmesh,
+ extract_vert_idx_loop_mesh,
+ extract_vert_idx_ledge_bmesh,
+ extract_vert_idx_ledge_mesh,
+ extract_vert_idx_lvert_bmesh,
+ extract_vert_idx_lvert_mesh,
+ NULL,
+ 0,
+ true,
+};
+
+static void *extract_select_fdot_idx_init(const MeshRenderData *mr, void *buf)
+{
+ static GPUVertFormat format = {0};
+ if (format.attr_len == 0) {
+ /* TODO rename "color" to something more descriptive. */
+ GPU_vertformat_attr_add(&format, "color", GPU_COMP_U32, 1, GPU_FETCH_INT);
+ }
+ GPUVertBuf *vbo = buf;
+ GPU_vertbuf_init_with_format(vbo, &format);
+ GPU_vertbuf_data_alloc(vbo, mr->poly_len);
+ return vbo->data;
+}
+
+static void extract_fdot_idx_loop_bmesh(const MeshRenderData *UNUSED(mr),
+ int UNUSED(l),
+ BMLoop *loop,
+ void *data)
+{
+ ((uint32_t *)data)[BM_elem_index_get(loop->f)] = BM_elem_index_get(loop->f);
+}
+
+static void extract_fdot_idx_loop_mesh(const MeshRenderData *mr,
+ int UNUSED(l),
+ const MLoop *UNUSED(mloop),
+ int p,
+ const MPoly *UNUSED(mpoly),
+ void *data)
+{
+ ((uint32_t *)data)[p] = (mr->p_origindex) ? mr->p_origindex[p] : p;
+}
+
+static const MeshExtract extract_fdot_idx = {
+ extract_select_fdot_idx_init,
+ NULL,
+ NULL,
+ extract_fdot_idx_loop_bmesh,
+ extract_fdot_idx_loop_mesh,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ 0,
+ true,
+};
+
+/** \} */
+
+/* ---------------------------------------------------------------------- */
+/** \name Extract Loop
+ * \{ */
+
+typedef struct ExtractTaskData {
+ const MeshRenderData *mr;
+ const MeshExtract *extract;
+ eMRIterType iter_type;
+ int start, end;
+ /** Decremented each time a task is finished. */
+ int32_t *task_counter;
+ void *buf;
+ void *user_data;
+} ExtractTaskData;
+
+BLI_INLINE void mesh_extract_iter(const MeshRenderData *mr,
+ const eMRIterType iter_type,
+ int start,
+ int end,
+ const MeshExtract *extract,
+ void *user_data)
+{
+ switch (mr->extract_type) {
+ case MR_EXTRACT_BMESH:
+ if (iter_type & MR_ITER_LOOPTRI) {
+ int t_end = min_ii(mr->tri_len, end);
+ for (int t = start; t < t_end; t++) {
+ BMLoop **elt = &mr->edit_bmesh->looptris[t][0];
+ extract->iter_looptri_bm(mr, t, elt, user_data);
+ }
+ }
+ if (iter_type & MR_ITER_LOOP) {
+ int l_end = min_ii(mr->poly_len, end);
+ for (int f = start; f < l_end; f++) {
+ BMFace *efa = BM_face_at_index(mr->bm, f);
+ BMLoop *loop;
+ BMIter l_iter;
+ BM_ITER_ELEM (loop, &l_iter, efa, BM_LOOPS_OF_FACE) {
+ extract->iter_loop_bm(mr, BM_elem_index_get(loop), loop, user_data);
+ }
+ }
+ }
+ if (iter_type & MR_ITER_LEDGE) {
+ int le_end = min_ii(mr->edge_loose_len, end);
+ for (int e = start; e < le_end; e++) {
+ BMEdge *eed = BM_edge_at_index(mr->bm, mr->ledges[e]);
+ extract->iter_ledge_bm(mr, e, eed, user_data);
+ }
+ }
+ if (iter_type & MR_ITER_LVERT) {
+ int lv_end = min_ii(mr->vert_loose_len, end);
+ for (int v = start; v < lv_end; v++) {
+ BMVert *eve = BM_vert_at_index(mr->bm, mr->lverts[v]);
+ extract->iter_lvert_bm(mr, v, eve, user_data);
+ }
+ }
+ break;
+ case MR_EXTRACT_MAPPED:
+ case MR_EXTRACT_MESH:
+ if (iter_type & MR_ITER_LOOPTRI) {
+ int t_end = min_ii(mr->tri_len, end);
+ for (int t = start; t < t_end; t++) {
+ extract->iter_looptri(mr, t, &mr->mlooptri[t], user_data);
+ }
+ }
+ if (iter_type & MR_ITER_LOOP) {
+ int l_end = min_ii(mr->poly_len, end);
+ for (int p = start; p < l_end; p++) {
+ const MPoly *mpoly = &mr->mpoly[p];
+ int l = mpoly->loopstart;
+ for (int i = 0; i < mpoly->totloop; i++, l++) {
+ extract->iter_loop(mr, l, &mr->mloop[l], p, mpoly, user_data);
+ }
+ }
+ }
+ if (iter_type & MR_ITER_LEDGE) {
+ int le_end = min_ii(mr->edge_loose_len, end);
+ for (int e = start; e < le_end; e++) {
+ extract->iter_ledge(mr, e, &mr->medge[mr->ledges[e]], user_data);
+ }
+ }
+ if (iter_type & MR_ITER_LVERT) {
+ int lv_end = min_ii(mr->vert_loose_len, end);
+ for (int v = start; v < lv_end; v++) {
+ extract->iter_lvert(mr, v, &mr->mvert[mr->lverts[v]], user_data);
+ }
+ }
+ break;
+ }
+}
+
+static void extract_run(TaskPool *__restrict UNUSED(pool), void *taskdata, int UNUSED(threadid))
+{
+ ExtractTaskData *data = taskdata;
+ mesh_extract_iter(
+ data->mr, data->iter_type, data->start, data->end, data->extract, data->user_data);
+
+ /* If this is the last task, we do the finish function. */
+ int remainin_tasks = atomic_sub_and_fetch_int32(data->task_counter, 1);
+ if (remainin_tasks == 0 && data->extract->finish != NULL) {
+ data->extract->finish(data->mr, data->buf, data->user_data);
+ }
+}
+
+static void extract_range_task_create(
+ TaskPool *task_pool, ExtractTaskData *taskdata, const eMRIterType type, int start, int length)
+{
+ taskdata = MEM_dupallocN(taskdata);
+ atomic_add_and_fetch_int32(taskdata->task_counter, 1);
+ taskdata->iter_type = type;
+ taskdata->start = start;
+ taskdata->end = start + length;
+ BLI_task_pool_push(task_pool, extract_run, taskdata, true, TASK_PRIORITY_HIGH);
+}
+
+static void extract_task_create(TaskPool *task_pool,
+ const MeshRenderData *mr,
+ const MeshExtract *extract,
+ void *buf,
+ int32_t *task_counter)
+{
+ /* Divide extraction of the VBO/IBO into sensible chunks of works. */
+ ExtractTaskData *taskdata = MEM_mallocN(sizeof(*taskdata), "ExtractTaskData");
+ taskdata->mr = mr;
+ taskdata->extract = extract;
+ taskdata->buf = buf;
+ taskdata->user_data = extract->init(mr, buf);
+ taskdata->iter_type = mesh_extract_iter_type(extract);
+ taskdata->task_counter = task_counter;
+ taskdata->start = 0;
+ taskdata->end = INT_MAX;
+
+ /* Simple heuristic. */
+ const bool use_thread = (mr->loop_len + mr->loop_loose_len) > 8192;
+ if (use_thread && extract->use_threading) {
+ /* Divide task into sensible chunks. */
+ const int chunk_size = 8192;
+ if (taskdata->iter_type & MR_ITER_LOOPTRI) {
+ for (int i = 0; i < mr->tri_len; i += chunk_size) {
+ extract_range_task_create(task_pool, taskdata, MR_ITER_LOOPTRI, i, chunk_size);
+ }
+ }
+ if (taskdata->iter_type & MR_ITER_LOOP) {
+ for (int i = 0; i < mr->poly_len; i += chunk_size) {
+ extract_range_task_create(task_pool, taskdata, MR_ITER_LOOP, i, chunk_size);
+ }
+ }
+ if (taskdata->iter_type & MR_ITER_LEDGE) {
+ for (int i = 0; i < mr->edge_loose_len; i += chunk_size) {
+ extract_range_task_create(task_pool, taskdata, MR_ITER_LEDGE, i, chunk_size);
+ }
+ }
+ if (taskdata->iter_type & MR_ITER_LVERT) {
+ for (int i = 0; i < mr->vert_loose_len; i += chunk_size) {
+ extract_range_task_create(task_pool, taskdata, MR_ITER_LVERT, i, chunk_size);
+ }
+ }
+ MEM_freeN(taskdata);
+ }
+ else if (use_thread) {
+ /* One task for the whole VBO. */
+ (*task_counter)++;
+ BLI_task_pool_push(task_pool, extract_run, taskdata, true, TASK_PRIORITY_HIGH);
+ }
+ else {
+ /* Single threaded extraction. */
+ (*task_counter)++;
+ extract_run(NULL, taskdata, -1);
+ MEM_freeN(taskdata);
+ }
+}
+
+void mesh_buffer_cache_create_requested(MeshBatchCache *cache,
+ MeshBufferCache mbc,
+ Mesh *me,
+ const bool do_final,
+ const bool do_uvedit,
+ const bool use_subsurf_fdots,
+ const DRW_MeshCDMask *cd_layer_used,
+ const ToolSettings *ts,
+ const bool use_hide)
+{
+ eMRIterType iter_flag = 0;
+ eMRDataType data_flag = 0;
+
+#define TEST_ASSIGN(type, type_lowercase, name) \
+ do { \
+ if (DRW_TEST_ASSIGN_##type(mbc.type_lowercase.name)) { \
+ iter_flag |= mesh_extract_iter_type(&extract_##name); \
+ data_flag |= extract_##name.data_flag; \
+ } \
+ } while (0)
+
+ TEST_ASSIGN(VBO, vbo, pos_nor);
+ TEST_ASSIGN(VBO, vbo, lnor);
+ TEST_ASSIGN(VBO, vbo, uv);
+ TEST_ASSIGN(VBO, vbo, tan);
+ TEST_ASSIGN(VBO, vbo, vcol);
+ TEST_ASSIGN(VBO, vbo, orco);
+ TEST_ASSIGN(VBO, vbo, edge_fac);
+ TEST_ASSIGN(VBO, vbo, weights);
+ TEST_ASSIGN(VBO, vbo, edit_data);
+ TEST_ASSIGN(VBO, vbo, edituv_data);
+ TEST_ASSIGN(VBO, vbo, stretch_area);
+ TEST_ASSIGN(VBO, vbo, stretch_angle);
+ TEST_ASSIGN(VBO, vbo, mesh_analysis);
+ TEST_ASSIGN(VBO, vbo, fdots_pos);
+ TEST_ASSIGN(VBO, vbo, fdots_nor);
+ TEST_ASSIGN(VBO, vbo, fdots_uv);
+ TEST_ASSIGN(VBO, vbo, fdots_edituv_data);
+ TEST_ASSIGN(VBO, vbo, poly_idx);
+ TEST_ASSIGN(VBO, vbo, edge_idx);
+ TEST_ASSIGN(VBO, vbo, vert_idx);
+ TEST_ASSIGN(VBO, vbo, fdot_idx);
+
+ TEST_ASSIGN(IBO, ibo, tris);
+ TEST_ASSIGN(IBO, ibo, lines);
+ TEST_ASSIGN(IBO, ibo, points);
+ TEST_ASSIGN(IBO, ibo, fdots);
+ TEST_ASSIGN(IBO, ibo, lines_paint_mask);
+ TEST_ASSIGN(IBO, ibo, lines_adjacency);
+ TEST_ASSIGN(IBO, ibo, edituv_tris);
+ TEST_ASSIGN(IBO, ibo, edituv_lines);
+ TEST_ASSIGN(IBO, ibo, edituv_points);
+ TEST_ASSIGN(IBO, ibo, edituv_fdots);
+
+#undef TEST_ASSIGN
+
+#ifdef DEBUG_TIME
+ double rdata_start = PIL_check_seconds_timer();
+#endif
+
+ MeshRenderData *mr = mesh_render_data_create(
+ me, do_final, do_uvedit, iter_flag, data_flag, cd_layer_used, ts);
+ mr->cache = cache; /* HACK */
+ mr->use_hide = use_hide;
+ mr->use_subsurf_fdots = use_subsurf_fdots;
+ mr->use_final_mesh = do_final;
+
+#ifdef DEBUG_TIME
+ double rdata_end = PIL_check_seconds_timer();
+#endif
+
+ TaskScheduler *task_scheduler;
+ TaskPool *task_pool;
+
+ task_scheduler = BLI_task_scheduler_get();
+ task_pool = BLI_task_pool_create(task_scheduler, NULL);
+
+ size_t counters_size = (sizeof(mbc) / sizeof(void *)) * sizeof(int32_t);
+ int32_t *task_counters = MEM_callocN(counters_size, __func__);
+ int counter_used = 0;
+
+#define EXTRACT(buf, name) \
+ if (mbc.buf.name) { \
+ extract_task_create( \
+ task_pool, mr, &extract_##name, mbc.buf.name, &task_counters[counter_used++]); \
+ }
+
+ EXTRACT(vbo, pos_nor);
+ EXTRACT(vbo, lnor);
+ EXTRACT(vbo, uv);
+ EXTRACT(vbo, tan);
+ EXTRACT(vbo, vcol);
+ EXTRACT(vbo, orco);
+ EXTRACT(vbo, edge_fac);
+ EXTRACT(vbo, weights);
+ EXTRACT(vbo, edit_data);
+ EXTRACT(vbo, edituv_data);
+ EXTRACT(vbo, stretch_area);
+ EXTRACT(vbo, stretch_angle);
+ EXTRACT(vbo, mesh_analysis);
+ EXTRACT(vbo, fdots_pos);
+ EXTRACT(vbo, fdots_nor);
+ EXTRACT(vbo, fdots_uv);
+ EXTRACT(vbo, fdots_edituv_data);
+ EXTRACT(vbo, poly_idx);
+ EXTRACT(vbo, edge_idx);
+ EXTRACT(vbo, vert_idx);
+ EXTRACT(vbo, fdot_idx);
+
+ EXTRACT(ibo, tris);
+ EXTRACT(ibo, lines);
+ EXTRACT(ibo, points);
+ EXTRACT(ibo, fdots);
+ EXTRACT(ibo, lines_paint_mask);
+ EXTRACT(ibo, lines_adjacency);
+ EXTRACT(ibo, edituv_tris);
+ EXTRACT(ibo, edituv_lines);
+ EXTRACT(ibo, edituv_points);
+ EXTRACT(ibo, edituv_fdots);
+
+#undef EXTRACT
+
+ /* TODO(fclem) Ideally, we should have one global pool for all
+ * objects and wait for finish only before drawing when buffers
+ * need to be ready. */
+ BLI_task_pool_work_and_wait(task_pool);
+ BLI_task_pool_free(task_pool);
+
+ MEM_freeN(task_counters);
+
+ mesh_render_data_free(mr);
+
+#ifdef DEBUG_TIME
+ double end = PIL_check_seconds_timer();
+
+ static double avg = 0;
+ static double avg_fps = 0;
+ static double avg_rdata = 0;
+ static double end_prev = 0;
+
+ if (end_prev == 0) {
+ end_prev = end;
+ }
+
+ avg = avg * 0.95 + (end - rdata_end) * 0.05;
+ avg_fps = avg_fps * 0.95 + (end - end_prev) * 0.05;
+ avg_rdata = avg_rdata * 0.95 + (rdata_end - rdata_start) * 0.05;
+
+ printf(
+ "rdata %.0fms iter %.0fms (frame %.0fms)\n", avg_rdata * 1000, avg * 1000, avg_fps * 1000);
+
+ end_prev = end;
+#endif
+}
+
+/** \} */
diff --git a/source/blender/draw/intern/draw_cache_impl.h b/source/blender/draw/intern/draw_cache_impl.h
index 4dc58972ce6..3e33346c7d8 100644
--- a/source/blender/draw/intern/draw_cache_impl.h
+++ b/source/blender/draw/intern/draw_cache_impl.h
@@ -23,18 +23,14 @@
#ifndef __DRAW_CACHE_IMPL_H__
#define __DRAW_CACHE_IMPL_H__
-struct CurveCache;
struct GPUBatch;
struct GPUIndexBuf;
struct GPUMaterial;
-struct GPUTexture;
struct GPUVertBuf;
struct ListBase;
struct ModifierData;
struct PTCacheEdit;
struct ParticleSystem;
-struct SpaceImage;
-struct ToolSettings;
struct Curve;
struct Lattice;
@@ -119,7 +115,7 @@ struct GPUBatch *DRW_lattice_batch_cache_get_edit_verts(struct Lattice *lt);
/* Mesh */
void DRW_mesh_batch_cache_create_requested(struct Object *ob,
struct Mesh *me,
- const struct ToolSettings *ts,
+ const struct Scene *scene,
const bool is_paint_mode,
const bool use_hide);
@@ -143,6 +139,7 @@ struct GPUBatch *DRW_mesh_batch_cache_get_surface_weights(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edit_triangles(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edit_vertices(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edit_edges(struct Mesh *me);
+struct GPUBatch *DRW_mesh_batch_cache_get_edit_vnors(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edit_lnors(struct Mesh *me);
struct GPUBatch *DRW_mesh_batch_cache_get_edit_facedots(struct Mesh *me);
/* edit-mesh selection */
diff --git a/source/blender/draw/intern/draw_cache_impl_displist.c b/source/blender/draw/intern/draw_cache_impl_displist.c
index 90bbf996851..eef108b1f2f 100644
--- a/source/blender/draw/intern/draw_cache_impl_displist.c
+++ b/source/blender/draw/intern/draw_cache_impl_displist.c
@@ -66,7 +66,7 @@ static int dl_tri_len(const DispList *dl)
return 0;
}
-/* see: displist_get_allverts */
+/* see: displist_vert_coords_alloc */
static int curve_render_surface_vert_len_get(const ListBase *lb)
{
int vert_len = 0;
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index ba58dc3d9de..884d39343c6 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -64,313 +64,12 @@
#include "ED_uvedit.h"
#include "draw_cache_inline.h"
+#include "draw_cache_extract.h"
#include "draw_cache_impl.h" /* own include */
static void mesh_batch_cache_clear(Mesh *me);
-/* Vertex Group Selection and display options */
-typedef struct DRW_MeshWeightState {
- int defgroup_active;
- int defgroup_len;
-
- short flags;
- char alert_mode;
-
- /* Set of all selected bones for Multipaint. */
- bool *defgroup_sel; /* [defgroup_len] */
- int defgroup_sel_count;
-} DRW_MeshWeightState;
-
-typedef struct DRW_MeshCDMask {
- uint32_t uv : 8;
- uint32_t tan : 8;
- uint32_t vcol : 8;
- uint32_t orco : 1;
- uint32_t tan_orco : 1;
-} DRW_MeshCDMask;
-
-/* DRW_MeshWeightState.flags */
-enum {
- DRW_MESH_WEIGHT_STATE_MULTIPAINT = (1 << 0),
- DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE = (1 << 1),
-};
-
-/* ---------------------------------------------------------------------- */
-/** \name BMesh Inline Wrappers
- * \{ */
-
-/**
- * Wrapper for #BM_vert_find_first_loop_visible
- * since most of the time this can be accessed directly without a function call.
- */
-BLI_INLINE BMLoop *bm_vert_find_first_loop_visible_inline(BMVert *v)
-{
- if (v->e) {
- BMLoop *l = v->e->l;
- if (l && !BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) {
- return l->v == v ? l : l->next;
- }
- return BM_vert_find_first_loop_visible(v);
- }
- return NULL;
-}
-
-BLI_INLINE BMLoop *bm_edge_find_first_loop_visible_inline(BMEdge *e)
-{
- if (e->l) {
- BMLoop *l = e->l;
- if (!BM_elem_flag_test(l->f, BM_ELEM_HIDDEN)) {
- return l;
- }
- return BM_edge_find_first_loop_visible(e);
- }
- return NULL;
-}
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Mesh/BMesh Interface (direct access to basic data).
- * \{ */
-
-static int mesh_render_verts_len_get(Mesh *me)
-{
- return me->edit_mesh ? me->edit_mesh->bm->totvert : me->totvert;
-}
-
-static int mesh_render_edges_len_get(Mesh *me)
-{
- return me->edit_mesh ? me->edit_mesh->bm->totedge : me->totedge;
-}
-
-static int mesh_render_looptri_len_get(Mesh *me)
-{
- return me->edit_mesh ? me->edit_mesh->tottri : poly_to_tri_count(me->totpoly, me->totloop);
-}
-
-static int mesh_render_polys_len_get(Mesh *me)
-{
- return me->edit_mesh ? me->edit_mesh->bm->totface : me->totpoly;
-}
-
-static int mesh_render_mat_len_get(Mesh *me)
-{
- return MAX2(1, me->totcol);
-}
-
-static int UNUSED_FUNCTION(mesh_render_loops_len_get)(Mesh *me)
-{
- return me->edit_mesh ? me->edit_mesh->bm->totloop : me->totloop;
-}
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Mesh/BMesh Interface (indirect, partially cached access to complex data).
- * \{ */
-
-typedef struct EdgeAdjacentPolys {
- int count;
- int face_index[2];
-} EdgeAdjacentPolys;
-
-typedef struct EdgeAdjacentVerts {
- int vert_index[2]; /* -1 if none */
-} EdgeAdjacentVerts;
-
-typedef struct EdgeDrawAttr {
- uchar v_flag;
- uchar e_flag;
- uchar crease;
- uchar bweight;
-} EdgeDrawAttr;
-
-typedef struct MeshRenderData {
- int types;
-
- int vert_len;
- int edge_len;
- int tri_len;
- int loop_len;
- int poly_len;
- int mat_len;
- int loose_vert_len;
- int loose_edge_len;
-
- /* Support for mapped mesh data. */
- struct {
- /* Must be set if we want to get mapped data. */
- bool use;
- bool supported;
-
- Mesh *me_cage;
-
- int vert_len;
- int edge_len;
- int tri_len;
- int loop_len;
- int poly_len;
-
- int *loose_verts;
- int loose_vert_len;
-
- int *loose_edges;
- int loose_edge_len;
-
- /* origindex layers */
- int *v_origindex;
- int *e_origindex;
- int *l_origindex;
- int *p_origindex;
- } mapped;
-
- BMEditMesh *edit_bmesh;
- struct EditMeshData *edit_data;
- const ToolSettings *toolsettings;
-
- Mesh *me;
-
- MVert *mvert;
- const MEdge *medge;
- const MLoop *mloop;
- const MPoly *mpoly;
- float (*orco)[3]; /* vertex coordinates normalized to bounding box */
- bool is_orco_allocated;
- MDeformVert *dvert;
- MLoopUV *mloopuv;
- MLoopCol *mloopcol;
- float (*loop_normals)[3];
-
- /* CustomData 'cd' cache for efficient access. */
- struct {
- struct {
- MLoopUV **uv;
- MLoopCol **vcol;
- float (**tangent)[4];
-
- int uv_len;
- int uv_active;
- int uv_render;
- int uv_mask_active;
-
- int vcol_len;
- int vcol_active;
- int vcol_render;
-
- int tangent_len;
- int tangent_active;
- int tangent_render;
-
- bool *auto_vcol;
- } layers;
-
- /* Custom-data offsets (only needed for BMesh access) */
- struct {
- int crease;
- int bweight;
- int *uv;
- int *vcol;
-#ifdef WITH_FREESTYLE
- int freestyle_edge;
- int freestyle_face;
-#endif
- } offset;
-
- struct {
- char (*auto_mix)[32];
- char (*uv)[32];
- char (*vcol)[32];
- char (*tangent)[32];
- } uuid;
-
- /* for certain cases we need an output loop-data storage (bmesh tangents) */
- struct {
- CustomData ldata;
- /* grr, special case variable (use in place of 'dm->tangent_mask') */
- short tangent_mask;
- } output;
- } cd;
-
- BMVert *eve_act;
- BMEdge *eed_act;
- BMFace *efa_act;
- BMFace *efa_act_uv;
-
- /* Data created on-demand (usually not for bmesh-based data). */
- EdgeAdjacentPolys *edges_adjacent_polys;
- MLoopTri *mlooptri;
- int *loose_edges;
- int *loose_verts;
-
- float (*poly_normals)[3];
- float *vert_weight;
- char (*vert_color)[3];
- GPUPackedNormal *poly_normals_pack;
- GPUPackedNormal *vert_normals_pack;
- bool *edge_select_bool;
- bool *edge_visible_bool;
-} MeshRenderData;
-
-typedef enum eMRDataType {
- MR_DATATYPE_VERT = 1 << 0,
- MR_DATATYPE_EDGE = 1 << 1,
- MR_DATATYPE_LOOPTRI = 1 << 2,
- MR_DATATYPE_LOOP = 1 << 3,
- MR_DATATYPE_POLY = 1 << 4,
- MR_DATATYPE_OVERLAY = 1 << 5,
- MR_DATATYPE_SHADING = 1 << 6,
- MR_DATATYPE_DVERT = 1 << 7,
- MR_DATATYPE_LOOPCOL = 1 << 8,
- MR_DATATYPE_LOOPUV = 1 << 9,
- MR_DATATYPE_LOOSE_VERT = 1 << 10,
- MR_DATATYPE_LOOSE_EDGE = 1 << 11,
- MR_DATATYPE_LOOP_NORMALS = 1 << 12,
-} eMRDataType;
-
-#define MR_DATATYPE_VERT_LOOP_POLY (MR_DATATYPE_VERT | MR_DATATYPE_POLY | MR_DATATYPE_LOOP)
-#define MR_DATATYPE_VERT_LOOP_TRI_POLY (MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_LOOPTRI)
-#define MR_DATATYPE_LOOSE_VERT_EGDE (MR_DATATYPE_LOOSE_VERT | MR_DATATYPE_LOOSE_EDGE)
-
-/**
- * These functions look like they would be slow but they will typically return true on the first
- * iteration. Only false when all attached elements are hidden.
- */
-static bool bm_vert_has_visible_edge(const BMVert *v)
-{
- const BMEdge *e_iter, *e_first;
-
- e_iter = e_first = v->e;
- do {
- if (!BM_elem_flag_test(e_iter, BM_ELEM_HIDDEN)) {
- return true;
- }
- } while ((e_iter = BM_DISK_EDGE_NEXT(e_iter, v)) != e_first);
- return false;
-}
-
-static bool bm_edge_has_visible_face(const BMEdge *e)
-{
- const BMLoop *l_iter, *l_first;
- l_iter = l_first = e->l;
- do {
- if (!BM_elem_flag_test(l_iter->f, BM_ELEM_HIDDEN)) {
- return true;
- }
- } while ((l_iter = l_iter->radial_next) != l_first);
- return false;
-}
-
-BLI_INLINE bool bm_vert_is_loose_and_visible(const BMVert *v)
-{
- return (!BM_elem_flag_test(v, BM_ELEM_HIDDEN) && (v->e == NULL || !bm_vert_has_visible_edge(v)));
-}
-
-BLI_INLINE bool bm_edge_is_loose_and_visible(const BMEdge *e)
-{
- return (!BM_elem_flag_test(e, BM_ELEM_HIDDEN) && (e->l == NULL || !bm_edge_has_visible_face(e)));
-}
-
/* Return true is all layers in _b_ are inside _a_. */
BLI_INLINE bool mesh_cd_layers_type_overlap(DRW_MeshCDMask a, DRW_MeshCDMask b)
{
@@ -523,43 +222,6 @@ static DRW_MeshCDMask mesh_cd_calc_used_gpu_layers(const Mesh *me,
return cd_used;
}
-static void mesh_render_calc_normals_loop_and_poly(const Mesh *me,
- const float split_angle,
- MeshRenderData *rdata)
-{
- BLI_assert((me->flag & ME_AUTOSMOOTH) != 0);
-
- int totloop = me->totloop;
- int totpoly = me->totpoly;
- float(*loop_normals)[3] = MEM_mallocN(sizeof(*loop_normals) * totloop, __func__);
- float(*poly_normals)[3] = MEM_mallocN(sizeof(*poly_normals) * totpoly, __func__);
- short(*clnors)[2] = CustomData_get_layer(&me->ldata, CD_CUSTOMLOOPNORMAL);
-
- BKE_mesh_calc_normals_poly(
- me->mvert, NULL, me->totvert, me->mloop, me->mpoly, totloop, totpoly, poly_normals, false);
-
- BKE_mesh_normals_loop_split(me->mvert,
- me->totvert,
- me->medge,
- me->totedge,
- me->mloop,
- loop_normals,
- totloop,
- me->mpoly,
- poly_normals,
- totpoly,
- true,
- split_angle,
- NULL,
- clnors,
- NULL);
-
- rdata->loop_len = totloop;
- rdata->poly_len = totpoly;
- rdata->loop_normals = loop_normals;
- rdata->poly_normals = poly_normals;
-}
-
static void mesh_cd_extract_auto_layers_names_and_srgb(Mesh *me,
DRW_MeshCDMask cd_used,
char **r_auto_layers_names,
@@ -582,10 +244,12 @@ static void mesh_cd_extract_auto_layers_names_and_srgb(Mesh *me,
for (int i = 0; i < uv_len; i++) {
if ((cd_used.uv & (1 << i)) != 0) {
const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i);
- uint hash = BLI_ghashutil_strhash_p(name);
+ char safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ GPU_vertformat_safe_attrib_name(name, safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
+ auto_ofs += BLI_snprintf_rlen(
+ auto_names + auto_ofs, auto_names_len - auto_ofs, "ba%s", safe_name);
/* +1 to include '\0' terminator. */
- auto_ofs += 1 + BLI_snprintf_rlen(
- auto_names + auto_ofs, auto_names_len - auto_ofs, "ba%u", hash);
+ auto_ofs += 1;
}
}
@@ -595,10 +259,12 @@ static void mesh_cd_extract_auto_layers_names_and_srgb(Mesh *me,
const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i);
/* We only do vcols that are not overridden by a uv layer with same name. */
if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, name) == -1) {
- uint hash = BLI_ghashutil_strhash_p(name);
+ char safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ GPU_vertformat_safe_attrib_name(name, safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
+ auto_ofs += BLI_snprintf_rlen(
+ auto_names + auto_ofs, auto_names_len - auto_ofs, "ba%s", safe_name);
/* +1 to include '\0' terminator. */
- auto_ofs += 1 + BLI_snprintf_rlen(
- auto_names + auto_ofs, auto_names_len - auto_ofs, "ba%u", hash);
+ auto_ofs += 1;
auto_is_srgb[auto_is_srgb_ofs] = true;
auto_is_srgb_ofs++;
}
@@ -617,1265 +283,6 @@ static void mesh_cd_extract_auto_layers_names_and_srgb(Mesh *me,
*r_auto_layers_len = auto_is_srgb_ofs;
}
-/**
- * TODO(campbell): 'gpumat_array' may include materials linked to the object.
- * While not default, object materials should be supported.
- * Although this only impacts the data that's generated, not the materials that display.
- */
-static MeshRenderData *mesh_render_data_create_ex(Mesh *me,
- const int types,
- const DRW_MeshCDMask *cd_used,
- const ToolSettings *ts)
-{
- MeshRenderData *rdata = MEM_callocN(sizeof(*rdata), __func__);
- rdata->types = types;
- rdata->toolsettings = ts;
- rdata->mat_len = mesh_render_mat_len_get(me);
-
- CustomData_reset(&rdata->cd.output.ldata);
-
- const bool is_auto_smooth = (me->flag & ME_AUTOSMOOTH) != 0;
- const float split_angle = is_auto_smooth ? me->smoothresh : (float)M_PI;
-
- if (me->edit_mesh) {
- BMEditMesh *embm = me->edit_mesh;
- BMesh *bm = embm->bm;
-
- rdata->edit_bmesh = embm;
- rdata->edit_data = me->runtime.edit_data;
-
- if (embm->mesh_eval_cage && (embm->mesh_eval_cage->runtime.is_original == false)) {
- Mesh *me_cage = embm->mesh_eval_cage;
-
- rdata->mapped.me_cage = me_cage;
- if (types & MR_DATATYPE_VERT) {
- rdata->mapped.vert_len = me_cage->totvert;
- }
- if (types & MR_DATATYPE_EDGE) {
- rdata->mapped.edge_len = me_cage->totedge;
- }
- if (types & MR_DATATYPE_LOOP) {
- rdata->mapped.loop_len = me_cage->totloop;
- }
- if (types & MR_DATATYPE_POLY) {
- rdata->mapped.poly_len = me_cage->totpoly;
- }
- if (types & MR_DATATYPE_LOOPTRI) {
- rdata->mapped.tri_len = poly_to_tri_count(me_cage->totpoly, me_cage->totloop);
- }
- if (types & MR_DATATYPE_LOOPUV) {
- rdata->mloopuv = CustomData_get_layer(&me_cage->ldata, CD_MLOOPUV);
- }
-
- rdata->mapped.v_origindex = CustomData_get_layer(&me_cage->vdata, CD_ORIGINDEX);
- rdata->mapped.e_origindex = CustomData_get_layer(&me_cage->edata, CD_ORIGINDEX);
- rdata->mapped.l_origindex = CustomData_get_layer(&me_cage->ldata, CD_ORIGINDEX);
- rdata->mapped.p_origindex = CustomData_get_layer(&me_cage->pdata, CD_ORIGINDEX);
- rdata->mapped.supported = (rdata->mapped.v_origindex || rdata->mapped.e_origindex ||
- rdata->mapped.p_origindex);
- }
-
- int bm_ensure_types = 0;
- if (types & MR_DATATYPE_VERT) {
- rdata->vert_len = bm->totvert;
- bm_ensure_types |= BM_VERT;
- }
- if (types & MR_DATATYPE_EDGE) {
- rdata->edge_len = bm->totedge;
- bm_ensure_types |= BM_EDGE;
- }
- if (types & MR_DATATYPE_LOOPTRI) {
- bm_ensure_types |= BM_LOOP;
- }
- if (types & MR_DATATYPE_LOOP) {
- rdata->loop_len = bm->totloop;
- bm_ensure_types |= BM_LOOP;
- }
- if (types & MR_DATATYPE_POLY) {
- rdata->poly_len = bm->totface;
- bm_ensure_types |= BM_FACE;
- }
- if (types & MR_DATATYPE_LOOP_NORMALS) {
- BLI_assert(types & MR_DATATYPE_LOOP);
- if (is_auto_smooth) {
- rdata->loop_normals = MEM_mallocN(sizeof(*rdata->loop_normals) * bm->totloop, __func__);
- int cd_loop_clnors_offset = CustomData_get_offset(&bm->ldata, CD_CUSTOMLOOPNORMAL);
- BM_loops_calc_normal_vcos(bm,
- NULL,
- NULL,
- NULL,
- true,
- split_angle,
- rdata->loop_normals,
- NULL,
- NULL,
- cd_loop_clnors_offset,
- false);
- }
- }
- if (types & MR_DATATYPE_OVERLAY) {
- rdata->efa_act_uv = EDBM_uv_active_face_get(embm, false, false);
- rdata->efa_act = BM_mesh_active_face_get(bm, false, true);
- rdata->eed_act = BM_mesh_active_edge_get(bm);
- rdata->eve_act = BM_mesh_active_vert_get(bm);
- rdata->cd.offset.crease = CustomData_get_offset(&bm->edata, CD_CREASE);
- rdata->cd.offset.bweight = CustomData_get_offset(&bm->edata, CD_BWEIGHT);
-
-#ifdef WITH_FREESTYLE
- rdata->cd.offset.freestyle_edge = CustomData_get_offset(&bm->edata, CD_FREESTYLE_EDGE);
- rdata->cd.offset.freestyle_face = CustomData_get_offset(&bm->pdata, CD_FREESTYLE_FACE);
-#endif
- }
- if (types & (MR_DATATYPE_DVERT)) {
- bm_ensure_types |= BM_VERT;
- }
- if (rdata->edit_data != NULL) {
- bm_ensure_types |= BM_VERT;
- }
-
- BM_mesh_elem_index_ensure(bm, bm_ensure_types);
- BM_mesh_elem_table_ensure(bm, bm_ensure_types & ~BM_LOOP);
-
- if (types & MR_DATATYPE_LOOPTRI) {
- /* Edit mode ensures this is valid, no need to calculate. */
- BLI_assert((bm->totloop == 0) || (embm->looptris != NULL));
- int tottri = embm->tottri;
- MLoopTri *mlooptri = MEM_mallocN(sizeof(*rdata->mlooptri) * embm->tottri, __func__);
- for (int index = 0; index < tottri; index++) {
- BMLoop **bmtri = embm->looptris[index];
- MLoopTri *mtri = &mlooptri[index];
- mtri->tri[0] = BM_elem_index_get(bmtri[0]);
- mtri->tri[1] = BM_elem_index_get(bmtri[1]);
- mtri->tri[2] = BM_elem_index_get(bmtri[2]);
- }
- rdata->mlooptri = mlooptri;
- rdata->tri_len = tottri;
- }
-
- if (types & MR_DATATYPE_LOOSE_VERT) {
- BLI_assert(types & MR_DATATYPE_VERT);
- rdata->loose_vert_len = 0;
-
- {
- int *lverts = MEM_mallocN(rdata->vert_len * sizeof(int), __func__);
- BLI_assert((bm->elem_table_dirty & BM_VERT) == 0);
- for (int i = 0; i < bm->totvert; i++) {
- const BMVert *eve = BM_vert_at_index(bm, i);
- if (bm_vert_is_loose_and_visible(eve)) {
- lverts[rdata->loose_vert_len++] = i;
- }
- }
- rdata->loose_verts = MEM_reallocN(lverts, rdata->loose_vert_len * sizeof(int));
- }
-
- if (rdata->mapped.supported) {
- Mesh *me_cage = embm->mesh_eval_cage;
- rdata->mapped.loose_vert_len = 0;
-
- if (rdata->loose_vert_len) {
- int *lverts = MEM_mallocN(me_cage->totvert * sizeof(int), __func__);
- const int *v_origindex = rdata->mapped.v_origindex;
- for (int i = 0; i < me_cage->totvert; i++) {
- const int v_orig = v_origindex[i];
- if (v_orig != ORIGINDEX_NONE) {
- BMVert *eve = BM_vert_at_index(bm, v_orig);
- if (bm_vert_is_loose_and_visible(eve)) {
- lverts[rdata->mapped.loose_vert_len++] = i;
- }
- }
- }
- rdata->mapped.loose_verts = MEM_reallocN(lverts,
- rdata->mapped.loose_vert_len * sizeof(int));
- }
- }
- }
-
- if (types & MR_DATATYPE_LOOSE_EDGE) {
- BLI_assert(types & MR_DATATYPE_EDGE);
- rdata->loose_edge_len = 0;
-
- {
- int *ledges = MEM_mallocN(rdata->edge_len * sizeof(int), __func__);
- BLI_assert((bm->elem_table_dirty & BM_EDGE) == 0);
- for (int i = 0; i < bm->totedge; i++) {
- const BMEdge *eed = BM_edge_at_index(bm, i);
- if (bm_edge_is_loose_and_visible(eed)) {
- ledges[rdata->loose_edge_len++] = i;
- }
- }
- rdata->loose_edges = MEM_reallocN(ledges, rdata->loose_edge_len * sizeof(int));
- }
-
- if (rdata->mapped.supported) {
- Mesh *me_cage = embm->mesh_eval_cage;
- rdata->mapped.loose_edge_len = 0;
-
- if (rdata->loose_edge_len) {
- int *ledges = MEM_mallocN(me_cage->totedge * sizeof(int), __func__);
- const int *e_origindex = rdata->mapped.e_origindex;
- for (int i = 0; i < me_cage->totedge; i++) {
- const int e_orig = e_origindex[i];
- if (e_orig != ORIGINDEX_NONE) {
- BMEdge *eed = BM_edge_at_index(bm, e_orig);
- if (bm_edge_is_loose_and_visible(eed)) {
- ledges[rdata->mapped.loose_edge_len++] = i;
- }
- }
- }
- rdata->mapped.loose_edges = MEM_reallocN(ledges,
- rdata->mapped.loose_edge_len * sizeof(int));
- }
- }
- }
- }
- else {
- rdata->me = me;
-
- if (types & (MR_DATATYPE_VERT)) {
- rdata->vert_len = me->totvert;
- rdata->mvert = CustomData_get_layer(&me->vdata, CD_MVERT);
- }
- if (types & (MR_DATATYPE_EDGE)) {
- rdata->edge_len = me->totedge;
- rdata->medge = CustomData_get_layer(&me->edata, CD_MEDGE);
- }
- if (types & MR_DATATYPE_LOOPTRI) {
- const int tri_len = rdata->tri_len = poly_to_tri_count(me->totpoly, me->totloop);
- MLoopTri *mlooptri = MEM_mallocN(sizeof(*mlooptri) * tri_len, __func__);
- BKE_mesh_recalc_looptri(me->mloop, me->mpoly, me->mvert, me->totloop, me->totpoly, mlooptri);
- rdata->mlooptri = mlooptri;
- }
- if (types & MR_DATATYPE_LOOP) {
- rdata->loop_len = me->totloop;
- rdata->mloop = CustomData_get_layer(&me->ldata, CD_MLOOP);
- }
- if (types & MR_DATATYPE_LOOP_NORMALS) {
- BLI_assert(types & MR_DATATYPE_LOOP);
- if (is_auto_smooth) {
- mesh_render_calc_normals_loop_and_poly(me, split_angle, rdata);
- }
- }
- if (types & MR_DATATYPE_POLY) {
- rdata->poly_len = me->totpoly;
- rdata->mpoly = CustomData_get_layer(&me->pdata, CD_MPOLY);
- }
- if (types & MR_DATATYPE_DVERT) {
- rdata->vert_len = me->totvert;
- rdata->dvert = CustomData_get_layer(&me->vdata, CD_MDEFORMVERT);
- }
- if (types & MR_DATATYPE_LOOPCOL) {
- rdata->loop_len = me->totloop;
- rdata->mloopcol = CustomData_get_layer(&me->ldata, CD_MLOOPCOL);
- }
- if (types & MR_DATATYPE_LOOPUV) {
- rdata->loop_len = me->totloop;
- rdata->mloopuv = CustomData_get_layer(&me->ldata, CD_MLOOPUV);
- }
- }
-
- if (types & MR_DATATYPE_SHADING) {
- CustomData *cd_vdata, *cd_ldata;
-
- BLI_assert(cd_used != NULL);
-
- if (me->edit_mesh) {
- BMesh *bm = me->edit_mesh->bm;
- cd_vdata = &bm->vdata;
- cd_ldata = &bm->ldata;
- }
- else {
- cd_vdata = &me->vdata;
- cd_ldata = &me->ldata;
- }
-
- rdata->cd.layers.uv_active = CustomData_get_active_layer(cd_ldata, CD_MLOOPUV);
- rdata->cd.layers.uv_render = CustomData_get_render_layer(cd_ldata, CD_MLOOPUV);
- rdata->cd.layers.uv_mask_active = CustomData_get_stencil_layer(cd_ldata, CD_MLOOPUV);
- rdata->cd.layers.vcol_active = CustomData_get_active_layer(cd_ldata, CD_MLOOPCOL);
- rdata->cd.layers.vcol_render = CustomData_get_render_layer(cd_ldata, CD_MLOOPCOL);
- rdata->cd.layers.tangent_active = rdata->cd.layers.uv_active;
- rdata->cd.layers.tangent_render = rdata->cd.layers.uv_render;
-
-#define CD_VALIDATE_ACTIVE_LAYER(active_index, used) \
- if ((active_index != -1) && (used & (1 << active_index)) == 0) { \
- active_index = -1; \
- } \
- ((void)0)
-
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.uv_active, cd_used->uv);
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.uv_render, cd_used->uv);
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.uv_mask_active, cd_used->uv);
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.tangent_active, cd_used->tan);
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.tangent_render, cd_used->tan);
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.vcol_active, cd_used->vcol);
- CD_VALIDATE_ACTIVE_LAYER(rdata->cd.layers.vcol_render, cd_used->vcol);
-
-#undef CD_VALIDATE_ACTIVE_LAYER
-
- rdata->is_orco_allocated = false;
- if (cd_used->orco != 0) {
- rdata->orco = CustomData_get_layer(cd_vdata, CD_ORCO);
- /* If orco is not available compute it ourselves */
- if (!rdata->orco) {
- rdata->is_orco_allocated = true;
- if (me->edit_mesh) {
- BMesh *bm = me->edit_mesh->bm;
- rdata->orco = MEM_mallocN(sizeof(*rdata->orco) * rdata->vert_len, "orco mesh");
- BLI_assert((bm->elem_table_dirty & BM_VERT) == 0);
- for (int i = 0; i < bm->totvert; i++) {
- copy_v3_v3(rdata->orco[i], BM_vert_at_index(bm, i)->co);
- }
- BKE_mesh_orco_verts_transform(me, rdata->orco, rdata->vert_len, 0);
- }
- else {
- rdata->orco = MEM_mallocN(sizeof(*rdata->orco) * rdata->vert_len, "orco mesh");
- MVert *mvert = rdata->mvert;
- for (int a = 0; a < rdata->vert_len; a++, mvert++) {
- copy_v3_v3(rdata->orco[a], mvert->co);
- }
- BKE_mesh_orco_verts_transform(me, rdata->orco, rdata->vert_len, 0);
- }
- }
- }
- else {
- rdata->orco = NULL;
- }
-
- /* don't access mesh directly, instead use vars taken from BMesh or Mesh */
-#define me DONT_USE_THIS
-#ifdef me /* quiet warning */
-#endif
- struct {
- uint uv_len;
- uint vcol_len;
- } cd_layers_src = {
- .uv_len = CustomData_number_of_layers(cd_ldata, CD_MLOOPUV),
- .vcol_len = CustomData_number_of_layers(cd_ldata, CD_MLOOPCOL),
- };
-
- rdata->cd.layers.uv_len = min_ii(cd_layers_src.uv_len, count_bits_i(cd_used->uv));
- rdata->cd.layers.tangent_len = count_bits_i(cd_used->tan) + cd_used->tan_orco;
- rdata->cd.layers.vcol_len = min_ii(cd_layers_src.vcol_len, count_bits_i(cd_used->vcol));
-
- rdata->cd.layers.uv = MEM_mallocN(sizeof(*rdata->cd.layers.uv) * rdata->cd.layers.uv_len,
- __func__);
- rdata->cd.layers.vcol = MEM_mallocN(sizeof(*rdata->cd.layers.vcol) * rdata->cd.layers.vcol_len,
- __func__);
- rdata->cd.layers.tangent = MEM_mallocN(
- sizeof(*rdata->cd.layers.tangent) * rdata->cd.layers.tangent_len, __func__);
-
- rdata->cd.uuid.uv = MEM_mallocN(sizeof(*rdata->cd.uuid.uv) * rdata->cd.layers.uv_len,
- __func__);
- rdata->cd.uuid.vcol = MEM_mallocN(sizeof(*rdata->cd.uuid.vcol) * rdata->cd.layers.vcol_len,
- __func__);
- rdata->cd.uuid.tangent = MEM_mallocN(
- sizeof(*rdata->cd.uuid.tangent) * rdata->cd.layers.tangent_len, __func__);
-
- rdata->cd.offset.uv = MEM_mallocN(sizeof(*rdata->cd.offset.uv) * rdata->cd.layers.uv_len,
- __func__);
- rdata->cd.offset.vcol = MEM_mallocN(sizeof(*rdata->cd.offset.vcol) * rdata->cd.layers.vcol_len,
- __func__);
-
- /* Allocate max */
- rdata->cd.layers.auto_vcol = MEM_callocN(
- sizeof(*rdata->cd.layers.auto_vcol) * rdata->cd.layers.vcol_len, __func__);
- rdata->cd.uuid.auto_mix = MEM_mallocN(
- sizeof(*rdata->cd.uuid.auto_mix) * (rdata->cd.layers.vcol_len + rdata->cd.layers.uv_len),
- __func__);
-
- /* XXX FIXME XXX */
- /* We use a hash to identify each data layer based on its name.
- * Gawain then search for this name in the current shader and bind if it exists.
- * NOTE : This is prone to hash collision.
- * One solution to hash collision would be to format the cd layer name
- * to a safe glsl var name, but without name clash.
- * NOTE 2 : Replicate changes to code_generate_vertex_new() in gpu_codegen.c */
- if (rdata->cd.layers.vcol_len != 0) {
- int act_vcol = rdata->cd.layers.vcol_active;
- int ren_vcol = rdata->cd.layers.vcol_render;
- for (int i_src = 0, i_dst = 0; i_src < cd_layers_src.vcol_len; i_src++, i_dst++) {
- if ((cd_used->vcol & (1 << i_src)) == 0) {
- /* This is a non-used VCol slot. Skip. */
- i_dst--;
- if (rdata->cd.layers.vcol_active >= i_src) {
- act_vcol--;
- }
- if (rdata->cd.layers.vcol_render >= i_src) {
- ren_vcol--;
- }
- }
- else {
- const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPCOL, i_src);
- uint hash = BLI_ghashutil_strhash_p(name);
- BLI_snprintf(rdata->cd.uuid.vcol[i_dst], sizeof(*rdata->cd.uuid.vcol), "c%u", hash);
- rdata->cd.layers.vcol[i_dst] = CustomData_get_layer_n(cd_ldata, CD_MLOOPCOL, i_src);
- if (rdata->edit_bmesh) {
- rdata->cd.offset.vcol[i_dst] = CustomData_get_n_offset(
- &rdata->edit_bmesh->bm->ldata, CD_MLOOPCOL, i_src);
- }
-
- /* Gather number of auto layers. */
- /* We only do vcols that are not overridden by uvs */
- if (CustomData_get_named_layer_index(cd_ldata, CD_MLOOPUV, name) == -1) {
- BLI_snprintf(rdata->cd.uuid.auto_mix[rdata->cd.layers.uv_len + i_dst],
- sizeof(*rdata->cd.uuid.auto_mix),
- "a%u",
- hash);
- rdata->cd.layers.auto_vcol[i_dst] = true;
- }
- }
- }
- /* Actual active Vcol slot inside vcol layers used for shading. */
- if (rdata->cd.layers.vcol_active != -1) {
- rdata->cd.layers.vcol_active = act_vcol;
- }
- if (rdata->cd.layers.vcol_render != -1) {
- rdata->cd.layers.vcol_render = ren_vcol;
- }
- }
-
- /* Start Fresh */
- CustomData_free_layers(cd_ldata, CD_TANGENT, rdata->loop_len);
- CustomData_free_layers(cd_ldata, CD_MLOOPTANGENT, rdata->loop_len);
-
- if (rdata->cd.layers.uv_len != 0) {
- int ren_uv = rdata->cd.layers.uv_render;
- int act_uv = rdata->cd.layers.uv_active;
- for (int i_src = 0, i_dst = 0; i_src < cd_layers_src.uv_len; i_src++, i_dst++) {
- if ((cd_used->uv & (1 << i_src)) == 0) {
- /* This is a non-used UV slot. Skip. */
- i_dst--;
- if (rdata->cd.layers.uv_render >= i_src) {
- ren_uv--;
- }
- if (rdata->cd.layers.uv_active >= i_src) {
- act_uv--;
- }
- }
- else {
- const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i_src);
- uint hash = BLI_ghashutil_strhash_p(name);
-
- BLI_snprintf(rdata->cd.uuid.uv[i_dst], sizeof(*rdata->cd.uuid.uv), "u%u", hash);
- rdata->cd.layers.uv[i_dst] = CustomData_get_layer_n(cd_ldata, CD_MLOOPUV, i_src);
- if (rdata->edit_bmesh) {
- rdata->cd.offset.uv[i_dst] = CustomData_get_n_offset(
- &rdata->edit_bmesh->bm->ldata, CD_MLOOPUV, i_src);
- }
- BLI_snprintf(
- rdata->cd.uuid.auto_mix[i_dst], sizeof(*rdata->cd.uuid.auto_mix), "a%u", hash);
- }
- }
- /* Actual active / Render UV slot inside uv layers used for shading. */
- if (rdata->cd.layers.uv_render != -1) {
- rdata->cd.layers.uv_render = ren_uv;
- }
- if (rdata->cd.layers.uv_active != -1) {
- rdata->cd.layers.uv_active = act_uv;
- }
- }
-
- if (rdata->cd.layers.tangent_len != 0) {
-
- /* -------------------------------------------------------------------- */
- /* Pre-calculate tangents into 'rdata->cd.output.ldata' */
-
- BLI_assert(!CustomData_has_layer(&rdata->cd.output.ldata, CD_TANGENT));
-
- /* Tangent Names */
- char tangent_names[MAX_MTFACE][MAX_NAME];
- for (int i_src = 0, i_dst = 0; i_src < cd_layers_src.uv_len; i_src++, i_dst++) {
- if ((cd_used->tan & (1 << i_src)) == 0) {
- i_dst--;
- }
- else {
- BLI_strncpy(tangent_names[i_dst],
- CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i_src),
- MAX_NAME);
- }
- }
-
- /* If tangent from orco is requested, decrement tangent_len */
- int actual_tangent_len = (cd_used->tan_orco != 0) ? rdata->cd.layers.tangent_len - 1 :
- rdata->cd.layers.tangent_len;
- if (rdata->edit_bmesh) {
- BMEditMesh *em = rdata->edit_bmesh;
- BMesh *bm = em->bm;
-
- if (is_auto_smooth && rdata->loop_normals == NULL) {
- /* Should we store the previous array of `loop_normals` in somewhere? */
- rdata->loop_len = bm->totloop;
- rdata->loop_normals = MEM_mallocN(sizeof(*rdata->loop_normals) * rdata->loop_len,
- __func__);
- BM_loops_calc_normal_vcos(
- bm, NULL, NULL, NULL, true, split_angle, rdata->loop_normals, NULL, NULL, -1, false);
- }
-
- bool calc_active_tangent = false;
-
- BKE_editmesh_loop_tangent_calc(em,
- calc_active_tangent,
- tangent_names,
- actual_tangent_len,
- rdata->poly_normals,
- rdata->loop_normals,
- rdata->orco,
- &rdata->cd.output.ldata,
- bm->totloop,
- &rdata->cd.output.tangent_mask);
- }
- else {
-#undef me
-
- if (is_auto_smooth && rdata->loop_normals == NULL) {
- /* Should we store the previous array of `loop_normals` in CustomData? */
- mesh_render_calc_normals_loop_and_poly(me, split_angle, rdata);
- }
-
- bool calc_active_tangent = false;
-
- BKE_mesh_calc_loop_tangent_ex(me->mvert,
- me->mpoly,
- me->totpoly,
- me->mloop,
- rdata->mlooptri,
- rdata->tri_len,
- cd_ldata,
- calc_active_tangent,
- tangent_names,
- actual_tangent_len,
- rdata->poly_normals,
- rdata->loop_normals,
- rdata->orco,
- &rdata->cd.output.ldata,
- me->totloop,
- &rdata->cd.output.tangent_mask);
-
- /* If we store tangents in the mesh, set temporary. */
-#if 0
- CustomData_set_layer_flag(cd_ldata, CD_TANGENT, CD_FLAG_TEMPORARY);
-#endif
-
-#define me DONT_USE_THIS
-#ifdef me /* quiet warning */
-#endif
- }
-
- /* End tangent calculation */
- /* -------------------------------------------------------------------- */
-
- BLI_assert(CustomData_number_of_layers(&rdata->cd.output.ldata, CD_TANGENT) ==
- rdata->cd.layers.tangent_len);
-
- int i_dst = 0;
- int act_tan = rdata->cd.layers.tangent_active;
- int ren_tan = rdata->cd.layers.tangent_render;
- for (int i_src = 0; i_src < cd_layers_src.uv_len; i_src++, i_dst++) {
- if ((cd_used->tan & (1 << i_src)) == 0) {
- i_dst--;
- if (rdata->cd.layers.tangent_render >= i_src) {
- ren_tan--;
- }
- if (rdata->cd.layers.tangent_active >= i_src) {
- act_tan--;
- }
- }
- else {
- const char *name = CustomData_get_layer_name(cd_ldata, CD_MLOOPUV, i_src);
- uint hash = BLI_ghashutil_strhash_p(name);
-
- BLI_snprintf(
- rdata->cd.uuid.tangent[i_dst], sizeof(*rdata->cd.uuid.tangent), "t%u", hash);
-
- /* Done adding tangents. */
-
- /* note: BKE_editmesh_loop_tangent_calc calculates 'CD_TANGENT',
- * not 'CD_MLOOPTANGENT' (as done below). It's OK, they're compatible. */
-
- /* note: normally we'd use 'i_src' here, but 'i_dst' is in sync with 'rdata->cd.output'
- */
- rdata->cd.layers.tangent[i_dst] = CustomData_get_layer_n(
- &rdata->cd.output.ldata, CD_TANGENT, i_dst);
- if (rdata->tri_len != 0) {
- BLI_assert(rdata->cd.layers.tangent[i_dst] != NULL);
- }
- }
- }
- /* Actual active rangent slot inside uv layers used for shading. */
- if (rdata->cd.layers.tangent_active != -1) {
- rdata->cd.layers.tangent_active = act_tan;
- }
- if (rdata->cd.layers.tangent_render != -1) {
- rdata->cd.layers.tangent_render = ren_tan;
- }
-
- if (cd_used->tan_orco != 0) {
- const char *name = CustomData_get_layer_name(&rdata->cd.output.ldata, CD_TANGENT, i_dst);
- uint hash = BLI_ghashutil_strhash_p(name);
- BLI_snprintf(rdata->cd.uuid.tangent[i_dst], sizeof(*rdata->cd.uuid.tangent), "t%u", hash);
-
- rdata->cd.layers.tangent[i_dst] = CustomData_get_layer_n(
- &rdata->cd.output.ldata, CD_TANGENT, i_dst);
- }
- }
-
-#undef me
- }
-
- return rdata;
-}
-
-/* Warning replace mesh pointer. */
-#define MBC_GET_FINAL_MESH(me) \
- /* Hack to show the final result. */ \
- const bool _use_em_final = ((me)->edit_mesh && (me)->edit_mesh->mesh_eval_final && \
- ((me)->edit_mesh->mesh_eval_final->runtime.is_original == false)); \
- Mesh _me_fake; \
- if (_use_em_final) { \
- _me_fake = *(me)->edit_mesh->mesh_eval_final; \
- _me_fake.mat = (me)->mat; \
- _me_fake.totcol = (me)->totcol; \
- (me) = &_me_fake; \
- } \
- ((void)0)
-
-static void mesh_render_data_free(MeshRenderData *rdata)
-{
- if (rdata->is_orco_allocated) {
- MEM_SAFE_FREE(rdata->orco);
- }
- MEM_SAFE_FREE(rdata->cd.offset.uv);
- MEM_SAFE_FREE(rdata->cd.offset.vcol);
- MEM_SAFE_FREE(rdata->cd.uuid.auto_mix);
- MEM_SAFE_FREE(rdata->cd.uuid.uv);
- MEM_SAFE_FREE(rdata->cd.uuid.vcol);
- MEM_SAFE_FREE(rdata->cd.uuid.tangent);
- MEM_SAFE_FREE(rdata->cd.layers.uv);
- MEM_SAFE_FREE(rdata->cd.layers.vcol);
- MEM_SAFE_FREE(rdata->cd.layers.tangent);
- MEM_SAFE_FREE(rdata->cd.layers.auto_vcol);
- MEM_SAFE_FREE(rdata->loose_verts);
- MEM_SAFE_FREE(rdata->loose_edges);
- MEM_SAFE_FREE(rdata->edges_adjacent_polys);
- MEM_SAFE_FREE(rdata->mlooptri);
- MEM_SAFE_FREE(rdata->loop_normals);
- MEM_SAFE_FREE(rdata->poly_normals);
- MEM_SAFE_FREE(rdata->poly_normals_pack);
- MEM_SAFE_FREE(rdata->vert_normals_pack);
- MEM_SAFE_FREE(rdata->vert_weight);
- MEM_SAFE_FREE(rdata->edge_select_bool);
- MEM_SAFE_FREE(rdata->edge_visible_bool);
- MEM_SAFE_FREE(rdata->vert_color);
-
- MEM_SAFE_FREE(rdata->mapped.loose_verts);
- MEM_SAFE_FREE(rdata->mapped.loose_edges);
-
- CustomData_free(&rdata->cd.output.ldata, rdata->loop_len);
-
- MEM_freeN(rdata);
-}
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Accessor Functions
- * \{ */
-
-static const char *mesh_render_data_uv_auto_layer_uuid_get(const MeshRenderData *rdata, int layer)
-{
- BLI_assert(rdata->types & MR_DATATYPE_SHADING);
- return rdata->cd.uuid.auto_mix[layer];
-}
-
-static const char *mesh_render_data_vcol_auto_layer_uuid_get(const MeshRenderData *rdata,
- int layer)
-{
- BLI_assert(rdata->types & MR_DATATYPE_SHADING);
- return rdata->cd.uuid.auto_mix[rdata->cd.layers.uv_len + layer];
-}
-
-static const char *mesh_render_data_uv_layer_uuid_get(const MeshRenderData *rdata, int layer)
-{
- BLI_assert(rdata->types & MR_DATATYPE_SHADING);
- return rdata->cd.uuid.uv[layer];
-}
-
-static const char *mesh_render_data_vcol_layer_uuid_get(const MeshRenderData *rdata, int layer)
-{
- BLI_assert(rdata->types & MR_DATATYPE_SHADING);
- return rdata->cd.uuid.vcol[layer];
-}
-
-static const char *mesh_render_data_tangent_layer_uuid_get(const MeshRenderData *rdata, int layer)
-{
- BLI_assert(rdata->types & MR_DATATYPE_SHADING);
- return rdata->cd.uuid.tangent[layer];
-}
-
-static int UNUSED_FUNCTION(mesh_render_data_verts_len_get)(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_VERT);
- return rdata->vert_len;
-}
-static int mesh_render_data_verts_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_VERT);
- return ((rdata->mapped.use == false) ? rdata->vert_len : rdata->mapped.vert_len);
-}
-
-static int UNUSED_FUNCTION(mesh_render_data_loose_verts_len_get)(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOSE_VERT);
- return rdata->loose_vert_len;
-}
-static int mesh_render_data_loose_verts_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOSE_VERT);
- return ((rdata->mapped.use == false) ? rdata->loose_vert_len : rdata->mapped.loose_vert_len);
-}
-
-static int mesh_render_data_edges_len_get(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_EDGE);
- return rdata->edge_len;
-}
-static int mesh_render_data_edges_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_EDGE);
- return ((rdata->mapped.use == false) ? rdata->edge_len : rdata->mapped.edge_len);
-}
-
-static int UNUSED_FUNCTION(mesh_render_data_loose_edges_len_get)(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOSE_EDGE);
- return rdata->loose_edge_len;
-}
-static int mesh_render_data_loose_edges_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOSE_EDGE);
- return ((rdata->mapped.use == false) ? rdata->loose_edge_len : rdata->mapped.loose_edge_len);
-}
-
-static int mesh_render_data_looptri_len_get(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOPTRI);
- return rdata->tri_len;
-}
-static int mesh_render_data_looptri_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOPTRI);
- return ((rdata->mapped.use == false) ? rdata->tri_len : rdata->mapped.tri_len);
-}
-
-static int UNUSED_FUNCTION(mesh_render_data_mat_len_get)(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_POLY);
- return rdata->mat_len;
-}
-
-static int mesh_render_data_loops_len_get(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOP);
- return rdata->loop_len;
-}
-
-static int mesh_render_data_loops_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_LOOP);
- return ((rdata->mapped.use == false) ? rdata->loop_len : rdata->mapped.loop_len);
-}
-
-static int mesh_render_data_polys_len_get(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_POLY);
- return rdata->poly_len;
-}
-static int mesh_render_data_polys_len_get_maybe_mapped(const MeshRenderData *rdata)
-{
- BLI_assert(rdata->types & MR_DATATYPE_POLY);
- return ((rdata->mapped.use == false) ? rdata->poly_len : rdata->mapped.poly_len);
-}
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-
-/** \name Internal Cache (Lazy Initialization)
- * \{ */
-
-/** Ensure #MeshRenderData.poly_normals_pack */
-static void mesh_render_data_ensure_poly_normals_pack(MeshRenderData *rdata)
-{
- GPUPackedNormal *pnors_pack = rdata->poly_normals_pack;
- if (pnors_pack == NULL) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter fiter;
- BMFace *efa;
- int i;
-
- pnors_pack = rdata->poly_normals_pack = MEM_mallocN(sizeof(*pnors_pack) * rdata->poly_len,
- __func__);
- if (rdata->edit_data && rdata->edit_data->vertexCos != NULL) {
- BKE_editmesh_cache_ensure_poly_normals(rdata->edit_bmesh, rdata->edit_data);
- const float(*pnors)[3] = rdata->edit_data->polyNos;
- for (i = 0; i < bm->totface; i++) {
- pnors_pack[i] = GPU_normal_convert_i10_v3(pnors[i]);
- }
- }
- else {
- BM_ITER_MESH_INDEX (efa, &fiter, bm, BM_FACES_OF_MESH, i) {
- pnors_pack[i] = GPU_normal_convert_i10_v3(efa->no);
- }
- }
- }
- else {
- float(*pnors)[3] = rdata->poly_normals;
-
- if (!pnors) {
- pnors = rdata->poly_normals = MEM_mallocN(sizeof(*pnors) * rdata->poly_len, __func__);
- BKE_mesh_calc_normals_poly(rdata->mvert,
- NULL,
- rdata->vert_len,
- rdata->mloop,
- rdata->mpoly,
- rdata->loop_len,
- rdata->poly_len,
- pnors,
- true);
- }
-
- pnors_pack = rdata->poly_normals_pack = MEM_mallocN(sizeof(*pnors_pack) * rdata->poly_len,
- __func__);
- for (int i = 0; i < rdata->poly_len; i++) {
- pnors_pack[i] = GPU_normal_convert_i10_v3(pnors[i]);
- }
- }
- }
-}
-
-/** Ensure #MeshRenderData.vert_normals_pack */
-static void mesh_render_data_ensure_vert_normals_pack(MeshRenderData *rdata)
-{
- GPUPackedNormal *vnors_pack = rdata->vert_normals_pack;
- if (vnors_pack == NULL) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter viter;
- BMVert *eve;
- int i;
-
- vnors_pack = rdata->vert_normals_pack = MEM_mallocN(sizeof(*vnors_pack) * rdata->vert_len,
- __func__);
- BM_ITER_MESH_INDEX (eve, &viter, bm, BM_VERT, i) {
- vnors_pack[i] = GPU_normal_convert_i10_v3(eve->no);
- }
- }
- else {
- /* data from mesh used directly */
- BLI_assert(0);
- }
- }
-}
-
-/** Ensure #MeshRenderData.vert_color */
-static void UNUSED_FUNCTION(mesh_render_data_ensure_vert_color)(MeshRenderData *rdata)
-{
- char(*vcol)[3] = rdata->vert_color;
- if (vcol == NULL) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- const int cd_loop_color_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPCOL);
- if (cd_loop_color_offset == -1) {
- goto fallback;
- }
-
- vcol = rdata->vert_color = MEM_mallocN(sizeof(*vcol) * rdata->loop_len, __func__);
-
- BMIter fiter;
- BMFace *efa;
- int i = 0;
-
- BM_ITER_MESH (efa, &fiter, bm, BM_FACES_OF_MESH) {
- BMLoop *l_iter, *l_first;
- l_iter = l_first = BM_FACE_FIRST_LOOP(efa);
- do {
- const MLoopCol *lcol = BM_ELEM_CD_GET_VOID_P(l_iter, cd_loop_color_offset);
- vcol[i][0] = lcol->r;
- vcol[i][1] = lcol->g;
- vcol[i][2] = lcol->b;
- i += 1;
- } while ((l_iter = l_iter->next) != l_first);
- }
- BLI_assert(i == rdata->loop_len);
- }
- else {
- if (rdata->mloopcol == NULL) {
- goto fallback;
- }
-
- vcol = rdata->vert_color = MEM_mallocN(sizeof(*vcol) * rdata->loop_len, __func__);
-
- for (int i = 0; i < rdata->loop_len; i++) {
- vcol[i][0] = rdata->mloopcol[i].r;
- vcol[i][1] = rdata->mloopcol[i].g;
- vcol[i][2] = rdata->mloopcol[i].b;
- }
- }
- }
- return;
-
-fallback:
- vcol = rdata->vert_color = MEM_mallocN(sizeof(*vcol) * rdata->loop_len, __func__);
-
- for (int i = 0; i < rdata->loop_len; i++) {
- vcol[i][0] = 255;
- vcol[i][1] = 255;
- vcol[i][2] = 255;
- }
-}
-
-static float evaluate_vertex_weight(const MDeformVert *dvert, const DRW_MeshWeightState *wstate)
-{
- float input = 0.0f;
- bool show_alert_color = false;
-
- if (wstate->flags & DRW_MESH_WEIGHT_STATE_MULTIPAINT) {
- /* Multi-Paint feature */
- input = BKE_defvert_multipaint_collective_weight(
- dvert,
- wstate->defgroup_len,
- wstate->defgroup_sel,
- wstate->defgroup_sel_count,
- (wstate->flags & DRW_MESH_WEIGHT_STATE_AUTO_NORMALIZE) != 0);
-
- /* make it black if the selected groups have no weight on a vertex */
- if (input == 0.0f) {
- show_alert_color = true;
- }
- }
- else {
- /* default, non tricky behavior */
- input = defvert_find_weight(dvert, wstate->defgroup_active);
-
- if (input == 0.0f) {
- switch (wstate->alert_mode) {
- case OB_DRAW_GROUPUSER_ACTIVE:
- show_alert_color = true;
- break;
-
- case OB_DRAW_GROUPUSER_ALL:
- show_alert_color = defvert_is_weight_zero(dvert, wstate->defgroup_len);
- break;
- }
- }
- }
-
- if (show_alert_color) {
- return -1.0f;
- }
- else {
- CLAMP(input, 0.0f, 1.0f);
- return input;
- }
-}
-
-/** Ensure #MeshRenderData.vert_weight */
-static void mesh_render_data_ensure_vert_weight(MeshRenderData *rdata,
- const struct DRW_MeshWeightState *wstate)
-{
- float *vweight = rdata->vert_weight;
- if (vweight == NULL) {
- if (wstate->defgroup_active == -1) {
- goto fallback;
- }
-
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- const int cd_dvert_offset = CustomData_get_offset(&bm->vdata, CD_MDEFORMVERT);
- if (cd_dvert_offset == -1) {
- goto fallback;
- }
-
- BMIter viter;
- BMVert *eve;
- int i;
-
- vweight = rdata->vert_weight = MEM_mallocN(sizeof(*vweight) * rdata->vert_len, __func__);
- BM_ITER_MESH_INDEX (eve, &viter, bm, BM_VERT, i) {
- const MDeformVert *dvert = BM_ELEM_CD_GET_VOID_P(eve, cd_dvert_offset);
- vweight[i] = evaluate_vertex_weight(dvert, wstate);
- }
- }
- else {
- if (rdata->dvert == NULL) {
- goto fallback;
- }
-
- vweight = rdata->vert_weight = MEM_mallocN(sizeof(*vweight) * rdata->vert_len, __func__);
- for (int i = 0; i < rdata->vert_len; i++) {
- vweight[i] = evaluate_vertex_weight(&rdata->dvert[i], wstate);
- }
- }
- }
- return;
-
-fallback:
- vweight = rdata->vert_weight = MEM_callocN(sizeof(*vweight) * rdata->vert_len, __func__);
-
- if ((wstate->defgroup_active < 0) && (wstate->defgroup_len > 0)) {
- copy_vn_fl(vweight, rdata->vert_len, -2.0f);
- }
- else if (wstate->alert_mode != OB_DRAW_GROUPUSER_NONE) {
- copy_vn_fl(vweight, rdata->vert_len, -1.0f);
- }
-}
-
-/** \} */
-
-/* ---------------------------------------------------------------------- */
-/** \name Internal Cache Generation
- * \{ */
-
-static uchar mesh_render_data_face_flag(MeshRenderData *rdata, const BMFace *efa, const int cd_ofs)
-{
- uchar fflag = 0;
-
- if (efa == rdata->efa_act) {
- fflag |= VFLAG_FACE_ACTIVE;
- }
- if (BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
- fflag |= VFLAG_FACE_SELECTED;
- }
-
- if (efa == rdata->efa_act_uv) {
- fflag |= VFLAG_FACE_UV_ACTIVE;
- }
- if ((cd_ofs != -1) && uvedit_face_select_test_ex(rdata->toolsettings, (BMFace *)efa, cd_ofs)) {
- fflag |= VFLAG_FACE_UV_SELECT;
- }
-
-#ifdef WITH_FREESTYLE
- if (rdata->cd.offset.freestyle_face != -1) {
- const FreestyleFace *ffa = BM_ELEM_CD_GET_VOID_P(efa, rdata->cd.offset.freestyle_face);
- if (ffa->flag & FREESTYLE_FACE_MARK) {
- fflag |= VFLAG_FACE_FREESTYLE;
- }
- }
-#endif
-
- return fflag;
-}
-
-static void mesh_render_data_edge_flag(const MeshRenderData *rdata,
- const BMEdge *eed,
- EdgeDrawAttr *eattr)
-{
- const ToolSettings *ts = rdata->toolsettings;
- const bool is_vertex_select_mode = (ts != NULL) && (ts->selectmode & SCE_SELECT_VERTEX) != 0;
- const bool is_face_only_select_mode = (ts != NULL) && (ts->selectmode == SCE_SELECT_FACE);
-
- if (eed == rdata->eed_act) {
- eattr->e_flag |= VFLAG_EDGE_ACTIVE;
- }
- if (!is_vertex_select_mode && BM_elem_flag_test(eed, BM_ELEM_SELECT)) {
- eattr->e_flag |= VFLAG_EDGE_SELECTED;
- }
- if (is_vertex_select_mode && BM_elem_flag_test(eed->v1, BM_ELEM_SELECT) &&
- BM_elem_flag_test(eed->v2, BM_ELEM_SELECT)) {
- eattr->e_flag |= VFLAG_EDGE_SELECTED;
- eattr->e_flag |= VFLAG_VERT_SELECTED;
- }
- if (BM_elem_flag_test(eed, BM_ELEM_SEAM)) {
- eattr->e_flag |= VFLAG_EDGE_SEAM;
- }
- if (!BM_elem_flag_test(eed, BM_ELEM_SMOOTH)) {
- eattr->e_flag |= VFLAG_EDGE_SHARP;
- }
-
- /* Use active edge color for active face edges because
- * specular highlights make it hard to see T55456#510873.
- *
- * This isn't ideal since it can't be used when mixing edge/face modes
- * but it's still better then not being able to see the active face. */
- if (is_face_only_select_mode) {
- if (rdata->efa_act != NULL) {
- if (BM_edge_in_face(eed, rdata->efa_act)) {
- eattr->e_flag |= VFLAG_EDGE_ACTIVE;
- }
- }
- }
-
- /* Use a byte for value range */
- if (rdata->cd.offset.crease != -1) {
- float crease = BM_ELEM_CD_GET_FLOAT(eed, rdata->cd.offset.crease);
- if (crease > 0) {
- eattr->crease = (uchar)(crease * 255.0f);
- }
- }
- /* Use a byte for value range */
- if (rdata->cd.offset.bweight != -1) {
- float bweight = BM_ELEM_CD_GET_FLOAT(eed, rdata->cd.offset.bweight);
- if (bweight > 0) {
- eattr->bweight = (uchar)(bweight * 255.0f);
- }
- }
-#ifdef WITH_FREESTYLE
- if (rdata->cd.offset.freestyle_edge != -1) {
- const FreestyleEdge *fed = BM_ELEM_CD_GET_VOID_P(eed, rdata->cd.offset.freestyle_edge);
- if (fed->flag & FREESTYLE_EDGE_MARK) {
- eattr->e_flag |= VFLAG_EDGE_FREESTYLE;
- }
- }
-#endif
-}
-
-static void mesh_render_data_loop_flag(MeshRenderData *rdata,
- BMLoop *loop,
- const int cd_ofs,
- EdgeDrawAttr *eattr)
-{
- if (cd_ofs == -1) {
- return;
- }
- MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(loop, cd_ofs);
- if (luv != NULL && (luv->flag & MLOOPUV_PINNED)) {
- eattr->v_flag |= VFLAG_VERT_UV_PINNED;
- }
- if (uvedit_uv_select_test_ex(rdata->toolsettings, loop, cd_ofs)) {
- eattr->v_flag |= VFLAG_VERT_UV_SELECT;
- }
- if (uvedit_edge_select_test_ex(rdata->toolsettings, loop, cd_ofs)) {
- eattr->v_flag |= VFLAG_EDGE_UV_SELECT;
- }
-}
-
-static void mesh_render_data_vert_flag(MeshRenderData *rdata,
- const BMVert *eve,
- EdgeDrawAttr *eattr)
-{
- if (eve == rdata->eve_act) {
- eattr->e_flag |= VFLAG_VERT_ACTIVE;
- }
- if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
- eattr->e_flag |= VFLAG_VERT_SELECTED;
- }
-}
-
-static bool add_edit_facedot(MeshRenderData *rdata,
- GPUVertBuf *vbo,
- const uint fdot_pos_id,
- const uint fdot_nor_flag_id,
- const int poly,
- const int base_vert_idx)
-{
- BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
- float pnor[3], center[3];
- int facedot_flag;
- if (rdata->edit_bmesh) {
- BMEditMesh *em = rdata->edit_bmesh;
- const BMFace *efa = BM_face_at_index(em->bm, poly);
- if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- return false;
- }
- if (rdata->edit_data && rdata->edit_data->vertexCos) {
- copy_v3_v3(center, rdata->edit_data->polyCos[poly]);
- copy_v3_v3(pnor, rdata->edit_data->polyNos[poly]);
- }
- else {
- BM_face_calc_center_median(efa, center);
- copy_v3_v3(pnor, efa->no);
- }
- facedot_flag = BM_elem_flag_test(efa, BM_ELEM_SELECT) ? ((efa == em->bm->act_face) ? -1 : 1) :
- 0;
- }
- else {
- MVert *mvert = rdata->mvert;
- const MPoly *mpoly = rdata->mpoly + poly;
- const MLoop *mloop = rdata->mloop + mpoly->loopstart;
-
- BKE_mesh_calc_poly_center(mpoly, mloop, mvert, center);
- BKE_mesh_calc_poly_normal(mpoly, mloop, mvert, pnor);
- /* No selection if not in edit mode. */
- facedot_flag = 0;
- }
-
- GPUPackedNormal nor = GPU_normal_convert_i10_v3(pnor);
- nor.w = facedot_flag;
- GPU_vertbuf_attr_set(vbo, fdot_nor_flag_id, base_vert_idx, &nor);
- GPU_vertbuf_attr_set(vbo, fdot_pos_id, base_vert_idx, center);
-
- return true;
-}
-static bool add_edit_facedot_mapped(MeshRenderData *rdata,
- GPUVertBuf *vbo,
- const uint fdot_pos_id,
- const uint fdot_nor_flag_id,
- const int poly,
- const int base_vert_idx)
-{
- BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
- float pnor[3], center[3];
- const int *p_origindex = rdata->mapped.p_origindex;
- const int p_orig = p_origindex[poly];
- if (p_orig == ORIGINDEX_NONE) {
- return false;
- }
- BMEditMesh *em = rdata->edit_bmesh;
- const BMFace *efa = BM_face_at_index(em->bm, p_orig);
- if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- return false;
- }
-
- Mesh *me_cage = em->mesh_eval_cage;
- const MVert *mvert = me_cage->mvert;
- const MLoop *mloop = me_cage->mloop;
- const MPoly *mpoly = me_cage->mpoly;
-
- const MPoly *mp = mpoly + poly;
- const MLoop *ml = mloop + mp->loopstart;
-
- BKE_mesh_calc_poly_center(mp, ml, mvert, center);
- BKE_mesh_calc_poly_normal(mp, ml, mvert, pnor);
-
- GPUPackedNormal nor = GPU_normal_convert_i10_v3(pnor);
- nor.w = BM_elem_flag_test(efa, BM_ELEM_SELECT) ? ((efa == em->bm->act_face) ? -1 : 1) : 0;
- GPU_vertbuf_attr_set(vbo, fdot_nor_flag_id, base_vert_idx, &nor);
- GPU_vertbuf_attr_set(vbo, fdot_pos_id, base_vert_idx, center);
-
- return true;
-}
-static bool add_edit_facedot_subdiv(MeshRenderData *rdata,
- GPUVertBuf *vbo,
- const uint fdot_pos_id,
- const uint fdot_nor_flag_id,
- const int vert,
- const int poly,
- const int base_vert_idx)
-{
- BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
- const int *p_origindex = rdata->mapped.p_origindex;
- const int p_orig = p_origindex[poly];
- if (p_orig == ORIGINDEX_NONE) {
- return false;
- }
- BMEditMesh *em = rdata->edit_bmesh;
- const BMFace *efa = BM_face_at_index(em->bm, p_orig);
- if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- return false;
- }
-
- Mesh *me_cage = em->mesh_eval_cage;
- const MVert *mvert = &me_cage->mvert[vert];
-
- GPUPackedNormal nor = GPU_normal_convert_i10_s3(mvert->no);
- nor.w = BM_elem_flag_test(efa, BM_ELEM_SELECT) ? ((efa == em->bm->act_face) ? -1 : 1) : 0;
- GPU_vertbuf_attr_set(vbo, fdot_nor_flag_id, base_vert_idx, &nor);
- GPU_vertbuf_attr_set(vbo, fdot_pos_id, base_vert_idx, mvert->co);
-
- return true;
-}
-
/** \} */
/* ---------------------------------------------------------------------- */
@@ -1963,170 +370,6 @@ static void drw_mesh_weight_state_extract(Object *ob,
/** \name Mesh GPUBatch Cache
* \{ */
-typedef enum DRWBatchFlag {
- MBC_SURFACE = (1 << 0),
- MBC_SURFACE_WEIGHTS = (1 << 1),
- MBC_EDIT_TRIANGLES = (1 << 2),
- MBC_EDIT_VERTICES = (1 << 3),
- MBC_EDIT_EDGES = (1 << 4),
- MBC_EDIT_LNOR = (1 << 5),
- MBC_EDIT_FACEDOTS = (1 << 6),
- MBC_EDIT_MESH_ANALYSIS = (1 << 7),
- MBC_EDITUV_FACES_STRECH_AREA = (1 << 8),
- MBC_EDITUV_FACES_STRECH_ANGLE = (1 << 9),
- MBC_EDITUV_FACES = (1 << 10),
- MBC_EDITUV_EDGES = (1 << 11),
- MBC_EDITUV_VERTS = (1 << 12),
- MBC_EDITUV_FACEDOTS = (1 << 13),
- MBC_EDIT_SELECTION_VERTS = (1 << 14),
- MBC_EDIT_SELECTION_EDGES = (1 << 15),
- MBC_EDIT_SELECTION_FACES = (1 << 16),
- MBC_EDIT_SELECTION_FACEDOTS = (1 << 17),
- MBC_ALL_VERTS = (1 << 18),
- MBC_ALL_EDGES = (1 << 19),
- MBC_LOOSE_EDGES = (1 << 20),
- MBC_EDGE_DETECTION = (1 << 21),
- MBC_WIRE_EDGES = (1 << 22),
- MBC_WIRE_LOOPS = (1 << 23),
- MBC_WIRE_LOOPS_UVS = (1 << 24),
- MBC_SURF_PER_MAT = (1 << 25),
-} DRWBatchFlag;
-
-#define MBC_EDITUV \
- (MBC_EDITUV_FACES_STRECH_AREA | MBC_EDITUV_FACES_STRECH_ANGLE | MBC_EDITUV_FACES | \
- MBC_EDITUV_EDGES | MBC_EDITUV_VERTS | MBC_EDITUV_FACEDOTS)
-
-typedef struct MeshBatchCache {
- /* In order buffers: All verts only specified once
- * or once per loop. To be used with a GPUIndexBuf. */
- struct {
- /* Vertex data. */
- GPUVertBuf *pos_nor;
- GPUVertBuf *weights;
- /* Loop data. */
- GPUVertBuf *loop_pos_nor;
- GPUVertBuf *loop_uv_tan;
- GPUVertBuf *loop_vcol;
- GPUVertBuf *loop_edge_fac;
- GPUVertBuf *loop_orco;
- } ordered;
-
- /* Edit Mesh Data:
- * Edit cage can be different from final mesh so vertex count
- * might differ. */
- struct {
- /* TODO(fclem): Reuse ordered.loop_pos_nor and maybe even
- * ordered.loop_uv_tan when cage match final mesh. */
- GPUVertBuf *loop_pos_nor;
- GPUVertBuf *loop_data;
- GPUVertBuf *loop_lnor;
- GPUVertBuf *facedots_pos_nor_data;
- GPUVertBuf *loop_mesh_analysis;
- /* UV data without modifier applied.
- * Vertex count is always the one of the cage. */
- GPUVertBuf *loop_uv;
- GPUVertBuf *loop_uv_data;
- GPUVertBuf *loop_stretch_angle;
- GPUVertBuf *loop_stretch_area;
- GPUVertBuf *facedots_uv;
- GPUVertBuf *facedots_uv_data;
- /* Selection */
- GPUVertBuf *loop_vert_idx;
- GPUVertBuf *loop_edge_idx;
- GPUVertBuf *loop_face_idx;
- GPUVertBuf *facedots_idx;
- } edit;
-
- /* Index Buffers:
- * Only need to be updated when topology changes. */
- struct {
- /* Indices to verts. */
- GPUIndexBuf *surf_tris;
- GPUIndexBuf *edges_lines;
- GPUIndexBuf *edges_adj_lines;
- GPUIndexBuf *loose_edges_lines;
- /* Indices to vloops. */
- GPUIndexBuf *loops_tris;
- GPUIndexBuf *loops_lines;
- GPUIndexBuf *loops_lines_paint_mask;
- GPUIndexBuf *loops_line_strips;
- /* Edit mode. */
- GPUIndexBuf *edit_loops_points; /* verts */
- GPUIndexBuf *edit_loops_lines; /* edges */
- GPUIndexBuf *edit_loops_tris; /* faces */
- /* Edit UVs */
- GPUIndexBuf *edituv_loops_points; /* verts */
- GPUIndexBuf *edituv_loops_line_strips; /* edges */
- GPUIndexBuf *edituv_loops_tri_fans; /* faces */
- } ibo;
-
- struct {
- /* Surfaces / Render */
- GPUBatch *surface;
- GPUBatch *surface_weights;
- /* Edit mode */
- GPUBatch *edit_triangles;
- GPUBatch *edit_vertices;
- GPUBatch *edit_edges;
- GPUBatch *edit_lnor;
- GPUBatch *edit_facedots;
- GPUBatch *edit_mesh_analysis;
- /* Edit UVs */
- GPUBatch *edituv_faces_strech_area;
- GPUBatch *edituv_faces_strech_angle;
- GPUBatch *edituv_faces;
- GPUBatch *edituv_edges;
- GPUBatch *edituv_verts;
- GPUBatch *edituv_facedots;
- /* Edit selection */
- GPUBatch *edit_selection_verts;
- GPUBatch *edit_selection_edges;
- GPUBatch *edit_selection_faces;
- GPUBatch *edit_selection_facedots;
- /* Common display / Other */
- GPUBatch *all_verts;
- GPUBatch *all_edges;
- GPUBatch *loose_edges;
- GPUBatch *edge_detection;
- GPUBatch *wire_edges; /* Individual edges with face normals. */
- GPUBatch *wire_loops; /* Loops around faces. no edges between selected faces */
- GPUBatch *wire_loops_uvs; /* Same as wire_loops but only has uvs. */
- } batch;
-
- GPUIndexBuf **surf_per_mat_tris;
- GPUBatch **surf_per_mat;
-
- /* arrays of bool uniform names (and value) that will be use to
- * set srgb conversion for auto attributes.*/
- char *auto_layer_names;
- int *auto_layer_is_srgb;
- int auto_layer_len;
-
- DRWBatchFlag batch_requested;
- DRWBatchFlag batch_ready;
-
- /* settings to determine if cache is invalid */
- int edge_len;
- int tri_len;
- int poly_len;
- int vert_len;
- int mat_len;
- bool is_dirty; /* Instantly invalidates cache, skipping mesh check */
- bool is_editmode;
- bool is_uvsyncsel;
-
- struct DRW_MeshWeightState weight_state;
-
- DRW_MeshCDMask cd_used, cd_needed, cd_used_over_time;
-
- int lastmatch;
-
- /* Valid only if edge_detection is up to date. */
- bool is_manifold;
-
- bool no_loose_wire;
-} MeshBatchCache;
-
BLI_INLINE void mesh_batch_cache_add_request(MeshBatchCache *cache, DRWBatchFlag new_flag)
{
atomic_fetch_and_or_uint32((uint32_t *)(&cache->batch_requested), *(uint32_t *)&new_flag);
@@ -2171,16 +414,14 @@ static void mesh_batch_cache_init(Mesh *me)
cache->is_editmode = me->edit_mesh != NULL;
if (cache->is_editmode == false) {
- cache->edge_len = mesh_render_edges_len_get(me);
- cache->tri_len = mesh_render_looptri_len_get(me);
- cache->poly_len = mesh_render_polys_len_get(me);
- cache->vert_len = mesh_render_verts_len_get(me);
+ // cache->edge_len = mesh_render_edges_len_get(me);
+ // cache->tri_len = mesh_render_looptri_len_get(me);
+ // cache->poly_len = mesh_render_polys_len_get(me);
+ // cache->vert_len = mesh_render_verts_len_get(me);
}
cache->mat_len = mesh_render_mat_len_get(me);
- cache->surf_per_mat_tris = MEM_callocN(sizeof(*cache->surf_per_mat_tris) * cache->mat_len,
- __func__);
- cache->surf_per_mat = MEM_callocN(sizeof(*cache->surf_per_mat) * cache->mat_len, __func__);
+ cache->surface_per_mat = MEM_callocN(sizeof(*cache->surface_per_mat) * cache->mat_len, __func__);
cache->is_dirty = false;
cache->batch_ready = 0;
@@ -2206,8 +447,11 @@ static void mesh_batch_cache_check_vertex_group(MeshBatchCache *cache,
const struct DRW_MeshWeightState *wstate)
{
if (!drw_mesh_weight_state_compare(&cache->weight_state, wstate)) {
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.weights);
+ }
GPU_BATCH_CLEAR_SAFE(cache->batch.surface_weights);
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.weights);
cache->batch_ready &= ~MBC_SURFACE_WEIGHTS;
@@ -2217,23 +461,21 @@ static void mesh_batch_cache_check_vertex_group(MeshBatchCache *cache,
static void mesh_batch_cache_discard_shaded_tri(MeshBatchCache *cache)
{
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_pos_nor);
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_uv_tan);
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_vcol);
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_orco);
-
- if (cache->surf_per_mat_tris) {
- for (int i = 0; i < cache->mat_len; i++) {
- GPU_INDEXBUF_DISCARD_SAFE(cache->surf_per_mat_tris[i]);
- }
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.pos_nor);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.uv);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.tan);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.vcol);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.orco);
}
- MEM_SAFE_FREE(cache->surf_per_mat_tris);
- if (cache->surf_per_mat) {
+
+ if (cache->surface_per_mat) {
for (int i = 0; i < cache->mat_len; i++) {
- GPU_BATCH_DISCARD_SAFE(cache->surf_per_mat[i]);
+ GPU_BATCH_DISCARD_SAFE(cache->surface_per_mat[i]);
}
}
- MEM_SAFE_FREE(cache->surf_per_mat);
+ MEM_SAFE_FREE(cache->surface_per_mat);
cache->batch_ready &= ~MBC_SURF_PER_MAT;
@@ -2247,21 +489,26 @@ static void mesh_batch_cache_discard_shaded_tri(MeshBatchCache *cache)
static void mesh_batch_cache_discard_uvedit(MeshBatchCache *cache)
{
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_stretch_angle);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_stretch_area);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_uv);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_uv_data);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.facedots_uv);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.facedots_uv_data);
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.edituv_loops_tri_fans);
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.edituv_loops_line_strips);
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.edituv_loops_points);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.stretch_angle);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.stretch_area);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.uv);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edituv_data);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_uv);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_edituv_data);
+ GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_tris);
+ GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_lines);
+ GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_points);
+ GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.edituv_fdots);
+ }
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_faces_strech_area);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_faces_strech_angle);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_faces);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_edges);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_verts);
- GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_facedots);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_fdots);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.wire_loops_uvs);
cache->batch_ready &= ~MBC_EDITUV;
}
@@ -2274,31 +521,41 @@ void DRW_mesh_batch_cache_dirty_tag(Mesh *me, int mode)
}
switch (mode) {
case BKE_MESH_BATCH_DIRTY_SELECT:
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_data);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.facedots_pos_nor_data);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edit_data);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_nor);
+ }
GPU_BATCH_DISCARD_SAFE(cache->batch.edit_triangles);
GPU_BATCH_DISCARD_SAFE(cache->batch.edit_vertices);
GPU_BATCH_DISCARD_SAFE(cache->batch.edit_edges);
- GPU_BATCH_DISCARD_SAFE(cache->batch.edit_facedots);
- GPU_BATCH_DISCARD_SAFE(cache->batch.edit_selection_facedots);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edit_fdots);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edit_selection_verts);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edit_selection_edges);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edit_selection_faces);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edit_selection_fdots);
GPU_BATCH_DISCARD_SAFE(cache->batch.edit_mesh_analysis);
cache->batch_ready &= ~(MBC_EDIT_TRIANGLES | MBC_EDIT_VERTICES | MBC_EDIT_EDGES |
MBC_EDIT_FACEDOTS | MBC_EDIT_SELECTION_FACEDOTS |
- MBC_EDIT_MESH_ANALYSIS);
+ MBC_EDIT_SELECTION_FACES | MBC_EDIT_SELECTION_EDGES |
+ MBC_EDIT_SELECTION_VERTS | MBC_EDIT_MESH_ANALYSIS);
/* Because visible UVs depends on edit mode selection, discard everything. */
mesh_batch_cache_discard_uvedit(cache);
break;
case BKE_MESH_BATCH_DIRTY_SELECT_PAINT:
/* Paint mode selection flag is packed inside the nor attrib.
* Note that it can be slow if auto smooth is enabled. (see T63946) */
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.loops_lines_paint_mask);
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_pos_nor);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPU_INDEXBUF_DISCARD_SAFE(mbufcache->ibo.lines_paint_mask);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.pos_nor);
+ }
GPU_BATCH_DISCARD_SAFE(cache->batch.surface);
GPU_BATCH_DISCARD_SAFE(cache->batch.wire_loops);
GPU_BATCH_DISCARD_SAFE(cache->batch.wire_edges);
- if (cache->surf_per_mat) {
+ if (cache->surface_per_mat) {
for (int i = 0; i < cache->mat_len; i++) {
- GPU_BATCH_DISCARD_SAFE(cache->surf_per_mat[i]);
+ GPU_BATCH_DISCARD_SAFE(cache->surface_per_mat[i]);
}
}
cache->batch_ready &= ~(MBC_SURFACE | MBC_WIRE_EDGES | MBC_WIRE_LOOPS | MBC_SURF_PER_MAT);
@@ -2314,14 +571,17 @@ void DRW_mesh_batch_cache_dirty_tag(Mesh *me, int mode)
mesh_batch_cache_discard_uvedit(cache);
break;
case BKE_MESH_BATCH_DIRTY_UVEDIT_SELECT:
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_uv_data);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.facedots_uv_data);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.edituv_data);
+ GPU_VERTBUF_DISCARD_SAFE(mbufcache->vbo.fdots_edituv_data);
+ }
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_faces_strech_area);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_faces_strech_angle);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_faces);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_edges);
GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_verts);
- GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_facedots);
+ GPU_BATCH_DISCARD_SAFE(cache->batch.edituv_fdots);
cache->batch_ready &= ~MBC_EDITUV;
break;
default:
@@ -2335,18 +595,16 @@ static void mesh_batch_cache_clear(Mesh *me)
if (!cache) {
return;
}
-
- for (int i = 0; i < sizeof(cache->ordered) / sizeof(void *); ++i) {
- GPUVertBuf **vbo = (GPUVertBuf **)&cache->ordered;
- GPU_VERTBUF_DISCARD_SAFE(vbo[i]);
- }
- for (int i = 0; i < sizeof(cache->edit) / sizeof(void *); ++i) {
- GPUVertBuf **vbo = (GPUVertBuf **)&cache->edit;
- GPU_VERTBUF_DISCARD_SAFE(vbo[i]);
- }
- for (int i = 0; i < sizeof(cache->ibo) / sizeof(void *); ++i) {
- GPUIndexBuf **ibo = (GPUIndexBuf **)&cache->ibo;
- GPU_INDEXBUF_DISCARD_SAFE(ibo[i]);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbufcache)
+ {
+ GPUVertBuf **vbos = (GPUVertBuf **)&mbufcache->vbo;
+ GPUIndexBuf **ibos = (GPUIndexBuf **)&mbufcache->ibo;
+ for (int i = 0; i < sizeof(mbufcache->vbo) / sizeof(void *); ++i) {
+ GPU_VERTBUF_DISCARD_SAFE(vbos[i]);
+ }
+ for (int i = 0; i < sizeof(mbufcache->ibo) / sizeof(void *); ++i) {
+ GPU_INDEXBUF_DISCARD_SAFE(ibos[i]);
+ }
}
for (int i = 0; i < sizeof(cache->batch) / sizeof(void *); ++i) {
GPUBatch **batch = (GPUBatch **)&cache->batch;
@@ -2368,2074 +626,6 @@ void DRW_mesh_batch_cache_free(Mesh *me)
MEM_SAFE_FREE(me->runtime.batch_cache);
}
-/* GPUBatch cache usage. */
-
-static void mesh_create_edit_vertex_loops(MeshRenderData *rdata,
- GPUVertBuf *vbo_pos_nor,
- GPUVertBuf *vbo_lnor,
- GPUVertBuf *vbo_uv,
- GPUVertBuf *vbo_data,
- GPUVertBuf *vbo_verts,
- GPUVertBuf *vbo_edges,
- GPUVertBuf *vbo_faces)
-{
-#if 0
- const int vert_len = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- const int edge_len = mesh_render_data_edges_len_get_maybe_mapped(rdata);
-#endif
- const int poly_len = mesh_render_data_polys_len_get_maybe_mapped(rdata);
- const int lvert_len = mesh_render_data_loose_verts_len_get_maybe_mapped(rdata);
- const int ledge_len = mesh_render_data_loose_edges_len_get_maybe_mapped(rdata);
- const int loop_len = mesh_render_data_loops_len_get_maybe_mapped(rdata);
- const int tot_loop_len = loop_len + ledge_len * 2 + lvert_len;
- float(*lnors)[3] = rdata->loop_normals;
- uchar fflag;
-
- /* Static formats */
- static struct {
- GPUVertFormat sel_id, pos_nor, lnor, flag, uv;
- } format = {{0}};
- static struct {
- uint sel_id, pos, nor, lnor, data, uvs;
- } attr_id;
- if (format.sel_id.attr_len == 0) {
- attr_id.sel_id = GPU_vertformat_attr_add(
- &format.sel_id, "color", GPU_COMP_U32, 1, GPU_FETCH_INT);
- attr_id.pos = GPU_vertformat_attr_add(
- &format.pos_nor, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- attr_id.nor = GPU_vertformat_attr_add(
- &format.pos_nor, "vnor", GPU_COMP_I10, 3, GPU_FETCH_INT_TO_FLOAT_UNIT);
- attr_id.lnor = GPU_vertformat_attr_add(
- &format.lnor, "lnor", GPU_COMP_I10, 3, GPU_FETCH_INT_TO_FLOAT_UNIT);
- attr_id.data = GPU_vertformat_attr_add(&format.flag, "data", GPU_COMP_U8, 4, GPU_FETCH_INT);
- attr_id.uvs = GPU_vertformat_attr_add(&format.uv, "u", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- GPU_vertformat_alias_add(&format.uv, "pos");
- GPU_vertformat_alias_add(&format.flag, "flag");
- }
-
- GPUVertBufRaw raw_verts, raw_edges, raw_faces, raw_pos, raw_nor, raw_lnor, raw_uv, raw_data;
- if (DRW_TEST_ASSIGN_VBO(vbo_pos_nor)) {
- GPU_vertbuf_init_with_format(vbo_pos_nor, &format.pos_nor);
- GPU_vertbuf_data_alloc(vbo_pos_nor, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_pos_nor, attr_id.pos, &raw_pos);
- GPU_vertbuf_attr_get_raw_data(vbo_pos_nor, attr_id.nor, &raw_nor);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_lnor)) {
- GPU_vertbuf_init_with_format(vbo_lnor, &format.lnor);
- GPU_vertbuf_data_alloc(vbo_lnor, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_lnor, attr_id.lnor, &raw_lnor);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_data)) {
- GPU_vertbuf_init_with_format(vbo_data, &format.flag);
- GPU_vertbuf_data_alloc(vbo_data, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_data, attr_id.data, &raw_data);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_uv)) {
- GPU_vertbuf_init_with_format(vbo_uv, &format.uv);
- GPU_vertbuf_data_alloc(vbo_uv, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_uv, attr_id.uvs, &raw_uv);
- }
- /* Select Idx */
- if (DRW_TEST_ASSIGN_VBO(vbo_verts)) {
- GPU_vertbuf_init_with_format(vbo_verts, &format.sel_id);
- GPU_vertbuf_data_alloc(vbo_verts, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_verts, attr_id.sel_id, &raw_verts);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_edges)) {
- GPU_vertbuf_init_with_format(vbo_edges, &format.sel_id);
- GPU_vertbuf_data_alloc(vbo_edges, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_edges, attr_id.sel_id, &raw_edges);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_faces)) {
- GPU_vertbuf_init_with_format(vbo_faces, &format.sel_id);
- GPU_vertbuf_data_alloc(vbo_faces, tot_loop_len);
- GPU_vertbuf_attr_get_raw_data(vbo_faces, attr_id.sel_id, &raw_faces);
- }
-
- if (rdata->edit_bmesh && rdata->mapped.use == false) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop, iter_vert;
- BMFace *efa;
- BMEdge *eed;
- BMVert *eve;
- BMLoop *loop;
- const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
-
- /* Face Loops */
- BM_ITER_MESH (efa, &iter_efa, bm, BM_FACES_OF_MESH) {
- int fidx = BM_elem_index_get(efa);
- if (vbo_data) {
- fflag = mesh_render_data_face_flag(rdata, efa, cd_loop_uv_offset);
- }
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- if (vbo_pos_nor) {
- GPUPackedNormal *vnor = (GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor);
- *vnor = GPU_normal_convert_i10_v3(loop->v->no);
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), loop->v->co);
- }
- if (vbo_lnor) {
- const float *nor = (lnors) ? lnors[BM_elem_index_get(loop)] : efa->no;
- GPUPackedNormal *lnor = (GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_lnor);
- *lnor = GPU_normal_convert_i10_v3(nor);
- }
- if (vbo_data) {
- EdgeDrawAttr eattr = {.v_flag = fflag};
- mesh_render_data_edge_flag(rdata, loop->e, &eattr);
- mesh_render_data_vert_flag(rdata, loop->v, &eattr);
- mesh_render_data_loop_flag(rdata, loop, cd_loop_uv_offset, &eattr);
- memcpy(GPU_vertbuf_raw_step(&raw_data), &eattr, sizeof(EdgeDrawAttr));
- }
- if (vbo_uv) {
- MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(loop, cd_loop_uv_offset);
- copy_v2_v2(GPU_vertbuf_raw_step(&raw_uv), luv->uv);
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = BM_elem_index_get(loop->v);
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- if (vbo_edges) {
- int eidx = BM_elem_index_get(loop->e);
- *((uint *)GPU_vertbuf_raw_step(&raw_edges)) = eidx;
- }
- if (vbo_faces) {
- *((uint *)GPU_vertbuf_raw_step(&raw_faces)) = fidx;
- }
- }
- }
- /* Loose edges */
- for (int e = 0; e < ledge_len; e++) {
- eed = BM_edge_at_index(bm, rdata->loose_edges[e]);
- BM_ITER_ELEM (eve, &iter_vert, eed, BM_VERTS_OF_EDGE) {
- if (vbo_pos_nor) {
- GPUPackedNormal *vnor = (GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor);
- *vnor = GPU_normal_convert_i10_v3(eve->no);
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co);
- }
- if (vbo_data) {
- EdgeDrawAttr eattr = {0};
- mesh_render_data_edge_flag(rdata, eed, &eattr);
- mesh_render_data_vert_flag(rdata, eve, &eattr);
- memcpy(GPU_vertbuf_raw_step(&raw_data), &eattr, sizeof(EdgeDrawAttr));
- }
- if (vbo_lnor) {
- memset(GPU_vertbuf_raw_step(&raw_lnor), 0, sizeof(GPUPackedNormal));
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = BM_elem_index_get(eve);
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- if (vbo_edges) {
- int eidx = BM_elem_index_get(eed);
- *((uint *)GPU_vertbuf_raw_step(&raw_edges)) = eidx;
- }
- }
- }
- /* Loose verts */
- for (int e = 0; e < lvert_len; e++) {
- eve = BM_vert_at_index(bm, rdata->loose_verts[e]);
- if (vbo_pos_nor) {
- GPUPackedNormal *vnor = (GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor);
- *vnor = GPU_normal_convert_i10_v3(eve->no);
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), eve->co);
- }
- if (vbo_lnor) {
- memset(GPU_vertbuf_raw_step(&raw_lnor), 0, sizeof(GPUPackedNormal));
- }
- if (vbo_data) {
- EdgeDrawAttr eattr = {0};
- mesh_render_data_vert_flag(rdata, eve, &eattr);
- memcpy(GPU_vertbuf_raw_step(&raw_data), &eattr, sizeof(EdgeDrawAttr));
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = BM_elem_index_get(eve);
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- }
- }
- else if (rdata->mapped.use == true) {
- BMesh *bm = rdata->edit_bmesh->bm;
- const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
-
- const MPoly *mpoly = rdata->mapped.me_cage->mpoly;
- const MEdge *medge = rdata->mapped.me_cage->medge;
- const MVert *mvert = rdata->mapped.me_cage->mvert;
- const MLoop *mloop = rdata->mapped.me_cage->mloop;
-
- const int *v_origindex = rdata->mapped.v_origindex;
- const int *e_origindex = rdata->mapped.e_origindex;
- const int *p_origindex = rdata->mapped.p_origindex;
-
- /* Face Loops */
- for (int poly = 0; poly < poly_len; poly++, mpoly++) {
- const MLoop *l = &mloop[mpoly->loopstart];
- int fidx = p_origindex[poly];
- BMFace *efa = NULL;
- if (vbo_data) {
- fflag = 0;
- if (fidx != ORIGINDEX_NONE) {
- efa = BM_face_at_index(bm, fidx);
- fflag = mesh_render_data_face_flag(rdata, efa, cd_loop_uv_offset);
- }
- }
- for (int i = 0; i < mpoly->totloop; i++, l++) {
- if (vbo_pos_nor) {
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), mvert[l->v].co);
- }
- if (vbo_lnor || vbo_pos_nor) {
- GPUPackedNormal vnor = GPU_normal_convert_i10_s3(mvert[l->v].no);
- if (vbo_pos_nor) {
- *(GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor) = vnor;
- }
- if (vbo_lnor) {
- /* Mapped does not support lnors yet. */
- *(GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_lnor) = vnor;
- }
- }
- if (vbo_data) {
- EdgeDrawAttr eattr = {.v_flag = fflag};
- int vidx = v_origindex[l->v];
- int eidx = e_origindex[l->e];
- if (vidx != ORIGINDEX_NONE) {
- BMVert *eve = BM_vert_at_index(bm, vidx);
- mesh_render_data_vert_flag(rdata, eve, &eattr);
- }
- if (eidx != ORIGINDEX_NONE) {
- BMEdge *eed = BM_edge_at_index(bm, eidx);
- mesh_render_data_edge_flag(rdata, eed, &eattr);
- if (efa) {
- BMLoop *loop = BM_face_edge_share_loop(efa, eed);
- if (loop) {
- mesh_render_data_loop_flag(rdata, loop, cd_loop_uv_offset, &eattr);
- }
- }
- }
- memcpy(GPU_vertbuf_raw_step(&raw_data), &eattr, sizeof(EdgeDrawAttr));
- }
- if (vbo_uv) {
- MLoopUV *luv = &rdata->mloopuv[mpoly->loopstart + i];
- copy_v2_v2(GPU_vertbuf_raw_step(&raw_uv), luv->uv);
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = v_origindex[l->v];
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- if (vbo_edges) {
- int eidx = e_origindex[l->e];
- *((uint *)GPU_vertbuf_raw_step(&raw_edges)) = eidx;
- }
- if (vbo_faces) {
- *((uint *)GPU_vertbuf_raw_step(&raw_faces)) = fidx;
- }
- }
- }
- /* Loose edges */
- for (int j = 0; j < ledge_len; j++) {
- const int e = rdata->mapped.loose_edges[j];
- for (int i = 0; i < 2; ++i) {
- int v = (i == 0) ? medge[e].v1 : medge[e].v2;
- if (vbo_pos_nor) {
- GPUPackedNormal vnor = GPU_normal_convert_i10_s3(mvert[v].no);
- *(GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor) = vnor;
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), mvert[v].co);
- }
- if (vbo_lnor) {
- memset(GPU_vertbuf_raw_step(&raw_lnor), 0, sizeof(GPUPackedNormal));
- }
- if (vbo_data) {
- EdgeDrawAttr eattr = {0};
- int vidx = v_origindex[v];
- int eidx = e_origindex[e];
- if (vidx != ORIGINDEX_NONE) {
- BMVert *eve = BM_vert_at_index(bm, vidx);
- mesh_render_data_vert_flag(rdata, eve, &eattr);
- }
- if (eidx != ORIGINDEX_NONE) {
- BMEdge *eed = BM_edge_at_index(bm, eidx);
- mesh_render_data_edge_flag(rdata, eed, &eattr);
- }
- memcpy(GPU_vertbuf_raw_step(&raw_data), &eattr, sizeof(EdgeDrawAttr));
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = v_origindex[v];
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- if (vbo_edges) {
- int eidx = e_origindex[e];
- *((uint *)GPU_vertbuf_raw_step(&raw_edges)) = eidx;
- }
- }
- }
- /* Loose verts */
- for (int i = 0; i < lvert_len; i++) {
- const int v = rdata->mapped.loose_verts[i];
- if (vbo_pos_nor) {
- GPUPackedNormal vnor = GPU_normal_convert_i10_s3(mvert[v].no);
- *(GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor) = vnor;
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), mvert[v].co);
- }
- if (vbo_lnor) {
- memset(GPU_vertbuf_raw_step(&raw_lnor), 0, sizeof(GPUPackedNormal));
- }
- if (vbo_data) {
- EdgeDrawAttr eattr = {0};
- int vidx = v_origindex[v];
- if (vidx != ORIGINDEX_NONE) {
- BMVert *eve = BM_vert_at_index(bm, vidx);
- mesh_render_data_vert_flag(rdata, eve, &eattr);
- }
- memcpy(GPU_vertbuf_raw_step(&raw_data), &eattr, sizeof(EdgeDrawAttr));
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = v_origindex[v];
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- }
- }
- else {
- const MPoly *mpoly = rdata->mpoly;
- const MVert *mvert = rdata->mvert;
- const MLoop *mloop = rdata->mloop;
-
- const int *v_origindex = CustomData_get_layer(&rdata->me->vdata, CD_ORIGINDEX);
- const int *e_origindex = CustomData_get_layer(&rdata->me->edata, CD_ORIGINDEX);
- const int *p_origindex = CustomData_get_layer(&rdata->me->pdata, CD_ORIGINDEX);
-
- /* Face Loops */
- for (int poly = 0; poly < poly_len; poly++, mpoly++) {
- const MLoop *l = &mloop[mpoly->loopstart];
- int fidx = p_origindex ? p_origindex[poly] : poly;
- for (int i = 0; i < mpoly->totloop; i++, l++) {
- if (vbo_pos_nor) {
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), mvert[l->v].co);
- }
- if (vbo_lnor || vbo_pos_nor) {
- GPUPackedNormal vnor = GPU_normal_convert_i10_s3(mvert[l->v].no);
- if (vbo_pos_nor) {
- *(GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_nor) = vnor;
- }
- if (vbo_lnor) {
- /* Mapped does not support lnors yet. */
- *(GPUPackedNormal *)GPU_vertbuf_raw_step(&raw_lnor) = vnor;
- }
- }
- if (vbo_uv) {
- MLoopUV *luv = &rdata->mloopuv[mpoly->loopstart + i];
- copy_v2_v2(GPU_vertbuf_raw_step(&raw_uv), luv->uv);
- }
- /* Select Idx */
- if (vbo_verts) {
- int vidx = v_origindex ? v_origindex[l->v] : l->v;
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- if (vbo_edges) {
- int eidx = e_origindex ? e_origindex[l->e] : l->e;
- *((uint *)GPU_vertbuf_raw_step(&raw_edges)) = eidx;
- }
- if (vbo_faces) {
- *((uint *)GPU_vertbuf_raw_step(&raw_faces)) = fidx;
- }
- }
- }
- /* TODO(fclem): Until we find a way to detect
- * loose verts easily outside of edit mode, this
- * will remain disabled. */
-#if 0
- /* Loose edges */
- for (int e = 0; e < edge_len; e++, medge++) {
- int eidx = e_origindex[e];
- if (eidx != ORIGINDEX_NONE && (medge->flag & ME_LOOSEEDGE)) {
- for (int i = 0; i < 2; ++i) {
- int vidx = (i == 0) ? medge->v1 : medge->v2;
- if (vbo_pos) {
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), mvert[vidx].co);
- }
- if (vbo_verts) {
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- if (vbo_edges) {
- *((uint *)GPU_vertbuf_raw_step(&raw_edges)) = eidx;
- }
- }
- }
- }
- /* Loose verts */
- for (int v = 0; v < vert_len; v++, mvert++) {
- int vidx = v_origindex[v];
- if (vidx != ORIGINDEX_NONE) {
- MVert *eve = BM_vert_at_index(bm, vidx);
- if (eve->e == NULL) {
- if (vbo_pos) {
- copy_v3_v3(GPU_vertbuf_raw_step(&raw_pos), mvert->co);
- }
- if (vbo_verts) {
- *((uint *)GPU_vertbuf_raw_step(&raw_verts)) = vidx;
- }
- }
- }
- }
-#endif
- }
- /* Don't resize */
-}
-
-/* TODO: We could use gl_PrimitiveID as index instead of using another VBO. */
-static void mesh_create_edit_facedots_select_id(MeshRenderData *rdata,
- GPUVertBuf *vbo,
- Scene *scene,
- Object *ob)
-{
- const int poly_len = mesh_render_data_polys_len_get_maybe_mapped(rdata);
-
- static GPUVertFormat format = {0};
- static struct {
- uint idx;
- } attr_id;
- if (format.attr_len == 0) {
- attr_id.idx = GPU_vertformat_attr_add(&format, "color", GPU_COMP_U32, 1, GPU_FETCH_INT);
- }
-
- GPUVertBufRaw idx_step;
- GPU_vertbuf_init_with_format(vbo, &format);
- GPU_vertbuf_data_alloc(vbo, poly_len);
- GPU_vertbuf_attr_get_raw_data(vbo, attr_id.idx, &idx_step);
-
- /* Keep in sync with mesh_create_edit_facedots(). */
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- for (int poly = 0; poly < poly_len; poly++) {
- const BMFace *efa = BM_face_at_index(rdata->edit_bmesh->bm, poly);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- *((uint *)GPU_vertbuf_raw_step(&idx_step)) = poly;
- }
- }
- }
- else {
- for (int poly = 0; poly < poly_len; poly++) {
- *((uint *)GPU_vertbuf_raw_step(&idx_step)) = poly;
- }
- }
- }
- else {
- const int *p_origindex = rdata->mapped.p_origindex;
- if (modifiers_usesSubsurfFacedots(scene, ob)) {
- Mesh *me_cage = rdata->mapped.me_cage;
- const MPoly *mpoly = me_cage->mpoly;
- for (int p = 0; p < poly_len; p++, mpoly++) {
- const int p_orig = p_origindex[p];
- if (p_orig != ORIGINDEX_NONE) {
- const MLoop *mloop = me_cage->mloop + mpoly->loopstart;
- for (int l = 0; l < mpoly->totloop; l++, mloop++) {
- if (me_cage->mvert[mloop->v].flag & ME_VERT_FACEDOT) {
- const BMFace *efa = BM_face_at_index(rdata->edit_bmesh->bm, p_orig);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- *((uint *)GPU_vertbuf_raw_step(&idx_step)) = p_orig;
- }
- }
- }
- }
- }
- }
- else {
- for (int poly = 0; poly < poly_len; poly++) {
- const int p_orig = p_origindex[poly];
- if (p_orig != ORIGINDEX_NONE) {
- const BMFace *efa = BM_face_at_index(rdata->edit_bmesh->bm, p_orig);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- *((uint *)GPU_vertbuf_raw_step(&idx_step)) = p_orig;
- }
- }
- }
- }
- }
-
- /* Resize & Finish */
- int facedot_len_used = GPU_vertbuf_raw_used(&idx_step);
- if (facedot_len_used != poly_len) {
- GPU_vertbuf_data_resize(vbo, facedot_len_used);
- }
-}
-
-static void mesh_create_pos_and_nor(MeshRenderData *rdata, GPUVertBuf *vbo)
-{
- static GPUVertFormat format = {0};
- static struct {
- uint pos, nor;
- } attr_id;
- if (format.attr_len == 0) {
- attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- attr_id.nor = GPU_vertformat_attr_add(
- &format, "nor", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
- }
-
- GPU_vertbuf_init_with_format(vbo, &format);
- const int vbo_len_capacity = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- GPU_vertbuf_data_alloc(vbo, vbo_len_capacity);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter;
- BMVert *eve;
- uint i;
-
- mesh_render_data_ensure_vert_normals_pack(rdata);
- GPUPackedNormal *vnor = rdata->vert_normals_pack;
-
- BM_ITER_MESH_INDEX (eve, &iter, bm, BM_VERTS_OF_MESH, i) {
- GPU_vertbuf_attr_set(vbo, attr_id.pos, i, eve->co);
- GPU_vertbuf_attr_set(vbo, attr_id.nor, i, &vnor[i]);
- }
- BLI_assert(i == vbo_len_capacity);
- }
- else {
- for (int i = 0; i < vbo_len_capacity; i++) {
- const MVert *mv = &rdata->mvert[i];
- GPUPackedNormal vnor_pack = GPU_normal_convert_i10_s3(mv->no);
- vnor_pack.w = (mv->flag & ME_HIDE) ? -1 : ((mv->flag & SELECT) ? 1 : 0);
- GPU_vertbuf_attr_set(vbo, attr_id.pos, i, rdata->mvert[i].co);
- GPU_vertbuf_attr_set(vbo, attr_id.nor, i, &vnor_pack);
- }
- }
- }
- else {
- const MVert *mvert = rdata->mapped.me_cage->mvert;
- const int *v_origindex = rdata->mapped.v_origindex;
- for (int i = 0; i < vbo_len_capacity; i++) {
- const int v_orig = v_origindex[i];
- if (v_orig != ORIGINDEX_NONE) {
- const MVert *mv = &mvert[i];
- GPUPackedNormal vnor_pack = GPU_normal_convert_i10_s3(mv->no);
- vnor_pack.w = (mv->flag & ME_HIDE) ? -1 : ((mv->flag & SELECT) ? 1 : 0);
- GPU_vertbuf_attr_set(vbo, attr_id.pos, i, mv->co);
- GPU_vertbuf_attr_set(vbo, attr_id.nor, i, &vnor_pack);
- }
- }
- }
-}
-
-static void mesh_create_weights(MeshRenderData *rdata,
- GPUVertBuf *vbo,
- DRW_MeshWeightState *wstate)
-{
- static GPUVertFormat format = {0};
- static struct {
- uint weight;
- } attr_id;
- if (format.attr_len == 0) {
- attr_id.weight = GPU_vertformat_attr_add(&format, "weight", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- }
-
- const int vbo_len_capacity = mesh_render_data_verts_len_get_maybe_mapped(rdata);
-
- mesh_render_data_ensure_vert_weight(rdata, wstate);
- const float *vert_weight = rdata->vert_weight;
-
- GPU_vertbuf_init_with_format(vbo, &format);
- /* Meh, another allocation / copy for no benefit.
- * Needed because rdata->vert_weight is freed afterwards and
- * GPU module don't have a GPU_vertbuf_data_from_memory or similar. */
- /* TODO get rid of the extra allocation/copy. */
- GPU_vertbuf_data_alloc(vbo, vbo_len_capacity);
- GPU_vertbuf_attr_fill(vbo, attr_id.weight, vert_weight);
-}
-
-static float mesh_loop_edge_factor_get(const float f_no[3],
- const float v_co[3],
- const float v_no[3],
- const float v_next_co[3])
-{
- float enor[3], evec[3];
- sub_v3_v3v3(evec, v_next_co, v_co);
- cross_v3_v3v3(enor, v_no, evec);
- normalize_v3(enor);
- float d = fabsf(dot_v3v3(enor, f_no));
- /* Rescale to the slider range. */
- d *= (1.0f / 0.065f);
- CLAMP(d, 0.0f, 1.0f);
- return d;
-}
-
-static void vertbuf_raw_step_u8(GPUVertBufRaw *wd_step, const uchar wiredata)
-{
- *((uchar *)GPU_vertbuf_raw_step(wd_step)) = wiredata;
-}
-
-static void vertbuf_raw_step_u8_to_f32(GPUVertBufRaw *wd_step, const uchar wiredata)
-{
- *((float *)GPU_vertbuf_raw_step(wd_step)) = wiredata / 255.0f;
-}
-
-static void mesh_create_loop_edge_fac(MeshRenderData *rdata, GPUVertBuf *vbo)
-{
- static GPUVertFormat format = {0};
- static struct {
- uint wd;
- } attr_id;
- static union {
- float f;
- uchar u;
- } data;
- static void (*vertbuf_raw_step)(GPUVertBufRaw *, const uchar);
- if (format.attr_len == 0) {
- if (!GPU_crappy_amd_driver()) {
- /* Some AMD drivers strangely crash with a vbo with this format. */
- attr_id.wd = GPU_vertformat_attr_add(
- &format, "wd", GPU_COMP_U8, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
- vertbuf_raw_step = vertbuf_raw_step_u8;
- data.u = UCHAR_MAX;
- }
- else {
- attr_id.wd = GPU_vertformat_attr_add(&format, "wd", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- vertbuf_raw_step = vertbuf_raw_step_u8_to_f32;
- data.f = 1.0f;
- }
- }
- const int poly_len = mesh_render_data_polys_len_get(rdata);
- const int loop_len = mesh_render_data_loops_len_get(rdata);
- const int edge_len = mesh_render_data_edges_len_get(rdata);
-
- GPU_vertbuf_init_with_format(vbo, &format);
- GPU_vertbuf_data_alloc(vbo, loop_len);
-
- GPUVertBufRaw wd_step;
- GPU_vertbuf_attr_get_raw_data(vbo, attr_id.wd, &wd_step);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop;
- BMFace *efa;
- BMLoop *loop;
- uint f;
-
- BM_ITER_MESH_INDEX (efa, &iter_efa, bm, BM_FACES_OF_MESH, f) {
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- float ratio = mesh_loop_edge_factor_get(
- efa->no, loop->v->co, loop->v->no, loop->next->v->co);
- vertbuf_raw_step(&wd_step, ratio * 253 + 1);
- }
- }
- BLI_assert(GPU_vertbuf_raw_used(&wd_step) == loop_len);
- }
- else {
- const MVert *mvert = rdata->mvert;
- const MPoly *mpoly = rdata->mpoly;
- const MLoop *mloop = rdata->mloop;
- MEdge *medge = (MEdge *)rdata->medge;
- bool use_edge_render = false;
-
- /* TODO(fclem) We don't need them to be packed. But we need rdata->poly_normals */
- mesh_render_data_ensure_poly_normals_pack(rdata);
-
- /* Reset flag */
- for (int edge = 0; edge < edge_len; ++edge) {
- /* NOTE: not thread safe. */
- medge[edge].flag &= ~ME_EDGE_TMP_TAG;
-
- /* HACK(fclem) Feels like a hack. Detecting the need for edge render. */
- if ((medge[edge].flag & ME_EDGERENDER) == 0) {
- use_edge_render = true;
- }
- }
-
- for (int a = 0; a < poly_len; a++, mpoly++) {
- const float *fnor = rdata->poly_normals[a];
- for (int b = 0; b < mpoly->totloop; b++) {
- const MLoop *ml1 = &mloop[mpoly->loopstart + b];
- const MLoop *ml2 = &mloop[mpoly->loopstart + (b + 1) % mpoly->totloop];
-
- /* Will only work for edges that have an odd number of faces connected. */
- MEdge *ed = (MEdge *)rdata->medge + ml1->e;
- ed->flag ^= ME_EDGE_TMP_TAG;
-
- if (use_edge_render) {
- vertbuf_raw_step(&wd_step, (ed->flag & ME_EDGERENDER) ? 255 : 0);
- }
- else {
- float vnor_f[3];
- normal_short_to_float_v3(vnor_f, mvert[ml1->v].no);
- float ratio = mesh_loop_edge_factor_get(
- fnor, mvert[ml1->v].co, vnor_f, mvert[ml2->v].co);
- vertbuf_raw_step(&wd_step, ratio * 253 + 1);
- }
- }
- }
- /* Gather non-manifold edges. */
- for (int l = 0; l < loop_len; l++, mloop++) {
- MEdge *ed = (MEdge *)rdata->medge + mloop->e;
- if (ed->flag & ME_EDGE_TMP_TAG) {
- GPU_vertbuf_attr_set(vbo, attr_id.wd, l, &data);
- }
- }
-
- BLI_assert(loop_len == GPU_vertbuf_raw_used(&wd_step));
- }
- }
- else {
- BLI_assert(0);
- }
-}
-
-static void mesh_create_loop_pos_and_nor(MeshRenderData *rdata, GPUVertBuf *vbo)
-{
- /* TODO deduplicate format creation*/
- static GPUVertFormat format = {0};
- static struct {
- uint pos, nor;
- } attr_id;
- if (format.attr_len == 0) {
- attr_id.pos = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- attr_id.nor = GPU_vertformat_attr_add(
- &format, "nor", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
- }
- const int poly_len = mesh_render_data_polys_len_get(rdata);
- const int loop_len = mesh_render_data_loops_len_get(rdata);
-
- GPU_vertbuf_init_with_format(vbo, &format);
- GPU_vertbuf_data_alloc(vbo, loop_len);
-
- GPUVertBufRaw pos_step, nor_step;
- GPU_vertbuf_attr_get_raw_data(vbo, attr_id.pos, &pos_step);
- GPU_vertbuf_attr_get_raw_data(vbo, attr_id.nor, &nor_step);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- const GPUPackedNormal *vnor, *pnor;
- const float(*lnors)[3] = rdata->loop_normals;
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop;
- BMFace *efa;
- BMLoop *loop;
- uint f;
-
- if (rdata->loop_normals == NULL) {
- mesh_render_data_ensure_poly_normals_pack(rdata);
- mesh_render_data_ensure_vert_normals_pack(rdata);
- vnor = rdata->vert_normals_pack;
- pnor = rdata->poly_normals_pack;
- }
-
- BM_ITER_MESH_INDEX (efa, &iter_efa, bm, BM_FACES_OF_MESH, f) {
- const bool face_smooth = BM_elem_flag_test(efa, BM_ELEM_SMOOTH);
-
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- BLI_assert(GPU_vertbuf_raw_used(&pos_step) == BM_elem_index_get(loop));
- copy_v3_v3(GPU_vertbuf_raw_step(&pos_step), loop->v->co);
-
- if (lnors) {
- GPUPackedNormal plnor = GPU_normal_convert_i10_v3(lnors[BM_elem_index_get(loop)]);
- *((GPUPackedNormal *)GPU_vertbuf_raw_step(&nor_step)) = plnor;
- }
- else if (!face_smooth) {
- *((GPUPackedNormal *)GPU_vertbuf_raw_step(&nor_step)) = pnor[f];
- }
- else {
- *((GPUPackedNormal *)GPU_vertbuf_raw_step(
- &nor_step)) = vnor[BM_elem_index_get(loop->v)];
- }
- }
- }
- BLI_assert(GPU_vertbuf_raw_used(&pos_step) == loop_len);
- }
- else {
- const MVert *mvert = rdata->mvert;
- const MPoly *mpoly = rdata->mpoly;
-
- if (rdata->loop_normals == NULL) {
- mesh_render_data_ensure_poly_normals_pack(rdata);
- }
-
- for (int a = 0; a < poly_len; a++, mpoly++) {
- const MLoop *mloop = rdata->mloop + mpoly->loopstart;
- const float(*lnors)[3] = (rdata->loop_normals) ? &rdata->loop_normals[mpoly->loopstart] :
- NULL;
- const GPUPackedNormal *fnor = (mpoly->flag & ME_SMOOTH) ? NULL :
- &rdata->poly_normals_pack[a];
- const int hide_select_flag = (mpoly->flag & ME_HIDE) ?
- -1 :
- ((mpoly->flag & ME_FACE_SEL) ? 1 : 0);
- for (int b = 0; b < mpoly->totloop; b++, mloop++) {
- copy_v3_v3(GPU_vertbuf_raw_step(&pos_step), mvert[mloop->v].co);
- GPUPackedNormal *pnor = (GPUPackedNormal *)GPU_vertbuf_raw_step(&nor_step);
- if (lnors) {
- *pnor = GPU_normal_convert_i10_v3(lnors[b]);
- }
- else if (fnor) {
- *pnor = *fnor;
- }
- else {
- *pnor = GPU_normal_convert_i10_s3(mvert[mloop->v].no);
- }
- pnor->w = hide_select_flag;
- }
- }
-
- BLI_assert(loop_len == GPU_vertbuf_raw_used(&pos_step));
- }
- }
- else {
- const int *p_origindex = rdata->mapped.p_origindex;
- const MVert *mvert = rdata->mvert;
- const MPoly *mpoly = rdata->mpoly;
-
- if (rdata->loop_normals == NULL) {
- mesh_render_data_ensure_poly_normals_pack(rdata);
- }
-
- for (int a = 0; a < poly_len; a++, mpoly++) {
- const MLoop *mloop = rdata->mloop + mpoly->loopstart;
- const float(*lnors)[3] = (rdata->loop_normals) ? &rdata->loop_normals[mpoly->loopstart] :
- NULL;
- const GPUPackedNormal *fnor = (mpoly->flag & ME_SMOOTH) ? NULL :
- &rdata->poly_normals_pack[a];
- if (p_origindex[a] == ORIGINDEX_NONE) {
- continue;
- }
- for (int b = 0; b < mpoly->totloop; b++, mloop++) {
- copy_v3_v3(GPU_vertbuf_raw_step(&pos_step), mvert[mloop->v].co);
- GPUPackedNormal *pnor = (GPUPackedNormal *)GPU_vertbuf_raw_step(&nor_step);
- if (lnors) {
- *pnor = GPU_normal_convert_i10_v3(lnors[b]);
- }
- else if (fnor) {
- *pnor = *fnor;
- }
- else {
- *pnor = GPU_normal_convert_i10_s3(mvert[mloop->v].no);
- }
- }
- }
- }
-
- int vbo_len_used = GPU_vertbuf_raw_used(&pos_step);
- if (vbo_len_used < loop_len) {
- GPU_vertbuf_data_resize(vbo, vbo_len_used);
- }
-}
-
-static void mesh_create_loop_orco(MeshRenderData *rdata, GPUVertBuf *vbo)
-{
- const uint loops_len = mesh_render_data_loops_len_get(rdata);
-
- /* initialize vertex format */
- GPUVertFormat format = {0};
- GPUVertBufRaw vbo_step;
-
- /* FIXME(fclem): We use the last component as a way to differentiate from generic vertex attribs.
- * This is a substential waste of Vram and should be done another way. Unfortunately,
- * at the time of writing, I did not found any other "non disruptive" alternative. */
- uint attr_id = GPU_vertformat_attr_add(&format, "orco", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
-
- GPU_vertbuf_init_with_format(vbo, &format);
- GPU_vertbuf_data_alloc(vbo, loops_len);
- GPU_vertbuf_attr_get_raw_data(vbo, attr_id, &vbo_step);
-
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop;
- BMFace *efa;
- BMLoop *loop;
-
- BM_ITER_MESH (efa, &iter_efa, bm, BM_FACES_OF_MESH) {
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- float *data = (float *)GPU_vertbuf_raw_step(&vbo_step);
- copy_v3_v3(data, rdata->orco[BM_elem_index_get(loop->v)]);
- data[3] = 0.0; /* Tag as not a generic attrib */
- }
- }
- }
- else {
- for (uint l = 0; l < loops_len; l++) {
- float *data = (float *)GPU_vertbuf_raw_step(&vbo_step);
- copy_v3_v3(data, rdata->orco[rdata->mloop[l].v]);
- data[3] = 0.0; /* Tag as not a generic attrib */
- }
- }
-}
-
-static void mesh_create_loop_uv_and_tan(MeshRenderData *rdata, GPUVertBuf *vbo)
-{
- const uint loops_len = mesh_render_data_loops_len_get(rdata);
- const uint uv_len = rdata->cd.layers.uv_len;
- const uint tangent_len = rdata->cd.layers.tangent_len;
- const uint layers_combined_len = uv_len + tangent_len;
-
- GPUVertBufRaw *layers_combined_step = BLI_array_alloca(layers_combined_step,
- layers_combined_len);
- GPUVertBufRaw *uv_step = layers_combined_step;
- GPUVertBufRaw *tangent_step = uv_step + uv_len;
-
- uint *layers_combined_id = BLI_array_alloca(layers_combined_id, layers_combined_len);
- uint *uv_id = layers_combined_id;
- uint *tangent_id = uv_id + uv_len;
-
- /* initialize vertex format */
- GPUVertFormat format = {0};
-
- for (uint i = 0; i < uv_len; i++) {
- const char *attr_name = mesh_render_data_uv_layer_uuid_get(rdata, i);
-#if 0 /* these are clamped. Maybe use them as an option in the future */
- uv_id[i] = GPU_vertformat_attr_add(
- &format, attr_name, GPU_COMP_I16, 2, GPU_FETCH_INT_TO_FLOAT_UNIT);
-#else
- uv_id[i] = GPU_vertformat_attr_add(&format, attr_name, GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
-#endif
- /* Auto Name */
- attr_name = mesh_render_data_uv_auto_layer_uuid_get(rdata, i);
- GPU_vertformat_alias_add(&format, attr_name);
-
- if (i == rdata->cd.layers.uv_render) {
- GPU_vertformat_alias_add(&format, "u");
- }
- if (i == rdata->cd.layers.uv_active) {
- GPU_vertformat_alias_add(&format, "au");
- }
- if (i == rdata->cd.layers.uv_mask_active) {
- GPU_vertformat_alias_add(&format, "mu");
- }
- }
-
- for (uint i = 0; i < tangent_len; i++) {
- const char *attr_name = mesh_render_data_tangent_layer_uuid_get(rdata, i);
-#ifdef USE_COMP_MESH_DATA
- tangent_id[i] = GPU_vertformat_attr_add(
- &format, attr_name, GPU_COMP_I16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
-#else
- tangent_id[i] = GPU_vertformat_attr_add(&format, attr_name, GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
-#endif
- if (i == rdata->cd.layers.tangent_render) {
- GPU_vertformat_alias_add(&format, "t");
- }
- if (i == rdata->cd.layers.tangent_active) {
- GPU_vertformat_alias_add(&format, "at");
- }
- }
-
- /* HACK: Create a dummy attribute in case there is no valid UV/tangent layer. */
- if (layers_combined_len == 0) {
- GPU_vertformat_attr_add(&format, "dummy", GPU_COMP_U8, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
- }
-
- GPU_vertbuf_init_with_format(vbo, &format);
- GPU_vertbuf_data_alloc(vbo, loops_len);
-
- for (uint i = 0; i < uv_len; i++) {
- GPU_vertbuf_attr_get_raw_data(vbo, uv_id[i], &uv_step[i]);
- }
- for (uint i = 0; i < tangent_len; i++) {
- GPU_vertbuf_attr_get_raw_data(vbo, tangent_id[i], &tangent_step[i]);
- }
-
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop;
- BMFace *efa;
- BMLoop *loop;
-
- BM_ITER_MESH (efa, &iter_efa, bm, BM_FACES_OF_MESH) {
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- /* UVs */
- for (uint j = 0; j < uv_len; j++) {
- const uint layer_offset = rdata->cd.offset.uv[j];
- const float *elem = ((MLoopUV *)BM_ELEM_CD_GET_VOID_P(loop, layer_offset))->uv;
- copy_v2_v2(GPU_vertbuf_raw_step(&uv_step[j]), elem);
- }
- /* TANGENTs */
- for (uint j = 0; j < tangent_len; j++) {
- float(*layer_data)[4] = rdata->cd.layers.tangent[j];
- const float *elem = layer_data[BM_elem_index_get(loop)];
-#ifdef USE_COMP_MESH_DATA
- normal_float_to_short_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
-#else
- copy_v4_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
-#endif
- }
- }
- }
- }
- else {
- for (uint loop = 0; loop < loops_len; loop++) {
- /* UVs */
- for (uint j = 0; j < uv_len; j++) {
- const MLoopUV *layer_data = rdata->cd.layers.uv[j];
- const float *elem = layer_data[loop].uv;
- copy_v2_v2(GPU_vertbuf_raw_step(&uv_step[j]), elem);
- }
- /* TANGENTs */
- for (uint j = 0; j < tangent_len; j++) {
- float(*layer_data)[4] = rdata->cd.layers.tangent[j];
- const float *elem = layer_data[loop];
-#ifdef USE_COMP_MESH_DATA
- normal_float_to_short_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
-#else
- copy_v4_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
-#endif
- }
- }
- }
-
-#ifndef NDEBUG
- /* Check all layers are write aligned. */
- if (layers_combined_len > 0) {
- int vbo_len_used = GPU_vertbuf_raw_used(&layers_combined_step[0]);
- for (uint i = 0; i < layers_combined_len; i++) {
- BLI_assert(vbo_len_used == GPU_vertbuf_raw_used(&layers_combined_step[i]));
- }
- }
-#endif
-
-#undef USE_COMP_MESH_DATA
-}
-
-static void mesh_create_loop_vcol(MeshRenderData *rdata, GPUVertBuf *vbo)
-{
- const uint loops_len = mesh_render_data_loops_len_get(rdata);
- const uint vcol_len = rdata->cd.layers.vcol_len;
-
- GPUVertBufRaw *vcol_step = BLI_array_alloca(vcol_step, vcol_len);
- uint *vcol_id = BLI_array_alloca(vcol_id, vcol_len);
-
- /* initialize vertex format */
- GPUVertFormat format = {0};
-
- for (uint i = 0; i < vcol_len; i++) {
- const char *attr_name = mesh_render_data_vcol_layer_uuid_get(rdata, i);
- vcol_id[i] = GPU_vertformat_attr_add(
- &format, attr_name, GPU_COMP_U8, 3, GPU_FETCH_INT_TO_FLOAT_UNIT);
- /* Auto layer */
- if (rdata->cd.layers.auto_vcol[i]) {
- attr_name = mesh_render_data_vcol_auto_layer_uuid_get(rdata, i);
- GPU_vertformat_alias_add(&format, attr_name);
- }
- if (i == rdata->cd.layers.vcol_render) {
- GPU_vertformat_alias_add(&format, "c");
- }
- if (i == rdata->cd.layers.vcol_active) {
- GPU_vertformat_alias_add(&format, "ac");
- }
- }
-
- GPU_vertbuf_init_with_format(vbo, &format);
- GPU_vertbuf_data_alloc(vbo, loops_len);
-
- for (uint i = 0; i < vcol_len; i++) {
- GPU_vertbuf_attr_get_raw_data(vbo, vcol_id[i], &vcol_step[i]);
- }
-
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop;
- BMFace *efa;
- BMLoop *loop;
-
- BM_ITER_MESH (efa, &iter_efa, bm, BM_FACES_OF_MESH) {
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- for (uint j = 0; j < vcol_len; j++) {
- const uint layer_offset = rdata->cd.offset.vcol[j];
- const uchar *elem = &((MLoopCol *)BM_ELEM_CD_GET_VOID_P(loop, layer_offset))->r;
- copy_v3_v3_uchar(GPU_vertbuf_raw_step(&vcol_step[j]), elem);
- }
- }
- }
- }
- else {
- for (uint loop = 0; loop < loops_len; loop++) {
- for (uint j = 0; j < vcol_len; j++) {
- const MLoopCol *layer_data = rdata->cd.layers.vcol[j];
- const uchar *elem = &layer_data[loop].r;
- copy_v3_v3_uchar(GPU_vertbuf_raw_step(&vcol_step[j]), elem);
- }
- }
- }
-
-#ifndef NDEBUG
- /* Check all layers are write aligned. */
- if (vcol_len > 0) {
- int vbo_len_used = GPU_vertbuf_raw_used(&vcol_step[0]);
- for (uint i = 0; i < vcol_len; i++) {
- BLI_assert(vbo_len_used == GPU_vertbuf_raw_used(&vcol_step[i]));
- }
- }
-#endif
-
-#undef USE_COMP_MESH_DATA
-}
-
-static void mesh_create_edit_facedots(MeshRenderData *rdata,
- GPUVertBuf *vbo_facedots_pos_nor_data,
- Scene *scene,
- Object *ob)
-{
- const int poly_len = mesh_render_data_polys_len_get_maybe_mapped(rdata);
- const int verts_facedot_len = poly_len;
- int facedot_len_used = 0;
-
- static struct {
- uint fdot_pos, fdot_nor_flag;
- } attr_id;
- static GPUVertFormat facedot_format = {0};
- if (facedot_format.attr_len == 0) {
- attr_id.fdot_pos = GPU_vertformat_attr_add(
- &facedot_format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- attr_id.fdot_nor_flag = GPU_vertformat_attr_add(
- &facedot_format, "norAndFlag", GPU_COMP_I10, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
- }
-
- if (DRW_TEST_ASSIGN_VBO(vbo_facedots_pos_nor_data)) {
- GPU_vertbuf_init_with_format(vbo_facedots_pos_nor_data, &facedot_format);
- GPU_vertbuf_data_alloc(vbo_facedots_pos_nor_data, verts_facedot_len);
- /* TODO(fclem): Maybe move data generation to mesh_render_data_create() */
- if (rdata->edit_bmesh) {
- if (rdata->edit_data && rdata->edit_data->vertexCos != NULL) {
- BKE_editmesh_cache_ensure_poly_normals(rdata->edit_bmesh, rdata->edit_data);
- BKE_editmesh_cache_ensure_poly_centers(rdata->edit_bmesh, rdata->edit_data);
- }
- }
- }
-
- if (rdata->mapped.use == false) {
- for (int i = 0; i < poly_len; i++) {
- if (add_edit_facedot(rdata,
- vbo_facedots_pos_nor_data,
- attr_id.fdot_pos,
- attr_id.fdot_nor_flag,
- i,
- facedot_len_used)) {
- facedot_len_used += 1;
- }
- }
- }
- else {
- if (modifiers_usesSubsurfFacedots(scene, ob)) {
- /* Facedots that follow surbsurf face center. */
- Mesh *me_cage = rdata->mapped.me_cage;
- const MPoly *mpoly = me_cage->mpoly;
- for (int p = 0; p < poly_len; p++, mpoly++) {
- const MLoop *mloop = me_cage->mloop + mpoly->loopstart;
- for (int l = 0; l < mpoly->totloop; l++, mloop++) {
- if (me_cage->mvert[mloop->v].flag & ME_VERT_FACEDOT) {
- if (add_edit_facedot_subdiv(rdata,
- vbo_facedots_pos_nor_data,
- attr_id.fdot_pos,
- attr_id.fdot_nor_flag,
- mloop->v,
- p,
- facedot_len_used)) {
- facedot_len_used += 1;
- }
- }
- }
- }
- }
- else {
- for (int i = 0; i < poly_len; i++) {
- if (add_edit_facedot_mapped(rdata,
- vbo_facedots_pos_nor_data,
- attr_id.fdot_pos,
- attr_id.fdot_nor_flag,
- i,
- facedot_len_used)) {
- facedot_len_used += 1;
- }
- }
- }
- }
-
- /* Resize & Finish */
- if (facedot_len_used != verts_facedot_len) {
- if (vbo_facedots_pos_nor_data != NULL) {
- GPU_vertbuf_data_resize(vbo_facedots_pos_nor_data, facedot_len_used);
- }
- }
-}
-
-static void mesh_create_edit_mesh_analysis(MeshRenderData *rdata, GPUVertBuf *vbo_mesh_analysis)
-{
- const MeshStatVis *mesh_stat_vis = &rdata->toolsettings->statvis;
-
- int mesh_analysis_len_used = 0;
-
- const uint loops_len = mesh_render_data_loops_len_get(rdata);
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter_efa, iter_loop;
- BMFace *efa;
- BMLoop *loop;
-
- static struct {
- uint weight;
- } attr_id;
- static GPUVertFormat mesh_analysis_format = {0};
- if (mesh_analysis_format.attr_len == 0) {
- attr_id.weight = GPU_vertformat_attr_add(
- &mesh_analysis_format, "weight_color", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
- }
-
- /* TODO(jbakker): Maybe move data generation to mesh_render_data_create() */
- BKE_editmesh_statvis_calc(rdata->edit_bmesh, rdata->edit_data, mesh_stat_vis);
-
- if (DRW_TEST_ASSIGN_VBO(vbo_mesh_analysis)) {
- GPU_vertbuf_init_with_format(vbo_mesh_analysis, &mesh_analysis_format);
- GPU_vertbuf_data_alloc(vbo_mesh_analysis, loops_len);
- }
-
- const bool is_vertex_data = mesh_stat_vis->type == SCE_STATVIS_SHARP;
- if (is_vertex_data) {
- BM_ITER_MESH (efa, &iter_efa, bm, BM_FACES_OF_MESH) {
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- uint vertex_index = BM_elem_index_get(loop->v);
- GPU_vertbuf_attr_set(vbo_mesh_analysis,
- attr_id.weight,
- mesh_analysis_len_used,
- &rdata->edit_bmesh->derivedVertColor[vertex_index]);
- mesh_analysis_len_used += 1;
- }
- }
- }
- else {
- uint face_index;
- BM_ITER_MESH_INDEX (efa, &iter_efa, bm, BM_FACES_OF_MESH, face_index) {
- BM_ITER_ELEM (loop, &iter_loop, efa, BM_LOOPS_OF_FACE) {
- GPU_vertbuf_attr_set(vbo_mesh_analysis,
- attr_id.weight,
- mesh_analysis_len_used,
- &rdata->edit_bmesh->derivedFaceColor[face_index]);
- mesh_analysis_len_used += 1;
- }
- }
- }
-
- // Free temp data in edit bmesh
- BKE_editmesh_color_free(rdata->edit_bmesh);
-
- /* Resize & Finish */
- if (mesh_analysis_len_used != loops_len) {
- if (vbo_mesh_analysis != NULL) {
- GPU_vertbuf_data_resize(vbo_mesh_analysis, mesh_analysis_len_used);
- }
- }
-}
-/* Indices */
-
-#define NO_EDGE INT_MAX
-static void mesh_create_edges_adjacency_lines(MeshRenderData *rdata,
- GPUIndexBuf *ibo,
- bool *r_is_manifold,
- const bool use_hide)
-{
- const MLoopTri *mlooptri;
- const int vert_len = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- const int tri_len = mesh_render_data_looptri_len_get_maybe_mapped(rdata);
-
- *r_is_manifold = true;
-
- /* Allocate max but only used indices are sent to GPU. */
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_LINES_ADJ, tri_len * 3, vert_len);
-
- if (rdata->mapped.use) {
- Mesh *me_cage = rdata->mapped.me_cage;
- mlooptri = BKE_mesh_runtime_looptri_ensure(me_cage);
- }
- else {
- mlooptri = rdata->mlooptri;
- }
-
- EdgeHash *eh = BLI_edgehash_new_ex(__func__, tri_len * 3);
- /* Create edges for each pair of triangles sharing an edge. */
- for (int i = 0; i < tri_len; i++) {
- for (int e = 0; e < 3; e++) {
- uint v0, v1, v2;
- if (rdata->mapped.use) {
- const MLoop *mloop = rdata->mloop;
- const MLoopTri *mlt = mlooptri + i;
- const int p_orig = rdata->mapped.p_origindex[mlt->poly];
- if (p_orig != ORIGINDEX_NONE) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMFace *efa = BM_face_at_index(bm, p_orig);
- /* Assume 'use_hide' */
- if (BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- break;
- }
- }
- v0 = mloop[mlt->tri[e]].v;
- v1 = mloop[mlt->tri[(e + 1) % 3]].v;
- v2 = mloop[mlt->tri[(e + 2) % 3]].v;
- }
- else if (rdata->edit_bmesh) {
- const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
- if (BM_elem_flag_test(bm_looptri[0]->f, BM_ELEM_HIDDEN)) {
- break;
- }
- v0 = BM_elem_index_get(bm_looptri[e]->v);
- v1 = BM_elem_index_get(bm_looptri[(e + 1) % 3]->v);
- v2 = BM_elem_index_get(bm_looptri[(e + 2) % 3]->v);
- }
- else {
- const MLoop *mloop = rdata->mloop;
- const MLoopTri *mlt = mlooptri + i;
- const MPoly *mp = &rdata->mpoly[mlt->poly];
- if (use_hide && (mp->flag & ME_HIDE)) {
- break;
- }
- v0 = mloop[mlt->tri[e]].v;
- v1 = mloop[mlt->tri[(e + 1) % 3]].v;
- v2 = mloop[mlt->tri[(e + 2) % 3]].v;
- }
- bool inv_indices = (v1 > v2);
- void **pval;
- bool value_is_init = BLI_edgehash_ensure_p(eh, v1, v2, &pval);
- int v_data = POINTER_AS_INT(*pval);
- if (!value_is_init || v_data == NO_EDGE) {
- /* Save the winding order inside the sign bit. Because the
- * edgehash sort the keys and we need to compare winding later. */
- int value = (int)v0 + 1; /* Int 0 bm_looptricannot be signed */
- *pval = POINTER_FROM_INT((inv_indices) ? -value : value);
- }
- else {
- /* HACK Tag as not used. Prevent overhead of BLI_edgehash_remove. */
- *pval = POINTER_FROM_INT(NO_EDGE);
- bool inv_opposite = (v_data < 0);
- uint v_opposite = (uint)abs(v_data) - 1;
-
- if (inv_opposite == inv_indices) {
- /* Don't share edge if triangles have non matching winding. */
- GPU_indexbuf_add_line_adj_verts(&elb, v0, v1, v2, v0);
- GPU_indexbuf_add_line_adj_verts(&elb, v_opposite, v1, v2, v_opposite);
- *r_is_manifold = false;
- }
- else {
- GPU_indexbuf_add_line_adj_verts(&elb, v0, v1, v2, v_opposite);
- }
- }
- }
- }
- /* Create edges for remaining non manifold edges. */
- EdgeHashIterator *ehi;
- for (ehi = BLI_edgehashIterator_new(eh); BLI_edgehashIterator_isDone(ehi) == false;
- BLI_edgehashIterator_step(ehi)) {
- uint v1, v2;
- int v_data = POINTER_AS_INT(BLI_edgehashIterator_getValue(ehi));
- if (v_data == NO_EDGE) {
- continue;
- }
- BLI_edgehashIterator_getKey(ehi, &v1, &v2);
- uint v0 = (uint)abs(v_data) - 1;
- if (v_data < 0) { /* inv_opposite */
- SWAP(uint, v1, v2);
- }
- GPU_indexbuf_add_line_adj_verts(&elb, v0, v1, v2, v0);
- *r_is_manifold = false;
- }
- BLI_edgehashIterator_free(ehi);
- BLI_edgehash_free(eh, NULL);
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-#undef NO_EDGE
-
-static void mesh_create_edges_lines(MeshRenderData *rdata, GPUIndexBuf *ibo, const bool use_hide)
-{
- const int verts_len = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- const int edges_len = mesh_render_data_edges_len_get_maybe_mapped(rdata);
-
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_LINES, edges_len, verts_len);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter;
- BMEdge *eed;
-
- BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) {
- /* use_hide always for edit-mode */
- if (BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
- continue;
- }
- GPU_indexbuf_add_line_verts(&elb, BM_elem_index_get(eed->v1), BM_elem_index_get(eed->v2));
- }
- }
- else {
- const MEdge *ed = rdata->medge;
- for (int i = 0; i < edges_len; i++, ed++) {
- if ((ed->flag & ME_EDGERENDER) == 0) {
- continue;
- }
- if (!(use_hide && (ed->flag & ME_HIDE))) {
- GPU_indexbuf_add_line_verts(&elb, ed->v1, ed->v2);
- }
- }
- }
- }
- else {
- BMesh *bm = rdata->edit_bmesh->bm;
- const MEdge *edge = rdata->medge;
- for (int i = 0; i < edges_len; i++, edge++) {
- const int p_orig = rdata->mapped.e_origindex[i];
- if (p_orig != ORIGINDEX_NONE) {
- BMEdge *eed = BM_edge_at_index(bm, p_orig);
- if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
- GPU_indexbuf_add_line_verts(&elb, edge->v1, edge->v2);
- }
- }
- }
- }
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
-static void mesh_create_surf_tris(MeshRenderData *rdata, GPUIndexBuf *ibo, const bool use_hide)
-{
- const int vert_len = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- const int tri_len = mesh_render_data_looptri_len_get(rdata);
-
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_TRIS, tri_len, vert_len * 3);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- for (int i = 0; i < tri_len; i++) {
- const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
- const BMFace *bm_face = bm_looptri[0]->f;
- /* use_hide always for edit-mode */
- if (BM_elem_flag_test(bm_face, BM_ELEM_HIDDEN)) {
- continue;
- }
- GPU_indexbuf_add_tri_verts(&elb,
- BM_elem_index_get(bm_looptri[0]->v),
- BM_elem_index_get(bm_looptri[1]->v),
- BM_elem_index_get(bm_looptri[2]->v));
- }
- }
- else {
- const MLoop *loops = rdata->mloop;
- for (int i = 0; i < tri_len; i++) {
- const MLoopTri *mlt = &rdata->mlooptri[i];
- const MPoly *mp = &rdata->mpoly[mlt->poly];
- if (use_hide && (mp->flag & ME_HIDE)) {
- continue;
- }
- GPU_indexbuf_add_tri_verts(
- &elb, loops[mlt->tri[0]].v, loops[mlt->tri[1]].v, loops[mlt->tri[2]].v);
- }
- }
- }
- else {
- /* Note: mapped doesn't support lnors yet. */
- BMesh *bm = rdata->edit_bmesh->bm;
- Mesh *me_cage = rdata->mapped.me_cage;
-
- const MLoop *loops = rdata->mloop;
- const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(me_cage);
- for (int i = 0; i < tri_len; i++) {
- const MLoopTri *mlt = &mlooptri[i];
- const int p_orig = rdata->mapped.p_origindex[mlt->poly];
- if (p_orig != ORIGINDEX_NONE) {
- /* Assume 'use_hide' */
- BMFace *efa = BM_face_at_index(bm, p_orig);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- GPU_indexbuf_add_tri_verts(
- &elb, loops[mlt->tri[0]].v, loops[mlt->tri[1]].v, loops[mlt->tri[2]].v);
- }
- }
- }
- }
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
-static void mesh_create_loops_lines(MeshRenderData *rdata, GPUIndexBuf *ibo, const bool use_hide)
-{
- const int edge_len = mesh_render_data_edges_len_get(rdata);
- const int loop_len = mesh_render_data_loops_len_get(rdata);
- const int poly_len = mesh_render_data_polys_len_get(rdata);
-
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_LINES, edge_len, loop_len);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter;
- BMEdge *bm_edge;
-
- BM_ITER_MESH (bm_edge, &iter, bm, BM_EDGES_OF_MESH) {
- /* use_hide always for edit-mode */
- if (!BM_elem_flag_test(bm_edge, BM_ELEM_HIDDEN) && bm_edge->l != NULL) {
- BMLoop *bm_loop1 = bm_vert_find_first_loop_visible_inline(bm_edge->v1);
- BMLoop *bm_loop2 = bm_vert_find_first_loop_visible_inline(bm_edge->v2);
- int v1 = BM_elem_index_get(bm_loop1);
- int v2 = BM_elem_index_get(bm_loop2);
- if (v1 > v2) {
- SWAP(int, v1, v2);
- }
- GPU_indexbuf_add_line_verts(&elb, v1, v2);
- }
- }
- }
- else {
- MLoop *mloop = (MLoop *)rdata->mloop;
- MEdge *medge = (MEdge *)rdata->medge;
-
- /* Reset flag */
- for (int edge = 0; edge < edge_len; ++edge) {
- /* NOTE: not thread safe. */
- medge[edge].flag &= ~ME_EDGE_TMP_TAG;
- }
-
- for (int poly = 0; poly < poly_len; poly++) {
- const MPoly *mp = &rdata->mpoly[poly];
- if (!(use_hide && (mp->flag & ME_HIDE))) {
- for (int j = 0; j < mp->totloop; j++) {
- MEdge *ed = (MEdge *)rdata->medge + mloop[mp->loopstart + j].e;
- if ((ed->flag & ME_EDGE_TMP_TAG) == 0) {
- ed->flag |= ME_EDGE_TMP_TAG;
- int v1 = mp->loopstart + j;
- int v2 = mp->loopstart + (j + 1) % mp->totloop;
- GPU_indexbuf_add_line_verts(&elb, v1, v2);
- }
- }
- }
- }
- }
- }
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
-static void mesh_create_loops_lines_paint_mask(MeshRenderData *rdata, GPUIndexBuf *ibo)
-{
- const int loop_len = mesh_render_data_loops_len_get(rdata);
- const int poly_len = mesh_render_data_polys_len_get(rdata);
- const int edge_len = mesh_render_data_edges_len_get(rdata);
-
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_LINES, loop_len, loop_len);
-
- if (rdata->edit_bmesh) {
- /* painting does not use the edit_bmesh */
- BLI_assert(0);
- }
- else {
- if (rdata->me->editflag & ME_EDIT_PAINT_FACE_SEL) {
- /* Each edge has two bits used to count selected edges as 0, 1, 2+. */
- BLI_bitmap *edges_used = BLI_BITMAP_NEW(edge_len * 2, __func__);
-
- /* Fill the edge bitmap table. */
- for (int poly = 0; poly < poly_len; poly++) {
- const MPoly *mpoly = &rdata->mpoly[poly];
-
- /* Do not check faces that are hidden and faces that aren't selected */
- if (mpoly->flag & ME_HIDE || ((mpoly->flag & ME_FACE_SEL) == 0)) {
- continue;
- }
-
- for (int loop_index = mpoly->loopstart, loop_index_end = mpoly->loopstart + mpoly->totloop;
- loop_index < loop_index_end;
- loop_index++) {
- const MLoop *mloop = &rdata->mloop[loop_index];
- const int e_a = mloop->e * 2;
- const int e_b = e_a + 1;
- if (!BLI_BITMAP_TEST(edges_used, e_a)) {
- BLI_BITMAP_ENABLE(edges_used, e_a);
- }
- else {
- BLI_BITMAP_ENABLE(edges_used, e_b);
- }
- }
- }
-
- for (int poly = 0; poly < poly_len; poly++) {
- const MPoly *mpoly = &rdata->mpoly[poly];
- if (!(mpoly->flag & ME_HIDE)) {
-
- for (int loop_index_next = mpoly->loopstart,
- loop_index_end = mpoly->loopstart + mpoly->totloop,
- loop_index_curr = loop_index_end - 1;
- loop_index_next < loop_index_end;
- loop_index_curr = loop_index_next++) {
- const MLoop *mloop = &rdata->mloop[loop_index_curr];
- const int e_a = mloop->e * 2;
- const int e_b = e_a + 1;
-
- /* Draw if a boundary or entirely unselected. */
- if (!BLI_BITMAP_TEST(edges_used, e_b)) {
- GPU_indexbuf_add_line_verts(&elb, loop_index_curr, loop_index_next);
- }
- }
- }
- }
-
- MEM_freeN(edges_used);
- }
- else {
- /* Add edges. */
- for (int poly = 0; poly < poly_len; poly++) {
- const MPoly *mpoly = &rdata->mpoly[poly];
- for (int loop_index_next = mpoly->loopstart,
- loop_index_end = mpoly->loopstart + mpoly->totloop,
- loop_index_curr = loop_index_end - 1;
- loop_index_next < loop_index_end;
- loop_index_curr = loop_index_next++) {
- GPU_indexbuf_add_line_verts(&elb, loop_index_curr, loop_index_next);
- }
- }
- }
- }
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
-static void mesh_create_loops_line_strips(MeshRenderData *rdata,
- GPUIndexBuf *ibo,
- const bool use_hide)
-{
- const int loop_len = mesh_render_data_loops_len_get(rdata);
- const int poly_len = mesh_render_data_polys_len_get(rdata);
-
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init_ex(&elb, GPU_PRIM_LINE_STRIP, loop_len + poly_len * 2, loop_len);
-
- uint v_index = 0;
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter;
- BMFace *bm_face;
-
- BM_ITER_MESH (bm_face, &iter, bm, BM_FACES_OF_MESH) {
- /* use_hide always for edit-mode */
- if (!BM_elem_flag_test(bm_face, BM_ELEM_HIDDEN)) {
- for (int i = 0; i < bm_face->len; i++) {
- GPU_indexbuf_add_generic_vert(&elb, v_index + i);
- }
- /* Finish loop and restart primitive. */
- GPU_indexbuf_add_generic_vert(&elb, v_index);
- GPU_indexbuf_add_primitive_restart(&elb);
- }
- v_index += bm_face->len;
- }
- }
- else {
- for (int poly = 0; poly < poly_len; poly++) {
- const MPoly *mp = &rdata->mpoly[poly];
- if (!(use_hide && (mp->flag & ME_HIDE))) {
- const int loopend = mp->loopstart + mp->totloop;
- for (int j = mp->loopstart; j < loopend; j++) {
- GPU_indexbuf_add_generic_vert(&elb, j);
- }
- /* Finish loop and restart primitive. */
- GPU_indexbuf_add_generic_vert(&elb, mp->loopstart);
- GPU_indexbuf_add_primitive_restart(&elb);
- }
- v_index += mp->totloop;
- }
- }
- }
- else {
- /* Implement ... eventually if needed. */
- BLI_assert(0);
- }
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
-static void mesh_create_loose_edges_lines(MeshRenderData *rdata,
- GPUIndexBuf *ibo,
- bool *r_no_loose_wire,
- const bool use_hide)
-{
- const int vert_len = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- const int edge_len = mesh_render_data_edges_len_get_maybe_mapped(rdata);
-
- /* Alloc max (edge_len) and upload only needed range. */
- GPUIndexBufBuilder elb;
- GPU_indexbuf_init(&elb, GPU_PRIM_LINES, edge_len, vert_len);
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- /* No need to support since edit mesh already draw them.
- * But some engines may want them ... */
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter eiter;
- BMEdge *eed;
- BM_ITER_MESH (eed, &eiter, bm, BM_EDGES_OF_MESH) {
- if (bm_edge_is_loose_and_visible(eed)) {
- GPU_indexbuf_add_line_verts(
- &elb, BM_elem_index_get(eed->v1), BM_elem_index_get(eed->v2));
- }
- }
- }
- else {
- for (int i = 0; i < edge_len; i++) {
- const MEdge *medge = &rdata->medge[i];
- if ((medge->flag & ME_LOOSEEDGE) && !(use_hide && (medge->flag & ME_HIDE))) {
- GPU_indexbuf_add_line_verts(&elb, medge->v1, medge->v2);
- }
- }
- }
- }
- else {
- /* Hidden checks are already done when creating the loose edge list. */
- Mesh *me_cage = rdata->mapped.me_cage;
- for (int i_iter = 0; i_iter < rdata->mapped.loose_edge_len; i_iter++) {
- const int i = rdata->mapped.loose_edges[i_iter];
- const MEdge *medge = &me_cage->medge[i];
- GPU_indexbuf_add_line_verts(&elb, medge->v1, medge->v2);
- }
- }
-
- *r_no_loose_wire = (elb.index_len == 0);
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
-static void mesh_create_loops_tris(MeshRenderData *rdata,
- GPUIndexBuf **ibo,
- int ibo_len,
- const bool use_hide)
-{
- const int loop_len = mesh_render_data_loops_len_get(rdata);
- const int tri_len = mesh_render_data_looptri_len_get(rdata);
-
- GPUIndexBufBuilder *elb = BLI_array_alloca(elb, ibo_len);
-
- for (int i = 0; i < ibo_len; ++i) {
- /* TODO alloc minmum necessary. */
- GPU_indexbuf_init(&elb[i], GPU_PRIM_TRIS, tri_len, loop_len * 3);
- }
-
- if (rdata->mapped.use == false) {
- if (rdata->edit_bmesh) {
- for (int i = 0; i < tri_len; i++) {
- const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
- const BMFace *bm_face = bm_looptri[0]->f;
- /* use_hide always for edit-mode */
- if (BM_elem_flag_test(bm_face, BM_ELEM_HIDDEN)) {
- continue;
- }
- int mat = min_ii(ibo_len - 1, bm_face->mat_nr);
- GPU_indexbuf_add_tri_verts(&elb[mat],
- BM_elem_index_get(bm_looptri[0]),
- BM_elem_index_get(bm_looptri[1]),
- BM_elem_index_get(bm_looptri[2]));
- }
- }
- else {
- for (int i = 0; i < tri_len; i++) {
- const MLoopTri *mlt = &rdata->mlooptri[i];
- const MPoly *mp = &rdata->mpoly[mlt->poly];
- if (use_hide && (mp->flag & ME_HIDE)) {
- continue;
- }
- int mat = min_ii(ibo_len - 1, mp->mat_nr);
- GPU_indexbuf_add_tri_verts(&elb[mat], mlt->tri[0], mlt->tri[1], mlt->tri[2]);
- }
- }
- }
- else {
- /* Note: mapped doesn't support lnors yet. */
- BMesh *bm = rdata->edit_bmesh->bm;
- Mesh *me_cage = rdata->mapped.me_cage;
-
- const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(me_cage);
- for (int i = 0; i < tri_len; i++) {
- const MLoopTri *mlt = &mlooptri[i];
- const int p_orig = rdata->mapped.p_origindex[mlt->poly];
- if (p_orig != ORIGINDEX_NONE) {
- /* Assume 'use_hide' */
- BMFace *efa = BM_face_at_index(bm, p_orig);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- int mat = min_ii(ibo_len - 1, efa->mat_nr);
- GPU_indexbuf_add_tri_verts(&elb[mat], mlt->tri[0], mlt->tri[1], mlt->tri[2]);
- }
- }
- }
- }
-
- for (int i = 0; i < ibo_len; ++i) {
- GPU_indexbuf_build_in_place(&elb[i], ibo[i]);
- }
-}
-
-/* Warning! this function is not thread safe!
- * It writes to MEdge->flag with ME_EDGE_TMP_TAG. */
-static void mesh_create_edit_loops_points_lines(MeshRenderData *rdata,
- GPUIndexBuf *ibo_verts,
- GPUIndexBuf *ibo_edges)
-{
- BMIter iter;
- int i;
-
- const int vert_len = mesh_render_data_verts_len_get_maybe_mapped(rdata);
- const int edge_len = mesh_render_data_edges_len_get_maybe_mapped(rdata);
- const int loop_len = mesh_render_data_loops_len_get_maybe_mapped(rdata);
- const int poly_len = mesh_render_data_polys_len_get_maybe_mapped(rdata);
- const int lvert_len = mesh_render_data_loose_verts_len_get_maybe_mapped(rdata);
- const int ledge_len = mesh_render_data_loose_edges_len_get_maybe_mapped(rdata);
- const int tot_loop_len = loop_len + ledge_len * 2 + lvert_len;
-
- GPUIndexBufBuilder elb_vert, elb_edge;
- if (DRW_TEST_ASSIGN_IBO(ibo_edges)) {
- GPU_indexbuf_init(&elb_edge, GPU_PRIM_LINES, edge_len, tot_loop_len);
- }
- if (DRW_TEST_ASSIGN_IBO(ibo_verts)) {
- GPU_indexbuf_init(&elb_vert, GPU_PRIM_POINTS, tot_loop_len, tot_loop_len);
- }
-
- int loop_idx = 0;
- if (rdata->edit_bmesh && (rdata->mapped.use == false)) {
- BMesh *bm = rdata->edit_bmesh->bm;
- /* Edges not loose. */
- if (ibo_edges) {
- BMEdge *eed;
- BM_ITER_MESH (eed, &iter, bm, BM_EDGES_OF_MESH) {
- if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
- BMLoop *l = bm_edge_find_first_loop_visible_inline(eed);
- if (l != NULL) {
- int v1 = BM_elem_index_get(eed->l);
- int v2 = BM_elem_index_get(eed->l->next);
- GPU_indexbuf_add_line_verts(&elb_edge, v1, v2);
- }
- }
- }
- }
- /* Face Loops */
- if (ibo_verts) {
- BMVert *eve;
- BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
- if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
- BMLoop *l = bm_vert_find_first_loop_visible_inline(eve);
- if (l != NULL) {
- int v = BM_elem_index_get(l);
- GPU_indexbuf_add_generic_vert(&elb_vert, v);
- }
- }
- }
- }
- loop_idx = loop_len;
- /* Loose edges */
- for (i = 0; i < ledge_len; ++i) {
- if (ibo_verts) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + 0);
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + 1);
- }
- if (ibo_edges) {
- GPU_indexbuf_add_line_verts(&elb_edge, loop_idx + 0, loop_idx + 1);
- }
- loop_idx += 2;
- }
- /* Loose verts */
- if (ibo_verts) {
- for (i = 0; i < lvert_len; ++i) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx);
- loop_idx += 1;
- }
- }
- }
- else if (rdata->mapped.use) {
- const MPoly *mpoly = rdata->mapped.me_cage->mpoly;
- MVert *mvert = rdata->mapped.me_cage->mvert;
- MEdge *medge = rdata->mapped.me_cage->medge;
- BMesh *bm = rdata->edit_bmesh->bm;
-
- const int *v_origindex = rdata->mapped.v_origindex;
- const int *e_origindex = rdata->mapped.e_origindex;
- const int *p_origindex = rdata->mapped.p_origindex;
-
- /* Reset flag */
- for (int edge = 0; edge < edge_len; ++edge) {
- /* NOTE: not thread safe. */
- medge[edge].flag &= ~ME_EDGE_TMP_TAG;
- }
- for (int vert = 0; vert < vert_len; ++vert) {
- /* NOTE: not thread safe. */
- mvert[vert].flag &= ~ME_VERT_TMP_TAG;
- }
-
- /* Face Loops */
- for (int poly = 0; poly < poly_len; poly++, mpoly++) {
- int fidx = p_origindex[poly];
- if (fidx != ORIGINDEX_NONE) {
- BMFace *efa = BM_face_at_index(bm, fidx);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- const MLoop *mloop = &rdata->mapped.me_cage->mloop[mpoly->loopstart];
- for (i = 0; i < mpoly->totloop; ++i, ++mloop) {
- if (ibo_verts && (v_origindex[mloop->v] != ORIGINDEX_NONE) &&
- (mvert[mloop->v].flag & ME_VERT_TMP_TAG) == 0) {
- mvert[mloop->v].flag |= ME_VERT_TMP_TAG;
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + i);
- }
- if (ibo_edges && (e_origindex[mloop->e] != ORIGINDEX_NONE) &&
- ((medge[mloop->e].flag & ME_EDGE_TMP_TAG) == 0)) {
- medge[mloop->e].flag |= ME_EDGE_TMP_TAG;
- int v1 = loop_idx + i;
- int v2 = loop_idx + ((i + 1) % mpoly->totloop);
- GPU_indexbuf_add_line_verts(&elb_edge, v1, v2);
- }
- }
- }
- }
- loop_idx += mpoly->totloop;
- }
- /* Loose edges */
- for (i = 0; i < ledge_len; ++i) {
- int eidx = e_origindex[rdata->mapped.loose_edges[i]];
- if (eidx != ORIGINDEX_NONE) {
- if (ibo_verts) {
- const MEdge *ed = &medge[rdata->mapped.loose_edges[i]];
- if (v_origindex[ed->v1] != ORIGINDEX_NONE) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + 0);
- }
- if (v_origindex[ed->v2] != ORIGINDEX_NONE) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + 1);
- }
- }
- if (ibo_edges) {
- GPU_indexbuf_add_line_verts(&elb_edge, loop_idx + 0, loop_idx + 1);
- }
- }
- loop_idx += 2;
- }
- /* Loose verts */
- if (ibo_verts) {
- for (i = 0; i < lvert_len; ++i) {
- int vidx = v_origindex[rdata->mapped.loose_verts[i]];
- if (vidx != ORIGINDEX_NONE) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx);
- }
- loop_idx += 1;
- }
- }
- }
- else {
- const MPoly *mpoly = rdata->mpoly;
-
- /* Face Loops */
- for (int poly = 0; poly < poly_len; poly++, mpoly++) {
- if ((mpoly->flag & ME_HIDE) == 0) {
- for (i = 0; i < mpoly->totloop; ++i) {
- if (ibo_verts) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + i);
- }
- if (ibo_edges) {
- int v1 = loop_idx + i;
- int v2 = loop_idx + ((i + 1) % mpoly->totloop);
- GPU_indexbuf_add_line_verts(&elb_edge, v1, v2);
- }
- }
- }
- loop_idx += mpoly->totloop;
- }
- /* TODO(fclem): Until we find a way to detect
- * loose verts easily outside of edit mode, this
- * will remain disabled. */
-#if 0
- /* Loose edges */
- for (int e = 0; e < edge_len; e++, medge++) {
- if (medge->flag & ME_LOOSEEDGE) {
- int eidx = e_origindex[e];
- if (eidx != ORIGINDEX_NONE) {
- if ((medge->flag & ME_HIDE) == 0) {
- for (int j = 0; j < 2; ++j) {
- if (ibo_verts) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx + j);
- }
- if (ibo_edges) {
- GPU_indexbuf_add_generic_vert(&elb_edge, loop_idx + j);
- }
- }
- }
- }
- loop_idx += 2;
- }
- }
- /* Loose verts */
- for (int v = 0; v < vert_len; v++, mvert++) {
- int vidx = v_origindex[v];
- if (vidx != ORIGINDEX_NONE) {
- if ((mvert->flag & ME_HIDE) == 0) {
- if (ibo_verts) {
- GPU_indexbuf_add_generic_vert(&elb_vert, loop_idx);
- }
- if (ibo_edges) {
- GPU_indexbuf_add_generic_vert(&elb_edge, loop_idx);
- }
- }
- loop_idx += 1;
- }
- }
-#endif
- }
-
- if (ibo_verts) {
- GPU_indexbuf_build_in_place(&elb_vert, ibo_verts);
- }
- if (ibo_edges) {
- GPU_indexbuf_build_in_place(&elb_edge, ibo_edges);
- }
-}
-
-static void mesh_create_edit_loops_tris(MeshRenderData *rdata, GPUIndexBuf *ibo)
-{
- const int loop_len = mesh_render_data_loops_len_get_maybe_mapped(rdata);
- const int tri_len = mesh_render_data_looptri_len_get_maybe_mapped(rdata);
-
- GPUIndexBufBuilder elb;
- /* TODO alloc minmum necessary. */
- GPU_indexbuf_init(&elb, GPU_PRIM_TRIS, tri_len, loop_len * 3);
-
- if (rdata->edit_bmesh && (rdata->mapped.use == false)) {
- for (int i = 0; i < tri_len; i++) {
- const BMLoop **bm_looptri = (const BMLoop **)rdata->edit_bmesh->looptris[i];
- const BMFace *bm_face = bm_looptri[0]->f;
- /* use_hide always for edit-mode */
- if (BM_elem_flag_test(bm_face, BM_ELEM_HIDDEN)) {
- continue;
- }
- GPU_indexbuf_add_tri_verts(&elb,
- BM_elem_index_get(bm_looptri[0]),
- BM_elem_index_get(bm_looptri[1]),
- BM_elem_index_get(bm_looptri[2]));
- }
- }
- else if (rdata->mapped.use == true) {
- BMesh *bm = rdata->edit_bmesh->bm;
- Mesh *me_cage = rdata->mapped.me_cage;
-
- const MLoopTri *mlooptri = BKE_mesh_runtime_looptri_ensure(me_cage);
- for (int i = 0; i < tri_len; i++) {
- const MLoopTri *mlt = &mlooptri[i];
- const int p_orig = rdata->mapped.p_origindex[mlt->poly];
- if (p_orig != ORIGINDEX_NONE) {
- /* Assume 'use_hide' */
- BMFace *efa = BM_face_at_index(bm, p_orig);
- if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
- GPU_indexbuf_add_tri_verts(&elb, mlt->tri[0], mlt->tri[1], mlt->tri[2]);
- }
- }
- }
- }
- else {
- const MLoopTri *mlt = rdata->mlooptri;
- for (int i = 0; i < tri_len; i++, mlt++) {
- const MPoly *mpoly = &rdata->mpoly[mlt->poly];
- /* Assume 'use_hide' */
- if ((mpoly->flag & ME_HIDE) == 0) {
- GPU_indexbuf_add_tri_verts(&elb, mlt->tri[0], mlt->tri[1], mlt->tri[2]);
- }
- }
- }
-
- GPU_indexbuf_build_in_place(&elb, ibo);
-}
-
/** \} */
/* ---------------------------------------------------------------------- */
@@ -4563,9 +753,9 @@ GPUBatch **DRW_mesh_batch_cache_get_surface_shaded(Mesh *me,
*auto_layer_count = cache->auto_layer_len;
}
for (int i = 0; i < cache->mat_len; ++i) {
- DRW_batch_request(&cache->surf_per_mat[i]);
+ DRW_batch_request(&cache->surface_per_mat[i]);
}
- return cache->surf_per_mat;
+ return cache->surface_per_mat;
}
GPUBatch **DRW_mesh_batch_cache_get_surface_texpaint(Mesh *me)
@@ -4574,9 +764,9 @@ GPUBatch **DRW_mesh_batch_cache_get_surface_texpaint(Mesh *me)
mesh_batch_cache_add_request(cache, MBC_SURF_PER_MAT);
texpaint_request_active_uv(cache, me);
for (int i = 0; i < cache->mat_len; ++i) {
- DRW_batch_request(&cache->surf_per_mat[i]);
+ DRW_batch_request(&cache->surface_per_mat[i]);
}
- return cache->surf_per_mat;
+ return cache->surface_per_mat;
}
GPUBatch *DRW_mesh_batch_cache_get_surface_texpaint_single(Mesh *me)
@@ -4622,6 +812,13 @@ GPUBatch *DRW_mesh_batch_cache_get_edit_vertices(Mesh *me)
return DRW_batch_request(&cache->batch.edit_vertices);
}
+GPUBatch *DRW_mesh_batch_cache_get_edit_vnors(Mesh *me)
+{
+ MeshBatchCache *cache = mesh_batch_cache_get(me);
+ mesh_batch_cache_add_request(cache, MBC_EDIT_VNOR);
+ return DRW_batch_request(&cache->batch.edit_vnor);
+}
+
GPUBatch *DRW_mesh_batch_cache_get_edit_lnors(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
@@ -4633,7 +830,7 @@ GPUBatch *DRW_mesh_batch_cache_get_edit_facedots(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
mesh_batch_cache_add_request(cache, MBC_EDIT_FACEDOTS);
- return DRW_batch_request(&cache->batch.edit_facedots);
+ return DRW_batch_request(&cache->batch.edit_fdots);
}
/** \} */
@@ -4653,7 +850,7 @@ GPUBatch *DRW_mesh_batch_cache_get_facedots_with_select_id(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
mesh_batch_cache_add_request(cache, MBC_EDIT_SELECTION_FACEDOTS);
- return DRW_batch_request(&cache->batch.edit_selection_facedots);
+ return DRW_batch_request(&cache->batch.edit_selection_fdots);
}
GPUBatch *DRW_mesh_batch_cache_get_edges_with_select_id(Mesh *me)
@@ -4679,6 +876,7 @@ GPUBatch *DRW_mesh_batch_cache_get_verts_with_select_id(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_strech_area(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_FACES_STRECH_AREA);
return DRW_batch_request(&cache->batch.edituv_faces_strech_area);
}
@@ -4686,6 +884,7 @@ GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_strech_area(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_strech_angle(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_FACES_STRECH_ANGLE);
return DRW_batch_request(&cache->batch.edituv_faces_strech_angle);
}
@@ -4693,6 +892,7 @@ GPUBatch *DRW_mesh_batch_cache_get_edituv_faces_strech_angle(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_edituv_faces(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_FACES);
return DRW_batch_request(&cache->batch.edituv_faces);
}
@@ -4700,6 +900,7 @@ GPUBatch *DRW_mesh_batch_cache_get_edituv_faces(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_edituv_edges(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_EDGES);
return DRW_batch_request(&cache->batch.edituv_edges);
}
@@ -4707,6 +908,7 @@ GPUBatch *DRW_mesh_batch_cache_get_edituv_edges(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_edituv_verts(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_VERTS);
return DRW_batch_request(&cache->batch.edituv_verts);
}
@@ -4714,8 +916,9 @@ GPUBatch *DRW_mesh_batch_cache_get_edituv_verts(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_edituv_facedots(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_EDITUV_FACEDOTS);
- return DRW_batch_request(&cache->batch.edituv_facedots);
+ return DRW_batch_request(&cache->batch.edituv_fdots);
}
GPUBatch *DRW_mesh_batch_cache_get_uv_edges(Mesh *me)
@@ -4729,356 +932,11 @@ GPUBatch *DRW_mesh_batch_cache_get_uv_edges(Mesh *me)
GPUBatch *DRW_mesh_batch_cache_get_surface_edges(Mesh *me)
{
MeshBatchCache *cache = mesh_batch_cache_get(me);
+ texpaint_request_active_uv(cache, me);
mesh_batch_cache_add_request(cache, MBC_WIRE_LOOPS);
return DRW_batch_request(&cache->batch.wire_loops);
}
-/* Compute 3D & 2D areas and their sum. */
-BLI_INLINE void edit_uv_preprocess_stretch_area(BMFace *efa,
- const int cd_loop_uv_offset,
- uint fidx,
- float *totarea,
- float *totuvarea,
- float (*faces_areas)[2])
-{
- faces_areas[fidx][0] = BM_face_calc_area(efa);
- faces_areas[fidx][1] = BM_face_calc_area_uv(efa, cd_loop_uv_offset);
-
- *totarea += faces_areas[fidx][0];
- *totuvarea += faces_areas[fidx][1];
-}
-
-BLI_INLINE float edit_uv_get_stretch_area(float area, float uvarea)
-{
- if (area < FLT_EPSILON || uvarea < FLT_EPSILON) {
- return 1.0f;
- }
- else if (area > uvarea) {
- return 1.0f - (uvarea / area);
- }
- else {
- return 1.0f - (area / uvarea);
- }
-}
-
-/* Compute face's normalized contour vectors. */
-BLI_INLINE void edit_uv_preprocess_stretch_angle(float (*auv)[2],
- float (*av)[3],
- const int cd_loop_uv_offset,
- BMFace *efa)
-{
- BMLoop *l;
- BMIter liter;
- int i;
- BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
- MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- MLoopUV *luv_prev = BM_ELEM_CD_GET_VOID_P(l->prev, cd_loop_uv_offset);
-
- sub_v2_v2v2(auv[i], luv_prev->uv, luv->uv);
- normalize_v2(auv[i]);
-
- sub_v3_v3v3(av[i], l->prev->v->co, l->v->co);
- normalize_v3(av[i]);
- }
-}
-
-#if 0 /* here for reference, this is done in shader now. */
-BLI_INLINE float edit_uv_get_loop_stretch_angle(const float auv0[2],
- const float auv1[2],
- const float av0[3],
- const float av1[3])
-{
- float uvang = angle_normalized_v2v2(auv0, auv1);
- float ang = angle_normalized_v3v3(av0, av1);
- float stretch = fabsf(uvang - ang) / (float)M_PI;
- return 1.0f - pow2f(1.0f - stretch);
-}
-#endif
-
-static struct EditUVFormatIndex {
- uint area, angle, uv_adj, flag, fdots_uvs, fdots_flag;
-} uv_attr_id = {0};
-
-static void uvedit_fill_buffer_data(MeshRenderData *rdata,
- GPUVertBuf *vbo_area,
- GPUVertBuf *vbo_angle,
- GPUVertBuf *vbo_fdots_pos,
- GPUVertBuf *vbo_fdots_data,
- GPUIndexBufBuilder *elb_vert,
- GPUIndexBufBuilder *elb_edge,
- GPUIndexBufBuilder *elb_face)
-{
- BMesh *bm = rdata->edit_bmesh->bm;
- BMIter iter, liter;
- BMFace *efa;
- uint vidx, fidx, fdot_idx, i;
- const int poly_len = mesh_render_data_polys_len_get_maybe_mapped(rdata);
- float(*faces_areas)[2] = NULL;
- float totarea = 0.0f, totuvarea = 0.0f;
- const int cd_loop_uv_offset = CustomData_get_offset(&bm->ldata, CD_MLOOPUV);
-
- BLI_buffer_declare_static(vec3f, vec3_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE);
- BLI_buffer_declare_static(vec2f, vec2_buf, BLI_BUFFER_NOP, BM_DEFAULT_NGON_STACK_SIZE);
-
- if (vbo_area) {
- faces_areas = MEM_mallocN(sizeof(float) * 2 * bm->totface, "EDITUV faces areas");
- }
-
- /* Preprocess */
- fidx = 0;
- BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- /* Tag hidden faces */
- BM_elem_flag_set(efa, BM_ELEM_TAG, uvedit_face_visible_nolocal_ex(rdata->toolsettings, efa));
-
- if (vbo_area) {
- edit_uv_preprocess_stretch_area(
- efa, cd_loop_uv_offset, fidx++, &totarea, &totuvarea, faces_areas);
- }
- }
-
- vidx = 0;
- fidx = 0;
- fdot_idx = 0;
- if (rdata->mapped.use == false && rdata->edit_bmesh) {
- BMLoop *l;
- BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
- const bool face_visible = BM_elem_flag_test(efa, BM_ELEM_TAG);
- const int efa_len = efa->len;
- float fdot[2] = {0.0f, 0.0f};
- float(*av)[3], (*auv)[2];
- ushort area_stretch;
-
- /* Face preprocess */
- if (vbo_area) {
- area_stretch = edit_uv_get_stretch_area(faces_areas[fidx][0] / totarea,
- faces_areas[fidx][1] / totuvarea) *
- 65534.0f;
- }
- if (vbo_angle) {
- av = (float(*)[3])BLI_buffer_reinit_data(&vec3_buf, vec3f, efa_len);
- auv = (float(*)[2])BLI_buffer_reinit_data(&vec2_buf, vec2f, efa_len);
- edit_uv_preprocess_stretch_angle(auv, av, cd_loop_uv_offset, efa);
- }
-
- /* Skip hidden faces. */
- if (face_visible) {
- if (elb_face) {
- for (i = 0; i < efa->len; ++i) {
- GPU_indexbuf_add_generic_vert(elb_face, vidx + i);
- }
- }
- if (elb_vert) {
- for (i = 0; i < efa->len; ++i) {
- GPU_indexbuf_add_generic_vert(elb_vert, vidx + i);
- }
- }
- if (elb_edge) {
- for (i = 0; i < efa->len; ++i) {
- GPU_indexbuf_add_line_verts(elb_edge, vidx + i, vidx + (i + 1) % efa->len);
- }
- }
- }
-
- BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, i) {
- MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
- if (vbo_area) {
- GPU_vertbuf_attr_set(vbo_area, uv_attr_id.area, vidx, &area_stretch);
- }
- if (vbo_angle) {
- int i_next = (i + 1) % efa_len;
- short suv[4];
- /* Send uvs to the shader and let it compute the aspect corrected angle. */
- normal_float_to_short_v2(&suv[0], auv[i]);
- normal_float_to_short_v2(&suv[2], auv[i_next]);
- GPU_vertbuf_attr_set(vbo_angle, uv_attr_id.uv_adj, vidx, suv);
- /* Compute 3D angle here */
- short angle = 32767.0f * angle_normalized_v3v3(av[i], av[i_next]) / (float)M_PI;
- GPU_vertbuf_attr_set(vbo_angle, uv_attr_id.angle, vidx, &angle);
- }
- if (vbo_fdots_pos) {
- add_v2_v2(fdot, luv->uv);
- }
- vidx++;
- }
-
- if (elb_face && face_visible) {
- GPU_indexbuf_add_generic_vert(elb_face, vidx - efa->len);
- GPU_indexbuf_add_primitive_restart(elb_face);
- }
- if (vbo_fdots_pos && face_visible) {
- mul_v2_fl(fdot, 1.0f / (float)efa->len);
- GPU_vertbuf_attr_set(vbo_fdots_pos, uv_attr_id.fdots_uvs, fdot_idx, fdot);
- }
- if (vbo_fdots_data && face_visible) {
- uchar face_flag = mesh_render_data_face_flag(rdata, efa, cd_loop_uv_offset);
- GPU_vertbuf_attr_set(vbo_fdots_data, uv_attr_id.fdots_flag, fdot_idx, &face_flag);
- }
- fdot_idx += face_visible ? 1 : 0;
- fidx++;
- }
- }
- else {
- const MPoly *mpoly = rdata->mapped.me_cage->mpoly;
- // const MEdge *medge = rdata->mapped.me_cage->medge;
- // const MVert *mvert = rdata->mapped.me_cage->mvert;
- const MLoop *mloop = rdata->mapped.me_cage->mloop;
-
- const int *v_origindex = rdata->mapped.v_origindex;
- const int *e_origindex = rdata->mapped.e_origindex;
- const int *p_origindex = rdata->mapped.p_origindex;
-
- /* Face Loops */
- for (int poly = 0; poly < poly_len; poly++, mpoly++) {
- float fdot[2] = {0.0f, 0.0f};
- const MLoop *l = &mloop[mpoly->loopstart];
- int fidx_ori = p_origindex[poly];
- efa = (fidx_ori != ORIGINDEX_NONE) ? BM_face_at_index(bm, fidx_ori) : NULL;
- const bool face_visible = efa != NULL && BM_elem_flag_test(efa, BM_ELEM_TAG);
- if (efa && vbo_fdots_data) {
- uchar face_flag = mesh_render_data_face_flag(rdata, efa, cd_loop_uv_offset);
- GPU_vertbuf_attr_set(vbo_fdots_data, uv_attr_id.fdots_flag, fdot_idx, &face_flag);
- }
- /* Skip hidden faces. */
- if (face_visible) {
- if (elb_face) {
- for (i = 0; i < mpoly->totloop; ++i) {
- GPU_indexbuf_add_generic_vert(elb_face, vidx + i);
- }
- GPU_indexbuf_add_generic_vert(elb_face, vidx);
- GPU_indexbuf_add_primitive_restart(elb_face);
- }
- if (elb_edge) {
- for (i = 0; i < mpoly->totloop; ++i) {
- if (e_origindex[l[i].e] != ORIGINDEX_NONE) {
- GPU_indexbuf_add_line_verts(elb_edge, vidx + i, vidx + (i + 1) % mpoly->totloop);
- }
- }
- }
- if (elb_vert) {
- for (i = 0; i < mpoly->totloop; ++i) {
- if (v_origindex[l[i].v] != ORIGINDEX_NONE) {
- GPU_indexbuf_add_generic_vert(elb_vert, vidx + i);
- }
- }
- }
- }
- for (i = 0; i < mpoly->totloop; i++, l++) {
- /* TODO support stretch. */
- if (vbo_fdots_pos) {
- MLoopUV *luv = &rdata->mloopuv[mpoly->loopstart + i];
- add_v2_v2(fdot, luv->uv);
- }
- vidx++;
- }
- if (vbo_fdots_pos && face_visible) {
- mul_v2_fl(fdot, 1.0f / mpoly->totloop);
- GPU_vertbuf_attr_set(vbo_fdots_pos, uv_attr_id.fdots_uvs, fdot_idx, fdot);
- }
- fidx++;
- fdot_idx += face_visible ? 1 : 0;
- }
- }
-
- if (faces_areas) {
- MEM_freeN(faces_areas);
- }
-
- BLI_buffer_free(&vec3_buf);
- BLI_buffer_free(&vec2_buf);
-
- if (fdot_idx < poly_len) {
- if (vbo_fdots_pos) {
- GPU_vertbuf_data_resize(vbo_fdots_pos, fdot_idx);
- }
- if (vbo_fdots_data) {
- GPU_vertbuf_data_resize(vbo_fdots_data, fdot_idx);
- }
- }
-}
-
-static void mesh_create_uvedit_buffers(MeshRenderData *rdata,
- GPUVertBuf *vbo_area,
- GPUVertBuf *vbo_angle,
- GPUVertBuf *vbo_fdots_pos,
- GPUVertBuf *vbo_fdots_data,
- GPUIndexBuf *ibo_vert,
- GPUIndexBuf *ibo_edge,
- GPUIndexBuf *ibo_face)
-{
- static GPUVertFormat format_area = {0};
- static GPUVertFormat format_angle = {0};
- static GPUVertFormat format_fdots_pos = {0};
- static GPUVertFormat format_fdots_flag = {0};
-
- if (format_area.attr_len == 0) {
- uv_attr_id.area = GPU_vertformat_attr_add(
- &format_area, "stretch", GPU_COMP_U16, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
- uv_attr_id.angle = GPU_vertformat_attr_add(
- &format_angle, "angle", GPU_COMP_I16, 1, GPU_FETCH_INT_TO_FLOAT_UNIT);
- uv_attr_id.uv_adj = GPU_vertformat_attr_add(
- &format_angle, "uv_adj", GPU_COMP_I16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
-
- uv_attr_id.fdots_flag = GPU_vertformat_attr_add(
- &format_fdots_flag, "flag", GPU_COMP_U8, 1, GPU_FETCH_INT);
- uv_attr_id.fdots_uvs = GPU_vertformat_attr_add(
- &format_fdots_pos, "u", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- GPU_vertformat_alias_add(&format_fdots_pos, "pos");
- }
-
- const int loop_len = mesh_render_data_loops_len_get_maybe_mapped(rdata);
- const int face_len = mesh_render_data_polys_len_get_maybe_mapped(rdata);
- const int idx_len = loop_len + face_len * 2;
-
- if (DRW_TEST_ASSIGN_VBO(vbo_area)) {
- GPU_vertbuf_init_with_format(vbo_area, &format_area);
- GPU_vertbuf_data_alloc(vbo_area, loop_len);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_angle)) {
- GPU_vertbuf_init_with_format(vbo_angle, &format_angle);
- GPU_vertbuf_data_alloc(vbo_angle, loop_len);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_fdots_pos)) {
- GPU_vertbuf_init_with_format(vbo_fdots_pos, &format_fdots_pos);
- GPU_vertbuf_data_alloc(vbo_fdots_pos, face_len);
- }
- if (DRW_TEST_ASSIGN_VBO(vbo_fdots_data)) {
- GPU_vertbuf_init_with_format(vbo_fdots_data, &format_fdots_flag);
- GPU_vertbuf_data_alloc(vbo_fdots_data, face_len);
- }
-
- GPUIndexBufBuilder elb_vert, elb_edge, elb_face;
- if (DRW_TEST_ASSIGN_IBO(ibo_vert)) {
- GPU_indexbuf_init_ex(&elb_vert, GPU_PRIM_POINTS, loop_len, loop_len);
- }
- if (DRW_TEST_ASSIGN_IBO(ibo_edge)) {
- GPU_indexbuf_init_ex(&elb_edge, GPU_PRIM_LINES, loop_len * 2, loop_len);
- }
- if (DRW_TEST_ASSIGN_IBO(ibo_face)) {
- GPU_indexbuf_init_ex(&elb_face, GPU_PRIM_TRI_FAN, idx_len, loop_len);
- }
-
- uvedit_fill_buffer_data(rdata,
- vbo_area,
- vbo_angle,
- vbo_fdots_pos,
- vbo_fdots_data,
- ibo_vert ? &elb_vert : NULL,
- ibo_edge ? &elb_edge : NULL,
- ibo_face ? &elb_face : NULL);
-
- if (ibo_vert) {
- GPU_indexbuf_build_in_place(&elb_vert, ibo_vert);
- }
-
- if (ibo_edge) {
- GPU_indexbuf_build_in_place(&elb_edge, ibo_edge);
- }
-
- if (ibo_face) {
- GPU_indexbuf_build_in_place(&elb_face, ibo_face);
- }
-}
-
/** \} */
/* ---------------------------------------------------------------------- */
@@ -5109,8 +967,13 @@ void DRW_mesh_batch_cache_free_old(Mesh *me, int ctime)
/* Can be called for any surface type. Mesh *me is the final mesh. */
void DRW_mesh_batch_cache_create_requested(
- Object *ob, Mesh *me, const ToolSettings *ts, const bool is_paint_mode, const bool use_hide)
+ Object *ob, Mesh *me, const Scene *scene, const bool is_paint_mode, const bool use_hide)
{
+ GPUIndexBuf **saved_elem_ranges = NULL;
+ const ToolSettings *ts = NULL;
+ if (scene) {
+ ts = scene->toolsettings;
+ }
MeshBatchCache *cache = mesh_batch_cache_get(me);
/* Early out */
@@ -5136,15 +999,13 @@ void DRW_mesh_batch_cache_create_requested(
}
}
- if (batch_requested & (MBC_SURFACE | MBC_SURF_PER_MAT | MBC_WIRE_LOOPS_UVS)) {
+ if (batch_requested &
+ (MBC_SURFACE | MBC_SURF_PER_MAT | MBC_WIRE_LOOPS_UVS | MBC_EDITUV_FACES_STRECH_AREA |
+ MBC_EDITUV_FACES_STRECH_ANGLE | MBC_EDITUV_FACES | MBC_EDITUV_EDGES | MBC_EDITUV_VERTS)) {
/* Modifiers will only generate an orco layer if the mesh is deformed. */
if (cache->cd_needed.orco != 0) {
- if (CustomData_get_layer(&me->vdata, CD_ORCO) != NULL) {
- /* Orco layer is needed. */
- }
- else if (cache->cd_needed.tan_orco == 0) {
- /* Skip orco calculation if not needed by tangent generation.
- */
+ if (CustomData_get_layer(&me->vdata, CD_ORCO) == NULL) {
+ /* Skip orco calculation */
cache->cd_needed.orco = 0;
}
}
@@ -5155,21 +1016,37 @@ void DRW_mesh_batch_cache_create_requested(
* material. */
bool cd_overlap = mesh_cd_layers_type_overlap(cache->cd_used, cache->cd_needed);
if (cd_overlap == false) {
- if ((cache->cd_used.uv & cache->cd_needed.uv) != cache->cd_needed.uv ||
- (cache->cd_used.tan & cache->cd_needed.tan) != cache->cd_needed.tan ||
- cache->cd_used.tan_orco != cache->cd_needed.tan_orco) {
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_uv_tan);
- }
- if (cache->cd_used.orco != cache->cd_needed.orco) {
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_orco);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbuffercache)
+ {
+ if ((cache->cd_used.uv & cache->cd_needed.uv) != cache->cd_needed.uv) {
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.uv);
+ }
+ if ((cache->cd_used.tan & cache->cd_needed.tan) != cache->cd_needed.tan ||
+ cache->cd_used.tan_orco != cache->cd_needed.tan_orco) {
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.tan);
+ }
+ if (cache->cd_used.orco != cache->cd_needed.orco) {
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.orco);
+ }
+ if ((cache->cd_used.vcol & cache->cd_needed.vcol) != cache->cd_needed.vcol) {
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.vcol);
+ }
}
- if ((cache->cd_used.vcol & cache->cd_needed.vcol) != cache->cd_needed.vcol) {
- GPU_VERTBUF_DISCARD_SAFE(cache->ordered.loop_vcol);
+ /* XXX save element buffer to avoid recreating them.
+ * This is only if the cd_needed changes so it is ok to keep them.*/
+ if (cache->surface_per_mat[0] && cache->surface_per_mat[0]->elem) {
+ saved_elem_ranges = MEM_callocN(sizeof(saved_elem_ranges) * cache->mat_len, __func__);
+ for (int i = 0; i < cache->mat_len; ++i) {
+ saved_elem_ranges[i] = cache->surface_per_mat[i]->elem;
+ /* Avoid deletion as the batch is owner. */
+ cache->surface_per_mat[i]->elem = NULL;
+ cache->surface_per_mat[i]->owns_flag &= ~GPU_BATCH_OWNS_INDEX;
+ }
}
/* We can't discard batches at this point as they have been
* referenced for drawing. Just clear them in place. */
for (int i = 0; i < cache->mat_len; ++i) {
- GPU_BATCH_CLEAR_SAFE(cache->surf_per_mat[i]);
+ GPU_BATCH_CLEAR_SAFE(cache->surface_per_mat[i]);
}
GPU_BATCH_CLEAR_SAFE(cache->batch.surface);
cache->batch_ready &= ~(MBC_SURFACE | MBC_SURF_PER_MAT);
@@ -5186,22 +1063,26 @@ void DRW_mesh_batch_cache_create_requested(
const bool is_uvsyncsel = (ts->uv_flag & UV_SYNC_SELECTION);
if (cache->is_uvsyncsel != is_uvsyncsel) {
cache->is_uvsyncsel = is_uvsyncsel;
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_uv_data);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_stretch_angle);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_stretch_area);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.loop_uv);
- GPU_VERTBUF_DISCARD_SAFE(cache->edit.facedots_uv);
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.edituv_loops_tri_fans);
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.edituv_loops_line_strips);
- GPU_INDEXBUF_DISCARD_SAFE(cache->ibo.edituv_loops_points);
+ FOREACH_MESH_BUFFER_CACHE(cache, mbuffercache)
+ {
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.edituv_data);
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.stretch_angle);
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.stretch_area);
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.uv);
+ GPU_VERTBUF_DISCARD_SAFE(mbuffercache->vbo.fdots_uv);
+ GPU_INDEXBUF_DISCARD_SAFE(mbuffercache->ibo.edituv_tris);
+ GPU_INDEXBUF_DISCARD_SAFE(mbuffercache->ibo.edituv_lines);
+ GPU_INDEXBUF_DISCARD_SAFE(mbuffercache->ibo.edituv_points);
+ }
/* We only clear the batches as they may already have been
* referenced. */
+ GPU_BATCH_CLEAR_SAFE(cache->batch.wire_loops_uvs);
GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_faces_strech_area);
GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_faces_strech_angle);
GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_faces);
GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_edges);
GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_verts);
- GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_facedots);
+ GPU_BATCH_CLEAR_SAFE(cache->batch.edituv_fdots);
cache->batch_ready &= ~MBC_EDITUV;
}
}
@@ -5217,410 +1098,234 @@ void DRW_mesh_batch_cache_create_requested(
cache->batch_ready |= batch_requested;
+ const bool do_cage = (me->edit_mesh &&
+ (me->edit_mesh->mesh_eval_final != me->edit_mesh->mesh_eval_cage));
+
+ const bool do_uvcage = me->edit_mesh && !me->edit_mesh->mesh_eval_final->runtime.is_original;
+
+ MeshBufferCache *mbufcache = &cache->final;
+
/* Init batches and request VBOs & IBOs */
if (DRW_batch_requested(cache->batch.surface, GPU_PRIM_TRIS)) {
- DRW_ibo_request(cache->batch.surface, &cache->ibo.loops_tris);
- DRW_vbo_request(cache->batch.surface, &cache->ordered.loop_pos_nor);
- /* For paint overlay. Active layer should have been queried. */
+ DRW_ibo_request(cache->batch.surface, &mbufcache->ibo.tris);
+ /* Order matters. First ones override latest vbos' attribs. */
+ DRW_vbo_request(cache->batch.surface, &mbufcache->vbo.lnor);
+ DRW_vbo_request(cache->batch.surface, &mbufcache->vbo.pos_nor);
if (cache->cd_used.uv != 0) {
- DRW_vbo_request(cache->batch.surface, &cache->ordered.loop_uv_tan);
+ DRW_vbo_request(cache->batch.surface, &mbufcache->vbo.uv);
}
if (cache->cd_used.vcol != 0) {
- DRW_vbo_request(cache->batch.surface, &cache->ordered.loop_vcol);
+ DRW_vbo_request(cache->batch.surface, &mbufcache->vbo.vcol);
}
}
if (DRW_batch_requested(cache->batch.all_verts, GPU_PRIM_POINTS)) {
- DRW_vbo_request(cache->batch.all_verts, &cache->ordered.pos_nor);
+ DRW_vbo_request(cache->batch.all_verts, &mbufcache->vbo.pos_nor);
}
if (DRW_batch_requested(cache->batch.all_edges, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.all_edges, &cache->ibo.edges_lines);
- DRW_vbo_request(cache->batch.all_edges, &cache->ordered.pos_nor);
+ DRW_ibo_request(cache->batch.all_edges, &mbufcache->ibo.lines);
+ DRW_vbo_request(cache->batch.all_edges, &mbufcache->vbo.pos_nor);
}
if (DRW_batch_requested(cache->batch.loose_edges, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.loose_edges, &cache->ibo.loose_edges_lines);
- DRW_vbo_request(cache->batch.loose_edges, &cache->ordered.pos_nor);
+ DRW_ibo_request(cache->batch.loose_edges, &mbufcache->ibo.lines);
+ DRW_vbo_request(cache->batch.loose_edges, &mbufcache->vbo.pos_nor);
}
if (DRW_batch_requested(cache->batch.edge_detection, GPU_PRIM_LINES_ADJ)) {
- DRW_ibo_request(cache->batch.edge_detection, &cache->ibo.edges_adj_lines);
- DRW_vbo_request(cache->batch.edge_detection, &cache->ordered.pos_nor);
+ DRW_ibo_request(cache->batch.edge_detection, &mbufcache->ibo.lines_adjacency);
+ DRW_vbo_request(cache->batch.edge_detection, &mbufcache->vbo.pos_nor);
}
if (DRW_batch_requested(cache->batch.surface_weights, GPU_PRIM_TRIS)) {
- DRW_ibo_request(cache->batch.surface_weights, &cache->ibo.surf_tris);
- DRW_vbo_request(cache->batch.surface_weights, &cache->ordered.pos_nor);
- DRW_vbo_request(cache->batch.surface_weights, &cache->ordered.weights);
+ DRW_ibo_request(cache->batch.surface_weights, &mbufcache->ibo.tris);
+ DRW_vbo_request(cache->batch.surface_weights, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.surface_weights, &mbufcache->vbo.weights);
}
if (DRW_batch_requested(cache->batch.wire_loops, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.wire_loops, &cache->ibo.loops_lines_paint_mask);
- DRW_vbo_request(cache->batch.wire_loops, &cache->ordered.loop_pos_nor);
+ DRW_ibo_request(cache->batch.wire_loops, &mbufcache->ibo.lines_paint_mask);
+ DRW_vbo_request(cache->batch.wire_loops, &mbufcache->vbo.pos_nor);
}
if (DRW_batch_requested(cache->batch.wire_edges, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.wire_edges, &cache->ibo.loops_lines);
- DRW_vbo_request(cache->batch.wire_edges, &cache->ordered.loop_pos_nor);
- DRW_vbo_request(cache->batch.wire_edges, &cache->ordered.loop_edge_fac);
+ DRW_ibo_request(cache->batch.wire_edges, &mbufcache->ibo.lines);
+ DRW_vbo_request(cache->batch.wire_edges, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.wire_edges, &mbufcache->vbo.edge_fac);
}
- if (DRW_batch_requested(cache->batch.wire_loops_uvs, GPU_PRIM_LINE_STRIP)) {
- DRW_ibo_request(cache->batch.wire_loops_uvs, &cache->ibo.loops_line_strips);
+ if (DRW_batch_requested(cache->batch.wire_loops_uvs, GPU_PRIM_LINES)) {
+ DRW_ibo_request(cache->batch.wire_loops_uvs, &mbufcache->ibo.edituv_lines);
/* For paint overlay. Active layer should have been queried. */
if (cache->cd_used.uv != 0) {
- DRW_vbo_request(cache->batch.wire_loops_uvs, &cache->ordered.loop_uv_tan);
+ DRW_vbo_request(cache->batch.wire_loops_uvs, &mbufcache->vbo.uv);
}
}
-
- /* Edit Mesh */
- if (DRW_batch_requested(cache->batch.edit_triangles, GPU_PRIM_TRIS)) {
- DRW_ibo_request(cache->batch.edit_triangles, &cache->ibo.edit_loops_tris);
- DRW_vbo_request(cache->batch.edit_triangles, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_triangles, &cache->edit.loop_data);
- }
- if (DRW_batch_requested(cache->batch.edit_vertices, GPU_PRIM_POINTS)) {
- DRW_ibo_request(cache->batch.edit_vertices, &cache->ibo.edit_loops_points);
- DRW_vbo_request(cache->batch.edit_vertices, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_vertices, &cache->edit.loop_data);
- }
- if (DRW_batch_requested(cache->batch.edit_edges, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.edit_edges, &cache->ibo.edit_loops_lines);
- DRW_vbo_request(cache->batch.edit_edges, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_edges, &cache->edit.loop_data);
- }
- if (DRW_batch_requested(cache->batch.edit_lnor, GPU_PRIM_POINTS)) {
- DRW_ibo_request(cache->batch.edit_lnor, &cache->ibo.edit_loops_tris);
- DRW_vbo_request(cache->batch.edit_lnor, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_lnor, &cache->edit.loop_lnor);
- }
- if (DRW_batch_requested(cache->batch.edit_facedots, GPU_PRIM_POINTS)) {
- DRW_vbo_request(cache->batch.edit_facedots, &cache->edit.facedots_pos_nor_data);
- }
-
- /* Mesh Analysis */
if (DRW_batch_requested(cache->batch.edit_mesh_analysis, GPU_PRIM_TRIS)) {
- DRW_ibo_request(cache->batch.edit_mesh_analysis, &cache->ibo.edit_loops_tris);
- DRW_vbo_request(cache->batch.edit_mesh_analysis, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_mesh_analysis, &cache->edit.loop_mesh_analysis);
- }
-
- /* Edit UV */
- if (DRW_batch_requested(cache->batch.edituv_faces, GPU_PRIM_TRI_FAN)) {
- DRW_ibo_request(cache->batch.edituv_faces, &cache->ibo.edituv_loops_tri_fans);
- DRW_vbo_request(cache->batch.edituv_faces, &cache->edit.loop_uv);
- DRW_vbo_request(cache->batch.edituv_faces, &cache->edit.loop_uv_data);
- }
- if (DRW_batch_requested(cache->batch.edituv_faces_strech_area, GPU_PRIM_TRI_FAN)) {
- DRW_ibo_request(cache->batch.edituv_faces_strech_area, &cache->ibo.edituv_loops_tri_fans);
- DRW_vbo_request(cache->batch.edituv_faces_strech_area, &cache->edit.loop_uv);
- DRW_vbo_request(cache->batch.edituv_faces_strech_area, &cache->edit.loop_uv_data);
- DRW_vbo_request(cache->batch.edituv_faces_strech_area, &cache->edit.loop_stretch_area);
- }
- if (DRW_batch_requested(cache->batch.edituv_faces_strech_angle, GPU_PRIM_TRI_FAN)) {
- DRW_ibo_request(cache->batch.edituv_faces_strech_angle, &cache->ibo.edituv_loops_tri_fans);
- DRW_vbo_request(cache->batch.edituv_faces_strech_angle, &cache->edit.loop_uv);
- DRW_vbo_request(cache->batch.edituv_faces_strech_angle, &cache->edit.loop_uv_data);
- DRW_vbo_request(cache->batch.edituv_faces_strech_angle, &cache->edit.loop_stretch_angle);
- }
- if (DRW_batch_requested(cache->batch.edituv_edges, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.edituv_edges, &cache->ibo.edituv_loops_line_strips);
- DRW_vbo_request(cache->batch.edituv_edges, &cache->edit.loop_uv);
- DRW_vbo_request(cache->batch.edituv_edges, &cache->edit.loop_uv_data);
- }
- if (DRW_batch_requested(cache->batch.edituv_verts, GPU_PRIM_POINTS)) {
- DRW_ibo_request(cache->batch.edituv_verts, &cache->ibo.edituv_loops_points);
- DRW_vbo_request(cache->batch.edituv_verts, &cache->edit.loop_uv);
- DRW_vbo_request(cache->batch.edituv_verts, &cache->edit.loop_uv_data);
- }
- if (DRW_batch_requested(cache->batch.edituv_facedots, GPU_PRIM_POINTS)) {
- DRW_vbo_request(cache->batch.edituv_facedots, &cache->edit.facedots_uv);
- DRW_vbo_request(cache->batch.edituv_facedots, &cache->edit.facedots_uv_data);
- }
-
- /* Selection */
- /* TODO reuse ordered.loop_pos_nor if possible. */
- if (DRW_batch_requested(cache->batch.edit_selection_verts, GPU_PRIM_POINTS)) {
- DRW_ibo_request(cache->batch.edit_selection_verts, &cache->ibo.edit_loops_points);
- DRW_vbo_request(cache->batch.edit_selection_verts, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_selection_verts, &cache->edit.loop_vert_idx);
- }
- if (DRW_batch_requested(cache->batch.edit_selection_edges, GPU_PRIM_LINES)) {
- DRW_ibo_request(cache->batch.edit_selection_edges, &cache->ibo.edit_loops_lines);
- DRW_vbo_request(cache->batch.edit_selection_edges, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_selection_edges, &cache->edit.loop_edge_idx);
- }
- if (DRW_batch_requested(cache->batch.edit_selection_faces, GPU_PRIM_TRIS)) {
- DRW_ibo_request(cache->batch.edit_selection_faces, &cache->ibo.edit_loops_tris);
- DRW_vbo_request(cache->batch.edit_selection_faces, &cache->edit.loop_pos_nor);
- DRW_vbo_request(cache->batch.edit_selection_faces, &cache->edit.loop_face_idx);
- }
- if (DRW_batch_requested(cache->batch.edit_selection_facedots, GPU_PRIM_POINTS)) {
- DRW_vbo_request(cache->batch.edit_selection_facedots, &cache->edit.facedots_pos_nor_data);
- DRW_vbo_request(cache->batch.edit_selection_facedots, &cache->edit.facedots_idx);
+ DRW_ibo_request(cache->batch.edit_mesh_analysis, &mbufcache->ibo.tris);
+ DRW_vbo_request(cache->batch.edit_mesh_analysis, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_mesh_analysis, &mbufcache->vbo.mesh_analysis);
}
/* Per Material */
for (int i = 0; i < cache->mat_len; ++i) {
- if (DRW_batch_requested(cache->surf_per_mat[i], GPU_PRIM_TRIS)) {
- if (cache->mat_len > 1) {
- DRW_ibo_request(cache->surf_per_mat[i], &cache->surf_per_mat_tris[i]);
+ if (DRW_batch_requested(cache->surface_per_mat[i], GPU_PRIM_TRIS)) {
+ if (saved_elem_ranges && saved_elem_ranges[i]) {
+ /* XXX assign old element buffer range (it did not change).*/
+ GPU_batch_elembuf_set(cache->surface_per_mat[i], saved_elem_ranges[i], true);
}
else {
- DRW_ibo_request(cache->surf_per_mat[i], &cache->ibo.loops_tris);
+ DRW_ibo_request(cache->surface_per_mat[i], &mbufcache->ibo.tris);
}
- DRW_vbo_request(cache->surf_per_mat[i], &cache->ordered.loop_pos_nor);
- if ((cache->cd_used.uv != 0) || (cache->cd_used.tan != 0) ||
- (cache->cd_used.tan_orco != 0)) {
- DRW_vbo_request(cache->surf_per_mat[i], &cache->ordered.loop_uv_tan);
+ /* Order matters. First ones override latest vbos' attribs. */
+ DRW_vbo_request(cache->surface_per_mat[i], &mbufcache->vbo.lnor);
+ DRW_vbo_request(cache->surface_per_mat[i], &mbufcache->vbo.pos_nor);
+ if (cache->cd_used.uv != 0) {
+ DRW_vbo_request(cache->surface_per_mat[i], &mbufcache->vbo.uv);
+ }
+ if ((cache->cd_used.tan != 0) || (cache->cd_used.tan_orco != 0)) {
+ DRW_vbo_request(cache->surface_per_mat[i], &mbufcache->vbo.tan);
}
if (cache->cd_used.vcol != 0) {
- DRW_vbo_request(cache->surf_per_mat[i], &cache->ordered.loop_vcol);
+ DRW_vbo_request(cache->surface_per_mat[i], &mbufcache->vbo.vcol);
}
if (cache->cd_used.orco != 0) {
- DRW_vbo_request(cache->surf_per_mat[i], &cache->ordered.loop_orco);
+ DRW_vbo_request(cache->surface_per_mat[i], &mbufcache->vbo.orco);
}
}
}
-#ifdef DRW_DEBUG_MESH_CACHE_REQUEST
- printf("-- %s %s --\n", __func__, ob->id.name + 2);
-#endif
+ MEM_SAFE_FREE(saved_elem_ranges);
- /* Generate MeshRenderData flags */
- eMRDataType mr_flag = 0, mr_edit_flag = 0;
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.pos_nor, MR_DATATYPE_VERT /* A comment to wrap the line ;) */);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.weights, MR_DATATYPE_VERT | MR_DATATYPE_DVERT);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.loop_pos_nor, MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_LOOP_NORMALS);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.loop_uv_tan, MR_DATATYPE_VERT_LOOP_TRI_POLY | MR_DATATYPE_SHADING);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.loop_orco, MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_SHADING);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.loop_vcol, MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_SHADING);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_flag, cache->ordered.loop_edge_fac, MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_EDGE);
-
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.surf_tris, MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_LOOPTRI);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.loops_tris, MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_LOOPTRI);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.loops_lines, MR_DATATYPE_LOOP | MR_DATATYPE_EDGE | MR_DATATYPE_POLY);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag,
- cache->ibo.loops_lines_paint_mask,
- MR_DATATYPE_LOOP | MR_DATATYPE_EDGE | MR_DATATYPE_POLY);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.loops_line_strips, MR_DATATYPE_LOOP | MR_DATATYPE_POLY);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.edges_lines, MR_DATATYPE_VERT | MR_DATATYPE_EDGE);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.edges_adj_lines, MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_LOOPTRI);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_flag, cache->ibo.loose_edges_lines, MR_DATATYPE_VERT | MR_DATATYPE_EDGE);
- for (int i = 0; i < cache->mat_len; ++i) {
- int combined_flag = MR_DATATYPE_LOOP | MR_DATATYPE_POLY | MR_DATATYPE_LOOPTRI;
- DRW_ADD_FLAG_FROM_IBO_REQUEST(mr_flag, cache->surf_per_mat_tris[i], combined_flag);
- }
+ mbufcache = (do_cage) ? &cache->cage : &cache->final;
- int combined_edit_flag = MR_DATATYPE_VERT_LOOP_POLY | MR_DATATYPE_EDGE |
- MR_DATATYPE_LOOSE_VERT_EGDE;
- int combined_edit_with_lnor_flag = combined_edit_flag | MR_DATATYPE_LOOP_NORMALS;
- int combined_edituv_flag = combined_edit_flag | MR_DATATYPE_LOOPUV;
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_pos_nor, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_lnor, combined_edit_with_lnor_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_data, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_uv_data, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_uv, combined_edituv_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_stretch_angle, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_stretch_area, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.loop_mesh_analysis, MR_DATATYPE_VERT_LOOP_POLY);
-
- DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_edit_flag, cache->edit.loop_vert_idx, combined_edit_flag);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_edit_flag, cache->edit.loop_edge_idx, combined_edit_flag);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_edit_flag, cache->edit.loop_face_idx, combined_edit_flag);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(mr_edit_flag, cache->edit.facedots_idx, MR_DATATYPE_POLY);
-
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.facedots_pos_nor_data, MR_DATATYPE_POLY | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.facedots_uv, combined_edituv_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_VBO_REQUEST(
- mr_edit_flag, cache->edit.facedots_uv_data, combined_edit_flag | MR_DATATYPE_OVERLAY);
-
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_edit_flag, cache->ibo.edituv_loops_points, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_edit_flag, cache->ibo.edituv_loops_line_strips, combined_edit_flag | MR_DATATYPE_OVERLAY);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_edit_flag, cache->ibo.edituv_loops_tri_fans, combined_edit_flag | MR_DATATYPE_OVERLAY);
-
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_edit_flag, cache->ibo.edit_loops_points, combined_edit_flag | MR_DATATYPE_LOOPTRI);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_edit_flag, cache->ibo.edit_loops_lines, combined_edit_flag | MR_DATATYPE_LOOPTRI);
- DRW_ADD_FLAG_FROM_IBO_REQUEST(
- mr_edit_flag, cache->ibo.edit_loops_tris, combined_edit_flag | MR_DATATYPE_LOOPTRI);
-
- Mesh *me_original = me;
- MBC_GET_FINAL_MESH(me);
-
-#ifdef DRW_DEBUG_MESH_CACHE_REQUEST
- printf(" mr_flag %u, mr_edit_flag %u\n\n", mr_flag, mr_edit_flag);
-#endif
-
- if (me_original == me) {
- mr_flag |= mr_edit_flag;
- }
-
- MeshRenderData *rdata = NULL;
-
- if (mr_flag != 0) {
- rdata = mesh_render_data_create_ex(me, mr_flag, &cache->cd_used, ts);
- }
-
- /* Generate VBOs */
- if (DRW_vbo_requested(cache->ordered.pos_nor)) {
- mesh_create_pos_and_nor(rdata, cache->ordered.pos_nor);
- }
- if (DRW_vbo_requested(cache->ordered.weights)) {
- mesh_create_weights(rdata, cache->ordered.weights, &cache->weight_state);
- }
- if (DRW_vbo_requested(cache->ordered.loop_pos_nor)) {
- mesh_create_loop_pos_and_nor(rdata, cache->ordered.loop_pos_nor);
- }
- if (DRW_vbo_requested(cache->ordered.loop_edge_fac)) {
- mesh_create_loop_edge_fac(rdata, cache->ordered.loop_edge_fac);
- }
- if (DRW_vbo_requested(cache->ordered.loop_uv_tan)) {
- mesh_create_loop_uv_and_tan(rdata, cache->ordered.loop_uv_tan);
- }
- if (DRW_vbo_requested(cache->ordered.loop_orco)) {
- mesh_create_loop_orco(rdata, cache->ordered.loop_orco);
- }
- if (DRW_vbo_requested(cache->ordered.loop_vcol)) {
- mesh_create_loop_vcol(rdata, cache->ordered.loop_vcol);
- }
- if (DRW_ibo_requested(cache->ibo.edges_lines)) {
- mesh_create_edges_lines(rdata, cache->ibo.edges_lines, use_hide);
- }
- if (DRW_ibo_requested(cache->ibo.edges_adj_lines)) {
- mesh_create_edges_adjacency_lines(
- rdata, cache->ibo.edges_adj_lines, &cache->is_manifold, use_hide);
- }
- if (DRW_ibo_requested(cache->ibo.loose_edges_lines)) {
- mesh_create_loose_edges_lines(
- rdata, cache->ibo.loose_edges_lines, &cache->no_loose_wire, use_hide);
- }
- if (DRW_ibo_requested(cache->ibo.surf_tris)) {
- mesh_create_surf_tris(rdata, cache->ibo.surf_tris, use_hide);
- }
- if (DRW_ibo_requested(cache->ibo.loops_lines)) {
- mesh_create_loops_lines(rdata, cache->ibo.loops_lines, use_hide);
- }
- if (DRW_ibo_requested(cache->ibo.loops_lines_paint_mask)) {
- mesh_create_loops_lines_paint_mask(rdata, cache->ibo.loops_lines_paint_mask);
+ /* Edit Mesh */
+ if (DRW_batch_requested(cache->batch.edit_triangles, GPU_PRIM_TRIS)) {
+ DRW_ibo_request(cache->batch.edit_triangles, &mbufcache->ibo.tris);
+ DRW_vbo_request(cache->batch.edit_triangles, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_triangles, &mbufcache->vbo.edit_data);
}
- if (DRW_ibo_requested(cache->ibo.loops_line_strips)) {
- mesh_create_loops_line_strips(rdata, cache->ibo.loops_line_strips, use_hide);
+ if (DRW_batch_requested(cache->batch.edit_vertices, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edit_vertices, &mbufcache->ibo.points);
+ DRW_vbo_request(cache->batch.edit_vertices, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_vertices, &mbufcache->vbo.edit_data);
}
- if (DRW_ibo_requested(cache->ibo.loops_tris)) {
- mesh_create_loops_tris(rdata, &cache->ibo.loops_tris, 1, use_hide);
+ if (DRW_batch_requested(cache->batch.edit_edges, GPU_PRIM_LINES)) {
+ DRW_ibo_request(cache->batch.edit_edges, &mbufcache->ibo.lines);
+ DRW_vbo_request(cache->batch.edit_edges, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_edges, &mbufcache->vbo.edit_data);
}
- if (DRW_ibo_requested(cache->surf_per_mat_tris[0])) {
- mesh_create_loops_tris(rdata, cache->surf_per_mat_tris, cache->mat_len, use_hide);
+ if (DRW_batch_requested(cache->batch.edit_vnor, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edit_vnor, &mbufcache->ibo.points);
+ DRW_vbo_request(cache->batch.edit_vnor, &mbufcache->vbo.pos_nor);
}
-
- /* Use original Mesh* to have the correct edit cage. */
- if (me_original != me && mr_edit_flag != 0) {
- if (rdata) {
- mesh_render_data_free(rdata);
- }
- rdata = mesh_render_data_create_ex(me_original, mr_edit_flag, NULL, ts);
+ if (DRW_batch_requested(cache->batch.edit_lnor, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edit_lnor, &mbufcache->ibo.tris);
+ DRW_vbo_request(cache->batch.edit_lnor, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_lnor, &mbufcache->vbo.lnor);
}
-
- if (rdata && rdata->mapped.supported) {
- rdata->mapped.use = true;
+ if (DRW_batch_requested(cache->batch.edit_fdots, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edit_fdots, &mbufcache->ibo.fdots);
+ DRW_vbo_request(cache->batch.edit_fdots, &mbufcache->vbo.fdots_pos);
+ DRW_vbo_request(cache->batch.edit_fdots, &mbufcache->vbo.fdots_nor);
}
- if (DRW_vbo_requested(cache->edit.loop_pos_nor) || DRW_vbo_requested(cache->edit.loop_lnor) ||
- DRW_vbo_requested(cache->edit.loop_data) || DRW_vbo_requested(cache->edit.loop_vert_idx) ||
- DRW_vbo_requested(cache->edit.loop_edge_idx) ||
- DRW_vbo_requested(cache->edit.loop_face_idx)) {
- mesh_create_edit_vertex_loops(rdata,
- cache->edit.loop_pos_nor,
- cache->edit.loop_lnor,
- NULL,
- cache->edit.loop_data,
- cache->edit.loop_vert_idx,
- cache->edit.loop_edge_idx,
- cache->edit.loop_face_idx);
- }
- if (DRW_vbo_requested(cache->edit.facedots_pos_nor_data)) {
- Scene *scene = DRW_context_state_get()->scene;
- mesh_create_edit_facedots(rdata, cache->edit.facedots_pos_nor_data, scene, ob);
- }
- if (DRW_vbo_requested(cache->edit.facedots_idx)) {
- Scene *scene = DRW_context_state_get()->scene;
- mesh_create_edit_facedots_select_id(rdata, cache->edit.facedots_idx, scene, ob);
+ /* Selection */
+ if (DRW_batch_requested(cache->batch.edit_selection_verts, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edit_selection_verts, &mbufcache->ibo.points);
+ DRW_vbo_request(cache->batch.edit_selection_verts, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_selection_verts, &mbufcache->vbo.vert_idx);
}
- if (DRW_ibo_requested(cache->ibo.edit_loops_points) ||
- DRW_ibo_requested(cache->ibo.edit_loops_lines)) {
- mesh_create_edit_loops_points_lines(
- rdata, cache->ibo.edit_loops_points, cache->ibo.edit_loops_lines);
+ if (DRW_batch_requested(cache->batch.edit_selection_edges, GPU_PRIM_LINES)) {
+ DRW_ibo_request(cache->batch.edit_selection_edges, &mbufcache->ibo.lines);
+ DRW_vbo_request(cache->batch.edit_selection_edges, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_selection_edges, &mbufcache->vbo.edge_idx);
}
- if (DRW_ibo_requested(cache->ibo.edit_loops_tris)) {
- mesh_create_edit_loops_tris(rdata, cache->ibo.edit_loops_tris);
+ if (DRW_batch_requested(cache->batch.edit_selection_faces, GPU_PRIM_TRIS)) {
+ DRW_ibo_request(cache->batch.edit_selection_faces, &mbufcache->ibo.tris);
+ DRW_vbo_request(cache->batch.edit_selection_faces, &mbufcache->vbo.pos_nor);
+ DRW_vbo_request(cache->batch.edit_selection_faces, &mbufcache->vbo.poly_idx);
}
- if (DRW_vbo_requested(cache->edit.loop_mesh_analysis)) {
- mesh_create_edit_mesh_analysis(rdata, cache->edit.loop_mesh_analysis);
+ if (DRW_batch_requested(cache->batch.edit_selection_fdots, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edit_selection_fdots, &mbufcache->ibo.fdots);
+ DRW_vbo_request(cache->batch.edit_selection_fdots, &mbufcache->vbo.fdots_pos);
+ DRW_vbo_request(cache->batch.edit_selection_fdots, &mbufcache->vbo.fdot_idx);
}
- /* UV editor */
/**
* TODO: The code and data structure is ready to support modified UV display
* but the selection code for UVs needs to support it first. So for now, only
* display the cage in all cases.
*/
- if (rdata && rdata->mapped.supported) {
- rdata->mapped.use = false;
- }
+ mbufcache = (do_uvcage) ? &cache->uv_cage : &cache->final;
- if (DRW_vbo_requested(cache->edit.loop_uv_data) || DRW_vbo_requested(cache->edit.loop_uv)) {
- mesh_create_edit_vertex_loops(
- rdata, NULL, NULL, cache->edit.loop_uv, cache->edit.loop_uv_data, NULL, NULL, NULL);
+ /* Edit UV */
+ if (DRW_batch_requested(cache->batch.edituv_faces, GPU_PRIM_TRIS)) {
+ DRW_ibo_request(cache->batch.edituv_faces, &mbufcache->ibo.edituv_tris);
+ DRW_vbo_request(cache->batch.edituv_faces, &mbufcache->vbo.uv);
+ DRW_vbo_request(cache->batch.edituv_faces, &mbufcache->vbo.edituv_data);
+ }
+ if (DRW_batch_requested(cache->batch.edituv_faces_strech_area, GPU_PRIM_TRIS)) {
+ DRW_ibo_request(cache->batch.edituv_faces_strech_area, &mbufcache->ibo.edituv_tris);
+ DRW_vbo_request(cache->batch.edituv_faces_strech_area, &mbufcache->vbo.uv);
+ DRW_vbo_request(cache->batch.edituv_faces_strech_area, &mbufcache->vbo.edituv_data);
+ DRW_vbo_request(cache->batch.edituv_faces_strech_area, &mbufcache->vbo.stretch_area);
+ }
+ if (DRW_batch_requested(cache->batch.edituv_faces_strech_angle, GPU_PRIM_TRIS)) {
+ DRW_ibo_request(cache->batch.edituv_faces_strech_angle, &mbufcache->ibo.edituv_tris);
+ DRW_vbo_request(cache->batch.edituv_faces_strech_angle, &mbufcache->vbo.uv);
+ DRW_vbo_request(cache->batch.edituv_faces_strech_angle, &mbufcache->vbo.edituv_data);
+ DRW_vbo_request(cache->batch.edituv_faces_strech_angle, &mbufcache->vbo.stretch_angle);
}
- if (DRW_vbo_requested(cache->edit.loop_stretch_angle) ||
- DRW_vbo_requested(cache->edit.loop_stretch_area) ||
- DRW_vbo_requested(cache->edit.facedots_uv) ||
- DRW_vbo_requested(cache->edit.facedots_uv_data) ||
- DRW_ibo_requested(cache->ibo.edituv_loops_points) ||
- DRW_ibo_requested(cache->ibo.edituv_loops_line_strips) ||
- DRW_ibo_requested(cache->ibo.edituv_loops_tri_fans)) {
- mesh_create_uvedit_buffers(rdata,
- cache->edit.loop_stretch_area,
- cache->edit.loop_stretch_angle,
- cache->edit.facedots_uv,
- cache->edit.facedots_uv_data,
- cache->ibo.edituv_loops_points,
- cache->ibo.edituv_loops_line_strips,
- cache->ibo.edituv_loops_tri_fans);
+ if (DRW_batch_requested(cache->batch.edituv_edges, GPU_PRIM_LINES)) {
+ DRW_ibo_request(cache->batch.edituv_edges, &mbufcache->ibo.edituv_lines);
+ DRW_vbo_request(cache->batch.edituv_edges, &mbufcache->vbo.uv);
+ DRW_vbo_request(cache->batch.edituv_edges, &mbufcache->vbo.edituv_data);
+ }
+ if (DRW_batch_requested(cache->batch.edituv_verts, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edituv_verts, &mbufcache->ibo.edituv_points);
+ DRW_vbo_request(cache->batch.edituv_verts, &mbufcache->vbo.uv);
+ DRW_vbo_request(cache->batch.edituv_verts, &mbufcache->vbo.edituv_data);
}
+ if (DRW_batch_requested(cache->batch.edituv_fdots, GPU_PRIM_POINTS)) {
+ DRW_ibo_request(cache->batch.edituv_fdots, &mbufcache->ibo.edituv_fdots);
+ DRW_vbo_request(cache->batch.edituv_fdots, &mbufcache->vbo.fdots_uv);
+ DRW_vbo_request(cache->batch.edituv_fdots, &mbufcache->vbo.fdots_edituv_data);
+ }
+
+ /* Meh loose Scene const correctness here. */
+ const bool use_subsurf_fdots = scene ? modifiers_usesSubsurfFacedots((Scene *)scene, ob) : false;
- if (rdata) {
- mesh_render_data_free(rdata);
+ if (do_uvcage) {
+ mesh_buffer_cache_create_requested(
+ cache, cache->uv_cage, me, false, true, false, &cache->cd_used, ts, true);
}
+ if (do_cage) {
+ mesh_buffer_cache_create_requested(
+ cache, cache->cage, me, false, false, use_subsurf_fdots, &cache->cd_used, ts, true);
+ }
+
+ mesh_buffer_cache_create_requested(
+ cache, cache->final, me, true, false, use_subsurf_fdots, &cache->cd_used, ts, use_hide);
+
#ifdef DEBUG
check:
/* Make sure all requested batches have been setup. */
for (int i = 0; i < sizeof(cache->batch) / sizeof(void *); ++i) {
BLI_assert(!DRW_batch_requested(((GPUBatch **)&cache->batch)[i], 0));
}
+ for (int i = 0; i < sizeof(cache->final.vbo) / sizeof(void *); ++i) {
+ BLI_assert(!DRW_vbo_requested(((GPUVertBuf **)&cache->final.vbo)[i]));
+ }
+ for (int i = 0; i < sizeof(cache->final.ibo) / sizeof(void *); ++i) {
+ BLI_assert(!DRW_ibo_requested(((GPUIndexBuf **)&cache->final.ibo)[i]));
+ }
+ for (int i = 0; i < sizeof(cache->cage.vbo) / sizeof(void *); ++i) {
+ BLI_assert(!DRW_vbo_requested(((GPUVertBuf **)&cache->cage.vbo)[i]));
+ }
+ for (int i = 0; i < sizeof(cache->cage.ibo) / sizeof(void *); ++i) {
+ BLI_assert(!DRW_ibo_requested(((GPUIndexBuf **)&cache->cage.ibo)[i]));
+ }
+ for (int i = 0; i < sizeof(cache->uv_cage.vbo) / sizeof(void *); ++i) {
+ BLI_assert(!DRW_vbo_requested(((GPUVertBuf **)&cache->uv_cage.vbo)[i]));
+ }
+ for (int i = 0; i < sizeof(cache->uv_cage.ibo) / sizeof(void *); ++i) {
+ BLI_assert(!DRW_ibo_requested(((GPUIndexBuf **)&cache->uv_cage.ibo)[i]));
+ }
#endif
}
diff --git a/source/blender/draw/intern/draw_common.h b/source/blender/draw/intern/draw_common.h
index 05d7bafa00d..8e6b8895dd3 100644
--- a/source/blender/draw/intern/draw_common.h
+++ b/source/blender/draw/intern/draw_common.h
@@ -30,7 +30,6 @@ struct GPUBatch;
struct GPUMaterial;
struct ModifierData;
struct Object;
-struct PTCacheEdit;
struct ParticleSystem;
struct ViewLayer;
@@ -113,7 +112,6 @@ typedef struct GlobalsUboStorage {
/* Pack individual float at the end of the buffer to avoid alignment errors */
float sizeLightCenter, sizeLightCircle, sizeLightCircleShadow;
float sizeVertex, sizeEdge, sizeEdgeFix, sizeFaceDot;
- float gridDistance, gridResolution, gridSubdivisions, gridScale;
float pad_globalsBlock;
} GlobalsUboStorage;
diff --git a/source/blender/draw/intern/draw_hair.c b/source/blender/draw/intern/draw_hair.c
index fa1f1f2aab4..44ed01c47aa 100644
--- a/source/blender/draw/intern/draw_hair.c
+++ b/source/blender/draw/intern/draw_hair.c
@@ -253,7 +253,7 @@ void DRW_hair_update(void)
* On some system it crashes (see T58489) and on some other it renders garbage (see T60171).
*
* So instead of using transform feedback we render to a texture,
- * readback the result to system memory and reupload as VBO data.
+ * read back the result to system memory and re-upload as VBO data.
* It is really not ideal performance wise, but it is the simplest
* and the most local workaround that still uses the power of the GPU.
*/
diff --git a/source/blender/draw/intern/draw_instance_data.c b/source/blender/draw/intern/draw_instance_data.c
index 802f49d6549..8f26cc72a02 100644
--- a/source/blender/draw/intern/draw_instance_data.c
+++ b/source/blender/draw/intern/draw_instance_data.c
@@ -23,7 +23,7 @@
/**
* DRW Instance Data Manager
* This is a special memory manager that keeps memory blocks ready to send as vbo data in one
- * continuous allocation. This way we avoid feeding gawain each instance data one by one and
+ * continuous allocation. This way we avoid feeding #GPUBatch each instance data one by one and
* unnecessary memcpy. Since we loose which memory block was used each #DRWShadingGroup we need to
* redistribute them in the same order/size to avoid to realloc each frame. This is why
* #DRWInstanceDatas are sorted in a list for each different data size.
diff --git a/source/blender/draw/intern/draw_instance_data.h b/source/blender/draw/intern/draw_instance_data.h
index d88de1a58e2..2ede68e16d8 100644
--- a/source/blender/draw/intern/draw_instance_data.h
+++ b/source/blender/draw/intern/draw_instance_data.h
@@ -35,8 +35,6 @@
typedef struct DRWInstanceData DRWInstanceData;
typedef struct DRWInstanceDataList DRWInstanceDataList;
-struct DRWShadingGroup;
-
void *DRW_instance_data_next(DRWInstanceData *idata);
DRWInstanceData *DRW_instance_data_request(DRWInstanceDataList *idatalist, uint attr_size);
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index a6c671a631a..3d8a7bb1e30 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -96,6 +96,8 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
+#include "DRW_select_buffer.h"
+
#ifdef USE_GPU_SELECT
# include "GPU_select.h"
#endif
@@ -601,6 +603,7 @@ static DRWCallState *draw_unit_state_create(void)
state->ob_index = 0;
state->ob_random = 0.0f;
+ copy_v3_fl(state->ob_color, 1.0f);
/* TODO(fclem) get rid of this. */
state->culling = BLI_memblock_alloc(DST.vmempool->cullstates);
@@ -1723,9 +1726,9 @@ void DRW_draw_render_loop_ex(struct Depsgraph *depsgraph,
if (G.debug_value > 20 && G.debug_value < 30) {
GPU_depth_test(false);
- rcti rect; /* local coordinate visible rect inside region, to accommodate overlapping ui */
- ED_region_visible_rect(DST.draw_ctx.ar, &rect);
- DRW_stats_draw(&rect);
+ /* local coordinate visible rect inside region, to accommodate overlapping ui */
+ const rcti *rect = ED_region_visible_rect(DST.draw_ctx.ar);
+ DRW_stats_draw(rect);
GPU_depth_test(true);
}
@@ -1862,7 +1865,7 @@ void DRW_render_gpencil(struct RenderEngine *engine, struct Depsgraph *depsgraph
DRW_opengl_render_context_enable(re_gl_context);
/* We need to query gpu context after a gl context has been bound. */
re_gpu_context = RE_gpu_context_get(render);
- DRW_gawain_render_context_enable(re_gpu_context);
+ DRW_gpu_render_context_enable(re_gpu_context);
}
else {
DRW_opengl_context_enable();
@@ -1947,13 +1950,13 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
DRW_opengl_render_context_enable(re_gl_context);
/* We need to query gpu context after a gl context has been bound. */
re_gpu_context = RE_gpu_context_get(render);
- DRW_gawain_render_context_enable(re_gpu_context);
+ DRW_gpu_render_context_enable(re_gpu_context);
}
else {
DRW_opengl_context_enable();
}
- /* IMPORTANT: We dont support immediate mode in render mode!
+ /* IMPORTANT: We don't support immediate mode in render mode!
* This shall remain in effect until immediate mode supports
* multiple threads. */
@@ -2038,7 +2041,7 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
/* Changing Context */
if (re_gl_context != NULL) {
- DRW_gawain_render_context_disable(re_gpu_context);
+ DRW_gpu_render_context_disable(re_gpu_context);
DRW_opengl_render_context_disable(re_gl_context);
}
else {
@@ -2553,23 +2556,13 @@ void DRW_draw_depth_loop_gpencil(struct Depsgraph *depsgraph,
DRW_opengl_context_disable();
}
-void DRW_draw_select_id(Depsgraph *depsgraph,
- ARegion *ar,
- View3D *v3d,
- Base **bases,
- const uint bases_len,
- short select_mode)
+void DRW_draw_select_id(Depsgraph *depsgraph, ARegion *ar, View3D *v3d, const rcti *rect)
{
Scene *scene = DEG_get_evaluated_scene(depsgraph);
ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
- DRW_select_context_create(bases, bases_len, select_mode);
-
- DRW_opengl_context_enable();
-
/* Reset before using it. */
drw_state_prepare_clean_for_draw(&DST);
- DST.buffer_finish_called = true;
/* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */
DST.draw_ctx = (DRWContextState){
@@ -2582,7 +2575,6 @@ void DRW_draw_select_id(Depsgraph *depsgraph,
.depsgraph = depsgraph,
};
- use_drw_engine(&draw_engine_select_type);
drw_context_state_init();
/* Setup viewport */
@@ -2592,20 +2584,24 @@ void DRW_draw_select_id(Depsgraph *depsgraph,
/* Update ubos */
DRW_globals_update();
- /* Init engines */
- drw_engines_init();
+ /* Init Select Engine */
+ struct SELECTID_Context *sel_ctx = DRW_select_engine_context_get();
+ sel_ctx->last_rect = *rect;
+ use_drw_engine(&draw_engine_select_type);
+ drw_engines_init();
{
drw_engines_cache_init();
- /* Keep `base_index` in sync with `e_data.context.last_base_drawn`.
- * So don't skip objects. */
- for (uint base_index = 0; base_index < bases_len; base_index++) {
- Object *obj_eval = DEG_get_evaluated_object(depsgraph, bases[base_index]->object);
+ Object **obj = &sel_ctx->objects[0];
+ for (uint remaining = sel_ctx->objects_len; remaining--; obj++) {
+ Object *obj_eval = DEG_get_evaluated_object(depsgraph, *obj);
drw_engines_cache_populate(obj_eval);
}
drw_engines_cache_finish();
+
+ DRW_render_instance_buffer_finish();
}
/* Start Drawing */
@@ -2615,14 +2611,12 @@ void DRW_draw_select_id(Depsgraph *depsgraph,
drw_engines_disable();
+ drw_viewport_cache_resize();
+
#ifdef DEBUG
/* Avoid accidental reuse. */
drw_state_ensure_not_reused(&DST);
#endif
-
- /* Changin context */
- GPU_framebuffer_restore();
- DRW_opengl_context_disable();
}
/** See #DRW_shgroup_world_clip_planes_from_rv3d. */
@@ -2930,7 +2924,7 @@ void DRW_opengl_context_create(void)
/* This changes the active context. */
DST.gl_context = WM_opengl_context_create();
WM_opengl_context_activate(DST.gl_context);
- /* Be sure to create gawain.context too. */
+ /* Be sure to create gpu_context too. */
DST.gpu_context = GPU_context_create(0);
if (!G.background) {
immActivate();
@@ -3029,7 +3023,7 @@ void DRW_opengl_render_context_disable(void *re_gl_context)
}
/* Needs to be called AFTER DRW_opengl_render_context_enable() */
-void DRW_gawain_render_context_enable(void *re_gpu_context)
+void DRW_gpu_render_context_enable(void *re_gpu_context)
{
/* If thread is main you should use DRW_opengl_context_enable(). */
BLI_assert(!BLI_thread_is_main());
@@ -3039,7 +3033,7 @@ void DRW_gawain_render_context_enable(void *re_gpu_context)
}
/* Needs to be called BEFORE DRW_opengl_render_context_disable() */
-void DRW_gawain_render_context_disable(void *UNUSED(re_gpu_context))
+void DRW_gpu_render_context_disable(void *UNUSED(re_gpu_context))
{
DRW_shape_cache_reset(); /* XXX fix that too. */
GPU_context_active_set(NULL);
diff --git a/source/blender/draw/intern/draw_manager.h b/source/blender/draw/intern/draw_manager.h
index f37e713e374..85f6cf05e83 100644
--- a/source/blender/draw/intern/draw_manager.h
+++ b/source/blender/draw/intern/draw_manager.h
@@ -101,6 +101,7 @@ enum {
DRW_CALL_MODELVIEWPROJECTION = (1 << 1),
DRW_CALL_ORCOTEXFAC = (1 << 2),
DRW_CALL_OBJECTINFO = (1 << 3),
+ DRW_CALL_OBJECTCOLOR = (1 << 4),
};
typedef struct DRWCullingState {
@@ -122,6 +123,7 @@ typedef struct DRWCallState {
float modelinverse[4][4];
float orcotexfac[2][3];
float ob_random;
+ float ob_color[4];
} DRWCallState;
typedef struct DRWCall {
@@ -196,6 +198,7 @@ struct DRWShadingGroup {
int orcotexfac;
int callid;
int objectinfo;
+ int objectcolor;
uchar matflag; /* Matrices needed, same as DRWCall.flag */
DRWPass *pass_parent; /* backlink to pass we're in */
diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c
index 99ab25645d2..8b7cb9c1dad 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -387,6 +387,10 @@ static void drw_call_state_update_matflag(DRWCallState *state,
}
state->ob_random = random * (1.0f / (float)0xFFFFFFFF);
}
+
+ if (new_flags & DRW_CALL_OBJECTCOLOR) {
+ copy_v4_v4(state->ob_color, ob->color);
+ }
}
static DRWCallState *drw_call_state_create(DRWShadingGroup *shgroup, float (*obmat)[4], Object *ob)
@@ -836,6 +840,7 @@ static void drw_shgroup_init(DRWShadingGroup *shgroup, GPUShader *shader)
shgroup->modelviewprojection = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_MVP);
shgroup->orcotexfac = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_ORCO);
shgroup->objectinfo = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_OBJECT_INFO);
+ shgroup->objectcolor = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_OBJECT_COLOR);
shgroup->callid = GPU_shader_get_builtin_uniform(shader, GPU_UNIFORM_CALLID);
shgroup->matflag = 0;
@@ -851,6 +856,9 @@ static void drw_shgroup_init(DRWShadingGroup *shgroup, GPUShader *shader)
if (shgroup->objectinfo > -1) {
shgroup->matflag |= DRW_CALL_OBJECTINFO;
}
+ if (shgroup->objectcolor > -1) {
+ shgroup->matflag |= DRW_CALL_OBJECTCOLOR;
+ }
}
static DRWShadingGroup *drw_shgroup_create_ex(struct GPUShader *shader, DRWPass *pass)
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 949d3e1d38b..50408015fbc 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -22,6 +22,7 @@
#include "draw_manager.h"
+#include "BLI_math.h"
#include "BLI_math_bits.h"
#include "BLI_memblock.h"
@@ -488,6 +489,26 @@ bool DRW_culling_plane_test(const DRWView *view, const float plane[4])
return draw_culling_plane_test(&view->frustum_corners, plane);
}
+/* Return True if the given box intersect the current view frustum.
+ * This function will have to be replaced when world space bb per objects is implemented. */
+bool DRW_culling_min_max_test(const DRWView *view, float obmat[4][4], float min[3], float max[3])
+{
+ view = view ? view : DST.view_default;
+ float tobmat[4][4];
+ transpose_m4_m4(tobmat, obmat);
+ for (int i = 6; i--;) {
+ float frustum_plane_local[4], bb_near[3], bb_far[3];
+ mul_v4_m4v4(frustum_plane_local, tobmat, view->frustum_planes[i]);
+ aabb_get_near_far_from_plane(frustum_plane_local, min, max, bb_near, bb_far);
+
+ if (plane_point_side_v3(frustum_plane_local, bb_far) < 0.0f) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
void DRW_culling_frustum_corners_get(const DRWView *view, BoundBox *corners)
{
view = view ? view : DST.view_default;
@@ -571,6 +592,10 @@ static void draw_geometry_prepare(DRWShadingGroup *shgroup, DRWCall *call)
infos[3] = (state->flag & DRW_CALL_NEGSCALE) ? -1.0f : 1.0f;
GPU_shader_uniform_vector(shgroup->shader, shgroup->objectinfo, 4, 1, (float *)infos);
}
+ if (shgroup->objectcolor != -1) {
+ GPU_shader_uniform_vector(
+ shgroup->shader, shgroup->objectcolor, 4, 1, (float *)state->ob_color);
+ }
if (shgroup->orcotexfac != -1) {
GPU_shader_uniform_vector(
shgroup->shader, shgroup->orcotexfac, 3, 2, (float *)state->orcotexfac);
@@ -601,12 +626,12 @@ BLI_INLINE void draw_geometry_execute(DRWShadingGroup *shgroup,
GPU_batch_bind(geom);
}
- /* XXX hacking gawain. we don't want to call glUseProgram! (huge performance loss) */
+ /* XXX hacking #GPUBatch. we don't want to call glUseProgram! (huge performance loss) */
geom->program_in_use = true;
GPU_batch_draw_advanced(geom, vert_first, vert_count, inst_first, inst_count);
- geom->program_in_use = false; /* XXX hacking gawain */
+ geom->program_in_use = false; /* XXX hacking #GPUBatch */
}
enum {
diff --git a/source/blender/draw/intern/draw_manager_profiling.c b/source/blender/draw/intern/draw_manager_profiling.c
index 5e21e5e576c..bab69cf7a57 100644
--- a/source/blender/draw/intern/draw_manager_profiling.c
+++ b/source/blender/draw/intern/draw_manager_profiling.c
@@ -200,7 +200,7 @@ void DRW_stats_reset(void)
}
}
-static void draw_stat_5row(rcti *rect, int u, int v, const char *txt, const int size)
+static void draw_stat_5row(const rcti *rect, int u, int v, const char *txt, const int size)
{
BLF_draw_default_ascii(rect->xmin + (1 + u * 5) * U.widget_unit,
rect->ymax - (3 + v) * U.widget_unit,
@@ -209,13 +209,13 @@ static void draw_stat_5row(rcti *rect, int u, int v, const char *txt, const int
size);
}
-static void draw_stat(rcti *rect, int u, int v, const char *txt, const int size)
+static void draw_stat(const rcti *rect, int u, int v, const char *txt, const int size)
{
BLF_draw_default_ascii(
rect->xmin + (1 + u) * U.widget_unit, rect->ymax - (3 + v) * U.widget_unit, 0.0f, txt, size);
}
-void DRW_stats_draw(rcti *rect)
+void DRW_stats_draw(const rcti *rect)
{
char stat_string[64];
int lvl_index[MAX_NESTED_TIMER];
diff --git a/source/blender/draw/intern/draw_manager_profiling.h b/source/blender/draw/intern/draw_manager_profiling.h
index 7fe2280f9b2..3da6a4c8b1c 100644
--- a/source/blender/draw/intern/draw_manager_profiling.h
+++ b/source/blender/draw/intern/draw_manager_profiling.h
@@ -35,6 +35,6 @@ void DRW_stats_group_end(void);
void DRW_stats_query_start(const char *name);
void DRW_stats_query_end(void);
-void DRW_stats_draw(rcti *rect);
+void DRW_stats_draw(const rcti *rect);
#endif /* __DRAW_MANAGER_PROFILING_H__ */
diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c
index d0aa6d55c03..9c34cdbac3b 100644
--- a/source/blender/draw/intern/draw_manager_shader.c
+++ b/source/blender/draw/intern/draw_manager_shader.c
@@ -178,7 +178,7 @@ static void drw_deferred_shader_compilation_free(void *custom_data)
static void drw_deferred_shader_add(GPUMaterial *mat, bool deferred)
{
- /* Do not deferre the compilation if we are rendering for image.
+ /* Do not defer the compilation if we are rendering for image.
* deferred rendering is only possible when `evil_C` is available */
if (DST.draw_ctx.evil_C == NULL || DRW_state_is_image_render() || !USE_DEFERRED_COMPILATION ||
!deferred) {
diff --git a/source/blender/draw/intern/draw_manager_texture.c b/source/blender/draw/intern/draw_manager_texture.c
index 4750a35d784..373810b2f7f 100644
--- a/source/blender/draw/intern/draw_manager_texture.c
+++ b/source/blender/draw/intern/draw_manager_texture.c
@@ -45,6 +45,7 @@ static bool drw_texture_format_supports_framebuffer(eGPUTextureFormat format)
case GPU_RG32F:
case GPU_R11F_G11F_B10F:
case GPU_RGBA8:
+ case GPU_RGBA16:
case GPU_RGBA16F:
case GPU_RGBA32F:
case GPU_DEPTH_COMPONENT16:
diff --git a/source/blender/draw/intern/draw_select_buffer.c b/source/blender/draw/intern/draw_select_buffer.c
new file mode 100644
index 00000000000..6454fc71e56
--- /dev/null
+++ b/source/blender/draw/intern/draw_select_buffer.c
@@ -0,0 +1,551 @@
+/*
+ * 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.
+ *
+ * Copyright 2019, Blender Foundation.
+ */
+
+/** \file
+ * \ingroup draw_engine
+ *
+ * Utilities to read id buffer created in select_engine.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_bitmap.h"
+#include "BLI_bitmap_draw_2d.h"
+#include "BLI_rect.h"
+
+#include "DNA_screen_types.h"
+
+#include "GPU_select.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
+
+#include "DRW_engine.h"
+#include "DRW_select_buffer.h"
+
+#include "draw_manager.h"
+
+#include "../engines/select/select_engine.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Buffer of select ID's
+ * \{ */
+
+/* Main function to read a block of pixels from the select frame buffer. */
+uint *DRW_select_buffer_read(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const rcti *rect,
+ uint *r_buf_len)
+{
+ uint *r_buf = NULL;
+ uint buf_len = 0;
+
+ /* Clamp rect. */
+ rcti r = {
+ .xmin = 0,
+ .xmax = ar->winx,
+ .ymin = 0,
+ .ymax = ar->winy,
+ };
+
+ /* Make sure that the rect is within the bounds of the viewport.
+ * Some GPUs have problems reading pixels off limits. */
+ rcti rect_clamp = *rect;
+ if (BLI_rcti_isect(&r, &rect_clamp, &rect_clamp)) {
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ DRW_opengl_context_enable();
+ /* Update the drawing. */
+ DRW_draw_select_id(depsgraph, ar, v3d, rect);
+
+ if (select_ctx->index_drawn_len > 1) {
+ BLI_assert(ar->winx == GPU_texture_width(DRW_engine_select_texture_get()) &&
+ ar->winy == GPU_texture_height(DRW_engine_select_texture_get()));
+
+ /* Read the UI32 pixels. */
+ buf_len = BLI_rcti_size_x(rect) * BLI_rcti_size_y(rect);
+ r_buf = MEM_mallocN(buf_len * sizeof(*r_buf), __func__);
+
+ GPUFrameBuffer *select_id_fb = DRW_engine_select_framebuffer_get();
+ GPU_framebuffer_bind(select_id_fb);
+ glReadBuffer(GL_COLOR_ATTACHMENT0);
+ glReadPixels(rect_clamp.xmin,
+ rect_clamp.ymin,
+ BLI_rcti_size_x(&rect_clamp),
+ BLI_rcti_size_y(&rect_clamp),
+ GL_RED_INTEGER,
+ GL_UNSIGNED_INT,
+ r_buf);
+
+ if (!BLI_rcti_compare(rect, &rect_clamp)) {
+ /* The rect has been clamped so you need to realign the buffer and fill in the blanks */
+ GPU_select_buffer_stride_realign(rect, &rect_clamp, r_buf);
+ }
+ }
+
+ GPU_framebuffer_restore();
+ DRW_opengl_context_disable();
+ }
+
+ if (r_buf_len) {
+ *r_buf_len = buf_len;
+ }
+
+ return r_buf;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Select Bitmap from ID's
+ *
+ * Given a buffer of select ID's, fill in a booleans (true/false) per index.
+ * #BLI_bitmap is used for memory efficiency.
+ *
+ * \{ */
+
+/**
+ * \param rect: The rectangle to sample indices from (min/max inclusive).
+ * \param mask: Specifies the rect pixels (optional).
+ * \returns a #BLI_bitmap the length of \a bitmap_len or NULL on failure.
+ */
+uint *DRW_select_buffer_bitmap_from_rect(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const rcti *rect,
+ uint *r_bitmap_len)
+{
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ rcti rect_px = *rect;
+ rect_px.xmax += 1;
+ rect_px.ymax += 1;
+
+ uint buf_len;
+ uint *buf = DRW_select_buffer_read(depsgraph, ar, v3d, &rect_px, &buf_len);
+ if (buf == NULL) {
+ return NULL;
+ }
+
+ BLI_assert(select_ctx->index_drawn_len > 0);
+ const uint bitmap_len = select_ctx->index_drawn_len - 1;
+
+ BLI_bitmap *bitmap_buf = BLI_BITMAP_NEW(bitmap_len, __func__);
+ const uint *buf_iter = buf;
+ while (buf_len--) {
+ const uint index = *buf_iter - 1;
+ if (index < bitmap_len) {
+ BLI_BITMAP_ENABLE(bitmap_buf, index);
+ }
+ buf_iter++;
+ }
+ MEM_freeN((void *)buf);
+
+ if (r_bitmap_len) {
+ *r_bitmap_len = bitmap_len;
+ }
+
+ return bitmap_buf;
+}
+
+/**
+ * \param bitmap_len: Number of indices in the selection id buffer.
+ * \param center: Circle center.
+ * \param radius: Circle radius.
+ * \returns a #BLI_bitmap the length of \a bitmap_len or NULL on failure.
+ */
+uint *DRW_select_buffer_bitmap_from_circle(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int center[2],
+ const int radius,
+ uint *r_bitmap_len)
+{
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ const rcti rect = {
+ .xmin = center[0] - radius,
+ .xmax = center[0] + radius + 1,
+ .ymin = center[1] - radius,
+ .ymax = center[1] + radius + 1,
+ };
+
+ const uint *buf = DRW_select_buffer_read(depsgraph, ar, v3d, &rect, NULL);
+
+ if (buf == NULL) {
+ return NULL;
+ }
+
+ BLI_assert(select_ctx->index_drawn_len > 0);
+ const uint bitmap_len = select_ctx->index_drawn_len - 1;
+
+ BLI_bitmap *bitmap_buf = BLI_BITMAP_NEW(bitmap_len, __func__);
+ const uint *buf_iter = buf;
+ const int radius_sq = radius * radius;
+ for (int yc = -radius; yc <= radius; yc++) {
+ for (int xc = -radius; xc <= radius; xc++, buf_iter++) {
+ if (xc * xc + yc * yc < radius_sq) {
+ /* Intentionally wrap to max value if this is zero. */
+ const uint index = *buf_iter - 1;
+ if (index < bitmap_len) {
+ BLI_BITMAP_ENABLE(bitmap_buf, index);
+ }
+ }
+ }
+ }
+ MEM_freeN((void *)buf);
+
+ if (r_bitmap_len) {
+ *r_bitmap_len = bitmap_len;
+ }
+
+ return bitmap_buf;
+}
+
+struct PolyMaskData {
+ BLI_bitmap *px;
+ int width;
+};
+
+static void drw_select_mask_px_cb(int x, int x_end, int y, void *user_data)
+{
+ struct PolyMaskData *data = user_data;
+ BLI_bitmap *px = data->px;
+ int i = (y * data->width) + x;
+ do {
+ BLI_BITMAP_ENABLE(px, i);
+ i++;
+ } while (++x != x_end);
+}
+
+/**
+ * \param poly: The polygon coordinates.
+ * \param poly_len: Length of the polygon.
+ * \param rect: Polygon boundaries.
+ * \returns a #BLI_bitmap.
+ */
+uint *DRW_select_buffer_bitmap_from_poly(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int poly[][2],
+ const int poly_len,
+ const rcti *rect,
+ uint *r_bitmap_len)
+{
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ rcti rect_px = *rect;
+ rect_px.xmax += 1;
+ rect_px.ymax += 1;
+
+ uint buf_len;
+ uint *buf = DRW_select_buffer_read(depsgraph, ar, v3d, &rect_px, &buf_len);
+ if (buf == NULL) {
+ return NULL;
+ }
+
+ BLI_bitmap *buf_mask = BLI_BITMAP_NEW(buf_len, __func__);
+
+ struct PolyMaskData poly_mask_data;
+ poly_mask_data.px = buf_mask;
+ poly_mask_data.width = (rect->xmax - rect->xmin) + 1;
+
+ BLI_bitmap_draw_2d_poly_v2i_n(rect_px.xmin,
+ rect_px.ymin,
+ rect_px.xmax,
+ rect_px.ymax,
+ poly,
+ poly_len,
+ drw_select_mask_px_cb,
+ &poly_mask_data);
+
+ BLI_assert(select_ctx->index_drawn_len > 0);
+ const uint bitmap_len = select_ctx->index_drawn_len - 1;
+
+ BLI_bitmap *bitmap_buf = BLI_BITMAP_NEW(bitmap_len, __func__);
+ const uint *buf_iter = buf;
+ int i = 0;
+ while (buf_len--) {
+ const uint index = *buf_iter - 1;
+ if (index < bitmap_len && BLI_BITMAP_TEST(buf_mask, i)) {
+ BLI_BITMAP_ENABLE(bitmap_buf, index);
+ }
+ buf_iter++;
+ i++;
+ }
+ MEM_freeN((void *)buf);
+ MEM_freeN(buf_mask);
+
+ if (r_bitmap_len) {
+ *r_bitmap_len = bitmap_len;
+ }
+
+ return bitmap_buf;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Find Single Select ID's
+ *
+ * Given a buffer of select ID's, find the a single select id.
+ *
+ * \{ */
+
+/**
+ * Samples a single pixel.
+ */
+uint DRW_select_buffer_sample_point(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int center[2])
+{
+ uint ret = 0;
+
+ const rcti rect = {
+ .xmin = center[0],
+ .xmax = center[0] + 1,
+ .ymin = center[1],
+ .ymax = center[1] + 1,
+ };
+
+ uint buf_len;
+ uint *buf = DRW_select_buffer_read(depsgraph, ar, v3d, &rect, &buf_len);
+ if (buf) {
+ BLI_assert(0 != buf_len);
+ ret = buf[0];
+ MEM_freeN(buf);
+ }
+
+ return ret;
+}
+
+/**
+ * Find the selection id closest to \a center.
+ * \param dist[in,out]: Use to initialize the distance,
+ * when found, this value is set to the distance of the selection that's returned.
+ */
+uint DRW_select_buffer_find_nearest_to_point(struct Depsgraph *depsgraph,
+ struct ARegion *ar,
+ struct View3D *v3d,
+ const int center[2],
+ const uint id_min,
+ const uint id_max,
+ uint *dist)
+{
+ /* Smart function to sample a rect spiraling outside, nice for selection ID. */
+
+ /* Create region around center (typically the mouse cursor).
+ * This must be square and have an odd width,
+ * the spiraling algorithm does not work with arbitrary rectangles. */
+
+ uint index = 0;
+
+ rcti rect;
+ BLI_rcti_init_pt_radius(&rect, center, *dist);
+ rect.xmax += 1;
+ rect.ymax += 1;
+
+ int width = BLI_rcti_size_x(&rect);
+ int height = width;
+ BLI_assert(width == height);
+
+ /* Read from selection framebuffer. */
+
+ uint buf_len;
+ const uint *buf = DRW_select_buffer_read(depsgraph, ar, v3d, &rect, &buf_len);
+
+ if (buf == NULL) {
+ return index;
+ }
+
+ BLI_assert(width * height == buf_len);
+
+ /* Spiral, starting from center of buffer. */
+ int spiral_offset = height * (int)(width / 2) + (height / 2);
+ int spiral_direction = 0;
+
+ for (int nr = 1; nr <= height; nr++) {
+ for (int a = 0; a < 2; a++) {
+ for (int b = 0; b < nr; b++) {
+ /* Find hit within the specified range. */
+ uint hit_id = buf[spiral_offset];
+
+ if (hit_id && hit_id >= id_min && hit_id < id_max) {
+ /* Get x/y from spiral offset. */
+ int hit_x = spiral_offset % width;
+ int hit_y = spiral_offset / width;
+
+ int center_x = width / 2;
+ int center_y = height / 2;
+
+ /* Manhatten distance in keeping with other screen-based selection. */
+ *dist = (uint)(abs(hit_x - center_x) + abs(hit_y - center_y));
+
+ /* Indices start at 1 here. */
+ index = (hit_id - id_min) + 1;
+ goto exit;
+ }
+
+ /* Next spiral step. */
+ if (spiral_direction == 0) {
+ spiral_offset += 1; /* right */
+ }
+ else if (spiral_direction == 1) {
+ spiral_offset -= width; /* down */
+ }
+ else if (spiral_direction == 2) {
+ spiral_offset -= 1; /* left */
+ }
+ else {
+ spiral_offset += width; /* up */
+ }
+
+ /* Stop if we are outside the buffer. */
+ if (spiral_offset < 0 || spiral_offset >= buf_len) {
+ goto exit;
+ }
+ }
+
+ spiral_direction = (spiral_direction + 1) % 4;
+ }
+ }
+
+exit:
+ MEM_freeN((void *)buf);
+ return index;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Object Utils
+ * \{ */
+
+bool DRW_select_buffer_elem_get(const uint sel_id,
+ uint *r_elem,
+ uint *r_base_index,
+ char *r_elem_type)
+{
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ char elem_type = 0;
+ uint elem_id = 0;
+ uint base_index = 0;
+
+ for (; base_index < select_ctx->objects_drawn_len; base_index++) {
+ struct ObjectOffsets *base_ofs = &select_ctx->index_offsets[base_index];
+
+ if (base_ofs->face > sel_id) {
+ elem_id = sel_id - base_ofs->face_start;
+ elem_type = SCE_SELECT_FACE;
+ break;
+ }
+ if (base_ofs->edge > sel_id) {
+ elem_id = sel_id - base_ofs->edge_start;
+ elem_type = SCE_SELECT_EDGE;
+ break;
+ }
+ if (base_ofs->vert > sel_id) {
+ elem_id = sel_id - base_ofs->vert_start;
+ elem_type = SCE_SELECT_VERTEX;
+ break;
+ }
+ }
+
+ if (base_index == select_ctx->objects_drawn_len) {
+ return false;
+ }
+
+ *r_elem = elem_id;
+
+ if (r_base_index) {
+ Object *obj_orig = DEG_get_original_object(select_ctx->objects_drawn[base_index]);
+ *r_base_index = obj_orig->runtime.select_id;
+ }
+
+ if (r_elem_type) {
+ *r_elem_type = elem_type;
+ }
+
+ return true;
+}
+
+uint DRW_select_buffer_context_offset_for_object_elem(Depsgraph *depsgraph,
+ Object *object,
+ char elem_type)
+{
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, object);
+
+ SELECTID_ObjectData *sel_data = (SELECTID_ObjectData *)DRW_drawdata_get(
+ &ob_eval->id, &draw_engine_select_type);
+
+ if (!sel_data || !sel_data->is_drawn) {
+ return 0;
+ }
+
+ struct ObjectOffsets *base_ofs = &select_ctx->index_offsets[sel_data->drawn_index];
+
+ if (elem_type == SCE_SELECT_VERTEX) {
+ return base_ofs->vert_start;
+ }
+ if (elem_type == SCE_SELECT_EDGE) {
+ return base_ofs->edge_start;
+ }
+ if (elem_type == SCE_SELECT_FACE) {
+ return base_ofs->face_start;
+ }
+ BLI_assert(0);
+ return 0;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Context
+ * \{ */
+
+void DRW_select_buffer_context_create(Base **bases, const uint bases_len, short select_mode)
+{
+ struct SELECTID_Context *select_ctx = DRW_select_engine_context_get();
+
+ select_ctx->objects = MEM_reallocN(select_ctx->objects,
+ sizeof(*select_ctx->objects) * bases_len);
+
+ select_ctx->index_offsets = MEM_reallocN(select_ctx->index_offsets,
+ sizeof(*select_ctx->index_offsets) * bases_len);
+
+ select_ctx->objects_drawn = MEM_reallocN(select_ctx->objects_drawn,
+ sizeof(*select_ctx->objects_drawn) * bases_len);
+
+ for (uint base_index = 0; base_index < bases_len; base_index++) {
+ Object *obj = bases[base_index]->object;
+ select_ctx->objects[base_index] = obj;
+
+ /* Weak but necessary for `DRW_select_buffer_elem_get`. */
+ obj->runtime.select_id = base_index;
+ }
+
+ select_ctx->objects_len = bases_len;
+ select_ctx->select_mode = select_mode;
+ memset(select_ctx->persmat, 0, sizeof(select_ctx->persmat));
+}
+/** \} */
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index f0e35e47a66..f8247d7929e 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -128,8 +128,7 @@ typedef struct EDIT_MESH_Shaders {
GPUShader *depth;
/* Mesh analysis shader */
- GPUShader *mesh_analysis_face;
- GPUShader *mesh_analysis_vertex;
+ GPUShader *mesh_analysis;
} EDIT_MESH_Shaders;
/* *********** STATIC *********** */
@@ -307,15 +306,9 @@ static void EDIT_MESH_engine_init(void *vedata)
});
/* Mesh Analysis */
- sh_data->mesh_analysis_face = GPU_shader_create_from_arrays({
+ sh_data->mesh_analysis = GPU_shader_create_from_arrays({
.vert = (const char *[]){lib, datatoc_edit_mesh_overlay_mesh_analysis_vert_glsl, NULL},
.frag = (const char *[]){datatoc_edit_mesh_overlay_mesh_analysis_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg_data->def, "#define FACE_COLOR\n", NULL},
- });
- sh_data->mesh_analysis_vertex = GPU_shader_create_from_arrays({
- .vert = (const char *[]){lib, datatoc_edit_mesh_overlay_mesh_analysis_vert_glsl, NULL},
- .frag = (const char *[]){datatoc_edit_mesh_overlay_mesh_analysis_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg_data->def, "#define VERTEX_COLOR\n", NULL},
});
MEM_freeN(lib);
@@ -548,10 +541,9 @@ static void EDIT_MESH_cache_init(void *vedata)
/* Mesh Analysis Pass */
DRWState state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND_ALPHA;
psl->mesh_analysis_pass = DRW_pass_create("Mesh Analysis", state);
- const bool is_vertex_color = scene->toolsettings->statvis.type == SCE_STATVIS_SHARP;
- g_data->mesh_analysis_shgrp = DRW_shgroup_create(
- is_vertex_color ? sh_data->mesh_analysis_vertex : sh_data->mesh_analysis_face,
- psl->mesh_analysis_pass);
+ g_data->mesh_analysis_shgrp = DRW_shgroup_create(sh_data->mesh_analysis,
+ psl->mesh_analysis_pass);
+ DRW_shgroup_uniform_texture(g_data->mesh_analysis_shgrp, "weightTex", G_draw.weight_ramp);
if (rv3d->rflag & RV3D_CLIPPING) {
DRW_shgroup_state_enable(g_data->mesh_analysis_shgrp, DRW_STATE_CLIP_PLANES);
}
@@ -704,17 +696,10 @@ static void EDIT_MESH_cache_populate(void *vedata, Object *ob)
geom = DRW_cache_mesh_surface_weights_get(ob);
DRW_shgroup_call_no_cull(g_data->fweights_shgrp, geom, ob);
}
-
- if (do_show_mesh_analysis && !XRAY_ACTIVE(v3d)) {
- Mesh *me = (Mesh *)ob->data;
- BMEditMesh *embm = me->edit_mesh;
- const bool is_original = embm->mesh_eval_final &&
- (embm->mesh_eval_final->runtime.is_original == true);
- if (is_original) {
- geom = DRW_cache_mesh_surface_mesh_analysis_get(ob);
- if (geom) {
- DRW_shgroup_call_no_cull(g_data->mesh_analysis_shgrp, geom, ob);
- }
+ else if (do_show_mesh_analysis && !XRAY_ACTIVE(v3d)) {
+ geom = DRW_cache_mesh_surface_mesh_analysis_get(ob);
+ if (geom) {
+ DRW_shgroup_call_no_cull(g_data->mesh_analysis_shgrp, geom, ob);
}
}
@@ -727,7 +712,7 @@ static void EDIT_MESH_cache_populate(void *vedata, Object *ob)
}
if (vnormals_do) {
- geom = DRW_mesh_batch_cache_get_edit_vertices(ob->data);
+ geom = DRW_mesh_batch_cache_get_edit_vnors(ob->data);
DRW_shgroup_call_no_cull(g_data->vnormals_shgrp, geom, ob);
}
if (lnormals_do) {
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 148a4951dc6..06e5b521514 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -332,7 +332,7 @@ static struct {
OBJECT_Shaders sh_data[GPU_SHADER_CFG_LEN];
- float grid_settings[5];
+ float grid_distance;
float grid_mesh_size;
int grid_flag;
float grid_axes[3];
@@ -340,6 +340,7 @@ static struct {
int zneg_flag;
float zplane_axes[3];
float inv_viewport_size[2];
+ float grid_steps[8];
bool draw_grid;
/* Temp buffer textures */
struct GPUTexture *outlines_depth_tx;
@@ -559,8 +560,6 @@ static void OBJECT_engine_init(void *vedata)
View3D *v3d = draw_ctx->v3d;
Scene *scene = draw_ctx->scene;
RegionView3D *rv3d = draw_ctx->rv3d;
- float grid_scale = ED_view3d_grid_scale(scene, v3d, NULL);
- float grid_res;
const bool show_axis_x = (v3d->gridflag & V3D_SHOW_X) != 0;
const bool show_axis_y = (v3d->gridflag & V3D_SHOW_Y) != 0;
@@ -576,21 +575,6 @@ static void OBJECT_engine_init(void *vedata)
/* if perps */
if (winmat[3][3] == 0.0f) {
- float fov;
- float viewvecs[2][4] = {
- {1.0f, -1.0f, -1.0f, 1.0f},
- {-1.0f, 1.0f, -1.0f, 1.0f},
- };
-
- /* convert the view vectors to view space */
- for (int i = 0; i < 2; i++) {
- mul_m4_v4(wininv, viewvecs[i]);
- mul_v3_fl(viewvecs[i], 1.0f / viewvecs[i][2]); /* perspective divide */
- }
-
- fov = angle_v3v3(viewvecs[0], viewvecs[1]) / 2.0f;
- grid_res = fabsf(tanf(fov)) / grid_scale;
-
e_data.grid_flag = (1 << 4); /* XY plane */
if (show_axis_x) {
e_data.grid_flag |= SHOW_AXIS_X;
@@ -603,14 +587,6 @@ static void OBJECT_engine_init(void *vedata)
}
}
else {
- if (rv3d->view != RV3D_VIEW_USER) {
- /* Allow 3 more subdivisions. */
- grid_scale /= powf(v3d->gridsubdiv, 3);
- }
-
- float viewdist = 1.0f / max_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
- grid_res = viewdist / grid_scale;
-
if (ELEM(rv3d->view, RV3D_VIEW_RIGHT, RV3D_VIEW_LEFT)) {
e_data.draw_grid = show_ortho_grid;
e_data.grid_flag = PLANE_YZ | SHOW_AXIS_Y | SHOW_AXIS_Z | SHOW_GRID | GRID_BACK;
@@ -688,12 +664,7 @@ static void OBJECT_engine_init(void *vedata)
dist = v3d->clip_end;
}
- e_data.grid_settings[0] = dist / 2.0f; /* gridDistance */
- e_data.grid_settings[1] = grid_res; /* gridResolution */
- e_data.grid_settings[2] = grid_scale; /* gridScale */
- e_data.grid_settings[3] = v3d->gridsubdiv; /* gridSubdiv */
- e_data.grid_settings[4] = (v3d->gridsubdiv > 1) ? 1.0f / logf(v3d->gridsubdiv) :
- 0.0f; /* 1/log(gridSubdiv) */
+ e_data.grid_distance = dist / 2.0f; /* gridDistance */
if (winmat[3][3] == 0.0f) {
e_data.grid_mesh_size = dist;
@@ -702,6 +673,8 @@ static void OBJECT_engine_init(void *vedata)
float viewdist = 1.0f / min_ff(fabsf(winmat[0][0]), fabsf(winmat[1][1]));
e_data.grid_mesh_size = viewdist * dist;
}
+
+ ED_view3d_grid_steps(scene, v3d, rv3d, e_data.grid_steps);
}
copy_v2_v2(e_data.inv_viewport_size, DRW_viewport_size_get());
@@ -1115,6 +1088,10 @@ static void DRW_shgroup_camera_background_images(OBJECT_Shaders *sh_data,
Object *ob,
RegionView3D *rv3d)
{
+ if (DRW_state_is_select()) {
+ return;
+ }
+
if (!BKE_object_empty_image_frame_is_visible_in_view3d(ob, rv3d)) {
return;
}
@@ -1250,9 +1227,9 @@ static void DRW_shgroup_camera_background_images(OBJECT_Shaders *sh_data,
float camera_aspect_y = 1.0;
float camera_offset_x = 0.0;
float camera_offset_y = 0.0;
- float camera_aspect = 1.0;
float camera_width = size[0];
float camera_height = size[1];
+ float camera_aspect = camera_width / camera_height;
if (!DRW_state_is_image_render()) {
rctf render_border;
@@ -1280,48 +1257,52 @@ static void DRW_shgroup_camera_background_images(OBJECT_Shaders *sh_data,
uv2img_space[0][0] = image_width;
uv2img_space[1][1] = image_height;
- img2cam_space[0][0] = (1.0 / image_width);
- img2cam_space[1][1] = (1.0 / image_height);
+ const float fit_scale = image_aspect / camera_aspect;
+ img2cam_space[0][0] = 1.0 / image_width;
+ img2cam_space[1][1] = 1.0 / fit_scale / image_height;
/* Update scaling based on image and camera framing */
float scale_x = bgpic->scale;
float scale_y = bgpic->scale;
if (bgpic->flag & CAM_BGIMG_FLAG_CAMERA_ASPECT) {
- float fit_scale = image_aspect / camera_aspect;
if (bgpic->flag & CAM_BGIMG_FLAG_CAMERA_CROP) {
if (image_aspect > camera_aspect) {
scale_x *= fit_scale;
- }
- else {
- scale_y /= fit_scale;
+ scale_y *= fit_scale;
}
}
else {
if (image_aspect > camera_aspect) {
+ scale_x /= fit_scale;
scale_y /= fit_scale;
}
else {
scale_x *= fit_scale;
+ scale_y *= fit_scale;
}
}
}
+ else {
+ /* Stretch image to camera aspect */
+ scale_y /= 1.0 / fit_scale;
+ }
// scale image to match the desired aspect ratio
scale_m4[0][0] = scale_x;
scale_m4[1][1] = scale_y;
- /* Translate, using coordinates that aren't squashed by the aspect. */
- translate_m4[3][0] = bgpic->offset[0] * 2.0f * max_ff(1.0f, 1.0f / camera_aspect);
- translate_m4[3][1] = bgpic->offset[1] * 2.0f * max_ff(1.0f, camera_aspect);
+ /* Translate */
+ translate_m4[3][0] = image_width * bgpic->offset[0] * 2.0f;
+ translate_m4[3][1] = image_height * bgpic->offset[1] * 2.0f;
mul_m4_series(bg_data->transform_mat,
win_m4_translate,
win_m4_scale,
- translate_m4,
img2cam_space,
- scale_m4,
+ translate_m4,
rot_m4,
+ scale_m4,
uv2img_space);
DRWPass *pass = (bgpic->flag & CAM_BGIMG_FLAG_FOREGROUND) ? psl->camera_images_front :
@@ -1504,10 +1485,10 @@ static void OBJECT_cache_init(void *vedata)
DRWShadingGroup *grp = DRW_shgroup_create(sh_data->grid, psl->grid);
DRW_shgroup_uniform_int(grp, "gridFlag", &e_data.zneg_flag, 1);
DRW_shgroup_uniform_vec3(grp, "planeAxes", e_data.zplane_axes, 1);
- DRW_shgroup_uniform_vec4(grp, "gridSettings", e_data.grid_settings, 1);
+ DRW_shgroup_uniform_vec3(grp, "screenVecs[0]", DRW_viewport_screenvecs_get(), 2);
+ DRW_shgroup_uniform_float(grp, "gridDistance", &e_data.grid_distance, 1);
DRW_shgroup_uniform_float_copy(grp, "lineKernel", grid_line_size);
DRW_shgroup_uniform_float_copy(grp, "meshSize", e_data.grid_mesh_size);
- DRW_shgroup_uniform_float(grp, "gridOneOverLogSubdiv", &e_data.grid_settings[4], 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
DRW_shgroup_call(grp, geom, NULL);
@@ -1517,6 +1498,7 @@ static void OBJECT_cache_init(void *vedata)
DRW_shgroup_uniform_vec3(grp, "planeAxes", e_data.grid_axes, 1);
DRW_shgroup_uniform_block(grp, "globalsBlock", G_draw.block_ubo);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &dtxl->depth);
+ DRW_shgroup_uniform_float(grp, "gridSteps", e_data.grid_steps, ARRAY_SIZE(e_data.grid_steps));
DRW_shgroup_call(grp, geom, NULL);
grp = DRW_shgroup_create(sh_data->grid, psl->grid);
diff --git a/source/blender/draw/modes/paint_vertex_mode.c b/source/blender/draw/modes/paint_vertex_mode.c
index bfd189189b4..5d14b3ba414 100644
--- a/source/blender/draw/modes/paint_vertex_mode.c
+++ b/source/blender/draw/modes/paint_vertex_mode.c
@@ -78,7 +78,8 @@ typedef struct PAINT_VERTEX_Data {
typedef struct PAINT_VERTEX_Shaders {
struct {
- struct GPUShader *color_face;
+ struct GPUShader *color_face_mul_blending;
+ struct GPUShader *color_face_alpha_blending;
struct GPUShader *wire_overlay;
struct GPUShader *wire_select_overlay;
} by_mode[MODE_LEN];
@@ -114,7 +115,7 @@ static void PAINT_VERTEX_engine_init(void *vedata)
const GPUShaderConfigData *sh_cfg_data = &GPU_shader_cfg_data[draw_ctx->sh_cfg];
if (!sh_data->face_select_overlay) {
- sh_data->by_mode[VERTEX_MODE].color_face = GPU_shader_create_from_arrays({
+ sh_data->by_mode[VERTEX_MODE].color_face_mul_blending = GPU_shader_create_from_arrays({
.vert = (const char *[]){sh_cfg_data->lib,
datatoc_common_view_lib_glsl,
datatoc_paint_vertex_vert_glsl,
@@ -122,7 +123,15 @@ static void PAINT_VERTEX_engine_init(void *vedata)
.frag = (const char *[]){datatoc_paint_vertex_frag_glsl, NULL},
.defs = (const char *[]){sh_cfg_data->def, NULL},
});
- sh_data->by_mode[WEIGHT_MODE].color_face = GPU_shader_create_from_arrays({
+ sh_data->by_mode[VERTEX_MODE].color_face_alpha_blending = GPU_shader_create_from_arrays({
+ .vert = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_paint_vertex_vert_glsl,
+ NULL},
+ .frag = (const char *[]){datatoc_paint_vertex_frag_glsl, NULL},
+ .defs = (const char *[]){sh_cfg_data->def, "#define DRW_STATE_BLEND_ALPHA\n", NULL},
+ });
+ sh_data->by_mode[WEIGHT_MODE].color_face_mul_blending = GPU_shader_create_from_arrays({
.vert = (const char *[]){sh_cfg_data->lib,
datatoc_common_view_lib_glsl,
datatoc_common_globals_lib_glsl,
@@ -131,7 +140,18 @@ static void PAINT_VERTEX_engine_init(void *vedata)
.frag = (const char *[]){datatoc_common_globals_lib_glsl,
datatoc_paint_weight_frag_glsl,
NULL},
- .defs = (const char *[]){sh_cfg_data->def, NULL},
+ .defs = (const char *[]){sh_cfg_data->def, "#define DRW_STATE_BLEND_MUL\n", NULL},
+ });
+ sh_data->by_mode[WEIGHT_MODE].color_face_alpha_blending = GPU_shader_create_from_arrays({
+ .vert = (const char *[]){sh_cfg_data->lib,
+ datatoc_common_view_lib_glsl,
+ datatoc_common_globals_lib_glsl,
+ datatoc_paint_weight_vert_glsl,
+ NULL},
+ .frag = (const char *[]){datatoc_common_globals_lib_glsl,
+ datatoc_paint_weight_frag_glsl,
+ NULL},
+ .defs = (const char *[]){sh_cfg_data->def, "#define DRW_STATE_BLEND_ALPHA\n", NULL},
});
sh_data->face_select_overlay = GPU_shader_create_from_arrays({
@@ -140,7 +160,7 @@ static void PAINT_VERTEX_engine_init(void *vedata)
datatoc_paint_face_selection_vert_glsl,
NULL},
.frag = (const char *[]){datatoc_gpu_shader_uniform_color_frag_glsl, NULL},
- .defs = (const char *[]){sh_cfg_data->def, NULL},
+ .defs = (const char *[]){sh_cfg_data->def, "#define DRW_STATE_BLEND_MUL\n", NULL},
});
sh_data->vert_select_overlay = GPU_shader_create_from_arrays({
.vert = (const char *[]){sh_cfg_data->lib,
@@ -195,13 +215,17 @@ static void PAINT_VERTEX_cache_init(void *vedata)
const RegionView3D *rv3d = draw_ctx->rv3d;
PAINT_VERTEX_Shaders *sh_data = &e_data.sh_data[draw_ctx->sh_cfg];
+ const bool use_alpha_blending = draw_ctx->v3d->shading.type == OB_WIRE;
+ DRWState draw_state = DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL |
+ (use_alpha_blending ? DRW_STATE_BLEND_ALPHA : DRW_STATE_BLEND_MUL);
/* Vertex color pass */
{
- DRWPass *pass = DRW_pass_create(
- "Vert Color Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_MUL);
- DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->by_mode[VERTEX_MODE].color_face, pass);
- DRW_shgroup_uniform_float_copy(
- shgrp, "white_factor", 1.0f - v3d->overlay.vertex_paint_mode_opacity);
+ DRWPass *pass = DRW_pass_create("Vert Color Pass", draw_state);
+ GPUShader *shader = use_alpha_blending ?
+ sh_data->by_mode[VERTEX_MODE].color_face_alpha_blending :
+ sh_data->by_mode[VERTEX_MODE].color_face_mul_blending;
+ DRWShadingGroup *shgrp = DRW_shgroup_create(shader, pass);
+ DRW_shgroup_uniform_float(shgrp, "opacity", &v3d->overlay.vertex_paint_mode_opacity, 1);
if (rv3d->rflag & RV3D_CLIPPING) {
DRW_shgroup_state_enable(shgrp, DRW_STATE_CLIP_PLANES);
}
@@ -211,9 +235,11 @@ static void PAINT_VERTEX_cache_init(void *vedata)
/* Weight color pass */
{
- DRWPass *pass = DRW_pass_create(
- "Weight Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_EQUAL | DRW_STATE_BLEND_MUL);
- DRWShadingGroup *shgrp = DRW_shgroup_create(sh_data->by_mode[WEIGHT_MODE].color_face, pass);
+ DRWPass *pass = DRW_pass_create("Weight Pass", draw_state);
+ GPUShader *shader = use_alpha_blending ?
+ sh_data->by_mode[WEIGHT_MODE].color_face_alpha_blending :
+ sh_data->by_mode[WEIGHT_MODE].color_face_mul_blending;
+ DRWShadingGroup *shgrp = DRW_shgroup_create(shader, pass);
DRW_shgroup_uniform_bool_copy(
shgrp, "drawContours", (v3d->overlay.wpaint_flag & V3D_OVERLAY_WPAINT_CONTOURS) != 0);
DRW_shgroup_uniform_float(shgrp, "opacity", &v3d->overlay.weight_paint_mode_opacity, 1);
diff --git a/source/blender/draw/modes/shaders/common_globals_lib.glsl b/source/blender/draw/modes/shaders/common_globals_lib.glsl
index f75ef06b6d9..e559224eb9e 100644
--- a/source/blender/draw/modes/shaders/common_globals_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_globals_lib.glsl
@@ -75,11 +75,6 @@ layout(std140) uniform globalsBlock
float sizeEdgeFix;
float sizeFaceDot;
- float gridDistance;
- float gridResolution;
- float gridSubdivisions;
- float gridScale;
-
float pad_globalsBlock;
};
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_frag.glsl
index 8581453e810..8d96c0e418f 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_frag.glsl
@@ -1,12 +1,6 @@
out vec4 fragColor;
-#ifdef FACE_COLOR
-flat in vec4 weightColor;
-#endif
-
-#ifdef VERTEX_COLOR
in vec4 weightColor;
-#endif
void main()
{
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl
index 7065ce3df7c..b89a3f407f9 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_mesh_analysis_vert.glsl
@@ -1,14 +1,25 @@
in vec3 pos;
-in vec4 weight_color;
+in float weight;
-#ifdef FACE_COLOR
-flat out vec4 weightColor;
-#endif
+uniform sampler1D weightTex;
-#ifdef VERTEX_COLOR
out vec4 weightColor;
-#endif
+
+vec3 weight_to_rgb(float t)
+{
+ if (t < 0.0) {
+ /* Minimum color, grey */
+ return vec3(0.25, 0.25, 0.25);
+ }
+ else if (t > 1.0) {
+ /* Error color */
+ return vec3(1.0, 0.0, 1.0);
+ }
+ else {
+ return texture(weightTex, t).rgb;
+ }
+}
void main()
{
@@ -16,7 +27,7 @@ void main()
vec3 world_pos = point_object_to_world(pos);
gl_Position = point_world_to_ndc(world_pos);
- weightColor = vec4(weight_color.rgb, 1.0);
+ weightColor = vec4(weight_to_rgb(weight), 1.0);
#ifdef USE_WORLD_CLIP_PLANES
world_clip_planes_calc_clip_distance(world_pos);
diff --git a/source/blender/draw/modes/shaders/object_grid_frag.glsl b/source/blender/draw/modes/shaders/object_grid_frag.glsl
index a20f12efd93..751d839eb79 100644
--- a/source/blender/draw/modes/shaders/object_grid_frag.glsl
+++ b/source/blender/draw/modes/shaders/object_grid_frag.glsl
@@ -9,21 +9,19 @@ in vec3 local_pos;
out vec4 FragColor;
uniform vec3 planeAxes;
-uniform vec4 gridSettings;
+uniform vec3 screenVecs[2];
+uniform float gridDistance;
uniform float meshSize;
uniform float lineKernel = 0.0;
-uniform float gridOneOverLogSubdiv;
uniform sampler2D depthBuffer;
-#define gridDistance gridSettings.x
-#define gridResolution gridSettings.y
-#define gridScale gridSettings.z
-#define gridSubdiv gridSettings.w
-
#define cameraPos (ViewMatrixInverse[3].xyz)
uniform int gridFlag;
+#define STEPS_LEN 8
+uniform float gridSteps[STEPS_LEN] = float[](0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0, 10000.0);
+
#define AXIS_X (1 << 0)
#define AXIS_Y (1 << 1)
#define AXIS_Z (1 << 2)
@@ -73,10 +71,14 @@ vec3 get_axes(vec3 co, vec3 fwidthCos, float line_size)
axes_domain - (line_size + lineKernel));
}
+#define linearstep(p0, p1, v) (clamp(((v) - (p0)) / abs((p1) - (p0)), 0.0, 1.0))
+
void main()
{
vec3 wPos = local_pos * meshSize;
- vec3 fwidthPos = fwidth(wPos);
+ vec3 dFdxPos = dFdx(wPos);
+ vec3 dFdyPos = dFdy(wPos);
+ vec3 fwidthPos = abs(dFdxPos) + abs(dFdyPos);
wPos += cameraPos * planeAxes;
float dist, fade;
@@ -116,15 +118,54 @@ void main()
}
if ((gridFlag & GRID) != 0) {
- float grid_res = log(dist * gridResolution) * gridOneOverLogSubdiv;
+ /* Using `max(dot(dFdxPos, screenVecs[0]), dot(dFdyPos, screenVecs[1]))`
+ * would be more accurate, but not really necessary. */
+ float grid_res = dot(dFdxPos, screenVecs[0]);
- float blend = fract(-max(grid_res, 0.0));
- float lvl = floor(grid_res);
+ /* The gride begins to appear when it comprises 4 pixels */
+ grid_res *= 4;
/* from biggest to smallest */
- float scaleA = gridScale * pow(gridSubdiv, max(lvl - 1.0, 0.0));
- float scaleB = gridScale * pow(gridSubdiv, max(lvl + 0.0, 0.0));
- float scaleC = gridScale * pow(gridSubdiv, max(lvl + 1.0, 1.0));
+ vec4 scale;
+#if 0
+ int step_id = 0;
+ scale[0] = 0.0;
+ scale[1] = gridSteps[0];
+ while (scale[1] < grid_res && step_id != STEPS_LEN - 1) {
+ scale[0] = scale[1];
+ scale[1] = gridSteps[++step_id];
+ }
+ scale[2] = gridSteps[min(step_id + 1, STEPS_LEN - 1)];
+ scale[3] = gridSteps[min(step_id + 2, STEPS_LEN - 1)];
+#else
+ /* For more efficiency, unroll the loop above. */
+ if (gridSteps[0] > grid_res) {
+ scale = vec4(0.0, gridSteps[0], gridSteps[1], gridSteps[2]);
+ }
+ else if (gridSteps[1] > grid_res) {
+ scale = vec4(gridSteps[0], gridSteps[1], gridSteps[2], gridSteps[3]);
+ }
+ else if (gridSteps[2] > grid_res) {
+ scale = vec4(gridSteps[1], gridSteps[2], gridSteps[3], gridSteps[4]);
+ }
+ else if (gridSteps[3] > grid_res) {
+ scale = vec4(gridSteps[2], gridSteps[3], gridSteps[4], gridSteps[5]);
+ }
+ else if (gridSteps[4] > grid_res) {
+ scale = vec4(gridSteps[3], gridSteps[4], gridSteps[5], gridSteps[6]);
+ }
+ else if (gridSteps[5] > grid_res) {
+ scale = vec4(gridSteps[4], gridSteps[5], gridSteps[6], gridSteps[7]);
+ }
+ else if (gridSteps[6] > grid_res) {
+ scale = vec4(gridSteps[5], gridSteps[6], gridSteps[7], gridSteps[7]);
+ }
+ else {
+ scale = vec4(gridSteps[6], gridSteps[7], gridSteps[7], gridSteps[7]);
+ }
+#endif
+ float blend = 1.0 - linearstep(scale[0], scale[1], grid_res);
+ blend = blend * blend * blend;
vec2 grid_pos, grid_fwidth;
if ((gridFlag & PLANE_XZ) != 0) {
@@ -140,9 +181,9 @@ void main()
grid_fwidth = fwidthPos.xy;
}
- float gridA = get_grid(grid_pos, grid_fwidth, scaleA);
- float gridB = get_grid(grid_pos, grid_fwidth, scaleB);
- float gridC = get_grid(grid_pos, grid_fwidth, scaleC);
+ float gridA = get_grid(grid_pos, grid_fwidth, scale[1]);
+ float gridB = get_grid(grid_pos, grid_fwidth, scale[2]);
+ float gridC = get_grid(grid_pos, grid_fwidth, scale[3]);
FragColor = colorGrid;
FragColor.a *= gridA * blend;
diff --git a/source/blender/draw/modes/shaders/object_grid_vert.glsl b/source/blender/draw/modes/shaders/object_grid_vert.glsl
index d247967b03a..496bb011c74 100644
--- a/source/blender/draw/modes/shaders/object_grid_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_grid_vert.glsl
@@ -3,14 +3,8 @@
* Clément Foucault */
uniform vec3 planeAxes;
-uniform vec4 gridSettings;
uniform float meshSize;
-#define gridDistance gridSettings.x
-#define gridResolution gridSettings.y
-#define gridScale gridSettings.z
-#define gridSubdiv gridSettings.w
-
uniform int gridFlag;
#define cameraPos (ViewMatrixInverse[3].xyz)
diff --git a/source/blender/draw/modes/shaders/paint_vertex_frag.glsl b/source/blender/draw/modes/shaders/paint_vertex_frag.glsl
index 426dbada812..f03e3410ec3 100644
--- a/source/blender/draw/modes/shaders/paint_vertex_frag.glsl
+++ b/source/blender/draw/modes/shaders/paint_vertex_frag.glsl
@@ -2,7 +2,7 @@
in vec3 finalColor;
out vec4 fragColor;
-uniform float white_factor = 1.0;
+uniform float opacity = 1.0;
vec3 linear_to_srgb_attr(vec3 c)
{
@@ -14,6 +14,11 @@ vec3 linear_to_srgb_attr(vec3 c)
void main()
{
- fragColor.rgb = mix(linear_to_srgb_attr(finalColor), vec3(1.0), white_factor);
+ vec3 color = linear_to_srgb_attr(finalColor);
+#ifdef DRW_STATE_BLEND_ALPHA
+ fragColor = vec4(color, opacity);
+#else
+ fragColor.rgb = mix(vec3(1.0), color, opacity);
fragColor.a = 1.0;
+#endif
}
diff --git a/source/blender/draw/modes/shaders/paint_weight_frag.glsl b/source/blender/draw/modes/shaders/paint_weight_frag.glsl
index 8b0e03ac31c..76b7719be64 100644
--- a/source/blender/draw/modes/shaders/paint_weight_frag.glsl
+++ b/source/blender/draw/modes/shaders/paint_weight_frag.glsl
@@ -95,6 +95,11 @@ void main()
color = mix(weight_color, colorVertexUnreferenced, alert * alert);
}
+#ifdef DRW_STATE_BLEND_ALPHA
+ /* alpha blending mix */
+ fragColor = vec4(color.rgb, opacity);
+#else
/* mix with 1.0 -> is like opacity when using multiply blend mode */
fragColor = vec4(mix(vec3(1.0), color.rgb, opacity), 1.0);
+#endif
}
diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c
index 3d7178a4114..d80b96f0d74 100644
--- a/source/blender/editors/animation/anim_channels_defines.c
+++ b/source/blender/editors/animation/anim_channels_defines.c
@@ -206,16 +206,16 @@ static void acf_generic_channel_color(bAnimContext *ac, bAnimListElem *ale, floa
* - only use group colors if allowed to, and if actually feasible
*/
if (showGroupColors && (grp) && (grp->customCol)) {
- unsigned char cp[3];
+ uchar cp[3];
if (indent == 2) {
- copy_v3_v3_char((char *)cp, grp->cs.solid);
+ copy_v3_v3_uchar(cp, grp->cs.solid);
}
else if (indent == 1) {
- copy_v3_v3_char((char *)cp, grp->cs.select);
+ copy_v3_v3_uchar(cp, grp->cs.select);
}
else {
- copy_v3_v3_char((char *)cp, grp->cs.active);
+ copy_v3_v3_uchar(cp, grp->cs.active);
}
/* copy the colors over, transforming from bytes to floats */
@@ -850,10 +850,10 @@ static void acf_group_color(bAnimContext *ac, bAnimListElem *ale, float r_color[
/* highlight only for active */
if (ale->flag & AGRP_ACTIVE) {
- copy_v3_v3_char((char *)cp, agrp->cs.select);
+ copy_v3_v3_uchar(cp, agrp->cs.select);
}
else {
- copy_v3_v3_char((char *)cp, agrp->cs.solid);
+ copy_v3_v3_uchar(cp, agrp->cs.solid);
}
/* copy the colors over, transforming from bytes to floats */
@@ -4847,7 +4847,7 @@ void ANIM_channel_draw_widgets(const bContext *C,
/* step 4) draw text - check if renaming widget is in use... */
if (is_being_renamed) {
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
/* draw renaming widget if we can get RNA pointer for it
diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c
index 625a52fc800..a78a63f1347 100644
--- a/source/blender/editors/animation/anim_filter.c
+++ b/source/blender/editors/animation/anim_filter.c
@@ -1829,13 +1829,13 @@ static size_t animdata_filter_gpencil(bAnimContext *ac,
}
}
- /* check selection and object type filters */
- if ((ads->filterflag & ADS_FILTER_ONLYSEL) &&
- !((base->flag & BASE_SELECTED) /*|| (base == scene->basact)*/)) {
- /* only selected should be shown */
- continue;
+ /* check selection and object type filters only for Object mode */
+ if (ob->mode == OB_MODE_OBJECT) {
+ if ((ads->filterflag & ADS_FILTER_ONLYSEL) && !((base->flag & BASE_SELECTED))) {
+ /* only selected should be shown */
+ continue;
+ }
}
-
/* check if object belongs to the filtering group if option to filter
* objects by the grouped status is on
* - used to ease the process of doing multiple-character choreographies
diff --git a/source/blender/editors/animation/anim_ipo_utils.c b/source/blender/editors/animation/anim_ipo_utils.c
index fad9a1a8e49..5b729c856c0 100644
--- a/source/blender/editors/animation/anim_ipo_utils.c
+++ b/source/blender/editors/animation/anim_ipo_utils.c
@@ -122,7 +122,7 @@ int getname_anim_fcurve(char *name, ID *id, FCurve *fcu)
MEM_freeN(constName);
}
}
- else if (ptr.data != ptr.id.data) {
+ else if (ptr.data != ptr.owner_id) {
PropertyRNA *nameprop = RNA_struct_name_property(ptr.type);
if (nameprop) {
/* this gets a string which will need to be freed */
diff --git a/source/blender/editors/animation/anim_motion_paths.c b/source/blender/editors/animation/anim_motion_paths.c
index 7a5b57b1ce6..bd4886817cd 100644
--- a/source/blender/editors/animation/anim_motion_paths.c
+++ b/source/blender/editors/animation/anim_motion_paths.c
@@ -60,9 +60,8 @@ typedef struct MPathTarget {
Object *ob; /* source object */
bPoseChannel *pchan; /* source posechannel (if applicable) */
- /* "Evaluated" Copies (these come from the background COW copie
- * that provide all the coordinates we want to save off)
- */
+ /* "Evaluated" Copies (these come from the background COW copy
+ * that provide all the coordinates we want to save off). */
Object *ob_eval; /* evaluated object */
} MPathTarget;
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c
index 7ca0f95d6c4..7b9e6a10f44 100644
--- a/source/blender/editors/animation/drivers.c
+++ b/source/blender/editors/animation/drivers.c
@@ -23,6 +23,7 @@
#include <stdio.h>
#include <string.h>
+#include <ctype.h>
#include "MEM_guardedalloc.h"
@@ -95,56 +96,65 @@ FCurve *verify_driver_fcurve(ID *id, const char rna_path[], const int array_inde
if ((fcu == NULL) && (add)) {
/* use default settings to make a F-Curve */
- fcu = MEM_callocN(sizeof(FCurve), "FCurve");
+ fcu = alloc_driver_fcurve(rna_path, array_index, add);
- fcu->flag = (FCURVE_VISIBLE | FCURVE_SELECTED);
- fcu->auto_smoothing = FCURVE_SMOOTH_CONT_ACCEL;
+ /* just add F-Curve to end of driver list */
+ BLI_addtail(&adt->drivers, fcu);
+ }
- /* store path - make copy, and store that */
- fcu->rna_path = BLI_strdup(rna_path);
- fcu->array_index = array_index;
-
- /* If add is negative, don't init this data yet,
- * since it will be filled in by the pasted driver. */
- if (add > 0) {
- BezTriple *bezt;
- size_t i;
-
- /* add some new driver data */
- fcu->driver = MEM_callocN(sizeof(ChannelDriver), "ChannelDriver");
-
- /* F-Modifier or Keyframes? */
- // FIXME: replace these magic numbers with defines
- if (add == 2) {
- /* Python API Backwards compatibility hack:
- * Create FModifier so that old scripts won't break
- * for now before 2.7 series -- (September 4, 2013)
- */
- add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_GENERATOR, fcu);
- }
- else {
- /* add 2 keyframes so that user has something to work with
- * - These are configured to 0,0 and 1,1 to give a 1-1 mapping
- * which can be easily tweaked from there.
- */
- insert_vert_fcurve(fcu, 0.0f, 0.0f, BEZT_KEYTYPE_KEYFRAME, INSERTKEY_FAST);
- insert_vert_fcurve(fcu, 1.0f, 1.0f, BEZT_KEYTYPE_KEYFRAME, INSERTKEY_FAST);
+ /* return the F-Curve */
+ return fcu;
+}
- /* configure this curve to extrapolate */
- for (i = 0, bezt = fcu->bezt; (i < fcu->totvert) && bezt; i++, bezt++) {
- bezt->h1 = bezt->h2 = HD_VECT;
- }
+struct FCurve *alloc_driver_fcurve(const char rna_path[], const int array_index, short add)
+{
+ FCurve *fcu = MEM_callocN(sizeof(FCurve), "FCurve");
- fcu->extend = FCURVE_EXTRAPOLATE_LINEAR;
- calchandles_fcurve(fcu);
- }
+ fcu->flag = (FCURVE_VISIBLE | FCURVE_SELECTED);
+ fcu->auto_smoothing = FCURVE_SMOOTH_CONT_ACCEL;
+
+ /* store path - make copy, and store that */
+ if (rna_path) {
+ fcu->rna_path = BLI_strdup(rna_path);
+ }
+ fcu->array_index = array_index;
+
+ /* If add is negative, don't init this data yet,
+ * since it will be filled in by the pasted driver. */
+ if (add > 0) {
+ BezTriple *bezt;
+ size_t i;
+
+ /* add some new driver data */
+ fcu->driver = MEM_callocN(sizeof(ChannelDriver), "ChannelDriver");
+
+ /* F-Modifier or Keyframes? */
+ // FIXME: replace these magic numbers with defines
+ if (add == 2) {
+ /* Python API Backwards compatibility hack:
+ * Create FModifier so that old scripts won't break
+ * for now before 2.7 series -- (September 4, 2013)
+ */
+ add_fmodifier(&fcu->modifiers, FMODIFIER_TYPE_GENERATOR, fcu);
}
+ else {
+ /* add 2 keyframes so that user has something to work with
+ * - These are configured to 0,0 and 1,1 to give a 1-1 mapping
+ * which can be easily tweaked from there.
+ */
+ insert_vert_fcurve(fcu, 0.0f, 0.0f, BEZT_KEYTYPE_KEYFRAME, INSERTKEY_FAST);
+ insert_vert_fcurve(fcu, 1.0f, 1.0f, BEZT_KEYTYPE_KEYFRAME, INSERTKEY_FAST);
- /* just add F-Curve to end of driver list */
- BLI_addtail(&adt->drivers, fcu);
+ /* configure this curve to extrapolate */
+ for (i = 0, bezt = fcu->bezt; (i < fcu->totvert) && bezt; i++, bezt++) {
+ bezt->h1 = bezt->h2 = HD_VECT;
+ }
+
+ fcu->extend = FCURVE_EXTRAPOLATE_LINEAR;
+ calchandles_fcurve(fcu);
+ }
}
- /* return the F-Curve */
return fcu;
}
@@ -208,7 +218,7 @@ static int add_driver_with_target(ReportList *UNUSED(reports),
/* Create a driver variable for the target
* - For transform properties, we want to automatically use "transform channel" instead
- * (The only issue is with quat rotations vs euler channels...)
+ * (The only issue is with quaternion rotations vs euler channels...)
* - To avoid problems with transform properties depending on the final transform that they
* control (thus creating pseudo-cycles - see T48734), we don't use transform channels
* when both the source and destinations are in same places.
@@ -834,6 +844,48 @@ bool ANIM_driver_vars_paste(ReportList *reports, FCurve *fcu, bool replace)
return true;
}
+/* -------------------------------------------------- */
+
+/* Create a driver & variable that reads the specified property,
+ * and store it in the buffers for Paste Driver and Paste Variables. */
+void ANIM_copy_as_driver(struct ID *target_id, const char *target_path, const char *var_name)
+{
+ /* Clear copy/paste buffer first (for consistency with other copy/paste buffers). */
+ ANIM_drivers_copybuf_free();
+ ANIM_driver_vars_copybuf_free();
+
+ /* Create a dummy driver F-Curve. */
+ FCurve *fcu = alloc_driver_fcurve(NULL, 0, 1);
+ ChannelDriver *driver = fcu->driver;
+
+ /* Create a variable. */
+ DriverVar *var = driver_add_new_variable(driver);
+ DriverTarget *target = &var->targets[0];
+
+ target->idtype = GS(target_id->name);
+ target->id = target_id;
+ target->rna_path = MEM_dupallocN(target_path);
+
+ /* Set the variable name. */
+ if (var_name) {
+ BLI_strncpy(var->name, var_name, sizeof(var->name));
+
+ /* Sanitize the name. */
+ for (int i = 0; var->name[i]; i++) {
+ if (!(i > 0 ? isalnum(var->name[i]) : isalpha(var->name[i]))) {
+ var->name[i] = '_';
+ }
+ }
+ }
+
+ BLI_strncpy(driver->expression, var->name, sizeof(driver->expression));
+
+ /* Store the driver into the copy/paste buffers. */
+ channeldriver_copypaste_buf = fcu;
+
+ driver_variables_copy(&driver_vars_copybuf, &driver->variables);
+}
+
/* ************************************************** */
/* UI-Button Interface */
@@ -882,7 +934,7 @@ static const EnumPropertyItem *driver_mapping_type_itemsf(bContext *C,
EnumPropertyItem *input = prop_driver_create_mapping_types;
EnumPropertyItem *item = NULL;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index;
@@ -894,7 +946,7 @@ static const EnumPropertyItem *driver_mapping_type_itemsf(bContext *C,
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.owner_id && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
const bool is_array = RNA_property_array_check(prop);
while (input->identifier) {
@@ -919,7 +971,7 @@ static const EnumPropertyItem *driver_mapping_type_itemsf(bContext *C,
static bool add_driver_button_poll(bContext *C)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index;
bool driven, special;
@@ -927,7 +979,7 @@ static bool add_driver_button_poll(bContext *C)
/* this operator can only run if there's a property button active, and it can be animated */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (!(ptr.id.data && ptr.data && prop)) {
+ if (!(ptr.owner_id && ptr.data && prop)) {
return false;
}
if (!RNA_property_animateable(&ptr, prop)) {
@@ -943,7 +995,7 @@ static bool add_driver_button_poll(bContext *C)
* (i.e. "manual/add later"). */
static int add_driver_button_none(bContext *C, wmOperator *op, short mapping_type)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index;
int success = 0;
@@ -954,12 +1006,13 @@ static int add_driver_button_none(bContext *C, wmOperator *op, short mapping_typ
index = -1;
}
- if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.owner_id && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
char *path = BKE_animdata_driver_path_hack(C, &ptr, prop, NULL);
short flags = CREATEDRIVER_WITH_DEFAULT_DVAR;
if (path) {
- success += ANIM_add_driver(op->reports, ptr.id.data, path, index, flags, DRIVER_TYPE_PYTHON);
+ success += ANIM_add_driver(
+ op->reports, ptr.owner_id, path, index, flags, DRIVER_TYPE_PYTHON);
MEM_freeN(path);
}
}
@@ -1043,28 +1096,29 @@ static void UNUSED_FUNCTION(ANIM_OT_driver_button_add_menu)(wmOperatorType *ot)
static int add_driver_button_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index;
/* try to find driver using property retrieved from UI */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.owner_id && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
/* 1) Create a new "empty" driver for this property */
char *path = BKE_animdata_driver_path_hack(C, &ptr, prop, NULL);
short flags = CREATEDRIVER_WITH_DEFAULT_DVAR;
short success = 0;
if (path) {
- success += ANIM_add_driver(op->reports, ptr.id.data, path, index, flags, DRIVER_TYPE_PYTHON);
+ success += ANIM_add_driver(
+ op->reports, ptr.owner_id, path, index, flags, DRIVER_TYPE_PYTHON);
MEM_freeN(path);
}
if (success) {
/* send updates */
UI_context_update_anim_flag(C);
- DEG_id_tag_update(ptr.id.data, ID_RECALC_COPY_ON_WRITE);
+ DEG_id_tag_update(ptr.owner_id, ID_RECALC_COPY_ON_WRITE);
DEG_relations_tag_update(CTX_data_main(C));
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL);
}
@@ -1097,7 +1151,7 @@ void ANIM_OT_driver_button_add(wmOperatorType *ot)
static int remove_driver_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
short success = 0;
int index;
@@ -1110,11 +1164,11 @@ static int remove_driver_button_exec(bContext *C, wmOperator *op)
index = -1;
}
- if (ptr.id.data && ptr.data && prop) {
+ if (ptr.owner_id && ptr.data && prop) {
char *path = BKE_animdata_driver_path_hack(C, &ptr, prop, NULL);
if (path) {
- success = ANIM_remove_driver(op->reports, ptr.id.data, path, index, 0);
+ success = ANIM_remove_driver(op->reports, ptr.owner_id, path, index, 0);
MEM_freeN(path);
}
@@ -1153,14 +1207,14 @@ void ANIM_OT_driver_button_remove(wmOperatorType *ot)
static int edit_driver_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index;
/* try to find driver using property retrieved from UI */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop) {
+ if (ptr.owner_id && ptr.data && prop) {
UI_popover_panel_invoke(C, "GRAPH_PT_drivers_popover", true, op->reports);
}
@@ -1187,7 +1241,7 @@ void ANIM_OT_driver_button_edit(wmOperatorType *ot)
static int copy_driver_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
short success = 0;
int index;
@@ -1195,12 +1249,12 @@ static int copy_driver_button_exec(bContext *C, wmOperator *op)
/* try to create driver using property retrieved from UI */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.owner_id && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
char *path = BKE_animdata_driver_path_hack(C, &ptr, prop, NULL);
if (path) {
/* only copy the driver for the button that this was involved for */
- success = ANIM_copy_driver(op->reports, ptr.id.data, path, index, 0);
+ success = ANIM_copy_driver(op->reports, ptr.owner_id, path, index, 0);
UI_context_update_anim_flag(C);
@@ -1231,7 +1285,7 @@ void ANIM_OT_copy_driver_button(wmOperatorType *ot)
static int paste_driver_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
short success = 0;
int index;
@@ -1239,18 +1293,18 @@ static int paste_driver_button_exec(bContext *C, wmOperator *op)
/* try to create driver using property retrieved from UI */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.owner_id && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
char *path = BKE_animdata_driver_path_hack(C, &ptr, prop, NULL);
if (path) {
/* only copy the driver for the button that this was involved for */
- success = ANIM_paste_driver(op->reports, ptr.id.data, path, index, 0);
+ success = ANIM_paste_driver(op->reports, ptr.owner_id, path, index, 0);
UI_context_update_anim_flag(C);
DEG_relations_tag_update(CTX_data_main(C));
- DEG_id_tag_update(ptr.id.data, ID_RECALC_ANIMATION);
+ DEG_id_tag_update(ptr.owner_id, ID_RECALC_ANIMATION);
WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME_PROP, NULL); // XXX
diff --git a/source/blender/editors/animation/keyframes_draw.c b/source/blender/editors/animation/keyframes_draw.c
index 889d27480df..ca7e0eae136 100644
--- a/source/blender/editors/animation/keyframes_draw.c
+++ b/source/blender/editors/animation/keyframes_draw.c
@@ -814,8 +814,10 @@ static void draw_keylist(View2D *v2d,
uint outline_color_id = GPU_vertformat_attr_add(
format, "outlineColor", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
uint flags_id = GPU_vertformat_attr_add(format, "flags", GPU_COMP_U32, 1, GPU_FETCH_INT);
- immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+
GPU_program_point_size(true);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ immUniform1f("outline_scale", 1.0f);
immUniform2f(
"ViewportSize", BLI_rcti_size_x(&v2d->mask) + 1, BLI_rcti_size_y(&v2d->mask) + 1);
immBegin(GPU_PRIM_POINTS, key_len);
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index de6e4c2fd0d..0f8b8742659 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -222,7 +222,7 @@ FCurve *verify_fcurve(Main *bmain,
/* sync bone group colors if applicable */
if (ptr && (ptr->type == &RNA_PoseBone)) {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
bPose *pose = ob->pose;
bActionGroup *grp;
@@ -286,7 +286,7 @@ void update_autoflags_fcurve(FCurve *fcu, bContext *C, ReportList *reports, Poin
PropertyRNA *prop;
int old_flag = fcu->flag;
- if ((ptr->id.data == NULL) && (ptr->data == NULL)) {
+ if ((ptr->owner_id == NULL) && (ptr->data == NULL)) {
BKE_report(reports, RPT_ERROR, "No RNA pointer available to retrieve values for this fcurve");
return;
}
@@ -294,7 +294,7 @@ void update_autoflags_fcurve(FCurve *fcu, bContext *C, ReportList *reports, Poin
/* try to get property we should be affecting */
if (RNA_path_resolve_property(ptr, fcu->rna_path, &tmp_ptr, &prop) == false) {
/* property not found... */
- const char *idname = (ptr->id.data) ? ((ID *)ptr->id.data)->name : TIP_("<No ID pointer>");
+ const char *idname = (ptr->owner_id) ? ptr->owner_id->name : TIP_("<No ID pointer>");
BKE_reportf(reports,
RPT_ERROR,
@@ -1203,7 +1203,7 @@ bool insert_keyframe_direct(ReportList *reports,
}
/* if no property given yet, try to validate from F-Curve info */
- if ((ptr.id.data == NULL) && (ptr.data == NULL)) {
+ if ((ptr.owner_id == NULL) && (ptr.data == NULL)) {
BKE_report(
reports, RPT_ERROR, "No RNA pointer available to retrieve values for keyframing from");
return false;
@@ -1214,7 +1214,7 @@ bool insert_keyframe_direct(ReportList *reports,
/* try to get property we should be affecting */
if (RNA_path_resolve_property(&ptr, fcu->rna_path, &tmp_ptr, &prop) == false) {
/* property not found... */
- const char *idname = (ptr.id.data) ? ((ID *)ptr.id.data)->name : TIP_("<No ID pointer>");
+ const char *idname = (ptr.owner_id) ? ptr.owner_id->name : TIP_("<No ID pointer>");
BKE_reportf(reports,
RPT_ERROR,
@@ -1484,10 +1484,10 @@ short insert_keyframe(Main *bmain,
flag);
}
}
- }
- if (values != value_buffer) {
- MEM_freeN(values);
+ if (values != value_buffer) {
+ MEM_freeN(values);
+ }
}
BKE_animsys_free_nla_keyframing_context_cache(&tmp_nla_cache);
@@ -1544,9 +1544,9 @@ static bool delete_keyframe_fcurve(AnimData *adt, FCurve *fcu, float cfra)
static void deg_tag_after_keyframe_delete(Main *bmain, ID *id, AnimData *adt)
{
if (adt->action == NULL) {
- /* In the case last f-curve wes removed need to inform dependency graph
+ /* In the case last f-curve was removed need to inform dependency graph
* about relations update, since it needs to get rid of animation operation
- * for this datablock. */
+ * for this data-block. */
DEG_id_tag_update_ex(bmain, id, ID_RECALC_ANIMATION_NO_FLUSH);
DEG_relations_tag_update(bmain);
}
@@ -2350,7 +2350,7 @@ static int insert_key_button_exec(bContext *C, wmOperator *op)
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
ToolSettings *ts = scene->toolsettings;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
char *path;
uiBut *but;
@@ -2369,7 +2369,7 @@ static int insert_key_button_exec(bContext *C, wmOperator *op)
return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
}
- if ((ptr.id.data && ptr.data && prop) && RNA_property_animateable(&ptr, prop)) {
+ if ((ptr.owner_id && ptr.data && prop) && RNA_property_animateable(&ptr, prop)) {
if (ptr.type == &RNA_NlaStrip) {
/* Handle special properties for NLA Strips, whose F-Curves are stored on the
* strips themselves. These are stored separately or else the properties will
@@ -2435,7 +2435,7 @@ static int insert_key_button_exec(bContext *C, wmOperator *op)
success = insert_keyframe(bmain,
op->reports,
- ptr.id.data,
+ ptr.owner_id,
NULL,
group,
path,
@@ -2473,7 +2473,7 @@ static int insert_key_button_exec(bContext *C, wmOperator *op)
}
if (success) {
- ID *id = ptr.id.data;
+ ID *id = ptr.owner_id;
AnimData *adt = BKE_animdata_from_id(id);
if (adt->action != NULL) {
DEG_id_tag_update(&adt->action->id, ID_RECALC_ANIMATION_NO_FLUSH);
@@ -2513,7 +2513,7 @@ void ANIM_OT_keyframe_insert_button(wmOperatorType *ot)
static int delete_key_button_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
Main *bmain = CTX_data_main(C);
char *path;
@@ -2528,13 +2528,13 @@ static int delete_key_button_exec(bContext *C, wmOperator *op)
return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
}
- if (ptr.id.data && ptr.data && prop) {
+ if (ptr.owner_id && ptr.data && prop) {
if (BKE_nlastrip_has_curves_for_property(&ptr, prop)) {
/* Handle special properties for NLA Strips, whose F-Curves are stored on the
* strips themselves. These are stored separately or else the properties will
* not have any effect.
*/
- ID *id = ptr.id.data;
+ ID *id = ptr.owner_id;
NlaStrip *strip = (NlaStrip *)ptr.data;
FCurve *fcu = list_find_fcurve(&strip->fcurves, RNA_property_identifier(prop), 0);
@@ -2577,7 +2577,7 @@ static int delete_key_button_exec(bContext *C, wmOperator *op)
}
success = delete_keyframe(
- bmain, op->reports, ptr.id.data, NULL, NULL, path, index, cfra, 0);
+ bmain, op->reports, ptr.owner_id, NULL, NULL, path, index, cfra, 0);
MEM_freeN(path);
}
else if (G.debug & G_DEBUG) {
@@ -2622,7 +2622,7 @@ void ANIM_OT_keyframe_delete_button(wmOperatorType *ot)
static int clear_key_button_exec(bContext *C, wmOperator *op)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
Main *bmain = CTX_data_main(C);
char *path;
@@ -2636,7 +2636,7 @@ static int clear_key_button_exec(bContext *C, wmOperator *op)
return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
}
- if (ptr.id.data && ptr.data && prop) {
+ if (ptr.owner_id && ptr.data && prop) {
path = RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -2645,7 +2645,7 @@ static int clear_key_button_exec(bContext *C, wmOperator *op)
index = -1;
}
- success += clear_keyframe(bmain, op->reports, ptr.id.data, NULL, NULL, path, index, 0);
+ success += clear_keyframe(bmain, op->reports, ptr.owner_id, NULL, NULL, path, index, 0);
MEM_freeN(path);
}
else if (G.debug & G_DEBUG) {
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index ccd0fc54611..258c0e4f1f6 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -287,7 +287,7 @@ static int add_keyingset_button_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
KeyingSet *ks = NULL;
PropertyRNA *prop = NULL;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
char *path = NULL;
short success = 0;
int index = 0, pflag = 0;
@@ -332,7 +332,7 @@ static int add_keyingset_button_exec(bContext *C, wmOperator *op)
}
/* check if property is able to be added */
- if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
+ if (ptr.owner_id && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
path = RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -348,7 +348,7 @@ static int add_keyingset_button_exec(bContext *C, wmOperator *op)
}
/* add path to this setting */
- BKE_keyingset_add_path(ks, ptr.id.data, NULL, path, index, pflag, KSP_GROUP_KSNAME);
+ BKE_keyingset_add_path(ks, ptr.owner_id, NULL, path, index, pflag, KSP_GROUP_KSNAME);
ks->active_path = BLI_listbase_count(&ks->paths);
success = 1;
@@ -393,7 +393,7 @@ static int remove_keyingset_button_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
KeyingSet *ks = NULL;
PropertyRNA *prop = NULL;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
char *path = NULL;
short success = 0;
int index = 0;
@@ -420,14 +420,14 @@ static int remove_keyingset_button_exec(bContext *C, wmOperator *op)
ks = BLI_findlink(&scene->keyingsets, scene->active_keyingset - 1);
}
- if (ptr.id.data && ptr.data && prop) {
+ if (ptr.owner_id && ptr.data && prop) {
path = RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
KS_Path *ksp;
/* try to find a path matching this description */
- ksp = BKE_keyingset_find_path(ks, ptr.id.data, ks->name, path, index, KSP_GROUP_KSNAME);
+ ksp = BKE_keyingset_find_path(ks, ptr.owner_id, ks->name, path, index, KSP_GROUP_KSNAME);
if (ksp) {
BKE_keyingset_free_path(ks, ksp);
@@ -712,9 +712,9 @@ int ANIM_scene_get_keyingset_index(Scene *scene, KeyingSet *ks)
}
}
- /* still here, so try builtins list too
- * - builtins are from (<= -1)
- * - none/invalid is (= 0)
+ /* Still here, so try built-ins list too:
+ * - Built-ins are from (<= -1).
+ * - None/Invalid is (= 0).
*/
index = BLI_findindex(&builtin_keyingsets, ks);
if (index != -1) {
diff --git a/source/blender/editors/armature/armature_add.c b/source/blender/editors/armature/armature_add.c
index d2fa77f90be..1073034383d 100644
--- a/source/blender/editors/armature/armature_add.c
+++ b/source/blender/editors/armature/armature_add.c
@@ -769,7 +769,7 @@ static int armature_symmetrize_exec(bContext *C, wmOperator *op)
EditBone *ebone = ebone_iter->temp.ebone;
- /* copy flags incase bone is pre-existing data */
+ /* Copy flags in case bone is pre-existing data. */
ebone->flag = (ebone->flag & ~flag_copy) | (ebone_iter->flag & flag_copy);
if (ebone_iter->parent == NULL) {
diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c
index 4e6661b1d15..c4c10549da3 100644
--- a/source/blender/editors/armature/armature_edit.c
+++ b/source/blender/editors/armature/armature_edit.c
@@ -62,22 +62,10 @@
/* ************************** Object Tools Exports ******************************* */
/* NOTE: these functions are exported to the Object module to be called from the tools there */
-void ED_armature_transform_apply(Main *bmain, Object *ob, float mat[4][4], const bool do_props)
-{
- bArmature *arm = ob->data;
-
- /* Put the armature into editmode */
- ED_armature_to_edit(arm);
-
- /* Transform the bones */
- ED_armature_transform_bones(arm, mat, do_props);
-
- /* Turn the list into an armature */
- ED_armature_from_edit(bmain, arm);
- ED_armature_edit_free(arm);
-}
-
-void ED_armature_transform_bones(struct bArmature *arm, float mat[4][4], const bool do_props)
+/**
+ * See #BKE_armature_transform for object-mode transform.
+ */
+void ED_armature_edit_transform(bArmature *arm, const float mat[4][4], const bool do_props)
{
EditBone *ebone;
float scale = mat4_to_scale(mat); /* store the scale of the matrix here to use on envelopes */
@@ -114,21 +102,13 @@ void ED_armature_transform_bones(struct bArmature *arm, float mat[4][4], const b
}
}
-void ED_armature_transform(Main *bmain, bArmature *arm, float mat[4][4], const bool do_props)
+void ED_armature_transform(bArmature *arm, const float mat[4][4], const bool do_props)
{
if (arm->edbo) {
- ED_armature_transform_bones(arm, mat, do_props);
+ ED_armature_edit_transform(arm, mat, do_props);
}
else {
- /* Put the armature into editmode */
- ED_armature_to_edit(arm);
-
- /* Transform the bones */
- ED_armature_transform_bones(arm, mat, do_props);
-
- /* Go back to object mode*/
- ED_armature_from_edit(bmain, arm);
- ED_armature_edit_free(arm);
+ BKE_armature_transform(arm, mat, do_props);
}
}
diff --git a/source/blender/editors/armature/armature_intern.h b/source/blender/editors/armature/armature_intern.h
index 569eb7e2e04..fa562ab0f44 100644
--- a/source/blender/editors/armature/armature_intern.h
+++ b/source/blender/editors/armature/armature_intern.h
@@ -30,7 +30,6 @@ struct wmOperatorType;
struct Base;
struct Object;
struct Scene;
-struct bAction;
struct bContext;
struct bPoseChannel;
diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c
index 8722e575d15..b3588404cf2 100644
--- a/source/blender/editors/armature/armature_relations.c
+++ b/source/blender/editors/armature/armature_relations.c
@@ -64,8 +64,11 @@
#include "armature_intern.h"
-/* *************************************** Join *************************************** */
-/* NOTE: no operator define here as this is exported to the Object-level operator */
+/* -------------------------------------------------------------------- */
+/** \name Edit Armature Join
+ *
+ * \note No operator define here as this is exported to the Object-level operator.
+ * \{ */
static void joined_armature_fix_links_constraints(Main *bmain,
Object *ob,
@@ -434,7 +437,11 @@ int join_armature_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-/* *********************************** Separate *********************************************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Edit Armature Separate
+ * \{ */
/* Helper function for armature separating - link fixing */
static void separated_armature_fix_links(Main *bmain, Object *origArm, Object *newArm)
@@ -712,7 +719,11 @@ void ARMATURE_OT_separate(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/* ********************************* Parenting ************************************************* */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Edit Armature Parenting
+ * \{ */
/* armature parenting options */
#define ARM_PAR_CONNECT 1
@@ -1007,3 +1018,5 @@ void ARMATURE_OT_parent_clear(wmOperatorType *ot)
"ClearType",
"What way to clear parenting");
}
+
+/** \} */
diff --git a/source/blender/editors/armature/armature_select.c b/source/blender/editors/armature/armature_select.c
index 23ddf77e63d..eff621d7b71 100644
--- a/source/blender/editors/armature/armature_select.c
+++ b/source/blender/editors/armature/armature_select.c
@@ -46,6 +46,7 @@
#include "ED_armature.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_select_utils.h"
#include "ED_view3d.h"
@@ -356,6 +357,8 @@ static int armature_select_linked_invoke(bContext *C, wmOperator *op, const wmEv
}
}
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+
ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, base->object);
@@ -1027,6 +1030,8 @@ static int armature_de_select_all_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL);
return OPERATOR_FINISHED;
@@ -1148,6 +1153,8 @@ static int armature_de_select_more_exec(bContext *C, wmOperator *UNUSED(op))
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
}
MEM_freeN(objects);
+
+ ED_outliner_select_sync_from_edit_bone_tag(C);
return OPERATOR_FINISHED;
}
@@ -1178,6 +1185,8 @@ static int armature_de_select_less_exec(bContext *C, wmOperator *UNUSED(op))
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
}
MEM_freeN(objects);
+
+ ED_outliner_select_sync_from_edit_bone_tag(C);
return OPERATOR_FINISHED;
}
@@ -1569,6 +1578,8 @@ static int armature_select_similar_exec(bContext *C, wmOperator *op)
#undef STRUCT_SIZE_AND_OFFSET
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+
return OPERATOR_FINISHED;
}
@@ -1663,6 +1674,8 @@ static int armature_select_hierarchy_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+
ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
@@ -1748,6 +1761,8 @@ static int armature_select_mirror_exec(bContext *C, wmOperator *op)
arm->act_edbone = ebone_mirror_act;
}
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+
ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, ob);
@@ -1876,6 +1891,7 @@ static int armature_shortest_path_pick_invoke(bContext *C, wmOperator *op, const
if (changed) {
arm->act_edbone = ebone_dst;
+ ED_outliner_select_sync_from_edit_bone_tag(C);
ED_armature_edit_sync_selection(arm->edbo);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit);
diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c
index d8777b7e0b7..cd299906b4c 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -381,23 +381,37 @@ void armature_tag_unselect(bArmature *arm)
void ED_armature_ebone_transform_mirror_update(bArmature *arm, EditBone *ebo, bool check_select)
{
+ /* TODO When this function is called by property updates,
+ * cancelling the value change will not restore mirrored bone correctly. */
+
+ /* Currently check_select==true when this function is called from a transform operator,
+ * eg. from 3d viewport. */
+
/* no layer check, correct mirror is more important */
if (!check_select || ebo->flag & (BONE_TIPSEL | BONE_ROOTSEL)) {
EditBone *eboflip = ED_armature_ebone_get_mirrored(arm->edbo, ebo);
if (eboflip) {
- /* we assume X-axis flipping for now */
- if (check_select && ebo->flag & BONE_TIPSEL) {
- EditBone *children;
+ /* We assume X-axis flipping for now. */
+
+ /* Always mirror roll, since it can be changed by moving either head or tail. */
+ eboflip->roll = -ebo->roll;
+
+ if (!check_select || ebo->flag & BONE_TIPSEL) {
+ /* Mirror tail properties. */
eboflip->tail[0] = -ebo->tail[0];
eboflip->tail[1] = ebo->tail[1];
eboflip->tail[2] = ebo->tail[2];
eboflip->rad_tail = ebo->rad_tail;
- eboflip->roll = -ebo->roll;
eboflip->curve_out_x = -ebo->curve_out_x;
+ eboflip->curve_out_y = ebo->curve_out_y;
+ eboflip->scale_out_x = ebo->scale_out_x;
+ eboflip->scale_out_y = ebo->scale_out_y;
+ eboflip->ease2 = ebo->ease2;
eboflip->roll2 = -ebo->roll2;
- /* Also move connected children, in case children's name aren't mirrored properly */
+ /* Also move connected children, in case children's name aren't mirrored properly. */
+ EditBone *children;
for (children = arm->edbo->first; children; children = children->next) {
if (children->parent == eboflip && children->flag & BONE_CONNECTED) {
copy_v3_v3(children->head, eboflip->tail);
@@ -405,32 +419,39 @@ void ED_armature_ebone_transform_mirror_update(bArmature *arm, EditBone *ebo, bo
}
}
}
+
if (!check_select || ebo->flag & BONE_ROOTSEL) {
+ /* Mirror head properties. */
eboflip->head[0] = -ebo->head[0];
eboflip->head[1] = ebo->head[1];
eboflip->head[2] = ebo->head[2];
eboflip->rad_head = ebo->rad_head;
- eboflip->roll = -ebo->roll;
+
eboflip->curve_in_x = -ebo->curve_in_x;
+ eboflip->curve_in_y = ebo->curve_in_y;
+ eboflip->scale_in_x = ebo->scale_in_x;
+ eboflip->scale_in_y = ebo->scale_in_y;
+ eboflip->ease1 = ebo->ease1;
eboflip->roll1 = -ebo->roll1;
- /* Also move connected parent, in case parent's name isn't mirrored properly */
+ /* Also move connected parent, in case parent's name isn't mirrored properly. */
if (eboflip->parent && eboflip->flag & BONE_CONNECTED) {
EditBone *parent = eboflip->parent;
copy_v3_v3(parent->tail, eboflip->head);
parent->rad_tail = ebo->rad_head;
}
}
+
if (!check_select || ebo->flag & BONE_SELECTED) {
+ /* Mirror bone body properties (both head and tail are selected). */
+ /* TODO: These values can also be changed from pose mode,
+ * so only mirroring them in edit mode is not ideal. */
eboflip->dist = ebo->dist;
- eboflip->roll = -ebo->roll;
+ eboflip->weight = ebo->weight;
+
+ eboflip->segments = ebo->segments;
eboflip->xwidth = ebo->xwidth;
eboflip->zwidth = ebo->zwidth;
-
- eboflip->curve_in_x = -ebo->curve_in_x;
- eboflip->curve_out_x = -ebo->curve_out_x;
- eboflip->roll1 = -ebo->roll1;
- eboflip->roll2 = -ebo->roll2;
}
}
}
diff --git a/source/blender/editors/armature/pose_select.c b/source/blender/editors/armature/pose_select.c
index 8434fee6e78..a59067e60c1 100644
--- a/source/blender/editors/armature/pose_select.c
+++ b/source/blender/editors/armature/pose_select.c
@@ -54,6 +54,7 @@
#include "ED_keyframing.h"
#include "ED_mesh.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_select_utils.h"
#include "ED_view3d.h"
@@ -449,6 +450,8 @@ static int pose_select_connected_invoke(bContext *C, wmOperator *op, const wmEve
selectconnected_posebonechildren(base->object, curBone, extend);
}
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
ED_pose_bone_select_tag_update(base->object);
return OPERATOR_FINISHED;
@@ -514,6 +517,8 @@ static int pose_de_select_all_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, NULL);
return OPERATOR_FINISHED;
@@ -560,6 +565,8 @@ static int pose_select_parent_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_CANCELLED;
}
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
ED_pose_bone_select_tag_update(ob);
return OPERATOR_FINISHED;
}
@@ -624,6 +631,8 @@ static int pose_select_constraint_target_exec(bContext *C, wmOperator *UNUSED(op
return OPERATOR_CANCELLED;
}
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
return OPERATOR_FINISHED;
}
@@ -712,6 +721,8 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
ED_pose_bone_select_tag_update(ob);
return OPERATOR_FINISHED;
@@ -796,7 +807,7 @@ static bool pose_select_same_group(bContext *C, bool extend)
group_flags = NULL;
ob_index = -1;
ob_prev = NULL;
- CTX_DATA_BEGIN_WITH_ID (C, bPoseChannel *, pchan, visible_pose_bones, Object, *ob) {
+ CTX_DATA_BEGIN_WITH_ID (C, bPoseChannel *, pchan, visible_pose_bones, Object *, ob) {
if (ob != ob_prev) {
ob_index++;
group_flags = group_flags_array + (ob_index * groups_len);
@@ -1061,6 +1072,8 @@ static int pose_select_grouped_exec(bContext *C, wmOperator *op)
/* report done status */
if (changed) {
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
return OPERATOR_FINISHED;
}
else {
@@ -1172,6 +1185,8 @@ static int pose_select_mirror_exec(bContext *C, wmOperator *op)
}
MEM_freeN(objects);
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/armature/pose_slide.c b/source/blender/editors/armature/pose_slide.c
index c8e79b879a4..6274eb549da 100644
--- a/source/blender/editors/armature/pose_slide.c
+++ b/source/blender/editors/armature/pose_slide.c
@@ -442,7 +442,7 @@ static void pose_slide_apply_props(tPoseSlideOp *pso,
tPChanFCurveLink *pfl,
const char prop_prefix[])
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
LinkData *ld;
int len = strlen(pfl->pchan_path);
diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c
index 047b78af7b1..d7650db546d 100644
--- a/source/blender/editors/curve/editcurve.c
+++ b/source/blender/editors/curve/editcurve.c
@@ -51,6 +51,7 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_build.h"
+#include "DEG_depsgraph_query.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -1399,8 +1400,12 @@ static int separate_exec(bContext *C, wmOperator *op)
}
/* 2. Duplicate the object and data. */
- newbase = ED_object_add_duplicate(
- bmain, scene, view_layer, oldbase, 0); /* 0 = fully linked. */
+ newbase = ED_object_add_duplicate(bmain,
+ scene,
+ view_layer,
+ oldbase,
+ /* 0 = fully linked. */
+ 0);
DEG_relations_tag_update(bmain);
newob = newbase->object;
@@ -4784,7 +4789,7 @@ static int make_segment_exec(bContext *C, wmOperator *op)
BKE_nurb_handles_calc(nu1);
ok = true;
}
- else if (nu1->type == CU_NURBS && nu1->bp->f1 & SELECT &&
+ else if (ELEM(nu1->type, CU_NURBS, CU_POLY) && nu1->bp->f1 & SELECT &&
(nu1->bp[nu1->pntsu - 1].f1 & SELECT)) {
nu1->flagu |= CU_NURB_CYCLIC;
BKE_nurb_knot_calc_u(nu1);
@@ -5675,6 +5680,7 @@ static int add_vertex_invoke(bContext *C, wmOperator *op, const wmEvent *event)
},
mval,
NULL,
+ NULL,
location,
NULL);
@@ -7100,14 +7106,15 @@ static int match_texture_space_exec(bContext *C, wmOperator *UNUSED(op))
(void)depsgraph;
Object *object = CTX_data_active_object(C);
+ Object *object_eval = DEG_get_evaluated_object(depsgraph, object);
Curve *curve = (Curve *)object->data;
float min[3], max[3], size[3], loc[3];
int a;
- BLI_assert(object->runtime.curve_cache != NULL);
+ BLI_assert(object_eval->runtime.curve_cache != NULL);
INIT_MINMAX(min, max);
- BKE_displist_minmax(&object->runtime.curve_cache->disp, min, max);
+ BKE_displist_minmax(&object_eval->runtime.curve_cache->disp, min, max);
mid_v3_v3v3(loc, min, max);
@@ -7134,6 +7141,7 @@ static int match_texture_space_exec(bContext *C, wmOperator *UNUSED(op))
curve->texflag &= ~CU_AUTOSPACE;
WM_event_add_notifier(C, NC_GEOM | ND_DATA, curve);
+ DEG_id_tag_update(&curve->id, ID_RECALC_GEOMETRY);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/curve/editcurve_paint.c b/source/blender/editors/curve/editcurve_paint.c
index 5e0053782d4..c7c19aa2d02 100644
--- a/source/blender/editors/curve/editcurve_paint.c
+++ b/source/blender/editors/curve/editcurve_paint.c
@@ -120,7 +120,7 @@ struct CurveDrawData {
struct {
float mouse[2];
- /* used incase we can't calculate the depth */
+ /* Used in case we can't calculate the depth. */
float location_world[3];
float location_world_valid[3];
@@ -1053,7 +1053,7 @@ static int curve_draw_invoke(bContext *C, wmOperator *op, const wmEvent *event)
const bool is_modal = RNA_boolean_get(op->ptr, "wait_for_input");
- /* fallback (incase we can't find the depth on first test) */
+ /* Fallback (in case we can't find the depth on first test). */
{
const float mval_fl[2] = {UNPACK2(event->mval)};
float center[3];
diff --git a/source/blender/editors/curve/editcurve_select.c b/source/blender/editors/curve/editcurve_select.c
index d3f0ebfda3c..f67ccf1e4bd 100644
--- a/source/blender/editors/curve/editcurve_select.c
+++ b/source/blender/editors/curve/editcurve_select.c
@@ -1417,7 +1417,7 @@ void CURVE_OT_select_nth(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Checker Deselect";
- ot->description = "Deselect every other vertex";
+ ot->description = "Deselect every Nth point starting from the active one";
ot->idname = "CURVE_OT_select_nth";
/* api callbacks */
diff --git a/source/blender/editors/curve/editfont.c b/source/blender/editors/curve/editfont.c
index c912cea5937..781eb2634fb 100644
--- a/source/blender/editors/curve/editfont.c
+++ b/source/blender/editors/curve/editfont.c
@@ -71,7 +71,11 @@
static int kill_selection(Object *obedit, int ins);
-/************************* utilities ******************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Internal Utilities
+ * \{ */
static wchar_t findaccent(wchar_t char1, unsigned int code)
{
@@ -440,8 +444,48 @@ static void text_update_edited(bContext *C, Object *obedit, int mode)
WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
}
+static int kill_selection(Object *obedit, int ins) /* 1 == new character */
+{
+ Curve *cu = obedit->data;
+ EditFont *ef = cu->editfont;
+ int selend, selstart, direction;
+ int offset = 0;
+ int getfrom;
+
+ direction = BKE_vfont_select_get(obedit, &selstart, &selend);
+ if (direction) {
+ int size;
+ if (ins) {
+ offset = 1;
+ }
+ if (ef->pos >= selstart) {
+ ef->pos = selstart + offset;
+ }
+ if ((direction == -1) && ins) {
+ selstart++;
+ selend++;
+ }
+ getfrom = selend + offset;
+ if (ins == 0) {
+ getfrom++;
+ }
+ size = (ef->len * sizeof(wchar_t)) - (selstart * sizeof(wchar_t)) + (offset * sizeof(wchar_t));
+ memmove(ef->textbuf + selstart, ef->textbuf + getfrom, size);
+ memmove(ef->textbufinfo + selstart,
+ ef->textbufinfo + getfrom,
+ ((ef->len - selstart) + offset) * sizeof(CharInfo));
+ ef->len -= ((selend - selstart) + 1);
+ ef->selstart = ef->selend = 0;
+ }
+
+ return (direction);
+}
+
+/** \} */
+
/* -------------------------------------------------------------------- */
-/* Generic Paste Functions */
+/** \name Generic Paste Functions
+ * \{ */
/* text_update_edited(C, scene, obedit, 1, FO_EDIT); */
static bool font_paste_wchar(Object *obedit,
@@ -506,8 +550,11 @@ static bool font_paste_utf8(bContext *C, const char *str, const size_t str_len)
return retval;
}
+/** \} */
+
/* -------------------------------------------------------------------- */
-/* Paste From File*/
+/** \name Paste From File Operator
+ * \{ */
static int paste_from_file(bContext *C, ReportList *reports, const char *filename)
{
@@ -585,7 +632,11 @@ void FONT_OT_text_paste_from_file(wmOperatorType *ot)
FILE_SORT_ALPHA);
}
-/******************* text to object operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Text To Object
+ * \{ */
static void txt_add_object(bContext *C, TextLine *firstline, int totline, const float offset[3])
{
@@ -606,7 +657,7 @@ static void txt_add_object(bContext *C, TextLine *firstline, int totline, const
base = view_layer->basact;
/* seems to assume view align ? TODO - look into this, could be an operator option */
- ED_object_base_init_transform(C, base, NULL, rot);
+ ED_object_base_init_transform_on_add(base->object, NULL, rot);
BKE_object_where_is_calc(depsgraph, scene, obedit);
@@ -703,46 +754,11 @@ void ED_text_to_object(bContext *C, Text *text, const bool split_lines)
}
}
-/********************** utilities ***************************/
-
-static int kill_selection(Object *obedit, int ins) /* 1 == new character */
-{
- Curve *cu = obedit->data;
- EditFont *ef = cu->editfont;
- int selend, selstart, direction;
- int offset = 0;
- int getfrom;
-
- direction = BKE_vfont_select_get(obedit, &selstart, &selend);
- if (direction) {
- int size;
- if (ins) {
- offset = 1;
- }
- if (ef->pos >= selstart) {
- ef->pos = selstart + offset;
- }
- if ((direction == -1) && ins) {
- selstart++;
- selend++;
- }
- getfrom = selend + offset;
- if (ins == 0) {
- getfrom++;
- }
- size = (ef->len * sizeof(wchar_t)) - (selstart * sizeof(wchar_t)) + (offset * sizeof(wchar_t));
- memmove(ef->textbuf + selstart, ef->textbuf + getfrom, size);
- memmove(ef->textbufinfo + selstart,
- ef->textbufinfo + getfrom,
- ((ef->len - selstart) + offset) * sizeof(CharInfo));
- ef->len -= ((selend - selstart) + 1);
- ef->selstart = ef->selend = 0;
- }
-
- return (direction);
-}
+/** \} */
-/******************* set style operator ********************/
+/* -------------------------------------------------------------------- */
+/** \name Set Style Operator
+ * \{ */
static const EnumPropertyItem style_items[] = {
{CU_CHINFO_BOLD, "BOLD", 0, "Bold", ""},
@@ -806,7 +822,11 @@ void FONT_OT_style_set(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "clear", 0, "Clear", "Clear style rather than setting it");
}
-/******************* toggle style operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Toggle Style Operator
+ * \{ */
static int toggle_style_exec(bContext *C, wmOperator *op)
{
@@ -845,8 +865,11 @@ void FONT_OT_style_toggle(wmOperatorType *ot)
ot->srna, "style", style_items, CU_CHINFO_BOLD, "Style", "Style to set selection to");
}
+/** \} */
+
/* -------------------------------------------------------------------- */
-/* Select All */
+/** \name Select All Operator
+ * \{ */
static int font_select_all_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -883,7 +906,11 @@ void FONT_OT_select_all(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/******************* copy text operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Copy Text Operator
+ * \{ */
static void copy_selection(Object *obedit)
{
@@ -932,7 +959,11 @@ void FONT_OT_text_copy(wmOperatorType *ot)
ot->poll = ED_operator_editfont;
}
-/******************* cut text operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Cut Text Operator
+ * \{ */
static int cut_text_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -966,7 +997,11 @@ void FONT_OT_text_cut(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/******************* paste text operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Paste Text Operator
+ * \{ */
static bool paste_selection(Object *obedit, ReportList *reports)
{
@@ -1066,7 +1101,11 @@ void FONT_OT_text_paste(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/************************ move operator ************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Move Operator
+ * \{ */
static const EnumPropertyItem move_type_items[] = {
{LINE_BEGIN, "LINE_BEGIN", 0, "Line Begin", ""},
@@ -1232,7 +1271,11 @@ void FONT_OT_move(wmOperatorType *ot)
RNA_def_enum(ot->srna, "type", move_type_items, LINE_BEGIN, "Type", "Where to move cursor to");
}
-/******************* move select operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Move Select Operator
+ * \{ */
static int move_select_exec(bContext *C, wmOperator *op)
{
@@ -1264,7 +1307,11 @@ void FONT_OT_move_select(wmOperatorType *ot)
"Where to move cursor to, to make a selection");
}
-/************************* change spacing **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Change Spacing
+ * \{ */
static int change_spacing_exec(bContext *C, wmOperator *op)
{
@@ -1314,7 +1361,11 @@ void FONT_OT_change_spacing(wmOperatorType *ot)
20);
}
-/************************* change character **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Change Character
+ * \{ */
static int change_character_exec(bContext *C, wmOperator *op)
{
@@ -1368,7 +1419,11 @@ void FONT_OT_change_character(wmOperatorType *ot)
255);
}
-/******************* line break operator ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Line Break Operator
+ * \{ */
static int line_break_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -1400,7 +1455,11 @@ void FONT_OT_line_break(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/******************* delete operator **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Delete Operator
+ * \{ */
static const EnumPropertyItem delete_type_items[] = {
{DEL_NEXT_CHAR, "NEXT_CHARACTER", 0, "Next Character", ""},
@@ -1549,7 +1608,11 @@ void FONT_OT_delete(wmOperatorType *ot)
"Which part of the text to delete");
}
-/*********************** insert text operator *************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Insert Text Operator
+ * \{ */
static int insert_text_exec(bContext *C, wmOperator *op)
{
@@ -1700,7 +1763,12 @@ void FONT_OT_text_insert(wmOperatorType *ot)
"Next typed character will strike through previous, for special character input");
}
-/*********************** textbox add operator *************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Textbox Add Operator
+ * \{ */
+
static int textbox_add_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *obedit = CTX_data_active_object(C);
@@ -1736,7 +1804,11 @@ void FONT_OT_textbox_add(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/*********************** textbox remove operator *************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Textbox Remove Operator
+ * \{ */
static int textbox_remove_exec(bContext *C, wmOperator *op)
{
@@ -1778,7 +1850,11 @@ void FONT_OT_textbox_remove(wmOperatorType *ot)
RNA_def_int(ot->srna, "index", 0, 0, INT_MAX, "Index", "The current text box", 0, INT_MAX);
}
-/***************** editmode enter/exit ********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Editmode Enter/Exit
+ * \{ */
void ED_curve_editfont_make(Object *obedit)
{
@@ -1851,7 +1927,11 @@ void ED_curve_editfont_free(Object *obedit)
BKE_curve_editfont_free((Curve *)obedit->data);
}
-/********************** set case operator *********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Set Case Operator
+ * \{ */
static const EnumPropertyItem case_items[] = {
{CASE_LOWER, "LOWER", 0, "Lower", ""},
@@ -1920,7 +2000,11 @@ void FONT_OT_case_set(wmOperatorType *ot)
RNA_def_enum(ot->srna, "case", case_items, CASE_LOWER, "Case", "Lower or upper case");
}
-/********************** toggle case operator *********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Toggle Case Operator
+ * \{ */
static int toggle_case_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -2031,7 +2115,7 @@ static int open_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)
if (pprop->prop) {
idptr = RNA_property_pointer_get((PointerRNA *)pprop, pprop->prop);
- vfont = idptr.id.data;
+ vfont = (VFont *)idptr.owner_id;
}
path = (vfont && !BKE_vfont_is_builtin(vfont)) ? vfont->name : U.fontdir;
@@ -2071,7 +2155,11 @@ void FONT_OT_open(wmOperatorType *ot)
FILE_SORT_ALPHA);
}
-/******************* delete operator *********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Delete Operator
+ * \{ */
static int font_unlink_exec(bContext *C, wmOperator *op)
{
@@ -2190,3 +2278,5 @@ bool ED_curve_editfont_select_pick(
return false;
}
}
+
+/** \} */
diff --git a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
index d23965269ab..fa9c0f1fbb2 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/arrow3d_gizmo.c
@@ -363,8 +363,8 @@ static void gizmo_arrow_exit(bContext *C, wmGizmo *gz, const bool cancel)
const bool is_prop_valid = WM_gizmo_target_property_is_valid(gz_prop);
if (!cancel) {
- /* Assign incase applying the operation needs an updated offset
- * editmesh bisect needs this. */
+ /* Assign in case applying the operation needs an updated offset
+ * edit-mesh bisect needs this. */
if (is_prop_valid) {
const int transform_flag = RNA_enum_get(arrow->gizmo.ptr, "transform");
const bool constrained = (transform_flag & ED_GIZMO_ARROW_XFORM_FLAG_CONSTRAINED) != 0;
diff --git a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
index e2a86469da1..406f76bc65e 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/cage3d_gizmo.c
@@ -358,7 +358,7 @@ static void gizmo_cage3d_draw_intern(
bool show = false;
if (gz->highlight_part == ED_GIZMO_CAGE3D_PART_TRANSLATE) {
/* Only show if we're drawing the center handle
- * otherwise the entire rectangle is the hotspot. */
+ * otherwise the entire rectangle is the hot-spot. */
if (draw_options & ED_GIZMO_CAGE2D_DRAW_FLAG_XFORM_CENTER_HANDLE) {
show = true;
}
diff --git a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
index 21f779b72b1..37ee95d5058 100644
--- a/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
+++ b/source/blender/editors/gizmo_library/gizmo_types/move3d_gizmo.c
@@ -283,6 +283,7 @@ static int gizmo_move_modal(bContext *C,
.use_occlusion_test = true,
},
mval_fl,
+ NULL,
&dist_px,
co,
NULL)) {
diff --git a/source/blender/editors/gpencil/annotate_draw.c b/source/blender/editors/gpencil/annotate_draw.c
index dce6ed29c05..697d06aa098 100644
--- a/source/blender/editors/gpencil/annotate_draw.c
+++ b/source/blender/editors/gpencil/annotate_draw.c
@@ -936,7 +936,6 @@ static void annotation_draw_data_layers(
/* draw a short status message in the top-right corner */
static void annotation_draw_status_text(const bGPdata *gpd, ARegion *ar)
{
- rcti rect;
/* Cannot draw any status text when drawing OpenGL Renders */
if (G.f & G_FLAG_RENDER_VIEWPORT) {
@@ -944,7 +943,7 @@ static void annotation_draw_status_text(const bGPdata *gpd, ARegion *ar)
}
/* Get bounds of region - Necessary to avoid problems with region overlap */
- ED_region_visible_rect(ar, &rect);
+ const rcti *rect = ED_region_visible_rect(ar);
/* for now, this should only be used to indicate when we are in stroke editmode */
if (gpd->flag & GP_DATA_STROKE_EDITMODE) {
@@ -956,8 +955,8 @@ static void annotation_draw_status_text(const bGPdata *gpd, ARegion *ar)
BLF_width_and_height(
font_id, printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
- int xco = (rect.xmax - U.widget_unit) - (int)printable_size[0];
- int yco = (rect.ymax - U.widget_unit);
+ int xco = (rect->xmax - U.widget_unit) - (int)printable_size[0];
+ int yco = (rect->ymax - U.widget_unit);
/* text label */
UI_FontThemeColor(font_id, TH_TEXT_HI);
diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c
index e59e5d6a878..22f1753a810 100644
--- a/source/blender/editors/gpencil/annotate_paint.c
+++ b/source/blender/editors/gpencil/annotate_paint.c
@@ -561,87 +561,6 @@ static short gp_stroke_addpoint(tGPsdata *p, const float mval[2], float pressure
return GP_STROKEADD_INVALID;
}
-/* simplify a stroke (in buffer) before storing it
- * - applies a reverse Chaikin filter
- * - code adapted from etch-a-ton branch
- */
-static void gp_stroke_simplify(tGPsdata *p)
-{
- bGPdata *gpd = p->gpd;
- tGPspoint *old_points = (tGPspoint *)gpd->runtime.sbuffer;
- short num_points = gpd->runtime.sbuffer_used;
- short flag = gpd->runtime.sbuffer_sflag;
- short i, j;
-
- /* only simplify if simplification is enabled, and we're not doing a straight line */
- if (!(U.gp_settings & GP_PAINT_DOSIMPLIFY) || (p->paintmode == GP_PAINTMODE_DRAW_STRAIGHT)) {
- return;
- }
-
- /* don't simplify if less than 4 points in buffer */
- if ((num_points <= 4) || (old_points == NULL)) {
- return;
- }
-
- /* clear buffer (but don't free mem yet) so that we can write to it
- * - firstly set sbuffer to NULL, so a new one is allocated
- * - secondly, reset flag after, as it gets cleared auto
- */
- gpd->runtime.sbuffer = NULL;
- gp_session_validatebuffer(p);
- gpd->runtime.sbuffer_sflag = flag;
-
-/* macro used in loop to get position of new point
- * - used due to the mixture of datatypes in use here
- */
-#define GP_SIMPLIFY_AVPOINT(offs, sfac) \
- { \
- co[0] += (float)(old_points[offs].x * sfac); \
- co[1] += (float)(old_points[offs].y * sfac); \
- pressure += old_points[offs].pressure * sfac; \
- time += old_points[offs].time * sfac; \
- } \
- (void)0
-
- /* XXX Here too, do not lose start and end points! */
- gp_stroke_addpoint(
- p, &old_points->x, old_points->pressure, p->inittime + (double)old_points->time);
- for (i = 0, j = 0; i < num_points; i++) {
- if (i - j == 3) {
- float co[2], pressure, time;
- float mco[2];
-
- /* initialize values */
- co[0] = 0.0f;
- co[1] = 0.0f;
- pressure = 0.0f;
- time = 0.0f;
-
- /* using macro, calculate new point */
- GP_SIMPLIFY_AVPOINT(j, -0.25f);
- GP_SIMPLIFY_AVPOINT(j + 1, 0.75f);
- GP_SIMPLIFY_AVPOINT(j + 2, 0.75f);
- GP_SIMPLIFY_AVPOINT(j + 3, -0.25f);
-
- /* set values for adding */
- mco[0] = co[0];
- mco[1] = co[1];
-
- /* ignore return values on this... assume to be ok for now */
- gp_stroke_addpoint(p, mco, pressure, p->inittime + (double)time);
-
- j += 2;
- }
- }
- gp_stroke_addpoint(p,
- &old_points[num_points - 1].x,
- old_points[num_points - 1].pressure,
- p->inittime + (double)old_points[num_points - 1].time);
-
- /* free old buffer */
- MEM_freeN(old_points);
-}
-
/* make a new stroke from the buffer data */
static void gp_stroke_newfrombuffer(tGPsdata *p)
{
@@ -1237,7 +1156,7 @@ static tGPsdata *gp_session_initpaint(bContext *C)
/* create new context data */
p = MEM_callocN(sizeof(tGPsdata), "Annotation Drawing Data");
- /* Try to initialise context data
+ /* Try to initialize context data
* WARNING: This may not always succeed (e.g. using GP in an annotation-only context)
*/
if (gp_session_initdata(C, p) == 0) {
@@ -1333,15 +1252,6 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Deps
/* Ensure active frame is set correctly... */
p->gpf = p->gpl->actframe;
- /* Restrict eraser to only affecting selected strokes, if the "selection mask" is on
- * (though this is only available in editmode)
- */
- if (p->gpd->flag & GP_DATA_STROKE_EDITMODE) {
- if (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) {
- p->flags |= GP_PAINTFLAG_SELECTMASK;
- }
- }
-
if (has_layer_to_erase == false) {
p->status = GP_STATUS_CAPTURE;
// if (G.debug & G_DEBUG)
@@ -1466,9 +1376,6 @@ static void gp_paint_strokeend(tGPsdata *p)
/* check if doing eraser or not */
if ((p->gpd->runtime.sbuffer_sflag & GP_STROKE_ERASER) == 0) {
- /* simplify stroke before transferring? */
- gp_stroke_simplify(p);
-
/* transfer stroke to frame */
gp_stroke_newfrombuffer(p);
}
@@ -2326,11 +2233,9 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
}
else if (p->ar) {
- rcti region_rect;
-
- /* Perform bounds check using */
- ED_region_visible_rect(p->ar, &region_rect);
- in_bounds = BLI_rcti_isect_pt_v(&region_rect, event->mval);
+ /* Perform bounds check. */
+ const rcti *region_rect = ED_region_visible_rect(p->ar);
+ in_bounds = BLI_rcti_isect_pt_v(region_rect, event->mval);
}
else {
/* No region */
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index 0c2af982279..7c76f3aeab6 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -866,6 +866,7 @@ static void gp_draw_strokes(tGPDdraw *tgpw)
float tfill[4];
short sthickness;
float ink[4];
+ const bool is_unique = (tgpw->gps != NULL);
GPU_program_point_size(true);
@@ -1099,7 +1100,7 @@ static void gp_draw_strokes(tGPDdraw *tgpw)
}
}
/* if only one stroke, exit from loop */
- if (tgpw->gps) {
+ if (is_unique) {
break;
}
}
@@ -1172,15 +1173,14 @@ void ED_gp_draw_fill(tGPDdraw *tgpw)
/* draw a short status message in the top-right corner */
static void UNUSED_FUNCTION(gp_draw_status_text)(const bGPdata *gpd, ARegion *ar)
{
- rcti rect;
/* Cannot draw any status text when drawing OpenGL Renders */
if (G.f & G_FLAG_RENDER_VIEWPORT) {
return;
}
- /* Get bounds of region - Necessary to avoid problems with region overlap */
- ED_region_visible_rect(ar, &rect);
+ /* Get bounds of region - Necessary to avoid problems with region overlap. */
+ const rcti *rect = ED_region_visible_rect(ar);
/* for now, this should only be used to indicate when we are in stroke editmode */
if (gpd->flag & GP_DATA_STROKE_EDITMODE) {
@@ -1192,8 +1192,8 @@ static void UNUSED_FUNCTION(gp_draw_status_text)(const bGPdata *gpd, ARegion *ar
BLF_width_and_height(
font_id, printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
- int xco = (rect.xmax - U.widget_unit) - (int)printable_size[0];
- int yco = (rect.ymax - U.widget_unit);
+ int xco = (rect->xmax - U.widget_unit) - (int)printable_size[0];
+ int yco = (rect->ymax - U.widget_unit);
/* text label */
UI_FontThemeColor(font_id, TH_TEXT_HI);
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index 1a7422cd174..d1c4f271321 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -105,6 +105,7 @@ typedef struct tGP_BrushEditData {
eGP_Sculpt_Types brush_type;
eGP_Sculpt_Types brush_type_old;
eGP_Sculpt_Flag flag;
+ eGP_Sculpt_SelectMaskFlag mask;
/* Space Conversion Data */
GP_SpaceConversion gsc;
@@ -133,6 +134,9 @@ typedef struct tGP_BrushEditData {
/* - effect vector (e.g. 2D/3D translation for grab brush) */
float dvec[3];
+ /* rotation for evaluated data */
+ float rot_eval;
+
/* - multiframe falloff factor */
float mf_falloff;
@@ -156,8 +160,12 @@ typedef struct tGP_BrushEditData {
} tGP_BrushEditData;
/* Callback for performing some brush operation on a single point */
-typedef bool (*GP_BrushApplyCb)(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2]);
+typedef bool (*GP_BrushApplyCb)(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float rotation,
+ int pt_index,
+ const int radius,
+ const int co[2]);
/* ************************************************ */
/* Utility Functions */
@@ -293,6 +301,20 @@ static float gp_brush_influence_calc(tGP_BrushEditData *gso, const int radius, c
return influence;
}
+/* Force recal filling data */
+static void gp_recalc_geometry(bGPDstroke *gps)
+{
+ bGPDstroke *gps_orig = gps->runtime.gps_orig;
+ if (gps_orig) {
+ gps_orig->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gps_orig->tot_triangles = 0;
+ }
+ else {
+ gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gps->tot_triangles = 0;
+ }
+}
+
/* ************************************************ */
/* Brush Callbacks */
/* This section defines the callbacks used by each brush to perform their magic.
@@ -304,8 +326,12 @@ static float gp_brush_influence_calc(tGP_BrushEditData *gso, const int radius, c
/* A simple (but slower + inaccurate)
* smooth-brush implementation to test the algorithm for stroke smoothing. */
-static bool gp_brush_smooth_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_smooth_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
// GP_Sculpt_Data *gp_brush = gso->brush;
float inf = gp_brush_influence_calc(gso, radius, co);
@@ -330,7 +356,7 @@ static bool gp_brush_smooth_apply(
BKE_gpencil_smooth_stroke_uv(gps, pt_index, inf);
}
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gp_recalc_geometry(gps);
return true;
}
@@ -339,8 +365,12 @@ static bool gp_brush_smooth_apply(
/* Line Thickness Brush */
/* Make lines thicker or thinner by the specified amounts */
-static bool gp_brush_thickness_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_thickness_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
bGPDspoint *pt = gps->points + pt_index;
float inf;
@@ -379,8 +409,12 @@ static bool gp_brush_thickness_apply(
/* Color Strength Brush */
/* Make color more or less transparent by the specified amounts */
-static bool gp_brush_strength_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_strength_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
bGPDspoint *pt = gps->points + pt_index;
float inf;
@@ -423,6 +457,8 @@ typedef struct tGPSB_Grab_StrokeData {
int *points;
/* array of influence weights for each of the included points */
float *weights;
+ /* angles to calc transformation */
+ float *rot_eval;
/* capacity of the arrays */
int capacity;
@@ -450,6 +486,7 @@ static void gp_brush_grab_stroke_init(tGP_BrushEditData *gso, bGPDstroke *gps)
memset(data->points, 0, sizeof(int) * data->capacity);
memset(data->weights, 0, sizeof(float) * data->capacity);
+ memset(data->rot_eval, 0, sizeof(float) * data->capacity);
}
else {
/* Create new instance */
@@ -460,6 +497,7 @@ static void gp_brush_grab_stroke_init(tGP_BrushEditData *gso, bGPDstroke *gps)
data->points = MEM_callocN(sizeof(int) * data->capacity, "GP Stroke Grab Indices");
data->weights = MEM_callocN(sizeof(float) * data->capacity, "GP Stroke Grab Weights");
+ data->rot_eval = MEM_callocN(sizeof(float) * data->capacity, "GP Stroke Grab Rotations");
/* hook up to the cache */
BLI_ghash_insert(gso->stroke_customdata, gps, data);
@@ -467,8 +505,12 @@ static void gp_brush_grab_stroke_init(tGP_BrushEditData *gso, bGPDstroke *gps)
}
/* store references to stroke points in the initial stage */
-static bool gp_brush_grab_store_points(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_grab_store_points(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float rot_eval,
+ int pt_index,
+ const int radius,
+ const int co[2])
{
tGPSB_Grab_StrokeData *data = BLI_ghash_lookup(gso->stroke_customdata, gps);
float inf = gp_brush_influence_calc(gso, radius, co);
@@ -479,6 +521,7 @@ static bool gp_brush_grab_store_points(
/* insert this point into the set of affected points */
data->points[data->size] = pt_index;
data->weights[data->size] = inf;
+ data->rot_eval[data->size] = rot_eval;
data->size++;
/* done */
@@ -502,6 +545,16 @@ static void gp_brush_grab_calc_dvec(tGP_BrushEditData *gso)
mval_f[0] = (float)(gso->mval[0] - gso->mval_prev[0]);
mval_f[1] = (float)(gso->mval[1] - gso->mval_prev[1]);
+ /* apply evaluated data transformation */
+ if (gso->rot_eval != 0.0f) {
+ const float cval = cos(gso->rot_eval);
+ const float sval = sin(gso->rot_eval);
+ float r[2];
+ r[0] = (mval_f[0] * cval) - (mval_f[1] * sval);
+ r[1] = (mval_f[0] * sval) + (mval_f[1] * cval);
+ copy_v2_v2(mval_f, r);
+ }
+
ED_view3d_win_to_delta(gso->ar, mval_f, gso->dvec, zfac);
}
else {
@@ -526,6 +579,10 @@ static void gp_brush_grab_apply_cached(tGP_BrushEditData *gso,
bGPDspoint *pt = &gps->points[data->points[i]];
float delta[3] = {0.0f};
+ /* get evaluated transformation */
+ gso->rot_eval = data->rot_eval[i];
+ gp_brush_grab_calc_dvec(gso);
+
/* adjust the amount of displacement to apply */
mul_v3_v3fl(delta, gso->dvec, data->weights[i]);
@@ -544,7 +601,7 @@ static void gp_brush_grab_apply_cached(tGP_BrushEditData *gso,
/* compute lock axis */
gpsculpt_compute_lock_axis(gso, pt, save_pt);
}
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gp_recalc_geometry(gps);
}
/* free customdata used for handling this stroke */
@@ -553,8 +610,9 @@ static void gp_brush_grab_stroke_free(void *ptr)
tGPSB_Grab_StrokeData *data = (tGPSB_Grab_StrokeData *)ptr;
/* free arrays */
- MEM_freeN(data->points);
- MEM_freeN(data->weights);
+ MEM_SAFE_FREE(data->points);
+ MEM_SAFE_FREE(data->weights);
+ MEM_SAFE_FREE(data->rot_eval);
/* ... and this item itself, since it was also allocated */
MEM_freeN(data);
@@ -563,9 +621,12 @@ static void gp_brush_grab_stroke_free(void *ptr)
/* ----------------------------------------------- */
/* Push Brush */
/* NOTE: Depends on gp_brush_grab_calc_dvec() */
-
-static bool gp_brush_push_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_push_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
bGPDspoint *pt = gps->points + pt_index;
float save_pt[3];
@@ -592,7 +653,6 @@ static bool gp_brush_push_apply(
/* ----------------------------------------------- */
/* Pinch Brush */
-
/* Compute reference midpoint for the brush - this is what we'll be moving towards */
static void gp_brush_calc_midpoint(tGP_BrushEditData *gso)
{
@@ -629,8 +689,12 @@ static void gp_brush_calc_midpoint(tGP_BrushEditData *gso)
}
/* Shrink distance between midpoint and this point... */
-static bool gp_brush_pinch_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_pinch_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
bGPDspoint *pt = gps->points + pt_index;
float fac, inf;
@@ -672,7 +736,7 @@ static bool gp_brush_pinch_apply(
/* compute lock axis */
gpsculpt_compute_lock_axis(gso, pt, save_pt);
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gp_recalc_geometry(gps);
/* done */
return true;
@@ -680,13 +744,16 @@ static bool gp_brush_pinch_apply(
/* ----------------------------------------------- */
/* Twist Brush - Rotate Around midpoint */
-
/* Take the screenspace coordinates of the point, rotate this around the brush midpoint,
* convert the rotated point and convert it into "data" space
*/
-static bool gp_brush_twist_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_twist_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
bGPDspoint *pt = gps->points + pt_index;
float angle, inf;
@@ -757,7 +824,7 @@ static bool gp_brush_twist_apply(
}
}
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gp_recalc_geometry(gps);
/* done */
return true;
@@ -765,10 +832,13 @@ static bool gp_brush_twist_apply(
/* ----------------------------------------------- */
/* Randomize Brush */
-
/* Apply some random jitter to the point */
-static bool gp_brush_randomize_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_randomize_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
bGPDspoint *pt = gps->points + pt_index;
float save_pt[3];
@@ -811,17 +881,6 @@ static bool gp_brush_randomize_apply(
mul_v2_fl(svec, fac);
}
-#if 0
- printf("%f %f (%f), nco = {%f %f}, co = %d %d\n",
- svec[0],
- svec[1],
- fac,
- nco[0],
- nco[1],
- co[0],
- co[1]);
-#endif
-
/* convert to dataspace */
if (gps->flag & GP_STROKE_3DSPACE) {
/* 3D: Project to 3D space */
@@ -885,17 +944,20 @@ static bool gp_brush_randomize_apply(
CLAMP(pt->uv_rot, -M_PI_2, M_PI_2);
}
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gp_recalc_geometry(gps);
/* done */
return true;
}
/* Weight Paint Brush */
-
/* Change weight paint for vertex groups */
-static bool gp_brush_weight_apply(
- tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index, const int radius, const int co[2])
+static bool gp_brush_weight_apply(tGP_BrushEditData *gso,
+ bGPDstroke *gps,
+ float UNUSED(rot_eval),
+ int pt_index,
+ const int radius,
+ const int co[2])
{
/* create dvert */
BKE_gpencil_dvert_ensure(gps);
@@ -947,7 +1009,6 @@ static bool gp_brush_weight_apply(
/* ************************************************ */
/* Non Callback-Based Brushes */
-
/* Clone Brush ------------------------------------- */
/* How this brush currently works:
* - If this is start of the brush stroke, paste immediately under the cursor
@@ -1129,6 +1190,7 @@ static void gp_brush_clone_adjust(tGP_BrushEditData *gso)
size_t snum;
/* Compute the amount of movement to apply (overwrites dvec) */
+ gso->rot_eval = 0.0f;
gp_brush_grab_calc_dvec(gso);
/* For each of the stored strokes, apply the offset to each point */
@@ -1276,6 +1338,9 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
gso->sa = CTX_wm_area(C);
gso->ar = CTX_wm_region(C);
+ /* save mask */
+ gso->mask = ts->gpencil_selectmode_sculpt;
+
/* multiframe settings */
gso->is_multiframe = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gso->gpd);
gso->use_multiframe_falloff = (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_FRAME_FALLOFF) != 0;
@@ -1283,7 +1348,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
/* Init multi-edit falloff curve data before doing anything,
* so we won't have to do it again later. */
if (gso->is_multiframe) {
- curvemapping_initialize(ts->gp_sculpt.cur_falloff);
+ BKE_curvemapping_initialize(ts->gp_sculpt.cur_falloff);
}
/* initialise custom data for brushes */
@@ -1439,6 +1504,58 @@ static void gpsculpt_brush_init_stroke(tGP_BrushEditData *gso)
/* Apply ----------------------------------------------- */
+/* Get angle of the segment relative to the original segment before any transformation
+ * For strokes with one point only this is impossible to calculate because there isn't a
+ * valid reference point.
+ */
+static float gpsculpt_rotation_eval_get(GP_SpaceConversion *gsc,
+ bGPDstroke *gps_eval,
+ bGPDspoint *pt_eval,
+ int idx_eval)
+{
+
+ bGPDstroke *gps_orig = gps_eval->runtime.gps_orig;
+ bGPDspoint *pt_orig = &gps_orig->points[pt_eval->runtime.idx_orig];
+ bGPDspoint *pt_prev_eval = NULL;
+ bGPDspoint *pt_orig_prev = NULL;
+ if (idx_eval != 0) {
+ pt_prev_eval = &gps_eval->points[idx_eval - 1];
+ }
+ else {
+ if (gps_eval->totpoints > 1) {
+ pt_prev_eval = &gps_eval->points[idx_eval + 1];
+ }
+ else {
+ return 0.0f;
+ }
+ }
+
+ if (pt_eval->runtime.idx_orig != 0) {
+ pt_orig_prev = &gps_orig->points[pt_eval->runtime.idx_orig - 1];
+ }
+ else {
+ if (gps_orig->totpoints > 1) {
+ pt_orig_prev = &gps_orig->points[pt_eval->runtime.idx_orig + 1];
+ }
+ else {
+ return 0.0f;
+ }
+ }
+
+ /* create 2D vectors of the stroke segments */
+ float v_orig_a[2], v_orig_b[2], v_eval_a[2], v_eval_b[2];
+
+ gp_point_3d_to_xy(gsc, GP_STROKE_3DSPACE, &pt_orig->x, v_orig_a);
+ gp_point_3d_to_xy(gsc, GP_STROKE_3DSPACE, &pt_orig_prev->x, v_orig_b);
+ sub_v2_v2(v_orig_a, v_orig_b);
+
+ gp_point_3d_to_xy(gsc, GP_STROKE_3DSPACE, &pt_eval->x, v_eval_a);
+ gp_point_3d_to_xy(gsc, GP_STROKE_3DSPACE, &pt_prev_eval->x, v_eval_b);
+ sub_v2_v2(v_eval_a, v_eval_b);
+
+ return angle_v2v2(v_orig_a, v_eval_a);
+}
+
/* Apply brush operation to points in this stroke */
static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
bGPDstroke *gps,
@@ -1453,14 +1570,16 @@ static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
gso->gp_brush->size;
bGPDspoint *pt1, *pt2;
+ bGPDspoint *pt = NULL;
int pc1[2] = {0};
int pc2[2] = {0};
int i;
bool include_last = false;
bool changed = false;
-
+ float rot_eval = 0.0f;
if (gps->totpoints == 1) {
bGPDspoint pt_temp;
+ pt = &gps->points[0];
gp_point_to_parent_space(gps->points, diff_mat, &pt_temp);
gp_point_to_xy(gsc, gps, &pt_temp, &pc1[0], &pc1[1]);
@@ -1471,7 +1590,10 @@ static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
round_v2i_v2fl(mval_i, gso->mval);
if (len_v2v2_int(mval_i, pc1) <= radius) {
/* apply operation to this point */
- changed = apply(gso, gps, 0, radius, pc1);
+ if (pt->runtime.pt_orig != NULL) {
+ rot_eval = gpsculpt_rotation_eval_get(&gso->gsc, gps, pt, 0);
+ changed = apply(gso, gps->runtime.gps_orig, rot_eval, pt->runtime.idx_orig, radius, pc1);
+ }
}
}
}
@@ -1486,7 +1608,7 @@ static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
/* Skip if neither one is selected
* (and we are only allowed to edit/consider selected points) */
- if ((gso->settings->flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) && (!gso->is_weight_mode)) {
+ if ((GPENCIL_ANY_SCULPT_MASK(gso->mask)) && (!gso->is_weight_mode)) {
if (!(pt1->flag & GP_SPOINT_SELECT) && !(pt2->flag & GP_SPOINT_SELECT)) {
include_last = false;
continue;
@@ -1512,7 +1634,11 @@ static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
bool ok = false;
/* To each point individually... */
- ok = apply(gso, gps, i, radius, pc1);
+ pt = &gps->points[i];
+ if (pt->runtime.pt_orig != NULL) {
+ rot_eval = gpsculpt_rotation_eval_get(&gso->gsc, gps, pt, i);
+ ok = apply(gso, gps->runtime.gps_orig, rot_eval, pt->runtime.idx_orig, radius, pc1);
+ }
/* Only do the second point if this is the last segment,
* and it is unlikely that the point will get handled
@@ -1523,8 +1649,12 @@ static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
* the line linking the points was!
*/
if (i + 1 == gps->totpoints - 1) {
- ok |= apply(gso, gps, i + 1, radius, pc2);
- include_last = false;
+ pt = &gps->points[i + 1];
+ if (pt->runtime.pt_orig != NULL) {
+ rot_eval = gpsculpt_rotation_eval_get(&gso->gsc, gps, pt, i + 1);
+ ok |= apply(gso, gps->runtime.gps_orig, rot_eval, pt->runtime.idx_orig, radius, pc2);
+ include_last = false;
+ }
}
else {
include_last = true;
@@ -1538,8 +1668,13 @@ static bool gpsculpt_brush_do_stroke(tGP_BrushEditData *gso,
* but it would've qualified since it did with the previous step
* (but wasn't added then, to avoid double-ups).
*/
- changed |= apply(gso, gps, i, radius, pc1);
- include_last = false;
+ pt = &gps->points[i];
+ if (pt->runtime.pt_orig != NULL) {
+ rot_eval = gpsculpt_rotation_eval_get(&gso->gsc, gps, pt, i);
+ changed |= apply(
+ gso, gps->runtime.gps_orig, rot_eval, pt->runtime.idx_orig, radius, pc1);
+ include_last = false;
+ }
}
}
}
@@ -1586,18 +1721,20 @@ static bool gpsculpt_brush_do_frame(
case GP_SCULPT_TYPE_GRAB: /* Grab points */
{
- if (gso->first) {
- /* First time this brush stroke is being applied:
- * 1) Prepare data buffers (init/clear) for this stroke
- * 2) Use the points now under the cursor
- */
- gp_brush_grab_stroke_init(gso, gps);
- changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_grab_store_points);
- }
- else {
- /* Apply effect to the stored points */
- gp_brush_grab_apply_cached(gso, gps, diff_mat);
- changed |= true;
+ if (gps->runtime.gps_orig != NULL) {
+ if (gso->first) {
+ /* First time this brush stroke is being applied:
+ * 1) Prepare data buffers (init/clear) for this stroke
+ * 2) Use the points now under the cursor
+ */
+ gp_brush_grab_stroke_init(gso, gps->runtime.gps_orig);
+ changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_grab_store_points);
+ }
+ else {
+ /* Apply effect to the stored points */
+ gp_brush_grab_apply_cached(gso, gps->runtime.gps_orig, diff_mat);
+ changed |= true;
+ }
}
break;
}
@@ -1637,10 +1774,7 @@ static bool gpsculpt_brush_do_frame(
break;
}
/* Triangulation must be calculated if changed */
- if (changed) {
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
- gps->tot_triangles = 0;
- }
+ gp_recalc_geometry(gps);
}
return changed;
@@ -1652,6 +1786,7 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
ToolSettings *ts = CTX_data_tool_settings(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Object *obact = gso->object;
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, obact);
bGPdata *gpd = gso->gpd;
bool changed = false;
@@ -1661,6 +1796,7 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
case GP_SCULPT_TYPE_PUSH: /* Push points */
{
/* calculate amount of displacement to apply */
+ gso->rot_eval = 0.0f;
gp_brush_grab_calc_dvec(gso);
break;
}
@@ -1676,6 +1812,7 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
case GP_SCULPT_TYPE_RANDOMIZE: /* Random jitter */
{
/* compute the displacement vector for the cursor (in data space) */
+ gso->rot_eval = 0.0f;
gp_brush_grab_calc_dvec(gso);
break;
}
@@ -1690,6 +1827,12 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
if (gpl->actframe == NULL) {
continue;
}
+ /* Get evaluated frames array data */
+ int idx_eval = BLI_findindex(&gpd->layers, gpl);
+ bGPDframe *gpf_eval = &ob_eval->runtime.gpencil_evaluated_frames[idx_eval];
+ if (gpf_eval == NULL) {
+ continue;
+ }
/* calculate difference matrix */
float diff_mat[4][4];
@@ -1720,14 +1863,15 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
}
/* affect strokes in this frame */
- changed |= gpsculpt_brush_do_frame(C, gso, gpl, gpf, diff_mat);
+ changed |= gpsculpt_brush_do_frame(
+ C, gso, gpl, (gpf == gpl->actframe) ? gpf_eval : gpf, diff_mat);
}
}
}
else {
/* Apply to active frame's strokes */
gso->mf_falloff = 1.0f;
- changed |= gpsculpt_brush_do_frame(C, gso, gpl, gpl->actframe, diff_mat);
+ changed |= gpsculpt_brush_do_frame(C, gso, gpl, gpf_eval, diff_mat);
}
}
CTX_DATA_END;
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 696c98c6646..c22e3bda0b1 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -105,7 +105,7 @@ static bool gp_data_add_poll(bContext *C)
/* add new datablock - wrapper around API */
static int gp_data_add_exec(bContext *C, wmOperator *op)
{
- PointerRNA gpd_owner = {{NULL}};
+ PointerRNA gpd_owner = {NULL};
bGPdata **gpd_ptr = ED_gpencil_data_get_pointers(C, &gpd_owner);
bool is_annotation = ED_gpencil_data_owner_is_annotation(&gpd_owner);
@@ -231,7 +231,7 @@ void GPENCIL_OT_data_unlink(wmOperatorType *ot)
/* add new layer - wrapper around API */
static int gp_layer_add_exec(bContext *C, wmOperator *op)
{
- PointerRNA gpd_owner = {{NULL}};
+ PointerRNA gpd_owner = {NULL};
bGPdata **gpd_ptr = ED_gpencil_data_get_pointers(C, &gpd_owner);
bool is_annotation = ED_gpencil_data_owner_is_annotation(&gpd_owner);
@@ -2886,7 +2886,7 @@ static int gpencil_color_select_exec(bContext *C, wmOperator *op)
CTX_DATA_END;
/* copy on write tag is needed, or else no refresh happens */
- DEG_id_tag_update(&gpd->id, ID_RECALC_COPY_ON_WRITE);
+ DEG_id_tag_update(&gpd->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
/* notifiers */
WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index c6d0d6e3ce2..9fd1d031bb1 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -58,6 +58,7 @@
#include "BKE_paint.h"
#include "BKE_report.h"
#include "BKE_workspace.h"
+#include "BKE_scene.h"
#include "UI_interface.h"
#include "UI_resources.h"
@@ -76,6 +77,7 @@
#include "ED_gpencil.h"
#include "ED_object.h"
#include "ED_screen.h"
+#include "ED_transform_snap_object_context.h"
#include "ED_view3d.h"
#include "ED_select_utils.h"
#include "ED_space_api.h"
@@ -220,6 +222,17 @@ void GPENCIL_OT_editmode_toggle(wmOperatorType *ot)
}
/* set select mode */
+static bool gpencil_selectmode_toggle_poll(bContext *C)
+{
+ /* edit only supported with grease pencil objects */
+ Object *ob = CTX_data_active_object(C);
+ if ((ob == NULL) || (ob->type != OB_GPENCIL) || (ob->mode != OB_MODE_EDIT_GPENCIL)) {
+ return false;
+ }
+
+ return ED_operator_view3d_active(C);
+}
+
static int gpencil_selectmode_toggle_exec(bContext *C, wmOperator *op)
{
Scene *scene = CTX_data_scene(C);
@@ -227,7 +240,7 @@ static int gpencil_selectmode_toggle_exec(bContext *C, wmOperator *op)
const int mode = RNA_int_get(op->ptr, "mode");
/* Just set mode */
- ts->gpencil_selectmode = mode;
+ ts->gpencil_selectmode_edit = mode;
WM_main_add_notifier(NC_SCENE | ND_TOOLSETTINGS, NULL);
DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE);
@@ -246,7 +259,7 @@ void GPENCIL_OT_selectmode_toggle(wmOperatorType *ot)
/* callbacks */
ot->exec = gpencil_selectmode_toggle_exec;
- ot->poll = gp_strokes_edit3d_poll;
+ ot->poll = gpencil_selectmode_toggle_poll;
/* flags */
ot->flag = OPTYPE_UNDO | OPTYPE_REGISTER;
@@ -1810,238 +1823,208 @@ static int gp_delete_selected_strokes(bContext *C)
static int gp_dissolve_selected_points(bContext *C, eGP_DissolveMode mode)
{
Object *ob = CTX_data_active_object(C);
- bGPdata *gpd = ED_gpencil_data_get_active(C);
- const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
+ bGPdata *gpd = (bGPdata *)ob->data;
bool changed = false;
int first = 0;
int last = 0;
- CTX_DATA_BEGIN (C, bGPDlayer *, gpl, editable_gpencil_layers) {
- bGPDframe *init_gpf = (is_multiedit) ? gpl->frames.first : gpl->actframe;
+ GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
+ /* the stroke must have at least one point selected for any operator */
+ if (gps->flag & GP_STROKE_SELECT) {
+ bGPDspoint *pt;
+ MDeformVert *dvert = NULL;
+ int i;
- for (bGPDframe *gpf = init_gpf; gpf; gpf = gpf->next) {
- if ((gpf == gpl->actframe) || ((gpf->flag & GP_FRAME_SELECT) && (is_multiedit))) {
+ int tot = gps->totpoints; /* number of points in new buffer */
- bGPDstroke *gps, *gpsn;
+ /* first pass: count points to remove */
+ switch (mode) {
+ case GP_DISSOLVE_POINTS:
+ /* Count how many points are selected (i.e. how many to remove) */
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->flag & GP_SPOINT_SELECT) {
+ /* selected point - one of the points to remove */
+ tot--;
+ }
+ }
+ break;
+ case GP_DISSOLVE_BETWEEN:
+ /* need to find first and last point selected */
+ first = -1;
+ last = 0;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->flag & GP_SPOINT_SELECT) {
+ if (first < 0) {
+ first = i;
+ }
+ last = i;
+ }
+ }
+ /* count unselected points in the range */
+ for (i = first, pt = gps->points + first; i < last; i++, pt++) {
+ if ((pt->flag & GP_SPOINT_SELECT) == 0) {
+ tot--;
+ }
+ }
+ break;
+ case GP_DISSOLVE_UNSELECT:
+ /* count number of unselected points */
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if ((pt->flag & GP_SPOINT_SELECT) == 0) {
+ tot--;
+ }
+ }
+ break;
+ default:
+ return false;
+ break;
+ }
- if (gpf == NULL) {
- continue;
+ /* if no points are left, we simply delete the entire stroke */
+ if (tot <= 0) {
+ /* remove the entire stroke */
+ if (gps->points) {
+ MEM_freeN(gps->points);
+ }
+ if (gps->dvert) {
+ BKE_gpencil_free_stroke_weights(gps);
+ MEM_freeN(gps->dvert);
}
+ if (gps->triangles) {
+ MEM_freeN(gps->triangles);
+ }
+ BLI_freelinkN(&gpf_->strokes, gps);
+ DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
+ }
+ else {
+ /* just copy all points to keep into a smaller buffer */
+ bGPDspoint *new_points = MEM_callocN(sizeof(bGPDspoint) * tot,
+ "new gp stroke points copy");
+ bGPDspoint *npt = new_points;
- /* simply delete points from selected strokes
- * NOTE: we may still have to remove the stroke if it ends up having no points!
- */
- for (gps = gpf->strokes.first; gps; gps = gpsn) {
- gpsn = gps->next;
+ MDeformVert *new_dvert = NULL;
+ MDeformVert *ndvert = NULL;
- /* skip strokes that are invalid for current view */
- if (ED_gpencil_stroke_can_use(C, gps) == false) {
- continue;
- }
- /* check if the color is editable */
- if (ED_gpencil_stroke_color_use(ob, gpl, gps) == false) {
- continue;
- }
+ if (gps->dvert != NULL) {
+ new_dvert = MEM_callocN(sizeof(MDeformVert) * tot, "new gp stroke weights copy");
+ ndvert = new_dvert;
+ }
- /* the stroke must have at least one point selected for any operator */
- if (gps->flag & GP_STROKE_SELECT) {
- bGPDspoint *pt;
- MDeformVert *dvert = NULL;
- int i;
-
- int tot = gps->totpoints; /* number of points in new buffer */
-
- /* first pass: count points to remove */
- switch (mode) {
- case GP_DISSOLVE_POINTS:
- /* Count how many points are selected (i.e. how many to remove) */
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if (pt->flag & GP_SPOINT_SELECT) {
- /* selected point - one of the points to remove */
- tot--;
- }
- }
- break;
- case GP_DISSOLVE_BETWEEN:
- /* need to find first and last point selected */
- first = -1;
- last = 0;
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if (pt->flag & GP_SPOINT_SELECT) {
- if (first < 0) {
- first = i;
- }
- last = i;
- }
- }
- /* count unselected points in the range */
- for (i = first, pt = gps->points + first; i < last; i++, pt++) {
- if ((pt->flag & GP_SPOINT_SELECT) == 0) {
- tot--;
- }
- }
- break;
- case GP_DISSOLVE_UNSELECT:
- /* count number of unselected points */
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if ((pt->flag & GP_SPOINT_SELECT) == 0) {
- tot--;
- }
+ switch (mode) {
+ case GP_DISSOLVE_POINTS:
+ (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if ((pt->flag & GP_SPOINT_SELECT) == 0) {
+ *npt = *pt;
+ npt++;
+
+ if (gps->dvert != NULL) {
+ *ndvert = *dvert;
+ ndvert->dw = MEM_dupallocN(dvert->dw);
+ ndvert++;
}
- break;
- default:
- return false;
- break;
+ }
+ if (gps->dvert != NULL) {
+ dvert++;
+ }
}
+ break;
+ case GP_DISSOLVE_BETWEEN:
+ /* copy first segment */
+ (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
+ for (i = 0, pt = gps->points; i < first; i++, pt++) {
+ *npt = *pt;
+ npt++;
- /* if no points are left, we simply delete the entire stroke */
- if (tot <= 0) {
- /* remove the entire stroke */
- if (gps->points) {
- MEM_freeN(gps->points);
+ if (gps->dvert != NULL) {
+ *ndvert = *dvert;
+ ndvert->dw = MEM_dupallocN(dvert->dw);
+ ndvert++;
+ dvert++;
}
- if (gps->dvert) {
- BKE_gpencil_free_stroke_weights(gps);
- MEM_freeN(gps->dvert);
+ }
+ /* copy segment (selected points) */
+ (gps->dvert != NULL) ? dvert = gps->dvert + first : NULL;
+ for (i = first, pt = gps->points + first; i < last; i++, pt++) {
+ if (pt->flag & GP_SPOINT_SELECT) {
+ *npt = *pt;
+ npt++;
+
+ if (gps->dvert != NULL) {
+ *ndvert = *dvert;
+ ndvert->dw = MEM_dupallocN(dvert->dw);
+ ndvert++;
+ }
}
- if (gps->triangles) {
- MEM_freeN(gps->triangles);
+ if (gps->dvert != NULL) {
+ dvert++;
}
- BLI_freelinkN(&gpf->strokes, gps);
- DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
}
- else {
- /* just copy all points to keep into a smaller buffer */
- bGPDspoint *new_points = MEM_callocN(sizeof(bGPDspoint) * tot,
- "new gp stroke points copy");
- bGPDspoint *npt = new_points;
-
- MDeformVert *new_dvert = NULL;
- MDeformVert *ndvert = NULL;
+ /* copy last segment */
+ (gps->dvert != NULL) ? dvert = gps->dvert + last : NULL;
+ for (i = last, pt = gps->points + last; i < gps->totpoints; i++, pt++) {
+ *npt = *pt;
+ npt++;
if (gps->dvert != NULL) {
- new_dvert = MEM_callocN(sizeof(MDeformVert) * tot, "new gp stroke weights copy");
- ndvert = new_dvert;
+ *ndvert = *dvert;
+ ndvert->dw = MEM_dupallocN(dvert->dw);
+ ndvert++;
+ dvert++;
}
+ }
- switch (mode) {
- case GP_DISSOLVE_POINTS:
- (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if ((pt->flag & GP_SPOINT_SELECT) == 0) {
- *npt = *pt;
- npt++;
-
- if (gps->dvert != NULL) {
- *ndvert = *dvert;
- ndvert->dw = MEM_dupallocN(dvert->dw);
- ndvert++;
- }
- }
- if (gps->dvert != NULL) {
- dvert++;
- }
- }
- break;
- case GP_DISSOLVE_BETWEEN:
- /* copy first segment */
- (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
- for (i = 0, pt = gps->points; i < first; i++, pt++) {
- *npt = *pt;
- npt++;
-
- if (gps->dvert != NULL) {
- *ndvert = *dvert;
- ndvert->dw = MEM_dupallocN(dvert->dw);
- ndvert++;
- dvert++;
- }
- }
- /* copy segment (selected points) */
- (gps->dvert != NULL) ? dvert = gps->dvert + first : NULL;
- for (i = first, pt = gps->points + first; i < last; i++, pt++) {
- if (pt->flag & GP_SPOINT_SELECT) {
- *npt = *pt;
- npt++;
-
- if (gps->dvert != NULL) {
- *ndvert = *dvert;
- ndvert->dw = MEM_dupallocN(dvert->dw);
- ndvert++;
- }
- }
- if (gps->dvert != NULL) {
- dvert++;
- }
- }
- /* copy last segment */
- (gps->dvert != NULL) ? dvert = gps->dvert + last : NULL;
- for (i = last, pt = gps->points + last; i < gps->totpoints; i++, pt++) {
- *npt = *pt;
- npt++;
-
- if (gps->dvert != NULL) {
- *ndvert = *dvert;
- ndvert->dw = MEM_dupallocN(dvert->dw);
- ndvert++;
- dvert++;
- }
- }
-
- break;
- case GP_DISSOLVE_UNSELECT:
- /* copy any selected point */
- (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if (pt->flag & GP_SPOINT_SELECT) {
- *npt = *pt;
- npt++;
-
- if (gps->dvert != NULL) {
- *ndvert = *dvert;
- ndvert->dw = MEM_dupallocN(dvert->dw);
- ndvert++;
- }
- }
- if (gps->dvert != NULL) {
- dvert++;
- }
- }
- break;
- }
+ break;
+ case GP_DISSOLVE_UNSELECT:
+ /* copy any selected point */
+ (gps->dvert != NULL) ? dvert = gps->dvert : NULL;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->flag & GP_SPOINT_SELECT) {
+ *npt = *pt;
+ npt++;
- /* free the old buffer */
- if (gps->points) {
- MEM_freeN(gps->points);
+ if (gps->dvert != NULL) {
+ *ndvert = *dvert;
+ ndvert->dw = MEM_dupallocN(dvert->dw);
+ ndvert++;
+ }
}
- if (gps->dvert) {
- BKE_gpencil_free_stroke_weights(gps);
- MEM_freeN(gps->dvert);
+ if (gps->dvert != NULL) {
+ dvert++;
}
+ }
+ break;
+ }
- /* save the new buffer */
- gps->points = new_points;
- gps->dvert = new_dvert;
- gps->totpoints = tot;
+ /* free the old buffer */
+ if (gps->points) {
+ MEM_freeN(gps->points);
+ }
+ if (gps->dvert) {
+ BKE_gpencil_free_stroke_weights(gps);
+ MEM_freeN(gps->dvert);
+ }
- /* triangles cache needs to be recalculated */
- gps->flag |= GP_STROKE_RECALC_GEOMETRY;
- gps->tot_triangles = 0;
+ /* save the new buffer */
+ gps->points = new_points;
+ gps->dvert = new_dvert;
+ gps->totpoints = tot;
- /* deselect the stroke, since none of its selected points will still be selected */
- gps->flag &= ~GP_STROKE_SELECT;
- for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- pt->flag &= ~GP_SPOINT_SELECT;
- }
- }
+ /* triangles cache needs to be recalculated */
+ gps->flag |= GP_STROKE_RECALC_GEOMETRY;
+ gps->tot_triangles = 0;
- changed = true;
- }
+ /* deselect the stroke, since none of its selected points will still be selected */
+ gps->flag &= ~GP_STROKE_SELECT;
+ for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ pt->flag &= ~GP_SPOINT_SELECT;
}
}
+
+ changed = true;
}
}
- CTX_DATA_END;
+ GP_EDITABLE_STROKES_END(gpstroke_iter);
if (changed) {
DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
@@ -3361,7 +3344,7 @@ typedef enum eGP_ReprojectModes {
GP_REPROJECT_FRONT = 0,
GP_REPROJECT_SIDE,
GP_REPROJECT_TOP,
- /* On same plane, parallel to viewplane */
+ /* On same plane, parallel to view-plane. */
GP_REPROJECT_VIEW,
/* Reprojected on to the scene geometry */
GP_REPROJECT_SURFACE,
@@ -3373,11 +3356,14 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
{
bGPdata *gpd = ED_gpencil_data_get_active(C);
Scene *scene = CTX_data_scene(C);
+ Main *bmain = CTX_data_main(C);
ToolSettings *ts = CTX_data_tool_settings(C);
Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
Object *ob = CTX_data_active_object(C);
ARegion *ar = CTX_wm_region(C);
RegionView3D *rv3d = ar->regiondata;
+ SnapObjectContext *sctx = NULL;
+ int oldframe = (int)DEG_get_ctime(depsgraph);
GP_SpaceConversion gsc = {NULL};
eGP_ReprojectModes mode = RNA_enum_get(op->ptr, "type");
@@ -3387,28 +3373,33 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
/* init space conversion stuff */
gp_point_conversion_init(C, &gsc);
- /* init autodist for geometry projection */
- if (mode == GP_REPROJECT_SURFACE) {
- view3d_region_operator_needs_opengl(CTX_wm_window(C), gsc.ar);
- ED_view3d_autodist_init(depsgraph, gsc.ar, CTX_wm_view3d(C), 0);
- }
-
- // TODO: For deforming geometry workflow, create new frames?
+ int cfra_prv = INT_MIN;
+ /* init snap context for geometry projection */
+ sctx = ED_transform_snap_object_context_create_view3d(
+ bmain, scene, depsgraph, 0, ar, CTX_wm_view3d(C));
/* Go through each editable + selected stroke, adjusting each of its points one by one... */
GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
if (gps->flag & GP_STROKE_SELECT) {
+
+ /* update frame to get the new location of objects */
+ if ((mode == GP_REPROJECT_SURFACE) && (cfra_prv != gpf_->framenum)) {
+ cfra_prv = gpf_->framenum;
+ CFRA = gpf_->framenum;
+ BKE_scene_graph_update_for_newframe(depsgraph, bmain);
+ }
+
bGPDspoint *pt;
int i;
/* Adjust each point */
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
float xy[2];
- /* 3D to Screenspace */
- /* Note: We can't use gp_point_to_xy() here because that uses ints for the screenspace
- * coordinates, resulting in lost precision, which in turn causes stairstepping
- * artifacts in the final points.
- */
+ /* 3D to Screen-space */
+ /* Note: We can't use gp_point_to_xy() here because that uses ints for the screen-space
+ * coordinates, resulting in lost precision, which in turn causes stair-stepping
+ * artifacts in the final points. */
+
bGPDspoint pt2;
gp_point_to_parent_space(pt, gpstroke_iter.diff_mat, &pt2);
gp_point_to_xy_fl(&gsc, gps, &pt2, &xy[0], &xy[1]);
@@ -3457,26 +3448,34 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
/* apply parent again */
gp_apply_parent_point(depsgraph, ob, gpd, gpl, pt);
}
- /* Project screenspace back to 3D space (from current perspective)
- * so that all points have been treated the same way
- */
+ /* Project screen-space back to 3D space (from current perspective)
+ * so that all points have been treated the same way. */
else if (mode == GP_REPROJECT_VIEW) {
- /* Planar - All on same plane parallel to the viewplane */
+ /* Planar - All on same plane parallel to the view-plane. */
gp_point_xy_to_3d(&gsc, scene, xy, &pt->x);
}
else {
/* Geometry - Snap to surfaces of visible geometry */
- /* XXX: There will be precision loss (possible stairstep artifacts)
- * from this conversion to satisfy the API's */
- const int screen_co[2] = {(int)xy[0], (int)xy[1]};
-
- int depth_margin = 0; // XXX: 4 for strokes, 0 for normal
- float depth;
-
- /* XXX: The proper procedure computes the depths into an array,
- * to have smooth transitions when all else fails... */
- if (ED_view3d_autodist_depth(gsc.ar, screen_co, depth_margin, &depth)) {
- ED_view3d_autodist_simple(gsc.ar, screen_co, &pt->x, 0, &depth);
+ float ray_start[3];
+ float ray_normal[3];
+ /* magic value for initial depth copied from the default
+ * value of Python's Scene.ray_cast function
+ */
+ float depth = 1.70141e+38f;
+ float location[3] = {0.0f, 0.0f, 0.0f};
+ float normal[3] = {0.0f, 0.0f, 0.0f};
+
+ ED_view3d_win_to_ray(ar, xy, &ray_start[0], &ray_normal[0]);
+ if (ED_transform_snap_object_project_ray(sctx,
+ &(const struct SnapObjectParams){
+ .snap_select = SNAP_ALL,
+ },
+ &ray_start[0],
+ &ray_normal[0],
+ &depth,
+ &location[0],
+ &normal[0])) {
+ copy_v3_v3(&pt->x, location);
}
else {
/* Default to planar */
@@ -3493,6 +3492,15 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
}
GP_EDITABLE_STROKES_END(gpstroke_iter);
+ /* return frame state and DB to original state */
+ CFRA = oldframe;
+ BKE_scene_graph_update_for_newframe(depsgraph, bmain);
+
+ if (sctx != NULL) {
+ ED_transform_snap_object_context_destroy(sctx);
+ }
+
+ /* update changed data */
DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
return OPERATOR_FINISHED;
@@ -3578,7 +3586,7 @@ static void gp_smooth_stroke(bContext *C, wmOperator *op)
}
if (smooth_thickness) {
/* thickness need to repeat process several times */
- for (int r2 = 0; r2 < r * 10; r2++) {
+ for (int r2 = 0; r2 < r * 20; r2++) {
BKE_gpencil_smooth_stroke_thickness(gps, i, factor);
}
}
@@ -3877,6 +3885,54 @@ void GPENCIL_OT_stroke_simplify_fixed(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
+/* ** Resample stroke *** */
+static int gp_stroke_sample_exec(bContext *C, wmOperator *op)
+{
+ bGPdata *gpd = ED_gpencil_data_get_active(C);
+ const float length = RNA_float_get(op->ptr, "length");
+
+ /* sanity checks */
+ if (ELEM(NULL, gpd)) {
+ return OPERATOR_CANCELLED;
+ }
+
+ /* Go through each editable + selected stroke */
+ GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
+ if (gps->flag & GP_STROKE_SELECT) {
+ BKE_gpencil_sample_stroke(gps, length, true);
+ }
+ }
+ GP_EDITABLE_STROKES_END(gpstroke_iter);
+
+ /* notifiers */
+ DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
+ WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_stroke_sample(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name = "Sample Stroke";
+ ot->idname = "GPENCIL_OT_stroke_sample";
+ ot->description = "Sample stroke points to predefined segment length";
+
+ /* api callbacks */
+ ot->exec = gp_stroke_sample_exec;
+ ot->poll = gp_active_layer_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ prop = RNA_def_float(ot->srna, "length", 0.1f, 0.0f, 100.0f, "Length", "", 0.0f, 100.0f);
+ /* avoid re-using last var */
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+}
+
/* ******************* Stroke trim ************************** */
static int gp_stroke_trim_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -4034,8 +4090,10 @@ static int gp_stroke_separate_exec(bContext *C, wmOperator *op)
}
/* add duplicate materials */
- ma = give_current_material(
- ob, gps->mat_nr + 1); /* XXX same material can be in multiple slots */
+
+ /* XXX same material can be in multiple slots. */
+ ma = give_current_material(ob, gps->mat_nr + 1);
+
idx = BKE_gpencil_object_material_ensure(bmain, ob_dst, ma);
/* selected points mode */
@@ -4284,7 +4342,7 @@ void GPENCIL_OT_stroke_smooth(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
- prop = RNA_def_int(ot->srna, "repeat", 1, 1, 10, "Repeat", "", 1, 5);
+ prop = RNA_def_int(ot->srna, "repeat", 1, 1, 50, "Repeat", "", 1, 20);
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
RNA_def_float(ot->srna, "factor", 0.5f, 0.0f, 2.0f, "Factor", "", 0.0f, 2.0f);
@@ -4420,7 +4478,7 @@ static int gpencil_cutter_lasso_select(bContext *C,
if ((pt->flag & GP_SPOINT_SELECT) || (pt->flag & GP_SPOINT_TAG)) {
continue;
}
- /* convert point coords to screenspace */
+ /* convert point coords to screen-space */
const bool is_inside = is_inside_fn(gps, pt, &gsc, gpstroke_iter.diff_mat, user_data);
if (is_inside) {
tot_inside++;
@@ -4552,3 +4610,73 @@ bool ED_object_gpencil_exit(struct Main *bmain, Object *ob)
}
return ok;
}
+
+/* ** merge by distance *** */
+static bool gp_merge_by_distance_poll(bContext *C)
+{
+ Object *ob = CTX_data_active_object(C);
+ if ((ob == NULL) || (ob->type != OB_GPENCIL)) {
+ return false;
+ }
+ bGPdata *gpd = (bGPdata *)ob->data;
+ if (gpd == NULL) {
+ return false;
+ }
+
+ bGPDlayer *gpl = BKE_gpencil_layer_getactive(gpd);
+
+ return ((gpl != NULL) && (ob->mode == OB_MODE_EDIT_GPENCIL));
+}
+
+static int gp_merge_by_distance_exec(bContext *C, wmOperator *op)
+{
+ Object *ob = CTX_data_active_object(C);
+ bGPdata *gpd = (bGPdata *)ob->data;
+ const float threshold = RNA_float_get(op->ptr, "threshold");
+ const bool unselected = RNA_boolean_get(op->ptr, "use_unselected");
+
+ /* sanity checks */
+ if (ELEM(NULL, gpd)) {
+ return OPERATOR_CANCELLED;
+ }
+
+ /* Go through each editable selected stroke */
+ GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
+ if (gps->flag & GP_STROKE_SELECT) {
+ BKE_gpencil_merge_distance_stroke(gpf_, gps, threshold, unselected);
+ }
+ }
+ GP_EDITABLE_STROKES_END(gpstroke_iter);
+
+ /* notifiers */
+ DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
+ WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void GPENCIL_OT_stroke_merge_by_distance(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ /* identifiers */
+ ot->name = "Merge by Distance";
+ ot->idname = "GPENCIL_OT_stroke_merge_by_distance";
+ ot->description = "Merge points by distance";
+
+ /* api callbacks */
+ ot->exec = gp_merge_by_distance_exec;
+ ot->poll = gp_merge_by_distance_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ prop = RNA_def_float(ot->srna, "threshold", 0.001f, 0.0f, 100.0f, "Threshold", "", 0.0f, 100.0f);
+ /* avoid re-using last var */
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+
+ prop = RNA_def_boolean(
+ ot->srna, "use_unselected", 0, "Unselected", "Use whole stroke, not only selected points");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+}
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index a8a3c2f9306..c2a9eae272f 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -486,9 +486,11 @@ void GPENCIL_OT_stroke_simplify_fixed(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_separate(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_split(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_smooth(struct wmOperatorType *ot);
+void GPENCIL_OT_stroke_sample(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_merge(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_cutter(struct wmOperatorType *ot);
void GPENCIL_OT_stroke_trim(struct wmOperatorType *ot);
+void GPENCIL_OT_stroke_merge_by_distance(struct wmOperatorType *ot);
void GPENCIL_OT_brush_presets_create(struct wmOperatorType *ot);
@@ -610,7 +612,9 @@ struct GP_EditableStrokes_Iter {
ED_gpencil_parent_location(depsgraph_, obact_, gpd_, gpl, gpstroke_iter.diff_mat); \
invert_m4_m4(gpstroke_iter.inverse_diff_mat, gpstroke_iter.diff_mat); \
/* loop over strokes */ \
- for (bGPDstroke *gps = gpf_->strokes.first; gps; gps = gps->next) { \
+ bGPDstroke *gpsn_; \
+ for (bGPDstroke *gps = gpf_->strokes.first; gps; gps = gpsn_) { \
+ gpsn_ = gps->next; \
/* skip strokes that are invalid for current view */ \
if (ED_gpencil_stroke_can_use(C, gps) == false) \
continue; \
@@ -631,6 +635,64 @@ struct GP_EditableStrokes_Iter {
} \
(void)0
+#define GPENCIL_ANY_SCULPT_MASK(flag) \
+ ((flag & (GP_SCULPT_MASK_SELECTMODE_POINT | GP_SCULPT_MASK_SELECTMODE_STROKE | \
+ GP_SCULPT_MASK_SELECTMODE_SEGMENT)))
+
+/**
+ * Iterate over all editable strokes using evaluated data in the current context,
+ * stopping on each usable layer + stroke pair (i.e. gpl and gps)
+ * to perform some operations on the stroke.
+ *
+ * \param gpl: The identifier to use for the layer of the stroke being processed.
+ * Choose a suitable value to avoid name clashes.
+ * \param gps: The identifier to use for current stroke being processed.
+ * Choose a suitable value to avoid name clashes.
+ */
+#define GP_EVALUATED_STROKES_BEGIN(gpstroke_iter, C, gpl, gps) \
+ { \
+ struct GP_EditableStrokes_Iter gpstroke_iter = {{{0}}}; \
+ Depsgraph *depsgraph_ = CTX_data_ensure_evaluated_depsgraph(C); \
+ Object *obact_ = CTX_data_active_object(C); \
+ Object *obeval_ = DEG_get_evaluated_object(depsgraph_, obact_); \
+ bGPdata *gpd_ = CTX_data_gpencil_data(C); \
+ const bool is_multiedit_ = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd_); \
+ int idx_eval = 0; \
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) { \
+ if (gpencil_layer_is_editable(gpl)) { \
+ bGPDframe *init_gpf_ = gpl->actframe; \
+ if (is_multiedit_) { \
+ init_gpf_ = gpl->frames.first; \
+ } \
+ for (bGPDframe *gpf_ = init_gpf_; gpf_; gpf_ = gpf_->next) { \
+ if ((gpf_ == gpl->actframe) || ((gpf_->flag & GP_FRAME_SELECT) && is_multiedit_)) { \
+ ED_gpencil_parent_location(depsgraph_, obact_, gpd_, gpl, gpstroke_iter.diff_mat); \
+ invert_m4_m4(gpstroke_iter.inverse_diff_mat, gpstroke_iter.diff_mat); \
+ /* get evaluated frame with modifiers applied */ \
+ bGPDframe *gpf_eval_ = &obeval_->runtime.gpencil_evaluated_frames[idx_eval]; \
+ /* loop over strokes */ \
+ for (bGPDstroke *gps = gpf_eval_->strokes.first; gps; gps = gps->next) { \
+ /* skip strokes that are invalid for current view */ \
+ if (ED_gpencil_stroke_can_use(C, gps) == false) \
+ continue; \
+ /* check if the color is editable */ \
+ if (ED_gpencil_stroke_color_use(obact_, gpl, gps) == false) \
+ continue; \
+ /* ... Do Stuff With Strokes ... */
+
+#define GP_EVALUATED_STROKES_END(gpstroke_iter) \
+ } \
+ } \
+ if (!is_multiedit_) { \
+ break; \
+ } \
+ } \
+ } \
+ idx_eval++; \
+ } \
+ } \
+ (void)0
+
/* ****************************************************** */
#endif /* __GPENCIL_INTERN_H__ */
diff --git a/source/blender/editors/gpencil/gpencil_interpolate.c b/source/blender/editors/gpencil/gpencil_interpolate.c
index 698e508a2a5..86de9a75a56 100644
--- a/source/blender/editors/gpencil/gpencil_interpolate.c
+++ b/source/blender/editors/gpencil/gpencil_interpolate.c
@@ -1003,7 +1003,7 @@ static int gpencil_interpolate_seq_exec(bContext *C, wmOperator *op)
if (ipo_settings->type == GP_IPO_CURVEMAP) {
/* custom curvemap */
if (ipo_settings->custom_ipo) {
- factor = curvemapping_evaluateF(ipo_settings->custom_ipo, 0, factor);
+ factor = BKE_curvemapping_evaluateF(ipo_settings->custom_ipo, 0, factor);
}
else {
BKE_report(op->reports, RPT_ERROR, "Custom interpolation curve does not exist");
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index d259bb9183c..acdf5c2be4f 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -81,12 +81,14 @@ static bool gp_stroke_paintmode_poll_with_tool(bContext *C, const char gpencil_t
{
/* TODO: limit this to mode, but review 2D editors */
bGPdata *gpd = CTX_data_gpencil_data(C);
- if (!gpd)
+ if (!gpd) {
return false;
+ }
ToolSettings *ts = CTX_data_tool_settings(C);
- if (!ts || !ts->gp_paint)
+ if (!ts || !ts->gp_paint) {
return false;
+ }
Brush *brush = BKE_paint_brush(&ts->gp_paint->paint);
return ((gpd->flag & GP_DATA_STROKE_PAINTMODE) && (brush && brush->gpencil_settings) &&
@@ -312,9 +314,11 @@ void ED_operatortypes_gpencil(void)
WM_operatortype_append(GPENCIL_OT_stroke_separate);
WM_operatortype_append(GPENCIL_OT_stroke_split);
WM_operatortype_append(GPENCIL_OT_stroke_smooth);
+ WM_operatortype_append(GPENCIL_OT_stroke_sample);
WM_operatortype_append(GPENCIL_OT_stroke_merge);
WM_operatortype_append(GPENCIL_OT_stroke_cutter);
WM_operatortype_append(GPENCIL_OT_stroke_trim);
+ WM_operatortype_append(GPENCIL_OT_stroke_merge_by_distance);
WM_operatortype_append(GPENCIL_OT_brush_presets_create);
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index a271274fa71..900883bd0af 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -423,7 +423,7 @@ static void gp_stroke_convertcoords(tGPsdata *p, const float mval[2], float out[
/* add small offset to keep stroke over the surface */
if ((depth) && (gpd->zdepth_offset > 0.0f) && (*p->align_flag & GP_PROJECT_DEPTH_VIEW)) {
- *depth *= (1.0f - gpd->zdepth_offset);
+ *depth *= (1.0f - (gpd->zdepth_offset / 1000.0f));
}
int mval_i[2];
@@ -476,7 +476,7 @@ static void gp_brush_jitter(bGPdata *gpd,
{
float tmp_pressure = pressure;
if (brush->gpencil_settings->draw_jitter > 0.0f) {
- float curvef = curvemapping_evaluateF(brush->gpencil_settings->curve_jitter, 0, pressure);
+ float curvef = BKE_curvemapping_evaluateF(brush->gpencil_settings->curve_jitter, 0, pressure);
tmp_pressure = curvef * brush->gpencil_settings->draw_sensitivity;
}
/* exponential value */
@@ -563,7 +563,7 @@ static void gp_brush_angle(bGPdata *gpd, Brush *brush, tGPspoint *pt, const floa
static void gp_smooth_buffer(tGPsdata *p, float inf, int idx)
{
bGPdata *gpd = p->gpd;
- short num_points = gpd->runtime.sbuffer_used;
+ const short num_points = gpd->runtime.sbuffer_used;
/* Do nothing if not enough points to smooth out */
if ((num_points < 3) || (idx < 3) || (inf == 0.0f)) {
@@ -571,10 +571,7 @@ static void gp_smooth_buffer(tGPsdata *p, float inf, int idx)
}
tGPspoint *points = (tGPspoint *)gpd->runtime.sbuffer;
- float steps = 4.0f;
- if (idx < 4) {
- steps--;
- }
+ const float steps = (idx < 4) ? 3.0f : 4.0f;
tGPspoint *pta = idx >= 4 ? &points[idx - 4] : NULL;
tGPspoint *ptb = idx >= 3 ? &points[idx - 3] : NULL;
@@ -583,29 +580,36 @@ static void gp_smooth_buffer(tGPsdata *p, float inf, int idx)
float sco[2] = {0.0f};
float a[2], b[2], c[2], d[2];
+ float pressure = 0.0f;
const float average_fac = 1.0f / steps;
/* Compute smoothed coordinate by taking the ones nearby */
if (pta) {
copy_v2_v2(a, &pta->x);
madd_v2_v2fl(sco, a, average_fac);
+ pressure += pta->pressure * average_fac;
}
if (ptb) {
copy_v2_v2(b, &ptb->x);
madd_v2_v2fl(sco, b, average_fac);
+ pressure += ptb->pressure * average_fac;
}
if (ptc) {
copy_v2_v2(c, &ptc->x);
madd_v2_v2fl(sco, c, average_fac);
+ pressure += ptc->pressure * average_fac;
}
if (ptd) {
copy_v2_v2(d, &ptd->x);
madd_v2_v2fl(sco, d, average_fac);
+ pressure += ptd->pressure * average_fac;
}
- /* Based on influence factor, blend between original and optimal smoothed coordinate */
+ /* Based on influence factor, blend between original and optimal smoothed coordinate. */
interp_v2_v2v2(c, c, sco, inf);
copy_v2_v2(&ptc->x, c);
+ /* Interpolate pressure. */
+ ptc->pressure = interpf(ptc->pressure, pressure, inf);
}
/* add current stroke-point to buffer (returns whether point was successfully added) */
@@ -671,7 +675,7 @@ static short gp_stroke_addpoint(tGPsdata *p, const float mval[2], float pressure
/* store settings */
/* pressure */
if (brush->gpencil_settings->flag & GP_BRUSH_USE_PRESSURE) {
- float curvef = curvemapping_evaluateF(
+ float curvef = BKE_curvemapping_evaluateF(
brush->gpencil_settings->curve_sensitivity, 0, pressure);
pt->pressure = curvef * brush->gpencil_settings->draw_sensitivity;
}
@@ -695,7 +699,7 @@ static short gp_stroke_addpoint(tGPsdata *p, const float mval[2], float pressure
/* apply randomness to pressure */
if ((brush->gpencil_settings->flag & GP_BRUSH_GROUP_RANDOM) &&
(brush->gpencil_settings->draw_random_press > 0.0f)) {
- float curvef = curvemapping_evaluateF(
+ float curvef = BKE_curvemapping_evaluateF(
brush->gpencil_settings->curve_sensitivity, 0, pressure);
float tmp_pressure = curvef * brush->gpencil_settings->draw_sensitivity;
if (BLI_rng_get_float(p->rng) > 0.5f) {
@@ -731,7 +735,8 @@ static short gp_stroke_addpoint(tGPsdata *p, const float mval[2], float pressure
/* color strength */
if (brush->gpencil_settings->flag & GP_BRUSH_USE_STENGTH_PRESSURE) {
- float curvef = curvemapping_evaluateF(brush->gpencil_settings->curve_strength, 0, pressure);
+ float curvef = BKE_curvemapping_evaluateF(
+ brush->gpencil_settings->curve_strength, 0, pressure);
float tmp_pressure = curvef * brush->gpencil_settings->draw_sensitivity;
pt->strength = tmp_pressure * brush->gpencil_settings->draw_strength;
@@ -1809,9 +1814,9 @@ static void gp_init_drawing_brush(bContext *C, tGPsdata *p)
changed = true;
}
/* be sure curves are initializated */
- curvemapping_initialize(paint->brush->gpencil_settings->curve_sensitivity);
- curvemapping_initialize(paint->brush->gpencil_settings->curve_strength);
- curvemapping_initialize(paint->brush->gpencil_settings->curve_jitter);
+ BKE_curvemapping_initialize(paint->brush->gpencil_settings->curve_sensitivity);
+ BKE_curvemapping_initialize(paint->brush->gpencil_settings->curve_strength);
+ BKE_curvemapping_initialize(paint->brush->gpencil_settings->curve_jitter);
/* assign to temp tGPsdata */
p->brush = paint->brush;
@@ -2127,15 +2132,6 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Deps
/* Ensure this gets set... */
p->gpf = p->gpl->actframe;
- /* Restrict eraser to only affecting selected strokes, if the "selection mask" is on
- * (though this is only available in editmode)
- */
- if (p->gpd->flag & GP_DATA_STROKE_EDITMODE) {
- if (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) {
- p->flags |= GP_PAINTFLAG_SELECTMASK;
- }
- }
-
if (has_layer_to_erase == false) {
p->status = GP_STATUS_ERROR;
return;
@@ -3459,12 +3455,18 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
/* We don't pass on key events, GP is used with key-modifiers -
* prevents Dkey to insert drivers. */
if (ISKEYBOARD(event->type)) {
- if (ELEM(event->type, LEFTARROWKEY, DOWNARROWKEY, RIGHTARROWKEY, UPARROWKEY, ZKEY)) {
+ if (ELEM(event->type, LEFTARROWKEY, DOWNARROWKEY, RIGHTARROWKEY, UPARROWKEY)) {
/* allow some keys:
* - for frame changing [#33412]
* - for undo (during sketching sessions)
*/
}
+ else if (event->type == ZKEY) {
+ if (event->ctrl) {
+ p->status = GP_STATUS_DONE;
+ estate = OPERATOR_FINISHED;
+ }
+ }
else if (ELEM(event->type, PAD0, PAD1, PAD2, PAD3, PAD4, PAD5, PAD6, PAD7, PAD8, PAD9)) {
/* allow numpad keys so that camera/view manipulations can still take place
* - PAD0 in particular is really important for Grease Pencil drawing,
@@ -3622,11 +3624,9 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
}
else if (p->ar) {
- rcti region_rect;
-
/* Perform bounds check using */
- ED_region_visible_rect(p->ar, &region_rect);
- in_bounds = BLI_rcti_isect_pt_v(&region_rect, event->mval);
+ const rcti *region_rect = ED_region_visible_rect(p->ar);
+ in_bounds = BLI_rcti_isect_pt_v(region_rect, event->mval);
}
else {
/* No region */
diff --git a/source/blender/editors/gpencil/gpencil_primitive.c b/source/blender/editors/gpencil/gpencil_primitive.c
index bdc65e7172a..e4b2e5540ea 100644
--- a/source/blender/editors/gpencil/gpencil_primitive.c
+++ b/source/blender/editors/gpencil/gpencil_primitive.c
@@ -704,13 +704,13 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
gp_session_validatebuffer(tgpi);
gp_init_colors(tgpi);
if (gset->flag & GP_SCULPT_SETT_FLAG_PRIMITIVE_CURVE) {
- curvemapping_initialize(ts->gp_sculpt.cur_primitive);
+ BKE_curvemapping_initialize(ts->gp_sculpt.cur_primitive);
}
if (tgpi->brush->gpencil_settings->flag & GP_BRUSH_USE_JITTER_PRESSURE) {
- curvemapping_initialize(tgpi->brush->gpencil_settings->curve_jitter);
+ BKE_curvemapping_initialize(tgpi->brush->gpencil_settings->curve_jitter);
}
if (tgpi->brush->gpencil_settings->flag & GP_BRUSH_USE_STENGTH_PRESSURE) {
- curvemapping_initialize(tgpi->brush->gpencil_settings->curve_strength);
+ BKE_curvemapping_initialize(tgpi->brush->gpencil_settings->curve_strength);
}
/* get an array of depths, far depths are blended */
@@ -834,7 +834,7 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
/* normalize value to evaluate curve */
if (gset->flag & GP_SCULPT_SETT_FLAG_PRIMITIVE_CURVE) {
float value = (float)i / (gps->totpoints - 1);
- curve_pressure = curvemapping_evaluateF(gset->cur_primitive, 0, value);
+ curve_pressure = BKE_curvemapping_evaluateF(gset->cur_primitive, 0, value);
pressure = curve_pressure;
}
@@ -844,7 +844,8 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
float jitter;
if (brush->gpencil_settings->flag & GP_BRUSH_USE_JITTER_PRESSURE) {
- jitter = curvemapping_evaluateF(brush->gpencil_settings->curve_jitter, 0, curve_pressure);
+ jitter = BKE_curvemapping_evaluateF(
+ brush->gpencil_settings->curve_jitter, 0, curve_pressure);
jitter *= brush->gpencil_settings->draw_sensitivity;
}
else {
@@ -890,7 +891,7 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
/* color strength */
if (brush->gpencil_settings->flag & GP_BRUSH_USE_STENGTH_PRESSURE) {
- float curvef = curvemapping_evaluateF(
+ float curvef = BKE_curvemapping_evaluateF(
brush->gpencil_settings->curve_strength, 0, curve_pressure);
strength *= curvef * brush->gpencil_settings->draw_sensitivity;
strength *= brush->gpencil_settings->draw_strength;
@@ -958,7 +959,7 @@ static void gp_primitive_update_strokes(bContext *C, tGPDprimitive *tgpi)
/* add small offset to keep stroke over the surface */
if ((depth_arr) && (gpd->zdepth_offset > 0.0f)) {
- depth_arr[i] *= (1.0f - gpd->zdepth_offset);
+ depth_arr[i] *= (1.0f - (gpd->zdepth_offset / 1000.0f));
}
/* convert screen-coordinates to 3D coordinates */
@@ -1127,7 +1128,12 @@ static void gpencil_primitive_init(bContext *C, wmOperator *op)
if ((paint->brush == NULL) || (paint->brush->gpencil_settings == NULL)) {
BKE_brush_gpencil_presets(C);
}
- tgpi->brush = paint->brush;
+
+ /* Set Draw brush. */
+ Brush *brush = BKE_paint_toolslots_brush_get(paint, 0);
+ BKE_brush_tool_set(brush, paint, 0);
+ BKE_paint_brush_set(paint, brush);
+ tgpi->brush = brush;
/* control points */
tgpi->gpd->runtime.cp_points = MEM_callocN(sizeof(bGPDcontrolpoint) * MAX_CP,
diff --git a/source/blender/editors/gpencil/gpencil_select.c b/source/blender/editors/gpencil/gpencil_select.c
index 5a962809954..f4484624d5a 100644
--- a/source/blender/editors/gpencil/gpencil_select.c
+++ b/source/blender/editors/gpencil/gpencil_select.c
@@ -67,10 +67,34 @@
/** \name Shared Utilities
* \{ */
+/* Convert sculpt mask mode to Select mode */
+static int gpencil_select_mode_from_sculpt(eGP_Sculpt_SelectMaskFlag mode)
+{
+ if (mode & GP_SCULPT_MASK_SELECTMODE_POINT) {
+ return GP_SELECTMODE_POINT;
+ }
+ else if (mode & GP_SCULPT_MASK_SELECTMODE_STROKE) {
+ return GP_SELECTMODE_STROKE;
+ }
+ else if (mode & GP_SCULPT_MASK_SELECTMODE_SEGMENT) {
+ return GP_SELECTMODE_SEGMENT;
+ }
+ else {
+ return GP_SELECTMODE_POINT;
+ }
+}
+
static bool gpencil_select_poll(bContext *C)
{
bGPdata *gpd = ED_gpencil_data_get_active(C);
+ if (GPENCIL_SCULPT_MODE(gpd)) {
+ ToolSettings *ts = CTX_data_tool_settings(C);
+ if (!(GPENCIL_ANY_SCULPT_MASK(ts->gpencil_selectmode_sculpt))) {
+ return false;
+ }
+ }
+
/* we just need some visible strokes, and to be in editmode or other modes only to catch event */
if (GPENCIL_ANY_MODE(gpd)) {
/* TODO: include a check for visible strokes? */
@@ -87,6 +111,19 @@ static bool gpencil_select_poll(bContext *C)
/* -------------------------------------------------------------------- */
/** \name Select All Operator
* \{ */
+static bool gpencil_select_all_poll(bContext *C)
+{
+ bGPdata *gpd = ED_gpencil_data_get_active(C);
+
+ /* we just need some visible strokes, and to be in editmode or other modes only to catch event */
+ if (GPENCIL_ANY_MODE(gpd)) {
+ if (gpd->layers.first) {
+ return true;
+ }
+ }
+
+ return false;
+}
static int gpencil_select_all_exec(bContext *C, wmOperator *op)
{
@@ -103,6 +140,14 @@ static int gpencil_select_all_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
+ /* For sculpt mode, if mask is disable, only allows deselect */
+ if (GPENCIL_SCULPT_MODE(gpd)) {
+ ToolSettings *ts = CTX_data_tool_settings(C);
+ if ((!(GPENCIL_ANY_SCULPT_MASK(ts->gpencil_selectmode_sculpt))) && (action != SEL_DESELECT)) {
+ return OPERATOR_CANCELLED;
+ }
+ }
+
ED_gpencil_select_toggle_all(C, action);
/* updates */
@@ -125,7 +170,7 @@ void GPENCIL_OT_select_all(wmOperatorType *ot)
/* callbacks */
ot->exec = gpencil_select_all_exec;
- ot->poll = gpencil_select_poll;
+ ot->poll = gpencil_select_all_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -801,6 +846,7 @@ static bool gp_stroke_do_circle_sel(bGPDlayer *gpl,
{
bGPDspoint *pt1 = NULL;
bGPDspoint *pt2 = NULL;
+ bGPDstroke *gps_orig = gps->runtime.gps_orig;
int x0 = 0, y0 = 0, x1 = 0, y1 = 0;
int i;
bool changed = false;
@@ -816,12 +862,12 @@ static bool gp_stroke_do_circle_sel(bGPDlayer *gpl,
if (((x0 - mx) * (x0 - mx) + (y0 - my) * (y0 - my)) <= radius * radius) {
/* change selection */
if (select) {
- gps->points->flag |= GP_SPOINT_SELECT;
- gps->flag |= GP_STROKE_SELECT;
+ gps_orig->points->flag |= GP_SPOINT_SELECT;
+ gps_orig->flag |= GP_STROKE_SELECT;
}
else {
- gps->points->flag &= ~GP_SPOINT_SELECT;
- gps->flag &= ~GP_STROKE_SELECT;
+ gps_orig->points->flag &= ~GP_SPOINT_SELECT;
+ gps_orig->flag &= ~GP_STROKE_SELECT;
}
return true;
@@ -861,15 +907,21 @@ static bool gp_stroke_do_circle_sel(bGPDlayer *gpl,
*/
hit = true;
if (select) {
- pt1->flag |= GP_SPOINT_SELECT;
- pt2->flag |= GP_SPOINT_SELECT;
-
+ if (pt1->runtime.pt_orig != NULL) {
+ pt1->runtime.pt_orig->flag |= GP_SPOINT_SELECT;
+ }
+ if (pt2->runtime.pt_orig != NULL) {
+ pt2->runtime.pt_orig->flag |= GP_SPOINT_SELECT;
+ }
changed = true;
}
else {
- pt1->flag &= ~GP_SPOINT_SELECT;
- pt2->flag &= ~GP_SPOINT_SELECT;
-
+ if (pt1->runtime.pt_orig != NULL) {
+ pt1->runtime.pt_orig->flag &= ~GP_SPOINT_SELECT;
+ }
+ if (pt2->runtime.pt_orig != NULL) {
+ pt2->runtime.pt_orig->flag &= ~GP_SPOINT_SELECT;
+ }
changed = true;
}
}
@@ -883,24 +935,28 @@ static bool gp_stroke_do_circle_sel(bGPDlayer *gpl,
/* if stroke mode expand selection */
if ((hit) && (selectmode == GP_SELECTMODE_STROKE)) {
for (i = 0, pt1 = gps->points; i < gps->totpoints; i++, pt1++) {
- if (select) {
- pt1->flag |= GP_SPOINT_SELECT;
- }
- else {
- pt1->flag &= ~GP_SPOINT_SELECT;
+ if (pt1->runtime.pt_orig != NULL) {
+ if (select) {
+ pt1->runtime.pt_orig->flag |= GP_SPOINT_SELECT;
+ }
+ else {
+ pt1->runtime.pt_orig->flag &= ~GP_SPOINT_SELECT;
+ }
}
}
}
/* expand selection to segment */
- if ((hit) && (selectmode == GP_SELECTMODE_SEGMENT) && (select)) {
+ if ((hit) && (selectmode == GP_SELECTMODE_SEGMENT) && (select) &&
+ (pt1->runtime.pt_orig != NULL)) {
float r_hita[3], r_hitb[3];
bool hit_select = (bool)(pt1->flag & GP_SPOINT_SELECT);
- ED_gpencil_select_stroke_segment(gpl, gps, pt1, hit_select, false, scale, r_hita, r_hitb);
+ ED_gpencil_select_stroke_segment(
+ gpl, gps_orig, pt1->runtime.pt_orig, hit_select, false, scale, r_hita, r_hitb);
}
/* Ensure that stroke selection is in sync with its points */
- BKE_gpencil_stroke_sync_selection(gps);
+ BKE_gpencil_stroke_sync_selection(gps_orig);
}
return changed;
@@ -910,7 +966,11 @@ static int gpencil_circle_select_exec(bContext *C, wmOperator *op)
{
bGPdata *gpd = ED_gpencil_data_get_active(C);
ToolSettings *ts = CTX_data_tool_settings(C);
- const int selectmode = ts->gpencil_selectmode;
+ Object *ob = CTX_data_active_object(C);
+
+ const int selectmode = (ob && ob->mode == OB_MODE_SCULPT_GPENCIL) ?
+ gpencil_select_mode_from_sculpt(ts->gpencil_selectmode_sculpt) :
+ ts->gpencil_selectmode_edit;
const float scale = ts->gp_sculpt.isect_threshold;
/* if not edit/sculpt mode, the event is catched but not processed */
@@ -954,11 +1014,12 @@ static int gpencil_circle_select_exec(bContext *C, wmOperator *op)
rect.ymax = my + radius;
/* find visible strokes, and select if hit */
- GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
+ GP_EVALUATED_STROKES_BEGIN(gpstroke_iter, C, gpl, gps)
+ {
changed |= gp_stroke_do_circle_sel(
gpl, gps, &gsc, mx, my, radius, select, &rect, gpstroke_iter.diff_mat, selectmode, scale);
}
- GP_EDITABLE_STROKES_END(gpstroke_iter);
+ GP_EVALUATED_STROKES_END(gpstroke_iter);
/* updates */
if (changed) {
@@ -1016,12 +1077,18 @@ static int gpencil_generic_select_exec(bContext *C,
GPencilTestFn is_inside_fn,
void *user_data)
{
+ Object *ob = CTX_data_active_object(C);
bGPdata *gpd = ED_gpencil_data_get_active(C);
ToolSettings *ts = CTX_data_tool_settings(C);
ScrArea *sa = CTX_wm_area(C);
- const bool strokemode = ((ts->gpencil_selectmode == GP_SELECTMODE_STROKE) &&
+
+ const short selectmode = (ob && ob->mode == OB_MODE_SCULPT_GPENCIL) ?
+ gpencil_select_mode_from_sculpt(ts->gpencil_selectmode_sculpt) :
+ ts->gpencil_selectmode_edit;
+
+ const bool strokemode = ((selectmode == GP_SELECTMODE_STROKE) &&
((gpd->flag & GP_DATA_STROKE_PAINTMODE) == 0));
- const bool segmentmode = ((ts->gpencil_selectmode == GP_SELECTMODE_SEGMENT) &&
+ const bool segmentmode = ((selectmode == GP_SELECTMODE_SEGMENT) &&
((gpd->flag & GP_DATA_STROKE_PAINTMODE) == 0));
const eSelectOp sel_op = RNA_enum_get(op->ptr, "mode");
const float scale = ts->gp_sculpt.isect_threshold;
@@ -1056,28 +1123,38 @@ static int gpencil_generic_select_exec(bContext *C,
}
/* select/deselect points */
- GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
+ GP_EVALUATED_STROKES_BEGIN(gpstroke_iter, C, gpl, gps)
+ {
bGPDspoint *pt;
int i;
bool hit = false;
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->runtime.pt_orig == NULL) {
+ continue;
+ }
+
/* convert point coords to screenspace */
const bool is_inside = is_inside_fn(gps, pt, &gsc, gpstroke_iter.diff_mat, user_data);
-
if (strokemode == false) {
- const bool is_select = (pt->flag & GP_SPOINT_SELECT) != 0;
+ const bool is_select = (pt->runtime.pt_orig->flag & GP_SPOINT_SELECT) != 0;
const int sel_op_result = ED_select_op_action_deselected(sel_op, is_select, is_inside);
if (sel_op_result != -1) {
- SET_FLAG_FROM_TEST(pt->flag, sel_op_result, GP_SPOINT_SELECT);
+ SET_FLAG_FROM_TEST(pt->runtime.pt_orig->flag, sel_op_result, GP_SPOINT_SELECT);
changed = true;
/* expand selection to segment */
if ((sel_op_result != -1) && (segmentmode)) {
- bool hit_select = (bool)(pt->flag & GP_SPOINT_SELECT);
+ bool hit_select = (bool)(pt->runtime.pt_orig->flag & GP_SPOINT_SELECT);
float r_hita[3], r_hitb[3];
- ED_gpencil_select_stroke_segment(
- gpl, gps, pt, hit_select, false, scale, r_hita, r_hitb);
+ ED_gpencil_select_stroke_segment(gpl,
+ gps->runtime.gps_orig,
+ pt->runtime.pt_orig,
+ hit_select,
+ false,
+ scale,
+ r_hita,
+ r_hitb);
}
}
}
@@ -1091,16 +1168,19 @@ static int gpencil_generic_select_exec(bContext *C,
/* if stroke mode expand selection */
if (strokemode) {
- const bool is_select = BKE_gpencil_stroke_select_check(gps);
+ const bool is_select = BKE_gpencil_stroke_select_check(gps->runtime.gps_orig);
const bool is_inside = hit;
const int sel_op_result = ED_select_op_action_deselected(sel_op, is_select, is_inside);
if (sel_op_result != -1) {
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
+ if (pt->runtime.pt_orig == NULL) {
+ continue;
+ }
if (sel_op_result) {
- pt->flag |= GP_SPOINT_SELECT;
+ pt->runtime.pt_orig->flag |= GP_SPOINT_SELECT;
}
else {
- pt->flag &= ~GP_SPOINT_SELECT;
+ pt->runtime.pt_orig->flag &= ~GP_SPOINT_SELECT;
}
}
changed = true;
@@ -1108,9 +1188,9 @@ static int gpencil_generic_select_exec(bContext *C,
}
/* Ensure that stroke selection is in sync with its points */
- BKE_gpencil_stroke_sync_selection(gps);
+ BKE_gpencil_stroke_sync_selection(gps->runtime.gps_orig);
}
- GP_EDITABLE_STROKES_END(gpstroke_iter);
+ GP_EVALUATED_STROKES_END(gpstroke_iter);
/* if paint mode,delete selected points */
if (gpd->flag & GP_DATA_STROKE_PAINTMODE) {
@@ -1285,6 +1365,7 @@ static void deselect_all_selected(bContext *C)
static int gpencil_select_exec(bContext *C, wmOperator *op)
{
ScrArea *sa = CTX_wm_area(C);
+ Object *ob = CTX_data_active_object(C);
bGPdata *gpd = ED_gpencil_data_get_active(C);
ToolSettings *ts = CTX_data_tool_settings(C);
const float scale = ts->gp_sculpt.isect_threshold;
@@ -1315,8 +1396,12 @@ static int gpencil_select_exec(bContext *C, wmOperator *op)
}
/* if select mode is stroke, use whole stroke */
- if (ts->gpencil_selectmode == GP_SELECTMODE_STROKE) {
- whole = true;
+ if ((ob) && (ob->mode == OB_MODE_SCULPT_GPENCIL)) {
+ whole = (bool)(gpencil_select_mode_from_sculpt(ts->gpencil_selectmode_sculpt) ==
+ GP_SELECTMODE_STROKE);
+ }
+ else {
+ whole = (bool)(ts->gpencil_selectmode_edit == GP_SELECTMODE_STROKE);
}
/* init space conversion stuff */
@@ -1327,13 +1412,17 @@ static int gpencil_select_exec(bContext *C, wmOperator *op)
/* First Pass: Find stroke point which gets hit */
/* XXX: maybe we should go from the top of the stack down instead... */
- GP_EDITABLE_STROKES_BEGIN (gpstroke_iter, C, gpl, gps) {
+ GP_EVALUATED_STROKES_BEGIN(gpstroke_iter, C, gpl, gps)
+ {
bGPDspoint *pt;
int i;
/* firstly, check for hit-point */
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
int xy[2];
+ if (pt->runtime.pt_orig == NULL) {
+ continue;
+ }
bGPDspoint pt2;
gp_point_to_parent_space(pt, gpstroke_iter.diff_mat, &pt2);
@@ -1348,15 +1437,15 @@ static int gpencil_select_exec(bContext *C, wmOperator *op)
/* only use this point if it is a better match than the current hit - T44685 */
if (pt_distance < hit_distance) {
hit_layer = gpl;
- hit_stroke = gps;
- hit_point = pt;
+ hit_stroke = gps->runtime.gps_orig;
+ hit_point = pt->runtime.pt_orig;
hit_distance = pt_distance;
}
}
}
}
}
- GP_EDITABLE_STROKES_END(gpstroke_iter);
+ GP_EVALUATED_STROKES_END(gpstroke_iter);
/* Abort if nothing hit... */
if (ELEM(NULL, hit_stroke, hit_point)) {
@@ -1417,7 +1506,11 @@ static int gpencil_select_exec(bContext *C, wmOperator *op)
hit_stroke->flag |= GP_STROKE_SELECT;
/* expand selection to segment */
- if (ts->gpencil_selectmode == GP_SELECTMODE_SEGMENT) {
+ const short selectmode = (ob && ob->mode == OB_MODE_SCULPT_GPENCIL) ?
+ gpencil_select_mode_from_sculpt(ts->gpencil_selectmode_sculpt) :
+ ts->gpencil_selectmode_edit;
+
+ if (selectmode == GP_SELECTMODE_SEGMENT) {
float r_hita[3], r_hitb[3];
bool hit_select = (bool)(hit_point->flag & GP_SPOINT_SELECT);
ED_gpencil_select_stroke_segment(
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index a475e43755c..2a0f16a4bbf 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -1396,13 +1396,13 @@ void ED_gpencil_add_defaults(bContext *C, Object *ob)
/* ensure multiframe falloff curve */
if (ts->gp_sculpt.cur_falloff == NULL) {
- ts->gp_sculpt.cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ ts->gp_sculpt.cur_falloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
CurveMapping *gp_falloff_curve = ts->gp_sculpt.cur_falloff;
- curvemapping_initialize(gp_falloff_curve);
- curvemap_reset(gp_falloff_curve->cm,
- &gp_falloff_curve->clipr,
- CURVE_PRESET_GAUSS,
- CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_initialize(gp_falloff_curve);
+ BKE_curvemap_reset(gp_falloff_curve->cm,
+ &gp_falloff_curve->clipr,
+ CURVE_PRESET_GAUSS,
+ CURVEMAP_SLOPE_POSITIVE);
}
}
diff --git a/source/blender/editors/include/BIF_glutil.h b/source/blender/editors/include/BIF_glutil.h
index 101a65d151a..a49f02d28fe 100644
--- a/source/blender/editors/include/BIF_glutil.h
+++ b/source/blender/editors/include/BIF_glutil.h
@@ -24,7 +24,6 @@
#ifndef __BIF_GLUTIL_H__
#define __BIF_GLUTIL_H__
-struct rctf;
struct rcti;
struct ColorManagedDisplaySettings;
diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h
index a232e1376d3..cb6c66ed795 100644
--- a/source/blender/editors/include/ED_anim_api.h
+++ b/source/blender/editors/include/ED_anim_api.h
@@ -25,9 +25,9 @@
#define __ED_ANIM_API_H__
struct AnimData;
+struct Depsgraph;
struct ID;
struct ListBase;
-struct Depsgraph;
struct ARegion;
struct Main;
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 6629eed8328..48d0a5fe8be 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -42,7 +42,6 @@ struct ReportList;
struct Scene;
struct UndoType;
struct View3D;
-struct ViewContext;
struct ViewLayer;
struct bArmature;
struct bContext;
@@ -75,12 +74,14 @@ typedef struct EditBone {
int flag;
int layer;
+ /* Envelope distance & weight */
float dist, weight;
/** put them in order! transform uses this as scale */
float xwidth, length, zwidth;
float rad_head, rad_tail;
/* Bendy-Bone parameters */
+ short segments;
float roll1, roll2;
float curve_in_x, curve_in_y;
float curve_out_x, curve_out_y;
@@ -91,8 +92,6 @@ typedef struct EditBone {
/** for envelope scaling */
float oldlength;
- short segments;
-
/** Type of next/prev bone handles */
char bbone_prev_type;
char bbone_next_type;
@@ -229,15 +228,9 @@ void ED_armature_edit_transform_mirror_update(struct Object *obedit);
void ED_armature_origin_set(
struct Main *bmain, struct Object *ob, const float cursor[3], int centermode, int around);
-void ED_armature_transform_bones(struct bArmature *arm, float mat[4][4], const bool do_props);
-void ED_armature_transform_apply(struct Main *bmain,
- struct Object *ob,
- float mat[4][4],
- const bool do_props);
-void ED_armature_transform(struct Main *bmain,
- struct bArmature *arm,
- float mat[4][4],
- const bool do_props);
+void ED_armature_edit_transform(struct bArmature *arm, const float mat[4][4], const bool do_props);
+
+void ED_armature_transform(struct bArmature *arm, const float mat[4][4], const bool do_props);
#define ARM_GROUPS_NAME 1
#define ARM_GROUPS_ENVELOPE 2
diff --git a/source/blender/editors/include/ED_clip.h b/source/blender/editors/include/ED_clip.h
index 7cee5a358f4..22bf22e04d3 100644
--- a/source/blender/editors/include/ED_clip.h
+++ b/source/blender/editors/include/ED_clip.h
@@ -29,7 +29,6 @@ struct ImBuf;
struct Main;
struct Mask;
struct MovieClip;
-struct Scene;
struct SpaceClip;
struct bContext;
struct bScreen;
diff --git a/source/blender/editors/include/ED_gizmo_library.h b/source/blender/editors/include/ED_gizmo_library.h
index f14648bc026..a3e2e643509 100644
--- a/source/blender/editors/include/ED_gizmo_library.h
+++ b/source/blender/editors/include/ED_gizmo_library.h
@@ -43,10 +43,8 @@ void ED_gizmotypes_value_2d(void);
void ED_gizmogrouptypes_value_2d(void);
struct Object;
-struct Scene;
struct bContext;
struct wmGizmo;
-struct wmGizmoGroup;
/* -------------------------------------------------------------------- */
/* Shape Presets
diff --git a/source/blender/editors/include/ED_gpencil.h b/source/blender/editors/include/ED_gpencil.h
index 6410e6630a7..470eb58c72b 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -27,7 +27,6 @@
struct ID;
struct ListBase;
struct PointerRNA;
-struct rcti;
struct Brush;
struct bGPDframe;
@@ -39,13 +38,11 @@ struct tGPspoint;
struct ARegion;
struct Depsgraph;
-struct EvaluationContext;
struct Main;
struct RegionView3D;
struct ReportList;
struct Scene;
struct ScrArea;
-struct ToolSettings;
struct View3D;
struct ViewLayer;
struct bContext;
@@ -58,8 +55,6 @@ struct bAnimContext;
struct wmKeyConfig;
struct wmOperator;
-struct wmWindow;
-struct wmWindowManager;
/* ------------- Grease-Pencil Runtime Data ---------------- */
diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h
index a09e1d579fd..7d69f86dbf8 100644
--- a/source/blender/editors/include/ED_image.h
+++ b/source/blender/editors/include/ED_image.h
@@ -31,7 +31,6 @@ struct ImageUser;
struct ReportList;
struct Scene;
struct SpaceImage;
-struct ToolSettings;
struct ViewLayer;
struct bContext;
struct wmWindowManager;
diff --git a/source/blender/editors/include/ED_keyframes_draw.h b/source/blender/editors/include/ED_keyframes_draw.h
index 05f641abe91..2630feaa9d3 100644
--- a/source/blender/editors/include/ED_keyframes_draw.h
+++ b/source/blender/editors/include/ED_keyframes_draw.h
@@ -31,7 +31,6 @@ struct FCurve;
struct ListBase;
struct MaskLayer;
struct Object;
-struct Palette;
struct Scene;
struct View2D;
struct bAction;
diff --git a/source/blender/editors/include/ED_keyframing.h b/source/blender/editors/include/ED_keyframing.h
index 8f197fa9afe..42e5add2ef0 100644
--- a/source/blender/editors/include/ED_keyframing.h
+++ b/source/blender/editors/include/ED_keyframing.h
@@ -44,8 +44,6 @@ struct bPoseChannel;
struct ReportList;
struct bContext;
-struct Depsgraph;
-
struct EnumPropertyItem;
struct PointerRNA;
struct PropertyRNA;
@@ -320,6 +318,8 @@ struct FCurve *verify_driver_fcurve(struct ID *id,
const int array_index,
short add);
+struct FCurve *alloc_driver_fcurve(const char rna_path[], const int array_index, short add);
+
/* -------- */
/* Main Driver Management API calls:
@@ -399,6 +399,12 @@ bool ANIM_driver_vars_copy(struct ReportList *reports, struct FCurve *fcu);
/* Paste the variables in the buffer to the given FCurve */
bool ANIM_driver_vars_paste(struct ReportList *reports, struct FCurve *fcu, bool replace);
+/* -------- */
+
+/* Create a driver & variable that reads the specified property,
+ * and store it in the buffers for Paste Driver and Paste Variables. */
+void ANIM_copy_as_driver(struct ID *target_id, const char *target_path, const char *var_name);
+
/* ************ Auto-Keyframing ********************** */
/* Notes:
* - All the defines for this (User-Pref settings and Per-Scene settings)
diff --git a/source/blender/editors/include/ED_markers.h b/source/blender/editors/include/ED_markers.h
index a883187327f..a9e57ecc13d 100644
--- a/source/blender/editors/include/ED_markers.h
+++ b/source/blender/editors/include/ED_markers.h
@@ -29,7 +29,6 @@ struct TimeMarker;
struct bAnimContext;
struct bContext;
struct wmKeyConfig;
-struct wmKeyMap;
/* Drawing API ------------------------------ */
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 5ebba4e5d25..0b2adfed531 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -45,7 +45,6 @@ struct Mesh;
struct Object;
struct ReportList;
struct Scene;
-struct ToolSettings;
struct UndoType;
struct UvMapVert;
struct UvMapVert;
@@ -55,7 +54,6 @@ struct View3D;
struct ViewContext;
struct bContext;
struct bDeformGroup;
-struct rcti;
struct wmKeyConfig;
struct wmOperator;
@@ -105,7 +103,9 @@ bool EDBM_vert_color_check(struct BMEditMesh *em);
bool EDBM_mesh_hide(struct BMEditMesh *em, bool swap);
bool EDBM_mesh_reveal(struct BMEditMesh *em, bool select);
-void EDBM_update_generic(struct BMEditMesh *em, const bool do_tessface, const bool is_destructive);
+void EDBM_update_generic(struct BMEditMesh *em,
+ const bool do_tessellation,
+ const bool is_destructive);
struct UvElementMap *BM_uv_element_map_create(struct BMesh *bm,
const bool selected,
@@ -358,21 +358,14 @@ void ED_mesh_geometry_add(
struct Mesh *mesh, struct ReportList *reports, int verts, int edges, int faces);
#endif
void ED_mesh_polys_add(struct Mesh *mesh, struct ReportList *reports, int count);
-void ED_mesh_tessfaces_add(struct Mesh *mesh, struct ReportList *reports, int count);
void ED_mesh_edges_add(struct Mesh *mesh, struct ReportList *reports, int count);
void ED_mesh_loops_add(struct Mesh *mesh, struct ReportList *reports, int count);
void ED_mesh_vertices_add(struct Mesh *mesh, struct ReportList *reports, int count);
-void ED_mesh_faces_remove(struct Mesh *mesh, struct ReportList *reports, int count);
void ED_mesh_edges_remove(struct Mesh *mesh, struct ReportList *reports, int count);
void ED_mesh_vertices_remove(struct Mesh *mesh, struct ReportList *reports, int count);
-void ED_mesh_calc_tessface(struct Mesh *mesh, bool free_mpoly);
-void ED_mesh_update(struct Mesh *mesh,
- struct bContext *C,
- bool calc_edges,
- bool calc_edges_loose,
- bool calc_tessface);
+void ED_mesh_update(struct Mesh *mesh, struct bContext *C, bool calc_edges, bool calc_edges_loose);
void ED_mesh_uv_texture_ensure(struct Mesh *me, const char *name);
int ED_mesh_uv_texture_add(struct Mesh *me,
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 5f9534a1f1c..c481c19a552 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -34,7 +34,6 @@ struct EnumPropertyItem;
struct EnumPropertyItem;
struct ID;
struct Main;
-struct Menu;
struct ModifierData;
struct Object;
struct PointerRNA;
@@ -44,16 +43,15 @@ struct Scene;
struct ShaderFxData;
struct View3D;
struct ViewLayer;
+struct XFormObjectData;
struct bConstraint;
struct bContext;
struct bFaceMap;
struct bPoseChannel;
struct uiLayout;
struct wmKeyConfig;
-struct wmKeyMap;
struct wmOperator;
struct wmOperatorType;
-struct wmWindow;
struct wmWindowManager;
#include "DNA_object_enums.h"
@@ -166,11 +164,13 @@ void ED_object_vpaintmode_enter_ex(struct Main *bmain,
struct wmWindowManager *wm,
struct Scene *scene,
struct Object *ob);
+void ED_object_vpaintmode_enter(struct bContext *C, struct Depsgraph *depsgraph);
void ED_object_wpaintmode_enter_ex(struct Main *bmain,
struct Depsgraph *depsgraph,
struct wmWindowManager *wm,
struct Scene *scene,
struct Object *ob);
+void ED_object_wpaintmode_enter(struct bContext *C, struct Depsgraph *depsgraph);
void ED_object_vpaintmode_exit_ex(struct Object *ob);
void ED_object_vpaintmode_exit(struct bContext *C);
@@ -183,18 +183,21 @@ void ED_object_sculptmode_enter_ex(struct Main *bmain,
struct Object *ob,
const bool force_dyntopo,
struct ReportList *reports);
+void ED_object_sculptmode_enter(struct bContext *C,
+ struct Depsgraph *depsgraph,
+ struct ReportList *reports);
void ED_object_sculptmode_exit_ex(struct Main *bmain,
struct Depsgraph *depsgraph,
struct Scene *scene,
struct Object *ob);
+void ED_object_sculptmode_exit(struct bContext *C, struct Depsgraph *depsgraph);
void ED_object_location_from_view(struct bContext *C, float loc[3]);
void ED_object_rotation_from_quat(float rot[3], const float quat[4], const char align_axis);
void ED_object_rotation_from_view(struct bContext *C, float rot[3], const char align_axis);
-void ED_object_base_init_transform(struct bContext *C,
- struct Base *base,
- const float loc[3],
- const float rot[3]);
+void ED_object_base_init_transform_on_add(struct Object *obejct,
+ const float loc[3],
+ const float rot[3]);
float ED_object_new_primitive_matrix(struct bContext *C,
struct Object *editob,
const float loc[3],
@@ -267,6 +270,7 @@ bool ED_object_mode_compat_set(struct bContext *C,
struct ReportList *reports);
void ED_object_mode_toggle(struct bContext *C, eObjectMode mode);
void ED_object_mode_set(struct bContext *C, eObjectMode mode);
+void ED_object_mode_exit(struct bContext *C, struct Depsgraph *depsgraph);
bool ED_object_mode_generic_enter(struct bContext *C, eObjectMode object_mode);
void ED_object_mode_generic_exit(struct Main *bmain,
@@ -397,6 +401,12 @@ bool ED_object_jump_to_bone(struct bContext *C,
void ED_object_facemap_face_add(struct Object *ob, struct bFaceMap *fmap, int facenum);
void ED_object_facemap_face_remove(struct Object *ob, struct bFaceMap *fmap, int facenum);
+/* object_data_transform.c */
+struct XFormObjectData *ED_object_data_xform_create(struct ID *id);
+void ED_object_data_xform_destroy(struct XFormObjectData *xod);
+
+void ED_object_data_xform_by_mat4(struct XFormObjectData *xod, const float mat[4][4]);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/editors/include/ED_outliner.h b/source/blender/editors/include/ED_outliner.h
index e94aedc2b2b..3015d8d9cdc 100644
--- a/source/blender/editors/include/ED_outliner.h
+++ b/source/blender/editors/include/ED_outliner.h
@@ -30,4 +30,18 @@ bool ED_outliner_collections_editor_poll(struct bContext *C);
void ED_outliner_selected_objects_get(const struct bContext *C, struct ListBase *objects);
+Base *ED_outliner_give_base_under_cursor(struct bContext *C, const int mval[2]);
+
+void ED_outliner_select_sync_from_object_tag(struct bContext *C);
+void ED_outliner_select_sync_from_edit_bone_tag(struct bContext *C);
+void ED_outliner_select_sync_from_pose_bone_tag(struct bContext *C);
+void ED_outliner_select_sync_from_sequence_tag(struct bContext *C);
+void ED_outliner_select_sync_from_all_tag(struct bContext *C);
+
+bool ED_outliner_select_sync_is_dirty(const struct bContext *C);
+
+void ED_outliner_select_sync_from_outliner(struct bContext *C, struct SpaceOutliner *soops);
+
+void ED_outliner_select_sync_flag_outliners(const struct bContext *C);
+
#endif /* __ED_OUTLINER_H__ */
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index e67a3b003fc..d0fab134dcc 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -39,10 +39,8 @@ struct Depsgraph;
struct IDProperty;
struct Main;
struct MenuType;
-struct PropertyRNA;
struct Scene;
struct SpaceLink;
-struct ViewLayer;
struct WorkSpace;
struct WorkSpaceInstanceHook;
struct bContext;
@@ -50,7 +48,6 @@ struct bScreen;
struct rcti;
struct uiBlock;
struct uiLayout;
-struct wmEvent;
struct wmKeyConfig;
struct wmMsgBus;
struct wmMsgSubscribeKey;
@@ -124,7 +121,8 @@ void ED_region_image_metadata_draw(
void ED_region_image_metadata_panel_draw(struct ImBuf *ibuf, struct uiLayout *layout);
void ED_region_grid_draw(struct ARegion *ar, float zoomx, float zoomy);
float ED_region_blend_alpha(struct ARegion *ar);
-void ED_region_visible_rect(struct ARegion *ar, struct rcti *rect);
+void ED_region_visible_rect_calc(struct ARegion *ar, struct rcti *rect);
+const rcti *ED_region_visible_rect(ARegion *ar);
bool ED_region_is_overlap(int spacetype, int regiontype);
int ED_region_snap_size_test(const struct ARegion *ar);
diff --git a/source/blender/editors/include/ED_sculpt.h b/source/blender/editors/include/ED_sculpt.h
index 86e108a26c6..d907ba4e581 100644
--- a/source/blender/editors/include/ED_sculpt.h
+++ b/source/blender/editors/include/ED_sculpt.h
@@ -25,10 +25,7 @@
#define __ED_SCULPT_H__
struct ARegion;
-struct ListBase;
struct Object;
-struct RegionView3D;
-struct UndoStep;
struct UndoType;
struct ViewContext;
struct bContext;
@@ -45,4 +42,7 @@ bool ED_sculpt_mask_box_select(struct bContext *C,
/* sculpt_undo.c */
void ED_sculpt_undosys_type(struct UndoType *ut);
+void ED_sculpt_undo_geometry_begin(struct Object *ob);
+void ED_sculpt_undo_geometry_end(struct Object *ob);
+
#endif /* __ED_SCULPT_H__ */
diff --git a/source/blender/editors/include/ED_select_buffer_utils.h b/source/blender/editors/include/ED_select_buffer_utils.h
deleted file mode 100644
index af745cee676..00000000000
--- a/source/blender/editors/include/ED_select_buffer_utils.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.
- */
-
-/** \file
- * \ingroup editors
- */
-
-#ifndef __ED_SELECT_BUFFER_UTILS_H__
-#define __ED_SELECT_BUFFER_UTILS_H__
-
-struct rcti;
-
-/* Boolean array from selection ID's. */
-uint *ED_select_buffer_bitmap_from_rect(const uint bitmap_len, const struct rcti *rect);
-uint *ED_select_buffer_bitmap_from_circle(const uint bitmap_len,
- const int center[2],
- const int radius);
-uint *ED_select_buffer_bitmap_from_poly(const uint bitmap_len,
- const int poly[][2],
- const int poly_len,
- const rcti *rect);
-
-/* Single result from selection ID's. */
-uint ED_select_buffer_sample_point(const int center[2]);
-uint ED_select_buffer_find_nearest_to_point(const int center[2],
- const uint id_min,
- const uint id_max,
- uint *dist);
-
-#endif /* __ED_SELECT_BUFFER_UTILS_H__ */
diff --git a/source/blender/editors/include/ED_text.h b/source/blender/editors/include/ED_text.h
index ed71439bd37..ade1dde6c33 100644
--- a/source/blender/editors/include/ED_text.h
+++ b/source/blender/editors/include/ED_text.h
@@ -26,8 +26,10 @@
struct ARegion;
struct SpaceText;
+struct Text;
struct UndoStep;
struct UndoType;
+struct bContext;
bool ED_text_region_location_from_cursor(struct SpaceText *st,
struct ARegion *ar,
@@ -39,4 +41,7 @@ void ED_text_undosys_type(struct UndoType *ut);
struct UndoStep *ED_text_undo_push_init(struct bContext *C);
+/* text_format.c */
+bool ED_text_is_syntax_highlight_supported(struct Text *text);
+
#endif /* __ED_TEXT_H__ */
diff --git a/source/blender/editors/include/ED_time_scrub_ui.h b/source/blender/editors/include/ED_time_scrub_ui.h
index b43e674224c..f010c45d939 100644
--- a/source/blender/editors/include/ED_time_scrub_ui.h
+++ b/source/blender/editors/include/ED_time_scrub_ui.h
@@ -24,7 +24,6 @@
#ifndef __ED_TIME_SCRUB_UI_H__
#define __ED_TIME_SCRUB_UI_H__
-struct View2DGrid;
struct bContext;
struct bDopeSheet;
struct wmEvent;
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 3605a245187..192af8f5273 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -26,18 +26,11 @@
/* ******************* Registration Function ********************** */
-struct ARegion;
-struct ListBase;
-struct Main;
struct Object;
struct SnapObjectContext;
struct SnapObjectParams;
-struct View3D;
-struct WorkSpace;
struct bContext;
-struct wmEvent;
struct wmKeyConfig;
-struct wmKeyMap;
struct wmOperatorType;
void ED_keymap_transform(struct wmKeyConfig *keyconf);
@@ -112,7 +105,6 @@ struct Scene;
struct TransInfo;
struct wmGizmoGroup;
struct wmGizmoGroupType;
-struct wmOperator;
/* UNUSED */
// int BIF_snappingSupported(struct Object *obedit);
@@ -197,12 +189,12 @@ bool peelObjectsSnapContext(struct SnapObjectContext *sctx,
float r_no[3],
float *r_thickness);
-bool snapObjectsTransform(struct TransInfo *t,
- const float mval[2],
- float *dist_px,
- /* return args */
- float r_loc[3],
- float r_no[3]);
+short snapObjectsTransform(struct TransInfo *t,
+ const float mval[2],
+ float *dist_px,
+ /* return args */
+ float r_loc[3],
+ float r_no[3]);
bool snapNodesTransform(struct TransInfo *t,
const int mval[2],
/* return args */
diff --git a/source/blender/editors/include/ED_transform_snap_object_context.h b/source/blender/editors/include/ED_transform_snap_object_context.h
index f27523bb1f8..40e0005b487 100644
--- a/source/blender/editors/include/ED_transform_snap_object_context.h
+++ b/source/blender/editors/include/ED_transform_snap_object_context.h
@@ -32,8 +32,6 @@ struct Main;
struct Object;
struct Scene;
struct View3D;
-struct ViewLayer;
-struct bContext;
/* transform_snap_object.c */
@@ -125,6 +123,7 @@ short ED_transform_snap_object_project_view3d_ex(struct SnapObjectContext *sctx,
const unsigned short snap_to,
const struct SnapObjectParams *params,
const float mval[2],
+ const float prev_co[3],
float *dist_px,
float r_loc[3],
float r_no[3],
@@ -135,6 +134,7 @@ bool ED_transform_snap_object_project_view3d(struct SnapObjectContext *sctx,
const unsigned short snap_to,
const struct SnapObjectParams *params,
const float mval[2],
+ const float prev_co[3],
float *dist_px,
/* return args */
float r_loc[3],
diff --git a/source/blender/editors/include/ED_uvedit.h b/source/blender/editors/include/ED_uvedit.h
index 8dd2dab5209..1856ad8454b 100644
--- a/source/blender/editors/include/ED_uvedit.h
+++ b/source/blender/editors/include/ED_uvedit.h
@@ -37,7 +37,6 @@ struct Object;
struct Scene;
struct SpaceImage;
struct ToolSettings;
-struct View3D;
struct ViewLayer;
struct bNode;
struct wmKeyConfig;
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 081bcbf4746..139b306b533 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -38,8 +38,6 @@ struct Camera;
struct CustomData_MeshMasks;
struct Depsgraph;
struct EditBone;
-struct GPUFX;
-struct GPUFXSettings;
struct GPUOffScreen;
struct GPUViewport;
struct ID;
@@ -58,7 +56,6 @@ struct View3D;
struct View3DShading;
struct ViewContext;
struct ViewLayer;
-struct WorkSpace;
struct bContext;
struct bPoseChannel;
struct bScreen;
@@ -209,6 +206,16 @@ void mesh_foreachScreenEdge(struct ViewContext *vc,
int index),
void *userData,
const eV3DProjTest clip_flag);
+
+void mesh_foreachScreenEdge_clip_bb_segment(struct ViewContext *vc,
+ void (*func)(void *userData,
+ struct BMEdge *eed,
+ const float screen_co_a[2],
+ const float screen_co_b[2],
+ int index),
+ void *userData,
+ const eV3DProjTest clip_flag);
+
void mesh_foreachScreenFace(
struct ViewContext *vc,
void (*func)(void *userData, struct BMFace *efa, const float screen_co[2], int index),
@@ -455,9 +462,6 @@ int ED_view3d_backbuf_sample_size_clamp(struct ARegion *ar, const float dist);
void ED_view3d_select_id_validate(struct ViewContext *vc);
-uint *ED_view3d_select_id_read(int xmin, int ymin, int xmax, int ymax, uint *r_buf_len);
-uint *ED_view3d_select_id_read_rect(const struct rcti *rect, uint *r_buf_len);
-
bool ED_view3d_autodist(struct Depsgraph *depsgraph,
struct ARegion *ar,
struct View3D *v3d,
@@ -677,9 +681,16 @@ void ED_view3d_lock_clear(struct View3D *v3d);
float ED_view3d_offset_distance(float mat[4][4], const float ofs[3], const float dist_fallback);
void ED_view3d_distance_set(struct RegionView3D *rv3d, const float dist);
+bool ED_view3d_distance_set_from_location(struct RegionView3D *rv3d,
+ const float dist_co[3],
+ const float dist_min);
float ED_scene_grid_scale(struct Scene *scene, const char **grid_unit);
float ED_view3d_grid_scale(struct Scene *scene, struct View3D *v3d, const char **grid_unit);
+void ED_view3d_grid_steps(struct Scene *scene,
+ struct View3D *v3d,
+ struct RegionView3D *rv3d,
+ float *r_grid_steps);
float ED_view3d_grid_view_scale(struct Scene *scene,
struct View3D *v3d,
struct RegionView3D *rv3d,
diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h
index 03a49943ed3..41ac1b6b452 100644
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@ -483,7 +483,7 @@ DEF_ICON(UNDERLINE)
DEF_ICON(SMALL_CAPS)
DEF_ICON_BLANK(742)
DEF_ICON_BLANK(743)
-DEF_ICON_BLANK(744)
+DEF_ICON_MODIFIER(CON_ACTION)
DEF_ICON_BLANK(745)
DEF_ICON_BLANK(746)
DEF_ICON_BLANK(747)
@@ -667,8 +667,8 @@ DEF_ICON(PARTICLE_PATH)
/* EDITING */
DEF_ICON_BLANK(669)
DEF_ICON_BLANK(670)
-DEF_ICON_BLANK(671)
-DEF_ICON_BLANK(672)
+DEF_ICON(SNAP_PERPENDICULAR)
+DEF_ICON(SNAP_MIDPOINT)
DEF_ICON(SNAP_OFF)
DEF_ICON(SNAP_ON)
DEF_ICON(SNAP_NORMAL)
@@ -866,8 +866,8 @@ DEF_ICON(SEQ_LUMA_WAVEFORM)
DEF_ICON(SEQ_CHROMA_SCOPE)
DEF_ICON(SEQ_HISTOGRAM)
DEF_ICON(SEQ_SPLITVIEW)
-DEF_ICON_BLANK(870)
-DEF_ICON_BLANK(871)
+DEF_ICON(SEQ_STRIP_META)
+DEF_ICON(SEQ_STRIP_DUPLICATE)
DEF_ICON_BLANK(872)
DEF_ICON(IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC
DEF_ICON(IMAGE_RGB_ALPHA)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 5ef3e5d8987..a61daa11c36 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -31,7 +31,6 @@
/* Struct Declarations */
struct ARegion;
-struct ARegionType;
struct AutoComplete;
struct ID;
struct IDProperty;
diff --git a/source/blender/editors/include/UI_interface_icons.h b/source/blender/editors/include/UI_interface_icons.h
index 1f15fa3bd4d..db8afccbe2d 100644
--- a/source/blender/editors/include/UI_interface_icons.h
+++ b/source/blender/editors/include/UI_interface_icons.h
@@ -75,7 +75,7 @@ void UI_icon_draw_ex(float x,
float aspect,
float alpha,
float desaturate,
- const char mono_color[4],
+ const uchar mono_color[4],
const bool mono_border);
void UI_icon_draw_desaturate(float x,
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index 3b080b6df95..29022adac6c 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -255,6 +255,7 @@ typedef enum ThemeColorID {
TH_MATCH, /* highlight color for search matches */
TH_SELECT_HIGHLIGHT, /* highlight color for selected outliner item */
+ TH_SELECT_ACTIVE, /* highlight color for active outliner item */
TH_SELECTED_OBJECT, /* selected object color for outliner */
TH_ACTIVE_OBJECT, /* active object color for outliner */
TH_EDITED_OBJECT, /* edited object color for outliner */
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index a2138a1b3a5..66c8eadbd74 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -908,12 +908,12 @@ void UI_but_execute(const bContext *C, ARegion *ar, uiBut *but)
* returns false if undo needs to be disabled. */
static bool ui_but_is_rna_undo(const uiBut *but)
{
- if (but->rnapoin.id.data) {
+ if (but->rnapoin.owner_id) {
/* avoid undo push for buttons who's ID are screen or wm level
* we could disable undo for buttons with no ID too but may have
* unforeseen consequences, so best check for ID's we _know_ are not
* handled by undo - campbell */
- ID *id = but->rnapoin.id.data;
+ ID *id = but->rnapoin.owner_id;
if (ID_CHECK_UNDO(id) == false) {
return false;
}
@@ -932,12 +932,7 @@ static bool ui_but_is_rna_undo(const uiBut *but)
* (underline key in menu) */
static void ui_menu_block_set_keyaccels(uiBlock *block)
{
- uiBut *but;
-
uint menu_key_mask = 0;
- uchar menu_key;
- const char *str_pt;
- int pass;
int tot_missing = 0;
/* only do it before bounding */
@@ -945,11 +940,11 @@ static void ui_menu_block_set_keyaccels(uiBlock *block)
return;
}
- for (pass = 0; pass < 2; pass++) {
+ for (int pass = 0; pass < 2; pass++) {
/* 2 Passes, on for first letter only, second for any letter if first fails
* fun first pass on all buttons so first word chars always get first priority */
- for (but = block->buttons.first; but; but = but->next) {
+ for (uiBut *but = block->buttons.first; but; but = but->next) {
if (!ELEM(but->type,
UI_BTYPE_BUT,
UI_BTYPE_BUT_MENU,
@@ -960,8 +955,10 @@ static void ui_menu_block_set_keyaccels(uiBlock *block)
/* pass */
}
else if (but->menu_key == '\0') {
- if (but->str) {
- for (str_pt = but->str; *str_pt;) {
+ if (but->str && but->str[0]) {
+ const char *str_pt = but->str;
+ uchar menu_key;
+ do {
menu_key = tolower(*str_pt);
if ((menu_key >= 'a' && menu_key <= 'z') && !(menu_key_mask & 1 << (menu_key - 'a'))) {
menu_key_mask |= 1 << (menu_key - 'a');
@@ -982,7 +979,7 @@ static void ui_menu_block_set_keyaccels(uiBlock *block)
/* just step over every char second pass and find first usable key */
str_pt++;
}
- }
+ } while (*str_pt);
if (*str_pt) {
but->menu_key = menu_key;
@@ -1229,8 +1226,8 @@ static bool ui_but_event_property_operator_string(const bContext *C,
*/
char *data_path = NULL;
- if (ptr->id.data) {
- ID *id = ptr->id.data;
+ if (ptr->owner_id) {
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_SCR) {
/* screen/editor property
@@ -1734,7 +1731,7 @@ static void ui_block_message_subscribe(ARegion *ar, struct wmMsgBus *mbus, uiBlo
if ((but_prev && (but_prev->rnaprop == but->rnaprop) &&
(but_prev->rnapoin.type == but->rnapoin.type) &&
(but_prev->rnapoin.data == but->rnapoin.data) &&
- (but_prev->rnapoin.id.data == but->rnapoin.id.data)) == false) {
+ (but_prev->rnapoin.owner_id == but->rnapoin.owner_id)) == false) {
/* TODO: could make this into utility function. */
WM_msg_subscribe_rna(mbus,
&but->rnapoin,
@@ -2058,7 +2055,7 @@ bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b)
}
if (but_a->rnaprop) {
- /* skip 'rnapoin.data', 'rnapoin.id.data'
+ /* skip 'rnapoin.data', 'rnapoin.owner_id'
* allow different data to have the same props edited at once */
if (but_a->rnapoin.type != but_b->rnapoin.type) {
return false;
@@ -2482,7 +2479,7 @@ void ui_but_string_get_ex(uiBut *but,
/* uiBut.custom_data points to data this tab represents (e.g. workspace).
* uiBut.rnapoin/prop store an active value (e.g. active workspace). */
- RNA_pointer_create(but->rnapoin.id.data, ptr_type, but->custom_data, &ptr);
+ RNA_pointer_create(but->rnapoin.owner_id, ptr_type, but->custom_data, &ptr);
buf = RNA_struct_name_get_alloc(&ptr, str, maxlen, &buf_len);
}
else if (type == PROP_STRING) {
@@ -2556,8 +2553,8 @@ void ui_but_string_get_ex(uiBut *but,
}
}
else {
+ const int int_digits_num = integer_digits_f(value);
if (use_exp_float) {
- const int int_digits_num = integer_digits_f(value);
if (int_digits_num < -6 || int_digits_num > 12) {
BLI_snprintf(str, maxlen, "%.*g", prec, value);
if (r_use_exp_float) {
@@ -2571,10 +2568,8 @@ void ui_but_string_get_ex(uiBut *but,
}
}
else {
-#if 0 /* TODO, but will likely break some stuff, so better after 2.79 release. */
prec -= int_digits_num;
CLAMP(prec, 0, UI_PRECISION_FLOAT_MAX);
-#endif
BLI_snprintf(str, maxlen, "%.*f", prec, value);
}
}
@@ -2827,7 +2822,7 @@ bool ui_but_string_set(bContext *C, uiBut *but, const char *str)
/* uiBut.custom_data points to data this tab represents (e.g. workspace).
* uiBut.rnapoin/prop store an active value (e.g. active workspace). */
- RNA_pointer_create(but->rnapoin.id.data, ptr_type, but->custom_data, &ptr);
+ RNA_pointer_create(but->rnapoin.owner_id, ptr_type, but->custom_data, &ptr);
prop = RNA_struct_name_property(ptr_type);
if (RNA_property_editable(&ptr, prop)) {
RNA_property_string_set(&ptr, prop, str);
diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c
index 4d87cc22ef2..168c6051327 100644
--- a/source/blender/editors/interface/interface_anim.c
+++ b/source/blender/editors/interface/interface_anim.c
@@ -228,7 +228,7 @@ bool ui_but_anim_expression_create(uiBut *but, const char *str)
/* make sure we have animdata for this */
/* FIXME: until materials can be handled by depsgraph,
* don't allow drivers to be created for them */
- id = (ID *)but->rnapoin.id.data;
+ id = but->rnapoin.owner_id;
if ((id == NULL) || (GS(id->name) == ID_MA) || (GS(id->name) == ID_TE)) {
if (G.debug & G_DEBUG) {
printf("ERROR: create expression failed - invalid data-block for adding drivers (%p)\n", id);
@@ -314,7 +314,7 @@ void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra)
}
}
else {
- id = but->rnapoin.id.data;
+ id = but->rnapoin.owner_id;
/* TODO: this should probably respect the keyingset only option for anim */
if (autokeyframe_cfra_can_key(scene, id)) {
diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c
index 7cec8af46de..0884a9ea470 100644
--- a/source/blender/editors/interface/interface_context_menu.c
+++ b/source/blender/editors/interface/interface_context_menu.c
@@ -523,6 +523,7 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
/* determine if we can key a single component of an array */
const bool is_array = RNA_property_array_length(&but->rnapoin, but->rnaprop) != 0;
const bool is_array_component = (is_array && but->rnaindex != -1);
+ const bool is_whole_array = (is_array && but->rnaindex == -1);
const int override_status = RNA_property_override_library_status(ptr, prop, -1);
const bool is_overridable = (override_status & RNA_OVERRIDE_STATUS_OVERRIDABLE) != 0;
@@ -658,21 +659,23 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
1);
}
- uiItemO(layout,
- CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy Driver"),
- ICON_NONE,
- "ANIM_OT_copy_driver_button");
- if (ANIM_driver_can_paste()) {
+ if (!is_whole_array) {
uiItemO(layout,
- CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Paste Driver"),
+ CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy Driver"),
ICON_NONE,
- "ANIM_OT_paste_driver_button");
- }
+ "ANIM_OT_copy_driver_button");
+ if (ANIM_driver_can_paste()) {
+ uiItemO(layout,
+ CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Paste Driver"),
+ ICON_NONE,
+ "ANIM_OT_paste_driver_button");
+ }
- uiItemO(layout,
- CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Edit Driver"),
- ICON_DRIVER,
- "ANIM_OT_driver_button_edit");
+ uiItemO(layout,
+ CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Edit Driver"),
+ ICON_DRIVER,
+ "ANIM_OT_driver_button_edit");
+ }
uiItemO(layout,
CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Open Drivers Editor"),
@@ -690,11 +693,13 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
ICON_DRIVER,
"ANIM_OT_driver_button_add");
- if (ANIM_driver_can_paste()) {
- uiItemO(layout,
- CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Paste Driver"),
- ICON_NONE,
- "ANIM_OT_paste_driver_button");
+ if (!is_whole_array) {
+ if (ANIM_driver_can_paste()) {
+ uiItemO(layout,
+ CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Paste Driver"),
+ ICON_NONE,
+ "ANIM_OT_paste_driver_button");
+ }
}
uiItemO(layout,
@@ -862,7 +867,7 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
"UI_OT_unset_property_button");
}
- if (is_idprop && !is_array_component && ELEM(type, PROP_INT, PROP_FLOAT)) {
+ if (is_idprop && !is_array && ELEM(type, PROP_INT, PROP_FLOAT)) {
uiItemO(layout,
CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Assign Value as Default"),
ICON_NONE,
@@ -899,6 +904,14 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
ICON_NONE,
"UI_OT_copy_data_path_button");
+ if (ptr->owner_id && !is_whole_array &&
+ ELEM(type, PROP_BOOLEAN, PROP_INT, PROP_FLOAT, PROP_ENUM)) {
+ uiItemO(layout,
+ CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy As New Driver"),
+ ICON_NONE,
+ "UI_OT_copy_as_driver_button");
+ }
+
uiItemS(layout);
if (type == PROP_STRING && ELEM(subtype, PROP_FILEPATH, PROP_DIRPATH)) {
@@ -1209,7 +1222,7 @@ void ui_popup_context_menu_for_panel(bContext *C, ARegion *ar, Panel *pa)
sizeof(tmpstr),
"%s" UI_SEP_CHAR_S "%s",
IFACE_("Pin"),
- IFACE_("Shift+Left Mouse"));
+ IFACE_("Shift Left Mouse"));
uiItemR(layout, &ptr, "use_pin", 0, tmpstr, ICON_NONE);
/* evil, force shortcut flag */
@@ -1217,6 +1230,7 @@ void ui_popup_context_menu_for_panel(bContext *C, ARegion *ar, Panel *pa)
uiBlock *block = uiLayoutGetBlock(layout);
uiBut *but = block->buttons.last;
but->flag |= UI_BUT_HAS_SEP_CHAR;
+ but->drawflag |= UI_BUT_HAS_SHORTCUT;
}
}
UI_popup_menu_end(C, pup);
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 6a36bf364a3..76630de96db 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -1736,7 +1736,7 @@ void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rec
/* backdrop */
UI_draw_roundbox_corner_set(UI_CNR_ALL);
UI_draw_roundbox_3ubAlpha(
- true, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f, (uchar *)wcol->inner, 255);
+ true, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f, wcol->inner, 255);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
@@ -1771,7 +1771,7 @@ void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rec
GPUVertFormat *format = immVertexFormat();
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- immUniformColor3ubv((uchar *)wcol->inner);
+ immUniformColor3ubv(wcol->inner);
GPU_blend(true);
GPU_line_smooth(true);
@@ -1831,7 +1831,7 @@ static void gl_shaded_color_get_fl(const uchar *color, int shade, float r_color[
rgb_uchar_to_float(r_color, color_shaded);
}
-static void gl_shaded_color(uchar *color, int shade)
+static void gl_shaded_color(const uchar *color, int shade)
{
uchar color_shaded[3];
gl_shaded_color_get(color, shade, color_shaded);
@@ -1914,10 +1914,10 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
}
else {
if (cumap->flag & CUMA_DO_CLIP) {
- gl_shaded_color_get_fl((uchar *)wcol->inner, -20, color_backdrop);
+ gl_shaded_color_get_fl(wcol->inner, -20, color_backdrop);
immUniformColor3fv(color_backdrop);
immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
- immUniformColor3ubv((uchar *)wcol->inner);
+ immUniformColor3ubv(wcol->inner);
immRectf(pos,
rect->xmin + zoomx * (cumap->clipr.xmin - offsx),
rect->ymin + zoomy * (cumap->clipr.ymin - offsy),
@@ -1925,19 +1925,19 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
rect->ymin + zoomy * (cumap->clipr.ymax - offsy));
}
else {
- rgb_uchar_to_float(color_backdrop, (const uchar *)wcol->inner);
+ rgb_uchar_to_float(color_backdrop, wcol->inner);
immUniformColor3fv(color_backdrop);
immRectf(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
}
/* grid, every 0.25 step */
- gl_shaded_color((uchar *)wcol->inner, -16);
+ gl_shaded_color(wcol->inner, -16);
ui_draw_but_curve_grid(pos, rect, zoomx, zoomy, offsx, offsy, 0.25f);
/* grid, every 1.0 step */
- gl_shaded_color((uchar *)wcol->inner, -24);
+ gl_shaded_color(wcol->inner, -24);
ui_draw_but_curve_grid(pos, rect, zoomx, zoomy, offsx, offsy, 1.0f);
/* axes */
- gl_shaded_color((uchar *)wcol->inner, -50);
+ gl_shaded_color(wcol->inner, -50);
immBegin(GPU_PRIM_LINES, 4);
immVertex2f(pos, rect->xmin, rect->ymin + zoomy * (-offsy));
immVertex2f(pos, rect->xmax, rect->ymin + zoomy * (-offsy));
@@ -1997,7 +1997,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
immUnbindProgram();
if (cuma->table == NULL) {
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
}
CurveMapPoint *cmp = cuma->table;
@@ -2026,7 +2026,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
GPU_blend(true);
/* Curve filled. */
- immUniformColor3ubvAlpha((uchar *)wcol->item, 128);
+ immUniformColor3ubvAlpha(wcol->item, 128);
GPU_polygon_smooth(true);
immBegin(GPU_PRIM_TRI_STRIP, (CM_TABLE * 2 + 2) + 4);
immVertex2f(pos, line_range.xmin, rect->ymin);
@@ -2044,7 +2044,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
/* Curve line. */
GPU_line_width(1.0f);
- immUniformColor3ubvAlpha((uchar *)wcol->item, 255);
+ immUniformColor3ubvAlpha(wcol->item, 255);
GPU_line_smooth(true);
immBegin(GPU_PRIM_LINE_STRIP, (CM_TABLE + 1) + 2);
immVertex2f(pos, line_range.xmin, line_range.ymin);
@@ -2099,7 +2099,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, const uiWidgetColors *wcol, cons
pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- immUniformColor3ubv((uchar *)wcol->outline);
+ immUniformColor3ubv(wcol->outline);
imm_draw_box_wire_2d(pos, rect->xmin, rect->ymin, rect->xmax, rect->ymax);
immUnbindProgram();
diff --git a/source/blender/editors/interface/interface_eyedropper_datablock.c b/source/blender/editors/interface/interface_eyedropper_datablock.c
index 658aa4f67f9..336fae45895 100644
--- a/source/blender/editors/interface/interface_eyedropper_datablock.c
+++ b/source/blender/editors/interface/interface_eyedropper_datablock.c
@@ -51,6 +51,7 @@
#include "ED_space_api.h"
#include "ED_screen.h"
#include "ED_view3d.h"
+#include "ED_outliner.h"
#include "interface_intern.h"
#include "interface_eyedropper_intern.h"
@@ -67,6 +68,7 @@ typedef struct DataDropper {
ID *init_id; /* for resetting on cancel */
+ ScrArea *cursor_area; /* Area under the cursor */
ARegionType *art;
void *draw_handle_pixel;
char name[200];
@@ -103,6 +105,7 @@ static int datadropper_init(bContext *C, wmOperator *op)
ddr->is_undo = UI_but_flag_is_set(but, UI_BUT_UNDO);
+ ddr->cursor_area = CTX_wm_area(C);
ddr->art = art;
ddr->draw_handle_pixel = ED_region_draw_cb_activate(
art, datadropper_draw_cb, ddr, REGION_DRAW_POST_PIXEL);
@@ -115,7 +118,7 @@ static int datadropper_init(bContext *C, wmOperator *op)
ddr->idcode_name = TIP_(BKE_idcode_to_name(ddr->idcode));
PointerRNA ptr = RNA_property_pointer_get(&ddr->ptr, ddr->prop);
- ddr->init_id = ptr.id.data;
+ ddr->init_id = ptr.owner_id;
return true;
}
@@ -141,7 +144,7 @@ static void datadropper_exit(bContext *C, wmOperator *op)
/* *** datadropper id helper functions *** */
/**
- * \brief get the ID from the screen.
+ * \brief get the ID from the 3D view or outliner.
*/
static void datadropper_id_sample_pt(bContext *C, DataDropper *ddr, int mx, int my, ID **r_id)
{
@@ -155,7 +158,7 @@ static void datadropper_id_sample_pt(bContext *C, DataDropper *ddr, int mx, int
ddr->name[0] = '\0';
if (sa) {
- if (sa->spacetype == SPACE_VIEW3D) {
+ if (ELEM(sa->spacetype, SPACE_VIEW3D, SPACE_OUTLINER)) {
ARegion *ar = BKE_area_find_region_xy(sa, RGN_TYPE_WINDOW, mx, my);
if (ar) {
const int mval[2] = {mx - ar->winrct.xmin, my - ar->winrct.ymin};
@@ -167,7 +170,13 @@ static void datadropper_id_sample_pt(bContext *C, DataDropper *ddr, int mx, int
/* grr, always draw else we leave stale text */
ED_region_tag_redraw(ar);
- base = ED_view3d_give_base_under_cursor(C, mval);
+ if (sa->spacetype == SPACE_VIEW3D) {
+ base = ED_view3d_give_base_under_cursor(C, mval);
+ }
+ else {
+ base = ED_outliner_give_base_under_cursor(C, mval);
+ }
+
if (base) {
Object *ob = base->object;
ID *id = NULL;
@@ -213,7 +222,7 @@ static bool datadropper_id_set(bContext *C, DataDropper *ddr, ID *id)
ptr_value = RNA_property_pointer_get(&ddr->ptr, ddr->prop);
- return (ptr_value.id.data == id);
+ return (ptr_value.owner_id == id);
}
/* single point sample & set */
@@ -232,6 +241,36 @@ static void datadropper_cancel(bContext *C, wmOperator *op)
datadropper_exit(C, op);
}
+/* To switch the draw callback when region under mouse event changes */
+static void datadropper_set_draw_callback_region(bContext *C,
+ DataDropper *ddr,
+ const int mx,
+ const int my)
+{
+ bScreen *screen = CTX_wm_screen(C);
+ ScrArea *sa = BKE_screen_find_area_xy(screen, -1, mx, my);
+
+ if (sa) {
+ /* If spacetype changed */
+ if (sa->spacetype != ddr->cursor_area->spacetype) {
+ /* Remove old callback */
+ ED_region_draw_cb_exit(ddr->art, ddr->draw_handle_pixel);
+
+ /* Redraw old area */
+ ARegion *ar = BKE_area_find_region_type(ddr->cursor_area, RGN_TYPE_WINDOW);
+ ED_region_tag_redraw(ar);
+
+ /* Set draw callback in new region */
+ ARegionType *art = BKE_regiontype_from_id(sa->type, RGN_TYPE_WINDOW);
+
+ ddr->cursor_area = sa;
+ ddr->art = art;
+ ddr->draw_handle_pixel = ED_region_draw_cb_activate(
+ art, datadropper_draw_cb, ddr, REGION_DRAW_POST_PIXEL);
+ }
+ }
+}
+
/* main modal status check */
static int datadropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
@@ -260,6 +299,10 @@ static int datadropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
}
else if (event->type == MOUSEMOVE) {
ID *id = NULL;
+
+ /* Set the region for eyedropper cursor text drawing */
+ datadropper_set_draw_callback_region(C, ddr, event->x, event->y);
+
datadropper_id_sample_pt(C, ddr, event->x, event->y, &id);
}
diff --git a/source/blender/editors/interface/interface_eyedropper_driver.c b/source/blender/editors/interface/interface_eyedropper_driver.c
index c1aee190cd3..e6fc52bc3bc 100644
--- a/source/blender/editors/interface/interface_eyedropper_driver.c
+++ b/source/blender/editors/interface/interface_eyedropper_driver.c
@@ -116,10 +116,10 @@ static void driverdropper_sample(bContext *C, wmOperator *op, const wmEvent *eve
/* Now create driver(s) */
if (target_path && dst_path) {
int success = ANIM_add_driver_with_target(op->reports,
- ddr->ptr.id.data,
+ ddr->ptr.owner_id,
dst_path,
ddr->index,
- target_ptr->id.data,
+ target_ptr->owner_id,
target_path,
target_index,
flag,
@@ -130,7 +130,7 @@ static void driverdropper_sample(bContext *C, wmOperator *op, const wmEvent *eve
/* send updates */
UI_context_update_anim_flag(C);
DEG_relations_tag_update(CTX_data_main(C));
- DEG_id_tag_update(ddr->ptr.id.data, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ddr->ptr.owner_id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
WM_event_add_notifier(C, NC_ANIMATION | ND_FCURVES_ORDER, NULL); // XXX
}
}
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 245277c8d22..13bfaa95077 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -757,7 +757,7 @@ static void ui_apply_but_undo(uiBut *but)
}
/* Optionally override undo when undo system doesn't support storing properties. */
- if (but->rnapoin.id.data) {
+ if (but->rnapoin.owner_id) {
/* Exception for renaming ID data, we always need undo pushes in this case,
* because undo systems track data by their ID, see: T67002. */
extern PropertyRNA rna_ID_name;
@@ -765,7 +765,7 @@ static void ui_apply_but_undo(uiBut *but)
/* pass */
}
else {
- ID *id = but->rnapoin.id.data;
+ ID *id = but->rnapoin.owner_id;
if (!ED_undo_is_legacy_compatible_for_property(but->block->evil_C, id)) {
str = "";
}
@@ -1558,7 +1558,7 @@ static bool ui_selectcontext_begin(bContext *C, uiBut *but, uiSelectContextStore
if (use_path_from_id) {
/* Path relative to ID. */
lprop = NULL;
- RNA_id_pointer_create(link->ptr.id.data, &idptr);
+ RNA_id_pointer_create(link->ptr.owner_id, &idptr);
RNA_path_resolve_property(&idptr, path, &lptr, &lprop);
}
else if (path) {
@@ -2386,8 +2386,8 @@ static void ui_but_copy_curvemapping(uiBut *but)
{
if (but->poin != NULL) {
but_copypaste_curve_alive = true;
- curvemapping_free_data(&but_copypaste_curve);
- curvemapping_copy_data(&but_copypaste_curve, (CurveMapping *)but->poin);
+ BKE_curvemapping_free_data(&but_copypaste_curve);
+ BKE_curvemapping_copy_data(&but_copypaste_curve, (CurveMapping *)but->poin);
}
}
@@ -2399,8 +2399,8 @@ static void ui_but_paste_curvemapping(bContext *C, uiBut *but)
}
button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
- curvemapping_free_data((CurveMapping *)but->poin);
- curvemapping_copy_data((CurveMapping *)but->poin, &but_copypaste_curve);
+ BKE_curvemapping_free_data((CurveMapping *)but->poin);
+ BKE_curvemapping_copy_data((CurveMapping *)but->poin, &but_copypaste_curve);
button_activate_state(C, but, BUTTON_STATE_EXIT);
}
}
@@ -2588,7 +2588,7 @@ static void ui_but_paste(bContext *C, uiBut *but, uiHandleButtonData *data, cons
void ui_but_clipboard_free(void)
{
- curvemapping_free_data(&but_copypaste_curve);
+ BKE_curvemapping_free_data(&but_copypaste_curve);
}
/** \} */
@@ -4001,6 +4001,11 @@ static int ui_do_but_HOTKEYEVT(bContext *C,
return WM_UI_HANDLER_CONTINUE;
}
else if (event->type == UNKNOWNKEY) {
+ WM_report(RPT_WARNING, "Unsupported key: Unknown");
+ return WM_UI_HANDLER_CONTINUE;
+ }
+ else if (event->type == CAPSLOCKKEY) {
+ WM_report(RPT_WARNING, "Unsupported key: CapsLock");
return WM_UI_HANDLER_CONTINUE;
}
@@ -4795,37 +4800,25 @@ static int ui_do_but_NUM(
if (click) {
/* we can click on the side arrows to increment/decrement,
* or click inside to edit the value directly */
- float tempf, softmin, softmax;
- int temp;
-
- softmin = but->softmin;
- softmax = but->softmax;
if (!ui_but_is_float(but)) {
- if (but->drawflag & UI_BUT_ACTIVE_LEFT) {
+ /* Integer Value. */
+ if (but->drawflag & (UI_BUT_ACTIVE_LEFT | UI_BUT_ACTIVE_RIGHT)) {
button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
- temp = (int)data->value - 1;
- if (temp >= softmin && temp <= softmax) {
- data->value = (double)temp;
+ const int value_step = (int)but->a1;
+ BLI_assert(value_step > 0);
+ const int softmin = round_fl_to_int_clamp(but->softmin);
+ const int softmax = round_fl_to_int_clamp(but->softmax);
+ const double value_test = (but->drawflag & UI_BUT_ACTIVE_LEFT) ?
+ (double)max_ii(softmin, (int)data->value - value_step) :
+ (double)min_ii(softmax, (int)data->value + value_step);
+ if (value_test != data->value) {
+ data->value = (double)value_test;
}
else {
data->cancel = true;
}
-
- button_activate_state(C, but, BUTTON_STATE_EXIT);
- }
- else if (but->drawflag & UI_BUT_ACTIVE_RIGHT) {
- button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
-
- temp = (int)data->value + 1;
- if (temp >= softmin && temp <= softmax) {
- data->value = (double)temp;
- }
- else {
- data->cancel = true;
- }
-
button_activate_state(C, but, BUTTON_STATE_EXIT);
}
else {
@@ -4833,26 +4826,23 @@ static int ui_do_but_NUM(
}
}
else {
- if (but->drawflag & UI_BUT_ACTIVE_LEFT) {
+ /* Float Value. */
+ if (but->drawflag & (UI_BUT_ACTIVE_LEFT | UI_BUT_ACTIVE_RIGHT)) {
button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
- tempf = (float)data->value - (UI_PRECISION_FLOAT_SCALE * but->a1);
- if (tempf < softmin) {
- tempf = softmin;
+ const double value_step = (double)but->a1 * UI_PRECISION_FLOAT_SCALE;
+ BLI_assert(value_step > 0.0f);
+ const double value_test = (but->drawflag & UI_BUT_ACTIVE_LEFT) ?
+ (double)max_ff(but->softmin,
+ (float)(data->value - value_step)) :
+ (double)min_ff(but->softmax,
+ (float)(data->value + value_step));
+ if (value_test != data->value) {
+ data->value = value_test;
}
- data->value = tempf;
-
- button_activate_state(C, but, BUTTON_STATE_EXIT);
- }
- else if (but->drawflag & UI_BUT_ACTIVE_RIGHT) {
- button_activate_state(C, but, BUTTON_STATE_NUM_EDITING);
-
- tempf = (float)data->value + (UI_PRECISION_FLOAT_SCALE * but->a1);
- if (tempf > softmax) {
- tempf = softmax;
+ else {
+ data->cancel = true;
}
- data->value = tempf;
-
button_activate_state(C, but, BUTTON_STATE_EXIT);
}
else {
@@ -5498,7 +5488,7 @@ static bool ui_numedit_but_UNITVEC(
static void ui_palette_set_active(uiBut *but)
{
if ((int)(but->a1) == UI_PALETTE_COLOR) {
- Palette *palette = but->rnapoin.id.data;
+ Palette *palette = (Palette *)but->rnapoin.owner_id;
PaletteColor *color = but->rnapoin.data;
palette->active_color = BLI_findindex(&palette->colors, color);
}
@@ -5561,7 +5551,7 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co
}
else if ((int)(but->a1) == UI_PALETTE_COLOR && event->type == DELKEY &&
event->val == KM_PRESS) {
- Palette *palette = but->rnapoin.id.data;
+ Palette *palette = (Palette *)but->rnapoin.owner_id;
PaletteColor *color = but->rnapoin.data;
BKE_palette_color_remove(palette, color);
@@ -6479,7 +6469,7 @@ static bool ui_numedit_but_CURVE(uiBlock *block,
}
}
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
if (moved_point) {
data->draglastx = evtx;
@@ -6559,8 +6549,8 @@ static int ui_do_but_CURVE(
float f_xy[2];
BLI_rctf_transform_pt_v(&cumap->curr, &but->rect, f_xy, m_xy);
- curvemap_insert(cuma, f_xy[0], f_xy[1]);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_insert(cuma, f_xy[0], f_xy[1]);
+ BKE_curvemapping_changed(cumap, false);
changed = true;
}
@@ -6597,8 +6587,8 @@ static int ui_do_but_CURVE(
if (dist_squared_to_line_segment_v2(m_xy, f_xy_prev, f_xy) < dist_min_sq) {
BLI_rctf_transform_pt_v(&cumap->curr, &but->rect, f_xy, m_xy);
- curvemap_insert(cuma, f_xy[0], f_xy[1]);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_insert(cuma, f_xy[0], f_xy[1]);
+ BKE_curvemapping_changed(cumap, false);
changed = true;
@@ -6672,7 +6662,7 @@ static int ui_do_but_CURVE(
}
}
else {
- curvemapping_changed(cumap, true); /* remove doubles */
+ BKE_curvemapping_changed(cumap, true); /* remove doubles */
BKE_paint_invalidate_cursor_overlay(scene, view_layer, cumap);
}
}
@@ -8198,7 +8188,7 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but)
else {
/* Do this so we can still mouse-up, closing the menu and running the button.
* This is nice to support but there are times when the button gets left pressed.
- * Keep disavled for now. */
+ * Keep disabled for now. */
WM_event_remove_timer(data->wm, data->window, data->hold_action_timer);
data->hold_action_timer = NULL;
}
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index 7584a43a790..1674374396f 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -317,8 +317,9 @@ static void vicon_keytype_draw_wrapper(
format, "outlineColor", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
uint flags_id = GPU_vertformat_attr_add(format, "flags", GPU_COMP_U32, 1, GPU_FETCH_INT);
- immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
GPU_program_point_size(true);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ immUniform1f("outline_scale", 1.0f);
immUniform2f("ViewportSize", -1.0f, -1.0f);
immBegin(GPU_PRIM_POINTS, 1);
@@ -403,7 +404,7 @@ static void vicon_handletype_auto_clamp_draw(int x, int y, int w, int h, float a
static void vicon_colorset_draw(int index, int x, int y, int w, int h, float UNUSED(alpha))
{
bTheme *btheme = UI_GetTheme();
- ThemeWireColor *cs = &btheme->tarm[index];
+ const ThemeWireColor *cs = &btheme->tarm[index];
/* Draw three bands of color: One per color
* x-----a-----b-----c
@@ -420,15 +421,15 @@ static void vicon_colorset_draw(int index, int x, int y, int w, int h, float UNU
/* XXX: Include alpha into this... */
/* normal */
- immUniformColor3ubv((uchar *)cs->solid);
+ immUniformColor3ubv(cs->solid);
immRecti(pos, x, y, a, y + h);
/* selected */
- immUniformColor3ubv((uchar *)cs->select);
+ immUniformColor3ubv(cs->select);
immRecti(pos, a, y, b, y + h);
/* active */
- immUniformColor3ubv((uchar *)cs->active);
+ immUniformColor3ubv(cs->active);
immRecti(pos, b, y, c, y + h);
immUnbindProgram();
@@ -1782,7 +1783,7 @@ static void icon_draw_size(float x,
enum eIconSizes size,
int draw_size,
const float desaturate,
- const char mono_rgba[4],
+ const uchar mono_rgba[4],
const bool mono_border)
{
bTheme *btheme = UI_GetTheme();
@@ -2136,7 +2137,7 @@ int UI_rnaptr_icon_get(bContext *C, PointerRNA *ptr, int rnaicon, const bool big
/* try ID, material, texture or dynapaint slot */
if (RNA_struct_is_ID(ptr->type)) {
- id = ptr->id.data;
+ id = ptr->owner_id;
}
else if (RNA_struct_is_a(ptr->type, &RNA_MaterialSlot)) {
id = RNA_pointer_get(ptr, "material").data;
@@ -2270,7 +2271,7 @@ void UI_icon_draw_ex(float x,
float aspect,
float alpha,
float desaturate,
- const char mono_color[4],
+ const uchar mono_color[4],
const bool mono_border)
{
int draw_size = get_draw_size(ICON_SIZE_ICON);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index af992a89caa..529cb0712df 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -648,7 +648,7 @@ static void ui_item_array(uiLayout *layout,
* to work with common cases, but may need to be re-worked */
/* special case, boolean array in a menu, this could be used in a more generic way too */
- if (ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA) && !expand) {
+ if (ELEM(subtype, PROP_COLOR, PROP_COLOR_GAMMA) && !expand && ELEM(len, 3, 4)) {
uiDefAutoButR(block, ptr, prop, -1, "", ICON_NONE, 0, 0, w, UI_UNIT_Y);
}
else {
@@ -1180,11 +1180,6 @@ static uiBut *uiItemFullO_ptr_ex(uiLayout *layout,
assert(but->optype != NULL);
- /* text alignment for toolbar buttons */
- if ((layout->root->type == UI_LAYOUT_TOOLBAR) && !icon) {
- but->drawflag |= UI_BUT_TEXT_LEFT;
- }
-
if (flag & UI_ITEM_R_NO_BG) {
layout->emboss = prev_emboss;
}
@@ -1832,7 +1827,9 @@ static void ui_item_rna_size(uiLayout *layout,
h += len * UI_UNIT_Y;
}
}
- else if (ui_layout_variable_size(layout)) {
+
+ /* Increase width requirement if in a variable size layout. */
+ if (ui_layout_variable_size(layout)) {
if (type == PROP_BOOLEAN && name[0]) {
w += UI_UNIT_X / 5;
}
@@ -1876,7 +1873,8 @@ void uiItemFullR(uiLayout *layout,
uiBut *but;
} ui_decorate = {
.use_prop_decorate = (((layout->item.flag & UI_ITEM_PROP_DECORATE) != 0) &&
- (use_prop_sep && ptr->id.data && id_can_have_animdata(ptr->id.data))),
+ (use_prop_sep && ptr->owner_id &&
+ id_can_have_animdata(ptr->owner_id))),
};
#endif /* UI_PROP_DECORATE */
@@ -2949,7 +2947,7 @@ void uiItemLDrag(uiLayout *layout, PointerRNA *ptr, const char *name, int icon)
if (ptr && ptr->type) {
if (RNA_struct_is_ID(ptr->type)) {
- UI_but_drag_set_id(but, ptr->id.data);
+ UI_but_drag_set_id(but, ptr->owner_id);
}
}
}
@@ -5228,7 +5226,7 @@ static void ui_paneltype_draw_impl(bContext *C, PanelType *pt, uiLayout *layout,
pt->draw_header(C, panel);
panel->layout = NULL;
}
- uiItemL(row, pt->label, ICON_NONE);
+ uiItemL(row, CTX_IFACE_(pt->translation_context, pt->label), ICON_NONE);
}
panel->layout = layout;
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index f2b2a478ba9..0afd67e5e66 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -27,7 +27,7 @@
#include "DNA_armature_types.h"
#include "DNA_screen_types.h"
-#include "DNA_text_types.h" /* for UI_OT_reports_to_text */
+#include "DNA_text_types.h"
#include "DNA_object_types.h" /* for OB_DATA_SUPPORT_ID */
#include "BLI_blenlib.h"
@@ -45,7 +45,7 @@
#include "BKE_node.h"
#include "BKE_report.h"
#include "BKE_screen.h"
-#include "BKE_text.h" /* for UI_OT_reports_to_text */
+#include "BKE_text.h"
#include "IMB_colormanagement.h"
@@ -65,6 +65,9 @@
#include "ED_object.h"
#include "ED_paint.h"
+/* for Copy As Driver */
+#include "ED_keyframing.h"
+
/* only for UI_OT_editsource */
#include "ED_screen.h"
#include "BKE_main.h"
@@ -83,7 +86,7 @@ static bool copy_data_path_button_poll(bContext *C)
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data && ptr.data && prop) {
+ if (ptr.owner_id && ptr.data && prop) {
path = RNA_path_from_ID_to_property(&ptr, prop);
if (path) {
@@ -107,7 +110,7 @@ static int copy_data_path_button_exec(bContext *C, wmOperator *op)
/* try to create driver using property retrieved from UI */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- if (ptr.id.data != NULL) {
+ if (ptr.owner_id != NULL) {
if (full_path) {
@@ -153,23 +156,93 @@ static void UI_OT_copy_data_path_button(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
-static bool copy_python_command_button_poll(bContext *C)
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Copy As Driver Operator
+ * \{ */
+
+static bool copy_as_driver_button_poll(bContext *C)
{
- uiBut *but = UI_context_active_but_get(C);
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ char *path;
+ int index;
- if (but && (but->optype != NULL)) {
- return 1;
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ if (ptr.owner_id && ptr.data && prop &&
+ ELEM(RNA_property_type(prop), PROP_BOOLEAN, PROP_INT, PROP_FLOAT, PROP_ENUM) &&
+ (index >= 0 || !RNA_property_array_check(prop))) {
+ path = RNA_path_from_ID_to_property(&ptr, prop);
+
+ if (path) {
+ MEM_freeN(path);
+ return 1;
+ }
}
return 0;
}
+static int copy_as_driver_button_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ PointerRNA ptr;
+ PropertyRNA *prop;
+ int index;
+
+ /* try to create driver using property retrieved from UI */
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ if (ptr.owner_id && ptr.data && prop) {
+ int dim = RNA_property_array_dimension(&ptr, prop, NULL);
+ char *path = RNA_path_from_ID_to_property_index(&ptr, prop, dim, index);
+
+ if (path) {
+ ANIM_copy_as_driver(ptr.owner_id, path, RNA_property_identifier(prop));
+ MEM_freeN(path);
+ return OPERATOR_FINISHED;
+ }
+ }
+
+ return OPERATOR_CANCELLED;
+}
+
+static void UI_OT_copy_as_driver_button(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Copy As New Driver";
+ ot->idname = "UI_OT_copy_as_driver_button";
+ ot->description =
+ "Create a new driver with this property as input, and copy it to the "
+ "clipboard. Use Paste Driver to add it to the target property, or Paste "
+ "Driver Variables to extend an existing driver";
+
+ /* callbacks */
+ ot->exec = copy_as_driver_button_exec;
+ ot->poll = copy_as_driver_button_poll;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER;
+}
+
/** \} */
/* -------------------------------------------------------------------- */
/** \name Copy Python Command Operator
* \{ */
+static bool copy_python_command_button_poll(bContext *C)
+{
+ uiBut *but = UI_context_active_but_get(C);
+
+ if (but && (but->optype != NULL)) {
+ return 1;
+ }
+
+ return 0;
+}
+
static int copy_python_command_button_exec(bContext *C, wmOperator *UNUSED(op))
{
uiBut *but = UI_context_active_but_get(C);
@@ -214,7 +287,7 @@ static void UI_OT_copy_python_command_button(wmOperatorType *ot)
static int operator_button_property_finish(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
/* perform updates required for this property */
RNA_property_update(C, ptr, prop);
@@ -469,7 +542,7 @@ static int override_type_set_button_exec(bContext *C, wmOperator *op)
/* try to reset the nominated setting to its default value */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- BLI_assert(ptr.id.data != NULL);
+ BLI_assert(ptr.owner_id != NULL);
if (all) {
index = -1;
@@ -532,7 +605,7 @@ static bool override_remove_button_poll(bContext *C)
const int override_status = RNA_property_override_library_status(&ptr, prop, index);
- return (ptr.data && ptr.id.data && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDDEN));
+ return (ptr.data && ptr.owner_id && prop && (override_status & RNA_OVERRIDE_STATUS_OVERRIDDEN));
}
static int override_remove_button_exec(bContext *C, wmOperator *op)
@@ -546,7 +619,7 @@ static int override_remove_button_exec(bContext *C, wmOperator *op)
/* try to reset the nominated setting to its default value */
UI_context_active_but_prop_get(C, &ptr, &prop, &index);
- ID *id = ptr.id.data;
+ ID *id = ptr.owner_id;
IDOverrideLibraryProperty *oprop = RNA_property_override_property_find(&ptr, prop);
BLI_assert(oprop != NULL);
BLI_assert(id != NULL && id->override_library != NULL);
@@ -556,8 +629,9 @@ static int override_remove_button_exec(bContext *C, wmOperator *op)
/* We need source (i.e. linked data) to restore values of deleted overrides...
* If this is an override template, we obviously do not need to restore anything. */
if (!is_template) {
+ PropertyRNA *src_prop;
RNA_id_pointer_create(id->override_library->reference, &id_refptr);
- if (!RNA_path_resolve(&id_refptr, oprop->rna_path, &src, NULL)) {
+ if (!RNA_path_resolve_property(&id_refptr, oprop->rna_path, &src, &src_prop)) {
BLI_assert(0 && "Failed to create matching source (linked data) RNA pointer");
}
}
@@ -647,7 +721,7 @@ bool UI_context_copy_to_selected_list(bContext *C,
CollectionPointerLink *link;
for (link = lb.first; link; link = link->next) {
bPoseChannel *pchan = link->ptr.data;
- RNA_pointer_create(link->ptr.id.data, &RNA_Bone, pchan->bone, &link->ptr);
+ RNA_pointer_create(link->ptr.owner_id, &RNA_Bone, pchan->bone, &link->ptr);
}
}
@@ -666,7 +740,7 @@ bool UI_context_copy_to_selected_list(bContext *C,
/* Get the node we're editing */
if (RNA_struct_is_a(ptr->type, &RNA_NodeSocket)) {
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = ptr->data;
if (nodeFindNode(ntree, sock, &node, NULL)) {
if ((path = RNA_path_resolve_from_type_to_property(ptr, prop, &RNA_Node)) != NULL) {
@@ -700,8 +774,8 @@ bool UI_context_copy_to_selected_list(bContext *C,
*r_lb = lb;
*r_path = path;
}
- else if (ptr->id.data) {
- ID *id = ptr->id.data;
+ else if (ptr->owner_id) {
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_OB) {
*r_lb = CTX_data_collection_get(C, "selected_editable_objects");
@@ -719,7 +793,7 @@ bool UI_context_copy_to_selected_list(bContext *C,
CollectionPointerLink *link, *link_next;
for (link = lb.first; link; link = link->next) {
- Object *ob = link->ptr.id.data;
+ Object *ob = (Object *)link->ptr.owner_id;
if (ob->data) {
ID *id_data = ob->data;
id_data->tag |= LIB_TAG_DOIT;
@@ -727,7 +801,7 @@ bool UI_context_copy_to_selected_list(bContext *C,
}
for (link = lb.first; link; link = link_next) {
- Object *ob = link->ptr.id.data;
+ Object *ob = (Object *)link->ptr.owner_id;
ID *id_data = ob->data;
link_next = link->next;
@@ -799,7 +873,7 @@ static bool copy_to_selected_button(bContext *C, bool all, bool poll)
if (use_path_from_id) {
/* Path relative to ID. */
lprop = NULL;
- RNA_id_pointer_create(link->ptr.id.data, &idptr);
+ RNA_id_pointer_create(link->ptr.owner_id, &idptr);
RNA_path_resolve_property(&idptr, path, &lptr, &lprop);
}
else if (path) {
@@ -909,12 +983,12 @@ static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll)
/* Find the containing Object. */
ViewLayer *view_layer = CTX_data_view_layer(C);
Base *base = NULL;
- const short id_type = GS(((ID *)ptr.id.data)->name);
+ const short id_type = GS(ptr.owner_id->name);
if (id_type == ID_OB) {
- base = BKE_view_layer_base_find(view_layer, ptr.id.data);
+ base = BKE_view_layer_base_find(view_layer, (Object *)ptr.owner_id);
}
else if (OB_DATA_SUPPORT_ID(id_type)) {
- base = ED_object_find_first_by_data_id(view_layer, ptr.id.data);
+ base = ED_object_find_first_by_data_id(view_layer, ptr.owner_id);
}
bool ok = false;
@@ -1023,60 +1097,6 @@ static void UI_OT_jump_to_target_button(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Reports to Textblock Operator
- * \{ */
-
-/* FIXME: this is just a temporary operator so that we can see all the reports somewhere
- * when there are too many to display...
- */
-
-static bool reports_to_text_poll(bContext *C)
-{
- return CTX_wm_reports(C) != NULL;
-}
-
-static int reports_to_text_exec(bContext *C, wmOperator *UNUSED(op))
-{
- ReportList *reports = CTX_wm_reports(C);
- Main *bmain = CTX_data_main(C);
- Text *txt;
- char *str;
-
- /* create new text-block to write to */
- txt = BKE_text_add(bmain, "Recent Reports");
-
- /* convert entire list to a display string, and add this to the text-block
- * - if commandline debug option enabled, show debug reports too
- * - otherwise, up to info (which is what users normally see)
- */
- str = BKE_reports_string(reports, (G.debug & G_DEBUG) ? RPT_DEBUG : RPT_INFO);
-
- if (str) {
- BKE_text_write(txt, str);
- MEM_freeN(str);
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
-}
-
-static void UI_OT_reports_to_textblock(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Reports to Text Block";
- ot->idname = "UI_OT_reports_to_textblock";
- ot->description = "Write the reports ";
-
- /* callbacks */
- ot->poll = reports_to_text_poll;
- ot->exec = reports_to_text_exec;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
/** \name Edit Python Source Operator
* \{ */
@@ -1668,6 +1688,7 @@ static void UI_OT_drop_color(wmOperatorType *ot)
void ED_operatortypes_ui(void)
{
WM_operatortype_append(UI_OT_copy_data_path_button);
+ WM_operatortype_append(UI_OT_copy_as_driver_button);
WM_operatortype_append(UI_OT_copy_python_command_button);
WM_operatortype_append(UI_OT_reset_default_button);
WM_operatortype_append(UI_OT_assign_default_button);
@@ -1676,7 +1697,6 @@ void ED_operatortypes_ui(void)
WM_operatortype_append(UI_OT_override_remove_button);
WM_operatortype_append(UI_OT_copy_to_selected_button);
WM_operatortype_append(UI_OT_jump_to_target_button);
- WM_operatortype_append(UI_OT_reports_to_textblock); /* XXX: temp? */
WM_operatortype_append(UI_OT_drop_color);
#ifdef WITH_PYTHON
WM_operatortype_append(UI_OT_editsource);
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 215b0c3c410..8adb82a22c8 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -721,7 +721,7 @@ void ui_draw_aligned_panel(uiStyle *style,
(block->aspect * U.inv_dpi_fac),
1.0f,
0.0f,
- (const char *)col_title,
+ col_title,
false);
GPU_blend(false);
}
diff --git a/source/blender/editors/interface/interface_region_popup.c b/source/blender/editors/interface/interface_region_popup.c
index f3e18cc2f24..2073117d51c 100644
--- a/source/blender/editors/interface/interface_region_popup.c
+++ b/source/blender/editors/interface/interface_region_popup.c
@@ -690,9 +690,11 @@ uiBlock *ui_popup_block_refresh(bContext *C,
/* Avoid menu moving down and losing cursor focus by keeping it at
* the same height. */
if (handle->refresh && handle->prev_block_rect.ymax > block->rect.ymax) {
- float offset = handle->prev_block_rect.ymax - block->rect.ymax;
- UI_block_translate(block, 0, offset);
- block->rect.ymin = handle->prev_block_rect.ymin;
+ if (block->bounds_type != UI_BLOCK_BOUNDS_POPUP_CENTER) {
+ float offset = handle->prev_block_rect.ymax - block->rect.ymax;
+ UI_block_translate(block, 0, offset);
+ block->rect.ymin = handle->prev_block_rect.ymin;
+ }
}
handle->prev_block_rect = block->rect;
diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index f10702f3f3b..f2ca9cebf7b 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -174,10 +174,10 @@ static void ui_tooltip_region_draw_cb(const bContext *UNUSED(C), ARegion *ar)
ui_draw_tooltip_background(UI_style_get(), NULL, &bbox);
/* set background_color */
- rgb_uchar_to_float(background_color, (const uchar *)theme->inner);
+ rgb_uchar_to_float(background_color, theme->inner);
/* calculate normal_color */
- rgb_uchar_to_float(main_color, (const uchar *)theme->text);
+ rgb_uchar_to_float(main_color, theme->text);
copy_v3_v3(active_color, main_color);
copy_v3_v3(normal_color, main_color);
copy_v3_v3(python_color, main_color);
@@ -396,11 +396,23 @@ static uiTooltipData *ui_tooltip_data_from_tool(bContext *C, uiBut *but, bool is
else {
/* Note, this is an exceptional case, we could even remove it
* however there have been reports of tooltips failing, so keep it for now. */
- expr_result = BLI_strdup("Internal error!");
+ expr_result = BLI_strdup(IFACE_("Internal error!"));
is_error = true;
}
if (expr_result != NULL) {
+ /* NOTE: This is a very weak hack to get a valid translation most of the time...
+ * Proper way to do would be to get i18n context from the item, somehow. */
+ const char *label_str = CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, expr_result);
+ if (label_str == expr_result) {
+ label_str = IFACE_(expr_result);
+ }
+
+ if (label_str != expr_result) {
+ MEM_freeN(expr_result);
+ expr_result = BLI_strdup(label_str);
+ }
+
uiTooltipField *field = text_field_add(data,
&(uiTooltipFormat){
.style = UI_TIP_STYLE_NORMAL,
@@ -437,7 +449,7 @@ static uiTooltipData *ui_tooltip_data_from_tool(bContext *C, uiBut *but, bool is
else {
/* Note, this is an exceptional case, we could even remove it
* however there have been reports of tooltips failing, so keep it for now. */
- expr_result = BLI_strdup("Internal error!");
+ expr_result = BLI_strdup(TIP_("Internal error!"));
is_error = true;
}
@@ -753,8 +765,8 @@ static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but)
}
}
- if (but->rnapoin.id.data) {
- const ID *id = but->rnapoin.id.data;
+ if (but->rnapoin.owner_id) {
+ const ID *id = but->rnapoin.owner_id;
if (ID_IS_LINKED(id)) {
uiTooltipField *field = text_field_add(data,
&(uiTooltipFormat){
@@ -835,7 +847,7 @@ static uiTooltipData *ui_tooltip_data_from_button(bContext *C, uiBut *but)
}
}
- if (but->rnapoin.id.data) {
+ if (but->rnapoin.owner_id) {
uiTooltipField *field = text_field_add(data,
&(uiTooltipFormat){
.style = UI_TIP_STYLE_MONO,
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 1fc1af9815f..1c6618bc509 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -121,7 +121,7 @@ static void template_add_button_search_menu(const bContext *C,
{
PointerRNA active_ptr = RNA_property_pointer_get(ptr, prop);
ID *id = (active_ptr.data && RNA_struct_is_ID(active_ptr.type)) ? active_ptr.data : NULL;
- const ID *idfrom = ptr->id.data;
+ const ID *idfrom = ptr->owner_id;
const StructRNA *type = active_ptr.type ? active_ptr.type : RNA_property_pointer_type(ptr, prop);
uiBut *but;
@@ -310,7 +310,7 @@ static bool id_search_add(const bContext *C,
uiSearchItems *items,
ID *id)
{
- ID *id_from = template_ui->ptr.id.data;
+ ID *id_from = template_ui->ptr.owner_id;
if (!((flag & PROP_ID_SELF_CHECK) && id == id_from)) {
@@ -401,7 +401,7 @@ static void id_search_cb_objects_from_scene(const bContext *C,
TemplateID *template_ui = (TemplateID *)arg_template;
ListBase *lb = template_ui->idlb;
Scene *scene = NULL;
- ID *id_from = template_ui->ptr.id.data;
+ ID *id_from = template_ui->ptr.owner_id;
if (id_from && GS(id_from->name) == ID_SCE) {
scene = (Scene *)id_from;
@@ -667,7 +667,7 @@ static uiBut *template_id_def_new_but(uiBlock *block,
const bool use_tab_but,
int but_height)
{
- ID *idfrom = template_ui->ptr.id.data;
+ ID *idfrom = template_ui->ptr.owner_id;
uiBut *but;
const int w = id ? UI_UNIT_X : id_open ? UI_UNIT_X * 3 : UI_UNIT_X * 6;
const int but_type = use_tab_but ? UI_BTYPE_TAB : UI_BTYPE_BUT;
@@ -769,7 +769,7 @@ static void template_ID(bContext *C,
idptr = RNA_property_pointer_get(&template_ui->ptr, template_ui->prop);
id = idptr.data;
- idfrom = template_ui->ptr.id.data;
+ idfrom = template_ui->ptr.owner_id;
// lb = template_ui->idlb;
block = uiLayoutGetBlock(layout);
@@ -2037,7 +2037,7 @@ uiLayout *uiTemplateModifier(uiLayout *layout, bContext *C, PointerRNA *ptr)
return NULL;
}
- ob = ptr->id.data;
+ ob = (Object *)ptr->owner_id;
md = ptr->data;
if (!ob || !(GS(ob->id.name) == ID_OB)) {
@@ -2179,7 +2179,7 @@ uiLayout *uiTemplateGpencilModifier(uiLayout *layout, bContext *UNUSED(C), Point
return NULL;
}
- ob = ptr->id.data;
+ ob = (Object *)ptr->owner_id;
md = ptr->data;
if (!ob || !(GS(ob->id.name) == ID_OB)) {
@@ -2297,7 +2297,7 @@ uiLayout *uiTemplateShaderFx(uiLayout *layout, bContext *UNUSED(C), PointerRNA *
return NULL;
}
- ob = ptr->id.data;
+ ob = (Object *)ptr->owner_id;
fx = ptr->data;
if (!ob || !(GS(ob->id.name) == ID_OB)) {
@@ -2523,7 +2523,7 @@ static uiLayout *draw_constraint(uiLayout *layout, Object *ob, bConstraint *con)
/* enabled */
UI_block_emboss_set(block, UI_EMBOSS_NONE);
- uiItemR(row, &ptr, "mute", 0, "", (con->flag & CONSTRAINT_OFF) ? ICON_HIDE_ON : ICON_HIDE_OFF);
+ uiItemR(row, &ptr, "mute", 0, "", 0);
UI_block_emboss_set(block, UI_EMBOSS);
uiLayoutSetOperatorContext(row, WM_OP_INVOKE_DEFAULT);
@@ -2579,7 +2579,7 @@ uiLayout *uiTemplateConstraint(uiLayout *layout, PointerRNA *ptr)
return NULL;
}
- ob = ptr->id.data;
+ ob = (Object *)ptr->owner_id;
con = ptr->data;
if (!ob || !(GS(ob->id.name) == ID_OB)) {
@@ -3098,7 +3098,7 @@ static void colorband_buttons_layout(uiLayout *layout,
float ys = butr->ymin;
PointerRNA ptr;
- RNA_pointer_create(cb->ptr.id.data, &RNA_ColorRamp, coba, &ptr);
+ RNA_pointer_create(cb->ptr.owner_id, &RNA_ColorRamp, coba, &ptr);
split = uiLayoutSplit(layout, 0.4f, false);
@@ -3190,7 +3190,7 @@ static void colorband_buttons_layout(uiLayout *layout,
if (coba->tot) {
CBData *cbd = coba->data + coba->cur;
- RNA_pointer_create(cb->ptr.id.data, &RNA_ColorRampElement, cbd, &ptr);
+ RNA_pointer_create(cb->ptr.owner_id, &RNA_ColorRampElement, cbd, &ptr);
if (!expand) {
split = uiLayoutSplit(layout, 0.3f, false);
@@ -3283,7 +3283,7 @@ void uiTemplateColorRamp(uiLayout *layout, PointerRNA *ptr, const char *propname
block = uiLayoutAbsoluteBlock(layout);
- id = cptr.id.data;
+ id = cptr.owner_id;
UI_block_lock_set(block, (id && ID_IS_LINKED(id)), ERROR_LIBDATA_MESSAGE);
colorband_buttons_layout(layout, block, cptr.data, &rect, cb, expand);
@@ -3723,15 +3723,15 @@ static void curvemap_buttons_setclip(bContext *UNUSED(C), void *cumap_v, void *U
{
CurveMapping *cumap = cumap_v;
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
}
static void curvemap_buttons_delete(bContext *C, void *cb_v, void *cumap_v)
{
CurveMapping *cumap = cumap_v;
- curvemap_remove(cumap->cm + cumap->cur, SELECT);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_remove(cumap->cm + cumap->cur, SELECT);
+ BKE_curvemapping_changed(cumap, false);
rna_update_cb(C, cb_v, NULL);
}
@@ -3829,7 +3829,7 @@ static uiBlock *curvemap_clipping_func(bContext *C, ARegion *ar, void *cumap_v)
return block;
}
-/* only for curvemap_tools_dofunc */
+/* only for BKE_curvemap_tools_dofunc */
enum {
UICURVE_FUNC_RESET_NEG,
UICURVE_FUNC_RESET_POS,
@@ -3849,35 +3849,35 @@ static void curvemap_tools_dofunc(bContext *C, void *cumap_v, int event)
switch (event) {
case UICURVE_FUNC_RESET_NEG:
case UICURVE_FUNC_RESET_POS: /* reset */
- curvemap_reset(cuma,
- &cumap->clipr,
- cumap->preset,
- (event == UICURVE_FUNC_RESET_NEG) ? CURVEMAP_SLOPE_NEGATIVE :
- CURVEMAP_SLOPE_POSITIVE);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_reset(cuma,
+ &cumap->clipr,
+ cumap->preset,
+ (event == UICURVE_FUNC_RESET_NEG) ? CURVEMAP_SLOPE_NEGATIVE :
+ CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemapping_changed(cumap, false);
break;
case UICURVE_FUNC_RESET_VIEW:
cumap->curr = cumap->clipr;
break;
case UICURVE_FUNC_HANDLE_VECTOR: /* set vector */
- curvemap_handle_set(cuma, HD_VECT);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_handle_set(cuma, HD_VECT);
+ BKE_curvemapping_changed(cumap, false);
break;
case UICURVE_FUNC_HANDLE_AUTO: /* set auto */
- curvemap_handle_set(cuma, HD_AUTO);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_handle_set(cuma, HD_AUTO);
+ BKE_curvemapping_changed(cumap, false);
break;
case UICURVE_FUNC_HANDLE_AUTO_ANIM: /* set auto-clamped */
- curvemap_handle_set(cuma, HD_AUTO_ANIM);
- curvemapping_changed(cumap, false);
+ BKE_curvemap_handle_set(cuma, HD_AUTO_ANIM);
+ BKE_curvemapping_changed(cumap, false);
break;
case UICURVE_FUNC_EXTEND_HOZ: /* extend horiz */
cuma->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
break;
case UICURVE_FUNC_EXTEND_EXP: /* extend extrapolate */
cuma->flag |= CUMA_EXTEND_EXTRAPOLATE;
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
break;
}
ED_undo_push(C, "CurveMap tools");
@@ -4041,7 +4041,7 @@ static void curvemap_buttons_redraw(bContext *C, void *UNUSED(arg1), void *UNUSE
static void curvemap_buttons_update(bContext *C, void *arg1_v, void *cumap_v)
{
CurveMapping *cumap = cumap_v;
- curvemapping_changed(cumap, true);
+ BKE_curvemapping_changed(cumap, true);
rna_update_cb(C, arg1_v, NULL);
}
@@ -4052,20 +4052,23 @@ 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_SLOPE_POSITIVE);
+ BKE_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;
- curvemapping_set_black_white(cumap, NULL, NULL);
+ BKE_curvemapping_set_black_white(cumap, NULL, NULL);
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
rna_update_cb(C, cb_v, NULL);
}
-/* still unsure how this call evolves...
- * we use labeltype for defining what curve-channels to show */
+/**
+ * \note Still unsure how this call evolves.
+ *
+ * \param labeltype: Used for defining which curve-channels to show.
+ */
static void curvemap_buttons_layout(uiLayout *layout,
PointerRNA *ptr,
char labeltype,
@@ -4402,7 +4405,7 @@ void uiTemplateCurveMapping(uiLayout *layout,
cb->ptr = *ptr;
cb->prop = prop;
- id = cptr.id.data;
+ id = cptr.owner_id;
UI_block_lock_set(block, (id && ID_IS_LINKED(id)), ERROR_LIBDATA_MESSAGE);
curvemap_buttons_layout(layout, &cptr, type, levels, brush, neg_slope, tone, cb);
@@ -6057,13 +6060,13 @@ static void do_running_jobs(bContext *C, void *UNUSED(arg), int event)
WM_jobs_stop(CTX_wm_manager(C), CTX_data_scene(C), NULL);
break;
case B_STOPSEQ:
- WM_jobs_stop(CTX_wm_manager(C), CTX_wm_area(C), NULL);
+ WM_jobs_stop(CTX_wm_manager(C), CTX_data_scene(C), NULL);
break;
case B_STOPCLIP:
- WM_jobs_stop(CTX_wm_manager(C), CTX_wm_area(C), NULL);
+ WM_jobs_stop(CTX_wm_manager(C), CTX_data_scene(C), NULL);
break;
case B_STOPFILE:
- WM_jobs_stop(CTX_wm_manager(C), CTX_wm_area(C), NULL);
+ WM_jobs_stop(CTX_wm_manager(C), CTX_data_scene(C), NULL);
break;
case B_STOPOTHER:
G.is_break = true;
@@ -6116,80 +6119,96 @@ void uiTemplateRunningJobs(uiLayout *layout, bContext *C)
UI_block_func_handle_set(block, do_running_jobs, NULL);
- if (sa->spacetype == SPACE_SEQ) {
- if (WM_jobs_test(wm, sa, WM_JOB_TYPE_ANY)) {
- owner = sa;
+ Scene *scene;
+ /* another scene can be rendering too, for example via compositor */
+ for (scene = CTX_data_main(C)->scenes.first; scene; scene = scene->id.next) {
+ if (WM_jobs_test(wm, scene, WM_JOB_TYPE_ANY)) {
+ handle_event = B_STOPOTHER;
+ icon = ICON_NONE;
+ owner = scene;
}
- handle_event = B_STOPSEQ;
- icon = ICON_SEQUENCE;
- }
- else if (sa->spacetype == SPACE_CLIP) {
- if (WM_jobs_test(wm, sa, WM_JOB_TYPE_ANY)) {
- owner = sa;
+ else {
+ continue;
}
- handle_event = B_STOPCLIP;
- icon = ICON_TRACKER;
- }
- else if (sa->spacetype == SPACE_FILE) {
- if (WM_jobs_test(wm, sa, WM_JOB_TYPE_FILESEL_READDIR)) {
- owner = sa;
+
+ if (WM_jobs_test(wm, scene, WM_JOB_TYPE_SEQ_BUILD_PROXY)) {
+ handle_event = B_STOPSEQ;
+ icon = ICON_SEQUENCE;
+ owner = scene;
+ break;
}
- handle_event = B_STOPFILE;
- icon = ICON_FILEBROWSER;
- }
- else {
- Scene *scene;
- /* another scene can be rendering too, for example via compositor */
- for (scene = CTX_data_main(C)->scenes.first; scene; scene = scene->id.next) {
- if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER)) {
- handle_event = B_STOPRENDER;
- icon = ICON_SCENE;
- break;
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_COMPOSITE)) {
- handle_event = B_STOPCOMPO;
- icon = ICON_RENDERLAYERS;
- break;
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_BAKE_TEXTURE) ||
- WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_BAKE)) {
- /* Skip bake jobs in compositor to avoid compo header displaying
- * progress bar which is not being updated (bake jobs only need
- * to update NC_IMAGE context.
- */
- if (sa->spacetype != SPACE_NODE) {
- handle_event = B_STOPOTHER;
- icon = ICON_IMAGE;
- break;
- }
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_DPAINT_BAKE)) {
- handle_event = B_STOPOTHER;
- icon = ICON_MOD_DYNAMICPAINT;
- break;
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_POINTCACHE)) {
- handle_event = B_STOPOTHER;
- icon = ICON_PHYSICS;
- break;
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_SIM_FLUID)) {
- handle_event = B_STOPOTHER;
- icon = ICON_MOD_FLUIDSIM;
- break;
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_SIM_OCEAN)) {
- handle_event = B_STOPOTHER;
- icon = ICON_MOD_OCEAN;
- break;
- }
- else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_ANY)) {
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_SEQ_BUILD_PREVIEW)) {
+ handle_event = B_STOPSEQ;
+ icon = ICON_SEQUENCE;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_CLIP_BUILD_PROXY)) {
+ handle_event = B_STOPCLIP;
+ icon = ICON_TRACKER;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_CLIP_PREFETCH)) {
+ handle_event = B_STOPCLIP;
+ icon = ICON_TRACKER;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_CLIP_TRACK_MARKERS)) {
+ handle_event = B_STOPCLIP;
+ icon = ICON_TRACKER;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_CLIP_SOLVE_CAMERA)) {
+ handle_event = B_STOPCLIP;
+ icon = ICON_TRACKER;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_FILESEL_READDIR)) {
+ handle_event = B_STOPFILE;
+ icon = ICON_FILEBROWSER;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_RENDER)) {
+ handle_event = B_STOPRENDER;
+ icon = ICON_SCENE;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_COMPOSITE)) {
+ handle_event = B_STOPCOMPO;
+ icon = ICON_RENDERLAYERS;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_BAKE_TEXTURE) ||
+ WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_BAKE)) {
+ /* Skip bake jobs in compositor to avoid compo header displaying
+ * progress bar which is not being updated (bake jobs only need
+ * to update NC_IMAGE context.
+ */
+ if (sa->spacetype != SPACE_NODE) {
handle_event = B_STOPOTHER;
- icon = ICON_NONE;
+ icon = ICON_IMAGE;
break;
}
}
- owner = scene;
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_DPAINT_BAKE)) {
+ handle_event = B_STOPOTHER;
+ icon = ICON_MOD_DYNAMICPAINT;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_POINTCACHE)) {
+ handle_event = B_STOPOTHER;
+ icon = ICON_PHYSICS;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_SIM_FLUID)) {
+ handle_event = B_STOPOTHER;
+ icon = ICON_MOD_FLUIDSIM;
+ break;
+ }
+ else if (WM_jobs_test(wm, scene, WM_JOB_TYPE_OBJECT_SIM_OCEAN)) {
+ handle_event = B_STOPOTHER;
+ icon = ICON_MOD_OCEAN;
+ break;
+ }
}
if (owner) {
@@ -6359,7 +6378,7 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C)
if (reports->list.first != reports->list.last) {
uiDefIconButO(block,
UI_BTYPE_BUT,
- "UI_OT_reports_to_textblock",
+ "SCREEN_OT_info_log_show",
WM_OP_INVOKE_REGION_WIN,
icon,
2,
@@ -6373,22 +6392,17 @@ void uiTemplateReportsBanner(uiLayout *layout, bContext *C)
block, UI_BTYPE_LABEL, 0, icon, 2, 0, UI_UNIT_X, UI_UNIT_Y, NULL, 0.0f, 0.0f, 0, 0, "");
}
- UI_block_emboss_set(block, UI_EMBOSS);
-
- uiDefBut(block,
- UI_BTYPE_LABEL,
- 0,
- report->message,
- UI_UNIT_X + 5,
- 0,
- UI_UNIT_X + width,
- UI_UNIT_Y,
- NULL,
- 0.0f,
- 0.0f,
- 0,
- 0,
- "");
+ but = uiDefButO(block,
+ UI_BTYPE_BUT,
+ "SCREEN_OT_info_log_show",
+ WM_OP_INVOKE_REGION_WIN,
+ report->message,
+ UI_UNIT_X + 5,
+ 0,
+ UI_UNIT_X + width,
+ UI_UNIT_Y,
+ "Show in Info Log");
+ rgba_float_to_uchar(but->col, rti->col);
}
void uiTemplateInputStatus(uiLayout *layout, struct bContext *C)
diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c
index bf52cc625c2..63e382e2280 100644
--- a/source/blender/editors/interface/interface_utils.c
+++ b/source/blender/editors/interface/interface_utils.c
@@ -405,7 +405,7 @@ void ui_rna_collection_search_cb(const struct bContext *C,
RNA_PROP_BEGIN (&data->search_ptr, itemptr, data->search_prop) {
if (flag & PROP_ID_SELF_CHECK) {
- if (itemptr.data == data->target_ptr.id.data) {
+ if (itemptr.data == data->target_ptr.owner_id) {
continue;
}
}
@@ -417,8 +417,9 @@ void ui_rna_collection_search_cb(const struct bContext *C,
}
}
- name = RNA_struct_name_get_alloc(
- &itemptr, NULL, 0, NULL); /* could use the string length here */
+ /* Could use the string length here. */
+ name = RNA_struct_name_get_alloc(&itemptr, NULL, 0, NULL);
+
iconid = 0;
if (itemptr.type && RNA_struct_is_ID(itemptr.type)) {
iconid = ui_id_icon_get(C, itemptr.data, false);
@@ -565,7 +566,7 @@ int UI_calc_float_precision(int prec, double value)
bool UI_but_online_manual_id(const uiBut *but, char *r_str, size_t maxlength)
{
- if (but->rnapoin.id.data && but->rnapoin.data && but->rnaprop) {
+ if (but->rnapoin.owner_id && but->rnapoin.data && but->rnaprop) {
BLI_snprintf(r_str,
maxlength,
"%s.%s",
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index 0bf8247dc17..d16986ede8f 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1135,7 +1135,7 @@ static void shape_preset_trias_from_rect_checkmark(uiWidgetTrias *tria, const rc
/* prepares shade colors */
static void shadecolors4(
- char coltop[4], char coldown[4], const char *color, short shadetop, short shadedown)
+ uchar coltop[4], uchar coldown[4], const uchar *color, short shadetop, short shadedown)
{
coltop[0] = CLAMPIS(color[0] + shadetop, 0, 255);
coltop[1] = CLAMPIS(color[1] + shadetop, 0, 255);
@@ -1149,8 +1149,8 @@ static void shadecolors4(
}
static void round_box_shade_col4_r(uchar r_col[4],
- const char col1[4],
- const char col2[4],
+ const uchar col1[4],
+ const uchar col2[4],
const float fac)
{
const int faci = unit_float_to_uchar_clamp(fac);
@@ -1352,15 +1352,14 @@ static void widgetbase_draw_ex(uiWidgetBase *wtb,
if (wtb->draw_inner) {
if (wcol->shaded == 0) {
/* simple fill */
- inner_col1[0] = inner_col2[0] = (uchar)wcol->inner[0];
- inner_col1[1] = inner_col2[1] = (uchar)wcol->inner[1];
- inner_col1[2] = inner_col2[2] = (uchar)wcol->inner[2];
- inner_col1[3] = inner_col2[3] = (uchar)wcol->inner[3];
+ inner_col1[0] = inner_col2[0] = wcol->inner[0];
+ inner_col1[1] = inner_col2[1] = wcol->inner[1];
+ inner_col1[2] = inner_col2[2] = wcol->inner[2];
+ inner_col1[3] = inner_col2[3] = wcol->inner[3];
}
else {
/* gradient fill */
- shadecolors4(
- (char *)inner_col1, (char *)inner_col2, wcol->inner, wcol->shadetop, wcol->shadedown);
+ shadecolors4(inner_col1, inner_col2, wcol->inner, wcol->shadetop, wcol->shadedown);
}
}
@@ -1436,7 +1435,7 @@ static int ui_but_draw_menu_icon(const uiBut *but)
/* icons have been standardized... and this call draws in untransformed coordinates */
static void widget_draw_icon(
- const uiBut *but, BIFIconID icon, float alpha, const rcti *rect, const char mono_color[4])
+ const uiBut *but, BIFIconID icon, float alpha, const rcti *rect, const uchar mono_color[4])
{
float xs = 0.0f, ys = 0.0f;
float aspect, height;
@@ -1510,8 +1509,8 @@ static void widget_draw_icon(
}
/* Get theme color. */
- char color[4] = {mono_color[0], mono_color[1], mono_color[2], mono_color[3]};
- bool has_theme = UI_icon_get_theme_color(icon, (uchar *)color);
+ uchar color[4] = {mono_color[0], mono_color[1], mono_color[2], mono_color[3]};
+ bool has_theme = UI_icon_get_theme_color(icon, color);
/* to indicate draggable */
if (but->dragpoin && (but->flag & UI_ACTIVE)) {
@@ -1548,7 +1547,7 @@ static void widget_draw_submenu_tria(const uiBut *but,
float col[4];
rctf tria_rect;
- rgba_uchar_to_float(col, (const uchar *)wcol->text);
+ rgba_uchar_to_float(col, wcol->text);
col[3] *= 0.8f;
BLI_rctf_init(&tria_rect, xs, xs + tria_width, ys, ys + tria_height);
@@ -2099,7 +2098,7 @@ static void widget_draw_text(const uiFontStyle *fstyle,
immVertexFormat(), "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- immUniformColor4ubv((uchar *)wcol->item);
+ immUniformColor4ubv(wcol->item);
immRecti(pos,
rect->xmin + selsta_draw,
rect->ymin + 2,
@@ -2214,7 +2213,7 @@ static void widget_draw_text(const uiFontStyle *fstyle,
UI_fontstyle_draw_ex(fstyle,
rect,
drawstr + but->ofs,
- (uchar *)wcol->text,
+ wcol->text,
&(struct uiFontStyleDraw_Params){
.align = align,
},
@@ -2250,7 +2249,7 @@ static void widget_draw_text(const uiFontStyle *fstyle,
rect->xmin + font_xofs + ul_advance,
rect->ymin + font_yofs,
0.0f);
- BLF_color4ubv(fstyle->uifont_id, (uchar *)wcol->text);
+ BLF_color4ubv(fstyle->uifont_id, wcol->text);
BLF_draw(fstyle->uifont_id, "_", 2);
if (fstyle->kerning == 1) {
@@ -2263,8 +2262,8 @@ static void widget_draw_text(const uiFontStyle *fstyle,
/* part text right aligned */
if (drawstr_right) {
- char col[4];
- copy_v4_v4_char(col, wcol->text);
+ uchar col[4];
+ copy_v4_v4_uchar(col, wcol->text);
if (but->drawflag & UI_BUT_HAS_SHORTCUT) {
col[3] *= 0.5f;
}
@@ -2273,7 +2272,7 @@ static void widget_draw_text(const uiFontStyle *fstyle,
UI_fontstyle_draw(fstyle,
rect,
drawstr_right,
- (const uchar *)col,
+ col,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_RIGHT,
});
@@ -2476,7 +2475,7 @@ static void widget_draw_text_icon(const uiFontStyle *fstyle,
/* ************ button callbacks, state ***************** */
-static void widget_state_blend(char cp[3], const char cpstate[3], const float fac)
+static void widget_state_blend(uchar cp[3], const uchar cpstate[3], const float fac)
{
if (fac != 0.0f) {
cp[0] = (int)((1.0f - fac) * cp[0] + fac * cpstate[0]);
@@ -2502,18 +2501,18 @@ static void ui_widget_color_disabled(uiWidgetType *wt)
wt->wcol_theme = &wcol_theme_s;
}
-static void rgb_tint(char cp[3], int tint)
+static void rgb_tint(uchar cp[3], int tint)
{
cp[0] = clamp_i(cp[0] + tint, 0, 255);
cp[1] = clamp_i(cp[1] + tint, 0, 255);
cp[2] = clamp_i(cp[2] + tint, 0, 255);
}
-static void rgb_ensure_contrast(char cp[3], const char cp_other[3], int contrast)
+static void rgb_ensure_contrast(uchar cp[3], const uchar cp_other[3], int contrast)
{
BLI_assert(contrast > 0);
- const int item_value = rgb_to_grayscale_byte((const uchar *)cp);
- const int inner_value = rgb_to_grayscale_byte((const uchar *)cp_other);
+ const int item_value = rgb_to_grayscale_byte(cp);
+ const int inner_value = rgb_to_grayscale_byte(cp_other);
const int delta = item_value - inner_value;
if (delta >= 0) {
if (contrast > delta) {
@@ -2527,16 +2526,16 @@ static void rgb_ensure_contrast(char cp[3], const char cp_other[3], int contrast
}
}
-static void widget_active_color(char cp[3])
+static void widget_active_color(uchar cp[3])
{
cp[0] = cp[0] >= 240 ? 255 : cp[0] + 15;
cp[1] = cp[1] >= 240 ? 255 : cp[1] + 15;
cp[2] = cp[2] >= 240 ? 255 : cp[2] + 15;
}
-static const char *widget_color_blend_from_flags(const uiWidgetStateColors *wcol_state,
- int state,
- int drawflag)
+static const uchar *widget_color_blend_from_flags(const uiWidgetStateColors *wcol_state,
+ int state,
+ int drawflag)
{
if (drawflag & UI_BUT_ANIMATED_CHANGED) {
return wcol_state->inner_changed_sel;
@@ -2573,15 +2572,15 @@ static void widget_state(uiWidgetType *wt, int state, int drawflag)
wt->wcol = *(wt->wcol_theme);
- const char *color_blend = widget_color_blend_from_flags(wcol_state, state, drawflag);
+ const uchar *color_blend = widget_color_blend_from_flags(wcol_state, state, drawflag);
if (state & UI_SELECT) {
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel);
if (color_blend != NULL) {
widget_state_blend(wt->wcol.inner, color_blend, wcol_state->blend);
}
- copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
+ copy_v3_v3_uchar(wt->wcol.text, wt->wcol.text_sel);
if (state & UI_SELECT) {
SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
@@ -2598,7 +2597,7 @@ static void widget_state(uiWidgetType *wt, int state, int drawflag)
}
if (state & UI_BUT_REDALERT) {
- char red[4] = {255, 0, 0};
+ uchar red[4] = {255, 0, 0};
if (wt->draw) {
widget_state_blend(wt->wcol.inner, red, 0.4f);
}
@@ -2609,13 +2608,13 @@ static void widget_state(uiWidgetType *wt, int state, int drawflag)
if (state & UI_BUT_DRAG_MULTI) {
/* the button isn't SELECT but we're editing this so draw with sel color */
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel);
SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown);
widget_state_blend(wt->wcol.text, wt->wcol.text_sel, 0.85f);
}
if (state & UI_BUT_NODE_ACTIVE) {
- char blue[4] = {86, 128, 194};
+ uchar blue[4] = {86, 128, 194};
widget_state_blend(wt->wcol.inner, blue, 0.3f);
}
}
@@ -2628,13 +2627,12 @@ static void widget_state_numslider(uiWidgetType *wt, int state, int drawflag)
/* call this for option button */
widget_state(wt, state, drawflag);
- const char *color_blend = widget_color_blend_from_flags(wcol_state, state, drawflag);
+ const uchar *color_blend = widget_color_blend_from_flags(wcol_state, state, drawflag);
if (color_blend != NULL) {
/* Set the slider 'item' so that it reflects state settings too.
* De-saturate so the color of the slider doesn't conflict with the blend color,
* which can make the color hard to see when the slider is set to full (see T66102). */
- wt->wcol.item[0] = wt->wcol.item[1] = wt->wcol.item[2] = rgb_to_grayscale_byte(
- (const uchar *)wt->wcol.item);
+ wt->wcol.item[0] = wt->wcol.item[1] = wt->wcol.item[2] = rgb_to_grayscale_byte(wt->wcol.item);
widget_state_blend(wt->wcol.item, color_blend, wcol_state->blend);
rgb_ensure_contrast(wt->wcol.item, wt->wcol.inner, 30);
}
@@ -2654,10 +2652,10 @@ static void widget_state_option_menu(uiWidgetType *wt, int state, int drawflag)
/* if not selected we get theme from menu back */
if (state & UI_SELECT) {
- copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text_sel);
+ copy_v3_v3_uchar(wt->wcol.text, btheme->tui.wcol_menu_back.text_sel);
}
else {
- copy_v3_v3_char(wt->wcol.text, btheme->tui.wcol_menu_back.text);
+ copy_v3_v3_uchar(wt->wcol.text, btheme->tui.wcol_menu_back.text);
}
}
@@ -2682,13 +2680,13 @@ static void widget_state_pie_menu_item(uiWidgetType *wt, int state, int UNUSED(d
widget_state_blend(wt->wcol.text, wt->wcol.text_sel, 0.5f);
/* draw the backdrop at low alpha, helps navigating with keys
* when disabled items are active */
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.item);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.item);
wt->wcol.inner[3] = 64;
}
else {
/* regular active */
if (state & (UI_SELECT | UI_ACTIVE)) {
- copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
+ copy_v3_v3_uchar(wt->wcol.text, wt->wcol.text_sel);
}
else if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) {
/* regular disabled */
@@ -2696,10 +2694,10 @@ static void widget_state_pie_menu_item(uiWidgetType *wt, int state, int UNUSED(d
}
if (state & UI_SELECT) {
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel);
}
else if (state & UI_ACTIVE) {
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.item);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.item);
}
}
}
@@ -2711,16 +2709,16 @@ static void widget_state_menu_item(uiWidgetType *wt, int state, int UNUSED(drawf
/* active and disabled (not so common) */
if ((state & UI_BUT_DISABLED) && (state & UI_ACTIVE)) {
- widget_state_blend(wt->wcol.text, wt->wcol.text_sel, 0.5f);
/* draw the backdrop at low alpha, helps navigating with keys
* when disabled items are active */
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
+ wt->wcol.text[3] = 128;
+ widget_state_blend(wt->wcol.inner, wt->wcol.text, 0.5f);
wt->wcol.inner[3] = 64;
}
else {
/* regular active */
if (state & UI_ACTIVE) {
- copy_v3_v3_char(wt->wcol.text, wt->wcol.text_sel);
+ copy_v3_v3_uchar(wt->wcol.text, wt->wcol.text_sel);
}
else if (state & (UI_BUT_DISABLED | UI_BUT_INACTIVE)) {
/* regular disabled */
@@ -2728,7 +2726,7 @@ static void widget_state_menu_item(uiWidgetType *wt, int state, int UNUSED(drawf
}
if (state & UI_ACTIVE) {
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel);
}
}
}
@@ -2965,7 +2963,7 @@ static void ui_draw_but_HSVCIRCLE(uiBut *but, const uiWidgetColors *wcol, const
GPU_blend(true);
GPU_line_smooth(true);
- immUniformColor3ubv((uchar *)wcol->outline);
+ immUniformColor3ubv(wcol->outline);
imm_draw_circle_wire_2d(pos, centx, centy, radius, tot);
immUnbindProgram();
@@ -3347,7 +3345,7 @@ static void widget_numbut_draw(
wtb_zone.draw_emboss = false;
wcol_zone = *wcol;
- copy_v3_v3_char(wcol_zone.item, wcol->text);
+ copy_v3_v3_uchar(wcol_zone.item, wcol->text);
if (state & UI_STATE_ACTIVE_LEFT) {
widget_active_color(wcol_zone.inner);
}
@@ -3367,7 +3365,7 @@ static void widget_numbut_draw(
wtb_zone.tria1.type = ROUNDBOX_TRIA_ARROWS;
wcol_zone = *wcol;
- copy_v3_v3_char(wcol_zone.item, wcol->text);
+ copy_v3_v3_uchar(wcol_zone.item, wcol->text);
if (state & UI_STATE_ACTIVE_RIGHT) {
widget_active_color(wcol_zone.inner);
}
@@ -3386,7 +3384,7 @@ static void widget_numbut_draw(
wtb_zone.draw_emboss = false;
wcol_zone = *wcol;
- copy_v3_v3_char(wcol_zone.item, wcol->text);
+ copy_v3_v3_uchar(wcol_zone.item, wcol->text);
if (!(state & (UI_STATE_ACTIVE_LEFT | UI_STATE_ACTIVE_RIGHT))) {
widget_active_color(wcol_zone.inner);
}
@@ -3466,7 +3464,7 @@ void UI_draw_widget_scroll(uiWidgetColors *wcol, const rcti *rect, const rcti *s
else {
SWAP(short, wcol->shadetop, wcol->shadedown);
- copy_v4_v4_char(wcol->inner, wcol->item);
+ copy_v4_v4_uchar(wcol->inner, wcol->item);
if (wcol->shadetop > wcol->shadedown) {
wcol->shadetop += 20; /* XXX violates themes... */
@@ -3613,7 +3611,7 @@ static void widget_progressbar(
widgetbase_draw(&wtb, wcol);
/* "slider" bar color */
- copy_v3_v3_char(wcol->inner, wcol->item);
+ copy_v3_v3_uchar(wcol->inner, wcol->item);
widgetbase_draw(&wtb_bar, wcol);
/* raise text a bit */
@@ -3626,12 +3624,12 @@ static void widget_nodesocket(
{
uiWidgetBase wtb;
int radi = 5;
- char old_inner[3], old_outline[3];
+ uchar old_inner[3], old_outline[3];
widget_init(&wtb);
- copy_v3_v3_char(old_inner, wcol->inner);
- copy_v3_v3_char(old_outline, wcol->outline);
+ copy_v3_v3_uchar(old_inner, wcol->inner);
+ copy_v3_v3_uchar(old_outline, wcol->outline);
wcol->inner[0] = but->col[0];
wcol->inner[1] = but->col[1];
@@ -3652,8 +3650,8 @@ static void widget_nodesocket(
round_box_edges(&wtb, UI_CNR_ALL, rect, (float)radi);
widgetbase_draw(&wtb, wcol);
- copy_v3_v3_char(wcol->inner, old_inner);
- copy_v3_v3_char(wcol->outline, old_outline);
+ copy_v3_v3_uchar(wcol->inner, old_inner);
+ copy_v3_v3_uchar(wcol->outline, old_outline);
}
static void widget_numslider(
@@ -3662,7 +3660,7 @@ static void widget_numslider(
uiWidgetBase wtb, wtb1;
rcti rect1;
float offs, toffs;
- char outline[3];
+ uchar outline[3];
widget_init(&wtb);
widget_init(&wtb1);
@@ -3679,9 +3677,9 @@ static void widget_numslider(
if (!(state & UI_STATE_TEXT_INPUT)) {
int roundboxalign_slider = roundboxalign;
- copy_v3_v3_char(outline, wcol->outline);
- copy_v3_v3_char(wcol->outline, wcol->item);
- copy_v3_v3_char(wcol->inner, wcol->item);
+ copy_v3_v3_uchar(outline, wcol->outline);
+ copy_v3_v3_uchar(wcol->outline, wcol->item);
+ copy_v3_v3_uchar(wcol->inner, wcol->item);
if (!(state & UI_SELECT)) {
SWAP(short, wcol->shadetop, wcol->shadedown);
@@ -3723,7 +3721,7 @@ static void widget_numslider(
widgetbase_set_uniform_discard_factor(&wtb1, factor_discard);
widgetbase_draw(&wtb1, wcol);
- copy_v3_v3_char(wcol->outline, outline);
+ copy_v3_v3_uchar(wcol->outline, outline);
if (!(state & UI_SELECT)) {
SWAP(short, wcol->shadetop, wcol->shadedown);
@@ -3788,7 +3786,7 @@ static void widget_swatch(
ui_block_cm_to_display_space_v3(but->block, col);
}
- rgba_float_to_uchar((uchar *)wcol->inner, col);
+ rgba_float_to_uchar(wcol->inner, col);
const bool show_alpha_checkers = (wcol->inner[3] < 255);
wcol->shaded = 0;
@@ -3804,7 +3802,7 @@ static void widget_swatch(
widgetbase_draw_ex(&wtb, wcol, show_alpha_checkers);
if (but->a1 == UI_PALETTE_COLOR &&
- ((Palette *)but->rnapoin.id.data)->active_color == (int)but->a2) {
+ ((Palette *)but->rnapoin.owner_id)->active_color == (int)but->a2) {
float width = rect->xmax - rect->xmin;
float height = rect->ymax - rect->ymin;
/* find color luminance and change it slightly */
@@ -3923,9 +3921,9 @@ static void widget_pulldownbut(uiWidgetColors *wcol, rcti *rect, int state, int
const float rad = wcol->roundness * U.widget_unit;
if (state & UI_ACTIVE) {
- copy_v4_v4_char(wcol->inner, wcol->inner_sel);
- copy_v3_v3_char(wcol->text, wcol->text_sel);
- copy_v3_v3_char(wcol->outline, wcol->inner);
+ copy_v4_v4_uchar(wcol->inner, wcol->inner_sel);
+ copy_v3_v3_uchar(wcol->text, wcol->text_sel);
+ copy_v3_v3_uchar(wcol->outline, wcol->inner);
}
else {
wcol->inner[3] *= 1.0f - back[3];
@@ -4061,15 +4059,15 @@ static void widget_state_label(uiWidgetType *wt, int state, int drawflag)
/* call this for option button */
widget_state(wt, state, drawflag);
if (state & UI_SELECT) {
- UI_GetThemeColor3ubv(TH_TEXT_HI, (uchar *)wt->wcol.text);
+ UI_GetThemeColor3ubv(TH_TEXT_HI, wt->wcol.text);
}
else {
- UI_GetThemeColor3ubv(TH_TEXT, (uchar *)wt->wcol.text);
+ UI_GetThemeColor3ubv(TH_TEXT, wt->wcol.text);
}
}
if (state & UI_BUT_REDALERT) {
- char red[4] = {255, 0, 0};
+ uchar red[4] = {255, 0, 0};
widget_state_blend(wt->wcol.text, red, 0.4f);
}
}
@@ -4092,11 +4090,11 @@ static void widget_box(
{
uiWidgetBase wtb;
float rad;
- char old_col[3];
+ uchar old_col[3];
widget_init(&wtb);
- copy_v3_v3_char(old_col, wcol->inner);
+ copy_v3_v3_uchar(old_col, wcol->inner);
/* abuse but->hsv - if it's non-zero, use this color as the box's background */
if (but->col[3]) {
@@ -4111,7 +4109,7 @@ static void widget_box(
widgetbase_draw(&wtb, wcol);
- copy_v3_v3_char(wcol->inner, old_col);
+ copy_v3_v3_uchar(wcol->inner, old_col);
}
static void widget_but(uiWidgetColors *wcol, rcti *rect, int UNUSED(state), int roundboxalign)
@@ -4175,12 +4173,10 @@ static void widget_tab(uiWidgetColors *wcol, rcti *rect, int state, int roundbox
#ifdef USE_TAB_SHADED_HIGHLIGHT
/* create outline highlight colors */
if (is_active) {
- interp_v3_v3v3_uchar(
- theme_col_tab_highlight, (uchar *)wcol->inner_sel, (uchar *)wcol->outline, 0.2f);
+ interp_v3_v3v3_uchar(theme_col_tab_highlight, wcol->inner_sel, wcol->outline, 0.2f);
}
else {
- interp_v3_v3v3_uchar(
- theme_col_tab_highlight, (uchar *)wcol->inner, (uchar *)wcol->outline, 0.12f);
+ interp_v3_v3v3_uchar(theme_col_tab_highlight, wcol->inner, wcol->outline, 0.12f);
}
#endif
@@ -4202,7 +4198,7 @@ static void widget_tab(uiWidgetColors *wcol, rcti *rect, int state, int roundbox
#ifdef USE_TAB_SHADED_HIGHLIGHT
/* draw outline (3d look) */
- ui_draw_but_TAB_outline(rect, rad, theme_col_tab_highlight, (uchar *)wcol->inner);
+ ui_draw_but_TAB_outline(rect, rad, theme_col_tab_highlight, wcol->inner);
#endif
#ifndef USE_TAB_SHADED_HIGHLIGHT
@@ -4633,8 +4629,8 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
else {
/* with menu arrows */
- /* we could use a flag for this, but for now just check size,
- * add updown arrows if there is room. */
+ /* We could use a flag for this, but for now just check size,
+ * add up/down arrows if there is room. */
if ((!but->str[0] && but->icon && (BLI_rcti_size_x(rect) < BLI_rcti_size_y(rect) + 2)) ||
/* disable for brushes also */
(but->flag & UI_BUT_ICON_PREVIEW)) {
@@ -4819,7 +4815,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
uiWidgetType wt_back = *wt;
uiWidgetType *wt_temp = widget_type(UI_WTYPE_MENU_ITEM);
wt_temp->state(wt_temp, state, drawflag);
- copy_v4_v4_char(wt->wcol.inner, wt->wcol.inner_sel);
+ copy_v4_v4_uchar(wt->wcol.inner, wt->wcol.inner_sel);
wt->wcol.inner[3] = 128;
wt->wcol.roundness = 0.5f;
ui_draw_roundbox(&rect_orig,
@@ -4845,7 +4841,7 @@ static void ui_draw_clip_tri(uiBlock *block, rcti *rect, uiWidgetType *wt)
{
if (block) {
float draw_color[4];
- uchar *color = (uchar *)wt->wcol.text;
+ const uchar *color = wt->wcol.text;
draw_color[0] = ((float)color[0]) / 255.0f;
draw_color[1] = ((float)color[1]) / 255.0f;
@@ -4913,7 +4909,7 @@ static void ui_draw_popover_back_impl(const uiWidgetColors *wcol,
if (ELEM(direction, UI_DIR_UP, UI_DIR_DOWN)) {
uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- immUniformColor4ubv((uchar *)wcol->inner);
+ immUniformColor4ubv(wcol->inner);
GPU_blend(true);
immBegin(GPU_PRIM_TRIS, 3);
if (direction == UI_DIR_DOWN) {
@@ -4958,8 +4954,8 @@ static void draw_disk_shaded(float start,
float radius_int,
float radius_ext,
int subd,
- const char col1[4],
- const char col2[4],
+ const uchar col1[4],
+ const uchar col2[4],
bool shaded)
{
const float radius_ext_scale = (0.5f / radius_ext); /* 1 / (2 * radius_ext) */
@@ -4979,7 +4975,7 @@ static void draw_disk_shaded(float start,
}
else {
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- immUniformColor4ubv((uchar *)col1);
+ immUniformColor4ubv(col1);
}
immBegin(GPU_PRIM_TRI_STRIP, subd * 2);
@@ -5032,7 +5028,7 @@ void ui_draw_pie_center(uiBlock *block)
GPU_blend(true);
if (btheme->tui.wcol_pie_menu.shaded) {
- char col1[4], col2[4];
+ uchar col1[4], col2[4];
shadecolors4(col1,
col2,
btheme->tui.wcol_pie_menu.inner,
@@ -5060,7 +5056,7 @@ void ui_draw_pie_center(uiBlock *block)
if (!(block->pie_data.flags & UI_PIE_INVALID_DIR)) {
if (btheme->tui.wcol_pie_menu.shaded) {
- char col1[4], col2[4];
+ uchar col1[4], col2[4];
shadecolors4(col1,
col2,
btheme->tui.wcol_pie_menu.inner_sel,
@@ -5090,7 +5086,7 @@ void ui_draw_pie_center(uiBlock *block)
GPUVertFormat *format = immVertexFormat();
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- immUniformColor4ubv((uchar *)btheme->tui.wcol_pie_menu.outline);
+ immUniformColor4ubv(btheme->tui.wcol_pie_menu.outline);
imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, pie_radius_internal, subd);
imm_draw_circle_wire_2d(pos, 0.0f, 0.0f, pie_radius_external, subd);
@@ -5102,7 +5098,7 @@ void ui_draw_pie_center(uiBlock *block)
float pie_confirm_radius = U.dpi_fac * (pie_radius_internal + U.pie_menu_confirm);
float pie_confirm_external = U.dpi_fac * (pie_radius_internal + U.pie_menu_confirm + 7.0f);
- const char col[4] = {UNPACK3(btheme->tui.wcol_pie_menu.text_sel), 64};
+ const uchar col[4] = {UNPACK3(btheme->tui.wcol_pie_menu.text_sel), 64};
draw_disk_shaded(angle - range / 2.0f,
range,
pie_confirm_radius,
@@ -5144,7 +5140,7 @@ static void ui_draw_widget_back_color(uiWidgetTypeEnum type,
rcti rect_copy = *rect;
wt->state(wt, 0, 0);
if (color) {
- rgba_float_to_uchar((uchar *)wt->wcol.inner, color);
+ rgba_float_to_uchar(wt->wcol.inner, color);
}
wt->draw(&wt->wcol, &rect_copy, 0, UI_CNR_ALL);
}
@@ -5222,7 +5218,7 @@ void ui_draw_menu_item(
UI_fontstyle_draw(fstyle,
rect,
drawstr,
- (uchar *)wt->wcol.text,
+ wt->wcol.text,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_LEFT,
});
@@ -5235,7 +5231,7 @@ void ui_draw_menu_item(
UI_fontstyle_draw(fstyle,
rect,
cpoin + 1,
- (uchar *)wt->wcol.text,
+ wt->wcol.text,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_RIGHT,
});
@@ -5303,7 +5299,7 @@ void ui_draw_preview_item(
UI_fontstyle_draw(fstyle,
&trect,
drawstr,
- (uchar *)wt->wcol.text,
+ wt->wcol.text,
&(struct uiFontStyleDraw_Params){
.align = UI_STYLE_TEXT_CENTER,
});
diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c
index 25116934b06..7c5d5401d08 100644
--- a/source/blender/editors/interface/resources.c
+++ b/source/blender/editors/interface/resources.c
@@ -83,12 +83,12 @@ void ui_resources_free(void)
const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
{
ThemeSpace *ts = NULL;
- static char error[4] = {240, 0, 240, 255};
- static char alert[4] = {240, 60, 60, 255};
- static char headerdesel[4] = {0, 0, 0, 255};
- static char back[4] = {0, 0, 0, 255};
- static char setting = 0;
- const char *cp = error;
+ static uchar error[4] = {240, 0, 240, 255};
+ static uchar alert[4] = {240, 60, 60, 255};
+ static uchar headerdesel[4] = {0, 0, 0, 255};
+ static uchar back[4] = {0, 0, 0, 255};
+ static uchar setting = 0;
+ const uchar *cp = error;
/* ensure we're not getting a color after running BKE_blender_userdef_free */
BLI_assert(BLI_findindex(&U.themes, theme_active) != -1);
@@ -186,7 +186,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
cp = ts->button;
}
- copy_v4_v4_char(back, cp);
+ copy_v4_v4_uchar(back, cp);
if (!ED_region_is_overlap(spacetype, theme_regionid)) {
back[3] = 255;
}
@@ -794,6 +794,10 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
cp = ts->selected_highlight;
break;
+ case TH_SELECT_ACTIVE:
+ cp = ts->active;
+ break;
+
case TH_SELECTED_OBJECT:
cp = ts->selected_object;
break;
@@ -903,7 +907,7 @@ const uchar *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
break;
case TH_ICON_FUND: {
/* Development fund icon color is not part of theme. */
- static const char red[4] = {204, 48, 72, 255};
+ static const uchar red[4] = {204, 48, 72, 255};
cp = red;
break;
}
diff --git a/source/blender/editors/interface/view2d_gizmo_navigate.c b/source/blender/editors/interface/view2d_gizmo_navigate.c
index 1558d0d835f..9b15f2309a1 100644
--- a/source/blender/editors/interface/view2d_gizmo_navigate.c
+++ b/source/blender/editors/interface/view2d_gizmo_navigate.c
@@ -179,9 +179,6 @@ static void WIDGETGROUP_navigate_setup(const bContext *UNUSED(C), wmGizmoGroup *
gz->ptr, "draw_options", ED_GIZMO_BUTTON_SHOW_OUTLINE | ED_GIZMO_BUTTON_SHOW_BACKDROP);
}
- /* Not needed, just match 3D view where it is needed. */
- WM_gizmo_set_flag(gz, WM_GIZMO_EVENT_HANDLE_ALL, true);
-
wmOperatorType *ot = WM_operatortype_find(info->opname, true);
WM_gizmo_operator_set(gz, 0, ot, NULL);
}
@@ -204,21 +201,20 @@ static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmGizmoGroup *g
struct NavigateWidgetGroup *navgroup = gzgroup->customdata;
ARegion *ar = CTX_wm_region(C);
- rcti rect_visible;
- ED_region_visible_rect(ar, &rect_visible);
+ const rcti *rect_visible = ED_region_visible_rect(ar);
- if ((navgroup->state.rect_visible.xmax == rect_visible.xmax) &&
- (navgroup->state.rect_visible.ymax == rect_visible.ymax)) {
+ if ((navgroup->state.rect_visible.xmax == rect_visible->xmax) &&
+ (navgroup->state.rect_visible.ymax == rect_visible->ymax)) {
return;
}
- navgroup->state.rect_visible = rect_visible;
+ navgroup->state.rect_visible = *rect_visible;
const float icon_size = GIZMO_SIZE;
const float icon_offset_mini = icon_size * GIZMO_MINI_OFFSET_FAC * UI_DPI_FAC;
const float co[2] = {
- rect_visible.xmax - (icon_offset_mini * 0.75f),
- rect_visible.ymax - (icon_offset_mini * 0.75f),
+ rect_visible->xmax - (icon_offset_mini * 0.75f),
+ rect_visible->ymax - (icon_offset_mini * 0.75f),
};
wmGizmo *gz;
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index b57d100127e..032fb7e4cc2 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -940,8 +940,8 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
const bool zoom_to_pos = use_cursor_init && (U.uiflag & USER_ZOOM_TO_MOUSEPOS);
/* get amount to move view by */
- dx = RNA_float_get(op->ptr, "deltax");
- dy = RNA_float_get(op->ptr, "deltay");
+ dx = RNA_float_get(op->ptr, "deltax") / U.pixelsize;
+ dy = RNA_float_get(op->ptr, "deltay") / U.pixelsize;
if (U.uiflag & USER_ZOOM_INVERT) {
dx *= -1;
@@ -1844,7 +1844,7 @@ static void scroller_activate_init(bContext *C,
*/
scrollers = UI_view2d_scrollers_calc(v2d, NULL);
- /* use a union of 'cur' & 'tot' incase the current view is far outside 'tot'. In this cases
+ /* Use a union of 'cur' & 'tot' in case the current view is far outside 'tot'. In this cases
* moving the scroll bars has far too little effect and the view can get stuck T31476. */
tot_cur_union = v2d->tot;
BLI_rctf_union(&tot_cur_union, &v2d->cur);
diff --git a/source/blender/editors/mask/mask_shapekey.c b/source/blender/editors/mask/mask_shapekey.c
index edc22943124..1abe805192d 100644
--- a/source/blender/editors/mask/mask_shapekey.c
+++ b/source/blender/editors/mask/mask_shapekey.c
@@ -81,6 +81,7 @@ void MASK_OT_shape_key_insert(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Insert Shape Key";
+ ot->description = "Insert mask shape keyframe for active mask layer at the current frame";
ot->idname = "MASK_OT_shape_key_insert";
/* api callbacks */
@@ -129,6 +130,7 @@ void MASK_OT_shape_key_clear(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Clear Shape Key";
+ ot->description = "Remove mask shape keyframe for active mask layer at the current frame";
ot->idname = "MASK_OT_shape_key_clear";
/* api callbacks */
diff --git a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
index 74700e59e99..7155348fed5 100644
--- a/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
+++ b/source/blender/editors/mesh/editmesh_extrude_spin_gizmo.c
@@ -1008,8 +1008,17 @@ static void gizmo_mesh_spin_redo_setup(const bContext *C, wmGizmoGroup *gzgroup)
});
}
- /* Become modal as soon as it's started. */
- gizmo_mesh_spin_redo_modal_from_setup(C, gzgroup);
+ wmWindow *win = CTX_wm_window(C);
+ if (win && win->active) {
+ bScreen *screen = WM_window_get_active_screen(win);
+ if (screen->active_region) {
+ ARegion *ar = CTX_wm_region(C);
+ if (screen->active_region == ar) {
+ /* Become modal as soon as it's started. */
+ gizmo_mesh_spin_redo_modal_from_setup(C, gzgroup);
+ }
+ }
+ }
}
static void gizmo_mesh_spin_redo_draw_prepare(const bContext *UNUSED(C), wmGizmoGroup *gzgroup)
diff --git a/source/blender/editors/mesh/editmesh_knife.c b/source/blender/editors/mesh/editmesh_knife.c
index bb584094580..61f9dc43c0f 100644
--- a/source/blender/editors/mesh/editmesh_knife.c
+++ b/source/blender/editors/mesh/editmesh_knife.c
@@ -2658,7 +2658,7 @@ static void knifetool_init_bmbvh(KnifeTool_OpData *kcd)
Object *obedit_eval = (Object *)DEG_get_evaluated_id(kcd->vc.depsgraph, &kcd->em->ob->id);
BMEditMesh *em_eval = BKE_editmesh_from_object(obedit_eval);
- kcd->cagecos = (const float(*)[3])BKE_editmesh_vertexCos_get(
+ kcd->cagecos = (const float(*)[3])BKE_editmesh_vert_coords_alloc(
kcd->vc.depsgraph, em_eval, scene_eval, NULL);
kcd->bmbvh = BKE_bmbvh_new_from_editmesh(
@@ -2949,7 +2949,7 @@ static int knifetool_modal(bContext *C, wmOperator *op, const wmEvent *event)
case KNF_MODAL_ADD_CUT_CLOSED:
if (kcd->mode == MODE_DRAGGING) {
- /* shouldn't be possible with default key-layout, just incase... */
+ /* Shouldn't be possible with default key-layout, just in case. */
if (kcd->is_drag_hold) {
kcd->is_drag_hold = false;
knifetool_update_mval(kcd, kcd->curr.mval);
diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c
index 12b5a36c510..94ffd9a34d6 100644
--- a/source/blender/editors/mesh/editmesh_select.c
+++ b/source/blender/editors/mesh/editmesh_select.c
@@ -53,7 +53,6 @@
#include "ED_mesh.h"
#include "ED_screen.h"
#include "ED_transform.h"
-#include "ED_select_buffer_utils.h"
#include "ED_select_utils.h"
#include "ED_view3d.h"
@@ -69,6 +68,7 @@
#include "DEG_depsgraph_query.h"
#include "DRW_engine.h"
+#include "DRW_select_buffer.h"
#include "mesh_intern.h" /* own include */
@@ -203,7 +203,7 @@ static BMElem *edbm_select_id_bm_elem_get(Base **bases, const uint sel_id, uint
{
uint elem_id;
char elem_type = 0;
- bool success = DRW_select_elem_get(sel_id, &elem_id, r_base_index, &elem_type);
+ bool success = DRW_select_buffer_elem_get(sel_id, &elem_id, r_base_index, &elem_type);
if (success) {
Object *obedit = bases[*r_base_index]->object;
@@ -238,20 +238,6 @@ static BMElem *edbm_select_id_bm_elem_get(Base **bases, const uint sel_id, uint
* to avoid the bias interfering with distance comparisons when mixing types.
* \{ */
-#define FAKE_SELECT_MODE_BEGIN(vc, fake_select_mode, select_mode, select_mode_required) \
- short select_mode = select_mode_required; \
- bool fake_select_mode = (select_mode & (vc)->scene->toolsettings->selectmode) == 0; \
- if (fake_select_mode) { \
- (vc)->v3d->flag |= V3D_INVALID_BACKBUF; \
- } \
- ((void)0)
-
-#define FAKE_SELECT_MODE_END(vc, fake_select_mode) \
- if (fake_select_mode) { \
- (vc)->v3d->flag |= V3D_INVALID_BACKBUF; \
- } \
- ((void)0)
-
#define FIND_NEAR_SELECT_BIAS 5
#define FIND_NEAR_CYCLE_THRESHOLD_MIN 3
@@ -331,11 +317,10 @@ BMVert *EDBM_vert_find_nearest_ex(ViewContext *vc,
/* No afterqueue (yet), so we check it now, otherwise the bm_xxxofs indices are bad. */
{
- FAKE_SELECT_MODE_BEGIN(vc, fake_select_mode, select_mode, SCE_SELECT_VERTEX);
+ DRW_select_buffer_context_create(bases, bases_len, SCE_SELECT_VERTEX);
- DRW_draw_select_id(vc->depsgraph, vc->ar, vc->v3d, bases, bases_len, select_mode);
-
- index = ED_select_buffer_find_nearest_to_point(vc->mval, 1, UINT_MAX, &dist_px);
+ index = DRW_select_buffer_find_nearest_to_point(
+ vc->depsgraph, vc->ar, vc->v3d, vc->mval, 1, UINT_MAX, &dist_px);
if (index) {
eve = (BMVert *)edbm_select_id_bm_elem_get(bases, index, &base_index);
@@ -343,8 +328,6 @@ BMVert *EDBM_vert_find_nearest_ex(ViewContext *vc,
else {
eve = NULL;
}
-
- FAKE_SELECT_MODE_END(vc, fake_select_mode);
}
if (eve) {
@@ -557,11 +540,10 @@ BMEdge *EDBM_edge_find_nearest_ex(ViewContext *vc,
/* No afterqueue (yet), so we check it now, otherwise the bm_xxxofs indices are bad. */
{
- FAKE_SELECT_MODE_BEGIN(vc, fake_select_mode, select_mode, SCE_SELECT_EDGE);
+ DRW_select_buffer_context_create(bases, bases_len, SCE_SELECT_EDGE);
- DRW_draw_select_id(vc->depsgraph, vc->ar, vc->v3d, bases, bases_len, select_mode);
-
- index = ED_select_buffer_find_nearest_to_point(vc->mval, 1, UINT_MAX, &dist_px);
+ index = DRW_select_buffer_find_nearest_to_point(
+ vc->depsgraph, vc->ar, vc->v3d, vc->mval, 1, UINT_MAX, &dist_px);
if (index) {
eed = (BMEdge *)edbm_select_id_bm_elem_get(bases, index, &base_index);
@@ -569,8 +551,6 @@ BMEdge *EDBM_edge_find_nearest_ex(ViewContext *vc,
else {
eed = NULL;
}
-
- FAKE_SELECT_MODE_END(vc, fake_select_mode);
}
if (r_eed_zbuf) {
@@ -767,11 +747,9 @@ BMFace *EDBM_face_find_nearest_ex(ViewContext *vc,
BMFace *efa;
{
- FAKE_SELECT_MODE_BEGIN(vc, fake_select_mode, select_mode, SCE_SELECT_FACE);
+ DRW_select_buffer_context_create(bases, bases_len, SCE_SELECT_FACE);
- DRW_draw_select_id(vc->depsgraph, vc->ar, vc->v3d, bases, bases_len, select_mode);
-
- index = ED_select_buffer_sample_point(vc->mval);
+ index = DRW_select_buffer_sample_point(vc->depsgraph, vc->ar, vc->v3d, vc->mval);
if (index) {
efa = (BMFace *)edbm_select_id_bm_elem_get(bases, index, &base_index);
@@ -779,8 +757,6 @@ BMFace *EDBM_face_find_nearest_ex(ViewContext *vc,
else {
efa = NULL;
}
-
- FAKE_SELECT_MODE_END(vc, fake_select_mode);
}
if (r_efa_zbuf) {
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index ecdf103e6eb..2b0213dc1ef 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -437,6 +437,7 @@ void EDBM_project_snap_verts(bContext *C, Depsgraph *depsgraph, ARegion *ar, BME
},
mval,
NULL,
+ NULL,
co_proj,
NULL)) {
mul_v3_m4v3(eve->co, obedit->imat, co_proj);
@@ -3190,7 +3191,7 @@ void MESH_OT_remove_doubles(wmOperatorType *ot)
1e-6f,
50.0f,
"Merge Distance",
- "Minimum distance between elements to merge",
+ "Maximum distance between elements to merge",
1e-5f,
10.0f);
RNA_def_boolean(ot->srna,
@@ -4040,7 +4041,7 @@ static void mesh_separate_material_assign_mat_nr(Main *bmain, Object *ob, const
ma_obdata = NULL;
}
- BKE_material_clear_id(bmain, obdata, true);
+ BKE_material_clear_id(bmain, obdata);
BKE_material_resize_object(bmain, ob, 1, true);
BKE_material_resize_id(bmain, obdata, 1, true);
@@ -4051,7 +4052,7 @@ static void mesh_separate_material_assign_mat_nr(Main *bmain, Object *ob, const
id_us_plus((ID *)ma_obdata);
}
else {
- BKE_material_clear_id(bmain, obdata, true);
+ BKE_material_clear_id(bmain, obdata);
BKE_material_resize_object(bmain, ob, 0, true);
BKE_material_resize_id(bmain, obdata, 0, true);
}
@@ -5791,7 +5792,7 @@ void MESH_OT_dissolve_degenerate(wmOperatorType *ot)
1e-6f,
50.0f,
"Merge Distance",
- "Minimum distance between elements to merge",
+ "Maximum distance between elements to merge",
1e-5f,
10.0f);
}
@@ -7347,6 +7348,7 @@ static int mesh_symmetry_snap_exec(bContext *C, wmOperator *op)
}
}
}
+ EDBM_update_generic(em, false, false);
/* No need to end cache, just free the array. */
MEM_freeN(index);
@@ -7578,7 +7580,9 @@ void MESH_OT_mark_freestyle_face(wmOperatorType *ot)
#endif /* WITH_FREESTYLE */
-/********************** Loop normals editing tools modal map. **********************/
+/* -------------------------------------------------------------------- */
+/** \name Loop Normals Editing Tools Modal Map
+ * \{ */
/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
/* NOTE: We could add more here, like e.g. a switch between local or global coordinates of target,
@@ -8126,7 +8130,11 @@ void MESH_OT_point_normals(struct wmOperatorType *ot)
1.0f);
}
-/********************** Split/Merge Loop Normals **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Split/Merge Loop Normals
+ * \{ */
static void normals_merge(BMesh *bm, BMLoopNorEditDataArray *lnors_ed_arr)
{
@@ -8333,7 +8341,11 @@ void MESH_OT_split_normals(struct wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/********************** Average Loop Normals **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Average Loop Normals
+ * \{ */
enum {
EDBM_CLNOR_AVERAGE_LOOP = 1,
@@ -8561,7 +8573,11 @@ void MESH_OT_average_normals(struct wmOperatorType *ot)
5);
}
-/********************** Custom Normal Interface Tools **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Custom Normal Interface Tools
+ * \{ */
enum {
EDBM_CLNOR_TOOLS_COPY = 1,
@@ -9013,7 +9029,11 @@ void MESH_OT_smoothen_normals(struct wmOperatorType *ot)
1.0f);
}
-/********************** Weighted Normal Modifier Face Strength **********************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Weighted Normal Modifier Face Strength
+ * \{ */
static int edbm_mod_weighted_strength_exec(bContext *C, wmOperator *op)
{
@@ -9104,3 +9124,5 @@ void MESH_OT_mod_weighted_strength(struct wmOperatorType *ot)
"Face Strength",
"Strength to use for assigning or selecting face influence for weighted normal modifier");
}
+
+/** \} */
diff --git a/source/blender/editors/mesh/editmesh_utils.c b/source/blender/editors/mesh/editmesh_utils.c
index d7ed14184fa..522c2f32d27 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -85,7 +85,7 @@ void EDBM_redo_state_restore(BMBackup backup, BMEditMesh *em, int recalctess)
tmpbm = NULL;
if (recalctess) {
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
}
}
@@ -105,7 +105,7 @@ void EDBM_redo_state_free(BMBackup *backup, BMEditMesh *em, int recalctess)
backup->bmcopy = NULL;
if (recalctess && em) {
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
}
}
@@ -162,7 +162,7 @@ bool EDBM_op_finish(BMEditMesh *em, BMOperator *bmop, wmOperator *op, const bool
/* when copying, tessellation isn't to for faster copying,
* but means we need to re-tessellate here */
if (em->looptris == NULL) {
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
}
if (em->ob) {
@@ -292,10 +292,6 @@ void EDBM_mesh_make(Object *ob, const int select_mode, const bool add_key_index)
Mesh *me = ob->data;
BMesh *bm;
- if (UNLIKELY(!me->mpoly && me->totface)) {
- BKE_mesh_convert_mfaces_to_mpolys(me);
- }
-
bm = BKE_mesh_to_bmesh(me,
ob,
add_key_index,
@@ -347,10 +343,6 @@ void EDBM_mesh_load(Main *bmain, Object *ob)
.calc_object_remap = true,
}));
-#ifdef USE_TESSFACE_DEFAULT
- BKE_mesh_tessface_calc(me);
-#endif
-
/* Free derived mesh. usually this would happen through depsgraph but there
* are exceptions like file save that will not cause this, and we want to
* avoid ending up with an invalid derived mesh then.
@@ -1397,15 +1389,15 @@ void EDBM_stats_update(BMEditMesh *em)
/* so many tools call these that we better make it a generic function.
*/
-void EDBM_update_generic(BMEditMesh *em, const bool do_tessface, const bool is_destructive)
+void EDBM_update_generic(BMEditMesh *em, const bool do_tessellation, const bool is_destructive)
{
Object *ob = em->ob;
/* order of calling isn't important */
DEG_id_tag_update(ob->data, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_GEOM | ND_DATA, ob->data);
- if (do_tessface) {
- BKE_editmesh_tessface_calc(em);
+ if (do_tessellation) {
+ BKE_editmesh_looptri_calc(em);
}
if (is_destructive) {
diff --git a/source/blender/editors/mesh/mesh_data.c b/source/blender/editors/mesh/mesh_data.c
index ee8de9d8ea9..569994bead1 100644
--- a/source/blender/editors/mesh/mesh_data.c
+++ b/source/blender/editors/mesh/mesh_data.c
@@ -289,18 +289,14 @@ int ED_mesh_uv_texture_add(Mesh *me, const char *name, const bool active_set, co
if (me->mloopuv && do_init) {
CustomData_add_layer_named(
&me->ldata, CD_MLOOPUV, CD_DUPLICATE, me->mloopuv, me->totloop, name);
- CustomData_add_layer_named(
- &me->fdata, CD_MTFACE, CD_DUPLICATE, me->mtface, me->totface, name);
is_init = true;
}
else {
CustomData_add_layer_named(&me->ldata, CD_MLOOPUV, CD_DEFAULT, NULL, me->totloop, name);
- CustomData_add_layer_named(&me->fdata, CD_MTFACE, CD_DEFAULT, NULL, me->totface, name);
}
if (active_set || layernum_dst == 0) {
CustomData_set_layer_active(&me->ldata, CD_MLOOPUV, layernum_dst);
- CustomData_set_layer_active(&me->fdata, CD_MTFACE, layernum_dst);
}
BKE_mesh_update_customdata_pointers(me, true);
@@ -418,16 +414,13 @@ int ED_mesh_color_add(Mesh *me, const char *name, const bool active_set, const b
if (me->mloopcol && do_init) {
CustomData_add_layer_named(
&me->ldata, CD_MLOOPCOL, CD_DUPLICATE, me->mloopcol, me->totloop, name);
- CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DUPLICATE, me->mcol, me->totface, name);
}
else {
CustomData_add_layer_named(&me->ldata, CD_MLOOPCOL, CD_DEFAULT, NULL, me->totloop, name);
- CustomData_add_layer_named(&me->fdata, CD_MCOL, CD_DEFAULT, NULL, me->totface, name);
}
if (active_set || layernum == 0) {
CustomData_set_layer_active(&me->ldata, CD_MLOOPCOL, layernum);
- CustomData_set_layer_active(&me->fdata, CD_MCOL, layernum);
}
BKE_mesh_update_customdata_pointers(me, true);
@@ -885,18 +878,8 @@ void MESH_OT_customdata_custom_splitnormals_clear(wmOperatorType *ot)
/************************** Add Geometry Layers *************************/
-void ED_mesh_update(
- Mesh *mesh, bContext *C, bool calc_edges, bool calc_edges_loose, bool calc_tessface)
+void ED_mesh_update(Mesh *mesh, bContext *C, bool calc_edges, bool calc_edges_loose)
{
- bool tessface_input = false;
-
- if (mesh->totface > 0 && mesh->totpoly == 0) {
- BKE_mesh_convert_mfaces_to_mpolys(mesh);
-
- /* would only be converting back again, don't bother */
- tessface_input = true;
- }
-
if (calc_edges_loose && mesh->totedge) {
BKE_mesh_calc_edges_loose(mesh);
}
@@ -905,15 +888,8 @@ void ED_mesh_update(
BKE_mesh_calc_edges(mesh, calc_edges, true);
}
- if (calc_tessface) {
- if (tessface_input == false) {
- BKE_mesh_tessface_calc(mesh);
- }
- }
- else {
- /* default state is not to have tessface's so make sure this is the case */
- BKE_mesh_tessface_clear(mesh);
- }
+ /* Default state is not to have tessface's so make sure this is the case. */
+ BKE_mesh_tessface_clear(mesh);
BKE_mesh_calc_normals(mesh);
@@ -988,39 +964,6 @@ static void mesh_add_edges(Mesh *mesh, int len)
mesh->totedge = totedge;
}
-static void mesh_add_tessfaces(Mesh *mesh, int len)
-{
- CustomData fdata;
- MFace *mface;
- int i, totface;
-
- if (len == 0) {
- return;
- }
-
- totface = mesh->totface + len; /* new face count */
-
- /* update customdata */
- CustomData_copy(&mesh->fdata, &fdata, CD_MASK_MESH.fmask, CD_DEFAULT, totface);
- CustomData_copy_data(&mesh->fdata, &fdata, 0, 0, mesh->totface);
-
- if (!CustomData_has_layer(&fdata, CD_MFACE)) {
- CustomData_add_layer(&fdata, CD_MFACE, CD_CALLOC, NULL, totface);
- }
-
- CustomData_free(&mesh->fdata, mesh->totface);
- mesh->fdata = fdata;
- BKE_mesh_update_customdata_pointers(mesh, true);
-
- /* set default flags */
- mface = &mesh->mface[mesh->totface];
- for (i = 0; i < len; i++, mface++) {
- mface->flag = ME_FACE_SEL;
- }
-
- mesh->totface = totface;
-}
-
static void mesh_add_loops(Mesh *mesh, int len)
{
CustomData ldata;
@@ -1109,20 +1052,6 @@ static void mesh_remove_edges(Mesh *mesh, int len)
mesh->totedge = totedge;
}
-static void mesh_remove_faces(Mesh *mesh, int len)
-{
- int totface;
-
- if (len == 0) {
- return;
- }
-
- totface = mesh->totface - len; /* new face count */
- CustomData_free_elem(&mesh->fdata, totface, len);
-
- mesh->totface = totface;
-}
-
#if 0
void ED_mesh_geometry_add(Mesh *mesh, ReportList *reports, int verts, int edges, int faces)
{
@@ -1143,21 +1072,6 @@ void ED_mesh_geometry_add(Mesh *mesh, ReportList *reports, int verts, int edges,
}
#endif
-void ED_mesh_tessfaces_add(Mesh *mesh, ReportList *reports, int count)
-{
- if (mesh->edit_mesh) {
- BKE_report(reports, RPT_ERROR, "Cannot add tessfaces in edit mode");
- return;
- }
-
- if (mesh->mpoly) {
- BKE_report(reports, RPT_ERROR, "Cannot add tessfaces to a mesh that already has polygons");
- return;
- }
-
- mesh_add_tessfaces(mesh, count);
-}
-
void ED_mesh_edges_add(Mesh *mesh, ReportList *reports, int count)
{
if (mesh->edit_mesh) {
@@ -1178,20 +1092,6 @@ void ED_mesh_vertices_add(Mesh *mesh, ReportList *reports, int count)
mesh_add_verts(mesh, count);
}
-void ED_mesh_faces_remove(Mesh *mesh, ReportList *reports, int count)
-{
- if (mesh->edit_mesh) {
- BKE_report(reports, RPT_ERROR, "Cannot remove faces in edit mode");
- return;
- }
- else if (count > mesh->totface) {
- BKE_report(reports, RPT_ERROR, "Cannot remove more faces than the mesh contains");
- return;
- }
-
- mesh_remove_faces(mesh, count);
-}
-
void ED_mesh_edges_remove(Mesh *mesh, ReportList *reports, int count)
{
if (mesh->edit_mesh) {
@@ -1240,26 +1140,6 @@ void ED_mesh_polys_add(Mesh *mesh, ReportList *reports, int count)
mesh_add_polys(mesh, count);
}
-void ED_mesh_calc_tessface(Mesh *mesh, bool free_mpoly)
-{
- if (mesh->edit_mesh) {
- BKE_editmesh_tessface_calc(mesh->edit_mesh);
- }
- else {
- BKE_mesh_tessface_calc(mesh);
- }
- if (free_mpoly) {
- CustomData_free(&mesh->ldata, mesh->totloop);
- CustomData_free(&mesh->pdata, mesh->totpoly);
- mesh->totloop = 0;
- mesh->totpoly = 0;
- mesh->mloop = NULL;
- mesh->mloopcol = NULL;
- mesh->mloopuv = NULL;
- mesh->mpoly = NULL;
- }
-}
-
void ED_mesh_report_mirror_ex(wmOperator *op, int totmirr, int totfail, char selectmode)
{
const char *elem_type;
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index b082af352b2..8d9d0e40f44 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -60,8 +60,9 @@
#include "DEG_depsgraph_build.h"
#include "DEG_depsgraph_query.h"
+#include "DRW_select_buffer.h"
+
#include "ED_mesh.h"
-#include "ED_select_buffer_utils.h"
#include "ED_object.h"
#include "ED_view3d.h"
@@ -1115,11 +1116,12 @@ bool ED_mesh_pick_face(bContext *C, Object *ob, const int mval[2], uint dist_px,
if (dist_px) {
/* sample rect to increase chances of selecting, so that when clicking
* on an edge in the backbuf, we can still select a face */
- *r_index = ED_select_buffer_find_nearest_to_point(mval, 1, me->totpoly + 1, &dist_px);
+ *r_index = DRW_select_buffer_find_nearest_to_point(
+ vc.depsgraph, vc.ar, vc.v3d, mval, 1, me->totpoly + 1, &dist_px);
}
else {
/* sample only on the exact position */
- *r_index = ED_select_buffer_sample_point(mval);
+ *r_index = DRW_select_buffer_sample_point(vc.depsgraph, vc.ar, vc.v3d, mval);
}
if ((*r_index) == 0 || (*r_index) > (unsigned int)me->totpoly) {
@@ -1296,11 +1298,12 @@ bool ED_mesh_pick_vert(
if (dist_px > 0) {
/* sample rect to increase chances of selecting, so that when clicking
* on an face in the backbuf, we can still select a vert */
- *r_index = ED_select_buffer_find_nearest_to_point(mval, 1, me->totvert + 1, &dist_px);
+ *r_index = DRW_select_buffer_find_nearest_to_point(
+ vc.depsgraph, vc.ar, vc.v3d, mval, 1, me->totvert + 1, &dist_px);
}
else {
/* sample only on the exact position */
- *r_index = ED_select_buffer_sample_point(mval);
+ *r_index = DRW_select_buffer_sample_point(vc.depsgraph, vc.ar, vc.v3d, mval);
}
if ((*r_index) == 0 || (*r_index) > (uint)me->totvert) {
diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt
index eaef9313431..aabfa78cf58 100644
--- a/source/blender/editors/object/CMakeLists.txt
+++ b/source/blender/editors/object/CMakeLists.txt
@@ -48,6 +48,7 @@ set(SRC
object_collection.c
object_constraint.c
object_data_transfer.c
+ object_data_transform.c
object_edit.c
object_facemap_ops.c
object_gpencil_modifier.c
@@ -57,6 +58,7 @@ set(SRC
object_ops.c
object_random.c
object_relations.c
+ object_remesh.c
object_select.c
object_shader_fx.c
object_shapekey.c
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 137af917f9a..80d150506ad 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -103,6 +103,7 @@
#include "ED_mesh.h"
#include "ED_node.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_physics.h"
#include "ED_render.h"
#include "ED_screen.h"
@@ -232,29 +233,17 @@ void ED_object_rotation_from_view(bContext *C, float rot[3], const char align_ax
}
}
-void ED_object_base_init_transform(bContext *C, Base *base, const float loc[3], const float rot[3])
+void ED_object_base_init_transform_on_add(Object *object, const float loc[3], const float rot[3])
{
- Object *ob = base->object;
- Scene *scene = CTX_data_scene(C);
- Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
-
- if (!scene) {
- return;
- }
-
if (loc) {
- copy_v3_v3(ob->loc, loc);
+ copy_v3_v3(object->loc, loc);
}
if (rot) {
- copy_v3_v3(ob->rot, rot);
+ copy_v3_v3(object->rot, rot);
}
- Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
- Object *object_eval = DEG_get_evaluated_object(depsgraph, ob);
- BKE_object_transform_copy(object_eval, ob);
- BKE_object_where_is_calc(depsgraph, scene_eval, object_eval);
- BKE_object_transform_copy(ob, object_eval);
+ BKE_object_to_mat4(object, object->obmat);
}
/* Uses context to figure out transform for primitive.
@@ -494,7 +483,7 @@ Object *ED_object_add_type(bContext *C,
ED_object_base_activate(C, view_layer->basact);
/* more editor stuff */
- ED_object_base_init_transform(C, view_layer->basact, loc, rot);
+ ED_object_base_init_transform_on_add(ob, loc, rot);
/* TODO(sergey): This is weird to manually tag objects for update, better to
* use DEG_id_tag_update here perhaps.
@@ -514,6 +503,8 @@ Object *ED_object_add_type(bContext *C,
/* TODO(sergey): Use proper flag for tagging here. */
DEG_id_tag_update(&scene->id, 0);
+ ED_outliner_select_sync_from_object_tag(C);
+
return ob;
}
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index 7343dba420f..14813f9a936 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -493,8 +493,12 @@ static void test_constraint(
CONSTRAINT_TYPE_CLAMPTO,
CONSTRAINT_TYPE_SPLINEIK)) {
if (ct->tar) {
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the curve is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
if (ct->tar->type != OB_CURVE) {
- ct->tar = NULL;
con->flag |= CONSTRAINT_DISABLE;
}
else {
@@ -507,8 +511,12 @@ static void test_constraint(
}
else if (con->type == CONSTRAINT_TYPE_ARMATURE) {
if (ct->tar) {
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the armature is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
if (ct->tar->type != OB_ARMATURE) {
- ct->tar = NULL;
con->flag |= CONSTRAINT_DISABLE;
}
else if (!BKE_armature_find_bone_name(BKE_armature_from_object(ct->tar),
@@ -636,7 +644,7 @@ static const EnumPropertyItem constraint_owner_items[] = {
static bool edit_constraint_poll_generic(bContext *C, StructRNA *rna_type)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", rna_type);
- Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C);
+ Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
if (!ptr.data) {
CTX_wm_operator_poll_msg_set(C, "Context missing 'constraint'");
@@ -648,7 +656,7 @@ static bool edit_constraint_poll_generic(bContext *C, StructRNA *rna_type)
return 0;
}
- if (ID_IS_LINKED(ob) || (ptr.id.data && ID_IS_LINKED(ptr.id.data))) {
+ if (ID_IS_LINKED(ob) || (ptr.owner_id && ID_IS_LINKED(ptr.owner_id))) {
CTX_wm_operator_poll_msg_set(C, "Cannot edit library data");
return 0;
}
@@ -680,7 +688,7 @@ static void edit_constraint_properties(wmOperatorType *ot)
static int edit_constraint_invoke_properties(bContext *C, wmOperator *op)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
- Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C);
+ Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
bConstraint *con;
ListBase *list;
@@ -1422,14 +1430,14 @@ void ED_object_constraint_dependency_tag_update(Main *bmain, Object *ob, bConstr
static bool constraint_poll(bContext *C)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
- return (ptr.id.data && ptr.data);
+ return (ptr.owner_id && ptr.data);
}
static int constraint_delete_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "constraint", &RNA_Constraint);
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
bConstraint *con = ptr.data;
ListBase *lb = get_constraint_lb(ob, con, NULL);
diff --git a/source/blender/editors/object/object_data_transfer.c b/source/blender/editors/object/object_data_transfer.c
index 79aafc6978f..0a5db782892 100644
--- a/source/blender/editors/object/object_data_transfer.c
+++ b/source/blender/editors/object/object_data_transfer.c
@@ -495,12 +495,16 @@ static int data_transfer_exec(bContext *C, wmOperator *op)
NULL,
false,
op->reports)) {
+
+ if (data_type == DT_TYPE_LNOR && use_create) {
+ ((Mesh *)ob_dst->data)->flag |= ME_AUTOSMOOTH;
+ }
+
+ DEG_id_tag_update(&ob_dst->id, ID_RECALC_GEOMETRY);
changed = true;
}
}
- DEG_id_tag_update(&ob_dst->id, ID_RECALC_GEOMETRY);
-
if (reverse_transfer) {
SWAP(Object *, ob_src, ob_dst);
}
diff --git a/source/blender/editors/object/object_data_transform.c b/source/blender/editors/object/object_data_transform.c
new file mode 100644
index 00000000000..ee86c79ead5
--- /dev/null
+++ b/source/blender/editors/object/object_data_transform.c
@@ -0,0 +1,333 @@
+/*
+ * 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) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup edobj
+ *
+ * Use to transform object origins only.
+ *
+ * This is a small API to store & apply transformations to object data,
+ * where a transformation matrix can be continually applied ontop of the original values
+ * so we don't loose precision over time.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "DNA_anim_types.h"
+#include "DNA_armature_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_meta_types.h"
+#include "DNA_object_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_collection_types.h"
+#include "DNA_lattice_types.h"
+
+#include "BLI_math.h"
+#include "BLI_listbase.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_curve.h"
+#include "BKE_mball.h"
+#include "BKE_mesh.h"
+#include "BKE_armature.h"
+#include "BKE_lattice.h"
+
+#include "DEG_depsgraph.h"
+
+#include "WM_types.h"
+
+#include "ED_object.h"
+
+#include "MEM_guardedalloc.h"
+
+/* -------------------------------------------------------------------- */
+/** \name Internal Transform Get/Apply
+ *
+ * Some object data types don't have utility functions to access their transformation data.
+ * Define these locally.
+ *
+ * \{ */
+
+/* Armature */
+
+struct ElemData_Armature {
+ float tail[3];
+ float head[3];
+ float roll;
+ float arm_tail[3];
+ float arm_head[3];
+ float arm_roll;
+ float rad_tail;
+ float rad_head;
+ float dist;
+ float xwidth;
+ float zwidth;
+};
+
+static struct ElemData_Armature *armature_coords_and_quats_get_recurse(
+ const ListBase *bone_base, struct ElemData_Armature *elem_array)
+{
+ struct ElemData_Armature *elem = elem_array;
+ for (const Bone *bone = bone_base->first; bone; bone = bone->next) {
+
+#define COPY_PTR(member) memcpy(elem->member, bone->member, sizeof(bone->member))
+#define COPY_VAL(member) memcpy(&elem->member, &bone->member, sizeof(bone->member))
+ COPY_PTR(head);
+ COPY_PTR(tail);
+ COPY_VAL(roll);
+ COPY_PTR(arm_head);
+ COPY_PTR(arm_tail);
+ COPY_VAL(arm_roll);
+ COPY_VAL(rad_tail);
+ COPY_VAL(rad_head);
+ COPY_VAL(dist);
+ COPY_VAL(xwidth);
+ COPY_VAL(zwidth);
+#undef COPY_PTR
+#undef COPY_VAL
+
+ elem = armature_coords_and_quats_get_recurse(&bone->childbase, elem + 1);
+ }
+ return elem;
+}
+
+static void armature_coords_and_quats_get(const bArmature *arm,
+ struct ElemData_Armature *elem_array)
+{
+ armature_coords_and_quats_get_recurse(&arm->bonebase, elem_array);
+}
+
+static const struct ElemData_Armature *armature_coords_and_quats_apply_with_mat4_recurse(
+ ListBase *bone_base, const struct ElemData_Armature *elem_array, const float mat[4][4])
+{
+ const struct ElemData_Armature *elem = elem_array;
+ for (Bone *bone = bone_base->first; bone; bone = bone->next) {
+
+#define COPY_PTR(member) memcpy(bone->member, elem->member, sizeof(bone->member))
+#define COPY_VAL(member) memcpy(&bone->member, &elem->member, sizeof(bone->member))
+ COPY_PTR(head);
+ COPY_PTR(tail);
+ COPY_VAL(roll);
+ COPY_PTR(arm_head);
+ COPY_PTR(arm_tail);
+ COPY_VAL(arm_roll);
+ COPY_VAL(rad_tail);
+ COPY_VAL(rad_head);
+ COPY_VAL(dist);
+ COPY_VAL(xwidth);
+ COPY_VAL(zwidth);
+#undef COPY_PTR
+#undef COPY_VAL
+
+ elem = armature_coords_and_quats_apply_with_mat4_recurse(&bone->childbase, elem + 1, mat);
+ }
+ return elem;
+}
+
+static void armature_coords_and_quats_apply_with_mat4(bArmature *arm,
+ const struct ElemData_Armature *elem_array,
+ const float mat[4][4])
+{
+ armature_coords_and_quats_apply_with_mat4_recurse(&arm->bonebase, elem_array, mat);
+ BKE_armature_transform(arm, mat, true);
+}
+
+/* MetaBall */
+
+struct ElemData_MetaBall {
+ float co[3];
+ float quat[4];
+ float exp[3];
+ float rad;
+};
+
+static void metaball_coords_and_quats_get(const MetaBall *mb, struct ElemData_MetaBall *elem_array)
+{
+ struct ElemData_MetaBall *elem = elem_array;
+ for (const MetaElem *ml = mb->elems.first; ml; ml = ml->next, elem++) {
+ copy_v3_v3(elem->co, &ml->x);
+ copy_qt_qt(elem->quat, ml->quat);
+ copy_v3_v3(elem->exp, &ml->expx);
+ elem->rad = ml->rad;
+ }
+}
+
+static void metaball_coords_and_quats_apply_with_mat4(MetaBall *mb,
+ const struct ElemData_MetaBall *elem_array,
+ const float mat[4][4])
+{
+ const struct ElemData_MetaBall *elem = elem_array;
+ for (MetaElem *ml = mb->elems.first; ml; ml = ml->next, elem++) {
+ copy_v3_v3(&ml->x, elem->co);
+ copy_qt_qt(ml->quat, elem->quat);
+ copy_v3_v3(&ml->expx, elem->exp);
+ ml->rad = elem->rad;
+ }
+ BKE_mball_transform(mb, mat, true);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Public Object Data Storage API
+ *
+ * Used for interactively transforming object data.
+ *
+ * Store object data transformation in an opaque struct.
+ * \{ */
+
+struct XFormObjectData {
+ ID *id;
+};
+
+struct XFormObjectData_Mesh {
+ struct XFormObjectData base;
+ float elem_array[0][3];
+};
+
+struct XFormObjectData_Lattice {
+ struct XFormObjectData base;
+ float elem_array[0][3];
+};
+
+struct XFormObjectData_Curve {
+ struct XFormObjectData base;
+ float elem_array[0][3];
+};
+
+struct XFormObjectData_Armature {
+ struct XFormObjectData base;
+ struct ElemData_Armature elem_array[0];
+};
+
+struct XFormObjectData_MetaBall {
+ struct XFormObjectData base;
+ struct ElemData_MetaBall elem_array[0];
+};
+
+struct XFormObjectData *ED_object_data_xform_create(ID *id)
+{
+ struct XFormObjectData *xod_base = NULL;
+ switch (GS(id->name)) {
+ case ID_ME: {
+ Mesh *me = (Mesh *)id;
+ const int elem_array_len = me->totvert;
+ struct XFormObjectData_Mesh *xod = MEM_mallocN(
+ sizeof(*xod) + (sizeof(*xod->elem_array) * elem_array_len), __func__);
+ BKE_mesh_vert_coords_get(me, xod->elem_array);
+ xod_base = &xod->base;
+ break;
+ }
+ case ID_LT: {
+ Lattice *lt = (Lattice *)id;
+ const int elem_array_len = lt->pntsu * lt->pntsv * lt->pntsw;
+ struct XFormObjectData_Lattice *xod = MEM_mallocN(
+ sizeof(*xod) + (sizeof(*xod->elem_array) * elem_array_len), __func__);
+ BKE_lattice_vert_coords_get(lt, xod->elem_array);
+ xod_base = &xod->base;
+ break;
+ }
+ case ID_CU: {
+ Curve *cu = (Curve *)id;
+ const short ob_type = BKE_curve_type_get(cu);
+ if (ob_type == OB_FONT) {
+ /* We could support translation. */
+ break;
+ }
+ const int elem_array_len = BKE_nurbList_verts_count(&cu->nurb);
+ struct XFormObjectData_Curve *xod = MEM_mallocN(
+ sizeof(*xod) + (sizeof(*xod->elem_array) * elem_array_len), __func__);
+ BKE_curve_nurbs_vert_coords_get(&cu->nurb, xod->elem_array, elem_array_len);
+ xod_base = &xod->base;
+ break;
+ }
+ case ID_AR: {
+ bArmature *arm = (bArmature *)id;
+ const int elem_array_len = BKE_armature_bonelist_count(&arm->bonebase);
+ struct XFormObjectData_Armature *xod = MEM_mallocN(
+ sizeof(*xod) + (sizeof(*xod->elem_array) * elem_array_len), __func__);
+ armature_coords_and_quats_get(arm, xod->elem_array);
+ xod_base = &xod->base;
+ break;
+ }
+ case ID_MB: {
+ MetaBall *mb = (MetaBall *)id;
+ const int elem_array_len = BLI_listbase_count(&mb->elems);
+ struct XFormObjectData_MetaBall *xod = MEM_mallocN(
+ sizeof(*xod) + (sizeof(*xod->elem_array) * elem_array_len), __func__);
+ metaball_coords_and_quats_get(mb, xod->elem_array);
+ xod_base = &xod->base;
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ if (xod_base) {
+ xod_base->id = id;
+ }
+ return xod_base;
+}
+
+void ED_object_data_xform_destroy(struct XFormObjectData *xod)
+{
+ MEM_freeN(xod);
+}
+
+void ED_object_data_xform_by_mat4(struct XFormObjectData *xod_base, const float mat[4][4])
+{
+ switch (GS(xod_base->id->name)) {
+ case ID_ME: {
+ Mesh *me = (Mesh *)xod_base->id;
+ struct XFormObjectData_Mesh *xod = (struct XFormObjectData_Mesh *)xod_base;
+ BKE_mesh_vert_coords_apply_with_mat4(me, xod->elem_array, mat);
+ break;
+ }
+ case ID_LT: {
+ Lattice *lt = (Lattice *)xod_base->id;
+ struct XFormObjectData_Lattice *xod = (struct XFormObjectData_Lattice *)xod_base;
+ BKE_lattice_vert_coords_apply_with_mat4(lt, xod->elem_array, mat);
+ break;
+ }
+ case ID_CU: {
+ Curve *cu = (Curve *)xod_base->id;
+ struct XFormObjectData_Curve *xod = (struct XFormObjectData_Curve *)xod_base;
+ BKE_curve_nurbs_vert_coords_apply_with_mat4(&cu->nurb, xod->elem_array, mat, true);
+ break;
+ }
+ case ID_AR: {
+ bArmature *arm = (bArmature *)xod_base->id;
+ struct XFormObjectData_Armature *xod = (struct XFormObjectData_Armature *)xod_base;
+ armature_coords_and_quats_apply_with_mat4(arm, xod->elem_array, mat);
+ break;
+ }
+ case ID_MB: {
+ MetaBall *mb = (MetaBall *)xod_base->id;
+ struct XFormObjectData_MetaBall *xod = (struct XFormObjectData_MetaBall *)xod_base;
+ metaball_coords_and_quats_apply_with_mat4(mb, xod->elem_array, mat);
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+}
+
+/** \} */
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index ed40a4eb948..0c2b5292716 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -116,6 +116,7 @@
typedef struct MoveToCollectionData MoveToCollectionData;
static void move_to_collection_menus_items(struct uiLayout *layout,
struct MoveToCollectionData *menu);
+static ListBase selected_objects_get(bContext *C);
/* ************* XXX **************** */
static void error(const char *UNUSED(arg))
@@ -593,7 +594,7 @@ bool ED_object_editmode_enter_ex(Main *bmain, Scene *scene, Object *ob, int flag
if (LIKELY(em)) {
/* order doesn't matter */
EDBM_mesh_normals_update(em);
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
}
WM_main_add_notifier(NC_SCENE | ND_MODE | NS_EDITMODE_MESH, NULL);
@@ -1199,7 +1200,7 @@ static int shade_smooth_exec(bContext *C, wmOperator *op)
}
if (ob->type == OB_MESH) {
- BKE_mesh_smooth_flag_set(ob, !clear);
+ BKE_mesh_smooth_flag_set(ob->data, !clear);
BKE_mesh_batch_cache_dirty_tag(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
@@ -1460,6 +1461,23 @@ void OBJECT_OT_mode_set_or_submode(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
+static ListBase selected_objects_get(bContext *C)
+{
+ ListBase objects = {NULL};
+
+ if (CTX_wm_space_outliner(C) != NULL) {
+ ED_outliner_selected_objects_get(C, &objects);
+ }
+ else {
+ CTX_DATA_BEGIN (C, Object *, ob, selected_objects) {
+ BLI_addtail(&objects, BLI_genericNodeN(ob));
+ }
+ CTX_DATA_END;
+ }
+
+ return objects;
+}
+
static bool move_to_collection_poll(bContext *C)
{
if (CTX_wm_space_outliner(C) != NULL) {
@@ -1472,7 +1490,7 @@ static bool move_to_collection_poll(bContext *C)
return false;
}
- return ED_operator_object_active_editable(C);
+ return ED_operator_objectmode(C);
}
}
@@ -1498,15 +1516,7 @@ static int move_to_collection_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- if (CTX_wm_space_outliner(C) != NULL) {
- ED_outliner_selected_objects_get(C, &objects);
- }
- else {
- CTX_DATA_BEGIN (C, Object *, ob, selected_objects) {
- BLI_addtail(&objects, BLI_genericNodeN(ob));
- }
- CTX_DATA_END;
- }
+ objects = selected_objects_get(C);
if (is_new) {
char new_collection_name[MAX_NAME];
@@ -1650,6 +1660,13 @@ static int move_to_collection_invoke(bContext *C, wmOperator *op, const wmEvent
{
Scene *scene = CTX_data_scene(C);
+ ListBase objects = selected_objects_get(C);
+ if (BLI_listbase_is_empty(&objects)) {
+ BKE_report(op->reports, RPT_ERROR, "No objects selected");
+ return OPERATOR_CANCELLED;
+ }
+ BLI_freelistN(&objects);
+
/* Reset the menus data for the current master collection, and free previously allocated data. */
move_to_collection_menus_free(&master_collection_menu);
diff --git a/source/blender/editors/object/object_gpencil_modifier.c b/source/blender/editors/object/object_gpencil_modifier.c
index 075cd5acad6..9138e65dd2f 100644
--- a/source/blender/editors/object/object_gpencil_modifier.c
+++ b/source/blender/editors/object/object_gpencil_modifier.c
@@ -390,7 +390,7 @@ void OBJECT_OT_gpencil_modifier_add(wmOperatorType *ot)
static int gpencil_edit_modifier_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", rna_type);
- Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C);
+ Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
if (!ob || ID_IS_LINKED(ob)) {
return 0;
@@ -398,7 +398,7 @@ static int gpencil_edit_modifier_poll_generic(bContext *C, StructRNA *rna_type,
if (obtype_flag && ((1 << ob->type) & obtype_flag) == 0) {
return 0;
}
- if (ptr.id.data && ID_IS_LINKED(ptr.id.data)) {
+ if (ptr.owner_id && ID_IS_LINKED(ptr.owner_id)) {
return 0;
}
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index 15c5ea40991..bcbf7ddf9a6 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -352,7 +352,7 @@ static bool object_hook_index_array(Main *bmain,
em = me->edit_mesh;
EDBM_mesh_normals_update(em);
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
/* check selected vertices first */
if (return_editmesh_indexar(em, r_tot, r_indexar, r_cent) == 0) {
@@ -436,7 +436,7 @@ static void object_hook_from_context(
HookModifierData *hmd;
if (ptr->data) { /* if modifier context is available, use that */
- ob = ptr->id.data;
+ ob = (Object *)ptr->owner_id;
hmd = ptr->data;
}
else { /* use the provided property */
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index e697c25b37f..4b369c10e4d 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -279,6 +279,9 @@ void OBJECT_OT_bake(wmOperatorType *ot);
/* object_random.c */
void TRANSFORM_OT_vertex_random(struct wmOperatorType *ot);
+/* object_remesh.c */
+void OBJECT_OT_voxel_remesh(struct wmOperatorType *ot);
+
/* object_transfer_data.c */
void OBJECT_OT_data_transfer(struct wmOperatorType *ot);
void OBJECT_OT_datalayout_transfer(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_modes.c b/source/blender/editors/object/object_modes.c
index 271d8effd30..80e7e6312aa 100644
--- a/source/blender/editors/object/object_modes.c
+++ b/source/blender/editors/object/object_modes.c
@@ -186,6 +186,19 @@ void ED_object_mode_set(bContext *C, eObjectMode mode)
wm->op_undo_depth--;
}
+void ED_object_mode_exit(bContext *C, Depsgraph *depsgraph)
+{
+ struct Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ FOREACH_OBJECT_BEGIN (view_layer, ob) {
+ if (ob->mode & OB_MODE_ALL_MODE_DATA) {
+ ED_object_mode_generic_exit(bmain, depsgraph, scene, ob);
+ }
+ }
+ FOREACH_OBJECT_END;
+}
+
/** \} */
/* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 8818fd71190..f77d9874c06 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -714,9 +714,9 @@ static int modifier_apply_obdata(
RPT_INFO,
"Applied modifier only changed CV points, not tessellated/bevel vertices");
- vertexCos = BKE_curve_nurbs_vertexCos_get(&curve_eval->nurb, &numVerts);
+ vertexCos = BKE_curve_nurbs_vert_coords_alloc(&curve_eval->nurb, &numVerts);
mti->deformVerts(md_eval, &mectx, NULL, vertexCos, numVerts);
- BK_curve_nurbs_vertexCos_apply(&curve->nurb, vertexCos);
+ BKE_curve_nurbs_vert_coords_apply(&curve->nurb, vertexCos, false);
MEM_freeN(vertexCos);
@@ -918,7 +918,7 @@ bool edit_modifier_poll_generic(bContext *C,
const bool is_editmode_allowed)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "modifier", rna_type);
- Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C);
+ Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
if (!ob || ID_IS_LINKED(ob)) {
return 0;
@@ -926,7 +926,7 @@ bool edit_modifier_poll_generic(bContext *C,
if (obtype_flag && ((1 << ob->type) & obtype_flag) == 0) {
return 0;
}
- if (ptr.id.data && ID_IS_LINKED(ptr.id.data)) {
+ if (ptr.owner_id && ID_IS_LINKED(ptr.owner_id)) {
return 0;
}
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index b653c7fa70c..38c06319450 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -257,6 +257,8 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_hide_view_clear);
WM_operatortype_append(OBJECT_OT_hide_view_set);
WM_operatortype_append(OBJECT_OT_hide_collection);
+
+ WM_operatortype_append(OBJECT_OT_voxel_remesh);
}
void ED_operatormacros_object(void)
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index a69f4872e72..67364f275dd 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -149,7 +149,7 @@ static int vertex_parent_set_exec(bContext *C, wmOperator *op)
em = me->edit_mesh;
EDBM_mesh_normals_update(em);
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
/* Make sure the evaluated mesh is updated.
*
@@ -1744,7 +1744,7 @@ static Collection *single_object_users_collection(Main *bmain,
}
/* Since master collection has already be duplicated as part of scene copy,
- * we do not duplictae it here.
+ * we do not duplicate it here.
* However, this means its children need to be re-added manually here,
* otherwise their parent lists are empty (which will lead to crashes, see T63101). */
CollectionChild *child_next, *child = collection->children.first;
@@ -2471,7 +2471,11 @@ static int make_override_library_exec(bContext *C, wmOperator *op)
DEG_id_tag_update_ex(bmain, &new_ob->id, ID_RECALC_TRANSFORM | ID_RECALC_BASE_FLAGS);
}
/* parent to 'collection' empty */
- if (new_ob->parent == NULL) {
+ /* Disabled for now, according to some artist this is probably not really useful anyway.
+ * And it breaks things like objects parented to bones
+ * (most likely due to missing proper setting of inverse parent matrix?)... */
+ /* Note: we might even actually want to get rid of that instanciating empty... */
+ if (0 && new_ob->parent == NULL) {
new_ob->parent = obcollection;
}
if (new_ob == (Object *)obact->id.newid) {
@@ -2706,7 +2710,7 @@ static int object_unlink_data_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- id = pprop.ptr.id.data;
+ id = pprop.ptr.owner_id;
if (GS(id->name) == ID_OB) {
Object *ob = (Object *)id;
diff --git a/source/blender/editors/object/object_remesh.c b/source/blender/editors/object/object_remesh.c
new file mode 100644
index 00000000000..5f464084a9b
--- /dev/null
+++ b/source/blender/editors/object/object_remesh.c
@@ -0,0 +1,158 @@
+/*
+ * 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) 2019 by Blender Foundation
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup edobj
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <float.h>
+#include <ctype.h>
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_math.h"
+#include "BLI_utildefines.h"
+
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+#include "DNA_meshdata_types.h"
+#include "DNA_mesh_types.h"
+
+#include "BKE_context.h"
+#include "BKE_global.h"
+#include "BKE_main.h"
+#include "BKE_mesh.h"
+#include "BKE_object.h"
+#include "BKE_paint.h"
+#include "BKE_report.h"
+#include "BKE_scene.h"
+#include "BKE_customdata.h"
+#include "BKE_mesh_remesh_voxel.h"
+
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
+#include "ED_mesh.h"
+#include "ED_object.h"
+#include "ED_screen.h"
+#include "ED_sculpt.h"
+#include "ED_undo.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+#include "WM_message.h"
+#include "WM_toolsystem.h"
+
+#include "object_intern.h" // own include
+
+static bool object_remesh_poll(bContext *C)
+{
+ Object *ob = CTX_data_active_object(C);
+
+ if (BKE_object_is_in_editmode(ob)) {
+ CTX_wm_operator_poll_msg_set(C, "The voxel remesher cannot run from edit mode.");
+ return false;
+ }
+
+ if (ob->mode == OB_MODE_SCULPT && ob->sculpt->bm) {
+ CTX_wm_operator_poll_msg_set(C, "The voxel remesher cannot run with dyntopo activated.");
+ }
+
+ return ED_operator_object_active_editable_mesh(C);
+}
+
+static int voxel_remesh_exec(bContext *C, wmOperator *op)
+{
+ Object *ob = CTX_data_active_object(C);
+ Main *bmain = CTX_data_main(C);
+
+ Mesh *mesh = ob->data;
+ Mesh *new_mesh;
+
+ if (mesh->remesh_voxel_size <= 0.0f) {
+ BKE_report(op->reports, RPT_ERROR, "Voxel remesher cannot run with a voxel size of 0.0.");
+ return OPERATOR_CANCELLED;
+ }
+
+ if (ob->mode == OB_MODE_SCULPT) {
+ ED_sculpt_undo_geometry_begin(ob);
+ }
+
+ new_mesh = BKE_mesh_remesh_voxel_to_mesh_nomain(mesh, mesh->remesh_voxel_size);
+
+ if (!new_mesh) {
+ return OPERATOR_CANCELLED;
+ }
+
+ Mesh *obj_mesh_copy = NULL;
+ if (mesh->flag & ME_REMESH_REPROJECT_PAINT_MASK) {
+ obj_mesh_copy = BKE_mesh_new_nomain_from_template(mesh, mesh->totvert, 0, 0, 0, 0);
+ CustomData_copy(
+ &mesh->vdata, &obj_mesh_copy->vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, mesh->totvert);
+ for (int i = 0; i < mesh->totvert; i++) {
+ copy_v3_v3(obj_mesh_copy->mvert[i].co, mesh->mvert[i].co);
+ }
+ }
+
+ BKE_mesh_nomain_to_mesh(new_mesh, mesh, ob, &CD_MASK_MESH, true);
+
+ if (mesh->flag & ME_REMESH_REPROJECT_PAINT_MASK) {
+ BKE_remesh_reproject_paint_mask(mesh, obj_mesh_copy);
+ BKE_mesh_free(obj_mesh_copy);
+ }
+
+ if (mesh->flag & ME_REMESH_SMOOTH_NORMALS) {
+ BKE_mesh_smooth_flag_set(ob->data, true);
+ }
+
+ if (ob->mode == OB_MODE_SCULPT) {
+ ED_sculpt_undo_geometry_end(ob);
+ }
+
+ BKE_mesh_batch_cache_dirty_tag(ob->data, BKE_MESH_BATCH_DIRTY_ALL);
+ DEG_relations_tag_update(bmain);
+ DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
+ WM_event_add_notifier(C, NC_GEOM | ND_DATA, ob->data);
+
+ return OPERATOR_FINISHED;
+}
+
+void OBJECT_OT_voxel_remesh(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Voxel Remesh";
+ ot->description =
+ "Calculates a new manifold mesh based on the volume of the current mesh. All data layers "
+ "will be lost";
+ ot->idname = "OBJECT_OT_voxel_remesh";
+
+ /* api callbacks */
+ ot->poll = object_remesh_poll;
+ ot->exec = voxel_remesh_exec;
+
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index da06707ebac..28242b986f1 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -69,6 +69,7 @@
#include "ED_armature.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_select_utils.h"
#include "ED_keyframing.h"
@@ -436,6 +437,8 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
@@ -717,6 +720,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
if (changed) {
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
return OPERATOR_FINISHED;
}
@@ -1100,6 +1104,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
if (changed) {
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
return OPERATOR_FINISHED;
}
@@ -1150,6 +1155,8 @@ static int object_select_all_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
else if (any_visible == false) {
@@ -1218,6 +1225,8 @@ static int object_select_same_collection_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
@@ -1281,6 +1290,8 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
@@ -1369,6 +1380,9 @@ static int object_select_more_exec(bContext *C, wmOperator *UNUSED(op))
Scene *scene = CTX_data_scene(C);
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
else {
@@ -1399,6 +1413,9 @@ static int object_select_less_exec(bContext *C, wmOperator *UNUSED(op))
Scene *scene = CTX_data_scene(C);
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
else {
@@ -1448,6 +1465,8 @@ static int object_select_random_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/object/object_shader_fx.c b/source/blender/editors/object/object_shader_fx.c
index 6212269c099..db0c8c54186 100644
--- a/source/blender/editors/object/object_shader_fx.c
+++ b/source/blender/editors/object/object_shader_fx.c
@@ -282,8 +282,9 @@ void OBJECT_OT_shaderfx_add(wmOperatorType *ot)
ot->prop = RNA_def_enum(
ot->srna, "type", rna_enum_object_shaderfx_type_items, eShaderFxType_Blur, "Type", "");
RNA_def_enum_funcs(ot->prop, shaderfx_add_itemf);
- RNA_def_property_translation_context(ot->prop,
- BLT_I18NCONTEXT_ID_ID); /* Abused, for "Light"... */
+
+ /* Abused, for "Light"... */
+ RNA_def_property_translation_context(ot->prop, BLT_I18NCONTEXT_ID_ID);
}
/* -------------------------------------------------------------------- */
@@ -293,7 +294,7 @@ void OBJECT_OT_shaderfx_add(wmOperatorType *ot)
static bool edit_shaderfx_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "shaderfx", rna_type);
- Object *ob = (ptr.id.data) ? ptr.id.data : ED_object_active_context(C);
+ Object *ob = (ptr.owner_id) ? (Object *)ptr.owner_id : ED_object_active_context(C);
if (!ptr.data) {
CTX_wm_operator_poll_msg_set(C, "Context missing 'shaderfx'");
@@ -306,7 +307,7 @@ static bool edit_shaderfx_poll_generic(bContext *C, StructRNA *rna_type, int obt
if (obtype_flag && ((1 << ob->type) & obtype_flag) == 0) {
return 0;
}
- if (ptr.id.data && ID_IS_LINKED(ptr.id.data)) {
+ if (ptr.owner_id && ID_IS_LINKED(ptr.owner_id)) {
return 0;
}
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 5934eab62bb..2a8b306b085 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -77,7 +77,9 @@
#include "object_intern.h"
-/*************************** Clear Transformation ****************************/
+/* -------------------------------------------------------------------- */
+/** \name Clear Transformation Utilities
+ * \{ */
/* clear location of object */
static void object_clear_loc(Object *ob, const bool clear_delta)
@@ -284,8 +286,6 @@ static void object_clear_scale(Object *ob, const bool clear_delta)
}
}
-/* --------------- */
-
/* generic exec for clear-transform operators */
static int object_clear_transform_generic_exec(bContext *C,
wmOperator *op,
@@ -329,7 +329,11 @@ static int object_clear_transform_generic_exec(bContext *C,
return OPERATOR_FINISHED;
}
-/* --------------- */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Clear Location Operator
+ * \{ */
static int object_location_clear_exec(bContext *C, wmOperator *op)
{
@@ -359,6 +363,12 @@ void OBJECT_OT_location_clear(wmOperatorType *ot)
"Clear delta location in addition to clearing the normal location transform");
}
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Clear Rotation Operator
+ * \{ */
+
static int object_rotation_clear_exec(bContext *C, wmOperator *op)
{
return object_clear_transform_generic_exec(C, op, object_clear_rot, ANIM_KS_ROTATION_ID);
@@ -387,6 +397,12 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot)
"Clear delta rotation in addition to clearing the normal rotation transform");
}
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Clear Scale Operator
+ * \{ */
+
static int object_scale_clear_exec(bContext *C, wmOperator *op)
{
return object_clear_transform_generic_exec(C, op, object_clear_scale, ANIM_KS_SCALING_ID);
@@ -415,7 +431,11 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot)
"Clear delta scale in addition to clearing the normal scale transform");
}
-/* --------------- */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Clear Origin Operator
+ * \{ */
static int object_origin_clear_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -457,7 +477,11 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
-/*************************** Apply Transformation ****************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Apply Transformation Operator
+ * \{ */
/* use this when the loc/size/rot of the parent has changed but the children
* should stay in the same place, e.g. for apply-size-rot or object center */
@@ -744,7 +768,8 @@ static int apply_objects_internal(bContext *C,
BKE_mesh_calc_normals(me);
}
else if (ob->type == OB_ARMATURE) {
- ED_armature_transform_apply(bmain, ob, mat, do_props);
+ bArmature *arm = ob->data;
+ BKE_armature_transform(arm, mat, do_props);
}
else if (ob->type == OB_LATTICE) {
Lattice *lt = ob->data;
@@ -960,7 +985,11 @@ void OBJECT_OT_transform_apply(wmOperatorType *ot)
"Modify properties such as curve vertex radius, font size and bone envelope");
}
-/********************* Set Object Center ************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Set Object Center Operator
+ * \{ */
enum {
GEOMETRY_TO_ORIGIN = 0,
@@ -1152,7 +1181,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
else if (ELEM(ob->type, OB_CURVE, OB_SURF)) {
Curve *cu = ob->data;
- if (centermode == ORIGIN_TO_CURSOR) { /* done */
+ if (centermode == ORIGIN_TO_CURSOR) {
+ /* done */
}
else if (around == V3D_AROUND_CENTER_MEDIAN) {
BKE_curve_center_median(cu, cent);
@@ -1244,7 +1274,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
else if (ob->type == OB_MBALL) {
MetaBall *mb = ob->data;
- if (centermode == ORIGIN_TO_CURSOR) { /* done */
+ if (centermode == ORIGIN_TO_CURSOR) {
+ /* done */
}
else if (around == V3D_AROUND_CENTER_MEDIAN) {
BKE_mball_center_median(mb, cent);
@@ -1270,7 +1301,8 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
else if (ob->type == OB_LATTICE) {
Lattice *lt = ob->data;
- if (centermode == ORIGIN_TO_CURSOR) { /* done */
+ if (centermode == ORIGIN_TO_CURSOR) {
+ /* done */
}
else if (around == V3D_AROUND_CENTER_MEDIAN) {
BKE_lattice_center_median(lt, cent);
@@ -1323,11 +1355,6 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
invert_m4_m4(inverse_diff_mat, diff_mat);
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- /* skip strokes that are invalid for current view */
- if (ED_gpencil_stroke_can_use(C, gps) == false) {
- continue;
- }
-
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
float mpt[3];
mul_v3_m4v3(mpt, inverse_diff_mat, &pt->x);
@@ -1337,12 +1364,13 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
}
}
}
- DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
-
tot_change++;
if (centermode == ORIGIN_TO_GEOMETRY) {
copy_v3_v3(ob->loc, gpcenter);
}
+ DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
+
ob->id.tag |= LIB_TAG_DOIT;
do_inverse_offset = true;
}
@@ -1508,6 +1536,8 @@ void OBJECT_OT_origin_set(wmOperatorType *ot)
RNA_def_enum(ot->srna, "center", prop_set_bounds_types, V3D_AROUND_CENTER_MEDIAN, "Center", "");
}
+/** \} */
+
/* -------------------------------------------------------------------- */
/** \name Transform Axis Target
*
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index a43ac59c9b8..08fe5e818b2 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -1139,7 +1139,7 @@ static bool vgroup_normalize(Object *ob)
int i, dvert_tot = 0;
const int def_nr = ob->actdef - 1;
- const int use_vert_sel = vertex_group_use_vert_sel(ob);
+ const bool use_vert_sel = vertex_group_use_vert_sel(ob);
if (!BLI_findlink(&ob->defbase, def_nr)) {
return false;
@@ -1623,7 +1623,7 @@ static bool vgroup_normalize_all(Object *ob,
int i, dvert_tot = 0;
const int def_nr = ob->actdef - 1;
- const int use_vert_sel = vertex_group_use_vert_sel(ob);
+ const bool use_vert_sel = vertex_group_use_vert_sel(ob);
if (subset_count == 0) {
BKE_report(reports, RPT_ERROR, "No vertex groups to operate on");
@@ -2047,7 +2047,7 @@ static int vgroup_limit_total_subset(Object *ob,
{
MDeformVert *dv, **dvert_array = NULL;
int i, dvert_tot = 0;
- const int use_vert_sel = vertex_group_use_vert_sel(ob);
+ const bool use_vert_sel = vertex_group_use_vert_sel(ob);
int remove_tot = 0;
ED_vgroup_parray_alloc(ob->data, &dvert_array, &dvert_tot, use_vert_sel);
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index e6870cda19d..68506c8addb 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -338,7 +338,7 @@ static PTCacheEdit *pe_get_current(Depsgraph *depsgraph, Scene *scene, Object *o
}
/* Don't consider inactive or render dependency graphs, since they might be evaluated for a
- * different number of childrem. or have different pointer to evaluated particle system or
+ * different number of children. or have different pointer to evaluated particle system or
* modifier which will also cause troubles. */
if (edit && DEG_is_active(depsgraph)) {
edit->pid = *pid;
@@ -1943,7 +1943,7 @@ void PARTICLE_OT_select_roots(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
- WM_operator_properties_select_action(ot, SEL_SELECT, true);
+ WM_operator_properties_select_action(ot, SEL_SELECT, false);
}
/************************ select tip operator ************************/
@@ -2014,7 +2014,7 @@ void PARTICLE_OT_select_tips(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
- WM_operator_properties_select_action(ot, SEL_SELECT, true);
+ WM_operator_properties_select_action(ot, SEL_SELECT, false);
}
/*********************** select random operator ************************/
diff --git a/source/blender/editors/physics/particle_object.c b/source/blender/editors/physics/particle_object.c
index 0999d1f3588..bb8a31966ef 100644
--- a/source/blender/editors/physics/particle_object.c
+++ b/source/blender/editors/physics/particle_object.c
@@ -186,7 +186,7 @@ static int new_particle_settings_exec(bContext *C, wmOperator *UNUSED(op))
part = BKE_particlesettings_add(bmain, "ParticleSettings");
}
- ob = ptr.id.data;
+ ob = (Object *)ptr.owner_id;
if (psys->part) {
id_us_min(&psys->part->id);
@@ -226,7 +226,7 @@ static int new_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
Main *bmain = CTX_data_main(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys = ptr.data;
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
ParticleTarget *pt;
@@ -273,7 +273,7 @@ static int remove_particle_target_exec(bContext *C, wmOperator *UNUSED(op))
Main *bmain = CTX_data_main(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys = ptr.data;
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
ParticleTarget *pt;
@@ -323,7 +323,7 @@ static int target_move_up_exec(bContext *C, wmOperator *UNUSED(op))
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys = ptr.data;
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
ParticleTarget *pt;
if (!psys) {
@@ -363,7 +363,7 @@ static int target_move_down_exec(bContext *C, wmOperator *UNUSED(op))
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "particle_system", &RNA_ParticleSystem);
ParticleSystem *psys = ptr.data;
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
ParticleTarget *pt;
if (!psys) {
diff --git a/source/blender/editors/physics/physics_intern.h b/source/blender/editors/physics/physics_intern.h
index 9ebbba07fdf..fc2f3d21bb6 100644
--- a/source/blender/editors/physics/physics_intern.h
+++ b/source/blender/editors/physics/physics_intern.h
@@ -30,7 +30,6 @@ struct PTCacheEdit;
struct ParticleSystem;
struct PointCache;
struct Scene;
-struct ViewLayer;
struct wmOperatorType;
/* particle_edit.c */
diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c
index bc2f1d6cef6..700a94e4f93 100644
--- a/source/blender/editors/physics/physics_pointcache.c
+++ b/source/blender/editors/physics/physics_pointcache.c
@@ -57,7 +57,7 @@ static bool ptcache_bake_all_poll(bContext *C)
static bool ptcache_poll(bContext *C)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
- return (ptr.data && ptr.id.data);
+ return (ptr.data && ptr.owner_id);
}
typedef struct PointCacheJob {
@@ -165,7 +165,7 @@ static PTCacheBaker *ptcache_baker_create(bContext *C, wmOperator *op, bool all)
if (!all) {
PointerRNA ptr = CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
PointCache *cache = ptr.data;
baker->pid = BKE_ptcache_id_find(ob, baker->scene, cache);
}
@@ -300,7 +300,7 @@ static int ptcache_free_bake_exec(bContext *C, wmOperator *UNUSED(op))
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
PointCache *cache = ptr.data;
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
ptcache_free_bake(cache);
@@ -312,7 +312,7 @@ static int ptcache_bake_from_cache_exec(bContext *C, wmOperator *UNUSED(op))
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
PointCache *cache = ptr.data;
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
cache->flag |= PTCACHE_BAKED;
@@ -372,7 +372,7 @@ static int ptcache_add_new_exec(bContext *C, wmOperator *UNUSED(op))
{
Scene *scene = CTX_data_scene(C);
PointerRNA ptr = CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
PointCache *cache = ptr.data;
PTCacheID pid = BKE_ptcache_id_find(ob, scene, cache);
@@ -392,7 +392,7 @@ static int ptcache_remove_exec(bContext *C, wmOperator *UNUSED(op))
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "point_cache", &RNA_PointCache);
Scene *scene = CTX_data_scene(C);
- Object *ob = ptr.id.data;
+ Object *ob = (Object *)ptr.owner_id;
PointCache *cache = ptr.data;
PTCacheID pid = BKE_ptcache_id_find(ob, scene, cache);
diff --git a/source/blender/editors/physics/rigidbody_constraint.c b/source/blender/editors/physics/rigidbody_constraint.c
index 2c454448b9b..a1d76174cc8 100644
--- a/source/blender/editors/physics/rigidbody_constraint.c
+++ b/source/blender/editors/physics/rigidbody_constraint.c
@@ -46,6 +46,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_object.h"
#include "ED_physics.h"
#include "ED_screen.h"
@@ -56,12 +57,37 @@
static bool ED_operator_rigidbody_con_active_poll(bContext *C)
{
+ Scene *scene = CTX_data_scene(C);
+ if (scene == NULL || ID_IS_LINKED(&scene->id) ||
+ (scene->rigidbody_world != NULL && scene->rigidbody_world->constraints != NULL &&
+ ID_IS_LINKED(&scene->rigidbody_world->constraints->id))) {
+ return false;
+ }
+
if (ED_operator_object_active_editable(C)) {
- Object *ob = CTX_data_active_object(C);
+ Object *ob = ED_object_active_context(C);
return (ob && ob->rigidbody_constraint);
}
else {
- return 0;
+ return false;
+ }
+}
+
+static bool ED_operator_rigidbody_con_add_poll(bContext *C)
+{
+ Scene *scene = CTX_data_scene(C);
+ if (scene == NULL || ID_IS_LINKED(&scene->id) ||
+ (scene->rigidbody_world != NULL && scene->rigidbody_world->constraints != NULL &&
+ ID_IS_LINKED(&scene->rigidbody_world->constraints->id))) {
+ return false;
+ }
+
+ if (ED_operator_object_active_editable(C)) {
+ Object *ob = ED_object_active_context(C);
+ return (ob && ob->type == OB_MESH);
+ }
+ else {
+ return false;
}
}
@@ -152,7 +178,7 @@ void RIGIDBODY_OT_constraint_add(wmOperatorType *ot)
/* callbacks */
ot->exec = rigidbody_con_add_exec;
- ot->poll = ED_operator_object_active_editable;
+ ot->poll = ED_operator_rigidbody_con_add_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
diff --git a/source/blender/editors/physics/rigidbody_object.c b/source/blender/editors/physics/rigidbody_object.c
index 70142b790c0..bc8a1799fa0 100644
--- a/source/blender/editors/physics/rigidbody_object.c
+++ b/source/blender/editors/physics/rigidbody_object.c
@@ -62,6 +62,13 @@
static bool ED_operator_rigidbody_active_poll(bContext *C)
{
+ Scene *scene = CTX_data_scene(C);
+ if (scene == NULL || ID_IS_LINKED(&scene->id) ||
+ (scene->rigidbody_world != NULL && scene->rigidbody_world->group != NULL &&
+ ID_IS_LINKED(&scene->rigidbody_world->group->id))) {
+ return false;
+ }
+
if (ED_operator_object_active_editable(C)) {
Object *ob = ED_object_active_context(C);
return (ob && ob->rigidbody_object);
@@ -73,12 +80,19 @@ static bool ED_operator_rigidbody_active_poll(bContext *C)
static bool ED_operator_rigidbody_add_poll(bContext *C)
{
+ Scene *scene = CTX_data_scene(C);
+ if (scene == NULL || ID_IS_LINKED(&scene->id) ||
+ (scene->rigidbody_world != NULL && scene->rigidbody_world->group != NULL &&
+ ID_IS_LINKED(&scene->rigidbody_world->group->id))) {
+ return false;
+ }
+
if (ED_operator_object_active_editable(C)) {
Object *ob = ED_object_active_context(C);
return (ob && ob->type == OB_MESH);
}
else {
- return 0;
+ return false;
}
}
@@ -286,7 +300,7 @@ void RIGIDBODY_OT_objects_remove(wmOperatorType *ot)
/* callbacks */
ot->exec = rigidbody_objects_remove_exec;
- ot->poll = ED_operator_scene_editable;
+ ot->poll = ED_operator_rigidbody_active_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -341,7 +355,7 @@ void RIGIDBODY_OT_shape_change(wmOperatorType *ot)
/* callbacks */
ot->invoke = WM_menu_invoke;
ot->exec = rigidbody_objects_shape_change_exec;
- ot->poll = ED_operator_scene_editable;
+ ot->poll = ED_operator_rigidbody_active_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -534,7 +548,7 @@ void RIGIDBODY_OT_mass_calculate(wmOperatorType *ot)
/* callbacks */
ot->invoke = WM_menu_invoke; // XXX
ot->exec = rigidbody_objects_calc_mass_exec;
- ot->poll = ED_operator_scene_editable;
+ ot->poll = ED_operator_rigidbody_active_poll;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
diff --git a/source/blender/editors/render/render_intern.h b/source/blender/editors/render/render_intern.h
index 50f0b53c037..88b913b84ca 100644
--- a/source/blender/editors/render/render_intern.h
+++ b/source/blender/editors/render/render_intern.h
@@ -24,7 +24,6 @@
#ifndef __RENDER_INTERN_H__
#define __RENDER_INTERN_H__
-struct RenderEngine;
struct ScrArea;
struct bContext;
struct wmOperatorType;
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index acd7126e56a..55a71ee8989 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -1177,9 +1177,9 @@ static int render_shutter_curve_preset_exec(bContext *C, wmOperator *op)
cm->flag &= ~CUMA_EXTEND_EXTRAPOLATE;
mblur_shutter_curve->preset = preset;
- curvemap_reset(
+ BKE_curvemap_reset(
cm, &mblur_shutter_curve->clipr, mblur_shutter_curve->preset, CURVEMAP_SLOPE_POS_NEG);
- curvemapping_changed(mblur_shutter_curve, false);
+ BKE_curvemapping_changed(mblur_shutter_curve, false);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index 9b380ad5db1..b6601807443 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -723,35 +723,33 @@ static void shader_preview_updatejob(void *spv)
{
ShaderPreview *sp = spv;
- if (sp->id) {
- if (sp->pr_method == PR_NODE_RENDER) {
- if (GS(sp->id->name) == ID_MA) {
- Material *mat = (Material *)sp->id;
+ if (sp->pr_method == PR_NODE_RENDER) {
+ if (GS(sp->id->name) == ID_MA) {
+ Material *mat = (Material *)sp->id;
- if (sp->matcopy && mat->nodetree && sp->matcopy->nodetree) {
- ntreeLocalSync(sp->matcopy->nodetree, mat->nodetree);
- }
+ if (sp->matcopy && mat->nodetree && sp->matcopy->nodetree) {
+ ntreeLocalSync(sp->matcopy->nodetree, mat->nodetree);
}
- else if (GS(sp->id->name) == ID_TE) {
- Tex *tex = (Tex *)sp->id;
+ }
+ else if (GS(sp->id->name) == ID_TE) {
+ Tex *tex = (Tex *)sp->id;
- if (sp->texcopy && tex->nodetree && sp->texcopy->nodetree) {
- ntreeLocalSync(sp->texcopy->nodetree, tex->nodetree);
- }
+ if (sp->texcopy && tex->nodetree && sp->texcopy->nodetree) {
+ ntreeLocalSync(sp->texcopy->nodetree, tex->nodetree);
}
- else if (GS(sp->id->name) == ID_WO) {
- World *wrld = (World *)sp->id;
+ }
+ else if (GS(sp->id->name) == ID_WO) {
+ World *wrld = (World *)sp->id;
- if (sp->worldcopy && wrld->nodetree && sp->worldcopy->nodetree) {
- ntreeLocalSync(sp->worldcopy->nodetree, wrld->nodetree);
- }
+ if (sp->worldcopy && wrld->nodetree && sp->worldcopy->nodetree) {
+ ntreeLocalSync(sp->worldcopy->nodetree, wrld->nodetree);
}
- else if (GS(sp->id->name) == ID_LA) {
- Light *la = (Light *)sp->id;
+ }
+ else if (GS(sp->id->name) == ID_LA) {
+ Light *la = (Light *)sp->id;
- if (sp->lampcopy && la->nodetree && sp->lampcopy->nodetree) {
- ntreeLocalSync(sp->lampcopy->nodetree, la->nodetree);
- }
+ if (sp->lampcopy && la->nodetree && sp->lampcopy->nodetree) {
+ ntreeLocalSync(sp->lampcopy->nodetree, la->nodetree);
}
}
}
@@ -946,57 +944,80 @@ static void shader_preview_startjob(void *customdata, short *stop, short *do_upd
*do_update = true;
}
+static void preview_id_copy_free(ID *id)
+{
+ struct IDProperty *properties;
+ /* get rid of copied ID */
+ properties = IDP_GetProperties(id, false);
+ if (properties) {
+ IDP_FreePropertyContent_ex(properties, false);
+ MEM_freeN(properties);
+ }
+ switch (GS(id->name)) {
+ case ID_MA:
+ BKE_material_free((Material *)id);
+ break;
+ case ID_TE:
+ BKE_texture_free((Tex *)id);
+ break;
+ case ID_LA:
+ BKE_light_free((Light *)id);
+ break;
+ case ID_WO:
+ BKE_world_free((World *)id);
+ break;
+ default:
+ BLI_assert(!"ID type preview not supported.");
+ break;
+ }
+ MEM_freeN(id);
+}
+
static void shader_preview_free(void *customdata)
{
ShaderPreview *sp = customdata;
Main *pr_main = sp->pr_main;
+ ID *main_id_copy = NULL;
+ ID *sub_id_copy = NULL;
if (sp->matcopy) {
- sp->id_copy = (ID *)sp->matcopy;
+ main_id_copy = (ID *)sp->matcopy;
BLI_remlink(&pr_main->materials, sp->matcopy);
}
if (sp->texcopy) {
- sp->id_copy = (ID *)sp->texcopy;
+ BLI_assert(main_id_copy == NULL);
+ main_id_copy = (ID *)sp->texcopy;
BLI_remlink(&pr_main->textures, sp->texcopy);
}
if (sp->worldcopy) {
- sp->id_copy = (ID *)sp->worldcopy;
+ /* worldcopy is also created for material with `Preview World` enabled */
+ if (main_id_copy) {
+ sub_id_copy = (ID *)sp->worldcopy;
+ }
+ else {
+ main_id_copy = (ID *)sp->worldcopy;
+ }
BLI_remlink(&pr_main->worlds, sp->worldcopy);
}
if (sp->lampcopy) {
- sp->id_copy = (ID *)sp->lampcopy;
+ BLI_assert(main_id_copy == NULL);
+ main_id_copy = (ID *)sp->lampcopy;
BLI_remlink(&pr_main->lights, sp->lampcopy);
}
- if (sp->id_copy) {
+ if (main_id_copy || sp->id_copy) {
/* node previews */
shader_preview_updatejob(sp);
}
- if (sp->id_copy && sp->own_id_copy) {
- struct IDProperty *properties;
- /* get rid of copied ID */
- properties = IDP_GetProperties(sp->id_copy, false);
- if (properties) {
- IDP_FreePropertyContent_ex(properties, false);
- MEM_freeN(properties);
+ if (sp->own_id_copy) {
+ if (sp->id_copy) {
+ preview_id_copy_free(sp->id_copy);
+ }
+ if (main_id_copy) {
+ preview_id_copy_free(main_id_copy);
}
- switch (GS(sp->id_copy->name)) {
- case ID_MA:
- BKE_material_free((Material *)sp->id_copy);
- break;
- case ID_TE:
- BKE_texture_free((Tex *)sp->id_copy);
- break;
- case ID_LA:
- BKE_light_free((Light *)sp->id_copy);
- break;
- case ID_WO:
- BKE_world_free((World *)sp->id_copy);
- break;
- default:
- BLI_assert(!"ID type preview not supported.");
- break;
+ if (sub_id_copy) {
+ preview_id_copy_free(sub_id_copy);
}
- MEM_freeN(sp->id_copy);
}
MEM_freeN(sp);
@@ -1301,12 +1322,7 @@ static void icon_preview_free(void *customdata)
IconPreview *ip = (IconPreview *)customdata;
if (ip->id_copy) {
- /* Feels a bit hacky just to reuse shader_preview_free() */
- ShaderPreview *sp = MEM_callocN(sizeof(ShaderPreview), "Icon ShaderPreview");
- sp->id_copy = ip->id_copy;
- sp->own_id_copy = true;
- shader_preview_free(sp);
- ip->id_copy = NULL;
+ preview_id_copy_free(ip->id_copy);
}
BLI_freelistN(&ip->sizes);
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index 01740c13c9d..9f13431f25a 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -1836,7 +1836,7 @@ void SCENE_OT_freestyle_stroke_material_create(wmOperatorType *ot)
static int texture_slot_move_exec(bContext *C, wmOperator *op)
{
- ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).id.data;
+ ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).owner_id;
if (id) {
MTex **mtex_ar, *mtexswap;
@@ -2031,7 +2031,7 @@ static void paste_mtex_copybuf(ID *id)
static int copy_mtex_exec(bContext *C, wmOperator *UNUSED(op))
{
- ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).id.data;
+ ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).owner_id;
if (id == NULL) {
/* copying empty slot */
@@ -2046,7 +2046,7 @@ static int copy_mtex_exec(bContext *C, wmOperator *UNUSED(op))
static bool copy_mtex_poll(bContext *C)
{
- ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).id.data;
+ ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).owner_id;
return (id != NULL);
}
@@ -2069,7 +2069,7 @@ void TEXTURE_OT_slot_copy(wmOperatorType *ot)
static int paste_mtex_exec(bContext *C, wmOperator *UNUSED(op))
{
- ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).id.data;
+ ID *id = CTX_data_pointer_get_type(C, "texture_slot", &RNA_TextureSlot).owner_id;
if (id == NULL) {
Material *ma = CTX_data_pointer_get_type(C, "material", &RNA_Material).data;
diff --git a/source/blender/editors/render/render_view.c b/source/blender/editors/render/render_view.c
index cd5edcdc3f4..3154d5d0985 100644
--- a/source/blender/editors/render/render_view.c
+++ b/source/blender/editors/render/render_view.c
@@ -223,8 +223,8 @@ ScrArea *render_view_open(bContext *C, int mx, int my, ReportList *reports)
/* get the correct image, and scale it */
sima->image = BKE_image_verify_viewer(bmain, IMA_TYPE_R_RESULT, "Render Result");
- /* if we're rendering to full screen, set appropriate hints on image editor
- * so it can restore properly on pressing esc */
+ /* If we're rendering to full screen, set appropriate hints on image editor
+ * so it can restore properly on pressing escape. */
if (sa->full) {
sima->flag |= SI_FULLWINDOW;
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 5099c370a85..a0f493d0011 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -188,51 +188,17 @@ void ED_area_do_refresh(bContext *C, ScrArea *sa)
/**
* \brief Corner widget use for quitting fullscreen.
*/
-static void area_draw_azone_fullscreen(short x1, short y1, short x2, short y2, float alpha)
+static void area_draw_azone_fullscreen(
+ short UNUSED(x1), short UNUSED(y1), short x2, short y2, float alpha)
{
- int x = x2 - ((float)x2 - x1) * 0.5f / UI_DPI_FAC;
- int y = y2 - ((float)y2 - y1) * 0.5f / UI_DPI_FAC;
-
- /* adjust the icon distance from the corner */
- x += 36.0f / UI_DPI_FAC;
- y += 36.0f / UI_DPI_FAC;
-
- /* draws from the left bottom corner of the icon */
- x -= UI_DPI_ICON_SIZE;
- y -= UI_DPI_ICON_SIZE;
-
- alpha = min_ff(alpha, 0.75f);
-
- UI_icon_draw_ex(x, y, ICON_FULLSCREEN_EXIT, 0.7f * U.inv_dpi_fac, 0.0f, alpha, NULL, false);
-
- /* debug drawing :
- * The click_rect is the same as defined in fullscreen_click_rcti_init
- * Keep them both in sync */
-
- if (G.debug_value == 101) {
- rcti click_rect;
- float icon_size = UI_DPI_ICON_SIZE + 7 * UI_DPI_FAC;
-
- BLI_rcti_init(&click_rect, x, x + icon_size, y, y + icon_size);
-
- GPUVertFormat *format = immVertexFormat();
- uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
-
- immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
-
- immUniformColor4f(1.0f, 0.0f, 0.0f, alpha);
- imm_draw_box_wire_2d(pos, click_rect.xmin, click_rect.ymin, click_rect.xmax, click_rect.ymax);
-
- immUniformColor4f(0.0f, 1.0f, 1.0f, alpha);
- immBegin(GPU_PRIM_LINES, 4);
- immVertex2f(pos, click_rect.xmin, click_rect.ymin);
- immVertex2f(pos, click_rect.xmax, click_rect.ymax);
- immVertex2f(pos, click_rect.xmin, click_rect.ymax);
- immVertex2f(pos, click_rect.xmax, click_rect.ymin);
- immEnd();
-
- immUnbindProgram();
- }
+ UI_icon_draw_ex(x2 - U.widget_unit,
+ y2 - U.widget_unit,
+ ICON_FULLSCREEN_EXIT,
+ U.inv_dpi_fac,
+ min_ff(alpha, 0.75f),
+ 0.0f,
+ NULL,
+ false);
}
/**
@@ -368,7 +334,9 @@ static void region_draw_azones(ScrArea *sa, ARegion *ar)
}
}
else if (az->type == AZONE_FULLSCREEN) {
- area_draw_azone_fullscreen(az->x1, az->y1, az->x2, az->y2, az->alpha);
+ if (az->alpha > 0.0f) {
+ area_draw_azone_fullscreen(az->x1, az->y1, az->x2, az->y2, az->alpha);
+ }
}
}
if (!IS_EQF(az->alpha, 0.0f) && ELEM(az->type, AZONE_FULLSCREEN, AZONE_REGION_SCROLL)) {
@@ -906,10 +874,18 @@ static void fullscreen_azone_initialize(ScrArea *sa, ARegion *ar)
az->ar = ar;
az->alpha = 0.0f;
- az->x1 = ar->winrct.xmax - (AZONEFADEOUT - 1);
- az->y1 = ar->winrct.ymax - (AZONEFADEOUT - 1);
- az->x2 = ar->winrct.xmax;
- az->y2 = ar->winrct.ymax;
+ if (U.uiflag2 & USER_REGION_OVERLAP) {
+ const rcti *rect_visible = ED_region_visible_rect(ar);
+ az->x2 = ar->winrct.xmin + rect_visible->xmax;
+ az->y2 = ar->winrct.ymin + rect_visible->ymax;
+ }
+ else {
+ az->x2 = ar->winrct.xmax;
+ az->y2 = ar->winrct.ymax;
+ }
+ az->x1 = az->x2 - AZONEFADEOUT;
+ az->y1 = az->y2 - AZONEFADEOUT;
+
BLI_rcti_init(&az->rect, az->x1, az->x2, az->y1, az->y2);
}
@@ -1076,16 +1052,11 @@ static void region_azones_scrollbars_initialize(ScrArea *sa, ARegion *ar)
}
/* *************************************************************** */
-
-static void region_azones_add(const bScreen *screen, ScrArea *sa, ARegion *ar, const int alignment)
+static void region_azones_add_edge(ScrArea *sa,
+ ARegion *ar,
+ const int alignment,
+ const bool is_fullscreen)
{
- const bool is_fullscreen = screen->state == SCREENFULL;
-
- /* Only display tab or icons when the header region is hidden
- * (not the tool header - they overlap). */
- if (ar->regiontype == RGN_TYPE_TOOL_HEADER) {
- return;
- }
/* edge code (t b l r) is along which area edge azone will be drawn */
if (alignment == RGN_ALIGN_TOP) {
@@ -1100,6 +1071,25 @@ static void region_azones_add(const bScreen *screen, ScrArea *sa, ARegion *ar, c
else if (alignment == RGN_ALIGN_LEFT) {
region_azone_edge_initialize(sa, ar, AE_RIGHT_TO_TOPLEFT, is_fullscreen);
}
+}
+
+static void region_azones_add(const bScreen *screen, ScrArea *sa, ARegion *ar)
+{
+ const bool is_fullscreen = screen->state == SCREENFULL;
+
+ /* Only display tab or icons when the header region is hidden
+ * (not the tool header - they overlap). */
+ if (ar->regiontype == RGN_TYPE_TOOL_HEADER) {
+ return;
+ }
+
+ region_azones_add_edge(sa, ar, RGN_ALIGN_ENUM_FROM_MASK(ar->alignment), is_fullscreen);
+
+ /* For a split region also continue the azone edge from the next region if this region is aligned
+ * with the next */
+ if ((ar->alignment & RGN_SPLIT_PREV) && ar->prev) {
+ region_azones_add_edge(sa, ar, RGN_ALIGN_ENUM_FROM_MASK(ar->prev->alignment), is_fullscreen);
+ }
if (is_fullscreen) {
fullscreen_azone_initialize(sa, ar);
@@ -1515,6 +1505,9 @@ static void region_rect_recursive(
if (ar->winx != prev_winx || ar->winy != prev_winy) {
ED_region_tag_redraw(ar);
}
+
+ /* Clear, initialize on demand. */
+ memset(&ar->runtime.visible_rect, 0, sizeof(ar->runtime.visible_rect));
}
static void area_calc_totrct(ScrArea *sa, const rcti *window_rect)
@@ -1716,7 +1709,7 @@ void ED_area_update_region_sizes(wmWindowManager *wm, wmWindow *win, ScrArea *ar
}
/* Some AZones use View2D data which is only updated in region init, so call that first! */
- region_azones_add(screen, area, ar, RGN_ALIGN_ENUM_FROM_MASK(ar->alignment));
+ region_azones_add(screen, area, ar);
}
ED_area_azones_update(area, &win->eventstate->x);
@@ -1787,7 +1780,7 @@ void ED_area_initialize(wmWindowManager *wm, wmWindow *win, ScrArea *sa)
}
/* Some AZones use View2D data which is only updated in region init, so call that first! */
- region_azones_add(screen, sa, ar, RGN_ALIGN_ENUM_FROM_MASK(ar->alignment));
+ region_azones_add(screen, sa, ar);
}
/* Avoid re-initializing tools while resizing the window. */
@@ -2809,11 +2802,10 @@ void ED_region_info_draw_multiline(ARegion *ar,
uiStyle *style = UI_style_get_dpi();
int fontid = style->widget.uifont_id;
int scissor[4];
- rcti rect;
int num_lines = 0;
/* background box */
- ED_region_visible_rect(ar, &rect);
+ rcti rect = *ED_region_visible_rect(ar);
/* Box fill entire width or just around text. */
if (!full_redraw) {
@@ -3291,7 +3283,7 @@ void ED_region_grid_draw(ARegion *ar, float zoomx, float zoomy)
/* If the area has overlapping regions, it returns visible rect for Region *ar */
/* rect gets returned in local region coordinates */
-void ED_region_visible_rect(ARegion *ar, rcti *rect)
+static void region_visible_rect_calc(ARegion *ar, rcti *rect)
{
ARegion *arn = ar;
@@ -3338,6 +3330,15 @@ void ED_region_visible_rect(ARegion *ar, rcti *rect)
BLI_rcti_translate(rect, -ar->winrct.xmin, -ar->winrct.ymin);
}
+const rcti *ED_region_visible_rect(ARegion *ar)
+{
+ rcti *rect = &ar->runtime.visible_rect;
+ if (rect->xmin == 0 && rect->ymin == 0 && rect->xmax == 0 && rect->ymax == 0) {
+ region_visible_rect_calc(ar, rect);
+ }
+ return rect;
+}
+
/* Cache display helpers */
void ED_region_cache_draw_background(const ARegion *ar)
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 2eb7f732534..6f8b25f782b 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -533,7 +533,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
gpd_ptr = ED_gpencil_data_get_pointers_direct((ID *)sc, sa, scene, obact, &ptr);
if (gpd_ptr) {
- CTX_data_pointer_set(result, ptr.id.data, ptr.type, ptr.data);
+ CTX_data_pointer_set(result, ptr.owner_id, ptr.type, ptr.data);
return 1;
}
}
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index dddc33e3ad0..326bbbd8770 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -1116,7 +1116,7 @@ void ED_screen_full_prevspace(bContext *C, ScrArea *sa)
void ED_screen_restore_temp_type(bContext *C, ScrArea *sa)
{
- /* incase nether functions below run */
+ /* In case nether functions below run. */
ED_area_tag_redraw(sa);
if (sa->flag & AREA_FLAG_TEMP_TYPE) {
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index eccd85ab276..417bdf84232 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -186,9 +186,9 @@ bool ED_operator_scene_editable(bContext *C)
{
Scene *scene = CTX_data_scene(C);
if (scene && !ID_IS_LINKED(scene)) {
- return 1;
+ return true;
}
- return 0;
+ return false;
}
bool ED_operator_objectmode(bContext *C)
@@ -696,21 +696,9 @@ static bool actionzone_area_poll(bContext *C)
/* the debug drawing of the click_rect is in area_draw_azone_fullscreen, keep both in sync */
static void fullscreen_click_rcti_init(
- rcti *rect, const short x1, const short y1, const short x2, const short y2)
+ rcti *rect, const short UNUSED(x1), const short UNUSED(y1), const short x2, const short y2)
{
- int x = x2 - ((float)x2 - x1) * 0.5f / UI_DPI_FAC;
- int y = y2 - ((float)y2 - y1) * 0.5f / UI_DPI_FAC;
- float icon_size = UI_DPI_ICON_SIZE + 7 * UI_DPI_FAC;
-
- /* adjust the icon distance from the corner */
- x += 36.0f / UI_DPI_FAC;
- y += 36.0f / UI_DPI_FAC;
-
- /* draws from the left bottom corner of the icon */
- x -= UI_DPI_ICON_SIZE;
- y -= UI_DPI_ICON_SIZE;
-
- BLI_rcti_init(rect, x, x + icon_size, y, y + icon_size);
+ BLI_rcti_init(rect, x2 - U.widget_unit, x2, y2 - U.widget_unit, y2);
}
static bool azone_clipped_rect_calc(const AZone *az, rcti *r_rect_clip)
@@ -1133,6 +1121,47 @@ static void SCREEN_OT_actionzone(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
+/** \name Area edge detection utility
+ * \{ */
+
+static ScrEdge *screen_area_edge_from_cursor(const bContext *C,
+ const int cursor[2],
+ ScrArea **r_sa1,
+ ScrArea **r_sa2)
+{
+ wmWindow *win = CTX_wm_window(C);
+ bScreen *sc = CTX_wm_screen(C);
+ ScrEdge *actedge;
+ rcti window_rect;
+ WM_window_rect_calc(win, &window_rect);
+ actedge = screen_geom_area_map_find_active_scredge(
+ AREAMAP_FROM_SCREEN(sc), &window_rect, cursor[0], cursor[1]);
+ *r_sa1 = NULL;
+ *r_sa2 = NULL;
+ if (actedge == NULL) {
+ return NULL;
+ }
+ int borderwidth = (4 * UI_DPI_FAC);
+ ScrArea *sa1, *sa2;
+ if (screen_geom_edge_is_horizontal(actedge)) {
+ sa1 = BKE_screen_find_area_xy(sc, SPACE_TYPE_ANY, cursor[0], cursor[1] + borderwidth);
+ sa2 = BKE_screen_find_area_xy(sc, SPACE_TYPE_ANY, cursor[0], cursor[1] - borderwidth);
+ }
+ else {
+ sa1 = BKE_screen_find_area_xy(sc, SPACE_TYPE_ANY, cursor[0] + borderwidth, cursor[1]);
+ sa2 = BKE_screen_find_area_xy(sc, SPACE_TYPE_ANY, cursor[0] - borderwidth, cursor[1]);
+ }
+ bool isGlobal = ((sa1 && ED_area_is_global(sa1)) || (sa2 && ED_area_is_global(sa2)));
+ if (!isGlobal) {
+ *r_sa1 = sa1;
+ *r_sa2 = sa2;
+ }
+ return actedge;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
/** \name Swap Area Operator
* \{ */
@@ -1151,6 +1180,7 @@ static void SCREEN_OT_actionzone(wmOperatorType *ot)
* callbacks:
*
* invoke() gets called on shift+lmb drag in action-zone
+ * exec() execute without any user interaction, based on properties
* call init(), add handler
*
* modal() accept modal events while doing it
@@ -1241,6 +1271,19 @@ static int area_swap_modal(bContext *C, wmOperator *op, const wmEvent *event)
return OPERATOR_RUNNING_MODAL;
}
+static int area_swap_exec(bContext *C, wmOperator *op)
+{
+ ScrArea *sa1, *sa2;
+ int cursor[2];
+ RNA_int_get_array(op->ptr, "cursor", cursor);
+ screen_area_edge_from_cursor(C, cursor, &sa1, &sa2);
+ if (sa1 == NULL || sa2 == NULL) {
+ return OPERATOR_CANCELLED;
+ }
+ ED_area_swapspace(C, sa1, sa2);
+ return OPERATOR_FINISHED;
+}
+
static void SCREEN_OT_area_swap(wmOperatorType *ot)
{
ot->name = "Swap Areas";
@@ -1249,10 +1292,15 @@ static void SCREEN_OT_area_swap(wmOperatorType *ot)
ot->invoke = area_swap_invoke;
ot->modal = area_swap_modal;
- ot->poll = ED_operator_areaactive;
+ ot->exec = area_swap_exec;
+ ot->poll = screen_active_editable;
ot->cancel = area_swap_cancel;
ot->flag = OPTYPE_BLOCKING;
+
+ /* rna */
+ RNA_def_int_vector(
+ ot->srna, "cursor", 2, NULL, INT_MIN, INT_MAX, "Cursor", "", INT_MIN, INT_MAX);
}
/** \} */
@@ -2470,6 +2518,14 @@ static int area_max_regionsize(ScrArea *sa, ARegion *scalear, AZEdge edge)
return dist;
}
+static bool is_split_edge(const int alignment, const AZEdge edge)
+{
+ return ((alignment == RGN_ALIGN_BOTTOM) && (edge == AE_TOP_TO_BOTTOMRIGHT)) ||
+ ((alignment == RGN_ALIGN_TOP) && (edge == AE_BOTTOM_TO_TOPLEFT)) ||
+ ((alignment == RGN_ALIGN_LEFT) && (edge == AE_RIGHT_TO_TOPLEFT)) ||
+ ((alignment == RGN_ALIGN_RIGHT) && (edge == AE_LEFT_TO_TOPRIGHT));
+}
+
static int region_scale_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
sActionzoneData *sad = event->customdata;
@@ -2488,7 +2544,16 @@ static int region_scale_invoke(bContext *C, wmOperator *op, const wmEvent *event
op->customdata = rmd;
rmd->az = az;
- rmd->ar = az->ar;
+ /* special case for region within region - this allows the scale of
+ * the parent region if the azone edge is not the edge splitting
+ * both regions */
+ if ((az->ar->alignment & RGN_SPLIT_PREV) && az->ar->prev &&
+ !is_split_edge(RGN_ALIGN_ENUM_FROM_MASK(az->ar->alignment), az->edge)) {
+ rmd->ar = az->ar->prev;
+ }
+ else {
+ rmd->ar = az->ar;
+ }
rmd->sa = sad->sa1;
rmd->edge = az->edge;
rmd->origx = event->x;
@@ -3175,40 +3240,19 @@ static void area_join_draw_cb(const struct wmWindow *UNUSED(win), void *userdata
/* validate selection inside screen, set variables OK */
/* return 0: init failed */
-/* XXX todo: find edge based on (x,y) and set other area? */
-static int area_join_init(bContext *C, wmOperator *op)
+static int area_join_init(bContext *C, wmOperator *op, ScrArea *sa1, ScrArea *sa2)
{
- const wmWindow *win = CTX_wm_window(C);
- bScreen *screen = CTX_wm_screen(C);
- ScrArea *sa1, *sa2;
- sAreaJoinData *jd = NULL;
- int x1, y1;
- int x2, y2;
-
- /* required properties, make negative to get return 0 if not set by caller */
- 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 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, x1, y1);
- if (sa1 == NULL) {
- sa1 = BKE_screen_area_map_find_area_xy(&win->global_areas, SPACE_TYPE_ANY, x1, y1);
- }
- sa2 = BKE_screen_find_area_xy(screen, SPACE_TYPE_ANY, x2, y2);
- if (sa2 == NULL) {
- sa2 = BKE_screen_area_map_find_area_xy(&win->global_areas, SPACE_TYPE_ANY, x2, y2);
- }
- if ((sa1 && ED_area_is_global(sa1)) || (sa2 && ED_area_is_global(sa2))) {
- BKE_report(
- op->reports, RPT_ERROR, "Global areas (Top Bar, Status Bar) do not support joining");
- return 0;
+ if (sa1 == NULL || sa2 == NULL) {
+ /* Get areas from cursor location if not specified. */
+ int cursor[2];
+ RNA_int_get_array(op->ptr, "cursor", cursor);
+ screen_area_edge_from_cursor(C, cursor, &sa1, &sa2);
}
- else if (sa1 == NULL || sa2 == NULL || sa1 == sa2) {
+ if (sa1 == NULL || sa2 == NULL) {
return 0;
}
- jd = (sAreaJoinData *)MEM_callocN(sizeof(sAreaJoinData), "op_area_join");
+ sAreaJoinData *jd = MEM_callocN(sizeof(sAreaJoinData), "op_area_join");
jd->sa1 = sa1;
jd->sa2 = sa2;
@@ -3261,7 +3305,7 @@ static void area_join_exit(bContext *C, wmOperator *op)
static int area_join_exec(bContext *C, wmOperator *op)
{
- if (!area_join_init(C, op)) {
+ if (!area_join_init(C, op, NULL, NULL)) {
return OPERATOR_CANCELLED;
}
@@ -3291,16 +3335,11 @@ static int area_join_invoke(bContext *C, wmOperator *op, const wmEvent *event)
if (sad->sa1 == sad->sa2) {
return OPERATOR_PASS_THROUGH;
}
-
- /* prepare operator state vars */
- RNA_int_set(op->ptr, "min_x", sad->sa1->totrct.xmin);
- RNA_int_set(op->ptr, "min_y", sad->sa1->totrct.ymin);
- RNA_int_set(op->ptr, "max_x", sad->sa2->totrct.xmin);
- RNA_int_set(op->ptr, "max_y", sad->sa2->totrct.ymin);
- }
-
- if (!area_join_init(C, op)) {
- return OPERATOR_CANCELLED;
+ else {
+ if (!area_join_init(C, op, sad->sa1, sad->sa2)) {
+ return OPERATOR_CANCELLED;
+ }
+ }
}
/* add temp handler */
@@ -3321,7 +3360,12 @@ static int area_join_modal(bContext *C, wmOperator *op, const wmEvent *event)
{
bScreen *sc = CTX_wm_screen(C);
wmWindow *win = CTX_wm_window(C);
- sAreaJoinData *jd = (sAreaJoinData *)op->customdata;
+ sAreaJoinData *jd;
+
+ if (op->customdata == NULL) {
+ area_join_init(C, op, NULL, NULL);
+ }
+ jd = (sAreaJoinData *)op->customdata;
/* execute the events */
switch (event->type) {
@@ -3431,10 +3475,8 @@ static void SCREEN_OT_area_join(wmOperatorType *ot)
ot->flag = OPTYPE_BLOCKING | OPTYPE_INTERNAL;
/* rna */
- 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);
+ RNA_def_int_vector(
+ ot->srna, "cursor", 2, NULL, INT_MIN, INT_MAX, "Cursor", "", INT_MIN, INT_MAX);
}
/** \} */
@@ -3445,36 +3487,74 @@ static void SCREEN_OT_area_join(wmOperatorType *ot)
static int screen_area_options_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
- const wmWindow *win = CTX_wm_window(C);
- const bScreen *sc = CTX_wm_screen(C);
uiPopupMenu *pup;
uiLayout *layout;
PointerRNA ptr;
- ScrEdge *actedge;
- rcti window_rect;
- WM_window_rect_calc(win, &window_rect);
- actedge = screen_geom_area_map_find_active_scredge(
- AREAMAP_FROM_SCREEN(sc), &window_rect, event->x, event->y);
+ ScrArea *sa1, *sa2;
- if (actedge == NULL) {
+ if (screen_area_edge_from_cursor(C, &event->x, &sa1, &sa2) == NULL) {
return OPERATOR_CANCELLED;
}
pup = UI_popup_menu_begin(C, WM_operatortype_name(op->type, op->ptr), ICON_NONE);
layout = UI_popup_menu_layout(pup);
- uiItemFullO(
- layout, "SCREEN_OT_area_split", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0, &ptr);
- /* store initial mouse cursor position */
+ /* Vertical Split */
+ uiItemFullO(layout,
+ "SCREEN_OT_area_split",
+ IFACE_("Vertical Split"),
+ ICON_NONE,
+ NULL,
+ WM_OP_INVOKE_DEFAULT,
+ 0,
+ &ptr);
+ /* store initial mouse cursor position. */
+ RNA_int_set_array(&ptr, "cursor", &event->x);
+ RNA_enum_set(&ptr, "direction", 'v');
+
+ /* Horizontal Split */
+ uiItemFullO(layout,
+ "SCREEN_OT_area_split",
+ IFACE_("Horizontal Split"),
+ ICON_NONE,
+ NULL,
+ WM_OP_INVOKE_DEFAULT,
+ 0,
+ &ptr);
+ /* store initial mouse cursor position. */
RNA_int_set_array(&ptr, "cursor", &event->x);
+ RNA_enum_set(&ptr, "direction", 'h');
- uiItemFullO(layout, "SCREEN_OT_area_join", NULL, ICON_NONE, NULL, WM_OP_INVOKE_DEFAULT, 0, &ptr);
- /* mouse cursor on edge, '4' can fail on wide edges... */
- RNA_int_set(&ptr, "min_x", event->x + 4);
- RNA_int_set(&ptr, "min_y", event->y + 4);
- RNA_int_set(&ptr, "max_x", event->x - 4);
- RNA_int_set(&ptr, "max_y", event->y - 4);
+ if (sa1 && sa2) {
+ uiItemS(layout);
+ }
+
+ /* Join needs two very similar areas. */
+ if (sa1 && sa2 && (area_getorientation(sa1, sa2) != -1)) {
+ uiItemFullO(layout,
+ "SCREEN_OT_area_join",
+ IFACE_("Join Areas"),
+ ICON_NONE,
+ NULL,
+ WM_OP_INVOKE_DEFAULT,
+ 0,
+ &ptr);
+ RNA_int_set_array(&ptr, "cursor", &event->x);
+ }
+
+ /* Swap just needs two areas. */
+ if (sa1 && sa2) {
+ uiItemFullO(layout,
+ "SCREEN_OT_area_swap",
+ IFACE_("Swap Areas"),
+ ICON_NONE,
+ NULL,
+ WM_OP_EXEC_DEFAULT,
+ 0,
+ &ptr);
+ RNA_int_set_array(&ptr, "cursor", &event->x);
+ }
UI_popup_menu_end(C, pup);
@@ -3672,7 +3752,7 @@ static void SCREEN_OT_redo_last(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Redo Last";
- ot->description = "Display menu for last action performed";
+ ot->description = "Display parameters for last action performed";
ot->idname = "SCREEN_OT_redo_last";
/* api callbacks */
@@ -3723,7 +3803,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
/* some rules... */
if (ar->regiontype != RGN_TYPE_WINDOW) {
- BKE_report(op->reports, RPT_ERROR, "Only window region can be 4-splitted");
+ BKE_report(op->reports, RPT_ERROR, "Only window region can be 4-split");
}
else if (ar->alignment == RGN_ALIGN_QSPLIT) {
/* Exit quad-view */
@@ -3754,7 +3834,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
rv3d->viewlock = 0;
rv3d->rflag &= ~RV3D_CLIPPING;
- /* accumulate locks, incase they're mixed */
+ /* Accumulate locks, in case they're mixed. */
for (ar_iter = sa->regionbase.first; ar_iter; ar_iter = ar_iter->next) {
if (ar_iter->regiontype == RGN_TYPE_WINDOW) {
RegionView3D *rv3d_iter = ar_iter->regiondata;
@@ -3776,7 +3856,7 @@ static int region_quadview_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_SCREEN | NA_EDITED, NULL);
}
else if (ar->next) {
- BKE_report(op->reports, RPT_ERROR, "Only last region can be 4-splitted");
+ BKE_report(op->reports, RPT_ERROR, "Only last region can be 4-split");
}
else {
/* Enter quad-view */
@@ -4726,7 +4806,7 @@ static void SCREEN_OT_userpref_show(struct wmOperatorType *ot)
static int drivers_editor_show_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index = -1;
uiBut *but = NULL;
@@ -4787,6 +4867,40 @@ static void SCREEN_OT_drivers_editor_show(struct wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
+/** \name Show Info Log Operator
+ * \{ */
+
+static int info_log_show_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ int sizex = 900 * UI_DPI_FAC;
+ int sizey = 580 * UI_DPI_FAC;
+ int shift_y = 480;
+
+ /* changes context! */
+ if (WM_window_open_temp(C, event->x, event->y + shift_y, sizex, sizey, WM_WINDOW_INFO) != NULL) {
+ return OPERATOR_FINISHED;
+ }
+ else {
+ BKE_report(op->reports, RPT_ERROR, "Failed to open window!");
+ return OPERATOR_CANCELLED;
+ }
+}
+
+static void SCREEN_OT_info_log_show(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Show Info Log";
+ ot->description = "Show info log in a separate window";
+ ot->idname = "SCREEN_OT_info_log_show";
+
+ /* api callbacks */
+ ot->invoke = info_log_show_invoke;
+ ot->poll = ED_operator_screenactive;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
/** \name New Screen Operator
* \{ */
@@ -4915,7 +5029,9 @@ static void region_blend_end(bContext *C, ARegion *ar, const bool is_running)
WM_event_remove_timer(CTX_wm_manager(C), NULL, ar->regiontimer); /* frees rgi */
ar->regiontimer = NULL;
}
-/* assumes that *ar itself is not a splitted version from previous region */
+/**
+ * \note Assumes that \a ar itself is not a split version from previous region.
+ */
void ED_region_visibility_change_update_animated(bContext *C, ScrArea *sa, ARegion *ar)
{
wmWindowManager *wm = CTX_wm_manager(C);
@@ -5253,6 +5369,7 @@ void ED_operatortypes_screen(void)
WM_operatortype_append(SCREEN_OT_screenshot);
WM_operatortype_append(SCREEN_OT_userpref_show);
WM_operatortype_append(SCREEN_OT_drivers_editor_show);
+ WM_operatortype_append(SCREEN_OT_info_log_show);
WM_operatortype_append(SCREEN_OT_region_blend);
WM_operatortype_append(SCREEN_OT_space_type_set_or_cycle);
WM_operatortype_append(SCREEN_OT_space_context_cycle);
diff --git a/source/blender/editors/sculpt_paint/CMakeLists.txt b/source/blender/editors/sculpt_paint/CMakeLists.txt
index 2a8ff9d4f78..752a5c36010 100644
--- a/source/blender/editors/sculpt_paint/CMakeLists.txt
+++ b/source/blender/editors/sculpt_paint/CMakeLists.txt
@@ -23,6 +23,7 @@ set(INC
../../blentranslation
../../bmesh
../../depsgraph
+ ../../draw
../../gpu
../../imbuf
../../makesdna
diff --git a/source/blender/editors/sculpt_paint/paint_cursor.c b/source/blender/editors/sculpt_paint/paint_cursor.c
index 576baf5794b..65e10f98753 100644
--- a/source/blender/editors/sculpt_paint/paint_cursor.c
+++ b/source/blender/editors/sculpt_paint/paint_cursor.c
@@ -460,7 +460,7 @@ static int load_tex_cursor(Brush *br, ViewContext *vc, float zoom)
}
buffer = MEM_mallocN(sizeof(GLubyte) * size * size, "load_tex");
- curvemapping_initialize(br->curve);
+ BKE_curvemapping_initialize(br->curve);
LoadTexData data = {
.br = br,
diff --git a/source/blender/editors/sculpt_paint/paint_curve_undo.c b/source/blender/editors/sculpt_paint/paint_curve_undo.c
index 7e283274383..bd62a59e73f 100644
--- a/source/blender/editors/sculpt_paint/paint_curve_undo.c
+++ b/source/blender/editors/sculpt_paint/paint_curve_undo.c
@@ -168,6 +168,7 @@ void ED_paintcurve_undo_push_end(void)
{
UndoStack *ustack = ED_undo_stack_get();
BKE_undosys_step_push(ustack, NULL, NULL);
+ WM_file_tag_modified();
}
/** \} */
diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c
index e5527e7210d..397b2981ace 100644
--- a/source/blender/editors/sculpt_paint/paint_image_proj.c
+++ b/source/blender/editors/sculpt_paint/paint_image_proj.c
@@ -1695,7 +1695,7 @@ static float project_paint_uvpixel_mask(const ProjPaintState *ps,
ca3 = ps->cavities[lt_vtri[2]];
ca_mask = w[0] * ca1 + w[1] * ca2 + w[2] * ca3;
- ca_mask = curvemapping_evaluateF(ps->cavity_curve, 0, ca_mask);
+ ca_mask = BKE_curvemapping_evaluateF(ps->cavity_curve, 0, ca_mask);
CLAMP(ca_mask, 0.0f, 1.0f);
mask *= ca_mask;
}
@@ -1719,9 +1719,9 @@ static float project_paint_uvpixel_mask(const ProjPaintState *ps,
normalize_v3(no);
}
else {
- /* incase the */
#if 1
- /* normalizing per pixel isn't optimal, we could cache or check ps->*/
+ /* In case the normalizing per pixel isn't optimal,
+ * we could cache or access from evaluated mesh. */
normal_tri_v3(no,
ps->mvert_eval[lt_vtri[0]].co,
ps->mvert_eval[lt_vtri[1]].co,
@@ -5092,6 +5092,22 @@ static void image_paint_partial_redraw_expand(ImagePaintPartialRedraw *cell,
cell->y2 = max_ii(cell->y2, (int)projPixel->y_px + 1);
}
+static void copy_original_alpha_channel(ProjPixel *pixel, bool is_floatbuf)
+{
+ /* Use the original alpha channel data instead of the modified one */
+ if (is_floatbuf) {
+ /* slightly more involved case since floats are in premultiplied space we need
+ * to make sure alpha is consistent, see T44627 */
+ float rgb_straight[4];
+ premul_to_straight_v4_v4(rgb_straight, pixel->pixel.f_pt);
+ rgb_straight[3] = pixel->origColor.f_pt[3];
+ straight_to_premul_v4_v4(pixel->pixel.f_pt, rgb_straight);
+ }
+ else {
+ pixel->pixel.ch_pt[3] = pixel->origColor.ch_pt[3];
+ }
+}
+
/* Run this for single and multi-threaded painting. */
static void do_projectpaint_thread(TaskPool *__restrict UNUSED(pool),
void *ph_v,
@@ -5263,17 +5279,7 @@ static void do_projectpaint_thread(TaskPool *__restrict UNUSED(pool),
}
if (lock_alpha) {
- if (is_floatbuf) {
- /* slightly more involved case since floats are in premultiplied space we need
- * to make sure alpha is consistent, see T44627 */
- float rgb_straight[4];
- premul_to_straight_v4_v4(rgb_straight, projPixel->pixel.f_pt);
- rgb_straight[3] = projPixel->origColor.f_pt[3];
- straight_to_premul_v4_v4(projPixel->pixel.f_pt, rgb_straight);
- }
- else {
- projPixel->pixel.ch_pt[3] = projPixel->origColor.ch_pt[3];
- }
+ copy_original_alpha_channel(projPixel, is_floatbuf);
}
last_partial_redraw_cell = last_projIma->partRedrawRect + projPixel->bb_cell_index;
@@ -5478,17 +5484,7 @@ static void do_projectpaint_thread(TaskPool *__restrict UNUSED(pool),
}
if (lock_alpha) {
- if (is_floatbuf) {
- /* slightly more involved case since floats are in premultiplied space we need
- * to make sure alpha is consistent, see T44627 */
- float rgb_straight[4];
- premul_to_straight_v4_v4(rgb_straight, projPixel->pixel.f_pt);
- rgb_straight[3] = projPixel->origColor.f_pt[3];
- straight_to_premul_v4_v4(projPixel->pixel.f_pt, rgb_straight);
- }
- else {
- projPixel->pixel.ch_pt[3] = projPixel->origColor.ch_pt[3];
- }
+ copy_original_alpha_channel(projPixel, is_floatbuf);
}
}
@@ -5504,11 +5500,17 @@ static void do_projectpaint_thread(TaskPool *__restrict UNUSED(pool),
for (node = smearPixels; node; node = node->next) { /* this wont run for a float image */
projPixel = node->link;
*projPixel->pixel.uint_pt = ((ProjPixelClone *)projPixel)->clonepx.uint;
+ if (lock_alpha) {
+ copy_original_alpha_channel(projPixel, false);
+ }
}
for (node = smearPixels_f; node; node = node->next) {
projPixel = node->link;
copy_v4_v4(projPixel->pixel.f_pt, ((ProjPixelClone *)projPixel)->clonepx.f);
+ if (lock_alpha) {
+ copy_original_alpha_channel(projPixel, true);
+ }
}
BLI_memarena_free(smearArena);
@@ -5518,11 +5520,17 @@ static void do_projectpaint_thread(TaskPool *__restrict UNUSED(pool),
for (node = softenPixels; node; node = node->next) { /* this wont run for a float image */
projPixel = node->link;
*projPixel->pixel.uint_pt = projPixel->newColor.uint;
+ if (lock_alpha) {
+ copy_original_alpha_channel(projPixel, false);
+ }
}
for (node = softenPixels_f; node; node = node->next) {
projPixel = node->link;
copy_v4_v4(projPixel->pixel.f_pt, projPixel->newColor.f);
+ if (lock_alpha) {
+ copy_original_alpha_channel(projPixel, true);
+ }
}
BLI_memarena_free(softenArena);
diff --git a/source/blender/editors/sculpt_paint/paint_image_undo.c b/source/blender/editors/sculpt_paint/paint_image_undo.c
index 2a1158ec804..93dcd3ad0f6 100644
--- a/source/blender/editors/sculpt_paint/paint_image_undo.c
+++ b/source/blender/editors/sculpt_paint/paint_image_undo.c
@@ -48,6 +48,8 @@
#include "GPU_draw.h"
+#include "WM_api.h"
+
#include "paint_intern.h"
/* -------------------------------------------------------------------- */
@@ -73,7 +75,8 @@ typedef struct UndoImageTile {
* adds unnecessary overhead restoring undo steps when most tiles share the same image. */
UndoRefID_Image image_ref;
- short source, use_float;
+ short source;
+ bool use_float;
char gen_type;
bool valid;
@@ -170,7 +173,7 @@ void *image_undo_find_tile(ListBase *undo_tiles,
bool validate)
{
UndoImageTile *tile;
- short use_float = ibuf->rect_float ? 1 : 0;
+ const bool use_float = (ibuf->rect_float != NULL);
for (tile = undo_tiles->first; tile; tile = tile->next) {
if (tile->x == x_tile && tile->y == y_tile && ima->gen_type == tile->gen_type &&
@@ -212,7 +215,7 @@ void *image_undo_push_tile(ListBase *undo_tiles,
{
UndoImageTile *tile;
int allocsize;
- short use_float = ibuf->rect_float ? 1 : 0;
+ const bool use_float = (ibuf->rect_float != NULL);
void *data;
/* check if tile is already pushed */
@@ -313,7 +316,6 @@ static void image_undo_restore_list(ListBase *lb)
IMAPAINT_TILE_SIZE, IMAPAINT_TILE_SIZE, 32, IB_rectfloat | IB_rect);
for (UndoImageTile *tile = lb->first; tile; tile = tile->next) {
- short use_float;
Image *ima = tile->image_ref.ptr;
ImBuf *ibuf = BKE_image_acquire_ibuf(ima, NULL, NULL);
@@ -339,7 +341,7 @@ static void image_undo_restore_list(ListBase *lb)
continue;
}
- use_float = ibuf->rect_float ? 1 : 0;
+ const bool use_float = (ibuf->rect_float != NULL);
if (use_float != tile->use_float) {
BKE_image_release_ibuf(ima, ibuf, NULL);
@@ -448,7 +450,7 @@ static bool image_undosys_step_encode(struct bContext *C,
tile = tmp_tile;
}
else {
- us->step.data_size += allocsize * ((tile->use_float) ? sizeof(float) : sizeof(char));
+ us->step.data_size += allocsize * (tile->use_float ? sizeof(float) : sizeof(char));
tile = tile->next;
}
}
@@ -617,6 +619,7 @@ void ED_image_undo_push_end(void)
{
UndoStack *ustack = ED_undo_stack_get();
BKE_undosys_step_push(ustack, NULL, NULL);
+ WM_file_tag_modified();
}
/** \} */
diff --git a/source/blender/editors/sculpt_paint/paint_intern.h b/source/blender/editors/sculpt_paint/paint_intern.h
index ea4814857ba..5efedf69fe4 100644
--- a/source/blender/editors/sculpt_paint/paint_intern.h
+++ b/source/blender/editors/sculpt_paint/paint_intern.h
@@ -33,7 +33,6 @@ struct ListBase;
struct MTex;
struct Object;
struct Paint;
-struct PaintCurve;
struct PaintStroke;
struct PointerRNA;
struct RegionView3D;
diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c
index f073877ebcf..694dae49d30 100644
--- a/source/blender/editors/sculpt_paint/paint_stroke.c
+++ b/source/blender/editors/sculpt_paint/paint_stroke.c
@@ -233,6 +233,23 @@ static bool paint_tool_require_location(Brush *brush, ePaintMode mode)
return true;
}
+static bool paint_tool_require_inbetween_mouse_events(Brush *brush, ePaintMode mode)
+{
+ switch (mode) {
+ case PAINT_MODE_SCULPT:
+ if (ELEM(brush->sculpt_tool, SCULPT_TOOL_GRAB, SCULPT_TOOL_ROTATE, SCULPT_TOOL_THUMB)) {
+ return false;
+ }
+ else {
+ return true;
+ }
+ default:
+ break;
+ }
+
+ return true;
+}
+
/* Initialize the stroke cache variants from operator properties */
static bool paint_brush_update(bContext *C,
Brush *brush,
@@ -784,9 +801,9 @@ PaintStroke *paint_stroke_new(bContext *C,
ups->average_stroke_counter = 0;
/* initialize here to avoid initialization conflict with threaded strokes */
- curvemapping_initialize(br->curve);
+ BKE_curvemapping_initialize(br->curve);
if (p->flags & PAINT_USE_CAVITY_MASK) {
- curvemapping_initialize(p->cavity_curve);
+ BKE_curvemapping_initialize(p->cavity_curve);
}
BKE_paint_set_overlay_override(br->overlay_flags);
@@ -1188,6 +1205,10 @@ int paint_stroke_modal(bContext *C, wmOperator *op, const wmEvent *event)
bool redraw = false;
float pressure;
+ if (event->type == INBETWEEN_MOUSEMOVE && !paint_tool_require_inbetween_mouse_events(br, mode)) {
+ return OPERATOR_RUNNING_MODAL;
+ }
+
/* see if tablet affects event. Line, anchored and drag dot strokes do not support pressure */
pressure = ((br->flag & (BRUSH_LINE | BRUSH_ANCHORED | BRUSH_DRAG_DOT)) ?
1.0f :
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c
index 0f37968f599..4b9d9a2cc01 100644
--- a/source/blender/editors/sculpt_paint/paint_utils.c
+++ b/source/blender/editors/sculpt_paint/paint_utils.c
@@ -71,7 +71,8 @@
#include "BLI_sys_types.h"
#include "ED_mesh.h" /* for face mask functions */
-#include "ED_select_buffer_utils.h"
+
+#include "DRW_select_buffer.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -391,7 +392,7 @@ static int imapaint_pick_face(ViewContext *vc,
/* sample only on the exact position */
ED_view3d_select_id_validate(vc);
- *r_index = ED_select_buffer_sample_point(mval);
+ *r_index = DRW_select_buffer_sample_point(vc->depsgraph, vc->ar, vc->v3d, mval);
if ((*r_index) == 0 || (*r_index) > (unsigned int)totpoly) {
return 0;
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c
index 9215a90c446..12da8790b91 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex.c
@@ -1171,11 +1171,28 @@ void ED_object_vpaintmode_enter_ex(
{
ed_vwpaintmode_enter_generic(bmain, depsgraph, wm, scene, ob, OB_MODE_VERTEX_PAINT);
}
+void ED_object_vpaintmode_enter(struct bContext *C, Depsgraph *depsgraph)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+ Scene *scene = CTX_data_scene(C);
+ Object *ob = CTX_data_active_object(C);
+ ED_object_vpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
+}
+
void ED_object_wpaintmode_enter_ex(
Main *bmain, Depsgraph *depsgraph, wmWindowManager *wm, Scene *scene, Object *ob)
{
ed_vwpaintmode_enter_generic(bmain, depsgraph, wm, scene, ob, OB_MODE_WEIGHT_PAINT);
}
+void ED_object_wpaintmode_enter(struct bContext *C, Depsgraph *depsgraph)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+ Scene *scene = CTX_data_scene(C);
+ Object *ob = CTX_data_active_object(C);
+ ED_object_wpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
+}
/** \} */
@@ -1282,6 +1299,9 @@ static int wpaint_mode_toggle_exec(bContext *C, wmOperator *op)
}
else {
Depsgraph *depsgraph = CTX_data_depsgraph_on_load(C);
+ if (depsgraph) {
+ depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+ }
wmWindowManager *wm = CTX_wm_manager(C);
ED_object_wpaintmode_enter_ex(bmain, depsgraph, wm, scene, ob);
BKE_paint_toolslots_brush_validate(bmain, &ts->wpaint->paint);
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
index fed477ace14..9a6251e2f98 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_color_ops.c
@@ -372,19 +372,20 @@ static int vertex_color_brightness_contrast_exec(bContext *C, wmOperator *op)
float contrast = RNA_float_get(op->ptr, "contrast");
brightness /= 100.0f;
float delta = contrast / 200.0f;
- gain = 1.0f - delta * 2.0f;
/*
* The algorithm is by Werner D. Streidt
* (http://visca.com/ffactory/archives/5-99/msg00021.html)
* Extracted of OpenCV demhist.c
*/
if (contrast > 0) {
- gain = 1.0f / ((gain != 0.0f) ? gain : FLT_EPSILON);
+ gain = 1.0f - delta * 2.0f;
+ gain = 1.0f / max_ff(gain, FLT_EPSILON);
offset = gain * (brightness - delta);
}
else {
delta *= -1;
- offset = gain * (brightness + delta);
+ gain = max_ff(1.0f - delta * 2.0f, 0.0f);
+ offset = gain * brightness + delta;
}
}
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
index 1dc28328244..4aa9dc8a295 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
+++ b/source/blender/editors/sculpt_paint/paint_vertex_weight_ops.c
@@ -580,7 +580,7 @@ typedef struct WPGradient_userData {
BLI_bitmap *vert_visit;
/* options */
- short use_select;
+ bool use_select;
short type;
float weightpaint;
} WPGradient_userData;
@@ -786,7 +786,7 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
data.sco_end = sco_end;
data.sco_line_div = 1.0f / len_v2v2(sco_start, sco_end);
data.def_nr = ob->actdef - 1;
- data.use_select = (me->editflag & (ME_EDIT_PAINT_FACE_SEL | ME_EDIT_PAINT_VERT_SEL));
+ data.use_select = (me->editflag & (ME_EDIT_PAINT_FACE_SEL | ME_EDIT_PAINT_VERT_SEL)) != 0;
data.vert_cache = vert_cache;
data.vert_visit = NULL;
data.type = RNA_enum_get(op->ptr, "type");
@@ -796,7 +796,7 @@ static int paint_weight_gradient_exec(bContext *C, wmOperator *op)
VPaint *wp = ts->wpaint;
struct Brush *brush = BKE_paint_brush(&wp->paint);
- curvemapping_initialize(brush->curve);
+ BKE_curvemapping_initialize(brush->curve);
data.brush = brush;
data.weightpaint = BKE_brush_weight_get(scene, brush);
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index c8709d40f96..08febfcc470 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -92,6 +92,240 @@
#include <stdlib.h>
#include <string.h>
+/* Sculpt PBVH abstraction API */
+
+/* Do not use these functions while working with PBVH_GRIDS data in SculptSession */
+
+/* TODO: why is this kept, should it be removed? */
+#if 0 /* UNUSED */
+
+static int sculpt_active_vertex_get(SculptSession *ss)
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ return ss->active_vertex_index;
+ case PBVH_BMESH:
+ return ss->active_vertex_index;
+ default:
+ return 0;
+ }
+}
+
+static int sculpt_vertex_count_get(SculptSession *ss)
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ return ss->totvert;
+ case PBVH_BMESH:
+ return BM_mesh_elem_count(BKE_pbvh_get_bmesh(ss->pbvh), BM_VERT);
+ default:
+ return 0;
+ }
+}
+
+static void sculpt_vertex_normal_get(SculptSession *ss, int index, float no[3])
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ normal_short_to_float_v3(no, ss->mvert[index].no);
+ return;
+ case PBVH_BMESH:
+ copy_v3_v3(no, BM_vert_at_index(BKE_pbvh_get_bmesh(ss->pbvh), index)->no);
+ default:
+ return;
+ }
+}
+
+static float *sculpt_vertex_co_get(SculptSession *ss, int index)
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ return ss->mvert[index].co;
+ case PBVH_BMESH:
+ return BM_vert_at_index(BKE_pbvh_get_bmesh(ss->pbvh), index)->co;
+ default:
+ return NULL;
+ }
+}
+
+static void sculpt_vertex_co_set(SculptSession *ss, int index, float co[3])
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ copy_v3_v3(ss->mvert[index].co, co);
+ return;
+ case PBVH_BMESH:
+ copy_v3_v3(BM_vert_at_index(BKE_pbvh_get_bmesh(ss->pbvh), index)->co, co);
+ return;
+ default:
+ return;
+ }
+}
+
+static void sculpt_vertex_mask_set(SculptSession *ss, int index, float mask)
+{
+ BMVert *v;
+ float *mask_p;
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ ss->vmask[index] = mask;
+ return;
+ case PBVH_BMESH:
+ v = BM_vert_at_index(BKE_pbvh_get_bmesh(ss->pbvh), index);
+ mask_p = BM_ELEM_CD_GET_VOID_P(v, CustomData_get_offset(&ss->bm->vdata, CD_PAINT_MASK));
+ *(mask_p) = mask;
+ return;
+ default:
+ return;
+ }
+}
+
+static float sculpt_vertex_mask_get(SculptSession *ss, int index)
+{
+ BMVert *v;
+ float *mask;
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ return ss->vmask[index];
+ case PBVH_BMESH:
+ v = BM_vert_at_index(BKE_pbvh_get_bmesh(ss->pbvh), index);
+ mask = BM_ELEM_CD_GET_VOID_P(v, CustomData_get_offset(&ss->bm->vdata, CD_PAINT_MASK));
+ return *mask;
+ default:
+ return 0;
+ }
+}
+
+static void sculpt_vertex_tag_update(SculptSession *ss, int index)
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ ss->mvert[index].flag |= ME_VERT_PBVH_UPDATE;
+ return;
+ case PBVH_BMESH:
+ return;
+ default:
+ return;
+ }
+}
+
+# define SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY 256
+
+typedef struct SculptVertexNeighborIter {
+ int *neighbors;
+ int size;
+ int capacity;
+
+ int neighbors_fixed[SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY];
+
+ int index;
+ int i;
+} SculptVertexNeighborIter;
+
+static void sculpt_vertex_neighbor_add(SculptVertexNeighborIter *iter, int neighbor_index)
+{
+ for (int i = 0; i < iter->size; i++) {
+ if (iter->neighbors[i] == neighbor_index) {
+ return;
+ }
+ }
+
+ if (iter->size >= iter->capacity) {
+ iter->capacity += SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY;
+
+ if (iter->neighbors == iter->neighbors_fixed) {
+ iter->neighbors = MEM_mallocN(iter->capacity * sizeof(int), "neighbor array");
+ memcpy(iter->neighbors, iter->neighbors_fixed, sizeof(int) * iter->size);
+ }
+ else {
+ iter->neighbors = MEM_reallocN_id(
+ iter->neighbors, iter->capacity * sizeof(int), "neighbor array");
+ }
+ }
+
+ iter->neighbors[iter->size] = neighbor_index;
+ iter->size++;
+}
+
+static void sculpt_vertex_neighbors_get_bmesh(SculptSession *ss,
+ int index,
+ SculptVertexNeighborIter *iter)
+{
+ BMVert *v = BM_vert_at_index(ss->bm, index);
+ BMIter liter;
+ BMLoop *l;
+ iter->size = 0;
+ iter->capacity = SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY;
+ iter->neighbors = iter->neighbors_fixed;
+
+ int i = 0;
+ BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) {
+ const BMVert *adj_v[2] = {l->prev->v, l->next->v};
+ for (i = 0; i < ARRAY_SIZE(adj_v); i++) {
+ const BMVert *v_other = adj_v[i];
+ if (BM_elem_index_get(v_other) != (int)index) {
+ sculpt_vertex_neighbor_add(iter, BM_elem_index_get(v_other));
+ }
+ }
+ }
+}
+
+static void sculpt_vertex_neighbors_get_faces(SculptSession *ss,
+ int index,
+ SculptVertexNeighborIter *iter)
+{
+ int i;
+ MeshElemMap *vert_map = &ss->pmap[(int)index];
+ iter->size = 0;
+ iter->capacity = SCULPT_VERTEX_NEIGHBOR_FIXED_CAPACITY;
+ iter->neighbors = iter->neighbors_fixed;
+
+ for (i = 0; i < ss->pmap[(int)index].count; i++) {
+ const MPoly *p = &ss->mpoly[vert_map->indices[i]];
+ unsigned f_adj_v[2];
+ if (poly_get_adj_loops_from_vert(p, ss->mloop, (int)index, f_adj_v) != -1) {
+ int j;
+ for (j = 0; j < ARRAY_SIZE(f_adj_v); j += 1) {
+ if (vert_map->count != 2 || ss->pmap[f_adj_v[j]].count <= 2) {
+ if (f_adj_v[j] != (int)index) {
+ sculpt_vertex_neighbor_add(iter, f_adj_v[j]);
+ }
+ }
+ }
+ }
+ }
+}
+
+static void sculpt_vertex_neighbors_get(SculptSession *ss,
+ int index,
+ SculptVertexNeighborIter *iter)
+{
+ switch (BKE_pbvh_type(ss->pbvh)) {
+ case PBVH_FACES:
+ sculpt_vertex_neighbors_get_faces(ss, index, iter);
+ return;
+ case PBVH_BMESH:
+ sculpt_vertex_neighbors_get_bmesh(ss, index, iter);
+ return;
+ default:
+ break;
+ }
+}
+
+# define sculpt_vertex_neighbors_iter_begin(ss, v_index, neighbor_iterator) \
+ sculpt_vertex_neighbors_get(ss, v_index, &neighbor_iterator); \
+ for (neighbor_iterator.i = 0; neighbor_iterator.i < neighbor_iterator.size; \
+ neighbor_iterator.i++) { \
+ neighbor_iterator.index = ni.neighbors[ni.i];
+
+# define sculpt_vertex_neighbors_iter_end(neighbor_iterator) \
+ } \
+ if (neighbor_iterator.neighbors != neighbor_iterator.neighbors_fixed) { \
+ MEM_freeN(neighbor_iterator.neighbors); \
+ }
+
+#endif /* UNUSED */
+
/** \name Tool Capabilities
*
* Avoid duplicate checks, internal logic only,
@@ -2308,7 +2542,7 @@ static void do_draw_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode)
/* XXX - this shouldn't be necessary, but sculpting crashes in blender2.8 otherwise
* initialize before threads so they can do curve mapping */
- curvemapping_initialize(brush->curve);
+ BKE_curvemapping_initialize(brush->curve);
/* threaded loop over nodes */
SculptThreadedTaskData data = {
@@ -3753,7 +3987,7 @@ static void do_gravity(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode, fl
BLI_task_parallel_range(0, totnode, &data, do_gravity_task_cb_ex, &settings);
}
-void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3])
+void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, const float (*vertCos)[3])
{
Mesh *me = (Mesh *)ob->data;
float(*ofs)[3] = NULL;
@@ -4115,7 +4349,7 @@ static void sculpt_update_keyblock(Object *ob)
vertCos = ss->orig_cos;
}
else {
- vertCos = BKE_pbvh_get_vertCos(ss->pbvh);
+ vertCos = BKE_pbvh_vert_coords_alloc(ss->pbvh);
}
if (vertCos) {
@@ -4604,7 +4838,7 @@ static void sculpt_update_cache_invariants(
brush = br;
cache->saved_smooth_size = BKE_brush_size_get(scene, brush);
BKE_brush_size_set(scene, brush, size);
- curvemapping_initialize(brush->curve);
+ BKE_curvemapping_initialize(brush->curve);
}
}
}
@@ -5695,31 +5929,19 @@ static void sculpt_dynamic_topology_disable_ex(
CustomData_free(&me->pdata, me->totpoly);
/* Copy over stored custom data */
- me->totvert = unode->bm_enter_totvert;
- me->totloop = unode->bm_enter_totloop;
- me->totpoly = unode->bm_enter_totpoly;
- me->totedge = unode->bm_enter_totedge;
+ me->totvert = unode->geom_totvert;
+ me->totloop = unode->geom_totloop;
+ me->totpoly = unode->geom_totpoly;
+ me->totedge = unode->geom_totedge;
me->totface = 0;
- CustomData_copy(&unode->bm_enter_vdata,
- &me->vdata,
- CD_MASK_MESH.vmask,
- CD_DUPLICATE,
- unode->bm_enter_totvert);
- CustomData_copy(&unode->bm_enter_edata,
- &me->edata,
- CD_MASK_MESH.emask,
- CD_DUPLICATE,
- unode->bm_enter_totedge);
- CustomData_copy(&unode->bm_enter_ldata,
- &me->ldata,
- CD_MASK_MESH.lmask,
- CD_DUPLICATE,
- unode->bm_enter_totloop);
- CustomData_copy(&unode->bm_enter_pdata,
- &me->pdata,
- CD_MASK_MESH.pmask,
- CD_DUPLICATE,
- unode->bm_enter_totpoly);
+ CustomData_copy(
+ &unode->geom_vdata, &me->vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, unode->geom_totvert);
+ CustomData_copy(
+ &unode->geom_edata, &me->edata, CD_MASK_MESH.emask, CD_DUPLICATE, unode->geom_totedge);
+ CustomData_copy(
+ &unode->geom_ldata, &me->ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, unode->geom_totloop);
+ CustomData_copy(
+ &unode->geom_pdata, &me->pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, unode->geom_totpoly);
BKE_mesh_update_customdata_pointers(me, false);
}
@@ -6152,6 +6374,15 @@ void ED_object_sculptmode_enter_ex(Main *bmain,
DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE);
}
+void ED_object_sculptmode_enter(struct bContext *C, Depsgraph *depsgraph, ReportList *reports)
+{
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+ ED_object_sculptmode_enter_ex(bmain, depsgraph, scene, ob, false, reports);
+}
+
void ED_object_sculptmode_exit_ex(Main *bmain, Depsgraph *depsgraph, Scene *scene, Object *ob)
{
const int mode_flag = OB_MODE_SCULPT;
@@ -6198,6 +6429,15 @@ void ED_object_sculptmode_exit_ex(Main *bmain, Depsgraph *depsgraph, Scene *scen
DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE);
}
+void ED_object_sculptmode_exit(bContext *C, Depsgraph *depsgraph)
+{
+ Main *bmain = CTX_data_main(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Object *ob = OBACT(view_layer);
+ ED_object_sculptmode_exit_ex(bmain, depsgraph, scene, ob);
+}
+
static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
{
struct wmMsgBus *mbus = CTX_wm_message_bus(C);
@@ -6220,6 +6460,9 @@ static int sculpt_mode_toggle_exec(bContext *C, wmOperator *op)
ED_object_sculptmode_exit_ex(bmain, depsgraph, scene, ob);
}
else {
+ if (depsgraph) {
+ depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+ }
ED_object_sculptmode_enter_ex(bmain, depsgraph, scene, ob, false, op->reports);
BKE_paint_toolslots_brush_validate(bmain, &ts->sculpt->paint);
}
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index e66e1c49685..bc9a4c1d85b 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -34,9 +34,7 @@
#include "BKE_pbvh.h"
struct KeyBlock;
-struct Main;
struct Object;
-struct SculptOrigVertData;
struct SculptUndoNode;
struct bContext;
@@ -63,6 +61,7 @@ typedef enum {
SCULPT_UNDO_DYNTOPO_BEGIN,
SCULPT_UNDO_DYNTOPO_END,
SCULPT_UNDO_DYNTOPO_SYMMETRIZE,
+ SCULPT_UNDO_GEOMETRY,
} SculptUndoType;
typedef struct SculptUndoNode {
@@ -94,18 +93,20 @@ typedef struct SculptUndoNode {
/* bmesh */
struct BMLogEntry *bm_entry;
bool applied;
- CustomData bm_enter_vdata;
- CustomData bm_enter_edata;
- CustomData bm_enter_ldata;
- CustomData bm_enter_pdata;
- int bm_enter_totvert;
- int bm_enter_totedge;
- int bm_enter_totloop;
- int bm_enter_totpoly;
/* shape keys */
char shapeName[sizeof(((KeyBlock *)0))->name];
+ /* geometry modification operations and bmesh enter data */
+ CustomData geom_vdata;
+ CustomData geom_edata;
+ CustomData geom_ldata;
+ CustomData geom_pdata;
+ int geom_totvert;
+ int geom_totedge;
+ int geom_totloop;
+ int geom_totpoly;
+
size_t undo_size;
} SculptUndoNode;
@@ -339,7 +340,7 @@ SculptUndoNode *sculpt_undo_get_node(PBVHNode *node);
void sculpt_undo_push_begin(const char *name);
void sculpt_undo_push_end(void);
-void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, float (*vertCos)[3]);
+void sculpt_vertcos_to_key(Object *ob, KeyBlock *kb, const float (*vertCos)[3]);
void sculpt_update_object_bounding_box(struct Object *ob);
diff --git a/source/blender/editors/sculpt_paint/sculpt_undo.c b/source/blender/editors/sculpt_paint/sculpt_undo.c
index dde1e51e764..cb8afd5d7fa 100644
--- a/source/blender/editors/sculpt_paint/sculpt_undo.c
+++ b/source/blender/editors/sculpt_paint/sculpt_undo.c
@@ -44,6 +44,7 @@
#include "BKE_ccg.h"
#include "BKE_context.h"
+#include "BKE_customdata.h"
#include "BKE_multires.h"
#include "BKE_paint.h"
#include "BKE_key.h"
@@ -188,7 +189,7 @@ static bool sculpt_undo_restore_coords(bContext *C, Depsgraph *depsgraph, Sculpt
/* pbvh uses it's own mvert array, so coords should be */
/* propagated to pbvh here */
- BKE_pbvh_apply_vertCos(ss->pbvh, vertCos, ss->kb->totelem);
+ BKE_pbvh_vert_coords_apply(ss->pbvh, vertCos, ss->kb->totelem);
MEM_freeN(vertCos);
}
@@ -425,6 +426,32 @@ static void sculpt_undo_bmesh_restore_end(bContext *C,
}
}
+static void sculpt_undo_geometry_restore(SculptUndoNode *unode, Object *ob)
+{
+ Mesh *me;
+ sculpt_pbvh_clear(ob);
+ me = ob->data;
+ CustomData_free(&me->vdata, me->totvert);
+ CustomData_free(&me->edata, me->totedge);
+ CustomData_free(&me->fdata, me->totface);
+ CustomData_free(&me->ldata, me->totloop);
+ CustomData_free(&me->pdata, me->totpoly);
+ me->totvert = unode->geom_totvert;
+ me->totedge = unode->geom_totedge;
+ me->totloop = unode->geom_totloop;
+ me->totpoly = unode->geom_totpoly;
+ me->totface = 0;
+ CustomData_copy(
+ &unode->geom_vdata, &me->vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, unode->geom_totvert);
+ CustomData_copy(
+ &unode->geom_edata, &me->edata, CD_MASK_MESH.emask, CD_DUPLICATE, unode->geom_totedge);
+ CustomData_copy(
+ &unode->geom_ldata, &me->ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, unode->geom_totloop);
+ CustomData_copy(
+ &unode->geom_pdata, &me->pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, unode->geom_totpoly);
+ BKE_mesh_update_customdata_pointers(me, false);
+}
+
/* Handle all dynamic-topology updates
*
* Returns true if this was a dynamic-topology undo step, otherwise
@@ -442,7 +469,6 @@ static int sculpt_undo_bmesh_restore(bContext *C,
case SCULPT_UNDO_DYNTOPO_END:
sculpt_undo_bmesh_restore_end(C, unode, ob, ss);
return true;
-
default:
if (ss->bm_log) {
sculpt_undo_bmesh_restore_generic(C, unode, ob, ss);
@@ -480,6 +506,24 @@ static void sculpt_undo_restore_list(bContext *C, Depsgraph *depsgraph, ListBase
DEG_id_tag_update(&ob->id, ID_RECALC_SHADING);
+ if (lb->first) {
+ unode = lb->first;
+ if (unode->type == SCULPT_UNDO_GEOMETRY) {
+ if (unode->applied) {
+ sculpt_undo_geometry_restore(unode->next, ob);
+ unode->next->applied = true;
+ unode->applied = false;
+ }
+ else {
+ sculpt_undo_geometry_restore(unode, ob);
+ unode->next->applied = false;
+ unode->applied = true;
+ }
+ BKE_sculpt_update_object_for_edit(depsgraph, ob, false, need_mask);
+ return;
+ }
+ }
+
BKE_sculpt_update_object_for_edit(depsgraph, ob, false, need_mask);
if (lb->first && sculpt_undo_bmesh_restore(C, lb->first, ob, ss)) {
@@ -487,6 +531,7 @@ static void sculpt_undo_restore_list(bContext *C, Depsgraph *depsgraph, ListBase
}
for (unode = lb->first; unode; unode = unode->next) {
+
if (!STREQ(unode->idname, ob->id.name)) {
continue;
}
@@ -530,6 +575,8 @@ static void sculpt_undo_restore_list(bContext *C, Depsgraph *depsgraph, ListBase
case SCULPT_UNDO_DYNTOPO_SYMMETRIZE:
BLI_assert(!"Dynamic topology should've already been handled");
break;
+ case SCULPT_UNDO_GEOMETRY:
+ break;
}
}
@@ -617,17 +664,17 @@ static void sculpt_undo_free_list(ListBase *lb)
BM_log_entry_drop(unode->bm_entry);
}
- if (unode->bm_enter_totvert) {
- CustomData_free(&unode->bm_enter_vdata, unode->bm_enter_totvert);
+ if (unode->geom_totvert) {
+ CustomData_free(&unode->geom_vdata, unode->geom_totvert);
}
- if (unode->bm_enter_totedge) {
- CustomData_free(&unode->bm_enter_edata, unode->bm_enter_totedge);
+ if (unode->geom_totedge) {
+ CustomData_free(&unode->geom_edata, unode->geom_totedge);
}
- if (unode->bm_enter_totloop) {
- CustomData_free(&unode->bm_enter_ldata, unode->bm_enter_totloop);
+ if (unode->geom_totloop) {
+ CustomData_free(&unode->geom_ldata, unode->geom_totloop);
}
- if (unode->bm_enter_totpoly) {
- CustomData_free(&unode->bm_enter_pdata, unode->bm_enter_totpoly);
+ if (unode->geom_totpoly) {
+ CustomData_free(&unode->geom_pdata, unode->geom_totpoly);
}
MEM_freeN(unode);
@@ -743,6 +790,7 @@ static SculptUndoNode *sculpt_undo_alloc_node(Object *ob, PBVHNode *node, Sculpt
case SCULPT_UNDO_DYNTOPO_END:
case SCULPT_UNDO_DYNTOPO_SYMMETRIZE:
BLI_assert(!"Dynamic topology should've already been handled");
+ case SCULPT_UNDO_GEOMETRY:
break;
}
@@ -824,6 +872,36 @@ static void sculpt_undo_store_mask(Object *ob, SculptUndoNode *unode)
BKE_pbvh_vertex_iter_end;
}
+static SculptUndoNode *sculpt_undo_geometry_push(Object *ob, SculptUndoType type)
+{
+ UndoSculpt *usculpt = sculpt_undo_get_nodes();
+ Mesh *me = ob->data;
+ bool applied;
+
+ SculptUndoNode *unode = usculpt->nodes.first;
+ /* Store the original mesh in the first node, modifications in the second */
+ applied = unode != NULL;
+
+ unode = MEM_callocN(sizeof(*unode), __func__);
+
+ BLI_strncpy(unode->idname, ob->id.name, sizeof(unode->idname));
+ unode->type = type;
+ unode->applied = applied;
+
+ CustomData_copy(&me->vdata, &unode->geom_vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, me->totvert);
+ CustomData_copy(&me->edata, &unode->geom_edata, CD_MASK_MESH.emask, CD_DUPLICATE, me->totedge);
+ CustomData_copy(&me->ldata, &unode->geom_ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, me->totloop);
+ CustomData_copy(&me->pdata, &unode->geom_pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, me->totpoly);
+ unode->geom_totvert = me->totvert;
+ unode->geom_totedge = me->totedge;
+ unode->geom_totloop = me->totloop;
+ unode->geom_totpoly = me->totpoly;
+
+ BLI_addtail(&usculpt->nodes, unode);
+
+ return unode;
+}
+
static SculptUndoNode *sculpt_undo_bmesh_push(Object *ob, PBVHNode *node, SculptUndoType type)
{
UndoSculpt *usculpt = sculpt_undo_get_nodes();
@@ -852,17 +930,17 @@ static SculptUndoNode *sculpt_undo_bmesh_push(Object *ob, PBVHNode *node, Sculpt
* (converting polys to triangles) that the BMLog can't
* fully restore from */
CustomData_copy(
- &me->vdata, &unode->bm_enter_vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, me->totvert);
+ &me->vdata, &unode->geom_vdata, CD_MASK_MESH.vmask, CD_DUPLICATE, me->totvert);
CustomData_copy(
- &me->edata, &unode->bm_enter_edata, CD_MASK_MESH.emask, CD_DUPLICATE, me->totedge);
+ &me->edata, &unode->geom_edata, CD_MASK_MESH.emask, CD_DUPLICATE, me->totedge);
CustomData_copy(
- &me->ldata, &unode->bm_enter_ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, me->totloop);
+ &me->ldata, &unode->geom_ldata, CD_MASK_MESH.lmask, CD_DUPLICATE, me->totloop);
CustomData_copy(
- &me->pdata, &unode->bm_enter_pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, me->totpoly);
- unode->bm_enter_totvert = me->totvert;
- unode->bm_enter_totedge = me->totedge;
- unode->bm_enter_totloop = me->totloop;
- unode->bm_enter_totpoly = me->totpoly;
+ &me->pdata, &unode->geom_pdata, CD_MASK_MESH.pmask, CD_DUPLICATE, me->totpoly);
+ unode->geom_totvert = me->totvert;
+ unode->geom_totedge = me->totedge;
+ unode->geom_totloop = me->totloop;
+ unode->geom_totpoly = me->totpoly;
unode->bm_entry = BM_log_entry_add(ss->bm_log);
BM_log_all_added(ss->bm, ss->bm_log);
@@ -906,6 +984,7 @@ static SculptUndoNode *sculpt_undo_bmesh_push(Object *ob, PBVHNode *node, Sculpt
case SCULPT_UNDO_DYNTOPO_BEGIN:
case SCULPT_UNDO_DYNTOPO_END:
case SCULPT_UNDO_DYNTOPO_SYMMETRIZE:
+ case SCULPT_UNDO_GEOMETRY:
break;
}
}
@@ -928,6 +1007,11 @@ SculptUndoNode *sculpt_undo_push_node(Object *ob, PBVHNode *node, SculptUndoType
BLI_thread_unlock(LOCK_CUSTOM1);
return unode;
}
+ else if (type == SCULPT_UNDO_GEOMETRY) {
+ unode = sculpt_undo_geometry_push(ob, type);
+ BLI_thread_unlock(LOCK_CUSTOM1);
+ return unode;
+ }
else if ((unode = sculpt_undo_get_node(node))) {
BLI_thread_unlock(LOCK_CUSTOM1);
return unode;
@@ -967,6 +1051,7 @@ SculptUndoNode *sculpt_undo_push_node(Object *ob, PBVHNode *node, SculptUndoType
case SCULPT_UNDO_DYNTOPO_END:
case SCULPT_UNDO_DYNTOPO_SYMMETRIZE:
BLI_assert(!"Dynamic topology should've already been handled");
+ case SCULPT_UNDO_GEOMETRY:
break;
}
@@ -1012,6 +1097,7 @@ void sculpt_undo_push_end(void)
if (wm->op_undo_depth == 0) {
UndoStack *ustack = ED_undo_stack_get();
BKE_undosys_step_push(ustack, NULL, NULL);
+ WM_file_tag_modified();
}
}
@@ -1162,6 +1248,18 @@ static void sculpt_undosys_step_free(UndoStep *us_p)
sculpt_undo_free_list(&us->data.nodes);
}
+void ED_sculpt_undo_geometry_begin(struct Object *ob)
+{
+ sculpt_undo_push_begin("voxel remesh");
+ sculpt_undo_push_node(ob, NULL, SCULPT_UNDO_GEOMETRY);
+}
+
+void ED_sculpt_undo_geometry_end(struct Object *ob)
+{
+ sculpt_undo_push_node(ob, NULL, SCULPT_UNDO_GEOMETRY);
+ sculpt_undo_push_end();
+}
+
/* Export for ED_undo_sys. */
void ED_sculpt_undosys_type(UndoType *ut)
{
diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c
index 36cc3605273..91ed9057667 100644
--- a/source/blender/editors/sculpt_paint/sculpt_uv.c
+++ b/source/blender/editors/sculpt_paint/sculpt_uv.c
@@ -497,7 +497,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, const wm
op->customdata = data;
- curvemapping_initialize(ts->uvsculpt->paint.brush->curve);
+ BKE_curvemapping_initialize(ts->uvsculpt->paint.brush->curve);
if (data) {
int counter = 0, i;
diff --git a/source/blender/editors/sound/sound_ops.c b/source/blender/editors/sound/sound_ops.c
index 10d38055085..51231ccf634 100644
--- a/source/blender/editors/sound/sound_ops.c
+++ b/source/blender/editors/sound/sound_ops.c
@@ -305,7 +305,7 @@ static int sound_bake_animation_exec(bContext *C, wmOperator *UNUSED(op))
{
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
- /* NOTE: We will be forefully evaluating dependency graph at every frame, so no need to ensure
+ /* NOTE: We will be forcefully evaluating dependency graph at every frame, so no need to ensure
* current scene state is evaluated as it will be lost anyway. */
struct Depsgraph *depsgraph = CTX_data_depsgraph_pointer(C);
int oldfra = scene->r.cfra;
diff --git a/source/blender/editors/space_action/action_data.c b/source/blender/editors/space_action/action_data.c
index bc7f8a0f79d..5ceaefd6309 100644
--- a/source/blender/editors/space_action/action_data.c
+++ b/source/blender/editors/space_action/action_data.c
@@ -220,7 +220,7 @@ static int action_new_exec(bContext *C, wmOperator *UNUSED(op))
PointerRNA oldptr;
oldptr = RNA_property_pointer_get(&ptr, prop);
- oldact = (bAction *)oldptr.id.data;
+ oldact = (bAction *)oldptr.owner_id;
/* stash the old action to prevent it from being lost */
if (ptr.type == &RNA_AnimData) {
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index a7b6f399187..0c57113956d 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -352,179 +352,231 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar)
/* ************************************************************************* */
/* Timeline - Caches */
-void timeline_draw_cache(SpaceAction *saction, Object *ob, Scene *scene)
+static bool timeline_cache_is_hidden_by_setting(SpaceAction *saction, PTCacheID *pid)
{
- PTCacheID *pid;
- ListBase pidlist;
- const float cache_draw_height = (4.0f * UI_DPI_FAC * U.pixelsize);
- float yoffs = 0.f;
-
- if (!(saction->cache_display & TIME_CACHE_DISPLAY) || (!ob)) {
- return;
+ switch (pid->type) {
+ case PTCACHE_TYPE_SOFTBODY:
+ if ((saction->cache_display & TIME_CACHE_SOFTBODY) == 0) {
+ return true;
+ }
+ break;
+ case PTCACHE_TYPE_PARTICLES:
+ if ((saction->cache_display & TIME_CACHE_PARTICLES) == 0) {
+ return true;
+ }
+ break;
+ case PTCACHE_TYPE_CLOTH:
+ if ((saction->cache_display & TIME_CACHE_CLOTH) == 0) {
+ return true;
+ }
+ break;
+ case PTCACHE_TYPE_SMOKE_DOMAIN:
+ case PTCACHE_TYPE_SMOKE_HIGHRES:
+ if ((saction->cache_display & TIME_CACHE_SMOKE) == 0) {
+ return true;
+ }
+ break;
+ case PTCACHE_TYPE_DYNAMICPAINT:
+ if ((saction->cache_display & TIME_CACHE_DYNAMICPAINT) == 0) {
+ return true;
+ }
+ break;
+ case PTCACHE_TYPE_RIGIDBODY:
+ if ((saction->cache_display & TIME_CACHE_RIGIDBODY) == 0) {
+ return true;
+ }
+ break;
}
+ return false;
+}
- BKE_ptcache_ids_from_object(&pidlist, ob, scene, 0);
+static void timeline_cache_color_get(PTCacheID *pid, float color[4])
+{
+ switch (pid->type) {
+ case PTCACHE_TYPE_SOFTBODY:
+ color[0] = 1.0;
+ color[1] = 0.4;
+ color[2] = 0.02;
+ color[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_PARTICLES:
+ color[0] = 1.0;
+ color[1] = 0.1;
+ color[2] = 0.02;
+ color[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_CLOTH:
+ color[0] = 0.1;
+ color[1] = 0.1;
+ color[2] = 0.75;
+ color[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_SMOKE_DOMAIN:
+ case PTCACHE_TYPE_SMOKE_HIGHRES:
+ color[0] = 0.2;
+ color[1] = 0.2;
+ color[2] = 0.2;
+ color[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_DYNAMICPAINT:
+ color[0] = 1.0;
+ color[1] = 0.1;
+ color[2] = 0.75;
+ color[3] = 0.1;
+ break;
+ case PTCACHE_TYPE_RIGIDBODY:
+ color[0] = 1.0;
+ color[1] = 0.6;
+ color[2] = 0.0;
+ color[3] = 0.1;
+ break;
+ default:
+ color[0] = 1.0;
+ color[1] = 0.0;
+ color[2] = 1.0;
+ color[3] = 0.1;
+ BLI_assert(0);
+ break;
+ }
+}
- uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+static void timeline_cache_modify_color_based_on_state(PointCache *cache, float color[4])
+{
+ if (cache->flag & PTCACHE_BAKED) {
+ color[0] -= 0.4f;
+ color[1] -= 0.4f;
+ color[2] -= 0.4f;
+ }
+ else if (cache->flag & PTCACHE_OUTDATED) {
+ color[0] += 0.4f;
+ color[1] += 0.4f;
+ color[2] += 0.4f;
+ }
+}
- /* iterate over pointcaches on the active object, and draw each one's range */
- for (pid = pidlist.first; pid; pid = pid->next) {
- float col[4];
+static bool timeline_cache_find_next_cached_segment(PointCache *cache,
+ int search_start_frame,
+ int *r_segment_start,
+ int *r_segment_end)
+{
+ int offset = cache->startframe;
+ int current = search_start_frame;
- switch (pid->type) {
- case PTCACHE_TYPE_SOFTBODY:
- if (!(saction->cache_display & TIME_CACHE_SOFTBODY)) {
- continue;
- }
- break;
- case PTCACHE_TYPE_PARTICLES:
- if (!(saction->cache_display & TIME_CACHE_PARTICLES)) {
- continue;
- }
- break;
- case PTCACHE_TYPE_CLOTH:
- if (!(saction->cache_display & TIME_CACHE_CLOTH)) {
- continue;
- }
- break;
- case PTCACHE_TYPE_SMOKE_DOMAIN:
- case PTCACHE_TYPE_SMOKE_HIGHRES:
- if (!(saction->cache_display & TIME_CACHE_SMOKE)) {
- continue;
- }
- break;
- case PTCACHE_TYPE_DYNAMICPAINT:
- if (!(saction->cache_display & TIME_CACHE_DYNAMICPAINT)) {
- continue;
- }
- break;
- case PTCACHE_TYPE_RIGIDBODY:
- if (!(saction->cache_display & TIME_CACHE_RIGIDBODY)) {
- continue;
- }
- break;
+ /* Find segment start frame. */
+ while (true) {
+ if (current > cache->endframe) {
+ return false;
}
-
- if (pid->cache->cached_frames == NULL) {
- continue;
+ if (cache->cached_frames[current - offset]) {
+ *r_segment_start = current;
+ break;
}
+ current++;
+ }
- GPU_matrix_push();
- GPU_matrix_translate_2f(0.0, (float)V2D_SCROLL_HANDLE_HEIGHT + yoffs);
- GPU_matrix_scale_2f(1.0, cache_draw_height);
-
- switch (pid->type) {
- case PTCACHE_TYPE_SOFTBODY:
- col[0] = 1.0;
- col[1] = 0.4;
- col[2] = 0.02;
- col[3] = 0.1;
- break;
- case PTCACHE_TYPE_PARTICLES:
- col[0] = 1.0;
- col[1] = 0.1;
- col[2] = 0.02;
- col[3] = 0.1;
- break;
- case PTCACHE_TYPE_CLOTH:
- col[0] = 0.1;
- col[1] = 0.1;
- col[2] = 0.75;
- col[3] = 0.1;
- break;
- case PTCACHE_TYPE_SMOKE_DOMAIN:
- case PTCACHE_TYPE_SMOKE_HIGHRES:
- col[0] = 0.2;
- col[1] = 0.2;
- col[2] = 0.2;
- col[3] = 0.1;
- break;
- case PTCACHE_TYPE_DYNAMICPAINT:
- col[0] = 1.0;
- col[1] = 0.1;
- col[2] = 0.75;
- col[3] = 0.1;
- break;
- case PTCACHE_TYPE_RIGIDBODY:
- col[0] = 1.0;
- col[1] = 0.6;
- col[2] = 0.0;
- col[3] = 0.1;
- break;
- default:
- col[0] = 1.0;
- col[1] = 0.0;
- col[2] = 1.0;
- col[3] = 0.1;
- BLI_assert(0);
- break;
+ /* Find segment end frame. */
+ while (true) {
+ if (current > cache->endframe) {
+ *r_segment_end = current - 1;
+ return true;
+ }
+ if (!cache->cached_frames[current - offset]) {
+ *r_segment_end = current - 1;
+ return true;
}
+ current++;
+ }
+}
+
+static uint timeline_cache_segments_count(PointCache *cache)
+{
+ uint count = 0;
+
+ int current = cache->startframe;
+ int segment_start;
+ int segment_end;
+ while (timeline_cache_find_next_cached_segment(cache, current, &segment_start, &segment_end)) {
+ count++;
+ current = segment_end + 1;
+ }
+
+ return count;
+}
- const int sta = pid->cache->startframe, end = pid->cache->endframe;
+static void timeline_cache_draw_cached_segments(PointCache *cache, uint pos_id)
+{
+ uint segments_count = timeline_cache_segments_count(cache);
+ if (segments_count == 0) {
+ return;
+ }
- GPU_blend(true);
+ immBeginAtMost(GPU_PRIM_TRIS, segments_count * 6);
- immUniformColor4fv(col);
- immRectf(pos, (float)sta, 0.0, (float)end, 1.0);
+ int current = cache->startframe;
+ int segment_start;
+ int segment_end;
+ while (timeline_cache_find_next_cached_segment(cache, current, &segment_start, &segment_end)) {
+ immRectf_fast(pos_id, segment_start - 0.5f, 0, segment_end + 0.5f, 1.0f);
+ current = segment_end + 1;
+ }
- col[3] = 0.4f;
- if (pid->cache->flag & PTCACHE_BAKED) {
- col[0] -= 0.4f;
- col[1] -= 0.4f;
- col[2] -= 0.4f;
- }
- else if (pid->cache->flag & PTCACHE_OUTDATED) {
- col[0] += 0.4f;
- col[1] += 0.4f;
- col[2] += 0.4f;
- }
+ immEnd();
+}
- immUniformColor4fv(col);
+static void timeline_cache_draw_single(PTCacheID *pid, float y_offset, float height, uint pos_id)
+{
+ GPU_matrix_push();
+ GPU_matrix_translate_2f(0.0, (float)V2D_SCROLL_HANDLE_HEIGHT + y_offset);
+ GPU_matrix_scale_2f(1.0, height);
- {
- /* draw a quad for each chunk of consecutive cached frames */
- const int chunk_tot = 32;
- int chunk_len = 0;
- int ista = 0, iend = -1;
+ float color[4];
+ timeline_cache_color_get(pid, color);
- for (int i = sta; i <= end; i++) {
- if (pid->cache->cached_frames[i - sta]) {
- if (chunk_len == 0) {
- immBeginAtMost(GPU_PRIM_TRIS, chunk_tot * 6);
- }
- if (ista > iend) {
- chunk_len++;
- ista = i;
- }
- iend = i;
- }
- else {
- if (ista <= iend) {
- immRectf_fast(pos, (float)ista - 0.5f, 0.0f, (float)iend + 0.5f, 1.0f);
- iend = ista - 1;
- }
- if (chunk_len >= chunk_tot) {
- immEnd();
- chunk_len = 0;
- }
- }
- }
- if (ista <= iend) {
- immRectf_fast(pos, (float)ista - 0.5f, 0.0f, (float)iend + 0.5f, 1.0f);
- }
- if (chunk_len != 0) {
- immEnd();
- }
+ immUniformColor4fv(color);
+ immRectf(pos_id, (float)pid->cache->startframe, 0.0, (float)pid->cache->endframe, 1.0);
+
+ color[3] = 0.4f;
+ timeline_cache_modify_color_based_on_state(pid->cache, color);
+ immUniformColor4fv(color);
+
+ timeline_cache_draw_cached_segments(pid->cache, pos_id);
+
+ GPU_matrix_pop();
+}
+
+void timeline_draw_cache(SpaceAction *saction, Object *ob, Scene *scene)
+{
+ if ((saction->cache_display & TIME_CACHE_DISPLAY) == 0 || ob == NULL) {
+ return;
+ }
+
+ ListBase pidlist;
+ BKE_ptcache_ids_from_object(&pidlist, ob, scene, 0);
+
+ uint pos_id = GPU_vertformat_attr_add(
+ immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+
+ GPU_blend(true);
+
+ /* Iterate over pointcaches on the active object, and draw each one's range. */
+ float y_offset = 0.0f;
+ const float cache_draw_height = 4.0f * UI_DPI_FAC * U.pixelsize;
+ for (PTCacheID *pid = pidlist.first; pid; pid = pid->next) {
+ if (timeline_cache_is_hidden_by_setting(saction, pid)) {
+ continue;
}
- GPU_blend(false);
+ if (pid->cache->cached_frames == NULL) {
+ continue;
+ }
- GPU_matrix_pop();
+ timeline_cache_draw_single(pid, y_offset, cache_draw_height, pos_id);
- yoffs += cache_draw_height;
+ y_offset += cache_draw_height;
}
+ GPU_blend(false);
immUnbindProgram();
BLI_freelistN(&pidlist);
diff --git a/source/blender/editors/space_action/action_intern.h b/source/blender/editors/space_action/action_intern.h
index eaca7968a34..c227b794ae7 100644
--- a/source/blender/editors/space_action/action_intern.h
+++ b/source/blender/editors/space_action/action_intern.h
@@ -28,9 +28,7 @@ struct ARegion;
struct ARegionType;
struct Object;
struct Scene;
-struct ScrArea;
struct SpaceAction;
-struct View2D;
struct bAnimContext;
struct bContext;
struct wmOperatorType;
diff --git a/source/blender/editors/space_action/space_action.c b/source/blender/editors/space_action/space_action.c
index 3c879b03126..1685852dd02 100644
--- a/source/blender/editors/space_action/space_action.c
+++ b/source/blender/editors/space_action/space_action.c
@@ -373,7 +373,7 @@ static void saction_channel_region_message_subscribe(const struct bContext *UNUS
* so just whitelist the entire structs for updates
*/
{
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
StructRNA *type_array[] = {
&RNA_DopeSheet, /* dopesheet filters */
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index fde8b8f85f8..a6584966643 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -76,7 +76,7 @@ static int set_pointer_type(ButsContextPath *path, bContextDataResult *result, S
ptr = &path->ptr[a];
if (RNA_struct_is_a(ptr->type, type)) {
- CTX_data_pointer_set(result, ptr->id.data, ptr->type, ptr->data);
+ CTX_data_pointer_set(result, ptr->owner_id, ptr->type, ptr->data);
return 1;
}
}
@@ -785,11 +785,11 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
SpaceProperties *sbuts = CTX_wm_space_properties(C);
ButsContextPath *path = sbuts ? sbuts->path : NULL;
- if (sbuts->mainb == BCONTEXT_TOOL) {
+ if (!path) {
return 0;
}
- if (!path) {
+ if (sbuts->mainb == BCONTEXT_TOOL) {
return 0;
}
@@ -894,7 +894,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
if (ct->user && ct->user->ptr.data) {
ButsTextureUser *user = ct->user;
- CTX_data_pointer_set(result, user->ptr.id.data, user->ptr.type, user->ptr.data);
+ CTX_data_pointer_set(result, user->ptr.owner_id, user->ptr.type, user->ptr.data);
}
return 1;
@@ -982,7 +982,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
PointerRNA *ptr = get_pointer_type(path, &RNA_ParticleSettings);
if (ptr && ptr->data) {
- CTX_data_pointer_set(result, ptr->id.data, &RNA_ParticleSettings, ptr->data);
+ CTX_data_pointer_set(result, ptr->owner_id, &RNA_ParticleSettings, ptr->data);
return 1;
}
else {
@@ -991,7 +991,7 @@ int buttons_context(const bContext *C, const char *member, bContextDataResult *r
if (ptr && ptr->data) {
ParticleSettings *part = ((ParticleSystem *)ptr->data)->part;
- CTX_data_pointer_set(result, ptr->id.data, &RNA_ParticleSettings, part);
+ CTX_data_pointer_set(result, ptr->owner_id, &RNA_ParticleSettings, part);
return 1;
}
}
@@ -1249,8 +1249,8 @@ ID *buttons_context_id_path(const bContext *C)
}
}
- if (ptr->id.data) {
- return ptr->id.data;
+ if (ptr->owner_id) {
+ return ptr->owner_id;
}
}
}
diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c
index 500efe4bb4d..3ea6d183969 100644
--- a/source/blender/editors/space_buttons/buttons_ops.c
+++ b/source/blender/editors/space_buttons/buttons_ops.c
@@ -103,7 +103,7 @@ static int file_browse_exec(bContext *C, wmOperator *op)
/* add slash for directories, important for some properties */
if (RNA_property_subtype(fbo->prop) == PROP_DIRPATH) {
const bool is_relative = RNA_boolean_get(op->ptr, "relative_path");
- id = fbo->ptr.id.data;
+ id = fbo->ptr.owner_id;
BLI_strncpy(path, str, FILE_MAX);
BLI_path_abs(path, id ? ID_BLEND_PATH(bmain, id) : BKE_main_blendfile_path(bmain));
diff --git a/source/blender/editors/space_buttons/buttons_texture.c b/source/blender/editors/space_buttons/buttons_texture.c
index 87ea011e0a7..03c8fbb4e66 100644
--- a/source/blender/editors/space_buttons/buttons_texture.c
+++ b/source/blender/editors/space_buttons/buttons_texture.c
@@ -385,7 +385,7 @@ static void template_texture_select(bContext *C, void *user_p, void *UNUSED(arg)
if (user->ptr.type == &RNA_ParticleSettingsTextureSlot) {
/* stupid exception for particle systems which still uses influence
* from the old texture system, set the active texture slots as well */
- ParticleSettings *part = user->ptr.id.data;
+ ParticleSettings *part = (ParticleSettings *)user->ptr.owner_id;
int a;
for (a = 0; a < MAX_MTEX; a++) {
diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c
index 129f249d7d0..23c224f5ae0 100644
--- a/source/blender/editors/space_buttons/space_buttons.c
+++ b/source/blender/editors/space_buttons/space_buttons.c
@@ -398,8 +398,6 @@ static void buttons_area_listener(wmWindow *UNUSED(win),
buttons_area_redraw(sa, BCONTEXT_DATA); /* autotexpace flag */
break;
case ND_POSE:
- buttons_area_redraw(sa, BCONTEXT_DATA);
- break;
case ND_BONE_ACTIVE:
case ND_BONE_SELECT:
buttons_area_redraw(sa, BCONTEXT_BONE);
@@ -561,7 +559,7 @@ static void buttons_id_remap(ScrArea *UNUSED(sa), SpaceLink *slink, ID *old_id,
int i;
for (i = 0; i < path->len; i++) {
- if (path->ptr[i].id.data == old_id) {
+ if (path->ptr[i].owner_id == old_id) {
break;
}
}
diff --git a/source/blender/editors/space_clip/clip_dopesheet_draw.c b/source/blender/editors/space_clip/clip_dopesheet_draw.c
index 599a92ff77f..3c2d3eb1d97 100644
--- a/source/blender/editors/space_clip/clip_dopesheet_draw.c
+++ b/source/blender/editors/space_clip/clip_dopesheet_draw.c
@@ -222,8 +222,9 @@ void clip_draw_dopesheet_main(SpaceClip *sc, ARegion *ar, Scene *scene)
format, "outlineColor", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
uint flags_id = GPU_vertformat_attr_add(format, "flags", GPU_COMP_U32, 1, GPU_FETCH_INT);
- immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
GPU_program_point_size(true);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ immUniform1f("outline_scale", 1.0f);
immUniform2f(
"ViewportSize", BLI_rcti_size_x(&v2d->mask) + 1, BLI_rcti_size_y(&v2d->mask) + 1);
immBegin(GPU_PRIM_POINTS, keyframe_len);
diff --git a/source/blender/editors/space_clip/clip_editor.c b/source/blender/editors/space_clip/clip_editor.c
index b0b6aa47df1..fbefc884589 100644
--- a/source/blender/editors/space_clip/clip_editor.c
+++ b/source/blender/editors/space_clip/clip_editor.c
@@ -1153,7 +1153,7 @@ void clip_start_prefetch_job(const bContext *C)
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- CTX_wm_area(C),
+ CTX_data_scene(C),
"Prefetching",
WM_JOB_PROGRESS,
WM_JOB_TYPE_CLIP_PREFETCH);
diff --git a/source/blender/editors/space_clip/clip_ops.c b/source/blender/editors/space_clip/clip_ops.c
index 5f04d0863a7..cf899773822 100644
--- a/source/blender/editors/space_clip/clip_ops.c
+++ b/source/blender/editors/space_clip/clip_ops.c
@@ -640,6 +640,8 @@ static void view_zoom_apply(
delta = event->x - vpd->x + event->y - vpd->y;
}
+ delta /= U.pixelsize;
+
if (U.uiflag & USER_ZOOM_INVERT) {
delta = -delta;
}
@@ -1458,7 +1460,7 @@ static int clip_rebuild_proxy_exec(bContext *C, wmOperator *UNUSED(op))
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- sa,
+ scene,
"Building Proxies",
WM_JOB_PROGRESS,
WM_JOB_TYPE_CLIP_BUILD_PROXY);
diff --git a/source/blender/editors/space_clip/tracking_ops_solve.c b/source/blender/editors/space_clip/tracking_ops_solve.c
index 806df4dbaff..96b00ec5463 100644
--- a/source/blender/editors/space_clip/tracking_ops_solve.c
+++ b/source/blender/editors/space_clip/tracking_ops_solve.c
@@ -191,7 +191,6 @@ static int solve_camera_exec(bContext *C, wmOperator *op)
static int solve_camera_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
SolveCameraJob *scj;
- ScrArea *sa = CTX_wm_area(C);
SpaceClip *sc = CTX_wm_space_clip(C);
MovieClip *clip = ED_space_clip_get_clip(sc);
MovieTracking *tracking = &clip->tracking;
@@ -199,7 +198,7 @@ static int solve_camera_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE
wmJob *wm_job;
char error_msg[256] = "\0";
- if (WM_jobs_test(CTX_wm_manager(C), sa, WM_JOB_TYPE_ANY)) {
+ if (WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C), WM_JOB_TYPE_CLIP_SOLVE_CAMERA)) {
/* only one solve is allowed at a time */
return OPERATOR_CANCELLED;
}
@@ -224,7 +223,7 @@ static int solve_camera_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE
/* Setup job. */
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- sa,
+ CTX_data_scene(C),
"Solve Camera",
WM_JOB_PROGRESS,
WM_JOB_TYPE_CLIP_SOLVE_CAMERA);
@@ -246,7 +245,7 @@ static int solve_camera_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSE
static int solve_camera_modal(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
{
/* No running solver, remove handler and pass through. */
- if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C), WM_JOB_TYPE_ANY)) {
+ if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C), WM_JOB_TYPE_CLIP_SOLVE_CAMERA)) {
return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH;
}
diff --git a/source/blender/editors/space_clip/tracking_ops_track.c b/source/blender/editors/space_clip/tracking_ops_track.c
index e9a685f9e21..9536c64c415 100644
--- a/source/blender/editors/space_clip/tracking_ops_track.c
+++ b/source/blender/editors/space_clip/tracking_ops_track.c
@@ -288,7 +288,6 @@ static void track_markers_freejob(void *tmv)
static int track_markers(bContext *C, wmOperator *op, bool use_job)
{
TrackMarkersJob *tmj;
- ScrArea *sa = CTX_wm_area(C);
SpaceClip *sc = CTX_wm_space_clip(C);
MovieClip *clip = ED_space_clip_get_clip(sc);
wmJob *wm_job;
@@ -296,7 +295,7 @@ static int track_markers(bContext *C, wmOperator *op, bool use_job)
bool sequence = RNA_boolean_get(op->ptr, "sequence");
int framenr = ED_space_clip_get_clip_frame_number(sc);
- if (WM_jobs_test(CTX_wm_manager(C), sa, WM_JOB_TYPE_ANY)) {
+ if (WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C), WM_JOB_TYPE_ANY)) {
/* Only one tracking is allowed at a time. */
return OPERATOR_CANCELLED;
}
@@ -319,7 +318,7 @@ static int track_markers(bContext *C, wmOperator *op, bool use_job)
if (use_job && sequence) {
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- sa,
+ CTX_data_scene(C),
"Track Markers",
WM_JOB_PROGRESS,
WM_JOB_TYPE_CLIP_TRACK_MARKERS);
@@ -372,7 +371,7 @@ static int track_markers_invoke(bContext *C, wmOperator *op, const wmEvent *UNUS
static int track_markers_modal(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
{
/* No running tracking, remove handler and pass through. */
- if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_wm_area(C), WM_JOB_TYPE_ANY)) {
+ if (0 == WM_jobs_test(CTX_wm_manager(C), CTX_data_scene(C), WM_JOB_TYPE_ANY)) {
return OPERATOR_FINISHED | OPERATOR_PASS_THROUGH;
}
diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c
index fc0adb655b7..faf613482a3 100644
--- a/source/blender/editors/space_console/console_ops.c
+++ b/source/blender/editors/space_console/console_ops.c
@@ -742,7 +742,7 @@ static int console_clear_exec(bContext *C, wmOperator *op)
void CONSOLE_OT_clear(wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Clear";
+ ot->name = "Clear All";
ot->description = "Clear text by type";
ot->idname = "CONSOLE_OT_clear";
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index e06ee620ea7..f7dda1defe8 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -2917,7 +2917,7 @@ void filelist_readjob_start(FileList *filelist, const bContext *C)
/* setup job */
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- CTX_wm_area(C),
+ CTX_data_scene(C),
"Listing Dirs...",
WM_JOB_PROGRESS,
WM_JOB_TYPE_FILESEL_READDIR);
diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c
index c727c5225c9..b264a5cb260 100644
--- a/source/blender/editors/space_graph/graph_buttons.c
+++ b/source/blender/editors/space_graph/graph_buttons.c
@@ -1236,7 +1236,7 @@ static void graph_panel_drivers_popover(const bContext *C, Panel *pa)
{
uiLayout *layout = pa->layout;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop = NULL;
int index = -1;
uiBut *but = NULL;
@@ -1258,7 +1258,7 @@ static void graph_panel_drivers_popover(const bContext *C, Panel *pa)
/* Populate Panel - With a combination of the contents of the Driven and Driver panels */
if (fcu && fcu->driver) {
- ID *id = ptr.id.data;
+ ID *id = ptr.owner_id;
PointerRNA ptr_fcurve;
RNA_pointer_create(id, &RNA_FCurve, fcu, &ptr_fcurve);
diff --git a/source/blender/editors/space_graph/graph_intern.h b/source/blender/editors/space_graph/graph_intern.h
index 168c38b66a4..320240221b5 100644
--- a/source/blender/editors/space_graph/graph_intern.h
+++ b/source/blender/editors/space_graph/graph_intern.h
@@ -26,7 +26,6 @@
struct ARegion;
struct ARegionType;
-struct ScrArea;
struct SpaceGraph;
struct bAnimContext;
struct bAnimListElem;
diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c
index 6c5ebf77bf4..91e5ab61dd9 100644
--- a/source/blender/editors/space_graph/space_graph.c
+++ b/source/blender/editors/space_graph/space_graph.c
@@ -527,7 +527,7 @@ static void graph_region_message_subscribe(const struct bContext *UNUSED(C),
* so just whitelist the entire structs for updates
*/
{
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
StructRNA *type_array[] = {
&RNA_DopeSheet, /* dopesheet filters */
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index f1a29a1542d..64e1c02590e 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -991,7 +991,7 @@ void uiTemplateImage(uiLayout *layout,
void uiTemplateImageSettings(uiLayout *layout, PointerRNA *imfptr, bool color_management)
{
ImageFormatData *imf = imfptr->data;
- ID *id = imfptr->id.data;
+ ID *id = imfptr->owner_id;
PointerRNA display_settings_ptr;
PropertyRNA *prop;
const int depth_ok = BKE_imtype_valid_depths(imf->imtype);
diff --git a/source/blender/editors/space_image/image_draw.c b/source/blender/editors/space_image/image_draw.c
index 97a3c7f2480..9a2b0d95c20 100644
--- a/source/blender/editors/space_image/image_draw.c
+++ b/source/blender/editors/space_image/image_draw.c
@@ -156,9 +156,8 @@ void ED_image_draw_info(Scene *scene,
char str[256];
int dx = 6;
/* local coordinate visible rect inside region, to accommodate overlapping ui */
- rcti rect;
- ED_region_visible_rect(ar, &rect);
- const int ymin = rect.ymin;
+ const rcti *rect = ED_region_visible_rect(ar);
+ const int ymin = rect->ymin;
const int dy = ymin + 0.3f * UI_UNIT_Y;
/* text colors */
diff --git a/source/blender/editors/space_image/image_edit.c b/source/blender/editors/space_image/image_edit.c
index 829a78b2bfa..ccd0a2bfd79 100644
--- a/source/blender/editors/space_image/image_edit.c
+++ b/source/blender/editors/space_image/image_edit.c
@@ -385,10 +385,10 @@ void ED_space_image_scopes_update(const struct bContext *C,
}
}
- scopes_update(&sima->scopes,
- ibuf,
- use_view_settings ? &scene->view_settings : NULL,
- &scene->display_settings);
+ BKE_scopes_update(&sima->scopes,
+ ibuf,
+ use_view_settings ? &scene->view_settings : NULL,
+ &scene->display_settings);
}
bool ED_space_image_show_render(SpaceImage *sima)
diff --git a/source/blender/editors/space_image/image_intern.h b/source/blender/editors/space_image/image_intern.h
index 2c723f45e94..1abb6715fdb 100644
--- a/source/blender/editors/space_image/image_intern.h
+++ b/source/blender/editors/space_image/image_intern.h
@@ -27,7 +27,6 @@
/* internal exports only */
struct ARegion;
struct ARegionType;
-struct ScrArea;
struct SpaceImage;
struct bContext;
struct bNodeTree;
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 374a58d1808..7ea693f2fd2 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -570,6 +570,8 @@ static void image_zoom_apply(ViewZoomData *vpd,
delta = x - vpd->origx + y - vpd->origy;
}
+ delta /= U.pixelsize;
+
if (zoom_invert) {
delta = -delta;
}
@@ -1429,7 +1431,7 @@ static int image_open_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(
Image *oldima;
oldptr = RNA_property_pointer_get(&ptr, prop);
- oldima = (Image *)oldptr.id.data;
+ oldima = (Image *)oldptr.owner_id;
/* unlikely to fail but better avoid strange crash */
if (oldima && GS(oldima->id.name) == ID_IM) {
ima = oldima;
@@ -3217,10 +3219,10 @@ static void image_sample_apply(bContext *C, wmOperator *op, const wmEvent *event
int point = RNA_enum_get(op->ptr, "point");
if (point == 1) {
- curvemapping_set_black_white(curve_mapping, NULL, info->linearcol);
+ BKE_curvemapping_set_black_white(curve_mapping, NULL, info->linearcol);
}
else if (point == 0) {
- curvemapping_set_black_white(curve_mapping, info->linearcol, NULL);
+ BKE_curvemapping_set_black_white(curve_mapping, info->linearcol, NULL);
}
WM_event_add_notifier(C, NC_WINDOW, NULL);
}
diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c
index 7ff075bf819..5fa4fe3e077 100644
--- a/source/blender/editors/space_image/space_image.c
+++ b/source/blender/editors/space_image/space_image.c
@@ -131,7 +131,7 @@ static SpaceLink *image_new(const ScrArea *UNUSED(area), const Scene *UNUSED(sce
BKE_imageuser_default(&simage->iuser);
simage->iuser.flag = IMA_SHOW_STEREO | IMA_ANIM_ALWAYS;
- scopes_new(&simage->scopes);
+ BKE_scopes_new(&simage->scopes);
simage->sample_line_hist.height = 100;
/* tool header */
@@ -179,7 +179,7 @@ static void image_free(SpaceLink *sl)
{
SpaceImage *simage = (SpaceImage *)sl;
- scopes_free(&simage->scopes);
+ BKE_scopes_free(&simage->scopes);
}
/* spacetype; init callback, add handlers */
@@ -197,7 +197,7 @@ static SpaceLink *image_duplicate(SpaceLink *sl)
/* clear or remove stuff from old */
- scopes_new(&simagen->scopes);
+ BKE_scopes_new(&simagen->scopes);
return (SpaceLink *)simagen;
}
@@ -501,11 +501,10 @@ static void image_main_region_set_view2d(SpaceImage *sima, ARegion *ar)
int winy = BLI_rcti_size_y(&ar->winrct) + 1;
/* For region overlap, move center so image doesn't overlap header. */
- rcti visible_rect;
- ED_region_visible_rect(ar, &visible_rect);
- const int visible_winy = BLI_rcti_size_y(&visible_rect) + 1;
+ const rcti *visible_rect = ED_region_visible_rect(ar);
+ const int visible_winy = BLI_rcti_size_y(visible_rect) + 1;
int visible_centerx = 0;
- int visible_centery = visible_rect.ymin + (visible_winy - winy) / 2;
+ int visible_centery = visible_rect->ymin + (visible_winy - winy) / 2;
ar->v2d.tot.xmin = 0;
ar->v2d.tot.ymin = 0;
@@ -587,7 +586,7 @@ static void image_main_region_draw(const bContext *C, ARegion *ar)
float col[3];
/* XXX This is in order to draw UI batches with the DRW
- * olg context since we now use it for drawing the entire area */
+ * old context since we now use it for drawing the entire area. */
gpu_batch_presets_reset();
GPUViewport *viewport =
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index 946274de882..106edc290d5 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -574,7 +574,7 @@ void ED_info_stats_clear(ViewLayer *view_layer)
const char *ED_info_stats_string(Main *bmain, Scene *scene, ViewLayer *view_layer)
{
- /* Loopin through dependency graph when interface is locked in not safe.
+ /* Looping through dependency graph when interface is locked in not safe.
* Thew interface is marked as locked when jobs wants to modify the
* dependency graph. */
wmWindowManager *wm = bmain->wm.first;
diff --git a/source/blender/editors/space_info/textview.c b/source/blender/editors/space_info/textview.c
index 108803a865f..97d5faa9c13 100644
--- a/source/blender/editors/space_info/textview.c
+++ b/source/blender/editors/space_info/textview.c
@@ -35,8 +35,6 @@
#include "GPU_immediate.h"
#include "GPU_state.h"
-#include "BKE_text.h"
-
#include "textview.h"
static void console_font_begin(const int font_id, const int lheight)
@@ -78,8 +76,8 @@ static void console_draw_sel(const char *str,
const unsigned char bg_sel[4])
{
if (sel[0] <= str_len_draw && sel[1] >= 0) {
- const int sta = txt_utf8_offset_to_column(str, max_ii(sel[0], 0));
- const int end = txt_utf8_offset_to_column(str, min_ii(sel[1], str_len_draw));
+ const int sta = BLI_str_utf8_offset_to_column(str, max_ii(sel[0], 0));
+ const int end = BLI_str_utf8_offset_to_column(str, min_ii(sel[1], str_len_draw));
GPU_blend(true);
GPU_blend_set_func_separate(
@@ -156,7 +154,8 @@ static int console_draw_string(ConsoleDrawContext *cdc,
}
/* last part */
- ofs += txt_utf8_column_to_offset(str + ofs, (int)floor((float)cdc->mval[0] / cdc->cwidth));
+ ofs += BLI_str_utf8_offset_from_column(str + ofs,
+ (int)floor((float)cdc->mval[0] / cdc->cwidth));
CLAMP(ofs, 0, str_len);
*cdc->pos_pick += str_len - ofs;
@@ -314,7 +313,7 @@ int textview_draw(
/* constants for the sequencer context */
cdc.font_id = font_id;
cdc.cwidth = (int)BLF_fixed_width(font_id);
- assert(cdc.cwidth > 0);
+ BLI_assert(cdc.cwidth > 0);
cdc.lheight = tvc->lheight;
cdc.lofs = -BLF_descender(font_id);
/* note, scroll bar must be already subtracted () */
diff --git a/source/blender/editors/space_nla/nla_buttons.c b/source/blender/editors/space_nla/nla_buttons.c
index 719efc7eeac..126b20a028e 100644
--- a/source/blender/editors/space_nla/nla_buttons.c
+++ b/source/blender/editors/space_nla/nla_buttons.c
@@ -268,8 +268,8 @@ static void nla_panel_animdata(const bContext *C, Panel *pa)
/* icon + id-block name of block where AnimData came from to prevent
* accidentally changing the properties of the wrong action
*/
- if (adt_ptr.id.data) {
- ID *id = adt_ptr.id.data;
+ if (adt_ptr.owner_id) {
+ ID *id = adt_ptr.owner_id;
PointerRNA id_ptr;
RNA_id_pointer_create(id, &id_ptr);
@@ -513,7 +513,7 @@ static void nla_panel_modifiers(const bContext *C, Panel *pa)
for (fcm = strip->modifiers.first; fcm; fcm = fcm->next) {
col = uiLayoutColumn(pa->layout, true);
- ANIM_uiTemplate_fmodifier_draw(col, strip_ptr.id.data, &strip->modifiers, fcm);
+ ANIM_uiTemplate_fmodifier_draw(col, strip_ptr.owner_id, &strip->modifiers, fcm);
}
}
diff --git a/source/blender/editors/space_nla/nla_channels.c b/source/blender/editors/space_nla/nla_channels.c
index e5c116e85de..456eb783706 100644
--- a/source/blender/editors/space_nla/nla_channels.c
+++ b/source/blender/editors/space_nla/nla_channels.c
@@ -446,7 +446,7 @@ static int nlachannels_pushdown_exec(bContext *C, wmOperator *op)
/* get anim-channel to use (or more specifically, the animdata block behind it) */
if (channel_index == -1) {
- PointerRNA adt_ptr = {{NULL}};
+ PointerRNA adt_ptr = {NULL};
/* active animdata block */
if (nla_panel_context(C, &adt_ptr, NULL, NULL) == 0 || (adt_ptr.data == NULL)) {
@@ -458,7 +458,7 @@ static int nlachannels_pushdown_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
else {
- id = adt_ptr.id.data;
+ id = adt_ptr.owner_id;
adt = adt_ptr.data;
}
}
@@ -581,7 +581,7 @@ static int nla_action_unlink_exec(bContext *C, wmOperator *op)
/* do unlinking */
if (adt && adt->action) {
bool force_delete = RNA_boolean_get(op->ptr, "force_delete");
- ED_animedit_unlink_action(C, adt_ptr.id.data, adt, adt->action, op->reports, force_delete);
+ ED_animedit_unlink_action(C, adt_ptr.owner_id, adt, adt->action, op->reports, force_delete);
}
return OPERATOR_FINISHED;
diff --git a/source/blender/editors/space_nla/nla_draw.c b/source/blender/editors/space_nla/nla_draw.c
index 5cf9646210e..9d6ccd6fe35 100644
--- a/source/blender/editors/space_nla/nla_draw.c
+++ b/source/blender/editors/space_nla/nla_draw.c
@@ -141,8 +141,10 @@ static void nla_action_draw_keyframes(
uint outline_color_id = GPU_vertformat_attr_add(
format, "outlineColor", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
uint flags_id = GPU_vertformat_attr_add(format, "flags", GPU_COMP_U32, 1, GPU_FETCH_INT);
- immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+
GPU_program_point_size(true);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ immUniform1f("outline_scale", 1.0f);
immUniform2f("ViewportSize", BLI_rcti_size_x(&v2d->mask) + 1, BLI_rcti_size_y(&v2d->mask) + 1);
immBegin(GPU_PRIM_POINTS, key_len);
diff --git a/source/blender/editors/space_nla/space_nla.c b/source/blender/editors/space_nla/space_nla.c
index 3bdd2804efc..f274f3c93ec 100644
--- a/source/blender/editors/space_nla/space_nla.c
+++ b/source/blender/editors/space_nla/space_nla.c
@@ -522,7 +522,7 @@ static void nla_channel_region_message_subscribe(const struct bContext *UNUSED(C
* so just whitelist the entire struct for updates
*/
{
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
StructRNA *type_array[] = {
&RNA_DopeSheet,
};
diff --git a/source/blender/editors/space_node/CMakeLists.txt b/source/blender/editors/space_node/CMakeLists.txt
index 03c83305618..f8c30f9a688 100644
--- a/source/blender/editors/space_node/CMakeLists.txt
+++ b/source/blender/editors/space_node/CMakeLists.txt
@@ -71,6 +71,10 @@ if(WITH_COMPOSITOR)
add_definitions(-DWITH_COMPOSITOR)
endif()
+if(WITH_OPENIMAGEDENOISE)
+ add_definitions(-DWITH_OPENIMAGEDENOISE)
+endif()
+
add_definitions(${GL_DEFINITIONS})
blender_add_lib(bf_editor_space_node "${SRC}" "${INC}" "${INC_SYS}" "${LIB}")
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index e63c8331f18..a69eb254621 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -90,7 +90,7 @@ static void node_buts_value(uiLayout *layout, bContext *UNUSED(C), PointerRNA *p
/* first output stores value */
bNodeSocket *output = node->outputs.first;
PointerRNA sockptr;
- RNA_pointer_create(ptr->id.data, &RNA_NodeSocket, output, &sockptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_NodeSocket, output, &sockptr);
uiItemR(layout, &sockptr, "default_value", 0, "", ICON_NONE);
}
@@ -102,7 +102,7 @@ static void node_buts_rgb(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr
bNodeSocket *output = node->outputs.first;
PointerRNA sockptr;
uiLayout *col;
- RNA_pointer_create(ptr->id.data, &RNA_NodeSocket, output, &sockptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_NodeSocket, output, &sockptr);
col = uiLayoutColumn(layout, false);
uiTemplateColorPicker(col, &sockptr, "default_value", 1, 0, 0, 0);
@@ -113,7 +113,7 @@ static void node_buts_mix_rgb(uiLayout *layout, bContext *UNUSED(C), PointerRNA
{
uiLayout *row, *col;
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
col = uiLayoutColumn(layout, false);
row = uiLayoutRow(col, true);
@@ -193,7 +193,7 @@ static void node_buts_normal(uiLayout *layout, bContext *UNUSED(C), PointerRNA *
/* first output stores normal */
bNodeSocket *output = node->outputs.first;
PointerRNA sockptr;
- RNA_pointer_create(ptr->id.data, &RNA_NodeSocket, output, &sockptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_NodeSocket, output, &sockptr);
uiItemR(layout, &sockptr, "default_value", 0, "", ICON_NONE);
}
@@ -249,6 +249,11 @@ static void node_buts_texture(uiLayout *layout, bContext *UNUSED(C), PointerRNA
}
}
+static void node_buts_map_range(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiItemR(layout, ptr, "clamp", 0, NULL, ICON_NONE);
+}
+
static void node_buts_math(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
{
uiItemR(layout, ptr, "operation", 0, "", ICON_NONE);
@@ -1181,6 +1186,11 @@ static void node_shader_buts_ambient_occlusion(uiLayout *layout,
uiItemR(layout, ptr, "only_local", 0, NULL, ICON_NONE);
}
+static void node_shader_buts_white_noise(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+ uiItemR(layout, ptr, "dimensions", 0, "", ICON_NONE);
+}
+
/* only once called */
static void node_shader_set_butfunc(bNodeType *ntype)
{
@@ -1209,10 +1219,13 @@ static void node_shader_set_butfunc(bNodeType *ntype)
case SH_NODE_VALTORGB:
ntype->draw_buttons = node_buts_colorramp;
break;
+ case SH_NODE_MAP_RANGE:
+ ntype->draw_buttons = node_buts_map_range;
+ break;
case SH_NODE_MATH:
ntype->draw_buttons = node_buts_math;
break;
- case SH_NODE_VECT_MATH:
+ case SH_NODE_VECTOR_MATH:
ntype->draw_buttons = node_shader_buts_vect_math;
break;
case SH_NODE_VECT_TRANSFORM:
@@ -1322,6 +1335,9 @@ static void node_shader_set_butfunc(bNodeType *ntype)
case SH_NODE_AMBIENT_OCCLUSION:
ntype->draw_buttons = node_shader_buts_ambient_occlusion;
break;
+ case SH_NODE_TEX_WHITE_NOISE:
+ ntype->draw_buttons = node_shader_buts_white_noise;
+ break;
}
}
@@ -1355,7 +1371,7 @@ static void node_composit_buts_image(uiLayout *layout, bContext *C, PointerRNA *
bNode *node = ptr->data;
PointerRNA imaptr, iuserptr;
- RNA_pointer_create((ID *)ptr->id.data, &RNA_ImageUser, node->storage, &iuserptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_ImageUser, node->storage, &iuserptr);
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
uiTemplateID(layout,
C,
@@ -1382,7 +1398,7 @@ static void node_composit_buts_image_ex(uiLayout *layout, bContext *C, PointerRN
bNode *node = ptr->data;
PointerRNA iuserptr;
- RNA_pointer_create((ID *)ptr->id.data, &RNA_ImageUser, node->storage, &iuserptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_ImageUser, node->storage, &iuserptr);
uiLayoutSetContextPointer(layout, "image_user", &iuserptr);
uiTemplateImage(layout, C, ptr, "image", &iuserptr, 0, 1);
}
@@ -1943,7 +1959,7 @@ static void node_composit_buts_file_output_ex(uiLayout *layout, bContext *C, Poi
}
/* XXX collection lookup does not return the ID part of the pointer,
* setting this manually here */
- active_input_ptr.id.data = ptr->id.data;
+ active_input_ptr.owner_id = ptr->owner_id;
col = uiLayoutColumn(row, true);
ot = WM_operatortype_find("NODE_OT_output_file_move_active_socket", false);
@@ -2683,6 +2699,15 @@ static void node_composit_buts_brightcontrast(uiLayout *layout,
uiItemR(layout, ptr, "use_premultiply", 0, NULL, ICON_NONE);
}
+static void node_composit_buts_denoise(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
+{
+#ifndef WITH_OPENIMAGEDENOISE
+ uiItemL(layout, IFACE_("Disabled, built without OpenImageDenoise"), ICON_ERROR);
+#endif
+
+ uiItemR(layout, ptr, "use_hdr", 0, NULL, ICON_NONE);
+}
+
/* only once called */
static void node_composit_set_butfunc(bNodeType *ntype)
{
@@ -2916,6 +2941,10 @@ static void node_composit_set_butfunc(bNodeType *ntype)
break;
case CMP_NODE_BRIGHTCONTRAST:
ntype->draw_buttons = node_composit_buts_brightcontrast;
+ break;
+ case CMP_NODE_DENOISE:
+ ntype->draw_buttons = node_composit_buts_denoise;
+ break;
}
}
@@ -2938,7 +2967,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe
{
PointerRNA tex_ptr;
bNode *node = ptr->data;
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
Tex *tex = (Tex *)node->storage;
uiLayout *col, *row;
@@ -3032,7 +3061,7 @@ static void node_texture_buts_image_ex(uiLayout *layout, bContext *C, PointerRNA
bNode *node = ptr->data;
PointerRNA iuserptr;
- RNA_pointer_create((ID *)ptr->id.data, &RNA_ImageUser, node->storage, &iuserptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_ImageUser, node->storage, &iuserptr);
uiTemplateImage(layout, C, ptr, "image", &iuserptr, 0, 0);
}
@@ -3094,7 +3123,7 @@ static void node_texture_set_butfunc(bNodeType *ntype)
static void node_property_update_default(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = ptr->data;
ED_node_tag_update_nodetree(bmain, ntree, node);
}
@@ -3264,7 +3293,7 @@ static void node_file_output_socket_draw(bContext *C,
PointerRNA *ptr,
PointerRNA *node_ptr)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = ptr->data;
uiLayout *row;
PointerRNA inputptr, imfptr;
@@ -3333,7 +3362,18 @@ static void std_node_socket_draw(
uiItemR(layout, ptr, "default_value", 0, text, 0);
break;
case SOCK_VECTOR:
- uiTemplateComponentMenu(layout, ptr, "default_value", text);
+ if (sock->flag & SOCK_COMPACT) {
+ uiTemplateComponentMenu(layout, ptr, "default_value", text);
+ }
+ else {
+ if (sock->typeinfo->subtype == PROP_DIRECTION) {
+ uiItemR(layout, ptr, "default_value", 0, "", ICON_NONE);
+ }
+ else {
+ uiLayout *column = uiLayoutColumn(layout, true);
+ uiItemR(column, ptr, "default_value", 0, text, ICON_NONE);
+ }
+ }
break;
case SOCK_RGBA:
case SOCK_STRING: {
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index 1c3544077c4..6dc2182b684 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -713,15 +713,28 @@ static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node)
GPU_blend(false);
}
-static void node_socket_circle_draw(const bContext *C,
- bNodeTree *ntree,
- PointerRNA node_ptr,
- bNodeSocket *sock,
- unsigned pos,
- unsigned col)
+/* flags used in gpu_shader_keyframe_diamond_frag.glsl */
+#define MARKER_SHAPE_DIAMOND 0x1
+#define MARKER_SHAPE_SQUARE 0xC
+#define MARKER_SHAPE_CIRCLE 0x2
+#define MARKER_SHAPE_INNER_DOT 0x10
+
+static void node_socket_draw(const bContext *C,
+ bNodeTree *ntree,
+ PointerRNA node_ptr,
+ bNodeSocket *sock,
+ unsigned pos_id,
+ unsigned col_id,
+ unsigned shape_id,
+ unsigned size_id,
+ unsigned outline_col_id,
+ float size,
+ bool selected)
{
PointerRNA ptr;
float color[4];
+ float outline_color[4];
+ unsigned int flags = 0;
RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &ptr);
sock->typeinfo->draw_color((bContext *)C, &ptr, &node_ptr, color);
@@ -731,8 +744,44 @@ static void node_socket_circle_draw(const bContext *C,
color[3] *= 0.25f;
}
- immAttr4fv(col, color);
- immVertex2f(pos, sock->locx, sock->locy);
+ if (selected) {
+ UI_GetThemeColor4fv(TH_TEXT_HI, outline_color);
+ outline_color[3] = 0.9f;
+ }
+ else {
+ copy_v4_fl(outline_color, 0.0f);
+ outline_color[3] = 0.6f;
+ }
+
+ /* sets shape flags */
+ switch (sock->display_shape) {
+ case SOCK_DISPLAY_SHAPE_DIAMOND:
+ case SOCK_DISPLAY_SHAPE_DIAMOND_DOT:
+ flags = MARKER_SHAPE_DIAMOND;
+ break;
+ case SOCK_DISPLAY_SHAPE_SQUARE:
+ case SOCK_DISPLAY_SHAPE_SQUARE_DOT:
+ flags = MARKER_SHAPE_SQUARE;
+ break;
+ default:
+ case SOCK_DISPLAY_SHAPE_CIRCLE:
+ case SOCK_DISPLAY_SHAPE_CIRCLE_DOT:
+ flags = MARKER_SHAPE_CIRCLE;
+ break;
+ }
+
+ if (ELEM(sock->display_shape,
+ SOCK_DISPLAY_SHAPE_DIAMOND_DOT,
+ SOCK_DISPLAY_SHAPE_SQUARE_DOT,
+ SOCK_DISPLAY_SHAPE_CIRCLE_DOT)) {
+ flags |= MARKER_SHAPE_INNER_DOT;
+ }
+
+ immAttr4fv(col_id, color);
+ immAttr1u(shape_id, flags);
+ immAttr1f(size_id, size);
+ immAttr4fv(outline_col_id, outline_color);
+ immVertex2f(pos_id, sock->locx, sock->locy);
}
/* ************** Socket callbacks *********** */
@@ -888,26 +937,28 @@ void node_draw_sockets(View2D *v2d,
PointerRNA node_ptr;
RNA_pointer_create((ID *)ntree, &RNA_Node, node, &node_ptr);
- float scale;
- UI_view2d_scale_get(v2d, &scale, NULL);
+ bool selected = false;
GPUVertFormat *format = immVertexFormat();
- uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- uint col = GPU_vertformat_attr_add(format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ uint pos_id = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ uint col_id = GPU_vertformat_attr_add(format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ uint shape_id = GPU_vertformat_attr_add(format, "flags", GPU_COMP_U32, 1, GPU_FETCH_INT);
+ uint size_id = GPU_vertformat_attr_add(format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ uint outline_col_id = GPU_vertformat_attr_add(
+ format, "outlineColor", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
GPU_blend(true);
GPU_program_point_size(true);
-
- immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_VARYING_COLOR_OUTLINE_AA);
+ immBindBuiltinProgram(GPU_SHADER_KEYFRAME_DIAMOND);
+ immUniform1f("outline_scale", 0.7f);
+ immUniform2f("ViewportSize", -1.0f, -1.0f);
/* set handle size */
- immUniform1f("size", 2.0f * NODE_SOCKSIZE * scale); /* 2 * size to have diameter */
+ float scale;
+ UI_view2d_scale_get(v2d, &scale, NULL);
+ scale *= 2.25f * NODE_SOCKSIZE;
if (!select_all) {
- /* outline for unselected sockets */
- immUniform1f("outlineWidth", 1.0f);
- immUniform4f("outlineColor", 0.0f, 0.0f, 0.0f, 0.6f);
-
immBeginAtMost(GPU_PRIM_POINTS, total_input_len + total_output_len);
}
@@ -923,7 +974,17 @@ void node_draw_sockets(View2D *v2d,
continue;
}
- node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ node_socket_draw(C,
+ ntree,
+ node_ptr,
+ sock,
+ pos_id,
+ col_id,
+ shape_id,
+ size_id,
+ outline_col_id,
+ scale,
+ selected);
}
/* socket outputs */
@@ -938,7 +999,17 @@ void node_draw_sockets(View2D *v2d,
continue;
}
- node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ node_socket_draw(C,
+ ntree,
+ node_ptr,
+ sock,
+ pos_id,
+ col_id,
+ shape_id,
+ size_id,
+ outline_col_id,
+ scale,
+ selected);
}
}
@@ -949,10 +1020,8 @@ void node_draw_sockets(View2D *v2d,
/* go back and draw selected sockets */
if (selected_input_len + selected_output_len > 0) {
/* outline for selected sockets */
- float c[3];
- UI_GetThemeColor3fv(TH_TEXT_HI, c);
- immUniform4f("outlineColor", c[0], c[1], c[2], 1.0f);
- immUniform1f("outlineWidth", 1.5f);
+
+ selected = true;
immBegin(GPU_PRIM_POINTS, selected_input_len + selected_output_len);
@@ -963,7 +1032,17 @@ void node_draw_sockets(View2D *v2d,
continue;
}
if (select_all || (sock->flag & SELECT)) {
- node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ node_socket_draw(C,
+ ntree,
+ node_ptr,
+ sock,
+ pos_id,
+ col_id,
+ shape_id,
+ size_id,
+ outline_col_id,
+ scale,
+ selected);
if (--selected_input_len == 0) {
break; /* stop as soon as last one is drawn */
}
@@ -978,7 +1057,17 @@ void node_draw_sockets(View2D *v2d,
continue;
}
if (select_all || (sock->flag & SELECT)) {
- node_socket_circle_draw(C, ntree, node_ptr, sock, pos, col);
+ node_socket_draw(C,
+ ntree,
+ node_ptr,
+ sock,
+ pos_id,
+ col_id,
+ shape_id,
+ size_id,
+ outline_col_id,
+ scale,
+ selected);
if (--selected_output_len == 0) {
break; /* stop as soon as last one is drawn */
}
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index d31256a1425..dcf901216f5 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -1838,7 +1838,7 @@ static int node_output_file_add_socket_exec(bContext *C, wmOperator *op)
if (ptr.data) {
node = ptr.data;
- ntree = ptr.id.data;
+ ntree = (bNodeTree *)ptr.owner_id;
}
else if (snode && snode->edittree) {
ntree = snode->edittree;
@@ -1886,7 +1886,7 @@ static int node_output_file_remove_active_socket_exec(bContext *C, wmOperator *U
if (ptr.data) {
node = ptr.data;
- ntree = ptr.id.data;
+ ntree = (bNodeTree *)ptr.owner_id;
}
else if (snode && snode->edittree) {
ntree = snode->edittree;
@@ -2535,7 +2535,7 @@ static int node_shader_script_update_exec(bContext *C, wmOperator *op)
/* get node */
if (nodeptr.data) {
- ntree_base = nodeptr.id.data;
+ ntree_base = (bNodeTree *)nodeptr.owner_id;
node = nodeptr.data;
}
else if (snode && snode->edittree) {
@@ -2734,7 +2734,7 @@ static int node_cryptomatte_add_socket_exec(bContext *C, wmOperator *UNUSED(op))
if (ptr.data) {
node = ptr.data;
- ntree = ptr.id.data;
+ ntree = (bNodeTree *)ptr.owner_id;
}
else if (snode && snode->edittree) {
ntree = snode->edittree;
@@ -2778,7 +2778,7 @@ static int node_cryptomatte_remove_socket_exec(bContext *C, wmOperator *UNUSED(o
if (ptr.data) {
node = ptr.data;
- ntree = ptr.id.data;
+ ntree = (bNodeTree *)ptr.owner_id;
}
else if (snode && snode->edittree) {
ntree = snode->edittree;
diff --git a/source/blender/editors/space_outliner/CMakeLists.txt b/source/blender/editors/space_outliner/CMakeLists.txt
index d235dd47136..616915dbc2c 100644
--- a/source/blender/editors/space_outliner/CMakeLists.txt
+++ b/source/blender/editors/space_outliner/CMakeLists.txt
@@ -41,6 +41,7 @@ set(SRC
outliner_edit.c
outliner_ops.c
outliner_select.c
+ outliner_sync.c
outliner_tools.c
outliner_tree.c
outliner_utils.c
diff --git a/source/blender/editors/space_outliner/outliner_dragdrop.c b/source/blender/editors/space_outliner/outliner_dragdrop.c
index d8276aa2bbc..6031ba5cffc 100644
--- a/source/blender/editors/space_outliner/outliner_dragdrop.c
+++ b/source/blender/editors/space_outliner/outliner_dragdrop.c
@@ -326,38 +326,57 @@ static bool parent_drop_poll(bContext *C,
return false;
}
-static int parent_drop_exec(bContext *C, wmOperator *op)
+static void parent_drop_set_parents(
+ bContext *C, ReportList *reports, wmDragID *drag, Object *parent, short parent_type)
{
- Object *par = NULL, *ob = NULL;
Main *bmain = CTX_data_main(C);
- Scene *scene = CTX_data_scene(C);
- int partype = -1;
- char parname[MAX_NAME], childname[MAX_NAME];
+ SpaceOutliner *soops = CTX_wm_space_outliner(C);
- partype = RNA_enum_get(op->ptr, "type");
- RNA_string_get(op->ptr, "parent", parname);
- par = (Object *)BKE_libblock_find_name(bmain, ID_OB, parname);
- RNA_string_get(op->ptr, "child", childname);
- ob = (Object *)BKE_libblock_find_name(bmain, ID_OB, childname);
+ TreeElement *te = outliner_find_id(soops, &soops->tree, &parent->id);
+ Scene *scene = (Scene *)outliner_search_back(soops, te, ID_SCE);
- if (ID_IS_LINKED(ob)) {
- BKE_report(op->reports, RPT_INFO, "Can't edit library linked object");
- return OPERATOR_CANCELLED;
+ if (scene == NULL) {
+ /* currently outliner organized in a way, that if there's no parent scene
+ * element for object it means that all displayed objects belong to
+ * active scene and parenting them is allowed (sergey)
+ */
+
+ scene = CTX_data_scene(C);
}
- ED_object_parent_set(op->reports, C, scene, ob, par, partype, false, false, NULL);
+ bool parent_set = false;
+ bool linked_objects = false;
- DEG_relations_tag_update(bmain);
- WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
- WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
+ for (wmDragID *drag_id = drag; drag_id; drag_id = drag_id->next) {
+ if (GS(drag_id->id->name) == ID_OB) {
+ Object *object = (Object *)drag_id->id;
- return OPERATOR_FINISHED;
+ /* Do nothing to linked data */
+ if (ID_IS_LINKED(object)) {
+ linked_objects = true;
+ continue;
+ }
+
+ if (ED_object_parent_set(
+ reports, C, scene, object, parent, parent_type, false, false, NULL)) {
+ parent_set = true;
+ }
+ }
+ }
+
+ if (linked_objects) {
+ BKE_report(reports, RPT_INFO, "Can't edit library linked object(s)");
+ }
+
+ if (parent_set) {
+ DEG_relations_tag_update(bmain);
+ WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
+ WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
+ }
}
static int parent_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
- Main *bmain = CTX_data_main(C);
- SpaceOutliner *soops = CTX_wm_space_outliner(C);
TreeElement *te = outliner_drop_find(C, event);
TreeStoreElem *tselem = te ? TREESTORE(te) : NULL;
@@ -374,107 +393,15 @@ static int parent_drop_invoke(bContext *C, wmOperator *op, const wmEvent *event)
if (ob == par) {
return OPERATOR_CANCELLED;
}
- if (ID_IS_LINKED(ob)) {
- BKE_report(op->reports, RPT_INFO, "Can't edit library linked object");
- return OPERATOR_CANCELLED;
- }
-
- char childname[MAX_NAME];
- char parname[MAX_NAME];
- STRNCPY(childname, ob->id.name + 2);
- STRNCPY(parname, par->id.name + 2);
- RNA_string_set(op->ptr, "child", childname);
- RNA_string_set(op->ptr, "parent", parname);
- Scene *scene = (Scene *)outliner_search_back(soops, te, ID_SCE);
-
- if (scene == NULL) {
- /* currently outlier organized in a way, that if there's no parent scene
- * element for object it means that all displayed objects belong to
- * active scene and parenting them is allowed (sergey)
- */
-
- scene = CTX_data_scene(C);
+ if (event->custom != EVT_DATA_DRAGDROP) {
+ return OPERATOR_CANCELLED;
}
- if ((par->type != OB_ARMATURE) && (par->type != OB_CURVE) && (par->type != OB_LATTICE)) {
- int partype = 0;
- if (ED_object_parent_set(op->reports, C, scene, ob, par, partype, false, false, NULL)) {
- DEG_relations_tag_update(bmain);
- WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
- WM_event_add_notifier(C, NC_OBJECT | ND_PARENT, NULL);
- }
- }
- else {
- /* Menu creation */
- wmOperatorType *ot = WM_operatortype_find("OUTLINER_OT_parent_drop", false);
- uiPopupMenu *pup = UI_popup_menu_begin(C, IFACE_("Set Parent To"), ICON_NONE);
- uiLayout *layout = UI_popup_menu_layout(pup);
- PointerRNA ptr;
-
- /* Cannot use uiItemEnumO()... have multiple properties to set. */
- uiItemFullO_ptr(layout, ot, IFACE_("Object"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_OBJECT);
-
- /* par becomes parent, make the associated menus */
- if (par->type == OB_ARMATURE) {
- uiItemFullO_ptr(layout, ot, IFACE_("Armature Deform"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_ARMATURE);
-
- uiItemFullO_ptr(
- layout, ot, IFACE_(" With Empty Groups"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_ARMATURE_NAME);
-
- uiItemFullO_ptr(
- layout, ot, IFACE_(" With Envelope Weights"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_ARMATURE_ENVELOPE);
-
- uiItemFullO_ptr(
- layout, ot, IFACE_(" With Automatic Weights"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_ARMATURE_AUTO);
-
- uiItemFullO_ptr(layout, ot, IFACE_("Bone"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_BONE);
- }
- else if (par->type == OB_CURVE) {
- uiItemFullO_ptr(layout, ot, IFACE_("Curve Deform"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_CURVE);
-
- uiItemFullO_ptr(layout, ot, IFACE_("Follow Path"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_FOLLOW);
-
- uiItemFullO_ptr(layout, ot, IFACE_("Path Constraint"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_PATH_CONST);
- }
- else if (par->type == OB_LATTICE) {
- uiItemFullO_ptr(layout, ot, IFACE_("Lattice Deform"), 0, NULL, WM_OP_EXEC_DEFAULT, 0, &ptr);
- RNA_string_set(&ptr, "parent", parname);
- RNA_string_set(&ptr, "child", childname);
- RNA_enum_set(&ptr, "type", PAR_LATTICE);
- }
-
- UI_popup_menu_end(C, pup);
+ ListBase *lb = event->customdata;
+ wmDrag *drag = lb->first;
- return OPERATOR_INTERFACE;
- }
+ parent_drop_set_parents(C, op->reports, drag->ids.first, par, PAR_OBJECT);
return OPERATOR_FINISHED;
}
@@ -488,17 +415,11 @@ void OUTLINER_OT_parent_drop(wmOperatorType *ot)
/* api callbacks */
ot->invoke = parent_drop_invoke;
- ot->exec = parent_drop_exec;
ot->poll = ED_operator_outliner_active;
/* flags */
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL;
-
- /* properties */
- RNA_def_string(ot->srna, "child", "Object", MAX_NAME, "Child", "Child Object");
- RNA_def_string(ot->srna, "parent", "Object", MAX_NAME, "Parent", "Parent Object");
- RNA_def_enum(ot->srna, "type", prop_make_parent_types, 0, "Type", "");
}
/* ******************** Parent Clear Operator *********************** */
@@ -549,13 +470,21 @@ static bool parent_clear_poll(bContext *C,
static int parent_clear_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
{
Main *bmain = CTX_data_main(C);
- Object *ob = (Object *)WM_drag_ID_from_event(event, ID_OB);
- if (ob == NULL) {
+ if (event->custom != EVT_DATA_DRAGDROP) {
return OPERATOR_CANCELLED;
}
- ED_object_parent_clear(ob, 0);
+ ListBase *lb = event->customdata;
+ wmDrag *drag = lb->first;
+
+ for (wmDragID *drag_id = drag->ids.first; drag_id; drag_id = drag_id->next) {
+ if (GS(drag_id->id->name) == ID_OB) {
+ Object *object = (Object *)drag_id->id;
+
+ ED_object_parent_clear(object, 0);
+ }
+ }
DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_OBJECT | ND_TRANSFORM, NULL);
@@ -966,6 +895,12 @@ static int outliner_item_drag_drop_invoke(bContext *C,
return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
}
+ float view_mval[2];
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &view_mval[0], &view_mval[1]);
+ if (outliner_item_is_co_within_close_toggle(te, view_mval[0])) {
+ return (OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH);
+ }
+
wmDrag *drag = WM_event_start_drag(C, data.icon, WM_DRAG_ID, NULL, 0.0, WM_DRAG_NOP);
if (ELEM(GS(data.drag_id->name), ID_OB, ID_GR)) {
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c
index 55130ae8894..a2ca3254b30 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -31,6 +31,7 @@
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
+#include "DNA_constraint_types.h"
#include "DNA_object_force_types.h"
#include "BLI_math.h"
@@ -60,6 +61,7 @@
#include "ED_armature.h"
#include "ED_keyframing.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "WM_api.h"
@@ -175,8 +177,9 @@ static void restrictbutton_r_lay_cb(bContext *C, void *poin, void *UNUSED(poin2)
WM_event_add_notifier(C, NC_SCENE | ND_RENDER_OPTIONS, poin);
}
-static void restrictbutton_bone_visibility_cb(bContext *C, void *UNUSED(poin), void *poin2)
+static void restrictbutton_bone_visibility_cb(bContext *C, void *poin, void *poin2)
{
+ bArmature *arm = (bArmature *)poin;
Bone *bone = (Bone *)poin2;
if (bone->flag & BONE_HIDDEN_P) {
bone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
@@ -187,6 +190,7 @@ static void restrictbutton_bone_visibility_cb(bContext *C, void *UNUSED(poin), v
}
WM_event_add_notifier(C, NC_OBJECT | ND_POSE, NULL);
+ DEG_id_tag_update(&arm->id, ID_RECALC_COPY_ON_WRITE);
}
static void restrictbutton_bone_select_cb(bContext *C, void *UNUSED(poin), void *poin2)
@@ -442,14 +446,14 @@ static bool outliner_collection_is_isolated(Scene *scene,
else if (BKE_collection_has_collection(collection_ensure, (Collection *)collection_ensure_cmp) ||
BKE_collection_has_collection((Collection *)collection_ensure_cmp, collection_ensure)) {
/* This collection is either a parent or a child of the collection.
- * We expect it to be set "visble" already. */
+ * We expect it to be set "visible" already. */
if (value != value_cmp) {
return false;
}
}
else {
/* This collection is neither a parent nor a child of the collection.
- * We expect it to be "invisble". */
+ * We expect it to be "invisible". */
if (value == value_cmp) {
return false;
}
@@ -848,6 +852,7 @@ typedef struct RestrictProperties {
PropertyRNA *layer_collection_holdout, *layer_collection_indirect_only,
*layer_collection_hide_viewport;
PropertyRNA *modifier_show_viewport, *modifier_show_render;
+ PropertyRNA *constraint_enable;
} RestrictProperties;
/* We don't care about the value of the property
@@ -865,6 +870,7 @@ typedef struct RestrictPropertiesActive {
bool layer_collection_hide_viewport;
bool modifier_show_viewport;
bool modifier_show_render;
+ bool constraint_enable;
} RestrictPropertiesActive;
static void outliner_restrict_properties_enable_collection_set(
@@ -878,6 +884,7 @@ static void outliner_restrict_properties_enable_collection_set(
props_active->layer_collection_indirect_only = false;
props_active->object_hide_render = false;
props_active->modifier_show_render = false;
+ props_active->constraint_enable = false;
}
}
@@ -891,6 +898,7 @@ static void outliner_restrict_properties_enable_collection_set(
props_active->object_hide_viewport = false;
props_active->base_hide_viewport = false;
props_active->modifier_show_viewport = false;
+ props_active->constraint_enable = false;
}
}
@@ -995,6 +1003,8 @@ static void outliner_draw_restrictbuts(uiBlock *block,
props.modifier_show_viewport = RNA_struct_type_find_property(&RNA_Modifier, "show_viewport");
props.modifier_show_render = RNA_struct_type_find_property(&RNA_Modifier, "show_render");
+ props.constraint_enable = RNA_struct_type_find_property(&RNA_Constraint, "mute");
+
props.initialized = true;
}
@@ -1181,6 +1191,35 @@ static void outliner_draw_restrictbuts(uiBlock *block,
}
}
}
+ else if (tselem->type == TSE_CONSTRAINT) {
+ bConstraint *con = (bConstraint *)te->directdata;
+
+ PointerRNA ptr;
+ RNA_pointer_create(tselem->id, &RNA_Constraint, con, &ptr);
+
+ if (soops->show_restrict_flags & SO_RESTRICT_HIDE) {
+ bt = uiDefIconButR_prop(block,
+ UI_BTYPE_ICON_TOGGLE,
+ 0,
+ 0,
+ (int)(ar->v2d.cur.xmax - restrict_offsets.hide),
+ te->ys,
+ UI_UNIT_X,
+ UI_UNIT_Y,
+ &ptr,
+ props.constraint_enable,
+ -1,
+ 0,
+ 0,
+ -1,
+ -1,
+ NULL);
+ UI_but_flag_enable(bt, UI_BUT_DRAG_LOCK);
+ if (!props_active.constraint_enable) {
+ UI_but_flag_enable(bt, UI_BUT_INACTIVE);
+ }
+ }
+ }
else if (tselem->type == TSE_MODIFIER) {
ModifierData *md = (ModifierData *)te->directdata;
@@ -1243,7 +1282,7 @@ static void outliner_draw_restrictbuts(uiBlock *block,
UI_BTYPE_ICON_TOGGLE,
BONE_HIDDEN_P,
0,
- ICON_HIDE_OFF,
+ ICON_RESTRICT_VIEW_OFF,
(int)(ar->v2d.cur.xmax - restrict_offsets.viewport),
te->ys,
UI_UNIT_X,
@@ -1878,6 +1917,9 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
case TSE_DEFGROUP_BASE:
data.icon = ICON_GROUP_VERTEX;
break;
+ case TSE_DEFGROUP:
+ data.icon = ICON_GROUP_VERTEX;
+ break;
case TSE_BONE:
case TSE_EBONE:
data.icon = ICON_BONE_DATA;
@@ -1885,6 +1927,100 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
case TSE_CONSTRAINT_BASE:
data.icon = ICON_CONSTRAINT;
break;
+ case TSE_CONSTRAINT: {
+ bConstraint *con = te->directdata;
+ switch ((eBConstraint_Types)con->type) {
+ case CONSTRAINT_TYPE_CAMERASOLVER:
+ data.icon = ICON_CON_CAMERASOLVER;
+ break;
+ case CONSTRAINT_TYPE_FOLLOWTRACK:
+ data.icon = ICON_CON_FOLLOWTRACK;
+ break;
+ case CONSTRAINT_TYPE_OBJECTSOLVER:
+ data.icon = ICON_CON_OBJECTSOLVER;
+ break;
+ case CONSTRAINT_TYPE_LOCLIKE:
+ data.icon = ICON_CON_LOCLIKE;
+ break;
+ case CONSTRAINT_TYPE_ROTLIKE:
+ data.icon = ICON_CON_ROTLIKE;
+ break;
+ case CONSTRAINT_TYPE_SIZELIKE:
+ data.icon = ICON_CON_SIZELIKE;
+ break;
+ case CONSTRAINT_TYPE_TRANSLIKE:
+ data.icon = ICON_CON_TRANSLIKE;
+ break;
+ case CONSTRAINT_TYPE_DISTLIMIT:
+ data.icon = ICON_CON_DISTLIMIT;
+ break;
+ case CONSTRAINT_TYPE_LOCLIMIT:
+ data.icon = ICON_CON_LOCLIMIT;
+ break;
+ case CONSTRAINT_TYPE_ROTLIMIT:
+ data.icon = ICON_CON_ROTLIMIT;
+ break;
+ case CONSTRAINT_TYPE_SIZELIMIT:
+ data.icon = ICON_CON_SIZELIMIT;
+ break;
+ case CONSTRAINT_TYPE_SAMEVOL:
+ data.icon = ICON_CON_SAMEVOL;
+ break;
+ case CONSTRAINT_TYPE_TRANSFORM:
+ data.icon = ICON_CON_TRANSFORM;
+ break;
+ case CONSTRAINT_TYPE_TRANSFORM_CACHE:
+ data.icon = ICON_CON_TRANSFORM_CACHE;
+ break;
+ case CONSTRAINT_TYPE_CLAMPTO:
+ data.icon = ICON_CON_CLAMPTO;
+ break;
+ case CONSTRAINT_TYPE_DAMPTRACK:
+ data.icon = ICON_CON_TRACKTO;
+ break;
+ case CONSTRAINT_TYPE_KINEMATIC:
+ data.icon = ICON_CON_KINEMATIC;
+ break;
+ case CONSTRAINT_TYPE_LOCKTRACK:
+ data.icon = ICON_CON_LOCKTRACK;
+ break;
+ case CONSTRAINT_TYPE_SPLINEIK:
+ data.icon = ICON_CON_SPLINEIK;
+ break;
+ case CONSTRAINT_TYPE_STRETCHTO:
+ data.icon = ICON_CON_STRETCHTO;
+ break;
+ case CONSTRAINT_TYPE_TRACKTO:
+ data.icon = ICON_CON_TRACKTO;
+ break;
+ case CONSTRAINT_TYPE_ACTION:
+ data.icon = ICON_CON_ACTION;
+ break;
+ case CONSTRAINT_TYPE_ARMATURE:
+ data.icon = ICON_CON_ARMATURE;
+ break;
+ case CONSTRAINT_TYPE_CHILDOF:
+ data.icon = ICON_CON_CHILDOF;
+ break;
+ case CONSTRAINT_TYPE_MINMAX:
+ data.icon = ICON_CON_FLOOR;
+ break;
+ case CONSTRAINT_TYPE_FOLLOWPATH:
+ data.icon = ICON_CON_FOLLOWPATH;
+ break;
+ case CONSTRAINT_TYPE_PIVOT:
+ data.icon = ICON_CON_PIVOT;
+ break;
+ case CONSTRAINT_TYPE_SHRINKWRAP:
+ data.icon = ICON_CON_SHRINKWRAP;
+ break;
+
+ default:
+ data.icon = ICON_DOT;
+ break;
+ }
+ break;
+ }
case TSE_MODIFIER_BASE:
data.icon = ICON_MODIFIER_DATA;
break;
@@ -2137,30 +2273,64 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
data.icon = ICON_GROUP_BONE;
break;
case TSE_SEQUENCE:
- if (te->idcode == SEQ_TYPE_MOVIE) {
- data.icon = ICON_SEQUENCE;
- }
- else if (te->idcode == SEQ_TYPE_META) {
- data.icon = ICON_DOT;
- }
- else if (te->idcode == SEQ_TYPE_SCENE) {
- data.icon = ICON_SCENE;
- }
- else if (te->idcode == SEQ_TYPE_SOUND_RAM) {
- data.icon = ICON_SOUND;
- }
- else if (te->idcode == SEQ_TYPE_IMAGE) {
- data.icon = ICON_IMAGE;
- }
- else {
- data.icon = ICON_PARTICLES;
+ switch (te->idcode) {
+ case SEQ_TYPE_SCENE:
+ data.icon = ICON_SCENE_DATA;
+ break;
+ case SEQ_TYPE_MOVIECLIP:
+ data.icon = ICON_TRACKER;
+ break;
+ case SEQ_TYPE_MASK:
+ data.icon = ICON_MOD_MASK;
+ break;
+ case SEQ_TYPE_MOVIE:
+ data.icon = ICON_FILE_MOVIE;
+ break;
+ case SEQ_TYPE_SOUND_RAM:
+ data.icon = ICON_SOUND;
+ break;
+ case SEQ_TYPE_IMAGE:
+ data.icon = ICON_FILE_IMAGE;
+ break;
+ case SEQ_TYPE_COLOR:
+ case SEQ_TYPE_ADJUSTMENT:
+ data.icon = ICON_COLOR;
+ break;
+ case SEQ_TYPE_TEXT:
+ data.icon = ICON_FONT_DATA;
+ break;
+ case SEQ_TYPE_ADD:
+ case SEQ_TYPE_SUB:
+ case SEQ_TYPE_MUL:
+ case SEQ_TYPE_OVERDROP:
+ case SEQ_TYPE_ALPHAOVER:
+ case SEQ_TYPE_ALPHAUNDER:
+ case SEQ_TYPE_COLORMIX:
+ case SEQ_TYPE_MULTICAM:
+ case SEQ_TYPE_TRANSFORM:
+ case SEQ_TYPE_SPEED:
+ case SEQ_TYPE_GLOW:
+ case SEQ_TYPE_GAUSSIAN_BLUR:
+ data.icon = ICON_SHADERFX;
+ break;
+ case SEQ_TYPE_CROSS:
+ case SEQ_TYPE_GAMCROSS:
+ case SEQ_TYPE_WIPE:
+ data.icon = ICON_ARROW_LEFTRIGHT;
+ break;
+ case SEQ_TYPE_META:
+ data.icon = ICON_SEQ_STRIP_META;
+ break;
+ default:
+ data.icon = ICON_DOT;
+ break;
}
break;
case TSE_SEQ_STRIP:
data.icon = ICON_LIBRARY_DATA_DIRECT;
break;
case TSE_SEQUENCE_DUP:
- data.icon = ICON_OBJECT_DATA;
+ data.icon = ICON_SEQ_STRIP_DUPLICATE;
break;
case TSE_RNA_STRUCT:
if (RNA_struct_is_ID(te->rnaptr.type)) {
@@ -2407,9 +2577,9 @@ static void tselem_draw_layer_collection_enable_icon(
/* restrict column clip... it has been coded by simply overdrawing,
* doesn't work for buttons */
- char color[4];
+ uchar color[4];
int icon = RNA_property_ui_icon(exclude_prop);
- if (UI_icon_get_theme_color(icon, (uchar *)color)) {
+ if (UI_icon_get_theme_color(icon, color)) {
UI_icon_draw_ex(x, y, icon, U.inv_dpi_fac, alpha, 0.0f, color, true);
}
else {
@@ -2459,7 +2629,11 @@ static void tselem_draw_icon(uiBlock *block,
return;
}
+ /* Icon is covered by restrict buttons */
if (!is_clickable || x >= xmax) {
+ /* Reduce alpha to match icon buttons */
+ alpha *= 0.8f;
+
/* placement of icons, copied from interface_widgets.c */
float aspect = (0.8f * UI_UNIT_Y) / ICON_DEFAULT_HEIGHT;
x += 2.0f * aspect;
@@ -2467,8 +2641,8 @@ static void tselem_draw_icon(uiBlock *block,
/* restrict column clip... it has been coded by simply overdrawing,
* doesn't work for buttons */
- char color[4];
- if (UI_icon_get_theme_color(data.icon, (uchar *)color)) {
+ uchar color[4];
+ if (UI_icon_get_theme_color(data.icon, color)) {
UI_icon_draw_ex(x, y, data.icon, U.inv_dpi_fac, alpha, 0.0f, color, true);
}
else {
@@ -2567,7 +2741,6 @@ static void outliner_draw_iconrow_doit(uiBlock *block,
float ufac = UI_UNIT_X / 20.0f;
float icon_color[4], icon_border[4];
outliner_icon_background_colors(icon_color, icon_border);
- icon_color[3] *= alpha_fac;
if (active == OL_DRAWSEL_ACTIVE) {
UI_GetThemeColor4fv(TH_EDITED_OBJECT, icon_color);
icon_border[3] = 0.3f;
@@ -2592,6 +2765,9 @@ static void outliner_draw_iconrow_doit(uiBlock *block,
GPU_blend(true); /* Roundbox disables. */
}
+ if (tselem->flag & TSE_HIGHLIGHTED) {
+ alpha_fac += 0.5;
+ }
tselem_draw_icon(block, xmax, (float)*offsx, (float)ys, tselem, te, alpha_fac, false);
te->xs = *offsx;
te->ys = ys;
@@ -2599,7 +2775,12 @@ static void outliner_draw_iconrow_doit(uiBlock *block,
if (num_elements > 1) {
outliner_draw_iconrow_number(fstyle, *offsx, ys, num_elements);
+ te->flag |= TE_ICONROW_MERGED;
}
+ else {
+ te->flag |= TE_ICONROW;
+ }
+
(*offsx) += UI_UNIT_X;
}
@@ -2609,7 +2790,7 @@ static void outliner_draw_iconrow_doit(uiBlock *block,
* We use a continuum of indices until we get to the object data-blocks
* and we then make room for the object types.
*/
-static int tree_element_id_type_to_index(TreeElement *te)
+int tree_element_id_type_to_index(TreeElement *te)
{
TreeStoreElem *tselem = TREESTORE(te);
@@ -2739,7 +2920,7 @@ static void outliner_set_coord_tree_element(TreeElement *te, int startx, int sta
TreeElement *ten;
/* closed items may be displayed in row of parent, don't change their coordinate! */
- if ((te->flag & TE_ICONROW) == 0) {
+ if ((te->flag & TE_ICONROW) == 0 && (te->flag & TE_ICONROW_MERGED) == 0) {
/* store coord and continue, we need coordinates for elements outside view too */
te->xs = startx;
te->ys = starty;
@@ -3193,6 +3374,7 @@ static void outliner_draw_highlights_recursive(unsigned pos,
const SpaceOutliner *soops,
const ListBase *lb,
const float col_selection[4],
+ const float col_active[4],
const float col_highlight[4],
const float col_searchmatch[4],
int start_x,
@@ -3206,7 +3388,11 @@ static void outliner_draw_highlights_recursive(unsigned pos,
const int start_y = *io_start_y;
/* selection status */
- if (tselem->flag & TSE_SELECTED) {
+ if ((tselem->flag & TSE_ACTIVE) && (tselem->flag & TSE_SELECTED)) {
+ immUniformColor4fv(col_active);
+ immRecti(pos, 0, start_y, (int)ar->v2d.cur.xmax, start_y + UI_UNIT_Y);
+ }
+ else if (tselem->flag & TSE_SELECTED) {
immUniformColor4fv(col_selection);
immRecti(pos, 0, start_y, (int)ar->v2d.cur.xmax, start_y + UI_UNIT_Y);
}
@@ -3260,6 +3446,7 @@ static void outliner_draw_highlights_recursive(unsigned pos,
soops,
&te->subtree,
col_selection,
+ col_active,
col_highlight,
col_searchmatch,
start_x + UI_UNIT_X,
@@ -3271,10 +3458,12 @@ static void outliner_draw_highlights_recursive(unsigned pos,
static void outliner_draw_highlights(ARegion *ar, SpaceOutliner *soops, int startx, int *starty)
{
const float col_highlight[4] = {1.0f, 1.0f, 1.0f, 0.13f};
- float col_selection[4], col_searchmatch[4];
+ float col_selection[4], col_active[4], col_searchmatch[4];
UI_GetThemeColor3fv(TH_SELECT_HIGHLIGHT, col_selection);
col_selection[3] = 1.0f; /* no alpha */
+ UI_GetThemeColor3fv(TH_SELECT_ACTIVE, col_active);
+ col_active[3] = 1.0f; /* no alpha */
UI_GetThemeColor4fv(TH_MATCH, col_searchmatch);
col_searchmatch[3] = 0.5f;
@@ -3282,8 +3471,16 @@ static void outliner_draw_highlights(ARegion *ar, SpaceOutliner *soops, int star
GPUVertFormat *format = immVertexFormat();
uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_I32, 2, GPU_FETCH_INT_TO_FLOAT);
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
- outliner_draw_highlights_recursive(
- pos, ar, soops, &soops->tree, col_selection, col_highlight, col_searchmatch, startx, starty);
+ outliner_draw_highlights_recursive(pos,
+ ar,
+ soops,
+ &soops->tree,
+ col_selection,
+ col_active,
+ col_highlight,
+ col_searchmatch,
+ startx,
+ starty);
immUnbindProgram();
GPU_blend(false);
}
@@ -3439,6 +3636,17 @@ void draw_outliner(const bContext *C)
outliner_build_tree(mainvar, scene, view_layer, soops, ar); // always
+ /* If global sync select is dirty, flag other outliners */
+ if (ED_outliner_select_sync_is_dirty(C)) {
+ ED_outliner_select_sync_flag_outliners(C);
+ }
+
+ /* Sync selection state from view layer */
+ if (!ELEM(soops->outlinevis, SO_LIBRARIES, SO_DATA_API, SO_ID_ORPHANS) &&
+ soops->flag & SO_SYNC_SELECT) {
+ outliner_sync_selection(C, soops);
+ }
+
/* force display to pixel coords */
v2d->flag |= (V2D_PIXELOFS_X | V2D_PIXELOFS_Y);
/* set matrix for 2d-view controls */
diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c
index de6e89e47c4..943993cb810 100644
--- a/source/blender/editors/space_outliner/outliner_edit.c
+++ b/source/blender/editors/space_outliner/outliner_edit.c
@@ -101,9 +101,15 @@ static int outliner_highlight_update(bContext *C, wmOperator *UNUSED(op), const
ARegion *ar = CTX_wm_region(C);
SpaceOutliner *soops = CTX_wm_space_outliner(C);
- const float my = UI_view2d_region_to_view_y(&ar->v2d, event->mval[1]);
- TreeElement *hovered_te = outliner_find_item_at_y(soops, &soops->tree, my);
+ float view_mval[2];
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &view_mval[0], &view_mval[1]);
+
+ TreeElement *hovered_te = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]);
+
+ if (hovered_te) {
+ hovered_te = outliner_find_item_at_x_in_row(soops, hovered_te, view_mval[0], NULL);
+ }
bool changed = false;
if (!hovered_te || !(hovered_te->store_elem->flag & TSE_HIGHLIGHTED)) {
@@ -134,59 +140,108 @@ void OUTLINER_OT_highlight_update(wmOperatorType *ot)
/* Toggle Open/Closed ------------------------------------------- */
-static int do_outliner_item_openclose(
- bContext *C, SpaceOutliner *soops, TreeElement *te, const bool all, const float mval[2])
+/* Open or close a tree element, optionally toggling all children recursively */
+void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all)
{
+ TreeStoreElem *tselem = TREESTORE(te);
- if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) {
- TreeStoreElem *tselem = TREESTORE(te);
+ if (open) {
+ tselem->flag &= ~TSE_CLOSED;
+ }
+ else {
+ tselem->flag |= TSE_CLOSED;
+ }
- /* all below close/open? */
- if (all) {
- tselem->flag &= ~TSE_CLOSED;
- outliner_flag_set(
- &te->subtree, TSE_CLOSED, !outliner_flag_is_any_test(&te->subtree, TSE_CLOSED, 1));
- }
- else {
- if (tselem->flag & TSE_CLOSED) {
- tselem->flag &= ~TSE_CLOSED;
- }
- else {
- tselem->flag |= TSE_CLOSED;
+ if (toggle_all) {
+ outliner_flag_set(&te->subtree, TSE_CLOSED, !open);
+ }
+}
+
+typedef struct OpenCloseData {
+ TreeStoreElem *prev_tselem;
+ bool open;
+ int x_location;
+} OpenCloseData;
+
+static int outliner_item_openclose_modal(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ ARegion *ar = CTX_wm_region(C);
+ SpaceOutliner *soops = CTX_wm_space_outliner(C);
+
+ float view_mval[2];
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &view_mval[0], &view_mval[1]);
+
+ if (event->type == MOUSEMOVE) {
+ TreeElement *te = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]);
+
+ OpenCloseData *data = (OpenCloseData *)op->customdata;
+
+ /* Only openclose if mouse is not over the previously toggled element */
+ if (te && TREESTORE(te) != data->prev_tselem) {
+
+ /* Only toggle openclose on the same level as the first clicked element */
+ if (te->xs == data->x_location) {
+ outliner_item_openclose(te, data->open, false);
+ ED_region_tag_redraw(ar);
}
}
- return 1;
+ if (te) {
+ data->prev_tselem = TREESTORE(te);
+ }
+ else {
+ data->prev_tselem = NULL;
+ }
}
+ else if (event->val == KM_RELEASE) {
+ MEM_freeN(op->customdata);
- for (te = te->subtree.first; te; te = te->next) {
- if (do_outliner_item_openclose(C, soops, te, all, mval)) {
- return 1;
- }
+ return OPERATOR_FINISHED;
}
- return 0;
+
+ return OPERATOR_RUNNING_MODAL;
}
-/* event can enterkey, then it opens/closes */
-static int outliner_item_openclose(bContext *C, wmOperator *op, const wmEvent *event)
+static int outliner_item_openclose_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
ARegion *ar = CTX_wm_region(C);
SpaceOutliner *soops = CTX_wm_space_outliner(C);
- TreeElement *te;
- float fmval[2];
- const bool all = RNA_boolean_get(op->ptr, "all");
- UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
+ const bool toggle_all = RNA_boolean_get(op->ptr, "all");
- for (te = soops->tree.first; te; te = te->next) {
- if (do_outliner_item_openclose(C, soops, te, all, fmval)) {
- break;
+ float view_mval[2];
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &view_mval[0], &view_mval[1]);
+
+ TreeElement *te = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]);
+
+ if (te && outliner_item_is_co_within_close_toggle(te, view_mval[0])) {
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ const bool open = (tselem->flag & TSE_CLOSED) ||
+ (toggle_all && (outliner_flag_is_any_test(&te->subtree, TSE_CLOSED, 1)));
+
+ outliner_item_openclose(te, open, toggle_all);
+ ED_region_tag_redraw(ar);
+
+ /* Only toggle once for single click toggling */
+ if (event->type == LEFTMOUSE) {
+ return OPERATOR_FINISHED;
}
- }
- ED_region_tag_redraw(ar);
+ /* Store last expanded tselem and x coordinate of disclosure triangle */
+ OpenCloseData *toggle_data = MEM_callocN(sizeof(OpenCloseData), "open_close_data");
+ toggle_data->prev_tselem = tselem;
+ toggle_data->open = open;
+ toggle_data->x_location = te->xs;
- return OPERATOR_FINISHED;
+ /* Store the first clicked on element */
+ op->customdata = toggle_data;
+
+ WM_event_add_modal_handler(C, op);
+ return OPERATOR_RUNNING_MODAL;
+ }
+
+ return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
}
void OUTLINER_OT_item_openclose(wmOperatorType *ot)
@@ -195,11 +250,12 @@ void OUTLINER_OT_item_openclose(wmOperatorType *ot)
ot->idname = "OUTLINER_OT_item_openclose";
ot->description = "Toggle whether item under cursor is enabled or closed";
- ot->invoke = outliner_item_openclose;
+ ot->invoke = outliner_item_openclose_invoke;
+ ot->modal = outliner_item_openclose_modal;
ot->poll = ED_operator_outliner_active;
- RNA_def_boolean(ot->srna, "all", 1, "All", "Close or open all items");
+ RNA_def_boolean(ot->srna, "all", false, "All", "Close or open all items");
}
/* -------------------------------------------------------------------- */
@@ -330,10 +386,10 @@ void item_rename_cb(bContext *C,
do_item_rename(ar, te, tselem, reports);
}
-static int do_outliner_item_rename(ReportList *reports,
- ARegion *ar,
- TreeElement *te,
- const float mval[2])
+static void do_outliner_item_rename(ReportList *reports,
+ ARegion *ar,
+ TreeElement *te,
+ const float mval[2])
{
if (mval[1] > te->ys && mval[1] < te->ys + UI_UNIT_Y) {
TreeStoreElem *tselem = TREESTORE(te);
@@ -341,17 +397,12 @@ static int do_outliner_item_rename(ReportList *reports,
/* click on name */
if (mval[0] > te->xs + UI_UNIT_X * 2 && mval[0] < te->xend) {
do_item_rename(ar, te, tselem, reports);
- return 1;
}
- return 0;
}
for (te = te->subtree.first; te; te = te->next) {
- if (do_outliner_item_rename(reports, ar, te, mval)) {
- return 1;
- }
+ do_outliner_item_rename(reports, ar, te, mval);
}
- return 0;
}
static int outliner_item_rename(bContext *C, wmOperator *op, const wmEvent *event)
@@ -360,25 +411,34 @@ static int outliner_item_rename(bContext *C, wmOperator *op, const wmEvent *even
SpaceOutliner *soops = CTX_wm_space_outliner(C);
TreeElement *te;
float fmval[2];
- bool changed = false;
- UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
+ /* Rename active element if key pressed, otherwise rename element at cursor coordinates */
+ if (event->val == KM_PRESS) {
+ TreeElement *active_element = outliner_find_element_with_flag(&soops->tree, TSE_ACTIVE);
- for (te = soops->tree.first; te; te = te->next) {
- if (do_outliner_item_rename(op->reports, ar, te, fmval)) {
- changed = true;
- break;
+ if (active_element) {
+ do_item_rename(ar, active_element, TREESTORE(active_element), op->reports);
+ }
+ else {
+ BKE_report(op->reports, RPT_WARNING, "No active item to rename");
}
}
+ else {
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &fmval[0], &fmval[1]);
- return changed ? OPERATOR_FINISHED : OPERATOR_PASS_THROUGH;
+ for (te = soops->tree.first; te; te = te->next) {
+ do_outliner_item_rename(op->reports, ar, te, fmval);
+ }
+ }
+
+ return OPERATOR_FINISHED;
}
void OUTLINER_OT_item_rename(wmOperatorType *ot)
{
ot->name = "Rename";
ot->idname = "OUTLINER_OT_item_rename";
- ot->description = "Rename item under cursor";
+ ot->description = "Rename the active element";
ot->invoke = outliner_item_rename;
@@ -1103,6 +1163,10 @@ static int outliner_select_all_exec(bContext *C, wmOperator *op)
break;
}
+ if (soops->flag & SO_SYNC_SELECT) {
+ ED_outliner_select_sync_from_outliner(C, soops);
+ }
+
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
ED_region_tag_redraw_no_rebuild(ar);
@@ -1179,20 +1243,17 @@ static int outliner_open_back(TreeElement *te)
return retval;
}
-static int outliner_show_active_exec(bContext *C, wmOperator *UNUSED(op))
+/* Return element representing the active base or bone in the outliner, or NULL if none exists */
+static TreeElement *outliner_show_active_get_element(bContext *C,
+ SpaceOutliner *so,
+ ViewLayer *view_layer)
{
- SpaceOutliner *so = CTX_wm_space_outliner(C);
- ViewLayer *view_layer = CTX_data_view_layer(C);
- ARegion *ar = CTX_wm_region(C);
- View2D *v2d = &ar->v2d;
-
TreeElement *te;
- int xdelta, ytop;
Object *obact = OBACT(view_layer);
if (!obact) {
- return OPERATOR_CANCELLED;
+ return NULL;
}
te = outliner_find_id(so, &so->tree, &obact->id);
@@ -1215,25 +1276,50 @@ static int outliner_show_active_exec(bContext *C, wmOperator *UNUSED(op))
}
}
- if (te) {
- /* open up tree to active object/bone */
+ return te;
+}
+
+static void outliner_show_active(SpaceOutliner *so, ARegion *ar, TreeElement *te, ID *id)
+{
+ /* open up tree to active object/bone */
+ if (TREESTORE(te)->id == id) {
if (outliner_open_back(te)) {
outliner_set_coordinates(ar, so);
}
+ return;
+ }
+
+ for (TreeElement *ten = te->subtree.first; ten; ten = ten->next) {
+ outliner_show_active(so, ar, ten, id);
+ }
+}
+
+static int outliner_show_active_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ SpaceOutliner *so = CTX_wm_space_outliner(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ ARegion *ar = CTX_wm_region(C);
+ View2D *v2d = &ar->v2d;
+
+ TreeElement *active_element = outliner_show_active_get_element(C, so, view_layer);
- /* make te->ys center of view */
- ytop = te->ys + BLI_rcti_size_y(&v2d->mask) / 2;
- if (ytop > 0) {
- ytop = 0;
+ if (active_element) {
+ ID *id = TREESTORE(active_element)->id;
+
+ /* Expand all elements in the outliner with matching ID */
+ for (TreeElement *te = so->tree.first; te; te = te->next) {
+ outliner_show_active(so, ar, te, id);
}
- v2d->cur.ymax = (float)ytop;
- v2d->cur.ymin = (float)(ytop - BLI_rcti_size_y(&v2d->mask));
+ /* Center view on first element found */
+ int size_y = BLI_rcti_size_y(&v2d->mask) + 1;
+ int ytop = (active_element->ys + (size_y / 2));
+ int delta_y = ytop - v2d->cur.ymax;
- /* make te->xs ==> te->xend center of view */
- xdelta = (int)(te->xs - v2d->cur.xmin);
- v2d->cur.xmin += xdelta;
- v2d->cur.xmax += xdelta;
+ outliner_scroll_view(ar, delta_y);
+ }
+ else {
+ return OPERATOR_CANCELLED;
}
ED_region_tag_redraw_no_rebuild(ar);
@@ -1259,18 +1345,15 @@ void OUTLINER_OT_show_active(wmOperatorType *ot)
static int outliner_scroll_page_exec(bContext *C, wmOperator *op)
{
ARegion *ar = CTX_wm_region(C);
- int dy = BLI_rcti_size_y(&ar->v2d.mask);
- int up = 0;
+ int size_y = BLI_rcti_size_y(&ar->v2d.mask) + 1;
- if (RNA_boolean_get(op->ptr, "up")) {
- up = 1;
- }
+ bool up = RNA_boolean_get(op->ptr, "up");
- if (up == 0) {
- dy = -dy;
+ if (!up) {
+ size_y = -size_y;
}
- ar->v2d.cur.ymin += dy;
- ar->v2d.cur.ymax += dy;
+
+ outliner_scroll_view(ar, size_y);
ED_region_tag_redraw_no_rebuild(ar);
@@ -1697,7 +1780,7 @@ static void tree_element_to_path(TreeElement *te,
/* no ID, so check if entry is RNA-struct,
* and if that RNA-struct is an ID datablock to extract info from. */
if (tse->type == TSE_RNA_STRUCT) {
- /* ptr->data not ptr->id.data seems to be the one we want,
+ /* ptr->data not ptr->owner_id seems to be the one we want,
* since ptr->data is sometimes the owner of this ID? */
if (RNA_struct_is_ID(ptr->type)) {
*id = (ID *)ptr->data;
diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h
index fa28d119244..95e37dea249 100644
--- a/source/blender/editors/space_outliner/outliner_intern.h
+++ b/source/blender/editors/space_outliner/outliner_intern.h
@@ -40,7 +40,6 @@ struct TreeStoreElem;
struct ViewLayer;
struct bContext;
struct bPoseChannel;
-struct wmEvent;
struct wmKeyConfig;
struct wmOperatorType;
@@ -50,6 +49,14 @@ typedef enum TreeElementInsertType {
TE_INSERT_INTO,
} TreeElementInsertType;
+/* Use generic walk select after D4771 is committed */
+typedef enum WalkSelectDirection {
+ OUTLINER_SELECT_WALK_UP,
+ OUTLINER_SELECT_WALK_DOWN,
+ OUTLINER_SELECT_WALK_LEFT,
+ OUTLINER_SELECT_WALK_RIGHT,
+} WalkSelectDirection;
+
typedef enum TreeTraversalAction {
/* Continue traversal regularly, don't skip children. */
TRAVERSE_CONTINUE = 0,
@@ -131,6 +138,9 @@ enum {
TE_DISABLED = (1 << 4),
TE_DRAGGING = (1 << 5),
TE_CHILD_NOT_IN_COLLECTION = (1 << 6),
+ /* Child elements of the same type in the icon-row are drawn merged as one icon.
+ * This flag is set for an element that is part of these merged child icons. */
+ TE_ICONROW_MERGED = (1 << 7),
};
/* button events */
@@ -223,6 +233,8 @@ void outliner_collection_isolate_flag(struct Scene *scene,
const char *propname,
const bool value);
+int tree_element_id_type_to_index(TreeElement *te);
+
/* outliner_select.c -------------------------------------------- */
eOLDrawState tree_element_type_active(struct bContext *C,
struct Scene *scene,
@@ -253,6 +265,10 @@ void outliner_object_mode_toggle(struct bContext *C,
ViewLayer *view_layer,
Base *base);
+void outliner_element_activate(struct SpaceOutliner *soops, struct TreeStoreElem *tselem);
+
+bool outliner_item_is_co_within_close_toggle(TreeElement *te, float view_co_x);
+
/* outliner_edit.c ---------------------------------------------- */
typedef void (*outliner_operation_cb)(struct bContext *C,
struct ReportList *,
@@ -337,6 +353,8 @@ void item_object_mode_exit_cb(struct bContext *C,
void outliner_set_coordinates(struct ARegion *ar, struct SpaceOutliner *soops);
+void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all);
+
/* outliner_dragdrop.c */
void outliner_dropboxes(void);
@@ -364,6 +382,7 @@ void OUTLINER_OT_show_active(struct wmOperatorType *ot);
void OUTLINER_OT_show_hierarchy(struct wmOperatorType *ot);
void OUTLINER_OT_select_box(struct wmOperatorType *ot);
+void OUTLINER_OT_select_walk(struct wmOperatorType *ot);
void OUTLINER_OT_select_all(struct wmOperatorType *ot);
void OUTLINER_OT_expanded_toggle(struct wmOperatorType *ot);
@@ -380,6 +399,10 @@ void OUTLINER_OT_orphans_purge(struct wmOperatorType *ot);
/* outliner_tools.c ---------------------------------------------- */
+void merged_element_search_menu_invoke(struct bContext *C,
+ TreeElement *parent_te,
+ TreeElement *activate_te);
+
void OUTLINER_OT_operation(struct wmOperatorType *ot);
void OUTLINER_OT_scene_operation(struct wmOperatorType *ot);
void OUTLINER_OT_object_operation(struct wmOperatorType *ot);
@@ -439,7 +462,8 @@ TreeElement *outliner_find_item_at_y(const SpaceOutliner *soops,
float view_co_y);
TreeElement *outliner_find_item_at_x_in_row(const SpaceOutliner *soops,
const TreeElement *parent_te,
- float view_co_x);
+ float view_co_x,
+ bool *multiple_objects);
TreeElement *outliner_find_tse(struct SpaceOutliner *soops, const TreeStoreElem *tse);
TreeElement *outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem);
TreeElement *outliner_find_parent_element(ListBase *lb,
@@ -456,5 +480,12 @@ bool outliner_tree_traverse(const SpaceOutliner *soops,
TreeTraversalFunc func,
void *customdata);
float outliner_restrict_columns_width(const struct SpaceOutliner *soops);
+TreeElement *outliner_find_element_with_flag(const ListBase *lb, short flag);
+bool outliner_is_element_visible(const TreeElement *te);
+void outliner_scroll_view(struct ARegion *ar, int delta_y);
+
+/* outliner_sync.c ---------------------------------------------- */
+
+void outliner_sync_selection(const struct bContext *C, struct SpaceOutliner *soops);
#endif /* __OUTLINER_INTERN_H__ */
diff --git a/source/blender/editors/space_outliner/outliner_ops.c b/source/blender/editors/space_outliner/outliner_ops.c
index f155a2d5f89..4b57d4ad771 100644
--- a/source/blender/editors/space_outliner/outliner_ops.c
+++ b/source/blender/editors/space_outliner/outliner_ops.c
@@ -50,6 +50,7 @@ void outliner_operatortypes(void)
WM_operatortype_append(OUTLINER_OT_highlight_update);
WM_operatortype_append(OUTLINER_OT_item_activate);
WM_operatortype_append(OUTLINER_OT_select_box);
+ WM_operatortype_append(OUTLINER_OT_select_walk);
WM_operatortype_append(OUTLINER_OT_item_openclose);
WM_operatortype_append(OUTLINER_OT_item_rename);
WM_operatortype_append(OUTLINER_OT_item_drag_drop);
diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c
index c932766ab93..44e67fa1508 100644
--- a/source/blender/editors/space_outliner/outliner_select.c
+++ b/source/blender/editors/space_outliner/outliner_select.c
@@ -51,14 +51,16 @@
#include "BKE_workspace.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
#include "ED_armature.h"
+#include "ED_gpencil.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_select_utils.h"
#include "ED_sequencer.h"
#include "ED_undo.h"
-#include "ED_gpencil.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -251,9 +253,7 @@ static eOLDrawState active_viewlayer(bContext *C,
}
/**
- * Select object tree:
- * CTRL+LMB: Select/Deselect object and all children.
- * CTRL+SHIFT+LMB: Add/Remove object and all children.
+ * Select object tree
*/
static void do_outliner_object_select_recursive(ViewLayer *view_layer,
Object *ob_parent,
@@ -450,9 +450,9 @@ static eOLDrawState tree_element_active_material(bContext *C,
return OL_DRAWSEL_NONE;
}
-static eOLDrawState tree_element_active_camera(bContext *UNUSED(C),
+static eOLDrawState tree_element_active_camera(bContext *C,
Scene *scene,
- ViewLayer *UNUSED(sl),
+ ViewLayer *UNUSED(view_layer),
SpaceOutliner *soops,
TreeElement *te,
const eOLSetState set)
@@ -460,10 +460,21 @@ static eOLDrawState tree_element_active_camera(bContext *UNUSED(C),
Object *ob = (Object *)outliner_search_back(soops, te, ID_OB);
if (set != OL_SETSEL_NONE) {
+ scene->camera = ob;
+
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = bmain->wm.first;
+
+ WM_windows_scene_data_sync(&wm->windows, scene);
+ DEG_id_tag_update(&scene->id, ID_RECALC_COPY_ON_WRITE);
+ DEG_relations_tag_update(bmain);
+ WM_event_add_notifier(C, NC_SCENE | NA_EDITED, NULL);
+
return OL_DRAWSEL_NONE;
}
-
- return scene->camera == ob;
+ else {
+ return scene->camera == ob;
+ }
}
static eOLDrawState tree_element_active_world(bContext *C,
@@ -1083,6 +1094,13 @@ eOLDrawState tree_element_type_active(bContext *C,
/* ================================================ */
+/* Activate a tree store element and set the walk navigation start element */
+void outliner_element_activate(SpaceOutliner *soops, TreeStoreElem *tselem)
+{
+ outliner_flag_set(&soops->tree, TSE_ACTIVE | TSE_ACTIVE_WALK, false);
+ tselem->flag |= TSE_ACTIVE | TSE_ACTIVE_WALK;
+}
+
/**
* Action when clicking to activate an item (typically under the mouse cursor),
* but don't do any cursor intersection checks.
@@ -1114,7 +1132,8 @@ static void do_outliner_item_activate_tree_element(bContext *C,
else if (tselem->type == TSE_POSE_BASE) {
/* Support pose mode toggle, keeping the active object as is. */
}
- else {
+ else if (soops->flag & SO_SYNC_SELECT) {
+ /* Only activate when synced selection is enabled */
tree_element_set_active_object(C,
scene,
view_layer,
@@ -1125,6 +1144,9 @@ static void do_outliner_item_activate_tree_element(bContext *C,
recursive && tselem->type == 0);
}
+ /* Mark as active in the outliner */
+ outliner_element_activate(soops, tselem);
+
if (tselem->type == 0) { // the lib blocks
/* editmode? */
if (te->idcode == ID_SCE) {
@@ -1189,7 +1211,7 @@ static void do_outliner_item_activate_tree_element(bContext *C,
tree_element_active(C, scene, view_layer, soops, te, OL_SETSEL_NORMAL, false);
}
}
- else {
+ else if (soops->flag & SO_SYNC_SELECT) {
tree_element_type_active(C,
scene,
view_layer,
@@ -1211,7 +1233,8 @@ void outliner_item_select(SpaceOutliner *soops,
const bool toggle)
{
TreeStoreElem *tselem = TREESTORE(te);
- const short new_flag = toggle ? (tselem->flag ^ TSE_SELECTED) : (tselem->flag | TSE_SELECTED);
+ const short new_flag = (toggle && (tselem->flag & TSE_ACTIVE)) ? (tselem->flag ^ TSE_SELECTED) :
+ (tselem->flag | TSE_SELECTED);
if (extend == false) {
outliner_flag_set(&soops->tree, TSE_SELECTED, false);
@@ -1219,24 +1242,72 @@ void outliner_item_select(SpaceOutliner *soops,
tselem->flag = new_flag;
}
-static void outliner_item_toggle_closed(TreeElement *te, const bool toggle_children)
+static bool do_outliner_range_select_recursive(ListBase *lb,
+ TreeElement *active,
+ TreeElement *cursor,
+ bool selecting)
{
- TreeStoreElem *tselem = TREESTORE(te);
- if (toggle_children) {
- tselem->flag &= ~TSE_CLOSED;
+ for (TreeElement *te = lb->first; te; te = te->next) {
+ TreeStoreElem *tselem = TREESTORE(te);
- const bool all_opened = !outliner_flag_is_any_test(&te->subtree, TSE_CLOSED, 1);
- outliner_flag_set(&te->subtree, TSE_CLOSED, all_opened);
- }
- else {
- tselem->flag ^= TSE_CLOSED;
+ if (selecting) {
+ tselem->flag |= TSE_SELECTED;
+ }
+
+ /* Set state for selection */
+ if (te == active || te == cursor) {
+ selecting = !selecting;
+ }
+
+ if (selecting) {
+ tselem->flag |= TSE_SELECTED;
+ }
+
+ /* Don't look inside closed elements */
+ if (!(tselem->flag & TSE_CLOSED)) {
+ selecting = do_outliner_range_select_recursive(&te->subtree, active, cursor, selecting);
+ }
}
+
+ return selecting;
}
-static bool outliner_item_is_co_within_close_toggle(TreeElement *te, float view_co_x)
+/* Select a range of items between cursor and active element */
+static void do_outliner_range_select(bContext *C,
+ SpaceOutliner *soops,
+ TreeElement *cursor,
+ const bool extend)
{
- return ((te->flag & TE_ICONROW) == 0) && (view_co_x > te->xs) &&
- (view_co_x < te->xs + UI_UNIT_X);
+ TreeElement *active = outliner_find_element_with_flag(&soops->tree, TSE_ACTIVE);
+
+ /* If no active element exists, activate the element under the cursor */
+ if (!active) {
+ outliner_item_select(soops, cursor, false, false);
+ outliner_item_do_activate_from_tree_element(C, cursor, TREESTORE(cursor), false, false);
+ return;
+ }
+
+ TreeStoreElem *tselem = TREESTORE(active);
+ const bool active_selected = (tselem->flag & TSE_SELECTED);
+
+ if (!extend) {
+ outliner_flag_set(&soops->tree, TSE_SELECTED, false);
+ }
+
+ /* Select active if under cursor */
+ if (active == cursor) {
+ TREESTORE(cursor)->flag |= TSE_SELECTED;
+ return;
+ }
+
+ /* If active is not selected, select the element under the cursor */
+ if (!active_selected || !outliner_is_element_visible(active)) {
+ outliner_item_select(soops, cursor, false, false);
+ outliner_item_do_activate_from_tree_element(C, cursor, TREESTORE(cursor), false, false);
+ return;
+ }
+
+ do_outliner_range_select_recursive(&soops->tree, active, cursor, false);
}
static bool outliner_is_co_within_restrict_columns(const SpaceOutliner *soops,
@@ -1247,7 +1318,7 @@ static bool outliner_is_co_within_restrict_columns(const SpaceOutliner *soops,
}
/**
- * A version of #outliner_item_do_acticate_from_cursor that takes the tree element directly.
+ * A version of #outliner_item_do_activate_from_cursor that takes the tree element directly.
* and doesn't depend on the pointer position.
*
* This allows us to simulate clicking on an item without dealing with the mouse cursor.
@@ -1271,10 +1342,11 @@ void outliner_item_do_activate_from_tree_element(
static int outliner_item_do_activate_from_cursor(bContext *C,
const int mval[2],
const bool extend,
- const bool recursive,
+ const bool use_range,
const bool deselect_all)
{
ARegion *ar = CTX_wm_region(C);
+ Scene *scene = CTX_data_scene(C);
SpaceOutliner *soops = CTX_wm_space_outliner(C);
TreeElement *te;
float view_mval[2];
@@ -1292,21 +1364,36 @@ static int outliner_item_do_activate_from_cursor(bContext *C,
changed = true;
}
}
- else if (outliner_item_is_co_within_close_toggle(te, view_mval[0])) {
- outliner_item_toggle_closed(te, extend);
- changed = true;
- rebuild_tree = true;
+ /* Don't allow toggle on scene collection */
+ else if ((TREESTORE(te)->type != TSE_VIEW_COLLECTION_BASE) &&
+ outliner_item_is_co_within_close_toggle(te, view_mval[0])) {
+ return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
}
else {
- Scene *scene = CTX_data_scene(C);
ViewLayer *view_layer = CTX_data_view_layer(C);
- /* the row may also contain children, if one is hovered we want this instead of current te */
- TreeElement *activate_te = outliner_find_item_at_x_in_row(soops, te, view_mval[0]);
+
+ /* The row may also contain children, if one is hovered we want this instead of current te */
+ bool merged_elements = false;
+ TreeElement *activate_te = outliner_find_item_at_x_in_row(
+ soops, te, view_mval[0], &merged_elements);
+
+ /* If the selected icon was an aggregate of multiple elements, run the search popup */
+ if (merged_elements) {
+ merged_element_search_menu_invoke(C, te, activate_te);
+ return OPERATOR_CANCELLED;
+ }
+
TreeStoreElem *activate_tselem = TREESTORE(activate_te);
- outliner_item_select(soops, activate_te, extend, extend);
- do_outliner_item_activate_tree_element(
- C, scene, view_layer, soops, activate_te, activate_tselem, extend, recursive);
+ if (use_range) {
+ do_outliner_range_select(C, soops, activate_te, extend);
+ }
+ else {
+ outliner_item_select(soops, activate_te, extend, extend);
+ do_outliner_item_activate_tree_element(
+ C, scene, view_layer, soops, activate_te, activate_tselem, extend, false);
+ }
+
changed = true;
}
@@ -1317,7 +1404,10 @@ static int outliner_item_do_activate_from_cursor(bContext *C,
else {
ED_region_tag_redraw_no_rebuild(ar);
}
- ED_undo_push(C, "Outliner selection change");
+
+ if (soops->flag & SO_SYNC_SELECT) {
+ ED_outliner_select_sync_from_outliner(C, soops);
+ }
}
return OPERATOR_FINISHED;
@@ -1327,9 +1417,9 @@ static int outliner_item_do_activate_from_cursor(bContext *C,
static int outliner_item_activate_invoke(bContext *C, wmOperator *op, const wmEvent *event)
{
const bool extend = RNA_boolean_get(op->ptr, "extend");
- const bool recursive = RNA_boolean_get(op->ptr, "recursive");
+ const bool use_range = RNA_boolean_get(op->ptr, "extend_range");
const bool deselect_all = RNA_boolean_get(op->ptr, "deselect_all");
- return outliner_item_do_activate_from_cursor(C, event->mval, extend, recursive, deselect_all);
+ return outliner_item_do_activate_from_cursor(C, event->mval, extend, use_range, deselect_all);
}
void OUTLINER_OT_item_activate(wmOperatorType *ot)
@@ -1342,9 +1432,14 @@ void OUTLINER_OT_item_activate(wmOperatorType *ot)
ot->poll = ED_operator_outliner_active;
+ ot->flag |= OPTYPE_REGISTER | OPTYPE_UNDO;
+
PropertyRNA *prop;
RNA_def_boolean(ot->srna, "extend", true, "Extend", "Extend selection for activation");
- RNA_def_boolean(ot->srna, "recursive", false, "Recursive", "Select Objects and their children");
+ prop = RNA_def_boolean(
+ ot->srna, "extend_range", false, "Extend Range", "Select a range from active element");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+
prop = RNA_def_boolean(ot->srna,
"deselect_all",
false,
@@ -1402,9 +1497,44 @@ static int outliner_box_select_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
ED_region_tag_redraw(ar);
+ if (soops->flag & SO_SYNC_SELECT) {
+ ED_outliner_select_sync_from_outliner(C, soops);
+ }
+
return OPERATOR_FINISHED;
}
+/* Find if x coordinate is over an icon or name */
+static bool outliner_item_is_co_over_name_icons(TreeElement *te, float view_co_x)
+{
+ /* Special case: count area left of Scene Collection as empty space */
+ bool outside_left = (TREESTORE(te)->type == TSE_VIEW_COLLECTION_BASE) ?
+ (view_co_x > te->xs + UI_UNIT_X) :
+ (view_co_x > te->xs);
+
+ return outside_left && (view_co_x < te->xend);
+}
+
+static int outliner_box_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
+{
+ SpaceOutliner *soops = CTX_wm_space_outliner(C);
+ ARegion *ar = CTX_wm_region(C);
+ float view_mval[2];
+ const bool tweak = RNA_boolean_get(op->ptr, "tweak");
+
+ UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &view_mval[0], &view_mval[1]);
+
+ /* Find element clicked on */
+ TreeElement *te = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]);
+
+ /* Pass through if click is over name or icons, or not tweak event */
+ if (te && tweak && outliner_item_is_co_over_name_icons(te, view_mval[0])) {
+ return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
+ }
+
+ return WM_gesture_box_invoke(C, op, event);
+}
+
void OUTLINER_OT_select_box(wmOperatorType *ot)
{
/* identifiers */
@@ -1413,7 +1543,7 @@ void OUTLINER_OT_select_box(wmOperatorType *ot)
ot->description = "Use box selection to select tree elements";
/* api callbacks */
- ot->invoke = WM_gesture_box_invoke;
+ ot->invoke = outliner_box_select_invoke;
ot->exec = outliner_box_select_exec;
ot->modal = WM_gesture_box_modal;
ot->cancel = WM_gesture_box_cancel;
@@ -1424,8 +1554,242 @@ void OUTLINER_OT_select_box(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
/* properties */
+ PropertyRNA *prop;
+
+ prop = RNA_def_boolean(
+ ot->srna, "tweak", false, "Tweak", "Tweak gesture from empty space for box selection");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+
WM_operator_properties_gesture_box(ot);
WM_operator_properties_select_operation_simple(ot);
}
/* ****************************************************** */
+
+/* **************** Walk Select Tool ****************** */
+
+/* Given a tree element return the rightmost child that is visible in the outliner */
+static TreeElement *outliner_find_rightmost_visible_child(SpaceOutliner *soops, TreeElement *te)
+{
+ while (te->subtree.last) {
+ if (TSELEM_OPEN(TREESTORE(te), soops)) {
+ te = te->subtree.last;
+ }
+ else {
+ break;
+ }
+ }
+ return te;
+}
+
+/* Find previous visible element in the tree */
+static TreeElement *outliner_find_previous_element(SpaceOutliner *soops, TreeElement *walk_element)
+{
+ if (walk_element->prev) {
+ walk_element = outliner_find_rightmost_visible_child(soops, walk_element->prev);
+ }
+ else if (walk_element->parent) {
+ /* Use parent if at beginning of list */
+ walk_element = walk_element->parent;
+ }
+
+ return walk_element;
+}
+
+/* Recursively search up the tree until a successor to a given element is found */
+static TreeElement *outliner_element_find_successor_in_parents(TreeElement *te)
+{
+ TreeElement *successor = te;
+ while (successor->parent) {
+ if (successor->parent->next) {
+ te = successor->parent->next;
+ break;
+ }
+ else {
+ successor = successor->parent;
+ }
+ }
+
+ return te;
+}
+
+/* Find next visible element in the tree */
+static TreeElement *outliner_find_next_element(SpaceOutliner *soops, TreeElement *walk_element)
+{
+ TreeStoreElem *tselem = TREESTORE(walk_element);
+
+ if (TSELEM_OPEN(tselem, soops) && walk_element->subtree.first) {
+ walk_element = walk_element->subtree.first;
+ }
+ else if (walk_element->next) {
+ walk_element = walk_element->next;
+ }
+ else {
+ walk_element = outliner_element_find_successor_in_parents(walk_element);
+ }
+
+ return walk_element;
+}
+
+static TreeElement *do_outliner_select_walk(SpaceOutliner *soops,
+ TreeElement *walk_element,
+ const int direction,
+ const bool extend,
+ const bool toggle_all)
+{
+ TreeStoreElem *tselem = TREESTORE(walk_element);
+
+ if (!extend) {
+ outliner_flag_set(&soops->tree, TSE_SELECTED, false);
+ }
+ tselem->flag &= ~TSE_ACTIVE_WALK;
+
+ switch (direction) {
+ case OUTLINER_SELECT_WALK_UP:
+ walk_element = outliner_find_previous_element(soops, walk_element);
+ break;
+ case OUTLINER_SELECT_WALK_DOWN:
+ walk_element = outliner_find_next_element(soops, walk_element);
+ break;
+ case OUTLINER_SELECT_WALK_LEFT:
+ outliner_item_openclose(walk_element, false, toggle_all);
+ break;
+ case OUTLINER_SELECT_WALK_RIGHT:
+ outliner_item_openclose(walk_element, true, toggle_all);
+ break;
+ }
+
+ TreeStoreElem *tselem_new = TREESTORE(walk_element);
+
+ /* If new element is already selected, deselect the previous element */
+ if (extend) {
+ tselem->flag = (tselem_new->flag & TSE_SELECTED) ? (tselem->flag & ~TSE_SELECTED) :
+ (tselem->flag | TSE_SELECTED);
+ }
+
+ tselem_new->flag |= TSE_SELECTED | TSE_ACTIVE_WALK;
+
+ return walk_element;
+}
+
+/* Find walk select element, or set it if it does not exist.
+ * Changed is set to true if walk element is found, false if it was set */
+static TreeElement *find_walk_select_start_element(SpaceOutliner *soops, bool *changed)
+{
+ TreeElement *walk_element = outliner_find_element_with_flag(&soops->tree, TSE_ACTIVE_WALK);
+
+ *changed = false;
+
+ /* If no walk element exists, start from active */
+ if (!walk_element) {
+ TreeElement *active_element = outliner_find_element_with_flag(&soops->tree, TSE_ACTIVE);
+
+ /* If no active element exists, use the first element in the tree */
+ if (!active_element) {
+ walk_element = soops->tree.first;
+ }
+ else {
+ walk_element = active_element;
+ }
+
+ *changed = true;
+ }
+
+ /* If walk element is not visible, set that element's first visible parent as walk element */
+ if (!outliner_is_element_visible(walk_element)) {
+ TREESTORE(walk_element)->flag &= ~TSE_ACTIVE_WALK;
+
+ while (!outliner_is_element_visible(walk_element)) {
+ walk_element = walk_element->parent;
+ }
+ *changed = true;
+ }
+
+ return walk_element;
+}
+
+/* Scroll the outliner when the walk element reaches the top or bottom boundary */
+static void outliner_walk_scroll(ARegion *ar, TreeElement *te)
+{
+ /* Account for the header height */
+ int y_max = ar->v2d.cur.ymax - UI_UNIT_Y;
+ int y_min = ar->v2d.cur.ymin;
+
+ /* Scroll if walked position is beyond the border */
+ if (te->ys > y_max) {
+ outliner_scroll_view(ar, te->ys - y_max);
+ }
+ else if (te->ys < y_min) {
+ outliner_scroll_view(ar, -(y_min - te->ys));
+ }
+}
+
+static int outliner_walk_select_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ SpaceOutliner *soops = CTX_wm_space_outliner(C);
+ ARegion *ar = CTX_wm_region(C);
+
+ const short direction = RNA_enum_get(op->ptr, "direction");
+ const bool extend = RNA_boolean_get(op->ptr, "extend");
+ const bool toggle_all = RNA_boolean_get(op->ptr, "toggle_all");
+
+ bool changed;
+ TreeElement *walk_element = find_walk_select_start_element(soops, &changed);
+
+ /* If finding the starting walk select element did not move the element, proceed to walk */
+ if (!changed) {
+ walk_element = do_outliner_select_walk(soops, walk_element, direction, extend, toggle_all);
+ }
+ else {
+ TREESTORE(walk_element)->flag |= TSE_SELECTED | TSE_ACTIVE_WALK;
+ }
+
+ /* Scroll outliner to focus on walk element */
+ outliner_walk_scroll(ar, walk_element);
+
+ if (soops->flag & SO_SYNC_SELECT) {
+ ED_outliner_select_sync_from_outliner(C, soops);
+ }
+ ED_region_tag_redraw(ar);
+
+ return OPERATOR_FINISHED;
+}
+
+void OUTLINER_OT_select_walk(wmOperatorType *ot)
+{
+ static const EnumPropertyItem direction_items[] = {
+ {OUTLINER_SELECT_WALK_UP, "UP", 0, "Up", ""},
+ {OUTLINER_SELECT_WALK_DOWN, "DOWN", 0, "Down", ""},
+ {OUTLINER_SELECT_WALK_LEFT, "LEFT", 0, "Left", ""},
+ {OUTLINER_SELECT_WALK_RIGHT, "RIGHT", 0, "Right", ""},
+ {0, NULL, 0, NULL, NULL},
+ };
+
+ /* identifiers */
+ ot->name = "Walk Select";
+ ot->idname = "OUTLINER_OT_select_walk";
+ ot->description = "Use walk navigation to select tree elements";
+
+ /* api callbacks */
+ ot->invoke = outliner_walk_select_invoke;
+ ot->poll = ED_operator_outliner_active;
+
+ ot->flag |= OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* properties */
+ PropertyRNA *prop;
+ prop = RNA_def_enum(ot->srna,
+ "direction",
+ direction_items,
+ 0,
+ "Walk Direction",
+ "Select element in this direction");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ prop = RNA_def_boolean(ot->srna, "extend", false, "Extend", "Extend selection on walk");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ prop = RNA_def_boolean(
+ ot->srna, "toggle_all", false, "Toggle All", "Toggle open/close hierarchy");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+}
+
+/* ****************************************************** */
diff --git a/source/blender/editors/space_outliner/outliner_sync.c b/source/blender/editors/space_outliner/outliner_sync.c
new file mode 100644
index 00000000000..cf734526958
--- /dev/null
+++ b/source/blender/editors/space_outliner/outliner_sync.c
@@ -0,0 +1,554 @@
+/*
+ * 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) 2004 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup spoutliner
+ */
+
+#include <stdio.h>
+
+#include "DNA_armature_types.h"
+#include "DNA_layer_types.h"
+#include "DNA_outliner_types.h"
+#include "DNA_screen_types.h"
+#include "DNA_sequence_types.h"
+#include "DNA_space_types.h"
+
+#include "BLI_compiler_compat.h"
+#include "BLI_ghash.h"
+
+#include "BKE_armature.h"
+#include "BKE_context.h"
+#include "BKE_layer.h"
+#include "BKE_main.h"
+#include "BKE_sequencer.h"
+
+#include "DEG_depsgraph.h"
+
+#include "ED_armature.h"
+#include "ED_object.h"
+#include "ED_outliner.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "outliner_intern.h"
+
+/* Functions for tagging outliner selection syncing is dirty from operators */
+void ED_outliner_select_sync_from_object_tag(bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm->outliner_sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_OBJECT;
+}
+
+void ED_outliner_select_sync_from_edit_bone_tag(bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm->outliner_sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_EDIT_BONE;
+}
+
+void ED_outliner_select_sync_from_pose_bone_tag(bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm->outliner_sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_POSE_BONE;
+}
+
+void ED_outliner_select_sync_from_sequence_tag(bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm->outliner_sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_SEQUENCE;
+}
+
+void ED_outliner_select_sync_from_all_tag(bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ wm->outliner_sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_ALL;
+}
+
+bool ED_outliner_select_sync_is_dirty(const bContext *C)
+{
+ wmWindowManager *wm = CTX_wm_manager(C);
+ return wm->outliner_sync_select_dirty & WM_OUTLINER_SYNC_SELECT_FROM_ALL;
+}
+
+/* Copy sync select dirty flag from window manager to all outliners to be synced lazily on draw */
+void ED_outliner_select_sync_flag_outliners(const bContext *C)
+{
+ Main *bmain = CTX_data_main(C);
+ wmWindowManager *wm = CTX_wm_manager(C);
+
+ for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
+ for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
+ for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
+ if (sl->spacetype == SPACE_OUTLINER) {
+ SpaceOutliner *soutliner = (SpaceOutliner *)sl;
+
+ soutliner->sync_select_dirty |= wm->outliner_sync_select_dirty;
+ }
+ }
+ }
+ }
+
+ /* Clear global sync flag */
+ wm->outliner_sync_select_dirty = 0;
+}
+
+/**
+ * Outliner sync select dirty flags are not enough to determine which types to sync,
+ * outliner display mode also needs to be considered. This stores the types of data
+ * to sync to increase code clarity.
+ */
+typedef struct SyncSelectTypes {
+ bool object;
+ bool edit_bone;
+ bool pose_bone;
+ bool sequence;
+} SyncSelectTypes;
+
+/**
+ * Set which types of data to sync when syncing selection from the outliner based on object
+ * interaction mode and outliner display mode
+ */
+static void outliner_sync_select_from_outliner_set_types(bContext *C,
+ SpaceOutliner *soops,
+ SyncSelectTypes *sync_types)
+{
+ Object *obact = CTX_data_active_object(C);
+ Object *obedit = CTX_data_edit_object(C);
+
+ const bool sequence_view = soops->outlinevis == SO_SEQUENCE;
+
+ sync_types->object = !sequence_view && (obact && obact->mode == OB_MODE_OBJECT);
+ sync_types->edit_bone = !sequence_view && (obedit && obedit->type == OB_ARMATURE);
+ sync_types->pose_bone = !sequence_view && (obact && obact->mode == OB_MODE_POSE);
+ sync_types->sequence = sequence_view;
+}
+
+/**
+ * Current dirty flags and outliner display mode determine which type of syncing should occur.
+ * This is to ensure sync flag data is not lost on sync in the wrong display mode.
+ */
+static void outliner_sync_select_to_outliner_set_types(const bContext *C,
+ SpaceOutliner *soops,
+ SyncSelectTypes *sync_types)
+{
+ Object *obact = CTX_data_active_object(C);
+ Object *obedit = CTX_data_edit_object(C);
+
+ const bool sequence_view = soops->outlinevis == SO_SEQUENCE;
+
+ sync_types->object = !sequence_view && (obact && obact->mode == OB_MODE_OBJECT) &&
+ (soops->sync_select_dirty & WM_OUTLINER_SYNC_SELECT_FROM_OBJECT);
+ sync_types->edit_bone = !sequence_view && (obedit && obedit->type == OB_ARMATURE) &&
+ (soops->sync_select_dirty & WM_OUTLINER_SYNC_SELECT_FROM_EDIT_BONE);
+ sync_types->pose_bone = !sequence_view && (obact && obact->mode == OB_MODE_POSE) &&
+ (soops->sync_select_dirty & WM_OUTLINER_SYNC_SELECT_FROM_POSE_BONE);
+ sync_types->sequence = sequence_view &&
+ (soops->sync_select_dirty & WM_OUTLINER_SYNC_SELECT_FROM_SEQUENCE);
+}
+
+/**
+ * Stores items selected from a sync from the outliner. Prevents syncing the selection
+ * state of the last instance of an object linked in multiple collections.
+ */
+typedef struct SelectedItems {
+ GSet *objects;
+ GSet *edit_bones;
+ GSet *pose_bones;
+} SelectedItems;
+
+static void selected_items_init(SelectedItems *selected_items)
+{
+ selected_items->objects = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+ selected_items->edit_bones = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+ selected_items->pose_bones = BLI_gset_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, __func__);
+}
+
+static void selected_items_free(SelectedItems *selected_items)
+{
+ BLI_gset_free(selected_items->objects, NULL);
+ BLI_gset_free(selected_items->edit_bones, NULL);
+ BLI_gset_free(selected_items->pose_bones, NULL);
+}
+
+/* Check if an instance of this object been selected by the sync */
+static bool is_object_selected(GSet *selected_objects, Base *base)
+{
+ return BLI_gset_haskey(selected_objects, base);
+}
+
+/* Check if an instance of this edit bone been selected by the sync */
+static bool is_edit_bone_selected(GSet *selected_ebones, EditBone *ebone)
+{
+ return BLI_gset_haskey(selected_ebones, ebone);
+}
+
+/* Check if an instance of this pose bone been selected by the sync */
+static bool is_pose_bone_selected(GSet *selected_pbones, bPoseChannel *pchan)
+{
+ return BLI_gset_haskey(selected_pbones, pchan);
+}
+
+/* Add element's data to selected item set */
+static void add_selected_item(GSet *selected, void *data)
+{
+ BLI_gset_add(selected, data);
+}
+
+static void outliner_select_sync_to_object(ViewLayer *view_layer,
+ TreeElement *te,
+ TreeStoreElem *tselem,
+ GSet *selected_objects)
+{
+ Object *ob = (Object *)tselem->id;
+ Base *base = (te->directdata) ? (Base *)te->directdata :
+ BKE_view_layer_base_find(view_layer, ob);
+
+ if (base && (base->flag & BASE_SELECTABLE)) {
+ if (tselem->flag & TSE_SELECTED) {
+ ED_object_base_select(base, BA_SELECT);
+
+ add_selected_item(selected_objects, base);
+ }
+ else if (!is_object_selected(selected_objects, base)) {
+ ED_object_base_select(base, BA_DESELECT);
+ }
+ }
+}
+
+static void outliner_select_sync_to_edit_bone(ViewLayer *view_layer,
+ TreeElement *te,
+ TreeStoreElem *tselem,
+ GSet *selected_ebones)
+{
+ bArmature *arm = (bArmature *)tselem->id;
+ EditBone *ebone = (EditBone *)te->directdata;
+
+ short bone_flag = ebone->flag;
+
+ if (EBONE_SELECTABLE(arm, ebone)) {
+ if (tselem->flag & TSE_SELECTED) {
+ ebone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
+
+ add_selected_item(selected_ebones, ebone);
+ }
+ else if (!is_edit_bone_selected(selected_ebones, ebone)) {
+ ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
+ }
+ }
+
+ /* Tag if selection changed */
+ if (bone_flag != ebone->flag) {
+ Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
+ DEG_id_tag_update(&arm->id, ID_RECALC_SELECT);
+ WM_main_add_notifier(NC_OBJECT | ND_BONE_SELECT, obedit);
+ }
+}
+
+static void outliner_select_sync_to_pose_bone(TreeElement *te,
+ TreeStoreElem *tselem,
+ GSet *selected_pbones)
+{
+ Object *ob = (Object *)tselem->id;
+ bArmature *arm = ob->data;
+ bPoseChannel *pchan = (bPoseChannel *)te->directdata;
+
+ short bone_flag = pchan->bone->flag;
+
+ if (PBONE_SELECTABLE(arm, pchan->bone)) {
+ if (tselem->flag & TSE_SELECTED) {
+ pchan->bone->flag |= BONE_SELECTED;
+
+ add_selected_item(selected_pbones, pchan);
+ }
+ else if (!is_pose_bone_selected(selected_pbones, pchan)) {
+ pchan->bone->flag &= ~BONE_SELECTED;
+ }
+ }
+
+ /* Tag if selection changed */
+ if (bone_flag != pchan->bone->flag) {
+ DEG_id_tag_update(&arm->id, ID_RECALC_SELECT);
+ WM_main_add_notifier(NC_OBJECT | ND_BONE_SELECT, ob);
+ }
+}
+
+static void outliner_select_sync_to_sequence(Scene *scene, TreeStoreElem *tselem)
+{
+ Sequence *seq = (Sequence *)tselem->id;
+
+ if (tselem->flag & TSE_ACTIVE) {
+ BKE_sequencer_active_set(scene, seq);
+ }
+
+ if (tselem->flag & TSE_SELECTED) {
+ seq->flag |= SELECT;
+ }
+ else {
+ seq->flag &= ~SELECT;
+ }
+}
+
+/** Sync select and active flags from outliner to active view layer, bones, and sequencer. */
+static void outliner_sync_selection_from_outliner(Scene *scene,
+ ViewLayer *view_layer,
+ ListBase *tree,
+ const SyncSelectTypes *sync_types,
+ SelectedItems *selected_items)
+{
+
+ for (TreeElement *te = tree->first; te; te = te->next) {
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ if (tselem->type == 0 && te->idcode == ID_OB) {
+ if (sync_types->object) {
+ outliner_select_sync_to_object(view_layer, te, tselem, selected_items->objects);
+ }
+ }
+ else if (tselem->type == TSE_EBONE) {
+ if (sync_types->edit_bone) {
+ outliner_select_sync_to_edit_bone(view_layer, te, tselem, selected_items->edit_bones);
+ }
+ }
+ else if (tselem->type == TSE_POSE_CHANNEL) {
+ if (sync_types->pose_bone) {
+ outliner_select_sync_to_pose_bone(te, tselem, selected_items->pose_bones);
+ }
+ }
+ else if (tselem->type == TSE_SEQUENCE) {
+ if (sync_types->sequence) {
+ outliner_select_sync_to_sequence(scene, tselem);
+ }
+ }
+
+ outliner_sync_selection_from_outliner(
+ scene, view_layer, &te->subtree, sync_types, selected_items);
+ }
+}
+
+/* Set clean outliner and mark other outliners for syncing */
+void ED_outliner_select_sync_from_outliner(bContext *C, SpaceOutliner *soops)
+{
+ /* Don't sync in certain outliner display modes */
+ if (ELEM(soops->outlinevis, SO_LIBRARIES, SO_DATA_API, SO_ID_ORPHANS)) {
+ return;
+ }
+
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ SyncSelectTypes sync_types;
+ outliner_sync_select_from_outliner_set_types(C, soops, &sync_types);
+
+ /* To store elements that have been selected to prevent linked object sync errors */
+ SelectedItems selected_items;
+
+ selected_items_init(&selected_items);
+
+ outliner_sync_selection_from_outliner(
+ scene, view_layer, &soops->tree, &sync_types, &selected_items);
+
+ selected_items_free(&selected_items);
+
+ /* Tag for updates */
+ if (sync_types.object) {
+ DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+ }
+ if (sync_types.sequence) {
+ WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
+ }
+
+ /* Clear outliner sync select dirty flag to prevent a sync to the outliner on draw */
+ soops->sync_select_dirty &= ~WM_OUTLINER_SYNC_SELECT_FROM_ALL;
+}
+
+static void outliner_select_sync_from_object(ViewLayer *view_layer,
+ SpaceOutliner *soops,
+ Object *obact,
+ TreeElement *te,
+ TreeStoreElem *tselem)
+{
+ Object *ob = (Object *)tselem->id;
+ Base *base = (te->directdata) ? (Base *)te->directdata :
+ BKE_view_layer_base_find(view_layer, ob);
+ const bool is_selected = (base != NULL) && ((base->flag & BASE_SELECTED) != 0);
+
+ if (base && (ob == obact)) {
+ outliner_element_activate(soops, tselem);
+ }
+
+ if (is_selected) {
+ tselem->flag |= TSE_SELECTED;
+ }
+ else {
+ tselem->flag &= ~TSE_SELECTED;
+ }
+}
+
+static void outliner_select_sync_from_edit_bone(SpaceOutliner *soops,
+ EditBone *ebone_active,
+ TreeElement *te,
+ TreeStoreElem *tselem)
+{
+ EditBone *ebone = (EditBone *)te->directdata;
+
+ if (ebone == ebone_active) {
+ outliner_element_activate(soops, tselem);
+ }
+
+ if (ebone->flag & BONE_SELECTED) {
+ tselem->flag |= TSE_SELECTED;
+ }
+ else {
+ tselem->flag &= ~TSE_SELECTED;
+ }
+}
+
+static void outliner_select_sync_from_pose_bone(SpaceOutliner *soops,
+ bPoseChannel *pchan_active,
+ TreeElement *te,
+ TreeStoreElem *tselem)
+{
+ bPoseChannel *pchan = (bPoseChannel *)te->directdata;
+ Bone *bone = pchan->bone;
+
+ if (pchan == pchan_active) {
+ outliner_element_activate(soops, tselem);
+ }
+
+ if (bone->flag & BONE_SELECTED) {
+ tselem->flag |= TSE_SELECTED;
+ }
+ else {
+ tselem->flag &= ~TSE_SELECTED;
+ }
+}
+
+static void outliner_select_sync_from_sequence(SpaceOutliner *soops,
+ Sequence *sequence_active,
+ TreeStoreElem *tselem)
+{
+ Sequence *seq = (Sequence *)tselem->id;
+
+ if (seq == sequence_active) {
+ outliner_element_activate(soops, tselem);
+ }
+
+ if (seq->flag & SELECT) {
+ tselem->flag |= TSE_SELECTED;
+ }
+ else {
+ tselem->flag &= ~TSE_SELECTED;
+ }
+}
+
+/**
+ * Contains active object, bones, and sequence for syncing to prevent getting active data
+ * repeatedly throughout syncing to the outliner.
+ */
+typedef struct SyncSelectActiveData {
+ Object *object;
+ EditBone *edit_bone;
+ bPoseChannel *pose_channel;
+ Sequence *sequence;
+} SyncSelectActiveData;
+
+/** Sync select and active flags from active view layer, bones, and sequences to the outliner. */
+static void outliner_sync_selection_to_outliner(ViewLayer *view_layer,
+ SpaceOutliner *soops,
+ ListBase *tree,
+ SyncSelectActiveData *active_data,
+ const SyncSelectTypes *sync_types)
+{
+ for (TreeElement *te = tree->first; te; te = te->next) {
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ if (tselem->type == 0 && te->idcode == ID_OB) {
+ if (sync_types->object) {
+ outliner_select_sync_from_object(view_layer, soops, active_data->object, te, tselem);
+ }
+ }
+ else if (tselem->type == TSE_EBONE) {
+ if (sync_types->edit_bone) {
+ outliner_select_sync_from_edit_bone(soops, active_data->edit_bone, te, tselem);
+ }
+ }
+ else if (tselem->type == TSE_POSE_CHANNEL) {
+ if (sync_types->pose_bone) {
+ outliner_select_sync_from_pose_bone(soops, active_data->pose_channel, te, tselem);
+ }
+ }
+ else if (tselem->type == TSE_SEQUENCE) {
+ if (sync_types->sequence) {
+ outliner_select_sync_from_sequence(soops, active_data->sequence, tselem);
+ }
+ }
+ else {
+ tselem->flag &= ~TSE_SELECTED;
+ }
+
+ /* Sync subtree elements */
+ outliner_sync_selection_to_outliner(view_layer, soops, &te->subtree, active_data, sync_types);
+ }
+}
+
+/* Get active data from context */
+static void get_sync_select_active_data(const bContext *C, SyncSelectActiveData *active_data)
+{
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ active_data->object = OBACT(view_layer);
+ active_data->edit_bone = CTX_data_active_bone(C);
+ active_data->pose_channel = CTX_data_active_pose_bone(C);
+ active_data->sequence = BKE_sequencer_active_get(scene);
+}
+
+/* If outliner is dirty sync selection from view layer and sequwncer */
+void outliner_sync_selection(const bContext *C, SpaceOutliner *soops)
+{
+ if (soops->sync_select_dirty & WM_OUTLINER_SYNC_SELECT_FROM_ALL) {
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+
+ /* Set which types of data to sync from sync dirty flag and outliner display mode */
+ SyncSelectTypes sync_types;
+ outliner_sync_select_to_outliner_set_types(C, soops, &sync_types);
+
+ /* Store active object, bones, and sequence */
+ SyncSelectActiveData active_data;
+ get_sync_select_active_data(C, &active_data);
+
+ outliner_sync_selection_to_outliner(
+ view_layer, soops, &soops->tree, &active_data, &sync_types);
+
+ /* Keep any unsynced data in the dirty flag */
+ if (sync_types.object) {
+ soops->sync_select_dirty &= ~WM_OUTLINER_SYNC_SELECT_FROM_OBJECT;
+ }
+ if (sync_types.edit_bone) {
+ soops->sync_select_dirty &= ~WM_OUTLINER_SYNC_SELECT_FROM_EDIT_BONE;
+ }
+ if (sync_types.pose_bone) {
+ soops->sync_select_dirty &= ~WM_OUTLINER_SYNC_SELECT_FROM_POSE_BONE;
+ }
+ if (sync_types.sequence) {
+ soops->sync_select_dirty &= ~WM_OUTLINER_SYNC_SELECT_FROM_SEQUENCE;
+ }
+ }
+}
diff --git a/source/blender/editors/space_outliner/outliner_tools.c b/source/blender/editors/space_outliner/outliner_tools.c
index f9905cc4fcd..2c4a648da65 100644
--- a/source/blender/editors/space_outliner/outliner_tools.c
+++ b/source/blender/editors/space_outliner/outliner_tools.c
@@ -63,6 +63,7 @@
#include "ED_armature.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_scene.h"
#include "ED_screen.h"
#include "ED_sequencer.h"
@@ -478,6 +479,129 @@ void OUTLINER_OT_scene_operation(wmOperatorType *ot)
}
/* ******************************************** */
+/**
+ * Stores the parent and a child element of a merged icon-row icon for
+ * the merged select popup menu. The sub-tree of the parent is searched and
+ * the child is needed to only show elements of the same type in the popup.
+ */
+typedef struct MergedSearchData {
+ TreeElement *parent_element;
+ TreeElement *select_element;
+} MergedSearchData;
+
+static void merged_element_search_cb_recursive(
+ const ListBase *tree, short tselem_type, short type, const char *str, uiSearchItems *items)
+{
+ char name[64];
+ int iconid;
+
+ for (TreeElement *te = tree->first; te; te = te->next) {
+ TreeStoreElem *tselem = TREESTORE(te);
+
+ if (tree_element_id_type_to_index(te) == type && tselem_type == tselem->type) {
+ if (BLI_strcasestr(te->name, str)) {
+ BLI_strncpy(name, te->name, 64);
+
+ iconid = tree_element_get_icon(tselem, te).icon;
+
+ /* Don't allow duplicate named items */
+ if (UI_search_items_find_index(items, name) == -1) {
+ if (!UI_search_item_add(items, name, te, iconid)) {
+ break;
+ }
+ }
+ }
+ }
+
+ merged_element_search_cb_recursive(&te->subtree, tselem_type, type, str, items);
+ }
+}
+
+/* Get a list of elements that match the search string */
+static void merged_element_search_cb(const bContext *UNUSED(C),
+ void *data,
+ const char *str,
+ uiSearchItems *items)
+{
+ MergedSearchData *search_data = (MergedSearchData *)data;
+ TreeElement *parent = search_data->parent_element;
+ TreeElement *te = search_data->select_element;
+
+ int type = tree_element_id_type_to_index(te);
+
+ merged_element_search_cb_recursive(&parent->subtree, TREESTORE(te)->type, type, str, items);
+}
+
+/* Activate an element from the merged element search menu */
+static void merged_element_search_call_cb(struct bContext *C, void *UNUSED(arg1), void *element)
+{
+ SpaceOutliner *soops = CTX_wm_space_outliner(C);
+ TreeElement *te = (TreeElement *)element;
+
+ outliner_item_select(soops, te, false, false);
+ outliner_item_do_activate_from_tree_element(C, te, te->store_elem, false, false);
+
+ if (soops->flag & SO_SYNC_SELECT) {
+ ED_outliner_select_sync_from_outliner(C, soops);
+ }
+}
+
+/** Merged element search menu
+ * Created on activation of a merged or aggregated icon-row icon.
+ */
+static uiBlock *merged_element_search_menu(bContext *C, ARegion *ar, void *data)
+{
+ static char search[64] = "";
+ uiBlock *block;
+ uiBut *but;
+
+ /* Clear search on each menu creation */
+ *search = '\0';
+
+ block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
+ UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_MOVEMOUSE_QUIT | UI_BLOCK_SEARCH_MENU);
+ UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
+
+ short menu_width = 10 * UI_UNIT_X;
+ but = uiDefSearchBut(
+ block, search, 0, ICON_VIEWZOOM, sizeof(search), 10, 10, menu_width, UI_UNIT_Y, 0, 0, "");
+ UI_but_func_search_set(
+ but, NULL, merged_element_search_cb, data, false, merged_element_search_call_cb, NULL);
+ UI_but_flag_enable(but, UI_BUT_ACTIVATE_ON_INIT);
+
+ /* Fake button to hold space for search items */
+ uiDefBut(block,
+ UI_BTYPE_LABEL,
+ 0,
+ "",
+ 10,
+ 10 - UI_searchbox_size_y(),
+ menu_width,
+ UI_searchbox_size_y(),
+ NULL,
+ 0,
+ 0,
+ 0,
+ 0,
+ NULL);
+
+ /* Center the menu on the cursor */
+ UI_block_bounds_set_popup(block, 6, (const int[2]){-(menu_width / 2), 0});
+
+ return block;
+}
+
+void merged_element_search_menu_invoke(bContext *C,
+ TreeElement *parent_te,
+ TreeElement *activate_te)
+{
+ MergedSearchData *select_data = MEM_callocN(sizeof(MergedSearchData), "merge_search_data");
+ select_data->parent_element = parent_te;
+ select_data->select_element = activate_te;
+
+ UI_popup_block_invoke(C, merged_element_search_menu, select_data, MEM_freeN);
+}
+
static void object_select_cb(bContext *C,
ReportList *UNUSED(reports),
Scene *UNUSED(scene),
@@ -654,7 +778,7 @@ static void singleuser_action_cb(bContext *C,
if (id) {
IdAdtTemplate *iat = (IdAdtTemplate *)tsep->id;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop;
RNA_pointer_create(&iat->id, &RNA_AnimData, iat->adt, &ptr);
@@ -677,7 +801,7 @@ static void singleuser_world_cb(bContext *C,
/* need to use parent scene not just scene, otherwise may end up getting wrong one */
if (id) {
Scene *parscene = (Scene *)tsep->id;
- PointerRNA ptr = {{NULL}};
+ PointerRNA ptr = {NULL};
PropertyRNA *prop;
RNA_id_pointer_create(&parscene->id, &ptr);
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index cc062467dbe..c3168a7a532 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -297,7 +297,7 @@ static void outliner_add_scene_contents(SpaceOutliner *soops,
ViewLayer *view_layer;
for (view_layer = sce->view_layers.first; view_layer; view_layer = view_layer->next) {
- TreeElement *tenlay = outliner_add_element(soops, &ten->subtree, sce, te, TSE_R_LAYER, 0);
+ TreeElement *tenlay = outliner_add_element(soops, &ten->subtree, sce, ten, TSE_R_LAYER, 0);
tenlay->name = view_layer->name;
tenlay->directdata = view_layer;
}
@@ -314,7 +314,7 @@ static void outliner_add_scene_contents(SpaceOutliner *soops,
ten = outliner_add_element(soops, lb, sce, te, TSE_SCENE_OBJECTS_BASE, 0);
ten->name = IFACE_("Objects");
FOREACH_SCENE_OBJECT_BEGIN (sce, ob) {
- outliner_add_element(soops, &ten->subtree, ob, NULL, 0, 0);
+ outliner_add_element(soops, &ten->subtree, ob, ten, 0, 0);
}
FOREACH_SCENE_OBJECT_END;
outliner_make_object_parent_hierarchy(&ten->subtree);
@@ -766,7 +766,7 @@ static TreeElement *outliner_add_element(
ID *id = idv;
if (ELEM(type, TSE_RNA_STRUCT, TSE_RNA_PROPERTY, TSE_RNA_ARRAY_ELEM)) {
- id = ((PointerRNA *)idv)->id.data;
+ id = ((PointerRNA *)idv)->owner_id;
if (!id) {
id = ((PointerRNA *)idv)->data;
}
@@ -2008,6 +2008,9 @@ static int outliner_exclude_filter_get(SpaceOutliner *soops)
case SO_FILTER_OB_VISIBLE:
exclude_filter |= SO_FILTER_OB_STATE_VISIBLE;
break;
+ case SO_FILTER_OB_HIDDEN:
+ exclude_filter |= SO_FILTER_OB_STATE_HIDDEN;
+ break;
case SO_FILTER_OB_SELECTED:
exclude_filter |= SO_FILTER_OB_STATE_SELECTED;
break;
@@ -2086,6 +2089,11 @@ static bool outliner_element_visible_get(ViewLayer *view_layer,
return false;
}
}
+ else if (exclude_filter & SO_FILTER_OB_STATE_HIDDEN) {
+ if ((base->flag & BASE_VISIBLE) != 0) {
+ return false;
+ }
+ }
else if (exclude_filter & SO_FILTER_OB_STATE_SELECTED) {
if ((base->flag & BASE_SELECTED) == 0) {
return false;
@@ -2339,7 +2347,8 @@ void outliner_build_tree(
te = outliner_add_element(soops, &soops->tree, sce, NULL, 0, 0);
tselem = TREESTORE(te);
- if (sce == scene && show_opened) {
+ /* New scene elements open by default */
+ if ((sce == scene && show_opened) || !tselem->used) {
tselem->flag &= ~TSE_CLOSED;
}
diff --git a/source/blender/editors/space_outliner/outliner_utils.c b/source/blender/editors/space_outliner/outliner_utils.c
index f57dce97b38..5dfdf6f129b 100644
--- a/source/blender/editors/space_outliner/outliner_utils.c
+++ b/source/blender/editors/space_outliner/outliner_utils.c
@@ -24,11 +24,15 @@
#include "BLI_utildefines.h"
#include "DNA_action_types.h"
+#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "BKE_context.h"
#include "BKE_outliner_treehash.h"
+#include "BKE_layer.h"
#include "ED_armature.h"
+#include "ED_outliner.h"
#include "UI_interface.h"
#include "UI_view2d.h"
@@ -62,6 +66,38 @@ TreeElement *outliner_find_item_at_y(const SpaceOutliner *soops,
return NULL;
}
+static TreeElement *outliner_find_item_at_x_in_row_recursive(const TreeElement *parent_te,
+ float view_co_x,
+ bool *r_merged)
+{
+ TreeElement *child_te = parent_te->subtree.first;
+
+ bool over_element = false;
+
+ while (child_te) {
+ over_element = (view_co_x > child_te->xs) && (view_co_x < child_te->xend);
+ if ((child_te->flag & TE_ICONROW) && over_element) {
+ return child_te;
+ }
+ else if ((child_te->flag & TE_ICONROW_MERGED) && over_element) {
+ if (r_merged) {
+ *r_merged = true;
+ }
+ return child_te;
+ }
+
+ TreeElement *te = outliner_find_item_at_x_in_row_recursive(child_te, view_co_x, r_merged);
+ if (te != child_te) {
+ return te;
+ }
+
+ child_te = child_te->next;
+ }
+
+ /* return parent if no child is hovered */
+ return (TreeElement *)parent_te;
+}
+
/**
* Collapsed items can show their children as click-able icons. This function tries to find
* such an icon that represents the child item at x-coordinate \a view_co_x (view-space).
@@ -70,24 +106,14 @@ TreeElement *outliner_find_item_at_y(const SpaceOutliner *soops,
*/
TreeElement *outliner_find_item_at_x_in_row(const SpaceOutliner *soops,
const TreeElement *parent_te,
- float view_co_x)
+ float view_co_x,
+ bool *r_merged)
{
- /* if parent_te is opened, it doesn't show childs in row */
+ /* if parent_te is opened, it doesn't show children in row */
if (!TSELEM_OPEN(TREESTORE(parent_te), soops)) {
- /* no recursion, items can only display their direct children in the row */
- for (TreeElement *child_te = parent_te->subtree.first;
- /* don't look further if co_x is smaller than child position*/
- child_te && view_co_x >= child_te->xs;
-
- child_te = child_te->next) {
- if ((child_te->flag & TE_ICONROW) && (view_co_x > child_te->xs) &&
- (view_co_x < child_te->xend)) {
- return child_te;
- }
- }
+ return outliner_find_item_at_x_in_row_recursive(parent_te, view_co_x, r_merged);
}
- /* return parent if no child is hovered */
return (TreeElement *)parent_te;
}
@@ -300,3 +326,89 @@ float outliner_restrict_columns_width(const SpaceOutliner *soops)
}
return (num_columns * UI_UNIT_X + V2D_SCROLL_WIDTH);
}
+
+/* Find first tree element in tree with matching treestore flag */
+TreeElement *outliner_find_element_with_flag(const ListBase *lb, short flag)
+{
+ for (TreeElement *te = lb->first; te; te = te->next) {
+ if ((TREESTORE(te)->flag & flag) == flag) {
+ return te;
+ }
+ TreeElement *active_element = outliner_find_element_with_flag(&te->subtree, flag);
+ if (active_element) {
+ return active_element;
+ }
+ }
+ return NULL;
+}
+
+/* Find if element is visible in the outliner tree */
+bool outliner_is_element_visible(const TreeElement *te)
+{
+ TreeStoreElem *tselem;
+
+ while (te->parent) {
+ tselem = TREESTORE(te->parent);
+
+ if (tselem->flag & TSE_CLOSED) {
+ return false;
+ }
+ else {
+ te = te->parent;
+ }
+ }
+
+ return true;
+}
+
+/* Find if x coordinate is over element disclosure toggle */
+bool outliner_item_is_co_within_close_toggle(TreeElement *te, float view_co_x)
+{
+ return (view_co_x > te->xs) && (view_co_x < te->xs + UI_UNIT_X);
+}
+
+/* Scroll view vertically while keeping within total bounds */
+void outliner_scroll_view(ARegion *ar, int delta_y)
+{
+ int y_min = MIN2(ar->v2d.cur.ymin, ar->v2d.tot.ymin);
+
+ ar->v2d.cur.ymax += delta_y;
+ ar->v2d.cur.ymin += delta_y;
+
+ /* Adjust view if delta placed view outside total area */
+ int offset;
+ if (ar->v2d.cur.ymax > -UI_UNIT_Y) {
+ offset = ar->v2d.cur.ymax;
+ ar->v2d.cur.ymax -= offset;
+ ar->v2d.cur.ymin -= offset;
+ }
+ else if (ar->v2d.cur.ymin < y_min) {
+ offset = y_min - ar->v2d.cur.ymin;
+ ar->v2d.cur.ymax += offset;
+ ar->v2d.cur.ymin += offset;
+ }
+}
+
+/* Get base of object under cursor. Used for eyedropper tool */
+Base *ED_outliner_give_base_under_cursor(bContext *C, const int mval[2])
+{
+ ARegion *ar = CTX_wm_region(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ SpaceOutliner *soops = CTX_wm_space_outliner(C);
+ TreeElement *te;
+ Base *base = NULL;
+ float view_mval[2];
+
+ UI_view2d_region_to_view(&ar->v2d, mval[0], mval[1], &view_mval[0], &view_mval[1]);
+
+ te = outliner_find_item_at_y(soops, &soops->tree, view_mval[1]);
+ if (te) {
+ TreeStoreElem *tselem = TREESTORE(te);
+ if (tselem->type == 0) {
+ Object *ob = (Object *)tselem->id;
+ base = (te->directdata) ? (Base *)te->directdata : BKE_view_layer_base_find(view_layer, ob);
+ }
+ }
+
+ return base;
+}
diff --git a/source/blender/editors/space_outliner/space_outliner.c b/source/blender/editors/space_outliner/space_outliner.c
index 091efc56c09..79880c68120 100644
--- a/source/blender/editors/space_outliner/space_outliner.c
+++ b/source/blender/editors/space_outliner/space_outliner.c
@@ -131,6 +131,9 @@ static void outliner_main_region_listener(wmWindow *UNUSED(win),
ED_region_tag_redraw(ar);
break;
}
+ if (wmn->action & NA_EDITED) {
+ ED_region_tag_redraw(ar);
+ }
break;
case NC_OBJECT:
switch (wmn->data) {
@@ -145,13 +148,8 @@ static void outliner_main_region_listener(wmWindow *UNUSED(win),
ED_region_tag_redraw(ar);
break;
case ND_CONSTRAINT:
- switch (wmn->action) {
- case NA_ADDED:
- case NA_REMOVED:
- case NA_RENAME:
- ED_region_tag_redraw(ar);
- break;
- }
+ /* all constraint actions now, for reordering */
+ ED_region_tag_redraw(ar);
break;
case ND_MODIFIER:
/* all modifier actions now */
@@ -304,6 +302,8 @@ static SpaceLink *outliner_new(const ScrArea *UNUSED(area), const Scene *UNUSED(
soutliner->filter_id_type = ID_GR;
soutliner->show_restrict_flags = SO_RESTRICT_ENABLE | SO_RESTRICT_HIDE;
soutliner->outlinevis = SO_VIEW_LAYER;
+ soutliner->sync_select_dirty |= WM_OUTLINER_SYNC_SELECT_FROM_ALL;
+ soutliner->flag |= SO_SYNC_SELECT;
/* header */
ar = MEM_callocN(sizeof(ARegion), "header for outliner");
@@ -349,6 +349,9 @@ static SpaceLink *outliner_duplicate(SpaceLink *sl)
soutlinern->treestore = NULL;
soutlinern->treehash = NULL;
+ soutlinern->flag |= (soutliner->flag & SO_SYNC_SELECT);
+ soutlinern->sync_select_dirty = WM_OUTLINER_SYNC_SELECT_FROM_ALL;
+
return (SpaceLink *)soutlinern;
}
@@ -415,7 +418,7 @@ void ED_spacetype_outliner(void)
/* regions: main window */
art = MEM_callocN(sizeof(ARegionType), "spacetype outliner region");
art->regionid = RGN_TYPE_WINDOW;
- art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES;
+ art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D;
art->init = outliner_main_region_init;
art->draw = outliner_main_region_draw;
@@ -428,7 +431,7 @@ void ED_spacetype_outliner(void)
art = MEM_callocN(sizeof(ARegionType), "spacetype outliner header region");
art->regionid = RGN_TYPE_HEADER;
art->prefsizey = HEADERY;
- art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES | ED_KEYMAP_HEADER;
+ art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_HEADER;
art->init = outliner_header_region_init;
art->draw = outliner_header_region_draw;
diff --git a/source/blender/editors/space_sequencer/CMakeLists.txt b/source/blender/editors/space_sequencer/CMakeLists.txt
index d57be0c85c3..84ded1dd2c7 100644
--- a/source/blender/editors/space_sequencer/CMakeLists.txt
+++ b/source/blender/editors/space_sequencer/CMakeLists.txt
@@ -20,8 +20,8 @@ set(INC
../../blenkernel
../../blenlib
../../blentranslation
- ../../gpu
../../depsgraph
+ ../../gpu
../../imbuf
../../makesdna
../../makesrna
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index ea815bd5456..b15acb12d00 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -1045,9 +1045,8 @@ ImBuf *sequencer_ibuf_get(struct Main *bmain,
bmain, depsgraph, scene, rectx, recty, proxy_size, false, &context);
context.view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname);
- /* sequencer could start rendering, in this case we need to be sure it wouldn't be canceled
- * by Esc pressed somewhere in the past
- */
+ /* Sequencer could start rendering, in this case we need to be sure it wouldn't be canceled
+ * by Escape pressed somewhere in the past. */
G.is_break = false;
/* Rendering can change OGL context. Save & Restore framebuffer. */
@@ -2076,9 +2075,11 @@ void draw_timeline_seq(const bContext *C, ARegion *ar)
scene->r.cfra + scene->ed->over_ofs;
uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
- immUniformColor3f(0.2f, 0.2f, 0.2f);
+ immUniform1f("dash_width", 20.0f * U.pixelsize);
+ immUniform1f("dash_factor", 0.5f);
+ immUniformThemeColor(TH_CFRAME);
immBegin(GPU_PRIM_LINES, 2);
immVertex2f(pos, cfra_over, v2d->cur.ymin);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 2cdadfbd2ab..22b73c32bfe 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -194,7 +194,7 @@ static void seq_proxy_build_job(const bContext *C)
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- sa,
+ scene,
"Building Proxies",
WM_JOB_PROGRESS,
WM_JOB_TYPE_SEQ_BUILD_PROXY);
@@ -2813,10 +2813,12 @@ void SEQUENCER_OT_meta_separate(wmOperatorType *ot)
static int sequencer_view_all_exec(bContext *C, wmOperator *op)
{
ARegion *ar = CTX_wm_region(C);
- View2D *v2d = UI_view2d_fromcontext(C);
+ rctf box;
+
const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
- UI_view2d_smooth_view(C, ar, &v2d->tot, smooth_viewtx);
+ boundbox_seq(CTX_data_scene(C), &box);
+ UI_view2d_smooth_view(C, ar, &box, smooth_viewtx);
return OPERATOR_FINISHED;
}
@@ -3403,6 +3405,7 @@ void SEQUENCER_OT_copy(wmOperatorType *ot)
/* identifiers */
ot->name = "Copy";
ot->idname = "SEQUENCER_OT_copy";
+ ot->description = "Copy selected strips to clipboard";
/* api callbacks */
ot->exec = sequencer_copy_exec;
@@ -3468,6 +3471,7 @@ void SEQUENCER_OT_paste(wmOperatorType *ot)
/* identifiers */
ot->name = "Paste";
ot->idname = "SEQUENCER_OT_paste";
+ ot->description = "Paste strips from clipboard";
/* api callbacks */
ot->exec = sequencer_paste_exec;
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index dd04260d80e..851d3b5f3aa 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -34,7 +34,6 @@ struct ARegionType;
struct Depsgraph;
struct Main;
struct Scene;
-struct ScrArea;
struct Sequence;
struct SpaceSeq;
struct StripElem;
diff --git a/source/blender/editors/space_sequencer/sequencer_preview.c b/source/blender/editors/space_sequencer/sequencer_preview.c
index 81ddd0dd8cc..8ec3ed850d2 100644
--- a/source/blender/editors/space_sequencer/sequencer_preview.c
+++ b/source/blender/editors/space_sequencer/sequencer_preview.c
@@ -134,7 +134,7 @@ void sequencer_preview_add_sound(const bContext *C, Sequence *seq)
PreviewJobAudio *audiojob = MEM_callocN(sizeof(PreviewJobAudio), "preview_audio");
wm_job = WM_jobs_get(CTX_wm_manager(C),
CTX_wm_window(C),
- sa,
+ CTX_data_scene(C),
"Strip Previews",
WM_JOB_PROGRESS,
WM_JOB_TYPE_SEQ_BUILD_PREVIEW);
diff --git a/source/blender/editors/space_sequencer/sequencer_select.c b/source/blender/editors/space_sequencer/sequencer_select.c
index 57f86059d9d..affb6d3fd88 100644
--- a/source/blender/editors/space_sequencer/sequencer_select.c
+++ b/source/blender/editors/space_sequencer/sequencer_select.c
@@ -41,6 +41,7 @@
/* for menu/popup icons etc etc*/
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_sequencer.h"
#include "ED_select_utils.h"
@@ -49,6 +50,7 @@
/* own include */
#include "sequencer_intern.h"
+
static void *find_nearest_marker(int UNUSED(d1), int UNUSED(d2))
{
return NULL;
@@ -254,6 +256,8 @@ static int sequencer_de_select_all_exec(bContext *C, wmOperator *op)
}
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -293,6 +297,8 @@ static int sequencer_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
}
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -542,6 +548,8 @@ static int sequencer_select_invoke(bContext *C, wmOperator *op, const wmEvent *e
}
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
/* allowing tweaks */
@@ -668,6 +676,8 @@ static int sequencer_select_more_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_CANCELLED;
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -699,6 +709,8 @@ static int sequencer_select_less_exec(bContext *C, wmOperator *UNUSED(op))
return OPERATOR_CANCELLED;
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -750,6 +762,8 @@ static int sequencer_select_linked_pick_invoke(bContext *C, wmOperator *op, cons
selected = select_more_less_seq__internal(scene, 1, 1);
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -784,6 +798,8 @@ static int sequencer_select_linked_exec(bContext *C, wmOperator *UNUSED(op))
selected = select_more_less_seq__internal(scene, true, true);
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -832,6 +848,8 @@ static int sequencer_select_handles_exec(bContext *C, wmOperator *op)
}
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -876,6 +894,8 @@ static int sequencer_select_active_side_exec(bContext *C, wmOperator *op)
select_active_side(
ed->seqbasep, RNA_enum_get(op->ptr, "side"), seq_act->machine, seq_act->startdisp);
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -934,6 +954,8 @@ static int sequencer_box_select_exec(bContext *C, wmOperator *op)
}
}
+ ED_outliner_select_sync_from_sequence_tag(C);
+
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
@@ -1311,6 +1333,7 @@ static int sequencer_select_grouped_exec(bContext *C, wmOperator *op)
}
if (changed) {
+ ED_outliner_select_sync_from_sequence_tag(C);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER | NA_SELECTED, scene);
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/space_sequencer/space_sequencer.c b/source/blender/editors/space_sequencer/space_sequencer.c
index 12b446c3f4c..e1cf6d00b90 100644
--- a/source/blender/editors/space_sequencer/space_sequencer.c
+++ b/source/blender/editors/space_sequencer/space_sequencer.c
@@ -597,7 +597,7 @@ static void sequencer_main_region_message_subscribe(const struct bContext *UNUSE
&RNA_SequenceModifier,
&RNA_SequenceColorBalanceData,
};
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
for (int i = 0; i < ARRAY_SIZE(type_array); i++) {
msg_key_params.ptr.type = type_array[i];
WM_msg_subscribe_rna_params(
@@ -675,10 +675,9 @@ static void sequencer_preview_region_draw(const bContext *C, ARegion *ar)
WM_gizmomap_draw(ar->gizmo_map, C, WM_GIZMOMAP_DRAWSTEP_2D);
if ((U.uiflag & USER_SHOW_FPS) && ED_screen_animation_no_scrub(wm)) {
- rcti rect;
- ED_region_visible_rect(ar, &rect);
- int xoffset = rect.xmin + U.widget_unit;
- int yoffset = rect.ymax;
+ const rcti *rect = ED_region_visible_rect(ar);
+ int xoffset = rect->xmin + U.widget_unit;
+ int yoffset = rect->ymax;
ED_scene_draw_fps(scene, xoffset, &yoffset);
}
}
diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c
index 7d8424a5996..c1a3c79b0d8 100644
--- a/source/blender/editors/space_text/space_text.c
+++ b/source/blender/editors/space_text/space_text.c
@@ -63,6 +63,8 @@ static SpaceLink *text_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scen
stext->lheight = 12;
stext->tabnumber = 4;
stext->margin_column = 80;
+ stext->showsyntax = true;
+ stext->showlinenrs = true;
/* header */
ar = MEM_callocN(sizeof(ARegion), "header for text");
@@ -82,7 +84,7 @@ static SpaceLink *text_new(const ScrArea *UNUSED(area), const Scene *UNUSED(scen
BLI_addtail(&stext->regionbase, ar);
ar->regiontype = RGN_TYPE_UI;
- ar->alignment = RGN_ALIGN_LEFT;
+ ar->alignment = RGN_ALIGN_RIGHT;
ar->flag = RGN_FLAG_HIDDEN;
/* main region */
@@ -197,9 +199,7 @@ static void text_operatortypes(void)
WM_operatortype_append(TEXT_OT_duplicate_line);
WM_operatortype_append(TEXT_OT_convert_whitespace);
- WM_operatortype_append(TEXT_OT_uncomment);
- WM_operatortype_append(TEXT_OT_comment);
- WM_operatortype_append(TEXT_OT_toggle_comment);
+ WM_operatortype_append(TEXT_OT_comment_toggle);
WM_operatortype_append(TEXT_OT_unindent);
WM_operatortype_append(TEXT_OT_indent);
diff --git a/source/blender/editors/space_text/text_draw.c b/source/blender/editors/space_text/text_draw.c
index c03b804aa2c..e99bf680077 100644
--- a/source/blender/editors/space_text/text_draw.c
+++ b/source/blender/editors/space_text/text_draw.c
@@ -54,6 +54,7 @@ typedef struct TextDrawContext {
int font_id;
int cwidth;
int lheight_dpi;
+ bool syntax_highlight;
} TextDrawContext;
static void text_draw_context_init(const SpaceText *st, TextDrawContext *tdc)
@@ -61,6 +62,7 @@ static void text_draw_context_init(const SpaceText *st, TextDrawContext *tdc)
tdc->font_id = blf_mono_font;
tdc->cwidth = 0;
tdc->lheight_dpi = st->lheight_dpi;
+ tdc->syntax_highlight = st->showsyntax && ED_text_is_syntax_highlight_supported(st->text);
}
static void text_font_begin(const TextDrawContext *tdc)
@@ -240,7 +242,7 @@ void wrap_offset(
}
max = wrap_width(st, ar);
- cursin = txt_utf8_offset_to_column(linein->line, cursin);
+ cursin = BLI_str_utf8_offset_to_column(linein->line, cursin);
while (linep) {
start = 0;
@@ -323,7 +325,7 @@ void wrap_offset_in_line(
end = max;
chop = 1;
*offc = 0;
- cursin = txt_utf8_offset_to_column(linein->line, cursin);
+ cursin = BLI_str_utf8_offset_to_column(linein->line, cursin);
for (i = 0, j = 0; linein->line[j]; j += BLI_str_utf8_size_safe(linein->line + j)) {
int columns = BLI_str_utf8_char_width_safe(linein->line + j); /* = 1 for tab */
@@ -418,7 +420,7 @@ static int text_draw_wrapped(const SpaceText *st,
const char *format,
int skip)
{
- const bool use_syntax = (st->showsyntax && format);
+ const bool use_syntax = (tdc->syntax_highlight && format);
FlattenString fs;
int basex, lines;
int i, wrap, end, max, columns, padding; /* column */
@@ -514,7 +516,7 @@ static void text_draw(const SpaceText *st,
int y,
const char *format)
{
- const bool use_syntax = (st->showsyntax && format);
+ const bool use_syntax = (tdc->syntax_highlight && format);
FlattenString fs;
int columns, size, n, w = 0, padding, amount = 0;
const char *in = NULL;
@@ -1383,8 +1385,8 @@ static void draw_brackets(const SpaceText *st, const TextDrawContext *tdc, ARegi
char ch;
- // showsyntax must be on or else the format string will be null
- if (!text->curl || !st->showsyntax) {
+ // syntax_highlight must be on or else the format string will be null
+ if (!text->curl || !tdc->syntax_highlight) {
return;
}
@@ -1400,7 +1402,7 @@ static void draw_brackets(const SpaceText *st, const TextDrawContext *tdc, ARegi
linep = startl;
c = startc;
- fc = txt_utf8_offset_to_index(linep->line, startc);
+ fc = BLI_str_utf8_offset_to_index(linep->line, startc);
endl = NULL;
endc = -1;
find = -b;
@@ -1576,7 +1578,7 @@ void draw_text_main(SpaceText *st, ARegion *ar)
tmp = text->lines.first;
lineno = 0;
for (i = 0; i < st->top && tmp; i++) {
- if (st->showsyntax && !tmp->format) {
+ if (tdc.syntax_highlight && !tmp->format) {
tft->format_line(st, tmp, false);
}
@@ -1631,7 +1633,7 @@ void draw_text_main(SpaceText *st, ARegion *ar)
UI_FontThemeColor(tdc.font_id, TH_TEXT);
for (i = 0; y > clip_min_y && i < st->viewlines && tmp; i++, tmp = tmp->next) {
- if (st->showsyntax && !tmp->format) {
+ if (tdc.syntax_highlight && !tmp->format) {
tft->format_line(st, tmp, false);
}
diff --git a/source/blender/editors/space_text/text_format.c b/source/blender/editors/space_text/text_format.c
index 8c102dc009e..48ee30e450f 100644
--- a/source/blender/editors/space_text/text_format.c
+++ b/source/blender/editors/space_text/text_format.c
@@ -25,10 +25,13 @@
#include "MEM_guardedalloc.h"
#include "BLI_blenlib.h"
+#include "BLI_string_utils.h"
#include "DNA_text_types.h"
#include "DNA_space_types.h"
+#include "ED_text.h"
+
#include "text_format.h"
/****************** flatten string **********************/
@@ -224,3 +227,38 @@ TextFormatType *ED_text_format_get(Text *text)
return tft_lb.first;
}
}
+
+bool ED_text_is_syntax_highlight_supported(Text *text)
+{
+ if (text == NULL) {
+ return false;
+ }
+
+ TextFormatType *tft;
+
+ const char *text_ext = BLI_path_extension(text->id.name + 2);
+ if (text_ext == NULL) {
+ /* Extensionless datablocks are considered highlightable as Python. */
+ return true;
+ }
+ text_ext++; /* skip the '.' */
+ if (BLI_string_is_decimal(text_ext)) {
+ /* "Text.001" is treated as extensionless, and thus highlightable. */
+ return true;
+ }
+
+ /* Check all text formats in the static list */
+ for (tft = tft_lb.first; tft; tft = tft->next) {
+ /* All formats should have an ext, but just in case */
+ const char **ext;
+ for (ext = tft->ext; *ext; ext++) {
+ /* If extension matches text name, return the matching tft */
+ if (BLI_strcasecmp(text_ext, *ext) == 0) {
+ return true;
+ }
+ }
+ }
+
+ /* The filename has a non-numerical extension that we could not highlight. */
+ return false;
+}
diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h
index 400405155f8..7a1dd312d02 100644
--- a/source/blender/editors/space_text/text_intern.h
+++ b/source/blender/editors/space_text/text_intern.h
@@ -119,9 +119,7 @@ void TEXT_OT_cut(struct wmOperatorType *ot);
void TEXT_OT_duplicate_line(struct wmOperatorType *ot);
void TEXT_OT_convert_whitespace(struct wmOperatorType *ot);
-void TEXT_OT_uncomment(struct wmOperatorType *ot);
-void TEXT_OT_comment(struct wmOperatorType *ot);
-void TEXT_OT_toggle_comment(struct wmOperatorType *ot);
+void TEXT_OT_comment_toggle(struct wmOperatorType *ot);
void TEXT_OT_unindent(struct wmOperatorType *ot);
void TEXT_OT_indent(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index 95e7d906b11..e1550deb659 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -1209,130 +1209,68 @@ void TEXT_OT_line_break(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Comment Operator
+/** \name Toggle-Comment Operator
* \{ */
-static int text_comment_exec(bContext *C, wmOperator *UNUSED(op))
+static int text_comment_exec(bContext *C, wmOperator *op)
{
Text *text = CTX_data_edit_text(C);
+ int type = RNA_enum_get(op->ptr, "type");
- if (txt_has_sel(text)) {
- text_drawcache_tag_update(CTX_wm_space_text(C), 0);
-
- ED_text_undo_push_init(C);
-
- txt_order_cursors(text, false);
- txt_comment(text);
- text_update_edited(text);
-
- text_update_cursor_moved(C);
- WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
- return OPERATOR_FINISHED;
- }
-
- return OPERATOR_CANCELLED;
-}
-
-void TEXT_OT_comment(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Comment";
- ot->idname = "TEXT_OT_comment";
- ot->description = "Convert selected text to comment";
-
- /* api callbacks */
- ot->exec = text_comment_exec;
- ot->poll = text_edit_poll;
-
- /* flags */
- ot->flag = OPTYPE_UNDO;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Uncomment Operator
- * \{ */
+ text_drawcache_tag_update(CTX_wm_space_text(C), 0);
-static int text_uncomment_exec(bContext *C, wmOperator *UNUSED(op))
-{
- Text *text = CTX_data_edit_text(C);
+ ED_text_undo_push_init(C);
if (txt_has_sel(text)) {
- text_drawcache_tag_update(CTX_wm_space_text(C), 0);
-
- ED_text_undo_push_init(C);
-
txt_order_cursors(text, false);
- txt_uncomment(text);
- text_update_edited(text);
-
- text_update_cursor_moved(C);
- WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
-
- return OPERATOR_FINISHED;
}
- return OPERATOR_CANCELLED;
-}
-
-void TEXT_OT_uncomment(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name = "Uncomment";
- ot->idname = "TEXT_OT_uncomment";
- ot->description = "Convert selected comment to text";
-
- /* api callbacks */
- ot->exec = text_uncomment_exec;
- ot->poll = text_edit_poll;
-
- /* flags */
- ot->flag = OPTYPE_UNDO;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Toggle-Comment Operator
- * \{ */
-
-static int text_toggle_comment_exec(bContext *C, wmOperator *UNUSED(op))
-{
- Text *text = CTX_data_edit_text(C);
-
- if (txt_has_sel(text)) {
- text_drawcache_tag_update(CTX_wm_space_text(C), 0);
-
- ED_text_undo_push_init(C);
-
- txt_order_cursors(text, false);
- if (txt_uncomment(text) == false) {
+ switch (type) {
+ case 1:
txt_comment(text);
- }
- text_update_edited(text);
+ break;
+ case -1:
+ txt_uncomment(text);
+ break;
+ default:
+ if (txt_uncomment(text) == false) {
+ txt_comment(text);
+ }
+ break;
+ }
- text_update_cursor_moved(C);
- WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
+ text_update_edited(text);
- return OPERATOR_FINISHED;
- }
+ text_update_cursor_moved(C);
+ WM_event_add_notifier(C, NC_TEXT | NA_EDITED, text);
- return OPERATOR_CANCELLED;
+ return OPERATOR_FINISHED;
}
-void TEXT_OT_toggle_comment(wmOperatorType *ot)
+void TEXT_OT_comment_toggle(wmOperatorType *ot)
{
+ static const EnumPropertyItem comment_items[] = {
+ {0, "TOGGLE", 0, "Toggle Comments", NULL},
+ {1, "COMMENT", 0, "Comment", NULL},
+ {-1, "UNCOMMENT", 0, "Un-Comment", NULL},
+ {0, NULL, 0, NULL, NULL},
+ };
+
/* identifiers */
- ot->name = "Toggle Comment";
- ot->idname = "TEXT_OT_toggle_comment";
+ ot->name = "Toggle Comments";
+ ot->idname = "TEXT_OT_comment_toggle";
/* api callbacks */
- ot->exec = text_toggle_comment_exec;
+ ot->exec = text_comment_exec;
ot->poll = text_edit_poll;
/* flags */
ot->flag = OPTYPE_UNDO;
+
+ /* properties */
+ PropertyRNA *prop;
+ prop = RNA_def_enum(ot->srna, "type", comment_items, 0, "Type", "Add or remove comments");
+ RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
}
/** \} */
@@ -1887,7 +1825,7 @@ static void txt_wrap_move_bol(SpaceText *st, ARegion *ar, const bool sel)
if (j >= oldc) {
if (ch == '\0') {
- *charp = txt_utf8_column_to_offset((*linep)->line, start);
+ *charp = BLI_str_utf8_offset_from_column((*linep)->line, start);
}
loop = 0;
break;
@@ -1903,7 +1841,7 @@ static void txt_wrap_move_bol(SpaceText *st, ARegion *ar, const bool sel)
}
else if (ch == ' ' || ch == '-' || ch == '\0') {
if (j >= oldc) {
- *charp = txt_utf8_column_to_offset((*linep)->line, start);
+ *charp = BLI_str_utf8_offset_from_column((*linep)->line, start);
loop = 0;
break;
}
diff --git a/source/blender/editors/space_text/text_undo.c b/source/blender/editors/space_text/text_undo.c
index 6ecb2b731b0..4a628cf70e4 100644
--- a/source/blender/editors/space_text/text_undo.c
+++ b/source/blender/editors/space_text/text_undo.c
@@ -61,19 +61,69 @@
#define ARRAY_CHUNK_SIZE 128
+/**
+ * Only stores the state of a text buffer.
+ */
+typedef struct TextState {
+ BArrayState *buf_array_state;
+
+ int cursor_line, cursor_line_select;
+ int cursor_column, cursor_column_select;
+} TextState;
+
+static void text_state_encode(TextState *state, Text *text, BArrayStore *buffer_store)
+{
+ int buf_len = 0;
+ uchar *buf = (uchar *)txt_to_buf_for_undo(text, &buf_len);
+ state->buf_array_state = BLI_array_store_state_add(buffer_store, buf, buf_len, NULL);
+ MEM_freeN(buf);
+
+ state->cursor_line = txt_get_span(text->lines.first, text->curl);
+ state->cursor_column = text->curc;
+
+ if (txt_has_sel(text)) {
+ state->cursor_line_select = (text->curl == text->sell) ?
+ state->cursor_line :
+ txt_get_span(text->lines.first, text->sell);
+ state->cursor_column_select = text->selc;
+ }
+ else {
+ state->cursor_line_select = state->cursor_line;
+ state->cursor_column_select = state->cursor_column;
+ }
+}
+
+static void text_state_decode(TextState *state, Text *text)
+{
+ size_t buf_len;
+ {
+ const uchar *buf = BLI_array_store_state_data_get_alloc(state->buf_array_state, &buf_len);
+ txt_from_buf_for_undo(text, (const char *)buf, buf_len);
+ MEM_freeN((void *)buf);
+ }
+
+ const bool has_select = ((state->cursor_line != state->cursor_line_select) ||
+ (state->cursor_column != state->cursor_column_select));
+ if (has_select) {
+ txt_move_to(text, state->cursor_line_select, state->cursor_column_select, false);
+ }
+ txt_move_to(text, state->cursor_line, state->cursor_column, has_select);
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Implements ED Undo System
+ * \{ */
+
typedef struct TextUndoStep {
UndoStep step;
UndoRefID_Text text_ref;
- struct {
- BArrayState *state;
- int buf_len;
- } data;
-
- struct {
- int line, line_select;
- int column, column_select;
- } cursor;
-
+ /**
+ * First state is optional (initial state),
+ * the second is the state after the operation is done.
+ */
+ TextState states[2];
} TextUndoStep;
static struct {
@@ -81,6 +131,21 @@ static struct {
int users;
} g_text_buffers = {NULL};
+static size_t text_undosys_step_encode_to_state(TextState *state, Text *text)
+{
+ BLI_assert(BLI_array_is_zeroed(state, 1));
+ if (g_text_buffers.buffer_store == NULL) {
+ g_text_buffers.buffer_store = BLI_array_store_create(1, ARRAY_CHUNK_SIZE);
+ }
+ g_text_buffers.users += 1;
+ const size_t total_size_prev = BLI_array_store_calc_size_compacted_get(
+ g_text_buffers.buffer_store);
+
+ text_state_encode(state, text, g_text_buffers.buffer_store);
+
+ return BLI_array_store_calc_size_compacted_get(g_text_buffers.buffer_store) - total_size_prev;
+}
+
static bool text_undosys_poll(bContext *UNUSED(C))
{
/* Only use when operators initialized. */
@@ -91,10 +156,27 @@ static bool text_undosys_poll(bContext *UNUSED(C))
static void text_undosys_step_encode_init(struct bContext *C, UndoStep *us_p)
{
TextUndoStep *us = (TextUndoStep *)us_p;
- BLI_assert(BLI_array_is_zeroed(&us->data, 1));
+ BLI_assert(BLI_array_is_zeroed(us->states, ARRAY_SIZE(us->states)));
- UNUSED_VARS(C, us);
- /* XXX, use to set the undo type only. */
+ Text *text = CTX_data_edit_text(C);
+
+ /* Avoid writing the initial state where possible,
+ * failing to do this won't cause bugs, it's just inefficient. */
+ bool write_init = true;
+ UndoStack *ustack = ED_undo_stack_get();
+ if (ustack->step_active) {
+ if (ustack->step_active->type == BKE_UNDOSYS_TYPE_TEXT) {
+ TextUndoStep *us_active = (TextUndoStep *)ustack->step_active;
+ if (STREQ(text->id.name, us_active->text_ref.name)) {
+ write_init = false;
+ }
+ }
+ }
+
+ if (write_init) {
+ us->step.data_size = text_undosys_step_encode_to_state(&us->states[0], text);
+ }
+ us->text_ref.ptr = text;
}
static bool text_undosys_step_encode(struct bContext *C,
@@ -103,67 +185,32 @@ static bool text_undosys_step_encode(struct bContext *C,
{
TextUndoStep *us = (TextUndoStep *)us_p;
- Text *text = CTX_data_edit_text(C);
-
- int buf_len = 0;
-
- uchar *buf = (uchar *)txt_to_buf_for_undo(text, &buf_len);
- if (g_text_buffers.buffer_store == NULL) {
- g_text_buffers.buffer_store = BLI_array_store_create(1, ARRAY_CHUNK_SIZE);
- }
- g_text_buffers.users += 1;
- const size_t total_size_prev = BLI_array_store_calc_size_compacted_get(
- g_text_buffers.buffer_store);
-
- us->data.state = BLI_array_store_state_add(g_text_buffers.buffer_store, buf, buf_len, NULL);
- MEM_freeN(buf);
+ Text *text = us->text_ref.ptr;
+ BLI_assert(text == CTX_data_edit_text(C));
+ UNUSED_VARS_NDEBUG(C);
- us->cursor.line = txt_get_span(text->lines.first, text->curl);
- us->cursor.column = text->curc;
-
- if (txt_has_sel(text)) {
- us->cursor.line_select = (text->curl == text->sell) ?
- us->cursor.line :
- txt_get_span(text->lines.first, text->sell);
- us->cursor.column_select = text->selc;
- }
- else {
- us->cursor.line_select = us->cursor.line;
- us->cursor.column_select = us->cursor.column;
- }
+ us->step.data_size += text_undosys_step_encode_to_state(&us->states[1], text);
us_p->is_applied = true;
- us->text_ref.ptr = text;
-
- us->step.data_size = BLI_array_store_calc_size_compacted_get(g_text_buffers.buffer_store) -
- total_size_prev;
-
return true;
}
-static void text_undosys_step_decode(struct bContext *C,
- struct Main *UNUSED(bmain),
- UndoStep *us_p,
- int UNUSED(dir),
- bool UNUSED(is_final))
+static void text_undosys_step_decode(
+ struct bContext *C, struct Main *UNUSED(bmain), UndoStep *us_p, int dir, bool is_final)
{
TextUndoStep *us = (TextUndoStep *)us_p;
Text *text = us->text_ref.ptr;
- size_t buf_len;
- {
- const uchar *buf = BLI_array_store_state_data_get_alloc(us->data.state, &buf_len);
- txt_from_buf_for_undo(text, (const char *)buf, buf_len);
- MEM_freeN((void *)buf);
+ TextState *state;
+ if ((us->states[0].buf_array_state != NULL) && (dir == -1) && !is_final) {
+ state = &us->states[0];
}
-
- const bool has_select = ((us->cursor.line != us->cursor.line_select) ||
- (us->cursor.column != us->cursor.column_select));
- if (has_select) {
- txt_move_to(text, us->cursor.line_select, us->cursor.column_select, false);
+ else {
+ state = &us->states[1];
}
- txt_move_to(text, us->cursor.line, us->cursor.column, has_select);
+
+ text_state_decode(state, text);
SpaceText *st = CTX_wm_space_text(C);
if (st) {
@@ -179,12 +226,16 @@ static void text_undosys_step_free(UndoStep *us_p)
{
TextUndoStep *us = (TextUndoStep *)us_p;
- BLI_array_store_state_remove(g_text_buffers.buffer_store, us->data.state);
-
- g_text_buffers.users -= 1;
- if (g_text_buffers.users == 0) {
- BLI_array_store_destroy(g_text_buffers.buffer_store);
- g_text_buffers.buffer_store = NULL;
+ for (int i = 0; i < ARRAY_SIZE(us->states); i++) {
+ TextState *state = &us->states[i];
+ if (state->buf_array_state) {
+ BLI_array_store_state_remove(g_text_buffers.buffer_store, state->buf_array_state);
+ g_text_buffers.users -= 1;
+ if (g_text_buffers.users == 0) {
+ BLI_array_store_destroy(g_text_buffers.buffer_store);
+ g_text_buffers.buffer_store = NULL;
+ }
+ }
}
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 38e8d285c77..b412a72cce1 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -145,7 +145,7 @@ void ED_draw_object_facemap(Depsgraph *depsgraph,
facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
- /* use gawain immediate mode fore now */
+ /* Make a batch and free it each time for now. */
const int looptris_len = poly_to_tri_count(mpoly_len, mloop_len);
const int vbo_len_capacity = looptris_len * 3;
int vbo_len_used = 0;
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index d1ea01146bc..5974100b534 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -992,7 +992,7 @@ static void view3d_main_region_message_subscribe(const struct bContext *C,
* accepting some redundant redraws.
*
* For other space types we might try avoid this, keep the 3D view as an exceptional case! */
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
/* Only subscribe to types. */
StructRNA *type_array[] = {
@@ -1176,7 +1176,7 @@ static void view3d_header_region_message_subscribe(const struct bContext *UNUSED
struct ARegion *ar,
struct wmMsgBus *mbus)
{
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
/* Only subscribe to types. */
StructRNA *type_array[] = {
diff --git a/source/blender/editors/space_view3d/view3d_camera_control.c b/source/blender/editors/space_view3d/view3d_camera_control.c
index 0045094542f..f8f97848d14 100644
--- a/source/blender/editors/space_view3d/view3d_camera_control.c
+++ b/source/blender/editors/space_view3d/view3d_camera_control.c
@@ -87,8 +87,7 @@ typedef struct View3DCameraControl {
float ofs_backup[3];
/* backup the views offset in case the user cancels flying in non camera mode */
- /* backup the views quat in case the user cancels flying in non camera mode.
- * (quat for view, eul for camera) */
+ /* backup the views quat in case the user cancels flying in non camera mode. */
float rot_backup[4];
/* remember if were ortho or not, only used for restoring the view if it was a ortho view */
char persp_backup;
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 8844428b1bf..f6afa112f08 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -859,6 +859,51 @@ float ED_view3d_grid_scale(Scene *scene, View3D *v3d, const char **grid_unit)
return v3d->grid * ED_scene_grid_scale(scene, grid_unit);
}
+#define STEPS_LEN 8
+void ED_view3d_grid_steps(Scene *scene,
+ View3D *v3d,
+ RegionView3D *rv3d,
+ float r_grid_steps[STEPS_LEN])
+{
+ const void *usys;
+ int i, len;
+ bUnit_GetSystem(scene->unit.system, B_UNIT_LENGTH, &usys, &len);
+ float grid_scale = v3d->grid;
+
+ if (usys) {
+ if (rv3d->view == RV3D_VIEW_USER) {
+ /* Skip steps */
+ len = bUnit_GetBaseUnit(usys) + 1;
+ }
+
+ grid_scale /= scene->unit.scale_length;
+
+ for (i = 0; i < len; i++) {
+ r_grid_steps[i] = (float)bUnit_GetScaler(usys, len - 1 - i) * grid_scale;
+ }
+ for (; i < STEPS_LEN; i++) {
+ /* Fill last slots */
+ r_grid_steps[i] = 10.0f * r_grid_steps[i - 1];
+ }
+ }
+ else {
+ if (rv3d->view != RV3D_VIEW_USER) {
+ /* Allow 3 more subdivisions. */
+ grid_scale /= powf(v3d->gridsubdiv, 3);
+ }
+ int subdiv = 1;
+ for (i = 0;; i++) {
+ r_grid_steps[i] = grid_scale * subdiv;
+
+ if (i == STEPS_LEN - 1) {
+ break;
+ }
+ subdiv *= v3d->gridsubdiv;
+ }
+ }
+}
+#undef STEPS_LEN
+
/* Simulates the grid scale that is actually viewed.
* The actual code is seen in `object_grid_frag.glsl` (see `grid_res`).
* Currently the simulation is only done when RV3D_VIEW_IS_AXIS. */
@@ -867,24 +912,35 @@ float ED_view3d_grid_view_scale(Scene *scene,
RegionView3D *rv3d,
const char **grid_unit)
{
- float grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
+ float grid_scale;
if (!rv3d->is_persp && RV3D_VIEW_IS_AXIS(rv3d->view)) {
/* Decrease the distance between grid snap points depending on zoom. */
- float grid_subdiv = v3d->gridsubdiv;
- if (grid_subdiv > 1) {
- /* Allow 3 more subdivisions (see OBJECT_engine_init). */
- grid_scale /= powf(grid_subdiv, 3);
-
- /* `3.0` was a value obtained by trial and error in order to get
- * a nice snap distance.*/
- float grid_res = 3.0 * (rv3d->dist / v3d->lens);
- float lvl = (logf(grid_res / grid_scale) / logf(grid_subdiv));
+ /* `0.38` was a value visually obtained in order to get a snap distance
+ * that matches previous versions Blender.*/
+ float min_dist = 0.38f * (rv3d->dist / v3d->lens);
+ float grid_steps[8];
+ ED_view3d_grid_steps(scene, v3d, rv3d, grid_steps);
+ int i;
+ for (i = 0; i < ARRAY_SIZE(grid_steps); i++) {
+ grid_scale = grid_steps[i];
+ if (grid_scale > min_dist) {
+ break;
+ }
+ }
- CLAMP_MIN(lvl, 0.0f);
+ if (grid_unit) {
+ const void *usys;
+ int len;
+ bUnit_GetSystem(scene->unit.system, B_UNIT_LENGTH, &usys, &len);
- grid_scale *= pow(grid_subdiv, (int)lvl);
+ if (usys) {
+ *grid_unit = bUnit_GetNameDisplay(usys, len - i - 1);
+ }
}
}
+ else {
+ grid_scale = ED_view3d_grid_scale(scene, v3d, grid_unit);
+ }
return grid_scale;
}
@@ -1360,6 +1416,27 @@ static void draw_selected_name(
BLF_disable(font_id, BLF_SHADOW);
}
+static void draw_grid_unit_name(
+ Scene *scene, RegionView3D *rv3d, View3D *v3d, int xoffset, int *yoffset)
+{
+ if (!rv3d->is_persp && RV3D_VIEW_IS_AXIS(rv3d->view)) {
+ const char *grid_unit = NULL;
+ ED_view3d_grid_view_scale(scene, v3d, rv3d, &grid_unit);
+
+ if (grid_unit) {
+ char numstr[32] = "";
+ UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
+ if (v3d->grid != 1.0f) {
+ BLI_snprintf(numstr, sizeof(numstr), "%s x %.4g", grid_unit, v3d->grid);
+ }
+
+ *yoffset -= U.widget_unit;
+ BLF_draw_default_ascii(
+ xoffset, *yoffset, 0.0f, numstr[0] ? numstr : grid_unit, sizeof(numstr));
+ }
+ }
+}
+
/**
* Information drawn on top of the solid plates and composed data
*/
@@ -1382,8 +1459,7 @@ void view3d_draw_region_info(const bContext *C, ARegion *ar)
ED_region_pixelspace(ar);
/* local coordinate visible rect inside region, to accommodate overlapping ui */
- rcti rect;
- ED_region_visible_rect(ar, &rect);
+ const rcti *rect = ED_region_visible_rect(ar);
view3d_draw_border(C, ar);
view3d_draw_grease_pencil(C);
@@ -1399,14 +1475,14 @@ void view3d_draw_region_info(const bContext *C, ARegion *ar)
/* The gizmo handles it's own drawing. */
break;
case USER_MINI_AXIS_TYPE_MINIMAL:
- draw_view_axis(rv3d, &rect);
+ draw_view_axis(rv3d, rect);
case USER_MINI_AXIS_TYPE_NONE:
break;
}
}
- int xoffset = rect.xmin + U.widget_unit;
- int yoffset = rect.ymax;
+ int xoffset = rect->xmin + U.widget_unit;
+ int yoffset = rect->ymax;
if ((v3d->flag2 & V3D_HIDE_OVERLAYS) == 0 && (v3d->overlay.flag & V3D_OVERLAY_HIDE_TEXT) == 0) {
if ((U.uiflag & USER_SHOW_FPS) && ED_screen_animation_no_scrub(wm)) {
@@ -1422,19 +1498,10 @@ void view3d_draw_region_info(const bContext *C, ARegion *ar)
draw_selected_name(scene, view_layer, ob, xoffset, &yoffset);
}
-#if 0 /* TODO */
- if (grid_unit) { /* draw below the viewport name */
- char numstr[32] = "";
-
- UI_FontThemeColor(BLF_default(), TH_TEXT_HI);
- if (v3d->grid != 1.0f) {
- BLI_snprintf(numstr, sizeof(numstr), "%s x %.4g", grid_unit, v3d->grid);
- }
-
- *yoffset -= U.widget_unit;
- BLF_draw_default_ascii(xoffset, *yoffset, numstr[0] ? numstr : grid_unit, sizeof(numstr));
+ if (v3d->gridflag & (V3D_SHOW_FLOOR | V3D_SHOW_X | V3D_SHOW_Y | V3D_SHOW_Z)) {
+ /* draw below the viewport name */
+ draw_grid_unit_name(scene, rv3d, v3d, xoffset, &yoffset);
}
-#endif
}
if ((v3d->overlay.flag & V3D_OVERLAY_HIDE_TEXT) == 0) {
@@ -1493,7 +1560,7 @@ void view3d_main_region_draw(const bContext *C, ARegion *ar)
GPU_pass_cache_garbage_collect();
/* XXX This is in order to draw UI batches with the DRW
- * olg context since we now use it for drawing the entire area */
+ * old context since we now use it for drawing the entire area. */
gpu_batch_presets_reset();
/* No depth test for drawing action zones afterwards. */
diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c
index 4c03995307a..d5772e5052a 100644
--- a/source/blender/editors/space_view3d/view3d_draw_legacy.c
+++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c
@@ -102,6 +102,7 @@
#include "RE_engine.h"
#include "DRW_engine.h"
+#include "DRW_select_buffer.h"
#include "view3d_intern.h" /* own include */
@@ -155,16 +156,13 @@ void ED_view3d_clipping_enable(void)
/**
* \note Only use in object mode.
*/
-static void validate_object_select_id(struct Depsgraph *depsgraph,
- Scene *scene,
- ViewLayer *view_layer,
- ARegion *ar,
- View3D *v3d,
- Object *obact)
+static void validate_object_select_id(
+ struct Depsgraph *depsgraph, ViewLayer *view_layer, ARegion *ar, View3D *v3d, Object *obact)
{
Object *obact_eval = DEG_get_evaluated_object(depsgraph, obact);
BLI_assert(ar->regiontype == RGN_TYPE_WINDOW);
+ UNUSED_VARS_NDEBUG(ar);
if (obact_eval && (obact_eval->mode & (OB_MODE_VERTEX_PAINT | OB_MODE_WEIGHT_PAINT) ||
BKE_paint_select_face_test(obact_eval))) {
@@ -188,8 +186,8 @@ static void validate_object_select_id(struct Depsgraph *depsgraph,
}
if (obact_eval && ((obact_eval->base_flag & BASE_VISIBLE) != 0)) {
- DRW_draw_select_id_object(
- depsgraph, view_layer, ar, v3d, obact, scene->toolsettings->selectmode);
+ Base *base = BKE_view_layer_base_find(view_layer, obact);
+ DRW_select_buffer_context_create(&base, 1, -1);
}
/* TODO: Create a flag in `DRW_manager` because the drawing is no longer
@@ -224,8 +222,7 @@ void ED_view3d_select_id_validate(ViewContext *vc)
/* TODO: Create a flag in `DRW_manager` because the drawing is no longer
* made on the backbuffer in this case. */
if (vc->v3d->flag & V3D_INVALID_BACKBUF) {
- validate_object_select_id(
- vc->depsgraph, vc->scene, vc->view_layer, vc->ar, vc->v3d, vc->obact);
+ validate_object_select_id(vc->depsgraph, vc->view_layer, vc->ar, vc->v3d, vc->obact);
}
}
@@ -244,22 +241,6 @@ void ED_view3d_backbuf_depth_validate(ViewContext *vc)
}
}
-uint *ED_view3d_select_id_read_rect(const rcti *clip, uint *r_buf_len)
-{
- uint width = BLI_rcti_size_x(clip);
- uint height = BLI_rcti_size_y(clip);
- uint buf_len = width * height;
- uint *buf = MEM_mallocN(buf_len * sizeof(*buf), __func__);
-
- DRW_framebuffer_select_id_read(clip, buf);
-
- if (r_buf_len) {
- *r_buf_len = buf_len;
- }
-
- return buf;
-}
-
/**
* allow for small values [0.5 - 2.5],
* and large values, FLT_MAX by clamping by the area size
@@ -269,30 +250,6 @@ int ED_view3d_backbuf_sample_size_clamp(ARegion *ar, const float dist)
return (int)min_ff(ceilf(dist), (float)max_ii(ar->winx, ar->winx));
}
-/* reads full rect, converts indices */
-uint *ED_view3d_select_id_read(int xmin, int ymin, int xmax, int ymax, uint *r_buf_len)
-{
- if (UNLIKELY((xmin > xmax) || (ymin > ymax))) {
- return NULL;
- }
-
- const rcti rect = {
- .xmin = xmin,
- .xmax = xmax + 1,
- .ymin = ymin,
- .ymax = ymax + 1,
- };
-
- uint buf_len;
- uint *buf = ED_view3d_select_id_read_rect(&rect, &buf_len);
-
- if (r_buf_len) {
- *r_buf_len = buf_len;
- }
-
- return buf;
-}
-
/* *********************** */
void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect)
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index 826eddc63d1..e76ef2b0458 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -183,30 +183,34 @@ typedef struct ViewOpsData {
bool use_dyn_ofs;
} ViewOpsData;
+/**
+ * Size of the sphere being dragged for trackball rotation withing the view bounds.
+ * also affects speed (smaller is faster).
+ */
#define TRACKBALLSIZE (1.1f)
-static void calctrackballvec(const rcti *rect, const int event_xy[2], float vec[3])
+static void calctrackballvec(const rcti *rect, const int event_xy[2], float r_dir[3])
{
const float radius = TRACKBALLSIZE;
const float t = radius / (float)M_SQRT2;
- float x, y, z, d;
-
- /* normalize x and y */
- x = BLI_rcti_cent_x(rect) - event_xy[0];
- x /= (float)(BLI_rcti_size_x(rect) / 4);
- y = BLI_rcti_cent_y(rect) - event_xy[1];
- y /= (float)(BLI_rcti_size_y(rect) / 2);
- d = sqrtf(x * x + y * y);
- if (d < t) { /* Inside sphere */
- z = sqrtf(radius * radius - d * d);
+ const float size[2] = {BLI_rcti_size_x(rect), BLI_rcti_size_y(rect)};
+ /* Aspect correct so dragging in a non-square view doesn't squash the direction.
+ * So diagonal motion rotates the same direction the cursor is moving. */
+ const float size_min = min_ff(size[0], size[1]);
+ const float aspect[2] = {size_min / size[0], size_min / size[1]};
+
+ /* Normalize x and y. */
+ r_dir[0] = (event_xy[0] - BLI_rcti_cent_x(rect)) / ((size[0] * aspect[0]) / 2.0);
+ r_dir[1] = (event_xy[1] - BLI_rcti_cent_y(rect)) / ((size[1] * aspect[1]) / 2.0);
+ const float d = len_v2(r_dir);
+ if (d < t) {
+ /* Inside sphere. */
+ r_dir[2] = sqrtf(SQUARE(radius) - SQUARE(d));
}
- else { /* On hyperbola */
- z = t * t / d;
+ else {
+ /* On hyperbola. */
+ r_dir[2] = SQUARE(t) / d;
}
-
- vec[0] = x;
- vec[1] = y;
- vec[2] = -z; /* yah yah! */
}
/**
@@ -400,9 +404,7 @@ static void viewops_data_create(bContext *C,
if (viewops_flag & VIEWOPS_FLAG_PERSP_ENSURE) {
if (ED_view3d_persp_ensure(depsgraph, vod->v3d, vod->ar)) {
/* If we're switching from camera view to the perspective one,
- * need to tag viewport update, so camera vuew and borders
- * are properly updated.
- */
+ * need to tag viewport update, so camera view and borders are properly updated. */
ED_region_tag_redraw(vod->ar);
}
}
@@ -513,9 +515,6 @@ static void viewops_data_create(bContext *C,
static void viewops_data_free(bContext *C, wmOperator *op)
{
ARegion *ar;
-#if 0
- Paint *p = BKE_paint_get_active_from_context(C);
-#endif
if (op->customdata) {
ViewOpsData *vod = op->customdata;
ar = vod->ar;
@@ -532,12 +531,9 @@ static void viewops_data_free(bContext *C, wmOperator *op)
ar = CTX_wm_region(C);
}
-#if 0
- if (p && (p->flags & PAINT_FAST_NAVIGATE))
-#endif
- {
- ED_region_tag_redraw(ar);
- }
+ /* Need to redraw because drawing code uses RV3D_NAVIGATING to draw
+ * faster while navigation operator runs. */
+ ED_region_tag_redraw(ar);
}
/** \} */
@@ -729,6 +725,10 @@ static void viewrotate_apply(ViewOpsData *vod, const int event_xy[2])
angle = (len_v3(dvec) / (2.0f * TRACKBALLSIZE)) * (float)M_PI;
+ /* Before applying the sensitivity this is rotating 1:1,
+ * where the cursor would match the surface of a sphere in the view. */
+ angle *= U.view_rotate_sensitivity_trackball;
+
/* Allow for rotation beyond the interval [-pi, pi] */
angle = angle_wrap_rad(angle);
@@ -751,11 +751,8 @@ static void viewrotate_apply(ViewOpsData *vod, const int event_xy[2])
const float zvec_global[3] = {0.0f, 0.0f, 1.0f};
float xaxis[3];
- /* Sensitivity will control how fast the viewport rotates. 0.007 was
- * obtained experimentally by looking at viewport rotation sensitivities
- * on other modeling programs. */
- /* Perhaps this should be a configurable user parameter. */
- const float sensitivity = 0.007f;
+ /* Radians per-pixel. */
+ const float sensitivity = U.view_rotate_sensitivity_turntable / U.pixelsize;
/* Get the 3x3 matrix and its inverse from the quaternion */
quat_to_mat3(m, vod->curr.viewquat);
@@ -1954,6 +1951,8 @@ static float viewzoom_scale_value(const rcti *winrct,
fac = (float)(xy_init[1] - xy_curr[1]);
}
+ fac /= U.pixelsize;
+
if (zoom_invert != zoom_invert_force) {
fac = -fac;
}
@@ -1969,8 +1968,8 @@ static float viewzoom_scale_value(const rcti *winrct,
BLI_rcti_cent_x(winrct),
BLI_rcti_cent_y(winrct),
};
- float len_new = 5 + len_v2v2_int(ctr, xy_curr);
- float len_old = 5 + len_v2v2_int(ctr, xy_init);
+ float len_new = (5 * U.pixelsize) + ((float)len_v2v2_int(ctr, xy_curr) / U.pixelsize);
+ float len_old = (5 * U.pixelsize) + ((float)len_v2v2_int(ctr, xy_init) / U.pixelsize);
/* intentionally ignore 'zoom_invert' for scale */
if (zoom_invert_force) {
@@ -1980,16 +1979,16 @@ static float viewzoom_scale_value(const rcti *winrct,
zfac = val_orig * (len_old / max_ff(len_new, 1.0f)) / val;
}
else { /* USER_ZOOM_DOLLY */
- float len_new = 5;
- float len_old = 5;
+ float len_new = 5 * U.pixelsize;
+ float len_old = 5 * U.pixelsize;
if (U.uiflag & USER_ZOOM_HORIZ) {
- len_new += (winrct->xmax - (xy_curr[0]));
- len_old += (winrct->xmax - (xy_init[0]));
+ len_new += (winrct->xmax - (xy_curr[0])) / U.pixelsize;
+ len_old += (winrct->xmax - (xy_init[0])) / U.pixelsize;
}
else {
- len_new += (winrct->ymax - (xy_curr[1]));
- len_old += (winrct->ymax - (xy_init[1]));
+ len_new += (winrct->ymax - (xy_curr[1])) / U.pixelsize;
+ len_old += (winrct->ymax - (xy_init[1])) / U.pixelsize;
}
if (zoom_invert != zoom_invert_force) {
@@ -4945,6 +4944,7 @@ void ED_view3d_cursor3d_position_rotation(bContext *C,
.use_object_edit_cage = false,
},
mval_fl,
+ NULL,
&dist_px,
ray_co,
ray_no,
@@ -5051,7 +5051,7 @@ void ED_view3d_cursor3d_update(bContext *C,
{
struct wmMsgBus *mbus = CTX_wm_message_bus(C);
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
RNA_pointer_create(&scene->id, &RNA_View3DCursor, &scene->cursor, &msg_key_params.ptr);
WM_msg_publish_rna_params(mbus, &msg_key_params);
}
diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c
index 961ac4c26fb..dbbc7f2a32e 100644
--- a/source/blender/editors/space_view3d/view3d_fly.c
+++ b/source/blender/editors/space_view3d/view3d_fly.c
@@ -146,45 +146,71 @@ typedef struct FlyInfo {
struct Depsgraph *depsgraph;
Scene *scene;
- wmTimer *timer; /* needed for redraws */
+ /** Needed for for updating that isn't triggered by input. */
+ wmTimer *timer;
short state;
bool redraw;
bool use_precision;
- /* if the user presses shift they can look about
- * without moving the direction there looking */
+ /** If the user presses shift they can look about without moving the direction there looking. */
bool use_freelook;
- int mval[2]; /* latest 2D mouse values */
- int center_mval[2]; /* center mouse values */
- float width, height; /* camera viewport dimensions */
+ /**
+ * Needed for auto-keyframing, when animation isn't playing, only keyframe on confirmation.
+ *
+ * Currently we can't cancel this operator usefully while recording on animation playback
+ * (this would need to un-key all previous frames).
+ */
+ bool anim_playing;
+
+ /** Latest 2D mouse values. */
+ int mval[2];
+ /** Center mouse values. */
+ int center_mval[2];
+ /** Camera viewport dimensions. */
+ float width, height;
#ifdef WITH_INPUT_NDOF
- wmNDOFMotionData *ndof; /* latest 3D mouse values */
+ /** Latest 3D mouse values. */
+ wmNDOFMotionData *ndof;
#endif
/* fly state state */
- float speed; /* the speed the view is moving per redraw */
- short axis; /* Axis index to move along by default Z to move along the view */
- bool pan_view; /* when true, pan the view instead of rotating */
+ /** The speed the view is moving per redraw. */
+ float speed;
+ /** Axis index to move along by default Z to move along the view. */
+ short axis;
+ /** When true, pan the view instead of rotating. */
+ bool pan_view;
eFlyPanState xlock, zlock;
- float xlock_momentum, zlock_momentum; /* nicer dynamics */
- float grid; /* world scale 1.0 default */
+ /** Nicer dynamics. */
+ float xlock_momentum, zlock_momentum;
+ /** World scale 1.0 default. */
+ float grid;
/* compare between last state */
- double time_lastwheel; /* used to accelerate when using the mousewheel a lot */
- double time_lastdraw; /* time between draws */
+ /** Used to accelerate when using the mousewheel a lot. */
+ double time_lastwheel;
+ /** Time between draws. */
+ double time_lastdraw;
void *draw_handle_pixel;
/* use for some lag */
- float dvec_prev[3]; /* old for some lag */
+ /** Keep the previous value to smooth transitions (use lag). */
+ float dvec_prev[3];
struct View3DCameraControl *v3d_camera_control;
} FlyInfo;
+/* prototypes */
+#ifdef WITH_INPUT_NDOF
+static void flyApply_ndof(bContext *C, FlyInfo *fly, bool is_confirm);
+#endif /* WITH_INPUT_NDOF */
+static int flyApply(bContext *C, struct FlyInfo *fly, bool force_autokey);
+
static void drawFlyPixel(const struct bContext *UNUSED(C), ARegion *UNUSED(ar), void *arg)
{
FlyInfo *fly = arg;
@@ -261,6 +287,7 @@ enum {
static bool initFlyInfo(bContext *C, FlyInfo *fly, wmOperator *op, const wmEvent *event)
{
+ wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win = CTX_wm_window(C);
rctf viewborder;
@@ -308,6 +335,7 @@ static bool initFlyInfo(bContext *C, FlyInfo *fly, wmOperator *op, const wmEvent
fly->grid = 1.0f;
fly->use_precision = false;
fly->use_freelook = false;
+ fly->anim_playing = ED_screen_animation_playing(wm);
#ifdef NDOF_FLY_DRAW_TOOMUCH
fly->redraw = 1;
@@ -374,6 +402,18 @@ static int flyEnd(bContext *C, FlyInfo *fly)
if (fly->state == FLY_RUNNING) {
return OPERATOR_RUNNING_MODAL;
}
+ else if (fly->state == FLY_CONFIRM) {
+ /* Needed for auto_keyframe. */
+#ifdef WITH_INPUT_NDOF
+ if (fly->ndof) {
+ flyApply_ndof(C, fly, true);
+ }
+ else
+#endif /* WITH_INPUT_NDOF */
+ {
+ flyApply(C, fly, true);
+ }
+ }
#ifdef NDOF_FLY_DEBUG
puts("\n-- fly end --");
@@ -672,12 +712,19 @@ static void flyEvent(FlyInfo *fly, const wmEvent *event)
}
}
-static void flyMoveCamera(bContext *C, FlyInfo *fly, const bool do_rotate, const bool do_translate)
+static void flyMoveCamera(bContext *C,
+ FlyInfo *fly,
+ const bool do_rotate,
+ const bool do_translate,
+ const bool is_confirm)
{
- ED_view3d_cameracontrol_update(fly->v3d_camera_control, true, C, do_rotate, do_translate);
+ /* we only consider autokeying on playback or if user confirmed fly on the same frame
+ * otherwise we get a keyframe even if the user cancels. */
+ const bool use_autokey = is_confirm || fly->anim_playing;
+ ED_view3d_cameracontrol_update(fly->v3d_camera_control, use_autokey, C, do_rotate, do_translate);
}
-static int flyApply(bContext *C, FlyInfo *fly)
+static int flyApply(bContext *C, FlyInfo *fly, bool is_confirm)
{
#define FLY_ROTATE_FAC 10.0f /* more is faster */
#define FLY_ZUP_CORRECT_FAC 0.1f /* amount to correct per step */
@@ -948,7 +995,7 @@ static int flyApply(bContext *C, FlyInfo *fly)
(fly->zlock != FLY_AXISLOCK_STATE_OFF) ||
((moffset[0] || moffset[1]) && !fly->pan_view));
const bool do_translate = (fly->speed != 0.0f || fly->pan_view);
- flyMoveCamera(C, fly, do_rotate, do_translate);
+ flyMoveCamera(C, fly, do_rotate, do_translate, is_confirm);
}
}
else {
@@ -963,7 +1010,7 @@ static int flyApply(bContext *C, FlyInfo *fly)
}
#ifdef WITH_INPUT_NDOF
-static void flyApply_ndof(bContext *C, FlyInfo *fly)
+static void flyApply_ndof(bContext *C, FlyInfo *fly, bool is_confirm)
{
Object *lock_ob = ED_view3d_cameracontrol_object_get(fly->v3d_camera_control);
bool has_translate, has_rotate;
@@ -980,7 +1027,7 @@ static void flyApply_ndof(bContext *C, FlyInfo *fly)
fly->redraw = true;
if (fly->rv3d->persp == RV3D_CAMOB) {
- flyMoveCamera(C, fly, has_rotate, has_translate);
+ flyMoveCamera(C, fly, has_rotate, has_translate, is_confirm);
}
}
}
@@ -1035,13 +1082,13 @@ static int fly_modal(bContext *C, wmOperator *op, const wmEvent *event)
#ifdef WITH_INPUT_NDOF
if (fly->ndof) { /* 3D mouse overrules [2D mouse + timer] */
if (event->type == NDOF_MOTION) {
- flyApply_ndof(C, fly);
+ flyApply_ndof(C, fly, false);
}
}
else
#endif /* WITH_INPUT_NDOF */
if (event->type == TIMER && event->customdata == fly->timer) {
- flyApply(C, fly);
+ flyApply(C, fly, false);
}
do_draw |= fly->redraw;
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_camera.c b/source/blender/editors/space_view3d/view3d_gizmo_camera.c
index 1bb10697936..42931d5abb5 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_camera.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_camera.c
@@ -100,7 +100,7 @@ static void WIDGETGROUP_camera_setup(const bContext *C, wmGizmoGroup *gzgroup)
wmGizmo *gz;
gz = cagzgroup->dop_dist = WM_gizmo_new_ptr(gzt_arrow, gzgroup, NULL);
RNA_enum_set(gz->ptr, "draw_style", ED_GIZMO_ARROW_STYLE_CROSS);
- WM_gizmo_set_flag(gz, WM_GIZMO_DRAW_HOVER, true);
+ WM_gizmo_set_flag(gz, WM_GIZMO_DRAW_HOVER | WM_GIZMO_DRAW_NO_SCALE, true);
UI_GetThemeColor3fv(TH_GIZMO_A, gz->color);
UI_GetThemeColor3fv(TH_GIZMO_HI, gz->color_hi);
@@ -152,9 +152,11 @@ static void WIDGETGROUP_camera_refresh(const bContext *C, wmGizmoGroup *gzgroup)
WM_gizmo_set_scale(cagzgroup->dop_dist, ca->drawsize);
WM_gizmo_set_flag(cagzgroup->dop_dist, WM_GIZMO_HIDDEN, false);
- /* need to set property here for undo. TODO would prefer to do this in _init */
+ /* Need to set property here for undo. TODO would prefer to do this in _init */
+ PointerRNA camera_dof_ptr;
+ RNA_pointer_create(&ca->id, &RNA_CameraDOFSettings, &ca->dof, &camera_dof_ptr);
WM_gizmo_target_property_def_rna(
- cagzgroup->dop_dist, "offset", &camera_ptr, "dof.focus_distance", -1);
+ cagzgroup->dop_dist, "offset", &camera_dof_ptr, "focus_distance", -1);
}
else {
WM_gizmo_set_flag(cagzgroup->dop_dist, WM_GIZMO_HIDDEN, true);
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_navigate.c b/source/blender/editors/space_view3d/view3d_gizmo_navigate.c
index 1724a8bd86d..3c911e266a9 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_navigate.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_navigate.c
@@ -184,10 +184,6 @@ static void WIDGETGROUP_navigate_setup(const bContext *C, wmGizmoGroup *gzgroup)
wmOperatorType *ot = WM_operatortype_find(info->opname, true);
WM_gizmo_operator_set(gz, 0, ot, NULL);
-
- /* We only need this for rotation so click/drag events aren't stolen
- * by paint mode press events, however it's strange if only rotation has this behavior. */
- WM_gizmo_set_flag(gz, WM_GIZMO_EVENT_HANDLE_ALL, true);
}
{
@@ -250,18 +246,17 @@ static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmGizmoGroup *g
copy_v3_v3(navgroup->gz_array[GZ_INDEX_ROTATE]->matrix_offset[i], rv3d->viewmat[i]);
}
- rcti rect_visible;
- ED_region_visible_rect(ar, &rect_visible);
+ const rcti *rect_visible = ED_region_visible_rect(ar);
- if ((navgroup->state.rect_visible.xmax == rect_visible.xmax) &&
- (navgroup->state.rect_visible.ymax == rect_visible.ymax) &&
+ if ((navgroup->state.rect_visible.xmax == rect_visible->xmax) &&
+ (navgroup->state.rect_visible.ymax == rect_visible->ymax) &&
(navgroup->state.rv3d.is_persp == rv3d->is_persp) &&
(navgroup->state.rv3d.is_camera == (rv3d->persp == RV3D_CAMOB)) &&
(navgroup->state.rv3d.viewlock == rv3d->viewlock)) {
return;
}
- navgroup->state.rect_visible = rect_visible;
+ navgroup->state.rect_visible = *rect_visible;
navgroup->state.rv3d.is_persp = rv3d->is_persp;
navgroup->state.rv3d.is_camera = (rv3d->persp == RV3D_CAMOB);
navgroup->state.rv3d.viewlock = rv3d->viewlock;
@@ -272,8 +267,8 @@ static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmGizmoGroup *g
const float icon_offset = (icon_size * 0.52f) * GIZMO_OFFSET_FAC * UI_DPI_FAC;
const float icon_offset_mini = icon_size * GIZMO_MINI_OFFSET_FAC * UI_DPI_FAC;
const float co_rotate[2] = {
- rect_visible.xmax - icon_offset,
- rect_visible.ymax - icon_offset,
+ rect_visible->xmax - icon_offset,
+ rect_visible->ymax - icon_offset,
};
float icon_offset_from_axis = 0.0f;
@@ -290,8 +285,8 @@ static void WIDGETGROUP_navigate_draw_prepare(const bContext *C, wmGizmoGroup *g
}
const float co[2] = {
- rect_visible.xmax - icon_offset_from_axis,
- rect_visible.ymax - icon_offset_mini * 0.75f,
+ rect_visible->xmax - icon_offset_from_axis,
+ rect_visible->ymax - icon_offset_mini * 0.75f,
};
wmGizmo *gz;
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
index 97a12c7100e..f4e3dc85447 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_ruler.c
@@ -343,6 +343,7 @@ static bool view3d_ruler_item_mousemove(RulerInfo *ruler_info,
.use_object_edit_cage = true,
},
mval_fl,
+ NULL,
&dist_px,
co,
ray_normal)) {
@@ -363,16 +364,31 @@ static bool view3d_ruler_item_mousemove(RulerInfo *ruler_info,
}
else if (do_snap) {
const float mval_fl[2] = {UNPACK2(mval)};
+ float *prev_point = NULL;
+
+ if (inter->co_index != 1) {
+ if (ruler_item->flag & RULERITEM_USE_ANGLE) {
+ prev_point = ruler_item->co[1];
+ }
+ else if (inter->co_index == 0) {
+ prev_point = ruler_item->co[2];
+ }
+ else {
+ prev_point = ruler_item->co[0];
+ }
+ }
if (ED_transform_snap_object_project_view3d(
ruler_info->snap_context,
- (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE),
+ (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
+ SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR),
&(const struct SnapObjectParams){
.snap_select = SNAP_ALL,
.use_object_edit_cage = true,
.use_occlusion_test = true,
},
mval_fl,
+ prev_point,
&dist_px,
co,
NULL)) {
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 3a6825aacb4..6b5c27b68f4 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -30,18 +30,11 @@
struct ARegion;
struct ARegionType;
-struct Base;
struct BoundBox;
struct Depsgraph;
-struct GPUBatch;
-struct Mesh;
struct Object;
-struct SmokeDomainSettings;
struct ViewLayer;
-struct bAnimVizSettings;
struct bContext;
-struct bMotionPath;
-struct bPoseChannel;
struct wmGizmoGroupType;
struct wmGizmoType;
struct wmKeyConfig;
diff --git a/source/blender/editors/space_view3d/view3d_iterators.c b/source/blender/editors/space_view3d/view3d_iterators.c
index 2636062ed8b..f6fa6f6fb45 100644
--- a/source/blender/editors/space_view3d/view3d_iterators.c
+++ b/source/blender/editors/space_view3d/view3d_iterators.c
@@ -29,6 +29,7 @@
#include "BLI_utildefines.h"
#include "BLI_rect.h"
+#include "BLI_math_geom.h"
#include "BKE_action.h"
#include "BKE_armature.h"
@@ -201,7 +202,7 @@ static void mesh_foreachScreenEdge__mapFunc(void *userData,
if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
float screen_co_a[2];
float screen_co_b[2];
- eV3DProjTest clip_flag_nowin = data->clip_flag &= ~V3D_PROJ_TEST_CLIP_WIN;
+ eV3DProjTest clip_flag_nowin = data->clip_flag & ~V3D_PROJ_TEST_CLIP_WIN;
if (ED_view3d_project_float_object(data->vc.ar, v0co, screen_co_a, clip_flag_nowin) !=
V3D_PROJ_RET_OK) {
@@ -259,6 +260,98 @@ void mesh_foreachScreenEdge(ViewContext *vc,
/* ------------------------------------------------------------------------ */
+/**
+ * Only call for bound-box clipping.
+ * Otherwise call #mesh_foreachScreenEdge__mapFunc
+ */
+static void mesh_foreachScreenEdge_clip_bb_segment__mapFunc(void *userData,
+ int index,
+ const float v0co[3],
+ const float v1co[3])
+{
+ foreachScreenEdge_userData *data = userData;
+ BMEdge *eed = BM_edge_at_index(data->vc.em->bm, index);
+
+ BLI_assert(data->clip_flag & V3D_PROJ_TEST_CLIP_BB);
+
+ if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
+ float v0co_clip[3];
+ float v1co_clip[3];
+
+ if (!clip_segment_v3_plane_n(v0co, v1co, data->vc.rv3d->clip_local, 4, v0co_clip, v1co_clip)) {
+ return;
+ }
+
+ float screen_co_a[2];
+ float screen_co_b[2];
+
+ /* Clipping already handled, no need to check in projection. */
+ eV3DProjTest clip_flag_nowin = data->clip_flag &
+ ~(V3D_PROJ_TEST_CLIP_WIN | V3D_PROJ_TEST_CLIP_BB);
+
+ if (ED_view3d_project_float_object(data->vc.ar, v0co_clip, screen_co_a, clip_flag_nowin) !=
+ V3D_PROJ_RET_OK) {
+ return;
+ }
+ if (ED_view3d_project_float_object(data->vc.ar, v1co_clip, screen_co_b, clip_flag_nowin) !=
+ V3D_PROJ_RET_OK) {
+ return;
+ }
+
+ if (data->clip_flag & V3D_PROJ_TEST_CLIP_WIN) {
+ if (!BLI_rctf_isect_segment(&data->win_rect, screen_co_a, screen_co_b)) {
+ return;
+ }
+ }
+
+ data->func(data->userData, eed, screen_co_a, screen_co_b, index);
+ }
+}
+
+/**
+ * A version of #mesh_foreachScreenEdge that clips the segment when
+ * there is a clipping bounding box.
+ */
+void mesh_foreachScreenEdge_clip_bb_segment(ViewContext *vc,
+ void (*func)(void *userData,
+ BMEdge *eed,
+ const float screen_co_a[2],
+ const float screen_co_b[2],
+ int index),
+ void *userData,
+ eV3DProjTest clip_flag)
+{
+ foreachScreenEdge_userData data;
+
+ Mesh *me = editbmesh_get_eval_cage_from_orig(
+ vc->depsgraph, vc->scene, vc->obedit, &CD_MASK_BAREMESH);
+
+ ED_view3d_check_mats_rv3d(vc->rv3d);
+
+ data.vc = *vc;
+
+ data.win_rect.xmin = 0;
+ data.win_rect.ymin = 0;
+ data.win_rect.xmax = vc->ar->winx;
+ data.win_rect.ymax = vc->ar->winy;
+
+ data.func = func;
+ data.userData = userData;
+ data.clip_flag = clip_flag;
+
+ BM_mesh_elem_table_ensure(vc->em->bm, BM_EDGE);
+
+ if ((clip_flag & V3D_PROJ_TEST_CLIP_BB) && (vc->rv3d->clipbb != NULL)) {
+ ED_view3d_clipping_local(vc->rv3d, vc->obedit->obmat); /* for local clipping lookups. */
+ BKE_mesh_foreach_mapped_edge(me, mesh_foreachScreenEdge_clip_bb_segment__mapFunc, &data);
+ }
+ else {
+ BKE_mesh_foreach_mapped_edge(me, mesh_foreachScreenEdge__mapFunc, &data);
+ }
+}
+
+/* ------------------------------------------------------------------------ */
+
static void mesh_foreachScreenFace__mapFunc(void *userData,
int index,
const float cent[3],
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 36eb07e9a2f..1c9ce142165 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -88,8 +88,8 @@
#include "ED_particle.h"
#include "ED_mesh.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
-#include "ED_select_buffer_utils.h"
#include "ED_select_utils.h"
#include "ED_sculpt.h"
#include "ED_mball.h"
@@ -105,6 +105,7 @@
#include "DEG_depsgraph_query.h"
#include "DRW_engine.h"
+#include "DRW_select_buffer.h"
#include "view3d_intern.h" /* own include */
@@ -197,44 +198,31 @@ static bool object_deselect_all_except(ViewLayer *view_layer, Base *b)
* \{ */
struct EditSelectBuf_Cache {
- Base **bases;
- uint bases_len;
BLI_bitmap *select_bitmap;
};
-static void editselect_buf_cache_init(struct EditSelectBuf_Cache *esel, ViewContext *vc)
+static void editselect_buf_cache_init(ViewContext *vc, short select_mode)
{
if (vc->obedit) {
- esel->bases = BKE_view_layer_array_from_bases_in_edit_mode(
- vc->view_layer, vc->v3d, &esel->bases_len);
+ uint bases_len = 0;
+ Base **bases = BKE_view_layer_array_from_bases_in_edit_mode(
+ vc->view_layer, vc->v3d, &bases_len);
+
+ DRW_select_buffer_context_create(bases, bases_len, select_mode);
+ MEM_freeN(bases);
}
else {
/* Use for paint modes, currently only a single object at a time. */
if (vc->obact) {
- esel->bases = MEM_mallocN(sizeof(esel->bases), __func__);
- esel->bases[0] = BKE_view_layer_base_find(vc->view_layer, vc->obact);
- esel->bases_len = 1;
+ Base *base = BKE_view_layer_base_find(vc->view_layer, vc->obact);
+ DRW_select_buffer_context_create(&base, 1, select_mode);
}
- else {
- esel->bases = NULL;
- esel->bases_len = 0;
- }
- }
- DRW_draw_select_id(vc->depsgraph,
- vc->ar,
- vc->v3d,
- esel->bases,
- esel->bases_len,
- vc->scene->toolsettings->selectmode);
- for (int i = 0; i < esel->bases_len; i++) {
- esel->bases[i]->object->runtime.select_id = i;
}
}
static void editselect_buf_cache_free(struct EditSelectBuf_Cache *esel)
{
MEM_SAFE_FREE(esel->select_bitmap);
- MEM_SAFE_FREE(esel->bases);
}
static void editselect_buf_cache_free_voidp(void *esel_voidp)
@@ -244,13 +232,14 @@ static void editselect_buf_cache_free_voidp(void *esel_voidp)
}
static void editselect_buf_cache_init_with_generic_userdata(wmGenericUserData *wm_userdata,
- ViewContext *vc)
+ ViewContext *vc,
+ short select_mode)
{
struct EditSelectBuf_Cache *esel = MEM_callocN(sizeof(*esel), __func__);
wm_userdata->data = esel;
wm_userdata->free_fn = editselect_buf_cache_free_voidp;
wm_userdata->use_free = true;
- editselect_buf_cache_init(esel, vc);
+ editselect_buf_cache_init(vc, select_mode);
}
/** \} */
@@ -260,6 +249,7 @@ static void editselect_buf_cache_init_with_generic_userdata(wmGenericUserData *w
* \{ */
static bool edbm_backbuf_check_and_select_verts(struct EditSelectBuf_Cache *esel,
+ Depsgraph *depsgraph,
Object *ob,
BMEditMesh *em,
const eSelectOp sel_op)
@@ -269,8 +259,12 @@ static bool edbm_backbuf_check_and_select_verts(struct EditSelectBuf_Cache *esel
bool changed = false;
const BLI_bitmap *select_bitmap = esel->select_bitmap;
- uint index = DRW_select_context_offset_for_object_elem(ob->runtime.select_id, SCE_SELECT_VERTEX);
+ uint index = DRW_select_buffer_context_offset_for_object_elem(depsgraph, ob, SCE_SELECT_VERTEX);
+ if (index == 0) {
+ return false;
+ }
+ index -= 1;
BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
const bool is_select = BM_elem_flag_test(eve, BM_ELEM_SELECT);
@@ -287,6 +281,7 @@ static bool edbm_backbuf_check_and_select_verts(struct EditSelectBuf_Cache *esel
}
static bool edbm_backbuf_check_and_select_edges(struct EditSelectBuf_Cache *esel,
+ Depsgraph *depsgraph,
Object *ob,
BMEditMesh *em,
const eSelectOp sel_op)
@@ -296,8 +291,12 @@ static bool edbm_backbuf_check_and_select_edges(struct EditSelectBuf_Cache *esel
bool changed = false;
const BLI_bitmap *select_bitmap = esel->select_bitmap;
- uint index = DRW_select_context_offset_for_object_elem(ob->runtime.select_id, SCE_SELECT_EDGE);
+ uint index = DRW_select_buffer_context_offset_for_object_elem(depsgraph, ob, SCE_SELECT_EDGE);
+ if (index == 0) {
+ return false;
+ }
+ index -= 1;
BM_ITER_MESH (eed, &iter, em->bm, BM_EDGES_OF_MESH) {
if (!BM_elem_flag_test(eed, BM_ELEM_HIDDEN)) {
const bool is_select = BM_elem_flag_test(eed, BM_ELEM_SELECT);
@@ -314,6 +313,7 @@ static bool edbm_backbuf_check_and_select_edges(struct EditSelectBuf_Cache *esel
}
static bool edbm_backbuf_check_and_select_faces(struct EditSelectBuf_Cache *esel,
+ Depsgraph *depsgraph,
Object *ob,
BMEditMesh *em,
const eSelectOp sel_op)
@@ -323,8 +323,12 @@ static bool edbm_backbuf_check_and_select_faces(struct EditSelectBuf_Cache *esel
bool changed = false;
const BLI_bitmap *select_bitmap = esel->select_bitmap;
- uint index = DRW_select_context_offset_for_object_elem(ob->runtime.select_id, SCE_SELECT_FACE);
+ uint index = DRW_select_buffer_context_offset_for_object_elem(depsgraph, ob, SCE_SELECT_FACE);
+ if (index == 0) {
+ return false;
+ }
+ index -= 1;
BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
if (!BM_elem_flag_test(efa, BM_ELEM_HIDDEN)) {
const bool is_select = BM_elem_flag_test(efa, BM_ELEM_SELECT);
@@ -734,10 +738,12 @@ static void do_lasso_select_mesh__doSelectEdge_pass0(void *user_data,
{
struct LassoSelectUserData_ForMeshEdge *data_for_edge = user_data;
LassoSelectUserData *data = data_for_edge->data;
- const bool is_visible = (data_for_edge->esel ?
- BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap,
- data_for_edge->backbuf_offset + index) :
- true);
+ bool is_visible = true;
+ if (data_for_edge->backbuf_offset) {
+ uint bitmap_inedx = data_for_edge->backbuf_offset + index - 1;
+ is_visible = BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap, bitmap_inedx);
+ }
+
const bool is_select = BM_elem_flag_test(eed, BM_ELEM_SELECT);
const bool is_inside =
(is_visible && edge_fully_inside_rect(data->rect_fl, screen_co_a, screen_co_b) &&
@@ -758,10 +764,12 @@ static void do_lasso_select_mesh__doSelectEdge_pass1(void *user_data,
{
struct LassoSelectUserData_ForMeshEdge *data_for_edge = user_data;
LassoSelectUserData *data = data_for_edge->data;
- const bool is_visible = (data_for_edge->esel ?
- BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap,
- data_for_edge->backbuf_offset + index) :
- true);
+ bool is_visible = true;
+ if (data_for_edge->backbuf_offset) {
+ uint bitmap_inedx = data_for_edge->backbuf_offset + index - 1;
+ is_visible = BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap, bitmap_inedx);
+ }
+
const bool is_select = BM_elem_flag_test(eed, BM_ELEM_SELECT);
const bool is_inside = (is_visible && BLI_lasso_is_edge_inside(data->mcords,
data->moves,
@@ -826,16 +834,17 @@ static bool do_lasso_select_mesh(ViewContext *vc,
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (use_zbuf) {
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, ts->selectmode);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_poly(buffer_len, mcords, moves, &rect);
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_poly(
+ vc->depsgraph, vc->ar, vc->v3d, mcords, moves, &rect, NULL);
}
}
if (ts->selectmode & SCE_SELECT_VERTEX) {
if (use_zbuf) {
- data.is_changed |= edbm_backbuf_check_and_select_verts(esel, vc->obedit, vc->em, sel_op);
+ data.is_changed |= edbm_backbuf_check_and_select_verts(
+ esel, vc->depsgraph, vc->obedit, vc->em, sel_op);
}
else {
mesh_foreachScreenVert(
@@ -847,21 +856,25 @@ static bool do_lasso_select_mesh(ViewContext *vc,
struct LassoSelectUserData_ForMeshEdge data_for_edge = {
.data = &data,
.esel = use_zbuf ? esel : NULL,
- .backbuf_offset = use_zbuf ? DRW_select_context_offset_for_object_elem(
- vc->obedit->runtime.select_id, SCE_SELECT_EDGE) :
+ .backbuf_offset = use_zbuf ? DRW_select_buffer_context_offset_for_object_elem(
+ vc->depsgraph, vc->obedit, SCE_SELECT_EDGE) :
0,
};
- mesh_foreachScreenEdge(
- vc, do_lasso_select_mesh__doSelectEdge_pass0, &data_for_edge, V3D_PROJ_TEST_CLIP_NEAR);
+
+ const eV3DProjTest clip_flag = V3D_PROJ_TEST_CLIP_NEAR |
+ (use_zbuf ? 0 : V3D_PROJ_TEST_CLIP_BB);
+ mesh_foreachScreenEdge_clip_bb_segment(
+ vc, do_lasso_select_mesh__doSelectEdge_pass0, &data_for_edge, clip_flag);
if (data.is_done == false) {
- mesh_foreachScreenEdge(
- vc, do_lasso_select_mesh__doSelectEdge_pass1, &data_for_edge, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge_clip_bb_segment(
+ vc, do_lasso_select_mesh__doSelectEdge_pass1, &data_for_edge, clip_flag);
}
}
if (ts->selectmode & SCE_SELECT_FACE) {
if (use_zbuf) {
- data.is_changed |= edbm_backbuf_check_and_select_faces(esel, vc->obedit, vc->em, sel_op);
+ data.is_changed |= edbm_backbuf_check_and_select_faces(
+ esel, vc->depsgraph, vc->obedit, vc->em, sel_op);
}
else {
mesh_foreachScreenFace(
@@ -1134,10 +1147,10 @@ static bool do_lasso_select_paintvert(ViewContext *vc,
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (use_zbuf) {
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_VERTEX);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_poly(buffer_len, mcords, moves, &rect);
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_poly(
+ vc->depsgraph, vc->ar, vc->v3d, mcords, moves, &rect, NULL);
}
}
@@ -1193,10 +1206,10 @@ static bool do_lasso_select_paintface(ViewContext *vc,
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (esel == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_FACE);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_poly(buffer_len, mcords, moves, &rect);
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_poly(
+ vc->depsgraph, vc->ar, vc->v3d, mcords, moves, &rect, NULL);
}
if (esel->select_bitmap) {
@@ -1268,9 +1281,15 @@ static bool view3d_lasso_select(
}
else if (ob && (ob->mode & OB_MODE_POSE)) {
changed_multi |= do_lasso_select_pose(vc, mcords, moves, sel_op);
+ if (changed_multi) {
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+ }
}
else {
changed_multi |= do_lasso_select_objects(vc, mcords, moves, sel_op);
+ if (changed_multi) {
+ ED_outliner_select_sync_from_object_tag(C);
+ }
}
}
else { /* Edit Mode */
@@ -1291,12 +1310,15 @@ static bool view3d_lasso_select(
break;
case OB_ARMATURE:
changed = do_lasso_select_armature(vc, mcords, moves, sel_op);
+ if (changed) {
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+ }
break;
case OB_MBALL:
changed = do_lasso_select_meta(vc, mcords, moves, sel_op);
break;
default:
- assert(!"lasso select on incorrect object type");
+ BLI_assert(!"lasso select on incorrect object type");
break;
}
@@ -1476,6 +1498,9 @@ static int object_select_menu_exec(bContext *C, wmOperator *op)
Scene *scene = CTX_data_scene(C);
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
+
+ ED_outliner_select_sync_from_object_tag(C);
+
return OPERATOR_FINISHED;
}
else {
@@ -2338,6 +2363,9 @@ static int view3d_select_exec(bContext *C, wmOperator *op)
if (!retval && deselect_all) {
retval = ED_armature_edit_deselect_all_visible_multi(C);
}
+ if (retval) {
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+ }
}
else if (obedit->type == OB_LATTICE) {
retval = ED_lattice_select_pick(C, location, extend, deselect, toggle);
@@ -2398,6 +2426,15 @@ static int view3d_select_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SELECT);
}
}
+
+ if (retval) {
+ if (obact && obact->mode & OB_MODE_POSE) {
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+ }
+ else {
+ ED_outliner_select_sync_from_object_tag(C);
+ }
+ }
}
/* Pass-through allows tweaks
@@ -2549,10 +2586,10 @@ static bool do_paintvert_box_select(ViewContext *vc,
else if (use_zbuf) {
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_VERTEX);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_rect(buffer_len, rect);
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_rect(
+ vc->depsgraph, vc->ar, vc->v3d, rect, NULL);
}
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_verts_obmode(me, esel, sel_op);
@@ -2604,10 +2641,10 @@ static bool do_paintface_box_select(ViewContext *vc,
else {
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_FACE);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_rect(buffer_len, rect);
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_rect(
+ vc->depsgraph, vc->ar, vc->v3d, rect, NULL);
}
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_faces_obmode(me, esel, sel_op);
@@ -2730,10 +2767,12 @@ static void do_mesh_box_select__doSelectEdge_pass0(
{
struct BoxSelectUserData_ForMeshEdge *data_for_edge = userData;
BoxSelectUserData *data = data_for_edge->data;
- const bool is_visible = (data_for_edge->esel ?
- BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap,
- data_for_edge->backbuf_offset + index) :
- true);
+ bool is_visible = true;
+ if (data_for_edge->backbuf_offset) {
+ uint bitmap_inedx = data_for_edge->backbuf_offset + index - 1;
+ is_visible = BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap, bitmap_inedx);
+ }
+
const bool is_select = BM_elem_flag_test(eed, BM_ELEM_SELECT);
const bool is_inside = (is_visible &&
edge_fully_inside_rect(data->rect_fl, screen_co_a, screen_co_b));
@@ -2749,10 +2788,12 @@ static void do_mesh_box_select__doSelectEdge_pass1(
{
struct BoxSelectUserData_ForMeshEdge *data_for_edge = userData;
BoxSelectUserData *data = data_for_edge->data;
- const bool is_visible = (data_for_edge->esel ?
- BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap,
- data_for_edge->backbuf_offset + index) :
- true);
+ bool is_visible = true;
+ if (data_for_edge->backbuf_offset) {
+ uint bitmap_inedx = data_for_edge->backbuf_offset + index - 1;
+ is_visible = BLI_BITMAP_TEST_BOOL(data_for_edge->esel->select_bitmap, bitmap_inedx);
+ }
+
const bool is_select = BM_elem_flag_test(eed, BM_ELEM_SELECT);
const bool is_inside = (is_visible && edge_inside_rect(data->rect_fl, screen_co_a, screen_co_b));
const int sel_op_result = ED_select_op_action_deselected(data->sel_op, is_select, is_inside);
@@ -2802,16 +2843,17 @@ static bool do_mesh_box_select(ViewContext *vc,
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (use_zbuf) {
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, ts->selectmode);
esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_rect(buffer_len, rect);
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_rect(
+ vc->depsgraph, vc->ar, vc->v3d, rect, NULL);
}
}
if (ts->selectmode & SCE_SELECT_VERTEX) {
if (use_zbuf) {
- data.is_changed |= edbm_backbuf_check_and_select_verts(esel, vc->obedit, vc->em, sel_op);
+ data.is_changed |= edbm_backbuf_check_and_select_verts(
+ esel, vc->depsgraph, vc->obedit, vc->em, sel_op);
}
else {
mesh_foreachScreenVert(
@@ -2823,21 +2865,25 @@ static bool do_mesh_box_select(ViewContext *vc,
struct BoxSelectUserData_ForMeshEdge cb_data = {
.data = &data,
.esel = use_zbuf ? esel : NULL,
- .backbuf_offset = use_zbuf ? DRW_select_context_offset_for_object_elem(
- vc->obedit->runtime.select_id, SCE_SELECT_EDGE) :
+ .backbuf_offset = use_zbuf ? DRW_select_buffer_context_offset_for_object_elem(
+ vc->depsgraph, vc->obedit, SCE_SELECT_EDGE) :
0,
};
- mesh_foreachScreenEdge(
- vc, do_mesh_box_select__doSelectEdge_pass0, &cb_data, V3D_PROJ_TEST_CLIP_NEAR);
+
+ const eV3DProjTest clip_flag = V3D_PROJ_TEST_CLIP_NEAR |
+ (use_zbuf ? 0 : V3D_PROJ_TEST_CLIP_BB);
+ mesh_foreachScreenEdge_clip_bb_segment(
+ vc, do_mesh_box_select__doSelectEdge_pass0, &cb_data, clip_flag);
if (data.is_done == false) {
- mesh_foreachScreenEdge(
- vc, do_mesh_box_select__doSelectEdge_pass1, &cb_data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge_clip_bb_segment(
+ vc, do_mesh_box_select__doSelectEdge_pass1, &cb_data, clip_flag);
}
}
if (ts->selectmode & SCE_SELECT_FACE) {
if (use_zbuf) {
- data.is_changed |= edbm_backbuf_check_and_select_faces(esel, vc->obedit, vc->em, sel_op);
+ data.is_changed |= edbm_backbuf_check_and_select_faces(
+ esel, vc->depsgraph, vc->obedit, vc->em, sel_op);
}
else {
mesh_foreachScreenFace(
@@ -3209,6 +3255,7 @@ static int view3d_box_select_exec(bContext *C, wmOperator *op)
if (changed) {
DEG_id_tag_update(&vc.obedit->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, vc.obedit);
+ ED_outliner_select_sync_from_edit_bone_tag(C);
}
break;
case OB_LATTICE:
@@ -3219,7 +3266,7 @@ static int view3d_box_select_exec(bContext *C, wmOperator *op)
}
break;
default:
- assert(!"box select on incorrect object type");
+ BLI_assert(!"box select on incorrect object type");
break;
}
changed_multi |= changed;
@@ -3243,9 +3290,15 @@ static int view3d_box_select_exec(bContext *C, wmOperator *op)
}
else if (vc.obact && vc.obact->mode & OB_MODE_POSE) {
changed_multi = do_pose_box_select(C, &vc, &rect, sel_op);
+ if (changed_multi) {
+ ED_outliner_select_sync_from_pose_bone_tag(C);
+ }
}
else { /* object mode with none active */
changed_multi = do_object_box_select(C, &vc, &rect, sel_op);
+ if (changed_multi) {
+ ED_outliner_select_sync_from_object_tag(C);
+ }
}
}
@@ -3383,21 +3436,23 @@ static bool mesh_circle_select(ViewContext *vc,
if (use_zbuf) {
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, ts->selectmode);
}
}
struct EditSelectBuf_Cache *esel = wm_userdata->data;
if (use_zbuf) {
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_circle(buffer_len, mval, (int)(rad + 1.0f));
+ if (esel->select_bitmap == NULL) {
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_circle(
+ vc->depsgraph, vc->ar, vc->v3d, mval, (int)(rad + 1.0f), NULL);
+ }
}
if (ts->selectmode & SCE_SELECT_VERTEX) {
if (use_zbuf) {
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_verts(
- esel, vc->obedit, vc->em, select ? SEL_OP_ADD : SEL_OP_SUB);
+ esel, vc->depsgraph, vc->obedit, vc->em, select ? SEL_OP_ADD : SEL_OP_SUB);
}
}
else {
@@ -3409,11 +3464,12 @@ static bool mesh_circle_select(ViewContext *vc,
if (use_zbuf) {
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_edges(
- esel, vc->obedit, vc->em, select ? SEL_OP_ADD : SEL_OP_SUB);
+ esel, vc->depsgraph, vc->obedit, vc->em, select ? SEL_OP_ADD : SEL_OP_SUB);
}
}
else {
- mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR);
+ mesh_foreachScreenEdge_clip_bb_segment(
+ vc, mesh_circle_doSelectEdge, &data, V3D_PROJ_TEST_CLIP_NEAR | V3D_PROJ_TEST_CLIP_BB);
}
}
@@ -3421,7 +3477,7 @@ static bool mesh_circle_select(ViewContext *vc,
if (use_zbuf) {
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_faces(
- esel, vc->obedit, vc->em, select ? SEL_OP_ADD : SEL_OP_SUB);
+ esel, vc->depsgraph, vc->obedit, vc->em, select ? SEL_OP_ADD : SEL_OP_SUB);
}
}
else {
@@ -3429,13 +3485,6 @@ static bool mesh_circle_select(ViewContext *vc,
}
}
- if (use_zbuf) {
- if (esel->select_bitmap != NULL) {
- MEM_freeN(esel->select_bitmap);
- esel->select_bitmap = NULL;
- }
- }
-
changed |= data.is_changed;
if (changed) {
@@ -3461,13 +3510,13 @@ static bool paint_facesel_circle_select(ViewContext *vc,
}
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_FACE);
}
{
struct EditSelectBuf_Cache *esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_circle(buffer_len, mval, (int)(rad + 1.0f));
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_circle(
+ vc->depsgraph, vc->ar, vc->v3d, mval, (int)(rad + 1.0f), NULL);
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_faces_obmode(me, esel, sel_op);
MEM_freeN(esel->select_bitmap);
@@ -3507,22 +3556,22 @@ static bool paint_vertsel_circle_select(ViewContext *vc,
bool changed = false;
if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
- changed |= paintvert_deselect_all_visible(
- ob, SEL_DESELECT, false); /* flush selection at the end */
+ /* Flush selection at the end. */
+ changed |= paintvert_deselect_all_visible(ob, SEL_DESELECT, false);
}
const bool select = (sel_op != SEL_OP_SUB);
if (use_zbuf) {
if (wm_userdata->data == NULL) {
- editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc);
+ editselect_buf_cache_init_with_generic_userdata(wm_userdata, vc, SCE_SELECT_VERTEX);
}
}
if (use_zbuf) {
struct EditSelectBuf_Cache *esel = wm_userdata->data;
- const uint buffer_len = DRW_select_context_elem_len();
- esel->select_bitmap = ED_select_buffer_bitmap_from_circle(buffer_len, mval, (int)(rad + 1.0f));
+ esel->select_bitmap = DRW_select_buffer_bitmap_from_circle(
+ vc->depsgraph, vc->ar, vc->v3d, mval, (int)(rad + 1.0f), NULL);
if (esel->select_bitmap != NULL) {
changed |= edbm_backbuf_check_and_select_verts_obmode(me, esel, sel_op);
MEM_freeN(esel->select_bitmap);
@@ -3873,7 +3922,8 @@ static bool mball_circle_select(ViewContext *vc,
/** Callbacks for circle selection in Editmode */
-static bool obedit_circle_select(ViewContext *vc,
+static bool obedit_circle_select(bContext *C,
+ ViewContext *vc,
wmGenericUserData *wm_userdata,
const eSelectOp sel_op,
const int mval[2],
@@ -3894,6 +3944,9 @@ static bool obedit_circle_select(ViewContext *vc,
break;
case OB_ARMATURE:
changed = armature_circle_select(vc, sel_op, mval, rad);
+ if (changed) {
+ ED_outliner_select_sync_from_edit_bone_tag(C);
+ }
break;
case OB_MBALL:
changed = mball_circle_select(vc, sel_op, mval, rad);
@@ -3982,7 +4035,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
obedit = vc.obedit;
if (obedit) {
- obedit_circle_select(&vc, wm_userdata, sel_op, mval, (float)radius);
+ obedit_circle_select(C, &vc, wm_userdata, sel_op, mval, (float)radius);
}
else if (BKE_paint_select_face_test(obact)) {
paint_facesel_circle_select(&vc, wm_userdata, sel_op, mval, (float)radius);
@@ -3992,6 +4045,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
}
else if (obact->mode & OB_MODE_POSE) {
pose_circle_select(&vc, sel_op, mval, (float)radius);
+ ED_outliner_select_sync_from_pose_bone_tag(C);
}
else {
BLI_assert(0);
@@ -4012,6 +4066,8 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
if (object_circle_select(&vc, sel_op, mval, (float)radius)) {
DEG_id_tag_update(&vc.scene->id, ID_RECALC_SELECT);
WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc.scene);
+
+ ED_outliner_select_sync_from_object_tag(C);
}
}
@@ -4019,6 +4075,13 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
if (wm_userdata == &wm_userdata_buf) {
WM_generic_user_data_free(wm_userdata);
}
+ else {
+ struct EditSelectBuf_Cache *esel = wm_userdata->data;
+ if (esel && esel->select_bitmap) {
+ MEM_freeN(esel->select_bitmap);
+ esel->select_bitmap = NULL;
+ }
+ }
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/space_view3d/view3d_utils.c b/source/blender/editors/space_view3d/view3d_utils.c
index bb8c1a40a05..1af94e3ade5 100644
--- a/source/blender/editors/space_view3d/view3d_utils.c
+++ b/source/blender/editors/space_view3d/view3d_utils.c
@@ -622,8 +622,8 @@ bool ED_view3d_camera_autokey(
/**
* Call after modifying a locked view.
*
- * \note Not every view edit currently auto-keys (numpad for eg),
- * this is complicated because of smoothview.
+ * \note Not every view edit currently auto-keys (num-pad for eg),
+ * this is complicated because of smooth-view.
*/
bool ED_view3d_camera_lock_autokey(View3D *v3d,
RegionView3D *rv3d,
@@ -1212,9 +1212,17 @@ float ED_view3d_radius_to_dist(const View3D *v3d,
/** \name View Distance Utilities
* \{ */
-/* problem - ofs[3] can be on same location as camera itself.
- * Blender needs proper dist value for zoom.
- * use fallback_dist to override small values
+/**
+ * This function solves the problem of having to switch between camera and non-camera views.
+ *
+ * When viewing from the perspective of \a mat, and having the view center \a ofs,
+ * this calculates a distance from \a ofs to the matrix \a mat.
+ * Using \a fallback_dist when the distance would be too small.
+ *
+ * \param mat: A matrix use for the view-point (typically the camera objects matrix).
+ * \param ofs: Orbit center (negated), matching #RegionView3D.ofs, which is typically passed in.
+ * \param fallback_dist: The distance to use if the object is too near or in front of \a ofs.
+ * \returns A newly calculated distance or the fallback.
*/
float ED_view3d_offset_distance(float mat[4][4], const float ofs[3], const float fallback_dist)
{
@@ -1261,6 +1269,36 @@ void ED_view3d_distance_set(RegionView3D *rv3d, const float dist)
rv3d->dist = dist;
}
+/**
+ * Change the distance & offset to match the depth of \a dist_co along the view axis.
+ *
+ * \param dist_co: A world-space location to use for the new depth.
+ * \param dist_min: Resulting distances below this will be ignored.
+ * \return Success if the distance was set.
+ */
+bool ED_view3d_distance_set_from_location(RegionView3D *rv3d,
+ const float dist_co[3],
+ const float dist_min)
+{
+ float viewinv[4];
+ invert_qt_qt_normalized(viewinv, rv3d->viewquat);
+
+ float tvec[3] = {0.0f, 0.0f, -1.0f};
+ mul_qt_v3(viewinv, tvec);
+
+ float dist_co_local[3];
+ negate_v3_v3(dist_co_local, rv3d->ofs);
+ sub_v3_v3v3(dist_co_local, dist_co, dist_co_local);
+ const float delta = dot_v3v3(tvec, dist_co_local);
+ const float dist_new = rv3d->dist + delta;
+ if (dist_new >= dist_min) {
+ madd_v3_v3fl(rv3d->ofs, tvec, -delta);
+ rv3d->dist = dist_new;
+ return true;
+ }
+ return false;
+}
+
/** \} */
/* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/space_view3d/view3d_walk.c b/source/blender/editors/space_view3d/view3d_walk.c
index c5585857b55..91c05f5cac6 100644
--- a/source/blender/editors/space_view3d/view3d_walk.c
+++ b/source/blender/editors/space_view3d/view3d_walk.c
@@ -65,9 +65,6 @@
/* ensure the target position is one we can reach, see: T45771 */
#define USE_PIXELSIZE_NATIVE_SUPPORT
-/* prototypes */
-static float getVelocityZeroTime(const float gravity, const float velocity);
-
/* NOTE: these defines are saved in keymap files,
* do not change values but just add new ones */
enum {
@@ -194,69 +191,89 @@ typedef struct WalkInfo {
struct Depsgraph *depsgraph;
Scene *scene;
- wmTimer *timer; /* needed for redraws */
+ /** Needed for for updating that isn't triggered by input. */
+ wmTimer *timer;
short state;
bool redraw;
- int prev_mval[2]; /* previous 2D mouse values */
- int center_mval[2]; /* center mouse values */
+ /**
+ * Needed for auto-keyframing, when animation isn't playing, only keyframe on confirmation.
+ *
+ * Currently we can't cancel this operator usefully while recording on animation playback
+ * (this would need to un-key all previous frames).
+ */
+ bool anim_playing;
+
+ /** Previous 2D mouse values. */
+ int prev_mval[2];
+ /** Center mouse values. */
+ int center_mval[2];
+
int moffset[2];
#ifdef WITH_INPUT_NDOF
- wmNDOFMotionData *ndof; /* latest 3D mouse values */
+ /** Latest 3D mouse values. */
+ wmNDOFMotionData *ndof;
#endif
/* walk state state */
- float base_speed; /* the base speed without run/slow down modifications */
- float speed; /* the speed the view is moving per redraw */
- float grid; /* world scale 1.0 default */
+ /** The base speed without run/slow down modifications. */
+ float base_speed;
+ /** The speed the view is moving per redraw. */
+ float speed;
+ /** World scale 1.0 default. */
+ float grid;
/* compare between last state */
- double time_lastdraw; /* time between draws */
+ /** Time between draws. */
+ double time_lastdraw;
void *draw_handle_pixel;
/* use for some lag */
- float dvec_prev[3]; /* old for some lag */
+ /** Keep the previous value to smooth transitions (use lag). */
+ float dvec_prev[3];
- /* walk/fly */
+ /** Walk/free movement. */
eWalkMethod navigation_mode;
/* teleport */
WalkTeleport teleport;
- /* look speed factor - user preferences */
+ /** Look speed factor - user preferences. */
float mouse_speed;
- /* speed adjustments */
+ /** Speed adjustments. */
bool is_fast;
bool is_slow;
- /* mouse reverse */
+ /** Mouse reverse. */
bool is_reversed;
#ifdef USE_TABLET_SUPPORT
- /* check if we had a cursor event before */
+ /** Check if we had a cursor event before. */
bool is_cursor_first;
- /* tablet devices (we can't relocate the cursor) */
+ /** Tablet devices (we can't relocate the cursor). */
bool is_cursor_absolute;
#endif
- /* gravity system */
+ /** Gravity system. */
eWalkGravityState gravity_state;
float gravity;
- /* height to use in walk mode */
+ /** Height to use in walk mode. */
float view_height;
- /* counting system to allow movement to continue if a direction (WASD) key is still pressed */
+ /** Counting system to allow movement to continue if a direction (WASD) key is still pressed. */
int active_directions;
float speed_jump;
- float jump_height; /* maximum jump height */
- float speed_factor; /* to use for fast/slow speeds */
+ /** Maximum jump height. */
+ float jump_height;
+ /** To use for fast/slow speeds. */
+ float speed_factor;
struct SnapObjectContext *snap_context;
@@ -264,6 +281,13 @@ typedef struct WalkInfo {
} WalkInfo;
+/* prototypes */
+#ifdef WITH_INPUT_NDOF
+static void walkApply_ndof(bContext *C, WalkInfo *walk, bool is_confirm);
+#endif /* WITH_INPUT_NDOF */
+static int walkApply(bContext *C, struct WalkInfo *walk, bool force_autokey);
+static float getVelocityZeroTime(const float gravity, const float velocity);
+
static void drawWalkPixel(const struct bContext *UNUSED(C), ARegion *ar, void *arg)
{
/* draws an aim/cross in the center */
@@ -420,6 +444,7 @@ static float userdef_speed = -1.f;
static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
{
+ wmWindowManager *wm = CTX_wm_manager(C);
Main *bmain = CTX_data_main(C);
wmWindow *win = CTX_wm_window(C);
@@ -512,6 +537,8 @@ static bool initWalkInfo(bContext *C, WalkInfo *walk, wmOperator *op)
walk->ndof = NULL;
#endif
+ walk->anim_playing = ED_screen_animation_playing(wm);
+
walk->time_lastdraw = PIL_check_seconds_timer();
walk->draw_handle_pixel = ED_region_draw_cb_activate(
@@ -563,6 +590,18 @@ static int walkEnd(bContext *C, WalkInfo *walk)
if (walk->state == WALK_RUNNING) {
return OPERATOR_RUNNING_MODAL;
}
+ else if (walk->state == WALK_CONFIRM) {
+ /* Needed for auto_keyframe. */
+#ifdef WITH_INPUT_NDOF
+ if (walk->ndof) {
+ walkApply_ndof(C, walk, true);
+ }
+ else
+#endif /* WITH_INPUT_NDOF */
+ {
+ walkApply(C, walk, true);
+ }
+ }
#ifdef NDOF_WALK_DEBUG
puts("\n-- walk end --");
@@ -885,9 +924,15 @@ static void walkEvent(bContext *C, WalkInfo *walk, const wmEvent *event)
static void walkMoveCamera(bContext *C,
WalkInfo *walk,
const bool do_rotate,
- const bool do_translate)
+ const bool do_translate,
+ const bool is_confirm)
{
- ED_view3d_cameracontrol_update(walk->v3d_camera_control, true, C, do_rotate, do_translate);
+ /* we only consider autokeying on playback or if user confirmed walk on the same frame
+ * otherwise we get a keyframe even if the user cancels. */
+ const bool use_autokey = is_confirm || walk->anim_playing;
+
+ ED_view3d_cameracontrol_update(
+ walk->v3d_camera_control, use_autokey, C, do_rotate, do_translate);
}
static float getFreeFallDistance(const float gravity, const float time)
@@ -900,7 +945,7 @@ static float getVelocityZeroTime(const float gravity, const float velocity)
return velocity / gravity;
}
-static int walkApply(bContext *C, WalkInfo *walk)
+static int walkApply(bContext *C, WalkInfo *walk, bool is_confirm)
{
#define WALK_ROTATE_FAC 2.2f /* more is faster */
#define WALK_TOP_LIMIT DEG2RADF(85.0f)
@@ -945,7 +990,7 @@ static int walkApply(bContext *C, WalkInfo *walk)
/* Should we redraw? */
if ((walk->active_directions) || moffset[0] || moffset[1] ||
walk->teleport.state == WALK_TELEPORT_STATE_ON ||
- walk->gravity_state != WALK_GRAVITY_STATE_OFF) {
+ walk->gravity_state != WALK_GRAVITY_STATE_OFF || is_confirm) {
float dvec_tmp[3];
/* time how fast it takes for us to redraw,
@@ -1237,7 +1282,7 @@ static int walkApply(bContext *C, WalkInfo *walk)
if (rv3d->persp == RV3D_CAMOB) {
const bool do_rotate = (moffset[0] || moffset[1]);
const bool do_translate = (walk->speed != 0.0f);
- walkMoveCamera(C, walk, do_rotate, do_translate);
+ walkMoveCamera(C, walk, do_rotate, do_translate, is_confirm);
}
}
else {
@@ -1260,7 +1305,7 @@ static int walkApply(bContext *C, WalkInfo *walk)
}
#ifdef WITH_INPUT_NDOF
-static void walkApply_ndof(bContext *C, WalkInfo *walk)
+static void walkApply_ndof(bContext *C, WalkInfo *walk, bool is_confirm)
{
Object *lock_ob = ED_view3d_cameracontrol_object_get(walk->v3d_camera_control);
bool has_translate, has_rotate;
@@ -1277,7 +1322,7 @@ static void walkApply_ndof(bContext *C, WalkInfo *walk)
walk->redraw = true;
if (walk->rv3d->persp == RV3D_CAMOB) {
- walkMoveCamera(C, walk, has_rotate, has_translate);
+ walkMoveCamera(C, walk, has_rotate, has_translate, is_confirm);
}
}
}
@@ -1333,13 +1378,13 @@ static int walk_modal(bContext *C, wmOperator *op, const wmEvent *event)
#ifdef WITH_INPUT_NDOF
if (walk->ndof) { /* 3D mouse overrules [2D mouse + timer] */
if (event->type == NDOF_MOTION) {
- walkApply_ndof(C, walk);
+ walkApply_ndof(C, walk, false);
}
}
else
#endif /* WITH_INPUT_NDOF */
if (event->type == TIMER && event->customdata == walk->timer) {
- walkApply(C, walk);
+ walkApply(C, walk, false);
}
do_draw |= walk->redraw;
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 5ef86c71d2d..6478928a6b6 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2009,19 +2009,18 @@ static void drawTransformView(const struct bContext *C, ARegion *ar, void *arg)
* to warn that autokeying is enabled */
static void drawAutoKeyWarning(TransInfo *UNUSED(t), ARegion *ar)
{
- rcti rect;
const char *printable = IFACE_("Auto Keying On");
float printable_size[2];
int xco, yco;
- ED_region_visible_rect(ar, &rect);
+ const rcti *rect = ED_region_visible_rect(ar);
const int font_id = BLF_default();
BLF_width_and_height(
font_id, printable, BLF_DRAW_STR_DUMMY_MAX, &printable_size[0], &printable_size[1]);
- xco = (rect.xmax - U.widget_unit) - (int)printable_size[0];
- yco = (rect.ymax - U.widget_unit);
+ xco = (rect->xmax - U.widget_unit) - (int)printable_size[0];
+ yco = (rect->ymax - U.widget_unit);
/* warning text (to clarify meaning of overlays)
* - original color was red to match the icon, but that clashes badly with a less nasty border
@@ -2093,15 +2092,11 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
if ((prop = RNA_struct_find_property(op->ptr, "value"))) {
- float values[4];
-
- copy_v4_v4(values, (t->flag & T_AUTOVALUES) ? t->auto_values : t->values);
-
if (RNA_property_array_check(prop)) {
- RNA_property_float_set_array(op->ptr, prop, values);
+ RNA_property_float_set_array(op->ptr, prop, t->values_final);
}
else {
- RNA_property_float_set(op->ptr, prop, values[0]);
+ RNA_property_float_set(op->ptr, prop, t->values_final[0]);
}
}
@@ -2488,8 +2483,8 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
t->redraw = TREDRAW_HARD;
}
else {
- copy_v4_v4(t->auto_values, values);
- t->flag |= T_AUTOVALUES;
+ copy_v4_v4(t->values, values);
+ t->flag |= T_INPUT_IS_VALUES_FINAL;
}
}
@@ -3374,7 +3369,7 @@ static void Bend(TransInfo *t, const int UNUSED(mval[2]))
values.scale = values.scale / data->warp_init_dist;
}
- copy_v2_v2(t->values, values.vector);
+ copy_v2_v2(t->values_final, values.vector);
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -3615,7 +3610,7 @@ static void applyShear(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &value);
- t->values[0] = value;
+ t->values_final[0] = value;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -3946,10 +3941,10 @@ static void ElementResize(TransInfo *t, TransDataContainer *tc, TransData *td, f
/* scale stroke thickness */
if (td->val) {
- snapGridIncrement(t, t->values);
- applyNumInput(&t->num, t->values);
+ snapGridIncrement(t, t->values_final);
+ applyNumInput(&t->num, t->values_final);
- float ratio = t->values[0];
+ float ratio = t->values_final[0];
*td->val = td->ival * ratio * gps->runtime.multi_frame_falloff;
CLAMP_MIN(*td->val, 0.001f);
}
@@ -3976,24 +3971,24 @@ static void applyResize(TransInfo *t, const int UNUSED(mval[2]))
int i;
char str[UI_MAX_DRAW_STR];
- if (t->flag & T_AUTOVALUES) {
- copy_v3_v3(t->values, t->auto_values);
+ if (t->flag & T_INPUT_IS_VALUES_FINAL) {
+ copy_v3_v3(t->values_final, t->values);
}
else {
float ratio = t->values[0];
- copy_v3_fl(t->values, ratio);
+ copy_v3_fl(t->values_final, ratio);
- snapGridIncrement(t, t->values);
+ snapGridIncrement(t, t->values_final);
- if (applyNumInput(&t->num, t->values)) {
- constraintNumInput(t, t->values);
+ if (applyNumInput(&t->num, t->values_final)) {
+ constraintNumInput(t, t->values_final);
}
- applySnapping(t, t->values);
+ applySnapping(t, t->values_final);
}
- size_to_mat3(mat, t->values);
+ size_to_mat3(mat, t->values_final);
if (t->con.mode & CON_APPLY) {
t->con.applySize(t, NULL, NULL, mat);
@@ -4002,16 +3997,16 @@ static void applyResize(TransInfo *t, const int UNUSED(mval[2]))
int j = 0;
for (i = 0; i < 3; i++) {
if (!(t->con.mode & (CON_AXIS0 << i))) {
- t->values[i] = 1.0f;
+ t->values_final[i] = 1.0f;
}
else {
- pvec[j++] = t->values[i];
+ pvec[j++] = t->values_final[i];
}
}
headerResize(t, pvec, str);
}
else {
- headerResize(t, t->values, str);
+ headerResize(t, t->values_final, str);
}
copy_m3_m3(t->mat, mat); // used in gizmo
@@ -4032,8 +4027,8 @@ static void applyResize(TransInfo *t, const int UNUSED(mval[2]))
}
/* evil hack - redo resize if cliping needed */
- if (t->flag & T_CLIP_UV && clipUVTransform(t, t->values, 1)) {
- size_to_mat3(mat, t->values);
+ if (t->flag & T_CLIP_UV && clipUVTransform(t, t->values_final, 1)) {
+ size_to_mat3(mat, t->values_final);
if (t->con.mode & CON_APPLY) {
t->con.applySize(t, NULL, NULL, mat);
@@ -4103,29 +4098,28 @@ static void initSkinResize(TransInfo *t)
static void applySkinResize(TransInfo *t, const int UNUSED(mval[2]))
{
- float size[3], mat[3][3];
+ float mat[3][3];
int i;
char str[UI_MAX_DRAW_STR];
- copy_v3_fl(size, t->values[0]);
-
- snapGridIncrement(t, size);
-
- if (applyNumInput(&t->num, size)) {
- constraintNumInput(t, size);
+ if (t->flag & T_INPUT_IS_VALUES_FINAL) {
+ copy_v3_v3(t->values_final, t->values);
}
+ else {
+ copy_v3_fl(t->values_final, t->values[0]);
- applySnapping(t, size);
+ snapGridIncrement(t, t->values_final);
- if (t->flag & T_AUTOVALUES) {
- copy_v3_v3(size, t->auto_values);
+ if (applyNumInput(&t->num, t->values_final)) {
+ constraintNumInput(t, t->values_final);
+ }
+
+ applySnapping(t, t->values_final);
}
- copy_v3_v3(t->values, size);
+ size_to_mat3(mat, t->values_final);
- size_to_mat3(mat, size);
-
- headerResize(t, size, str);
+ headerResize(t, t->values_final, str);
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
TransData *td = tc->data;
@@ -4219,7 +4213,7 @@ static void applyToSphere(TransInfo *t, const int UNUSED(mval[2]))
CLAMP(ratio, 0.0f, 1.0f);
- t->values[0] = ratio;
+ t->values_final[0] = ratio;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -4612,6 +4606,10 @@ static void applyRotationValue(TransInfo *t,
}
axis_angle_normalized_to_mat3(mat, axis, angle);
+ /* Counter for needed updates (when we need to update to non-default matrix,
+ * we also need another update on next iteration to go back to default matrix,
+ * hence the '2' value used here, instead of a mere boolean). */
+ short do_update_matrix = 0;
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
TransData *td = tc->data;
@@ -4628,6 +4626,9 @@ static void applyRotationValue(TransInfo *t,
if (t->con.applyRot) {
t->con.applyRot(t, tc, td, axis, NULL);
angle_final = angle * td->factor;
+ /* Even though final angle might be identical to orig value,
+ * we have to update the rotation matrix in that case... */
+ do_update_matrix = 2;
}
else if (t->flag & T_PROP_EDIT) {
angle_final = angle * td->factor;
@@ -4650,11 +4651,17 @@ static void applyRotationValue(TransInfo *t,
axis_angle_normalized_to_mat3(mat, axis, angle_progress);
ElementRotation(t, tc, td, mat, t->around);
}
- axis_angle_normalized_to_mat3(mat, axis, angle_final);
+ do_update_matrix = 2;
}
else if (angle_final != angle) {
+ do_update_matrix = 2;
+ }
+
+ if (do_update_matrix > 0) {
axis_angle_normalized_to_mat3(mat, axis, angle_final);
+ do_update_matrix--;
}
+
ElementRotation(t, tc, td, mat, t->around);
}
}
@@ -4685,7 +4692,7 @@ static void applyRotation(TransInfo *t, const int UNUSED(mval[2]))
final = large_rotation_limit(final);
}
- t->values[0] = final;
+ t->values_final[0] = final;
headerRotation(t, str, final);
@@ -4782,7 +4789,7 @@ static void applyTrackball(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, phi);
- copy_v2_v2(t->values, phi);
+ copy_v2_v2(t->values_final, phi);
if (hasNumInput(&t->num)) {
char c[NUM_STR_REP_LEN * 2];
@@ -4935,6 +4942,8 @@ static void applyNormalRotation(TransInfo *t, const int UNUSED(mval[2]))
BKE_lnor_space_custom_normal_to_data(
bm->lnor_spacearr->lspacearr[lnor_ed->loop_index], lnor_ed->nloc, lnor_ed->clnors_data);
}
+
+ t->values_final[0] = angle;
}
recalcData(t);
@@ -5291,43 +5300,45 @@ static void applyTranslationValue(TransInfo *t, const float vec[3])
static void applyTranslation(TransInfo *t, const int UNUSED(mval[2]))
{
char str[UI_MAX_DRAW_STR];
- float value_final[3];
+ float values_final[3];
- if (t->flag & T_AUTOVALUES) {
- copy_v3_v3(t->values, t->auto_values);
+ if (t->flag & T_INPUT_IS_VALUES_FINAL) {
+ copy_v3_v3(t->values_final, t->values);
}
else {
+ copy_v3_v3(t->values_final, t->values);
if ((t->con.mode & CON_APPLY) == 0) {
- snapGridIncrement(t, t->values);
+ snapGridIncrement(t, t->values_final);
}
- if (applyNumInput(&t->num, t->values)) {
- removeAspectRatio(t, t->values);
+ if (applyNumInput(&t->num, t->values_final)) {
+ removeAspectRatio(t, t->values_final);
}
- applySnapping(t, t->values);
+ applySnapping(t, t->values_final);
}
+ copy_v3_v3(values_final, t->values_final);
if (t->con.mode & CON_APPLY) {
float pvec[3] = {0.0f, 0.0f, 0.0f};
- t->con.applyVec(t, NULL, NULL, t->values, value_final, pvec);
+ t->con.applyVec(t, NULL, NULL, t->values_final, values_final, pvec);
headerTranslation(t, pvec, str);
/* only so we have re-usable value with redo, see T46741. */
- mul_v3_m3v3(t->values, t->con.imtx, value_final);
+ mul_v3_m3v3(t->values_final, t->con.imtx, values_final);
}
else {
- headerTranslation(t, t->values, str);
- copy_v3_v3(value_final, t->values);
+ headerTranslation(t, t->values_final, str);
+ copy_v3_v3(values_final, t->values_final);
}
/* don't use 't->values' now on */
- applyTranslationValue(t, value_final);
+ applyTranslationValue(t, values_final);
/* evil hack - redo translation if clipping needed */
- if (t->flag & T_CLIP_UV && clipUVTransform(t, value_final, 0)) {
- applyTranslationValue(t, value_final);
+ if (t->flag & T_CLIP_UV && clipUVTransform(t, values_final, 0)) {
+ applyTranslationValue(t, values_final);
/* In proportional edit it can happen that */
/* vertices in the radius of the brush end */
@@ -5389,7 +5400,7 @@ static void applyShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &distance);
- t->values[0] = -distance;
+ t->values_final[0] = -distance;
/* header print for NumInput */
ofs += BLI_strncpy_rlen(str + ofs, TIP_("Shrink/Fatten:"), sizeof(str) - ofs);
@@ -5488,7 +5499,7 @@ static void applyTilt(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &final);
- t->values[0] = final;
+ t->values_final[0] = final;
if (hasNumInput(&t->num)) {
char c[NUM_STR_REP_LEN];
@@ -5498,7 +5509,7 @@ static void applyTilt(TransInfo *t, const int UNUSED(mval[2]))
BLI_snprintf(str, sizeof(str), TIP_("Tilt: %s° %s"), &c[0], t->proptext);
/* XXX For some reason, this seems needed for this op, else RNA prop is not updated... :/ */
- t->values[0] = final;
+ t->values_final[0] = final;
}
else {
BLI_snprintf(str, sizeof(str), TIP_("Tilt: %.2f° %s"), RAD2DEGF(final), t->proptext);
@@ -5570,7 +5581,7 @@ static void applyCurveShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &ratio);
- t->values[0] = ratio;
+ t->values_final[0] = ratio;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -5655,7 +5666,7 @@ static void applyMaskShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &ratio);
- t->values[0] = ratio;
+ t->values_final[0] = ratio;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -5768,7 +5779,7 @@ static void applyGPShrinkFatten(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &ratio);
- t->values[0] = ratio;
+ t->values_final[0] = ratio;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -5850,7 +5861,7 @@ static void applyGPOpacity(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &ratio);
- t->values[0] = ratio;
+ t->values_final[0] = ratio;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -5924,7 +5935,7 @@ static void applyPushPull(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &distance);
- t->values[0] = distance;
+ t->values_final[0] = distance;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -6023,7 +6034,7 @@ static void applyBevelWeight(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &weight);
- t->values[0] = weight;
+ t->values_final[0] = weight;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -6113,7 +6124,7 @@ static void applyCrease(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &crease);
- t->values[0] = crease;
+ t->values_final[0] = crease;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -6273,7 +6284,7 @@ static void applyBoneSize(TransInfo *t, const int UNUSED(mval[2]))
constraintNumInput(t, size);
}
- copy_v3_v3(t->values, size);
+ copy_v3_v3(t->values_final, size);
size_to_mat3(mat, size);
@@ -6344,7 +6355,7 @@ static void applyBoneEnvelope(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &ratio);
- t->values[0] = ratio;
+ t->values_final[0] = ratio;
/* header print for NumInput */
if (hasNumInput(&t->num)) {
@@ -6590,7 +6601,7 @@ static void slide_origdata_interp_data_vert(SlideOrigData *sod,
* and we do not want to mess up other shape keys */
BM_loop_interp_from_face(bm, l, f_copy, false, false);
- /* make sure face-attributes are correct (e.g. MTexPoly) */
+ /* make sure face-attributes are correct (e.g. #MLoopUV, #MLoopCol) */
BM_elem_attrs_copy_ex(sod->bm_origfaces, bm, f_copy, l->f, 0x0, CD_MASK_NORMAL);
/* weight the loop */
@@ -8158,7 +8169,7 @@ static void applyEdgeSlide(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &final);
- t->values[0] = final;
+ t->values_final[0] = final;
/* header string */
ofs += BLI_strncpy_rlen(str + ofs, TIP_("Edge Slide: "), sizeof(str) - ofs);
@@ -8769,7 +8780,7 @@ static void applyVertSlide(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &final);
- t->values[0] = final;
+ t->values_final[0] = final;
/* header string */
ofs += BLI_strncpy_rlen(str + ofs, TIP_("Vert Slide: "), sizeof(str) - ofs);
@@ -8840,7 +8851,7 @@ static void applyBoneRoll(TransInfo *t, const int UNUSED(mval[2]))
applyNumInput(&t->num, &final);
- t->values[0] = final;
+ t->values_final[0] = final;
if (hasNumInput(&t->num)) {
char c[NUM_STR_REP_LEN];
@@ -8997,6 +9008,7 @@ static void applyMirror(TransInfo *t, const int UNUSED(mval[2]))
float size[3], mat[3][3];
int i;
char str[UI_MAX_DRAW_STR];
+ copy_v3_v3(t->values_final, t->values);
/*
* OPTIMIZATION:
@@ -9213,18 +9225,19 @@ static void applySeqSlide(TransInfo *t, const int mval[2])
float pvec[3] = {0.0f, 0.0f, 0.0f};
float tvec[3];
t->con.applyVec(t, NULL, NULL, t->values, tvec, pvec);
- copy_v3_v3(t->values, tvec);
+ copy_v3_v3(t->values_final, tvec);
}
else {
// snapGridIncrement(t, t->values);
applyNumInput(&t->num, t->values);
+ copy_v3_v3(t->values_final, t->values);
}
- t->values[0] = floorf(t->values[0] + 0.5f);
- t->values[1] = floorf(t->values[1] + 0.5f);
+ t->values_final[0] = floorf(t->values_final[0] + 0.5f);
+ t->values_final[1] = floorf(t->values_final[1] + 0.5f);
- headerSeqSlide(t, t->values, str);
- applySeqSlideValue(t, t->values);
+ headerSeqSlide(t, t->values_final, str);
+ applySeqSlideValue(t, t->values_final);
recalcData(t);
@@ -9410,7 +9423,7 @@ static void headerTimeTranslate(TransInfo *t, char str[UI_MAX_DRAW_STR])
const Scene *scene = t->scene;
const short autosnap = getAnimEdit_SnapMode(t);
const double secf = FPS;
- float val = t->values[0];
+ float val = t->values_final[0];
/* apply snapping + frame->seconds conversions */
if (autosnap == SACTSNAP_STEP) {
@@ -9448,7 +9461,7 @@ static void headerTimeTranslate(TransInfo *t, char str[UI_MAX_DRAW_STR])
}
}
-static void applyTimeTranslateValue(TransInfo *t)
+static void applyTimeTranslateValue(TransInfo *t, float value)
{
Scene *scene = t->scene;
int i;
@@ -9474,7 +9487,7 @@ static void applyTimeTranslateValue(TransInfo *t)
/* check if any need to apply nla-mapping */
if (adt && (t->spacetype != SPACE_SEQ)) {
- deltax = t->values[0];
+ deltax = value;
if (autosnap == SACTSNAP_TSTEP) {
deltax = (float)(floor(((double)deltax / secf) + 0.5) * secf);
@@ -9488,7 +9501,7 @@ static void applyTimeTranslateValue(TransInfo *t)
*(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP);
}
else {
- deltax = val = t->values[0];
+ deltax = val = t->values_final[0];
if (autosnap == SACTSNAP_TSTEP) {
val = (float)(floor(((double)deltax / secf) + 0.5) * secf);
@@ -9524,10 +9537,10 @@ static void applyTimeTranslate(TransInfo *t, const int mval[2])
/* handle numeric-input stuff */
t->vec[0] = t->values[0];
applyNumInput(&t->num, &t->vec[0]);
- t->values[0] = t->vec[0];
+ t->values_final[0] = t->vec[0];
headerTimeTranslate(t, str);
- applyTimeTranslateValue(t);
+ applyTimeTranslateValue(t, t->values_final[0]);
recalcData(t);
@@ -9623,7 +9636,7 @@ static void headerTimeSlide(TransInfo *t, const float sval, char str[UI_MAX_DRAW
const float *range = t->custom.mode.data;
float minx = range[0];
float maxx = range[1];
- float cval = t->values[0];
+ float cval = t->values_final[0];
float val;
val = 2.0f * (cval - sval) / (maxx - minx);
@@ -9635,7 +9648,7 @@ static void headerTimeSlide(TransInfo *t, const float sval, char str[UI_MAX_DRAW
BLI_snprintf(str, UI_MAX_DRAW_STR, TIP_("TimeSlide: %s"), &tvec[0]);
}
-static void applyTimeSlideValue(TransInfo *t, float sval)
+static void applyTimeSlideValue(TransInfo *t, float sval, float cval)
{
int i;
const float *range = t->custom.mode.data;
@@ -9645,9 +9658,7 @@ static void applyTimeSlideValue(TransInfo *t, float sval)
/* set value for drawing black line */
if (t->spacetype == SPACE_ACTION) {
SpaceAction *saction = (SpaceAction *)t->sa->spacedata.first;
- float cvalf = t->values[0];
-
- saction->timeslide = cvalf;
+ saction->timeslide = cval;
}
/* It doesn't matter whether we apply to t->data or
@@ -9660,7 +9671,6 @@ static void applyTimeSlideValue(TransInfo *t, float sval)
* (this is only valid when not in NLA)
*/
AnimData *adt = (t->spacetype != SPACE_NLA) ? td->extra : NULL;
- float cval = t->values[0];
/* only apply to data if in range */
if ((sval > minx) && (sval < maxx)) {
@@ -9711,17 +9721,17 @@ static void applyTimeSlide(TransInfo *t, const int mval[2])
UI_view2d_region_to_view(v2d, mval[0], mval[1], &cval[0], &cval[1]);
UI_view2d_region_to_view(v2d, t->mouse.imval[0], t->mouse.imval[1], &sval[0], &sval[1]);
- /* t->values[0] stores cval[0], which is the current mouse-pointer location (in frames) */
+ /* t->values_final[0] stores cval[0], which is the current mouse-pointer location (in frames) */
// XXX Need to be able to repeat this
- /* t->values[0] = cval[0]; */ /* UNUSED (reset again later). */
+ /* t->values_final[0] = cval[0]; */ /* UNUSED (reset again later). */
/* handle numeric-input stuff */
t->vec[0] = 2.0f * (cval[0] - sval[0]) / (maxx - minx);
applyNumInput(&t->num, &t->vec[0]);
- t->values[0] = (maxx - minx) * t->vec[0] / 2.0f + sval[0];
+ t->values_final[0] = (maxx - minx) * t->vec[0] / 2.0f + sval[0];
headerTimeSlide(t, sval[0], str);
- applyTimeSlideValue(t, sval[0]);
+ applyTimeSlideValue(t, sval[0], t->values_final[0]);
recalcData(t);
@@ -9787,13 +9797,13 @@ static void headerTimeScale(TransInfo *t, char str[UI_MAX_DRAW_STR])
outputNumInput(&(t->num), tvec, &t->scene->unit);
}
else {
- BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.4f", t->values[0]);
+ BLI_snprintf(&tvec[0], NUM_STR_REP_LEN, "%.4f", t->values_final[0]);
}
BLI_snprintf(str, UI_MAX_DRAW_STR, TIP_("ScaleX: %s"), &tvec[0]);
}
-static void applyTimeScaleValue(TransInfo *t)
+static void applyTimeScaleValue(TransInfo *t, float value)
{
Scene *scene = t->scene;
int i;
@@ -9811,7 +9821,7 @@ static void applyTimeScaleValue(TransInfo *t)
*/
AnimData *adt = (t->spacetype != SPACE_NLA) ? td->extra : NULL;
float startx = CFRA;
- float fac = t->values[0];
+ float fac = value;
if (autosnap == SACTSNAP_TSTEP) {
fac = (float)(floor((double)fac / secf + 0.5) * secf);
@@ -9844,10 +9854,10 @@ static void applyTimeScale(TransInfo *t, const int UNUSED(mval[2]))
/* handle numeric-input stuff */
t->vec[0] = t->values[0];
applyNumInput(&t->num, &t->vec[0]);
- t->values[0] = t->vec[0];
+ t->values_final[0] = t->vec[0];
headerTimeScale(t, str);
- applyTimeScaleValue(t);
+ applyTimeScaleValue(t, t->values_final[0]);
recalcData(t);
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 833792379ae..358e4825278 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -42,7 +42,6 @@ struct EditBone;
struct NumInput;
struct Object;
struct RNG;
-struct RenderEngineType;
struct ReportList;
struct Scene;
struct ScrArea;
@@ -52,7 +51,6 @@ struct TransDataContainer;
struct TransInfo;
struct TransSnap;
struct TransformOrientation;
-struct View3D;
struct ViewLayer;
struct bConstraint;
struct bContext;
@@ -85,7 +83,9 @@ typedef struct TransSnap {
bool snap_self;
bool peel;
bool snap_spatial_grid;
- short status;
+ char status;
+ /* Snapped Element Type (currently for objects only). */
+ char snapElem;
/** snapping from this point (in global-space). */
float snapPoint[3];
/** to this point (in global-space). */
@@ -375,6 +375,7 @@ typedef struct VertSlideParams {
typedef struct BoneInitData {
struct EditBone *bone;
float tail[3];
+ float rad_head;
float rad_tail;
float roll;
float head[3];
@@ -662,10 +663,16 @@ typedef struct TransInfo {
short prop_mode;
+ /** Value taken as input, either through mouse coordinates or entered as a parameter. */
float values[4];
+
/** Offset applied ontop of modal input. */
float values_modal_offset[4];
- float auto_values[4];
+
+ /** Final value of the transformation (displayed in the redo panel).
+ * If the operator is executed directly (not modal), this value is usually the
+ * value of the input parameter, except when a constrain is entered. */
+ float values_final[4];
/* Axis members for modes that use an axis separate from the orientation (rotate & shear). */
@@ -714,6 +721,16 @@ typedef struct TransInfo {
/** Typically for mode settings. */
TransCustomDataContainer custom;
+
+ /**
+ * Object to object data transform table.
+ * Don't add these to transform data because we may want to include child objects
+ * which aren't being transformed.
+ * - The key is object data #ID.
+ * - The value is #XFormObjectData_Extra.
+ */
+ struct GHash *obdata_in_obmode_map;
+
} TransInfo;
/* ******************** Macros & Prototypes *********************** */
@@ -764,7 +781,9 @@ enum {
/** Don't use mirror even if the data-block option is set. */
T_NO_MIRROR = 1 << 19,
- T_AUTOVALUES = 1 << 20,
+ /** To indicate that the value set in the `value` parameter is the final
+ * value of the transformation, modified only by the constrain. */
+ T_INPUT_IS_VALUES_FINAL = 1 << 20,
/** To specify if we save back settings at the end. */
T_MODAL = 1 << 21,
@@ -783,6 +802,10 @@ enum {
T_MODAL_CURSOR_SET = 1 << 26,
T_CLNOR_REBUILD = 1 << 27,
+
+ /** When transforming object's, adjust the object data so it stays in the same place. */
+ T_OBJECT_DATA_IN_OBJECT_MODE = 1 << 28,
+
};
/** #TransInfo.modifiers */
@@ -1156,4 +1179,7 @@ bool checkUseAxisMatrix(TransInfo *t);
th != tc_end; \
th++, i++)
+void trans_obdata_in_obmode_free_all(struct TransInfo *t);
+void trans_obdata_in_obmode_update_all(struct TransInfo *t);
+
#endif
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 3a204d0d157..6a6d3b78d38 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -57,7 +57,7 @@
static void drawObjectConstraint(TransInfo *t);
/* ************************** CONSTRAINTS ************************* */
-static void constraintAutoValues(TransInfo *t, float vec[3])
+static void constraintValuesFinal(TransInfo *t, float vec[3])
{
int mode = t->con.mode;
if (mode & CON_APPLY) {
@@ -147,10 +147,10 @@ static void postConstraintChecks(TransInfo *t, float vec[3], float pvec[3])
removeAspectRatio(t, vec);
}
- /* autovalues is operator param, use that directly but not if snapping is forced */
- if (t->flag & T_AUTOVALUES && (t->tsnap.status & SNAP_FORCED) == 0) {
- copy_v3_v3(vec, t->auto_values);
- constraintAutoValues(t, vec);
+ /* If `t->values` is operator param, use that directly but not if snapping is forced */
+ if (t->flag & T_INPUT_IS_VALUES_FINAL && (t->tsnap.status & SNAP_FORCED) == 0) {
+ copy_v3_v3(vec, t->values);
+ constraintValuesFinal(t, vec);
/* inverse transformation at the end */
}
@@ -326,7 +326,7 @@ static void planeProjection(const TransInfo *t, const float in[3], float out[3])
sub_v3_v3v3(vec, out, in);
factor = dot_v3v3(vec, norm);
- if (fabsf(factor) <= 0.001f) {
+ if (factor == 0.0f) {
return; /* prevent divide by zero */
}
factor = dot_v3v3(vec, vec) / factor;
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 4eccf4c5071..dc072d74be6 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -52,6 +52,7 @@
#include "BLI_string.h"
#include "BLI_bitmap.h"
#include "BLI_rect.h"
+#include "BLI_kdtree.h"
#include "BKE_action.h"
#include "BKE_animsys.h"
@@ -235,8 +236,9 @@ static void sort_trans_data_selected_first(TransInfo *t)
}
}
-/* distance calculated from not-selected vertex to nearest selected vertex
- * warning; this is loops inside loop, has minor N^2 issues, but by sorting list it is OK */
+/**
+ * Distance calculated from not-selected vertex to nearest selected vertex.
+ */
static void set_prop_dist(TransInfo *t, const bool with_dist)
{
int a;
@@ -255,54 +257,124 @@ static void set_prop_dist(TransInfo *t, const bool with_dist)
}
}
+ /* Count number of selected. */
+ int td_table_len = 0;
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
- TransData *tob = tc->data;
- for (a = 0; a < tc->data_len; a++, tob++) {
+ TransData *td = tc->data;
+ for (a = 0; a < tc->data_len; a++, td++) {
+ if (td->flag & TD_SELECTED) {
+ td_table_len++;
+ }
+ else {
+ /* By definition transform-data has selected items in beginning. */
+ break;
+ }
+ }
+ }
- tob->rdist = 0.0f; // init, it was mallocced
+ /* Pointers to selected's #TransData.
+ * Used to find #TransData from the index returned by #BLI_kdtree_find_nearest. */
+ TransData **td_table = MEM_mallocN(sizeof(*td_table) * td_table_len, __func__);
- if ((tob->flag & TD_SELECTED) == 0) {
- TransData *td;
- int i;
- float dist_sq, vec[3];
+ /* Create and fill kd-tree of selected's positions - in global or proj_vec space. */
+ KDTree_3d *td_tree = BLI_kdtree_3d_new(td_table_len);
- tob->rdist = -1.0f; // signal for next loop
+ int td_table_index = 0;
+ FOREACH_TRANS_DATA_CONTAINER (t, tc) {
+ TransData *td = tc->data;
+ for (a = 0; a < tc->data_len; a++, td++) {
+ if (td->flag & TD_SELECTED) {
+ /* Initialize, it was mallocced. */
+ float vec[3];
+ td->rdist = 0.0f;
+
+ if (use_island) {
+ if (tc->use_local_mat) {
+ mul_v3_m4v3(vec, tc->mat, td->iloc);
+ }
+ else {
+ mul_v3_m3v3(vec, td->mtx, td->iloc);
+ }
+ }
+ else {
+ if (tc->use_local_mat) {
+ mul_v3_m4v3(vec, tc->mat, td->center);
+ }
+ else {
+ mul_v3_m3v3(vec, td->mtx, td->center);
+ }
+ }
- for (i = 0, td = tc->data; i < tc->data_len; i++, td++) {
- if (td->flag & TD_SELECTED) {
- if (use_island) {
- sub_v3_v3v3(vec, tob->iloc, td->iloc);
- }
- else {
- sub_v3_v3v3(vec, tob->center, td->center);
- }
- mul_m3_v3(tob->mtx, vec);
+ if (proj_vec) {
+ float vec_p[3];
+ project_v3_v3v3(vec_p, vec, proj_vec);
+ sub_v3_v3(vec, vec_p);
+ }
- if (proj_vec) {
- float vec_p[3];
- project_v3_v3v3(vec_p, vec, proj_vec);
- sub_v3_v3(vec, vec_p);
- }
+ BLI_kdtree_3d_insert(td_tree, td_table_index, vec);
+ td_table[td_table_index++] = td;
+ }
+ else {
+ /* By definition transform-data has selected items in beginning. */
+ break;
+ }
+ }
+ }
+ BLI_assert(td_table_index == td_table_len);
- dist_sq = len_squared_v3(vec);
- if ((tob->rdist == -1.0f) || (dist_sq < SQUARE(tob->rdist))) {
- tob->rdist = sqrtf(dist_sq);
- if (use_island) {
- copy_v3_v3(tob->center, td->center);
- copy_m3_m3(tob->axismtx, td->axismtx);
- }
- }
+ BLI_kdtree_3d_balance(td_tree);
+
+ /* For each non-selected vertex, find distance to the nearest selected vertex. */
+ FOREACH_TRANS_DATA_CONTAINER (t, tc) {
+ TransData *td = tc->data;
+ for (a = 0; a < tc->data_len; a++, td++) {
+ if ((td->flag & TD_SELECTED) == 0) {
+ float vec[3];
+
+ if (use_island) {
+ if (tc->use_local_mat) {
+ mul_v3_m4v3(vec, tc->mat, td->iloc);
+ }
+ else {
+ mul_v3_m3v3(vec, td->mtx, td->iloc);
+ }
+ }
+ else {
+ if (tc->use_local_mat) {
+ mul_v3_m4v3(vec, tc->mat, td->center);
}
else {
- break; /* by definition transdata has selected items in beginning */
+ mul_v3_m3v3(vec, td->mtx, td->center);
}
}
+
+ if (proj_vec) {
+ float vec_p[3];
+ project_v3_v3v3(vec_p, vec, proj_vec);
+ sub_v3_v3(vec, vec_p);
+ }
+
+ KDTreeNearest_3d nearest;
+ const int td_index = BLI_kdtree_3d_find_nearest(td_tree, vec, &nearest);
+
+ td->rdist = -1.0f;
+ if (td_index != -1) {
+ td->rdist = nearest.dist;
+ if (use_island) {
+ copy_v3_v3(td->center, td_table[td_index]->center);
+ copy_m3_m3(td->axismtx, td_table[td_index]->axismtx);
+ }
+ }
+
if (with_dist) {
- tob->dist = tob->rdist;
+ td->dist = td->rdist;
}
}
}
}
+
+ BLI_kdtree_3d_free(td_tree);
+ MEM_freeN(td_table);
}
/* ************************** CONVERSIONS ************************* */
@@ -1445,6 +1517,7 @@ void restoreBones(TransDataContainer *tc)
ebo = bid->bone;
ebo->dist = bid->dist;
+ ebo->rad_head = bid->rad_head;
ebo->rad_tail = bid->rad_tail;
ebo->roll = bid->roll;
ebo->xwidth = bid->xwidth;
@@ -1710,6 +1783,7 @@ static void createTransArmatureVerts(TransInfo *t)
if (eboflip) {
bid[i].bone = eboflip;
bid[i].dist = eboflip->dist;
+ bid[i].rad_head = eboflip->rad_head;
bid[i].rad_tail = eboflip->rad_tail;
bid[i].roll = eboflip->roll;
bid[i].xwidth = eboflip->xwidth;
@@ -6462,11 +6536,14 @@ static void flush_trans_object_base_deps_flag(Depsgraph *depsgraph, Object *obje
depsgraph, &object->id, DEG_OB_COMP_TRANSFORM, set_trans_object_base_deps_flag_cb, NULL);
}
-static void trans_object_base_deps_flag_finish(ViewLayer *view_layer)
+static void trans_object_base_deps_flag_finish(const TransInfo *t, ViewLayer *view_layer)
{
- for (Base *base = view_layer->object_bases.first; base; base = base->next) {
- if (base->object->id.tag & LIB_TAG_DOIT) {
- base->flag_legacy |= BA_SNAP_FIX_DEPS_FIASCO;
+
+ if ((t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) == 0) {
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->object->id.tag & LIB_TAG_DOIT) {
+ base->flag_legacy |= BA_SNAP_FIX_DEPS_FIASCO;
+ }
}
}
}
@@ -6528,7 +6605,7 @@ static void set_trans_object_base_flags(TransInfo *t)
/* Store temporary bits in base indicating that base is being modified
* (directly or indirectly) by transforming objects.
*/
- trans_object_base_deps_flag_finish(view_layer);
+ trans_object_base_deps_flag_finish(t, view_layer);
}
static bool mark_children(Object *ob)
@@ -6596,7 +6673,7 @@ static int count_proportional_objects(TransInfo *t)
/* Store temporary bits in base indicating that base is being modified
* (directly or indirectly) by transforming objects.
*/
- trans_object_base_deps_flag_finish(view_layer);
+ trans_object_base_deps_flag_finish(t, view_layer);
return total;
}
@@ -7604,6 +7681,90 @@ int special_transform_moving(TransInfo *t)
return 0;
}
+/* -------------------------------------------------------------------- */
+/** \name Object Data in Object Mode
+ *
+ * Use to implement 'Affect Only Origins' feature.
+ * We need this to be detached from transform data because,
+ * unlike transforming regular objects, we need to transform the children.
+ *
+ * \{ */
+
+struct XFormObjectData_Extra {
+ Object *ob;
+ float obmat_orig[4][4];
+ bool ob_dtx_axis_orig;
+ struct XFormObjectData *xod;
+};
+
+static void trans_obdata_in_obmode_ensure_object(TransInfo *t, Object *ob)
+{
+ if (t->obdata_in_obmode_map == NULL) {
+ t->obdata_in_obmode_map = BLI_ghash_ptr_new(__func__);
+ }
+
+ void **xf_p;
+ if (!BLI_ghash_ensure_p(t->obdata_in_obmode_map, ob->data, &xf_p)) {
+ struct XFormObjectData_Extra *xf = MEM_mallocN(sizeof(*xf), __func__);
+ copy_m4_m4(xf->obmat_orig, ob->obmat);
+ xf->ob = ob;
+ /* Result may be NULL, that's OK. */
+ xf->xod = ED_object_data_xform_create(ob->data);
+ if (xf->xod) {
+ xf->ob_dtx_axis_orig = ob->dtx & OB_AXIS;
+ ob->dtx |= OB_AXIS;
+ }
+ *xf_p = xf;
+ }
+}
+
+void trans_obdata_in_obmode_update_all(TransInfo *t)
+{
+ struct Main *bmain = CTX_data_main(t->context);
+ BKE_scene_graph_evaluated_ensure(t->depsgraph, bmain);
+
+ GHashIterator gh_iter;
+ GHASH_ITER (gh_iter, t->obdata_in_obmode_map) {
+ ID *id = BLI_ghashIterator_getKey(&gh_iter);
+ struct XFormObjectData_Extra *xf = BLI_ghashIterator_getValue(&gh_iter);
+ if (xf->xod == NULL) {
+ continue;
+ }
+
+ Object *ob_eval = DEG_get_evaluated_object(t->depsgraph, xf->ob);
+ float imat[4][4], dmat[4][4];
+ invert_m4_m4(imat, xf->obmat_orig);
+ mul_m4_m4m4(dmat, imat, ob_eval->obmat);
+ invert_m4(dmat);
+
+ ED_object_data_xform_by_mat4(xf->xod, dmat);
+ DEG_id_tag_update(id, 0);
+ }
+}
+
+/** Callback for #GHash free. */
+static void trans_obdata_in_obmode_free_elem(void *xf_p)
+{
+ struct XFormObjectData_Extra *xf = xf_p;
+ if (xf->xod) {
+ if (!xf->ob_dtx_axis_orig) {
+ xf->ob->dtx &= ~OB_AXIS;
+ DEG_id_tag_update(&xf->ob->id, ID_RECALC_COPY_ON_WRITE);
+ }
+ ED_object_data_xform_destroy(xf->xod);
+ }
+ MEM_freeN(xf);
+}
+
+void trans_obdata_in_obmode_free_all(TransInfo *t)
+{
+ if (t->obdata_in_obmode_map != NULL) {
+ BLI_ghash_free(t->obdata_in_obmode_map, NULL, trans_obdata_in_obmode_free_elem);
+ }
+}
+
+/** \} */
+
static void createTransObject(bContext *C, TransInfo *t)
{
TransData *td = NULL;
@@ -7648,6 +7809,24 @@ static void createTransObject(bContext *C, TransInfo *t)
td->flag |= TD_SKIP;
}
+ if (t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) {
+ ID *id = ob->data;
+ if (!id || id->lib) {
+ td->flag |= TD_SKIP;
+ }
+ else if (BKE_object_is_in_editmode(ob)) {
+ /* The object could have edit-mode data from another view-layer,
+ * it's such a corner-case it can be skipped for now - Campbell. */
+ td->flag |= TD_SKIP;
+ }
+ }
+
+ if (t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) {
+ if ((td->flag & TD_SKIP) == 0) {
+ trans_obdata_in_obmode_ensure_object(t, ob);
+ }
+ }
+
ObjectToTransData(t, td, ob);
td->val = NULL;
td++;
@@ -7679,6 +7858,47 @@ static void createTransObject(bContext *C, TransInfo *t)
}
}
}
+
+ if (t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) {
+ GSet *objects_in_transdata = BLI_gset_ptr_new_ex(__func__, tc->data_len);
+ td = tc->data;
+ for (int i = 0; i < tc->data_len; i++, td++) {
+ if ((td->flag & TD_SKIP) == 0) {
+ BLI_gset_add(objects_in_transdata, td->ob);
+ }
+ }
+
+ ViewLayer *view_layer = t->view_layer;
+ View3D *v3d = t->view;
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ Object *ob = base->object;
+
+ /* if base is not selected, not a parent of selection
+ * or not a child of selection and it is editable and selectable */
+ if ((base->flag & BASE_SELECTED) == 0 && BASE_EDITABLE(v3d, base) &&
+ BASE_SELECTABLE(v3d, base)) {
+
+ Object *ob_parent = ob->parent;
+ if (ob_parent != NULL) {
+ if (!BLI_gset_haskey(objects_in_transdata, ob)) {
+ bool parent_in_transdata = false;
+ while (ob_parent != NULL) {
+ if (BLI_gset_haskey(objects_in_transdata, ob_parent)) {
+ parent_in_transdata = true;
+ break;
+ }
+ ob_parent = ob_parent->parent;
+ }
+ if (parent_in_transdata) {
+ trans_obdata_in_obmode_ensure_object(t, ob);
+ }
+ }
+ }
+ }
+ }
+ BLI_gset_free(objects_in_transdata, NULL);
+ }
}
/* transcribe given node into TransData2D for Transforming */
@@ -9049,7 +9269,7 @@ static void createTransGPencil(bContext *C, TransInfo *t)
/* initialize falloff curve */
if (is_multiedit) {
- curvemapping_initialize(ts->gp_sculpt.cur_falloff);
+ BKE_curvemapping_initialize(ts->gp_sculpt.cur_falloff);
}
/* First Pass: Count the number of data-points required for the strokes,
@@ -9665,6 +9885,10 @@ void createTransData(bContext *C, TransInfo *t)
/* Needed for correct Object.obmat after duplication, see: T62135. */
BKE_scene_graph_evaluated_ensure(t->depsgraph, CTX_data_main(t->context));
+ if ((scene->toolsettings->transform_flag & SCE_XFORM_DATA_ORIGIN) != 0) {
+ t->flag |= T_OBJECT_DATA_IN_OBJECT_MODE;
+ }
+
createTransObject(C, t);
countAndCleanTransDataContainer(t);
t->flag |= T_OBJECT;
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 969e2558abb..41eb5f1e812 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -81,6 +81,7 @@
#include "BKE_workspace.h"
#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_query.h"
#include "ED_anim_api.h"
#include "ED_armature.h"
@@ -900,7 +901,7 @@ static void recalcData_objects(TransInfo *t)
DEG_id_tag_update(tc->obedit->data, 0); /* sets recalc flags */
BMEditMesh *em = BKE_editmesh_from_object(tc->obedit);
EDBM_mesh_normals_update(em);
- BKE_editmesh_tessface_calc(em);
+ BKE_editmesh_looptri_calc(em);
}
}
else if (t->obedit_type == OB_ARMATURE) { /* no recalc flag, does pose */
@@ -1149,6 +1150,10 @@ static void recalcData_objects(TransInfo *t)
/* Update motion paths once for all transformed objects. */
ED_objects_recalculate_paths(t->context, t->scene, true);
}
+
+ if (t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) {
+ trans_obdata_in_obmode_update_all(t);
+ }
}
}
@@ -1918,6 +1923,10 @@ void postTrans(bContext *C, TransInfo *t)
BLI_rng_free(t->rng);
}
+ if (t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) {
+ trans_obdata_in_obmode_free_all(t);
+ }
+
freeSnapping(t);
}
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index 1015b47c304..4ae64c7ca5f 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -114,6 +114,10 @@ static void gizmo2d_get_axis_color(const int axis_idx, float *r_col, float *r_co
case MAN2D_AXIS_TRANS_Y:
col_id = TH_AXIS_Y;
break;
+ default:
+ BLI_assert(0);
+ col_id = TH_AXIS_Y;
+ break;
}
UI_GetThemeColor4fv(col_id, r_col);
diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c
index 6ebed88878f..e771fe43bd8 100644
--- a/source/blender/editors/transform/transform_input.c
+++ b/source/blender/editors/transform/transform_input.c
@@ -299,7 +299,7 @@ static void calcSpringFactor(MouseInput *mi)
void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode)
{
- /* incase we allocate a new value */
+ /* In case we allocate a new value. */
void *mi_data_prev = mi->data;
mi->use_virtual_mval = true;
diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c
index c6c2a441d94..1be206e921a 100644
--- a/source/blender/editors/transform/transform_ops.c
+++ b/source/blender/editors/transform/transform_ops.c
@@ -139,22 +139,22 @@ const EnumPropertyItem rna_enum_transform_mode_types[] = {
{TFM_CREASE, "CREASE", 0, "Crease", ""},
{TFM_MIRROR, "MIRROR", 0, "Mirror", ""},
{TFM_BONESIZE, "BONE_SIZE", 0, "Bonesize", ""},
- {TFM_BONE_ENVELOPE, "BONE_ENVELOPE", 0, "Bone_Envelope", ""},
- {TFM_BONE_ENVELOPE_DIST, "BONE_ENVELOPE_DIST", 0, "Bone_Envelope_Distance", ""},
- {TFM_CURVE_SHRINKFATTEN, "CURVE_SHRINKFATTEN", 0, "Curve_Shrinkfatten", ""},
- {TFM_MASK_SHRINKFATTEN, "MASK_SHRINKFATTEN", 0, "Mask_Shrinkfatten", ""},
- {TFM_GPENCIL_SHRINKFATTEN, "GPENCIL_SHRINKFATTEN", 0, "GPencil_Shrinkfatten", ""},
- {TFM_BONE_ROLL, "BONE_ROLL", 0, "Bone_Roll", ""},
- {TFM_TIME_TRANSLATE, "TIME_TRANSLATE", 0, "Time_Translate", ""},
- {TFM_TIME_SLIDE, "TIME_SLIDE", 0, "Time_Slide", ""},
- {TFM_TIME_SCALE, "TIME_SCALE", 0, "Time_Scale", ""},
- {TFM_TIME_EXTEND, "TIME_EXTEND", 0, "Time_Extend", ""},
- {TFM_BAKE_TIME, "BAKE_TIME", 0, "Bake_Time", ""},
+ {TFM_BONE_ENVELOPE, "BONE_ENVELOPE", 0, "Bone Envelope", ""},
+ {TFM_BONE_ENVELOPE_DIST, "BONE_ENVELOPE_DIST", 0, "Bone Envelope Distance", ""},
+ {TFM_CURVE_SHRINKFATTEN, "CURVE_SHRINKFATTEN", 0, "Curve Shrinkfatten", ""},
+ {TFM_MASK_SHRINKFATTEN, "MASK_SHRINKFATTEN", 0, "Mask Shrinkfatten", ""},
+ {TFM_GPENCIL_SHRINKFATTEN, "GPENCIL_SHRINKFATTEN", 0, "GPencil Shrinkfatten", ""},
+ {TFM_BONE_ROLL, "BONE_ROLL", 0, "Bone Roll", ""},
+ {TFM_TIME_TRANSLATE, "TIME_TRANSLATE", 0, "Time Translate", ""},
+ {TFM_TIME_SLIDE, "TIME_SLIDE", 0, "Time Slide", ""},
+ {TFM_TIME_SCALE, "TIME_SCALE", 0, "Time Scale", ""},
+ {TFM_TIME_EXTEND, "TIME_EXTEND", 0, "Time Extend", ""},
+ {TFM_BAKE_TIME, "BAKE_TIME", 0, "Bake Time", ""},
{TFM_BWEIGHT, "BWEIGHT", 0, "Bweight", ""},
{TFM_ALIGN, "ALIGN", 0, "Align", ""},
{TFM_EDGE_SLIDE, "EDGESLIDE", 0, "Edge Slide", ""},
{TFM_SEQ_SLIDE, "SEQSLIDE", 0, "Sequence Slide", ""},
- {TFM_GPENCIL_OPACITY, "GPENCIL_OPACITY", 0, "GPencil_Opacity", ""},
+ {TFM_GPENCIL_OPACITY, "GPENCIL_OPACITY", 0, "GPencil Opacity", ""},
{0, NULL, 0, NULL, NULL},
};
@@ -883,6 +883,16 @@ static void TRANSFORM_OT_bend(struct wmOperatorType *ot)
Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR | P_SNAP | P_GPENCIL_EDIT | P_CENTER);
}
+static bool transform_shear_poll(bContext *C)
+{
+ if (!ED_operator_screenactive(C)) {
+ return false;
+ }
+
+ ScrArea *sa = CTX_wm_area(C);
+ return sa && !ELEM(sa->spacetype, SPACE_ACTION);
+}
+
static void TRANSFORM_OT_shear(struct wmOperatorType *ot)
{
/* identifiers */
@@ -896,7 +906,7 @@ static void TRANSFORM_OT_shear(struct wmOperatorType *ot)
ot->exec = transform_exec;
ot->modal = transform_modal;
ot->cancel = transform_cancel;
- ot->poll = ED_operator_screenactive;
+ ot->poll = transform_shear_poll;
ot->poll_property = transform_poll_property;
RNA_def_float(ot->srna, "value", 0, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX);
@@ -1140,8 +1150,12 @@ static void TRANSFORM_OT_seq_slide(struct wmOperatorType *ot)
ot->cancel = transform_cancel;
ot->poll = ED_operator_sequencer_active;
- RNA_def_float_vector_xyz(
+ /* properties */
+ PropertyRNA *prop;
+
+ prop = RNA_def_float_vector(
ot->srna, "value", 2, NULL, -FLT_MAX, FLT_MAX, "Offset", "", -FLT_MAX, FLT_MAX);
+ RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 1, 0);
WM_operatortype_props_advanced_begin(ot);
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index d45a0588003..14242f6ba40 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -166,7 +166,10 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
activeCol[3] = 192;
if (t->spacetype == SPACE_VIEW3D) {
- if (validSnap(t)) {
+ bool draw_target = (t->tsnap.status & TARGET_INIT) &&
+ (t->scene->toolsettings->snap_mode & SCE_SNAP_MODE_EDGE_PERPENDICULAR);
+
+ if (draw_target || validSnap(t)) {
TransSnapPoint *p;
RegionView3D *rv3d = CTX_wm_region_view3d(C);
float imat[4][4];
@@ -214,6 +217,48 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
immEnd();
}
+ if (draw_target) {
+ /* Draw snapTarget */
+ float targ_co[3], vx[3], vy[3], v1[3], v2[3], v3[3], v4[4];
+ copy_v3_v3(targ_co, t->tsnap.snapTarget);
+ float px_size = 0.75f * size * ED_view3d_pixel_size(rv3d, targ_co);
+
+ mul_v3_v3fl(vx, imat[0], px_size);
+ mul_v3_v3fl(vy, imat[1], px_size);
+
+ add_v3_v3v3(v1, vx, vy);
+ sub_v3_v3v3(v2, vx, vy);
+ negate_v3_v3(v3, v1);
+ negate_v3_v3(v4, v2);
+
+ add_v3_v3(v1, targ_co);
+ add_v3_v3(v2, targ_co);
+ add_v3_v3(v3, targ_co);
+ add_v3_v3(v4, targ_co);
+
+ immUniformColor4ubv(col);
+ immBegin(GPU_PRIM_LINES, 4);
+ immVertex3fv(pos, v3);
+ immVertex3fv(pos, v1);
+ immVertex3fv(pos, v4);
+ immVertex3fv(pos, v2);
+ immEnd();
+
+ if (t->tsnap.snapElem & SCE_SNAP_MODE_EDGE_PERPENDICULAR) {
+ immUnbindProgram();
+
+ immBindBuiltinProgram(GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR);
+ immUniform1f("dash_width", 6.0f * U.pixelsize);
+ immUniform1f("dash_factor", 1.0f / 4.0f);
+ immUniformColor4ubv(col);
+
+ immBegin(GPU_PRIM_LINES, 2);
+ immVertex3fv(pos, targ_co);
+ immVertex3fv(pos, t->tsnap.snapPoint);
+ immEnd();
+ }
+ }
+
immUnbindProgram();
GPU_depth_test(true);
@@ -328,6 +373,7 @@ void applyProject(TransInfo *t)
.use_occlusion_test = false,
},
mval_fl,
+ NULL,
0,
loc,
no)) {
@@ -586,12 +632,20 @@ static void initSnappingMode(TransInfo *t)
else if (t->tsnap.applySnap != NULL && // A snapping function actually exist
(obedit_type == -1)) // Object Mode
{
- /* In "Edit Strokes" mode,
- * snap tool can perform snap to selected or active objects (see T49632)
- * TODO: perform self snap in gpencil_strokes */
- t->tsnap.modeSelect = (((t->options & (CTX_GPENCIL_STROKES | CTX_CURSOR)) != 0) ?
- SNAP_ALL :
- SNAP_NOT_SELECTED);
+
+ if (t->options & (CTX_GPENCIL_STROKES | CTX_CURSOR)) {
+ /* In "Edit Strokes" mode,
+ * snap tool can perform snap to selected or active objects (see T49632)
+ * TODO: perform self snap in gpencil_strokes */
+ t->tsnap.modeSelect = SNAP_ALL;
+ }
+ else if (t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) {
+ /* When we're moving the origins, allow snapping onto our own geometry (see T69132). */
+ t->tsnap.modeSelect = SNAP_ALL;
+ }
+ else {
+ t->tsnap.modeSelect = SNAP_NOT_SELECTED;
+ }
}
else {
/* Grid if snap is not possible */
@@ -993,18 +1047,25 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec))
float no[3];
float mval[2];
bool found = false;
+ short snap_elem = 0;
float dist_px = SNAP_MIN_DISTANCE; // Use a user defined value here
mval[0] = t->mval[0];
mval[1] = t->mval[1];
- if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE)) {
+ if (t->tsnap.mode & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
+ SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
zero_v3(no); /* objects won't set this */
- found = snapObjectsTransform(t, mval, &dist_px, loc, no);
+ snap_elem = snapObjectsTransform(t, mval, &dist_px, loc, no);
+ found = snap_elem != 0;
}
if ((found == false) && (t->tsnap.mode & SCE_SNAP_MODE_VOLUME)) {
found = peelObjectsTransform(
t, mval, (t->settings->snap_flag & SCE_SNAP_PEEL_OBJECT) != 0, loc, no, NULL);
+
+ if (found) {
+ snap_elem = SCE_SNAP_MODE_VOLUME;
+ }
}
if (found == true) {
@@ -1016,6 +1077,8 @@ static void CalcSnapGeometry(TransInfo *t, float *UNUSED(vec))
else {
t->tsnap.status &= ~POINT_INIT;
}
+
+ t->tsnap.snapElem = (char)snap_elem;
}
else if (t->spacetype == SPACE_IMAGE && t->obedit_type == OB_MESH) {
if (t->tsnap.mode & SCE_SNAP_MODE_VERTEX) {
@@ -1150,12 +1213,19 @@ static void TargetSnapMedian(TransInfo *t)
add_v3_v3(v, td->center);
}
+ if (i == 0) {
+ /* Is this possible? */
+ continue;
+ }
+
+ mul_v3_fl(v, 1.0 / i);
+
if (tc->use_local_mat) {
mul_m4_v3(tc->mat, v);
}
add_v3_v3(t->tsnap.snapTarget, v);
- i_accum += i;
+ i_accum++;
}
mul_v3_fl(t->tsnap.snapTarget, 1.0 / i_accum);
@@ -1179,7 +1249,11 @@ static void TargetSnapClosest(TransInfo *t)
FOREACH_TRANS_DATA_CONTAINER (t, tc) {
TransData *td = tc->data;
for (td = tc->data, i = 0; i < tc->data_len && td->flag & TD_SELECTED; i++, td++) {
- struct BoundBox *bb = BKE_object_boundbox_get(td->ob);
+ const BoundBox *bb = NULL;
+
+ if ((t->flag & T_OBJECT_DATA_IN_OBJECT_MODE) == 0) {
+ bb = BKE_object_boundbox_get(td->ob);
+ }
/* use boundbox if possible */
if (bb) {
@@ -1252,10 +1326,10 @@ static void TargetSnapClosest(TransInfo *t)
}
}
-bool snapObjectsTransform(
+short snapObjectsTransform(
TransInfo *t, const float mval[2], float *dist_px, float r_loc[3], float r_no[3])
{
- return ED_transform_snap_object_project_view3d(
+ return ED_transform_snap_object_project_view3d_ex(
t->tsnap.object_context,
t->scene->toolsettings->snap_mode,
&(const struct SnapObjectParams){
@@ -1264,9 +1338,13 @@ bool snapObjectsTransform(
.use_occlusion_test = t->scene->toolsettings->snap_mode != SCE_SNAP_MODE_FACE,
},
mval,
+ t->tsnap.snapTarget,
dist_px,
r_loc,
- r_no);
+ r_no,
+ NULL,
+ NULL,
+ NULL);
}
/******************** PEELING *********************************/
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index 6f06f8639bd..7a8a123cf79 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -573,47 +573,41 @@ static bool raycastEditMesh(SnapObjectContext *sctx,
BVHTreeFromEditMesh *treedata = sod->bvh_trees[2];
- BVHCache *em_bvh_cache = ((Mesh *)em->ob->data)->runtime.bvh_cache;
+ BVHCache **em_bvh_cache = &((Mesh *)em->ob->data)->runtime.bvh_cache;
if (sctx->callbacks.edit_mesh.test_face_fn == NULL) {
/* The tree is owned by the Mesh and may have been freed since we last used! */
- if (!bvhcache_has_tree(em_bvh_cache, treedata->tree)) {
+ if (treedata->tree && !bvhcache_has_tree(*em_bvh_cache, treedata->tree)) {
free_bvhtree_from_editmesh(treedata);
}
}
if (treedata->tree == NULL) {
- BVHCache **bvh_cache = NULL;
- BLI_bitmap *elem_mask = NULL;
- BMEditMesh *em_orig;
- int looptri_num_active = -1;
-
/* Get original version of the edit_mesh. */
- em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob));
+ BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob));
if (sctx->callbacks.edit_mesh.test_face_fn) {
BMesh *bm = em_orig->bm;
BLI_assert(poly_to_tri_count(bm->totface, bm->totloop) == em_orig->tottri);
- elem_mask = BLI_BITMAP_NEW(em_orig->tottri, __func__);
- looptri_num_active = BM_iter_mesh_bitmap_from_filter_tessface(
+ BLI_bitmap *elem_mask = BLI_BITMAP_NEW(em_orig->tottri, __func__);
+ int looptri_num_active = BM_iter_mesh_bitmap_from_filter_tessface(
bm,
elem_mask,
sctx->callbacks.edit_mesh.test_face_fn,
sctx->callbacks.edit_mesh.user_data);
+
+ bvhtree_from_editmesh_looptri_ex(
+ treedata, em_orig, elem_mask, looptri_num_active, 0.0f, 4, 6, 0, NULL);
+
+ MEM_freeN(elem_mask);
}
else {
/* Only cache if bvhtree is created without a mask.
* This helps keep a standardized bvhtree in cache. */
- bvh_cache = &em_bvh_cache;
+ BKE_bvhtree_from_editmesh_get(treedata, em_orig, 4, BVHTREE_FROM_EM_LOOPTRI, em_bvh_cache);
}
- bvhtree_from_editmesh_looptri_ex(
- treedata, em_orig, elem_mask, looptri_num_active, 0.0f, 4, 6, bvh_cache);
-
- if (elem_mask) {
- MEM_freeN(elem_mask);
- }
if (treedata->tree == NULL) {
return retval;
}
@@ -1260,7 +1254,8 @@ static short snap_mesh_polygon(SnapObjectContext *sctx,
const MPoly *mp = &((SnapObjectData_Mesh *)sod)->poly[*r_index];
const MLoop *ml = &treedata->loop[mp->loopstart];
- if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
+ if (snapdata->snap_to_flag &
+ (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
elem = SCE_SNAP_MODE_EDGE;
BLI_assert(treedata->edge != NULL);
for (int i = mp->totloop; i--; ml++) {
@@ -1297,7 +1292,8 @@ static short snap_mesh_polygon(SnapObjectContext *sctx,
BMFace *f = BM_face_at_index(em->bm, *r_index);
BMLoop *l_iter, *l_first;
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
- if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
+ if (snapdata->snap_to_flag &
+ (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
elem = SCE_SNAP_MODE_EDGE;
BM_mesh_elem_index_ensure(em->bm, BM_EDGE);
BM_mesh_elem_table_ensure(em->bm, BM_VERT | BM_EDGE);
@@ -1352,6 +1348,7 @@ static short snap_mesh_edge_verts_mixed(SnapObjectContext *sctx,
Object *ob,
float obmat[4][4],
float original_dist_px,
+ const float prev_co[3],
/* read/write args */
float *dist_px,
/* return args */
@@ -1382,6 +1379,13 @@ static short snap_mesh_edge_verts_mixed(SnapObjectContext *sctx,
};
SnapObjectData *sod = BLI_ghash_lookup(sctx->cache.object_map, ob);
+ if (sod == NULL) {
+ /* The object is in edit mode, and the key used
+ * was the object referenced in BMEditMesh */
+ BMEditMesh *em = BKE_editmesh_from_object(ob);
+ sod = BLI_ghash_lookup(sctx->cache.object_map, em->ob);
+ }
+
BLI_assert(sod != NULL);
if (sod->type == SNAP_MESH) {
@@ -1413,19 +1417,74 @@ static short snap_mesh_edge_verts_mixed(SnapObjectContext *sctx,
&lambda)) {
/* do nothing */
}
- else if (lambda < 0.25f || 0.75f < lambda) {
- int v_id = lambda < 0.5f ? 0 : 1;
+ else {
+ if (snapdata->snap_to_flag & SCE_SNAP_MODE_VERTEX) {
+ if (lambda < 0.25f || 0.75f < lambda) {
+ int v_id = lambda < 0.5f ? 0 : 1;
- if (test_projected_vert_dist(&neasrest_precalc,
- NULL,
- 0,
- nearest2d.is_persp,
- v_pair[v_id],
- &nearest.dist_sq,
- nearest.co)) {
- nearest.index = vindex[v_id];
- nearest2d.copy_vert_no(vindex[v_id], nearest.no, nearest2d.userdata);
- elem = SCE_SNAP_MODE_VERTEX;
+ if (test_projected_vert_dist(&neasrest_precalc,
+ NULL,
+ 0,
+ nearest2d.is_persp,
+ v_pair[v_id],
+ &nearest.dist_sq,
+ nearest.co)) {
+ nearest.index = vindex[v_id];
+ nearest2d.copy_vert_no(vindex[v_id], nearest.no, nearest2d.userdata);
+ elem = SCE_SNAP_MODE_VERTEX;
+ }
+ }
+ }
+
+ if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE_MIDPOINT) {
+ if (0.375f < lambda && lambda < 0.625f) {
+ float vmid[3];
+ mid_v3_v3v3(vmid, v_pair[0], v_pair[1]);
+
+ if (test_projected_vert_dist(&neasrest_precalc,
+ NULL,
+ 0,
+ nearest2d.is_persp,
+ vmid,
+ &nearest.dist_sq,
+ nearest.co)) {
+ float v_nor[2][3];
+ nearest2d.copy_vert_no(vindex[0], v_nor[0], nearest2d.userdata);
+ nearest2d.copy_vert_no(vindex[1], v_nor[1], nearest2d.userdata);
+ mid_v3_v3v3(nearest.no, v_nor[0], v_nor[1]);
+ nearest.index = *r_index;
+ elem = SCE_SNAP_MODE_EDGE_MIDPOINT;
+ }
+ }
+ }
+
+ if (prev_co && (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
+ float v_near[3], va_g[3], vb_g[3];
+
+ mul_v3_m4v3(va_g, obmat, v_pair[0]);
+ mul_v3_m4v3(vb_g, obmat, v_pair[1]);
+ lambda = line_point_factor_v3(prev_co, va_g, vb_g);
+
+ if (IN_RANGE(lambda, 0.0f, 1.0f)) {
+ interp_v3_v3v3(v_near, va_g, vb_g, lambda);
+
+ if ((len_squared_v3v3(prev_co, v_near) > FLT_EPSILON) &&
+ test_projected_vert_dist(&neasrest_precalc,
+ NULL,
+ 0,
+ nearest2d.is_persp,
+ v_near,
+ &nearest.dist_sq,
+ nearest.co)) {
+ float v_nor[2][3];
+ nearest2d.copy_vert_no(vindex[0], v_nor[0], nearest2d.userdata);
+ nearest2d.copy_vert_no(vindex[1], v_nor[1], nearest2d.userdata);
+ mid_v3_v3v3(nearest.no, v_nor[0], v_nor[1]);
+
+ nearest.index = *r_index;
+ elem = SCE_SNAP_MODE_EDGE_PERPENDICULAR;
+ }
+ }
}
}
@@ -1433,7 +1492,9 @@ static short snap_mesh_edge_verts_mixed(SnapObjectContext *sctx,
*dist_px = sqrtf(nearest.dist_sq);
copy_v3_v3(r_loc, nearest.co);
- mul_m4_v3(obmat, r_loc);
+ if (elem != SCE_SNAP_MODE_EDGE_PERPENDICULAR) {
+ mul_m4_v3(obmat, r_loc);
+ }
if (r_no) {
float imat[4][4];
@@ -1919,13 +1980,13 @@ static short snapMesh(SnapObjectContext *sctx,
{
BLI_assert(snapdata->snap_to_flag != SCE_SNAP_MODE_FACE);
- if ((snapdata->snap_to_flag & ~SCE_SNAP_MODE_FACE) == SCE_SNAP_MODE_EDGE) {
- if (me->totedge == 0) {
+ if ((snapdata->snap_to_flag & ~SCE_SNAP_MODE_FACE) == SCE_SNAP_MODE_VERTEX) {
+ if (me->totvert == 0) {
return 0;
}
}
else {
- if (me->totvert == 0) {
+ if (me->totedge == 0) {
return 0;
}
}
@@ -2059,7 +2120,8 @@ static short snapMesh(SnapObjectContext *sctx,
last_index = nearest.index;
}
- if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
+ if (snapdata->snap_to_flag &
+ (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
if (bvhtree[0]) {
/* snap to loose edges */
BLI_bvhtree_find_nearest_projected(bvhtree[0],
@@ -2157,13 +2219,13 @@ static short snapEditMesh(SnapObjectContext *sctx,
{
BLI_assert(snapdata->snap_to_flag != SCE_SNAP_MODE_FACE);
- if ((snapdata->snap_to_flag & ~SCE_SNAP_MODE_FACE) == SCE_SNAP_MODE_EDGE) {
- if (em->bm->totedge == 0) {
+ if ((snapdata->snap_to_flag & ~SCE_SNAP_MODE_FACE) == SCE_SNAP_MODE_VERTEX) {
+ if (em->bm->totvert == 0) {
return 0;
}
}
else {
- if (em->bm->totvert == 0) {
+ if (em->bm->totedge == 0) {
return 0;
}
}
@@ -2188,7 +2250,7 @@ static short snapEditMesh(SnapObjectContext *sctx,
return 0;
}
- BVHCache *em_bvh_cache = ((Mesh *)em->ob->data)->runtime.bvh_cache;
+ BVHCache **em_bvh_cache = &((Mesh *)em->ob->data)->runtime.bvh_cache;
if (snapdata->snap_to_flag & SCE_SNAP_MODE_VERTEX) {
if (sod->bvh_trees[0] == NULL) {
@@ -2198,7 +2260,7 @@ static short snapEditMesh(SnapObjectContext *sctx,
if (sctx->callbacks.edit_mesh.test_vert_fn == NULL) {
/* The tree is owned by the Mesh and may have been freed since we last used! */
- if (!bvhcache_has_tree(em_bvh_cache, treedata_vert->tree)) {
+ if (treedata_vert->tree && !bvhcache_has_tree(*em_bvh_cache, treedata_vert->tree)) {
free_bvhtree_from_editmesh(treedata_vert);
}
}
@@ -2216,16 +2278,17 @@ static short snapEditMesh(SnapObjectContext *sctx,
sctx->callbacks.edit_mesh.user_data);
bvhtree_from_editmesh_verts_ex(
- treedata_vert, em, verts_mask, verts_num_active, 0.0f, 2, 6);
+ treedata_vert, em, verts_mask, verts_num_active, 0.0f, 2, 6, 0, NULL);
MEM_freeN(verts_mask);
}
else {
- bvhtree_from_editmesh_verts(treedata_vert, em, 0.0f, 2, 6, &em_bvh_cache);
+ BKE_bvhtree_from_editmesh_get(treedata_vert, em, 2, BVHTREE_FROM_EM_VERTS, em_bvh_cache);
}
}
}
- if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
+ if (snapdata->snap_to_flag &
+ (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
if (sod->bvh_trees[1] == NULL) {
sod->bvh_trees[1] = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(**sod->bvh_trees));
}
@@ -2233,7 +2296,7 @@ static short snapEditMesh(SnapObjectContext *sctx,
if (sctx->callbacks.edit_mesh.test_edge_fn == NULL) {
/* The tree is owned by the Mesh and may have been freed since we last used! */
- if (!bvhcache_has_tree(em_bvh_cache, treedata_edge->tree)) {
+ if (treedata_edge->tree && !bvhcache_has_tree(*em_bvh_cache, treedata_edge->tree)) {
free_bvhtree_from_editmesh(treedata_edge);
}
}
@@ -2251,11 +2314,11 @@ static short snapEditMesh(SnapObjectContext *sctx,
sctx->callbacks.edit_mesh.user_data);
bvhtree_from_editmesh_edges_ex(
- treedata_edge, em, edges_mask, edges_num_active, 0.0f, 2, 6);
+ treedata_edge, em, edges_mask, edges_num_active, 0.0f, 2, 6, 0, NULL);
MEM_freeN(edges_mask);
}
else {
- bvhtree_from_editmesh_edges(treedata_edge, em, 0.0f, 2, 6, &em_bvh_cache);
+ BKE_bvhtree_from_editmesh_get(treedata_edge, em, 2, BVHTREE_FROM_EM_EDGES, em_bvh_cache);
}
}
}
@@ -2297,7 +2360,8 @@ static short snapEditMesh(SnapObjectContext *sctx,
last_index = nearest.index;
}
- if (treedata_edge && snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
+ if (treedata_edge && snapdata->snap_to_flag & (SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT |
+ SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
BM_mesh_elem_table_ensure(em->bm, BM_EDGE | BM_VERT);
BLI_bvhtree_find_nearest_projected(treedata_edge->tree,
lpmat,
@@ -2693,6 +2757,7 @@ static short transform_snap_context_project_view3d_mixed_impl(
const unsigned short snap_to_flag,
const struct SnapObjectParams *params,
const float mval[2],
+ const float prev_co[3],
float *dist_px,
float r_loc[3],
float r_no[3],
@@ -2700,7 +2765,8 @@ static short transform_snap_context_project_view3d_mixed_impl(
Object **r_ob,
float r_obmat[4][4])
{
- BLI_assert((snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE)) !=
+ BLI_assert((snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_FACE |
+ SCE_SNAP_MODE_EDGE_MIDPOINT | SCE_SNAP_MODE_EDGE_PERPENDICULAR)) !=
0);
short retval = 0;
@@ -2726,7 +2792,7 @@ static short transform_snap_context_project_view3d_mixed_impl(
ray_normal,
ray_start,
true)) {
- return false;
+ return 0;
}
float dummy_ray_depth = BVH_RAYCAST_DIST_MAX;
@@ -2739,7 +2805,8 @@ static short transform_snap_context_project_view3d_mixed_impl(
}
}
- if (snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE)) {
+ if (snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE | SCE_SNAP_MODE_EDGE_MIDPOINT |
+ SCE_SNAP_MODE_EDGE_PERPENDICULAR)) {
short elem;
float dist_px_tmp = *dist_px;
@@ -2792,11 +2859,18 @@ static short transform_snap_context_project_view3d_mixed_impl(
retval = elem;
}
- if ((retval == SCE_SNAP_MODE_EDGE) && (snapdata.snap_to_flag & SCE_SNAP_MODE_VERTEX)) {
- retval = snap_mesh_edge_verts_mixed(
- sctx, &snapdata, ob, obmat, *dist_px, &dist_px_tmp, loc, no, &index);
+ if ((retval == SCE_SNAP_MODE_EDGE) &&
+ (snap_to_flag & (SCE_SNAP_MODE_VERTEX | SCE_SNAP_MODE_EDGE_MIDPOINT |
+ SCE_SNAP_MODE_EDGE_PERPENDICULAR))) {
+ elem = snap_mesh_edge_verts_mixed(
+ sctx, &snapdata, ob, obmat, *dist_px, prev_co, &dist_px_tmp, loc, no, &index);
+ }
+
+ if (elem) {
+ retval = elem;
}
+ retval &= snap_to_flag;
*dist_px = dist_px_tmp;
}
@@ -2824,6 +2898,7 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
const unsigned short snap_to,
const struct SnapObjectParams *params,
const float mval[2],
+ const float prev_co[3],
float *dist_px,
float r_loc[3],
float r_no[3],
@@ -2832,7 +2907,7 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
float r_obmat[4][4])
{
return transform_snap_context_project_view3d_mixed_impl(
- sctx, snap_to, params, mval, dist_px, r_loc, r_no, r_index, r_ob, r_obmat) != 0;
+ sctx, snap_to, params, mval, prev_co, dist_px, r_loc, r_no, r_index, r_ob, r_obmat);
}
/**
@@ -2842,6 +2917,7 @@ short ED_transform_snap_object_project_view3d_ex(SnapObjectContext *sctx,
*
* \param sctx: Snap context.
* \param mval: Screenspace coordinate.
+ * \param prev_co: Coordinate for perpendicular point calculation (optional).
* \param dist_px: Maximum distance to snap (in pixels).
* \param r_co: hit location.
* \param r_no: hit normal (optional).
@@ -2851,12 +2927,13 @@ bool ED_transform_snap_object_project_view3d(SnapObjectContext *sctx,
const unsigned short snap_to,
const struct SnapObjectParams *params,
const float mval[2],
+ const float prev_co[3],
float *dist_px,
float r_loc[3],
float r_no[3])
{
return ED_transform_snap_object_project_view3d_ex(
- sctx, snap_to, params, mval, dist_px, r_loc, r_no, NULL, NULL, NULL) != 0;
+ sctx, snap_to, params, mval, prev_co, dist_px, r_loc, r_no, NULL, NULL, NULL) != 0;
}
/**
diff --git a/source/blender/editors/undo/ed_undo.c b/source/blender/editors/undo/ed_undo.c
index c84d7539cce..e0f4d1cf465 100644
--- a/source/blender/editors/undo/ed_undo.c
+++ b/source/blender/editors/undo/ed_undo.c
@@ -53,6 +53,7 @@
#include "ED_gpencil.h"
#include "ED_render.h"
#include "ED_object.h"
+#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_undo.h"
@@ -390,6 +391,8 @@ static int ed_undo_exec(bContext *C, wmOperator *op)
/* Keep button under the cursor active. */
WM_event_add_mousemove(C);
}
+
+ ED_outliner_select_sync_from_all_tag(C);
return ret;
}
@@ -417,6 +420,8 @@ static int ed_redo_exec(bContext *C, wmOperator *op)
/* Keep button under the cursor active. */
WM_event_add_mousemove(C);
}
+
+ ED_outliner_select_sync_from_all_tag(C);
return ret;
}
diff --git a/source/blender/editors/util/CMakeLists.txt b/source/blender/editors/util/CMakeLists.txt
index c09237d825d..0564cb07897 100644
--- a/source/blender/editors/util/CMakeLists.txt
+++ b/source/blender/editors/util/CMakeLists.txt
@@ -41,7 +41,6 @@ set(SRC
ed_util.c
gizmo_utils.c
numinput.c
- select_buffer_utils.c
select_utils.c
# general includes
@@ -80,7 +79,6 @@ set(SRC
../include/ED_screen.h
../include/ED_screen_types.h
../include/ED_sculpt.h
- ../include/ED_select_buffer_utils.h
../include/ED_select_utils.h
../include/ED_sequencer.h
../include/ED_sound.h
diff --git a/source/blender/editors/util/select_buffer_utils.c b/source/blender/editors/util/select_buffer_utils.c
deleted file mode 100644
index 2201ee5cec2..00000000000
--- a/source/blender/editors/util/select_buffer_utils.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * 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) 2008 Blender Foundation.
- * All rights reserved.
- */
-
-/** \file
- * \ingroup edutil
- *
- * Generic utilities for handling buffer selection where selection ID's are drawn onto
- * an off screen buffer.
- *
- * All coordinates are relative to the current region.
- */
-
-#include "MEM_guardedalloc.h"
-
-#include "BLI_bitmap.h"
-#include "BLI_bitmap_draw_2d.h"
-#include "BLI_rect.h"
-#include "BLI_utildefines.h"
-
-#include "ED_select_buffer_utils.h"
-
-/* Only for #ED_view3d_select_id_read,
- * note that this file shouldn't have 3D view specific logic in it, we could have a more general
- * way to read from selection buffers that doesn't depend on the view3d API. */
-#include "ED_view3d.h"
-
-/* -------------------------------------------------------------------- */
-/** \name Select Bitmap from ID's
- *
- * Given a buffer of select ID's, fill in a booleans (true/false) per index.
- * #BLI_bitmap is used for memory efficiency.
- *
- * \{ */
-
-/**
- * \param bitmap_len: Number of indices in the selection id buffer.
- * \param rect: The rectangle to sample indices from (min/max inclusive).
- * \returns a #BLI_bitmap the length of \a bitmap_len or NULL on failure.
- */
-uint *ED_select_buffer_bitmap_from_rect(const uint bitmap_len, const rcti *rect)
-{
- uint buf_len;
- const uint *buf = ED_view3d_select_id_read(
- rect->xmin, rect->ymin, rect->xmax, rect->ymax, &buf_len);
- if (buf == NULL) {
- return NULL;
- }
-
- const uint *buf_iter = buf;
-
- BLI_bitmap *bitmap_buf = BLI_BITMAP_NEW(bitmap_len, __func__);
-
- while (buf_len--) {
- const uint index = *buf_iter - 1;
- if (index < bitmap_len) {
- BLI_BITMAP_ENABLE(bitmap_buf, index);
- }
- buf_iter++;
- }
- MEM_freeN((void *)buf);
- return bitmap_buf;
-}
-
-/**
- * \param bitmap_len: Number of indices in the selection id buffer.
- * \param center: Circle center.
- * \param radius: Circle radius.
- * \returns a #BLI_bitmap the length of \a bitmap_len or NULL on failure.
- */
-uint *ED_select_buffer_bitmap_from_circle(const uint bitmap_len,
- const int center[2],
- const int radius)
-{
- if (bitmap_len == 0) {
- return NULL;
- }
-
- const int xmin = center[0] - radius;
- const int xmax = center[0] + radius;
- const int ymin = center[1] - radius;
- const int ymax = center[1] + radius;
-
- const uint *buf = ED_view3d_select_id_read(xmin, ymin, xmax, ymax, NULL);
- if (buf == NULL) {
- return NULL;
- }
-
- const uint *buf_iter = buf;
-
- BLI_bitmap *bitmap_buf = BLI_BITMAP_NEW(bitmap_len, __func__);
- const int radius_sq = radius * radius;
- for (int yc = -radius; yc <= radius; yc++) {
- for (int xc = -radius; xc <= radius; xc++, buf_iter++) {
- if (xc * xc + yc * yc < radius_sq) {
- /* Intentionally wrap to max value if this is zero. */
- const uint index = *buf_iter - 1;
- if (index < bitmap_len) {
- BLI_BITMAP_ENABLE(bitmap_buf, index);
- }
- }
- }
- }
- MEM_freeN((void *)buf);
- return bitmap_buf;
-}
-
-struct PolyMaskData {
- BLI_bitmap *px;
- int width;
-};
-
-static void ed_select_buffer_mask_px_cb(int x, int x_end, int y, void *user_data)
-{
- struct PolyMaskData *data = user_data;
- BLI_bitmap *px = data->px;
- int i = (y * data->width) + x;
- do {
- BLI_BITMAP_ENABLE(px, i);
- i++;
- } while (++x != x_end);
-}
-
-/**
- * \param bitmap_len: Number of indices in the selection id buffer.
- * \param center: Circle center.
- * \param radius: Circle radius.
- * \returns a #BLI_bitmap the length of \a bitmap_len or NULL on failure.
- */
-uint *ED_select_buffer_bitmap_from_poly(const uint bitmap_len,
- const int poly[][2],
- const int poly_len,
- const rcti *rect)
-
-{
- if (bitmap_len == 0) {
- return NULL;
- }
-
- struct PolyMaskData poly_mask_data;
- uint buf_len;
- const uint *buf = ED_view3d_select_id_read(
- rect->xmin, rect->ymin, rect->xmax, rect->ymax, &buf_len);
- if (buf == NULL) {
- return NULL;
- }
-
- BLI_bitmap *buf_mask = BLI_BITMAP_NEW(buf_len, __func__);
- poly_mask_data.px = buf_mask;
- poly_mask_data.width = (rect->xmax - rect->xmin) + 1;
-
- BLI_bitmap_draw_2d_poly_v2i_n(rect->xmin,
- rect->ymin,
- rect->xmax + 1,
- rect->ymax + 1,
- poly,
- poly_len,
- ed_select_buffer_mask_px_cb,
- &poly_mask_data);
-
- /* Build selection lookup. */
- const uint *buf_iter = buf;
- BLI_bitmap *bitmap_buf = BLI_BITMAP_NEW(bitmap_len, __func__);
- int i = 0;
- while (buf_len--) {
- const uint index = *buf_iter - 1;
- if (index < bitmap_len && BLI_BITMAP_TEST(buf_mask, i)) {
- BLI_BITMAP_ENABLE(bitmap_buf, index);
- }
- buf_iter++;
- i++;
- }
- MEM_freeN((void *)buf);
- MEM_freeN(buf_mask);
-
- return bitmap_buf;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Find Single Select ID's
- *
- * Given a buffer of select ID's, find the a single select id.
- *
- * \{ */
-
-/**
- * Samples a single pixel.
- */
-uint ED_select_buffer_sample_point(const int center[2])
-{
- uint buf_len;
- uint *buf = ED_view3d_select_id_read(center[0], center[1], center[0], center[1], &buf_len);
- BLI_assert(0 != buf_len);
- uint ret = buf[0];
- MEM_freeN(buf);
- return ret;
-}
-
-/**
- * Find the selection id closest to \a center.
- * \param dist[in,out]: Use to initialize the distance,
- * when found, this value is set to the distance of the selection that's returned.
- */
-uint ED_select_buffer_find_nearest_to_point(const int center[2],
- const uint id_min,
- const uint id_max,
- uint *dist)
-{
- /* Smart function to sample a rect spiraling outside, nice for selection ID. */
-
- /* Create region around center (typically the mouse cursor).
- * This must be square and have an odd width,
- * the spiraling algorithm does not work with arbitrary rectangles. */
- rcti rect;
- BLI_rcti_init_pt_radius(&rect, center, *dist);
- rect.xmax += 1;
- rect.ymax += 1;
-
- int width = BLI_rcti_size_x(&rect);
- int height = width;
- BLI_assert(width == height);
-
- /* Read from selection framebuffer. */
-
- uint buf_len;
- const uint *buf = ED_view3d_select_id_read_rect(&rect, &buf_len);
- BLI_assert(width * height == buf_len);
-
- /* Spiral, starting from center of buffer. */
- int spiral_offset = height * (int)(width / 2) + (height / 2);
- int spiral_direction = 0;
-
- uint index = 0;
-
- for (int nr = 1; nr <= height; nr++) {
- for (int a = 0; a < 2; a++) {
- for (int b = 0; b < nr; b++) {
- /* Find hit within the specified range. */
- uint hit_id = buf[spiral_offset];
-
- if (hit_id && hit_id >= id_min && hit_id < id_max) {
- /* Get x/y from spiral offset. */
- int hit_x = spiral_offset % width;
- int hit_y = spiral_offset / width;
-
- int center_x = width / 2;
- int center_y = height / 2;
-
- /* Manhatten distance in keeping with other screen-based selection. */
- *dist = (uint)(abs(hit_x - center_x) + abs(hit_y - center_y));
-
- /* Indices start at 1 here. */
- index = (hit_id - id_min) + 1;
- goto exit;
- }
-
- /* Next spiral step. */
- if (spiral_direction == 0) {
- spiral_offset += 1; /* right */
- }
- else if (spiral_direction == 1) {
- spiral_offset -= width; /* down */
- }
- else if (spiral_direction == 2) {
- spiral_offset -= 1; /* left */
- }
- else {
- spiral_offset += width; /* up */
- }
-
- /* Stop if we are outside the buffer. */
- if (spiral_offset < 0 || spiral_offset >= buf_len) {
- goto exit;
- }
- }
-
- spiral_direction = (spiral_direction + 1) % 4;
- }
- }
-
-exit:
- MEM_freeN((void *)buf);
- return index;
-}
-
-/** \} */
diff --git a/source/blender/editors/uvedit/uvedit_draw.c b/source/blender/editors/uvedit/uvedit_draw.c
index ed8178d1908..fe761f65702 100644
--- a/source/blender/editors/uvedit/uvedit_draw.c
+++ b/source/blender/editors/uvedit/uvedit_draw.c
@@ -163,13 +163,13 @@ void ED_image_draw_cursor(ARegion *ar, const float cursor[2])
static void uvedit_get_batches(Object *ob,
SpaceImage *sima,
- const ToolSettings *ts,
+ const Scene *scene,
GPUBatch **faces,
GPUBatch **edges,
GPUBatch **verts,
GPUBatch **facedots)
{
- int drawfaces = draw_uvs_face_check(ts);
+ int drawfaces = draw_uvs_face_check(scene->toolsettings);
const bool draw_stretch = (sima->flag & SI_DRAW_STRETCH) != 0;
const bool draw_faces = (sima->flag & SI_NO_DRAWFACES) == 0;
@@ -197,7 +197,7 @@ static void uvedit_get_batches(Object *ob,
*faces = NULL;
}
- DRW_mesh_batch_cache_create_requested(ob, ob->data, ts, false, false);
+ DRW_mesh_batch_cache_create_requested(ob, ob->data, scene, false, false);
}
static void draw_uvs_shadow(SpaceImage *UNUSED(sima),
@@ -205,14 +205,14 @@ static void draw_uvs_shadow(SpaceImage *UNUSED(sima),
Object *obedit,
Depsgraph *depsgraph)
{
- Object *eval_ob = DEG_get_evaluated_object(depsgraph, obedit);
- Mesh *me = eval_ob->data;
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, obedit);
+ Mesh *me = ob_eval->data;
float col[4];
UI_GetThemeColor4fv(TH_UV_SHADOW, col);
DRW_mesh_batch_cache_validate(me);
GPUBatch *edges = DRW_mesh_batch_cache_get_uv_edges(me);
- DRW_mesh_batch_cache_create_requested(eval_ob, me, scene->toolsettings, false, false);
+ DRW_mesh_batch_cache_create_requested(ob_eval, me, scene, false, false);
if (edges) {
GPU_batch_program_set_builtin(edges, GPU_SHADER_2D_UV_UNIFORM_COLOR);
@@ -223,8 +223,8 @@ static void draw_uvs_shadow(SpaceImage *UNUSED(sima),
static void draw_uvs_texpaint(Scene *scene, Object *ob, Depsgraph *depsgraph)
{
- Object *eval_ob = DEG_get_evaluated_object(depsgraph, ob);
- Mesh *me = eval_ob->data;
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, ob);
+ Mesh *me = ob_eval->data;
ToolSettings *ts = scene->toolsettings;
float col[4];
UI_GetThemeColor4fv(TH_UV_SHADOW, col);
@@ -235,7 +235,7 @@ static void draw_uvs_texpaint(Scene *scene, Object *ob, Depsgraph *depsgraph)
DRW_mesh_batch_cache_validate(me);
GPUBatch *geom = DRW_mesh_batch_cache_get_uv_edges(me);
- DRW_mesh_batch_cache_create_requested(eval_ob, me, scene->toolsettings, false, false);
+ DRW_mesh_batch_cache_create_requested(ob_eval, me, scene, false, false);
GPU_batch_program_set_builtin(geom, GPU_SHADER_2D_UV_UNIFORM_COLOR);
GPU_batch_uniform_4fv(geom, "color", col);
@@ -246,7 +246,7 @@ static void draw_uvs_texpaint(Scene *scene, Object *ob, Depsgraph *depsgraph)
MPoly *mpoly = me->mpoly;
uint draw_start = 0;
uint idx = 0;
- bool prev_ma_match = (mpoly->mat_nr == (eval_ob->actcol - 1));
+ bool prev_ma_match = (mpoly->mat_nr == (ob_eval->actcol - 1));
GPU_matrix_bind(geom->interface);
GPU_batch_bind(geom);
@@ -255,7 +255,7 @@ static void draw_uvs_texpaint(Scene *scene, Object *ob, Depsgraph *depsgraph)
* we can use multi draw indirect drawcalls for this.
* (not implemented in GPU module at the time of writing). */
for (int a = 0; a < me->totpoly; a++, mpoly++) {
- bool ma_match = (mpoly->mat_nr == (eval_ob->actcol - 1));
+ bool ma_match = (mpoly->mat_nr == (ob_eval->actcol - 1));
if (ma_match != prev_ma_match) {
if (ma_match == false) {
GPU_batch_draw_advanced(geom, draw_start, idx - draw_start, 0, 0);
@@ -282,13 +282,13 @@ static void draw_uvs_texpaint(Scene *scene, Object *ob, Depsgraph *depsgraph)
static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit, Depsgraph *depsgraph)
{
GPUBatch *faces, *edges, *verts, *facedots;
- Object *eval_ob = DEG_get_evaluated_object(depsgraph, obedit);
+ Object *ob_eval = DEG_get_evaluated_object(depsgraph, obedit);
const ToolSettings *ts = scene->toolsettings;
float col1[4], col2[4], col3[4], transparent[4] = {0.0f, 0.0f, 0.0f, 0.0f};
if (sima->flag & SI_DRAWSHADOW) {
bool is_cage_like_final_meshes = false;
- Mesh *me = (Mesh *)eval_ob->data;
+ Mesh *me = (Mesh *)ob_eval->data;
BMEditMesh *embm = me->edit_mesh;
is_cage_like_final_meshes = embm && embm->mesh_eval_final &&
embm->mesh_eval_final->runtime.is_original;
@@ -300,7 +300,7 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit, Depsgraph *
}
}
- uvedit_get_batches(eval_ob, sima, ts, &faces, &edges, &verts, &facedots);
+ uvedit_get_batches(ob_eval, sima, scene, &faces, &edges, &verts, &facedots);
bool interpedges;
bool draw_stretch = (sima->flag & SI_DRAW_STRETCH) != 0;
@@ -367,33 +367,33 @@ static void draw_uvs(SpaceImage *sima, Scene *scene, Object *obedit, Depsgraph *
break;
}
case SI_UVDT_BLACK:
- case SI_UVDT_WHITE: {
- GPU_line_width(1.0f);
- GPU_batch_program_set_builtin(edges, GPU_SHADER_2D_UNIFORM_COLOR);
- if (sima->dt_uv == SI_UVDT_WHITE) {
- GPU_batch_uniform_4f(edges, "color", 1.0f, 1.0f, 1.0f, 1.0f);
- }
- else {
- GPU_batch_uniform_4f(edges, "color", 0.0f, 0.0f, 0.0f, 1.0f);
- }
- GPU_batch_draw(edges);
- break;
- }
+ case SI_UVDT_WHITE:
case SI_UVDT_OUTLINE: {
/* We could modify the vbo's data filling
* instead of modifying the provoking vert. */
glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);
- UI_GetThemeColor4fv(TH_WIRE_EDIT, col1);
UI_GetThemeColor4fv(TH_EDGE_SELECT, col2);
GPU_batch_program_set_builtin(
edges, (interpedges) ? GPU_SHADER_2D_UV_EDGES_SMOOTH : GPU_SHADER_2D_UV_EDGES);
- /* Black Outline. */
- GPU_line_width(3.0f);
- GPU_batch_uniform_4f(edges, "edgeColor", 0.0f, 0.0f, 0.0f, 1.0f);
- GPU_batch_uniform_4f(edges, "selectColor", 0.0f, 0.0f, 0.0f, 1.0f);
- GPU_batch_draw(edges);
+
+ if (sima->dt_uv == SI_UVDT_OUTLINE) {
+ /* Black Outline. */
+ GPU_line_width(3.0f);
+ GPU_batch_uniform_4f(edges, "edgeColor", 0.0f, 0.0f, 0.0f, 1.0f);
+ GPU_batch_uniform_4f(edges, "selectColor", 0.0f, 0.0f, 0.0f, 1.0f);
+ GPU_batch_draw(edges);
+
+ UI_GetThemeColor4fv(TH_WIRE_EDIT, col1);
+ }
+ else if (sima->dt_uv == SI_UVDT_WHITE) {
+ copy_v4_fl4(col1, 1.0f, 1.0f, 1.0f, 1.0f);
+ }
+ else {
+ copy_v4_fl4(col1, 0.0f, 0.0f, 0.0f, 1.0f);
+ }
+
/* Inner Line. Use depth test to insure selection is drawn on top. */
GPU_depth_test(true);
GPU_line_width(1.0f);
diff --git a/source/blender/editors/uvedit/uvedit_intern.h b/source/blender/editors/uvedit/uvedit_intern.h
index 3f544ad90d1..7bc6b048585 100644
--- a/source/blender/editors/uvedit/uvedit_intern.h
+++ b/source/blender/editors/uvedit/uvedit_intern.h
@@ -24,7 +24,6 @@
#ifndef __UVEDIT_INTERN_H__
#define __UVEDIT_INTERN_H__
-struct BMEditMesh;
struct BMFace;
struct BMLoop;
struct Image;
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index 6a2f740ba51..cd7e5f9ba09 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -43,7 +43,10 @@
#include "BLI_lasso_2d.h"
#include "BLI_blenlib.h"
#include "BLI_array.h"
+#include "BLI_hash.h"
#include "BLI_kdtree.h"
+#include "BLI_kdopbvh.h"
+#include "BLI_polyfill_2d.h"
#include "BLT_translation.h"
@@ -135,7 +138,7 @@ static int UNUSED_FUNCTION(ED_operator_uvmap_mesh)(bContext *C)
if (ob && ob->type == OB_MESH) {
Mesh *me = ob->data;
- if (CustomData_get_layer(&me->fdata, CD_MTFACE) != NULL) {
+ if (CustomData_get_layer(&me->ldata, CD_MLOOPUV) != NULL) {
return 1;
}
}
@@ -4339,6 +4342,248 @@ static void UV_OT_select_pinned(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
+/** \name Select Overlap Operator
+ * \{ */
+
+BLI_INLINE uint overlap_hash(const void *overlap_v)
+{
+ const BVHTreeOverlap *overlap = overlap_v;
+
+ /* Designed to treat (A,B) and (B,A) as the same. */
+ int x = overlap->indexA;
+ int y = overlap->indexB;
+ if (x > y) {
+ SWAP(int, x, y);
+ }
+ return BLI_hash_int_2d(x, y);
+}
+
+BLI_INLINE bool overlap_cmp(const void *a_v, const void *b_v)
+{
+ const BVHTreeOverlap *a = a_v;
+ const BVHTreeOverlap *b = b_v;
+ return !((a->indexA == b->indexA && a->indexB == b->indexB) ||
+ (a->indexA == b->indexB && a->indexB == b->indexA));
+}
+
+struct UVOverlapData {
+ int ob_index;
+ int face_index;
+ float tri[3][2];
+};
+
+static int uv_select_overlap(bContext *C, const bool extend)
+{
+ Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
+ Scene *scene = CTX_data_scene(C);
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Image *ima = CTX_data_edit_image(C);
+
+ uint objects_len = 0;
+ Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data_with_uvs(
+ view_layer, ((View3D *)NULL), &objects_len);
+
+ /* Calculate maximum number of tree nodes and prepare initial selection. */
+ uint uv_tri_len = 0;
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+ Object *obedit = objects[ob_index];
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+
+ BM_mesh_elem_table_ensure(em->bm, BM_FACE);
+ BM_mesh_elem_index_ensure(em->bm, BM_VERT | BM_FACE);
+ BM_mesh_elem_hflag_disable_all(em->bm, BM_FACE, BM_ELEM_TAG, false);
+ if (!extend) {
+ uv_select_all_perform(scene, ima, obedit, SEL_DESELECT);
+ }
+
+ BMIter iter;
+ BMFace *efa;
+ BM_ITER_MESH (efa, &iter, em->bm, BM_FACES_OF_MESH) {
+ if (!uvedit_face_visible_test_ex(scene->toolsettings, obedit, ima, efa)) {
+ continue;
+ }
+ uv_tri_len += efa->len - 2;
+ }
+ }
+
+ struct UVOverlapData *overlap_data = MEM_mallocN(sizeof(struct UVOverlapData) * uv_tri_len,
+ "UvOverlapData");
+ BVHTree *uv_tree = BLI_bvhtree_new(uv_tri_len, 0.0f, 4, 6);
+
+ /* Use a global data index when inserting into the BVH. */
+ int data_index = 0;
+
+ int face_len_alloc = 3;
+ float(*uv_verts)[2] = MEM_mallocN(sizeof(*uv_verts) * face_len_alloc, "UvOverlapCoords");
+ uint(*indices)[3] = MEM_mallocN(sizeof(*indices) * (face_len_alloc - 2), "UvOverlapTris");
+
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+ Object *obedit = objects[ob_index];
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMIter iter, liter;
+ BMFace *efa;
+ BMLoop *l;
+
+ const int cd_loop_uv_offset = CustomData_get_offset(&em->bm->ldata, CD_MLOOPUV);
+
+ /* Triangulate each UV face and store it inside the BVH. */
+ int face_index;
+ BM_ITER_MESH_INDEX (efa, &iter, em->bm, BM_FACES_OF_MESH, face_index) {
+
+ if (!uvedit_face_visible_test_ex(scene->toolsettings, obedit, ima, efa)) {
+ continue;
+ }
+
+ const uint face_len = efa->len;
+ const uint tri_len = face_len - 2;
+
+ if (face_len_alloc < face_len) {
+ MEM_freeN(uv_verts);
+ MEM_freeN(indices);
+ uv_verts = MEM_mallocN(sizeof(*uv_verts) * face_len, "UvOverlapCoords");
+ indices = MEM_mallocN(sizeof(*indices) * tri_len, "UvOverlapTris");
+ face_len_alloc = face_len;
+ }
+
+ int vert_index;
+ BM_ITER_ELEM_INDEX (l, &liter, efa, BM_LOOPS_OF_FACE, vert_index) {
+ MLoopUV *luv = BM_ELEM_CD_GET_VOID_P(l, cd_loop_uv_offset);
+ copy_v2_v2(uv_verts[vert_index], luv->uv);
+ }
+
+ BLI_polyfill_calc(uv_verts, face_len, 0, indices);
+
+ for (int t = 0; t < tri_len; t++) {
+ overlap_data[data_index].ob_index = ob_index;
+ overlap_data[data_index].face_index = face_index;
+
+ /* BVH needs 3D, overlap data uses 2D. */
+ float tri[3][3] = {
+ {UNPACK2(uv_verts[indices[t][0]]), 0.0f},
+ {UNPACK2(uv_verts[indices[t][1]]), 0.0f},
+ {UNPACK2(uv_verts[indices[t][2]]), 0.0f},
+ };
+
+ copy_v2_v2(overlap_data[data_index].tri[0], tri[0]);
+ copy_v2_v2(overlap_data[data_index].tri[1], tri[1]);
+ copy_v2_v2(overlap_data[data_index].tri[2], tri[2]);
+
+ BLI_bvhtree_insert(uv_tree, data_index, &tri[0][0], 3);
+ data_index++;
+ }
+ }
+ }
+ BLI_assert(data_index == uv_tri_len);
+
+ MEM_freeN(uv_verts);
+ MEM_freeN(indices);
+
+ BLI_bvhtree_balance(uv_tree);
+
+ uint tree_overlap_len;
+ BVHTreeOverlap *overlap = BLI_bvhtree_overlap(uv_tree, uv_tree, &tree_overlap_len, NULL, NULL);
+
+ if (overlap != NULL) {
+ GSet *overlap_set = BLI_gset_new_ex(overlap_hash, overlap_cmp, __func__, tree_overlap_len);
+
+ for (int i = 0; i < tree_overlap_len; i++) {
+ /* Skip overlaps against yourself. */
+ if (overlap[i].indexA == overlap[i].indexB) {
+ continue;
+ }
+
+ /* Skip overlaps that have already been tested. */
+ if (!BLI_gset_add(overlap_set, &overlap[i])) {
+ continue;
+ }
+
+ const struct UVOverlapData *o_a = &overlap_data[overlap[i].indexA];
+ const struct UVOverlapData *o_b = &overlap_data[overlap[i].indexB];
+ Object *obedit_a = objects[o_a->ob_index];
+ Object *obedit_b = objects[o_b->ob_index];
+ BMEditMesh *em_a = BKE_editmesh_from_object(obedit_a);
+ BMEditMesh *em_b = BKE_editmesh_from_object(obedit_b);
+ BMFace *face_a = em_a->bm->ftable[o_a->face_index];
+ BMFace *face_b = em_b->bm->ftable[o_b->face_index];
+ const int cd_loop_uv_offset_a = CustomData_get_offset(&em_a->bm->ldata, CD_MLOOPUV);
+ const int cd_loop_uv_offset_b = CustomData_get_offset(&em_b->bm->ldata, CD_MLOOPUV);
+
+ /* Skip if both faces are already selected. */
+ if (uvedit_face_select_test(scene, face_a, cd_loop_uv_offset_a) &&
+ uvedit_face_select_test(scene, face_b, cd_loop_uv_offset_b)) {
+ continue;
+ }
+
+ /* Main tri-tri overlap test. */
+ const float endpoint_bias = -1e-4f;
+ const float(*t1)[2] = o_a->tri;
+ const float(*t2)[2] = o_b->tri;
+ float vi[2];
+ bool result = (
+ /* Don't use 'isect_tri_tri_v2' here
+ * because it's important to ignore overlap at end-points. */
+ isect_seg_seg_v2_point_ex(t1[0], t1[1], t2[0], t2[1], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[0], t1[1], t2[1], t2[2], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[0], t1[1], t2[2], t2[0], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[1], t1[2], t2[0], t2[1], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[1], t1[2], t2[1], t2[2], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[1], t1[2], t2[2], t2[0], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[2], t1[0], t2[0], t2[1], endpoint_bias, vi) == 1 ||
+ isect_seg_seg_v2_point_ex(t1[2], t1[0], t2[1], t2[2], endpoint_bias, vi) == 1 ||
+ isect_point_tri_v2(t1[0], t2[0], t2[1], t2[2]) != 0 ||
+ isect_point_tri_v2(t2[0], t1[0], t1[1], t1[2]) != 0);
+
+ if (result) {
+ uvedit_face_select_enable(scene, em_a, face_a, false, cd_loop_uv_offset_a);
+ uvedit_face_select_enable(scene, em_b, face_b, false, cd_loop_uv_offset_b);
+ }
+ }
+
+ BLI_gset_free(overlap_set, NULL);
+ MEM_freeN(overlap);
+ }
+
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+ uv_select_tag_update_for_object(depsgraph, scene->toolsettings, objects[ob_index]);
+ }
+
+ BLI_bvhtree_free(uv_tree);
+
+ MEM_freeN(overlap_data);
+ MEM_freeN(objects);
+
+ return OPERATOR_FINISHED;
+}
+
+static int uv_select_overlap_exec(bContext *C, wmOperator *op)
+{
+ bool extend = RNA_boolean_get(op->ptr, "extend");
+ return uv_select_overlap(C, extend);
+}
+
+static void UV_OT_select_overlap(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Select Overlap";
+ ot->description = "Select all UV faces which overlap each other";
+ ot->idname = "UV_OT_select_overlap";
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+
+ /* api callbacks */
+ ot->exec = uv_select_overlap_exec;
+ ot->poll = ED_operator_uvedit;
+
+ /* properties */
+ RNA_def_boolean(ot->srna,
+ "extend",
+ 0,
+ "Extend",
+ "Extend selection rather than clearing the existing selection");
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
/** \name Hide Operator
* \{ */
@@ -4971,6 +5216,7 @@ void ED_operatortypes_uvedit(void)
WM_operatortype_append(UV_OT_select_circle);
WM_operatortype_append(UV_OT_select_more);
WM_operatortype_append(UV_OT_select_less);
+ WM_operatortype_append(UV_OT_select_overlap);
WM_operatortype_append(UV_OT_snap_cursor);
WM_operatortype_append(UV_OT_snap_selected);
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index c4ce49c5982..bb96b4ba10c 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -3962,7 +3962,7 @@ static float p_smooth_median_edge_length(PChart *chart)
float median;
int i;
- /* ok, so i'm lazy */
+ /* ok, so I'm lazy */
for (i = 0, e = chart->edges; e; e = e->nextlink, i++) {
lengths[i] = p_edge_length(e);
}
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index a42a6eba3ff..2d8f40ea5af 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -524,7 +524,7 @@ static ParamHandle *construct_param_handle_subsurfed(Scene *scene,
smd.levels = smd_real->levels;
smd.subdivType = smd_real->subdivType;
- initialDerived = CDDM_from_editbmesh(em, false, false);
+ initialDerived = CDDM_from_editbmesh(em, false);
derivedMesh = subsurf_make_derived_from_derived(
initialDerived, &smd, scene, NULL, SUBSURF_IN_EDIT_MODE);
diff --git a/source/blender/freestyle/CMakeLists.txt b/source/blender/freestyle/CMakeLists.txt
index 253fcecc81c..ba5172c7916 100644
--- a/source/blender/freestyle/CMakeLists.txt
+++ b/source/blender/freestyle/CMakeLists.txt
@@ -575,6 +575,11 @@ set(INC_SYS
add_definitions(-DWITH_FREESTYLE)
+if(WITH_PYTHON_SAFETY)
+ # For bpy_rna.h access.
+ add_definitions(-DWITH_PYTHON_SAFETY)
+endif()
+
if(WITH_INTERNATIONAL)
add_definitions(-DWITH_INTERNATIONAL)
endif()
diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h
index bad279ed9d9..dc8a0c79072 100644
--- a/source/blender/freestyle/FRS_freestyle.h
+++ b/source/blender/freestyle/FRS_freestyle.h
@@ -29,7 +29,6 @@ struct FreestyleConfig;
struct FreestyleLineStyle;
struct Material;
struct Render;
-struct RenderLayer;
struct FreestyleGlobals {
struct Scene *scene;
diff --git a/source/blender/freestyle/intern/geometry/GeomCleaner.h b/source/blender/freestyle/intern/geometry/GeomCleaner.h
index 1c193e7252e..aee8ed6963d 100644
--- a/source/blender/freestyle/intern/geometry/GeomCleaner.h
+++ b/source/blender/freestyle/intern/geometry/GeomCleaner.h
@@ -59,7 +59,7 @@ class GeomCleaner {
* Output of sorted vertices.
* A vertex v1 precedes another one v2 in this array
* if v1.x<v2.x, or v1.x=v2.x && v1.y < v2.y or v1.x=v2.y && v1.y=v2.y && v1.z < v2.z.
- * The array is organized as a 3-float serie giving the vertices coordinates: XYZXYZXYZ...
+ * The array is organized as a 3-float series giving the vertices coordinates: XYZXYZXYZ...
* oIndices
* Output corresponding to the iIndices array but reorganized in
* order to match the sorted vertex array.
@@ -86,7 +86,7 @@ class GeomCleaner {
* The size of iIndices array
* oVertices
* The vertex array, result of the compression.
- * The array is organized as a 3-float serie giving the vertices coordinates: XYZXYZXYZ...
+ * The array is organized as a 3-float series giving the vertices coordinates: XYZXYZXYZ...
* oVSize
* The size of oVertices.
* oIndices
@@ -114,7 +114,7 @@ class GeomCleaner {
* The size of iIndices array
* oVertices
* The vertex array, result of the sorting-compression.
- * The array is organized as a 3-float serie giving the vertices coordinates: XYZXYZXYZ...
+ * The array is organized as a 3-float series giving the vertices coordinates: XYZXYZXYZ...
* oVSize
* The size of oVertices.
* oIndices
@@ -143,7 +143,7 @@ class GeomCleaner {
* The size of iIndices array
* oVertices
* The vertex array, result of the sorting-compression.
- * The array is organized as a 3-float serie giving the vertices coordinates: XYZXYZXYZ...
+ * The array is organized as a 3-float series giving the vertices coordinates: XYZXYZXYZ...
* oVSize
* The size of oVertices.
* oIndices
diff --git a/source/blender/freestyle/intern/python/BPy_Freestyle.cpp b/source/blender/freestyle/intern/python/BPy_Freestyle.cpp
index 71cdbafba45..367ad556d02 100644
--- a/source/blender/freestyle/intern/python/BPy_Freestyle.cpp
+++ b/source/blender/freestyle/intern/python/BPy_Freestyle.cpp
@@ -229,7 +229,7 @@ static PyObject *Freestyle_evaluateColorRamp(PyObject * /*self*/, PyObject *args
}
#include "DNA_color_types.h"
-#include "BKE_colortools.h" /* curvemapping_evaluateF() */
+#include "BKE_colortools.h" /* BKE_curvemapping_evaluateF() */
static char Freestyle_evaluateCurveMappingF___doc__[] =
".. function:: evaluateCurveMappingF(cumap, cur, value)\n"
@@ -264,13 +264,13 @@ static PyObject *Freestyle_evaluateCurveMappingF(PyObject * /*self*/, PyObject *
return NULL;
}
cumap = (CurveMapping *)py_srna->ptr.data;
- curvemapping_initialize(cumap);
+ BKE_curvemapping_initialize(cumap);
/* disable extrapolation if enabled */
if ((cumap->cm[cur].flag & CUMA_EXTEND_EXTRAPOLATE)) {
cumap->cm[cur].flag &= ~(CUMA_EXTEND_EXTRAPOLATE);
- curvemapping_changed(cumap, 0);
+ BKE_curvemapping_changed(cumap, 0);
}
- return PyFloat_FromDouble(curvemapping_evaluateF(cumap, cur, value));
+ return PyFloat_FromDouble(BKE_curvemapping_evaluateF(cumap, cur, value));
}
/*-----------------------Freestyle module docstring----------------------------*/
diff --git a/source/blender/freestyle/intern/scene_graph/FrsMaterial.h b/source/blender/freestyle/intern/scene_graph/FrsMaterial.h
index c5a87c3baaf..80cd783f164 100644
--- a/source/blender/freestyle/intern/scene_graph/FrsMaterial.h
+++ b/source/blender/freestyle/intern/scene_graph/FrsMaterial.h
@@ -36,14 +36,14 @@ class FrsMaterial {
/*! Default constructor */
inline FrsMaterial();
- /*! Builds a Material from its line, diffuse, ambiant, specular, emissive
+ /*! Builds a Material from its line, diffuse, ambient, specular, emissive
* colors, a shininess coefficient and line color priority.
* \param iLine:
* A 4 element float-array containing the line color.
* \param iDiffuse:
* A 4 element float-array containing the diffuse color.
* \param iAmbiant:
- * A 4 element float-array containing the ambiant color.
+ * A 4 element float-array containing the ambient color.
* \param iSpecular:
* A 4 element float-array containing the specular color.
* \param iEmission:
@@ -159,31 +159,31 @@ class FrsMaterial {
return Specular[3];
}
- /*! Returns the ambiant color as a 4 float array */
+ /*! Returns the ambient color as a 4 float array */
inline const float *ambient() const
{
return Ambient;
}
- /*! Returns the red component of the ambiant color */
+ /*! Returns the red component of the ambient color */
inline const float ambientR() const
{
return Ambient[0];
}
- /*! Returns the green component of the ambiant color */
+ /*! Returns the green component of the ambient color */
inline const float ambientG() const
{
return Ambient[1];
}
- /*! Returns the blue component of the ambiant color */
+ /*! Returns the blue component of the ambient color */
inline const float ambientB() const
{
return Ambient[2];
}
- /*! Returns the alpha component of the ambiant color */
+ /*! Returns the alpha component of the ambient color */
inline const float ambientA() const
{
return Ambient[3];
@@ -267,7 +267,7 @@ class FrsMaterial {
*/
inline void setSpecular(const float r, const float g, const float b, const float a);
- /*! Sets the ambiant color.
+ /*! Sets the ambient color.
* \param r:
* Red component
* \param g:
diff --git a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
index d70794d9b78..f8dd25913c1 100644
--- a/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
+++ b/source/blender/freestyle/intern/scene_graph/IndexedFaceSet.h
@@ -19,7 +19,7 @@
/** \file
* \ingroup freestyle
- * \brief A Set of indexed faces to represent a surfacic object
+ * \brief A Set of indexed faces to represent a surface object
*/
#include <memory.h>
diff --git a/source/blender/freestyle/intern/scene_graph/NodeTransform.h b/source/blender/freestyle/intern/scene_graph/NodeTransform.h
index c816d30c03b..1118417657f 100644
--- a/source/blender/freestyle/intern/scene_graph/NodeTransform.h
+++ b/source/blender/freestyle/intern/scene_graph/NodeTransform.h
@@ -45,10 +45,10 @@ class NodeTransform : public NodeGroup {
{
}
- /*! multiplys the current matrix by the x, y, z translation matrix. */
+ /*! multiplies the current matrix by the x, y, z translation matrix. */
void Translate(real x, real y, real z);
- /*! multiplys the current matrix by a rotation matrix
+ /*! multiplies the current matrix by a rotation matrix
* iAngle
* The rotation angle
* x, y, z
@@ -56,13 +56,13 @@ class NodeTransform : public NodeGroup {
*/
void Rotate(real iAngle, real x, real y, real z);
- /*! multiplys the current matrix by a scaling matrix.
+ /*! multiplies the current matrix by a scaling matrix.
* x, y, z
* The scaling coefficients with respect to the x,y,z axis
*/
void Scale(real x, real y, real z);
- /*! Multiplys the current matrix by iMatrix */
+ /*! Multiplies the current matrix by iMatrix */
void MultiplyMatrix(const Matrix44r &iMatrix);
/*! Sets the current matrix to iMatrix */
diff --git a/source/blender/freestyle/intern/stroke/AdvancedFunctions1D.h b/source/blender/freestyle/intern/stroke/AdvancedFunctions1D.h
index a1fd3fb2665..d14a9836b95 100644
--- a/source/blender/freestyle/intern/stroke/AdvancedFunctions1D.h
+++ b/source/blender/freestyle/intern/stroke/AdvancedFunctions1D.h
@@ -208,7 +208,7 @@ class GetDirectionalViewMapDensityF1D : public UnaryFunction1D<double> {
// GetSteerableViewMapDensityF1D
/*! Returns the density of the viewmap for a given Interface1D. The density of each FEdge is
- * evaluated in the proper steerable ViewMap depending on its oorientation.
+ * evaluated in the proper steerable ViewMap depending on its orientation.
*/
class GetSteerableViewMapDensityF1D : public UnaryFunction1D<double> {
private:
@@ -250,7 +250,7 @@ class GetSteerableViewMapDensityF1D : public UnaryFunction1D<double> {
// GetViewMapGradientNormF1D
/*! Returns the density of the viewmap for a given Interface1D. The density of each FEdge is
- * evaluated in the proper steerable ViewMap depending on its oorientation.
+ * evaluated in the proper steerable ViewMap depending on its orientation.
*/
class GetViewMapGradientNormF1D : public UnaryFunction1D<double> {
private:
diff --git a/source/blender/freestyle/intern/stroke/AdvancedStrokeShaders.h b/source/blender/freestyle/intern/stroke/AdvancedStrokeShaders.h
index 641e133b019..86bb696a031 100644
--- a/source/blender/freestyle/intern/stroke/AdvancedStrokeShaders.h
+++ b/source/blender/freestyle/intern/stroke/AdvancedStrokeShaders.h
@@ -101,7 +101,7 @@ class SpatialNoiseShader : public StrokeShader {
};
/*! [ Geometry Shader ].
- * Smoothes the stroke.
+ * Smooths the stroke.
* (Moves the vertices to make the stroke smoother).
* Uses curvature flow to converge towards a curve of constant curvature. The diffusion method we
* use is anisotropic to prevent the diffusion across corners. \see \htmlonly <a
diff --git a/source/blender/freestyle/intern/stroke/BasicStrokeShaders.h b/source/blender/freestyle/intern/stroke/BasicStrokeShaders.h
index e4a54106c38..5a2d0cbe458 100644
--- a/source/blender/freestyle/intern/stroke/BasicStrokeShaders.h
+++ b/source/blender/freestyle/intern/stroke/BasicStrokeShaders.h
@@ -515,8 +515,8 @@ class PolygonalizationShader : public StrokeShader {
/*! Builds the shader.
* \param iError:
* The error we want our polygonal approximation to have with respect to the original
- * geometry. The smaller, the closer the new stroke to the orinal one. This error corresponds to
- * the maximum distance between the new stroke and the old one.
+ * geometry. The smaller, the closer the new stroke to the original one.
+ * This error corresponds * to the maximum distance between the new stroke and the old one.
*/
PolygonalizationShader(float iError) : StrokeShader()
{
diff --git a/source/blender/freestyle/intern/stroke/Curve.h b/source/blender/freestyle/intern/stroke/Curve.h
index 7eadfa830ce..8a233eef4ab 100644
--- a/source/blender/freestyle/intern/stroke/Curve.h
+++ b/source/blender/freestyle/intern/stroke/Curve.h
@@ -56,7 +56,7 @@ using namespace Geometry;
/*! Class to represent a point of a curve.
* A CurvePoint can be any point of a 1D curve (it doesn't have to be a vertex of the curve).
* Any Interface1D is built upon ViewEdges, themselves built upon FEdges. Therefore, a curve is
- * basically a polyline made of a list SVertex. Thus, a CurvePoint is built by lineraly
+ * basically a polyline made of a list SVertex. Thus, a CurvePoint is built by linearly
* interpolating two SVertex. CurvePoint can be used as virtual points while querying 0D
* information along a curve at a given resolution.
*/
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
index 5b5290dc0ff..5209313f717 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.c
@@ -74,9 +74,10 @@ void gpencil_modifier_type_init(GpencilModifierTypeInfo *types[])
#undef INIT_GP_TYPE
}
-/* verify if valid layer and pass index */
+/* verify if valid layer, material and pass index */
bool is_stroke_affected_by_modifier(Object *ob,
char *mlayername,
+ char *mmaterialname,
int mpassindex,
int gpl_passindex,
int minpoints,
@@ -84,9 +85,11 @@ bool is_stroke_affected_by_modifier(Object *ob,
bGPDstroke *gps,
bool inv1,
bool inv2,
- bool inv3)
+ bool inv3,
+ bool inv4)
{
- MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
+ Material *ma = give_current_material(ob, gps->mat_nr + 1);
+ MaterialGPencilStyle *gp_style = ma->gp_style;
/* omit if filter by layer */
if (mlayername[0] != '\0') {
@@ -101,6 +104,19 @@ bool is_stroke_affected_by_modifier(Object *ob,
}
}
}
+ /* omit if filter by material */
+ if (mmaterialname[0] != '\0') {
+ if (inv4 == false) {
+ if (!STREQ(mmaterialname, ma->id.name + 2)) {
+ return false;
+ }
+ }
+ else {
+ if (STREQ(mmaterialname, ma->id.name + 2)) {
+ return false;
+ }
+ }
+ }
/* verify layer pass */
if (gpl_passindex > 0) {
if (inv3 == false) {
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
index c3dbd341e10..7f00e072cda 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencil_util.h
@@ -34,6 +34,7 @@ struct bGPDstroke;
bool is_stroke_affected_by_modifier(struct Object *ob,
char *mlayername,
+ char *mmaterialname,
int mpassindex,
int gpl_passindex,
int minpoints,
@@ -41,7 +42,8 @@ bool is_stroke_affected_by_modifier(struct Object *ob,
bGPDstroke *gps,
bool inv1,
bool inv2,
- bool inv3);
+ bool inv3,
+ bool inv4);
float get_modifier_point_weight(struct MDeformVert *dvert, bool inverse, int def_nr);
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
index 1ef1068ee52..acf9b5c3642 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
@@ -107,6 +107,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *UNUSED(gpl),
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
ArmatureGpencilModifierData *mmd = (ArmatureGpencilModifierData *)md;
@@ -140,7 +141,7 @@ static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData
/* compute armature effects on this frame */
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md_eval, depsgraph, object_eval, gpl, gps);
+ deformStroke(md_eval, depsgraph, object_eval, gpl, gpf, gps);
}
}
}
@@ -154,7 +155,12 @@ static bool isDisabled(GpencilModifierData *md, int UNUSED(userRenderParams))
{
ArmatureGpencilModifierData *mmd = (ArmatureGpencilModifierData *)md;
- return !mmd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the armature is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !mmd->object || mmd->object->type != OB_ARMATURE;
}
static void updateDepsgraph(GpencilModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 0a391a6e63e..c311497ffbb 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -171,6 +171,7 @@ static void generate_geometry(GpencilModifierData *md,
*/
if (is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -178,7 +179,8 @@ static void generate_geometry(GpencilModifierData *md,
gps,
mmd->flag & GP_ARRAY_INVERT_LAYER,
mmd->flag & GP_ARRAY_INVERT_PASS,
- mmd->flag & GP_ARRAY_INVERT_LAYERPASS)) {
+ mmd->flag & GP_ARRAY_INVERT_LAYERPASS,
+ mmd->flag & GP_ARRAY_INVERT_MATERIAL)) {
valid_strokes[idx] = true;
num_valid++;
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
index d54ec75862b..741acfbe405 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
@@ -51,6 +51,7 @@ static void initData(GpencilModifierData *md)
gpmd->pass_index = 0;
ARRAY_SET_ITEMS(gpmd->hsv, 0.5f, 1.0f, 1.0f);
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->flag |= GP_COLOR_CREATE_COLORS;
gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
}
@@ -65,6 +66,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
@@ -73,6 +75,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -80,7 +83,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_COLOR_INVERT_LAYER,
mmd->flag & GP_COLOR_INVERT_PASS,
- mmd->flag & GP_COLOR_INVERT_LAYERPASS)) {
+ mmd->flag & GP_COLOR_INVERT_LAYERPASS,
+ mmd->flag & GP_COLOR_INVERT_MATERIAL)) {
return;
}
@@ -128,7 +132,7 @@ static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData
copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
gpencil_apply_modifier_material(
bmain, ob, mat, gh_color, gps, (bool)(mmd->flag & GP_COLOR_CREATE_COLORS));
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
index daca46c3a9a..810a2ba7e25 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
@@ -77,13 +77,14 @@ static void initData(GpencilModifierData *md)
HookGpencilModifierData *gpmd = (HookGpencilModifierData *)md;
gpmd->pass_index = 0;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->object = NULL;
gpmd->force = 0.5f;
gpmd->falloff_type = eGPHook_Falloff_Smooth;
- gpmd->curfalloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ gpmd->curfalloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
if (gpmd->curfalloff) {
- curvemapping_initialize(gpmd->curfalloff);
+ BKE_curvemapping_initialize(gpmd->curfalloff);
}
}
@@ -93,13 +94,13 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
HookGpencilModifierData *tgmd = (HookGpencilModifierData *)target;
if (tgmd->curfalloff != NULL) {
- curvemapping_free(tgmd->curfalloff);
+ BKE_curvemapping_free(tgmd->curfalloff);
tgmd->curfalloff = NULL;
}
BKE_gpencil_modifier_copyData_generic(md, target);
- tgmd->curfalloff = curvemapping_copy(gmd->curfalloff);
+ tgmd->curfalloff = BKE_curvemapping_copy(gmd->curfalloff);
}
/* calculate factor of fallof */
@@ -126,7 +127,7 @@ static float gp_hook_falloff(const struct GPHookData_cb *tData, const float len_
switch (tData->falloff_type) {
case eGPHook_Falloff_Curve:
- fac = curvemapping_evaluateF(tData->curfalloff, 0, fac);
+ fac = BKE_curvemapping_evaluateF(tData->curfalloff, 0, fac);
break;
case eGPHook_Falloff_Sharp:
fac = fac * fac;
@@ -190,6 +191,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
HookGpencilModifierData *mmd = (HookGpencilModifierData *)md;
@@ -205,6 +207,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -212,7 +215,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_HOOK_INVERT_LAYER,
mmd->flag & GP_HOOK_INVERT_PASS,
- mmd->flag & GP_HOOK_INVERT_LAYERPASS)) {
+ mmd->flag & GP_HOOK_INVERT_LAYERPASS,
+ mmd->flag & GP_HOOK_INVERT_MATERIAL)) {
return;
}
@@ -285,7 +289,7 @@ static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData
/* compute hook effects on this frame */
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
@@ -300,7 +304,7 @@ static void freeData(GpencilModifierData *md)
HookGpencilModifierData *mmd = (HookGpencilModifierData *)md;
if (mmd->curfalloff) {
- curvemapping_free(mmd->curfalloff);
+ BKE_curvemapping_free(mmd->curfalloff);
}
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
index da2b4214da1..765967d8346 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
@@ -55,6 +55,7 @@ static void initData(GpencilModifierData *md)
LatticeGpencilModifierData *gpmd = (LatticeGpencilModifierData *)md;
gpmd->pass_index = 0;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->object = NULL;
gpmd->cache_data = NULL;
@@ -70,6 +71,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
LatticeGpencilModifierData *mmd = (LatticeGpencilModifierData *)md;
@@ -77,6 +79,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -84,7 +87,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_LATTICE_INVERT_LAYER,
mmd->flag & GP_LATTICE_INVERT_PASS,
- mmd->flag & GP_LATTICE_INVERT_LAYERPASS)) {
+ mmd->flag & GP_LATTICE_INVERT_LAYERPASS,
+ mmd->flag & GP_LATTICE_INVERT_MATERIAL)) {
return;
}
@@ -134,7 +138,7 @@ static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData
/* compute lattice effects on this frame */
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
@@ -165,7 +169,12 @@ static bool isDisabled(GpencilModifierData *md, int UNUSED(userRenderParams))
{
LatticeGpencilModifierData *mmd = (LatticeGpencilModifierData *)md;
- return !mmd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the lattice is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !mmd->object || mmd->object->type != OB_LATTICE;
}
static void updateDepsgraph(GpencilModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
index 058f60a69ac..112dfc2e9dc 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
@@ -57,6 +57,7 @@ static void initData(GpencilModifierData *md)
MirrorGpencilModifierData *gpmd = (MirrorGpencilModifierData *)md;
gpmd->pass_index = 0;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->object = NULL;
gpmd->flag |= GP_MIRROR_AXIS_X;
}
@@ -134,6 +135,7 @@ static void generateStrokes(GpencilModifierData *md,
for (i = 0, gps = gpf->strokes.first; i < tot_strokes; i++, gps = gps->next) {
if (is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -141,7 +143,8 @@ static void generateStrokes(GpencilModifierData *md,
gps,
mmd->flag & GP_MIRROR_INVERT_LAYER,
mmd->flag & GP_MIRROR_INVERT_PASS,
- mmd->flag & GP_MIRROR_INVERT_LAYERPASS)) {
+ mmd->flag & GP_MIRROR_INVERT_LAYERPASS,
+ mmd->flag & GP_MIRROR_INVERT_MATERIAL)) {
gps_new = BKE_gpencil_stroke_duplicate(gps);
update_position(ob, mmd, gps_new, xi);
BLI_addtail(&gpf->strokes, gps_new);
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
index e0139eac6b2..b286b55829e 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
@@ -26,10 +26,9 @@
#include "BLI_utildefines.h"
#include "BLI_math_vector.h"
+#include "BLI_hash.h"
#include "BLI_rand.h"
-#include "PIL_time.h"
-
#include "DNA_meshdata_types.h"
#include "DNA_scene_types.h"
#include "DNA_object_types.h"
@@ -56,22 +55,10 @@ static void initData(GpencilModifierData *md)
gpmd->flag |= GP_NOISE_USE_RANDOM;
gpmd->factor = 0.5f;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->step = 1;
- gpmd->scene_frame = -999999;
- gpmd->gp_frame = -999999;
-
- gpmd->vrand1 = 1.0;
- gpmd->vrand2 = 1.0;
-}
-
-static void freeData(GpencilModifierData *md)
-{
- NoiseGpencilModifierData *mmd = (NoiseGpencilModifierData *)md;
-
- if (mmd->rng != NULL) {
- BLI_rng_free(mmd->rng);
- }
+ gpmd->seed = 0;
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -85,24 +72,13 @@ static bool dependsOnTime(GpencilModifierData *md)
return (mmd->flag & GP_NOISE_USE_RANDOM) != 0;
}
-/* Get the lower number of frame for all layers. */
-static int get_lower_frame(bGPdata *gpd)
-{
- int init = 99999;
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- if (gpl->frames.first) {
- bGPDframe *gpf = gpl->frames.first;
- if (gpf->framenum < init) {
- init = gpf->framenum;
- }
- }
- }
- return init;
-}
-
/* aply noise effect based on stroke direction */
-static void deformStroke(
- GpencilModifierData *md, Depsgraph *depsgraph, Object *ob, bGPDlayer *gpl, bGPDstroke *gps)
+static void deformStroke(GpencilModifierData *md,
+ Depsgraph *depsgraph,
+ Object *ob,
+ bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
+ bGPDstroke *gps)
{
NoiseGpencilModifierData *mmd = (NoiseGpencilModifierData *)md;
bGPDspoint *pt0, *pt1;
@@ -111,28 +87,13 @@ static void deformStroke(
float normal[3];
float vec1[3], vec2[3];
int sc_frame = 0;
- int sc_diff = 0;
+ int stroke_seed = 0;
const int def_nr = defgroup_name_index(ob, mmd->vgname);
const float unit_v3[3] = {1.0f, 1.0f, 1.0f};
- Object *object_eval = DEG_get_evaluated_object(depsgraph, ob);
- GpencilModifierData *md_eval = BKE_gpencil_modifiers_findByName(object_eval, md->name);
- NoiseGpencilModifierData *mmd_eval = (NoiseGpencilModifierData *)md_eval;
- bGPdata *gpd = (bGPdata *)ob->data;
-
- /* Random generator, only init once. (it uses eval to get same value in render) */
- if (mmd_eval->rng == NULL) {
- uint rng_seed = (uint)(PIL_check_seconds_timer_i() & UINT_MAX);
- rng_seed ^= POINTER_AS_UINT(mmd);
- mmd_eval->rng = BLI_rng_new(rng_seed);
- mmd->rng = mmd_eval->rng;
- /* Get lower frame number */
- mmd_eval->scene_frame = get_lower_frame(gpd);
- mmd->scene_frame = mmd_eval->scene_frame;
- }
-
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -140,7 +101,8 @@ static void deformStroke(
gps,
mmd->flag & GP_NOISE_INVERT_LAYER,
mmd->flag & GP_NOISE_INVERT_PASS,
- mmd->flag & GP_NOISE_INVERT_LAYERPASS)) {
+ mmd->flag & GP_NOISE_INVERT_LAYERPASS,
+ mmd->flag & GP_NOISE_INVERT_MATERIAL)) {
return;
}
@@ -200,22 +162,14 @@ static void deformStroke(
normalize_v3(vec2);
/* Use random noise */
if (mmd->flag & GP_NOISE_USE_RANDOM) {
- sc_diff = abs(sc_frame - mmd->scene_frame) % mmd->step;
- /* Only recalc if the gp frame change or is a step. */
- if ((mmd->gp_frame != sc_frame) && (sc_diff == 0)) {
- vran = mmd->vrand1 = BLI_rng_get_float(mmd->rng);
- vdir = mmd->vrand2 = BLI_rng_get_float(mmd->rng);
- mmd->gp_frame = sc_frame;
+ stroke_seed = BLI_hash_int_2d((sc_frame / mmd->step) + gps->totpoints, mmd->seed + 1);
+ vran = BLI_hash_frand(stroke_seed);
+ if (mmd->flag & GP_NOISE_FULL_STROKE) {
+ vdir = BLI_hash_frand(stroke_seed + 3);
}
else {
- vran = mmd->vrand1;
- if (mmd->flag & GP_NOISE_FULL_STROKE) {
- vdir = mmd->vrand2;
- }
- else {
- int f = (mmd->vrand2 * 10.0f) + i;
- vdir = f % 2;
- }
+ int f = (BLI_hash_frand(stroke_seed + 3) * 10.0f) + i;
+ vdir = f % 2;
}
}
else {
@@ -226,7 +180,6 @@ static void deformStroke(
else {
vdir = i % 2;
}
- mmd->gp_frame = -999999;
}
/* if vec2 is zero, set to something */
@@ -293,7 +246,7 @@ static void bakeModifier(struct Main *UNUSED(bmain),
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
@@ -314,7 +267,7 @@ GpencilModifierTypeInfo modifierType_Gpencil_Noise = {
/* remapTime */ NULL,
/* initData */ initData,
- /* freeData */ freeData,
+ /* freeData */ NULL,
/* isDisabled */ NULL,
/* updateDepsgraph */ NULL,
/* dependsOnTime */ dependsOnTime,
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
index 345a6c34f23..08f67eedc86 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
@@ -48,6 +48,7 @@ static void initData(GpencilModifierData *md)
OffsetGpencilModifierData *gpmd = (OffsetGpencilModifierData *)md;
gpmd->pass_index = 0;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
ARRAY_SET_ITEMS(gpmd->loc, 0.0f, 0.0f, 0.0f);
ARRAY_SET_ITEMS(gpmd->rot, 0.0f, 0.0f, 0.0f);
@@ -64,6 +65,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
OffsetGpencilModifierData *mmd = (OffsetGpencilModifierData *)md;
@@ -74,6 +76,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -81,7 +84,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_OFFSET_INVERT_LAYER,
mmd->flag & GP_OFFSET_INVERT_PASS,
- mmd->flag & GP_OFFSET_INVERT_LAYERPASS)) {
+ mmd->flag & GP_OFFSET_INVERT_LAYERPASS,
+ mmd->flag & GP_OFFSET_INVERT_MATERIAL)) {
return;
}
@@ -116,7 +120,7 @@ static void bakeModifier(struct Main *UNUSED(bmain),
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index 587cf527118..346d1e834a6 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -52,6 +52,7 @@ static void initData(GpencilModifierData *md)
gpmd->pass_index = 0;
gpmd->factor = 1.0f;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->flag |= GP_OPACITY_CREATE_COLORS;
gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
@@ -67,6 +68,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
OpacityGpencilModifierData *mmd = (OpacityGpencilModifierData *)md;
@@ -74,6 +76,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -81,7 +84,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_OPACITY_INVERT_LAYER,
mmd->flag & GP_OPACITY_INVERT_PASS,
- mmd->flag & GP_OPACITY_INVERT_LAYERPASS)) {
+ mmd->flag & GP_OPACITY_INVERT_LAYERPASS,
+ mmd->flag & GP_OPACITY_INVERT_MATERIAL)) {
return;
}
@@ -146,7 +150,7 @@ static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData
copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
gpencil_apply_modifier_material(
bmain, ob, mat, gh_color, gps, (bool)(mmd->flag & GP_OPACITY_CREATE_COLORS));
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
index 5e5c60645ad..25a56c4385c 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
@@ -45,7 +45,10 @@ static void initData(GpencilModifierData *md)
gpmd->pass_index = 0;
gpmd->step = 1;
gpmd->factor = 0.0f;
+ gpmd->length = 0.1f;
+ gpmd->distance = 0.1f;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -57,31 +60,49 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *gpf,
bGPDstroke *gps)
{
SimplifyGpencilModifierData *mmd = (SimplifyGpencilModifierData *)md;
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
- 4,
+ mmd->mode == GP_SIMPLIFY_SAMPLE ? 3 : 4,
gpl,
gps,
mmd->flag & GP_SIMPLIFY_INVERT_LAYER,
mmd->flag & GP_SIMPLIFY_INVERT_PASS,
- mmd->flag & GP_SIMPLIFY_INVERT_LAYERPASS)) {
+ mmd->flag & GP_SIMPLIFY_INVERT_LAYERPASS,
+ mmd->flag & GP_SIMPLIFY_INVERT_MATERIAL)) {
return;
}
- if (mmd->mode == GP_SIMPLIFY_FIXED) {
- for (int i = 0; i < mmd->step; i++) {
- BKE_gpencil_simplify_fixed(gps);
+ /* Select simplification mode. */
+ switch (mmd->mode) {
+ case GP_SIMPLIFY_FIXED: {
+ for (int i = 0; i < mmd->step; i++) {
+ BKE_gpencil_simplify_fixed(gps);
+ }
+ break;
}
- }
- else {
- /* simplify stroke using Ramer-Douglas-Peucker algorithm */
- BKE_gpencil_simplify_stroke(gps, mmd->factor);
+ case GP_SIMPLIFY_ADAPTIVE: {
+ /* simplify stroke using Ramer-Douglas-Peucker algorithm */
+ BKE_gpencil_simplify_stroke(gps, mmd->factor);
+ break;
+ }
+ case GP_SIMPLIFY_SAMPLE: {
+ BKE_gpencil_sample_stroke(gps, mmd->length, false);
+ break;
+ }
+ case GP_SIMPLIFY_MERGE: {
+ BKE_gpencil_merge_distance_stroke(gpf, gps, mmd->distance, true);
+ break;
+ }
+ default:
+ break;
}
}
@@ -95,7 +116,7 @@ static void bakeModifier(struct Main *UNUSED(bmain),
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
index 866f229cc51..5ec7fe4ff18 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
@@ -46,6 +46,7 @@ static void initData(GpencilModifierData *md)
gpmd->flag |= GP_SMOOTH_MOD_LOCATION;
gpmd->factor = 0.5f;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->step = 1;
}
@@ -60,6 +61,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
SmoothGpencilModifierData *mmd = (SmoothGpencilModifierData *)md;
@@ -67,6 +69,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
3,
@@ -74,7 +77,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_SMOOTH_INVERT_LAYER,
mmd->flag & GP_SMOOTH_INVERT_PASS,
- mmd->flag & GP_SMOOTH_INVERT_LAYERPASS)) {
+ mmd->flag & GP_SMOOTH_INVERT_LAYERPASS,
+ mmd->flag & GP_SMOOTH_INVERT_MATERIAL)) {
return;
}
@@ -123,7 +127,7 @@ static void bakeModifier(struct Main *UNUSED(bmain),
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
index a30ad2b898a..741555722b5 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
@@ -47,6 +47,7 @@ static void initData(GpencilModifierData *md)
gpmd->pass_index = 0;
gpmd->level = 1;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
}
static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
@@ -59,12 +60,14 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
SubdivGpencilModifierData *mmd = (SubdivGpencilModifierData *)md;
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
3,
@@ -72,7 +75,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_SUBDIV_INVERT_LAYER,
mmd->flag & GP_SUBDIV_INVERT_PASS,
- mmd->flag & GP_SUBDIV_INVERT_LAYERPASS)) {
+ mmd->flag & GP_SUBDIV_INVERT_LAYERPASS,
+ mmd->flag & GP_SUBDIV_INVERT_MATERIAL)) {
return;
}
@@ -89,7 +93,7 @@ static void bakeModifier(struct Main *UNUSED(bmain),
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
index 4a2a1783127..e9e92f7a1e2 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
@@ -47,10 +47,11 @@ static void initData(GpencilModifierData *md)
gpmd->pass_index = 0;
gpmd->thickness = 2;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
gpmd->vgname[0] = '\0';
- gpmd->curve_thickness = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ gpmd->curve_thickness = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
if (gpmd->curve_thickness) {
- curvemapping_initialize(gpmd->curve_thickness);
+ BKE_curvemapping_initialize(gpmd->curve_thickness);
}
}
@@ -59,7 +60,7 @@ static void freeData(GpencilModifierData *md)
ThickGpencilModifierData *gpmd = (ThickGpencilModifierData *)md;
if (gpmd->curve_thickness) {
- curvemapping_free(gpmd->curve_thickness);
+ BKE_curvemapping_free(gpmd->curve_thickness);
}
}
@@ -69,13 +70,13 @@ static void copyData(const GpencilModifierData *md, GpencilModifierData *target)
ThickGpencilModifierData *tgmd = (ThickGpencilModifierData *)target;
if (tgmd->curve_thickness != NULL) {
- curvemapping_free(tgmd->curve_thickness);
+ BKE_curvemapping_free(tgmd->curve_thickness);
tgmd->curve_thickness = NULL;
}
BKE_gpencil_modifier_copyData_generic(md, target);
- tgmd->curve_thickness = curvemapping_copy(gmd->curve_thickness);
+ tgmd->curve_thickness = BKE_curvemapping_copy(gmd->curve_thickness);
}
/* change stroke thickness */
@@ -83,6 +84,7 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
ThickGpencilModifierData *mmd = (ThickGpencilModifierData *)md;
@@ -90,6 +92,7 @@ static void deformStroke(GpencilModifierData *md,
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -97,20 +100,46 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_THICK_INVERT_LAYER,
mmd->flag & GP_THICK_INVERT_PASS,
- mmd->flag & GP_THICK_INVERT_LAYERPASS)) {
+ mmd->flag & GP_THICK_INVERT_LAYERPASS,
+ mmd->flag & GP_THICK_INVERT_MATERIAL)) {
return;
}
- /* if normalize, set stroke thickness */
+ /* Check to see if we normalize the whole stroke or only certain points along it. */
+ bool gps_has_affected_points = false;
+ bool gps_has_unaffected_points = false;
+
if (mmd->flag & GP_THICK_NORMALIZE) {
+ for (int i = 0; i < gps->totpoints; i++) {
+ MDeformVert *dvert = gps->dvert != NULL ? &gps->dvert[i] : NULL;
+ const float weight = get_modifier_point_weight(
+ dvert, (mmd->flag & GP_THICK_INVERT_VGROUP) != 0, def_nr);
+ if (weight < 0.0f) {
+ gps_has_unaffected_points = true;
+ }
+ else {
+ gps_has_affected_points = true;
+ }
+
+ /* If both checks are true, we have what we need so we can stop looking. */
+ if (gps_has_affected_points && gps_has_unaffected_points) {
+ break;
+ }
+ }
+ }
+
+ /* If we are normalizing and all points of the stroke are affected, it's safe to reset thickness
+ */
+ if (mmd->flag & GP_THICK_NORMALIZE && gps_has_affected_points && !gps_has_unaffected_points) {
gps->thickness = mmd->thickness;
}
+ /* Without this check, modifier alters the thickness of strokes which have no points in scope */
for (int i = 0; i < gps->totpoints; i++) {
bGPDspoint *pt = &gps->points[i];
MDeformVert *dvert = gps->dvert != NULL ? &gps->dvert[i] : NULL;
float curvef = 1.0f;
- /* verify vertex group */
+ /* Verify point is part of vertex group. */
const float weight = get_modifier_point_weight(
dvert, (mmd->flag & GP_THICK_INVERT_VGROUP) != 0, def_nr);
if (weight < 0.0f) {
@@ -118,13 +147,23 @@ static void deformStroke(GpencilModifierData *md,
}
if (mmd->flag & GP_THICK_NORMALIZE) {
- pt->pressure = 1.0f;
+ if (gps_has_unaffected_points) {
+ /* Clamp value for very weird situations when stroke thickness can be zero. */
+ CLAMP_MIN(gps->thickness, 1);
+ /* Calculate pressure value to match the width of strokes with reset thickness and 1.0
+ * pressure. */
+ pt->pressure = (float)mmd->thickness / (float)gps->thickness;
+ }
+ else {
+ /* Reset point pressure values so only stroke thickness counts. */
+ pt->pressure = 1.0f;
+ }
}
else {
if ((mmd->flag & GP_THICK_CUSTOM_CURVE) && (mmd->curve_thickness)) {
- /* normalize value to evaluate curve */
+ /* Normalize value to evaluate curve. */
float value = (float)i / (gps->totpoints - 1);
- curvef = curvemapping_evaluateF(mmd->curve_thickness, 0, value);
+ curvef = BKE_curvemapping_evaluateF(mmd->curve_thickness, 0, value);
}
pt->pressure += mmd->thickness * weight * curvef;
@@ -143,7 +182,7 @@ static void bakeModifier(struct Main *UNUSED(bmain),
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
for (bGPDframe *gpf = gpl->frames.first; gpf; gpf = gpf->next) {
for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
}
}
}
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
index 289cae955ba..bfb2c62cef6 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
@@ -50,6 +50,7 @@ static void initData(GpencilModifierData *md)
gpmd->pass_index = 0;
gpmd->factor = 0.5f;
gpmd->layername[0] = '\0';
+ gpmd->materialname[0] = '\0';
ARRAY_SET_ITEMS(gpmd->rgb, 1.0f, 1.0f, 1.0f);
gpmd->flag |= GP_TINT_CREATE_COLORS;
gpmd->modify_color = GP_MODIFY_COLOR_BOTH;
@@ -65,12 +66,14 @@ static void deformStroke(GpencilModifierData *md,
Depsgraph *UNUSED(depsgraph),
Object *ob,
bGPDlayer *gpl,
+ bGPDframe *UNUSED(gpf),
bGPDstroke *gps)
{
TintGpencilModifierData *mmd = (TintGpencilModifierData *)md;
if (!is_stroke_affected_by_modifier(ob,
mmd->layername,
+ mmd->materialname,
mmd->pass_index,
mmd->layer_pass,
1,
@@ -78,7 +81,8 @@ static void deformStroke(GpencilModifierData *md,
gps,
mmd->flag & GP_TINT_INVERT_LAYER,
mmd->flag & GP_TINT_INVERT_PASS,
- mmd->flag & GP_TINT_INVERT_LAYERPASS)) {
+ mmd->flag & GP_TINT_INVERT_LAYERPASS,
+ mmd->flag & GP_TINT_INVERT_MATERIAL)) {
return;
}
@@ -134,7 +138,7 @@ static void bakeModifier(Main *bmain, Depsgraph *depsgraph, GpencilModifierData
copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
- deformStroke(md, depsgraph, ob, gpl, gps);
+ deformStroke(md, depsgraph, ob, gpl, gpf, gps);
gpencil_apply_modifier_material(
bmain, ob, mat, gh_color, gps, (bool)(mmd->flag & GP_TINT_CREATE_COLORS));
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index c620644a5f8..fb7d3c1ace8 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -116,6 +116,7 @@ set(SRC
intern/gpu_batch_private.h
intern/gpu_codegen.h
intern/gpu_context_private.h
+ intern/gpu_matrix_private.h
intern/gpu_primitive_private.h
intern/gpu_private.h
intern/gpu_select_private.h
diff --git a/source/blender/gpu/GPU_batch.h b/source/blender/gpu/GPU_batch.h
index 5b0cab220c0..175033f70d9 100644
--- a/source/blender/gpu/GPU_batch.h
+++ b/source/blender/gpu/GPU_batch.h
@@ -40,7 +40,7 @@ typedef enum {
GPU_BATCH_READY_TO_DRAW,
} GPUBatchPhase;
-#define GPU_BATCH_VBO_MAX_LEN 4
+#define GPU_BATCH_VBO_MAX_LEN 6
#define GPU_BATCH_VAO_STATIC_LEN 3
#define GPU_BATCH_VAO_DYN_ALLOC_COUNT 16
@@ -105,8 +105,9 @@ void GPU_batch_copy(GPUBatch *batch_dst, GPUBatch *batch_src);
#define GPU_batch_create(prim, verts, elem) GPU_batch_create_ex(prim, verts, elem, 0)
#define GPU_batch_init(batch, prim, verts, elem) GPU_batch_init_ex(batch, prim, verts, elem, 0)
-void GPU_batch_clear(
- GPUBatch *); /* Same as discard but does not free. (does not clal free callback) */
+/* Same as discard but does not free. (does not call free callback). */
+void GPU_batch_clear(GPUBatch *);
+
void GPU_batch_discard(GPUBatch *); /* verts & elem are not discarded */
void GPU_batch_vao_cache_clear(GPUBatch *);
@@ -114,6 +115,7 @@ void GPU_batch_vao_cache_clear(GPUBatch *);
void GPU_batch_callback_free_set(GPUBatch *, void (*callback)(GPUBatch *, void *), void *);
void GPU_batch_instbuf_set(GPUBatch *, GPUVertBuf *, bool own_vbo); /* Instancing */
+void GPU_batch_elembuf_set(GPUBatch *batch, GPUIndexBuf *elem, bool own_ibo);
int GPU_batch_vertbuf_add_ex(GPUBatch *, GPUVertBuf *, bool own_vbo);
diff --git a/source/blender/gpu/GPU_batch_presets.h b/source/blender/gpu/GPU_batch_presets.h
index 4b95783e6fa..55d2e461b30 100644
--- a/source/blender/gpu/GPU_batch_presets.h
+++ b/source/blender/gpu/GPU_batch_presets.h
@@ -27,9 +27,6 @@
#ifndef __GPU_BATCH_PRESETS_H__
#define __GPU_BATCH_PRESETS_H__
-struct GPUVertFormat;
-struct rctf;
-
#include "BLI_compiler_attrs.h"
#include "BLI_sys_types.h"
diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h
index 507baa9531e..7814c723fec 100644
--- a/source/blender/gpu/GPU_draw.h
+++ b/source/blender/gpu/GPU_draw.h
@@ -28,17 +28,11 @@
extern "C" {
#endif
-struct DupliObject;
struct ImBuf;
struct Image;
struct ImageUser;
struct Main;
-struct Object;
-struct RegionView3D;
-struct Scene;
struct SmokeModifierData;
-struct View3D;
-struct ViewLayer;
#include "DNA_object_enums.h"
diff --git a/source/blender/gpu/GPU_element.h b/source/blender/gpu/GPU_element.h
index 4ac89d2658b..75caf4cbd6a 100644
--- a/source/blender/gpu/GPU_element.h
+++ b/source/blender/gpu/GPU_element.h
@@ -36,14 +36,19 @@ typedef enum {
} GPUIndexBufType;
typedef struct GPUIndexBuf {
+ uint index_start;
uint index_len;
+ bool is_subrange;
#if GPU_TRACK_INDEX_RANGE
GPUIndexBufType index_type;
uint32_t gl_index_type;
uint base_index;
#endif
uint32_t ibo_id; /* 0 indicates not yet sent to VRAM */
- void *data; /* non-NULL indicates not yet sent to VRAM */
+ union {
+ void *data; /* non-NULL indicates not yet sent to VRAM */
+ struct GPUIndexBuf *src; /* if is_subrange is true, this is the source buffer. */
+ };
} GPUIndexBuf;
void GPU_indexbuf_use(GPUIndexBuf *);
@@ -71,9 +76,21 @@ void GPU_indexbuf_add_line_verts(GPUIndexBufBuilder *, uint v1, uint v2);
void GPU_indexbuf_add_tri_verts(GPUIndexBufBuilder *, uint v1, uint v2, uint v3);
void GPU_indexbuf_add_line_adj_verts(GPUIndexBufBuilder *, uint v1, uint v2, uint v3, uint v4);
+void GPU_indexbuf_set_point_vert(GPUIndexBufBuilder *builder, uint elem, uint v1);
+void GPU_indexbuf_set_line_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2);
+void GPU_indexbuf_set_tri_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2, uint v3);
+
+/* Skip primitive rendering at the given index. */
+void GPU_indexbuf_set_point_restart(GPUIndexBufBuilder *builder, uint elem);
+void GPU_indexbuf_set_line_restart(GPUIndexBufBuilder *builder, uint elem);
+void GPU_indexbuf_set_tri_restart(GPUIndexBufBuilder *builder, uint elem);
+
GPUIndexBuf *GPU_indexbuf_build(GPUIndexBufBuilder *);
void GPU_indexbuf_build_in_place(GPUIndexBufBuilder *, GPUIndexBuf *);
+/* Create a subrange of an existing indexbuffer. */
+GPUIndexBuf *GPU_indexbuf_create_subrange(GPUIndexBuf *ibo, uint start, uint length);
+
void GPU_indexbuf_discard(GPUIndexBuf *);
int GPU_indexbuf_primitive_len(GPUPrimType prim_type);
diff --git a/source/blender/gpu/GPU_material.h b/source/blender/gpu/GPU_material.h
index dd5292d9c58..4dc0019978a 100644
--- a/source/blender/gpu/GPU_material.h
+++ b/source/blender/gpu/GPU_material.h
@@ -45,10 +45,7 @@ struct ImageUser;
struct ListBase;
struct Main;
struct Material;
-struct Object;
-struct PreviewImage;
struct Scene;
-struct World;
struct bNode;
struct bNodeTree;
@@ -92,7 +89,7 @@ typedef enum eGPUBuiltin {
GPU_INVERSE_OBJECT_MATRIX = (1 << 3),
GPU_VIEW_POSITION = (1 << 4),
GPU_VIEW_NORMAL = (1 << 5),
- GPU_OBCOLOR = (1 << 6),
+ GPU_OBJECT_COLOR = (1 << 6),
GPU_AUTO_BUMPSCALE = (1 << 7),
GPU_CAMERA_TEXCO_FACTORS = (1 << 8),
GPU_PARTICLE_SCALAR_PROPS = (1 << 9),
diff --git a/source/blender/gpu/GPU_matrix.h b/source/blender/gpu/GPU_matrix.h
index 61622c40ff0..a424f3180de 100644
--- a/source/blender/gpu/GPU_matrix.h
+++ b/source/blender/gpu/GPU_matrix.h
@@ -52,12 +52,12 @@ void GPU_matrix_translate_3f(float x, float y, float z);
void GPU_matrix_translate_3fv(const float vec[3]);
void GPU_matrix_scale_3f(float x, float y, float z);
void GPU_matrix_scale_3fv(const float vec[3]);
-void GPU_matrix_rotate_3f(float deg,
- float x,
- float y,
- float z); /* axis of rotation should be a unit vector */
-void GPU_matrix_rotate_3fv(float deg,
- const float axis[3]); /* axis of rotation should be a unit vector */
+
+/* Axis of rotation should be a unit vector. */
+void GPU_matrix_rotate_3f(float deg, float x, float y, float z);
+/* Axis of rotation should be a unit vector. */
+void GPU_matrix_rotate_3fv(float deg, const float axis[3]);
+
void GPU_matrix_rotate_axis(float deg, char axis); /* TODO: enum for axis? */
void GPU_matrix_look_at(float eyeX,
diff --git a/source/blender/gpu/GPU_shader.h b/source/blender/gpu/GPU_shader.h
index 124f1f1ff8a..f4a94c7759a 100644
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@ -396,7 +396,9 @@ void GPU_shader_free_builtin_shaders(void);
/* Vertex attributes for shaders */
-#define GPU_MAX_ATTR 32
+/* Hardware limit is 16. Position attribute is always needed so we reduce to 15.
+ * This makes sure the GPUVertexFormat name buffer does not overflow. */
+#define GPU_MAX_ATTR 15
typedef struct GPUVertAttrLayers {
struct {
diff --git a/source/blender/gpu/GPU_shader_interface.h b/source/blender/gpu/GPU_shader_interface.h
index d3a9a18b392..ec97e1b085e 100644
--- a/source/blender/gpu/GPU_shader_interface.h
+++ b/source/blender/gpu/GPU_shader_interface.h
@@ -48,9 +48,10 @@ typedef enum {
GPU_UNIFORM_ORCO, /* vec3 OrcoTexCoFactors[] */
GPU_UNIFORM_CLIPPLANES, /* vec4 WorldClipPlanes[] */
- GPU_UNIFORM_COLOR, /* vec4 color */
- GPU_UNIFORM_CALLID, /* int callId */
- GPU_UNIFORM_OBJECT_INFO, /* vec3 objectInfo */
+ GPU_UNIFORM_COLOR, /* vec4 color */
+ GPU_UNIFORM_CALLID, /* int callId */
+ GPU_UNIFORM_OBJECT_INFO, /* vec3 objectInfo */
+ GPU_UNIFORM_OBJECT_COLOR, /* vec4 objectColor */
GPU_UNIFORM_CUSTOM, /* custom uniform, not one of the above built-ins */
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index 2b61d99e852..a8e8ca72023 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -36,7 +36,6 @@ struct ImageUser;
struct MovieClip;
struct MovieClipUser;
struct PreviewImage;
-struct rcti;
struct GPUFrameBuffer;
typedef struct GPUTexture GPUTexture;
diff --git a/source/blender/gpu/GPU_vertex_buffer.h b/source/blender/gpu/GPU_vertex_buffer.h
index 3e178e193dc..2d728422c42 100644
--- a/source/blender/gpu/GPU_vertex_buffer.h
+++ b/source/blender/gpu/GPU_vertex_buffer.h
@@ -87,9 +87,10 @@ void GPU_vertbuf_data_len_set(GPUVertBuf *, uint v_len);
* should not be a problem. */
void GPU_vertbuf_attr_set(GPUVertBuf *, uint a_idx, uint v_idx, const void *data);
-void GPU_vertbuf_attr_fill(GPUVertBuf *,
- uint a_idx,
- const void *data); /* tightly packed, non interleaved input data */
+
+/* Tightly packed, non interleaved input data. */
+void GPU_vertbuf_attr_fill(GPUVertBuf *, uint a_idx, const void *data);
+
void GPU_vertbuf_attr_fill_stride(GPUVertBuf *, uint a_idx, uint stride, const void *data);
/* For low level access only */
diff --git a/source/blender/gpu/GPU_vertex_format.h b/source/blender/gpu/GPU_vertex_format.h
index 68608a98a79..8c22e3e1104 100644
--- a/source/blender/gpu/GPU_vertex_format.h
+++ b/source/blender/gpu/GPU_vertex_format.h
@@ -31,9 +31,11 @@
#include "BLI_assert.h"
#define GPU_VERT_ATTR_MAX_LEN 16
-#define GPU_VERT_ATTR_MAX_NAMES 5
-#define GPU_VERT_ATTR_NAME_AVERAGE_LEN 11
-#define GPU_VERT_ATTR_NAMES_BUF_LEN ((GPU_VERT_ATTR_NAME_AVERAGE_LEN + 1) * GPU_VERT_ATTR_MAX_LEN)
+#define GPU_VERT_ATTR_MAX_NAMES 6
+#define GPU_VERT_ATTR_NAMES_BUF_LEN 256
+#define GPU_VERT_FORMAT_MAX_NAMES 63 /* More than enough, actual max is ~30. */
+/* Computed as GPU_VERT_ATTR_NAMES_BUF_LEN / 30 (actual max format name). */
+#define GPU_MAX_SAFE_ATTRIB_NAME 12
typedef enum {
GPU_COMP_I8,
@@ -80,14 +82,16 @@ BLI_STATIC_ASSERT(GPU_VERT_ATTR_NAMES_BUF_LEN <= 256,
typedef struct GPUVertFormat {
/** 0 to 16 (GPU_VERT_ATTR_MAX_LEN). */
uint attr_len : 5;
- /** Total count of active vertex attribute. */
- uint name_len : 5;
+ /** Total count of active vertex attribute names. (max GPU_VERT_FORMAT_MAX_NAMES) */
+ uint name_len : 6;
/** Stride in bytes, 1 to 1024. */
uint stride : 11;
/** Has the format been packed. */
uint packed : 1;
/** Current offset in names[]. */
uint name_offset : 8;
+ /** Store each attrib in one contiguous buffer region. */
+ uint deinterleaved : 1;
GPUVertAttr attrs[GPU_VERT_ATTR_MAX_LEN];
char names[GPU_VERT_ATTR_NAMES_BUF_LEN];
@@ -104,6 +108,8 @@ uint GPU_vertformat_attr_add(
GPUVertFormat *, const char *name, GPUVertCompType, uint comp_len, GPUVertFetchMode);
void GPU_vertformat_alias_add(GPUVertFormat *, const char *alias);
+void GPU_vertformat_deinterleave(GPUVertFormat *format);
+
int GPU_vertformat_attr_id_get(const GPUVertFormat *, const char *name);
BLI_INLINE const char *GPU_vertformat_attr_name_get(const GPUVertFormat *format,
@@ -113,6 +119,8 @@ BLI_INLINE const char *GPU_vertformat_attr_name_get(const GPUVertFormat *format,
return format->names + attr->names[n_idx];
}
+void GPU_vertformat_safe_attrib_name(const char *attrib_name, char *r_safe_name, uint max_len);
+
/* format conversion */
typedef struct GPUPackedNormal {
@@ -122,7 +130,59 @@ typedef struct GPUPackedNormal {
int w : 2; /* 0 by default, can manually set to { -2, -1, 0, 1 } */
} GPUPackedNormal;
-GPUPackedNormal GPU_normal_convert_i10_v3(const float data[3]);
-GPUPackedNormal GPU_normal_convert_i10_s3(const short data[3]);
+/* OpenGL ES packs in a different order as desktop GL but component conversion is the same.
+ * Of the code here, only struct GPUPackedNormal needs to change. */
+
+#define SIGNED_INT_10_MAX 511
+#define SIGNED_INT_10_MIN -512
+
+BLI_INLINE int clampi(int x, int min_allowed, int max_allowed)
+{
+#if TRUST_NO_ONE
+ assert(min_allowed <= max_allowed);
+#endif
+ if (x < min_allowed) {
+ return min_allowed;
+ }
+ else if (x > max_allowed) {
+ return max_allowed;
+ }
+ else {
+ return x;
+ }
+}
+
+BLI_INLINE int gpu_convert_normalized_f32_to_i10(float x)
+{
+ int qx = x * 511.0f;
+ return clampi(qx, SIGNED_INT_10_MIN, SIGNED_INT_10_MAX);
+}
+
+BLI_INLINE int gpu_convert_i16_to_i10(short x)
+{
+ /* 16-bit signed --> 10-bit signed */
+ /* TODO: round? */
+ return x >> 6;
+}
+
+BLI_INLINE GPUPackedNormal GPU_normal_convert_i10_v3(const float data[3])
+{
+ GPUPackedNormal n = {
+ gpu_convert_normalized_f32_to_i10(data[0]),
+ gpu_convert_normalized_f32_to_i10(data[1]),
+ gpu_convert_normalized_f32_to_i10(data[2]),
+ };
+ return n;
+}
+
+BLI_INLINE GPUPackedNormal GPU_normal_convert_i10_s3(const short data[3])
+{
+ GPUPackedNormal n = {
+ gpu_convert_i16_to_i10(data[0]),
+ gpu_convert_i16_to_i10(data[1]),
+ gpu_convert_i16_to_i10(data[2]),
+ };
+ return n;
+}
#endif /* __GPU_VERTEX_FORMAT_H__ */
diff --git a/source/blender/gpu/intern/gpu_batch.c b/source/blender/gpu/intern/gpu_batch.c
index 11b487f7be4..583551e3e58 100644
--- a/source/blender/gpu/intern/gpu_batch.c
+++ b/source/blender/gpu/intern/gpu_batch.c
@@ -182,6 +182,25 @@ void GPU_batch_instbuf_set(GPUBatch *batch, GPUVertBuf *inst, bool own_vbo)
}
}
+void GPU_batch_elembuf_set(GPUBatch *batch, GPUIndexBuf *elem, bool own_ibo)
+{
+ BLI_assert(elem != NULL);
+ /* redo the bindings */
+ GPU_batch_vao_cache_clear(batch);
+
+ if (batch->elem != NULL && (batch->owns_flag & GPU_BATCH_OWNS_INDEX)) {
+ GPU_indexbuf_discard(batch->elem);
+ }
+ batch->elem = elem;
+
+ if (own_ibo) {
+ batch->owns_flag |= GPU_BATCH_OWNS_INDEX;
+ }
+ else {
+ batch->owns_flag &= ~GPU_BATCH_OWNS_INDEX;
+ }
+}
+
/* Returns the index of verts in the batch. */
int GPU_batch_vertbuf_add_ex(GPUBatch *batch, GPUVertBuf *verts, bool own_vbo)
{
@@ -362,13 +381,23 @@ static void create_bindings(GPUVertBuf *verts,
const GPUVertFormat *format = &verts->format;
const uint attr_len = format->attr_len;
- const uint stride = format->stride;
+ uint stride = format->stride;
+ uint offset = 0;
GPU_vertbuf_use(verts);
for (uint a_idx = 0; a_idx < attr_len; ++a_idx) {
const GPUVertAttr *a = &format->attrs[a_idx];
- const GLvoid *pointer = (const GLubyte *)0 + a->offset + v_first * stride;
+
+ if (format->deinterleaved) {
+ offset += ((a_idx == 0) ? 0 : format->attrs[a_idx - 1].sz) * verts->vertex_len;
+ stride = a->sz;
+ }
+ else {
+ offset = a->offset;
+ }
+
+ const GLvoid *pointer = (const GLubyte *)0 + offset + v_first * stride;
for (uint n_idx = 0; n_idx < a->name_len; ++n_idx) {
const char *name = GPU_vertformat_attr_name_get(format, a, n_idx);
@@ -419,8 +448,11 @@ static void create_bindings(GPUVertBuf *verts,
static void batch_update_program_bindings(GPUBatch *batch, uint v_first)
{
- for (int v = 0; v < GPU_BATCH_VBO_MAX_LEN && batch->verts[v] != NULL; ++v) {
- create_bindings(batch->verts[v], batch->interface, (batch->inst) ? 0 : v_first, false);
+ /* Reverse order so first vbos have more prevalence (in term of attrib override). */
+ for (int v = GPU_BATCH_VBO_MAX_LEN - 1; v > -1; --v) {
+ if (batch->verts[v] != NULL) {
+ create_bindings(batch->verts[v], batch->interface, (batch->inst) ? 0 : v_first, false);
+ }
}
if (batch->inst) {
create_bindings(batch->inst, batch->interface, v_first, true);
@@ -550,10 +582,10 @@ static void *elem_offset(const GPUIndexBuf *el, int v_first)
{
#if GPU_TRACK_INDEX_RANGE
if (el->index_type == GPU_INDEX_U16) {
- return (GLushort *)0 + v_first;
+ return (GLushort *)0 + v_first + el->index_start;
}
#endif
- return (GLuint *)0 + v_first;
+ return (GLuint *)0 + v_first + el->index_start;
}
/* Use when drawing with GPU_batch_draw_advanced */
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 59b0857c177..6eb8c80c58e 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -136,7 +136,7 @@ static bool gpu_pbvh_vert_buf_data_set(GPU_PBVH_Buffers *buffers, uint vert_len)
/* TODO: Do not allocate these `.msk` and `.col` when they are not used. */
g_vbo_id.msk = GPU_vertformat_attr_add(&format, "msk", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
g_vbo_id.col = GPU_vertformat_attr_add(
- &format, "c", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ &format, "ac", GPU_COMP_U8, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
}
buffers->vert_buf = GPU_vertbuf_create_with_format_ex(&format, GPU_USAGE_STATIC);
}
diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c
index 51b73c93c86..55337596cbe 100644
--- a/source/blender/gpu/intern/gpu_codegen.c
+++ b/source/blender/gpu/intern/gpu_codegen.c
@@ -46,6 +46,7 @@
#include "GPU_shader.h"
#include "GPU_texture.h"
#include "GPU_uniformbuffer.h"
+#include "GPU_vertex_format.h"
#include "BLI_sys_types.h" /* for intptr_t support */
@@ -541,8 +542,8 @@ const char *GPU_builtin_name(eGPUBuiltin builtin)
else if (builtin == GPU_VIEW_NORMAL) {
return "varnormal";
}
- else if (builtin == GPU_OBCOLOR) {
- return "unfobcolor";
+ else if (builtin == GPU_OBJECT_COLOR) {
+ return "unfobjectcolor";
}
else if (builtin == GPU_AUTO_BUMPSCALE) {
return "unfobautobumpscale";
@@ -929,12 +930,15 @@ static char *code_generate_fragment(GPUMaterial *material,
/* XXX This cannot go into gpu_shader_material.glsl because main()
* would be parsed and generate error */
/* Old glsl mode compat. */
+ /* TODO(fclem) This is only used by world shader now. get rid of it? */
BLI_dynstr_append(ds, "#ifndef NODETREE_EXEC\n");
BLI_dynstr_append(ds, "out vec4 fragColor;\n");
BLI_dynstr_append(ds, "void main()\n");
BLI_dynstr_append(ds, "{\n");
BLI_dynstr_append(ds, "\tClosure cl = nodetree_exec();\n");
- BLI_dynstr_append(ds, "\tfragColor = vec4(cl.radiance, cl.opacity);\n");
+ BLI_dynstr_append(ds,
+ "\tfragColor = vec4(cl.radiance, "
+ "saturate(1.0 - avg(cl.transmittance)));\n");
BLI_dynstr_append(ds, "}\n");
BLI_dynstr_append(ds, "#endif\n\n");
@@ -1008,19 +1012,24 @@ static char *code_generate_vertex(ListBase *nodes, const char *vert_code, bool u
ds, "#define att%d %s\n", input->attr_id, attr_prefix_get(input->attr_type));
}
else {
- uint hash = BLI_ghashutil_strhash_p(input->attr_name);
+ char attr_safe_name[GPU_MAX_SAFE_ATTRIB_NAME];
+ GPU_vertformat_safe_attrib_name(
+ input->attr_name, attr_safe_name, GPU_MAX_SAFE_ATTRIB_NAME);
BLI_dynstr_appendf(ds,
- "DEFINE_ATTR(%s, %s%u);\n",
+ "DEFINE_ATTR(%s, %s%s);\n",
GPU_DATATYPE_STR[input->type],
attr_prefix_get(input->attr_type),
- hash);
- BLI_dynstr_appendf(
- ds, "#define att%d %s%u\n", input->attr_id, attr_prefix_get(input->attr_type), hash);
+ attr_safe_name);
+ BLI_dynstr_appendf(ds,
+ "#define att%d %s%s\n",
+ input->attr_id,
+ attr_prefix_get(input->attr_type),
+ attr_safe_name);
/* Auto attribute can be vertex color byte buffer.
* We need to know and convert them to linear space in VS. */
if (input->attr_type == CD_AUTO_FROM_NAME) {
- BLI_dynstr_appendf(ds, "uniform bool ba%u;\n", hash);
- BLI_dynstr_appendf(ds, "#define att%d_is_srgb ba%u\n", input->attr_id, hash);
+ BLI_dynstr_appendf(ds, "uniform bool ba%s;\n", attr_safe_name);
+ BLI_dynstr_appendf(ds, "#define att%d_is_srgb ba%s\n", input->attr_id, attr_safe_name);
}
}
BLI_dynstr_appendf(ds,
diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h
index ae34e21b9cd..6eb6bc2f05f 100644
--- a/source/blender/gpu/intern/gpu_codegen.h
+++ b/source/blender/gpu/intern/gpu_codegen.h
@@ -34,7 +34,6 @@ struct GPUOutput;
struct GPUShader;
struct GPUVertAttrLayers;
struct ListBase;
-struct PreviewImage;
/* Pass Generation
* - Takes a list of nodes and a desired output, and makes a pass. This
diff --git a/source/blender/gpu/intern/gpu_context.cpp b/source/blender/gpu/intern/gpu_context.cpp
index a0e03e61d5d..17b86e3eec8 100644
--- a/source/blender/gpu/intern/gpu_context.cpp
+++ b/source/blender/gpu/intern/gpu_context.cpp
@@ -36,6 +36,7 @@
#include "gpu_batch_private.h"
#include "gpu_context_private.h"
+#include "gpu_matrix_private.h"
#include <vector>
#include <string.h>
@@ -71,6 +72,7 @@ struct GPUContext {
std::unordered_set<GPUFrameBuffer *>
framebuffers; /* Framebuffers that have FBO from this context */
#endif
+ struct GPUMatrixState *matrix_state;
std::vector<GLuint> orphaned_vertarray_ids;
std::vector<GLuint> orphaned_framebuffer_ids;
std::mutex orphans_mutex; /* todo: try spinlock instead */
@@ -88,12 +90,7 @@ struct GPUContext {
}
};
-#if defined(_MSC_VER) && (_MSC_VER == 1800)
-# define thread_local __declspec(thread)
-thread_local GPUContext *active_ctx = NULL;
-#else
static thread_local GPUContext *active_ctx = NULL;
-#endif
static void orphans_add(GPUContext *ctx, std::vector<GLuint> *orphan_list, GLuint id)
{
@@ -106,9 +103,11 @@ static void orphans_add(GPUContext *ctx, std::vector<GLuint> *orphan_list, GLuin
static void orphans_clear(GPUContext *ctx)
{
- BLI_assert(ctx); /* need at least an active context */
- BLI_assert(pthread_equal(pthread_self(),
- ctx->thread)); /* context has been activated by another thread! */
+ /* need at least an active context */
+ BLI_assert(ctx);
+
+ /* context has been activated by another thread! */
+ BLI_assert(pthread_equal(pthread_self(), ctx->thread));
ctx->orphans_mutex.lock();
if (!ctx->orphaned_vertarray_ids.empty()) {
@@ -144,6 +143,7 @@ GPUContext *GPU_context_create(GLuint default_framebuffer)
GPUContext *ctx = new GPUContext;
glGenVertexArrays(1, &ctx->default_vao);
ctx->default_framebuffer = default_framebuffer;
+ ctx->matrix_state = GPU_matrix_state_create();
GPU_context_active_set(ctx);
return ctx;
}
@@ -164,6 +164,7 @@ void GPU_context_discard(GPUContext *ctx)
/* this removes the array entry */
GPU_batch_vao_cache_clear(*ctx->batches.begin());
}
+ GPU_matrix_state_discard(ctx->matrix_state);
glDeleteVertexArrays(1, &ctx->default_vao);
delete ctx;
active_ctx = NULL;
@@ -338,3 +339,9 @@ GPUFrameBuffer *gpu_context_active_framebuffer_get(GPUContext *ctx)
{
return ctx->current_fbo;
}
+
+struct GPUMatrixState *gpu_context_active_matrix_state_get()
+{
+ BLI_assert(active_ctx);
+ return active_ctx->matrix_state;
+}
diff --git a/source/blender/gpu/intern/gpu_context_private.h b/source/blender/gpu/intern/gpu_context_private.h
index 6825b67d2c8..c9379e5433f 100644
--- a/source/blender/gpu/intern/gpu_context_private.h
+++ b/source/blender/gpu/intern/gpu_context_private.h
@@ -59,6 +59,8 @@ void gpu_context_remove_framebuffer(GPUContext *ctx, struct GPUFrameBuffer *fb);
void gpu_context_active_framebuffer_set(GPUContext *ctx, struct GPUFrameBuffer *fb);
struct GPUFrameBuffer *gpu_context_active_framebuffer_get(GPUContext *ctx);
+struct GPUMatrixState *gpu_context_active_matrix_state_get(void);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/gpu/intern/gpu_element.c b/source/blender/gpu/intern/gpu_element.c
index 50e7df96503..3f3f246d6d9 100644
--- a/source/blender/gpu/intern/gpu_element.c
+++ b/source/blender/gpu/intern/gpu_element.c
@@ -162,6 +162,100 @@ void GPU_indexbuf_add_line_adj_verts(
GPU_indexbuf_add_generic_vert(builder, v4);
}
+void GPU_indexbuf_set_point_vert(GPUIndexBufBuilder *builder, uint elem, uint v1)
+{
+ BLI_assert(builder->prim_type == GPU_PRIM_POINTS);
+ BLI_assert(elem < builder->max_index_len);
+ builder->data[elem++] = v1;
+ if (builder->index_len < elem) {
+ builder->index_len = elem;
+ }
+}
+
+void GPU_indexbuf_set_line_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2)
+{
+ BLI_assert(builder->prim_type == GPU_PRIM_LINES);
+ BLI_assert(v1 != v2);
+ BLI_assert(v1 <= builder->max_allowed_index);
+ BLI_assert(v2 <= builder->max_allowed_index);
+ BLI_assert((elem + 1) * 2 <= builder->max_index_len);
+ uint idx = elem * 2;
+ builder->data[idx++] = v1;
+ builder->data[idx++] = v2;
+ if (builder->index_len < idx) {
+ builder->index_len = idx;
+ }
+}
+
+void GPU_indexbuf_set_tri_verts(GPUIndexBufBuilder *builder, uint elem, uint v1, uint v2, uint v3)
+{
+ BLI_assert(builder->prim_type == GPU_PRIM_TRIS);
+ BLI_assert(v1 != v2 && v2 != v3 && v3 != v1);
+ BLI_assert(v1 <= builder->max_allowed_index);
+ BLI_assert(v2 <= builder->max_allowed_index);
+ BLI_assert(v3 <= builder->max_allowed_index);
+ BLI_assert((elem + 1) * 3 <= builder->max_index_len);
+ uint idx = elem * 3;
+ builder->data[idx++] = v1;
+ builder->data[idx++] = v2;
+ builder->data[idx++] = v3;
+ if (builder->index_len < idx) {
+ builder->index_len = idx;
+ }
+}
+
+void GPU_indexbuf_set_point_restart(GPUIndexBufBuilder *builder, uint elem)
+{
+ BLI_assert(builder->prim_type == GPU_PRIM_POINTS);
+ BLI_assert(elem < builder->max_index_len);
+ builder->data[elem++] = RESTART_INDEX;
+ if (builder->index_len < elem) {
+ builder->index_len = elem;
+ }
+}
+
+void GPU_indexbuf_set_line_restart(GPUIndexBufBuilder *builder, uint elem)
+{
+ BLI_assert(builder->prim_type == GPU_PRIM_LINES);
+ BLI_assert((elem + 1) * 2 <= builder->max_index_len);
+ uint idx = elem * 2;
+ builder->data[idx++] = RESTART_INDEX;
+ builder->data[idx++] = RESTART_INDEX;
+ if (builder->index_len < idx) {
+ builder->index_len = idx;
+ }
+}
+
+void GPU_indexbuf_set_tri_restart(GPUIndexBufBuilder *builder, uint elem)
+{
+ BLI_assert(builder->prim_type == GPU_PRIM_TRIS);
+ BLI_assert((elem + 1) * 3 <= builder->max_index_len);
+ uint idx = elem * 3;
+ builder->data[idx++] = RESTART_INDEX;
+ builder->data[idx++] = RESTART_INDEX;
+ builder->data[idx++] = RESTART_INDEX;
+ if (builder->index_len < idx) {
+ builder->index_len = idx;
+ }
+}
+
+GPUIndexBuf *GPU_indexbuf_create_subrange(GPUIndexBuf *elem_src, uint start, uint length)
+{
+ GPUIndexBuf *elem = MEM_callocN(sizeof(GPUIndexBuf), "GPUIndexBuf");
+ BLI_assert(elem_src && !elem_src->is_subrange);
+ BLI_assert(start + length <= elem_src->index_len);
+#if GPU_TRACK_INDEX_RANGE
+ elem->index_type = elem_src->index_type;
+ elem->gl_index_type = elem_src->gl_index_type;
+ elem->base_index = elem_src->base_index;
+#endif
+ elem->is_subrange = true;
+ elem->src = elem_src;
+ elem->index_start = start;
+ elem->index_len = length;
+ return elem;
+}
+
#if GPU_TRACK_INDEX_RANGE
/* Everything remains 32 bit while building to keep things simple.
* Find min/max after, then convert to smallest index type possible. */
@@ -173,9 +267,9 @@ static uint index_range(const uint values[], uint value_len, uint *min_out, uint
*max_out = 0;
return 0;
}
- uint min_value = values[0];
- uint max_value = values[0];
- for (uint i = 1; i < value_len; ++i) {
+ uint min_value = RESTART_INDEX;
+ uint max_value = 0;
+ for (uint i = 0; i < value_len; ++i) {
const uint value = values[i];
if (value == RESTART_INDEX) {
continue;
@@ -187,9 +281,16 @@ static uint index_range(const uint values[], uint value_len, uint *min_out, uint
max_value = value;
}
}
- *min_out = min_value;
- *max_out = max_value;
- return max_value - min_value;
+ if (min_value == RESTART_INDEX) {
+ *min_out = 0;
+ *max_out = 0;
+ return 0;
+ }
+ else {
+ *min_out = min_value;
+ *max_out = max_value;
+ return max_value - min_value;
+ }
}
static void squeeze_indices_short(GPUIndexBufBuilder *builder,
@@ -271,6 +372,10 @@ static void indexbuf_upload_data(GPUIndexBuf *elem)
void GPU_indexbuf_use(GPUIndexBuf *elem)
{
+ if (elem->is_subrange) {
+ GPU_indexbuf_use(elem->src);
+ return;
+ }
if (elem->ibo_id == 0) {
elem->ibo_id = GPU_buf_alloc();
}
@@ -285,7 +390,7 @@ void GPU_indexbuf_discard(GPUIndexBuf *elem)
if (elem->ibo_id) {
GPU_buf_free(elem->ibo_id);
}
- if (elem->data) {
+ if (!elem->is_subrange && elem->data) {
MEM_freeN(elem->data);
}
MEM_freeN(elem);
diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c
index 61f7ba6da7c..5839b34cd19 100644
--- a/source/blender/gpu/intern/gpu_extensions.c
+++ b/source/blender/gpu/intern/gpu_extensions.c
@@ -309,6 +309,7 @@ void gpu_extensions_init(void)
}
else if ((strstr(renderer, "Mesa DRI R")) ||
(strstr(renderer, "Radeon") && strstr(vendor, "X.Org")) ||
+ (strstr(renderer, "AMD") && strstr(vendor, "X.Org")) ||
(strstr(renderer, "Gallium ") && strstr(renderer, " on ATI ")) ||
(strstr(renderer, "Gallium ") && strstr(renderer, " on AMD "))) {
GG.device = GPU_DEVICE_ATI;
@@ -387,11 +388,8 @@ void gpu_extensions_init(void)
GG.dfdyfactors[1] = 1.0;
}
- if (strstr(version, "Build 10.18.10.3379") || strstr(version, "Build 10.18.10.3574") ||
- strstr(version, "Build 10.18.10.4252") || strstr(version, "Build 10.18.10.4358") ||
- strstr(version, "Build 10.18.10.4653") || strstr(version, "Build 10.18.10.5069") ||
- strstr(version, "Build 10.18.14.4264") || strstr(version, "Build 10.18.14.4432") ||
- strstr(version, "Build 10.18.14.5067")) {
+ if (strstr(version, "Build 10.18.10.3") || strstr(version, "Build 10.18.10.4") ||
+ strstr(version, "Build 10.18.14.4") || strstr(version, "Build 10.18.14.5")) {
/* Maybe not all of these drivers have problems with `GLEW_ARB_base_instance`.
* But it's hard to test each case. */
GG.glew_arb_base_instance_is_supported = false;
diff --git a/source/blender/gpu/intern/gpu_immediate.c b/source/blender/gpu/intern/gpu_immediate.c
index 6b5c4836e83..0e3019ad122 100644
--- a/source/blender/gpu/intern/gpu_immediate.c
+++ b/source/blender/gpu/intern/gpu_immediate.c
@@ -220,8 +220,10 @@ void immBegin(GPUPrimType prim_type, uint vertex_len)
/* does the current buffer have enough room? */
const uint available_bytes = IMM_BUFFER_SIZE - imm.buffer_offset;
/* ensure vertex data is aligned */
- const uint pre_padding = padding(
- imm.buffer_offset, imm.vertex_format.stride); /* might waste a little space, but it's safe */
+
+ /* Might waste a little space, but it's safe. */
+ const uint pre_padding = padding(imm.buffer_offset, imm.vertex_format.stride);
+
if ((bytes_needed + pre_padding) <= available_bytes) {
imm.buffer_offset += pre_padding;
}
diff --git a/source/blender/gpu/intern/gpu_matrix.c b/source/blender/gpu/intern/gpu_matrix.c
index 58ca800a92c..fb0dffb58d1 100644
--- a/source/blender/gpu/intern/gpu_matrix.c
+++ b/source/blender/gpu/intern/gpu_matrix.c
@@ -23,6 +23,9 @@
#include "GPU_shader_interface.h"
+#include "gpu_context_private.h"
+#include "gpu_matrix_private.h"
+
#define SUPPRESS_GENERIC_MATRIX_API
#define USE_GPU_PY_MATRIX_API /* only so values are declared */
#include "GPU_matrix.h"
@@ -32,6 +35,8 @@
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
+#include "MEM_guardedalloc.h"
+
#define DEBUG_MATRIX_BIND 0
#define MATRIX_STACK_DEPTH 32
@@ -44,7 +49,7 @@ typedef struct MatrixStack {
uint top;
} MatrixStack;
-typedef struct {
+typedef struct GPUMatrixState {
MatrixStack model_view_stack;
MatrixStack projection_stack;
@@ -56,8 +61,16 @@ typedef struct {
* TODO: separate Model from View transform? Batches/objects have model,
* camera/eye has view & projection
*/
-} MatrixState;
+} GPUMatrixState;
+
+#define ModelViewStack gpu_context_active_matrix_state_get()->model_view_stack
+#define ModelView ModelViewStack.stack[ModelViewStack.top]
+#define ProjectionStack gpu_context_active_matrix_state_get()->projection_stack
+#define Projection ProjectionStack.stack[ProjectionStack.top]
+
+GPUMatrixState *GPU_matrix_state_create(void)
+{
#define MATRIX_4X4_IDENTITY \
{ \
{1.0f, 0.0f, 0.0f, 0.0f}, {0.0f, 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f, 0.0f}, \
@@ -66,27 +79,36 @@ typedef struct {
} \
}
-static MatrixState state = {
- .model_view_stack = {{MATRIX_4X4_IDENTITY}, 0},
- .projection_stack = {{MATRIX_4X4_IDENTITY}, 0},
- .dirty = true,
-};
+ GPUMatrixState *state = MEM_mallocN(sizeof(*state), __func__);
+ const MatrixStack identity_stack = {{MATRIX_4X4_IDENTITY}, 0};
+
+ state->model_view_stack = state->projection_stack = identity_stack;
+ state->dirty = true;
#undef MATRIX_4X4_IDENTITY
-#define ModelViewStack state.model_view_stack
-#define ModelView ModelViewStack.stack[ModelViewStack.top]
+ return state;
+}
-#define ProjectionStack state.projection_stack
-#define Projection ProjectionStack.stack[ProjectionStack.top]
+void GPU_matrix_state_discard(GPUMatrixState *state)
+{
+ MEM_freeN(state);
+}
+
+static void gpu_matrix_state_active_set_dirty(bool value)
+{
+ GPUMatrixState *state = gpu_context_active_matrix_state_get();
+ state->dirty = value;
+}
void GPU_matrix_reset(void)
{
- state.model_view_stack.top = 0;
- state.projection_stack.top = 0;
+ GPUMatrixState *state = gpu_context_active_matrix_state_get();
+ state->model_view_stack.top = 0;
+ state->projection_stack.top = 0;
unit_m4(ModelView);
unit_m4(Projection);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
#ifdef WITH_GPU_SAFETY
@@ -123,7 +145,7 @@ void GPU_matrix_pop(void)
{
BLI_assert(ModelViewStack.top > 0);
ModelViewStack.top--;
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_push_projection(void)
@@ -137,34 +159,34 @@ void GPU_matrix_pop_projection(void)
{
BLI_assert(ProjectionStack.top > 0);
ProjectionStack.top--;
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_set(const float m[4][4])
{
copy_m4_m4(ModelView, m);
CHECKMAT(ModelView3D);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_identity_projection_set(void)
{
unit_m4(Projection);
CHECKMAT(Projection3D);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_projection_set(const float m[4][4])
{
copy_m4_m4(Projection, m);
CHECKMAT(Projection3D);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_identity_set(void)
{
unit_m4(ModelView);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_translate_2f(float x, float y)
@@ -194,7 +216,7 @@ void GPU_matrix_translate_3f(float x, float y, float z)
m[3][2] = z;
GPU_matrix_mul(m);
#endif
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_translate_3fv(const float vec[3])
@@ -243,7 +265,7 @@ void GPU_matrix_mul(const float m[4][4])
{
mul_m4_m4_post(ModelView, m);
CHECKMAT(ModelView);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_rotate_2d(float deg)
@@ -272,7 +294,7 @@ void GPU_matrix_rotate_axis(float deg, char axis)
/* rotate_m4 works in place */
rotate_m4(ModelView, axis, DEG2RADF(deg));
CHECKMAT(ModelView);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
static void mat4_ortho_set(
@@ -298,7 +320,7 @@ static void mat4_ortho_set(
m[2][3] = 0.0f;
m[3][3] = 1.0f;
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
static void mat4_frustum_set(
@@ -324,7 +346,7 @@ static void mat4_frustum_set(
m[2][3] = -1.0f;
m[3][3] = 0.0f;
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
static void mat4_look_from_origin(float m[4][4], float lookdir[3], float camup[3])
@@ -389,14 +411,14 @@ static void mat4_look_from_origin(float m[4][4], float lookdir[3], float camup[3
m[2][3] = 0.0f;
m[3][3] = 1.0f;
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_ortho_set(float left, float right, float bottom, float top, float near, float far)
{
mat4_ortho_set(Projection, left, right, bottom, top, near, far);
CHECKMAT(Projection);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_ortho_2d_set(float left, float right, float bottom, float top)
@@ -404,7 +426,7 @@ void GPU_matrix_ortho_2d_set(float left, float right, float bottom, float top)
Mat4 m;
mat4_ortho_set(m, left, right, bottom, top, -1.0f, 1.0f);
CHECKMAT(Projection2D);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_frustum_set(
@@ -412,7 +434,7 @@ void GPU_matrix_frustum_set(
{
mat4_frustum_set(Projection, left, right, bottom, top, near, far);
CHECKMAT(Projection);
- state.dirty = true;
+ gpu_matrix_state_active_set_dirty(true);
}
void GPU_matrix_perspective_set(float fovy, float aspect, float near, float far)
@@ -678,12 +700,13 @@ void GPU_matrix_bind(const GPUShaderInterface *shaderface)
glUniformMatrix4fv(P_inv->location, 1, GL_FALSE, (const float *)m);
}
- state.dirty = false;
+ gpu_matrix_state_active_set_dirty(false);
}
bool GPU_matrix_dirty_get(void)
{
- return state.dirty;
+ GPUMatrixState *state = gpu_context_active_matrix_state_get();
+ return state->dirty;
}
/* -------------------------------------------------------------------- */
@@ -695,12 +718,14 @@ BLI_STATIC_ASSERT(GPU_PY_MATRIX_STACK_LEN + 1 == MATRIX_STACK_DEPTH, "define mis
int GPU_matrix_stack_level_get_model_view(void)
{
- return (int)state.model_view_stack.top;
+ GPUMatrixState *state = gpu_context_active_matrix_state_get();
+ return (int)state->model_view_stack.top;
}
int GPU_matrix_stack_level_get_projection(void)
{
- return (int)state.projection_stack.top;
+ GPUMatrixState *state = gpu_context_active_matrix_state_get();
+ return (int)state->projection_stack.top;
}
/** \} */
diff --git a/source/blender/gpu/intern/gpu_matrix_private.h b/source/blender/gpu/intern/gpu_matrix_private.h
new file mode 100644
index 00000000000..862ef065481
--- /dev/null
+++ b/source/blender/gpu/intern/gpu_matrix_private.h
@@ -0,0 +1,35 @@
+/*
+ * 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.
+ */
+
+/** \file
+ * \ingroup gpu
+ */
+
+#ifndef __GPU_MATRIX_PRIVATE_H__
+#define __GPU_MATRIX_PRIVATE_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct GPUMatrixState *GPU_matrix_state_create(void);
+void GPU_matrix_state_discard(struct GPUMatrixState *state);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __GPU_MATRIX_PRIVATE_H__ */
diff --git a/source/blender/gpu/intern/gpu_private.h b/source/blender/gpu/intern/gpu_private.h
index 4b90f8daa8c..43b2da13e28 100644
--- a/source/blender/gpu/intern/gpu_private.h
+++ b/source/blender/gpu/intern/gpu_private.h
@@ -21,9 +21,6 @@
#ifndef __GPU_PRIVATE_H__
#define __GPU_PRIVATE_H__
-struct GPUContext;
-struct GPUFrameBuffer;
-
/* call this before running any of the functions below */
void gpu_extensions_init(void);
void gpu_extensions_exit(void);
diff --git a/source/blender/gpu/intern/gpu_shader_interface.c b/source/blender/gpu/intern/gpu_shader_interface.c
index e34c6e23024..f205ef31ed2 100644
--- a/source/blender/gpu/intern/gpu_shader_interface.c
+++ b/source/blender/gpu/intern/gpu_shader_interface.c
@@ -67,6 +67,7 @@ static const char *BuiltinUniform_name(GPUUniformBuiltin u)
[GPU_UNIFORM_COLOR] = "color",
[GPU_UNIFORM_CALLID] = "callId",
[GPU_UNIFORM_OBJECT_INFO] = "unfobjectinfo",
+ [GPU_UNIFORM_OBJECT_COLOR] = "unfobjectcolor",
[GPU_UNIFORM_CUSTOM] = NULL,
[GPU_NUM_UNIFORMS] = NULL,
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index dab17fcd72a..955b11036ef 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -1598,7 +1598,7 @@ void GPU_texture_generate_mipmap(GPUTexture *tex)
if (GPU_texture_depth(tex)) {
/* Some drivers have bugs when using glGenerateMipmap with depth textures (see T56789).
- * In this case we just create a complete texture with mipmaps manually without downsampling.
+ * In this case we just create a complete texture with mipmaps manually without down-sampling.
* You must initialize the texture levels using other methods like
* GPU_framebuffer_recursive_downsample(). */
int levels = 1 + floor(log2(max_ii(tex->w, tex->h)));
diff --git a/source/blender/gpu/intern/gpu_vertex_format.c b/source/blender/gpu/intern/gpu_vertex_format.c
index e745c525df6..66e5e254734 100644
--- a/source/blender/gpu/intern/gpu_vertex_format.c
+++ b/source/blender/gpu/intern/gpu_vertex_format.c
@@ -31,6 +31,8 @@
#include <string.h>
#include "BLI_utildefines.h"
+#include "BLI_string.h"
+#include "BLI_ghash.h"
#define PACK_DEBUG 0
@@ -149,9 +151,9 @@ uint GPU_vertformat_attr_add(GPUVertFormat *format,
GPUVertFetchMode fetch_mode)
{
#if TRUST_NO_ONE
- assert(format->name_len < GPU_VERT_ATTR_MAX_LEN); /* there's room for more */
- assert(format->attr_len < GPU_VERT_ATTR_MAX_LEN); /* there's room for more */
- assert(!format->packed); /* packed means frozen/locked */
+ assert(format->name_len < GPU_VERT_FORMAT_MAX_NAMES); /* there's room for more */
+ assert(format->attr_len < GPU_VERT_ATTR_MAX_LEN); /* there's room for more */
+ assert(!format->packed); /* packed means frozen/locked */
assert((comp_len >= 1 && comp_len <= 4) || comp_len == 8 || comp_len == 12 || comp_len == 16);
switch (comp_type) {
@@ -163,8 +165,10 @@ uint GPU_vertformat_attr_add(GPUVertFormat *format,
/* 10_10_10 format intended for normals (xyz) or colors (rgb)
* extra component packed.w can be manually set to { -2, -1, 0, 1 } */
assert(comp_len == 3 || comp_len == 4);
- assert(fetch_mode ==
- GPU_FETCH_INT_TO_FLOAT_UNIT); /* not strictly required, may relax later */
+
+ /* Not strictly required, may relax later. */
+ assert(fetch_mode == GPU_FETCH_INT_TO_FLOAT_UNIT);
+
break;
default:
/* integer types can be kept as int or converted/normalized to float */
@@ -195,7 +199,7 @@ void GPU_vertformat_alias_add(GPUVertFormat *format, const char *alias)
{
GPUVertAttr *attr = &format->attrs[format->attr_len - 1];
#if TRUST_NO_ONE
- assert(format->name_len < GPU_VERT_ATTR_MAX_LEN); /* there's room for more */
+ assert(format->name_len < GPU_VERT_FORMAT_MAX_NAMES); /* there's room for more */
assert(attr->name_len < GPU_VERT_ATTR_MAX_NAMES);
#endif
format->name_len++; /* multiname support */
@@ -216,6 +220,79 @@ int GPU_vertformat_attr_id_get(const GPUVertFormat *format, const char *name)
return -1;
}
+/* Encode 8 original bytes into 11 safe bytes. */
+static void safe_bytes(char out[11], const char data[8])
+{
+ char safe_chars[63] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
+
+ uint64_t in = *(uint64_t *)data;
+ for (int i = 0; i < 11; i++) {
+ /* Encoding in base63 */
+ out[i] = safe_chars[in % 63lu];
+ in /= 63lu;
+ }
+}
+
+/* Warning: Always add a prefix to the result of this function as
+ * the generated string can start with a number and not be a valid attribute name. */
+void GPU_vertformat_safe_attrib_name(const char *attrib_name,
+ char *r_safe_name,
+ uint UNUSED(max_len))
+{
+ char data[8] = {0};
+ uint len = strlen(attrib_name);
+
+ if (len > 8) {
+ /* Start with the first 4 chars of the name; */
+ for (int i = 0; i < 4; i++) {
+ data[i] = attrib_name[i];
+ }
+ /* We use a hash to identify each data layer based on its name.
+ * NOTE: This is still prone to hash collision but the risks are very low.*/
+ /* Start hashing after the first 2 chars. */
+ *(uint *)&data[4] = BLI_ghashutil_strhash_p_murmur(attrib_name + 4);
+ }
+ else {
+ /* Copy the whole name. Collision is barely possible
+ * (hash would have to be equal to the last 4 bytes). */
+ for (int i = 0; i < 8 && attrib_name[i] != '\0'; i++) {
+ data[i] = attrib_name[i];
+ }
+ }
+ /* Convert to safe bytes characters. */
+ safe_bytes(r_safe_name, data);
+ /* End the string */
+ r_safe_name[11] = '\0';
+
+ BLI_assert(GPU_MAX_SAFE_ATTRIB_NAME >= 12);
+#if 0 /* For debugging */
+ printf("%s > %lx > %s\n", attrib_name, *(uint64_t *)data, r_safe_name);
+#endif
+}
+
+/* Make attribute layout non-interleaved.
+ * Warning! This does not change data layout!
+ * Use direct buffer access to fill the data.
+ * This is for advanced usage.
+ *
+ * Deinterleaved data means all attrib data for each attrib
+ * is stored continuously like this :
+ * 000011112222
+ * instead of :
+ * 012012012012
+ *
+ * Note this is per attrib deinterleaving, NOT per component.
+ * */
+void GPU_vertformat_deinterleave(GPUVertFormat *format)
+{
+ /* Ideally we should change the stride and offset here. This would allow
+ * us to use GPU_vertbuf_attr_set / GPU_vertbuf_attr_fill. But since
+ * we use only 11 bits for attr->offset this limits the size of the
+ * buffer considerably. So instead we do the conversion when creating
+ * bindings in create_bindings(). */
+ format->deinterleaved = true;
+}
+
uint padding(uint offset, uint alignment)
{
const uint mod = offset % alignment;
@@ -389,58 +466,3 @@ void GPU_vertformat_from_interface(GPUVertFormat *format, const GPUShaderInterfa
}
}
}
-
-/* OpenGL ES packs in a different order as desktop GL but component conversion is the same.
- * Of the code here, only struct GPUPackedNormal needs to change. */
-
-#define SIGNED_INT_10_MAX 511
-#define SIGNED_INT_10_MIN -512
-
-static int clampi(int x, int min_allowed, int max_allowed)
-{
-#if TRUST_NO_ONE
- assert(min_allowed <= max_allowed);
-#endif
- if (x < min_allowed) {
- return min_allowed;
- }
- else if (x > max_allowed) {
- return max_allowed;
- }
- else {
- return x;
- }
-}
-
-static int quantize(float x)
-{
- int qx = x * 511.0f;
- return clampi(qx, SIGNED_INT_10_MIN, SIGNED_INT_10_MAX);
-}
-
-static int convert_i16(short x)
-{
- /* 16-bit signed --> 10-bit signed */
- /* TODO: round? */
- return x >> 6;
-}
-
-GPUPackedNormal GPU_normal_convert_i10_v3(const float data[3])
-{
- GPUPackedNormal n = {
- .x = quantize(data[0]),
- .y = quantize(data[1]),
- .z = quantize(data[2]),
- };
- return n;
-}
-
-GPUPackedNormal GPU_normal_convert_i10_s3(const short data[3])
-{
- GPUPackedNormal n = {
- .x = convert_i16(data[0]),
- .y = convert_i16(data[1]),
- .z = convert_i16(data[2]),
- };
- return n;
-}
diff --git a/source/blender/gpu/intern/gpu_vertex_format_private.h b/source/blender/gpu/intern/gpu_vertex_format_private.h
index a850d17a1dd..13459101669 100644
--- a/source/blender/gpu/intern/gpu_vertex_format_private.h
+++ b/source/blender/gpu/intern/gpu_vertex_format_private.h
@@ -27,6 +27,7 @@
#define __GPU_VERTEX_FORMAT_PRIVATE_H__
void VertexFormat_pack(GPUVertFormat *format);
+void VertexFormat_deinterleave(GPUVertFormat *format, uint vertex_len);
uint padding(uint offset, uint alignment);
uint vertex_buffer_size(const GPUVertFormat *format, uint vertex_len);
diff --git a/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl b/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl
index 810784e2fbc..0ce5504dfa8 100644
--- a/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_2D_edituvs_stretch_vert.glsl
@@ -8,7 +8,7 @@ in vec2 pos;
in float stretch;
#else
-in vec4 uv_adj;
+in vec2 uv_angles;
in float angle;
#endif
@@ -52,6 +52,11 @@ vec3 weight_to_rgb(float weight)
#define M_PI 3.1415926535897932
+vec2 angle_to_v2(float angle)
+{
+ return vec2(cos(angle), sin(angle));
+}
+
/* Adapted from BLI_math_vector.h */
float angle_normalized_v2v2(vec2 v1, vec2 v2)
{
@@ -69,7 +74,9 @@ void main()
gl_Position = ModelViewProjectionMatrix * vec4(pos, 0.0, 1.0);
#ifdef STRETCH_ANGLE
- float uv_angle = angle_normalized_v2v2(uv_adj.xy, uv_adj.zw) / M_PI;
+ vec2 v1 = angle_to_v2(uv_angles.x * M_PI);
+ vec2 v2 = angle_to_v2(uv_angles.y * M_PI);
+ float uv_angle = angle_normalized_v2v2(v1, v2) / M_PI;
float stretch = 1.0 - abs(uv_angle - angle);
stretch = stretch;
stretch = 1.0 - stretch * stretch;
diff --git a/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl b/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl
index 8dc92a2b415..2ba89230d80 100644
--- a/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_keyframe_diamond_vert.glsl
@@ -1,11 +1,11 @@
uniform mat4 ModelViewProjectionMatrix;
uniform vec2 ViewportSize = vec2(-1, -1);
+uniform float outline_scale = 1.0;
const float line_falloff = 1.0;
const float circle_scale = sqrt(2.0 / 3.1416);
const float square_scale = sqrt(0.5);
-
const float diagonal_scale = sqrt(0.5);
in vec2 pos;
@@ -58,7 +58,7 @@ void main()
float line_width = half_width + line_falloff;
/* Outline thresholds. */
- thresholds.xy = line_thresholds(line_width);
+ thresholds.xy = line_thresholds(line_width * outline_scale);
/* Inner dot thresholds. */
thresholds.zw = line_thresholds(line_width * 1.6);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index 6149409774a..24fef4f05d8 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -250,227 +250,269 @@ void camera(vec3 co, out vec3 outview, out float outdepth, out float outdist)
outview = normalize(co);
}
-void math_add(float val1, float val2, out float outval)
+void math_add(float a, float b, out float result)
{
- outval = val1 + val2;
+ result = a + b;
}
-void math_subtract(float val1, float val2, out float outval)
+void math_subtract(float a, float b, out float result)
{
- outval = val1 - val2;
+ result = a - b;
}
-void math_multiply(float val1, float val2, out float outval)
+void math_multiply(float a, float b, out float result)
{
- outval = val1 * val2;
+ result = a * b;
}
-void math_divide(float val1, float val2, out float outval)
+void math_divide(float a, float b, out float result)
{
- if (val2 == 0.0) {
- outval = 0.0;
+ result = (b != 0.0) ? a / b : 0.0;
+}
+
+void math_power(float a, float b, out float result)
+{
+ if (a >= 0.0) {
+ result = compatible_pow(a, b);
}
else {
- outval = val1 / val2;
+ float fraction = mod(abs(b), 1.0);
+ if (fraction > 0.999 || fraction < 0.001) {
+ result = compatible_pow(a, floor(b + 0.5));
+ }
+ else {
+ result = 0.0;
+ }
}
}
-void math_sine(float val, out float outval)
+void math_logarithm(float a, float b, out float result)
{
- outval = sin(val);
+ result = (a > 0.0 && b > 0.0) ? log2(a) / log2(b) : 0.0;
}
-void math_cosine(float val, out float outval)
+void math_sqrt(float a, float b, out float result)
{
- outval = cos(val);
+ result = (a > 0.0) ? sqrt(a) : 0.0;
}
-void math_tangent(float val, out float outval)
+void math_absolute(float a, float b, out float result)
{
- outval = tan(val);
+ result = abs(a);
}
-void math_asin(float val, out float outval)
+void math_minimum(float a, float b, out float result)
{
- if (val <= 1.0 && val >= -1.0) {
- outval = asin(val);
- }
- else {
- outval = 0.0;
- }
+ result = min(a, b);
}
-void math_acos(float val, out float outval)
+void math_maximum(float a, float b, out float result)
{
- if (val <= 1.0 && val >= -1.0) {
- outval = acos(val);
- }
- else {
- outval = 0.0;
- }
+ result = max(a, b);
}
-void math_atan(float val, out float outval)
+void math_less_than(float a, float b, out float result)
{
- outval = atan(val);
+ result = (a < b) ? 1.0 : 0.0;
}
-void math_pow(float val1, float val2, out float outval)
+void math_greater_than(float a, float b, out float result)
{
- if (val1 >= 0.0) {
- outval = compatible_pow(val1, val2);
- }
- else {
- float val2_mod_1 = mod(abs(val2), 1.0);
+ result = (a > b) ? 1.0 : 0.0;
+}
- if (val2_mod_1 > 0.999 || val2_mod_1 < 0.001) {
- outval = compatible_pow(val1, floor(val2 + 0.5));
- }
- else {
- outval = 0.0;
- }
- }
+void math_round(float a, float b, out float result)
+{
+ result = floor(a + 0.5);
}
-void math_log(float val1, float val2, out float outval)
+void math_floor(float a, float b, out float result)
{
- if (val1 > 0.0 && val2 > 0.0) {
- outval = log2(val1) / log2(val2);
- }
- else {
- outval = 0.0;
- }
+ result = floor(a);
}
-void math_max(float val1, float val2, out float outval)
+void math_ceil(float a, float b, out float result)
{
- outval = max(val1, val2);
+ result = ceil(a);
}
-void math_min(float val1, float val2, out float outval)
+void math_fraction(float a, float b, out float result)
{
- outval = min(val1, val2);
+ result = a - floor(a);
}
-void math_round(float val, out float outval)
+/* Change sign to match C convention. mod in GLSL will take absolute for negative numbers.
+ * See https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mod.xhtml
+ */
+void math_modulo(float a, float b, out float result)
{
- outval = floor(val + 0.5);
+ result = (b != 0.0) ? sign(a) * mod(abs(a), b) : 0.0;
}
-void math_less_than(float val1, float val2, out float outval)
+void math_sine(float a, float b, out float result)
{
- if (val1 < val2) {
- outval = 1.0;
- }
- else {
- outval = 0.0;
- }
+ result = sin(a);
}
-void math_greater_than(float val1, float val2, out float outval)
+void math_cosine(float a, float b, out float result)
{
- if (val1 > val2) {
- outval = 1.0;
- }
- else {
- outval = 0.0;
- }
+ result = cos(a);
}
-void math_modulo(float val1, float val2, out float outval)
+void math_tangent(float a, float b, out float result)
{
- if (val2 == 0.0) {
- outval = 0.0;
+ result = tan(a);
+}
+
+void math_arcsine(float a, float b, out float result)
+{
+ result = (a <= 1.0 && a >= -1.0) ? asin(a) : 0.0;
+}
+
+void math_arccosine(float a, float b, out float result)
+{
+ result = (a <= 1.0 && a >= -1.0) ? acos(a) : 0.0;
+}
+
+void math_arctangent(float a, float b, out float result)
+{
+ result = atan(a);
+}
+
+void math_arctan2(float a, float b, out float result)
+{
+ result = atan(a, b);
+}
+
+void squeeze(float val, float width, float center, out float outval)
+{
+ outval = 1.0 / (1.0 + pow(2.71828183, -((val - center) * width)));
+}
+
+void map_range(
+ float value, float fromMin, float fromMax, float toMin, float toMax, out float result)
+{
+ if (fromMax != fromMin) {
+ result = toMin + ((value - fromMin) / (fromMax - fromMin)) * (toMax - toMin);
}
else {
- outval = mod(val1, val2);
+ result = 0.0;
}
+}
- /* change sign to match C convention, mod in GLSL will take absolute for negative numbers,
- * see https://www.opengl.org/sdk/docs/man/html/mod.xhtml */
- outval = (val1 > 0.0) ? outval : outval - val2;
+vec3 safe_divide(vec3 a, vec3 b)
+{
+ return vec3((b.x != 0.0) ? a.x / b.x : 0.0,
+ (b.y != 0.0) ? a.y / b.y : 0.0,
+ (b.z != 0.0) ? a.z / b.z : 0.0);
}
-void math_abs(float val1, out float outval)
+void vector_math_add(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = abs(val1);
+ outVector = a + b;
}
-void math_atan2(float val1, float val2, out float outval)
+void vector_math_subtract(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = atan(val1, val2);
+ outVector = a - b;
}
-void math_floor(float val, out float outval)
+void vector_math_multiply(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = floor(val);
+ outVector = a * b;
}
-void math_ceil(float val, out float outval)
+void vector_math_divide(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = ceil(val);
+ outVector = safe_divide(a, b);
}
-void math_fract(float val, out float outval)
+void vector_math_cross(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = val - floor(val);
+ outVector = cross(a, b);
}
-void math_sqrt(float val, out float outval)
+void vector_math_project(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- if (val > 0.0) {
- outval = sqrt(val);
- }
- else {
- outval = 0.0;
- }
+ float lenSquared = dot(b, b);
+ outVector = (lenSquared != 0.0) ? (dot(a, b) / lenSquared) * b : vec3(0.0);
}
-void squeeze(float val, float width, float center, out float outval)
+void vector_math_reflect(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = 1.0 / (1.0 + pow(2.71828183, -((val - center) * width)));
+ outVector = reflect(a, normalize(b));
}
-void vec_math_add(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vector_math_dot(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outvec = v1 + v2;
- outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2])) * 0.333333;
+ outValue = dot(a, b);
}
-void vec_math_sub(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vector_math_distance(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outvec = v1 - v2;
- outval = (abs(outvec[0]) + abs(outvec[1]) + abs(outvec[2])) * 0.333333;
+ outValue = distance(a, b);
}
-void vec_math_average(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vector_math_length(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outvec = v1 + v2;
- outval = length(outvec);
- outvec = normalize(outvec);
+ outValue = length(a);
}
-void vec_math_mix(float strength, vec3 v1, vec3 v2, out vec3 outvec)
+
+void vector_math_scale(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outvec = strength * v1 + (1 - strength) * v2;
+ outVector = a * scale;
}
-void vec_math_dot(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vector_math_normalize(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outvec = vec3(0);
- outval = dot(v1, v2);
+ outVector = normalize(a);
}
-void vec_math_cross(vec3 v1, vec3 v2, out vec3 outvec, out float outval)
+void vector_math_snap(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outvec = cross(v1, v2);
- outval = length(outvec);
- outvec /= outval;
+ outVector = floor(safe_divide(a, b)) * b;
}
-void vec_math_normalize(vec3 v, out vec3 outvec, out float outval)
+void vector_math_floor(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
{
- outval = length(v);
- outvec = normalize(v);
+ outVector = floor(a);
+}
+
+void vector_math_ceil(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
+{
+ outVector = ceil(a);
+}
+
+void vector_math_modulo(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
+{
+ math_modulo(a.x, b.x, outVector.x);
+ math_modulo(a.y, b.y, outVector.y);
+ math_modulo(a.z, b.z, outVector.z);
+}
+
+void vector_math_fraction(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
+{
+ outVector = fract(a);
+}
+
+void vector_math_absolute(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
+{
+ outVector = abs(a);
+}
+
+void vector_math_minimum(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
+{
+ outVector = min(a, b);
+}
+
+void vector_math_maximum(vec3 a, vec3 b, float scale, out vec3 outVector, out float outValue)
+{
+ outVector = max(a, b);
+}
+
+void vector_math_mix(float strength, vec3 a, vec3 b, out vec3 outVector)
+{
+ outVector = strength * a + (1 - strength) * b;
}
void vec_math_negate(vec3 v, out vec3 outv)
@@ -962,9 +1004,9 @@ void clamp_vec3(vec3 vec, vec3 min, vec3 max, out vec3 out_vec)
out_vec = clamp(vec, min, max);
}
-void clamp_val(float value, float min, float max, out float out_value)
+void clamp_value(float value, float min, float max, out float result)
{
- out_value = clamp(value, min, max);
+ result = clamp(value, min, max);
}
void hue_sat(float hue, float sat, float value, float fac, vec4 col, out vec4 outcol)
@@ -1125,9 +1167,34 @@ float integer_noise(int n)
return 0.5 * (float(nn) / 1073741824.0);
}
-uint hash(uint kx, uint ky, uint kz)
-{
+/* ***** Jenkins Lookup3 Hash Functions ***** */
+
+/* Source: http://burtleburtle.net/bob/c/lookup3.c */
+
#define rot(x, k) (((x) << (k)) | ((x) >> (32 - (k))))
+
+#define mix(a, b, c) \
+ { \
+ a -= c; \
+ a ^= rot(c, 4); \
+ c += b; \
+ b -= a; \
+ b ^= rot(a, 6); \
+ a += c; \
+ c -= b; \
+ c ^= rot(b, 8); \
+ b += a; \
+ a -= c; \
+ a ^= rot(c, 16); \
+ c += b; \
+ b -= a; \
+ b ^= rot(a, 19); \
+ a += c; \
+ c -= b; \
+ c ^= rot(b, 4); \
+ b += a; \
+ }
+
#define final(a, b, c) \
{ \
c ^= b; \
@@ -1145,9 +1212,34 @@ uint hash(uint kx, uint ky, uint kz)
c ^= b; \
c -= rot(b, 24); \
}
- // now hash the data!
- uint a, b, c, len = 3u;
- a = b = c = 0xdeadbeefu + (len << 2u) + 13u;
+
+uint hash_uint(uint kx)
+{
+ uint a, b, c;
+ a = b = c = 0xdeadbeefu + (1u << 2u) + 13u;
+
+ a += kx;
+ final(a, b, c);
+
+ return c;
+}
+
+uint hash_uint2(uint kx, uint ky)
+{
+ uint a, b, c;
+ a = b = c = 0xdeadbeefu + (2u << 2u) + 13u;
+
+ b += ky;
+ a += kx;
+ final(a, b, c);
+
+ return c;
+}
+
+uint hash_uint3(uint kx, uint ky, uint kz)
+{
+ uint a, b, c;
+ a = b = c = 0xdeadbeefu + (3u << 2u) + 13u;
c += kz;
b += ky;
@@ -1155,15 +1247,157 @@ uint hash(uint kx, uint ky, uint kz)
final(a, b, c);
return c;
+}
+
+uint hash_uint4(uint kx, uint ky, uint kz, uint kw)
+{
+ uint a, b, c;
+ a = b = c = 0xdeadbeefu + (4u << 2u) + 13u;
+
+ a += kx;
+ b += ky;
+ c += kz;
+ mix(a, b, c);
+
+ a += kw;
+ final(a, b, c);
+
+ return c;
+}
+
#undef rot
#undef final
+#undef mix
+
+uint hash_int(int kx)
+{
+ return hash_uint(uint(kx));
}
-uint hash(int kx, int ky, int kz)
+uint hash_int2(int kx, int ky)
{
- return hash(uint(kx), uint(ky), uint(kz));
+ return hash_uint2(uint(kx), uint(ky));
}
+uint hash_int3(int kx, int ky, int kz)
+{
+ return hash_uint3(uint(kx), uint(ky), uint(kz));
+}
+
+uint hash_int4(int kx, int ky, int kz, int kw)
+{
+ return hash_uint4(uint(kx), uint(ky), uint(kz), uint(kw));
+}
+
+/* Hashing uint or uint[234] into a float in the range [0, 1]. */
+
+float hash_uint_to_float(uint kx)
+{
+ return float(hash_uint(kx)) / float(0xFFFFFFFFu);
+}
+
+float hash_uint2_to_float(uint kx, uint ky)
+{
+ return float(hash_uint2(kx, ky)) / float(0xFFFFFFFFu);
+}
+
+float hash_uint3_to_float(uint kx, uint ky, uint kz)
+{
+ return float(hash_uint3(kx, ky, kz)) / float(0xFFFFFFFFu);
+}
+
+float hash_uint4_to_float(uint kx, uint ky, uint kz, uint kw)
+{
+ return float(hash_uint4(kx, ky, kz, kw)) / float(0xFFFFFFFFu);
+}
+
+/* Hashing float or vec[234] into a float in the range [0, 1]. */
+
+float hash_float_to_float(float k)
+{
+ return hash_uint_to_float(floatBitsToUint(k));
+}
+
+float hash_vec2_to_float(vec2 k)
+{
+ return hash_uint2_to_float(floatBitsToUint(k.x), floatBitsToUint(k.y));
+}
+
+float hash_vec3_to_float(vec3 k)
+{
+ return hash_uint3_to_float(floatBitsToUint(k.x), floatBitsToUint(k.y), floatBitsToUint(k.z));
+}
+
+float hash_vec4_to_float(vec4 k)
+{
+ return hash_uint4_to_float(
+ floatBitsToUint(k.x), floatBitsToUint(k.y), floatBitsToUint(k.z), floatBitsToUint(k.w));
+}
+
+/* Hashing vec[234] into vec[234] of components in the range [0, 1]. */
+
+vec2 hash_vec2_to_vec2(vec2 k)
+{
+ return vec2(hash_vec2_to_float(k), hash_vec3_to_float(vec3(k, 1.0)));
+}
+
+vec3 hash_vec3_to_vec3(vec3 k)
+{
+ return vec3(
+ hash_vec3_to_float(k), hash_vec4_to_float(vec4(k, 1.0)), hash_vec4_to_float(vec4(k, 2.0)));
+}
+
+vec4 hash_vec4_to_vec4(vec4 k)
+{
+ return vec4(hash_vec4_to_float(k.xyzw),
+ hash_vec4_to_float(k.wxyz),
+ hash_vec4_to_float(k.zwxy),
+ hash_vec4_to_float(k.yzwx));
+}
+
+/* Hashing float or vec[234] into vec3 of components in range [0, 1]. */
+
+vec3 hash_float_to_vec3(float k)
+{
+ return vec3(
+ hash_float_to_float(k), hash_vec2_to_float(vec2(k, 1.0)), hash_vec2_to_float(vec2(k, 2.0)));
+}
+
+vec3 hash_vec2_to_vec3(vec2 k)
+{
+ return vec3(
+ hash_vec2_to_float(k), hash_vec3_to_float(vec3(k, 1.0)), hash_vec3_to_float(vec3(k, 2.0)));
+}
+
+vec3 hash_vec4_to_vec3(vec4 k)
+{
+ return vec3(hash_vec4_to_float(k.xyzw), hash_vec4_to_float(k.zxwy), hash_vec4_to_float(k.wzyx));
+}
+
+/* White Noise */
+
+void node_white_noise_1d(vec3 vector, float w, out float value)
+{
+ value = hash_float_to_float(w);
+}
+
+void node_white_noise_2d(vec3 vector, float w, out float value)
+{
+ value = hash_vec2_to_float(vector.xy);
+}
+
+void node_white_noise_3d(vec3 vector, float w, out float value)
+{
+ value = hash_vec3_to_float(vector);
+}
+
+void node_white_noise_4d(vec3 vector, float w, out float value)
+{
+ value = hash_vec4_to_float(vec4(vector, w));
+}
+
+/* Cell Noise */
+
float bits_to_01(uint bits)
{
return (float(bits) / 4294967295.0);
@@ -1175,7 +1409,7 @@ float cellnoise(vec3 p)
int iy = quick_floor(p.y);
int iz = quick_floor(p.z);
- return bits_to_01(hash(uint(ix), uint(iy), uint(iz)));
+ return hash_uint3_to_float(uint(ix), uint(iy), uint(iz));
}
vec3 cellnoise_color(vec3 p)
@@ -1230,10 +1464,9 @@ vec3 principled_sheen(float NV, vec3 basecol_tint, float sheen_tint)
void node_bsdf_diffuse(vec4 color, float roughness, vec3 N, out Closure result)
{
N = normalize(N);
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
- result.ssr_normal = normal_encode(vN, viewCameraVec);
eevee_closure_diffuse(N, color.rgb, 1.0, result.radiance);
+ closure_load_ssr_data(vec3(0.0), 0.0, N, viewCameraVec, -1, result);
result.radiance *= color.rgb;
}
@@ -1245,9 +1478,7 @@ void node_bsdf_glossy(vec4 color, float roughness, vec3 N, float ssr_id, out Clo
vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = out_spec * color.rgb;
- result.ssr_data = vec4(ssr_spec * color.rgb, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ closure_load_ssr_data(ssr_spec * color.rgb, roughness, N, viewCameraVec, int(ssr_id), result);
}
void node_bsdf_anisotropic(vec4 color,
@@ -1276,9 +1507,8 @@ void node_bsdf_glass(
vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = mix(out_refr, out_spec, fresnel);
- result.ssr_data = vec4(ssr_spec * color.rgb * fresnel, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ closure_load_ssr_data(
+ ssr_spec * color.rgb * fresnel, roughness, N, viewCameraVec, int(ssr_id), result);
}
void node_bsdf_toon(vec4 color, float size, float tsmooth, vec3 N, out Closure result)
@@ -1343,7 +1573,7 @@ void node_bsdf_principled(vec4 base_color,
vec3 mixed_ss_base_color = mix(diffuse, subsurface_color.rgb, subsurface);
- float sss_scalef = dot(sss_scale, vec3(1.0 / 3.0)) * subsurface;
+ float sss_scalef = avg(sss_scale) * subsurface;
eevee_closure_principled(N,
mixed_ss_base_color,
f0,
@@ -1367,28 +1597,34 @@ void node_bsdf_principled(vec4 base_color,
vec3(1.0); /* Simulate 2 transmission event */
out_refr *= refr_color * (1.0 - fresnel) * transmission;
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = out_spec + out_refr;
result.radiance += out_diff * out_sheen; /* Coarse approx. */
+
+ closure_load_ssr_data(ssr_spec * alpha, roughness, N, viewCameraVec, int(ssr_id), result);
+
+ vec3 sss_radiance = (out_diff + out_trans) * alpha;
# ifndef USE_SSS
- result.radiance += (out_diff + out_trans) * mixed_ss_base_color * (1.0 - transmission);
-# endif
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
-# ifdef USE_SSS
- result.sss_data.a = sss_scalef;
- result.sss_data.rgb = out_diff + out_trans;
+ result.radiance += sss_radiance * mixed_ss_base_color * (1.0 - transmission);
+# else
# ifdef USE_SSS_ALBEDO
- result.sss_albedo.rgb = mixed_ss_base_color;
+ vec3 sss_albedo = mixed_ss_base_color;
# else
- result.sss_data.rgb *= mixed_ss_base_color;
+ sss_radiance *= mixed_ss_base_color;
# endif
- result.sss_data.rgb *= (1.0 - transmission);
-# endif
+ sss_radiance *= (1.0 - transmission);
+ closure_load_sss_data(sss_scalef,
+ sss_radiance,
+# ifdef USE_SSS_ALBEDO
+ sss_albedo,
+# endif
+ int(sss_id),
+ result);
+# endif /* USE_SSS */
+
result.radiance += emission.rgb;
- result.opacity = alpha;
+ result.radiance *= alpha;
+ result.transmittance = vec3(1.0 - alpha);
}
void node_bsdf_principled_dielectric(vec4 base_color,
@@ -1434,14 +1670,12 @@ void node_bsdf_principled_dielectric(vec4 base_color,
eevee_closure_default(
N, diffuse, f0, vec3(1.0), int(ssr_id), roughness, 1.0, out_diff, out_spec, ssr_spec);
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = out_spec + out_diff * (diffuse + out_sheen);
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ closure_load_ssr_data(ssr_spec * alpha, roughness, N, viewCameraVec, int(ssr_id), result);
result.radiance += emission.rgb;
- result.opacity = alpha;
+ result.radiance *= alpha;
+ result.transmittance = vec3(1.0 - alpha);
}
void node_bsdf_principled_metallic(vec4 base_color,
@@ -1479,14 +1713,12 @@ void node_bsdf_principled_metallic(vec4 base_color,
eevee_closure_glossy(N, base_color.rgb, f90, int(ssr_id), roughness, 1.0, out_spec, ssr_spec);
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = out_spec;
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ closure_load_ssr_data(ssr_spec * alpha, roughness, N, viewCameraVec, int(ssr_id), result);
result.radiance += emission.rgb;
- result.opacity = alpha;
+ result.radiance *= alpha;
+ result.transmittance = vec3(1.0 - alpha);
}
void node_bsdf_principled_clearcoat(vec4 base_color,
@@ -1534,14 +1766,12 @@ void node_bsdf_principled_clearcoat(vec4 base_color,
out_spec,
ssr_spec);
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = out_spec;
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ closure_load_ssr_data(ssr_spec * alpha, roughness, N, viewCameraVec, int(ssr_id), result);
result.radiance += emission.rgb;
- result.opacity = alpha;
+ result.radiance *= alpha;
+ result.transmittance = vec3(1.0 - alpha);
}
void node_bsdf_principled_subsurface(vec4 base_color,
@@ -1582,7 +1812,7 @@ void node_bsdf_principled_subsurface(vec4 base_color,
subsurface_color = subsurface_color * (1.0 - metallic);
vec3 mixed_ss_base_color = mix(diffuse, subsurface_color.rgb, subsurface);
- float sss_scalef = dot(sss_scale, vec3(1.0 / 3.0)) * subsurface;
+ float sss_scalef = avg(sss_scale) * subsurface;
float NV = dot(N, cameraVec);
vec3 out_sheen = sheen * principled_sheen(NV, ctint, sheen_tint);
@@ -1602,26 +1832,33 @@ void node_bsdf_principled_subsurface(vec4 base_color,
out_spec,
ssr_spec);
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = out_spec;
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
-# ifdef USE_SSS
- result.sss_data.a = sss_scalef;
- result.sss_data.rgb = out_diff + out_trans;
+ closure_load_ssr_data(ssr_spec * alpha, roughness, N, viewCameraVec, int(ssr_id), result);
+
+ vec3 sss_radiance = (out_diff + out_trans) * alpha;
+# ifndef USE_SSS
+ result.radiance += sss_radiance * mixed_ss_base_color * (1.0 - transmission);
+# else
# ifdef USE_SSS_ALBEDO
- result.sss_albedo.rgb = mixed_ss_base_color;
+ vec3 sss_albedo = mixed_ss_base_color;
# else
- result.sss_data.rgb *= mixed_ss_base_color;
+ sss_radiance *= mixed_ss_base_color;
# endif
-# else
- result.radiance += (out_diff + out_trans) * mixed_ss_base_color;
-# endif
+ sss_radiance *= (1.0 - transmission);
+ closure_load_sss_data(sss_scalef,
+ sss_radiance,
+# ifdef USE_SSS_ALBEDO
+ sss_albedo,
+# endif
+ int(sss_id),
+ result);
+# endif /* USE_SSS */
+
result.radiance += out_diff * out_sheen;
result.radiance += emission.rgb;
- result.opacity = alpha;
+ result.radiance *= alpha;
+ result.transmittance = vec3(1.0 - alpha);
}
void node_bsdf_principled_glass(vec4 base_color,
@@ -1671,14 +1908,12 @@ void node_bsdf_principled_glass(vec4 base_color,
out_spec *= spec_col;
ssr_spec *= spec_col * fresnel;
- vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
result.radiance = mix(out_refr, out_spec, fresnel);
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ closure_load_ssr_data(ssr_spec * alpha, roughness, N, viewCameraVec, int(ssr_id), result);
result.radiance += emission.rgb;
- result.opacity = alpha;
+ result.radiance *= alpha;
+ result.transmittance = vec3(1.0 - alpha);
}
void node_bsdf_translucent(vec4 color, vec3 N, out Closure result)
@@ -1688,11 +1923,9 @@ void node_bsdf_translucent(vec4 color, vec3 N, out Closure result)
void node_bsdf_transparent(vec4 color, out Closure result)
{
- /* this isn't right */
result = CLOSURE_DEFAULT;
result.radiance = vec3(0.0);
- result.opacity = clamp(1.0 - dot(color.rgb, vec3(0.3333334)), 0.0, 1.0);
- result.ssr_id = TRANSPARENT_CLOSURE_FLAG;
+ result.transmittance = abs(color.rgb);
}
void node_bsdf_velvet(vec4 color, float sigma, vec3 N, out Closure result)
@@ -1714,19 +1947,25 @@ void node_subsurface_scattering(vec4 color,
vec3 out_diff, out_trans;
vec3 vN = mat3(ViewMatrix) * N;
result = CLOSURE_DEFAULT;
- result.ssr_data = vec4(0.0);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = -1;
- result.sss_data.a = scale;
+ closure_load_ssr_data(vec3(0.0), 0.0, N, viewCameraVec, -1, result);
+
eevee_closure_subsurface(N, color.rgb, 1.0, scale, out_diff, out_trans);
- result.sss_data.rgb = out_diff + out_trans;
+
+ vec3 sss_radiance = out_diff + out_trans;
# ifdef USE_SSS_ALBEDO
/* Not perfect for texture_blur not exactly equal to 0.0 or 1.0. */
- result.sss_albedo.rgb = mix(color.rgb, vec3(1.0), texture_blur);
- result.sss_data.rgb *= mix(vec3(1.0), color.rgb, texture_blur);
+ vec3 sss_albedo = mix(color.rgb, vec3(1.0), texture_blur);
+ sss_radiance *= mix(vec3(1.0), color.rgb, texture_blur);
# else
- result.sss_data.rgb *= color.rgb;
+ sss_radiance *= color.rgb;
+# endif
+ closure_load_sss_data(scale,
+ sss_radiance,
+# ifdef USE_SSS_ALBEDO
+ sss_albedo,
# endif
+ int(sss_id),
+ result);
# else
node_bsdf_diffuse(color, 0.0, N, result);
# endif
@@ -1742,7 +1981,6 @@ void node_bsdf_refraction(vec4 color, float roughness, float ior, vec3 N, out Cl
result = CLOSURE_DEFAULT;
result.ssr_normal = normal_encode(vN, viewCameraVec);
result.radiance = out_refr * color.rgb;
- result.ssr_id = REFRACT_CLOSURE_FLAG;
}
void node_ambient_occlusion(
@@ -1843,7 +2081,7 @@ void node_background(vec4 color, float strength, out Closure result)
color *= strength;
result = CLOSURE_DEFAULT;
result.radiance = color.rgb;
- result.opacity = color.a;
+ result.transmittance = vec3(0.0);
#else
result = CLOSURE_DEFAULT;
#endif
@@ -1951,6 +2189,15 @@ void node_volume_principled(vec4 color,
#endif
}
+void node_holdout(out Closure result)
+{
+ result = CLOSURE_DEFAULT;
+#ifndef VOLUMETRICS
+ result.holdout = 1.0;
+ result.flag = CLOSURE_HOLDOUT_FLAG;
+#endif
+}
+
/* closures */
void node_mix_shader(float fac, Closure shader1, Closure shader2, out Closure shader)
@@ -2025,7 +2272,7 @@ void node_attribute_volume_density(sampler3D tex, out vec4 outcol, out vec3 outv
#endif
outvec = texture(tex, cos).aaa;
outcol = vec4(outvec, 1.0);
- outf = dot(vec3(1.0 / 3.0), outvec);
+ outf = avg(outvec);
}
uniform vec3 volumeColor = vec3(1.0);
@@ -2046,7 +2293,7 @@ void node_attribute_volume_color(sampler3D tex, out vec4 outcol, out vec3 outvec
outvec = value.rgb * volumeColor;
outcol = vec4(outvec, 1.0);
- outf = dot(vec3(1.0 / 3.0), outvec);
+ outf = avg(outvec);
}
void node_attribute_volume_flame(sampler3D tex, out vec4 outcol, out vec3 outvec, out float outf)
@@ -2076,11 +2323,40 @@ void node_attribute_volume_temperature(
outcol = vec4(outf, outf, outf, 1.0);
}
+void node_volume_info(sampler3D densitySampler,
+ sampler3D flameSampler,
+ vec2 temperature,
+ out vec4 outColor,
+ out float outDensity,
+ out float outFlame,
+ out float outTemprature)
+{
+#if defined(MESH_SHADER) && defined(VOLUMETRICS)
+ vec3 p = volumeObjectLocalCoord;
+#else
+ vec3 p = vec3(0.0);
+#endif
+
+ vec4 density = texture(densitySampler, p);
+ outDensity = density.a;
+
+ /* Density is premultiplied for interpolation, divide it out here. */
+ if (density.a > 1e-8) {
+ density.rgb /= density.a;
+ }
+ outColor = vec4(density.rgb * volumeColor, 1.0);
+
+ float flame = texture(flameSampler, p).r;
+ outFlame = flame;
+
+ outTemprature = (flame > 0.01) ? temperature.x + flame * (temperature.y - temperature.x) : 0.0;
+}
+
void node_attribute(vec3 attr, out vec4 outcol, out vec3 outvec, out float outf)
{
outcol = vec4(attr, 1.0);
outvec = attr;
- outf = dot(vec3(1.0 / 3.0), attr);
+ outf = avg(attr);
}
void node_uvmap(vec3 attr_uv, out vec3 outvec)
@@ -2847,22 +3123,24 @@ float noise_perlin(float x, float y, float z)
float noise_u[2], noise_v[2];
- noise_u[0] = noise_nerp(
- u, noise_grad(hash(X, Y, Z), fx, fy, fz), noise_grad(hash(X + 1, Y, Z), fx - 1.0, fy, fz));
+ noise_u[0] = noise_nerp(u,
+ noise_grad(hash_int3(X, Y, Z), fx, fy, fz),
+ noise_grad(hash_int3(X + 1, Y, Z), fx - 1.0, fy, fz));
noise_u[1] = noise_nerp(u,
- noise_grad(hash(X, Y + 1, Z), fx, fy - 1.0, fz),
- noise_grad(hash(X + 1, Y + 1, Z), fx - 1.0, fy - 1.0, fz));
+ noise_grad(hash_int3(X, Y + 1, Z), fx, fy - 1.0, fz),
+ noise_grad(hash_int3(X + 1, Y + 1, Z), fx - 1.0, fy - 1.0, fz));
noise_v[0] = noise_nerp(v, noise_u[0], noise_u[1]);
noise_u[0] = noise_nerp(u,
- noise_grad(hash(X, Y, Z + 1), fx, fy, fz - 1.0),
- noise_grad(hash(X + 1, Y, Z + 1), fx - 1.0, fy, fz - 1.0));
+ noise_grad(hash_int3(X, Y, Z + 1), fx, fy, fz - 1.0),
+ noise_grad(hash_int3(X + 1, Y, Z + 1), fx - 1.0, fy, fz - 1.0));
- noise_u[1] = noise_nerp(u,
- noise_grad(hash(X, Y + 1, Z + 1), fx, fy - 1.0, fz - 1.0),
- noise_grad(hash(X + 1, Y + 1, Z + 1), fx - 1.0, fy - 1.0, fz - 1.0));
+ noise_u[1] = noise_nerp(
+ u,
+ noise_grad(hash_int3(X, Y + 1, Z + 1), fx, fy - 1.0, fz - 1.0),
+ noise_grad(hash_int3(X + 1, Y + 1, Z + 1), fx - 1.0, fy - 1.0, fz - 1.0));
noise_v[1] = noise_nerp(v, noise_u[0], noise_u[1]);
@@ -3351,14 +3629,17 @@ void node_light_falloff(
}
void node_object_info(mat4 obmat,
+ vec4 obcolor,
vec4 info,
float mat_index,
out vec3 location,
+ out vec4 color,
out float object_index,
out float material_index,
out float random)
{
location = obmat[3].xyz;
+ color = obcolor;
object_index = info.x;
material_index = mat_index;
random = info.z;
@@ -3493,7 +3774,7 @@ void node_output_world(Closure surface, Closure volume, out Closure result)
{
#ifndef VOLUMETRICS
result.radiance = surface.radiance * backgroundAlpha;
- result.opacity = backgroundAlpha;
+ result.transmittance = vec3(1.0 - backgroundAlpha);
#else
result = volume;
#endif /* VOLUMETRICS */
@@ -3540,6 +3821,8 @@ void node_eevee_specular(vec4 diffuse,
float ssr_id,
out Closure result)
{
+ normal = normalize(normal);
+
vec3 out_diff, out_spec, ssr_spec;
eevee_closure_default_clearcoat(normal,
diffuse.rgb,
@@ -3555,19 +3838,19 @@ void node_eevee_specular(vec4 diffuse,
out_spec,
ssr_spec);
- vec3 vN = normalize(mat3(ViewMatrix) * normal);
+ float alpha = 1.0 - transp;
result = CLOSURE_DEFAULT;
result.radiance = out_diff * diffuse.rgb + out_spec + emissive.rgb;
- result.opacity = 1.0 - transp;
- result.ssr_data = vec4(ssr_spec, roughness);
- result.ssr_normal = normal_encode(vN, viewCameraVec);
- result.ssr_id = int(ssr_id);
+ result.radiance *= alpha;
+ result.transmittance = vec3(transp);
+
+ closure_load_ssr_data(ssr_spec * alpha, roughness, normal, viewCameraVec, int(ssr_id), result);
}
void node_shader_to_rgba(Closure cl, out vec4 outcol, out float outalpha)
{
vec4 spec_accum = vec4(0.0);
- if (ssrToggle && cl.ssr_id == outputSsrId) {
+ if (ssrToggle && FLAG_TEST(cl.flag, CLOSURE_SSR_FLAG)) {
vec3 V = cameraVec;
vec3 vN = normal_decode(cl.ssr_normal, viewCameraVec);
vec3 N = transform_direction(ViewMatrixInverse, vN);
@@ -3576,7 +3859,7 @@ void node_shader_to_rgba(Closure cl, out vec4 outcol, out float outalpha)
fallback_cubemap(N, V, worldPosition, viewPosition, roughness, roughnessSquared, spec_accum);
}
- outalpha = cl.opacity;
+ outalpha = avg(cl.transmittance);
outcol = vec4((spec_accum.rgb * cl.ssr_data.rgb) + cl.radiance, 1.0);
# ifdef USE_SSS
diff --git a/source/blender/ikplugin/intern/itasc_plugin.cpp b/source/blender/ikplugin/intern/itasc_plugin.cpp
index 0401c485c2a..2ceedca59f7 100644
--- a/source/blender/ikplugin/intern/itasc_plugin.cpp
+++ b/source/blender/ikplugin/intern/itasc_plugin.cpp
@@ -879,7 +879,7 @@ static bool joint_callback(const iTaSC::Timestamp &timestamp,
bPoseChannel *chan = ikchan->pchan;
int dof;
- // a channel can be splitted into multiple joints, so we get called multiple
+ // a channel can be split into multiple joints, so we get called multiple
// times for one channel (this callback is only for 1 joint in the armature)
// the IK_JointTarget structure is shared between multiple joint constraint
// and the target joint values is computed only once, remember this in jointValid
@@ -1729,9 +1729,9 @@ static void execute_scene(struct Depsgraph *depsgraph,
IK_Channel *ikchan;
if (ikparam->flag & ITASC_SIMULATION) {
for (i = 0, ikchan = ikscene->channels; i < ikscene->numchan; i++, ++ikchan) {
- // In simulation mode we don't allow external constraint to change our bones, mark the channel
- // done also tell Blender that this channel is part of IK tree
- // (cleared on each BKE_pose_where_is()
+ // In simulation mode we don't allow external constraint to change our bones,
+ // mark the channel done also tell Blender that this channel is part of IK tree.
+ // Cleared on each BKE_pose_where_is()
ikchan->pchan->flag |= (POSE_DONE | POSE_CHAIN);
ikchan->jointValid = 0;
}
diff --git a/source/blender/imbuf/IMB_imbuf.h b/source/blender/imbuf/IMB_imbuf.h
index 791e939db7f..571cac41399 100644
--- a/source/blender/imbuf/IMB_imbuf.h
+++ b/source/blender/imbuf/IMB_imbuf.h
@@ -46,8 +46,7 @@
*
* IMB needs:
* - \ref DNA module
- * The listbase types are used for handling the memory
- * management.
+ * The #ListBase types are used for handling the memory management.
* - \ref blenlib module
* blenlib handles guarded memory management in blender-style.
* BLI_winstuff.h makes a few windows specific behaviors
diff --git a/source/blender/imbuf/intern/colormanagement.c b/source/blender/imbuf/intern/colormanagement.c
index 4509daac81f..36af7ab2571 100644
--- a/source/blender/imbuf/intern/colormanagement.c
+++ b/source/blender/imbuf/intern/colormanagement.c
@@ -716,7 +716,7 @@ void colormanagement_exit(void)
}
if (global_glsl_state.curve_mapping) {
- curvemapping_free(global_glsl_state.curve_mapping);
+ BKE_curvemapping_free(global_glsl_state.curve_mapping);
}
if (global_glsl_state.curve_mapping_settings.lut) {
@@ -1029,14 +1029,14 @@ void IMB_colormanagement_init_default_view_settings(
static void curve_mapping_apply_pixel(CurveMapping *curve_mapping, float *pixel, int channels)
{
if (channels == 1) {
- pixel[0] = curvemap_evaluateF(curve_mapping->cm, pixel[0]);
+ pixel[0] = BKE_curvemap_evaluateF(curve_mapping->cm, pixel[0]);
}
else if (channels == 2) {
- pixel[0] = curvemap_evaluateF(curve_mapping->cm, pixel[0]);
- pixel[1] = curvemap_evaluateF(curve_mapping->cm, pixel[1]);
+ pixel[0] = BKE_curvemap_evaluateF(curve_mapping->cm, pixel[0]);
+ pixel[1] = BKE_curvemap_evaluateF(curve_mapping->cm, pixel[1]);
}
else {
- curvemapping_evaluate_premulRGBF(curve_mapping, pixel, pixel);
+ BKE_curvemapping_evaluate_premulRGBF(curve_mapping, pixel, pixel);
}
}
@@ -3728,8 +3728,8 @@ ColormanageProcessor *IMB_colormanagement_display_processor_new(
global_role_scene_linear);
if (applied_view_settings->flag & COLORMANAGE_VIEW_USE_CURVES) {
- cm_processor->curve_mapping = curvemapping_copy(applied_view_settings->curve_mapping);
- curvemapping_premultiply(cm_processor->curve_mapping, false);
+ cm_processor->curve_mapping = BKE_curvemapping_copy(applied_view_settings->curve_mapping);
+ BKE_curvemapping_premultiply(cm_processor->curve_mapping, false);
}
return cm_processor;
@@ -3754,7 +3754,7 @@ ColormanageProcessor *IMB_colormanagement_colorspace_processor_new(const char *f
void IMB_colormanagement_processor_apply_v4(ColormanageProcessor *cm_processor, float pixel[4])
{
if (cm_processor->curve_mapping) {
- curvemapping_evaluate_premulRGBF(cm_processor->curve_mapping, pixel, pixel);
+ BKE_curvemapping_evaluate_premulRGBF(cm_processor->curve_mapping, pixel, pixel);
}
if (cm_processor->processor) {
@@ -3766,7 +3766,7 @@ void IMB_colormanagement_processor_apply_v4_predivide(ColormanageProcessor *cm_p
float pixel[4])
{
if (cm_processor->curve_mapping) {
- curvemapping_evaluate_premulRGBF(cm_processor->curve_mapping, pixel, pixel);
+ BKE_curvemapping_evaluate_premulRGBF(cm_processor->curve_mapping, pixel, pixel);
}
if (cm_processor->processor) {
@@ -3777,7 +3777,7 @@ void IMB_colormanagement_processor_apply_v4_predivide(ColormanageProcessor *cm_p
void IMB_colormanagement_processor_apply_v3(ColormanageProcessor *cm_processor, float pixel[3])
{
if (cm_processor->curve_mapping) {
- curvemapping_evaluate_premulRGBF(cm_processor->curve_mapping, pixel, pixel);
+ BKE_curvemapping_evaluate_premulRGBF(cm_processor->curve_mapping, pixel, pixel);
}
if (cm_processor->processor) {
@@ -3870,7 +3870,7 @@ void IMB_colormanagement_processor_apply_byte(
void IMB_colormanagement_processor_free(ColormanageProcessor *cm_processor)
{
if (cm_processor->curve_mapping) {
- curvemapping_free(cm_processor->curve_mapping);
+ BKE_curvemapping_free(cm_processor->curve_mapping);
}
if (cm_processor->processor) {
OCIO_processorRelease(cm_processor->processor);
@@ -3899,9 +3899,9 @@ static void curve_mapping_to_ocio_settings(CurveMapping *curve_mapping,
{
int i;
- curvemapping_initialize(curve_mapping);
- curvemapping_premultiply(curve_mapping, false);
- curvemapping_table_RGBA(
+ BKE_curvemapping_initialize(curve_mapping);
+ BKE_curvemapping_premultiply(curve_mapping, false);
+ BKE_curvemapping_table_RGBA(
curve_mapping, &curve_mapping_settings->lut, &curve_mapping_settings->lut_size);
for (i = 0; i < 4; i++) {
@@ -3964,11 +3964,11 @@ static void update_glsl_display_processor(const ColorManagedViewSettings *view_s
* We do this by allocating new curve mapping before freeing ol one.
*/
if (use_curve_mapping) {
- new_curve_mapping = curvemapping_copy(view_settings->curve_mapping);
+ new_curve_mapping = BKE_curvemapping_copy(view_settings->curve_mapping);
}
if (global_glsl_state.curve_mapping) {
- curvemapping_free(global_glsl_state.curve_mapping);
+ BKE_curvemapping_free(global_glsl_state.curve_mapping);
MEM_freeN(curve_mapping_settings->lut);
global_glsl_state.curve_mapping = NULL;
curve_mapping_settings->lut = NULL;
diff --git a/source/blender/imbuf/intern/imageprocess.c b/source/blender/imbuf/intern/imageprocess.c
index 1f180d0d9c1..49e9c4c54d2 100644
--- a/source/blender/imbuf/intern/imageprocess.c
+++ b/source/blender/imbuf/intern/imageprocess.c
@@ -110,8 +110,8 @@ void bicubic_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, in
return;
}
- pixel_from_buffer(
- out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+ /* gcc warns these could be uninitialized, but its ok. */
+ pixel_from_buffer(out, &outI, &outF, xout, yout);
bicubic_interpolation_color(in, outI, outF, u, v);
}
@@ -220,8 +220,8 @@ void bilinear_interpolation(ImBuf *in, ImBuf *out, float u, float v, int xout, i
return;
}
- pixel_from_buffer(
- out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+ /* gcc warns these could be uninitialized, but its ok. */
+ pixel_from_buffer(out, &outI, &outF, xout, yout);
bilinear_interpolation_color(in, outI, outF, u, v);
}
@@ -332,8 +332,8 @@ void nearest_interpolation(ImBuf *in, ImBuf *out, float x, float y, int xout, in
return;
}
- pixel_from_buffer(
- out, &outI, &outF, xout, yout); /* gcc warns these could be uninitialized, but its ok */
+ /* gcc warns these could be uninitialized, but its ok. */
+ pixel_from_buffer(out, &outI, &outF, xout, yout);
nearest_interpolation_color(in, outI, outF, x, y);
}
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index c9883d5df86..f18eb2f7303 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -1215,9 +1215,9 @@ void IMB_exr_read_channels(void *handle)
/* check if exr was saved with previous versions of blender which flipped images */
const StringAttribute *ta = data->ifile->header(0).findTypedAttribute<StringAttribute>(
"BlenderMultiChannel");
- short flip = (ta && STREQLEN(ta->value().c_str(),
- "Blender V2.43",
- 13)); /* 'previous multilayer attribute, flipped */
+
+ /* 'previous multilayer attribute, flipped. */
+ short flip = (ta && STREQLEN(ta->value().c_str(), "Blender V2.43", 13));
exr_printf(
"\nIMB_exr_read_channels\n%s %-6s %-22s "
diff --git a/source/blender/imbuf/intern/scaling.c b/source/blender/imbuf/intern/scaling.c
index 28557277d72..46ddee25b0f 100644
--- a/source/blender/imbuf/intern/scaling.c
+++ b/source/blender/imbuf/intern/scaling.c
@@ -1629,8 +1629,8 @@ bool IMB_scaleImBuf(struct ImBuf *ibuf, unsigned int newx, unsigned int newy)
return false;
}
- /* scaleup / scaledown functions below change ibuf->x and ibuf->y
- * so we first scale the Z-buffer (if any) */
+ /* Scale-up / scale-down functions below change ibuf->x and ibuf->y
+ * so we first scale the Z-buffer (if any). */
scalefast_Z_ImBuf(ibuf, newx, newy);
/* try to scale common cases in a fast way */
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index a4cd31a1357..b7834e2c7e0 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -847,8 +847,7 @@ typedef enum eSAction_Flag {
SACTION_POSEMARKERS_SHOW = (1 << 6),
/* don't draw action channels using group colors (where applicable) */
SACTION_NODRAWGCOLORS = (1 << 7),
- /* don't draw current frame number beside frame indicator */
- SACTION_NODRAWCFRANUM = (1 << 8),
+ /* SACTION_NODRAWCFRANUM = (1 << 8), DEPRECATED */
/* don't perform realtime updates */
SACTION_NOREALTIMEUPDATES = (1 << 10),
/* move markers as well as keyframes */
diff --git a/source/blender/makesdna/DNA_documentation.h b/source/blender/makesdna/DNA_documentation.h
index be11b3d9040..0251625292c 100644
--- a/source/blender/makesdna/DNA_documentation.h
+++ b/source/blender/makesdna/DNA_documentation.h
@@ -27,7 +27,7 @@
* blender file. There is an executable that scans all files, looking
* for struct-s to serialize (hence sdna: Struct \ref DNA). From this
* information, it builds a file with numbers that encode the format,
- * the names of variables, and the plce to look for them.
+ * the names of variables, and the place to look for them.
*
* \section dnaissues Known issues with DNA
*
diff --git a/source/blender/makesdna/DNA_gpencil_modifier_types.h b/source/blender/makesdna/DNA_gpencil_modifier_types.h
index c2a9d3cf296..f094d630fc8 100644
--- a/source/blender/makesdna/DNA_gpencil_modifier_types.h
+++ b/source/blender/makesdna/DNA_gpencil_modifier_types.h
@@ -28,8 +28,6 @@
* (ONLY ADD NEW ITEMS AT THE END)
*/
-struct RNG;
-
typedef enum GpencilModifierType {
eGpencilModifierType_None = 0,
eGpencilModifierType_Noise = 1,
@@ -80,6 +78,8 @@ typedef struct NoiseGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -90,16 +90,10 @@ typedef struct NoiseGpencilModifierData {
float factor;
/** How many frames before recalculate randoms. */
int step;
- /** Last gp frame used. */
- int gp_frame;
- /** First scene frame used. */
- int scene_frame;
- /** Random values. */
- float vrand1, vrand2;
- struct RNG *rng;
/** Custom index for passes. */
int layer_pass;
- char _pad[4];
+ /** Random seed */
+ int seed;
} NoiseGpencilModifierData;
typedef enum eNoiseGpencil_Flag {
@@ -114,12 +108,15 @@ typedef enum eNoiseGpencil_Flag {
GP_NOISE_INVERT_VGROUP = (1 << 8),
GP_NOISE_MOD_UV = (1 << 9),
GP_NOISE_INVERT_LAYERPASS = (1 << 10),
+ GP_NOISE_INVERT_MATERIAL = (1 << 11),
} eNoiseGpencil_Flag;
typedef struct SubdivGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
@@ -135,12 +132,15 @@ typedef enum eSubdivGpencil_Flag {
GP_SUBDIV_INVERT_LAYER = (1 << 1),
GP_SUBDIV_INVERT_PASS = (1 << 2),
GP_SUBDIV_INVERT_LAYERPASS = (1 << 3),
+ GP_SUBDIV_INVERT_MATERIAL = (1 << 4),
} eSubdivGpencil_Flag;
typedef struct ThickGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -161,6 +161,7 @@ typedef enum eThickGpencil_Flag {
GP_THICK_CUSTOM_CURVE = (1 << 3),
GP_THICK_NORMALIZE = (1 << 4),
GP_THICK_INVERT_LAYERPASS = (1 << 5),
+ GP_THICK_INVERT_MATERIAL = (1 << 6),
} eThickGpencil_Flag;
typedef struct TimeGpencilModifierData {
@@ -203,6 +204,8 @@ typedef struct TintGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
@@ -224,12 +227,15 @@ typedef enum eTintGpencil_Flag {
GP_TINT_INVERT_LAYER = (1 << 1),
GP_TINT_INVERT_PASS = (1 << 2),
GP_TINT_INVERT_LAYERPASS = (1 << 3),
+ GP_TINT_INVERT_MATERIAL = (1 << 4),
} eTintGpencil_Flag;
typedef struct ColorGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
@@ -249,12 +255,15 @@ typedef enum eColorGpencil_Flag {
GP_COLOR_INVERT_LAYER = (1 << 1),
GP_COLOR_INVERT_PASS = (1 << 2),
GP_COLOR_INVERT_LAYERPASS = (1 << 3),
+ GP_COLOR_INVERT_MATERIAL = (1 << 4),
} eColorGpencil_Flag;
typedef struct OpacityGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -277,6 +286,7 @@ typedef enum eOpacityGpencil_Flag {
GP_OPACITY_INVERT_VGROUP = (1 << 2),
GP_OPACITY_CREATE_COLORS = (1 << 3),
GP_OPACITY_INVERT_LAYERPASS = (1 << 4),
+ GP_OPACITY_INVERT_MATERIAL = (1 << 5),
} eOpacityGpencil_Flag;
typedef struct ArrayGpencilModifierData {
@@ -306,6 +316,8 @@ typedef struct ArrayGpencilModifierData {
int pass_index;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Material replace (0 keep default). */
int mat_rpl;
/** Custom index for passes. */
@@ -319,6 +331,7 @@ typedef enum eArrayGpencil_Flag {
GP_ARRAY_INVERT_PASS = (1 << 3),
GP_ARRAY_KEEP_ONTOP = (1 << 4),
GP_ARRAY_INVERT_LAYERPASS = (1 << 5),
+ GP_ARRAY_INVERT_MATERIAL = (1 << 6),
} eArrayGpencil_Flag;
typedef struct BuildGpencilModifierData {
@@ -328,6 +341,9 @@ typedef struct BuildGpencilModifierData {
char layername[64];
int pass_index;
+ /** Material name. */
+ char materialname[64];
+
/** Custom index for passes. */
int layer_pass;
@@ -398,6 +414,8 @@ typedef struct LatticeGpencilModifierData {
struct Object *object;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -416,6 +434,7 @@ typedef enum eLatticeGpencil_Flag {
GP_LATTICE_INVERT_PASS = (1 << 1),
GP_LATTICE_INVERT_VGROUP = (1 << 2),
GP_LATTICE_INVERT_LAYERPASS = (1 << 3),
+ GP_LATTICE_INVERT_MATERIAL = (1 << 4),
} eLatticeGpencil_Flag;
typedef struct MirrorGpencilModifierData {
@@ -423,6 +442,8 @@ typedef struct MirrorGpencilModifierData {
struct Object *object;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
@@ -440,6 +461,7 @@ typedef enum eMirrorGpencil_Flag {
GP_MIRROR_AXIS_Y = (1 << 4),
GP_MIRROR_AXIS_Z = (1 << 5),
GP_MIRROR_INVERT_LAYERPASS = (1 << 6),
+ GP_MIRROR_INVERT_MATERIAL = (1 << 7),
} eMirrorGpencil_Flag;
typedef struct HookGpencilModifierData {
@@ -450,6 +472,8 @@ typedef struct HookGpencilModifierData {
char subtarget[64];
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -478,6 +502,7 @@ typedef enum eHookGpencil_Flag {
GP_HOOK_INVERT_VGROUP = (1 << 2),
GP_HOOK_UNIFORM_SPACE = (1 << 3),
GP_HOOK_INVERT_LAYERPASS = (1 << 4),
+ GP_HOOK_INVERT_MATERIAL = (1 << 5),
} eHookGpencil_Flag;
typedef enum eHookGpencil_Falloff {
@@ -496,6 +521,8 @@ typedef struct SimplifyGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Custom index for passes. */
int pass_index;
/** Flags. */
@@ -508,6 +535,10 @@ typedef struct SimplifyGpencilModifierData {
short step;
/** Custom index for passes. */
int layer_pass;
+ /** Sample length */
+ float length;
+ /** Merge distance */
+ float distance;
char _pad[4];
} SimplifyGpencilModifierData;
@@ -515,6 +546,7 @@ typedef enum eSimplifyGpencil_Flag {
GP_SIMPLIFY_INVERT_LAYER = (1 << 0),
GP_SIMPLIFY_INVERT_PASS = (1 << 1),
GP_SIMPLIFY_INVERT_LAYERPASS = (1 << 2),
+ GP_SIMPLIFY_INVERT_MATERIAL = (1 << 3),
} eSimplifyGpencil_Flag;
typedef enum eSimplifyGpencil_Mode {
@@ -522,12 +554,18 @@ typedef enum eSimplifyGpencil_Mode {
GP_SIMPLIFY_FIXED = 0,
/* Use RDP algorithm */
GP_SIMPLIFY_ADAPTIVE = 1,
+ /* Sample the stroke using a fixed length */
+ GP_SIMPLIFY_SAMPLE = 2,
+ /* Sample the stroke doing vertex merge */
+ GP_SIMPLIFY_MERGE = 3,
} eSimplifyGpencil_Mode;
typedef struct OffsetGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -546,12 +584,15 @@ typedef enum eOffsetGpencil_Flag {
GP_OFFSET_INVERT_PASS = (1 << 1),
GP_OFFSET_INVERT_VGROUP = (1 << 2),
GP_OFFSET_INVERT_LAYERPASS = (1 << 3),
+ GP_OFFSET_INVERT_MATERIAL = (1 << 4),
} eOffsetGpencil_Flag;
typedef struct SmoothGpencilModifierData {
GpencilModifierData modifier;
/** Layer name. */
char layername[64];
+ /** Material name. */
+ char materialname[64];
/** Optional vertexgroup name, MAX_VGROUP_NAME. */
char vgname[64];
/** Custom index for passes. */
@@ -576,6 +617,7 @@ typedef enum eSmoothGpencil_Flag {
GP_SMOOTH_INVERT_VGROUP = (1 << 5),
GP_SMOOTH_MOD_UV = (1 << 6),
GP_SMOOTH_INVERT_LAYERPASS = (1 << 7),
+ GP_SMOOTH_INVERT_MATERIAL = (1 << 4),
} eSmoothGpencil_Flag;
typedef struct ArmatureGpencilModifierData {
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index bf72ce5e598..2dffdf82688 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -30,8 +30,6 @@
struct ARegion;
struct AnimData;
-struct CurveMapping;
-struct GHash;
struct MDeformVert;
#define GP_DEFAULT_PIX_FACTOR 1.0f
@@ -51,6 +49,14 @@ typedef struct bGPDcontrolpoint {
int size;
} bGPDcontrolpoint;
+typedef struct bGPDspoint_Runtime {
+ /** Original point (used to dereference evaluated data) */
+ struct bGPDspoint *pt_orig;
+ /** Original index array position */
+ int idx_orig;
+ char _pad0[4];
+} bGPDspoint_Runtime;
+
/* Grease-Pencil Annotations - 'Stroke Point'
* -> Coordinates may either be 2d or 3d depending on settings at the time
* -> Coordinates of point on stroke, in proportions of window size
@@ -72,6 +78,10 @@ typedef struct bGPDspoint {
float uv_fac;
/** Uv rotation for dot mode. */
float uv_rot;
+
+ /** Runtime data */
+ char _pad2[4];
+ bGPDspoint_Runtime runtime;
} bGPDspoint;
/* bGPDspoint->flag */
@@ -156,15 +166,21 @@ typedef enum eGPDpalette_Flag {
/* Runtime temp data for bGPDstroke */
typedef struct bGPDstroke_Runtime {
- /* runtime final colors (result of original colors and modifiers) */
+ /** runtime final colors (result of original colors and modifiers) */
float tmp_stroke_rgba[4];
+
+ /** runtime final fill colors (result of original colors and modifiers) */
float tmp_fill_rgba[4];
- /* temporary layer name only used during copy/paste to put the stroke in the original layer */
+ /** temporary layer name only used during copy/paste to put the stroke in the original layer */
char tmp_layerinfo[128];
/** Runtime falloff factor (only for transform). */
float multi_frame_falloff;
+ char _pad[4];
+
+ /** Original stroke (used to dereference evaluated data) */
+ struct bGPDstroke *gps_orig;
} bGPDstroke_Runtime;
/* Grease-Pencil Annotations - 'Stroke'
@@ -210,7 +226,6 @@ typedef struct bGPDstroke {
void *_pad3;
bGPDstroke_Runtime runtime;
- char _pad2[4];
} bGPDstroke;
/* bGPDstroke->flag */
@@ -468,7 +483,6 @@ typedef struct bGPdata {
ListBase layers;
/** Settings for this data-block. */
int flag;
-
char _pad1[4];
/* Palettes */
@@ -651,6 +665,8 @@ typedef enum eGP_DrawMode {
((gpd) && (gpd->flag & \
(GP_DATA_STROKE_EDITMODE | GP_DATA_STROKE_SCULPTMODE | GP_DATA_STROKE_WEIGHTMODE)))
#define GPENCIL_PAINT_MODE(gpd) ((gpd) && (gpd->flag & (GP_DATA_STROKE_PAINTMODE)))
+#define GPENCIL_SCULPT_MODE(gpd) ((gpd) && (gpd->flag & GP_DATA_STROKE_SCULPTMODE))
+#define GPENCIL_WEIGHT_MODE(gpd) ((gpd) && (gpd->flag & GP_DATA_STROKE_WEIGHTMODE))
#define GPENCIL_SCULPT_OR_WEIGHT_MODE(gpd) \
((gpd) && (gpd->flag & (GP_DATA_STROKE_SCULPTMODE | GP_DATA_STROKE_WEIGHTMODE)))
#define GPENCIL_NONE_EDIT_MODE(gpd) \
diff --git a/source/blender/makesdna/DNA_light_types.h b/source/blender/makesdna/DNA_light_types.h
index 5e881053910..82cab5d1594 100644
--- a/source/blender/makesdna/DNA_light_types.h
+++ b/source/blender/makesdna/DNA_light_types.h
@@ -34,7 +34,6 @@
struct AnimData;
struct CurveMapping;
struct Ipo;
-struct MTex;
struct bNodeTree;
typedef struct Light {
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 42308f54d7a..1d1ccef8846 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -128,6 +128,8 @@ typedef enum eMaterialGPencilStyle_Flag {
GP_STYLE_FILL_SHOW = (1 << 9),
/* mix stroke texture */
GP_STYLE_STROKE_TEX_MIX = (1 << 11),
+ /* disable stencil clipping (overlap) */
+ GP_STYLE_DISABLE_STENCIL = (1 << 12),
} eMaterialGPencilStyle_Flag;
typedef enum eMaterialGPencilStyle_Mode {
@@ -304,12 +306,12 @@ typedef struct Material {
/* blend_method */
enum {
- MA_BM_SOLID,
- MA_BM_ADD,
- MA_BM_MULTIPLY,
- MA_BM_CLIP,
- MA_BM_HASHED,
- MA_BM_BLEND,
+ MA_BM_SOLID = 0,
+ // MA_BM_ADD = 1, /* deprecated */
+ // MA_BM_MULTIPLY = 2, /* deprecated */
+ MA_BM_CLIP = 3,
+ MA_BM_HASHED = 4,
+ MA_BM_BLEND = 5,
};
/* blend_flag */
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 8a9a69ac178..cb6991ce67a 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -40,7 +40,6 @@ struct MLoopCol;
struct MLoopTri;
struct MLoopUV;
struct MPoly;
-struct MTexPoly;
struct MVert;
struct Material;
struct Mesh;
@@ -193,9 +192,10 @@ typedef struct Mesh {
short totcol;
+ float remesh_voxel_size;
+ char _pad1[4];
/** Deprecated multiresolution modeling data, only keep for loading old files. */
struct Multires *mr DNA_DEPRECATED;
- void *_pad1;
Mesh_Runtime runtime;
} Mesh;
@@ -250,6 +250,8 @@ enum {
ME_FLAG_UNUSED_8 = 1 << 8, /* cleared */
ME_DS_EXPAND = 1 << 9,
ME_SCULPT_DYNAMIC_TOPOLOGY = 1 << 10,
+ ME_REMESH_SMOOTH_NORMALS = 1 << 11,
+ ME_REMESH_REPROJECT_PAINT_MASK = 1 << 12,
};
/* me->cd_flag */
@@ -267,10 +269,4 @@ enum {
#define MESH_MAX_VERTS 2000000000L
-/* this is so we can save bmesh files that load in trunk, ignoring NGons
- * will eventually be removed */
-
-/* enable this so meshes get tessfaces calculated by default */
-/* #define USE_TESSFACE_DEFAULT */
-
#endif
diff --git a/source/blender/makesdna/DNA_meshdata_types.h b/source/blender/makesdna/DNA_meshdata_types.h
index 88eef05f8be..f6a7a8a5f5b 100644
--- a/source/blender/makesdna/DNA_meshdata_types.h
+++ b/source/blender/makesdna/DNA_meshdata_types.h
@@ -27,8 +27,6 @@
#include "DNA_customdata_types.h"
#include "DNA_listBase.h"
-struct Image;
-
/*tessellation face, see MLoop/MPoly for the real face data*/
typedef struct MFace {
unsigned int v1, v2, v3, v4;
@@ -188,10 +186,6 @@ typedef struct MVertTri {
unsigned int tri[3];
} MVertTri;
-// typedef struct MTexPoly {
-// void *_pad;
-//} MTexPoly;
-
typedef struct MLoopUV {
float uv[2];
int flag;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index a81bff60146..5243dc1aecd 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -29,8 +29,6 @@
*/
struct Mesh;
-struct Scene;
-struct Subdiv;
typedef enum ModifierType {
eModifierType_None = 0,
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index 75c0721f72a..af66add01f3 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -113,7 +113,7 @@ typedef struct bNodeSocket {
short stack_index;
/* XXX deprecated, kept for forward compatibility */
short stack_type DNA_DEPRECATED;
- char draw_shape;
+ char display_shape;
char _pad[3];
/** Cached data from execution. */
@@ -153,11 +153,14 @@ typedef enum eNodeSocketDatatype {
} eNodeSocketDatatype;
/* socket shape */
-typedef enum eNodeSocketDrawShape {
- SOCK_DRAW_SHAPE_CIRCLE = 0,
- SOCK_DRAW_SHAPE_SQUARE = 1,
- SOCK_DRAW_SHAPE_DIAMOND = 2,
-} eNodeSocketDrawShape;
+typedef enum eNodeSocketDisplayShape {
+ SOCK_DISPLAY_SHAPE_CIRCLE = 0,
+ SOCK_DISPLAY_SHAPE_SQUARE = 1,
+ SOCK_DISPLAY_SHAPE_DIAMOND = 2,
+ SOCK_DISPLAY_SHAPE_CIRCLE_DOT = 3,
+ SOCK_DISPLAY_SHAPE_SQUARE_DOT = 4,
+ SOCK_DISPLAY_SHAPE_DIAMOND_DOT = 5,
+} eNodeSocketDisplayShape;
/* socket side (input/output) */
typedef enum eNodeSocketInOut {
@@ -184,6 +187,8 @@ typedef enum eNodeSocketFlag {
/** socket hidden automatically, to distinguish from manually hidden */
SOCK_AUTO_HIDDEN__DEPRECATED = (1 << 8),
SOCK_NO_INTERNAL_LINK = (1 << 9),
+ /** Draw socket in a more compact form. */
+ SOCK_COMPACT = (1 << 10),
} eNodeSocketFlag;
/* limit data in bNode to what we want to see saved? */
@@ -1010,6 +1015,11 @@ typedef struct NodeCryptomatte {
char _pad[4];
} NodeCryptomatte;
+typedef struct NodeDenoise {
+ char hdr;
+ char _pad[7];
+} NodeDenoise;
+
/* script node mode */
#define NODE_SCRIPT_INTERNAL 0
#define NODE_SCRIPT_EXTERNAL 1
@@ -1160,34 +1170,61 @@ typedef struct NodeCryptomatte {
/* math node clamp */
#define SHD_MATH_CLAMP 1
-/* Math node operation/ */
+/* Math node operations. */
enum {
NODE_MATH_ADD = 0,
- NODE_MATH_SUB = 1,
- NODE_MATH_MUL = 2,
+ NODE_MATH_SUBTRACT = 1,
+ NODE_MATH_MULTIPLY = 2,
NODE_MATH_DIVIDE = 3,
- NODE_MATH_SIN = 4,
- NODE_MATH_COS = 5,
- NODE_MATH_TAN = 6,
- NODE_MATH_ASIN = 7,
- NODE_MATH_ACOS = 8,
- NODE_MATH_ATAN = 9,
- NODE_MATH_POW = 10,
- NODE_MATH_LOG = 11,
- NODE_MATH_MIN = 12,
- NODE_MATH_MAX = 13,
+ NODE_MATH_SINE = 4,
+ NODE_MATH_COSINE = 5,
+ NODE_MATH_TANGENT = 6,
+ NODE_MATH_ARCSINE = 7,
+ NODE_MATH_ARCCOSINE = 8,
+ NODE_MATH_ARCTANGENT = 9,
+ NODE_MATH_POWER = 10,
+ NODE_MATH_LOGARITHM = 11,
+ NODE_MATH_MINIMUM = 12,
+ NODE_MATH_MAXIMUM = 13,
NODE_MATH_ROUND = 14,
- NODE_MATH_LESS = 15,
- NODE_MATH_GREATER = 16,
- NODE_MATH_MOD = 17,
- NODE_MATH_ABS = 18,
- NODE_MATH_ATAN2 = 19,
+ NODE_MATH_LESS_THAN = 15,
+ NODE_MATH_GREATER_THAN = 16,
+ NODE_MATH_MODULO = 17,
+ NODE_MATH_ABSOLUTE = 18,
+ NODE_MATH_ARCTAN2 = 19,
NODE_MATH_FLOOR = 20,
NODE_MATH_CEIL = 21,
- NODE_MATH_FRACT = 22,
+ NODE_MATH_FRACTION = 22,
NODE_MATH_SQRT = 23,
};
+/* Vector Math node operations. */
+enum {
+ NODE_VECTOR_MATH_ADD = 0,
+ NODE_VECTOR_MATH_SUBTRACT = 1,
+ NODE_VECTOR_MATH_MULTIPLY = 2,
+ NODE_VECTOR_MATH_DIVIDE = 3,
+
+ NODE_VECTOR_MATH_CROSS_PRODUCT = 4,
+ NODE_VECTOR_MATH_PROJECT = 5,
+ NODE_VECTOR_MATH_REFLECT = 6,
+ NODE_VECTOR_MATH_DOT_PRODUCT = 7,
+
+ NODE_VECTOR_MATH_DISTANCE = 8,
+ NODE_VECTOR_MATH_LENGTH = 9,
+ NODE_VECTOR_MATH_SCALE = 10,
+ NODE_VECTOR_MATH_NORMALIZE = 11,
+
+ NODE_VECTOR_MATH_SNAP = 12,
+ NODE_VECTOR_MATH_FLOOR = 13,
+ NODE_VECTOR_MATH_CEIL = 14,
+ NODE_VECTOR_MATH_MODULO = 15,
+ NODE_VECTOR_MATH_FRACTION = 16,
+ NODE_VECTOR_MATH_ABSOLUTE = 17,
+ NODE_VECTOR_MATH_MINIMUM = 18,
+ NODE_VECTOR_MATH_MAXIMUM = 19,
+};
+
/* mix rgb node flags */
#define SHD_MIXRGB_USE_ALPHA 1
#define SHD_MIXRGB_CLAMP 2
diff --git a/source/blender/makesdna/DNA_object_fluidsim_types.h b/source/blender/makesdna/DNA_object_fluidsim_types.h
index 40502fc27c9..4e821ad5f07 100644
--- a/source/blender/makesdna/DNA_object_fluidsim_types.h
+++ b/source/blender/makesdna/DNA_object_fluidsim_types.h
@@ -32,7 +32,6 @@ extern "C" {
#endif
struct Ipo;
-struct Mesh;
typedef struct FluidVertexVelocity {
float vel[3];
diff --git a/source/blender/makesdna/DNA_object_force_types.h b/source/blender/makesdna/DNA_object_force_types.h
index 2207e08558d..34a1b6d3e0b 100644
--- a/source/blender/makesdna/DNA_object_force_types.h
+++ b/source/blender/makesdna/DNA_object_force_types.h
@@ -271,7 +271,7 @@ typedef struct PointCache {
char name[64];
char prev_name[64];
- char info[64];
+ char info[128];
/** File path, 1024 = FILE_MAX. */
char path[1024];
@@ -497,6 +497,8 @@ typedef struct SoftBody {
#define PTCACHE_FAKE_SMOKE (1 << 12)
#define PTCACHE_IGNORE_CLEAR (1 << 13)
+#define PTCACHE_FLAG_INFO_DIRTY (1 << 14)
+
/* PTCACHE_OUTDATED + PTCACHE_FRAMES_SKIPPED */
#define PTCACHE_REDO_NEEDED 258
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index d9487f4338f..e006014b71f 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -47,7 +47,6 @@ struct Material;
struct Mesh;
struct Object;
struct PartDeflect;
-struct ParticleSystem;
struct Path;
struct RigidBodyOb;
struct SculptSession;
@@ -176,6 +175,11 @@ typedef struct Object_Runtime {
/** Runtime grease pencil drawing data */
struct GpencilBatchCache *gpencil_cache;
+ /** Runtime grease pencil total layers used for evaluated data created by modifiers */
+ int gpencil_tot_layers;
+ char _pad4[4];
+ /** Runtime grease pencil evaluated data created by modifiers */
+ struct bGPDframe *gpencil_evaluated_frames;
void *_pad2; /* Padding is here for win32s unconventional struct alignment rules. */
} Object_Runtime;
diff --git a/source/blender/makesdna/DNA_outliner_types.h b/source/blender/makesdna/DNA_outliner_types.h
index 1462d955f81..9776063f220 100644
--- a/source/blender/makesdna/DNA_outliner_types.h
+++ b/source/blender/makesdna/DNA_outliner_types.h
@@ -60,6 +60,10 @@ enum {
TSE_DRAG_INTO = (1 << 6),
TSE_DRAG_BEFORE = (1 << 7),
TSE_DRAG_AFTER = (1 << 8),
+ /* Needed because outliner-only elements can be active */
+ TSE_ACTIVE = (1 << 9),
+ /* Needed because walk selection should not activate */
+ TSE_ACTIVE_WALK = (1 << 10),
TSE_DRAG_ANY = (TSE_DRAG_INTO | TSE_DRAG_BEFORE | TSE_DRAG_AFTER),
};
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index f0ca4e30cdf..412bf358a44 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -58,8 +58,6 @@ struct MovieClip;
struct Object;
struct Scene;
struct SceneCollection;
-struct SceneStats;
-struct Text;
struct World;
struct bGPdata;
struct bNodeTree;
@@ -1125,7 +1123,7 @@ typedef struct GP_Sculpt_Settings {
/* GP_Sculpt_Settings.flag */
typedef enum eGP_Sculpt_SettingsFlag {
/* only affect selected points */
- GP_SCULPT_SETT_FLAG_SELECT_MASK = (1 << 0),
+ GP_SCULPT_SETT_FLAG_DEPRECATED = (1 << 0),
/* apply brush to position */
GP_SCULPT_SETT_FLAG_APPLY_POSITION = (1 << 1),
/* apply brush to strength */
@@ -1142,6 +1140,16 @@ typedef enum eGP_Sculpt_SettingsFlag {
GP_SCULPT_SETT_FLAG_PRIMITIVE_CURVE = (1 << 7),
} eGP_Sculpt_SettingsFlag;
+/* GP_Sculpt_Settings.gpencil_selectmode_sculpt */
+typedef enum eGP_Sculpt_SelectMaskFlag {
+ /* only affect selected points */
+ GP_SCULPT_MASK_SELECTMODE_POINT = (1 << 0),
+ /* only affect selected strokes */
+ GP_SCULPT_MASK_SELECTMODE_STROKE = (1 << 1),
+ /* only affect selected segmenst */
+ GP_SCULPT_MASK_SELECTMODE_SEGMENT = (1 << 2),
+} eGP_Sculpt_SelectMaskFlag;
+
/* Settings for GP Interpolation Operators */
typedef struct GP_Interpolate_Settings {
/** #eGP_Interpolate_SettingsFlag. */
@@ -1412,8 +1420,10 @@ typedef struct ToolSettings {
/** Default stroke thickness for annotation strokes. */
short annotate_thickness;
- /** Stroke selection mode. */
- short gpencil_selectmode;
+ /** Stroke selection mode for Edit. */
+ char gpencil_selectmode_edit;
+ /** Stroke selection mode for Sculpt. */
+ char gpencil_selectmode_sculpt;
/* Grease Pencil Sculpt */
struct GP_Sculpt_Settings gp_sculpt;
@@ -2008,6 +2018,7 @@ extern const char *RE_engine_id_CYCLES;
/* ToolSettings.transform_flag */
enum {
SCE_XFORM_AXIS_ALIGN = (1 << 0),
+ SCE_XFORM_DATA_ORIGIN = (1 << 1),
};
/* ToolSettings.object_flag */
@@ -2035,11 +2046,15 @@ enum {
#define SCE_SNAP_MODE_FACE (1 << 2)
#define SCE_SNAP_MODE_VOLUME (1 << 3)
#define SCE_SNAP_MODE_INCREMENT (1 << 4)
+#define SCE_SNAP_MODE_EDGE_MIDPOINT (1 << 5)
+#define SCE_SNAP_MODE_EDGE_PERPENDICULAR (1 << 6)
/* ToolSettings.snap_node_mode */
-#define SCE_SNAP_MODE_GRID (1 << 5)
-#define SCE_SNAP_MODE_NODE_X (1 << 6)
-#define SCE_SNAP_MODE_NODE_Y (1 << 7)
+#define SCE_SNAP_MODE_NODE_X (1 << 5)
+#define SCE_SNAP_MODE_NODE_Y (1 << 6)
+
+/* ToolSettings.snap_mode and ToolSettings.snap_node_mode */
+#define SCE_SNAP_MODE_GRID (1 << 7)
/** #ToolSettings.snap_transform_mode_flag */
enum {
@@ -2170,7 +2185,7 @@ typedef enum eSculptFlags {
SCULPT_USE_OPENMP = (1 << 7),
SCULPT_ONLY_DEFORM = (1 << 8),
- SCULPT_SHOW_DIFFUSE = (1 << 9),
+ // SCULPT_SHOW_DIFFUSE = (1 << 9), // deprecated
/* If set, the mesh will be drawn with smooth-shading in
* dynamic-topology mode */
diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h
index 0319993631c..aab71c15e44 100644
--- a/source/blender/makesdna/DNA_screen_types.h
+++ b/source/blender/makesdna/DNA_screen_types.h
@@ -375,6 +375,13 @@ typedef struct ScrArea {
typedef struct ARegion_Runtime {
/* Panel category to use between 'layout' and 'draw'. */
const char *category;
+
+ /**
+ * The visible part of the region, use with region overlap not to draw
+ * on top of the overlapping regions.
+ *
+ * Lazy initialize, zero'd when unset, relative to #ARegion.winrct x/y min. */
+ rcti visible_rect;
} ARegion_Runtime;
typedef struct ARegion {
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index 5240de4aff9..087d30ce312 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -584,7 +584,7 @@ enum {
SEQ_TYPE_LIGHTEN = 44,
SEQ_TYPE_DODGE = 45,
SEQ_TYPE_DARKEN = 46,
- SEQ_TYPE_BURN = 47,
+ SEQ_TYPE_COLOR_BURN = 47,
SEQ_TYPE_LINEAR_BURN = 48,
SEQ_TYPE_OVERLAY = 49,
SEQ_TYPE_HARD_LIGHT = 50,
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 20d4f7d96e4..1691d873f9b 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -244,7 +244,12 @@ typedef struct SpaceOutliner {
char search_string[64];
struct TreeStoreElem search_tse;
- short flag, outlinevis, storeflag, search_flags;
+ short flag, outlinevis, storeflag;
+ char search_flags;
+
+ /** Selection syncing flag (#WM_OUTLINER_SYNC_SELECT_FROM_OBJECT and similar flags). */
+ char sync_select_dirty;
+
int filter;
char filter_state;
char show_restrict_flags;
@@ -263,6 +268,7 @@ typedef enum eSpaceOutliner_Flag {
SO_FLAG_UNUSED_1 = (1 << 2), /* cleared */
SO_HIDE_KEYINGSETINFO = (1 << 3),
SO_SKIP_SORT_ALPHA = (1 << 4),
+ SO_SYNC_SELECT = (1 << 5),
} eSpaceOutliner_Flag;
/* SpaceOutliner.filter */
@@ -283,11 +289,12 @@ typedef enum eSpaceOutliner_Filter {
SO_FILTER_UNUSED_12 = (1 << 12), /* cleared */
SO_FILTER_OB_STATE_VISIBLE = (1 << 13), /* Not set via DNA. */
- SO_FILTER_OB_STATE_SELECTED = (1 << 14), /* Not set via DNA. */
- SO_FILTER_OB_STATE_ACTIVE = (1 << 15), /* Not set via DNA. */
- SO_FILTER_NO_COLLECTION = (1 << 16),
+ SO_FILTER_OB_STATE_HIDDEN = (1 << 14), /* Not set via DNA. */
+ SO_FILTER_OB_STATE_SELECTED = (1 << 15), /* Not set via DNA. */
+ SO_FILTER_OB_STATE_ACTIVE = (1 << 16), /* Not set via DNA. */
+ SO_FILTER_NO_COLLECTION = (1 << 17),
- SO_FILTER_ID_TYPE = (1 << 17),
+ SO_FILTER_ID_TYPE = (1 << 18),
} eSpaceOutliner_Filter;
#define SO_FILTER_OB_TYPE \
@@ -295,7 +302,8 @@ typedef enum eSpaceOutliner_Filter {
SO_FILTER_NO_OB_LAMP | SO_FILTER_NO_OB_CAMERA | SO_FILTER_NO_OB_OTHERS)
#define SO_FILTER_OB_STATE \
- (SO_FILTER_OB_STATE_VISIBLE | SO_FILTER_OB_STATE_SELECTED | SO_FILTER_OB_STATE_ACTIVE)
+ (SO_FILTER_OB_STATE_VISIBLE | SO_FILTER_OB_STATE_HIDDEN | SO_FILTER_OB_STATE_SELECTED | \
+ SO_FILTER_OB_STATE_ACTIVE)
#define SO_FILTER_ANY \
(SO_FILTER_NO_OB_CONTENT | SO_FILTER_NO_CHILDREN | SO_FILTER_OB_TYPE | SO_FILTER_OB_STATE | \
@@ -305,8 +313,9 @@ typedef enum eSpaceOutliner_Filter {
typedef enum eSpaceOutliner_StateFilter {
SO_FILTER_OB_ALL = 0,
SO_FILTER_OB_VISIBLE = 1,
- SO_FILTER_OB_SELECTED = 2,
- SO_FILTER_OB_ACTIVE = 3,
+ SO_FILTER_OB_HIDDEN = 2,
+ SO_FILTER_OB_SELECTED = 3,
+ SO_FILTER_OB_ACTIVE = 4,
} eSpaceOutliner_StateFilter;
/* SpaceOutliner.show_restrict_flags */
@@ -418,8 +427,7 @@ typedef enum eGraphEdit_Flag {
SIPO_NOTRANSKEYCULL = (1 << 1),
/* don't show any keyframe handles at all */
SIPO_NOHANDLES = (1 << 2),
- /* don't show current frame number beside indicator line */
- SIPO_NODRAWCFRANUM = (1 << 3),
+ /* SIPO_NODRAWCFRANUM = (1 << 3), DEPRECATED */
/* show timing in seconds instead of frames */
SIPO_DRAWTIME = (1 << 4),
/* only show keyframes for selected F-Curves */
@@ -494,8 +502,7 @@ typedef enum eSpaceNla_Flag {
/* draw timing in seconds instead of frames */
SNLA_DRAWTIME = (1 << 2),
SNLA_FLAG_UNUSED_3 = (1 << 3),
- /* don't draw frame number beside frame indicator */
- SNLA_NODRAWCFRANUM = (1 << 4),
+ /* SNLA_NODRAWCFRANUM = (1 << 4), DEPRECATED */
/* don't draw influence curves on strips */
SNLA_NOSTRIPCURVES = (1 << 5),
/* don't perform realtime updates */
@@ -579,7 +586,7 @@ typedef enum eSpaceSeq_Flag {
SEQ_DRAW_COLOR_SEPARATED = (1 << 2),
SEQ_SHOW_SAFE_MARGINS = (1 << 3),
SEQ_SHOW_GPENCIL = (1 << 4),
- SEQ_NO_DRAW_CFRANUM = (1 << 5),
+ /* SEQ_NO_DRAW_CFRANUM = (1 << 5), DEPRECATED */
SEQ_USE_ALPHA = (1 << 6), /* use RGBA display mode for preview */
SEQ_ALL_WAVEFORMS = (1 << 7), /* draw all waveforms */
SEQ_NO_WAVEFORMS = (1 << 8), /* draw no waveforms */
@@ -1628,16 +1635,20 @@ typedef enum eSpace_Type {
SPACE_SEQ = 8,
SPACE_TEXT = 9,
#ifdef DNA_DEPRECATED
- SPACE_IMASEL = 10, /* deprecated */
+ SPACE_IMASEL = 10, /* Deprecated */
SPACE_SOUND = 11, /* Deprecated */
#endif
SPACE_ACTION = 12,
SPACE_NLA = 13,
/* TODO: fully deprecate */
SPACE_SCRIPT = 14, /* Deprecated */
- SPACE_TIME = 15, /* Deprecated */
+#ifdef DNA_DEPRECATED
+ SPACE_TIME = 15, /* Deprecated */
+#endif
SPACE_NODE = 16,
- SPACE_LOGIC = 17, /* deprecated */
+#ifdef DNA_DEPRECATED
+ SPACE_LOGIC = 17, /* Deprecated */
+#endif
SPACE_CONSOLE = 18,
SPACE_USERPREF = 19,
SPACE_CLIP = 20,
diff --git a/source/blender/makesdna/DNA_texture_types.h b/source/blender/makesdna/DNA_texture_types.h
index 3fad1c57427..ead1bcc943d 100644
--- a/source/blender/makesdna/DNA_texture_types.h
+++ b/source/blender/makesdna/DNA_texture_types.h
@@ -35,7 +35,6 @@ extern "C" {
struct AnimData;
struct ColorBand;
struct CurveMapping;
-struct ImBuf;
struct Image;
struct Ipo;
struct Object;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 2d3d091c65d..3cb96ce8bf8 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -116,37 +116,37 @@ typedef struct uiStyle {
} uiStyle;
typedef struct uiWidgetColors {
- char outline[4];
- char inner[4];
- char inner_sel[4];
- char item[4];
- char text[4];
- char text_sel[4];
- char shaded;
+ unsigned char outline[4];
+ unsigned char inner[4];
+ unsigned char inner_sel[4];
+ unsigned char item[4];
+ unsigned char text[4];
+ unsigned char text_sel[4];
+ unsigned char shaded;
char _pad0[7];
short shadetop, shadedown;
float roundness;
} uiWidgetColors;
typedef struct uiWidgetStateColors {
- char inner_anim[4];
- char inner_anim_sel[4];
- char inner_key[4];
- char inner_key_sel[4];
- char inner_driven[4];
- char inner_driven_sel[4];
- char inner_overridden[4];
- char inner_overridden_sel[4];
- char inner_changed[4];
- char inner_changed_sel[4];
+ unsigned char inner_anim[4];
+ unsigned char inner_anim_sel[4];
+ unsigned char inner_key[4];
+ unsigned char inner_key_sel[4];
+ unsigned char inner_driven[4];
+ unsigned char inner_driven_sel[4];
+ unsigned char inner_overridden[4];
+ unsigned char inner_overridden_sel[4];
+ unsigned char inner_changed[4];
+ unsigned char inner_changed_sel[4];
float blend;
char _pad0[4];
} uiWidgetStateColors;
typedef struct uiPanelColors {
- char header[4];
- char back[4];
- char sub_back[4];
+ unsigned char header[4];
+ unsigned char back[4];
+ unsigned char sub_back[4];
char _pad0[4];
} uiPanelColors;
@@ -160,13 +160,13 @@ typedef struct ThemeUI {
uiWidgetStateColors wcol_state;
- char widget_emboss[4];
+ unsigned char widget_emboss[4];
/* fac: 0 - 1 for blend factor, width in pixels */
float menu_shadow_fac;
short menu_shadow_width;
- char editor_outline[4];
+ unsigned char editor_outline[4];
char _pad0[2];
float icon_alpha;
@@ -174,28 +174,28 @@ typedef struct ThemeUI {
char _pad[4];
/* Axis Colors */
- char xaxis[4], yaxis[4], zaxis[4];
+ unsigned char xaxis[4], yaxis[4], zaxis[4];
/* Gizmo Colors. */
- char gizmo_hi[4];
- char gizmo_primary[4];
- char gizmo_secondary[4];
- char gizmo_a[4];
- char gizmo_b[4];
+ unsigned char gizmo_hi[4];
+ unsigned char gizmo_primary[4];
+ unsigned char gizmo_secondary[4];
+ unsigned char gizmo_a[4];
+ unsigned char gizmo_b[4];
/* Icon Colors. */
/** Scene items. */
- char icon_scene[4];
+ unsigned char icon_scene[4];
/** Collection items. */
- char icon_collection[4];
+ unsigned char icon_collection[4];
/** Object items. */
- char icon_object[4];
+ unsigned char icon_object[4];
/** Object data items. */
- char icon_object_data[4];
+ unsigned char icon_object_data[4];
/** Modifier and constraint items. */
- char icon_modifier[4];
+ unsigned char icon_modifier[4];
/** Shading related items. */
- char icon_shading[4];
+ unsigned char icon_shading[4];
/** Intensity of the border icons. >0 will render an border around themed
* icons. */
float icon_border_intensity;
@@ -206,216 +206,218 @@ typedef struct ThemeUI {
*/
typedef struct ThemeSpace {
/* main window colors */
- char back[4];
- char back_grad[4];
+ unsigned char back[4];
+ unsigned char back_grad[4];
char show_back_grad;
char _pad0[3];
/** Panel title. */
- char title[4];
- char text[4];
- char text_hi[4];
+ unsigned char title[4];
+ unsigned char text[4];
+ unsigned char text_hi[4];
/* header colors */
/** Region background. */
- char header[4];
+ unsigned char header[4];
/** Unused. */
- char header_title[4];
- char header_text[4];
- char header_text_hi[4];
+ unsigned char header_title[4];
+ unsigned char header_text[4];
+ unsigned char header_text_hi[4];
/* region tabs */
- char tab_active[4];
- char tab_inactive[4];
- char tab_back[4];
- char tab_outline[4];
+ unsigned char tab_active[4];
+ unsigned char tab_inactive[4];
+ unsigned char tab_back[4];
+ unsigned char tab_outline[4];
/* button/tool regions */
/** Region background. */
- char button[4];
+ unsigned char button[4];
/** Panel title. */
- char button_title[4];
- char button_text[4];
- char button_text_hi[4];
+ unsigned char button_title[4];
+ unsigned char button_text[4];
+ unsigned char button_text_hi[4];
/* listview regions */
/** Region background. */
- char list[4];
+ unsigned char list[4];
/** Panel title. */
- char list_title[4];
- char list_text[4];
- char list_text_hi[4];
+ unsigned char list_title[4];
+ unsigned char list_text[4];
+ unsigned char list_text_hi[4];
/* navigation bar regions */
/** Region background. */
- char navigation_bar[4];
+ unsigned char navigation_bar[4];
/** Region background. */
- char execution_buts[4];
+ unsigned char execution_buts[4];
/* note, cannot use name 'panel' because of DNA mapping old files */
uiPanelColors panelcolors;
- char shade1[4];
- char shade2[4];
+ unsigned char shade1[4];
+ unsigned char shade2[4];
- char hilite[4];
- char grid[4];
+ unsigned char hilite[4];
+ unsigned char grid[4];
- char view_overlay[4];
+ unsigned char view_overlay[4];
- char wire[4], wire_edit[4], select[4];
- char lamp[4], speaker[4], empty[4], camera[4];
- char active[4], group[4], group_active[4], transform[4];
- char vertex[4], vertex_select[4], vertex_bevel[4], vertex_unreferenced[4];
- char edge[4], edge_select[4];
- char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4], edge_bevel[4];
+ unsigned char wire[4], wire_edit[4], select[4];
+ unsigned char lamp[4], speaker[4], empty[4], camera[4];
+ unsigned char active[4], group[4], group_active[4], transform[4];
+ unsigned char vertex[4], vertex_select[4], vertex_bevel[4], vertex_unreferenced[4];
+ unsigned char edge[4], edge_select[4];
+ unsigned char edge_seam[4], edge_sharp[4], edge_facesel[4], edge_crease[4], edge_bevel[4];
/** Solid faces. */
- char face[4], face_select[4];
+ unsigned char face[4], face_select[4];
/** selected color. */
- char face_dot[4];
- char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4];
- char normal[4];
- char vertex_normal[4];
- char loop_normal[4];
- char bone_solid[4], bone_pose[4], bone_pose_active[4];
- char strip[4], strip_select[4];
- char cframe[4];
- char time_keyframe[4], time_gp_keyframe[4];
- char freestyle_edge_mark[4], freestyle_face_mark[4];
- char time_scrub_background[4];
+ unsigned char face_dot[4];
+ unsigned char extra_edge_len[4], extra_edge_angle[4], extra_face_angle[4], extra_face_area[4];
+ unsigned char normal[4];
+ unsigned char vertex_normal[4];
+ unsigned char loop_normal[4];
+ unsigned char bone_solid[4], bone_pose[4], bone_pose_active[4];
+ unsigned char strip[4], strip_select[4];
+ unsigned char cframe[4];
+ unsigned char time_keyframe[4], time_gp_keyframe[4];
+ unsigned char freestyle_edge_mark[4], freestyle_face_mark[4];
+ unsigned char time_scrub_background[4];
char _pad5[4];
- char nurb_uline[4], nurb_vline[4];
- char act_spline[4], nurb_sel_uline[4], nurb_sel_vline[4], lastsel_point[4];
+ unsigned char nurb_uline[4], nurb_vline[4];
+ unsigned char act_spline[4], nurb_sel_uline[4], nurb_sel_vline[4], lastsel_point[4];
- char handle_free[4], handle_auto[4], handle_vect[4], handle_align[4], handle_auto_clamped[4];
- char handle_sel_free[4], handle_sel_auto[4], handle_sel_vect[4], handle_sel_align[4],
+ unsigned char handle_free[4], handle_auto[4], handle_vect[4], handle_align[4],
+ handle_auto_clamped[4];
+ unsigned char handle_sel_free[4], handle_sel_auto[4], handle_sel_vect[4], handle_sel_align[4],
handle_sel_auto_clamped[4];
/** Dopesheet. */
- char ds_channel[4], ds_subchannel[4], ds_ipoline[4];
+ unsigned char ds_channel[4], ds_subchannel[4], ds_ipoline[4];
/** Keytypes. */
- char keytype_keyframe[4], keytype_extreme[4], keytype_breakdown[4], keytype_jitter[4],
+ unsigned char keytype_keyframe[4], keytype_extreme[4], keytype_breakdown[4], keytype_jitter[4],
keytype_movehold[4];
/** Keytypes. */
- char keytype_keyframe_select[4], keytype_extreme_select[4], keytype_breakdown_select[4],
+ unsigned char keytype_keyframe_select[4], keytype_extreme_select[4], keytype_breakdown_select[4],
keytype_jitter_select[4], keytype_movehold_select[4];
- char keyborder[4], keyborder_select[4];
+ unsigned char keyborder[4], keyborder_select[4];
char _pad4[3];
- char console_output[4], console_input[4], console_info[4], console_error[4];
- char console_cursor[4], console_select[4];
+ unsigned char console_output[4], console_input[4], console_info[4], console_error[4];
+ unsigned char console_cursor[4], console_select[4];
- char vertex_size, outline_width, obcenter_dia, facedot_size;
- char noodle_curving;
+ unsigned char vertex_size, outline_width, obcenter_dia, facedot_size;
+ unsigned char noodle_curving;
/* syntax for textwindow and nodes */
- char syntaxl[4], syntaxs[4]; // in nodespace used for backdrop matte
- char syntaxb[4], syntaxn[4]; // in nodespace used for color input
- char syntaxv[4], syntaxc[4]; // in nodespace used for converter group
- char syntaxd[4], syntaxr[4]; // in nodespace used for distort
+ unsigned char syntaxl[4], syntaxs[4]; // in nodespace used for backdrop matte
+ unsigned char syntaxb[4], syntaxn[4]; // in nodespace used for color input
+ unsigned char syntaxv[4], syntaxc[4]; // in nodespace used for converter group
+ unsigned char syntaxd[4], syntaxr[4]; // in nodespace used for distort
- char nodeclass_output[4], nodeclass_filter[4];
- char nodeclass_vector[4], nodeclass_texture[4];
- char nodeclass_shader[4], nodeclass_script[4];
- char nodeclass_pattern[4], nodeclass_layout[4];
+ unsigned char nodeclass_output[4], nodeclass_filter[4];
+ unsigned char nodeclass_vector[4], nodeclass_texture[4];
+ unsigned char nodeclass_shader[4], nodeclass_script[4];
+ unsigned char nodeclass_pattern[4], nodeclass_layout[4];
/** For sequence editor. */
- char movie[4], movieclip[4], mask[4], image[4], scene[4], audio[4];
- char effect[4], transition[4], meta[4], text_strip[4];
+ unsigned char movie[4], movieclip[4], mask[4], image[4], scene[4], audio[4];
+ unsigned char effect[4], transition[4], meta[4], text_strip[4];
/** For dopesheet - scale factor for size of keyframes (i.e. height of channels). */
float keyframe_scale_fac;
- char editmesh_active[4];
+ unsigned char editmesh_active[4];
- char handle_vertex[4];
- char handle_vertex_select[4];
+ unsigned char handle_vertex[4];
+ unsigned char handle_vertex_select[4];
- char handle_vertex_size;
+ unsigned char handle_vertex_size;
- char clipping_border_3d[4];
+ unsigned char clipping_border_3d[4];
- char marker_outline[4], marker[4], act_marker[4], sel_marker[4], dis_marker[4], lock_marker[4];
- char bundle_solid[4];
- char path_before[4], path_after[4];
- char camera_path[4];
- char _pad1[2];
+ unsigned char marker_outline[4], marker[4], act_marker[4], sel_marker[4], dis_marker[4],
+ lock_marker[4];
+ unsigned char bundle_solid[4];
+ unsigned char path_before[4], path_after[4];
+ unsigned char camera_path[4];
+ unsigned char _pad1[2];
- char gp_vertex_size;
- char gp_vertex[4], gp_vertex_select[4];
+ unsigned char gp_vertex_size;
+ unsigned char gp_vertex[4], gp_vertex_select[4];
- char preview_back[4];
- char preview_stitch_face[4];
- char preview_stitch_edge[4];
- char preview_stitch_vert[4];
- char preview_stitch_stitchable[4];
- char preview_stitch_unstitchable[4];
- char preview_stitch_active[4];
+ unsigned char preview_back[4];
+ unsigned char preview_stitch_face[4];
+ unsigned char preview_stitch_edge[4];
+ unsigned char preview_stitch_vert[4];
+ unsigned char preview_stitch_stitchable[4];
+ unsigned char preview_stitch_unstitchable[4];
+ unsigned char preview_stitch_active[4];
/** Two uses, for uvs with modifier applied on mesh and uvs during painting. */
- char uv_shadow[4];
+ unsigned char uv_shadow[4];
/** Uvs of other objects. */
- char uv_others[4];
+ unsigned char uv_others[4];
/** Outliner - filter match. */
- char match[4];
+ unsigned char match[4];
/** Outliner - selected item. */
- char selected_highlight[4];
+ unsigned char selected_highlight[4];
/** Outliner - selected object. */
- char selected_object[4];
+ unsigned char selected_object[4];
/** Outliner - active object. */
- char active_object[4];
+ unsigned char active_object[4];
/** Outliner - edited object. */
- char edited_object[4];
+ unsigned char edited_object[4];
/** Outliner - row color difference. */
- char row_alternate[4];
+ unsigned char row_alternate[4];
/** Skin modifier root color. */
- char skin_root[4];
+ unsigned char skin_root[4];
/* NLA */
/** Active Action + Summary Channel. */
- char anim_active[4];
+ unsigned char anim_active[4];
/** Active Action = NULL. */
- char anim_non_active[4];
+ unsigned char anim_non_active[4];
/** Preview range overlay. */
- char anim_preview_range[4];
+ unsigned char anim_preview_range[4];
/** NLA 'Tweaking' action/strip. */
- char nla_tweaking[4];
+ unsigned char nla_tweaking[4];
/** NLA - warning color for duplicate instances of tweaking strip. */
- char nla_tweakdupli[4];
+ unsigned char nla_tweakdupli[4];
/** NLA "Transition" strips. */
- char nla_transition[4], nla_transition_sel[4];
+ unsigned char nla_transition[4], nla_transition_sel[4];
/** NLA "Meta" strips. */
- char nla_meta[4], nla_meta_sel[4];
+ unsigned char nla_meta[4], nla_meta_sel[4];
/** NLA "Sound" strips. */
- char nla_sound[4], nla_sound_sel[4];
+ unsigned char nla_sound[4], nla_sound_sel[4];
/* info */
- char info_selected[4], info_selected_text[4];
- char info_error[4], info_error_text[4];
- char info_warning[4], info_warning_text[4];
- char info_info[4], info_info_text[4];
- char info_debug[4], info_debug_text[4];
+ unsigned char info_selected[4], info_selected_text[4];
+ unsigned char info_error[4], info_error_text[4];
+ unsigned char info_warning[4], info_warning_text[4];
+ unsigned char info_info[4], info_info_text[4];
+ unsigned char info_debug[4], info_debug_text[4];
- char paint_curve_pivot[4];
- char paint_curve_handle[4];
+ unsigned char paint_curve_pivot[4];
+ unsigned char paint_curve_handle[4];
- char metadatabg[4];
- char metadatatext[4];
+ unsigned char metadatabg[4];
+ unsigned char metadatatext[4];
char _pad2[4];
} ThemeSpace;
/* set of colors for use as a custom color set for Objects/Bones wire drawing */
typedef struct ThemeWireColor {
- char solid[4];
- char select[4];
- char active[4];
+ unsigned char solid[4];
+ unsigned char select[4];
+ unsigned char active[4];
/** #eWireColor_Flags. */
short flag;
@@ -735,11 +737,16 @@ typedef struct UserDef {
short autokey_flag;
/** Options for text rendering. */
- short text_render;
- char _pad9;
-
+ char text_render;
char navigation_mode;
+ char _pad9[2];
+
+ /** Turn-table rotation amount per-pixel in radians. Scaled with DPI. */
+ float view_rotate_sensitivity_turntable;
+ /** Track-ball rotation scale. */
+ float view_rotate_sensitivity_trackball;
+
/** From texture.h. */
struct ColorBand coba_weight;
@@ -861,6 +868,7 @@ typedef enum eUserPref_Flag {
USER_NONEGFRAMES = (1 << 24),
USER_TXT_TABSTOSPACES_DISABLE = (1 << 25),
USER_TOOLTIPS_PYTHON = (1 << 26),
+ USER_ADDONS_ENABLED_ONLY = (1 << 27),
} eUserPref_Flag;
typedef enum eUserPref_PrefFlag {
@@ -953,6 +961,7 @@ typedef enum eUserpref_UI_Flag2 {
USER_UIFLAG2_UNUSED_3 = (1 << 3), /* dirty */
} eUserpref_UI_Flag2;
+/** #UserDef.gpu_flag */
typedef enum eUserpref_GPU_Flag {
USER_GPU_FLAG_NO_DEPT_PICK = (1 << 0),
USER_GPU_FLAG_NO_EDIT_MODE_SMOOTH_WIRE = (1 << 1),
@@ -1061,7 +1070,6 @@ typedef enum eText_Draw_Options {
* #UserDef.gp_settings */
typedef enum eGP_UserdefSettings {
GP_PAINT_UNUSED_0 = (1 << 0),
- GP_PAINT_DOSIMPLIFY = (1 << 1),
} eGP_UserdefSettings;
enum {
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index e7a4f9cbd4e..51655790fbd 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -25,11 +25,6 @@
#define __DNA_VIEW3D_TYPES_H__
struct BoundBox;
-struct GPUViewport;
-struct Image;
-struct Material;
-struct MovieClip;
-struct MovieClipUser;
struct Object;
struct RenderEngine;
struct SmoothView3DStore;
@@ -144,7 +139,7 @@ typedef struct View3DCursor {
/** 3D Viewport Shading settings. */
typedef struct View3DShading {
- /** Shading type (VIEW3D_SHADE_SOLID, ..). */
+ /** Shading type (OB_SOLID, ..). */
char type;
/** Runtime, for toggle between rendered viewport. */
char prev_type;
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index 4ccb23045df..57c0a29382d 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -48,7 +48,6 @@ struct PointerRNA;
struct Report;
struct ReportList;
struct Stereo3dFormat;
-struct UndoStep;
struct bContext;
struct bScreen;
struct uiLayout;
@@ -131,12 +130,15 @@ typedef struct wmWindowManager {
ListBase windows;
/** Set on file read. */
- int initialized;
+ short initialized;
/** Indicator whether data was saved. */
short file_saved;
/** Operator stack depth to avoid nested undo pushes. */
short op_undo_depth;
+ /** Set after selection to notify outliner to sync. Stores type of selection */
+ short outliner_sync_select_dirty;
+
/** Operator registry. */
ListBase operators;
@@ -174,7 +176,7 @@ typedef struct wmWindowManager {
/** Indicates whether interface is locked for user interaction. */
char is_interface_locked;
- char par[7];
+ char _pad[7];
struct wmMsgBus *message_bus;
@@ -186,6 +188,18 @@ enum {
WM_KEYCONFIG_IS_INITIALIZED = (1 << 1),
};
+/* wmWindowManager.outliner_sync_select_dirty */
+enum {
+ WM_OUTLINER_SYNC_SELECT_FROM_OBJECT = (1 << 0),
+ WM_OUTLINER_SYNC_SELECT_FROM_EDIT_BONE = (1 << 1),
+ WM_OUTLINER_SYNC_SELECT_FROM_POSE_BONE = (1 << 2),
+ WM_OUTLINER_SYNC_SELECT_FROM_SEQUENCE = (1 << 3),
+};
+
+#define WM_OUTLINER_SYNC_SELECT_FROM_ALL \
+ (WM_OUTLINER_SYNC_SELECT_FROM_OBJECT | WM_OUTLINER_SYNC_SELECT_FROM_EDIT_BONE | \
+ WM_OUTLINER_SYNC_SELECT_FROM_POSE_BONE | WM_OUTLINER_SYNC_SELECT_FROM_SEQUENCE)
+
#define WM_KEYCONFIG_STR_DEFAULT "blender"
/* IME is win32 only! */
diff --git a/source/blender/makesdna/DNA_world_types.h b/source/blender/makesdna/DNA_world_types.h
index 5143f667083..af1e5123dc8 100644
--- a/source/blender/makesdna/DNA_world_types.h
+++ b/source/blender/makesdna/DNA_world_types.h
@@ -29,7 +29,6 @@
struct AnimData;
struct Ipo;
-struct MTex;
struct bNodeTree;
#ifndef MAX_MTEX
diff --git a/source/blender/makesdna/intern/dna_genfile.c b/source/blender/makesdna/intern/dna_genfile.c
index 5252c8f3350..86ba306fc6a 100644
--- a/source/blender/makesdna/intern/dna_genfile.c
+++ b/source/blender/makesdna/intern/dna_genfile.c
@@ -339,7 +339,7 @@ static bool init_structDNA(SDNA *sdna, bool do_endian_swap, const char **r_error
data = (int *)sdna->data;
- /* clear pointers incase of error */
+ /* Clear pointers in case of error. */
sdna->names = NULL;
sdna->types = NULL;
sdna->structs = NULL;
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 30e24917b83..f03aacf8dbd 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -953,8 +953,10 @@ bool RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *v
bool RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop);
bool RNA_property_editable_info(PointerRNA *ptr, PropertyRNA *prop, const char **r_info);
bool RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, int index);
-bool RNA_property_editable_flag(PointerRNA *ptr,
- PropertyRNA *prop); /* without lib check, only checks the flag */
+
+/* without lib check, only checks the flag */
+bool RNA_property_editable_flag(PointerRNA *ptr, PropertyRNA *prop);
+
bool RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop);
bool RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop);
bool RNA_property_overridable_get(PointerRNA *ptr, PropertyRNA *prop);
@@ -1409,8 +1411,8 @@ StructRNA *ID_code_to_RNA_type(short idcode);
#define RNA_POINTER_INVALIDATE(ptr) \
{ \
/* this is checked for validity */ \
- (ptr)->type = /* should not be needed but prevent bad pointer access, just in case */ \
- (ptr)->id.data = NULL; \
+ (ptr)->type = NULL; /* should not be needed but prevent bad pointer access, just in case */ \
+ (ptr)->owner_id = NULL; \
} \
(void)0
@@ -1502,8 +1504,8 @@ bool RNA_struct_override_store(struct Main *bmain,
struct IDOverrideLibrary *override);
void RNA_struct_override_apply(struct Main *bmain,
- struct PointerRNA *ptr_local,
- struct PointerRNA *ptr_override,
+ struct PointerRNA *ptr_dst,
+ struct PointerRNA *ptr_src,
struct PointerRNA *ptr_storage,
struct IDOverrideLibrary *override);
diff --git a/source/blender/makesrna/RNA_types.h b/source/blender/makesrna/RNA_types.h
index c6f1fd337ed..2a341249247 100644
--- a/source/blender/makesrna/RNA_types.h
+++ b/source/blender/makesrna/RNA_types.h
@@ -29,6 +29,7 @@ extern "C" {
struct BlenderRNA;
struct FunctionRNA;
+struct ID;
struct Main;
struct ParameterList;
struct PropertyRNA;
@@ -44,10 +45,7 @@ struct bContext;
* the properties and validate them. */
typedef struct PointerRNA {
- struct {
- void *data;
- } id;
-
+ struct ID *owner_id;
struct StructRNA *type;
void *data;
} PointerRNA;
@@ -105,7 +103,7 @@ typedef enum PropertyUnit {
#define RNA_STACK_ARRAY 32
/**
- * \note Also update enums in bpy_props.c when adding items here.
+ * \note Also update enums in bpy_props.c and rna_rna.c when adding items here.
* Watch it: these values are written to files as part of node socket button subtypes!
*/
typedef enum PropertySubType {
@@ -253,8 +251,13 @@ typedef enum PropertyFlag {
PROP_REGISTER_OPTIONAL = PROP_REGISTER | (1 << 5),
/**
- * Use for arrays or for any data that should not have a reference kept
- * most common case is functions that return arrays where the array.
+ * Use for allocated function return values of arrays or strings
+ * for any data that should not have a reference kept.
+ *
+ * It can be used for properties which are dynamically allocated too.
+ *
+ * \note Currently dynamic sized thick wrapped data isn't supported.
+ * This would be a useful addition and avoid a fixed maximum sized as in done at the moment.
*/
PROP_THICK_WRAP = (1 << 23),
@@ -529,7 +532,7 @@ typedef struct ParameterDynAlloc {
typedef enum FunctionFlag {
/**
* Pass ID owning 'self' data
- * (i.e. ptr->id.data, might be same as self in case data is an ID...).
+ * (i.e. ptr->owner_id, might be same as self in case data is an ID...).
*/
FUNC_USE_SELF_ID = (1 << 11),
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 7c31f078b6d..2745cfa9740 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -364,9 +364,11 @@ add_custom_command(
# Build bf_rna
set(SRC
rna_access.c
+ rna_access_compare_override.c
${GENSRC}
${SRC_RNA_INC}
+ rna_access_internal.h
rna_internal.h
rna_internal_types.h
rna_mesh_utils.h
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c
index 3b9fa40fcae..5aaddc30e07 100644
--- a/source/blender/makesrna/intern/makesrna.c
+++ b/source/blender/makesrna/intern/makesrna.c
@@ -389,7 +389,7 @@ static void rna_print_data_get(FILE *f, PropertyDefRNA *dp)
static void rna_print_id_get(FILE *f, PropertyDefRNA *UNUSED(dp))
{
- fprintf(f, " ID *id = ptr->id.data;\n");
+ fprintf(f, " ID *id = ptr->owner_id;\n");
}
static void rna_construct_function_name(
@@ -2470,7 +2470,7 @@ static void rna_def_struct_function_call_impl_cpp(FILE *f, StructRNA *srna, Func
dsrna = rna_find_struct_def(srna);
if (func->flag & FUNC_USE_SELF_ID) {
- WRITE_PARAM("(::ID *) ptr.id.data");
+ WRITE_PARAM("(::ID *) ptr.owner_id");
}
if ((func->flag & FUNC_NO_SELF) == 0) {
@@ -2579,7 +2579,7 @@ static void rna_def_struct_function_impl_cpp(FILE *f, StructRNA *srna, FunctionD
}
else {
fprintf(f,
- "\t\tRNA_pointer_create((::ID *) ptr.id.data, &RNA_%s, retdata, &result);\n",
+ "\t\tRNA_pointer_create((::ID *) ptr.owner_id, &RNA_%s, retdata, &result);\n",
(const char *)pprop->type);
}
}
@@ -2792,7 +2792,7 @@ static void rna_def_function_funcs(FILE *f, StructDefRNA *dsrna, FunctionDefRNA
/* assign self */
if (func->flag & FUNC_USE_SELF_ID) {
- fprintf(f, "\t_selfid = (struct ID *)_ptr->id.data;\n");
+ fprintf(f, "\t_selfid = (struct ID *)_ptr->owner_id;\n");
}
if ((func->flag & FUNC_NO_SELF) == 0) {
diff --git a/source/blender/makesrna/intern/rna_ID.c b/source/blender/makesrna/intern/rna_ID.c
index 57cdbbadeb8..5a4b4a3fa3d 100644
--- a/source/blender/makesrna/intern/rna_ID.c
+++ b/source/blender/makesrna/intern/rna_ID.c
@@ -620,9 +620,9 @@ static int rna_IDPArray_length(PointerRNA *ptr)
int rna_IDMaterials_assign_int(PointerRNA *ptr, int key, const PointerRNA *assign_ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
short *totcol = give_totcolp_id(id);
- Material *mat_id = assign_ptr->id.data;
+ Material *mat_id = (Material *)assign_ptr->owner_id;
if (totcol && (key >= 0 && key < *totcol)) {
BLI_assert(BKE_id_is_in_global_main(id));
BLI_assert(BKE_id_is_in_global_main(&mat_id->id));
@@ -642,8 +642,7 @@ static void rna_IDMaterials_append_id(ID *id, Main *bmain, Material *ma)
WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, id);
}
-static Material *rna_IDMaterials_pop_id(
- ID *id, Main *bmain, ReportList *reports, int index_i, bool remove_material_slot)
+static Material *rna_IDMaterials_pop_id(ID *id, Main *bmain, ReportList *reports, int index_i)
{
Material *ma;
short *totcol = give_totcolp_id(id);
@@ -657,7 +656,7 @@ static Material *rna_IDMaterials_pop_id(
return NULL;
}
- ma = BKE_material_pop_id(bmain, id, index_i, remove_material_slot);
+ ma = BKE_material_pop_id(bmain, id, index_i);
if (*totcol == totcol_orig) {
BKE_report(reports, RPT_ERROR, "No material to removed");
@@ -671,9 +670,9 @@ static Material *rna_IDMaterials_pop_id(
return ma;
}
-static void rna_IDMaterials_clear_id(ID *id, Main *bmain, bool remove_material_slot)
+static void rna_IDMaterials_clear_id(ID *id, Main *bmain)
{
- BKE_material_clear_id(bmain, id, remove_material_slot);
+ BKE_material_clear_id(bmain, id);
DEG_id_tag_update(id, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, id);
@@ -691,7 +690,7 @@ static void rna_Library_filepath_set(PointerRNA *ptr, const char *value)
static void rna_ImagePreview_is_custom_set(PointerRNA *ptr, int value, enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
if (id != NULL) {
@@ -717,7 +716,7 @@ static void rna_ImagePreview_is_custom_set(PointerRNA *ptr, int value, enum eIco
static void rna_ImagePreview_size_get(PointerRNA *ptr, int *values, enum eIconSizes size)
{
- ID *id = (ID *)ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
if (id != NULL) {
@@ -732,7 +731,7 @@ static void rna_ImagePreview_size_get(PointerRNA *ptr, int *values, enum eIconSi
static void rna_ImagePreview_size_set(PointerRNA *ptr, const int *values, enum eIconSizes size)
{
- ID *id = (ID *)ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
if (id != NULL) {
@@ -755,7 +754,7 @@ static int rna_ImagePreview_pixels_get_length(PointerRNA *ptr,
int length[RNA_MAX_ARRAY_DIMENSION],
enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
if (id != NULL) {
@@ -771,7 +770,7 @@ static int rna_ImagePreview_pixels_get_length(PointerRNA *ptr,
static void rna_ImagePreview_pixels_get(PointerRNA *ptr, int *values, enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
if (id != NULL) {
@@ -785,7 +784,7 @@ static void rna_ImagePreview_pixels_get(PointerRNA *ptr, int *values, enum eIcon
static void rna_ImagePreview_pixels_set(PointerRNA *ptr, const int *values, enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
if (id != NULL) {
@@ -800,7 +799,7 @@ static int rna_ImagePreview_pixels_float_get_length(PointerRNA *ptr,
int length[RNA_MAX_ARRAY_DIMENSION],
enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
BLI_assert(sizeof(unsigned int) == 4);
@@ -818,7 +817,7 @@ static int rna_ImagePreview_pixels_float_get_length(PointerRNA *ptr,
static void rna_ImagePreview_pixels_float_get(PointerRNA *ptr, float *values, enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
unsigned char *data = (unsigned char *)prv_img->rect[size];
@@ -842,7 +841,7 @@ static void rna_ImagePreview_pixels_float_set(PointerRNA *ptr,
const float *values,
enum eIconSizes size)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
PreviewImage *prv_img = (PreviewImage *)ptr->data;
unsigned char *data = (unsigned char *)prv_img->rect[size];
@@ -959,7 +958,7 @@ static int rna_ImagePreview_icon_id_get(PointerRNA *ptr)
{
/* Using a callback here allows us to only generate icon matching
* that preview when icon_id is requested. */
- return BKE_icon_preview_ensure(ptr->id.data, (PreviewImage *)(ptr->data));
+ return BKE_icon_preview_ensure(ptr->owner_id, (PreviewImage *)(ptr->data));
}
static void rna_ImagePreview_icon_reload(PreviewImage *prv)
{
@@ -1116,16 +1115,12 @@ static void rna_def_ID_materials(BlenderRNA *brna)
RNA_def_function_ui_description(func, "Remove a material from the data-block");
parm = RNA_def_int(
func, "index", -1, -MAXMAT, MAXMAT, "", "Index of material to remove", 0, MAXMAT);
- RNA_def_boolean(
- func, "update_data", 0, "", "Update data by re-adjusting the material slots assigned");
parm = RNA_def_pointer(func, "material", "Material", "", "Material to remove");
RNA_def_function_return(func, parm);
func = RNA_def_function(srna, "clear", "rna_IDMaterials_clear_id");
RNA_def_function_flag(func, FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Remove all materials from the data-block");
- RNA_def_boolean(
- func, "update_data", 0, "", "Update data by re-adjusting the material slots assigned");
}
static void rna_def_image_preview(BlenderRNA *brna)
@@ -1455,6 +1450,7 @@ static void rna_def_ID(BlenderRNA *brna)
"Actual data-block from .blend file (Main database) that generated that evaluated one");
RNA_def_property_pointer_funcs(prop, "rna_ID_original_get", NULL, NULL, NULL);
RNA_def_property_clear_flag(prop, PROP_EDITABLE | PROP_PTR_NO_OWNERSHIP);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
prop = RNA_def_property(srna, "users", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "us");
@@ -1483,6 +1479,7 @@ static void rna_def_ID(BlenderRNA *brna)
prop = RNA_def_property(srna, "library", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "lib");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_ui_text(prop, "Library", "Library file the data-block is linked from");
prop = RNA_def_pointer(
@@ -1607,6 +1604,7 @@ static void rna_def_library(BlenderRNA *brna)
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Library");
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_ui_text(prop, "Parent", "");
prop = RNA_def_property(srna, "packed_file", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 731f549b497..8327456f460 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -37,10 +37,6 @@
#include "BLI_ghash.h"
#include "BLI_math.h"
-#ifdef DEBUG_OVERRIDE_TIMEIT
-# include "PIL_time_utildefines.h"
-#endif
-
#include "BLF_api.h"
#include "BLT_translation.h"
@@ -49,7 +45,6 @@
#include "BKE_idcode.h"
#include "BKE_idprop.h"
#include "BKE_fcurve.h"
-#include "BKE_library_override.h"
#include "BKE_main.h"
#include "BKE_report.h"
@@ -67,8 +62,9 @@
#include "WM_types.h"
#include "rna_internal.h"
+#include "rna_access_internal.h"
-const PointerRNA PointerRNA_NULL = {{NULL}};
+const PointerRNA PointerRNA_NULL = {NULL};
/* Init/Exit */
@@ -116,7 +112,7 @@ void RNA_exit(void)
void RNA_main_pointer_create(struct Main *main, PointerRNA *r_ptr)
{
- r_ptr->id.data = NULL;
+ r_ptr->owner_id = NULL;
r_ptr->type = &RNA_BlendData;
r_ptr->data = main;
}
@@ -126,7 +122,7 @@ void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
StructRNA *type, *idtype = NULL;
if (id) {
- PointerRNA tmp = {{NULL}};
+ PointerRNA tmp = {NULL};
tmp.data = id;
idtype = rna_ID_refine(&tmp);
@@ -142,7 +138,7 @@ void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
}
}
- r_ptr->id.data = id;
+ r_ptr->owner_id = id;
r_ptr->type = idtype;
r_ptr->data = id;
}
@@ -153,13 +149,13 @@ void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
StructRNA *idtype = NULL;
if (id) {
- PointerRNA tmp = {{0}};
+ PointerRNA tmp = {0};
tmp.data = id;
idtype = rna_ID_refine(&tmp);
}
#endif
- r_ptr->id.data = id;
+ r_ptr->owner_id = id;
r_ptr->type = type;
r_ptr->data = data;
@@ -179,22 +175,22 @@ void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
bool RNA_pointer_is_null(const PointerRNA *ptr)
{
- return !((ptr->data != NULL) && (ptr->id.data != NULL) && (ptr->type != NULL));
+ return !((ptr->data != NULL) && (ptr->owner_id != NULL) && (ptr->type != NULL));
}
static void rna_pointer_inherit_id(StructRNA *type, PointerRNA *parent, PointerRNA *ptr)
{
if (type && type->flag & STRUCT_ID) {
- ptr->id.data = ptr->data;
+ ptr->owner_id = ptr->data;
}
else {
- ptr->id.data = parent->id.data;
+ ptr->owner_id = parent->owner_id;
}
}
void RNA_blender_rna_pointer_create(PointerRNA *r_ptr)
{
- r_ptr->id.data = NULL;
+ r_ptr->owner_id = NULL;
r_ptr->type = &RNA_BlenderRNA;
r_ptr->data = &BLENDER_RNA;
}
@@ -229,7 +225,7 @@ void RNA_pointer_recast(PointerRNA *ptr, PointerRNA *r_ptr)
#if 0 /* works but this case if covered by more general code below. */
if (RNA_struct_is_ID(ptr->type)) {
/* simple case */
- RNA_id_pointer_create(ptr->id.data, r_ptr);
+ RNA_id_pointer_create(ptr->owner_id, r_ptr);
}
else
#endif
@@ -249,7 +245,7 @@ void RNA_pointer_recast(PointerRNA *ptr, PointerRNA *r_ptr)
/* ID Properties */
-static void rna_idproperty_touch(IDProperty *idprop)
+void rna_idproperty_touch(IDProperty *idprop)
{
/* so the property is seen as 'set' by rna */
idprop->flag &= ~IDP_FLAG_GHOST;
@@ -619,7 +615,7 @@ PropertyRNA *rna_ensure_property_realdata(PropertyRNA **prop, PointerRNA *ptr)
return rna_idproperty_check_ex(prop, ptr, true);
}
-static PropertyRNA *rna_ensure_property(PropertyRNA *prop)
+PropertyRNA *rna_ensure_property(PropertyRNA *prop)
{
/* the quick version if we don't need the idproperty */
@@ -1136,12 +1132,34 @@ PropertyType RNA_property_type(PropertyRNA *prop)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
{
- return rna_ensure_property(prop)->subtype;
+ PropertyRNA *rna_prop = rna_ensure_property(prop);
+
+ /* For custom properties, find and parse the 'subtype' metadata field. */
+ if (prop->magic != RNA_MAGIC) {
+ IDProperty *idprop = (IDProperty *)prop;
+
+ /* Restrict to arrays only for now for performance reasons. */
+ if (idprop->type == IDP_ARRAY && ELEM(idprop->subtype, IDP_INT, IDP_FLOAT, IDP_DOUBLE)) {
+ IDProperty *idp_ui = rna_idproperty_ui(prop);
+
+ if (idp_ui) {
+ IDProperty *item = IDP_GetPropertyTypeFromGroup(idp_ui, "subtype", IDP_STRING);
+
+ if (item) {
+ int result = PROP_NONE;
+ RNA_enum_value_from_id(rna_enum_property_subtype_items, IDP_String(item), &result);
+ return (PropertySubType)result;
+ }
+ }
+ }
+ }
+
+ return rna_prop->subtype;
}
PropertyUnit RNA_property_unit(PropertyRNA *prop)
{
- return RNA_SUBTYPE_UNIT(rna_ensure_property(prop)->subtype);
+ return RNA_SUBTYPE_UNIT(RNA_property_subtype(prop));
}
int RNA_property_flag(PropertyRNA *prop)
@@ -1149,11 +1167,6 @@ int RNA_property_flag(PropertyRNA *prop)
return rna_ensure_property(prop)->flag;
}
-int RNA_property_override_flag(PropertyRNA *prop)
-{
- return rna_ensure_property(prop)->flag_override;
-}
-
/**
* Get the tags set for \a prop as int bitfield.
* \note Doesn't perform any validity check on the set bits. #RNA_def_property_tags does this
@@ -1212,7 +1225,7 @@ char RNA_property_array_item_char(PropertyRNA *prop, int index)
const char *vectoritem = "XYZW";
const char *quatitem = "WXYZ";
const char *coloritem = "RGBA";
- PropertySubType subtype = rna_ensure_property(prop)->subtype;
+ PropertySubType subtype = RNA_property_subtype(prop);
BLI_assert(index >= 0);
@@ -1240,6 +1253,7 @@ char RNA_property_array_item_char(PropertyRNA *prop, int index)
int RNA_property_array_item_index(PropertyRNA *prop, char name)
{
+ /* Don't use custom property subtypes in RNA path lookup. */
PropertySubType subtype = rna_ensure_property(prop)->subtype;
/* get index based on string name/alias */
@@ -2044,7 +2058,7 @@ int RNA_property_ui_icon(PropertyRNA *prop)
bool RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
int flag;
const char *dummy_info;
@@ -2062,7 +2076,7 @@ bool RNA_property_editable(PointerRNA *ptr, PropertyRNA *prop)
*/
bool RNA_property_editable_info(PointerRNA *ptr, PropertyRNA *prop, const char **r_info)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
int flag;
prop = rna_ensure_property(prop);
@@ -2129,7 +2143,7 @@ bool RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, int index)
flag &= prop->itemeditable(ptr, index);
}
- id = ptr->id.data;
+ id = ptr->owner_id;
return (flag & PROP_EDITABLE) && (!id || !ID_IS_LINKED(id) || (prop->flag & PROP_LIB_EXCEPTION));
}
@@ -2137,7 +2151,7 @@ bool RNA_property_editable_index(PointerRNA *ptr, PropertyRNA *prop, int index)
bool RNA_property_animateable(PointerRNA *ptr, PropertyRNA *prop)
{
/* check that base ID-block can support animation data */
- if (!id_can_have_animdata(ptr->id.data)) {
+ if (!id_can_have_animdata(ptr->owner_id)) {
return false;
}
@@ -2171,77 +2185,6 @@ bool RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop)
return false;
}
-
-/** \note Does not take into account editable status, this has to be checked separately
- * (using #RNA_property_editable_flag() usually). */
-bool RNA_property_overridable_get(PointerRNA *ptr, PropertyRNA *prop)
-{
- if (prop->magic == RNA_MAGIC) {
- /* Special handling for insertions of constraints or modifiers... */
- /* TODO Note We may want to add a more generic system to RNA
- * (like a special property in struct of items)
- * if we get more overrideable collections,
- * for now we can live with those special-cases handling I think. */
- if (RNA_struct_is_a(ptr->type, &RNA_Constraint)) {
- bConstraint *con = ptr->data;
- if (con->flag & CONSTRAINT_OVERRIDE_LIBRARY_LOCAL) {
- return true;
- }
- }
- else if (RNA_struct_is_a(ptr->type, &RNA_Modifier)) {
- ModifierData *mod = ptr->data;
- if (mod->flag & eModifierFlag_OverrideLibrary_Local) {
- return true;
- }
- }
- /* If this is a RNA-defined property (real or 'virtual' IDProp),
- * we want to use RNA prop flag. */
- return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON) &&
- (prop->flag_override & PROPOVERRIDE_OVERRIDABLE_LIBRARY);
- }
- else {
- /* If this is a real 'pure' IDProp (aka custom property), we want to use the IDProp flag. */
- return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON) &&
- (((IDProperty *)prop)->flag & IDP_FLAG_OVERRIDABLE_LIBRARY);
- }
-}
-
-/* Should only be used for custom properties */
-bool RNA_property_overridable_library_set(PointerRNA *UNUSED(ptr),
- PropertyRNA *prop,
- const bool is_overridable)
-{
- /* Only works for pure custom properties IDProps. */
- if (prop->magic != RNA_MAGIC) {
- IDProperty *idprop = (IDProperty *)prop;
-
- idprop->flag = is_overridable ? (idprop->flag | IDP_FLAG_OVERRIDABLE_LIBRARY) :
- (idprop->flag & ~IDP_FLAG_OVERRIDABLE_LIBRARY);
- return true;
- }
-
- return false;
-}
-
-bool RNA_property_overridden(PointerRNA *ptr, PropertyRNA *prop)
-{
- char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
- ID *id = ptr->id.data;
-
- if (rna_path == NULL || id == NULL || id->override_library == NULL) {
- return false;
- }
-
- return (BKE_override_library_property_find(id->override_library, rna_path) != NULL);
-}
-
-bool RNA_property_comparable(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
-{
- prop = rna_ensure_property(prop);
-
- return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON);
-}
-
/* this function is to check if its possible to create a valid path from the ID
* its slow so don't call in a loop */
bool RNA_property_path_from_ID_check(PointerRNA *ptr, PropertyRNA *prop)
@@ -2254,7 +2197,7 @@ bool RNA_property_path_from_ID_check(PointerRNA *ptr, PropertyRNA *prop)
PointerRNA r_ptr;
PropertyRNA *r_prop;
- RNA_id_pointer_create(ptr->id.data, &id_ptr);
+ RNA_id_pointer_create(ptr->owner_id, &id_ptr);
if (RNA_path_resolve(&id_ptr, path, &r_ptr, &r_prop) == true) {
ret = (prop == r_prop);
}
@@ -2293,7 +2236,7 @@ static void rna_property_update(
/* TODO(campbell): Should eventually be replaced entirely by message bus (below)
* for now keep since COW, bugs are hard to track when we have other missing updates. */
if (prop->noteflag) {
- WM_main_add_notifier(prop->noteflag, ptr->id.data);
+ WM_main_add_notifier(prop->noteflag, ptr->owner_id);
}
#endif
@@ -2304,10 +2247,10 @@ static void rna_property_update(
/* we could add NULL check, for now don't */
WM_msg_publish_rna(mbus, ptr, prop);
}
- if (ptr->id.data != NULL && ((prop->flag & PROP_NO_DEG_UPDATE) == 0)) {
- const short id_type = GS(((ID *)ptr->id.data)->name);
+ if (ptr->owner_id != NULL && ((prop->flag & PROP_NO_DEG_UPDATE) == 0)) {
+ const short id_type = GS(ptr->owner_id->name);
if (ID_TYPE_IS_COW(id_type)) {
- DEG_id_tag_update(ptr->id.data, ID_RECALC_COPY_ON_WRITE);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_COPY_ON_WRITE);
}
}
/* End message bus. */
@@ -2316,14 +2259,14 @@ static void rna_property_update(
if (!is_rna || (prop->flag & PROP_IDPROPERTY)) {
/* WARNING! This is so property drivers update the display!
* not especially nice */
- DEG_id_tag_update(ptr->id.data,
+ DEG_id_tag_update(ptr->owner_id,
ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_PARAMETERS);
WM_main_add_notifier(NC_WINDOW, NULL);
/* Not nice as well, but the only way to make sure material preview
* is updated with custom nodes.
*/
- if ((prop->flag & PROP_IDPROPERTY) != 0 && (ptr->id.data != NULL) &&
- (GS(((ID *)ptr->id.data)->name) == ID_NT)) {
+ if ((prop->flag & PROP_IDPROPERTY) != 0 && (ptr->owner_id != NULL) &&
+ (GS(ptr->owner_id->name) == ID_NT)) {
WM_main_add_notifier(NC_MATERIAL | ND_SHADING, NULL);
}
}
@@ -2356,7 +2299,7 @@ void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, Proper
* property updates to actually work).
*
* The cache is structured with a dual-layer structure
- * - L1 = PointerRNA used as key; id.data is used (it should always be defined,
+ * - L1 = PointerRNA used as key; owner_id is used (it should always be defined,
* and most updates end up using just that anyways)
* - L2 = Update functions to be called on those PointerRNA's
*/
@@ -2400,7 +2343,7 @@ void RNA_property_update_cache_add(PointerRNA *ptr, PropertyRNA *prop)
* since most update calls that we'll encounter only really care about this. */
/* TODO: later, the cache might need to have some nesting on L1 to cope better
* with these problems + some tagging to indicate we need this */
- if (uce->ptr.id.data == ptr->id.data) {
+ if (uce->ptr.owner_id == ptr->owner_id) {
break;
}
}
@@ -2410,7 +2353,7 @@ void RNA_property_update_cache_add(PointerRNA *ptr, PropertyRNA *prop)
BLI_addtail(&rna_updates_cache, uce);
/* copy pointer */
- RNA_pointer_create(ptr->id.data, ptr->type, ptr->data, &uce->ptr);
+ RNA_pointer_create(ptr->owner_id, ptr->type, ptr->data, &uce->ptr);
}
/* check on the update func */
@@ -2522,20 +2465,33 @@ void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
}
}
-static void rna_property_boolean_get_default_array_values(BoolPropertyRNA *bprop, bool *values)
+static void rna_property_boolean_fill_default_array_values(
+ const bool *defarr, int defarr_length, bool defvalue, int out_length, bool *r_values)
{
- unsigned int length = bprop->property.totarraylength;
-
- if (bprop->defaultarray) {
- memcpy(values, bprop->defaultarray, sizeof(bool) * length);
+ if (defarr && defarr_length > 0) {
+ defarr_length = MIN2(defarr_length, out_length);
+ memcpy(r_values, defarr, sizeof(bool) * defarr_length);
}
else {
- for (unsigned int i = 0; i < length; i++) {
- values[i] = bprop->defaultvalue;
- }
+ defarr_length = 0;
+ }
+
+ for (int i = defarr_length; i < out_length; i++) {
+ r_values[i] = defvalue;
}
}
+static void rna_property_boolean_get_default_array_values(PointerRNA *ptr,
+ BoolPropertyRNA *bprop,
+ bool *r_values)
+{
+ int length = bprop->property.totarraylength;
+ int out_length = RNA_property_array_length(ptr, (PropertyRNA *)bprop);
+
+ rna_property_boolean_fill_default_array_values(
+ bprop->defaultarray, length, bprop->defaultvalue, out_length, r_values);
+}
+
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
{
BoolPropertyRNA *bprop = (BoolPropertyRNA *)prop;
@@ -2565,7 +2521,7 @@ void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *va
bprop->getarray_ex(ptr, prop, values);
}
else {
- rna_property_boolean_get_default_array_values(bprop, values);
+ rna_property_boolean_get_default_array_values(ptr, bprop, values);
}
}
@@ -2684,9 +2640,7 @@ bool RNA_property_boolean_get_default(PointerRNA *UNUSED(ptr), PropertyRNA *prop
return bprop->defaultvalue;
}
-void RNA_property_boolean_get_default_array(PointerRNA *UNUSED(ptr),
- PropertyRNA *prop,
- bool *values)
+void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
{
BoolPropertyRNA *bprop = (BoolPropertyRNA *)rna_ensure_property(prop);
@@ -2697,7 +2651,7 @@ void RNA_property_boolean_get_default_array(PointerRNA *UNUSED(ptr),
values[0] = bprop->defaultvalue;
}
else {
- rna_property_boolean_get_default_array_values(bprop, values);
+ rna_property_boolean_get_default_array_values(ptr, bprop, values);
}
}
@@ -2709,7 +2663,7 @@ bool RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop,
BLI_assert(RNA_property_type(prop) == PROP_BOOLEAN);
BLI_assert(RNA_property_array_check(prop) != false);
BLI_assert(index >= 0);
- BLI_assert(index < prop->totarraylength);
+ BLI_assert(index < len);
if (len <= RNA_MAX_ARRAY_LENGTH) {
RNA_property_boolean_get_default_array(ptr, prop, tmp);
@@ -2785,20 +2739,33 @@ void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
}
}
-static void rna_property_int_get_default_array_values(IntPropertyRNA *iprop, int *values)
+static void rna_property_int_fill_default_array_values(
+ const int *defarr, int defarr_length, int defvalue, int out_length, int *r_values)
{
- unsigned int length = iprop->property.totarraylength;
-
- if (iprop->defaultarray) {
- memcpy(values, iprop->defaultarray, sizeof(int) * length);
+ if (defarr && defarr_length > 0) {
+ defarr_length = MIN2(defarr_length, out_length);
+ memcpy(r_values, defarr, sizeof(int) * defarr_length);
}
else {
- for (unsigned int i = 0; i < length; i++) {
- values[i] = iprop->defaultvalue;
- }
+ defarr_length = 0;
+ }
+
+ for (int i = defarr_length; i < out_length; i++) {
+ r_values[i] = defvalue;
}
}
+static void rna_property_int_get_default_array_values(PointerRNA *ptr,
+ IntPropertyRNA *iprop,
+ int *r_values)
+{
+ int length = iprop->property.totarraylength;
+ int out_length = RNA_property_array_length(ptr, (PropertyRNA *)iprop);
+
+ rna_property_int_fill_default_array_values(
+ iprop->defaultarray, length, iprop->defaultvalue, out_length, r_values);
+}
+
void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
{
IntPropertyRNA *iprop = (IntPropertyRNA *)prop;
@@ -2827,7 +2794,7 @@ void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
iprop->getarray_ex(ptr, prop, values);
}
else {
- rna_property_int_get_default_array_values(iprop, values);
+ rna_property_int_get_default_array_values(ptr, iprop, values);
}
}
@@ -2999,18 +2966,34 @@ bool RNA_property_int_set_default(PointerRNA *ptr, PropertyRNA *prop, int value)
}
}
-void RNA_property_int_get_default_array(PointerRNA *UNUSED(ptr), PropertyRNA *prop, int *values)
+void RNA_property_int_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
{
IntPropertyRNA *iprop = (IntPropertyRNA *)rna_ensure_property(prop);
BLI_assert(RNA_property_type(prop) == PROP_INT);
BLI_assert(RNA_property_array_check(prop) != false);
- if (prop->arraydimension == 0) {
+ if (prop->magic != RNA_MAGIC) {
+ int length = rna_ensure_property_array_length(ptr, prop);
+
+ IDProperty *idp_ui = rna_idproperty_ui(prop);
+ IDProperty *item = idp_ui ? IDP_GetPropertyFromGroup(idp_ui, "default") : NULL;
+
+ int defval = (item && item->type == IDP_INT) ? IDP_Int(item) : iprop->defaultvalue;
+
+ if (item && item->type == IDP_ARRAY && item->subtype == IDP_INT) {
+ rna_property_int_fill_default_array_values(
+ IDP_Array(item), item->len, defval, length, values);
+ }
+ else {
+ rna_property_int_fill_default_array_values(NULL, 0, defval, length, values);
+ }
+ }
+ else if (prop->arraydimension == 0) {
values[0] = iprop->defaultvalue;
}
else {
- rna_property_int_get_default_array_values(iprop, values);
+ rna_property_int_get_default_array_values(ptr, iprop, values);
}
}
@@ -3022,7 +3005,7 @@ int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int i
BLI_assert(RNA_property_type(prop) == PROP_INT);
BLI_assert(RNA_property_array_check(prop) != false);
BLI_assert(index >= 0);
- BLI_assert(index < prop->totarraylength);
+ BLI_assert(index < len);
if (len <= RNA_MAX_ARRAY_LENGTH) {
RNA_property_int_get_default_array(ptr, prop, tmp);
@@ -3109,18 +3092,31 @@ void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
}
}
-static void rna_property_float_get_default_array_values(FloatPropertyRNA *fprop, float *values)
+static void rna_property_float_fill_default_array_values(
+ const float *defarr, int defarr_length, float defvalue, int out_length, float *r_values)
{
- unsigned int length = fprop->property.totarraylength;
-
- if (fprop->defaultarray) {
- memcpy(values, fprop->defaultarray, sizeof(float) * length);
+ if (defarr && defarr_length > 0) {
+ defarr_length = MIN2(defarr_length, out_length);
+ memcpy(r_values, defarr, sizeof(float) * defarr_length);
}
else {
- for (unsigned int i = 0; i < length; i++) {
- values[i] = fprop->defaultvalue;
- }
+ defarr_length = 0;
}
+
+ for (int i = defarr_length; i < out_length; i++) {
+ r_values[i] = defvalue;
+ }
+}
+
+static void rna_property_float_get_default_array_values(PointerRNA *ptr,
+ FloatPropertyRNA *fprop,
+ float *r_values)
+{
+ int length = fprop->property.totarraylength;
+ int out_length = RNA_property_array_length(ptr, (PropertyRNA *)fprop);
+
+ rna_property_float_fill_default_array_values(
+ fprop->defaultarray, length, fprop->defaultvalue, out_length, r_values);
}
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
@@ -3157,7 +3153,7 @@ void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *val
fprop->getarray_ex(ptr, prop, values);
}
else {
- rna_property_float_get_default_array_values(fprop, values);
+ rna_property_float_get_default_array_values(ptr, fprop, values);
}
}
@@ -3343,20 +3339,40 @@ bool RNA_property_float_set_default(PointerRNA *ptr, PropertyRNA *prop, float va
}
}
-void RNA_property_float_get_default_array(PointerRNA *UNUSED(ptr),
- PropertyRNA *prop,
- float *values)
+void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
{
FloatPropertyRNA *fprop = (FloatPropertyRNA *)rna_ensure_property(prop);
BLI_assert(RNA_property_type(prop) == PROP_FLOAT);
BLI_assert(RNA_property_array_check(prop) != false);
- if (prop->arraydimension == 0) {
+ if (prop->magic != RNA_MAGIC) {
+ int length = rna_ensure_property_array_length(ptr, prop);
+
+ IDProperty *idp_ui = rna_idproperty_ui(prop);
+ IDProperty *item = idp_ui ? IDP_GetPropertyFromGroup(idp_ui, "default") : NULL;
+
+ float defval = (item && item->type == IDP_DOUBLE) ? IDP_Double(item) : fprop->defaultvalue;
+
+ if (item && item->type == IDP_ARRAY && item->subtype == IDP_DOUBLE) {
+ double *defarr = IDP_Array(item);
+ for (int i = 0; i < length; i++) {
+ values[i] = (i < item->len) ? (float)defarr[i] : defval;
+ }
+ }
+ else if (item && item->type == IDP_ARRAY && item->subtype == IDP_FLOAT) {
+ rna_property_float_fill_default_array_values(
+ IDP_Array(item), item->len, defval, length, values);
+ }
+ else {
+ rna_property_float_fill_default_array_values(NULL, 0, defval, length, values);
+ }
+ }
+ else if (prop->arraydimension == 0) {
values[0] = fprop->defaultvalue;
}
else {
- rna_property_float_get_default_array_values(fprop, values);
+ rna_property_float_get_default_array_values(ptr, fprop, values);
}
}
@@ -3368,7 +3384,7 @@ float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, i
BLI_assert(RNA_property_type(prop) == PROP_FLOAT);
BLI_assert(RNA_property_array_check(prop) != false);
BLI_assert(index >= 0);
- BLI_assert(index < prop->totarraylength);
+ BLI_assert(index < len);
if (len <= RNA_MAX_ARRAY_LENGTH) {
RNA_property_float_get_default_array(ptr, prop, tmp);
@@ -3755,7 +3771,7 @@ void RNA_property_pointer_set(PointerRNA *ptr,
/* RNA */
if (pprop->set && !((prop->flag & PROP_NEVER_NULL) && ptr_value.data == NULL) &&
- !((prop->flag & PROP_ID_SELF_CHECK) && ptr->id.data == ptr_value.id.data)) {
+ !((prop->flag & PROP_ID_SELF_CHECK) && ptr->owner_id == ptr_value.owner_id)) {
pprop->set(ptr, ptr_value, reports);
}
/* IDProperty */
@@ -5344,6 +5360,10 @@ static bool rna_path_parse(PointerRNA *ptr,
* Resolve the given RNA Path to find the pointer and/or property
* indicated by fully resolving the path.
*
+ * \warning Unlike \a RNA_path_resolve_property(), that one *will* try to follow RNAPointers,
+ * e.g. the path 'parent' applied to a RNAObject \a ptr will return the object.parent in \a r_ptr,
+ * and a NULL \a r_prop...
+ *
* \note Assumes all pointers provided are valid
* \return True if path can be resolved to a valid "pointer + property" OR "pointer only"
*/
@@ -5718,14 +5738,14 @@ static char *rna_path_from_ID_to_idpgroup(PointerRNA *ptr)
IDProperty *haystack;
IDProperty *needle;
- BLI_assert(ptr->id.data != NULL);
+ BLI_assert(ptr->owner_id != NULL);
/* TODO, Support Bones/PoseBones. no pointers stored to the bones from here, only the ID.
* See example in T25746.
* Unless this is added only way to find this is to also search
* all bones and pose bones of an armature or object.
*/
- RNA_id_pointer_create(ptr->id.data, &id_ptr);
+ RNA_id_pointer_create(ptr->owner_id, &id_ptr);
haystack = RNA_struct_idprops(&id_ptr, false);
if (haystack) { /* can fail when called on bones */
@@ -5741,7 +5761,7 @@ char *RNA_path_from_ID_to_struct(PointerRNA *ptr)
{
char *ptrpath = NULL;
- if (!ptr->id.data || !ptr->data) {
+ if (!ptr->owner_id || !ptr->data) {
return NULL;
}
@@ -5757,7 +5777,7 @@ char *RNA_path_from_ID_to_struct(PointerRNA *ptr)
/* find the property in the struct we're nested in that references this struct, and
* use its identifier as the first part of the path used...
*/
- RNA_id_pointer_create(ptr->id.data, &parentptr);
+ RNA_id_pointer_create(ptr->owner_id, &parentptr);
userprop = RNA_struct_find_nested(&parentptr, ptr->type);
if (userprop) {
@@ -5833,7 +5853,7 @@ char *RNA_path_from_ID_to_property_index(PointerRNA *ptr,
const char *propname;
char *ptrpath, *path;
- if (!ptr->id.data || !ptr->data) {
+ if (!ptr->owner_id || !ptr->data) {
return NULL;
}
@@ -5904,7 +5924,7 @@ char *RNA_path_resolve_from_type_to_property(PointerRNA *ptr,
return NULL;
}
- RNA_id_pointer_create(ptr->id.data, &idptr);
+ RNA_id_pointer_create(ptr->owner_id, &idptr);
if (RNA_path_resolve_elements(&idptr, full_path, &path_elems)) {
PropertyElemRNA *prop_elem;
@@ -5951,12 +5971,12 @@ char *RNA_path_full_struct_py(struct PointerRNA *ptr)
char *ret;
- if (!ptr->id.data) {
+ if (!ptr->owner_id) {
return NULL;
}
/* never fails */
- id_path = RNA_path_full_ID_py(ptr->id.data);
+ id_path = RNA_path_full_ID_py(ptr->owner_id);
data_path = RNA_path_from_ID_to_struct(ptr);
@@ -5988,12 +6008,12 @@ char *RNA_path_full_property_py_ex(PointerRNA *ptr,
char *ret;
- if (!ptr->id.data) {
+ if (!ptr->owner_id) {
return NULL;
}
/* never fails */
- id_path = RNA_path_full_ID_py(ptr->id.data);
+ id_path = RNA_path_full_ID_py(ptr->owner_id);
data_path = RNA_path_from_ID_to_property(ptr, prop);
if (data_path) {
@@ -6041,7 +6061,7 @@ char *RNA_path_struct_property_py(PointerRNA *ptr, PropertyRNA *prop, int index)
char *ret;
- if (!ptr->id.data) {
+ if (!ptr->owner_id) {
return NULL;
}
@@ -6381,8 +6401,8 @@ char *RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, in
PropertyRNA *prop = RNA_struct_find_property(ptr, name);
if (prop) {
- return RNA_property_string_get_alloc(
- ptr, prop, fixedbuf, fixedlen, NULL); /* TODO, pass length */
+ /* TODO, pass length */
+ return RNA_property_string_get_alloc(ptr, prop, fixedbuf, fixedlen, NULL);
}
else {
printf("%s: %s.%s not found.\n", __func__, ptr->type->identifier, name);
@@ -6628,11 +6648,11 @@ char *RNA_pointer_as_string_id(bContext *C, PointerRNA *ptr)
static char *rna_pointer_as_string__bldata(PointerRNA *ptr)
{
- if (ptr->type == NULL || ptr->id.data == NULL) {
+ if (ptr->type == NULL || ptr->owner_id == NULL) {
return BLI_strdup("None");
}
else if (RNA_struct_is_ID(ptr->type)) {
- return RNA_path_full_ID_py(ptr->id.data);
+ return RNA_path_full_ID_py(ptr->owner_id);
}
else {
return RNA_path_full_struct_py(ptr);
@@ -7083,6 +7103,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms,
FunctionRNA *func)
{
PropertyRNA *parm;
+ PointerRNA null_ptr = PointerRNA_NULL;
void *data;
int alloc_size = 0, size;
@@ -7122,7 +7143,8 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms,
switch (parm->type) {
case PROP_BOOLEAN:
if (parm->arraydimension) {
- rna_property_boolean_get_default_array_values((BoolPropertyRNA *)parm, data);
+ rna_property_boolean_get_default_array_values(
+ &null_ptr, (BoolPropertyRNA *)parm, data);
}
else {
memcpy(data, &((BoolPropertyRNA *)parm)->defaultvalue, size);
@@ -7130,7 +7152,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms,
break;
case PROP_INT:
if (parm->arraydimension) {
- rna_property_int_get_default_array_values((IntPropertyRNA *)parm, data);
+ rna_property_int_get_default_array_values(&null_ptr, (IntPropertyRNA *)parm, data);
}
else {
memcpy(data, &((IntPropertyRNA *)parm)->defaultvalue, size);
@@ -7138,7 +7160,7 @@ ParameterList *RNA_parameter_list_create(ParameterList *parms,
break;
case PROP_FLOAT:
if (parm->arraydimension) {
- rna_property_float_get_default_array_values((FloatPropertyRNA *)parm, data);
+ rna_property_float_get_default_array_values(&null_ptr, (FloatPropertyRNA *)parm, data);
}
else {
memcpy(data, &((FloatPropertyRNA *)parm)->defaultvalue, size);
@@ -8017,59 +8039,6 @@ bool RNA_property_assign_default(PointerRNA *ptr, PropertyRNA *prop)
}
}
-static bool rna_property_override_operation_apply(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_override,
- PointerRNA *ptr_storage,
- PropertyRNA *prop_local,
- PropertyRNA *prop_override,
- PropertyRNA *prop_storage,
- PointerRNA *ptr_item_local,
- PointerRNA *ptr_item_override,
- PointerRNA *ptr_item_storage,
- IDOverrideLibraryPropertyOperation *opop);
-
-bool RNA_property_copy(
- Main *bmain, PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index)
-{
- if (!RNA_property_editable(ptr, prop)) {
- return false;
- }
-
- PropertyRNA *prop_dst = prop;
- PropertyRNA *prop_src = prop;
-
- /* Ensure we get real property data,
- * be it an actual RNA property, or an IDProperty in disguise. */
- prop_dst = rna_ensure_property_realdata(&prop_dst, ptr);
- prop_src = rna_ensure_property_realdata(&prop_src, fromptr);
-
- /* IDprops: destination may not exist, if source does and is set, try to create it. */
- /* Note: this is sort of quick hack/bandage to fix the issue,
- * we need to rethink how IDProps are handled in 'diff' RNA code completely, imho... */
- if (prop_src != NULL && prop_dst == NULL && RNA_property_is_set(fromptr, prop)) {
- BLI_assert(prop_src->magic != RNA_MAGIC);
- IDProperty *idp_dst = RNA_struct_idprops(ptr, true);
- IDProperty *prop_idp_dst = IDP_CopyProperty((IDProperty *)prop_src);
- IDP_AddToGroup(idp_dst, prop_idp_dst);
- rna_idproperty_touch(prop_idp_dst);
- /* Nothing else to do here... */
- return true;
- }
-
- if (ELEM(NULL, prop_dst, prop_src)) {
- return false;
- }
-
- IDOverrideLibraryPropertyOperation opop = {
- .operation = IDOVERRIDE_LIBRARY_OP_REPLACE,
- .subitem_reference_index = index,
- .subitem_local_index = index,
- };
- return rna_property_override_operation_apply(
- bmain, ptr, fromptr, NULL, prop_dst, prop_src, NULL, NULL, NULL, NULL, &opop);
-}
-
/* use RNA_warning macro which includes __func__ suffix */
void _RNA_warning(const char *format, ...)
{
@@ -8092,865 +8061,6 @@ void _RNA_warning(const char *format, ...)
#endif
}
-static int rna_property_override_diff(Main *bmain,
- PointerRNA *ptr_a,
- PointerRNA *ptr_b,
- PropertyRNA *prop,
- PropertyRNA *prop_a,
- PropertyRNA *prop_b,
- const char *rna_path,
- eRNACompareMode mode,
- IDOverrideLibrary *override,
- const int flags,
- eRNAOverrideMatchResult *r_report_flags);
-
-bool RNA_property_equals(
- Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, PropertyRNA *prop, eRNACompareMode mode)
-{
- BLI_assert(ELEM(mode, RNA_EQ_STRICT, RNA_EQ_UNSET_MATCH_ANY, RNA_EQ_UNSET_MATCH_NONE));
-
- return (rna_property_override_diff(
- bmain, ptr_a, ptr_b, prop, NULL, NULL, NULL, mode, NULL, 0, NULL) == 0);
-}
-
-bool RNA_struct_equals(Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, eRNACompareMode mode)
-{
- CollectionPropertyIterator iter;
- PropertyRNA *iterprop;
- bool equals = true;
-
- if (ptr_a == NULL && ptr_b == NULL) {
- return true;
- }
- else if (ptr_a == NULL || ptr_b == NULL) {
- return false;
- }
- else if (ptr_a->type != ptr_b->type) {
- return false;
- }
-
- iterprop = RNA_struct_iterator_property(ptr_a->type);
-
- RNA_property_collection_begin(ptr_a, iterprop, &iter);
- for (; iter.valid; RNA_property_collection_next(&iter)) {
- PropertyRNA *prop = iter.ptr.data;
-
- if (!RNA_property_equals(bmain, ptr_a, ptr_b, prop, mode)) {
- equals = false;
- break;
- }
- }
- RNA_property_collection_end(&iter);
-
- return equals;
-}
-
-/* Low-level functions, also used by non-override RNA API like copy or equality check. */
-
-/** Generic RNA property diff function.
- *
- * \note about \a prop and \a prop_a/prop_b parameters:
- * the former is expected to be an 'un-resolved' one,
- * while the two later are expected to be fully resolved ones
- * (i.e. to be the IDProps when they should be, etc.).
- * When \a prop is given, \a prop_a and \a prop_b should always be NULL, and vice-versa.
- * This is necessary, because we cannot perform 'set/unset' checks on resolved properties
- * (unset IDProps would merely be NULL then).
- *
- * \note When there is no equality,
- * but we cannot determine an order (greater than/lesser than), we return 1.
- */
-static int rna_property_override_diff(Main *bmain,
- PointerRNA *ptr_a,
- PointerRNA *ptr_b,
- PropertyRNA *prop,
- PropertyRNA *prop_a,
- PropertyRNA *prop_b,
- const char *rna_path,
- eRNACompareMode mode,
- IDOverrideLibrary *override,
- const int flags,
- eRNAOverrideMatchResult *r_report_flags)
-{
- if (prop != NULL) {
- BLI_assert(prop_a == NULL && prop_b == NULL);
- prop_a = prop;
- prop_b = prop;
- }
-
- if (ELEM(NULL, prop_a, prop_b)) {
- return (prop_a == prop_b) ? 0 : 1;
- }
-
- if (!RNA_property_comparable(ptr_a, prop_a) || !RNA_property_comparable(ptr_b, prop_b)) {
- return 0;
- }
-
- if (mode == RNA_EQ_UNSET_MATCH_ANY) {
- /* uninitialized properties are assumed to match anything */
- if (!RNA_property_is_set(ptr_a, prop_a) || !RNA_property_is_set(ptr_b, prop_b)) {
- return 0;
- }
- }
- else if (mode == RNA_EQ_UNSET_MATCH_NONE) {
- /* unset properties never match set properties */
- if (RNA_property_is_set(ptr_a, prop_a) != RNA_property_is_set(ptr_b, prop_b)) {
- return 1;
- }
- }
-
- if (prop != NULL) {
- /* Ensure we get real property data, be it an actual RNA property,
- * or an IDProperty in disguise. */
- prop_a = rna_ensure_property_realdata(&prop_a, ptr_a);
- prop_b = rna_ensure_property_realdata(&prop_b, ptr_b);
-
- if (ELEM(NULL, prop_a, prop_b)) {
- return (prop_a == prop_b) ? 0 : 1;
- }
- }
-
- /* Check if we are working with arrays. */
- const bool is_array_a = RNA_property_array_check(prop_a);
- const bool is_array_b = RNA_property_array_check(prop_b);
-
- if (is_array_a != is_array_b) {
- /* Should probably never happen actually... */
- BLI_assert(0);
- return is_array_a ? 1 : -1;
- }
-
- /* Get the length of the array to work with. */
- const int len_a = RNA_property_array_length(ptr_a, prop_a);
- const int len_b = RNA_property_array_length(ptr_b, prop_b);
-
- if (len_a != len_b) {
- /* Do not handle override in that case,
- * we do not support insertion/deletion from arrays for now. */
- return len_a > len_b ? 1 : -1;
- }
-
- if (is_array_a && len_a == 0) {
- /* Empty arrays, will happen in some case with dynamic ones. */
- return 0;
- }
-
- RNAPropOverrideDiff override_diff = NULL;
- /* Special case for IDProps, we use default callback then. */
- if (prop_a->magic != RNA_MAGIC) {
- override_diff = rna_property_override_diff_default;
- if (prop_b->magic == RNA_MAGIC && prop_b->override_diff != override_diff) {
- override_diff = NULL;
- }
- }
- else if (prop_b->magic != RNA_MAGIC) {
- override_diff = rna_property_override_diff_default;
- if (prop_a->override_diff != override_diff) {
- override_diff = NULL;
- }
- }
- else if (prop_a->override_diff == prop_b->override_diff) {
- override_diff = prop_a->override_diff;
- }
-
- if (override_diff == NULL) {
-#ifndef NDEBUG
- printf("'%s' gives unmatching or NULL RNA diff callbacks, should not happen (%d vs. %d).\n",
- rna_path ?
- rna_path :
- (prop_a->magic != RNA_MAGIC ? ((IDProperty *)prop_a)->name : prop_a->identifier),
- prop_a->magic == RNA_MAGIC,
- prop_b->magic == RNA_MAGIC);
-#endif
- BLI_assert(0);
- return 1;
- }
-
- bool override_changed = false;
- int diff_flags = flags;
- if (!RNA_property_overridable_get(ptr_a, prop_a)) {
- diff_flags &= ~RNA_OVERRIDE_COMPARE_CREATE;
- }
- const int diff = override_diff(bmain,
- ptr_a,
- ptr_b,
- prop_a,
- prop_b,
- len_a,
- len_b,
- mode,
- override,
- rna_path,
- diff_flags,
- &override_changed);
- if (override_changed && r_report_flags) {
- *r_report_flags |= RNA_OVERRIDE_MATCH_RESULT_CREATED;
- }
-
- return diff;
-}
-
-/* Modify local data-block to make it ready for override application
- * (only needed for diff operations, where we use
- * the local data-block's data as second operand). */
-static bool rna_property_override_operation_store(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_reference,
- PointerRNA *ptr_storage,
- PropertyRNA *prop_local,
- PropertyRNA *prop_reference,
- PropertyRNA *prop_storage,
- IDOverrideLibraryProperty *op)
-{
- int len_local, len_reference, len_storage = 0;
- bool changed = false;
-
- if (ptr_storage == NULL) {
- return changed;
- }
-
- /* get the length of the array to work with */
- len_local = RNA_property_array_length(ptr_local, prop_local);
- len_reference = RNA_property_array_length(ptr_reference, prop_reference);
- if (prop_storage) {
- len_storage = RNA_property_array_length(ptr_storage, prop_storage);
- }
-
- if (len_local != len_reference || len_local != len_storage) {
- /* Do not handle override in that case,
- * we do not support insertion/deletion from arrays for now. */
- return changed;
- }
-
- BLI_assert(prop_local->override_store == prop_reference->override_store &&
- (!ptr_storage || prop_local->override_store == prop_storage->override_store) &&
- prop_local->override_store != NULL);
-
- for (IDOverrideLibraryPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
- /* Only needed for diff operations. */
- if (!ELEM(opop->operation,
- IDOVERRIDE_LIBRARY_OP_ADD,
- IDOVERRIDE_LIBRARY_OP_SUBTRACT,
- IDOVERRIDE_LIBRARY_OP_MULTIPLY)) {
- continue;
- }
-
- if (prop_local->override_store(bmain,
- ptr_local,
- ptr_reference,
- ptr_storage,
- prop_local,
- prop_reference,
- prop_storage,
- len_local,
- len_reference,
- len_storage,
- opop)) {
- changed = true;
- }
- }
-
- return changed;
-}
-
-static bool rna_property_override_operation_apply(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_override,
- PointerRNA *ptr_storage,
- PropertyRNA *prop_local,
- PropertyRNA *prop_override,
- PropertyRNA *prop_storage,
- PointerRNA *ptr_item_local,
- PointerRNA *ptr_item_override,
- PointerRNA *ptr_item_storage,
- IDOverrideLibraryPropertyOperation *opop)
-{
- int len_local, len_reference, len_storage = 0;
-
- const short override_op = opop->operation;
-
- if (override_op == IDOVERRIDE_LIBRARY_OP_NOOP) {
- return true;
- }
-
- if (ELEM(override_op,
- IDOVERRIDE_LIBRARY_OP_ADD,
- IDOVERRIDE_LIBRARY_OP_SUBTRACT,
- IDOVERRIDE_LIBRARY_OP_MULTIPLY) &&
- !ptr_storage) {
- /* We cannot apply 'diff' override operations without some reference storage.
- * This should typically only happen at read time of .blend file... */
- return false;
- }
-
- if (ELEM(override_op,
- IDOVERRIDE_LIBRARY_OP_ADD,
- IDOVERRIDE_LIBRARY_OP_SUBTRACT,
- IDOVERRIDE_LIBRARY_OP_MULTIPLY) &&
- !prop_storage) {
- /* We cannot apply 'diff' override operations without some reference storage.
- * This should typically only happen at read time of .blend file... */
- return false;
- }
-
- RNAPropOverrideApply override_apply = NULL;
- /* Special case for IDProps, we use default callback then. */
- if (prop_local->magic != RNA_MAGIC) {
- override_apply = rna_property_override_apply_default;
- if (prop_override->magic == RNA_MAGIC && prop_override->override_apply != override_apply) {
- override_apply = NULL;
- }
- }
- else if (prop_override->magic != RNA_MAGIC) {
- override_apply = rna_property_override_apply_default;
- if (prop_local->override_apply != override_apply) {
- override_apply = NULL;
- }
- }
- else if (prop_local->override_apply == prop_override->override_apply) {
- override_apply = prop_local->override_apply;
- }
-
- if (ptr_storage && prop_storage->magic == RNA_MAGIC &&
- prop_storage->override_apply != override_apply) {
- override_apply = NULL;
- }
-
- if (override_apply == NULL) {
-#ifndef NDEBUG
- printf("'%s' gives unmatching or NULL RNA copy callbacks, should not happen (%d vs. %d).\n",
- prop_local->magic != RNA_MAGIC ? ((IDProperty *)prop_local)->name :
- prop_local->identifier,
- prop_local->magic == RNA_MAGIC,
- prop_override->magic == RNA_MAGIC);
-#endif
- BLI_assert(0);
- return false;
- }
-
- /* get the length of the array to work with */
- len_local = RNA_property_array_length(ptr_local, prop_local);
- len_reference = RNA_property_array_length(ptr_override, prop_override);
- if (ptr_storage) {
- len_storage = RNA_property_array_length(ptr_storage, prop_storage);
- }
-
- if (len_local != len_reference || (ptr_storage && len_local != len_storage)) {
- /* Do not handle override in that case,
- * we do not support insertion/deletion from arrays for now. */
- return false;
- }
-
- /* get and set the default values as appropriate for the various types */
- return override_apply(bmain,
- ptr_local,
- ptr_override,
- ptr_storage,
- prop_local,
- prop_override,
- prop_storage,
- len_local,
- len_reference,
- len_storage,
- ptr_item_local,
- ptr_item_override,
- ptr_item_storage,
- opop);
-}
-
-/**
- * Check whether reference and local overridden data match (are the same),
- * with respect to given restrictive sets of properties.
- * If requested, will generate needed new property overrides, and/or restore values from reference.
- *
- * \param r_report_flags: If given,
- * will be set with flags matching actions taken by the function on \a ptr_local.
- *
- * \return True if _resulting_ \a ptr_local does match \a ptr_reference.
- */
-bool RNA_struct_override_matches(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_reference,
- const char *root_path,
- IDOverrideLibrary *override,
- const eRNAOverrideMatch flags,
- eRNAOverrideMatchResult *r_report_flags)
-{
- CollectionPropertyIterator iter;
- PropertyRNA *iterprop;
- bool matching = true;
-
- BLI_assert(ptr_local->type == ptr_reference->type);
- BLI_assert(ptr_local->id.data && ptr_reference->id.data);
-
- const bool ignore_non_overridable = (flags & RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE) != 0;
- const bool ignore_overridden = (flags & RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN) != 0;
- const bool do_create = (flags & RNA_OVERRIDE_COMPARE_CREATE) != 0;
- const bool do_restore = (flags & RNA_OVERRIDE_COMPARE_RESTORE) != 0;
-
-//#define DEBUG_OVERRIDE_TIMEIT
-#ifdef DEBUG_OVERRIDE_TIMEIT
- static float _sum_time_global = 0.0f;
- static float _num_time_global = 0.0f;
- double _timeit_time_global;
- static float _sum_time_diffing = 0.0f;
- static float _delta_time_diffing = 0.0f;
- static int _num_delta_time_diffing = 0.0f;
- static float _num_time_diffing = 0.0f;
- double _timeit_time_diffing;
-
- if (!root_path) {
- _delta_time_diffing = 0.0f;
- _num_delta_time_diffing = 0;
- _timeit_time_global = PIL_check_seconds_timer();
- }
-#endif
-
- iterprop = RNA_struct_iterator_property(ptr_local->type);
-
- for (RNA_property_collection_begin(ptr_local, iterprop, &iter); iter.valid;
- RNA_property_collection_next(&iter)) {
- PropertyRNA *prop_local = iter.ptr.data;
- PropertyRNA *prop_reference = iter.ptr.data;
-
- /* Ensure we get real property data, be it an actual RNA property,
- * or an IDProperty in disguise. */
- prop_local = rna_ensure_property_realdata(&prop_local, ptr_local);
- prop_reference = rna_ensure_property_realdata(&prop_reference, ptr_reference);
-
- if (ELEM(NULL, prop_local, prop_reference)) {
- continue;
- }
-
- if (ignore_non_overridable && !RNA_property_overridable_get(ptr_local, prop_local)) {
- continue;
- }
-
-#if 0 /* This actually makes things slower, since it has to check for animation paths etc! */
- if (RNA_property_animated(ptr_local, prop_local)) {
- /* We cannot do anything here really, animation is some kind of dynamic overrides that has
- * precedence over static one... */
- continue;
- }
-#endif
-
-#define RNA_PATH_BUFFSIZE 8192
-#define RNA_PATH_PRINTF(_str, ...) \
- if (BLI_snprintf(rna_path, RNA_PATH_BUFFSIZE, (_str), __VA_ARGS__) >= RNA_PATH_BUFFSIZE) { \
- rna_path = BLI_sprintfN((_str), __VA_ARGS__); \
- } \
- (void)0
-#define RNA_PATH_FREE \
- if (rna_path != rna_path_buffer) \
- MEM_freeN(rna_path)
-
- char rna_path_buffer[RNA_PATH_BUFFSIZE];
- char *rna_path = rna_path_buffer;
-
- /* XXX TODO this will have to be refined to handle collections insertions, and array items */
- if (root_path) {
- /* Inlined building, much much more efficient. */
- if (prop_local->magic == RNA_MAGIC) {
- RNA_PATH_PRINTF("%s.%s", root_path, RNA_property_identifier(prop_local));
- }
- else {
- RNA_PATH_PRINTF("%s[\"%s\"]", root_path, RNA_property_identifier(prop_local));
- }
- }
- else {
- /* This is rather slow, but is not much called, so not really worth optimizing. */
- rna_path = RNA_path_from_ID_to_property(ptr_local, prop_local);
- }
- if (rna_path == NULL) {
- continue;
- }
-
- // printf("Override Checking %s\n", rna_path);
-
- if (ignore_overridden && BKE_override_library_property_find(override, rna_path) != NULL) {
- RNA_PATH_FREE;
- continue;
- }
-
-#ifdef DEBUG_OVERRIDE_TIMEIT
- if (!root_path) {
- _timeit_time_diffing = PIL_check_seconds_timer();
- }
-#endif
-
- eRNAOverrideMatchResult report_flags = 0;
- const int diff = rna_property_override_diff(bmain,
- ptr_local,
- ptr_reference,
- NULL,
- prop_local,
- prop_reference,
- rna_path,
- RNA_EQ_STRICT,
- override,
- flags,
- &report_flags);
-
-#ifdef DEBUG_OVERRIDE_TIMEIT
- if (!root_path) {
- const float _delta_time = (float)(PIL_check_seconds_timer() - _timeit_time_diffing);
- _delta_time_diffing += _delta_time;
- _num_delta_time_diffing++;
- }
-#endif
-
- matching = matching && diff == 0;
- if (r_report_flags) {
- *r_report_flags |= report_flags;
- }
-
- if (diff != 0) {
- /* XXX TODO: refine this for per-item overriding of arrays... */
- IDOverrideLibraryProperty *op = BKE_override_library_property_find(override, rna_path);
- IDOverrideLibraryPropertyOperation *opop = op ? op->operations.first : NULL;
-
- if (do_restore && (report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) == 0) {
- /* We are allowed to restore to reference's values. */
- if (ELEM(NULL, op, opop) || opop->operation == IDOVERRIDE_LIBRARY_OP_NOOP) {
- /* We should restore that property to its reference value */
- if (RNA_property_editable(ptr_local, prop_local)) {
- IDOverrideLibraryPropertyOperation opop_tmp = {
- .operation = IDOVERRIDE_LIBRARY_OP_REPLACE,
- .subitem_reference_index = -1,
- .subitem_local_index = -1,
- };
- rna_property_override_operation_apply(bmain,
- ptr_local,
- ptr_reference,
- NULL,
- prop_local,
- prop_reference,
- NULL,
- NULL,
- NULL,
- NULL,
- &opop_tmp);
- if (r_report_flags) {
- *r_report_flags |= RNA_OVERRIDE_MATCH_RESULT_RESTORED;
- }
- }
- else {
- /* Too noisy for now, this triggers on runtime props like transform matrices etc. */
-#if 0
- BLI_assert(!"We have differences between reference and "
- "overriding data on non-editable property.");
-#endif
- matching = false;
- }
- }
- }
- else if ((report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) == 0 && ELEM(NULL, op, opop)) {
- /* This property is not overridden, and differs from reference, so we have no match. */
- matching = false;
- if (!(do_create || do_restore)) {
- /* Since we have no 'changing' action allowed, we can break here. */
- MEM_SAFE_FREE(rna_path);
- break;
- }
- }
- }
-
- RNA_PATH_FREE;
-
-#undef RNA_PATH_BUFFSIZE
-#undef RNA_PATH_PRINTF
-#undef RNA_PATH_FREE
- }
- RNA_property_collection_end(&iter);
-
-#ifdef DEBUG_OVERRIDE_TIMEIT
- if (!root_path) {
- const float _delta_time = (float)(PIL_check_seconds_timer() - _timeit_time_global);
- _sum_time_global += _delta_time;
- _num_time_global++;
- _sum_time_diffing += _delta_time_diffing;
- _num_time_diffing++;
- printf("ID: %s\n", ((ID *)ptr_local->id.data)->name);
- printf("time end (%s): %.6f\n", __func__, _delta_time);
- printf("time averaged (%s): %.6f (total: %.6f, in %d runs)\n",
- __func__,
- (_sum_time_global / _num_time_global),
- _sum_time_global,
- (int)_num_time_global);
- printf("diffing time end (%s): %.6f (in %d runs)\n",
- __func__,
- _delta_time_diffing,
- _num_delta_time_diffing);
- printf("diffing time averaged (%s): %.6f (total: %.6f, in %d runs)\n",
- __func__,
- (_sum_time_diffing / _num_time_diffing),
- _sum_time_diffing,
- (int)_num_time_diffing);
- }
-#endif
-
- return matching;
-}
-
-/** Store needed second operands into \a storage data-block
- * for differential override operations. */
-bool RNA_struct_override_store(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_reference,
- PointerRNA *ptr_storage,
- IDOverrideLibrary *override)
-{
- bool changed = false;
-
-#ifdef DEBUG_OVERRIDE_TIMEIT
- TIMEIT_START_AVERAGED(RNA_struct_override_store);
-#endif
- for (IDOverrideLibraryProperty *op = override->properties.first; op; op = op->next) {
- /* Simplified for now! */
- PointerRNA data_reference, data_local;
- PropertyRNA *prop_reference, *prop_local;
-
- if (RNA_path_resolve_property(ptr_local, op->rna_path, &data_local, &prop_local) &&
- RNA_path_resolve_property(ptr_reference, op->rna_path, &data_reference, &prop_reference)) {
- PointerRNA data_storage;
- PropertyRNA *prop_storage = NULL;
-
- /* It is totally OK if this does not success,
- * only a subset of override operations actually need storage. */
- if (ptr_storage && (ptr_storage->id.data != NULL)) {
- RNA_path_resolve_property(ptr_storage, op->rna_path, &data_storage, &prop_storage);
- }
-
- if (rna_property_override_operation_store(bmain,
- &data_local,
- &data_reference,
- &data_storage,
- prop_reference,
- prop_local,
- prop_storage,
- op)) {
- changed = true;
- }
- }
- }
-#ifdef DEBUG_OVERRIDE_TIMEIT
- TIMEIT_END_AVERAGED(RNA_struct_override_store);
-#endif
-
- return changed;
-}
-
-static void rna_property_override_apply_ex(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_override,
- PointerRNA *ptr_storage,
- PropertyRNA *prop_local,
- PropertyRNA *prop_override,
- PropertyRNA *prop_storage,
- PointerRNA *ptr_item_local,
- PointerRNA *ptr_item_override,
- PointerRNA *ptr_item_storage,
- IDOverrideLibraryProperty *op,
- const bool do_insert)
-{
- for (IDOverrideLibraryPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
- if (!do_insert != !ELEM(opop->operation,
- IDOVERRIDE_LIBRARY_OP_INSERT_AFTER,
- IDOVERRIDE_LIBRARY_OP_INSERT_BEFORE)) {
- if (!do_insert) {
- printf("Skipping insert override operations in first pass (%s)!\n", op->rna_path);
- }
- continue;
- }
- if (!rna_property_override_operation_apply(bmain,
- ptr_local,
- ptr_override,
- ptr_storage,
- prop_local,
- prop_override,
- prop_storage,
- ptr_item_local,
- ptr_item_override,
- ptr_item_storage,
- opop)) {
- /* TODO No assert here, would be much much better to just report as warning,
- * failing override applications will probably be fairly common! */
- BLI_assert(0);
- }
- }
-}
-
-/** Apply given \a override operations on \a ptr_local, using \a ptr_override
- * (and \a ptr_storage form differential ops) as source. */
-void RNA_struct_override_apply(Main *bmain,
- PointerRNA *ptr_local,
- PointerRNA *ptr_override,
- PointerRNA *ptr_storage,
- IDOverrideLibrary *override)
-{
-#ifdef DEBUG_OVERRIDE_TIMEIT
- TIMEIT_START_AVERAGED(RNA_struct_override_apply);
-#endif
- /* Note: Applying insert operations in a separate pass is mandatory.
- * We could optimize this later, but for now, as inefficient as it is,
- * don't think this is a critical point.
- */
- bool do_insert = false;
- for (int i = 0; i < 2; i++, do_insert = true) {
- for (IDOverrideLibraryProperty *op = override->properties.first; op; op = op->next) {
- /* Simplified for now! */
- PointerRNA data_override, data_local;
- PointerRNA data_item_override, data_item_local;
- PropertyRNA *prop_override, *prop_local;
-
- if (RNA_path_resolve_property_and_item_pointer(
- ptr_local, op->rna_path, &data_local, &prop_local, &data_item_local) &&
- RNA_path_resolve_property_and_item_pointer(
- ptr_override, op->rna_path, &data_override, &prop_override, &data_item_override)) {
- PointerRNA data_storage, data_item_storage;
- PropertyRNA *prop_storage = NULL;
-
- /* It is totally OK if this does not success,
- * only a subset of override operations actually need storage. */
- if (ptr_storage && (ptr_storage->id.data != NULL)) {
- RNA_path_resolve_property_and_item_pointer(
- ptr_storage, op->rna_path, &data_storage, &prop_storage, &data_item_storage);
- }
-
- rna_property_override_apply_ex(bmain,
- &data_local,
- &data_override,
- prop_storage ? &data_storage : NULL,
- prop_local,
- prop_override,
- prop_storage,
- &data_item_local,
- &data_item_override,
- prop_storage ? &data_item_storage : NULL,
- op,
- do_insert);
- }
-#ifndef NDEBUG
- else {
- printf(
- "Failed to apply library override operation to '%s.%s' "
- "(could not resolve some properties, local: %d, override: %d)\n",
- ((ID *)ptr_override->id.data)->name,
- op->rna_path,
- RNA_path_resolve_property(ptr_local, op->rna_path, &data_local, &prop_local),
- RNA_path_resolve_property(ptr_override, op->rna_path, &data_override, &prop_override));
- }
-#endif
- }
- }
-#ifdef DEBUG_OVERRIDE_TIMEIT
- TIMEIT_END_AVERAGED(RNA_struct_override_apply);
-#endif
-}
-
-IDOverrideLibraryProperty *RNA_property_override_property_find(PointerRNA *ptr, PropertyRNA *prop)
-{
- ID *id = ptr->id.data;
-
- if (!id || !id->override_library) {
- return NULL;
- }
-
- char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
- if (rna_path) {
- IDOverrideLibraryProperty *op = BKE_override_library_property_find(id->override_library,
- rna_path);
- MEM_freeN(rna_path);
- return op;
- }
- return NULL;
-}
-
-IDOverrideLibraryProperty *RNA_property_override_property_get(PointerRNA *ptr,
- PropertyRNA *prop,
- bool *r_created)
-{
- ID *id = ptr->id.data;
-
- if (!id || !id->override_library) {
- return NULL;
- }
-
- char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
- if (rna_path) {
- IDOverrideLibraryProperty *op = BKE_override_library_property_get(
- id->override_library, rna_path, r_created);
- MEM_freeN(rna_path);
- return op;
- }
- return NULL;
-}
-
-IDOverrideLibraryPropertyOperation *RNA_property_override_property_operation_find(
- PointerRNA *ptr, PropertyRNA *prop, const int index, const bool strict, bool *r_strict)
-{
- IDOverrideLibraryProperty *op = RNA_property_override_property_find(ptr, prop);
-
- if (!op) {
- return NULL;
- }
-
- return BKE_override_library_property_operation_find(
- op, NULL, NULL, index, index, strict, r_strict);
-}
-
-IDOverrideLibraryPropertyOperation *RNA_property_override_property_operation_get(
- PointerRNA *ptr,
- PropertyRNA *prop,
- const short operation,
- const int index,
- const bool strict,
- bool *r_strict,
- bool *r_created)
-{
- IDOverrideLibraryProperty *op = RNA_property_override_property_get(ptr, prop, NULL);
-
- if (!op) {
- return NULL;
- }
-
- return BKE_override_library_property_operation_get(
- op, operation, NULL, NULL, index, index, strict, r_strict, r_created);
-}
-
-eRNAOverrideStatus RNA_property_override_library_status(PointerRNA *ptr,
- PropertyRNA *prop,
- const int index)
-{
- int override_status = 0;
-
- if (!BKE_override_library_is_enabled()) {
- return override_status;
- }
-
- if (!ptr || !prop || !ptr->id.data || !((ID *)ptr->id.data)->override_library) {
- return override_status;
- }
-
- if (RNA_property_overridable_get(ptr, prop) && RNA_property_editable_flag(ptr, prop)) {
- override_status |= RNA_OVERRIDE_STATUS_OVERRIDABLE;
- }
-
- IDOverrideLibraryPropertyOperation *opop = RNA_property_override_property_operation_find(
- ptr, prop, index, false, NULL);
- if (opop != NULL) {
- override_status |= RNA_OVERRIDE_STATUS_OVERRIDDEN;
- if (opop->flag & IDOVERRIDE_LIBRARY_FLAG_MANDATORY) {
- override_status |= RNA_OVERRIDE_STATUS_MANDATORY;
- }
- if (opop->flag & IDOVERRIDE_LIBRARY_FLAG_LOCKED) {
- override_status |= RNA_OVERRIDE_STATUS_LOCKED;
- }
- }
-
- return override_status;
-}
-
bool RNA_path_resolved_create(PointerRNA *ptr,
struct PropertyRNA *prop,
const int prop_index,
diff --git a/source/blender/makesrna/intern/rna_access_compare_override.c b/source/blender/makesrna/intern/rna_access_compare_override.c
new file mode 100644
index 00000000000..b0a83ea38c6
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_access_compare_override.c
@@ -0,0 +1,1099 @@
+/*
+ * 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.
+ */
+
+/** \file
+ * \ingroup RNA
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "DNA_ID.h"
+#include "DNA_constraint_types.h"
+#include "DNA_modifier_types.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_string.h"
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+# include "PIL_time_utildefines.h"
+#endif
+
+#include "BKE_idprop.h"
+#include "BKE_library_override.h"
+#include "BKE_main.h"
+
+#include "RNA_access.h"
+#include "RNA_define.h"
+#include "RNA_enum_types.h"
+
+#include "rna_internal.h"
+#include "rna_access_internal.h"
+
+int RNA_property_override_flag(PropertyRNA *prop)
+{
+ return rna_ensure_property(prop)->flag_override;
+}
+
+/** \note Does not take into account editable status, this has to be checked separately
+ * (using #RNA_property_editable_flag() usually). */
+bool RNA_property_overridable_get(PointerRNA *ptr, PropertyRNA *prop)
+{
+ if (prop->magic == RNA_MAGIC) {
+ /* Special handling for insertions of constraints or modifiers... */
+ /* TODO Note We may want to add a more generic system to RNA
+ * (like a special property in struct of items)
+ * if we get more overrideable collections,
+ * for now we can live with those special-cases handling I think. */
+ if (RNA_struct_is_a(ptr->type, &RNA_Constraint)) {
+ bConstraint *con = ptr->data;
+ if (con->flag & CONSTRAINT_OVERRIDE_LIBRARY_LOCAL) {
+ return true;
+ }
+ }
+ else if (RNA_struct_is_a(ptr->type, &RNA_Modifier)) {
+ ModifierData *mod = ptr->data;
+ if (mod->flag & eModifierFlag_OverrideLibrary_Local) {
+ return true;
+ }
+ }
+ /* If this is a RNA-defined property (real or 'virtual' IDProp),
+ * we want to use RNA prop flag. */
+ return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON) &&
+ (prop->flag_override & PROPOVERRIDE_OVERRIDABLE_LIBRARY);
+ }
+ else {
+ /* If this is a real 'pure' IDProp (aka custom property), we want to use the IDProp flag. */
+ return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON) &&
+ (((IDProperty *)prop)->flag & IDP_FLAG_OVERRIDABLE_LIBRARY);
+ }
+}
+
+/* Should only be used for custom properties */
+bool RNA_property_overridable_library_set(PointerRNA *UNUSED(ptr),
+ PropertyRNA *prop,
+ const bool is_overridable)
+{
+ /* Only works for pure custom properties IDProps. */
+ if (prop->magic != RNA_MAGIC) {
+ IDProperty *idprop = (IDProperty *)prop;
+
+ idprop->flag = is_overridable ? (idprop->flag | IDP_FLAG_OVERRIDABLE_LIBRARY) :
+ (idprop->flag & ~IDP_FLAG_OVERRIDABLE_LIBRARY);
+ return true;
+ }
+
+ return false;
+}
+
+bool RNA_property_overridden(PointerRNA *ptr, PropertyRNA *prop)
+{
+ char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
+ ID *id = ptr->owner_id;
+
+ if (rna_path == NULL || id == NULL || id->override_library == NULL) {
+ return false;
+ }
+
+ return (BKE_override_library_property_find(id->override_library, rna_path) != NULL);
+}
+
+bool RNA_property_comparable(PointerRNA *UNUSED(ptr), PropertyRNA *prop)
+{
+ prop = rna_ensure_property(prop);
+
+ return !(prop->flag_override & PROPOVERRIDE_NO_COMPARISON);
+}
+
+static bool rna_property_override_operation_apply(Main *bmain,
+ PointerRNA *ptr_local,
+ PointerRNA *ptr_override,
+ PointerRNA *ptr_storage,
+ PropertyRNA *prop_local,
+ PropertyRNA *prop_override,
+ PropertyRNA *prop_storage,
+ PointerRNA *ptr_item_local,
+ PointerRNA *ptr_item_override,
+ PointerRNA *ptr_item_storage,
+ IDOverrideLibraryPropertyOperation *opop);
+
+bool RNA_property_copy(
+ Main *bmain, PointerRNA *ptr, PointerRNA *fromptr, PropertyRNA *prop, int index)
+{
+ if (!RNA_property_editable(ptr, prop)) {
+ return false;
+ }
+
+ PropertyRNA *prop_dst = prop;
+ PropertyRNA *prop_src = prop;
+
+ /* Ensure we get real property data,
+ * be it an actual RNA property, or an IDProperty in disguise. */
+ prop_dst = rna_ensure_property_realdata(&prop_dst, ptr);
+ prop_src = rna_ensure_property_realdata(&prop_src, fromptr);
+
+ /* IDprops: destination may not exist, if source does and is set, try to create it. */
+ /* Note: this is sort of quick hack/bandage to fix the issue,
+ * we need to rethink how IDProps are handled in 'diff' RNA code completely, imho... */
+ if (prop_src != NULL && prop_dst == NULL && RNA_property_is_set(fromptr, prop)) {
+ BLI_assert(prop_src->magic != RNA_MAGIC);
+ IDProperty *idp_dst = RNA_struct_idprops(ptr, true);
+ IDProperty *prop_idp_dst = IDP_CopyProperty((IDProperty *)prop_src);
+ IDP_AddToGroup(idp_dst, prop_idp_dst);
+ rna_idproperty_touch(prop_idp_dst);
+ /* Nothing else to do here... */
+ return true;
+ }
+
+ if (ELEM(NULL, prop_dst, prop_src)) {
+ return false;
+ }
+
+ IDOverrideLibraryPropertyOperation opop = {
+ .operation = IDOVERRIDE_LIBRARY_OP_REPLACE,
+ .subitem_reference_index = index,
+ .subitem_local_index = index,
+ };
+ return rna_property_override_operation_apply(
+ bmain, ptr, fromptr, NULL, prop_dst, prop_src, NULL, NULL, NULL, NULL, &opop);
+}
+
+static int rna_property_override_diff(Main *bmain,
+ PointerRNA *ptr_a,
+ PointerRNA *ptr_b,
+ PropertyRNA *prop,
+ PropertyRNA *prop_a,
+ PropertyRNA *prop_b,
+ const char *rna_path,
+ eRNACompareMode mode,
+ IDOverrideLibrary *override,
+ const int flags,
+ eRNAOverrideMatchResult *r_report_flags);
+
+bool RNA_property_equals(
+ Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, PropertyRNA *prop, eRNACompareMode mode)
+{
+ BLI_assert(ELEM(mode, RNA_EQ_STRICT, RNA_EQ_UNSET_MATCH_ANY, RNA_EQ_UNSET_MATCH_NONE));
+
+ return (rna_property_override_diff(
+ bmain, ptr_a, ptr_b, prop, NULL, NULL, NULL, mode, NULL, 0, NULL) == 0);
+}
+
+bool RNA_struct_equals(Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, eRNACompareMode mode)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop;
+ bool equals = true;
+
+ if (ptr_a == NULL && ptr_b == NULL) {
+ return true;
+ }
+ else if (ptr_a == NULL || ptr_b == NULL) {
+ return false;
+ }
+ else if (ptr_a->type != ptr_b->type) {
+ return false;
+ }
+
+ iterprop = RNA_struct_iterator_property(ptr_a->type);
+
+ RNA_property_collection_begin(ptr_a, iterprop, &iter);
+ for (; iter.valid; RNA_property_collection_next(&iter)) {
+ PropertyRNA *prop = iter.ptr.data;
+
+ if (!RNA_property_equals(bmain, ptr_a, ptr_b, prop, mode)) {
+ equals = false;
+ break;
+ }
+ }
+ RNA_property_collection_end(&iter);
+
+ return equals;
+}
+
+/* Low-level functions, also used by non-override RNA API like copy or equality check. */
+
+/** Generic RNA property diff function.
+ *
+ * \note about \a prop and \a prop_a/prop_b parameters:
+ * the former is expected to be an 'un-resolved' one,
+ * while the two later are expected to be fully resolved ones
+ * (i.e. to be the IDProps when they should be, etc.).
+ * When \a prop is given, \a prop_a and \a prop_b should always be NULL, and vice-versa.
+ * This is necessary, because we cannot perform 'set/unset' checks on resolved properties
+ * (unset IDProps would merely be NULL then).
+ *
+ * \note When there is no equality,
+ * but we cannot determine an order (greater than/lesser than), we return 1.
+ */
+static int rna_property_override_diff(Main *bmain,
+ PointerRNA *ptr_a,
+ PointerRNA *ptr_b,
+ PropertyRNA *prop,
+ PropertyRNA *prop_a,
+ PropertyRNA *prop_b,
+ const char *rna_path,
+ eRNACompareMode mode,
+ IDOverrideLibrary *override,
+ const int flags,
+ eRNAOverrideMatchResult *r_report_flags)
+{
+ if (prop != NULL) {
+ BLI_assert(prop_a == NULL && prop_b == NULL);
+ prop_a = prop;
+ prop_b = prop;
+ }
+
+ if (ELEM(NULL, prop_a, prop_b)) {
+ return (prop_a == prop_b) ? 0 : 1;
+ }
+
+ if (!RNA_property_comparable(ptr_a, prop_a) || !RNA_property_comparable(ptr_b, prop_b)) {
+ return 0;
+ }
+
+ if (mode == RNA_EQ_UNSET_MATCH_ANY) {
+ /* uninitialized properties are assumed to match anything */
+ if (!RNA_property_is_set(ptr_a, prop_a) || !RNA_property_is_set(ptr_b, prop_b)) {
+ return 0;
+ }
+ }
+ else if (mode == RNA_EQ_UNSET_MATCH_NONE) {
+ /* unset properties never match set properties */
+ if (RNA_property_is_set(ptr_a, prop_a) != RNA_property_is_set(ptr_b, prop_b)) {
+ return 1;
+ }
+ }
+
+ if (prop != NULL) {
+ /* Ensure we get real property data, be it an actual RNA property,
+ * or an IDProperty in disguise. */
+ prop_a = rna_ensure_property_realdata(&prop_a, ptr_a);
+ prop_b = rna_ensure_property_realdata(&prop_b, ptr_b);
+
+ if (ELEM(NULL, prop_a, prop_b)) {
+ return (prop_a == prop_b) ? 0 : 1;
+ }
+ }
+
+ /* Check if we are working with arrays. */
+ const bool is_array_a = RNA_property_array_check(prop_a);
+ const bool is_array_b = RNA_property_array_check(prop_b);
+
+ if (is_array_a != is_array_b) {
+ /* Should probably never happen actually... */
+ BLI_assert(0);
+ return is_array_a ? 1 : -1;
+ }
+
+ /* Get the length of the array to work with. */
+ const int len_a = RNA_property_array_length(ptr_a, prop_a);
+ const int len_b = RNA_property_array_length(ptr_b, prop_b);
+
+ if (len_a != len_b) {
+ /* Do not handle override in that case,
+ * we do not support insertion/deletion from arrays for now. */
+ return len_a > len_b ? 1 : -1;
+ }
+
+ if (is_array_a && len_a == 0) {
+ /* Empty arrays, will happen in some case with dynamic ones. */
+ return 0;
+ }
+
+ RNAPropOverrideDiff override_diff = NULL;
+ /* Special case for IDProps, we use default callback then. */
+ if (prop_a->magic != RNA_MAGIC) {
+ override_diff = rna_property_override_diff_default;
+ if (prop_b->magic == RNA_MAGIC && prop_b->override_diff != override_diff) {
+ override_diff = NULL;
+ }
+ }
+ else if (prop_b->magic != RNA_MAGIC) {
+ override_diff = rna_property_override_diff_default;
+ if (prop_a->override_diff != override_diff) {
+ override_diff = NULL;
+ }
+ }
+ else if (prop_a->override_diff == prop_b->override_diff) {
+ override_diff = prop_a->override_diff;
+ }
+
+ if (override_diff == NULL) {
+#ifndef NDEBUG
+ printf("'%s' gives unmatching or NULL RNA diff callbacks, should not happen (%d vs. %d).\n",
+ rna_path ?
+ rna_path :
+ (prop_a->magic != RNA_MAGIC ? ((IDProperty *)prop_a)->name : prop_a->identifier),
+ prop_a->magic == RNA_MAGIC,
+ prop_b->magic == RNA_MAGIC);
+#endif
+ BLI_assert(0);
+ return 1;
+ }
+
+ bool override_changed = false;
+ int diff_flags = flags;
+ if (!RNA_property_overridable_get(ptr_a, prop_a)) {
+ diff_flags &= ~RNA_OVERRIDE_COMPARE_CREATE;
+ }
+ const int diff = override_diff(bmain,
+ ptr_a,
+ ptr_b,
+ prop_a,
+ prop_b,
+ len_a,
+ len_b,
+ mode,
+ override,
+ rna_path,
+ diff_flags,
+ &override_changed);
+ if (override_changed && r_report_flags) {
+ *r_report_flags |= RNA_OVERRIDE_MATCH_RESULT_CREATED;
+ }
+
+ return diff;
+}
+
+/* Modify local data-block to make it ready for override application
+ * (only needed for diff operations, where we use
+ * the local data-block's data as second operand). */
+static bool rna_property_override_operation_store(Main *bmain,
+ PointerRNA *ptr_local,
+ PointerRNA *ptr_reference,
+ PointerRNA *ptr_storage,
+ PropertyRNA *prop_local,
+ PropertyRNA *prop_reference,
+ PropertyRNA *prop_storage,
+ IDOverrideLibraryProperty *op)
+{
+ int len_local, len_reference, len_storage = 0;
+ bool changed = false;
+
+ if (ptr_storage == NULL) {
+ return changed;
+ }
+
+ /* get the length of the array to work with */
+ len_local = RNA_property_array_length(ptr_local, prop_local);
+ len_reference = RNA_property_array_length(ptr_reference, prop_reference);
+ if (prop_storage) {
+ len_storage = RNA_property_array_length(ptr_storage, prop_storage);
+ }
+
+ if (len_local != len_reference || len_local != len_storage) {
+ /* Do not handle override in that case,
+ * we do not support insertion/deletion from arrays for now. */
+ return changed;
+ }
+
+ BLI_assert(prop_local->override_store == prop_reference->override_store &&
+ (!ptr_storage || prop_local->override_store == prop_storage->override_store) &&
+ prop_local->override_store != NULL);
+
+ for (IDOverrideLibraryPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ /* Only needed for diff operations. */
+ if (!ELEM(opop->operation,
+ IDOVERRIDE_LIBRARY_OP_ADD,
+ IDOVERRIDE_LIBRARY_OP_SUBTRACT,
+ IDOVERRIDE_LIBRARY_OP_MULTIPLY)) {
+ continue;
+ }
+
+ if (prop_local->override_store(bmain,
+ ptr_local,
+ ptr_reference,
+ ptr_storage,
+ prop_local,
+ prop_reference,
+ prop_storage,
+ len_local,
+ len_reference,
+ len_storage,
+ opop)) {
+ changed = true;
+ }
+ }
+
+ return changed;
+}
+
+static bool rna_property_override_operation_apply(Main *bmain,
+ PointerRNA *ptr_dst,
+ PointerRNA *ptr_src,
+ PointerRNA *ptr_storage,
+ PropertyRNA *prop_dst,
+ PropertyRNA *prop_src,
+ PropertyRNA *prop_storage,
+ PointerRNA *ptr_item_dst,
+ PointerRNA *ptr_item_src,
+ PointerRNA *ptr_item_storage,
+ IDOverrideLibraryPropertyOperation *opop)
+{
+ int len_dst, len_src, len_storage = 0;
+
+ const short override_op = opop->operation;
+
+ if (override_op == IDOVERRIDE_LIBRARY_OP_NOOP) {
+ return true;
+ }
+
+ if (ELEM(override_op,
+ IDOVERRIDE_LIBRARY_OP_ADD,
+ IDOVERRIDE_LIBRARY_OP_SUBTRACT,
+ IDOVERRIDE_LIBRARY_OP_MULTIPLY) &&
+ !ptr_storage) {
+ /* We cannot apply 'diff' override operations without some reference storage.
+ * This should typically only happen at read time of .blend file... */
+ return false;
+ }
+
+ if (ELEM(override_op,
+ IDOVERRIDE_LIBRARY_OP_ADD,
+ IDOVERRIDE_LIBRARY_OP_SUBTRACT,
+ IDOVERRIDE_LIBRARY_OP_MULTIPLY) &&
+ !prop_storage) {
+ /* We cannot apply 'diff' override operations without some reference storage.
+ * This should typically only happen at read time of .blend file... */
+ return false;
+ }
+
+ RNAPropOverrideApply override_apply = NULL;
+ /* Special case for IDProps, we use default callback then. */
+ if (prop_dst->magic != RNA_MAGIC) {
+ override_apply = rna_property_override_apply_default;
+ if (prop_src->magic == RNA_MAGIC && prop_src->override_apply != override_apply) {
+ override_apply = NULL;
+ }
+ }
+ else if (prop_src->magic != RNA_MAGIC) {
+ override_apply = rna_property_override_apply_default;
+ if (prop_dst->override_apply != override_apply) {
+ override_apply = NULL;
+ }
+ }
+ else if (prop_dst->override_apply == prop_src->override_apply) {
+ override_apply = prop_dst->override_apply;
+ }
+
+ if (ptr_storage && prop_storage->magic == RNA_MAGIC &&
+ prop_storage->override_apply != override_apply) {
+ override_apply = NULL;
+ }
+
+ if (override_apply == NULL) {
+#ifndef NDEBUG
+ printf("'%s' gives unmatching or NULL RNA copy callbacks, should not happen (%d vs. %d).\n",
+ prop_dst->magic != RNA_MAGIC ? ((IDProperty *)prop_dst)->name : prop_dst->identifier,
+ prop_dst->magic == RNA_MAGIC,
+ prop_src->magic == RNA_MAGIC);
+#endif
+ BLI_assert(0);
+ return false;
+ }
+
+ /* get the length of the array to work with */
+ len_dst = RNA_property_array_length(ptr_dst, prop_dst);
+ len_src = RNA_property_array_length(ptr_src, prop_src);
+ if (ptr_storage) {
+ len_storage = RNA_property_array_length(ptr_storage, prop_storage);
+ }
+
+ if (len_dst != len_src || (ptr_storage && len_dst != len_storage)) {
+ /* Do not handle override in that case,
+ * we do not support insertion/deletion from arrays for now. */
+ return false;
+ }
+
+ /* get and set the default values as appropriate for the various types */
+ return override_apply(bmain,
+ ptr_dst,
+ ptr_src,
+ ptr_storage,
+ prop_dst,
+ prop_src,
+ prop_storage,
+ len_dst,
+ len_src,
+ len_storage,
+ ptr_item_dst,
+ ptr_item_src,
+ ptr_item_storage,
+ opop);
+}
+
+/**
+ * Check whether reference and local overridden data match (are the same),
+ * with respect to given restrictive sets of properties.
+ * If requested, will generate needed new property overrides, and/or restore values from reference.
+ *
+ * \param r_report_flags: If given,
+ * will be set with flags matching actions taken by the function on \a ptr_local.
+ *
+ * \return True if _resulting_ \a ptr_local does match \a ptr_reference.
+ */
+bool RNA_struct_override_matches(Main *bmain,
+ PointerRNA *ptr_local,
+ PointerRNA *ptr_reference,
+ const char *root_path,
+ IDOverrideLibrary *override,
+ const eRNAOverrideMatch flags,
+ eRNAOverrideMatchResult *r_report_flags)
+{
+ CollectionPropertyIterator iter;
+ PropertyRNA *iterprop;
+ bool matching = true;
+
+ BLI_assert(ptr_local->type == ptr_reference->type);
+ BLI_assert(ptr_local->owner_id && ptr_reference->owner_id);
+
+ const bool ignore_non_overridable = (flags & RNA_OVERRIDE_COMPARE_IGNORE_NON_OVERRIDABLE) != 0;
+ const bool ignore_overridden = (flags & RNA_OVERRIDE_COMPARE_IGNORE_OVERRIDDEN) != 0;
+ const bool do_create = (flags & RNA_OVERRIDE_COMPARE_CREATE) != 0;
+ const bool do_restore = (flags & RNA_OVERRIDE_COMPARE_RESTORE) != 0;
+
+//#define DEBUG_OVERRIDE_TIMEIT
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ static float _sum_time_global = 0.0f;
+ static float _num_time_global = 0.0f;
+ double _timeit_time_global;
+ static float _sum_time_diffing = 0.0f;
+ static float _delta_time_diffing = 0.0f;
+ static int _num_delta_time_diffing = 0.0f;
+ static float _num_time_diffing = 0.0f;
+ double _timeit_time_diffing;
+
+ if (!root_path) {
+ _delta_time_diffing = 0.0f;
+ _num_delta_time_diffing = 0;
+ _timeit_time_global = PIL_check_seconds_timer();
+ }
+#endif
+
+ iterprop = RNA_struct_iterator_property(ptr_local->type);
+
+ for (RNA_property_collection_begin(ptr_local, iterprop, &iter); iter.valid;
+ RNA_property_collection_next(&iter)) {
+ PropertyRNA *prop_local = iter.ptr.data;
+ PropertyRNA *prop_reference = iter.ptr.data;
+
+ /* Ensure we get real property data, be it an actual RNA property,
+ * or an IDProperty in disguise. */
+ prop_local = rna_ensure_property_realdata(&prop_local, ptr_local);
+ prop_reference = rna_ensure_property_realdata(&prop_reference, ptr_reference);
+
+ if (ELEM(NULL, prop_local, prop_reference)) {
+ continue;
+ }
+
+ if (ignore_non_overridable && !RNA_property_overridable_get(ptr_local, prop_local)) {
+ continue;
+ }
+
+#if 0 /* This actually makes things slower, since it has to check for animation paths etc! */
+ if (RNA_property_animated(ptr_local, prop_local)) {
+ /* We cannot do anything here really, animation is some kind of dynamic overrides that has
+ * precedence over static one... */
+ continue;
+ }
+#endif
+
+#define RNA_PATH_BUFFSIZE 8192
+#define RNA_PATH_PRINTF(_str, ...) \
+ if (BLI_snprintf(rna_path, RNA_PATH_BUFFSIZE, (_str), __VA_ARGS__) >= RNA_PATH_BUFFSIZE) { \
+ rna_path = BLI_sprintfN((_str), __VA_ARGS__); \
+ } \
+ (void)0
+#define RNA_PATH_FREE \
+ if (rna_path != rna_path_buffer) \
+ MEM_freeN(rna_path)
+
+ char rna_path_buffer[RNA_PATH_BUFFSIZE];
+ char *rna_path = rna_path_buffer;
+
+ /* XXX TODO this will have to be refined to handle collections insertions, and array items */
+ if (root_path) {
+ /* Inlined building, much much more efficient. */
+ if (prop_local->magic == RNA_MAGIC) {
+ RNA_PATH_PRINTF("%s.%s", root_path, RNA_property_identifier(prop_local));
+ }
+ else {
+ RNA_PATH_PRINTF("%s[\"%s\"]", root_path, RNA_property_identifier(prop_local));
+ }
+ }
+ else {
+ /* This is rather slow, but is not much called, so not really worth optimizing. */
+ rna_path = RNA_path_from_ID_to_property(ptr_local, prop_local);
+ }
+ if (rna_path == NULL) {
+ continue;
+ }
+
+ // printf("Override Checking %s\n", rna_path);
+
+ if (ignore_overridden && BKE_override_library_property_find(override, rna_path) != NULL) {
+ RNA_PATH_FREE;
+ continue;
+ }
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ if (!root_path) {
+ _timeit_time_diffing = PIL_check_seconds_timer();
+ }
+#endif
+
+ eRNAOverrideMatchResult report_flags = 0;
+ const int diff = rna_property_override_diff(bmain,
+ ptr_local,
+ ptr_reference,
+ NULL,
+ prop_local,
+ prop_reference,
+ rna_path,
+ RNA_EQ_STRICT,
+ override,
+ flags,
+ &report_flags);
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ if (!root_path) {
+ const float _delta_time = (float)(PIL_check_seconds_timer() - _timeit_time_diffing);
+ _delta_time_diffing += _delta_time;
+ _num_delta_time_diffing++;
+ }
+#endif
+
+ matching = matching && diff == 0;
+ if (r_report_flags) {
+ *r_report_flags |= report_flags;
+ }
+
+ if (diff != 0) {
+ /* XXX TODO: refine this for per-item overriding of arrays... */
+ IDOverrideLibraryProperty *op = BKE_override_library_property_find(override, rna_path);
+ IDOverrideLibraryPropertyOperation *opop = op ? op->operations.first : NULL;
+
+ if (do_restore && (report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) == 0) {
+ /* We are allowed to restore to reference's values. */
+ if (ELEM(NULL, op, opop) || opop->operation == IDOVERRIDE_LIBRARY_OP_NOOP) {
+ /* We should restore that property to its reference value */
+ if (RNA_property_editable(ptr_local, prop_local)) {
+ IDOverrideLibraryPropertyOperation opop_tmp = {
+ .operation = IDOVERRIDE_LIBRARY_OP_REPLACE,
+ .subitem_reference_index = -1,
+ .subitem_local_index = -1,
+ };
+ rna_property_override_operation_apply(bmain,
+ ptr_local,
+ ptr_reference,
+ NULL,
+ prop_local,
+ prop_reference,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ &opop_tmp);
+ if (r_report_flags) {
+ *r_report_flags |= RNA_OVERRIDE_MATCH_RESULT_RESTORED;
+ }
+ }
+ else {
+ /* Too noisy for now, this triggers on runtime props like transform matrices etc. */
+#if 0
+ BLI_assert(!"We have differences between reference and "
+ "overriding data on non-editable property.");
+#endif
+ matching = false;
+ }
+ }
+ }
+ else if ((report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) == 0 && ELEM(NULL, op, opop)) {
+ /* This property is not overridden, and differs from reference, so we have no match. */
+ matching = false;
+ if (!(do_create || do_restore)) {
+ /* Since we have no 'changing' action allowed, we can break here. */
+ MEM_SAFE_FREE(rna_path);
+ break;
+ }
+ }
+ }
+
+ RNA_PATH_FREE;
+
+#undef RNA_PATH_BUFFSIZE
+#undef RNA_PATH_PRINTF
+#undef RNA_PATH_FREE
+ }
+ RNA_property_collection_end(&iter);
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ if (!root_path) {
+ const float _delta_time = (float)(PIL_check_seconds_timer() - _timeit_time_global);
+ _sum_time_global += _delta_time;
+ _num_time_global++;
+ _sum_time_diffing += _delta_time_diffing;
+ _num_time_diffing++;
+ printf("ID: %s\n", ((ID *)ptr_local->owner_id)->name);
+ printf("time end (%s): %.6f\n", __func__, _delta_time);
+ printf("time averaged (%s): %.6f (total: %.6f, in %d runs)\n",
+ __func__,
+ (_sum_time_global / _num_time_global),
+ _sum_time_global,
+ (int)_num_time_global);
+ printf("diffing time end (%s): %.6f (in %d runs)\n",
+ __func__,
+ _delta_time_diffing,
+ _num_delta_time_diffing);
+ printf("diffing time averaged (%s): %.6f (total: %.6f, in %d runs)\n",
+ __func__,
+ (_sum_time_diffing / _num_time_diffing),
+ _sum_time_diffing,
+ (int)_num_time_diffing);
+ }
+#endif
+
+ return matching;
+}
+
+/** Store needed second operands into \a storage data-block
+ * for differential override operations. */
+bool RNA_struct_override_store(Main *bmain,
+ PointerRNA *ptr_local,
+ PointerRNA *ptr_reference,
+ PointerRNA *ptr_storage,
+ IDOverrideLibrary *override)
+{
+ bool changed = false;
+
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_START_AVERAGED(RNA_struct_override_store);
+#endif
+ for (IDOverrideLibraryProperty *op = override->properties.first; op; op = op->next) {
+ /* Simplified for now! */
+ PointerRNA data_reference, data_local;
+ PropertyRNA *prop_reference, *prop_local;
+
+ if (RNA_path_resolve_property(ptr_local, op->rna_path, &data_local, &prop_local) &&
+ RNA_path_resolve_property(ptr_reference, op->rna_path, &data_reference, &prop_reference)) {
+ PointerRNA data_storage;
+ PropertyRNA *prop_storage = NULL;
+
+ /* It is totally OK if this does not success,
+ * only a subset of override operations actually need storage. */
+ if (ptr_storage && (ptr_storage->owner_id != NULL)) {
+ RNA_path_resolve_property(ptr_storage, op->rna_path, &data_storage, &prop_storage);
+ }
+
+ if (rna_property_override_operation_store(bmain,
+ &data_local,
+ &data_reference,
+ &data_storage,
+ prop_reference,
+ prop_local,
+ prop_storage,
+ op)) {
+ changed = true;
+ }
+ }
+ }
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_END_AVERAGED(RNA_struct_override_store);
+#endif
+
+ return changed;
+}
+
+static void rna_property_override_apply_ex(Main *bmain,
+ PointerRNA *ptr_dst,
+ PointerRNA *ptr_src,
+ PointerRNA *ptr_storage,
+ PropertyRNA *prop_dst,
+ PropertyRNA *prop_src,
+ PropertyRNA *prop_storage,
+ PointerRNA *ptr_item_dst,
+ PointerRNA *ptr_item_src,
+ PointerRNA *ptr_item_storage,
+ IDOverrideLibraryProperty *op,
+ const bool do_insert)
+{
+ for (IDOverrideLibraryPropertyOperation *opop = op->operations.first; opop; opop = opop->next) {
+ if (!do_insert != !ELEM(opop->operation,
+ IDOVERRIDE_LIBRARY_OP_INSERT_AFTER,
+ IDOVERRIDE_LIBRARY_OP_INSERT_BEFORE)) {
+ if (!do_insert) {
+ printf("Skipping insert override operations in first pass (%s)!\n", op->rna_path);
+ }
+ continue;
+ }
+
+ /* Note: will have to think about putting that logic into its own function maybe?
+ * Would be nice to have it in a single place...
+ * Note that here, src is the local saved ID, and dst is a copy of the linked ID (since we use
+ * local ID as storage to apply local changes on top of a clean copy of the linked data). */
+ PointerRNA private_ptr_item_dst, private_ptr_item_src, private_ptr_item_storage;
+ if (opop->subitem_local_name != NULL || opop->subitem_reference_name != NULL ||
+ opop->subitem_local_index != -1 || opop->subitem_reference_index != -1) {
+ RNA_POINTER_INVALIDATE(&private_ptr_item_dst);
+ RNA_POINTER_INVALIDATE(&private_ptr_item_src);
+ RNA_POINTER_INVALIDATE(&private_ptr_item_storage);
+ if (opop->subitem_local_name != NULL) {
+ RNA_property_collection_lookup_string(
+ ptr_src, prop_src, opop->subitem_local_name, &private_ptr_item_src);
+ if (opop->subitem_reference_name != NULL) {
+ RNA_property_collection_lookup_string(
+ ptr_dst, prop_dst, opop->subitem_reference_name, &private_ptr_item_dst);
+ }
+ else {
+ RNA_property_collection_lookup_string(
+ ptr_dst, prop_dst, opop->subitem_local_name, &private_ptr_item_dst);
+ }
+ }
+ else if (opop->subitem_reference_name != NULL) {
+ RNA_property_collection_lookup_string(
+ ptr_src, prop_src, opop->subitem_reference_name, &private_ptr_item_src);
+ RNA_property_collection_lookup_string(
+ ptr_dst, prop_dst, opop->subitem_reference_name, &private_ptr_item_dst);
+ }
+ else if (opop->subitem_local_index != -1) {
+ RNA_property_collection_lookup_int(
+ ptr_src, prop_src, opop->subitem_local_index, &private_ptr_item_src);
+ if (opop->subitem_reference_index != -1) {
+ RNA_property_collection_lookup_int(
+ ptr_dst, prop_dst, opop->subitem_reference_index, &private_ptr_item_dst);
+ }
+ else {
+ RNA_property_collection_lookup_int(
+ ptr_dst, prop_dst, opop->subitem_local_index, &private_ptr_item_dst);
+ }
+ }
+ else if (opop->subitem_reference_index != -1) {
+ RNA_property_collection_lookup_int(
+ ptr_src, prop_src, opop->subitem_reference_index, &private_ptr_item_src);
+ RNA_property_collection_lookup_int(
+ ptr_dst, prop_dst, opop->subitem_reference_index, &private_ptr_item_dst);
+ }
+ if (prop_storage != NULL) {
+ if (opop->subitem_local_name != NULL) {
+ RNA_property_collection_lookup_string(
+ ptr_storage, prop_storage, opop->subitem_local_name, &private_ptr_item_storage);
+ }
+ else if (opop->subitem_reference_name != NULL) {
+ RNA_property_collection_lookup_string(
+ ptr_storage, prop_storage, opop->subitem_reference_name, &private_ptr_item_storage);
+ }
+ else if (opop->subitem_local_index != -1) {
+ RNA_property_collection_lookup_int(
+ ptr_storage, prop_storage, opop->subitem_local_index, &private_ptr_item_storage);
+ }
+ else if (opop->subitem_reference_index != -1) {
+ RNA_property_collection_lookup_int(
+ ptr_storage, prop_storage, opop->subitem_reference_index, &private_ptr_item_storage);
+ }
+ }
+ ptr_item_dst = &private_ptr_item_dst;
+ ptr_item_src = &private_ptr_item_src;
+ ptr_item_storage = &private_ptr_item_storage;
+ }
+
+ if (!rna_property_override_operation_apply(bmain,
+ ptr_dst,
+ ptr_src,
+ ptr_storage,
+ prop_dst,
+ prop_src,
+ prop_storage,
+ ptr_item_dst,
+ ptr_item_src,
+ ptr_item_storage,
+ opop)) {
+ /* TODO No assert here, would be much much better to just report as warning,
+ * failing override applications will probably be fairly common! */
+ BLI_assert(0);
+ }
+ }
+}
+
+/** Apply given \a override operations on \a ptr_dst, using \a ptr_src
+ * (and \a ptr_storage for differential ops) as source. */
+void RNA_struct_override_apply(Main *bmain,
+ PointerRNA *ptr_dst,
+ PointerRNA *ptr_src,
+ PointerRNA *ptr_storage,
+ IDOverrideLibrary *override)
+{
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_START_AVERAGED(RNA_struct_override_apply);
+#endif
+ /* Note: Applying insert operations in a separate pass is mandatory.
+ * We could optimize this later, but for now, as inefficient as it is,
+ * don't think this is a critical point.
+ */
+ bool do_insert = false;
+ for (int i = 0; i < 2; i++, do_insert = true) {
+ for (IDOverrideLibraryProperty *op = override->properties.first; op; op = op->next) {
+ /* Simplified for now! */
+ PointerRNA data_src, data_dst;
+ PointerRNA data_item_src, data_item_dst;
+ PropertyRNA *prop_src, *prop_dst;
+
+ if (RNA_path_resolve_property_and_item_pointer(
+ ptr_dst, op->rna_path, &data_dst, &prop_dst, &data_item_dst) &&
+ RNA_path_resolve_property_and_item_pointer(
+ ptr_src, op->rna_path, &data_src, &prop_src, &data_item_src)) {
+ PointerRNA data_storage, data_item_storage;
+ PropertyRNA *prop_storage = NULL;
+
+ /* It is totally OK if this does not success,
+ * only a subset of override operations actually need storage. */
+ if (ptr_storage && (ptr_storage->owner_id != NULL)) {
+ RNA_path_resolve_property_and_item_pointer(
+ ptr_storage, op->rna_path, &data_storage, &prop_storage, &data_item_storage);
+ }
+
+ rna_property_override_apply_ex(bmain,
+ &data_dst,
+ &data_src,
+ prop_storage ? &data_storage : NULL,
+ prop_dst,
+ prop_src,
+ prop_storage,
+ &data_item_dst,
+ &data_item_src,
+ prop_storage ? &data_item_storage : NULL,
+ op,
+ do_insert);
+ }
+#ifndef NDEBUG
+ else {
+ printf(
+ "Failed to apply library override operation to '%s.%s' "
+ "(could not resolve some properties, local: %d, override: %d)\n",
+ ((ID *)ptr_src->owner_id)->name,
+ op->rna_path,
+ RNA_path_resolve_property(ptr_dst, op->rna_path, &data_dst, &prop_dst),
+ RNA_path_resolve_property(ptr_src, op->rna_path, &data_src, &prop_src));
+ }
+#endif
+ }
+ }
+#ifdef DEBUG_OVERRIDE_TIMEIT
+ TIMEIT_END_AVERAGED(RNA_struct_override_apply);
+#endif
+}
+
+IDOverrideLibraryProperty *RNA_property_override_property_find(PointerRNA *ptr, PropertyRNA *prop)
+{
+ ID *id = ptr->owner_id;
+
+ if (!id || !id->override_library) {
+ return NULL;
+ }
+
+ char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
+ if (rna_path) {
+ IDOverrideLibraryProperty *op = BKE_override_library_property_find(id->override_library,
+ rna_path);
+ MEM_freeN(rna_path);
+ return op;
+ }
+ return NULL;
+}
+
+IDOverrideLibraryProperty *RNA_property_override_property_get(PointerRNA *ptr,
+ PropertyRNA *prop,
+ bool *r_created)
+{
+ ID *id = ptr->owner_id;
+
+ if (!id || !id->override_library) {
+ return NULL;
+ }
+
+ char *rna_path = RNA_path_from_ID_to_property(ptr, prop);
+ if (rna_path) {
+ IDOverrideLibraryProperty *op = BKE_override_library_property_get(
+ id->override_library, rna_path, r_created);
+ MEM_freeN(rna_path);
+ return op;
+ }
+ return NULL;
+}
+
+IDOverrideLibraryPropertyOperation *RNA_property_override_property_operation_find(
+ PointerRNA *ptr, PropertyRNA *prop, const int index, const bool strict, bool *r_strict)
+{
+ IDOverrideLibraryProperty *op = RNA_property_override_property_find(ptr, prop);
+
+ if (!op) {
+ return NULL;
+ }
+
+ return BKE_override_library_property_operation_find(
+ op, NULL, NULL, index, index, strict, r_strict);
+}
+
+IDOverrideLibraryPropertyOperation *RNA_property_override_property_operation_get(
+ PointerRNA *ptr,
+ PropertyRNA *prop,
+ const short operation,
+ const int index,
+ const bool strict,
+ bool *r_strict,
+ bool *r_created)
+{
+ IDOverrideLibraryProperty *op = RNA_property_override_property_get(ptr, prop, NULL);
+
+ if (!op) {
+ return NULL;
+ }
+
+ return BKE_override_library_property_operation_get(
+ op, operation, NULL, NULL, index, index, strict, r_strict, r_created);
+}
+
+eRNAOverrideStatus RNA_property_override_library_status(PointerRNA *ptr,
+ PropertyRNA *prop,
+ const int index)
+{
+ int override_status = 0;
+
+ if (!BKE_override_library_is_enabled()) {
+ return override_status;
+ }
+
+ if (!ptr || !prop || !ptr->owner_id || !(ptr->owner_id)->override_library) {
+ return override_status;
+ }
+
+ if (RNA_property_overridable_get(ptr, prop) && RNA_property_editable_flag(ptr, prop)) {
+ override_status |= RNA_OVERRIDE_STATUS_OVERRIDABLE;
+ }
+
+ IDOverrideLibraryPropertyOperation *opop = RNA_property_override_property_operation_find(
+ ptr, prop, index, false, NULL);
+ if (opop != NULL) {
+ override_status |= RNA_OVERRIDE_STATUS_OVERRIDDEN;
+ if (opop->flag & IDOVERRIDE_LIBRARY_FLAG_MANDATORY) {
+ override_status |= RNA_OVERRIDE_STATUS_MANDATORY;
+ }
+ if (opop->flag & IDOVERRIDE_LIBRARY_FLAG_LOCKED) {
+ override_status |= RNA_OVERRIDE_STATUS_LOCKED;
+ }
+ }
+
+ return override_status;
+}
diff --git a/source/blender/makesrna/intern/rna_access_internal.h b/source/blender/makesrna/intern/rna_access_internal.h
new file mode 100644
index 00000000000..28ec504e376
--- /dev/null
+++ b/source/blender/makesrna/intern/rna_access_internal.h
@@ -0,0 +1,34 @@
+/*
+ * 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.
+ */
+
+/** \file
+ * \ingroup RNA
+ */
+
+#ifndef __RNA_ACCESS_INTERNAL_H__
+#define __RNA_ACCESS_INTERNAL_H__
+
+#include "BLI_utildefines.h"
+
+#include "rna_internal_types.h"
+
+struct IDProperty;
+
+PropertyRNA *rna_ensure_property(PropertyRNA *prop);
+
+void rna_idproperty_touch(struct IDProperty *idprop);
+
+#endif /* __ACCESS_RNA_INTERNAL_H__ */
diff --git a/source/blender/makesrna/intern/rna_action.c b/source/blender/makesrna/intern/rna_action.c
index 4ad2aa55c75..24f8d5c4e3d 100644
--- a/source/blender/makesrna/intern/rna_action.c
+++ b/source/blender/makesrna/intern/rna_action.c
@@ -249,15 +249,15 @@ static void rna_Action_active_pose_marker_index_range(
static void rna_Action_frame_range_get(PointerRNA *ptr, float *values)
{ /* don't include modifiers because they too easily can have very large
* ranges: MINAFRAMEF to MAXFRAMEF. */
- calc_action_range(ptr->id.data, values, values + 1, false);
+ calc_action_range((bAction *)ptr->owner_id, values, values + 1, false);
}
/* Used to check if an action (value pointer)
* is suitable to be assigned to the ID-block that is ptr. */
bool rna_Action_id_poll(PointerRNA *ptr, PointerRNA value)
{
- ID *srcId = (ID *)ptr->id.data;
- bAction *act = (bAction *)value.id.data;
+ ID *srcId = ptr->owner_id;
+ bAction *act = (bAction *)value.owner_id;
if (act) {
/* there can still be actions that will have undefined id-root
@@ -280,7 +280,7 @@ bool rna_Action_id_poll(PointerRNA *ptr, PointerRNA value)
bool rna_Action_actedit_assign_poll(PointerRNA *ptr, PointerRNA value)
{
SpaceAction *saction = (SpaceAction *)ptr->data;
- bAction *act = (bAction *)value.id.data;
+ bAction *act = (bAction *)value.owner_id;
if (act) {
/* there can still be actions that will have undefined id-root
diff --git a/source/blender/makesrna/intern/rna_animation.c b/source/blender/makesrna/intern/rna_animation.c
index 3d14616bcc9..6157ec41f19 100644
--- a/source/blender/makesrna/intern/rna_animation.c
+++ b/source/blender/makesrna/intern/rna_animation.c
@@ -128,7 +128,7 @@ const EnumPropertyItem rna_enum_keying_flag_items_api[] = {
static void rna_AnimData_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
ANIM_id_update(bmain, id);
}
@@ -157,7 +157,7 @@ static void rna_AnimData_action_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- ID *ownerId = (ID *)ptr->id.data;
+ ID *ownerId = ptr->owner_id;
/* set action */
BKE_animdata_set_action(NULL, ownerId, value.data);
@@ -303,7 +303,7 @@ static StructRNA *rna_KeyingSetInfo_register(Main *bmain,
{
KeyingSetInfo dummyksi = {NULL};
KeyingSetInfo *ksi;
- PointerRNA dummyptr = {{NULL}};
+ PointerRNA dummyptr = {NULL};
int have_function[3];
/* setup dummy type info to store static properties in */
@@ -727,12 +727,12 @@ bool rna_AnimaData_override_apply(Main *UNUSED(bmain),
if (adt_dst == NULL && adt_src != NULL) {
/* Copy anim data from reference into final local ID. */
- BKE_animdata_copy_id(NULL, ptr_dst->id.data, ptr_src->id.data, 0);
+ BKE_animdata_copy_id(NULL, ptr_dst->owner_id, ptr_src->owner_id, 0);
return true;
}
else if (adt_dst != NULL && adt_src == NULL) {
/* Override has cleared/removed anim data from its reference. */
- BKE_animdata_free(ptr_dst->id.data, true);
+ BKE_animdata_free(ptr_dst->owner_id, true);
return true;
}
diff --git a/source/blender/makesrna/intern/rna_armature.c b/source/blender/makesrna/intern/rna_armature.c
index 6737363bae4..d3bdcf03d4d 100644
--- a/source/blender/makesrna/intern/rna_armature.c
+++ b/source/blender/makesrna/intern/rna_armature.c
@@ -50,7 +50,7 @@
static void rna_Armature_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
@@ -59,7 +59,7 @@ static void rna_Armature_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene),
static void rna_Armature_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
DEG_relations_tag_update(bmain);
@@ -73,12 +73,12 @@ static void rna_Armature_act_bone_set(PointerRNA *ptr,
{
bArmature *arm = (bArmature *)ptr->data;
- if (value.id.data == NULL && value.data == NULL) {
+ if (value.owner_id == NULL && value.data == NULL) {
arm->act_bone = NULL;
}
else {
- if (value.id.data != arm) {
- Object *ob = (Object *)value.id.data;
+ if (value.owner_id != &arm->id) {
+ Object *ob = (Object *)value.owner_id;
if (GS(ob->id.name) != ID_OB || (ob->data != arm)) {
printf("ERROR: armature set active bone - new active doesn't come from this armature\n");
@@ -97,11 +97,11 @@ static void rna_Armature_act_edit_bone_set(PointerRNA *ptr,
{
bArmature *arm = (bArmature *)ptr->data;
- if (value.id.data == NULL && value.data == NULL) {
+ if (value.owner_id == NULL && value.data == NULL) {
arm->act_edbone = NULL;
}
else {
- if (value.id.data != arm) {
+ if (value.owner_id != &arm->id) {
/* raise an error! */
}
else {
@@ -151,7 +151,7 @@ static void rna_Armature_edit_bone_remove(bArmature *arm,
static void rna_Armature_update_layers(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bArmature *arm = ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
Object *ob;
/* proxy lib exception, store it here so we can restore layers on file
@@ -168,7 +168,7 @@ static void rna_Armature_update_layers(Main *bmain, Scene *UNUSED(scene), Pointe
static void rna_Armature_redraw_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
DEG_id_tag_update(id, ID_RECALC_COPY_ON_WRITE);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
@@ -177,7 +177,7 @@ static void rna_Armature_redraw_data(Main *UNUSED(bmain), Scene *UNUSED(scene),
/* called whenever a bone is renamed */
static void rna_Bone_update_renamed(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
/* redraw view */
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
@@ -188,7 +188,7 @@ static void rna_Bone_update_renamed(Main *UNUSED(bmain), Scene *UNUSED(scene), P
static void rna_Bone_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
/* 1) special updates for cases where rigs try to hook into armature drawing stuff
* e.g. Mask Modifier - 'Armature' option
@@ -225,7 +225,7 @@ static void rna_Bone_select_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
static char *rna_Bone_path(PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
Bone *bone = (Bone *)ptr->data;
char name_esc[sizeof(bone->name) * 2];
@@ -295,7 +295,7 @@ static void rna_bone_layer_set(int *layer, const bool *values)
static void rna_Bone_layer_set(PointerRNA *ptr, const bool *values)
{
- bArmature *arm = (bArmature *)ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
Bone *bone = (Bone *)ptr->data;
rna_bone_layer_set(&bone->layer, values);
@@ -331,7 +331,7 @@ static void rna_Armature_layer_set(PointerRNA *ptr, const bool *values)
static void rna_EditBone_name_set(PointerRNA *ptr, const char *value)
{
- bArmature *arm = (bArmature *)ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
EditBone *ebone = (EditBone *)ptr->data;
char oldname[sizeof(ebone->name)], newname[sizeof(ebone->name)];
@@ -345,7 +345,7 @@ static void rna_EditBone_name_set(PointerRNA *ptr, const char *value)
static void rna_Bone_name_set(PointerRNA *ptr, const char *value)
{
- bArmature *arm = (bArmature *)ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
Bone *bone = (Bone *)ptr->data;
char oldname[sizeof(bone->name)], newname[sizeof(bone->name)];
@@ -417,7 +417,7 @@ static void rna_EditBone_parent_set(PointerRNA *ptr,
}
else {
/* within same armature */
- if (value.id.data != ptr->id.data) {
+ if (value.owner_id != ptr->owner_id) {
return;
}
@@ -451,7 +451,7 @@ static void rna_EditBone_matrix_set(PointerRNA *ptr, const float *values)
static void rna_Bone_bbone_handle_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bArmature *arm = (bArmature *)ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
Bone *bone = (Bone *)ptr->data;
/* Update all users of this armature after changing B-Bone handles. */
@@ -483,7 +483,7 @@ static void rna_EditBone_bbone_prev_set(PointerRNA *ptr,
EditBone *hbone = (EditBone *)value.data;
/* Within the same armature? */
- if (hbone == NULL || value.id.data == ptr->id.data) {
+ if (hbone == NULL || value.owner_id == ptr->owner_id) {
ebone->bbone_prev = hbone;
}
}
@@ -496,7 +496,7 @@ static void rna_Bone_bbone_prev_set(PointerRNA *ptr,
Bone *hbone = (Bone *)value.data;
/* Within the same armature? */
- if (hbone == NULL || value.id.data == ptr->id.data) {
+ if (hbone == NULL || value.owner_id == ptr->owner_id) {
bone->bbone_prev = hbone;
}
}
@@ -515,7 +515,7 @@ static void rna_EditBone_bbone_next_set(PointerRNA *ptr,
EditBone *hbone = (EditBone *)value.data;
/* Within the same armature? */
- if (hbone == NULL || value.id.data == ptr->id.data) {
+ if (hbone == NULL || value.owner_id == ptr->owner_id) {
ebone->bbone_next = hbone;
}
}
@@ -528,14 +528,14 @@ static void rna_Bone_bbone_next_set(PointerRNA *ptr,
Bone *hbone = (Bone *)value.data;
/* Within the same armature? */
- if (hbone == NULL || value.id.data == ptr->id.data) {
+ if (hbone == NULL || value.owner_id == ptr->owner_id) {
bone->bbone_next = hbone;
}
}
static void rna_Armature_editbone_transform_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bArmature *arm = (bArmature *)ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
EditBone *ebone = (EditBone *)ptr->data;
EditBone *child;
@@ -590,7 +590,7 @@ static int rna_Armature_bones_lookup_string(PointerRNA *ptr, const char *key, Po
bArmature *arm = (bArmature *)ptr->data;
Bone *bone = BKE_armature_find_bone_name(arm, key);
if (bone) {
- RNA_pointer_create(ptr->id.data, &RNA_Bone, bone, r_ptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_Bone, bone, r_ptr);
return true;
}
else {
@@ -600,13 +600,13 @@ static int rna_Armature_bones_lookup_string(PointerRNA *ptr, const char *key, Po
static bool rna_Armature_is_editmode_get(PointerRNA *ptr)
{
- bArmature *arm = (bArmature *)ptr->id.data;
+ bArmature *arm = (bArmature *)ptr->owner_id;
return (arm->edbo != NULL);
}
-static void rna_Armature_transform(struct bArmature *arm, Main *bmain, float *mat)
+static void rna_Armature_transform(bArmature *arm, float *mat)
{
- ED_armature_transform(bmain, arm, (float(*)[4])mat, true);
+ ED_armature_transform(arm, (const float(*)[4])mat, true);
}
#else
@@ -621,7 +621,7 @@ void rna_def_bone_curved_common(StructRNA *srna, bool is_posebone)
RNA_def_property_update(prop, NC_OBJECT | ND_POSE, "rna_Pose_update"); \
} \
else { \
- RNA_def_property_update(prop, 0, "rna_Armature_update_data"); \
+ RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update"); \
} \
} \
((void)0)
@@ -871,11 +871,16 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
/* Number values */
/* envelope deform settings */
prop = RNA_def_property(srna, "envelope_distance", PROP_FLOAT, PROP_DISTANCE);
+ if (editbone) {
+ RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
+ }
+ else {
+ RNA_def_property_update(prop, 0, "rna_Armature_update_data");
+ }
RNA_def_property_float_sdna(prop, NULL, "dist");
RNA_def_property_range(prop, 0.0f, 1000.0f);
RNA_def_property_ui_text(
prop, "Envelope Deform Distance", "Bone deformation distance (for Envelope deform only)");
- RNA_def_property_update(prop, 0, "rna_Armature_update_data");
prop = RNA_def_property(srna, "envelope_weight", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "weight");
@@ -914,23 +919,38 @@ static void rna_def_bone_common(StructRNA *srna, int editbone)
/* b-bones deform settings */
prop = RNA_def_property(srna, "bbone_segments", PROP_INT, PROP_NONE);
+ if (editbone) {
+ RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
+ }
+ else {
+ RNA_def_property_update(prop, 0, "rna_Armature_dependency_update");
+ }
RNA_def_property_int_sdna(prop, NULL, "segments");
RNA_def_property_range(prop, 1, 32);
RNA_def_property_ui_text(
prop, "B-Bone Segments", "Number of subdivisions of bone (for B-Bones only)");
- RNA_def_property_update(prop, 0, "rna_Armature_dependency_update");
prop = RNA_def_property(srna, "bbone_x", PROP_FLOAT, PROP_NONE);
+ if (editbone) {
+ RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
+ }
+ else {
+ RNA_def_property_update(prop, 0, "rna_Armature_update_data");
+ }
RNA_def_property_float_sdna(prop, NULL, "xwidth");
- RNA_def_property_range(prop, 0.0f, 1000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 1000.0f, 1, RNA_TRANSLATION_PREC_DEFAULT);
RNA_def_property_ui_text(prop, "B-Bone Display X Width", "B-Bone X size");
- RNA_def_property_update(prop, 0, "rna_Armature_update_data");
prop = RNA_def_property(srna, "bbone_z", PROP_FLOAT, PROP_NONE);
+ if (editbone) {
+ RNA_def_property_update(prop, 0, "rna_Armature_editbone_transform_update");
+ }
+ else {
+ RNA_def_property_update(prop, 0, "rna_Armature_update_data");
+ }
RNA_def_property_float_sdna(prop, NULL, "zwidth");
- RNA_def_property_range(prop, 0.0f, 1000.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 1000.0f, 1, RNA_TRANSLATION_PREC_DEFAULT);
RNA_def_property_ui_text(prop, "B-Bone Display Z Width", "B-Bone Z size");
- RNA_def_property_update(prop, 0, "rna_Armature_update_data");
prop = RNA_def_property(srna, "bbone_handle_type_start", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "bbone_prev_type");
@@ -1300,7 +1320,6 @@ static void rna_def_armature(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "bArmature");
func = RNA_def_function(srna, "transform", "rna_Armature_transform");
- RNA_def_function_flag(func, FUNC_USE_MAIN);
RNA_def_function_ui_description(func, "Transform armature bones by a matrix");
parm = RNA_def_float_matrix(func, "matrix", 4, 4, NULL, 0.0f, 0.0f, "", "Matrix", 0.0f, 0.0f);
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
diff --git a/source/blender/makesrna/intern/rna_boid.c b/source/blender/makesrna/intern/rna_boid.c
index 8f30a7e0a98..722b7b12271 100644
--- a/source/blender/makesrna/intern/rna_boid.c
+++ b/source/blender/makesrna/intern/rna_boid.c
@@ -130,10 +130,10 @@ static void rna_Boids_reset(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
psys->recalc = ID_RECALC_PSYS_RESET;
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
else {
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_RESET);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_RESET);
}
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
@@ -145,10 +145,10 @@ static void rna_Boids_reset_deps(Main *bmain, Scene *UNUSED(scene), PointerRNA *
psys->recalc = ID_RECALC_PSYS_RESET;
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
else {
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_RESET);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_RESET);
}
DEG_relations_tag_update(bmain);
@@ -240,7 +240,7 @@ static void rna_BoidState_active_boid_rule_index_set(struct PointerRNA *ptr, int
static int particle_id_check(PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
return (GS(id->name) == ID_PA);
}
@@ -250,7 +250,7 @@ static char *rna_BoidSettings_path(PointerRNA *ptr)
BoidSettings *boids = (BoidSettings *)ptr->data;
if (particle_id_check(ptr)) {
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->boids == boids) {
return BLI_strdup("boids");
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index eeba7161309..15602599e4e 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -434,27 +434,27 @@ static bool rna_BrushCapabilitiesImagePaint_has_radius_get(PointerRNA *ptr)
static PointerRNA rna_Sculpt_tool_capabilities_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesSculpt, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesSculpt, ptr->owner_id);
}
static PointerRNA rna_Imapaint_tool_capabilities_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesImagePaint, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesImagePaint, ptr->owner_id);
}
static PointerRNA rna_Vertexpaint_tool_capabilities_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesVertexPaint, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesVertexPaint, ptr->owner_id);
}
static PointerRNA rna_Weightpaint_tool_capabilities_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesWeightPaint, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilitiesWeightPaint, ptr->owner_id);
}
static PointerRNA rna_Brush_capabilities_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilities, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_BrushCapabilities, ptr->owner_id);
}
static void rna_Brush_reset_icon(Brush *br)
@@ -764,7 +764,7 @@ static void rna_BrushGpencilSettings_use_material_pin_update(bContext *C, Pointe
{
ViewLayer *view_layer = CTX_data_view_layer(C);
Object *ob = OBACT(view_layer);
- Brush *brush = ptr->id.data;
+ Brush *brush = (Brush *)ptr->owner_id;
if (brush->gpencil_settings->flag & GP_BRUSH_MATERIAL_PINNED) {
Material *material = give_current_material(ob, ob->actcol);
@@ -1565,6 +1565,12 @@ static void rna_def_brush(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL},
};
+ static const EnumPropertyItem color_gradient_items[] = {
+ {0, "COLOR", 0, "Color", "Paint with a single color"},
+ {BRUSH_USE_GRADIENT, "GRADIENT", 0, "Gradient", "Paint with a gradient"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
static const EnumPropertyItem brush_curve_preset_items[] = {
{BRUSH_CURVE_CUSTOM, "CUSTOM", ICON_RNDCURVE, "Custom", ""},
{BRUSH_CURVE_SMOOTH, "SMOOTH", ICON_SMOOTHCURVE, "Smooth", ""},
@@ -1934,12 +1940,6 @@ static void rna_def_brush(BlenderRNA *brna)
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_gradient", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", BRUSH_USE_GRADIENT);
- RNA_def_property_boolean_funcs(prop, NULL, "rna_Brush_use_gradient_set");
- RNA_def_property_ui_text(prop, "Use Gradient", "Use Gradient by utilizing a sampling method");
- RNA_def_property_update(prop, 0, "rna_Brush_update");
-
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);
@@ -2055,6 +2055,13 @@ static void rna_def_brush(BlenderRNA *brna)
prop, "Radius Unit", "Measure brush size relative to the view or the scene");
RNA_def_property_update(prop, 0, "rna_Brush_update");
+ prop = RNA_def_property(srna, "color_type", PROP_ENUM, PROP_NONE); /* as an enum */
+ RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
+ RNA_def_property_enum_items(prop, color_gradient_items);
+ RNA_def_property_enum_funcs(prop, NULL, "rna_Brush_use_gradient_set", NULL);
+ RNA_def_property_ui_text(prop, "Color Type", "Use single color or gradient when painting");
+ RNA_def_property_update(prop, 0, "rna_Brush_update");
+
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");
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index bb236fc3ef4..88083f600f8 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -43,52 +43,52 @@
static float rna_Camera_angle_get(PointerRNA *ptr)
{
- Camera *cam = ptr->id.data;
+ Camera *cam = (Camera *)ptr->owner_id;
float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y);
return focallength_to_fov(cam->lens, sensor);
}
static void rna_Camera_angle_set(PointerRNA *ptr, float value)
{
- Camera *cam = ptr->id.data;
+ Camera *cam = (Camera *)ptr->owner_id;
float sensor = BKE_camera_sensor_size(cam->sensor_fit, cam->sensor_x, cam->sensor_y);
cam->lens = fov_to_focallength(value, sensor);
}
static float rna_Camera_angle_x_get(PointerRNA *ptr)
{
- Camera *cam = ptr->id.data;
+ Camera *cam = (Camera *)ptr->owner_id;
return focallength_to_fov(cam->lens, cam->sensor_x);
}
static void rna_Camera_angle_x_set(PointerRNA *ptr, float value)
{
- Camera *cam = ptr->id.data;
+ Camera *cam = (Camera *)ptr->owner_id;
cam->lens = fov_to_focallength(value, cam->sensor_x);
}
static float rna_Camera_angle_y_get(PointerRNA *ptr)
{
- Camera *cam = ptr->id.data;
+ Camera *cam = (Camera *)ptr->owner_id;
return focallength_to_fov(cam->lens, cam->sensor_y);
}
static void rna_Camera_angle_y_set(PointerRNA *ptr, float value)
{
- Camera *cam = ptr->id.data;
+ Camera *cam = (Camera *)ptr->owner_id;
cam->lens = fov_to_focallength(value, cam->sensor_y);
}
static void rna_Camera_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Camera *camera = (Camera *)ptr->id.data;
+ Camera *camera = (Camera *)ptr->owner_id;
DEG_id_tag_update(&camera->id, 0);
}
static void rna_Camera_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Camera *camera = (Camera *)ptr->id.data;
+ Camera *camera = (Camera *)ptr->owner_id;
DEG_relations_tag_update(bmain);
DEG_id_tag_update(&camera->id, 0);
}
@@ -136,8 +136,8 @@ char *rna_CameraDOFSettings_path(PointerRNA *ptr)
* since the name used is the name of the texture assigned, but the texture
* may be used multiple times in the same stack
*/
- if (ptr->id.data) {
- if (GS(((ID *)ptr->id.data)->name) == ID_CA) {
+ if (ptr->owner_id) {
+ if (GS(ptr->owner_id->name) == ID_CA) {
return BLI_strdup("dof");
}
}
@@ -203,12 +203,14 @@ static void rna_def_camera_background_image(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ima");
RNA_def_property_ui_text(prop, "Image", "Image displayed and edited in this space");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "clip");
RNA_def_property_ui_text(prop, "MovieClip", "Movie clip displayed and edited in this space");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "image_user", PROP_POINTER, PROP_NONE);
@@ -428,6 +430,7 @@ static void rna_def_camera_dof_settings_data(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_pointer_sdna(prop, NULL, "focus_object");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Focus Object", "Use this object to define the depth of field focal point");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Camera_dependency_update");
diff --git a/source/blender/makesrna/intern/rna_cloth.c b/source/blender/makesrna/intern/rna_cloth.c
index 548ed656d7b..036aeebda52 100644
--- a/source/blender/makesrna/intern/rna_cloth.c
+++ b/source/blender/makesrna/intern/rna_cloth.c
@@ -45,7 +45,7 @@
static void rna_cloth_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
@@ -59,7 +59,7 @@ static void rna_cloth_dependency_update(Main *bmain, Scene *scene, PointerRNA *p
static void rna_cloth_pinning_changed(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
/* ClothSimSettings *settings = (ClothSimSettings *)ptr->data; */
ClothModifierData *clmd = (ClothModifierData *)modifiers_findByType(ob, eModifierType_Cloth);
@@ -311,7 +311,7 @@ static void rna_CollSettings_selfcol_vgroup_set(PointerRNA *ptr, const char *val
static PointerRNA rna_ClothSettings_rest_shape_key_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
return rna_object_shapekey_index_get(ob->data, sim->shapekey_rest);
@@ -321,7 +321,7 @@ static void rna_ClothSettings_rest_shape_key_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ClothSimSettings *sim = (ClothSimSettings *)ptr->data;
sim->shapekey_rest = rna_object_shapekey_index_set(ob->data, value, sim->shapekey_rest);
@@ -347,7 +347,7 @@ static void rna_ClothSettings_gravity_set(PointerRNA *ptr, const float *values)
static char *rna_ClothSettings_path(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth);
if (md) {
@@ -362,7 +362,7 @@ static char *rna_ClothSettings_path(PointerRNA *ptr)
static char *rna_ClothCollisionSettings_path(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md = modifiers_findByType(ob, eModifierType_Cloth);
if (md) {
@@ -891,6 +891,7 @@ static void rna_def_cloth_collision_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "collection", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "group");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Collision Collection", "Limit colliders to this Collection");
RNA_def_property_update(prop, 0, "rna_cloth_dependency_update");
diff --git a/source/blender/makesrna/intern/rna_collection.c b/source/blender/makesrna/intern/rna_collection.c
index 5a37c4c0e6f..fb366422f34 100644
--- a/source/blender/makesrna/intern/rna_collection.c
+++ b/source/blender/makesrna/intern/rna_collection.c
@@ -130,11 +130,11 @@ static bool rna_Collection_objects_override_apply(Main *bmain,
PointerRNA *UNUSED(ptr_item_storage),
IDOverrideLibraryPropertyOperation *opop)
{
- (void)opop;
BLI_assert(opop->operation == IDOVERRIDE_LIBRARY_OP_REPLACE &&
"Unsupported RNA override operation on collections' objects");
+ UNUSED_VARS_NDEBUG(opop);
- Collection *coll_dst = ptr_dst->id.data;
+ Collection *coll_dst = (Collection *)ptr_dst->owner_id;
if (ptr_item_dst->type == NULL || ptr_item_src->type == NULL) {
BLI_assert(0 && "invalid source or destination object.");
@@ -233,11 +233,11 @@ static bool rna_Collection_children_override_apply(Main *bmain,
PointerRNA *UNUSED(ptr_item_storage),
IDOverrideLibraryPropertyOperation *opop)
{
- (void)opop;
BLI_assert(opop->operation == IDOVERRIDE_LIBRARY_OP_REPLACE &&
- "Unsupported RNA override operation on collections' objects");
+ "Unsupported RNA override operation on collections' children");
+ UNUSED_VARS_NDEBUG(opop);
- Collection *coll_dst = ptr_dst->id.data;
+ Collection *coll_dst = (Collection *)ptr_dst->owner_id;
if (ptr_item_dst->type == NULL || ptr_item_src->type == NULL) {
BLI_assert(0 && "invalid source or destination sub-collection.");
@@ -403,6 +403,7 @@ void RNA_def_collections(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_ui_text(
prop, "All Objects", "Objects that are in this collection and its child collections");
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_collection_funcs(prop,
"rna_Collection_all_objects_begin",
"rna_iterator_listbase_next",
diff --git a/source/blender/makesrna/intern/rna_color.c b/source/blender/makesrna/intern/rna_color.c
index d221b7005f6..011e373cc61 100644
--- a/source/blender/makesrna/intern/rna_color.c
+++ b/source/blender/makesrna/intern/rna_color.c
@@ -94,7 +94,7 @@ static void rna_CurveMapping_clip_set(PointerRNA *ptr, bool value)
cumap->flag &= ~CUMA_DO_CLIP;
}
- curvemapping_changed(cumap, false);
+ BKE_curvemapping_changed(cumap, false);
}
static void rna_CurveMapping_black_level_set(PointerRNA *ptr, const float *values)
@@ -103,7 +103,7 @@ static void rna_CurveMapping_black_level_set(PointerRNA *ptr, const float *value
cumap->black[0] = values[0];
cumap->black[1] = values[1];
cumap->black[2] = values[2];
- curvemapping_set_black_white(cumap, NULL, NULL);
+ BKE_curvemapping_set_black_white(cumap, NULL, NULL);
}
static void rna_CurveMapping_white_level_set(PointerRNA *ptr, const float *values)
@@ -112,7 +112,7 @@ static void rna_CurveMapping_white_level_set(PointerRNA *ptr, const float *value
cumap->white[0] = values[0];
cumap->white[1] = values[1];
cumap->white[2] = values[2];
- curvemapping_set_black_white(cumap, NULL, NULL);
+ BKE_curvemapping_set_black_white(cumap, NULL, NULL);
}
static void rna_CurveMapping_tone_update(Main *UNUSED(bmain),
@@ -164,8 +164,8 @@ static char *rna_ColorRamp_path(PointerRNA *ptr)
char *path = NULL;
/* handle the cases where a single data-block may have 2 ramp types */
- if (ptr->id.data) {
- ID *id = ptr->id.data;
+ if (ptr->owner_id) {
+ ID *id = ptr->owner_id;
switch (GS(id->name)) {
case ID_NT: {
@@ -237,8 +237,8 @@ static char *rna_ColorRampElement_path(PointerRNA *ptr)
/* determine the path from the ID-block to the ramp */
/* FIXME: this is a very slow way to do it, but it will have to suffice... */
- if (ptr->id.data) {
- ID *id = ptr->id.data;
+ if (ptr->owner_id) {
+ ID *id = ptr->owner_id;
switch (GS(id->name)) {
case ID_NT: {
@@ -286,12 +286,12 @@ static char *rna_ColorRampElement_path(PointerRNA *ptr)
static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- if (ptr->id.data) {
- ID *id = ptr->id.data;
+ if (ptr->owner_id) {
+ ID *id = ptr->owner_id;
switch (GS(id->name)) {
case ID_MA: {
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
DEG_id_tag_update(&ma->id, 0);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
@@ -309,20 +309,20 @@ static void rna_ColorRamp_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *
break;
}
case ID_TE: {
- Tex *tex = ptr->id.data;
+ Tex *tex = (Tex *)ptr->owner_id;
DEG_id_tag_update(&tex->id, 0);
WM_main_add_notifier(NC_TEXTURE, tex);
break;
}
case ID_LS: {
- FreestyleLineStyle *linestyle = ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
WM_main_add_notifier(NC_LINESTYLE, linestyle);
break;
}
case ID_PA: {
- ParticleSettings *part = ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
DEG_id_tag_update(&part->id, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_REDO);
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, part);
@@ -368,7 +368,7 @@ static void rna_ColorRampElement_remove(struct ColorBand *coba,
static void rna_CurveMap_remove_point(CurveMap *cuma, ReportList *reports, PointerRNA *point_ptr)
{
CurveMapPoint *point = point_ptr->data;
- if (curvemap_remove_point(cuma, point) == false) {
+ if (BKE_curvemap_remove_point(cuma, point) == false) {
BKE_report(reports, RPT_ERROR, "Unable to remove curve point");
return;
}
@@ -417,7 +417,7 @@ static void rna_ColorManagedDisplaySettings_display_device_update(Main *bmain,
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (!id) {
return;
@@ -518,7 +518,7 @@ static void rna_ColorManagedViewSettings_use_curves_set(PointerRNA *ptr, bool va
view_settings->flag |= COLORMANAGE_VIEW_USE_CURVES;
if (view_settings->curve_mapping == NULL) {
- view_settings->curve_mapping = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
+ view_settings->curve_mapping = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
}
}
else {
@@ -582,7 +582,7 @@ static void rna_ColorManagedColorspaceSettings_reload_update(Main *bmain,
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_IM) {
Image *ima = (Image *)id;
@@ -657,7 +657,7 @@ static char *rna_ColorManagedInputColorspaceSettings_path(PointerRNA *UNUSED(ptr
static void rna_ColorManagement_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (!id) {
return;
@@ -669,7 +669,7 @@ static void rna_ColorManagement_update(Main *UNUSED(bmain), Scene *UNUSED(scene)
}
}
-/* this function only exists because #curvemap_evaluateF uses a 'const' qualifier */
+/* this function only exists because #BKE_curvemap_evaluateF uses a 'const' qualifier */
static float rna_CurveMap_evaluateF(struct CurveMap *cuma, ReportList *reports, float value)
{
if (!cuma->table) {
@@ -679,12 +679,12 @@ static float rna_CurveMap_evaluateF(struct CurveMap *cuma, ReportList *reports,
"CurveMap table not initialized, call initialize() on CurveMapping owner of the CurveMap");
return 0.0f;
}
- return curvemap_evaluateF(cuma, value);
+ return BKE_curvemap_evaluateF(cuma, value);
}
static void rna_CurveMap_initialize(struct CurveMapping *cumap)
{
- curvemapping_initialize(cumap);
+ BKE_curvemapping_initialize(cumap);
}
#else
@@ -729,7 +729,7 @@ static void rna_def_curvemap_points_api(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_struct_sdna(srna, "CurveMap");
RNA_def_struct_ui_text(srna, "Curve Map Point", "Collection of Curve Map Points");
- func = RNA_def_function(srna, "new", "curvemap_insert");
+ func = RNA_def_function(srna, "new", "BKE_curvemap_insert");
RNA_def_function_ui_description(func, "Add point to CurveMap");
parm = RNA_def_float(func,
"position",
@@ -889,7 +889,7 @@ static void rna_def_curvemapping(BlenderRNA *brna)
prop, "White Level", "For RGB curves, the color that white is mapped to");
RNA_def_property_float_funcs(prop, NULL, "rna_CurveMapping_white_level_set", NULL);
- func = RNA_def_function(srna, "update", "curvemapping_changed_all");
+ func = RNA_def_function(srna, "update", "BKE_curvemapping_changed_all");
RNA_def_function_ui_description(func, "Update curve mapping after making changes");
func = RNA_def_function(srna, "initialize", "rna_CurveMap_initialize");
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index 6e57d16df27..08d2a03b2a9 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -376,8 +376,8 @@ static void rna_Constraint_name_set(PointerRNA *ptr, const char *value)
BLI_strncpy_utf8(con->name, value, sizeof(con->name));
/* make sure name is unique */
- if (ptr->id.data) {
- Object *ob = ptr->id.data;
+ if (ptr->owner_id) {
+ Object *ob = (Object *)ptr->owner_id;
ListBase *list = get_constraint_lb(ob, con, NULL);
/* if we have the list, check for unique name, otherwise give up */
@@ -418,7 +418,7 @@ static char *rna_Constraint_do_compute_path(Object *ob, bConstraint *con)
static char *rna_Constraint_path(PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bConstraint *con = ptr->data;
return rna_Constraint_do_compute_path(ob, con);
@@ -426,7 +426,7 @@ static char *rna_Constraint_path(PointerRNA *ptr)
static bConstraint *rna_constraint_from_target(PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bConstraintTarget *tgt = ptr->data;
return BKE_constraint_find_from_target(ob, tgt, NULL);
@@ -434,7 +434,7 @@ static bConstraint *rna_constraint_from_target(PointerRNA *ptr)
static char *rna_ConstraintTarget_path(PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bConstraintTarget *tgt = ptr->data;
bConstraint *con = rna_constraint_from_target(ptr);
int index = -1;
@@ -469,29 +469,30 @@ static char *rna_ConstraintTarget_path(PointerRNA *ptr)
static void rna_Constraint_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ED_object_constraint_tag_update(bmain, ptr->id.data, ptr->data);
+ ED_object_constraint_tag_update(bmain, (Object *)ptr->owner_id, ptr->data);
}
static void rna_Constraint_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ED_object_constraint_dependency_tag_update(bmain, ptr->id.data, ptr->data);
+ ED_object_constraint_dependency_tag_update(bmain, (Object *)ptr->owner_id, ptr->data);
}
static void rna_ConstraintTarget_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ED_object_constraint_tag_update(bmain, ptr->id.data, rna_constraint_from_target(ptr));
+ ED_object_constraint_tag_update(bmain, (Object *)ptr->owner_id, rna_constraint_from_target(ptr));
}
static void rna_ConstraintTarget_dependency_update(Main *bmain,
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- ED_object_constraint_dependency_tag_update(bmain, ptr->id.data, rna_constraint_from_target(ptr));
+ ED_object_constraint_dependency_tag_update(
+ bmain, (Object *)ptr->owner_id, rna_constraint_from_target(ptr));
}
static void rna_Constraint_influence_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
if (ob->pose) {
ob->pose->flag |= (POSE_LOCKED | POSE_DO_UNLOCK);
@@ -523,7 +524,7 @@ static const EnumPropertyItem *rna_Constraint_owner_space_itemf(bContext *UNUSED
PropertyRNA *UNUSED(prop),
bool *UNUSED(r_free))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bConstraint *con = (bConstraint *)ptr->data;
if (BLI_findindex(&ob->constraints, con) == -1) {
@@ -671,7 +672,7 @@ static bool rna_Constraint_cameraObject_poll(PointerRNA *ptr, PointerRNA value)
Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
+ if (ob->type == OB_CAMERA && ob != (Object *)ptr->owner_id) {
return 1;
}
}
@@ -688,7 +689,7 @@ static void rna_Constraint_followTrack_camera_set(PointerRNA *ptr,
Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
+ if (ob->type == OB_CAMERA && ob != (Object *)ptr->owner_id) {
data->camera = ob;
id_lib_extern((ID *)ob);
}
@@ -707,7 +708,7 @@ static void rna_Constraint_followTrack_depthObject_set(PointerRNA *ptr,
Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_MESH && ob != (Object *)ptr->id.data) {
+ if (ob->type == OB_MESH && ob != (Object *)ptr->owner_id) {
data->depth_ob = ob;
id_lib_extern((ID *)ob);
}
@@ -722,7 +723,7 @@ static bool rna_Constraint_followTrack_depthObject_poll(PointerRNA *ptr, Pointer
Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_MESH && ob != (Object *)ptr->id.data) {
+ if (ob->type == OB_MESH && ob != (Object *)ptr->owner_id) {
return 1;
}
}
@@ -739,7 +740,7 @@ static void rna_Constraint_objectSolver_camera_set(PointerRNA *ptr,
Object *ob = (Object *)value.data;
if (ob) {
- if (ob->type == OB_CAMERA && ob != (Object *)ptr->id.data) {
+ if (ob->type == OB_CAMERA && ob != (Object *)ptr->owner_id) {
data->camera = ob;
id_lib_extern((ID *)ob);
}
@@ -1009,7 +1010,7 @@ static void rna_def_constraint_armature_deform(BlenderRNA *brna)
RNA_def_struct_ui_text(
srna, "Armature Constraint", "Applies transformations done by the Armature modifier");
RNA_def_struct_sdna_from(srna, "bArmatureConstraint", "data");
- RNA_def_struct_ui_icon(srna, ICON_MOD_ARMATURE);
+ RNA_def_struct_ui_icon(srna, ICON_CON_ARMATURE);
prop = RNA_def_property(srna, "targets", PROP_COLLECTION, PROP_NONE);
RNA_def_property_collection_sdna(prop, NULL, "targets", NULL);
@@ -3026,6 +3027,7 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Disable", "Enable/Disable Constraint");
RNA_def_property_update(prop, NC_OBJECT | ND_CONSTRAINT, "rna_Constraint_update");
+ RNA_def_property_ui_icon(prop, ICON_HIDE_OFF, -1);
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_flag(prop, PROP_NO_DEG_UPDATE);
diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c
index 735cd1fd923..579dd92b703 100644
--- a/source/blender/makesrna/intern/rna_context.c
+++ b/source/blender/makesrna/intern/rna_context.c
@@ -178,14 +178,14 @@ static PointerRNA rna_Context_collection_get(PointerRNA *ptr)
static PointerRNA rna_Context_layer_collection_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
- ptr->id.data = CTX_data_scene(C);
+ ptr->owner_id = &CTX_data_scene(C)->id;
return rna_pointer_inherit_refine(ptr, &RNA_LayerCollection, CTX_data_layer_collection(C));
}
static PointerRNA rna_Context_tool_settings_get(PointerRNA *ptr)
{
bContext *C = (bContext *)ptr->data;
- ptr->id.data = CTX_data_scene(C);
+ ptr->owner_id = &CTX_data_scene(C)->id;
return rna_pointer_inherit_refine(ptr, &RNA_ToolSettings, CTX_data_tool_settings(C));
}
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index 310a335ba4c..a7dac4100db 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -326,7 +326,7 @@ static void rna_Curve_texspace_size_set(PointerRNA *ptr, const float *values)
static void rna_Curve_material_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
*min = 0;
*max = max_ii(0, cu->totcol - 1);
}
@@ -347,14 +347,14 @@ static void rna_ChariInfo_material_index_set(PointerRNA *ptr, int value)
static void rna_Curve_active_textbox_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
*min = 0;
*max = max_ii(0, cu->totbox - 1);
}
static void rna_Curve_dimension_set(PointerRNA *ptr, int value)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
if (value == CU_3D) {
cu->flag |= CU_3D;
}
@@ -370,7 +370,7 @@ static const EnumPropertyItem *rna_Curve_fill_mode_itemf(bContext *UNUSED(C),
PropertyRNA *UNUSED(prop),
bool *UNUSED(r_free))
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
/* cast to quiet warning it IS a const still */
return (EnumPropertyItem *)((cu->flag & CU_3D) ? curve3d_fill_mode_items :
@@ -388,7 +388,7 @@ static int rna_Nurb_length(PointerRNA *ptr)
static void rna_Nurb_type_set(PointerRNA *ptr, int value)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Nurb *nu = (Nurb *)ptr->data;
const int pntsu_prev = nu->pntsu;
@@ -418,7 +418,7 @@ static void rna_Curve_update_data_id(Main *UNUSED(bmain), Scene *UNUSED(scene),
static void rna_Curve_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- rna_Curve_update_data_id(bmain, scene, ptr->id.data);
+ rna_Curve_update_data_id(bmain, scene, ptr->owner_id);
}
static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -429,7 +429,7 @@ static void rna_Curve_update_deps(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Curve_update_points(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Nurb *nu = curve_nurb_from_point(cu, ptr->data, NULL, NULL);
if (nu) {
@@ -441,7 +441,7 @@ static void rna_Curve_update_points(Main *bmain, Scene *scene, PointerRNA *ptr)
static PointerRNA rna_Curve_bevelObject_get(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Object *ob = cu->bevobj;
if (ob) {
@@ -455,7 +455,7 @@ static void rna_Curve_bevelObject_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Object *ob = (Object *)value.data;
if (ob) {
@@ -473,7 +473,7 @@ static void rna_Curve_bevelObject_set(PointerRNA *ptr,
static bool rna_Curve_otherObject_poll(PointerRNA *ptr, PointerRNA value)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Object *ob = (Object *)value.data;
if (ob) {
@@ -487,7 +487,7 @@ static bool rna_Curve_otherObject_poll(PointerRNA *ptr, PointerRNA value)
static PointerRNA rna_Curve_taperObject_get(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Object *ob = cu->taperobj;
if (ob) {
@@ -501,7 +501,7 @@ static void rna_Curve_taperObject_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Object *ob = (Object *)value.data;
if (ob) {
@@ -519,7 +519,7 @@ static void rna_Curve_taperObject_set(PointerRNA *ptr,
static void rna_Curve_resolution_u_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
ListBase *nurbs = BKE_curve_nurbs_get(cu);
Nurb *nu = nurbs->first;
@@ -533,7 +533,7 @@ 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;
+ Curve *cu = (Curve *)ptr->owner_id;
ListBase *nurbs = BKE_curve_nurbs_get(cu);
Nurb *nu = nurbs->first;
@@ -547,26 +547,26 @@ static void rna_Curve_resolution_v_update_data(Main *bmain, Scene *scene, Pointe
static float rna_Curve_offset_get(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
return cu->width - 1.0f;
}
static void rna_Curve_offset_set(PointerRNA *ptr, float value)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
cu->width = 1.0f + value;
}
static int rna_Curve_body_length(PointerRNA *ptr);
static void rna_Curve_body_get(PointerRNA *ptr, char *value)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
BLI_strncpy(value, cu->str, rna_Curve_body_length(ptr) + 1);
}
static int rna_Curve_body_length(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
return cu->len;
}
@@ -576,7 +576,7 @@ static void rna_Curve_body_set(PointerRNA *ptr, const char *value)
size_t len_bytes;
size_t len_chars = BLI_strlen_utf8_ex(value, &len_bytes);
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
cu->len_wchar = len_chars;
cu->len = len_bytes;
@@ -770,7 +770,7 @@ static void rna_Curve_active_spline_set(PointerRNA *ptr,
static char *rna_Curve_spline_path(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
ListBase *nubase = BKE_curve_nurbs_get(cu);
Nurb *nu = ptr->data;
int index = BLI_findindex(nubase, nu);
@@ -786,7 +786,7 @@ static char *rna_Curve_spline_path(PointerRNA *ptr)
/* use for both bezier and nurbs */
static char *rna_Curve_spline_point_path(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
Nurb *nu;
void *point = ptr->data;
int nu_index, pt_index;
@@ -808,7 +808,7 @@ static char *rna_Curve_spline_point_path(PointerRNA *ptr)
static char *rna_TextBox_path(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
TextBox *tb = ptr->data;
int index = (int)(tb - cu->tb);
@@ -822,13 +822,13 @@ static char *rna_TextBox_path(PointerRNA *ptr)
static void rna_Curve_splines_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
rna_iterator_listbase_begin(iter, BKE_curve_nurbs_get(cu), NULL);
}
static bool rna_Curve_is_editmode_get(PointerRNA *ptr)
{
- Curve *cu = (Curve *)ptr->id.data;
+ Curve *cu = (Curve *)ptr->owner_id;
const short type = BKE_curve_type_get(cu);
if (type == OB_FONT) {
return (cu->editfont != NULL);
@@ -1215,8 +1215,8 @@ static void rna_def_font(BlenderRNA *UNUSED(brna), StructRNA *srna)
RNA_def_property_ui_text(prop, "Body Text", "Content 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! */
+ /* note that originally str did not have a limit! */
+ RNA_def_property_string_maxlength(prop, 8192);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop = RNA_def_property(srna, "body_format", PROP_COLLECTION, PROP_NONE);
@@ -1229,6 +1229,7 @@ static void rna_def_font(BlenderRNA *UNUSED(brna), StructRNA *srna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Text on Curve", "Curve deforming text object");
RNA_def_property_update(prop, 0, "rna_Curve_update_deps");
@@ -1236,24 +1237,28 @@ static void rna_def_font(BlenderRNA *UNUSED(brna), StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "vfont");
RNA_def_property_ui_text(prop, "Font", "");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop = RNA_def_property(srna, "font_bold", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "vfontb");
RNA_def_property_ui_text(prop, "Font Bold", "");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop = RNA_def_property(srna, "font_italic", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "vfonti");
RNA_def_property_ui_text(prop, "Font Italic", "");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop = RNA_def_property(srna, "font_bold_italic", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "vfontbi");
RNA_def_property_ui_text(prop, "Font Bold Italic", "");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
prop = RNA_def_property(srna, "edit_format", PROP_POINTER, PROP_NONE);
@@ -1646,6 +1651,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_pointer_sdna(prop, NULL, "bevobj");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
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,
@@ -1658,6 +1664,7 @@ static void rna_def_curve(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_pointer_sdna(prop, NULL, "taperobj");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
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");
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 2cb7c62b028..03ab9da2eff 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -724,8 +724,10 @@ void RNA_struct_free_extension(StructRNA *srna, ExtensionRNA *ext)
#ifdef RNA_RUNTIME
ext->free(ext->data); /* decref's the PyObject that the srna owns */
RNA_struct_blender_type_set(srna, NULL); /* this gets accessed again - XXX fixme */
- RNA_struct_py_type_set(
- srna, NULL); /* NULL the srna's value so RNA_struct_free wont complain of a leak */
+
+ /* NULL the srna's value so RNA_struct_free wont complain of a leak */
+ RNA_struct_py_type_set(srna, NULL);
+
#else
(void)srna;
(void)ext;
diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c
index 792c4450b9c..30a68a4919e 100644
--- a/source/blender/makesrna/intern/rna_dynamicpaint.c
+++ b/source/blender/makesrna/intern/rna_dynamicpaint.c
@@ -92,7 +92,7 @@ static void rna_DynamicPaint_redoModifier(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
static void rna_DynamicPaintSurfaces_updateFrames(Main *UNUSED(bmain),
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
index 222d2fc69da..6c546940e6d 100644
--- a/source/blender/makesrna/intern/rna_fcurve.c
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -183,7 +183,7 @@ static bool rna_ChannelDriver_is_simple_expression_get(PointerRNA *ptr)
static void rna_ChannelDriver_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
ChannelDriver *driver = ptr->data;
driver->flag &= ~DRIVER_FLAG_INVALID;
@@ -211,7 +211,7 @@ static void rna_DriverTarget_update_data(Main *bmain, Scene *scene, PointerRNA *
PointerRNA driverptr;
ChannelDriver *driver;
FCurve *fcu;
- AnimData *adt = BKE_animdata_from_id(ptr->id.data);
+ AnimData *adt = BKE_animdata_from_id(ptr->owner_id);
/* find the driver this belongs to and update it */
for (fcu = adt->drivers.first; fcu; fcu = fcu->next) {
@@ -221,7 +221,7 @@ static void rna_DriverTarget_update_data(Main *bmain, Scene *scene, PointerRNA *
if (driver) {
/* FIXME: need to be able to search targets for required one... */
/*BLI_findindex(&driver->targets, ptr->data) != -1) */
- RNA_pointer_create(ptr->id.data, &RNA_Driver, driver, &driverptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_Driver, driver, &driverptr);
rna_ChannelDriver_update_data(bmain, scene, &driverptr);
return;
}
@@ -466,8 +466,8 @@ static void rna_FCurve_group_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- ID *pid = (ID *)ptr->id.data;
- ID *vid = (ID *)value.id.data;
+ ID *pid = ptr->owner_id;
+ ID *vid = value.owner_id;
FCurve *fcu = ptr->data;
bAction *act = NULL;
@@ -491,7 +491,7 @@ static void rna_FCurve_group_set(PointerRNA *ptr,
}
else {
/* the ID given is the owner of the F-Curve (for drivers) */
- AnimData *adt = BKE_animdata_from_id(ptr->id.data);
+ AnimData *adt = BKE_animdata_from_id(ptr->owner_id);
act = (adt) ? adt->action : NULL;
}
@@ -572,7 +572,7 @@ static void rna_FCurve_update_data_ex(ID *id, FCurve *fcu, Main *bmain)
static void rna_FCurve_update_data(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
BLI_assert(ptr->type == &RNA_FCurve);
- rna_FCurve_update_data_ex((ID *)ptr->id.data, (FCurve *)ptr->data, bmain);
+ rna_FCurve_update_data_ex(ptr->owner_id, (FCurve *)ptr->data, bmain);
}
static void rna_FCurve_update_data_relations(Main *bmain,
@@ -587,7 +587,7 @@ static void rna_FCurve_update_data_relations(Main *bmain,
*/
static void rna_FCurve_update_eval(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- rna_tag_animation_update(bmain, (ID *)ptr->id.data, true);
+ rna_tag_animation_update(bmain, ptr->owner_id, true);
}
static PointerRNA rna_FCurve_active_modifier_get(PointerRNA *ptr)
@@ -700,7 +700,7 @@ static void rna_FModifier_blending_range(
static void rna_FModifier_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
FModifier *fcm = (FModifier *)ptr->data;
if (fcm->curve && fcm->type == FMODIFIER_TYPE_CYCLES) {
@@ -1065,7 +1065,7 @@ static void rna_FModifierEnvelope_points_remove(
static void rna_Keyframe_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- rna_tag_animation_update(bmain, (ID *)ptr->id.data, true);
+ rna_tag_animation_update(bmain, ptr->owner_id, true);
}
#else
diff --git a/source/blender/makesrna/intern/rna_fluidsim.c b/source/blender/makesrna/intern/rna_fluidsim.c
index 45361702384..5d21e718934 100644
--- a/source/blender/makesrna/intern/rna_fluidsim.c
+++ b/source/blender/makesrna/intern/rna_fluidsim.c
@@ -75,7 +75,7 @@ static StructRNA *rna_FluidSettings_refine(struct PointerRNA *ptr)
static void rna_fluid_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
@@ -101,7 +101,7 @@ static int fluidsim_find_lastframe(Main *bmain, Object *ob, FluidsimSettings *fs
static void rna_fluid_find_enframe(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
FluidsimModifierData *fluidmd = (FluidsimModifierData *)modifiers_findByType(
ob, eModifierType_Fluidsim);
@@ -116,7 +116,7 @@ static void rna_fluid_find_enframe(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_FluidSettings_update_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
FluidsimModifierData *fluidmd;
ParticleSystemModifierData *psmd;
ParticleSystem *psys, *next_psys;
@@ -177,7 +177,7 @@ static void rna_DomainFluidSettings_memory_estimate_get(PointerRNA *ptr, char *v
(void)ptr;
value[0] = '\0';
# else
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
FluidsimSettings *fss = (FluidsimSettings *)ptr->data;
fluid_estimate_memory(ob, fss, value);
diff --git a/source/blender/makesrna/intern/rna_gpencil.c b/source/blender/makesrna/intern/rna_gpencil.c
index 2671246b589..bd3321377d3 100644
--- a/source/blender/makesrna/intern/rna_gpencil.c
+++ b/source/blender/makesrna/intern/rna_gpencil.c
@@ -144,13 +144,13 @@ static EnumPropertyItem rna_enum_gpencil_caps_modes_items[] = {
static void rna_GPencil_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_GPENCIL | NA_EDITED, NULL);
}
static void rna_GPencil_autolock(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDlayer *gpl = NULL;
if (gpd->flag & GP_DATA_AUTOLOCK_LAYERS) {
@@ -182,7 +182,7 @@ static void rna_GPencil_autolock(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_GPencil_editmode_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
DEG_id_tag_update(&gpd->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY);
/* Notify all places where GPencil data lives that the editing state is different */
@@ -194,7 +194,7 @@ static void UNUSED_FUNCTION(rna_GPencil_onion_skinning_update)(Main *bmain,
Scene *scene,
PointerRNA *ptr)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDlayer *gpl;
bool enabled = false;
@@ -362,7 +362,7 @@ static bool rna_GPencilLayer_is_parented_get(PointerRNA *ptr)
static PointerRNA rna_GPencil_active_layer_get(PointerRNA *ptr)
{
- bGPdata *gpd = ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
if (GS(gpd->id.name) == ID_GD) { /* why would this ever be not GD */
bGPDlayer *gl;
@@ -385,7 +385,7 @@ static void rna_GPencil_active_layer_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- bGPdata *gpd = ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
/* Don't allow setting active layer to NULL if layers exist
* as this breaks various tools. Tools should be used instead
@@ -414,7 +414,7 @@ static void rna_GPencil_active_layer_set(PointerRNA *ptr,
static int rna_GPencil_active_layer_index_get(PointerRNA *ptr)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDlayer *gpl = BKE_gpencil_layer_getactive(gpd);
return BLI_findindex(&gpd->layers, gpl);
@@ -422,7 +422,7 @@ static int rna_GPencil_active_layer_index_get(PointerRNA *ptr)
static void rna_GPencil_active_layer_index_set(PointerRNA *ptr, int value)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDlayer *gpl = BLI_findlink(&gpd->layers, value);
BKE_gpencil_layer_setactive(gpd, gpl);
@@ -435,7 +435,7 @@ static void rna_GPencil_active_layer_index_set(PointerRNA *ptr, int value)
static void rna_GPencil_active_layer_index_range(
PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
*min = 0;
*max = max_ii(0, BLI_listbase_count(&gpd->layers) - 1);
@@ -449,7 +449,7 @@ static const EnumPropertyItem *rna_GPencil_active_layer_itemf(bContext *C,
PropertyRNA *UNUSED(prop),
bool *r_free)
{
- bGPdata *gpd = (bGPdata *)ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDlayer *gpl;
EnumPropertyItem *item = NULL, item_tmp = {0};
int totitem = 0;
@@ -478,7 +478,7 @@ static const EnumPropertyItem *rna_GPencil_active_layer_itemf(bContext *C,
static void rna_GPencilLayer_info_set(PointerRNA *ptr, const char *value)
{
- bGPdata *gpd = ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDlayer *gpl = ptr->data;
char oldname[128] = "";
@@ -539,7 +539,7 @@ static bGPDstroke *rna_GPencil_stroke_point_find_stroke(const bGPdata *gpd,
static void rna_GPencil_stroke_point_select_set(PointerRNA *ptr, const bool value)
{
- bGPdata *gpd = ptr->id.data;
+ bGPdata *gpd = (bGPdata *)ptr->owner_id;
bGPDspoint *pt = ptr->data;
bGPDstroke *gps = NULL;
@@ -1510,6 +1510,7 @@ static void rna_def_gpencil_layer(BlenderRNA *brna)
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_funcs(prop, NULL, "rna_GPencilLayer_parent_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
@@ -1648,7 +1649,7 @@ static void rna_def_gpencil_grid(BlenderRNA *brna)
prop = RNA_def_property(srna, "lines", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "lines");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_int_default(prop, GP_DEFAULT_GRID_LINES);
RNA_def_property_ui_text(
prop, "Grid Subdivisions", "Number of subdivisions in each side of symmetry line");
@@ -1913,7 +1914,7 @@ static void rna_def_gpencil_data(BlenderRNA *brna)
prop = RNA_def_property(srna, "zdepth_offset", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "zdepth_offset");
RNA_def_property_range(prop, 0.0f, 1.0f);
- RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.001, 5);
+ RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.1f, 3);
RNA_def_property_ui_text(prop, "Surface Offset", "Offset amount when drawing in surface mode");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, "rna_GPencil_update");
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index 2b89225d34d..0b40cc9f7f9 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -228,8 +228,8 @@ static void rna_GpencilModifier_name_set(PointerRNA *ptr, const char *value)
BLI_strncpy_utf8(gmd->name, value, sizeof(gmd->name));
/* make sure the name is truly unique */
- if (ptr->id.data) {
- Object *ob = ptr->id.data;
+ if (ptr->owner_id) {
+ Object *ob = (Object *)ptr->owner_id;
BKE_gpencil_modifier_unique_name(&ob->greasepencil_modifiers, gmd);
}
@@ -248,8 +248,8 @@ static char *rna_GpencilModifier_path(PointerRNA *ptr)
static void rna_GpencilModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->owner_id);
}
static void rna_GpencilModifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -300,7 +300,7 @@ static void greasepencil_modifier_object_set(Object *self,
PointerRNA *ptr, PointerRNA value, struct ReportList *UNUSED(reports)) \
{ \
_type##GpencilModifierData *tmd = (_type##GpencilModifierData *)ptr->data; \
- greasepencil_modifier_object_set(ptr->id.data, &tmd->_prop, _obtype, value); \
+ greasepencil_modifier_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
}
RNA_GP_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
@@ -360,6 +360,11 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -377,6 +382,10 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Random", "Use random values");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "seed", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_ui_text(prop, "Seed", "Random seed");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_MOD_LOCATION);
RNA_def_property_ui_text(
@@ -430,6 +439,11 @@ static void rna_def_modifier_gpencilnoise(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_NOISE_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -467,6 +481,11 @@ static void rna_def_modifier_gpencilsmooth(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -521,6 +540,11 @@ static void rna_def_modifier_gpencilsmooth(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SMOOTH_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -558,6 +582,11 @@ static void rna_def_modifier_gpencilsubdiv(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "level", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "level");
RNA_def_property_range(prop, 0, 5);
@@ -580,6 +609,11 @@ static void rna_def_modifier_gpencilsubdiv(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SUBDIV_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -607,12 +641,22 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna)
"FIXED",
ICON_IPO_CONSTANT,
"Fixed",
- "Delete alternative vertices in the stroke, except extremes"},
+ "Delete alternating vertices in the stroke, except extremes"},
{GP_SIMPLIFY_ADAPTIVE,
"ADAPTIVE",
ICON_IPO_EASE_IN_OUT,
"Adaptive",
- "Use a RDP algorithm to simplify"},
+ "Use a RDP algorithm to simplify the stroke"},
+ {GP_SIMPLIFY_SAMPLE,
+ "SAMPLE",
+ ICON_IPO_EASE_IN_OUT,
+ "Sample",
+ "Resample the stroke with segments of the specified length"},
+ {GP_SIMPLIFY_MERGE,
+ "MERGE",
+ ICON_IPO_EASE_IN_OUT,
+ "Merge",
+ "Simplify the stroke by merging vertices closer than a given distance"},
{0, NULL, 0, NULL, NULL},
};
@@ -626,6 +670,11 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "factor");
RNA_def_property_range(prop, 0, 100.0);
@@ -644,6 +693,11 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SIMPLIFY_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -671,6 +725,20 @@ static void rna_def_modifier_gpencilsimplify(BlenderRNA *brna)
RNA_def_property_range(prop, 1, 50);
RNA_def_property_ui_text(prop, "Iterations", "Number of times to apply simplify");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+ /* Sample */
+ prop = RNA_def_property(srna, "length", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "length");
+ RNA_def_property_range(prop, 0, 10.0f);
+ RNA_def_property_ui_text(prop, "Length", "Length of each segment");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
+ /* Distance */
+ prop = RNA_def_property(srna, "distance", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_float_sdna(prop, NULL, "distance");
+ RNA_def_property_range(prop, 0, 100.0f);
+ RNA_def_property_ui_text(prop, "Distance", "Distance between points");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
}
static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
@@ -688,6 +756,11 @@ static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -711,6 +784,11 @@ static void rna_def_modifier_gpencilthick(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_THICK_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -763,6 +841,11 @@ static void rna_def_modifier_gpenciloffset(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -780,6 +863,11 @@ static void rna_def_modifier_gpenciloffset(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OFFSET_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -840,6 +928,11 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_float_sdna(prop, NULL, "rgb");
@@ -869,6 +962,11 @@ static void rna_def_modifier_gpenciltint(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_TINT_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -925,7 +1023,7 @@ static void rna_def_modifier_gpenciltime(BlenderRNA *brna)
prop = RNA_def_property(srna, "offset", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "offset");
- RNA_def_property_range(prop, -INT_MAX, INT_MAX);
+ RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
RNA_def_property_ui_text(
prop, "Frame Offset", "Number of frames to offset original keyframe number or frame to fix");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
@@ -987,6 +1085,11 @@ static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "hue", PROP_FLOAT, PROP_NONE);
RNA_def_property_range(prop, 0.0, 1.0);
RNA_def_property_ui_range(prop, 0.0, 1.0, 0.1, 3);
@@ -1024,6 +1127,11 @@ static void rna_def_modifier_gpencilcolor(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_COLOR_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -1061,6 +1169,11 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -1089,6 +1202,11 @@ static void rna_def_modifier_gpencilopacity(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_OPACITY_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -1126,6 +1244,11 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pass_index");
RNA_def_property_range(prop, 0, 100);
@@ -1133,7 +1256,7 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
prop = RNA_def_property(srna, "count", PROP_INT, PROP_NONE);
- RNA_def_property_range(prop, 1, INT_MAX);
+ RNA_def_property_range(prop, 1, SHRT_MAX);
RNA_def_property_ui_range(prop, 1, 50, 1, -1);
RNA_def_property_ui_text(prop, "Count", "Number of items");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
@@ -1147,6 +1270,7 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
"Use the location and rotation of another object to determine the distance and "
"rotational change between arrayed items");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
prop = RNA_def_property(srna, "offset", PROP_FLOAT, PROP_TRANSLATION);
@@ -1197,7 +1321,7 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
prop = RNA_def_property(srna, "replace_material", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "mat_rpl");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_ui_text(
prop,
"Material",
@@ -1209,6 +1333,11 @@ static void rna_def_modifier_gpencilinstance(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_ARRAY_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -1395,6 +1524,11 @@ static void rna_def_modifier_gpencillattice(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -1412,6 +1546,11 @@ static void rna_def_modifier_gpencillattice(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_LATTICE_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -1438,6 +1577,7 @@ static void rna_def_modifier_gpencillattice(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_LatticeGpencilModifier_object_set", NULL, "rna_Lattice_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
@@ -1463,6 +1603,11 @@ static void rna_def_modifier_gpencilmirror(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "pass_index");
RNA_def_property_range(prop, 0, 100);
@@ -1474,6 +1619,11 @@ static void rna_def_modifier_gpencilmirror(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_MIRROR_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
@@ -1494,6 +1644,7 @@ static void rna_def_modifier_gpencilmirror(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Object used as center");
RNA_def_property_pointer_funcs(prop, NULL, "rna_MirrorGpencilModifier_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
@@ -1532,6 +1683,7 @@ static void rna_def_modifier_gpencilhook(BlenderRNA *brna)
RNA_def_property_ui_text(
prop, "Object", "Parent Object for hook, also recalculates and clears offset");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_pointer_funcs(prop, NULL, "rna_HookGpencilModifier_object_set", NULL, NULL);
RNA_def_property_update(prop, 0, "rna_GpencilModifier_dependency_update");
@@ -1548,6 +1700,11 @@ static void rna_def_modifier_gpencilhook(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Layer", "Layer name");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "material", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "materialname");
+ RNA_def_property_ui_text(prop, "Material", "Material name");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "vgname");
RNA_def_property_ui_text(prop, "Vertex Group", "Vertex group name for modulating the deform");
@@ -1565,6 +1722,11 @@ static void rna_def_modifier_gpencilhook(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Inverse Layers", "Inverse filter");
RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+ prop = RNA_def_property(srna, "invert_materials", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_MATERIAL);
+ RNA_def_property_ui_text(prop, "Inverse Materials", "Inverse filter");
+ RNA_def_property_update(prop, 0, "rna_GpencilModifier_update");
+
prop = RNA_def_property(srna, "invert_material_pass", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_HOOK_INVERT_PASS);
RNA_def_property_ui_text(prop, "Inverse Pass", "Inverse filter");
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 75867b2fe13..517bd2b7276 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -91,7 +91,7 @@ static bool rna_Image_dirty_get(PointerRNA *ptr)
static void rna_Image_source_set(PointerRNA *ptr, int value)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
if (value != ima->source) {
ima->source = value;
@@ -105,7 +105,7 @@ static void rna_Image_source_set(PointerRNA *ptr, int value)
static void rna_Image_reload_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
BKE_image_signal(bmain, ima, NULL, IMA_SIGNAL_RELOAD);
WM_main_add_notifier(NC_IMAGE | NA_EDITED, &ima->id);
DEG_id_tag_update(&ima->id, 0);
@@ -114,13 +114,13 @@ static void rna_Image_reload_update(Main *bmain, Scene *UNUSED(scene), PointerRN
static void rna_Image_generated_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
BKE_image_signal(bmain, ima, NULL, IMA_SIGNAL_FREE);
}
static void rna_Image_colormanage_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
BKE_image_signal(bmain, ima, NULL, IMA_SIGNAL_COLORMANAGE);
DEG_id_tag_update(&ima->id, 0);
DEG_id_tag_update(&ima->id, ID_RECALC_EDITORS);
@@ -130,7 +130,7 @@ static void rna_Image_colormanage_update(Main *bmain, Scene *UNUSED(scene), Poin
static void rna_Image_views_format_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
ImBuf *ibuf;
void *lock;
@@ -148,7 +148,7 @@ static void rna_Image_views_format_update(Main *bmain, Scene *scene, PointerRNA
static void rna_ImageUser_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
ImageUser *iuser = ptr->data;
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
BKE_image_user_frame_calc(NULL, iuser, scene->r.cfra);
@@ -173,10 +173,10 @@ static void rna_ImageUser_relations_update(Main *bmain, Scene *scene, PointerRNA
static char *rna_ImageUser_path(PointerRNA *ptr)
{
- if (ptr->id.data) {
+ if (ptr->owner_id) {
/* ImageUser *iuser = ptr->data; */
- switch (GS(((ID *)ptr->id.data)->name)) {
+ switch (GS(ptr->owner_id->name)) {
case ID_OB:
case ID_TE: {
return BLI_strdup("image_user");
@@ -331,7 +331,7 @@ static int rna_Image_depth_get(PointerRNA *ptr)
static int rna_Image_frame_duration_get(PointerRNA *ptr)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
int duration = 1;
if (BKE_image_has_anim(ima)) {
@@ -352,7 +352,7 @@ static int rna_Image_frame_duration_get(PointerRNA *ptr)
static int rna_Image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY_DIMENSION])
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
ImBuf *ibuf;
void *lock;
@@ -372,7 +372,7 @@ static int rna_Image_pixels_get_length(PointerRNA *ptr, int length[RNA_MAX_ARRAY
static void rna_Image_pixels_get(PointerRNA *ptr, float *values)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
ImBuf *ibuf;
void *lock;
int i, size;
@@ -397,7 +397,7 @@ static void rna_Image_pixels_get(PointerRNA *ptr, float *values)
static void rna_Image_pixels_set(PointerRNA *ptr, const float *values)
{
- Image *ima = ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
ImBuf *ibuf;
void *lock;
int i, size;
@@ -463,7 +463,7 @@ static bool rna_Image_is_float_get(PointerRNA *ptr)
static PointerRNA rna_Image_packed_file_get(PointerRNA *ptr)
{
- Image *ima = (Image *)ptr->id.data;
+ Image *ima = (Image *)ptr->owner_id;
if (BKE_image_has_packedfile(ima)) {
ImagePackedFile *imapf = ima->packedfiles.first;
@@ -485,7 +485,7 @@ static void rna_RenderSlot_clear(ID *id, RenderSlot *slot, ImageUser *iuser)
static PointerRNA rna_render_slots_active_get(PointerRNA *ptr)
{
- Image *image = (Image *)ptr->id.data;
+ Image *image = (Image *)ptr->owner_id;
RenderSlot *render_slot = BKE_image_get_renderslot(image, image->render_slot);
return rna_pointer_inherit_refine(ptr, &RNA_RenderSlot, render_slot);
@@ -495,8 +495,8 @@ static void rna_render_slots_active_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Image *image = (Image *)ptr->id.data;
- if (value.id.data == image) {
+ Image *image = (Image *)ptr->owner_id;
+ if (value.owner_id == &image->id) {
RenderSlot *slot = (RenderSlot *)value.data;
int index = BLI_findindex(&image->renderslots, slot);
if (index != -1) {
@@ -507,13 +507,13 @@ static void rna_render_slots_active_set(PointerRNA *ptr,
static int rna_render_slots_active_index_get(PointerRNA *ptr)
{
- Image *image = (Image *)ptr->id.data;
+ Image *image = (Image *)ptr->owner_id;
return image->render_slot;
}
static void rna_render_slots_active_index_set(PointerRNA *ptr, int value)
{
- Image *image = (Image *)ptr->id.data;
+ Image *image = (Image *)ptr->owner_id;
int num_slots = BLI_listbase_count(&image->renderslots);
image->render_slot = value;
CLAMP(image->render_slot, 0, num_slots - 1);
@@ -522,7 +522,7 @@ static void rna_render_slots_active_index_set(PointerRNA *ptr, int value)
static void rna_render_slots_active_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Image *image = (Image *)ptr->id.data;
+ Image *image = (Image *)ptr->owner_id;
*min = 0;
*max = max_ii(0, BLI_listbase_count(&image->renderslots) - 1);
}
diff --git a/source/blender/makesrna/intern/rna_internal.h b/source/blender/makesrna/intern/rna_internal.h
index 3db41a9a6ea..26f25e4988d 100644
--- a/source/blender/makesrna/intern/rna_internal.h
+++ b/source/blender/makesrna/intern/rna_internal.h
@@ -29,15 +29,12 @@
#define RNA_MAGIC ((int)~0)
-struct Depsgraph;
struct FreestyleSettings;
struct ID;
struct IDOverrideLibrary;
-struct IDOverrideLibraryProperty;
struct IDOverrideLibraryPropertyOperation;
struct IDProperty;
struct Main;
-struct Mesh;
struct Object;
struct ReportList;
struct SDNA;
diff --git a/source/blender/makesrna/intern/rna_internal_types.h b/source/blender/makesrna/intern/rna_internal_types.h
index 60cf443383e..7c6a471b1d7 100644
--- a/source/blender/makesrna/intern/rna_internal_types.h
+++ b/source/blender/makesrna/intern/rna_internal_types.h
@@ -31,7 +31,6 @@ struct ContainerRNA;
struct FunctionRNA;
struct GHash;
struct IDOverrideLibrary;
-struct IDOverrideLibraryProperty;
struct IDOverrideLibraryPropertyOperation;
struct IDProperty;
struct Main;
diff --git a/source/blender/makesrna/intern/rna_key.c b/source/blender/makesrna/intern/rna_key.c
index 8ab2127d898..46c3adbd6ef 100644
--- a/source/blender/makesrna/intern/rna_key.c
+++ b/source/blender/makesrna/intern/rna_key.c
@@ -87,8 +87,8 @@ static void rna_ShapeKey_name_set(PointerRNA *ptr, const char *value)
BLI_strncpy_utf8(kb->name, value, sizeof(kb->name));
/* make sure the name is truly unique */
- if (ptr->id.data) {
- Key *key = rna_ShapeKey_find_key(ptr->id.data);
+ if (ptr->owner_id) {
+ Key *key = rna_ShapeKey_find_key(ptr->owner_id);
BLI_uniquename(&key->block,
kb,
CTX_DATA_(BLT_I18NCONTEXT_ID_SHAPEKEY, "Key"),
@@ -174,7 +174,7 @@ static void rna_ShapeKey_slider_max_set(PointerRNA *ptr, float value)
static Mesh *rna_KeyBlock_normals_get_mesh(PointerRNA *ptr, ID *id)
{
- Key *key = rna_ShapeKey_find_key((id == NULL && ptr != NULL) ? ptr->id.data : id);
+ Key *key = rna_ShapeKey_find_key((id == NULL && ptr != NULL) ? ptr->owner_id : id);
id = key ? key->from : NULL;
if (id != NULL) {
@@ -315,7 +315,7 @@ static PointerRNA rna_ShapeKey_relative_key_get(PointerRNA *ptr)
{
KeyBlock *kb = (KeyBlock *)ptr->data;
- return rna_object_shapekey_index_get(ptr->id.data, kb->relative);
+ return rna_object_shapekey_index_get(ptr->owner_id, kb->relative);
}
static void rna_ShapeKey_relative_key_set(PointerRNA *ptr,
@@ -324,7 +324,7 @@ static void rna_ShapeKey_relative_key_set(PointerRNA *ptr,
{
KeyBlock *kb = (KeyBlock *)ptr->data;
- kb->relative = rna_object_shapekey_index_set(ptr->id.data, value, kb->relative);
+ kb->relative = rna_object_shapekey_index_set(ptr->owner_id, value, kb->relative);
}
static void rna_ShapeKeyPoint_co_get(PointerRNA *ptr, float *values)
@@ -565,7 +565,7 @@ static void rna_ShapeKey_data_begin_mixed(CollectionPropertyIterator *iter,
static void rna_ShapeKey_data_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Key *key = rna_ShapeKey_find_key(ptr->id.data);
+ Key *key = rna_ShapeKey_find_key(ptr->owner_id);
KeyBlock *kb = (KeyBlock *)ptr->data;
int tot = kb->totelem, size = key->elemsize;
@@ -602,7 +602,7 @@ static void rna_ShapeKey_data_begin(CollectionPropertyIterator *iter, PointerRNA
static int rna_ShapeKey_data_length(PointerRNA *ptr)
{
- Key *key = rna_ShapeKey_find_key(ptr->id.data);
+ Key *key = rna_ShapeKey_find_key(ptr->owner_id);
KeyBlock *kb = (KeyBlock *)ptr->data;
int tot = kb->totelem;
@@ -615,7 +615,7 @@ static int rna_ShapeKey_data_length(PointerRNA *ptr)
static PointerRNA rna_ShapeKey_data_get(CollectionPropertyIterator *iter)
{
- Key *key = rna_ShapeKey_find_key(iter->parent.id.data);
+ Key *key = rna_ShapeKey_find_key(iter->parent.owner_id);
void *ptr = rna_iterator_array_get(iter);
StructRNA *type = &RNA_ShapeKeyPoint;
@@ -637,7 +637,7 @@ static PointerRNA rna_ShapeKey_data_get(CollectionPropertyIterator *iter)
int rna_ShapeKey_data_lookup_int(PointerRNA *ptr, int index, PointerRNA *r_ptr)
{
- Key *key = rna_ShapeKey_find_key(ptr->id.data);
+ Key *key = rna_ShapeKey_find_key(ptr->owner_id);
KeyBlock *kb = (KeyBlock *)ptr->data;
int elemsize = key->elemsize;
char *databuf = kb->data;
@@ -672,7 +672,7 @@ int rna_ShapeKey_data_lookup_int(PointerRNA *ptr, int index, PointerRNA *r_ptr)
static char *rna_ShapeKey_path(PointerRNA *ptr)
{
KeyBlock *kb = (KeyBlock *)ptr->data;
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
char name_esc[sizeof(kb->name) * 2];
BLI_strescape(name_esc, kb->name, sizeof(name_esc));
@@ -687,7 +687,7 @@ static char *rna_ShapeKey_path(PointerRNA *ptr)
static void rna_Key_update_data(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Key *key = ptr->id.data;
+ Key *key = (Key *)ptr->owner_id;
Object *ob;
for (ob = bmain->objects.first; ob; ob = ob->id.next) {
@@ -756,8 +756,8 @@ static int rna_ShapeKeyPoint_get_index(Key *key, KeyBlock *kb, float *point)
static char *rna_ShapeKeyPoint_path(PointerRNA *ptr)
{
- ID *id = (ID *)ptr->id.data;
- Key *key = rna_ShapeKey_find_key(ptr->id.data);
+ ID *id = ptr->owner_id;
+ Key *key = rna_ShapeKey_find_key(ptr->owner_id);
KeyBlock *kb;
float *point = (float *)ptr->data;
@@ -1034,6 +1034,7 @@ static void rna_def_key(BlenderRNA *brna)
prop = RNA_def_property(srna, "user", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_NEVER_NULL);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_pointer_sdna(prop, NULL, "from");
RNA_def_property_ui_text(prop, "User", "Data-block using these shape keys");
diff --git a/source/blender/makesrna/intern/rna_lattice.c b/source/blender/makesrna/intern/rna_lattice.c
index 5a8223af28a..34f5b6caee1 100644
--- a/source/blender/makesrna/intern/rna_lattice.c
+++ b/source/blender/makesrna/intern/rna_lattice.c
@@ -49,7 +49,7 @@
static void rna_LatticePoint_co_get(PointerRNA *ptr, float *values)
{
- Lattice *lt = (Lattice *)ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->owner_id;
BPoint *bp = (BPoint *)ptr->data;
int index = bp - lt->def;
int u, v, w;
@@ -63,7 +63,7 @@ static void rna_LatticePoint_co_get(PointerRNA *ptr, float *values)
static void rna_LatticePoint_groups_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Lattice *lt = (Lattice *)ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->owner_id;
if (lt->dvert) {
BPoint *bp = (BPoint *)ptr->data;
@@ -95,7 +95,7 @@ static void rna_Lattice_points_begin(CollectionPropertyIterator *iter, PointerRN
static void rna_Lattice_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
DEG_id_tag_update(id, 0);
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
@@ -109,8 +109,8 @@ static void rna_Lattice_update_data_editlatt(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- ID *id = ptr->id.data;
- Lattice *lt = (Lattice *)ptr->id.data;
+ ID *id = ptr->owner_id;
+ Lattice *lt = (Lattice *)ptr->owner_id;
if (lt->editlatt) {
Lattice *lt_em = lt->editlatt->latt;
@@ -127,7 +127,7 @@ static void rna_Lattice_update_data_editlatt(Main *UNUSED(bmain),
static void rna_Lattice_update_size(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Lattice *lt = ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->owner_id;
Object *ob;
int newu, newv, neww;
@@ -224,7 +224,7 @@ static void rna_Lattice_vg_name_set(PointerRNA *ptr, const char *value)
/* annoying, but is a consequence of RNA structures... */
static char *rna_LatticePoint_path(PointerRNA *ptr)
{
- Lattice *lt = (Lattice *)ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->owner_id;
void *point = ptr->data;
BPoint *points = NULL;
@@ -251,7 +251,7 @@ static char *rna_LatticePoint_path(PointerRNA *ptr)
static bool rna_Lattice_is_editmode_get(PointerRNA *ptr)
{
- Lattice *lt = (Lattice *)ptr->id.data;
+ Lattice *lt = (Lattice *)ptr->owner_id;
return (lt->editlatt != NULL);
}
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index c9b51707759..1ad006cbc37 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -152,7 +152,7 @@ static int rna_ViewLayer_objects_selected_skip(CollectionPropertyIterator *iter,
static PointerRNA rna_ViewLayer_depsgraph_get(PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_SCE) {
Scene *scene = (Scene *)id;
ViewLayer *view_layer = (ViewLayer *)ptr->data;
@@ -274,7 +274,7 @@ static void rna_LayerCollection_exclude_update_recursive(ListBase *lb, const boo
static void rna_LayerCollection_exclude_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
LayerCollection *lc = (LayerCollection *)ptr->data;
ViewLayer *view_layer = BKE_view_layer_find_from_collection(scene, lc);
@@ -294,7 +294,7 @@ static void rna_LayerCollection_exclude_update(Main *bmain, Scene *UNUSED(scene)
static void rna_LayerCollection_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
LayerCollection *lc = (LayerCollection *)ptr->data;
ViewLayer *view_layer = BKE_view_layer_find_from_collection(scene, lc);
diff --git a/source/blender/makesrna/intern/rna_light.c b/source/blender/makesrna/intern/rna_light.c
index 79ba5970007..8640c35f1b8 100644
--- a/source/blender/makesrna/intern/rna_light.c
+++ b/source/blender/makesrna/intern/rna_light.c
@@ -77,7 +77,7 @@ static StructRNA *rna_Light_refine(struct PointerRNA *ptr)
static void rna_Light_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Light *la = ptr->id.data;
+ Light *la = (Light *)ptr->owner_id;
DEG_id_tag_update(&la->id, 0);
WM_main_add_notifier(NC_LAMP | ND_LIGHTING, la);
@@ -85,7 +85,7 @@ static void rna_Light_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
static void rna_Light_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Light *la = ptr->id.data;
+ Light *la = (Light *)ptr->owner_id;
DEG_id_tag_update(&la->id, 0);
WM_main_add_notifier(NC_LAMP | ND_LIGHTING_DRAW, la);
diff --git a/source/blender/makesrna/intern/rna_lightprobe.c b/source/blender/makesrna/intern/rna_lightprobe.c
index b6d6fac587e..463cefdf3f0 100644
--- a/source/blender/makesrna/intern/rna_lightprobe.c
+++ b/source/blender/makesrna/intern/rna_lightprobe.c
@@ -43,7 +43,7 @@
static void rna_LightProbe_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
#else
@@ -212,6 +212,7 @@ static void rna_def_lightprobe(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_pointer_sdna(prop, NULL, "visibility_grp");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Visibility Collection", "Restrict objects visible for this probe");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING, "rna_LightProbe_recalc");
diff --git a/source/blender/makesrna/intern/rna_linestyle.c b/source/blender/makesrna/intern/rna_linestyle.c
index 936a5e6a53d..f6cfc33c82e 100644
--- a/source/blender/makesrna/intern/rna_linestyle.c
+++ b/source/blender/makesrna/intern/rna_linestyle.c
@@ -287,7 +287,7 @@ static char *rna_LineStyle_geometry_modifier_path(PointerRNA *ptr)
static void rna_LineStyleColorModifier_name_set(PointerRNA *ptr, const char *value)
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
LineStyleModifier *m = (LineStyleModifier *)ptr->data;
BLI_strncpy_utf8(m->name, value, sizeof(m->name));
@@ -301,7 +301,7 @@ static void rna_LineStyleColorModifier_name_set(PointerRNA *ptr, const char *val
static void rna_LineStyleAlphaModifier_name_set(PointerRNA *ptr, const char *value)
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
LineStyleModifier *m = (LineStyleModifier *)ptr->data;
BLI_strncpy_utf8(m->name, value, sizeof(m->name));
@@ -315,7 +315,7 @@ static void rna_LineStyleAlphaModifier_name_set(PointerRNA *ptr, const char *val
static void rna_LineStyleThicknessModifier_name_set(PointerRNA *ptr, const char *value)
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
LineStyleModifier *m = (LineStyleModifier *)ptr->data;
BLI_strncpy_utf8(m->name, value, sizeof(m->name));
@@ -329,7 +329,7 @@ static void rna_LineStyleThicknessModifier_name_set(PointerRNA *ptr, const char
static void rna_LineStyleGeometryModifier_name_set(PointerRNA *ptr, const char *value)
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
LineStyleModifier *m = (LineStyleModifier *)ptr->data;
BLI_strncpy_utf8(m->name, value, sizeof(m->name));
@@ -343,13 +343,13 @@ static void rna_LineStyleGeometryModifier_name_set(PointerRNA *ptr, const char *
static void rna_LineStyle_mtex_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
rna_iterator_array_begin(iter, (void *)linestyle->mtex, sizeof(MTex *), MAX_MTEX, 0, NULL);
}
static PointerRNA rna_LineStyle_active_texture_get(PointerRNA *ptr)
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
Tex *tex;
tex = give_current_linestyle_texture(linestyle);
@@ -360,14 +360,14 @@ static void rna_LineStyle_active_texture_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
set_current_linestyle_texture(linestyle, value.data);
}
static void rna_LineStyle_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- FreestyleLineStyle *linestyle = ptr->id.data;
+ FreestyleLineStyle *linestyle = (FreestyleLineStyle *)ptr->owner_id;
DEG_id_tag_update(&linestyle->id, 0);
WM_main_add_notifier(NC_LINESTYLE, linestyle);
diff --git a/source/blender/makesrna/intern/rna_mask.c b/source/blender/makesrna/intern/rna_mask.c
index abbbd04143c..adc041174aa 100644
--- a/source/blender/makesrna/intern/rna_mask.c
+++ b/source/blender/makesrna/intern/rna_mask.c
@@ -58,7 +58,7 @@
static void rna_Mask_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Mask *mask = ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
WM_main_add_notifier(NC_MASK | ND_DATA, mask);
DEG_id_tag_update(&mask->id, 0);
@@ -147,21 +147,21 @@ static void rna_MaskParent_id_type_set(PointerRNA *ptr, int value)
static void rna_Mask_layers_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &mask->masklayers, NULL);
}
static int rna_Mask_layer_active_index_get(PointerRNA *ptr)
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
return mask->masklay_act;
}
static void rna_Mask_layer_active_index_set(PointerRNA *ptr, int value)
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
mask->masklay_act = value;
}
@@ -169,7 +169,7 @@ static void rna_Mask_layer_active_index_set(PointerRNA *ptr, int value)
static void rna_Mask_layer_active_index_range(
PointerRNA *ptr, int *min, int *max, int *softmin, int *softmax)
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
*min = 0;
*max = max_ii(0, mask->masklay_tot - 1);
@@ -188,7 +188,7 @@ static char *rna_MaskLayer_path(PointerRNA *ptr)
static PointerRNA rna_Mask_layer_active_get(PointerRNA *ptr)
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
MaskLayer *masklay = BKE_mask_layer_active(mask);
return rna_pointer_inherit_refine(ptr, &RNA_MaskLayer, masklay);
@@ -198,7 +198,7 @@ static void rna_Mask_layer_active_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
MaskLayer *masklay = (MaskLayer *)value.data;
BKE_mask_layer_active_set(mask, masklay);
@@ -213,7 +213,7 @@ static void rna_MaskLayer_splines_begin(CollectionPropertyIterator *iter, Pointe
static void rna_MaskLayer_name_set(PointerRNA *ptr, const char *value)
{
- Mask *mask = (Mask *)ptr->id.data;
+ Mask *mask = (Mask *)ptr->owner_id;
MaskLayer *masklay = (MaskLayer *)ptr->data;
char oldname[sizeof(masklay->name)], newname[sizeof(masklay->name)];
@@ -351,7 +351,7 @@ static void rna_MaskSplinePoint_handle_type_set(PointerRNA *ptr, int value)
{
MaskSplinePoint *point = (MaskSplinePoint *)ptr->data;
BezTriple *bezt = &point->bezt;
- MaskSpline *spline = mask_spline_from_point((Mask *)ptr->id.data, point);
+ MaskSpline *spline = mask_spline_from_point((Mask *)ptr->owner_id, point);
bezt->h1 = bezt->h2 = value;
mask_point_check_stick(point);
@@ -370,7 +370,7 @@ static void rna_MaskSplinePoint_handle_left_type_set(PointerRNA *ptr, int value)
{
MaskSplinePoint *point = (MaskSplinePoint *)ptr->data;
BezTriple *bezt = &point->bezt;
- MaskSpline *spline = mask_spline_from_point((Mask *)ptr->id.data, point);
+ MaskSpline *spline = mask_spline_from_point((Mask *)ptr->owner_id, point);
bezt->h1 = value;
mask_point_check_stick(point);
@@ -389,7 +389,7 @@ static void rna_MaskSplinePoint_handle_right_type_set(PointerRNA *ptr, int value
{
MaskSplinePoint *point = (MaskSplinePoint *)ptr->data;
BezTriple *bezt = &point->bezt;
- MaskSpline *spline = mask_spline_from_point((Mask *)ptr->id.data, point);
+ MaskSpline *spline = mask_spline_from_point((Mask *)ptr->owner_id, point);
bezt->h2 = value;
mask_point_check_stick(point);
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index 162ba6be834..8f627ce36ef 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -37,7 +37,7 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = {
{0, "", ICON_NONE, NULL, NULL},
{MA_RAMP_DARK, "DARKEN", 0, "Darken", ""},
{MA_RAMP_MULT, "MULTIPLY", 0, "Multiply", ""},
- {MA_RAMP_BURN, "BURN", 0, "Burn", ""},
+ {MA_RAMP_BURN, "BURN", 0, "Color Burn", ""},
{0, "", ICON_NONE, NULL, NULL},
{MA_RAMP_LIGHT, "LIGHTEN", 0, "Lighten", ""},
{MA_RAMP_SCREEN, "SCREEN", 0, "Screen", ""},
@@ -89,7 +89,7 @@ const EnumPropertyItem rna_enum_ramp_blend_items[] = {
static void rna_Material_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
DEG_id_tag_update(&ma->id, ID_RECALC_SHADING);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING, ma);
@@ -99,7 +99,7 @@ static void rna_Material_update_previews(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
if (ma->nodetree) {
BKE_node_preview_clear_tree(ma->nodetree);
@@ -110,7 +110,7 @@ static void rna_Material_update_previews(Main *UNUSED(bmain),
static void rna_MaterialGpencil_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
rna_Material_update(bmain, scene, ptr);
WM_main_add_notifier(NC_GPENCIL | ND_DATA, ma);
@@ -118,7 +118,7 @@ static void rna_MaterialGpencil_update(Main *bmain, Scene *scene, PointerRNA *pt
static void rna_MaterialGpencil_nopreview_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
rna_Material_update(bmain, scene, ptr);
WM_main_add_notifier(NC_GPENCIL | ND_DATA, ma);
@@ -126,7 +126,7 @@ static void rna_MaterialGpencil_nopreview_update(Main *bmain, Scene *scene, Poin
static void rna_Material_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
DEG_id_tag_update(&ma->id, ID_RECALC_SHADING);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, ma);
@@ -144,7 +144,7 @@ static void rna_Material_active_paint_texture_index_update(Main *bmain,
PointerRNA *ptr)
{
bScreen *sc;
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
if (ma->use_nodes && ma->nodetree) {
struct bNode *node = BKE_texpaint_slot_material_find_node(ma, ma->paint_active_slot);
@@ -303,7 +303,7 @@ static bool rna_is_grease_pencil_get(PointerRNA *ptr)
static void rna_gpcolordata_uv_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
/* update all uv strokes of this color */
- Material *ma = ptr->id.data;
+ Material *ma = (Material *)ptr->owner_id;
ED_gpencil_update_color_uv(bmain, ma);
rna_MaterialGpencil_update(bmain, scene, ptr);
@@ -357,12 +357,14 @@ static void rna_def_material_display(StructRNA *srna)
prop = RNA_def_property(srna, "diffuse_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "r");
RNA_def_property_array(prop, 4);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Diffuse Color", "Diffuse color of the material");
RNA_def_property_update(prop, 0, "rna_Material_draw_update");
prop = RNA_def_property(srna, "specular_color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_float_sdna(prop, NULL, "specr");
RNA_def_property_array(prop, 3);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Specular Color", "Specular color of the material");
RNA_def_property_update(prop, 0, "rna_Material_draw_update");
@@ -370,6 +372,7 @@ static void rna_def_material_display(StructRNA *srna)
RNA_def_property_float_sdna(prop, NULL, "roughness");
RNA_def_property_float_default(prop, 0.25f);
RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Roughness", "Roughness of the material");
RNA_def_property_update(prop, 0, "rna_Material_draw_update");
@@ -377,12 +380,14 @@ static void rna_def_material_display(StructRNA *srna)
RNA_def_property_float_sdna(prop, NULL, "spec");
RNA_def_property_float_default(prop, 0.5f);
RNA_def_property_range(prop, 0, 1);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Specular", "How intense (bright) the specular reflection is");
RNA_def_property_update(prop, 0, "rna_Material_draw_update");
prop = RNA_def_property(srna, "metallic", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "metallic");
RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Metallic", "Amount of mirror reflection for raytrace");
RNA_def_property_update(prop, 0, "rna_Material_update");
@@ -612,6 +617,12 @@ static void rna_def_material_greasepencil(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Pattern", "Use Fill Texture as a pattern to apply color");
RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update");
+ prop = RNA_def_property(srna, "use_overlap_strokes", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_DISABLE_STENCIL);
+ RNA_def_property_ui_text(
+ prop, "Self Overlap", "Disable stencil and overlap self intersections with alpha materials");
+ RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update");
+
prop = RNA_def_property(srna, "show_stroke", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_STYLE_STROKE_SHOW);
RNA_def_property_ui_text(prop, "Show Stroke", "Show stroke lines of this material");
@@ -655,6 +666,7 @@ static void rna_def_material_greasepencil(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "sima");
RNA_def_property_pointer_funcs(prop, NULL, "rna_GpencilColorData_stroke_image_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update");
@@ -677,6 +689,7 @@ static void rna_def_material_greasepencil(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ima");
RNA_def_property_pointer_funcs(prop, NULL, "rna_GpencilColorData_fill_image_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_GPENCIL | ND_SHADING, "rna_MaterialGpencil_update");
@@ -713,16 +726,6 @@ void RNA_def_material(BlenderRNA *brna)
static EnumPropertyItem prop_eevee_blend_items[] = {
{MA_BM_SOLID, "OPAQUE", 0, "Opaque", "Render surface without transparency"},
- {MA_BM_ADD,
- "ADD",
- 0,
- "Additive",
- "Render surface and blend the result with additive blending"},
- {MA_BM_MULTIPLY,
- "MULTIPLY",
- 0,
- "Multiply",
- "Render surface and blend the result with multiplicative blending"},
{MA_BM_CLIP,
"CLIP",
0,
diff --git a/source/blender/makesrna/intern/rna_mesh.c b/source/blender/makesrna/intern/rna_mesh.c
index 03173bcb3da..81480eda4d6 100644
--- a/source/blender/makesrna/intern/rna_mesh.c
+++ b/source/blender/makesrna/intern/rna_mesh.c
@@ -80,7 +80,7 @@ const EnumPropertyItem rna_enum_mesh_delimit_mode_items[] = {
static Mesh *rna_mesh(PointerRNA *ptr)
{
- Mesh *me = (Mesh *)ptr->id.data;
+ Mesh *me = (Mesh *)ptr->owner_id;
return me;
}
@@ -146,7 +146,7 @@ static void rna_cd_layer_name_set(CustomData *cdata, CustomDataLayer *cdl, const
static CustomData *rna_cd_from_layer(PointerRNA *ptr, CustomDataLayer *cdl)
{
/* find out where we come from by */
- Mesh *me = ptr->id.data;
+ Mesh *me = (Mesh *)ptr->owner_id;
CustomData *cd;
/* rely on negative values wrapping */
@@ -202,7 +202,7 @@ static bool rna_Mesh_has_custom_normals_get(PointerRNA *ptr)
static void rna_Mesh_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
@@ -226,7 +226,7 @@ static void rna_Mesh_update_data_edit_active_color(Main *bmain, Scene *scene, Po
}
static void rna_Mesh_update_select(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
WM_main_add_notifier(NC_GEOM | ND_SELECT, id);
@@ -235,7 +235,7 @@ static void rna_Mesh_update_select(Main *UNUSED(bmain), Scene *UNUSED(scene), Po
void rna_Mesh_update_draw(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
/* cheating way for importers to avoid slow updates */
if (id->us > 0) {
WM_main_add_notifier(NC_GEOM | ND_DATA, id);
@@ -403,7 +403,7 @@ static void rna_MeshPolygon_center_get(PointerRNA *ptr, float *values)
static float rna_MeshPolygon_area_get(PointerRNA *ptr)
{
- Mesh *me = (Mesh *)ptr->id.data;
+ Mesh *me = (Mesh *)ptr->owner_id;
MPoly *mp = (MPoly *)ptr->data;
return BKE_mesh_calc_poly_area(mp, me->mloop + mp->loopstart, me->mvert);
@@ -571,7 +571,7 @@ static int rna_CustomDataLayer_clone_get(PointerRNA *ptr, CustomData *data, int
static void rna_CustomDataLayer_active_set(
PointerRNA *ptr, CustomData *data, int value, int type, int render)
{
- Mesh *me = ptr->id.data;
+ Mesh *me = (Mesh *)ptr->owner_id;
int n = (((CustomDataLayer *)ptr->data) - data->layers) - CustomData_get_layer_index(data, type);
if (value == 0) {
@@ -651,14 +651,6 @@ static void rna_MPoly_freestyle_face_mark_set(PointerRNA *ptr, int value)
}
}
-/* Generic UV rename! */
-static void rna_MeshUVLayer_name_set(PointerRNA *ptr, const char *name)
-{
- char buf[MAX_CUSTOMDATA_LAYER_NAME];
- BLI_strncpy_utf8(buf, name, MAX_CUSTOMDATA_LAYER_NAME);
- BKE_mesh_uv_cdlayer_rename(rna_mesh(ptr), ((CustomDataLayer *)ptr->data)->name, buf, true);
-}
-
/* uv_layers */
DEFINE_CUSTOMDATA_LAYER_COLLECTION(uv_layer, ldata, CD_MLOOPUV)
@@ -1941,7 +1933,7 @@ static void rna_def_mloopuv(BlenderRNA *brna)
prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
RNA_def_struct_name_property(srna, prop);
- RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshUVLayer_name_set");
+ RNA_def_property_string_funcs(prop, NULL, NULL, "rna_MeshLoopLayer_name_set");
RNA_def_property_ui_text(prop, "Name", "Name of UV map");
RNA_def_property_update(prop, 0, "rna_Mesh_update_data");
@@ -2789,6 +2781,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop = RNA_def_property(srna, "texture_mesh", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop,
"Texture Mesh",
@@ -2998,6 +2991,30 @@ static void rna_def_mesh(BlenderRNA *brna)
rna_def_paint_mask(brna, prop);
/* End paint mask */
+ /* Remesh */
+ prop = RNA_def_property(srna, "remesh_voxel_size", PROP_FLOAT, PROP_DISTANCE);
+ RNA_def_property_float_sdna(prop, NULL, "remesh_voxel_size");
+ RNA_def_property_float_default(prop, 0.1f);
+ RNA_def_property_range(prop, 0.00001f, FLT_MAX);
+ RNA_def_property_ui_range(prop, 0.0001f, FLT_MAX, 0.01, 4);
+ RNA_def_property_ui_text(prop,
+ "Voxel size",
+ "Size of the voxel in object space used for volume evaluation. Lower "
+ "values preserve finer details");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
+
+ prop = RNA_def_property(srna, "remesh_smooth_normals", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_REMESH_SMOOTH_NORMALS);
+ RNA_def_property_ui_text(prop, "Smooth normals", "Smooth the normals of the remesher result");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
+
+ prop = RNA_def_property(srna, "remesh_preserve_paint_mask", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", ME_REMESH_REPROJECT_PAINT_MASK);
+ RNA_def_property_boolean_default(prop, false);
+ RNA_def_property_ui_text(prop, "Preserve Paint Mask", "Keep the current mask on the new mesh");
+ RNA_def_property_update(prop, 0, "rna_Mesh_update_draw");
+ /* End remesh */
+
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(
@@ -3029,6 +3046,7 @@ static void rna_def_mesh(BlenderRNA *brna)
prop = RNA_def_property(srna, "texco_mesh", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "texcomesh");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Texture Space Mesh", "Derive texture coordinates from another mesh");
diff --git a/source/blender/makesrna/intern/rna_mesh_api.c b/source/blender/makesrna/intern/rna_mesh_api.c
index 283590fc529..0b3a7802082 100644
--- a/source/blender/makesrna/intern/rna_mesh_api.c
+++ b/source/blender/makesrna/intern/rna_mesh_api.c
@@ -311,11 +311,6 @@ void RNA_api_mesh(StructRNA *srna)
0,
"Calculate Loose Edges",
"Calculate the loose state of each edge");
- RNA_def_boolean(func,
- "calc_loop_triangles",
- 0,
- "Calculate Triangules",
- "Force recalculation of triangle tessellation");
RNA_def_function_flag(func, FUNC_USE_CONTEXT);
RNA_def_function(srna, "update_gpu_tag", "rna_Mesh_update_gpu_tag");
diff --git a/source/blender/makesrna/intern/rna_meta.c b/source/blender/makesrna/intern/rna_meta.c
index 743bac2b709..451bdda45f5 100644
--- a/source/blender/makesrna/intern/rna_meta.c
+++ b/source/blender/makesrna/intern/rna_meta.c
@@ -89,7 +89,7 @@ static void rna_Meta_texspace_size_set(PointerRNA *ptr, const float *values)
static void rna_MetaBall_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- MetaBall *mb = ptr->id.data;
+ MetaBall *mb = (MetaBall *)ptr->owner_id;
Object *ob;
/* cheating way for importers to avoid slow updates */
@@ -158,13 +158,13 @@ static void rna_MetaBall_elements_clear(MetaBall *mb)
static bool rna_Meta_is_editmode_get(PointerRNA *ptr)
{
- MetaBall *mb = ptr->id.data;
+ MetaBall *mb = (MetaBall *)ptr->owner_id;
return (mb->editelems != NULL);
}
static char *rna_MetaElement_path(PointerRNA *ptr)
{
- MetaBall *mb = ptr->id.data;
+ MetaBall *mb = (MetaBall *)ptr->owner_id;
MetaElem *ml = ptr->data;
int index = -1;
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 7e1ff01a7c3..26bb83fe6e8 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -595,8 +595,8 @@ static void rna_Modifier_name_set(PointerRNA *ptr, const char *value)
BLI_strncpy_utf8(md->name, value, sizeof(md->name));
/* make sure the name is truly unique */
- if (ptr->id.data) {
- Object *ob = ptr->id.data;
+ if (ptr->owner_id) {
+ Object *ob = (Object *)ptr->owner_id;
modifier_unique_name(&ob->modifiers, md);
}
@@ -615,8 +615,8 @@ static char *rna_Modifier_path(PointerRNA *ptr)
static void rna_Modifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->owner_id);
}
static void rna_Modifier_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -723,7 +723,7 @@ static void modifier_object_set(Object *self, Object **ob_p, int type, PointerRN
PointerRNA *ptr, PointerRNA value, struct ReportList *UNUSED(reports)) \
{ \
_type##ModifierData *tmd = (_type##ModifierData *)ptr->data; \
- modifier_object_set(ptr->id.data, &tmd->_prop, _obtype, value); \
+ modifier_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
}
RNA_MOD_OBJECT_SET(Armature, object, OB_ARMATURE);
@@ -746,7 +746,7 @@ static void rna_HookModifier_object_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *owner = (Object *)ptr->id.data;
+ Object *owner = (Object *)ptr->owner_id;
HookModifierData *hmd = ptr->data;
Object *ob = (Object *)value.data;
@@ -757,7 +757,7 @@ static void rna_HookModifier_object_set(PointerRNA *ptr,
static void rna_HookModifier_subtarget_set(PointerRNA *ptr, const char *value)
{
- Object *owner = (Object *)ptr->id.data;
+ Object *owner = (Object *)ptr->owner_id;
HookModifierData *hmd = ptr->data;
BLI_strncpy(hmd->subtarget, value, sizeof(hmd->subtarget));
@@ -844,7 +844,7 @@ static void rna_UVProjector_object_set(PointerRNA *ptr,
static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
{
SmokeModifierData *smd = (SmokeModifierData *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
/* nothing changed */
if ((smd->type & MOD_SMOKE_TYPE_DOMAIN) && smd->domain) {
@@ -871,7 +871,7 @@ static void rna_Smoke_set_type(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_MultiresModifier_type_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
MultiresModifierData *mmd = (MultiresModifierData *)ptr->data;
multires_force_update(ob);
@@ -889,7 +889,7 @@ static void rna_MultiresModifier_level_range(
static bool rna_MultiresModifier_external_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Mesh *me = ob->data;
return CustomData_external_test(&me->ldata, CD_MDISPS);
@@ -897,7 +897,7 @@ static bool rna_MultiresModifier_external_get(PointerRNA *ptr)
static void rna_MultiresModifier_filepath_get(PointerRNA *ptr, char *value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
CustomDataExternal *external = ((Mesh *)ob->data)->ldata.external;
BLI_strncpy(value, (external) ? external->filename : "", sizeof(external->filename));
@@ -905,7 +905,7 @@ static void rna_MultiresModifier_filepath_get(PointerRNA *ptr, char *value)
static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
CustomDataExternal *external = ((Mesh *)ob->data)->ldata.external;
if (external && !STREQ(external->filename, value)) {
@@ -916,7 +916,7 @@ static void rna_MultiresModifier_filepath_set(PointerRNA *ptr, const char *value
static int rna_MultiresModifier_filepath_length(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
CustomDataExternal *external = ((Mesh *)ob->data)->ldata.external;
return strlen((external) ? external->filename : "");
@@ -941,19 +941,19 @@ static bool rna_MeshDeformModifier_is_bound_get(PointerRNA *ptr)
static PointerRNA rna_SoftBodyModifier_settings_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return rna_pointer_inherit_refine(ptr, &RNA_SoftBodySettings, ob->soft);
}
static PointerRNA rna_SoftBodyModifier_point_cache_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return rna_pointer_inherit_refine(ptr, &RNA_PointCache, ob->soft->shared->pointcache);
}
static PointerRNA rna_CollisionModifier_settings_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return rna_pointer_inherit_refine(ptr, &RNA_CollisionSettings, ob->pd);
}
@@ -1560,6 +1560,7 @@ static void rna_def_modifier_generic_map_info(StructRNA *srna)
prop = RNA_def_property(srna, "texture", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Texture", "");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "texture_coords", PROP_ENUM, PROP_NONE);
@@ -1579,6 +1580,7 @@ static void rna_def_modifier_generic_map_info(StructRNA *srna)
RNA_def_property_ui_text(
prop, "Texture Coordinate Object", "Object to set the texture coordinates");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -1595,11 +1597,13 @@ static void rna_def_modifier_warp(BlenderRNA *brna)
prop = RNA_def_property(srna, "object_from", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "From", "Object to transform from");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "object_to", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "To", "Object to transform to");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE);
@@ -1715,6 +1719,7 @@ static void rna_def_modifier_lattice(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -1758,6 +1763,7 @@ static void rna_def_modifier_curve(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_CurveModifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -1916,6 +1922,7 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "mirror_ob");
RNA_def_property_ui_text(prop, "Mirror Object", "Object to use as mirror");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -2125,6 +2132,7 @@ static void rna_def_modifier_wave(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "objectcenter");
RNA_def_property_ui_text(prop, "Start Position Object", "Object which defines the wave center");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -2280,6 +2288,7 @@ static void rna_def_modifier_hook(BlenderRNA *brna)
RNA_def_property_ui_text(
prop, "Object", "Parent Object for hook, also recalculates and clears offset");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_pointer_funcs(prop, NULL, "rna_HookModifier_object_set", NULL, NULL);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -2380,6 +2389,7 @@ static void rna_def_modifier_boolean(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_BooleanModifier_object_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "operation", PROP_ENUM, PROP_NONE);
@@ -2468,6 +2478,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_ArrayModifier_curve_ob_set", NULL, "rna_Curve_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_ArrayModifier_dependency_update");
/* Offset parameters */
@@ -2531,6 +2542,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
"Use the location and rotation of another object to determine the distance and "
"rotational change between arrayed items");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
/* Caps */
@@ -2539,6 +2551,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "end_cap", PROP_POINTER, PROP_NONE);
@@ -2546,6 +2559,7 @@ static void rna_def_modifier_array(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "offset_u", PROP_FLOAT, PROP_FACTOR);
@@ -2754,6 +2768,7 @@ static void rna_def_modifier_uvproject(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Object", "Object to use as projector transform");
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -2998,6 +3013,7 @@ static void rna_def_modifier_cast(BlenderRNA *brna)
"Control object: if available, its location determines the center of the effect");
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
@@ -3080,6 +3096,7 @@ static void rna_def_modifier_meshdeform(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_MeshDeformModifier_object_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "is_bound", PROP_BOOLEAN, PROP_NONE);
@@ -3165,6 +3182,7 @@ static void rna_def_modifier_particleinstance(BlenderRNA *brna)
RNA_def_property_pointer_funcs(prop, NULL, NULL, NULL, "rna_Mesh_object_poll");
RNA_def_property_ui_text(prop, "Object", "Object that has the particle system");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "particle_system_index", PROP_INT, PROP_NONE);
@@ -3732,6 +3750,7 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "auxiliary_target", PROP_POINTER, PROP_NONE);
@@ -3740,6 +3759,7 @@ static void rna_def_modifier_shrinkwrap(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_ShrinkwrapModifier_auxTarget_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -3857,6 +3877,7 @@ static void rna_def_modifier_mask(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_MaskModifier_ob_arm_set", NULL, "rna_Armature_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE);
@@ -3935,6 +3956,7 @@ static void rna_def_modifier_simpledeform(BlenderRNA *brna)
prop = RNA_def_property(srna, "origin", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Origin", "Offset the origin and orientation of the deformation");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "factor", PROP_FLOAT, PROP_NONE);
@@ -4128,6 +4150,7 @@ static void rna_def_modifier_screw(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ob_axis");
RNA_def_property_ui_text(prop, "Object", "Object to define the screw axis");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "steps", PROP_INT, PROP_UNSIGNED);
@@ -4254,6 +4277,7 @@ static void rna_def_modifier_uvwarp(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "object_src");
RNA_def_property_ui_text(prop, "Object From", "Object defining offset");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "bone_from", PROP_STRING, PROP_NONE);
@@ -4265,6 +4289,7 @@ static void rna_def_modifier_uvwarp(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "object_dst");
RNA_def_property_ui_text(prop, "Object To", "Object defining offset");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "bone_to", PROP_STRING, PROP_NONE);
@@ -4332,6 +4357,7 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *UNUSED(brna),
prop = RNA_def_property(srna, "mask_texture", PROP_POINTER, PROP_NONE);
RNA_def_property_ui_text(prop, "Masking Tex", "Masking texture");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "mask_tex_use_channel", PROP_ENUM, PROP_NONE);
@@ -4360,6 +4386,7 @@ static void rna_def_modifier_weightvg_mask(BlenderRNA *UNUSED(brna),
"Which object to take texture "
"coordinates from");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
@@ -4629,6 +4656,7 @@ static void rna_def_modifier_weightvgproximity(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "proximity_ob_target");
RNA_def_property_ui_text(prop, "Target Object", "Object to calculate vertices distances from");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "min_dist", PROP_FLOAT, PROP_DISTANCE);
@@ -5192,6 +5220,7 @@ static void rna_def_modifier_meshseqcache(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "CacheFile");
RNA_def_property_ui_text(prop, "Cache File", "");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "object_path", PROP_STRING, PROP_NONE);
@@ -5393,6 +5422,7 @@ static void rna_def_modifier_datatransfer(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ob_source");
RNA_def_property_ui_text(prop, "Source Object", "Object to transfer data from");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_pointer_funcs(
prop, NULL, "rna_DataTransferModifier_ob_source_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
@@ -5798,6 +5828,7 @@ static void rna_def_modifier_normaledit(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Target", "Target object used to affect normals");
RNA_def_property_pointer_funcs(prop, NULL, "rna_NormalEditModifier_target_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "use_direction_parallel", PROP_BOOLEAN, PROP_NONE);
@@ -5825,6 +5856,7 @@ static void rna_def_modifier_surfacedeform(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_SurfaceDeformModifier_target_set", NULL, "rna_Mesh_object_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
prop = RNA_def_property(srna, "falloff", PROP_FLOAT, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c
index 10e19b92dda..9bfa93ceba5 100644
--- a/source/blender/makesrna/intern/rna_movieclip.c
+++ b/source/blender/makesrna/intern/rna_movieclip.c
@@ -53,14 +53,14 @@
static void rna_MovieClip_reload_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
DEG_id_tag_update(&clip->id, ID_RECALC_SOURCE);
}
static void rna_MovieClip_size_get(PointerRNA *ptr, int *values)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
values[0] = clip->lastsize[0];
values[1] = clip->lastsize[1];
@@ -68,13 +68,13 @@ static void rna_MovieClip_size_get(PointerRNA *ptr, int *values)
static float rna_MovieClip_fps_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
return BKE_movieclip_get_fps(clip);
}
static void rna_MovieClip_use_proxy_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
BKE_movieclip_clear_cache(clip);
BKE_sequence_invalidate_movieclip_strips(bmain, clip);
}
@@ -83,7 +83,7 @@ static void rna_MovieClipUser_proxy_render_settings_update(Main *bmain,
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- ID *id = (ID *)ptr->id.data;
+ ID *id = ptr->owner_id;
MovieClipUser *user = (MovieClipUser *)ptr->data;
/* when changing render settings of space clip user
diff --git a/source/blender/makesrna/intern/rna_nla.c b/source/blender/makesrna/intern/rna_nla.c
index 6f55fb4e24c..97cab783aed 100644
--- a/source/blender/makesrna/intern/rna_nla.c
+++ b/source/blender/makesrna/intern/rna_nla.c
@@ -65,8 +65,8 @@ static void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value)
BLI_strncpy_utf8(data->name, value, sizeof(data->name));
/* validate if there's enough info to do so */
- if (ptr->id.data) {
- AnimData *adt = BKE_animdata_from_id(ptr->id.data);
+ if (ptr->owner_id) {
+ AnimData *adt = BKE_animdata_from_id(ptr->owner_id);
BKE_nlastrip_validate_name(adt, data);
}
}
@@ -74,7 +74,7 @@ static void rna_NlaStrip_name_set(PointerRNA *ptr, const char *value)
static char *rna_NlaStrip_path(PointerRNA *ptr)
{
NlaStrip *strip = (NlaStrip *)ptr->data;
- AnimData *adt = BKE_animdata_from_id(ptr->id.data);
+ AnimData *adt = BKE_animdata_from_id(ptr->owner_id);
/* if we're attached to AnimData, try to resolve path back to AnimData */
if (adt) {
@@ -103,7 +103,7 @@ static char *rna_NlaStrip_path(PointerRNA *ptr)
static void rna_NlaStrip_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
ANIM_id_update(bmain, id);
}
@@ -122,9 +122,9 @@ static void rna_NlaStrip_transform_update(Main *bmain, Scene *scene, PointerRNA
BKE_nlameta_flush_transforms(strip);
/* set the flag */
- if ((strip->flag & NLASTRIP_FLAG_AUTO_BLENDS) && ptr->id.data) {
+ if ((strip->flag & NLASTRIP_FLAG_AUTO_BLENDS) && ptr->owner_id) {
/* validate state to ensure that auto-blend gets applied immediately */
- IdAdtTemplate *iat = (IdAdtTemplate *)ptr->id.data;
+ IdAdtTemplate *iat = (IdAdtTemplate *)ptr->owner_id;
if (iat->adt) {
BKE_nla_validate_state(iat->adt);
@@ -274,8 +274,8 @@ static void rna_NlaStrip_use_auto_blend_set(PointerRNA *ptr, bool value)
data->flag |= NLASTRIP_FLAG_AUTO_BLENDS;
/* validate state to ensure that auto-blend gets applied immediately */
- if (ptr->id.data) {
- IdAdtTemplate *iat = (IdAdtTemplate *)ptr->id.data;
+ if (ptr->owner_id) {
+ IdAdtTemplate *iat = (IdAdtTemplate *)ptr->owner_id;
if (iat->adt) {
BKE_nla_validate_state(iat->adt);
@@ -298,8 +298,8 @@ static int rna_NlaStrip_action_editable(PointerRNA *ptr, const char **UNUSED(r_i
NlaStrip *strip = (NlaStrip *)ptr->data;
/* strip actions shouldn't be editable if NLA tweakmode is on */
- if (ptr->id.data) {
- AnimData *adt = BKE_animdata_from_id(ptr->id.data);
+ if (ptr->owner_id) {
+ AnimData *adt = BKE_animdata_from_id(ptr->owner_id);
if (adt) {
/* active action is only editable when it is not a tweaking strip */
@@ -475,7 +475,7 @@ static void rna_NlaStrip_remove(
static void rna_NlaTrack_solo_set(PointerRNA *ptr, bool value)
{
NlaTrack *data = (NlaTrack *)ptr->data;
- AnimData *adt = BKE_animdata_from_id(ptr->id.data);
+ AnimData *adt = BKE_animdata_from_id(ptr->owner_id);
NlaTrack *nt;
if (data == NULL) {
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index b28403bf28c..0909aa42a4d 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -63,10 +63,13 @@ const EnumPropertyItem rna_enum_node_socket_in_out_items[] = {
{SOCK_IN, "IN", 0, "Input", ""}, {SOCK_OUT, "OUT", 0, "Output", ""}, {0, NULL, 0, NULL, NULL}};
#ifndef RNA_RUNTIME
-static const EnumPropertyItem rna_enum_node_socket_draw_shape_items[] = {
- {SOCK_DRAW_SHAPE_CIRCLE, "CIRCLE", 0, "Circle", ""},
- {SOCK_DRAW_SHAPE_SQUARE, "SQUARE", 0, "Square", ""},
- {SOCK_DRAW_SHAPE_DIAMOND, "DIAMOND", 0, "Diamond", ""},
+static const EnumPropertyItem rna_enum_node_socket_display_shape_items[] = {
+ {SOCK_DISPLAY_SHAPE_CIRCLE, "CIRCLE", 0, "Circle", ""},
+ {SOCK_DISPLAY_SHAPE_SQUARE, "SQUARE", 0, "Square", ""},
+ {SOCK_DISPLAY_SHAPE_DIAMOND, "DIAMOND", 0, "Diamond", ""},
+ {SOCK_DISPLAY_SHAPE_CIRCLE_DOT, "CIRCLE_DOT", 0, "Circle with inner dot", ""},
+ {SOCK_DISPLAY_SHAPE_SQUARE_DOT, "SQUARE_DOT", 0, "Square with inner dot", ""},
+ {SOCK_DISPLAY_SHAPE_DIAMOND_DOT, "DIAMOND_DOT", 0, "Diamond with inner dot", ""},
{0, NULL, 0, NULL, NULL}};
static const EnumPropertyItem node_socket_type_items[] = {
@@ -100,44 +103,81 @@ static const EnumPropertyItem node_chunksize_items[] = {
#endif
const EnumPropertyItem rna_enum_node_math_items[] = {
- {NODE_MATH_ADD, "ADD", 0, "Add", ""},
- {NODE_MATH_SUB, "SUBTRACT", 0, "Subtract", ""},
- {NODE_MATH_MUL, "MULTIPLY", 0, "Multiply", ""},
- {NODE_MATH_DIVIDE, "DIVIDE", 0, "Divide", ""},
+ {NODE_MATH_ADD, "ADD", 0, "Add", "A + B"},
+ {NODE_MATH_SUBTRACT, "SUBTRACT", 0, "Subtract", "A - B"},
+ {NODE_MATH_MULTIPLY, "MULTIPLY", 0, "Multiply", "A * B"},
+ {NODE_MATH_DIVIDE, "DIVIDE", 0, "Divide", "A / B"},
{0, "", ICON_NONE, NULL, NULL},
- {NODE_MATH_POW, "POWER", 0, "Power", ""},
- {NODE_MATH_LOG, "LOGARITHM", 0, "Logarithm", ""},
- {NODE_MATH_SQRT, "SQRT", 0, "Square Root", ""},
- {NODE_MATH_ABS, "ABSOLUTE", 0, "Absolute", ""},
+ {NODE_MATH_POWER, "POWER", 0, "Power", "A power B"},
+ {NODE_MATH_LOGARITHM, "LOGARITHM", 0, "Logarithm", "Logarithm A base B"},
+ {NODE_MATH_SQRT, "SQRT", 0, "Square Root", "Square root of A"},
+ {NODE_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Magnitude of A"},
{0, "", ICON_NONE, NULL, NULL},
- {NODE_MATH_MIN, "MINIMUM", 0, "Minimum", ""},
- {NODE_MATH_MAX, "MAXIMUM", 0, "Maximum", ""},
- {NODE_MATH_LESS, "LESS_THAN", 0, "Less Than", ""},
- {NODE_MATH_GREATER, "GREATER_THAN", 0, "Greater Than", ""},
+ {NODE_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "The minimum from A and B"},
+ {NODE_MATH_MAXIMUM, "MAXIMUM", 0, "Maximum", "The maximum from A and B"},
+ {NODE_MATH_LESS_THAN, "LESS_THAN", 0, "Less Than", "1 if A < B else 0"},
+ {NODE_MATH_GREATER_THAN, "GREATER_THAN", 0, "Greater Than", "1 if A > B else 0"},
{0, "", ICON_NONE, NULL, NULL},
- {NODE_MATH_ROUND, "ROUND", 0, "Round", ""},
- {NODE_MATH_FLOOR, "FLOOR", 0, "Floor", ""},
- {NODE_MATH_CEIL, "CEIL", 0, "Ceil", ""},
- {NODE_MATH_FRACT, "FRACT", 0, "Fract", ""},
- {NODE_MATH_MOD, "MODULO", 0, "Modulo", ""},
+ {NODE_MATH_ROUND,
+ "ROUND",
+ 0,
+ "Round",
+ "Round A to the nearest integer. Round upward if the fraction part is 0.5"},
+ {NODE_MATH_FLOOR, "FLOOR", 0, "Floor", "The largest integer smaller than or equal A"},
+ {NODE_MATH_CEIL, "CEIL", 0, "Ceil", "The smallest integer greater than or equal A"},
+ {NODE_MATH_FRACTION, "FRACT", 0, "Fraction", "The fraction part of A"},
+ {NODE_MATH_MODULO, "MODULO", 0, "Modulo", "A mod B"},
{0, "", ICON_NONE, NULL, NULL},
- {NODE_MATH_SIN, "SINE", 0, "Sine", ""},
- {NODE_MATH_COS, "COSINE", 0, "Cosine", ""},
- {NODE_MATH_TAN, "TANGENT", 0, "Tangent", ""},
- {NODE_MATH_ASIN, "ARCSINE", 0, "Arcsine", ""},
- {NODE_MATH_ACOS, "ARCCOSINE", 0, "Arccosine", ""},
- {NODE_MATH_ATAN, "ARCTANGENT", 0, "Arctangent", ""},
- {NODE_MATH_ATAN2, "ARCTAN2", 0, "Arctan2", ""},
+ {NODE_MATH_SINE, "SINE", 0, "Sine", "sin(A)"},
+ {NODE_MATH_COSINE, "COSINE", 0, "Cosine", "cos(A)"},
+ {NODE_MATH_TANGENT, "TANGENT", 0, "Tangent", "tan(A)"},
+ {NODE_MATH_ARCSINE, "ARCSINE", 0, "Arcsine", "arcsin(A)"},
+ {NODE_MATH_ARCCOSINE, "ARCCOSINE", 0, "Arccosine", "arccos(A)"},
+ {NODE_MATH_ARCTANGENT, "ARCTANGENT", 0, "Arctangent", "arctan(A)"},
+ {NODE_MATH_ARCTAN2, "ARCTAN2", 0, "Arctan2", "The signed angle arctan(A / B)"},
{0, NULL, 0, NULL, NULL},
};
const EnumPropertyItem rna_enum_node_vec_math_items[] = {
- {0, "ADD", 0, "Add", ""},
- {1, "SUBTRACT", 0, "Subtract", ""},
- {2, "AVERAGE", 0, "Average", ""},
- {3, "DOT_PRODUCT", 0, "Dot Product", ""},
- {4, "CROSS_PRODUCT", 0, "Cross Product", ""},
- {5, "NORMALIZE", 0, "Normalize", ""},
+ {NODE_VECTOR_MATH_ADD, "ADD", 0, "Add", "A + B"},
+ {NODE_VECTOR_MATH_SUBTRACT, "SUBTRACT", 0, "Subtract", "A - B"},
+ {NODE_VECTOR_MATH_MULTIPLY, "MULTIPLY", 0, "Multiply", "Entrywise multiply"},
+ {NODE_VECTOR_MATH_DIVIDE, "DIVIDE", 0, "Divide", "Entrywise divide"},
+ {0, "", ICON_NONE, NULL, NULL},
+ {NODE_VECTOR_MATH_CROSS_PRODUCT, "CROSS_PRODUCT", 0, "Cross Product", "A cross B"},
+ {NODE_VECTOR_MATH_PROJECT, "PROJECT", 0, "Project", "Project A onto B"},
+ {NODE_VECTOR_MATH_REFLECT,
+ "REFLECT",
+ 0,
+ "Reflect",
+ "Reflect A around the normal B. B needn't be normalized"},
+ {NODE_VECTOR_MATH_DOT_PRODUCT, "DOT_PRODUCT", 0, "Dot Product", "A dot B"},
+ {0, "", ICON_NONE, NULL, NULL},
+ {NODE_VECTOR_MATH_DISTANCE, "DISTANCE", 0, "Distance", "Distance between A and B"},
+ {NODE_VECTOR_MATH_LENGTH, "LENGTH", 0, "Length", "Length of A"},
+ {NODE_VECTOR_MATH_SCALE, "SCALE", 0, "Scale", "A multiplied by Scale"},
+ {NODE_VECTOR_MATH_NORMALIZE, "NORMALIZE", 0, "Normalize", "Normalize A"},
+ {0, "", ICON_NONE, NULL, NULL},
+ {NODE_VECTOR_MATH_SNAP,
+ "SNAP",
+ 0,
+ "Snap",
+ "Round A to the largest integer multiple of B less than or equal A"},
+ {NODE_VECTOR_MATH_FLOOR, "FLOOR", 0, "Floor", "Entrywise floor"},
+ {NODE_VECTOR_MATH_CEIL, "CEIL", 0, "Ceil", "Entrywise ceil"},
+ {NODE_VECTOR_MATH_MODULO, "MODULO", 0, "Modulo", "Entrywise modulo"},
+ {NODE_VECTOR_MATH_FRACTION, "FRACTION", 0, "Fraction", "The fraction part of A entrywise"},
+ {NODE_VECTOR_MATH_ABSOLUTE, "ABSOLUTE", 0, "Absolute", "Entrywise absolute"},
+ {NODE_VECTOR_MATH_MINIMUM, "MINIMUM", 0, "Minimum", "Entrywise minimum"},
+ {NODE_VECTOR_MATH_MAXIMUM, "MAXIMUM", 0, "Maximum", "Entrywise maximum"},
+ {0, NULL, 0, NULL, NULL},
+};
+
+static const EnumPropertyItem rna_enum_node_tex_dimensions_items[] = {
+ {1, "1D", 0, "1D", "Use the scalar value W as input"},
+ {2, "2D", 0, "2D", "Use the 2D vector (x, y) as input. The z component is ignored"},
+ {3, "3D", 0, "3D", "Use the 3D vector Vector as input"},
+ {4, "4D", 0, "4D", "Use the 4D vector (x, y, z, w) as input"},
{0, NULL, 0, NULL, NULL},
};
@@ -720,7 +760,7 @@ static bool rna_NodeTree_check(bNodeTree *ntree, ReportList *reports)
static void rna_NodeTree_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
WM_main_add_notifier(NC_NODE | NA_EDITED, NULL);
@@ -1201,7 +1241,7 @@ static char *rna_Node_path(PointerRNA *ptr)
char *rna_Node_ImageUser_path(PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node;
char name_esc[sizeof(node->name) * 2];
@@ -1706,7 +1746,7 @@ static bool rna_Node_parent_poll(PointerRNA *ptr, PointerRNA value)
static void rna_Node_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
ED_node_tag_update_nodetree(bmain, ntree, node);
}
@@ -1730,7 +1770,7 @@ static void rna_Node_select_set(PointerRNA *ptr, bool value)
static void rna_Node_name_set(PointerRNA *ptr, const char *value)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
char oldname[sizeof(node->name)];
@@ -2082,7 +2122,7 @@ static StructRNA *rna_NodeSocket_refine(PointerRNA *ptr)
static char *rna_NodeSocket_path(PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = (bNodeSocket *)ptr->data;
bNode *node;
int socketindex;
@@ -2116,7 +2156,7 @@ static IDProperty *rna_NodeSocket_idprops(PointerRNA *ptr, bool create)
static PointerRNA rna_NodeSocket_node_get(PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = (bNodeSocket *)ptr->data;
bNode *node;
PointerRNA r_ptr;
@@ -2129,7 +2169,7 @@ static PointerRNA rna_NodeSocket_node_get(PointerRNA *ptr)
static void rna_NodeSocket_type_set(PointerRNA *ptr, int value)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = (bNodeSocket *)ptr->data;
bNode *node;
nodeFindNode(ntree, sock, &node, NULL);
@@ -2138,7 +2178,7 @@ static void rna_NodeSocket_type_set(PointerRNA *ptr, int value)
static void rna_NodeSocket_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = (bNodeSocket *)ptr->data;
bNode *node;
if (nodeFindNode(ntree, sock, &node, NULL)) {
@@ -2398,7 +2438,7 @@ static StructRNA *rna_NodeSocketInterface_refine(PointerRNA *ptr)
static char *rna_NodeSocketInterface_path(PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = (bNodeSocket *)ptr->data;
int socketindex;
@@ -2429,7 +2469,7 @@ static IDProperty *rna_NodeSocketInterface_idprops(PointerRNA *ptr, bool create)
static void rna_NodeSocketInterface_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *stemp = ptr->data;
if (!stemp->typeinfo) {
@@ -2545,7 +2585,7 @@ static void rna_NodeSocketStandard_value_update(struct bContext *C, PointerRNA *
/* try to use node from context, faster */
node = CTX_data_pointer_get(C, "node").data;
if (!node) {
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeSocket *sock = ptr->data;
/* fall back to searching node in the tree */
@@ -2763,7 +2803,7 @@ static void rna_CompositorNode_tag_need_exec(bNode *node)
static void rna_Node_tex_image_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
ED_node_tag_update_nodetree(bmain, ntree, node);
@@ -2772,7 +2812,7 @@ static void rna_Node_tex_image_update(Main *bmain, Scene *UNUSED(scene), Pointer
static void rna_NodeGroup_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
if (node->id) {
@@ -2786,7 +2826,7 @@ static void rna_NodeGroup_node_tree_set(PointerRNA *ptr,
const PointerRNA value,
struct ReportList *UNUSED(reports))
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = ptr->data;
bNodeTree *ngroup = value.data;
@@ -2804,7 +2844,7 @@ static void rna_NodeGroup_node_tree_set(PointerRNA *ptr,
static bool rna_NodeGroup_node_tree_poll(PointerRNA *ptr, const PointerRNA value)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNodeTree *ngroup = value.data;
/* only allow node trees of the same type as the group node's tree */
@@ -2831,7 +2871,7 @@ static StructRNA *rna_NodeGroup_interface_typef(PointerRNA *ptr)
static StructRNA *rna_NodeGroupInputOutput_interface_typef(PointerRNA *ptr)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
if (ntree) {
StructRNA *srna = ntreeInterfaceTypeGet(ntree, true);
@@ -3166,7 +3206,7 @@ static const EnumPropertyItem *rna_Node_channel_itemf(bContext *UNUSED(C),
static void rna_Image_Node_update_id(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
node->update |= NODE_UPDATE_ID;
@@ -3190,19 +3230,19 @@ static PointerRNA rna_NodeOutputFile_slot_file_get(CollectionPropertyIterator *i
{
PointerRNA ptr;
bNodeSocket *sock = rna_iterator_listbase_get(iter);
- RNA_pointer_create(iter->parent.id.data, &RNA_NodeOutputFileSlotFile, sock->storage, &ptr);
+ RNA_pointer_create(iter->parent.owner_id, &RNA_NodeOutputFileSlotFile, sock->storage, &ptr);
return ptr;
}
static void rna_NodeColorBalance_update_lgg(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ntreeCompositColorBalanceSyncFromLGG(ptr->id.data, ptr->data);
+ ntreeCompositColorBalanceSyncFromLGG((bNodeTree *)ptr->owner_id, ptr->data);
rna_Node_update(bmain, scene, ptr);
}
static void rna_NodeColorBalance_update_cdl(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ntreeCompositColorBalanceSyncFromCDL(ptr->id.data, ptr->data);
+ ntreeCompositColorBalanceSyncFromCDL((bNodeTree *)ptr->owner_id, ptr->data);
rna_Node_update(bmain, scene, ptr);
}
@@ -3241,13 +3281,13 @@ static void rna_NodeCryptomatte_matte_set(PointerRNA *ptr, const char *value)
static void rna_NodeCryptomatte_update_add(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ntreeCompositCryptomatteSyncFromAdd(ptr->id.data, ptr->data);
+ ntreeCompositCryptomatteSyncFromAdd((bNodeTree *)ptr->owner_id, ptr->data);
rna_Node_update(bmain, scene, ptr);
}
static void rna_NodeCryptomatte_update_remove(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ntreeCompositCryptomatteSyncFromRemove(ptr->id.data, ptr->data);
+ ntreeCompositCryptomatteSyncFromRemove((bNodeTree *)ptr->owner_id, ptr->data);
rna_Node_update(bmain, scene, ptr);
}
@@ -3257,7 +3297,7 @@ static PointerRNA rna_NodeOutputFile_slot_layer_get(CollectionPropertyIterator *
{
PointerRNA ptr;
bNodeSocket *sock = rna_iterator_listbase_get(iter);
- RNA_pointer_create(iter->parent.id.data, &RNA_NodeOutputFileSlotLayer, sock->storage, &ptr);
+ RNA_pointer_create(iter->parent.owner_id, &RNA_NodeOutputFileSlotLayer, sock->storage, &ptr);
return ptr;
}
@@ -3287,7 +3327,7 @@ static int rna_NodeOutputFileSocket_find_node(bNodeTree *ntree,
static void rna_NodeOutputFileSlotFile_path_set(PointerRNA *ptr, const char *value)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
NodeImageMultiFileSocket *sockdata = ptr->data;
bNode *node;
bNodeSocket *sock;
@@ -3299,7 +3339,7 @@ static void rna_NodeOutputFileSlotFile_path_set(PointerRNA *ptr, const char *val
static void rna_NodeOutputFileSlotLayer_name_set(PointerRNA *ptr, const char *value)
{
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
NodeImageMultiFileSocket *sockdata = ptr->data;
bNode *node;
bNodeSocket *sock;
@@ -3420,7 +3460,7 @@ static void rna_ShaderNodeScript_bytecode_set(PointerRNA *ptr, const char *value
static void rna_ShaderNodeScript_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
RenderEngineType *engine_type = RE_engines_find(scene->r.engine);
@@ -3436,7 +3476,7 @@ static void rna_ShaderNodeScript_update(Main *bmain, Scene *scene, PointerRNA *p
static void rna_ShaderNode_socket_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
nodeUpdate(ntree, node);
@@ -3445,7 +3485,7 @@ static void rna_ShaderNode_socket_update(Main *bmain, Scene *scene, PointerRNA *
static void rna_CompositorNodeScale_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- bNodeTree *ntree = (bNodeTree *)ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = (bNode *)ptr->data;
nodeUpdate(ntree, node);
@@ -3476,7 +3516,7 @@ static void rna_ShaderNodePointDensity_psys_set(PointerRNA *ptr,
NodeShaderTexPointDensity *shader_point_density = node->storage;
Object *ob = (Object *)node->id;
- if (ob && value.id.data == ob) {
+ if (ob && value.owner_id == &ob->id) {
shader_point_density->particle_system = BLI_findindex(&ob->particlesystem, value.data) + 1;
}
else {
@@ -3780,6 +3820,7 @@ static void def_group(StructRNA *srna)
RNA_def_property_pointer_funcs(
prop, NULL, "rna_NodeGroup_node_tree_set", NULL, "rna_NodeGroup_node_tree_poll");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Node Tree", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeGroup_update");
@@ -3834,6 +3875,16 @@ static void def_frame(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | ND_DISPLAY, NULL);
}
+static void def_map_range(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ prop = RNA_def_property(srna, "clamp", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
+ RNA_def_property_ui_text(prop, "Clamp", "Clamp the result to the target range [To Min, To Max]");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+}
+
static void def_math(StructRNA *srna)
{
PropertyRNA *prop;
@@ -3842,7 +3893,7 @@ static void def_math(StructRNA *srna)
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, rna_enum_node_math_items);
RNA_def_property_ui_text(prop, "Operation", "");
- RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update");
prop = RNA_def_property(srna, "use_clamp", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "custom2", SHD_MATH_CLAMP);
@@ -3858,7 +3909,7 @@ static void def_vector_math(StructRNA *srna)
RNA_def_property_enum_sdna(prop, NULL, "custom1");
RNA_def_property_enum_items(prop, rna_enum_node_vec_math_items);
RNA_def_property_ui_text(prop, "Operation", "");
- RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update");
}
static void def_rgb_curve(StructRNA *srna)
@@ -3944,6 +3995,7 @@ static void def_texture(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Texture");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Texture", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
@@ -4142,6 +4194,7 @@ static void def_sh_tex_environment(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Image");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_tex_image_update");
@@ -4220,6 +4273,7 @@ static void def_sh_tex_image(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Image");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_tex_image_update");
@@ -4454,6 +4508,18 @@ static void def_sh_tex_wave(StructRNA *srna)
RNA_def_property_update(prop, 0, "rna_Node_update");
}
+static void def_sh_tex_white_noise(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ prop = RNA_def_property(srna, "dimensions", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "custom1");
+ RNA_def_property_enum_items(prop, rna_enum_node_tex_dimensions_items);
+ RNA_def_property_ui_text(
+ prop, "Dimensions", "The number of dimensions to evaluate the noise in");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_ShaderNode_socket_update");
+}
+
static void def_sh_tex_coord(StructRNA *srna)
{
PropertyRNA *prop;
@@ -4462,6 +4528,7 @@ static void def_sh_tex_coord(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Object", "Use coordinates from this object (for object texture coordinates output)");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update_relations");
@@ -4596,6 +4663,7 @@ static void def_sh_tex_pointdensity(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Object", "Object to take point data from");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
@@ -5449,6 +5517,7 @@ static void def_cmp_image(StructRNA *srna)
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "Image");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Image_Node_update_id");
@@ -5476,6 +5545,7 @@ static void def_cmp_render_layers(StructRNA *srna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_Node_scene_set", NULL, NULL);
RNA_def_property_struct_type(prop, "Scene");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Scene", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_view_layer_update");
@@ -6162,6 +6232,7 @@ static void def_cmp_defocus(StructRNA *srna)
RNA_def_property_pointer_funcs(prop, NULL, "rna_Node_scene_set", NULL, NULL);
RNA_def_property_struct_type(prop, "Scene");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Scene", "Scene from which to select the active camera (render scene if undefined)");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
@@ -6662,7 +6733,7 @@ static void def_cmp_colorbalance(StructRNA *srna)
RNA_def_property_float_sdna(prop, NULL, "offset");
RNA_def_property_array(prop, 3);
RNA_def_property_ui_range(prop, 0, 1, 0.1, 3);
- RNA_def_property_ui_text(prop, "Offset", "Correction for Shadows");
+ RNA_def_property_ui_text(prop, "Offset", "Correction for entire tonal range");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeColorBalance_update_cdl");
prop = RNA_def_property(srna, "power", PROP_FLOAT, PROP_COLOR_GAMMA);
@@ -7590,6 +7661,18 @@ static void def_cmp_cryptomatte(StructRNA *srna)
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeCryptomatte_update_remove");
}
+static void def_cmp_denoise(StructRNA *srna)
+{
+ PropertyRNA *prop;
+
+ RNA_def_struct_sdna_from(srna, "NodeDenoise", "storage");
+
+ prop = RNA_def_property(srna, "use_hdr", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "hdr", 0);
+ RNA_def_property_ui_text(prop, "HDR", "Process HDR images");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+}
+
/* -- Texture Nodes --------------------------------------------------------- */
static void def_tex_output(StructRNA *srna)
@@ -7778,10 +7861,10 @@ static void rna_def_node_socket(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Type", "Data type");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
- prop = RNA_def_property(srna, "draw_shape", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "draw_shape");
- RNA_def_property_enum_items(prop, rna_enum_node_socket_draw_shape_items);
- RNA_def_property_enum_default(prop, SOCK_DRAW_SHAPE_CIRCLE);
+ prop = RNA_def_property(srna, "display_shape", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "display_shape");
+ RNA_def_property_enum_items(prop, rna_enum_node_socket_display_shape_items);
+ RNA_def_property_enum_default(prop, SOCK_DISPLAY_SHAPE_CIRCLE);
RNA_def_property_ui_text(prop, "Shape", "Socket shape");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_NodeSocket_update");
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 6069e78d874..d605aa6b4f7 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -299,27 +299,27 @@ const EnumPropertyItem rna_enum_object_axis_items[] = {
static void rna_Object_internal_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_TRANSFORM);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_TRANSFORM);
}
static void rna_Object_internal_update_draw(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_TRANSFORM);
- WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_TRANSFORM);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->owner_id);
}
static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
/* don't use compat so we get predictable rotation */
- BKE_object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat, false, true);
+ BKE_object_apply_mat4((Object *)ptr->owner_id, ((Object *)ptr->owner_id)->obmat, false, true);
rna_Object_internal_update(bmain, scene, ptr);
}
static void rna_Object_hide_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
BKE_main_collection_sync_remap(bmain);
DEG_id_tag_update(&ob->id, ID_RECALC_COPY_ON_WRITE);
DEG_relations_tag_update(bmain);
@@ -328,7 +328,7 @@ static void rna_Object_hide_update(Main *bmain, Scene *UNUSED(scene), PointerRNA
static void rna_MaterialIndex_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
if (ob && ob->type == OB_GPENCIL) {
/* notifying material property in topbar */
WM_main_add_notifier(NC_SPACE | ND_SPACE_VIEW3D, NULL);
@@ -337,13 +337,13 @@ static void rna_MaterialIndex_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
static void rna_Object_matrix_local_get(PointerRNA *ptr, float values[16])
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
BKE_object_matrix_local_get(ob, (float(*)[4])values);
}
static void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16])
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
float local_mat[4][4];
/* Localspace matrix is truly relative to the parent,
@@ -365,20 +365,20 @@ static void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16])
static void rna_Object_matrix_basis_get(PointerRNA *ptr, float values[16])
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
BKE_object_to_mat4(ob, (float(*)[4])values);
}
static void rna_Object_matrix_basis_set(PointerRNA *ptr, const float values[16])
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
BKE_object_apply_mat4(ob, (float(*)[4])values, false, false);
}
void rna_Object_internal_update_data(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+ WM_main_add_notifier(NC_OBJECT | ND_DRAW, ptr->owner_id);
}
void rna_Object_internal_update_data_dependency(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -389,7 +389,7 @@ void rna_Object_internal_update_data_dependency(Main *bmain, Scene *scene, Point
static void rna_Object_active_shape_update(bContext *C, PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Main *bmain = CTX_data_main(C);
Scene *scene = CTX_data_scene(C);
@@ -403,7 +403,7 @@ static void rna_Object_active_shape_update(bContext *C, PointerRNA *ptr)
DEG_id_tag_update(ob->data, 0);
EDBM_mesh_normals_update(((Mesh *)ob->data)->edit_mesh);
- BKE_editmesh_tessface_calc(((Mesh *)ob->data)->edit_mesh);
+ BKE_editmesh_looptri_calc(((Mesh *)ob->data)->edit_mesh);
break;
case OB_CURVE:
case OB_SURF:
@@ -422,9 +422,9 @@ static void rna_Object_active_shape_update(bContext *C, PointerRNA *ptr)
static void rna_Object_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_TRANSFORM);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_TRANSFORM);
DEG_relations_tag_update(bmain);
- WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_PARENT, ptr->owner_id);
}
static void rna_Object_data_set(PointerRNA *ptr, PointerRNA value, struct ReportList *reports)
@@ -546,6 +546,46 @@ static void rna_Object_parent_set(PointerRNA *ptr,
}
}
+bool rna_Object_parent_override_apply(Main *UNUSED(bmain),
+ PointerRNA *ptr_dst,
+ PointerRNA *ptr_src,
+ PointerRNA *ptr_storage,
+ PropertyRNA *prop_dst,
+ PropertyRNA *prop_src,
+ PropertyRNA *UNUSED(prop_storage),
+ const int len_dst,
+ const int len_src,
+ const int len_storage,
+ PointerRNA *UNUSED(ptr_item_dst),
+ PointerRNA *UNUSED(ptr_item_src),
+ PointerRNA *UNUSED(ptr_item_storage),
+ IDOverrideLibraryPropertyOperation *opop)
+{
+ BLI_assert(len_dst == len_src && (!ptr_storage || len_dst == len_storage) && len_dst == 0);
+ BLI_assert(opop->operation == IDOVERRIDE_LIBRARY_OP_REPLACE &&
+ "Unsupported RNA override operation on animdata pointer");
+ UNUSED_VARS_NDEBUG(ptr_storage, len_dst, len_src, len_storage, opop);
+
+ /* We need a special handling here because setting parent resets pinvert parent matrix,
+ * which is evil in our case. */
+ Object *ob = (Object *)ptr_dst->data;
+ Object *parent_dst = RNA_property_pointer_get(ptr_dst, prop_dst).data;
+ Object *parent_src = RNA_property_pointer_get(ptr_src, prop_src).data;
+
+ if (parent_src == parent_dst) {
+ return false;
+ }
+
+ if (parent_src == NULL) {
+ /* The only case where we do want default behavior (with matrix reset). */
+ ED_object_parent(ob, parent_src, ob->partype, ob->parsubstr);
+ }
+ else {
+ ob->parent = parent_src;
+ }
+ return true;
+}
+
static void rna_Object_parent_type_set(PointerRNA *ptr, int value)
{
Object *ob = (Object *)ptr->data;
@@ -651,7 +691,7 @@ static void rna_Object_dup_collection_set(PointerRNA *ptr,
static void rna_VertexGroup_name_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bDeformGroup *dg = (bDeformGroup *)ptr->data;
BLI_strncpy_utf8(dg->name, value, sizeof(dg->name));
defgroup_unique_name(dg, ob);
@@ -659,34 +699,34 @@ static void rna_VertexGroup_name_set(PointerRNA *ptr, const char *value)
static int rna_VertexGroup_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return BLI_findindex(&ob->defbase, ptr->data);
}
static PointerRNA rna_Object_active_vertex_group_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return rna_pointer_inherit_refine(
ptr, &RNA_VertexGroup, BLI_findlink(&ob->defbase, ob->actdef - 1));
}
static int rna_Object_active_vertex_group_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return ob->actdef - 1;
}
static void rna_Object_active_vertex_group_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ob->actdef = value + 1;
}
static void rna_Object_active_vertex_group_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
*min = 0;
*max = max_ii(0, BLI_listbase_count(&ob->defbase) - 1);
@@ -694,7 +734,7 @@ static void rna_Object_active_vertex_group_index_range(
void rna_object_vgroup_name_index_get(PointerRNA *ptr, char *value, int index)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bDeformGroup *dg;
dg = BLI_findlink(&ob->defbase, index - 1);
@@ -709,7 +749,7 @@ void rna_object_vgroup_name_index_get(PointerRNA *ptr, char *value, int index)
int rna_object_vgroup_name_index_length(PointerRNA *ptr, int index)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bDeformGroup *dg;
dg = BLI_findlink(&ob->defbase, index - 1);
@@ -718,13 +758,13 @@ 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;
+ Object *ob = (Object *)ptr->owner_id;
*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;
+ Object *ob = (Object *)ptr->owner_id;
bDeformGroup *dg = defgroup_find_name(ob, value);
if (dg) {
/* No need for BLI_strncpy_utf8, since this matches an existing group. */
@@ -737,7 +777,7 @@ void rna_object_vgroup_name_set(PointerRNA *ptr, const char *value, char *result
static void rna_FaceMap_name_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bFaceMap *fmap = (bFaceMap *)ptr->data;
BLI_strncpy_utf8(fmap->name, value, sizeof(fmap->name));
BKE_object_facemap_unique_name(ob, fmap);
@@ -745,33 +785,33 @@ static void rna_FaceMap_name_set(PointerRNA *ptr, const char *value)
static int rna_FaceMap_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return BLI_findindex(&ob->fmaps, ptr->data);
}
static PointerRNA rna_Object_active_face_map_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return rna_pointer_inherit_refine(ptr, &RNA_FaceMap, BLI_findlink(&ob->fmaps, ob->actfmap - 1));
}
static int rna_Object_active_face_map_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return ob->actfmap - 1;
}
static void rna_Object_active_face_map_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ob->actfmap = value + 1;
}
static void rna_Object_active_face_map_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
*min = 0;
*max = max_ii(0, BLI_listbase_count(&ob->fmaps) - 1);
@@ -779,7 +819,7 @@ static void rna_Object_active_face_map_index_range(
void rna_object_BKE_object_facemap_name_index_get(PointerRNA *ptr, char *value, int index)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bFaceMap *fmap;
fmap = BLI_findlink(&ob->fmaps, index - 1);
@@ -794,7 +834,7 @@ void rna_object_BKE_object_facemap_name_index_get(PointerRNA *ptr, char *value,
int rna_object_BKE_object_facemap_name_index_length(PointerRNA *ptr, int index)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bFaceMap *fmap;
fmap = BLI_findlink(&ob->fmaps, index - 1);
@@ -803,13 +843,13 @@ int rna_object_BKE_object_facemap_name_index_length(PointerRNA *ptr, int index)
void rna_object_BKE_object_facemap_name_index_set(PointerRNA *ptr, const char *value, short *index)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
*index = BKE_object_facemap_name_index(ob, value) + 1;
}
void rna_object_fmap_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bFaceMap *fmap = BKE_object_facemap_find_name(ob, value);
if (fmap) {
/* No need for BLI_strncpy_utf8, since this matches an existing group. */
@@ -822,7 +862,7 @@ void rna_object_fmap_name_set(PointerRNA *ptr, const char *value, char *result,
void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Mesh *me;
CustomDataLayer *layer;
int a;
@@ -845,7 +885,7 @@ void rna_object_uvlayer_name_set(PointerRNA *ptr, const char *value, char *resul
void rna_object_vcollayer_name_set(PointerRNA *ptr, const char *value, char *result, int maxlen)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Mesh *me;
CustomDataLayer *layer;
int a;
@@ -868,13 +908,13 @@ void rna_object_vcollayer_name_set(PointerRNA *ptr, const char *value, char *res
static int rna_Object_active_material_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return MAX2(ob->actcol - 1, 0);
}
static void rna_Object_active_material_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ob->actcol = value + 1;
if (ob->type == OB_MESH) {
@@ -889,7 +929,7 @@ static void rna_Object_active_material_index_set(PointerRNA *ptr, int value)
static void rna_Object_active_material_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
*min = 0;
*max = max_ii(ob->totcol - 1, 0);
}
@@ -897,7 +937,7 @@ static void rna_Object_active_material_index_range(
/* returns active base material */
static PointerRNA rna_Object_active_material_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Material *ma;
ma = (ob->totcol) ? give_current_material(ob, ob->actcol) : NULL;
@@ -908,7 +948,7 @@ static void rna_Object_active_material_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(value.data, 0);
BLI_assert(BKE_id_is_in_global_main(&ob->id));
@@ -923,7 +963,7 @@ static void rna_Object_active_material_set(PointerRNA *ptr,
static int rna_Object_active_material_editable(PointerRNA *ptr, const char **UNUSED(r_info))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bool is_editable;
if ((ob->matbits == NULL) || (ob->actcol == 0) || ob->matbits[ob->actcol - 1]) {
@@ -939,20 +979,20 @@ static int rna_Object_active_material_editable(PointerRNA *ptr, const char **UNU
static void rna_Object_active_particle_system_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
*min = 0;
*max = max_ii(0, BLI_listbase_count(&ob->particlesystem) - 1);
}
static int rna_Object_active_particle_system_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return psys_get_current_num(ob);
}
static void rna_Object_active_particle_system_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
psys_set_current_num(ob, value);
}
@@ -960,7 +1000,7 @@ static void rna_Object_particle_update(Main *UNUSED(bmain), Scene *scene, Pointe
{
/* TODO: Disabled for now, because bContext is not available. */
# if 0
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PE_current_changed(NULL, scene, ob);
# else
(void)scene;
@@ -1097,7 +1137,7 @@ static int rna_Object_rotation_4d_editable(PointerRNA *ptr, int index)
static int rna_MaterialSlot_material_editable(PointerRNA *ptr, const char **UNUSED(r_info))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
const int index = (Material **)ptr->data - ob->mat;
bool is_editable;
@@ -1113,7 +1153,7 @@ static int rna_MaterialSlot_material_editable(PointerRNA *ptr, const char **UNUS
static PointerRNA rna_MaterialSlot_material_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Material *ma;
const int index = (Material **)ptr->data - ob->mat;
@@ -1125,7 +1165,7 @@ static void rna_MaterialSlot_material_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
int index = (Material **)ptr->data - ob->mat;
BLI_assert(BKE_id_is_in_global_main(&ob->id));
@@ -1135,7 +1175,7 @@ static void rna_MaterialSlot_material_set(PointerRNA *ptr,
static bool rna_MaterialSlot_material_poll(PointerRNA *ptr, PointerRNA value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Material *ma = (Material *)value.data;
if (ob->type == OB_GPENCIL) {
@@ -1150,7 +1190,7 @@ static bool rna_MaterialSlot_material_poll(PointerRNA *ptr, PointerRNA value)
static int rna_MaterialSlot_link_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
int index = (Material **)ptr->data - ob->mat;
return ob->matbits[index] != 0;
@@ -1158,7 +1198,7 @@ static int rna_MaterialSlot_link_get(PointerRNA *ptr)
static void rna_MaterialSlot_link_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
int index = (Material **)ptr->data - ob->mat;
if (value) {
@@ -1173,7 +1213,7 @@ static void rna_MaterialSlot_link_set(PointerRNA *ptr, int value)
static int rna_MaterialSlot_name_length(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Material *ma;
int index = (Material **)ptr->data - ob->mat;
@@ -1188,7 +1228,7 @@ static int rna_MaterialSlot_name_length(PointerRNA *ptr)
static void rna_MaterialSlot_name_get(PointerRNA *ptr, char *str)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Material *ma;
int index = (Material **)ptr->data - ob->mat;
@@ -1206,14 +1246,14 @@ static void rna_MaterialSlot_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
rna_Object_internal_update(bmain, scene, ptr);
- WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_OB_SHADING, ptr->owner_id);
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_LINKS, NULL);
DEG_relations_tag_update(bmain);
}
static char *rna_MaterialSlot_path(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
int index = (Material **)ptr->data - ob->mat;
return BLI_sprintfN("material_slots[%d]", index);
@@ -1231,7 +1271,7 @@ static char *rna_ObjectDisplay_path(PointerRNA *UNUSED(ptr))
static PointerRNA rna_Object_active_particle_system_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = psys_get_current(ob);
return rna_pointer_inherit_refine(ptr, &RNA_ParticleSystem, psys);
}
@@ -1239,7 +1279,7 @@ static PointerRNA rna_Object_active_particle_system_get(PointerRNA *ptr)
static void rna_Object_active_shape_key_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Key *key = BKE_key_from_object(ob);
*min = 0;
@@ -1256,21 +1296,21 @@ static void rna_Object_active_shape_key_index_range(
static int rna_Object_active_shape_key_index_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
return MAX2(ob->shapenr - 1, 0);
}
static void rna_Object_active_shape_key_index_set(PointerRNA *ptr, int value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ob->shapenr = value + 1;
}
static PointerRNA rna_Object_active_shape_key_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
Key *key = BKE_key_from_object(ob);
KeyBlock *kb;
PointerRNA keyptr;
@@ -1286,7 +1326,7 @@ static PointerRNA rna_Object_active_shape_key_get(PointerRNA *ptr)
static PointerRNA rna_Object_field_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
/* weak */
if (!ob->pd) {
@@ -1298,7 +1338,7 @@ static PointerRNA rna_Object_field_get(PointerRNA *ptr)
static PointerRNA rna_Object_collision_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
if (ob->type != OB_MESH) {
return PointerRNA_NULL;
@@ -1314,7 +1354,7 @@ static PointerRNA rna_Object_collision_get(PointerRNA *ptr)
static PointerRNA rna_Object_active_constraint_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bConstraint *con = BKE_constraints_active_get(&ob->constraints);
return rna_pointer_inherit_refine(ptr, &RNA_Constraint, con);
}
@@ -1323,7 +1363,7 @@ static void rna_Object_active_constraint_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
BKE_constraints_active_set(&ob->constraints, (bConstraint *)value.data);
}
@@ -1388,12 +1428,12 @@ bool rna_Object_constraints_override_apply(Main *UNUSED(bmain),
BLI_assert(opop->operation == IDOVERRIDE_LIBRARY_OP_INSERT_AFTER &&
"Unsupported RNA override operation on constraints collection");
- Object *ob_dst = (Object *)ptr_dst->id.data;
- Object *ob_src = (Object *)ptr_src->id.data;
+ Object *ob_dst = (Object *)ptr_dst->owner_id;
+ Object *ob_src = (Object *)ptr_src->owner_id;
/* Remember that insertion operations are defined and stored in correct order, which means that
- * even if we insert several items in a row, we alays insert first one, then second one, etc.
- * So we should always find 'anchor' constraint in both _src *and* _dst> */
+ * even if we insert several items in a row, we always insert first one, then second one, etc.
+ * So we should always find 'anchor' constraint in both _src *and* _dst. */
bConstraint *con_anchor = NULL;
if (opop->subitem_local_name && opop->subitem_local_name[0]) {
con_anchor = BLI_findstring(
@@ -1476,12 +1516,12 @@ bool rna_Object_modifiers_override_apply(Main *UNUSED(bmain),
BLI_assert(opop->operation == IDOVERRIDE_LIBRARY_OP_INSERT_AFTER &&
"Unsupported RNA override operation on modifiers collection");
- Object *ob_dst = (Object *)ptr_dst->id.data;
- Object *ob_src = (Object *)ptr_src->id.data;
+ Object *ob_dst = (Object *)ptr_dst->owner_id;
+ Object *ob_src = (Object *)ptr_src->owner_id;
/* Remember that insertion operations are defined and stored in correct order, which means that
- * even if we insert several items in a row, we alays insert first one, then second one, etc.
- * So we should always find 'anchor' constraint in both _src *and* _dst> */
+ * even if we insert several items in a row, we always insert first one, then second one, etc.
+ * So we should always find 'anchor' constraint in both _src *and* _dst. */
ModifierData *mod_anchor = NULL;
if (opop->subitem_local_name && opop->subitem_local_name[0]) {
mod_anchor = BLI_findstring(
@@ -1579,7 +1619,7 @@ static void rna_Object_shaderfx_clear(Object *object, bContext *C)
static void rna_Object_boundbox_get(PointerRNA *ptr, float *values)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
BoundBox *bb = BKE_object_boundbox_get(ob);
if (bb) {
memcpy(values, bb->vec, sizeof(bb->vec));
@@ -1751,42 +1791,42 @@ static void rna_FaceMap_face_remove(
/* generic poll functions */
bool rna_Lattice_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_LATTICE;
+ return ((Object *)value.owner_id)->type == OB_LATTICE;
}
bool rna_Curve_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_CURVE;
+ return ((Object *)value.owner_id)->type == OB_CURVE;
}
bool rna_Armature_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_ARMATURE;
+ return ((Object *)value.owner_id)->type == OB_ARMATURE;
}
bool rna_Mesh_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_MESH;
+ return ((Object *)value.owner_id)->type == OB_MESH;
}
bool rna_Camera_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_CAMERA;
+ return ((Object *)value.owner_id)->type == OB_CAMERA;
}
bool rna_Light_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_LAMP;
+ return ((Object *)value.owner_id)->type == OB_LAMP;
}
bool rna_GPencil_object_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- return ((Object *)value.id.data)->type == OB_GPENCIL;
+ return ((Object *)value.owner_id)->type == OB_GPENCIL;
}
int rna_Object_use_dynamic_topology_sculpting_get(PointerRNA *ptr)
{
- SculptSession *ss = ((Object *)ptr->id.data)->sculpt;
+ SculptSession *ss = ((Object *)ptr->owner_id)->sculpt;
return (ss && ss->bm);
}
@@ -2389,6 +2429,7 @@ static void rna_def_object(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
+ RNA_def_property_override_funcs(prop, NULL, NULL, "rna_Object_parent_override_apply");
RNA_def_property_ui_text(prop, "Parent", "Parent Object");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
@@ -2439,10 +2480,12 @@ static void rna_def_object(BlenderRNA *brna)
/* proxy */
prop = RNA_def_property(srna, "proxy", PROP_POINTER, PROP_NONE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_ui_text(prop, "Proxy", "Library object this proxy object controls");
prop = RNA_def_property(srna, "proxy_collection", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "proxy_group");
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_ui_text(
prop, "Proxy Collection", "Library collection duplicator object this proxy object controls");
@@ -2808,7 +2851,7 @@ static void rna_def_object(BlenderRNA *brna)
prop = RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR);
RNA_def_property_ui_text(
prop, "Color", "Object color and alpha, used when faces have the ObColor mode enabled");
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_internal_update_draw");
/* physics */
prop = RNA_def_property(srna, "field", PROP_POINTER, PROP_NONE);
@@ -2913,6 +2956,7 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_pointer_sdna(prop, NULL, "instance_collection");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_pointer_funcs(prop, NULL, "rna_Object_dup_collection_set", NULL, NULL);
RNA_def_property_ui_text(prop, "Instance Collection", "Instance an existing collection");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Object_dependency_update");
diff --git a/source/blender/makesrna/intern/rna_object_api.c b/source/blender/makesrna/intern/rna_object_api.c
index 9a76885a19d..d3bdfde86ce 100644
--- a/source/blender/makesrna/intern/rna_object_api.c
+++ b/source/blender/makesrna/intern/rna_object_api.c
@@ -243,7 +243,7 @@ static Base *rna_Object_local_view_property_helper(
static bool rna_Object_local_view_get(Object *ob, ReportList *reports, PointerRNA *v3d_ptr)
{
- bScreen *sc = v3d_ptr->id.data;
+ bScreen *sc = (bScreen *)v3d_ptr->owner_id;
View3D *v3d = v3d_ptr->data;
Base *base = rna_Object_local_view_property_helper(sc, v3d, ob, reports, NULL);
if (base == NULL) {
@@ -257,7 +257,7 @@ static void rna_Object_local_view_set(Object *ob,
PointerRNA *v3d_ptr,
bool state)
{
- bScreen *sc = v3d_ptr->id.data;
+ bScreen *sc = (bScreen *)v3d_ptr->owner_id;
View3D *v3d = v3d_ptr->data;
Scene *scene;
Base *base = rna_Object_local_view_property_helper(sc, v3d, ob, reports, &scene);
diff --git a/source/blender/makesrna/intern/rna_object_force.c b/source/blender/makesrna/intern/rna_object_force.c
index ab6cffe615d..d082dfc694c 100644
--- a/source/blender/makesrna/intern/rna_object_force.c
+++ b/source/blender/makesrna/intern/rna_object_force.c
@@ -87,15 +87,15 @@ static const EnumPropertyItem empty_shape_items[] = {
static const EnumPropertyItem vortex_shape_items[] = {
{PFIELD_SHAPE_POINT, "POINT", 0, "Point", ""},
{PFIELD_SHAPE_PLANE, "PLANE", 0, "Plane", ""},
- {PFIELD_SHAPE_SURFACE, "SURFACE", 0, "Surface falloff (New)", ""},
- {PFIELD_SHAPE_POINTS, "POINTS", 0, "Every Point (New)", ""},
+ {PFIELD_SHAPE_SURFACE, "SURFACE", 0, "Surface", ""},
+ {PFIELD_SHAPE_POINTS, "POINTS", 0, "Every Point", ""},
{0, NULL, 0, NULL, NULL},
};
static const EnumPropertyItem curve_vortex_shape_items[] = {
{PFIELD_SHAPE_POINT, "POINT", 0, "Point", ""},
{PFIELD_SHAPE_PLANE, "PLANE", 0, "Plane", ""},
- {PFIELD_SHAPE_SURFACE, "SURFACE", 0, "Curve (New)", ""},
+ {PFIELD_SHAPE_SURFACE, "SURFACE", 0, "Curve", ""},
{0, NULL, 0, NULL, NULL},
};
@@ -122,7 +122,7 @@ static const EnumPropertyItem empty_vortex_shape_items[] = {
static void rna_Cache_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = (PointCache *)ptr->data;
if (!ob) {
@@ -140,13 +140,13 @@ static void rna_Cache_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
if (pid.type == PTCACHE_TYPE_SMOKE_DOMAIN) {
cache->step = 1;
}
- BKE_ptcache_update_info(&pid);
+ cache->flag |= PTCACHE_FLAG_INFO_DIRTY;
}
}
static void rna_Cache_toggle_disk_cache(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = (PointCache *)ptr->data;
if (!ob) {
@@ -166,7 +166,7 @@ static void rna_Cache_toggle_disk_cache(Main *UNUSED(bmain), Scene *UNUSED(scene
static void rna_Cache_idname_change(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = (PointCache *)ptr->data;
bool use_new_name = true;
@@ -240,7 +240,7 @@ static void rna_Cache_list_begin(CollectionPropertyIterator *iter, PointerRNA *p
static void rna_Cache_active_point_cache_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = ptr->data;
PTCacheID pid = BKE_ptcache_id_find(ob, NULL, cache);
@@ -254,7 +254,7 @@ static void rna_Cache_active_point_cache_index_range(
static int rna_Cache_active_point_cache_index_get(PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = ptr->data;
PTCacheID pid = BKE_ptcache_id_find(ob, NULL, cache);
int num = 0;
@@ -268,7 +268,7 @@ static int rna_Cache_active_point_cache_index_get(PointerRNA *ptr)
static void rna_Cache_active_point_cache_index_set(struct PointerRNA *ptr, int value)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = ptr->data;
PTCacheID pid = BKE_ptcache_id_find(ob, NULL, cache);
@@ -280,7 +280,7 @@ static void rna_Cache_active_point_cache_index_set(struct PointerRNA *ptr, int v
static void rna_PointCache_frame_step_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
PointCache *cache = ptr->data;
PTCacheID pid = BKE_ptcache_id_find(ob, NULL, cache);
@@ -292,11 +292,29 @@ static void rna_PointCache_frame_step_range(
}
}
+int rna_Cache_info_length(PointerRNA *ptr)
+{
+ PointCache *cache = (PointCache *)ptr->data;
+ Object *ob = (Object *)ptr->owner_id;
+
+ if (!ob) {
+ return 0;
+ }
+
+ PTCacheID pid = BKE_ptcache_id_find(ob, NULL, cache);
+
+ if (cache->flag & PTCACHE_FLAG_INFO_DIRTY) {
+ BKE_ptcache_update_info(&pid);
+ }
+
+ return (int)strlen(cache->info);
+}
+
static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr))
{
/* both methods work ok, but return the shorter path */
# if 0
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md = (ModifierData *)modifiers_findByType(ob, eModifierType_Collision);
if (md) {
@@ -316,13 +334,13 @@ static char *rna_CollisionSettings_path(PointerRNA *UNUSED(ptr))
static bool rna_SoftBodySettings_use_edges_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
return (((data->softflag) & OB_SB_EDGES) != 0);
}
static void rna_SoftBodySettings_use_edges_set(PointerRNA *ptr, bool value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value) {
data->softflag |= OB_SB_EDGES;
}
@@ -333,13 +351,13 @@ static void rna_SoftBodySettings_use_edges_set(PointerRNA *ptr, bool value)
static bool rna_SoftBodySettings_use_goal_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
return (((data->softflag) & OB_SB_GOAL) != 0);
}
static void rna_SoftBodySettings_use_goal_set(PointerRNA *ptr, bool value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value) {
data->softflag |= OB_SB_GOAL;
}
@@ -350,13 +368,13 @@ static void rna_SoftBodySettings_use_goal_set(PointerRNA *ptr, bool value)
static bool rna_SoftBodySettings_stiff_quads_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
return (((data->softflag) & OB_SB_QUADS) != 0);
}
static void rna_SoftBodySettings_stiff_quads_set(PointerRNA *ptr, bool value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value) {
data->softflag |= OB_SB_QUADS;
}
@@ -367,13 +385,13 @@ static void rna_SoftBodySettings_stiff_quads_set(PointerRNA *ptr, bool value)
static bool rna_SoftBodySettings_self_collision_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
return (((data->softflag) & OB_SB_SELF) != 0);
}
static void rna_SoftBodySettings_self_collision_set(PointerRNA *ptr, bool value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value) {
data->softflag |= OB_SB_SELF;
}
@@ -384,7 +402,7 @@ static void rna_SoftBodySettings_self_collision_set(PointerRNA *ptr, bool value)
static int rna_SoftBodySettings_new_aero_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (data->softflag & OB_SB_AERO_ANGLE) {
return 1;
}
@@ -395,7 +413,7 @@ static int rna_SoftBodySettings_new_aero_get(PointerRNA *ptr)
static void rna_SoftBodySettings_new_aero_set(PointerRNA *ptr, int value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value == 1) {
data->softflag |= OB_SB_AERO_ANGLE;
}
@@ -406,13 +424,13 @@ static void rna_SoftBodySettings_new_aero_set(PointerRNA *ptr, int value)
static bool rna_SoftBodySettings_face_collision_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
return (((data->softflag) & OB_SB_FACECOLL) != 0);
}
static void rna_SoftBodySettings_face_collision_set(PointerRNA *ptr, bool value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value) {
data->softflag |= OB_SB_FACECOLL;
}
@@ -423,13 +441,13 @@ static void rna_SoftBodySettings_face_collision_set(PointerRNA *ptr, bool value)
static bool rna_SoftBodySettings_edge_collision_get(PointerRNA *ptr)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
return (((data->softflag) & OB_SB_EDGECOLL) != 0);
}
static void rna_SoftBodySettings_edge_collision_set(PointerRNA *ptr, bool value)
{
- Object *data = (Object *)(ptr->id.data);
+ Object *data = (Object *)(ptr->owner_id);
if (value) {
data->softflag |= OB_SB_EDGECOLL;
}
@@ -470,7 +488,7 @@ static void rna_SoftBodySettings_spring_vgroup_set(PointerRNA *ptr, const char *
static char *rna_SoftBodySettings_path(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md = (ModifierData *)modifiers_findByType(ob, eModifierType_Softbody);
char name_esc[sizeof(md->name) * 2];
@@ -480,7 +498,7 @@ static char *rna_SoftBodySettings_path(PointerRNA *ptr)
static int particle_id_check(PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
return (GS(id->name) == ID_PA);
}
@@ -488,7 +506,7 @@ static int particle_id_check(PointerRNA *ptr)
static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
if (particle_id_check(ptr)) {
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->pd->forcefield != PFIELD_TEXTURE && part->pd->tex) {
id_us_min(&part->pd->tex->id);
@@ -506,7 +524,7 @@ static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
else {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
if (ob->pd->forcefield != PFIELD_TEXTURE && ob->pd->tex) {
id_us_min(&ob->pd->tex->id);
@@ -521,7 +539,7 @@ static void rna_FieldSettings_update(Main *UNUSED(bmain), Scene *UNUSED(scene),
static void rna_FieldSettings_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
if (!particle_id_check(ptr)) {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ED_object_check_force_modifiers(bmain, scene, ob);
DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM);
@@ -537,7 +555,7 @@ static void rna_FieldSettings_type_set(PointerRNA *ptr, int value)
part_deflect->forcefield = value;
if (!particle_id_check(ptr)) {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ob->pd->forcefield = value;
if (ELEM(value, PFIELD_WIND, PFIELD_VORTEX)) {
ob->empty_drawtype = OB_SINGLE_ARROW;
@@ -553,12 +571,12 @@ static void rna_FieldSettings_dependency_update(Main *bmain, Scene *scene, Point
DEG_relations_tag_update(bmain);
if (particle_id_check(ptr)) {
- DEG_id_tag_update((ID *)ptr->id.data,
+ DEG_id_tag_update(ptr->owner_id,
ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION |
ID_RECALC_PSYS_RESET);
}
else {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
rna_FieldSettings_shape_update(bmain, scene, ptr);
@@ -581,7 +599,7 @@ static char *rna_FieldSettings_path(PointerRNA *ptr)
if (particle_id_check(ptr)) {
/* particle system force field */
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->pd == pd) {
return BLI_strdup("force_field_1");
@@ -592,7 +610,7 @@ static char *rna_FieldSettings_path(PointerRNA *ptr)
}
else {
/* object force field */
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
if (ob->pd == pd) {
return BLI_strdup("field");
@@ -603,7 +621,7 @@ static char *rna_FieldSettings_path(PointerRNA *ptr)
static void rna_EffectorWeight_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (id && GS(id->name) == ID_SCE) {
Scene *scene = (Scene *)id;
@@ -624,7 +642,7 @@ static void rna_EffectorWeight_dependency_update(Main *bmain,
{
DEG_relations_tag_update(bmain);
- DEG_id_tag_update((ID *)ptr->id.data, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_RESET);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY | ID_RECALC_PSYS_RESET);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL);
}
@@ -636,14 +654,14 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr)
if (particle_id_check(ptr)) {
/* particle effector weights */
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->effector_weights == ew) {
return BLI_strdup("effector_weights");
}
}
else {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md;
/* check softbody modifier */
@@ -709,7 +727,7 @@ static char *rna_EffectorWeight_path(PointerRNA *ptr)
static void rna_CollisionSettings_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md = modifiers_findByType(ob, eModifierType_Collision);
/* add/remove modifier as needed */
@@ -727,7 +745,7 @@ static void rna_CollisionSettings_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION);
WM_main_add_notifier(NC_OBJECT | ND_DRAW, ob);
@@ -735,7 +753,7 @@ static void rna_CollisionSettings_update(Main *UNUSED(bmain),
static void rna_softbody_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
@@ -758,7 +776,7 @@ static const EnumPropertyItem *rna_Effector_shape_itemf(bContext *UNUSED(C),
return empty_shape_items;
}
- ob = (Object *)ptr->id.data;
+ ob = (Object *)ptr->owner_id;
if (ob->type == OB_CURVE) {
if (ob->pd->forcefield == PFIELD_VORTEX) {
@@ -870,6 +888,11 @@ static void rna_def_pointcache_common(StructRNA *srna)
prop = RNA_def_property(srna, "info", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "info");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ /* Note that we do not actually need a getter here, `rna_Cache_info_length` will update the info
+ * string just as well. */
+ RNA_def_property_string_funcs(prop, NULL, "rna_Cache_info_length", NULL);
+ RNA_def_property_string_maxlength(
+ prop, sizeof(((PointCache *)0)->info) / sizeof(*(((PointCache *)0)->info)));
RNA_def_property_ui_text(prop, "Cache Info", "Info on current cache status");
prop = RNA_def_property(srna, "use_external", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c
index a96e85473a2..98ecb053641 100644
--- a/source/blender/makesrna/intern/rna_particle.c
+++ b/source/blender/makesrna/intern/rna_particle.c
@@ -146,7 +146,7 @@ static void rna_ParticleHairKey_location_object_info(PointerRNA *ptr,
ParticleData **pa_pt)
{
HairKey *hkey = (HairKey *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ModifierData *md;
ParticleSystemModifierData *psmd = NULL;
ParticleSystem *psys;
@@ -193,7 +193,7 @@ static void rna_ParticleHairKey_location_object_info(PointerRNA *ptr,
static void rna_ParticleHairKey_location_object_get(PointerRNA *ptr, float *values)
{
HairKey *hkey = (HairKey *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystemModifierData *psmd;
ParticleData *pa;
@@ -221,7 +221,7 @@ static void rna_ParticleHairKey_location_object_get(PointerRNA *ptr, float *valu
static void rna_ParticleHairKey_location_object_set(PointerRNA *ptr, const float *values)
{
HairKey *hkey = (HairKey *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystemModifierData *psmd;
ParticleData *pa;
@@ -449,8 +449,10 @@ static int rna_ParticleSystem_tessfaceidx_on_emitter(ParticleSystem *particlesys
}
part = particlesystem->part;
- totpart = particlesystem->totcached;
- totchild = particlesystem->totchildcache;
+ /* Note: only hair, keyed and baked particles may have cached items... */
+ totpart = particlesystem->totcached != 0 ? particlesystem->totcached : particlesystem->totpart;
+ totchild = particlesystem->totchildcache != 0 ? particlesystem->totchildcache :
+ particlesystem->totchild;
/* can happen for disconnected/global hair */
if (part->type == PART_HAIR && !particlesystem->childcache) {
@@ -616,7 +618,7 @@ static void rna_ParticleSystem_mcol_on_emitter(ParticleSystem *particlesystem,
static void particle_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr, short flag)
{
if (ptr->type == &RNA_ParticleSystem) {
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = (ParticleSystem *)ptr->data;
psys->recalc = flag;
@@ -624,7 +626,7 @@ static void particle_recalc(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
}
else {
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY | flag);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY | flag);
}
WM_main_add_notifier(NC_OBJECT | ND_PARTICLE | NA_EDITED, NULL);
@@ -661,7 +663,7 @@ static void rna_Particle_reset_dependency(Main *bmain, Scene *scene, PointerRNA
static void rna_Particle_change_type(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ParticleSettings *part = ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
/* Iterating over all object is slow, but no better solution exists at the moment. */
for (Object *ob = bmain->objects.first; ob; ob = ob->id.next) {
@@ -714,7 +716,7 @@ static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr)
static void rna_Particle_cloth_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
@@ -739,7 +741,7 @@ static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget
static void rna_Particle_target_reset(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleTarget) {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleTarget *pt = (ParticleTarget *)ptr->data;
ParticleSystem *kpsys = NULL, *psys = rna_particle_system_for_target(ob, pt);
@@ -778,7 +780,7 @@ static void rna_Particle_target_reset(Main *bmain, Scene *UNUSED(scene), Pointer
static void rna_Particle_target_redo(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
if (ptr->type == &RNA_ParticleTarget) {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleTarget *pt = (ParticleTarget *)ptr->data;
ParticleSystem *psys = rna_particle_system_for_target(ob, pt);
@@ -791,7 +793,7 @@ static void rna_Particle_target_redo(Main *UNUSED(bmain), Scene *UNUSED(scene),
static void rna_Particle_hair_dynamics_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys && !psys->clmd) {
@@ -821,7 +823,7 @@ static void rna_particle_settings_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = (ParticleSystem *)ptr->data;
int old_type = 0;
@@ -998,7 +1000,7 @@ static void rna_ParticleSettings_use_twist_curve_update(Main *bmain, Scene *scen
static void rna_ParticleSystem_name_set(PointerRNA *ptr, const char *value)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *part = (ParticleSystem *)ptr->data;
/* copy the new name into the name slot */
@@ -1074,7 +1076,7 @@ static void rna_ParticleTarget_name_get(PointerRNA *ptr, char *str)
psys = BLI_findlink(&pt->ob->particlesystem, pt->psys - 1);
}
else {
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
psys = BLI_findlink(&ob->particlesystem, pt->psys - 1);
}
@@ -1106,7 +1108,7 @@ static int rna_ParticleTarget_name_length(PointerRNA *ptr)
static int particle_id_check(PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
return (GS(id->name) == ID_PA);
}
@@ -1116,7 +1118,7 @@ static char *rna_SPHFluidSettings_path(PointerRNA *ptr)
SPHFluidSettings *fluid = (SPHFluidSettings *)ptr->data;
if (particle_id_check(ptr)) {
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->fluid == fluid) {
return BLI_strdup("fluid");
@@ -1150,7 +1152,7 @@ static bool rna_ParticleSystem_edited_get(PointerRNA *ptr)
}
static PointerRNA rna_ParticleDupliWeight_active_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
ParticleDupliWeight *dw = part->instance_weights.first;
for (; dw; dw = dw->next) {
@@ -1163,14 +1165,14 @@ static PointerRNA rna_ParticleDupliWeight_active_get(PointerRNA *ptr)
static void rna_ParticleDupliWeight_active_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
*min = 0;
*max = max_ii(0, BLI_listbase_count(&part->instance_weights) - 1);
}
static int rna_ParticleDupliWeight_active_index_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
ParticleDupliWeight *dw = part->instance_weights.first;
int i = 0;
@@ -1185,7 +1187,7 @@ static int rna_ParticleDupliWeight_active_index_get(PointerRNA *ptr)
static void rna_ParticleDupliWeight_active_index_set(struct PointerRNA *ptr, int value)
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
ParticleDupliWeight *dw = part->instance_weights.first;
int i = 0;
@@ -1201,7 +1203,7 @@ static void rna_ParticleDupliWeight_active_index_set(struct PointerRNA *ptr, int
static void rna_ParticleDupliWeight_name_get(PointerRNA *ptr, char *str)
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
psys_find_group_weights(part);
ParticleDupliWeight *dw = ptr->data;
@@ -1239,7 +1241,7 @@ static const EnumPropertyItem *rna_Particle_dist_itemf(bContext *UNUSED(C),
PropertyRNA *UNUSED(prop),
bool *UNUSED(r_free))
{
- ParticleSettings *part = ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->type == PART_HAIR) {
return part_hair_dist_items;
@@ -1254,7 +1256,7 @@ static const EnumPropertyItem *rna_Particle_draw_as_itemf(bContext *UNUSED(C),
PropertyRNA *UNUSED(prop),
bool *UNUSED(r_free))
{
- ParticleSettings *part = ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->type == PART_HAIR) {
return part_hair_draw_as_items;
@@ -1269,7 +1271,7 @@ static const EnumPropertyItem *rna_Particle_ren_as_itemf(bContext *UNUSED(C),
PropertyRNA *UNUSED(prop),
bool *UNUSED(r_free))
{
- ParticleSettings *part = ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
if (part->type == PART_HAIR) {
return part_hair_ren_as_items;
@@ -1281,7 +1283,7 @@ static const EnumPropertyItem *rna_Particle_ren_as_itemf(bContext *UNUSED(C),
static PointerRNA rna_Particle_field1_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
/* weak */
if (!part->pd) {
@@ -1293,7 +1295,7 @@ static PointerRNA rna_Particle_field1_get(PointerRNA *ptr)
static PointerRNA rna_Particle_field2_get(PointerRNA *ptr)
{
- ParticleSettings *part = (ParticleSettings *)ptr->id.data;
+ ParticleSettings *part = (ParticleSettings *)ptr->owner_id;
/* weak */
if (!part->pd2) {
@@ -1305,7 +1307,7 @@ static PointerRNA rna_Particle_field2_get(PointerRNA *ptr)
static void psys_vg_name_get__internal(PointerRNA *ptr, char *value, int index)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys->vgroup[index] > 0) {
@@ -1321,7 +1323,7 @@ static void psys_vg_name_get__internal(PointerRNA *ptr, char *value, int index)
}
static int psys_vg_name_len__internal(PointerRNA *ptr, int index)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (psys->vgroup[index] > 0) {
@@ -1335,7 +1337,7 @@ static int psys_vg_name_len__internal(PointerRNA *ptr, int index)
}
static void psys_vg_name_set__internal(PointerRNA *ptr, const char *value, int index)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
ParticleSystem *psys = (ParticleSystem *)ptr->data;
if (value[0] == '\0') {
@@ -2039,6 +2041,7 @@ static void rna_def_particle_settings_mtex(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "object");
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Object", "Object to use for mapping with Object texture coordinates");
RNA_def_property_update(prop, 0, "rna_Particle_reset_dependency");
@@ -2984,6 +2987,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_pointer_sdna(prop, NULL, "collision_group");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Collision Collection", "Limit colliders to this collection");
RNA_def_property_update(prop, 0, "rna_Particle_reset_dependency");
@@ -3050,7 +3054,8 @@ static void rna_def_particle_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "child_radius", PROP_FLOAT, PROP_DISTANCE);
RNA_def_property_float_sdna(prop, NULL, "childrad");
- RNA_def_property_range(prop, 0.0f, 10.0f);
+ 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, "Child Radius", "Radius of children around parent");
RNA_def_property_update(prop, 0, "rna_Particle_redo_child");
@@ -3310,6 +3315,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "instance_collection");
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Dupli Collection", "Show Objects in this collection in place of particles");
RNA_def_property_update(prop, 0, "rna_Particle_redo_count");
@@ -3335,6 +3341,7 @@ static void rna_def_particle_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "instance_object", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Instance Object", "Show this Object in place of particles");
RNA_def_property_update(prop, 0, "rna_Particle_redo_dependency");
@@ -3453,6 +3460,7 @@ static void rna_def_particle_target(BlenderRNA *brna)
prop = RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop,
"Target Object",
@@ -3567,6 +3575,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "reactor_target_object", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "target_ob");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop,
"Reactor Target Object",
"For reactor systems, the object that has the target particle system "
@@ -3819,6 +3828,7 @@ static void rna_def_particle_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "parent");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Parent", "Use this object's coordinate system instead of global coordinate system");
RNA_def_property_update(prop, 0, "rna_Particle_redo");
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index 8546702c377..7637930f37f 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -99,25 +99,25 @@ static void rna_Pose_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRN
{
/* XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); */
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+ WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->owner_id);
}
static void rna_Pose_dependency_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
DEG_relations_tag_update(bmain);
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+ WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->owner_id);
}
static void rna_Pose_IK_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
/* XXX when to use this? ob->pose->flag |= (POSE_LOCKED|POSE_DO_UNLOCK); */
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->id.data);
+ WM_main_add_notifier(NC_OBJECT | ND_POSE, ptr->owner_id);
BIK_clear_data(ob->pose);
}
@@ -183,7 +183,7 @@ bool rna_ActionGroup_is_custom_colorset_get(PointerRNA *ptr)
static void rna_BoneGroup_name_set(PointerRNA *ptr, const char *value)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bActionGroup *agrp = ptr->data;
/* copy the new name into the name slot */
@@ -227,7 +227,7 @@ static void rna_Pose_ik_solver_set(struct PointerRNA *ptr, int value)
static void rna_Pose_ik_solver_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPose *pose = ptr->data;
BKE_pose_tag_recalc(bmain, pose); /* checks & sorts pose channels */
@@ -276,7 +276,7 @@ static void rna_PoseChannel_rotation_mode_set(PointerRNA *ptr, int value)
static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
char oldname[sizeof(pchan->name)], newname[sizeof(pchan->name)];
@@ -291,19 +291,19 @@ static void rna_PoseChannel_name_set(PointerRNA *ptr, const char *value)
static PointerRNA rna_PoseChannel_bone_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
PointerRNA tmp_ptr = *ptr;
/* Replace the id_data pointer with the Armature ID. */
- tmp_ptr.id.data = ob->data;
+ tmp_ptr.owner_id = ob->data;
return rna_pointer_inherit_refine(&tmp_ptr, &RNA_Bone, pchan->bone);
}
static bool rna_PoseChannel_has_ik_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
return BKE_pose_channel_in_IK_chain(ob, pchan);
@@ -341,7 +341,7 @@ static StructRNA *rna_Pose_ikparam_typef(PointerRNA *ptr)
static void rna_Itasc_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bItasc *itasc = ptr->data;
/* verify values */
@@ -373,7 +373,7 @@ static void rna_Itasc_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
static void rna_Itasc_update_rebuild(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPose *pose = ob->pose;
BKE_pose_tag_recalc(bmain, pose); /* checks & sorts pose channels */
@@ -398,7 +398,7 @@ static void rna_PoseChannel_bone_custom_set(PointerRNA *ptr,
static PointerRNA rna_PoseChannel_bone_group_get(PointerRNA *ptr)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPose *pose = (ob) ? ob->pose : NULL;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
bActionGroup *grp;
@@ -417,7 +417,7 @@ static void rna_PoseChannel_bone_group_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPose *pose = (ob) ? ob->pose : NULL;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
@@ -444,7 +444,7 @@ static void rna_PoseChannel_bone_group_index_set(PointerRNA *ptr, int value)
static void rna_PoseChannel_bone_group_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bPose *pose = (ob) ? ob->pose : NULL;
*min = 0;
@@ -623,7 +623,7 @@ bool rna_PoseChannel_constraints_override_apply(Main *UNUSED(bmain),
bPoseChannel *pchan_src = (bPoseChannel *)ptr_src->data;
/* Remember that insertion operations are defined and stored in correct order, which means that
- * even if we insert several items in a row, we alays insert first one, then second one, etc.
+ * even if we insert several items in a row, we always insert first one, then second one, etc.
* So we should always find 'anchor' constraint in both _src *and* _dst> */
bConstraint *con_anchor = NULL;
if (opop->subitem_local_name && opop->subitem_local_name[0]) {
@@ -663,7 +663,7 @@ bool rna_PoseChannel_constraints_override_apply(Main *UNUSED(bmain),
static int rna_PoseChannel_proxy_editable(PointerRNA *ptr, const char **r_info)
{
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
bArmature *arm = ob->data;
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
@@ -762,7 +762,7 @@ static int rna_PoseBones_lookup_string(PointerRNA *ptr, const char *key, Pointer
bPose *pose = (bPose *)ptr->data;
bPoseChannel *pchan = BKE_pose_channel_find_name(pose, key);
if (pchan) {
- RNA_pointer_create(ptr->id.data, &RNA_PoseBone, pchan, r_ptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_PoseBone, pchan, r_ptr);
return true;
}
else {
@@ -785,7 +785,7 @@ static void rna_PoseChannel_matrix_basis_set(PointerRNA *ptr, const float *value
static void rna_PoseChannel_matrix_set(PointerRNA *ptr, const float *values)
{
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
float tmat[4][4];
BKE_armature_mat_pose_to_bone_ex(NULL, ob, pchan, (float(*)[4])values, tmat);
@@ -812,9 +812,9 @@ static void rna_PoseChannel_custom_shape_transform_set(PointerRNA *ptr,
struct ReportList *UNUSED(reports))
{
bPoseChannel *pchan = (bPoseChannel *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
- pchan->custom_tx = rna_PoseChannel_ensure_own_pchan(ob, value.id.data, value.data);
+ pchan->custom_tx = rna_PoseChannel_ensure_own_pchan(ob, (Object *)value.owner_id, value.data);
}
#else
@@ -1256,6 +1256,7 @@ static void rna_def_pose_channel(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "custom");
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_NO_COMPARISON);
RNA_def_property_pointer_funcs(prop, NULL, "rna_PoseChannel_bone_custom_set", NULL, NULL);
RNA_def_property_ui_text(
prop, "Custom Object", "Object that defines custom draw type for this bone");
diff --git a/source/blender/makesrna/intern/rna_rigidbody.c b/source/blender/makesrna/intern/rna_rigidbody.c
index cb6776c2c06..03937a5434e 100644
--- a/source/blender/makesrna/intern/rna_rigidbody.c
+++ b/source/blender/makesrna/intern/rna_rigidbody.c
@@ -215,7 +215,7 @@ static void rna_RigidBodyOb_reset(Main *UNUSED(bmain), Scene *scene, PointerRNA
static void rna_RigidBodyOb_shape_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Object *ob = ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
rna_RigidBodyOb_reset(bmain, scene, ptr);
@@ -859,6 +859,7 @@ static void rna_def_rigidbody_world(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_pointer_sdna(prop, NULL, "group");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Collection", "Collection containing objects participating in this simulation");
RNA_def_property_update(prop, NC_SCENE, "rna_RigidBodyWorld_objects_collection_update");
@@ -866,6 +867,7 @@ static void rna_def_rigidbody_world(BlenderRNA *brna)
prop = RNA_def_property(srna, "constraints", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Collection");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Constraints", "Collection containing rigid body constraint objects");
RNA_def_property_update(prop, NC_SCENE, "rna_RigidBodyWorld_constraints_collection_update");
@@ -1224,15 +1226,15 @@ static void rna_def_rigidbody_constraint(BlenderRNA *brna)
prop = RNA_def_property(srna, "object1", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob1");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Object 1", "First Rigid Body Object to be constrained");
- RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT | ND_POINTCACHE, "rna_RigidBodyOb_reset");
prop = RNA_def_property(srna, "object2", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "ob2");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Object 2", "Second Rigid Body Object to be constrained");
- RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_update(prop, NC_OBJECT | ND_POINTCACHE, "rna_RigidBodyOb_reset");
/* Breaking Threshold */
diff --git a/source/blender/makesrna/intern/rna_rna.c b/source/blender/makesrna/intern/rna_rna.c
index 3ca4792f9b4..6e21d02c0b3 100644
--- a/source/blender/makesrna/intern/rna_rna.c
+++ b/source/blender/makesrna/intern/rna_rna.c
@@ -388,10 +388,10 @@ void rna_builtin_properties_begin(CollectionPropertyIterator *iter, PointerRNA *
newptr.data = ptr->type;
if (ptr->type->flag & STRUCT_ID) {
- newptr.id.data = ptr->data;
+ newptr.owner_id = ptr->data;
}
else {
- newptr.id.data = NULL;
+ newptr.owner_id = NULL;
}
iter->parent = newptr;
@@ -414,7 +414,7 @@ int rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key, Point
{
StructRNA *srna;
PropertyRNA *prop;
- PointerRNA propptr = {{NULL}};
+ PointerRNA propptr = {NULL};
srna = ptr->type;
@@ -770,7 +770,8 @@ static void rna_IntProperty_default_array_get(PointerRNA *ptr, int *values)
PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
if (prop->totarraylength > 0) {
- RNA_property_int_get_default_array(ptr, prop, values);
+ PointerRNA null_ptr = PointerRNA_NULL;
+ RNA_property_int_get_default_array(&null_ptr, prop, values);
}
}
@@ -779,7 +780,8 @@ static void rna_BoolProperty_default_array_get(PointerRNA *ptr, bool *values)
PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
if (prop->totarraylength > 0) {
- RNA_property_boolean_get_default_array(ptr, prop, values);
+ PointerRNA null_ptr = PointerRNA_NULL;
+ RNA_property_boolean_get_default_array(&null_ptr, prop, values);
}
}
@@ -788,7 +790,8 @@ static void rna_FloatProperty_default_array_get(PointerRNA *ptr, float *values)
PropertyRNA *prop = (PropertyRNA *)ptr->data;
rna_idproperty_check(&prop, ptr);
if (prop->totarraylength > 0) {
- RNA_property_float_get_default_array(ptr, prop, values);
+ PointerRNA null_ptr = PointerRNA_NULL;
+ RNA_property_float_get_default_array(&null_ptr, prop, values);
}
}
@@ -1226,7 +1229,7 @@ static bool rna_property_override_diff_propptr_validate_diffing(PointerRNA *prop
}
if (*r_is_id) {
- BLI_assert(propptr_a->data == propptr_a->id.data && propptr_b->data == propptr_b->id.data);
+ BLI_assert(propptr_a->data == propptr_a->owner_id && propptr_b->data == propptr_b->owner_id);
}
return is_valid_for_diffing;
@@ -1241,6 +1244,10 @@ static int rna_property_override_diff_propptr(Main *bmain,
const bool no_prop_name,
IDOverrideLibrary *override,
const char *rna_path,
+ const char *rna_itemname_a,
+ const char *rna_itemname_b,
+ const int rna_itemindex_a,
+ const int rna_itemindex_b,
const int flags,
bool *r_override_changed)
{
@@ -1282,9 +1289,18 @@ static int rna_property_override_diff_propptr(Main *bmain,
IDOverrideLibraryProperty *op = BKE_override_library_property_get(
override, rna_path, &created);
- if (op != NULL && created) { /* If not yet overridden... */
- BKE_override_library_property_operation_get(
- op, IDOVERRIDE_LIBRARY_OP_REPLACE, NULL, NULL, -1, -1, true, NULL, NULL);
+ /* If not yet overridden, or if we are handling sub-items (inside a collection)... */
+ if (op != NULL && (created || rna_itemname_a != NULL || rna_itemname_b != NULL ||
+ rna_itemindex_a != -1 || rna_itemindex_b != -1)) {
+ BKE_override_library_property_operation_get(op,
+ IDOVERRIDE_LIBRARY_OP_REPLACE,
+ rna_itemname_b,
+ rna_itemname_a,
+ rna_itemindex_b,
+ rna_itemindex_a,
+ true,
+ NULL,
+ &created);
if (r_override_changed) {
*r_override_changed = created;
}
@@ -1294,12 +1310,56 @@ static int rna_property_override_diff_propptr(Main *bmain,
return comp;
}
else {
+ /* In case we got some array/collection like items identifiers, now is the time to generate a
+ * proper rna path from those. */
+# define RNA_PATH_BUFFSIZE 8192
+
+ char extended_rna_path_buffer[RNA_PATH_BUFFSIZE];
+ char *extended_rna_path = extended_rna_path_buffer;
+
+# define RNA_PATH_PRINTF(_str, ...) \
+ if (BLI_snprintf(extended_rna_path_buffer, RNA_PATH_BUFFSIZE, (_str), __VA_ARGS__) >= \
+ RNA_PATH_BUFFSIZE - 1) { \
+ extended_rna_path = BLI_sprintfN((_str), __VA_ARGS__); \
+ } \
+ (void)0
+# define RNA_PATH_FREE() \
+ if (extended_rna_path != extended_rna_path_buffer && extended_rna_path != rna_path) \
+ MEM_freeN(extended_rna_path)
+
+ /* There may be a propname defined in some cases, while no actual name set
+ * (e.g. happens with point cache), in that case too we want to fall back to index.
+ * Note that we do not need the RNA path for insertion operations. */
+ if (rna_path) {
+ if ((rna_itemname_a != NULL && rna_itemname_a[0] != '\0') &&
+ (rna_itemname_b != NULL && rna_itemname_b[0] != '\0')) {
+ BLI_assert(STREQ(rna_itemname_a, rna_itemname_b));
+ char esc_item_name[RNA_PATH_BUFFSIZE];
+ BLI_strescape(esc_item_name, rna_itemname_a, RNA_PATH_BUFFSIZE);
+ RNA_PATH_PRINTF("%s[\"%s\"]", rna_path, esc_item_name);
+ }
+ else if (rna_itemindex_a != -1) { /* Based on index... */
+ BLI_assert(rna_itemindex_a == rna_itemindex_b);
+ RNA_PATH_PRINTF("%s[%d]", rna_path, rna_itemindex_a);
+ }
+ else {
+ extended_rna_path = (char *)rna_path;
+ }
+ }
+
eRNAOverrideMatchResult report_flags = 0;
const bool match = RNA_struct_override_matches(
- bmain, propptr_a, propptr_b, rna_path, override, flags, &report_flags);
+ bmain, propptr_a, propptr_b, extended_rna_path, override, flags, &report_flags);
if (r_override_changed && (report_flags & RNA_OVERRIDE_MATCH_RESULT_CREATED) != 0) {
*r_override_changed = true;
}
+
+ RNA_PATH_FREE();
+
+# undef RNA_PATH_BUFFSIZE
+# undef RNA_PATH_PRINTF
+# undef RNA_PATH_FREE
+
return !match;
}
}
@@ -1616,6 +1676,10 @@ int rna_property_override_diff_default(Main *bmain,
no_prop_name,
override,
rna_path,
+ NULL,
+ NULL,
+ -1,
+ -1,
flags,
r_override_changed);
}
@@ -1636,21 +1700,6 @@ int rna_property_override_diff_default(Main *bmain,
int idx_a = 0;
int idx_b = 0;
-# define RNA_PATH_BUFFSIZE 8192
-
- char extended_rna_path_buffer[RNA_PATH_BUFFSIZE];
- char *extended_rna_path = extended_rna_path_buffer;
-
-# define RNA_PATH_PRINTF(_str, ...) \
- if (BLI_snprintf(extended_rna_path_buffer, RNA_PATH_BUFFSIZE, (_str), __VA_ARGS__) >= \
- RNA_PATH_BUFFSIZE - 1) { \
- extended_rna_path = BLI_sprintfN((_str), __VA_ARGS__); \
- } \
- (void)0
-# define RNA_PATH_FREE() \
- if (extended_rna_path != extended_rna_path_buffer) \
- MEM_freeN(extended_rna_path)
-
CollectionPropertyIterator iter_a, iter_b;
RNA_property_collection_begin(ptr_a, prop_a, &iter_a);
RNA_property_collection_begin(ptr_b, prop_b, &iter_b);
@@ -1730,41 +1779,15 @@ int rna_property_override_diff_default(Main *bmain,
# endif
if (!(is_id || is_valid_for_diffing || is_valid_for_insertion)) {
- /* Differences we cannot handle, we can break here
- * (we do not support replacing ID pointers in collections e.g.). */
+ /* Differences we cannot handle, we can break here. */
equals = false;
abort = true;
break;
}
- /* There may be a propname defined in some cases, while no actual name set
- * (e.g. happens with point cache), in that case too we want to fall back to index.
- * Note that we do not need the RNA path for insertion operations. */
- if (is_id || is_valid_for_diffing) {
- if ((propname_a != NULL && propname_a[0] != '\0') &&
- (propname_b != NULL && propname_b[0] != '\0')) {
- if (rna_path) {
- /* In case of name, either it is valid for diffing, and _a and _b are identical,
- * or it is valid for insertion, and we need to use _a. */
- char esc_item_name[RNA_PATH_BUFFSIZE];
- BLI_strescape(esc_item_name, propname_a, RNA_PATH_BUFFSIZE);
- RNA_PATH_PRINTF("%s[\"%s\"]", rna_path, esc_item_name);
- }
- }
- else { /* Based on index... */
- if (rna_path) {
- /* In case of indices, we need _a one for insertion,
- * but _b ones for in-depth diffing.
- * Insertion always happen once all 'replace' operations have been done,
- * otherwise local and reference paths for those would have to be different! */
- RNA_PATH_PRINTF("%s[%d]", rna_path, is_valid_for_insertion ? idx_a : idx_b);
- }
- }
- }
-
- /* Collections do not support replacement of their data
- * (since they do not support removing), only in *some* cases, insertion.
- * We also assume then that _a data is the one where things are inserted. */
+ /* Collections do not support replacement of their data (except for collections of ID
+ * pointers), since they do not support removing, only in *some* cases, insertion. We
+ * also assume then that _a data is the one where things are inserted. */
if (is_valid_for_insertion && use_insertion) {
bool created;
IDOverrideLibraryProperty *op = BKE_override_library_property_get(
@@ -1812,7 +1835,11 @@ int rna_property_override_diff_default(Main *bmain,
no_ownership,
no_prop_name,
override,
- extended_rna_path,
+ rna_path,
+ propname_a,
+ propname_b,
+ idx_a,
+ idx_b,
flags,
r_override_changed);
equals = equals && eq;
@@ -1839,7 +1866,6 @@ int rna_property_override_diff_default(Main *bmain,
propname_b = buff_b;
}
propname_b[0] = '\0';
- RNA_PATH_FREE();
if (!do_create && !equals) {
abort = true; /* Early out in case we do not want to loop over whole collection. */
@@ -1864,10 +1890,6 @@ int rna_property_override_diff_default(Main *bmain,
RNA_property_collection_next(&iter_b);
idx_b++;
}
-
-# undef RNA_PATH_BUFFSIZE
-# undef RNA_PATH_PRINTF
-# undef RNA_PATH_FREE
}
/* Not same number of items in both collections. */
@@ -2824,8 +2846,10 @@ static void rna_def_number_property(StructRNA *srna, PropertyType type)
prop = RNA_def_property(srna, "default_array", type, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- RNA_def_property_array(
- prop, RNA_MAX_ARRAY_DIMENSION); /* no fixed default length, important its not 0 though */
+
+ /* no fixed default length, important its not 0 though. */
+ RNA_def_property_array(prop, RNA_MAX_ARRAY_DIMENSION);
+
RNA_def_property_flag(prop, PROP_DYNAMIC);
RNA_def_property_dynamic_array_funcs(
prop, "rna_NumberProperty_default_array_get_length"); /* same for all types */
@@ -3076,8 +3100,9 @@ void RNA_def_rna(BlenderRNA *brna)
/* FloatProperty */
srna = RNA_def_struct(brna, "FloatProperty", "Property");
- RNA_def_struct_ui_text(
- srna, "Float Definition", "RNA floating point number (single precision) property definition");
+ RNA_def_struct_ui_text(srna,
+ "Float Definition",
+ "RNA floating point number (single precision) property definition");
rna_def_number_property(srna, PROP_FLOAT);
/* StringProperty */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index fd8791cf193..7d9a3cf06b8 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -167,6 +167,16 @@ const EnumPropertyItem rna_enum_snap_element_items[] = {
{SCE_SNAP_MODE_EDGE, "EDGE", ICON_SNAP_EDGE, "Edge", "Snap to edges"},
{SCE_SNAP_MODE_FACE, "FACE", ICON_SNAP_FACE, "Face", "Snap to faces"},
{SCE_SNAP_MODE_VOLUME, "VOLUME", ICON_SNAP_VOLUME, "Volume", "Snap to volume"},
+ {SCE_SNAP_MODE_EDGE_MIDPOINT,
+ "EDGE_MIDPOINT",
+ ICON_SNAP_MIDPOINT,
+ "Edge Center",
+ "Snap to the middle of edges"},
+ {SCE_SNAP_MODE_EDGE_PERPENDICULAR,
+ "EDGE_PERPENDICULAR",
+ ICON_SNAP_PERPENDICULAR,
+ "Edge Perpendicular",
+ "Snap to the nearest point on an edge"},
{0, NULL, 0, NULL, NULL},
};
@@ -735,10 +745,40 @@ static void rna_GPencilInterpolateSettings_type_set(PointerRNA *ptr, int value)
/* init custom interpolation curve here now the first time it's used */
if ((settings->type == GP_IPO_CURVEMAP) && (settings->custom_ipo == NULL)) {
- settings->custom_ipo = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ settings->custom_ipo = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
}
+static void rna_Gpencil_mask_point_update(Main *UNUSED(bmain),
+ Scene *UNUSED(scene),
+ PointerRNA *ptr)
+{
+ ToolSettings *ts = (ToolSettings *)ptr->data;
+
+ ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_STROKE;
+ ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_SEGMENT;
+}
+
+static void rna_Gpencil_mask_stroke_update(Main *UNUSED(bmain),
+ Scene *UNUSED(scene),
+ PointerRNA *ptr)
+{
+ ToolSettings *ts = (ToolSettings *)ptr->data;
+
+ ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_POINT;
+ ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_SEGMENT;
+}
+
+static void rna_Gpencil_mask_segment_update(Main *UNUSED(bmain),
+ Scene *UNUSED(scene),
+ PointerRNA *ptr)
+{
+ ToolSettings *ts = (ToolSettings *)ptr->data;
+
+ ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_POINT;
+ ts->gpencil_selectmode_sculpt &= ~GP_SCULPT_MASK_SELECTMODE_STROKE;
+}
+
/* Read-only Iterator of all the scene objects. */
static void rna_Scene_objects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@@ -795,7 +835,7 @@ static void rna_Scene_set_set(PointerRNA *ptr,
void rna_Scene_set_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
DEG_relations_tag_update(bmain);
DEG_id_tag_update_ex(bmain, &scene->id, 0);
@@ -821,8 +861,8 @@ static void rna_Scene_fps_update(Main *bmain, Scene *scene, PointerRNA *UNUSED(p
{
DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_FPS | ID_RECALC_SEQUENCER_STRIPS);
/* NOTE: Tag via dependency graph will take care of all the updates ion the evaluated domain,
- * however, changes in FPS actually modifies an original stip length, so this we take care about
- * here. */
+ * however, changes in FPS actually modifies an original skip length,
+ * so this we take care about here. */
BKE_sequencer_refresh_sound_length(bmain, scene);
}
@@ -833,7 +873,7 @@ static void rna_Scene_listener_update(Main *UNUSED(bmain), Scene *scene, Pointer
static void rna_Scene_volume_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_VOLUME | ID_RECALC_SEQUENCER_STRIPS);
}
@@ -877,7 +917,7 @@ static float rna_Scene_frame_current_final_get(PointerRNA *ptr)
{
Scene *scene = (Scene *)ptr->data;
- return BKE_scene_frame_get_from_ctime(scene, (float)scene->r.cfra);
+ return BKE_scene_frame_to_ctime(scene, (float)scene->r.cfra);
}
static void rna_Scene_start_frame_set(PointerRNA *ptr, int value)
@@ -957,7 +997,7 @@ static void rna_Scene_show_subframe_update(Main *UNUSED(bmain),
Scene *UNUSED(current_scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
scene->r.subframe = 0.0f;
}
@@ -965,7 +1005,7 @@ static void rna_Scene_frame_update(Main *UNUSED(bmain),
Scene *UNUSED(current_scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
DEG_id_tag_update(&scene->id, ID_RECALC_AUDIO_SEEK);
WM_main_add_notifier(NC_SCENE | ND_FRAME, scene);
}
@@ -1078,7 +1118,7 @@ static char *rna_BakeSettings_path(PointerRNA *UNUSED(ptr))
static char *rna_ImageFormatSettings_path(PointerRNA *ptr)
{
ImageFormatData *imf = (ImageFormatData *)ptr->data;
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
switch (GS(id->name)) {
case ID_SCE: {
@@ -1149,7 +1189,7 @@ static bool rna_RenderSettings_is_movie_format_get(PointerRNA *ptr)
static void rna_ImageFormatSettings_file_format_set(PointerRNA *ptr, int value)
{
ImageFormatData *imf = (ImageFormatData *)ptr->data;
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
imf->imtype = value;
const bool is_render = (id && GS(id->name) == ID_SCE);
@@ -1190,7 +1230,7 @@ static void rna_ImageFormatSettings_file_format_set(PointerRNA *ptr, int value)
}
if (id && GS(id->name) == ID_SCE) {
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
RenderData *rd = &scene->r;
# ifdef WITH_FFMPEG
BKE_ffmpeg_image_type_verify(rd, imf);
@@ -1204,7 +1244,7 @@ static const EnumPropertyItem *rna_ImageFormatSettings_file_format_itemf(bContex
PropertyRNA *UNUSED(prop),
bool *UNUSED(r_free))
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (id && GS(id->name) == ID_SCE) {
return rna_enum_image_type_items;
}
@@ -1219,7 +1259,7 @@ static const EnumPropertyItem *rna_ImageFormatSettings_color_mode_itemf(bContext
bool *r_free)
{
ImageFormatData *imf = (ImageFormatData *)ptr->data;
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
const bool is_render = (id && GS(id->name) == ID_SCE);
/* note, we need to act differently for render
@@ -1235,7 +1275,7 @@ static const EnumPropertyItem *rna_ImageFormatSettings_color_mode_itemf(bContext
* the same MPEG format with QTRLE codec can easily handle alpha channel.
* not sure how to deal with such cases in a nicer way (sergey) */
if (is_render) {
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
RenderData *rd = &scene->r;
if (BKE_ffmpeg_alpha_channel_is_supported(rd)) {
@@ -1404,7 +1444,7 @@ static void rna_SceneRender_file_ext_get(PointerRNA *ptr, char *str)
# ifdef WITH_FFMPEG
static void rna_FFmpegSettings_lossless_output_set(PointerRNA *ptr, bool value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
RenderData *rd = &scene->r;
if (value) {
@@ -1421,7 +1461,7 @@ static void rna_FFmpegSettings_codec_settings_update(Main *UNUSED(bmain),
Scene *UNUSED(scene_unused),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
RenderData *rd = &scene->r;
BKE_ffmpeg_codec_settings_verify(rd);
@@ -1520,7 +1560,7 @@ static void rna_RenderSettings_engine_set(PointerRNA *ptr, int value)
if (type) {
BLI_strncpy_utf8(rd->engine, type->idname, sizeof(rd->engine));
- DEG_id_tag_update(ptr->id.data, ID_RECALC_COPY_ON_WRITE);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_COPY_ON_WRITE);
}
}
@@ -1576,20 +1616,20 @@ static bool rna_RenderSettings_multiple_engines_get(PointerRNA *UNUSED(ptr))
static bool rna_RenderSettings_use_spherical_stereo_get(PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
return BKE_scene_use_spherical_stereo(scene);
}
void rna_Scene_glsl_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
DEG_id_tag_update(&scene->id, 0);
}
static void rna_Scene_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Scene *sc = (Scene *)ptr->id.data;
+ Scene *sc = (Scene *)ptr->owner_id;
rna_Scene_glsl_update(bmain, scene, ptr);
WM_main_add_notifier(NC_WORLD | ND_WORLD, &sc->id);
@@ -1598,7 +1638,7 @@ static void rna_Scene_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
void rna_Scene_freestyle_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
DEG_id_tag_update(&scene->id, 0);
}
@@ -1614,7 +1654,7 @@ void rna_Scene_use_view_map_cache_update(Main *UNUSED(bmain),
void rna_ViewLayer_name_set(PointerRNA *ptr, const char *value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
ViewLayer *view_layer = (ViewLayer *)ptr->data;
BLI_assert(BKE_id_is_in_global_main(&scene->id));
BKE_view_layer_rename(G_MAIN, scene, view_layer, value);
@@ -1622,7 +1662,7 @@ void rna_ViewLayer_name_set(PointerRNA *ptr, const char *value)
static void rna_SceneRenderView_name_set(PointerRNA *ptr, const char *value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
SceneRenderView *rv = (SceneRenderView *)ptr->data;
BLI_strncpy_utf8(rv->name, value, sizeof(rv->name));
BLI_uniquename(&scene->r.views,
@@ -1635,14 +1675,14 @@ static void rna_SceneRenderView_name_set(PointerRNA *ptr, const char *value)
void rna_ViewLayer_material_override_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
rna_Scene_glsl_update(bmain, scene, ptr);
DEG_relations_tag_update(bmain);
}
void rna_ViewLayer_pass_update(Main *bmain, Scene *activescene, PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
if (scene->nodetree) {
ntreeCompositUpdateRLayers(scene->nodetree);
@@ -1675,7 +1715,7 @@ static void rna_Physics_relations_update(Main *bmain,
static void rna_Physics_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
FOREACH_SCENE_OBJECT_BEGIN (scene, ob) {
BKE_ptcache_object_reset(scene, ob, PTCACHE_RESET_DEPSGRAPH);
}
@@ -1762,7 +1802,7 @@ static void object_simplify_update(Object *ob)
static void rna_Scene_use_simplify_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *sce = ptr->id.data;
+ Scene *sce = (Scene *)ptr->owner_id;
Scene *sce_iter;
Base *base;
@@ -1783,7 +1823,7 @@ static void rna_Scene_use_simplify_update(Main *bmain, Scene *UNUSED(scene), Poi
static void rna_Scene_simplify_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- Scene *sce = ptr->id.data;
+ Scene *sce = (Scene *)ptr->owner_id;
if (sce->r.mode & R_SIMPLIFY) {
rna_Scene_use_simplify_update(bmain, scene, ptr);
@@ -1794,7 +1834,7 @@ static void rna_Scene_use_persistent_data_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Scene *sce = ptr->id.data;
+ Scene *sce = (Scene *)ptr->owner_id;
if (!(sce->r.mode & R_PERSISTENT_DATA)) {
RE_FreePersistentData();
@@ -1805,7 +1845,7 @@ static void rna_Scene_use_persistent_data_update(Main *UNUSED(bmain),
static void rna_Scene_transform_orientation_slots_begin(CollectionPropertyIterator *iter,
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
TransformOrientationSlot *orient_slot = &scene->orientation_slots[0];
rna_iterator_array_begin(
iter, orient_slot, sizeof(*orient_slot), ARRAY_SIZE(scene->orientation_slots), 0, NULL);
@@ -1813,7 +1853,7 @@ static void rna_Scene_transform_orientation_slots_begin(CollectionPropertyIterat
static int rna_Scene_transform_orientation_slots_length(PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
return ARRAY_SIZE(scene->orientation_slots);
}
@@ -2061,7 +2101,7 @@ static void rna_Scene_update_active_object_data(bContext *C, PointerRNA *UNUSED(
static void rna_SceneCamera_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Object *camera = scene->camera;
BKE_sequence_invalidate_scene_strips(bmain, scene);
@@ -2202,7 +2242,7 @@ void rna_FreestyleSettings_module_remove(ID *id,
static void rna_Stereo3dFormat_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (id && GS(id->name) == ID_IM) {
Image *ima = (Image *)id;
@@ -2250,7 +2290,7 @@ static void rna_ViewLayer_remove(
static int rna_TransformOrientationSlot_type_get(PointerRNA *ptr)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
TransformOrientationSlot *orient_slot = ptr->data;
if (orient_slot != &scene->orientation_slots[SCE_ORIENT_DEFAULT]) {
if ((orient_slot->flag & SELECT) == 0) {
@@ -2262,7 +2302,7 @@ static int rna_TransformOrientationSlot_type_get(PointerRNA *ptr)
void rna_TransformOrientationSlot_type_set(PointerRNA *ptr, int value)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
TransformOrientationSlot *orient_slot = ptr->data;
if (orient_slot != &scene->orientation_slots[SCE_ORIENT_DEFAULT]) {
@@ -2280,7 +2320,7 @@ void rna_TransformOrientationSlot_type_set(PointerRNA *ptr, int value)
static PointerRNA rna_TransformOrientationSlot_get(PointerRNA *ptr)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
TransformOrientationSlot *orient_slot = ptr->data;
TransformOrientation *orientation;
if (orient_slot->type < V3D_ORIENT_CUSTOM) {
@@ -2338,8 +2378,8 @@ const EnumPropertyItem *rna_TransformOrientation_itemf(bContext *C,
bool *r_free)
{
Scene *scene;
- if (ptr->id.data && (GS(((ID *)ptr->id.data)->name) == ID_SCE)) {
- scene = ptr->id.data;
+ if (ptr->owner_id && (GS(ptr->owner_id->name) == ID_SCE)) {
+ scene = (Scene *)ptr->owner_id;
}
else {
scene = CTX_data_scene(C);
@@ -2352,7 +2392,7 @@ const EnumPropertyItem *rna_TransformOrientation_with_scene_itemf(bContext *UNUS
PropertyRNA *UNUSED(prop),
bool *r_free)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
TransformOrientationSlot *orient_slot = ptr->data;
bool include_default = (orient_slot != &scene->orientation_slots[SCE_ORIENT_DEFAULT]);
return rna_TransformOrientation_impl_itemf(scene, include_default, r_free);
@@ -2895,8 +2935,12 @@ static void rna_def_tool_settings(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_transform_pivot_point_align", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transform_flag", SCE_XFORM_AXIS_ALIGN);
RNA_def_property_ui_text(
- prop, "Only Origins", "Manipulate origins (object, pose and weight paint mode only)");
- RNA_def_property_ui_icon(prop, ICON_CENTER_ONLY, 0);
+ prop, "Only Locations", "Manipulate origins (object, pose and weight paint mode only)");
+ RNA_def_property_update(prop, NC_SCENE, NULL);
+
+ prop = RNA_def_property(srna, "use_transform_data_origin", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "transform_flag", SCE_XFORM_DATA_ORIGIN);
+ RNA_def_property_ui_text(prop, "Data Origins", "Manipulate object data");
RNA_def_property_update(prop, NC_SCENE, NULL);
prop = RNA_def_property(srna, "use_mesh_automerge", PROP_BOOLEAN, PROP_NONE);
@@ -3058,13 +3102,39 @@ static void rna_def_tool_settings(BlenderRNA *brna)
prop, "Only Endpoints", "Only use the first and last parts of the stroke for snapping");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA, NULL);
- /* Grease Pencil - Select mode */
- prop = RNA_def_property(srna, "gpencil_selectmode", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "gpencil_selectmode");
+ /* Grease Pencil - Select mode Edit */
+ prop = RNA_def_property(srna, "gpencil_selectmode_edit", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "gpencil_selectmode_edit");
RNA_def_property_enum_items(prop, gpencil_selectmode_items);
RNA_def_property_ui_text(prop, "Select Mode", "");
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ /* Grease Pencil - Select mode Sculpt */
+ prop = RNA_def_property(srna, "use_gpencil_select_mask_point", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(
+ prop, NULL, "gpencil_selectmode_sculpt", GP_SCULPT_MASK_SELECTMODE_POINT);
+ RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke points");
+ RNA_def_property_ui_icon(prop, ICON_GP_SELECT_POINTS, 0);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_point_update");
+
+ prop = RNA_def_property(srna, "use_gpencil_select_mask_stroke", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(
+ prop, NULL, "gpencil_selectmode_sculpt", GP_SCULPT_MASK_SELECTMODE_STROKE);
+ RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke");
+ RNA_def_property_ui_icon(prop, ICON_GP_SELECT_STROKES, 0);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_stroke_update");
+
+ prop = RNA_def_property(srna, "use_gpencil_select_mask_segment", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(
+ prop, NULL, "gpencil_selectmode_sculpt", GP_SCULPT_MASK_SELECTMODE_SEGMENT);
+ RNA_def_property_ui_text(
+ prop, "Selection Mask", "Only sculpt selected stroke points between other strokes");
+ RNA_def_property_ui_icon(prop, ICON_GP_SELECT_BETWEEN_STROKES, 0);
+ RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, "rna_Gpencil_mask_segment_update");
+
/* Annotations - 2D Views Stroke Placement */
prop = RNA_def_property(srna, "annotation_stroke_placement_view2d", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "gpencil_v2d_align");
@@ -3467,7 +3537,7 @@ static void rna_def_statvis(BlenderRNA *brna)
RNA_def_property_float_sdna(prop, NULL, "overhang_min");
RNA_def_property_float_default(prop, 0.5f);
RNA_def_property_range(prop, 0.0f, DEG2RADF(180.0f));
- RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 0.001, 3);
+ RNA_def_property_ui_range(prop, 0.0f, DEG2RADF(180.0f), 10, 3);
RNA_def_property_ui_text(prop, "Overhang Min", "Minimum angle to display");
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, 0, "rna_EditMesh_update");
@@ -3649,6 +3719,7 @@ void rna_def_view_layer_common(StructRNA *srna, const bool scene)
RNA_def_property_pointer_sdna(prop, NULL, "mat_override");
RNA_def_property_struct_type(prop, "Material");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Material Override", "Material to override all other materials in this view layer");
RNA_def_property_update(
@@ -4960,7 +5031,7 @@ static void rna_def_image_format_stereo3d_format(BlenderRNA *brna)
/* use for render output and image save operator,
* note: there are some cases where the members act differently when this is
* used from a scene, video formats can only be selected for render output
- * for example, this is checked by seeing if the ptr->id.data is a Scene id */
+ * for example, this is checked by seeing if the ptr->owner_id is a Scene id */
static void rna_def_scene_image_format_data(BlenderRNA *brna)
{
@@ -6276,7 +6347,7 @@ static void rna_def_scene_objects(BlenderRNA *brna, PropertyRNA *cprop)
RNA_def_property_srna(cprop, "SceneObjects");
srna = RNA_def_struct(brna, "SceneObjects", NULL);
RNA_def_struct_sdna(srna, "Scene");
- RNA_def_struct_ui_text(srna, "Scene Objects", "All the of scene objects");
+ RNA_def_struct_ui_text(srna, "Scene Objects", "All of the scene objects");
}
/* scene.timeline_markers */
@@ -7122,6 +7193,7 @@ 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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
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_camera_update");
@@ -7130,12 +7202,14 @@ void RNA_def_scene(BlenderRNA *brna)
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_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
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, "rna_Scene_set_update");
prop = RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "World", "World used for rendering the scene");
RNA_def_property_update(prop, NC_SCENE | ND_WORLD, "rna_Scene_world_update");
@@ -7496,6 +7570,7 @@ void RNA_def_scene(BlenderRNA *brna)
RNA_def_property_pointer_funcs(
prop, NULL, NULL, NULL, "rna_GPencil_datablocks_annotations_poll");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_REFCOUNT);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(
prop, "Annotations", "Grease Pencil data-block used for annotations in the 3D view");
RNA_def_property_update(prop, NC_GPENCIL | ND_DATA | NA_EDITED, NULL);
diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c
index 853017e6daf..728ef3fb706 100644
--- a/source/blender/makesrna/intern/rna_screen.c
+++ b/source/blender/makesrna/intern/rna_screen.c
@@ -149,7 +149,7 @@ static void rna_Area_type_set(PointerRNA *ptr, int value)
static void rna_Area_type_update(bContext *C, PointerRNA *ptr)
{
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
ScrArea *sa = (ScrArea *)ptr->data;
/* Running update without having called 'set', see: T64049 */
@@ -225,12 +225,15 @@ static const EnumPropertyItem *rna_Area_ui_type_itemf(bContext *C,
static int rna_Area_ui_type_get(PointerRNA *ptr)
{
- int value = rna_Area_type_get(ptr) << 16;
ScrArea *sa = ptr->data;
+ const int area_type = rna_Area_type_get(ptr);
+ const bool area_changing = sa->butspacetype != SPACE_EMPTY;
+ int value = area_type << 16;
+
/* sa->type can be NULL (when not yet initialized), try to do it now. */
/* Copied from `ED_area_initialize()`.*/
- if (sa->type == NULL) {
- sa->type = BKE_spacetype_from_id(sa->spacetype);
+ if (sa->type == NULL || area_changing) {
+ sa->type = BKE_spacetype_from_id(area_type);
if (sa->type == NULL) {
sa->spacetype = SPACE_VIEW3D;
sa->type = BKE_spacetype_from_id(sa->spacetype);
@@ -238,7 +241,7 @@ static int rna_Area_ui_type_get(PointerRNA *ptr)
BLI_assert(sa->type != NULL);
}
if (sa->type->space_subtype_item_extend != NULL) {
- value |= sa->type->space_subtype_get(sa);
+ value |= area_changing ? sa->butspacetype_subtype : sa->type->space_subtype_get(sa);
}
return value;
}
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index ac41736451a..2e3f41d656b 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -319,7 +319,7 @@ static char *rna_ParticleEdit_path(PointerRNA *UNUSED(ptr))
static bool rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value)
{
const Paint *paint = ptr->data;
- Brush *brush = value.id.data;
+ Brush *brush = (Brush *)value.owner_id;
const uint tool_offset = paint->runtime.tool_offset;
const eObjectMode ob_mode = paint->runtime.ob_mode;
UNUSED_VARS_NDEBUG(tool_offset);
@@ -350,10 +350,10 @@ static bool paint_contains_brush_slot(const Paint *paint, const PaintToolSlot *t
static bool rna_Brush_mode_with_tool_poll(PointerRNA *ptr, PointerRNA value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
const PaintToolSlot *tslot = ptr->data;
ToolSettings *ts = scene->toolsettings;
- Brush *brush = value.id.data;
+ Brush *brush = (Brush *)value.owner_id;
int mode = 0;
int slot_index = 0;
@@ -414,25 +414,6 @@ static void rna_Sculpt_update(bContext *C, PointerRNA *UNUSED(ptr))
}
}
-static void rna_Sculpt_ShowDiffuseColor_update(bContext *C, PointerRNA *UNUSED(ptr))
-{
- ViewLayer *view_layer = CTX_data_view_layer(C);
- Object *ob = OBACT(view_layer);
-
- if (ob && ob->sculpt) {
- Scene *scene = CTX_data_scene(C);
- Sculpt *sd = scene->toolsettings->sculpt;
- ob->sculpt->show_diffuse_color = ((sd->flags & SCULPT_SHOW_DIFFUSE) != 0);
-
- if (ob->sculpt->pbvh) {
- pbvh_show_diffuse_color_set(ob->sculpt->pbvh, ob->sculpt->show_diffuse_color);
- }
-
- DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ob);
- }
-}
-
static void rna_Sculpt_ShowMask_update(bContext *C, PointerRNA *UNUSED(ptr))
{
ViewLayer *view_layer = CTX_data_view_layer(C);
@@ -457,7 +438,7 @@ static char *rna_Sculpt_path(PointerRNA *UNUSED(ptr))
static char *rna_VertexPaint_path(PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
ToolSettings *ts = scene->toolsettings;
if (ptr->data == ts->vpaint) {
return BLI_strdup("tool_settings.vertex_paint");
@@ -827,14 +808,6 @@ static void rna_def_sculpt(BlenderRNA *brna)
RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_update");
- prop = RNA_def_property(srna, "show_diffuse_color", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flags", SCULPT_SHOW_DIFFUSE);
- RNA_def_property_ui_text(prop,
- "Show Diffuse Color",
- "Show diffuse color of object and overlay sculpt mask on top of it");
- RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
- RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, "rna_Sculpt_ShowDiffuseColor_update");
-
prop = RNA_def_property(srna, "show_mask", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flags", SCULPT_HIDE_MASK);
RNA_def_property_ui_text(prop, "Show Mask", "Show mask as overlay on object");
@@ -1447,13 +1420,6 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_ui_text(prop, "Guide", "");
- prop = RNA_def_property(srna, "use_select_mask", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_SELECT_MASK);
- RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke points");
- RNA_def_property_ui_icon(prop, ICON_GP_ONLY_SELECTED, 0);
- RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
- RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
-
prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_POSITION);
RNA_def_property_ui_text(prop, "Affect Position", "The brush affects the position of the point");
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index b54fdf5aadb..883468fa88e 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -100,7 +100,7 @@ static void meta_tmp_ref(Sequence *seq_par, Sequence *seq)
static void rna_SequenceElement_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed) {
@@ -119,7 +119,7 @@ static void rna_Sequence_invalidate_raw_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed) {
@@ -133,7 +133,7 @@ static void rna_Sequence_invalidate_preprocessed_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed) {
@@ -147,7 +147,7 @@ static void rna_Sequence_invalidate_composite_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed) {
@@ -179,7 +179,7 @@ static void rna_Sequence_use_sequence(Main *bmain, Scene *scene, PointerRNA *ptr
static void rna_SequenceEditor_sequences_all_begin(CollectionPropertyIterator *iter,
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
meta_tmp_ref(NULL, ed->seqbase.first);
@@ -281,7 +281,7 @@ static void do_sequence_frame_change_update(Scene *scene, Sequence *seq)
*/
static void rna_Sequence_frame_change_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
do_sequence_frame_change_update(scene, (Sequence *)ptr->data);
rna_Sequence_invalidate_preprocessed_update(bmain, scene, ptr);
}
@@ -289,7 +289,7 @@ static void rna_Sequence_frame_change_update(Main *bmain, Scene *UNUSED(scene),
static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
BKE_sequence_translate(scene, seq, value - seq->start);
do_sequence_frame_change_update(scene, seq);
@@ -298,7 +298,7 @@ static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
BKE_sequence_tx_set_final_left(seq, value);
BKE_sequence_single_fix(seq);
@@ -308,7 +308,7 @@ static void rna_Sequence_start_frame_final_set(PointerRNA *ptr, int value)
static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
BKE_sequence_tx_set_final_right(seq, value);
BKE_sequence_single_fix(seq);
@@ -318,7 +318,7 @@ static void rna_Sequence_end_frame_final_set(PointerRNA *ptr, int value)
static void rna_Sequence_anim_startofs_final_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
seq->anim_startofs = MIN2(value, seq->len + seq->anim_startofs);
@@ -329,7 +329,7 @@ static void rna_Sequence_anim_startofs_final_set(PointerRNA *ptr, int value)
static void rna_Sequence_anim_endofs_final_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
seq->anim_endofs = MIN2(value, seq->len + seq->anim_endofs);
@@ -340,7 +340,7 @@ static void rna_Sequence_anim_endofs_final_set(PointerRNA *ptr, int value)
static void rna_Sequence_frame_length_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
BKE_sequence_tx_set_final_right(seq, BKE_sequence_tx_get_final_left(seq, false) + value);
do_sequence_frame_change_update(scene, seq);
@@ -362,7 +362,7 @@ static int rna_Sequence_frame_editable(PointerRNA *ptr, const char **UNUSED(r_in
static void rna_Sequence_channel_set(PointerRNA *ptr, int value)
{
Sequence *seq = (Sequence *)ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
ListBase *seqbase = BKE_sequence_seqbase(&ed->seqbase, seq);
@@ -445,7 +445,7 @@ static Sequence *sequence_get_by_transform(Editing *ed, StripTransform *transfor
static char *rna_SequenceTransform_path(PointerRNA *ptr)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_transform(ed, ptr->data);
@@ -464,7 +464,7 @@ static void rna_SequenceTransform_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_transform(ed, ptr->data);
@@ -497,7 +497,7 @@ static Sequence *sequence_get_by_crop(Editing *ed, StripCrop *crop)
static char *rna_SequenceCrop_path(PointerRNA *ptr)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_crop(ed, ptr->data);
@@ -514,7 +514,7 @@ static char *rna_SequenceCrop_path(PointerRNA *ptr)
static void rna_SequenceCrop_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_crop(ed, ptr->data);
@@ -551,7 +551,7 @@ static int rna_Sequence_name_length(PointerRNA *ptr)
static void rna_Sequence_name_set(PointerRNA *ptr, const char *value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Sequence *seq = (Sequence *)ptr->data;
char oldname[sizeof(seq->name)];
AnimData *adt;
@@ -782,7 +782,7 @@ static void rna_SequenceElement_filename_set(PointerRNA *ptr, const char *value)
static void rna_Sequence_reopen_files_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
BKE_sequencer_free_imbuf(scene, &ed->seqbase, false);
@@ -795,14 +795,14 @@ static void rna_Sequence_reopen_files_update(Main *bmain, Scene *UNUSED(scene),
static void rna_Sequence_mute_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
}
static void rna_Sequence_filepath_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Sequence *seq = (Sequence *)(ptr->data);
BKE_sequence_reload_new_file(bmain, scene, seq, true);
BKE_sequence_calc(scene, seq);
@@ -838,7 +838,7 @@ static Sequence *sequence_get_by_proxy(Editing *ed, StripProxy *proxy)
static void rna_Sequence_tcindex_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_proxy(ed, ptr->data);
@@ -848,7 +848,7 @@ static void rna_Sequence_tcindex_update(Main *bmain, Scene *UNUSED(scene), Point
static void rna_SequenceProxy_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_proxy(ed, ptr->data);
@@ -911,7 +911,7 @@ static Sequence *sequence_get_by_colorbalance(Editing *ed,
static char *rna_SequenceColorBalance_path(PointerRNA *ptr)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
SequenceModifierData *smd;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_colorbalance(ed, ptr->data, &smd);
@@ -944,7 +944,7 @@ static void rna_SequenceColorBalance_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
SequenceModifierData *smd;
Sequence *seq = sequence_get_by_colorbalance(ed, ptr->data, &smd);
@@ -954,7 +954,7 @@ static void rna_SequenceColorBalance_update(Main *UNUSED(bmain),
static void rna_SequenceEditor_overlay_lock_set(PointerRNA *ptr, bool value)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed == NULL) {
@@ -974,7 +974,7 @@ static void rna_SequenceEditor_overlay_lock_set(PointerRNA *ptr, bool value)
static int rna_SequenceEditor_overlay_frame_get(PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed == NULL) {
@@ -991,7 +991,7 @@ static int rna_SequenceEditor_overlay_frame_get(PointerRNA *ptr)
static void rna_SequenceEditor_overlay_frame_set(PointerRNA *ptr, int value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
if (ed == NULL) {
@@ -1055,7 +1055,7 @@ static StructRNA *rna_SequenceModifier_refine(struct PointerRNA *ptr)
static char *rna_SequenceModifier_path(PointerRNA *ptr)
{
- Scene *scene = ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
SequenceModifierData *smd = ptr->data;
Sequence *seq = sequence_get_by_modifier(ed, smd);
@@ -1077,7 +1077,7 @@ static char *rna_SequenceModifier_path(PointerRNA *ptr)
static void rna_SequenceModifier_name_set(PointerRNA *ptr, const char *value)
{
SequenceModifierData *smd = ptr->data;
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_modifier(ed, smd);
AnimData *adt;
@@ -1106,7 +1106,7 @@ static void rna_SequenceModifier_name_set(PointerRNA *ptr, const char *value)
static void rna_SequenceModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
/* strip from other scenes could be modified, so using active scene is not reliable */
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_modifier(ed, ptr->data);
@@ -1115,7 +1115,7 @@ static void rna_SequenceModifier_update(Main *UNUSED(bmain), Scene *UNUSED(scene
static bool rna_SequenceModifier_otherSequence_poll(PointerRNA *ptr, PointerRNA value)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq = sequence_get_by_modifier(ed, ptr->data);
Sequence *cur = (Sequence *)value.data;
@@ -1181,7 +1181,7 @@ static void rna_Sequence_modifier_clear(Sequence *seq, bContext *C)
static float rna_Sequence_fps_get(PointerRNA *ptr)
{
- Scene *scene = (Scene *)ptr->id.data;
+ Scene *scene = (Scene *)ptr->owner_id;
Sequence *seq = (Sequence *)(ptr->data);
return BKE_sequence_get_fps(scene, seq);
}
@@ -1457,7 +1457,7 @@ static const EnumPropertyItem blend_mode_items[] = {
{0, "", ICON_NONE, NULL, NULL},
{SEQ_TYPE_DARKEN, "DARKEN", 0, "Darken", ""},
{SEQ_TYPE_MUL, "MULTIPLY", 0, "Multiply", ""},
- {SEQ_TYPE_BURN, "BURN", 0, "Burn", ""},
+ {SEQ_TYPE_COLOR_BURN, "BURN", 0, "Color Burn", ""},
{SEQ_TYPE_LINEAR_BURN, "LINEAR_BURN", 0, "Linear Burn", ""},
{0, "", ICON_NONE, NULL, NULL},
{SEQ_TYPE_LIGHTEN, "LIGHTEN", 0, "Lighten", ""},
@@ -1853,7 +1853,8 @@ static void rna_def_editor(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_overlay", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "over_flag", SEQ_EDIT_OVERLAY_SHOW);
- RNA_def_property_ui_text(prop, "Draw Axes", "Partial overlay on top of the sequencer");
+ RNA_def_property_ui_text(
+ prop, "Show Overlay", "Partial overlay on top of the sequencer with a frame offset");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
prop = RNA_def_property(srna, "use_overlay_lock", PROP_BOOLEAN, PROP_NONE);
@@ -1864,7 +1865,7 @@ static void rna_def_editor(BlenderRNA *brna)
/* access to fixed and relative frame */
prop = RNA_def_property(srna, "overlay_frame", PROP_INT, PROP_NONE);
- RNA_def_property_ui_text(prop, "Overlay Offset", "");
+ RNA_def_property_ui_text(prop, "Overlay Offset", "Number of frames to offset");
RNA_def_property_int_funcs(
prop, "rna_SequenceEditor_overlay_frame_get", "rna_SequenceEditor_overlay_frame_set", NULL);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
@@ -2791,7 +2792,7 @@ static void rna_def_color_mix(StructRNA *srna)
{SEQ_TYPE_SCREEN, "SCREEN", 0, "Screen", ""},
{SEQ_TYPE_OVERLAY, "OVERLAY", 0, "Overlay", ""},
{SEQ_TYPE_DODGE, "DODGE", 0, "Dodge", ""},
- {SEQ_TYPE_BURN, "BURN", 0, "Burn", ""},
+ {SEQ_TYPE_COLOR_BURN, "BURN", 0, "Color Burn", ""},
{SEQ_TYPE_LINEAR_BURN, "LINEAR_BURN", 0, "Linear Burn", ""},
{SEQ_TYPE_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""},
{SEQ_TYPE_HARD_LIGHT, "HARD_LIGHT", 0, "Hard Light", ""},
@@ -3066,7 +3067,7 @@ static void rna_def_brightcontrast_modifier(BlenderRNA *brna)
prop = RNA_def_property(srna, "contrast", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "contrast");
- RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
+ RNA_def_property_range(prop, -100.0f, 100.0f);
RNA_def_property_ui_text(prop, "Contrast", "Adjust the difference in luminosity between pixels");
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceModifier_update");
}
diff --git a/source/blender/makesrna/intern/rna_shader_fx.c b/source/blender/makesrna/intern/rna_shader_fx.c
index e48e682018d..acf525e1788 100644
--- a/source/blender/makesrna/intern/rna_shader_fx.c
+++ b/source/blender/makesrna/intern/rna_shader_fx.c
@@ -140,8 +140,8 @@ static void rna_ShaderFx_name_set(PointerRNA *ptr, const char *value)
BLI_strncpy_utf8(gmd->name, value, sizeof(gmd->name));
/* make sure the name is truly unique */
- if (ptr->id.data) {
- Object *ob = ptr->id.data;
+ if (ptr->owner_id) {
+ Object *ob = (Object *)ptr->owner_id;
BKE_shaderfx_unique_name(&ob->shader_fx, gmd);
}
@@ -160,8 +160,8 @@ static char *rna_ShaderFx_path(PointerRNA *ptr)
static void rna_ShaderFx_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
- WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->id.data);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
+ WM_main_add_notifier(NC_OBJECT | ND_MODIFIER, ptr->owner_id);
}
static void rna_ShaderFx_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -189,7 +189,7 @@ static void shaderfx_object_set(Object *self, Object **ob_p, int type, PointerRN
PointerRNA *ptr, PointerRNA value, struct ReportList *UNUSED(reports)) \
{ \
_type##ShaderFxData *tmd = (_type##ShaderFxData *)ptr->data; \
- shaderfx_object_set(ptr->id.data, &tmd->_prop, _obtype, value); \
+ shaderfx_object_set((Object *)ptr->owner_id, &tmd->_prop, _obtype, value); \
}
RNA_FX_OBJECT_SET(Light, object, OB_EMPTY);
@@ -212,7 +212,7 @@ static void rna_def_shader_fx_blur(BlenderRNA *brna)
prop = RNA_def_property(srna, "factor", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "radius");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_ui_text(prop, "Factor", "Factor of Blur");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -329,7 +329,7 @@ static void rna_def_shader_fx_pixel(BlenderRNA *brna)
prop = RNA_def_property(srna, "size", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "size");
- RNA_def_property_range(prop, 1, INT_MAX);
+ RNA_def_property_range(prop, 1, SHRT_MAX);
RNA_def_property_array(prop, 2);
RNA_def_property_ui_text(prop, "Size", "Pixel size");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -359,7 +359,7 @@ static void rna_def_shader_fx_rim(BlenderRNA *brna)
prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "offset");
- RNA_def_property_range(prop, -INT_MAX, INT_MAX);
+ RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
RNA_def_property_ui_text(prop, "Offset", "Offset of the rim");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -385,7 +385,7 @@ static void rna_def_shader_fx_rim(BlenderRNA *brna)
prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "blur");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_ui_text(
prop, "Blur", "Number of pixels for blurring rim (set to 0 to disable)");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -418,11 +418,12 @@ static void rna_def_shader_fx_shadow(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Object to determine center of rotation");
RNA_def_property_pointer_funcs(prop, NULL, "rna_ShadowShaderFx_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
prop = RNA_def_property(srna, "offset", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "offset");
- RNA_def_property_range(prop, -INT_MAX, INT_MAX);
+ RNA_def_property_range(prop, SHRT_MIN, SHRT_MAX);
RNA_def_property_ui_text(prop, "Offset", "Offset of the shadow");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -472,7 +473,7 @@ static void rna_def_shader_fx_shadow(BlenderRNA *brna)
prop = RNA_def_property(srna, "blur", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "blur");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_ui_text(
prop, "Blur", "Number of pixels for blurring shadow (set to 0 to disable)");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -537,7 +538,7 @@ static void rna_def_shader_fx_glow(BlenderRNA *brna)
* but only makes public first array element. */
prop = RNA_def_property(srna, "radius", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "blur[0]");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_ui_text(
prop, "Radius", "Number of pixels for blurring glow (set to 0 to disable)");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -568,7 +569,7 @@ static void rna_def_shader_fx_swirl(BlenderRNA *brna)
prop = RNA_def_property(srna, "radius", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "radius");
- RNA_def_property_range(prop, 0, INT_MAX);
+ RNA_def_property_range(prop, 0, SHRT_MAX);
RNA_def_property_ui_text(prop, "Radius", "Radius to apply");
RNA_def_property_update(prop, NC_OBJECT | ND_MODIFIER, "rna_ShaderFx_update");
@@ -588,6 +589,7 @@ static void rna_def_shader_fx_swirl(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Object to determine center location");
RNA_def_property_pointer_funcs(prop, NULL, "rna_SwirlShaderFx_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
}
@@ -640,6 +642,7 @@ static void rna_def_shader_fx_light(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Object", "Object to determine light source location");
RNA_def_property_pointer_funcs(prop, NULL, "rna_LightShaderFx_object_set", NULL, NULL);
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_update(prop, 0, "rna_ShaderFx_dependency_update");
}
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 5c04802ac3c..fa0297ac306 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 *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
static void rna_Smoke_dependency_update(Main *bmain, Scene *scene, PointerRNA *ptr)
@@ -70,13 +70,13 @@ static void rna_Smoke_resetCache(Main *UNUSED(bmain), Scene *UNUSED(scene), Poin
if (settings->smd && settings->smd->domain) {
settings->point_cache[0]->flag |= PTCACHE_OUTDATED;
}
- DEG_id_tag_update(ptr->id.data, ID_RECALC_GEOMETRY);
+ DEG_id_tag_update(ptr->owner_id, ID_RECALC_GEOMETRY);
}
static void rna_Smoke_cachetype_set(struct PointerRNA *ptr, int value)
{
SmokeDomainSettings *settings = (SmokeDomainSettings *)ptr->data;
- Object *ob = (Object *)ptr->id.data;
+ Object *ob = (Object *)ptr->owner_id;
if (value != settings->cache_file_format) {
/* Clear old caches. */
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 6dc0cf045cd..8c855c9e870 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -32,6 +32,8 @@
#include "BKE_studiolight.h"
#include "BKE_sequencer.h"
+#include "ED_text.h"
+
#include "BLI_math.h"
#include "DNA_action_types.h"
@@ -520,7 +522,7 @@ static StructRNA *rna_Space_refine(struct PointerRNA *ptr)
static ScrArea *rna_area_from_space(PointerRNA *ptr)
{
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
SpaceLink *link = (SpaceLink *)ptr->data;
return BKE_screen_find_area_from_space(sc, link);
}
@@ -549,7 +551,7 @@ static void area_region_from_regiondata(bScreen *sc,
static void rna_area_region_from_regiondata(PointerRNA *ptr, ScrArea **r_sa, ARegion **r_ar)
{
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
void *regiondata = ptr->data;
area_region_from_regiondata(sc, regiondata, r_sa, r_ar);
@@ -767,7 +769,7 @@ static void rna_Space_view2d_sync_update(Main *UNUSED(bmain),
ar = BKE_area_find_region_type(sa, RGN_TYPE_WINDOW);
if (ar) {
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
View2D *v2d = &ar->v2d;
UI_view2d_sync(sc, sa, v2d, V2D_LOCK_SET);
@@ -800,7 +802,7 @@ static void rna_SpaceView3D_camera_update(Main *bmain, Scene *scene, PointerRNA
static void rna_SpaceView3D_use_local_camera_set(PointerRNA *ptr, bool value)
{
View3D *v3d = (View3D *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
v3d->scenelock = !value;
@@ -813,7 +815,7 @@ static void rna_SpaceView3D_use_local_camera_set(PointerRNA *ptr, bool value)
static float rna_View3DOverlay_GridScaleUnit_get(PointerRNA *ptr)
{
View3D *v3d = (View3D *)(ptr->data);
- bScreen *screen = ptr->id.data;
+ bScreen *screen = (bScreen *)ptr->owner_id;
Scene *scene = ED_screen_scene_find(screen, G_MAIN->wm.first);
return ED_view3d_grid_scale(scene, v3d, NULL);
@@ -930,7 +932,7 @@ static bool rna_RegionView3D_is_orthographic_side_view_get(PointerRNA *ptr)
static void rna_3DViewShading_type_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_SCE) {
return;
}
@@ -947,7 +949,7 @@ static void rna_3DViewShading_type_update(Main *bmain, Scene *scene, PointerRNA
}
}
- bScreen *screen = ptr->id.data;
+ bScreen *screen = (bScreen *)ptr->owner_id;
for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
if (sl->spacetype == SPACE_VIEW3D) {
@@ -964,12 +966,12 @@ static void rna_3DViewShading_type_update(Main *bmain, Scene *scene, PointerRNA
static Scene *rna_3DViewShading_scene(PointerRNA *ptr)
{
/* Get scene, depends if using 3D view or OpenGL render settings. */
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_SCE) {
return (Scene *)id;
}
else {
- bScreen *screen = ptr->id.data;
+ bScreen *screen = (bScreen *)ptr->owner_id;
return WM_windows_scene_get_from_screen(G_MAIN->wm.first, screen);
}
}
@@ -1292,7 +1294,7 @@ static bool rna_SpaceImageEditor_show_paint_get(PointerRNA *ptr)
static bool rna_SpaceImageEditor_show_uvedit_get(PointerRNA *ptr)
{
SpaceImage *sima = (SpaceImage *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
wmWindow *win = ED_screen_window_find(sc, G_MAIN->wm.first);
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
@@ -1302,7 +1304,7 @@ static bool rna_SpaceImageEditor_show_uvedit_get(PointerRNA *ptr)
static bool rna_SpaceImageEditor_show_maskedit_get(PointerRNA *ptr)
{
SpaceImage *sima = (SpaceImage *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
wmWindow *win = ED_screen_window_find(sc, G_MAIN->wm.first);
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
return ED_space_image_check_show_maskedit(sima, view_layer);
@@ -1313,7 +1315,7 @@ static void rna_SpaceImageEditor_image_set(PointerRNA *ptr,
struct ReportList *UNUSED(reports))
{
SpaceImage *sima = (SpaceImage *)(ptr->data);
- bScreen *sc = (bScreen *)ptr->id.data;
+ bScreen *sc = (bScreen *)ptr->owner_id;
wmWindow *win = ED_screen_window_find(sc, G_MAIN->wm.first);
ViewLayer *view_layer = WM_window_get_active_view_layer(win);
Object *obedit = OBEDIT_FROM_VIEW_LAYER(view_layer);
@@ -1504,6 +1506,11 @@ static void rna_SpaceTextEditor_text_set(PointerRNA *ptr,
WM_main_add_notifier(NC_TEXT | NA_SELECTED, st->text);
}
+static bool rna_SpaceTextEditor_text_is_syntax_highlight_supported(struct SpaceText *space)
+{
+ return ED_text_is_syntax_highlight_supported(space->text);
+}
+
static void rna_SpaceTextEditor_updateEdited(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
@@ -2085,7 +2092,7 @@ static void rna_SpaceClipEditor_clip_set(PointerRNA *ptr,
struct ReportList *UNUSED(reports))
{
SpaceClip *sc = (SpaceClip *)(ptr->data);
- bScreen *screen = (bScreen *)ptr->id.data;
+ bScreen *screen = (bScreen *)ptr->owner_id;
ED_space_clip_set_clip(NULL, screen, sc, (MovieClip *)value.data);
}
@@ -2770,6 +2777,7 @@ static void rna_def_space_outliner(BlenderRNA *brna)
static const EnumPropertyItem filter_state_items[] = {
{SO_FILTER_OB_ALL, "ALL", 0, "All", "Show all objects in the view layer"},
{SO_FILTER_OB_VISIBLE, "VISIBLE", 0, "Visible", "Show visible objects"},
+ {SO_FILTER_OB_HIDDEN, "HIDDEN", 0, "Hidden", "Show hidden objects"},
{SO_FILTER_OB_SELECTED, "SELECTED", 0, "Selected", "Show selected objects"},
{SO_FILTER_OB_ACTIVE, "ACTIVE", 0, "Active", "Show only the active object"},
{0, NULL, 0, NULL, NULL},
@@ -2808,6 +2816,12 @@ static void rna_def_space_outliner(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Sort Alphabetically", "");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
+ prop = RNA_def_property(srna, "use_sync_select", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", SO_SYNC_SELECT);
+ RNA_def_property_ui_text(
+ prop, "Sync Outliner Selection", "Sync outliner selection with other editors");
+ RNA_def_property_update(prop, NC_SPACE | ND_SPACE_OUTLINER, NULL);
+
/* Granular restriction column option. */
prop = RNA_def_property(srna, "show_restrict_column_enable", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "show_restrict_flags", SO_RESTRICT_ENABLE);
@@ -3767,7 +3781,7 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_gizmo_navigate", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "gizmo_flag", V3D_GIZMO_HIDE_NAVIGATE);
- RNA_def_property_ui_text(prop, "Navigate Gizmo", "");
+ RNA_def_property_ui_text(prop, "Navigate Gizmo", "Viewport navigation gizmo");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
prop = RNA_def_property(srna, "show_gizmo_context", PROP_BOOLEAN, PROP_NONE);
@@ -4419,13 +4433,6 @@ static void rna_def_space_sequencer(BlenderRNA *brna)
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_SEQUENCER, NULL);
/* flags */
- 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, "show_frames", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SEQ_DRAWFRAMES);
RNA_def_property_ui_text(prop, "Display Frames", "Display frames rather than seconds");
@@ -4539,6 +4546,7 @@ static void rna_def_space_text(BlenderRNA *brna)
{
StructRNA *srna;
PropertyRNA *prop;
+ FunctionRNA *func;
srna = RNA_def_struct(brna, "SpaceTextEditor", "Space");
RNA_def_struct_sdna(srna, "SpaceText");
@@ -4568,6 +4576,15 @@ static void rna_def_space_text(BlenderRNA *brna)
RNA_def_property_ui_icon(prop, ICON_LINENUMBERS_ON, 0);
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_TEXT, NULL);
+ func = RNA_def_function(srna,
+ "is_syntax_highlight_supported",
+ "rna_SpaceTextEditor_text_is_syntax_highlight_supported");
+ RNA_def_function_return(func,
+ RNA_def_boolean(func, "is_syntax_highlight_supported", false, "", ""));
+ RNA_def_function_ui_description(func,
+ "Returns True if the editor supports syntax highlighting "
+ "for the current text datablock");
+
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");
@@ -4703,13 +4720,6 @@ 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_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);
-
prop = RNA_def_property(srna, "show_sliders", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SACTION_SLIDERS);
RNA_def_property_ui_text(prop, "Show Sliders", "Show sliders beside F-Curve channels");
@@ -4865,13 +4875,6 @@ 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_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);
-
prop = RNA_def_property(srna, "show_sliders", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", SIPO_SLIDERS);
RNA_def_property_ui_text(prop, "Show Sliders", "Show sliders beside F-Curve channels");
@@ -5009,13 +5012,6 @@ 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_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);
-
prop = RNA_def_property(srna, "show_strip_curves", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_negative_sdna(prop, NULL, "flag", SNLA_NOSTRIPCURVES);
RNA_def_property_ui_text(prop, "Show Control F-Curves", "Show influence F-Curves on strips");
diff --git a/source/blender/makesrna/intern/rna_speaker.c b/source/blender/makesrna/intern/rna_speaker.c
index 0c63cf5eae8..8f156a67e08 100644
--- a/source/blender/makesrna/intern/rna_speaker.c
+++ b/source/blender/makesrna/intern/rna_speaker.c
@@ -61,6 +61,7 @@ static void rna_def_speaker(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "Sound");
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Sound", "Sound data-block used by this speaker");
/* RNA_def_property_float_funcs(prop, NULL, "rna_Speaker_sound_set", NULL); */
/* RNA_def_property_update(prop, 0, "rna_Speaker_update"); */
diff --git a/source/blender/makesrna/intern/rna_text.c b/source/blender/makesrna/intern/rna_text.c
index 454367b5233..64a23dfa985 100644
--- a/source/blender/makesrna/intern/rna_text.c
+++ b/source/blender/makesrna/intern/rna_text.c
@@ -27,6 +27,8 @@
#include "BKE_text.h"
+#include "ED_text.h"
+
#include "RNA_define.h"
#include "rna_internal.h"
@@ -146,6 +148,13 @@ static void rna_def_text_line(BlenderRNA *brna)
static void rna_def_text(BlenderRNA *brna)
{
+
+ static const EnumPropertyItem indentation_items[] = {
+ {0, "TABS", 0, "Tabs", "Indent using tabs"},
+ {TXT_TABSTOSPACES, "SPACES", 0, "Spaces", "Indent using spaces"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
StructRNA *srna;
PropertyRNA *prop;
@@ -182,10 +191,10 @@ static void rna_def_text(BlenderRNA *brna)
RNA_def_property_ui_text(
prop, "Register", "Run this text as a script on loading, Text name must end with \".py\"");
- 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");
+ prop = RNA_def_property(srna, "indentation", PROP_ENUM, PROP_NONE); /* as an enum */
+ RNA_def_property_enum_bitflag_sdna(prop, NULL, "flags");
+ RNA_def_property_enum_items(prop, indentation_items);
+ RNA_def_property_ui_text(prop, "Indentation", "Use tabs or spaces for indentation");
prop = RNA_def_property(srna, "lines", PROP_COLLECTION, PROP_NONE);
RNA_def_property_struct_type(prop, "TextLine");
diff --git a/source/blender/makesrna/intern/rna_text_api.c b/source/blender/makesrna/intern/rna_text_api.c
index 4ca48226ee9..524dcfa9ad7 100644
--- a/source/blender/makesrna/intern/rna_text_api.c
+++ b/source/blender/makesrna/intern/rna_text_api.c
@@ -23,6 +23,8 @@
#include "BLI_utildefines.h"
+#include "ED_text.h"
+
#include "RNA_define.h"
#include "rna_internal.h" /* own include */
@@ -59,6 +61,14 @@ void RNA_api_text(StructRNA *srna)
func, "write text at the cursor location and advance to the end of the text block");
parm = RNA_def_string(func, "text", "Text", 0, "", "New text for this data-block");
RNA_def_parameter_flags(parm, 0, PARM_REQUIRED);
+
+ func = RNA_def_function(
+ srna, "is_syntax_highlight_supported", "ED_text_is_syntax_highlight_supported");
+ RNA_def_function_return(func,
+ RNA_def_boolean(func, "is_syntax_highlight_supported", false, "", ""));
+ RNA_def_function_ui_description(func,
+ "Returns True if the editor supports syntax highlighting "
+ "for the current text datablock");
}
#endif
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index 28d2d722460..2ab08c82b63 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -186,10 +186,10 @@ static StructRNA *rna_Texture_refine(struct PointerRNA *ptr)
static void rna_Texture_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (GS(id->name) == ID_TE) {
- Tex *tex = ptr->id.data;
+ Tex *tex = (Tex *)ptr->owner_id;
DEG_id_tag_update(&tex->id, 0);
DEG_id_tag_update(&tex->id, ID_RECALC_EDITORS);
@@ -197,7 +197,7 @@ static void rna_Texture_update(Main *bmain, Scene *UNUSED(scene), PointerRNA *pt
WM_main_add_notifier(NC_MATERIAL | ND_SHADING_DRAW, NULL);
}
else if (GS(id->name) == ID_NT) {
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
ED_node_tag_update_nodetree(bmain, ntree, NULL);
}
}
@@ -219,7 +219,7 @@ static void rna_Color_mapping_update(Main *UNUSED(bmain),
/* Used for Texture Properties, used (also) for/in Nodes */
static void rna_Texture_nodes_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- Tex *tex = ptr->id.data;
+ Tex *tex = (Tex *)ptr->owner_id;
DEG_id_tag_update(&tex->id, 0);
DEG_id_tag_update(&tex->id, ID_RECALC_EDITORS);
@@ -235,7 +235,7 @@ static void rna_Texture_type_set(PointerRNA *ptr, int value)
void rna_TextureSlot_update(bContext *C, PointerRNA *ptr)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
DEG_id_tag_update(id, 0);
@@ -290,8 +290,8 @@ char *rna_TextureSlot_path(PointerRNA *ptr)
* since the name used is the name of the texture assigned, but the texture
* may be used multiple times in the same stack
*/
- if (ptr->id.data) {
- if (GS(((ID *)ptr->id.data)->name) == ID_BR) {
+ if (ptr->owner_id) {
+ if (GS(ptr->owner_id->name) == ID_BR) {
return BLI_strdup("texture_slot");
}
else {
@@ -299,7 +299,7 @@ char *rna_TextureSlot_path(PointerRNA *ptr)
PropertyRNA *prop;
/* find the 'textures' property of the ID-struct */
- RNA_id_pointer_create(ptr->id.data, &id_ptr);
+ RNA_id_pointer_create(ptr->owner_id, &id_ptr);
prop = RNA_struct_find_property(&id_ptr, "texture_slots");
/* get an iterator for this property, and try to find the relevant index */
@@ -630,6 +630,7 @@ static void rna_def_mtex(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "tex");
RNA_def_property_struct_type(prop, "Texture");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_CONTEXT_UPDATE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Texture", "Texture data-block used by this texture slot");
RNA_def_property_update(prop, NC_MATERIAL | ND_SHADING_LINKS, "rna_TextureSlot_update");
@@ -1277,6 +1278,7 @@ static void rna_def_texture_image(BlenderRNA *brna)
RNA_def_property_pointer_sdna(prop, NULL, "ima");
RNA_def_property_struct_type(prop, "Image");
RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Image", "");
RNA_def_property_update(prop, 0, "rna_Texture_update");
diff --git a/source/blender/makesrna/intern/rna_timeline.c b/source/blender/makesrna/intern/rna_timeline.c
index 3308a493212..ed17a509fc2 100644
--- a/source/blender/makesrna/intern/rna_timeline.c
+++ b/source/blender/makesrna/intern/rna_timeline.c
@@ -70,6 +70,7 @@ static void rna_def_timeline_marker(BlenderRNA *brna)
prop = RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE);
RNA_def_property_struct_type(prop, "Object");
RNA_def_property_flag(prop, PROP_EDITABLE | PROP_ID_SELF_CHECK);
+ RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
RNA_def_property_ui_text(prop, "Camera", "Camera that becomes active on this frame");
# endif
}
diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c
index 84bde91e654..0a824b3c67a 100644
--- a/source/blender/makesrna/intern/rna_tracking.c
+++ b/source/blender/makesrna/intern/rna_tracking.c
@@ -61,7 +61,7 @@ static void rna_tracking_defaultSettings_patternUpdate(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTracking *tracking = &clip->tracking;
MovieTrackingSettings *settings = &tracking->settings;
@@ -74,7 +74,7 @@ static void rna_tracking_defaultSettings_searchUpdate(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTracking *tracking = &clip->tracking;
MovieTrackingSettings *settings = &tracking->settings;
@@ -85,7 +85,7 @@ static void rna_tracking_defaultSettings_searchUpdate(Main *UNUSED(bmain),
static char *rna_trackingTrack_path(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
/* Escaped object name, escaped track name, rest of the path. */
char rna_path[MAX_NAME * 4 + 64];
@@ -95,35 +95,35 @@ static char *rna_trackingTrack_path(PointerRNA *ptr)
static void rna_trackingTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.tracks, NULL);
}
static void rna_trackingPlaneTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.plane_tracks, NULL);
}
static void rna_trackingObjects_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.objects, NULL);
}
static int rna_tracking_active_object_index_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
return clip->tracking.objectnr;
}
static void rna_tracking_active_object_index_set(PointerRNA *ptr, int value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
clip->tracking.objectnr = value;
BKE_tracking_dopesheet_tag_update(&clip->tracking);
@@ -132,7 +132,7 @@ static void rna_tracking_active_object_index_set(PointerRNA *ptr, int value)
static void rna_tracking_active_object_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
*min = 0;
*max = max_ii(0, clip->tracking.tot_object - 1);
@@ -140,7 +140,7 @@ static void rna_tracking_active_object_index_range(
static PointerRNA rna_tracking_active_track_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingTrack *act_track = BKE_tracking_track_get_active(&clip->tracking);
return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingTrack, act_track);
@@ -150,7 +150,7 @@ static void rna_tracking_active_track_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingTrack *track = (MovieTrackingTrack *)value.data;
ListBase *tracksbase = BKE_tracking_get_active_tracks(&clip->tracking);
int index = BLI_findindex(tracksbase, track);
@@ -165,7 +165,7 @@ static void rna_tracking_active_track_set(PointerRNA *ptr,
static PointerRNA rna_tracking_active_plane_track_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingPlaneTrack *act_plane_track = BKE_tracking_plane_track_get_active(&clip->tracking);
return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingPlaneTrack, act_plane_track);
@@ -175,7 +175,7 @@ static void rna_tracking_active_plane_track_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)value.data;
ListBase *plane_tracks_base = BKE_tracking_get_active_plane_tracks(&clip->tracking);
int index = BLI_findindex(plane_tracks_base, plane_track);
@@ -190,7 +190,7 @@ static void rna_tracking_active_plane_track_set(PointerRNA *ptr,
static void rna_trackingTrack_name_set(PointerRNA *ptr, const char *value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingTrack *track = (MovieTrackingTrack *)ptr->data;
ListBase *tracksbase = BKE_tracking_find_tracks_list_for_track(&clip->tracking, track);
/* Store old name, for the animation fix later. */
@@ -233,7 +233,7 @@ static void rna_trackingTrack_select_set(PointerRNA *ptr, bool value)
static void rna_trackingPlaneMarker_frame_set(PointerRNA *ptr, int value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTracking *tracking = &clip->tracking;
MovieTrackingPlaneMarker *plane_marker = (MovieTrackingPlaneMarker *)ptr->data;
MovieTrackingObject *tracking_object;
@@ -268,7 +268,7 @@ static void rna_trackingPlaneMarker_frame_set(PointerRNA *ptr, int value)
static char *rna_trackingPlaneTrack_path(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data;
/* Escaped object name, escaped track name, rest of the path. */
char rna_path[MAX_NAME * 4 + 64];
@@ -279,7 +279,7 @@ static char *rna_trackingPlaneTrack_path(PointerRNA *ptr)
static void rna_trackingPlaneTrack_name_set(PointerRNA *ptr, const char *value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingPlaneTrack *plane_track = (MovieTrackingPlaneTrack *)ptr->data;
ListBase *plane_tracks_base = BKE_tracking_find_tracks_list_for_plane_track(&clip->tracking,
plane_track);
@@ -307,7 +307,7 @@ static char *rna_trackingCamera_path(PointerRNA *UNUSED(ptr))
static float rna_trackingCamera_focal_mm_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingCamera *camera = &clip->tracking.camera;
float val = camera->focal;
@@ -320,7 +320,7 @@ static float rna_trackingCamera_focal_mm_get(PointerRNA *ptr)
static void rna_trackingCamera_focal_mm_set(PointerRNA *ptr, float value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingCamera *camera = &clip->tracking.camera;
if (clip->lastsize[0]) {
@@ -362,26 +362,26 @@ static int rna_track_2d_stabilization_rotation(CollectionPropertyIterator *UNUSE
static void rna_tracking_stabTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.tracks, rna_track_2d_stabilization);
}
static int rna_tracking_stabTracks_active_index_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
return clip->tracking.stabilization.act_track;
}
static void rna_tracking_stabTracks_active_index_set(PointerRNA *ptr, int value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
clip->tracking.stabilization.act_track = value;
}
static void rna_tracking_stabTracks_active_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
*min = 0;
*max = max_ii(0, clip->tracking.stabilization.tot_track - 1);
@@ -389,26 +389,26 @@ static void rna_tracking_stabTracks_active_index_range(
static void rna_tracking_stabRotTracks_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.tracks, rna_track_2d_stabilization_rotation);
}
static int rna_tracking_stabRotTracks_active_index_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
return clip->tracking.stabilization.act_rot_track;
}
static void rna_tracking_stabRotTracks_active_index_set(PointerRNA *ptr, int value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
clip->tracking.stabilization.act_rot_track = value;
}
static void rna_tracking_stabRotTracks_active_index_range(
PointerRNA *ptr, int *min, int *max, int *UNUSED(softmin), int *UNUSED(softmax))
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
*min = 0;
*max = max_ii(0, clip->tracking.stabilization.tot_rot_track - 1);
@@ -416,7 +416,7 @@ static void rna_tracking_stabRotTracks_active_index_range(
static void rna_tracking_flushUpdate(Main *UNUSED(bmain), Scene *scene, PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
nodeUpdateID(scene->nodetree, &clip->id);
@@ -429,7 +429,7 @@ static void rna_tracking_resetIntrinsics(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTracking *tracking = &clip->tracking;
if (tracking->camera.intrinsics) {
@@ -443,7 +443,7 @@ static void rna_trackingObject_tracks_begin(CollectionPropertyIterator *iter, Po
MovieTrackingObject *object = (MovieTrackingObject *)ptr->data;
if (object->flag & TRACKING_OBJECT_CAMERA) {
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.tracks, NULL);
}
@@ -458,7 +458,7 @@ static void rna_trackingObject_plane_tracks_begin(CollectionPropertyIterator *it
MovieTrackingObject *object = (MovieTrackingObject *)ptr->data;
if (object->flag & TRACKING_OBJECT_CAMERA) {
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
rna_iterator_listbase_begin(iter, &clip->tracking.plane_tracks, NULL);
}
@@ -472,7 +472,7 @@ static PointerRNA rna_trackingObject_reconstruction_get(PointerRNA *ptr)
MovieTrackingObject *object = (MovieTrackingObject *)ptr->data;
if (object->flag & TRACKING_OBJECT_CAMERA) {
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
return rna_pointer_inherit_refine(
ptr, &RNA_MovieTrackingReconstruction, &clip->tracking.reconstruction);
@@ -485,7 +485,7 @@ static PointerRNA rna_trackingObject_reconstruction_get(PointerRNA *ptr)
static PointerRNA rna_tracking_active_object_get(PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingObject *object = BLI_findlink(&clip->tracking.objects, clip->tracking.objectnr);
return rna_pointer_inherit_refine(ptr, &RNA_MovieTrackingObject, object);
@@ -495,7 +495,7 @@ static void rna_tracking_active_object_set(PointerRNA *ptr,
PointerRNA value,
struct ReportList *UNUSED(reports))
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingObject *object = (MovieTrackingObject *)value.data;
int index = BLI_findindex(&clip->tracking.objects, object);
@@ -509,7 +509,7 @@ static void rna_tracking_active_object_set(PointerRNA *ptr,
static void rna_trackingObject_name_set(PointerRNA *ptr, const char *value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingObject *object = (MovieTrackingObject *)ptr->data;
BLI_strncpy(object->name, value, sizeof(object->name));
@@ -521,7 +521,7 @@ static void rna_trackingObject_flushUpdate(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
WM_main_add_notifier(NC_OBJECT | ND_TRANSFORM, NULL);
DEG_id_tag_update(&clip->id, 0);
@@ -529,7 +529,7 @@ static void rna_trackingObject_flushUpdate(Main *UNUSED(bmain),
static void rna_trackingMarker_frame_set(PointerRNA *ptr, int value)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTracking *tracking = &clip->tracking;
MovieTrackingMarker *marker = (MovieTrackingMarker *)ptr->data;
MovieTrackingObject *tracking_object;
@@ -594,7 +594,7 @@ static void rna_trackingDopesheet_tagUpdate(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- MovieClip *clip = (MovieClip *)ptr->id.data;
+ MovieClip *clip = (MovieClip *)ptr->owner_id;
MovieTrackingDopesheet *dopesheet = &clip->tracking.dopesheet;
dopesheet->ok = 0;
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 097e62a1fea..a7f0c8ff19c 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -1410,7 +1410,7 @@ static void rna_def_panel(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_pin", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", PNL_PIN);
- RNA_def_property_ui_text(prop, "Pin", "");
+ RNA_def_property_ui_text(prop, "Pin", "Show the panel on all tabs");
/* XXX, should only tag region for redraw */
RNA_def_property_update(prop, NC_WINDOW, NULL);
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index d50f97e88ca..c8b039bd2d6 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -796,6 +796,7 @@ void RNA_api_ui_layout(StructRNA *srna)
RNA_def_boolean(func, "emboss", true, "", "Draw the button itself, not just the icon/text");
RNA_def_int(func,
"index",
+ /* RNA_NO_INDEX == -1 */
-1,
-2,
INT_MAX,
@@ -803,7 +804,7 @@ void RNA_api_ui_layout(StructRNA *srna)
"The index of this button, when set a single member of an array can be accessed, "
"when set to -1 all array members are used",
-2,
- INT_MAX); /* RNA_NO_INDEX == -1 */
+ INT_MAX);
parm = RNA_def_property(func, "icon_value", PROP_INT, PROP_UNSIGNED);
RNA_def_property_ui_text(parm, "Icon Value", "Override automatic icon of the item");
RNA_def_boolean(func, "invert_checkbox", false, "", "Draw checkbox value inverted");
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 7b7d9e71cd2..72a3455b120 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -30,6 +30,7 @@
#include "BLI_utildefines.h"
#include "BLI_math_base.h"
+#include "BLI_math_rotation.h"
#include "BLT_translation.h"
@@ -2296,6 +2297,11 @@ static void rna_def_userdef_theme_space_outliner(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Selected Highlight", "");
RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
+ prop = RNA_def_property(srna, "active", PROP_FLOAT, PROP_COLOR_GAMMA);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Active Highlight", "");
+ RNA_def_property_update(prop, 0, "rna_userdef_theme_update");
+
prop = RNA_def_property(srna, "selected_object", PROP_FLOAT, PROP_COLOR_GAMMA);
RNA_def_property_array(prop, 3);
RNA_def_property_ui_text(prop, "Selected Objects", "");
@@ -4089,6 +4095,12 @@ static void rna_def_userdef_view(BlenderRNA *brna)
"Show the frames per second screen refresh rate, while animation is played back");
RNA_def_property_update(prop, 0, "rna_userdef_update");
+ prop = RNA_def_property(srna, "show_addons_enabled_only", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", USER_ADDONS_ENABLED_ONLY);
+ RNA_def_property_ui_text(prop,
+ "Enabled Add-ons Only",
+ "Only show enabled add-ons. Un-check to see all installed add-ons");
+
static const EnumPropertyItem factor_display_items[] = {
{USER_FACTOR_AS_FACTOR, "FACTOR", 0, "Factor", "Display factors as values between 0 and 1"},
{USER_FACTOR_AS_PERCENTAGE, "PERCENTAGE", 0, "Percentage", "Display factors as percentages"},
@@ -4589,10 +4601,6 @@ static void rna_def_userdef_edit(BlenderRNA *brna)
"Grease Pencil Euclidean Distance",
"Distance moved by mouse when drawing stroke to include");
- 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");
-
prop = RNA_def_property(srna, "grease_pencil_eraser_radius", PROP_INT, PROP_PIXEL);
RNA_def_property_int_sdna(prop, NULL, "gp_eraser");
RNA_def_property_range(prop, 1, 500);
@@ -5230,6 +5238,20 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_struct_type(prop, "WalkNavigation");
RNA_def_property_ui_text(prop, "Walk Navigation", "Settings for walk navigation mode");
+ prop = RNA_def_property(srna, "view_rotate_sensitivity_turntable", PROP_FLOAT, PROP_ANGLE);
+ RNA_def_property_range(prop, DEG2RADF(0.001f), DEG2RADF(15.0f));
+ RNA_def_property_float_default(prop, DEG2RADF(0.4f));
+ RNA_def_property_ui_range(prop, DEG2RADF(0.001f), DEG2RADF(15.0f), 1.0f, 2);
+ RNA_def_property_ui_text(prop,
+ "Orbit Sensitivity",
+ "Rotation amount per-pixel to control how fast the viewport orbits");
+
+ prop = RNA_def_property(srna, "view_rotate_sensitivity_trackball", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, 0.1f, 10.0f);
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_ui_range(prop, 0.1f, 2.0f, 0.01f, 2);
+ RNA_def_property_ui_text(prop, "Orbit Sensitivity", "Scale trackball orbit sensitivity");
+
/* tweak tablet & mouse preset */
prop = RNA_def_property(srna, "drag_threshold_mouse", PROP_INT, PROP_PIXEL);
RNA_def_property_range(prop, 1, 255);
@@ -5809,7 +5831,10 @@ void RNA_def_userdef(BlenderRNA *brna)
/* Preferences Flags */
prop = RNA_def_property(srna, "use_preferences_save", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "pref_flag", USER_PREF_FLAG_SAVE);
- RNA_def_property_ui_text(prop, "Save on Exit", "Save modified preferences on exit");
+ RNA_def_property_ui_text(prop,
+ "Save on Exit",
+ "Save preferences on exit when modified "
+ "(unless factory settings have been loaded)");
prop = RNA_def_property(srna, "is_dirty", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "runtime.is_dirty", 0);
diff --git a/source/blender/makesrna/intern/rna_vfont.c b/source/blender/makesrna/intern/rna_vfont.c
index cf61fe07c68..3e96b5816e5 100644
--- a/source/blender/makesrna/intern/rna_vfont.c
+++ b/source/blender/makesrna/intern/rna_vfont.c
@@ -40,7 +40,7 @@
/* matching fnction in rna_ID.c */
static int rna_VectorFont_filepath_editable(PointerRNA *ptr, const char **UNUSED(r_info))
{
- VFont *vfont = ptr->id.data;
+ VFont *vfont = (VFont *)ptr->owner_id;
if (BKE_vfont_is_builtin(vfont)) {
return 0;
}
@@ -51,7 +51,7 @@ static void rna_VectorFont_reload_update(Main *UNUSED(bmain),
Scene *UNUSED(scene),
PointerRNA *ptr)
{
- VFont *vf = ptr->id.data;
+ VFont *vf = (VFont *)ptr->owner_id;
BKE_vfont_free_data(vf);
/* update */
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 1edda29a556..c3ffeaf6f6f 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -530,7 +530,7 @@ const EnumPropertyItem rna_enum_wm_report_items[] = {
static wmOperator *rna_OperatorProperties_find_operator(PointerRNA *ptr)
{
- wmWindowManager *wm = ptr->id.data;
+ wmWindowManager *wm = (wmWindowManager *)ptr->owner_id;
if (wm) {
IDProperty *properties = (IDProperty *)ptr->data;
@@ -668,7 +668,7 @@ static PointerRNA rna_PopupMenu_layout_get(PointerRNA *ptr)
uiLayout *layout = UI_popup_menu_layout(pup);
PointerRNA rptr;
- RNA_pointer_create(ptr->id.data, &RNA_UILayout, layout, &rptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_UILayout, layout, &rptr);
return rptr;
}
@@ -679,7 +679,7 @@ static PointerRNA rna_PopoverMenu_layout_get(PointerRNA *ptr)
uiLayout *layout = UI_popover_layout(pup);
PointerRNA rptr;
- RNA_pointer_create(ptr->id.data, &RNA_UILayout, layout, &rptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_UILayout, layout, &rptr);
return rptr;
}
@@ -690,7 +690,7 @@ static PointerRNA rna_PieMenu_layout_get(PointerRNA *ptr)
uiLayout *layout = UI_pie_menu_layout(pie);
PointerRNA rptr;
- RNA_pointer_create(ptr->id.data, &RNA_UILayout, layout, &rptr);
+ RNA_pointer_create(ptr->owner_id, &RNA_UILayout, layout, &rptr);
return rptr;
}
@@ -804,7 +804,7 @@ static void rna_Window_screen_set(PointerRNA *ptr,
static bool rna_Window_screen_assign_poll(PointerRNA *UNUSED(ptr), PointerRNA value)
{
- bScreen *screen = value.id.data;
+ bScreen *screen = (bScreen *)value.owner_id;
return !screen->temp;
}
@@ -1514,8 +1514,10 @@ static StructRNA *rna_Operator_register(Main *bmain,
/* create a new operator type */
dummyot.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummyot.idname, &RNA_Operator);
- RNA_def_struct_flag(dummyot.ext.srna,
- STRUCT_NO_IDPROPERTIES); /* operator properties are registered separately */
+
+ /* Operator properties are registered separately. */
+ RNA_def_struct_flag(dummyot.ext.srna, STRUCT_NO_IDPROPERTIES);
+
RNA_def_struct_property_tags(dummyot.ext.srna, rna_enum_operator_property_tags);
RNA_def_struct_translation_context(dummyot.ext.srna, dummyot.translation_context);
dummyot.ext.data = data;
diff --git a/source/blender/makesrna/intern/rna_wm_gizmo.c b/source/blender/makesrna/intern/rna_wm_gizmo.c
index 38b6ac9ac52..ba26929d808 100644
--- a/source/blender/makesrna/intern/rna_wm_gizmo.c
+++ b/source/blender/makesrna/intern/rna_wm_gizmo.c
@@ -252,7 +252,7 @@ static void rna_Gizmo_update_redraw(Main *UNUSED(bmain), Scene *UNUSED(scene), P
static wmGizmo *rna_GizmoProperties_find_operator(PointerRNA *ptr)
{
# if 0
- wmWindowManager *wm = ptr->id.data;
+ wmWindowManager *wm = (wmWindowManager *)ptr->owner_id;
# endif
/* We could try workaruond this lookup, but not trivial. */
@@ -870,9 +870,10 @@ static StructRNA *rna_GizmoGroup_register(Main *bmain,
/* create a new gizmogroup type */
dummywgt.ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, dummywgt.idname, &RNA_GizmoGroup);
- RNA_def_struct_flag(
- dummywgt.ext.srna,
- STRUCT_NO_IDPROPERTIES); /* gizmogroup properties are registered separately */
+
+ /* Gizmo group properties are registered separately. */
+ RNA_def_struct_flag(dummywgt.ext.srna, STRUCT_NO_IDPROPERTIES);
+
dummywgt.ext.data = data;
dummywgt.ext.call = call;
dummywgt.ext.free = free;
diff --git a/source/blender/makesrna/intern/rna_wm_gizmo_api.c b/source/blender/makesrna/intern/rna_wm_gizmo_api.c
index f7335572a14..bc6c2e8a796 100644
--- a/source/blender/makesrna/intern/rna_wm_gizmo_api.c
+++ b/source/blender/makesrna/intern/rna_wm_gizmo_api.c
@@ -90,7 +90,7 @@ static void rna_gizmo_target_set_prop(wmGizmo *gz,
RPT_ERROR,
"Property '%s.%s' not found",
RNA_struct_identifier(ptr->type),
- target_propname);
+ propname);
return;
}
diff --git a/source/blender/makesrna/intern/rna_workspace.c b/source/blender/makesrna/intern/rna_workspace.c
index 6349b5206d6..47138653af1 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -58,7 +58,7 @@ static void rna_window_update_all(Main *UNUSED(bmain),
void rna_workspace_screens_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
{
- WorkSpace *workspace = ptr->id.data;
+ WorkSpace *workspace = (WorkSpace *)ptr->owner_id;
rna_iterator_listbase_begin(iter, BKE_workspace_layouts_get(workspace), NULL);
}
diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c
index 9b5611f30d7..07db2755523 100644
--- a/source/blender/makesrna/intern/rna_world.c
+++ b/source/blender/makesrna/intern/rna_world.c
@@ -48,17 +48,17 @@
static PointerRNA rna_World_lighting_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_WorldLighting, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_WorldLighting, ptr->owner_id);
}
static PointerRNA rna_World_mist_get(PointerRNA *ptr)
{
- return rna_pointer_inherit_refine(ptr, &RNA_WorldMistSettings, ptr->id.data);
+ return rna_pointer_inherit_refine(ptr, &RNA_WorldMistSettings, ptr->owner_id);
}
static void rna_World_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- World *wo = ptr->id.data;
+ World *wo = (World *)ptr->owner_id;
DEG_id_tag_update(&wo->id, 0);
WM_main_add_notifier(NC_WORLD | ND_WORLD, wo);
@@ -67,7 +67,7 @@ static void rna_World_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerR
# if 0
static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- World *wo = ptr->id.data;
+ World *wo = (World *)ptr->owner_id;
DEG_id_tag_update(&wo->id, 0);
WM_main_add_notifier(NC_WORLD | ND_WORLD_DRAW, wo);
@@ -76,7 +76,7 @@ static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), Poi
static void rna_World_draw_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
- World *wo = ptr->id.data;
+ World *wo = (World *)ptr->owner_id;
DEG_id_tag_update(&wo->id, 0);
WM_main_add_notifier(NC_WORLD | ND_WORLD_DRAW, wo);
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index 72215659915..522b387411b 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -79,7 +79,12 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
{
ArmatureModifierData *amd = (ArmatureModifierData *)md;
- return !amd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the armature is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !amd->object || amd->object->type != OB_ARMATURE;
}
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
diff --git a/source/blender/modifiers/intern/MOD_array.c b/source/blender/modifiers/intern/MOD_array.c
index fd6f58a21d4..48718a47419 100644
--- a/source/blender/modifiers/intern/MOD_array.c
+++ b/source/blender/modifiers/intern/MOD_array.c
@@ -395,7 +395,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
count = amd->count;
Object *start_cap_ob = amd->start_cap;
- if (start_cap_ob && start_cap_ob != ctx->object && start_cap_ob->type == OB_MESH) {
+ if (start_cap_ob && start_cap_ob != ctx->object) {
vgroup_start_cap_remap = BKE_object_defgroup_index_map_create(
start_cap_ob, ctx->object, &vgroup_start_cap_remap_len);
@@ -408,7 +408,7 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
}
}
Object *end_cap_ob = amd->end_cap;
- if (end_cap_ob && end_cap_ob != ctx->object && end_cap_ob->type == OB_MESH) {
+ if (end_cap_ob && end_cap_ob != ctx->object) {
vgroup_end_cap_remap = BKE_object_defgroup_index_map_create(
end_cap_ob, ctx->object, &vgroup_end_cap_remap_len);
@@ -465,13 +465,10 @@ static Mesh *arrayModifier_doArray(ArrayModifierData *amd,
if (amd->fit_type == MOD_ARR_FITCURVE && amd->curve_ob != NULL) {
Object *curve_ob = amd->curve_ob;
- Curve *cu = curve_ob->data;
- if (cu) {
- CurveCache *curve_cache = curve_ob->runtime.curve_cache;
- if (curve_cache != NULL && curve_cache->path != NULL) {
- float scale_fac = mat4_to_scale(curve_ob->obmat);
- length = scale_fac * curve_cache->path->totdist;
- }
+ CurveCache *curve_cache = curve_ob->runtime.curve_cache;
+ if (curve_cache != NULL && curve_cache->path != NULL) {
+ float scale_fac = mat4_to_scale(curve_ob->obmat);
+ length = scale_fac * curve_cache->path->totdist;
}
}
@@ -769,6 +766,31 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
return arrayModifier_doArray(amd, ctx, mesh);
}
+static bool isDisabled(const struct Scene *UNUSED(scene),
+ ModifierData *md,
+ bool UNUSED(useRenderParams))
+{
+ ArrayModifierData *amd = (ArrayModifierData *)md;
+
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the curve/mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+
+ if (amd->curve_ob && amd->curve_ob->type != OB_CURVE) {
+ return true;
+ }
+ else if (amd->start_cap && amd->start_cap->type != OB_MESH) {
+ return true;
+ }
+ else if (amd->end_cap && amd->end_cap->type != OB_MESH) {
+ return true;
+ }
+
+ return false;
+}
+
ModifierTypeInfo modifierType_Array = {
/* name */ "Array",
/* structName */ "ArrayModifierData",
@@ -789,7 +811,7 @@ ModifierTypeInfo modifierType_Array = {
/* initData */ initData,
/* requiredDataMask */ NULL,
/* freeData */ NULL,
- /* isDisabled */ NULL,
+ /* isDisabled */ isDisabled,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index 309af4d4812..a05b7023392 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -214,8 +214,9 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL);
- BLI_assert(bm->vtoolflagpool == NULL && bm->etoolflagpool == NULL &&
- bm->ftoolflagpool == NULL); /* make sure we never alloc'd these */
+ /* Make sure we never alloc'd these. */
+ BLI_assert(bm->vtoolflagpool == NULL && bm->etoolflagpool == NULL && bm->ftoolflagpool == NULL);
+
BM_mesh_free(bm);
result->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c
index 107622e33c0..ea42ddb03f4 100644
--- a/source/blender/modifiers/intern/MOD_boolean.c
+++ b/source/blender/modifiers/intern/MOD_boolean.c
@@ -71,7 +71,12 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
{
BooleanModifierData *bmd = (BooleanModifierData *)md;
- return !bmd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !bmd->object || bmd->object->type != OB_MESH;
}
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
@@ -262,8 +267,9 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
BM_ITER_MESH (efa, &iter, bm, BM_FACES_OF_MESH) {
mul_transposed_m3_v3(nmat, efa->no);
normalize_v3(efa->no);
- BM_elem_flag_enable(
- efa, BM_FACE_TAG); /* temp tag to test which side split faces are from */
+
+ /* Temp tag to test which side split faces are from. */
+ BM_elem_flag_enable(efa, BM_FACE_TAG);
/* remap material */
if (LIKELY(efa->mat_nr < ob_src_totcol)) {
diff --git a/source/blender/modifiers/intern/MOD_cloth.c b/source/blender/modifiers/intern/MOD_cloth.c
index 1a6d172d2f9..cc91e345c8f 100644
--- a/source/blender/modifiers/intern/MOD_cloth.c
+++ b/source/blender/modifiers/intern/MOD_cloth.c
@@ -114,7 +114,7 @@ static void deformVerts(ModifierData *md,
}
}
- BKE_mesh_apply_vert_coords(mesh_src, vertexCos);
+ BKE_mesh_vert_coords_apply(mesh_src, vertexCos);
clothModifier_do(clmd, ctx->depsgraph, scene, ctx->object, mesh_src, vertexCos);
diff --git a/source/blender/modifiers/intern/MOD_collision.c b/source/blender/modifiers/intern/MOD_collision.c
index 1bbc25643a1..3d43c6de88e 100644
--- a/source/blender/modifiers/intern/MOD_collision.c
+++ b/source/blender/modifiers/intern/MOD_collision.c
@@ -120,7 +120,7 @@ static void deformVerts(ModifierData *md,
float current_time = 0;
unsigned int mvert_num = 0;
- BKE_mesh_apply_vert_coords(mesh_src, vertexCos);
+ BKE_mesh_vert_coords_apply(mesh_src, vertexCos);
BKE_mesh_calc_normals(mesh_src);
current_time = DEG_get_ctime(ctx->depsgraph);
diff --git a/source/blender/modifiers/intern/MOD_correctivesmooth.c b/source/blender/modifiers/intern/MOD_correctivesmooth.c
index 3df66855376..a234f468e45 100644
--- a/source/blender/modifiers/intern/MOD_correctivesmooth.c
+++ b/source/blender/modifiers/intern/MOD_correctivesmooth.c
@@ -307,7 +307,7 @@ static void smooth_iter__length_weight(CorrectiveSmoothModifierData *csmd,
/* fast-path */
for (i = 0; i < numVerts; i++) {
struct SmoothingData_Weighted *sd = &smooth_data[i];
- /* Divide by sum of all neighbour distances (weighted) and amount of neighbors,
+ /* Divide by sum of all neighbor distances (weighted) and amount of neighbors,
* (mean average). */
const float div = sd->edge_length_sum * vertex_edge_count[i];
if (div > eps) {
@@ -635,12 +635,12 @@ static void correctivesmooth_modifier_do(ModifierData *md,
if (csmd->rest_source == MOD_CORRECTIVESMOOTH_RESTSOURCE_BIND) {
/* caller needs to do sanity check here */
csmd->bind_coords_num = numVerts;
- rest_coords = (const float(*)[3])csmd->bind_coords;
+ rest_coords = csmd->bind_coords;
}
else {
int me_numVerts;
- rest_coords = (const float(*)[3])((em) ? BKE_editmesh_vertexCos_get_orco(em, &me_numVerts) :
- BKE_mesh_vertexCos_get(ob->data, &me_numVerts));
+ rest_coords = em ? BKE_editmesh_vert_coords_alloc_orco(em, &me_numVerts) :
+ BKE_mesh_vert_coords_alloc(ob->data, &me_numVerts);
BLI_assert((unsigned int)me_numVerts == numVerts);
is_rest_coords_alloc = true;
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index 7a07d9b28eb..bedd6e519eb 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -66,7 +66,12 @@ static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, bool UNUSED
{
CurveModifierData *cmd = (CurveModifierData *)md;
- return !cmd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the curve is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !cmd->object || cmd->object->type != OB_CURVE;
}
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
diff --git a/source/blender/modifiers/intern/MOD_datatransfer.c b/source/blender/modifiers/intern/MOD_datatransfer.c
index c994a680fb0..fa60bd2a502 100644
--- a/source/blender/modifiers/intern/MOD_datatransfer.c
+++ b/source/blender/modifiers/intern/MOD_datatransfer.c
@@ -141,9 +141,14 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
ModifierData *md,
bool UNUSED(useRenderParams))
{
- DataTransferModifierData *dtmd = (DataTransferModifierData *)md;
/* If no source object, bypass. */
- return (dtmd->ob_source == NULL);
+ DataTransferModifierData *dtmd = (DataTransferModifierData *)md;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !dtmd->ob_source || dtmd->ob_source->type != OB_MESH;
}
#define HIGH_POLY_WARNING 10000
diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.c b/source/blender/modifiers/intern/MOD_fluidsim_util.c
index 3083d89d555..587aa108fd1 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim_util.c
+++ b/source/blender/modifiers/intern/MOD_fluidsim_util.c
@@ -290,7 +290,7 @@ static Mesh *fluidsim_read_obj(const char *filename, const MPoly *mp_example)
gzclose(gzf);
BKE_mesh_calc_edges(mesh, false, false);
- BKE_mesh_apply_vert_normals(mesh, (short(*)[3])normals);
+ BKE_mesh_vert_normals_apply(mesh, (short(*)[3])normals);
MEM_freeN(normals);
// CDDM_calc_normals(result);
diff --git a/source/blender/modifiers/intern/MOD_fluidsim_util.h b/source/blender/modifiers/intern/MOD_fluidsim_util.h
index 0d2be3e7074..da70568353e 100644
--- a/source/blender/modifiers/intern/MOD_fluidsim_util.h
+++ b/source/blender/modifiers/intern/MOD_fluidsim_util.h
@@ -27,8 +27,6 @@
struct FluidsimModifierData;
struct Mesh;
struct ModifierEvalContext;
-struct Object;
-struct Scene;
/* new fluid-modifier interface */
void fluidsim_init(struct FluidsimModifierData *fluidmd);
diff --git a/source/blender/modifiers/intern/MOD_hook.c b/source/blender/modifiers/intern/MOD_hook.c
index c12fb9c1bd8..2f902db9340 100644
--- a/source/blender/modifiers/intern/MOD_hook.c
+++ b/source/blender/modifiers/intern/MOD_hook.c
@@ -49,7 +49,7 @@ static void initData(ModifierData *md)
HookModifierData *hmd = (HookModifierData *)md;
hmd->force = 1.0;
- hmd->curfalloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ hmd->curfalloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
hmd->falloff_type = eHook_Falloff_Smooth;
hmd->flag = 0;
}
@@ -61,7 +61,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
modifier_copyData_generic(md, target, flag);
- thmd->curfalloff = curvemapping_copy(hmd->curfalloff);
+ thmd->curfalloff = BKE_curvemapping_copy(hmd->curfalloff);
thmd->indexar = MEM_dupallocN(hmd->indexar);
}
@@ -88,7 +88,7 @@ static void freeData(ModifierData *md)
{
HookModifierData *hmd = (HookModifierData *)md;
- curvemapping_free(hmd->curfalloff);
+ BKE_curvemapping_free(hmd->curfalloff);
MEM_SAFE_FREE(hmd->indexar);
}
@@ -174,7 +174,7 @@ static float hook_falloff(const struct HookData_cb *hd, const float len_sq)
break;
#endif
case eHook_Falloff_Curve:
- fac = curvemapping_evaluateF(hd->curfalloff, 0, fac);
+ fac = BKE_curvemapping_evaluateF(hd->curfalloff, 0, fac);
break;
case eHook_Falloff_Sharp:
fac = fac * fac;
@@ -262,11 +262,11 @@ static void deformVerts_do(HookModifierData *hmd,
if (hmd->curfalloff == NULL) {
/* should never happen, but bad lib linking could cause it */
- hmd->curfalloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ hmd->curfalloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
if (hmd->curfalloff) {
- curvemapping_initialize(hmd->curfalloff);
+ BKE_curvemapping_initialize(hmd->curfalloff);
}
/* Generic data needed for applying per-vertex calculations (initialize all members) */
diff --git a/source/blender/modifiers/intern/MOD_laplaciandeform.c b/source/blender/modifiers/intern/MOD_laplaciandeform.c
index abb4c5cae32..c9e0171c9f2 100644
--- a/source/blender/modifiers/intern/MOD_laplaciandeform.c
+++ b/source/blender/modifiers/intern/MOD_laplaciandeform.c
@@ -233,7 +233,7 @@ static void createVertRingMap(const int mvert_tot,
*
* This Laplacian Matrix is described in the paper:
* Desbrun M. et.al, Implicit fairing of irregular meshes using diffusion and curvature flow,
- * SIGGRAPH '99, pag 317-324, New York, USA
+ * SIGGRAPH '99, page 317-324, New York, USA
*
* The computation of Laplace Beltrami operator on Hybrid Triangle/Quad Meshes is described in the
* paper: Pinzon A., Romero E., Shape Inflation With an Adapted Laplacian Operator For
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index b639e874a88..aca5b43a7d5 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -64,7 +64,12 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
{
LatticeModifierData *lmd = (LatticeModifierData *)md;
- return !lmd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the lattice is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !lmd->object || lmd->object->type != OB_LATTICE;
}
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
diff --git a/source/blender/modifiers/intern/MOD_mask.c b/source/blender/modifiers/intern/MOD_mask.c
index 3417aaeeb5c..bc218114432 100644
--- a/source/blender/modifiers/intern/MOD_mask.c
+++ b/source/blender/modifiers/intern/MOD_mask.c
@@ -138,10 +138,10 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
return mesh;
}
- /* Determine whether each vertexgroup is associated with a selected bone or not:
- * - Each cell is a boolean saying whether bone corresponding to the ith group is selected.
+ /* Determine whether each vertex-group is associated with a selected bone or not:
+ * - Each cell is a boolean saying whether bone corresponding to the i'th group selected.
* - Groups that don't match a bone are treated as not existing
- * (along with the corresponding ungrouped verts).
+ * (along with the corresponding un-grouped verts).
*/
bone_select_array = MEM_malloc_arrayN((size_t)defbase_tot, sizeof(char), "mask array");
@@ -344,6 +344,20 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
return result;
}
+static bool isDisabled(const struct Scene *UNUSED(scene),
+ ModifierData *md,
+ bool UNUSED(useRenderParams))
+{
+ MaskModifierData *mmd = (MaskModifierData *)md;
+
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the armature is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return mmd->ob_arm && mmd->ob_arm->type != OB_ARMATURE;
+}
+
ModifierTypeInfo modifierType_Mask = {
/* name */ "Mask",
/* structName */ "MaskModifierData",
@@ -363,7 +377,7 @@ ModifierTypeInfo modifierType_Mask = {
/* initData */ NULL,
/* requiredDataMask */ requiredDataMask,
/* freeData */ NULL,
- /* isDisabled */ NULL,
+ /* isDisabled */ isDisabled,
/* updateDepsgraph */ updateDepsgraph,
/* dependsOnTime */ NULL,
/* dependsOnNormals */ NULL,
diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c
index da261b4f835..7ddce983c2a 100644
--- a/source/blender/modifiers/intern/MOD_meshdeform.c
+++ b/source/blender/modifiers/intern/MOD_meshdeform.c
@@ -139,7 +139,12 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
{
MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
- return !mmd->object;
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return !mmd->object || mmd->object->type != OB_MESH;
}
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
@@ -401,7 +406,7 @@ static void meshdeformModifier_do(ModifierData *md,
}
/* setup deformation data */
- cagecos = BKE_mesh_vertexCos_get(cagemesh, NULL);
+ cagecos = BKE_mesh_vert_coords_alloc(cagemesh, NULL);
bindcagecos = (float(*)[3])mmd->bindcagecos;
/* We allocate 1 element extra to make it possible to
diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.c b/source/blender/modifiers/intern/MOD_meshsequencecache.c
index 760830ffb24..0f57b759e38 100644
--- a/source/blender/modifiers/intern/MOD_meshsequencecache.c
+++ b/source/blender/modifiers/intern/MOD_meshsequencecache.c
@@ -114,10 +114,20 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
}
}
+ /* If this invocation is for the ORCO mesh, and the mesh in Alembic hasn't changed topology, we
+ * must return the mesh as-is instead of deforming it. */
+ if (ctx->flag & MOD_APPLY_ORCO &&
+ !ABC_mesh_topology_changed(mcmd->reader, ctx->object, mesh, time, &err_str)) {
+ return mesh;
+ }
+
if (me != NULL) {
MVert *mvert = mesh->mvert;
MEdge *medge = mesh->medge;
MPoly *mpoly = mesh->mpoly;
+
+ /* TODO(sybren+bastien): possibly check relevant custom data layers (UV/color depending on
+ * flags) and duplicate those too. */
if ((me->mvert == mvert) || (me->medge == medge) || (me->mpoly == mpoly)) {
/* We need to duplicate data here, otherwise we'll modify org mesh, see T51701. */
BKE_id_copy_ex(NULL,
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index 71913378277..01f1aeffdb2 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -80,7 +80,12 @@ static bool isDisabled(const struct Scene *scene, ModifierData *md, bool useRend
ParticleSystem *psys;
ModifierData *ob_md;
- if (!pimd->ob) {
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ if (!pimd->ob || pimd->ob->type != OB_MESH) {
return true;
}
diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c
index 021e61bd46d..a7c7c207cd6 100644
--- a/source/blender/modifiers/intern/MOD_particlesystem.c
+++ b/source/blender/modifiers/intern/MOD_particlesystem.c
@@ -152,7 +152,7 @@ static void deformVerts(ModifierData *md,
/* make new mesh */
psmd->mesh_final = BKE_mesh_copy_for_eval(mesh_src, false);
- BKE_mesh_apply_vert_coords(psmd->mesh_final, vertexCos);
+ BKE_mesh_vert_coords_apply(psmd->mesh_final, vertexCos);
BKE_mesh_calc_normals(psmd->mesh_final);
BKE_mesh_tessface_ensure(psmd->mesh_final);
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index 23da1ec2754..631401d9d9e 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -105,7 +105,7 @@ static void dualcon_add_vert(void *output_v, const float co[3])
DualConOutput *output = output_v;
Mesh *mesh = output->mesh;
- assert(output->curvert < mesh->totvert);
+ BLI_assert(output->curvert < mesh->totvert);
copy_v3_v3(mesh->mvert[output->curvert].co, co);
output->curvert++;
@@ -119,7 +119,7 @@ static void dualcon_add_quad(void *output_v, const int vert_indices[4])
MPoly *cur_poly;
int i;
- assert(output->curface < mesh->totpoly);
+ BLI_assert(output->curface < mesh->totpoly);
mloop = mesh->mloop;
cur_poly = &mesh->mpoly[output->curface];
diff --git a/source/blender/modifiers/intern/MOD_screw.c b/source/blender/modifiers/intern/MOD_screw.c
index 64f5f14eaa8..ac47422fe2f 100644
--- a/source/blender/modifiers/intern/MOD_screw.c
+++ b/source/blender/modifiers/intern/MOD_screw.c
@@ -491,7 +491,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
* extra space by abusing the vert array before its filled with new verts.
* The new array for vert_connect must be at least sizeof(ScrewVertConnect) * totvert
* and the size of our resulting meshes array is sizeof(MVert) * totvert * 3
- * so its safe to use the second 2 thrids of MVert the array for vert_connect,
+ * so its safe to use the second 2 thirds of MVert the array for vert_connect,
* just make sure ScrewVertConnect struct is no more than twice as big as MVert,
* at the moment there is no chance of that being a problem,
* unless MVert becomes half its current size.
diff --git a/source/blender/modifiers/intern/MOD_shrinkwrap.c b/source/blender/modifiers/intern/MOD_shrinkwrap.c
index 07182d82fdc..408ec06a49c 100644
--- a/source/blender/modifiers/intern/MOD_shrinkwrap.c
+++ b/source/blender/modifiers/intern/MOD_shrinkwrap.c
@@ -75,7 +75,19 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
bool UNUSED(useRenderParams))
{
ShrinkwrapModifierData *smd = (ShrinkwrapModifierData *)md;
- return !smd->target;
+
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ if (!smd->target || smd->target->type != OB_MESH) {
+ return true;
+ }
+ else if (smd->auxTarget && smd->auxTarget->type != OB_MESH) {
+ return true;
+ }
+ return false;
}
static void foreachObjectLink(ModifierData *md, Object *ob, ObjectWalkFunc walk, void *userData)
diff --git a/source/blender/modifiers/intern/MOD_simpledeform.c b/source/blender/modifiers/intern/MOD_simpledeform.c
index 8d511207b9b..d10d74da453 100644
--- a/source/blender/modifiers/intern/MOD_simpledeform.c
+++ b/source/blender/modifiers/intern/MOD_simpledeform.c
@@ -351,10 +351,8 @@ static void SimpleDeformModifier_do(SimpleDeformModifierData *smd,
simpleDeform_callback(smd_factor, deform_axis, dcut_remap, co_remap); /* apply deform */
copy_v3_v3_unmap(co, co_remap, axis_map);
- interp_v3_v3v3(vertexCos[i],
- vertexCos[i],
- co,
- weight); /* Use vertex weight has coef of linear interpolation */
+ /* Use vertex weight has coef of linear interpolation */
+ interp_v3_v3v3(vertexCos[i], vertexCos[i], co, weight);
if (transf) {
BLI_space_transform_invert(transf, vertexCos[i]);
diff --git a/source/blender/modifiers/intern/MOD_surface.c b/source/blender/modifiers/intern/MOD_surface.c
index dcc6371e024..840914aa313 100644
--- a/source/blender/modifiers/intern/MOD_surface.c
+++ b/source/blender/modifiers/intern/MOD_surface.c
@@ -130,7 +130,7 @@ static void deformVerts(ModifierData *md,
float *vec;
MVert *x, *v;
- BKE_mesh_apply_vert_coords(surmd->mesh, vertexCos);
+ BKE_mesh_vert_coords_apply(surmd->mesh, vertexCos);
BKE_mesh_calc_normals(surmd->mesh);
numverts = surmd->mesh->totvert;
diff --git a/source/blender/modifiers/intern/MOD_surfacedeform.c b/source/blender/modifiers/intern/MOD_surfacedeform.c
index c428325e42b..93196ea21fb 100644
--- a/source/blender/modifiers/intern/MOD_surfacedeform.c
+++ b/source/blender/modifiers/intern/MOD_surfacedeform.c
@@ -1279,7 +1279,13 @@ static bool isDisabled(const Scene *UNUSED(scene), ModifierData *md, bool UNUSED
{
SurfaceDeformModifierData *smd = (SurfaceDeformModifierData *)md;
- return smd->target == NULL && !(smd->verts != NULL && !(smd->flags & MOD_SDEF_BIND));
+ /* The object type check is only needed here in case we have a placeholder
+ * object assigned (because the library containing the mesh is missing).
+ *
+ * In other cases it should be impossible to have a type missmatch.
+ */
+ return (smd->target == NULL || smd->target->type != OB_MESH) &&
+ !(smd->verts != NULL && !(smd->flags & MOD_SDEF_BIND));
}
ModifierTypeInfo modifierType_SurfaceDeform = {
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 998a2b1cd65..e7acbd3e32e 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -198,7 +198,7 @@ Mesh *MOD_deform_mesh_eval_get(Object *ob,
/* TODO(sybren): after modifier conversion of DM to Mesh is done, check whether
* we really need vertexCos here. */
if (vertexCos) {
- BKE_mesh_apply_vert_coords(mesh, vertexCos);
+ BKE_mesh_vert_coords_apply(mesh, vertexCos);
mesh->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
}
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index ba3ca44c026..e1991de3bb8 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -31,8 +31,6 @@ struct Mesh;
struct ModifierData;
struct ModifierEvalContext;
struct Object;
-struct Scene;
-struct Tex;
void MOD_init_texture(struct MappingInfoModifierData *dmd, const struct ModifierEvalContext *ctx);
void MOD_get_texture_coords(struct MappingInfoModifierData *dmd,
diff --git a/source/blender/modifiers/intern/MOD_uvproject.c b/source/blender/modifiers/intern/MOD_uvproject.c
index f9eb92cd132..5f1eae0297a 100644
--- a/source/blender/modifiers/intern/MOD_uvproject.c
+++ b/source/blender/modifiers/intern/MOD_uvproject.c
@@ -204,7 +204,7 @@ static Mesh *uvprojectModifier_do(UVProjectModifierData *umd,
mloop_uv = CustomData_duplicate_referenced_layer_named(
&mesh->ldata, CD_MLOOPUV, uvname, numLoops);
- coords = BKE_mesh_vertexCos_get(mesh, &numVerts);
+ coords = BKE_mesh_vert_coords_alloc(mesh, &numVerts);
/* convert coords to world space */
for (i = 0, co = coords; i < numVerts; ++i, ++co) {
diff --git a/source/blender/modifiers/intern/MOD_warp.c b/source/blender/modifiers/intern/MOD_warp.c
index 6441ab69391..7155498c942 100644
--- a/source/blender/modifiers/intern/MOD_warp.c
+++ b/source/blender/modifiers/intern/MOD_warp.c
@@ -50,7 +50,7 @@ static void initData(ModifierData *md)
{
WarpModifierData *wmd = (WarpModifierData *)md;
- wmd->curfalloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ wmd->curfalloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
wmd->texture = NULL;
wmd->strength = 1.0f;
wmd->falloff_radius = 1.0f;
@@ -65,7 +65,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
modifier_copyData_generic(md, target, flag);
- twmd->curfalloff = curvemapping_copy(wmd->curfalloff);
+ twmd->curfalloff = BKE_curvemapping_copy(wmd->curfalloff);
}
static void requiredDataMask(Object *UNUSED(ob),
@@ -100,7 +100,7 @@ static bool dependsOnTime(ModifierData *md)
static void freeData(ModifierData *md)
{
WarpModifierData *wmd = (WarpModifierData *)md;
- curvemapping_free(wmd->curfalloff);
+ BKE_curvemapping_free(wmd->curfalloff);
}
static bool isDisabled(const struct Scene *UNUSED(scene),
@@ -188,11 +188,11 @@ static void warpModifier_do(WarpModifierData *wmd,
}
if (wmd->curfalloff == NULL) { /* should never happen, but bad lib linking could cause it */
- wmd->curfalloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ wmd->curfalloff = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
if (wmd->curfalloff) {
- curvemapping_initialize(wmd->curfalloff);
+ BKE_curvemapping_initialize(wmd->curfalloff);
}
invert_m4_m4(obinv, ob->obmat);
@@ -247,7 +247,7 @@ static void warpModifier_do(WarpModifierData *wmd,
fac = 1.0f;
break;
case eWarp_Falloff_Curve:
- fac = curvemapping_evaluateF(wmd->curfalloff, 0, fac);
+ fac = BKE_curvemapping_evaluateF(wmd->curfalloff, 0, fac);
break;
case eWarp_Falloff_Sharp:
fac = fac * fac;
diff --git a/source/blender/modifiers/intern/MOD_weightvg_util.c b/source/blender/modifiers/intern/MOD_weightvg_util.c
index 61872cbe464..486d5c90bef 100644
--- a/source/blender/modifiers/intern/MOD_weightvg_util.c
+++ b/source/blender/modifiers/intern/MOD_weightvg_util.c
@@ -72,7 +72,7 @@ void weightvg_do_map(int num, float *new_w, short falloff_type, CurveMapping *cm
}
if (cmap && falloff_type == MOD_WVG_MAPPING_CURVE) {
- curvemapping_initialize(cmap);
+ BKE_curvemapping_initialize(cmap);
}
/* Map each weight (vertex) to its new value, accordingly to the chosen mode. */
@@ -83,7 +83,7 @@ void weightvg_do_map(int num, float *new_w, short falloff_type, CurveMapping *cm
/* Closely matches PROP_SMOOTH and similar. */
switch (falloff_type) {
case MOD_WVG_MAPPING_CURVE:
- fac = curvemapping_evaluateF(cmap, 0, fac);
+ fac = BKE_curvemapping_evaluateF(cmap, 0, fac);
break;
case MOD_WVG_MAPPING_SHARP:
fac = fac * fac;
diff --git a/source/blender/modifiers/intern/MOD_weightvgedit.c b/source/blender/modifiers/intern/MOD_weightvgedit.c
index 207c5851602..045ba78fab5 100644
--- a/source/blender/modifiers/intern/MOD_weightvgedit.c
+++ b/source/blender/modifiers/intern/MOD_weightvgedit.c
@@ -57,8 +57,8 @@ static void initData(ModifierData *md)
wmd->falloff_type = MOD_WVG_MAPPING_NONE;
wmd->default_weight = 0.0f;
- wmd->cmap_curve = curvemapping_add(1, 0.0, 0.0, 1.0, 1.0);
- curvemapping_initialize(wmd->cmap_curve);
+ wmd->cmap_curve = BKE_curvemapping_add(1, 0.0, 0.0, 1.0, 1.0);
+ BKE_curvemapping_initialize(wmd->cmap_curve);
wmd->rem_threshold = 0.01f;
wmd->add_threshold = 0.01f;
@@ -71,7 +71,7 @@ static void initData(ModifierData *md)
static void freeData(ModifierData *md)
{
WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
- curvemapping_free(wmd->cmap_curve);
+ BKE_curvemapping_free(wmd->cmap_curve);
}
static void copyData(const ModifierData *md, ModifierData *target, const int flag)
@@ -81,7 +81,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
modifier_copyData_generic(md, target, flag);
- twmd->cmap_curve = curvemapping_copy(wmd->cmap_curve);
+ twmd->cmap_curve = BKE_curvemapping_copy(wmd->cmap_curve);
}
static void requiredDataMask(Object *UNUSED(ob),
diff --git a/source/blender/modifiers/intern/MOD_weightvgproximity.c b/source/blender/modifiers/intern/MOD_weightvgproximity.c
index 86d1b310d0c..95b15b4a924 100644
--- a/source/blender/modifiers/intern/MOD_weightvgproximity.c
+++ b/source/blender/modifiers/intern/MOD_weightvgproximity.c
@@ -492,7 +492,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
/* Get our vertex coordinates. */
if (numIdx != numVerts) {
- float(*tv_cos)[3] = BKE_mesh_vertexCos_get(mesh, NULL);
+ float(*tv_cos)[3] = BKE_mesh_vert_coords_alloc(mesh, NULL);
v_cos = MEM_malloc_arrayN(numIdx, sizeof(float[3]), "WeightVGProximity Modifier, v_cos");
for (i = 0; i < numIdx; i++) {
copy_v3_v3(v_cos[i], tv_cos[indices[i]]);
@@ -500,7 +500,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
MEM_freeN(tv_cos);
}
else {
- v_cos = BKE_mesh_vertexCos_get(mesh, NULL);
+ v_cos = BKE_mesh_vert_coords_alloc(mesh, NULL);
}
/* Compute wanted distances. */
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index 80afcada4b9..5cf5e1ac6d3 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -62,6 +62,7 @@ set(SRC
composite/nodes/node_composite_cryptomatte.c
composite/nodes/node_composite_curves.c
composite/nodes/node_composite_defocus.c
+ composite/nodes/node_composite_denoise.c
composite/nodes/node_composite_despeckle.c
composite/nodes/node_composite_diffMatte.c
composite/nodes/node_composite_dilate.c
@@ -147,6 +148,7 @@ set(SRC
shader/nodes/node_shader_bsdf_velvet.c
shader/nodes/node_shader_bump.c
shader/nodes/node_shader_camera.c
+ shader/nodes/node_shader_clamp.c
shader/nodes/node_shader_common.c
shader/nodes/node_shader_curves.c
shader/nodes/node_shader_displacement.c
@@ -163,6 +165,7 @@ set(SRC
shader/nodes/node_shader_layer_weight.c
shader/nodes/node_shader_light_falloff.c
shader/nodes/node_shader_light_path.c
+ shader/nodes/node_shader_map_range.c
shader/nodes/node_shader_mapping.c
shader/nodes/node_shader_math.c
shader/nodes/node_shader_mixRgb.c
@@ -197,14 +200,16 @@ set(SRC
shader/nodes/node_shader_tex_sky.c
shader/nodes/node_shader_tex_voronoi.c
shader/nodes/node_shader_tex_wave.c
+ shader/nodes/node_shader_tex_white_noise.c
shader/nodes/node_shader_uvAlongStroke.c
shader/nodes/node_shader_uvmap.c
shader/nodes/node_shader_valToRgb.c
shader/nodes/node_shader_value.c
- shader/nodes/node_shader_vectMath.c
+ shader/nodes/node_shader_vector_math.c
shader/nodes/node_shader_vectTransform.c
shader/nodes/node_shader_vector_displacement.c
shader/nodes/node_shader_volume_absorption.c
+ shader/nodes/node_shader_volume_info.c
shader/nodes/node_shader_volume_principled.c
shader/nodes/node_shader_volume_scatter.c
shader/nodes/node_shader_wavelength.c
diff --git a/source/blender/nodes/NOD_composite.h b/source/blender/nodes/NOD_composite.h
index e6d9ed6f70e..534e9012693 100644
--- a/source/blender/nodes/NOD_composite.h
+++ b/source/blender/nodes/NOD_composite.h
@@ -74,6 +74,7 @@ void register_node_type_cmp_dilateerode(void);
void register_node_type_cmp_inpaint(void);
void register_node_type_cmp_despeckle(void);
void register_node_type_cmp_defocus(void);
+void register_node_type_cmp_denoise(void);
void register_node_type_cmp_valtorgb(void);
void register_node_type_cmp_rgbtobw(void);
diff --git a/source/blender/nodes/NOD_shader.h b/source/blender/nodes/NOD_shader.h
index ead42779bc0..30673e7cd31 100644
--- a/source/blender/nodes/NOD_shader.h
+++ b/source/blender/nodes/NOD_shader.h
@@ -48,6 +48,8 @@ void register_node_type_sh_brightcontrast(void);
void register_node_type_sh_mapping(void);
void register_node_type_sh_curve_vec(void);
void register_node_type_sh_curve_rgb(void);
+void register_node_type_sh_map_range(void);
+void register_node_type_sh_clamp(void);
void register_node_type_sh_math(void);
void register_node_type_sh_vect_math(void);
void register_node_type_sh_squeeze(void);
@@ -79,6 +81,7 @@ void register_node_type_sh_layer_weight(void);
void register_node_type_sh_tex_coord(void);
void register_node_type_sh_particle_info(void);
void register_node_type_sh_hair_info(void);
+void register_node_type_sh_volume_info(void);
void register_node_type_sh_script(void);
void register_node_type_sh_normal_map(void);
void register_node_type_sh_tangent(void);
@@ -129,6 +132,7 @@ void register_node_type_sh_tex_noise(void);
void register_node_type_sh_tex_checker(void);
void register_node_type_sh_bump(void);
void register_node_type_sh_tex_ies(void);
+void register_node_type_sh_tex_white_noise(void);
void register_node_type_sh_custom_group(bNodeType *ntype);
diff --git a/source/blender/nodes/NOD_static_types.h b/source/blender/nodes/NOD_static_types.h
index f27c50ae736..d14511504f0 100644
--- a/source/blender/nodes/NOD_static_types.h
+++ b/source/blender/nodes/NOD_static_types.h
@@ -50,8 +50,10 @@ DefNode(ShaderNode, SH_NODE_MAPPING, def_sh_mapping, "MAPPIN
DefNode(ShaderNode, SH_NODE_CURVE_VEC, def_vector_curve, "CURVE_VEC", VectorCurve, "Vector Curves", "" )
DefNode(ShaderNode, SH_NODE_CURVE_RGB, def_rgb_curve, "CURVE_RGB", RGBCurve, "RGB Curves", "" )
DefNode(ShaderNode, SH_NODE_CAMERA, 0, "CAMERA", CameraData, "Camera Data", "" )
+DefNode(ShaderNode, SH_NODE_MAP_RANGE, def_map_range, "MAP_RANGE", MapRange, "Map Range", "" )
+DefNode(ShaderNode, SH_NODE_CLAMP, 0, "CLAMP", Clamp, "Clamp", "" )
DefNode(ShaderNode, SH_NODE_MATH, def_math, "MATH", Math, "Math", "" )
-DefNode(ShaderNode, SH_NODE_VECT_MATH, def_vector_math, "VECT_MATH", VectorMath, "Vector Math", "" )
+DefNode(ShaderNode, SH_NODE_VECTOR_MATH, def_vector_math, "VECT_MATH", VectorMath, "Vector Math", "" )
DefNode(ShaderNode, SH_NODE_SQUEEZE, 0, "SQUEEZE", Squeeze, "Squeeze Value", "" )
DefNode(ShaderNode, SH_NODE_INVERT, 0, "INVERT", Invert, "Invert", "" )
DefNode(ShaderNode, SH_NODE_SEPRGB, 0, "SEPRGB", SeparateRGB, "Separate RGB", "" )
@@ -94,6 +96,7 @@ DefNode(ShaderNode, SH_NODE_LIGHT_FALLOFF, 0, "LIG
DefNode(ShaderNode, SH_NODE_OBJECT_INFO, 0, "OBJECT_INFO", ObjectInfo, "Object Info", "" )
DefNode(ShaderNode, SH_NODE_PARTICLE_INFO, 0, "PARTICLE_INFO", ParticleInfo, "Particle Info", "" )
DefNode(ShaderNode, SH_NODE_HAIR_INFO, 0, "HAIR_INFO", HairInfo, "Hair Info", "" )
+DefNode(ShaderNode, SH_NODE_VOLUME_INFO, 0, "VOLUME_INFO", VolumeInfo, "Volume Info", "" )
DefNode(ShaderNode, SH_NODE_WIREFRAME, def_sh_tex_wireframe, "WIREFRAME", Wireframe, "Wireframe", "" )
DefNode(ShaderNode, SH_NODE_WAVELENGTH, 0, "WAVELENGTH", Wavelength, "Wavelength", "" )
DefNode(ShaderNode, SH_NODE_BLACKBODY, 0, "BLACKBODY", Blackbody, "Blackbody", "" )
@@ -125,6 +128,7 @@ DefNode(ShaderNode, SH_NODE_BEVEL, def_sh_bevel, "BEV
DefNode(ShaderNode, SH_NODE_DISPLACEMENT, def_sh_displacement, "DISPLACEMENT", Displacement, "Displacement", "" )
DefNode(ShaderNode, SH_NODE_VECTOR_DISPLACEMENT,def_sh_vector_displacement,"VECTOR_DISPLACEMENT",VectorDisplacement,"Vector Displacement","" )
DefNode(ShaderNode, SH_NODE_TEX_IES, def_sh_tex_ies, "TEX_IES", TexIES, "IES Texture", "" )
+DefNode(ShaderNode, SH_NODE_TEX_WHITE_NOISE, def_sh_tex_white_noise, "TEX_WHITE_NOISE", TexWhiteNoise, "White Noise", "" )
DefNode(CompositorNode, CMP_NODE_VIEWER, def_cmp_viewer, "VIEWER", Viewer, "Viewer", "" )
DefNode(CompositorNode, CMP_NODE_RGB, 0, "RGB", RGB, "RGB", "" )
@@ -214,6 +218,7 @@ DefNode(CompositorNode, CMP_NODE_PLANETRACKDEFORM,def_cmp_planetrackdeform,"PLAN
DefNode(CompositorNode, CMP_NODE_CORNERPIN, 0, "CORNERPIN", CornerPin, "Corner Pin", "" )
DefNode(CompositorNode, CMP_NODE_SUNBEAMS, def_cmp_sunbeams, "SUNBEAMS", SunBeams, "Sun Beams", "" )
DefNode(CompositorNode, CMP_NODE_CRYPTOMATTE, def_cmp_cryptomatte, "CRYPTOMATTE", Cryptomatte, "Cryptomatte", "" )
+DefNode(CompositorNode, CMP_NODE_DENOISE, def_cmp_denoise, "DENOISE", Denoise, "Denoise", "" )
DefNode(TextureNode, TEX_NODE_OUTPUT, def_tex_output, "OUTPUT", Output, "Output", "" )
DefNode(TextureNode, TEX_NODE_CHECKER, 0, "CHECKER", Checker, "Checker", "" )
diff --git a/source/blender/nodes/composite/nodes/node_composite_curves.c b/source/blender/nodes/composite/nodes/node_composite_curves.c
index 7b2e7329432..8d338ba5750 100644
--- a/source/blender/nodes/composite/nodes/node_composite_curves.c
+++ b/source/blender/nodes/composite/nodes/node_composite_curves.c
@@ -35,7 +35,7 @@ static void node_composit_init_curves_time(bNodeTree *UNUSED(ntree), bNode *node
{
node->custom1 = 1;
node->custom2 = 250;
- node->storage = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
void register_node_type_cmp_curve_time(void)
@@ -64,7 +64,7 @@ static bNodeSocketTemplate cmp_node_curve_vec_out[] = {
static void node_composit_init_curve_vec(bNodeTree *UNUSED(ntree), bNode *node)
{
- node->storage = curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f);
}
void register_node_type_cmp_curve_vec(void)
@@ -96,7 +96,7 @@ static bNodeSocketTemplate cmp_node_curve_rgb_out[] = {
static void node_composit_init_curve_rgb(bNodeTree *UNUSED(ntree), bNode *node)
{
- node->storage = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
}
void register_node_type_cmp_curve_rgb(void)
diff --git a/source/blender/nodes/composite/nodes/node_composite_denoise.c b/source/blender/nodes/composite/nodes/node_composite_denoise.c
new file mode 100644
index 00000000000..e2fdb08816a
--- /dev/null
+++ b/source/blender/nodes/composite/nodes/node_composite_denoise.c
@@ -0,0 +1,58 @@
+/*
+ * ***** 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) 2019 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Stefan Werner
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/nodes/composite/nodes/node_composite_denoise.c
+ * \ingroup cmpnodes
+ */
+
+#include "node_composite_util.h"
+
+static bNodeSocketTemplate cmp_node_denoise_in[] = {
+ {SOCK_RGBA, 1, N_("Image"), 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f},
+ {SOCK_RGBA, 1, N_("Albedo"), 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f},
+ {SOCK_VECTOR, 0, N_("Normal"), 0.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f},
+ {-1, 0, ""}};
+static bNodeSocketTemplate cmp_node_denoise_out[] = {{SOCK_RGBA, 0, N_("Image")}, {-1, 0, ""}};
+
+static void node_composit_init_denonise(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ NodeDenoise *ndg = MEM_callocN(sizeof(NodeDenoise), "node denoise data");
+ ndg->hdr = true;
+ node->storage = ndg;
+}
+
+void register_node_type_cmp_denoise(void)
+{
+ static bNodeType ntype;
+
+ cmp_node_type_base(&ntype, CMP_NODE_DENOISE, "Denoise", NODE_CLASS_OP_FILTER, 0);
+ node_type_socket_templates(&ntype, cmp_node_denoise_in, cmp_node_denoise_out);
+ node_type_init(&ntype, node_composit_init_denonise);
+ node_type_storage(&ntype, "NodeDenoise", node_free_standard_storage, node_copy_standard_storage);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/composite/nodes/node_composite_huecorrect.c b/source/blender/nodes/composite/nodes/node_composite_huecorrect.c
index 7fcaae0bd9c..29cdf28fb2d 100644
--- a/source/blender/nodes/composite/nodes/node_composite_huecorrect.c
+++ b/source/blender/nodes/composite/nodes/node_composite_huecorrect.c
@@ -36,14 +36,14 @@ static bNodeSocketTemplate cmp_node_huecorrect_out[] = {
static void node_composit_init_huecorrect(bNodeTree *UNUSED(ntree), bNode *node)
{
- CurveMapping *cumapping = node->storage = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ CurveMapping *cumapping = node->storage = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
int c;
cumapping->preset = CURVE_PRESET_MID9;
for (c = 0; c < 3; c++) {
CurveMap *cuma = &cumapping->cm[c];
- curvemap_reset(cuma, &cumapping->clipr, cumapping->preset, CURVEMAP_SLOPE_POSITIVE);
+ BKE_curvemap_reset(cuma, &cumapping->clipr, cumapping->preset, CURVEMAP_SLOPE_POSITIVE);
}
/* default to showing Saturation */
diff --git a/source/blender/nodes/composite/nodes/node_composite_outputFile.c b/source/blender/nodes/composite/nodes/node_composite_outputFile.c
index faf9e20da51..af806a37341 100644
--- a/source/blender/nodes/composite/nodes/node_composite_outputFile.c
+++ b/source/blender/nodes/composite/nodes/node_composite_outputFile.c
@@ -191,7 +191,7 @@ void ntreeCompositOutputFileSetLayer(bNode *node, bNodeSocket *sock, const char
static void init_output_file(const bContext *C, PointerRNA *ptr)
{
Scene *scene = CTX_data_scene(C);
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = ptr->data;
NodeImageMultiFile *nimf = MEM_callocN(sizeof(NodeImageMultiFile), "node image multi file");
ImageFormatData *format = NULL;
diff --git a/source/blender/nodes/composite/nodes/node_composite_switchview.c b/source/blender/nodes/composite/nodes/node_composite_switchview.c
index 92e06307afb..cecd8204f4a 100644
--- a/source/blender/nodes/composite/nodes/node_composite_switchview.c
+++ b/source/blender/nodes/composite/nodes/node_composite_switchview.c
@@ -116,7 +116,7 @@ static void cmp_node_switch_view_update(bNodeTree *ntree, bNode *node)
static void init_switch_view(const bContext *C, PointerRNA *ptr)
{
Scene *scene = CTX_data_scene(C);
- bNodeTree *ntree = ptr->id.data;
+ bNodeTree *ntree = (bNodeTree *)ptr->owner_id;
bNode *node = ptr->data;
SceneRenderView *srv;
bNodeSocket *sock;
diff --git a/source/blender/nodes/intern/node_socket.c b/source/blender/nodes/intern/node_socket.c
index 8aeada7bde0..3485bd41660 100644
--- a/source/blender/nodes/intern/node_socket.c
+++ b/source/blender/nodes/intern/node_socket.c
@@ -39,8 +39,6 @@
#include "NOD_socket.h"
-struct Main;
-
struct bNodeSocket *node_add_socket_from_template(struct bNodeTree *ntree,
struct bNode *node,
struct bNodeSocketTemplate *stemp,
diff --git a/source/blender/nodes/intern/node_util.c b/source/blender/nodes/intern/node_util.c
index 2ab68e2f7cf..0d7f19fb67a 100644
--- a/source/blender/nodes/intern/node_util.c
+++ b/source/blender/nodes/intern/node_util.c
@@ -47,7 +47,7 @@
void node_free_curves(bNode *node)
{
- curvemapping_free(node->storage);
+ BKE_curvemapping_free(node->storage);
}
void node_free_standard_storage(bNode *node)
@@ -59,7 +59,7 @@ void node_free_standard_storage(bNode *node)
void node_copy_curves(bNodeTree *UNUSED(dest_ntree), bNode *dest_node, const bNode *src_node)
{
- dest_node->storage = curvemapping_copy(src_node->storage);
+ dest_node->storage = BKE_curvemapping_copy(src_node->storage);
}
void node_copy_standard_storage(bNodeTree *UNUSED(dest_ntree),
@@ -73,7 +73,7 @@ void *node_initexec_curves(bNodeExecContext *UNUSED(context),
bNode *node,
bNodeInstanceKey UNUSED(key))
{
- curvemapping_initialize(node->storage);
+ BKE_curvemapping_initialize(node->storage);
return NULL; /* unused return */
}
@@ -100,7 +100,7 @@ void node_math_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int max
BLI_strncpy(label, IFACE_(name), maxlen);
}
-void node_vect_math_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
+void node_vector_math_label(bNodeTree *UNUSED(ntree), bNode *node, char *label, int maxlen)
{
const char *name;
RNA_enum_name(rna_enum_node_vec_math_items, node->custom1, &name);
diff --git a/source/blender/nodes/intern/node_util.h b/source/blender/nodes/intern/node_util.h
index 7eef70db498..49117b38aba 100644
--- a/source/blender/nodes/intern/node_util.h
+++ b/source/blender/nodes/intern/node_util.h
@@ -71,7 +71,7 @@ extern void *node_initexec_curves(struct bNodeExecContext *context,
void node_blend_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
void node_image_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
void node_math_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
-void node_vect_math_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
+void node_vector_math_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
void node_filter_label(struct bNodeTree *ntree, struct bNode *node, char *label, int maxlen);
/*** Link Handling */
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 4891fb323ad..60a6cc91630 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -799,7 +799,7 @@ static void ntree_shader_relink_displacement(bNodeTree *ntree, bNode *output_nod
nodeRemLink(ntree, displacement_link);
/* Convert displacement vector to bump height. */
- bNode *dot_node = nodeAddStaticNode(NULL, ntree, SH_NODE_VECT_MATH);
+ bNode *dot_node = nodeAddStaticNode(NULL, ntree, SH_NODE_VECTOR_MATH);
bNode *geo_node = nodeAddStaticNode(NULL, ntree, SH_NODE_NEW_GEOMETRY);
bNodeSocket *normal_socket = ntree_shader_node_find_output(geo_node, "Normal");
dot_node->custom1 = 3; /* dot product */
diff --git a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
index 2a371b7d184..595ddf27d0a 100644
--- a/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
+++ b/source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
@@ -24,7 +24,17 @@
static bNodeSocketTemplate sh_node_bsdf_principled_in[] = {
{SOCK_RGBA, 1, N_("Base Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
{SOCK_FLOAT, 1, N_("Subsurface"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
- {SOCK_VECTOR, 1, N_("Subsurface Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f},
+ {SOCK_VECTOR,
+ 1,
+ N_("Subsurface Radius"),
+ 1.0f,
+ 0.2f,
+ 0.1f,
+ 0.0f,
+ 0.0f,
+ 100.0f,
+ PROP_NONE,
+ SOCK_COMPACT},
{SOCK_RGBA, 1, N_("Subsurface Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
{SOCK_FLOAT, 1, N_("Metallic"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
{SOCK_FLOAT, 1, N_("Specular"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
@@ -122,8 +132,13 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat,
&in[21].link);
}
+ bool use_diffuse = socket_not_one(4) && socket_not_one(15);
+ bool use_subsurf = socket_not_zero(1) && use_diffuse && node->sss_id > 0;
+ bool use_refract = socket_not_one(4) && socket_not_zero(15);
+ bool use_clear = socket_not_zero(12);
+
/* SSS Profile */
- if (node->sss_id == 1) {
+ if (use_subsurf) {
static short profile = SHD_SUBSURFACE_BURLEY;
bNodeSocket *socket = BLI_findlink(&node->original->inputs, 2);
bNodeSocketValueRGBA *socket_data = socket->default_value;
@@ -138,11 +153,6 @@ static int node_shader_gpu_bsdf_principled(GPUMaterial *mat,
GPU_link(mat, "set_rgb_one", &sss_scale);
}
- bool use_diffuse = socket_not_one(4) && socket_not_one(15);
- bool use_subsurf = socket_not_zero(1) && use_diffuse && node->sss_id == 1;
- bool use_refract = socket_not_one(4) && socket_not_zero(15);
- bool use_clear = socket_not_zero(12);
-
/* Due to the manual effort done per config, we only optimize the most common permutations. */
char *node_name;
uint flag = 0;
diff --git a/source/blender/nodes/shader/nodes/node_shader_clamp.c b/source/blender/nodes/shader/nodes/node_shader_clamp.c
new file mode 100644
index 00000000000..8e5b90436ea
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_clamp.c
@@ -0,0 +1,56 @@
+/*
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup shdnodes
+ */
+
+#include "node_shader_util.h"
+
+/* **************** Clamp ******************** */
+static bNodeSocketTemplate sh_node_clamp_in[] = {
+ {SOCK_FLOAT, 1, N_("Value"), 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("Min"), 0.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("Max"), 1.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {-1, 0, ""},
+};
+static bNodeSocketTemplate sh_node_clamp_out[] = {
+ {SOCK_FLOAT, 0, N_("Result")},
+ {-1, 0, ""},
+};
+
+static int gpu_shader_clamp(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, node, "clamp_value", in, out);
+}
+
+void register_node_type_sh_clamp(void)
+{
+ static bNodeType ntype;
+
+ sh_node_type_base(&ntype, SH_NODE_CLAMP, "Clamp", NODE_CLASS_CONVERTOR, 0);
+ node_type_socket_templates(&ntype, sh_node_clamp_in, sh_node_clamp_out);
+ node_type_gpu(&ntype, gpu_shader_clamp);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/shader/nodes/node_shader_curves.c b/source/blender/nodes/shader/nodes/node_shader_curves.c
index 1b96dabac77..baf86951fe0 100644
--- a/source/blender/nodes/shader/nodes/node_shader_curves.c
+++ b/source/blender/nodes/shader/nodes/node_shader_curves.c
@@ -47,12 +47,12 @@ static void node_shader_exec_curve_vec(void *UNUSED(data),
/* stack order input: vec */
/* stack order output: vec */
nodestack_get_vec(vec, SOCK_VECTOR, in[1]);
- curvemapping_evaluate3F(node->storage, out[0]->vec, vec);
+ BKE_curvemapping_evaluate3F(node->storage, out[0]->vec, vec);
}
static void node_shader_init_curve_vec(bNodeTree *UNUSED(ntree), bNode *node)
{
- node->storage = curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(3, -1.0f, -1.0f, 1.0f, 1.0f);
}
static int gpu_shader_curve_vec(GPUMaterial *mat,
@@ -64,7 +64,7 @@ static int gpu_shader_curve_vec(GPUMaterial *mat,
float *array, layer;
int size;
- curvemapping_table_RGBA(node->storage, &array, &size);
+ BKE_curvemapping_table_RGBA(node->storage, &array, &size);
GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer);
return GPU_stack_link(mat, node, "curves_vec", in, out, tex, GPU_constant(&layer));
@@ -111,7 +111,7 @@ static void node_shader_exec_curve_rgb(void *UNUSED(data),
/* stack order output: vec */
nodestack_get_vec(&fac, SOCK_FLOAT, in[0]);
nodestack_get_vec(vec, SOCK_VECTOR, in[1]);
- curvemapping_evaluateRGBF(node->storage, out[0]->vec, vec);
+ BKE_curvemapping_evaluateRGBF(node->storage, out[0]->vec, vec);
if (fac != 1.0f) {
interp_v3_v3v3(out[0]->vec, vec, out[0]->vec, fac);
}
@@ -119,7 +119,7 @@ static void node_shader_exec_curve_rgb(void *UNUSED(data),
static void node_shader_init_curve_rgb(bNodeTree *UNUSED(ntree), bNode *node)
{
- node->storage = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
}
static int gpu_shader_curve_rgb(GPUMaterial *mat,
@@ -134,8 +134,8 @@ static int gpu_shader_curve_rgb(GPUMaterial *mat,
CurveMapping *cumap = node->storage;
- curvemapping_initialize(cumap);
- curvemapping_table_RGBA(cumap, &array, &size);
+ BKE_curvemapping_initialize(cumap);
+ BKE_curvemapping_table_RGBA(cumap, &array, &size);
GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer);
float ext_rgba[4][4];
diff --git a/source/blender/nodes/shader/nodes/node_shader_holdout.c b/source/blender/nodes/shader/nodes/node_shader_holdout.c
index a4d1e77c736..2762e5ec1f5 100644
--- a/source/blender/nodes/shader/nodes/node_shader_holdout.c
+++ b/source/blender/nodes/shader/nodes/node_shader_holdout.c
@@ -30,6 +30,15 @@ static bNodeSocketTemplate sh_node_holdout_out[] = {
{-1, 0, ""},
};
+static int gpu_shader_rgb(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ return GPU_stack_link(mat, node, "node_holdout", in, out);
+}
+
/* node type definition */
void register_node_type_sh_holdout(void)
{
@@ -39,6 +48,7 @@ void register_node_type_sh_holdout(void)
node_type_socket_templates(&ntype, sh_node_holdout_in, sh_node_holdout_out);
node_type_init(&ntype, NULL);
node_type_storage(&ntype, "", NULL, NULL);
+ node_type_gpu(&ntype, gpu_shader_rgb);
nodeRegisterType(&ntype);
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_map_range.c b/source/blender/nodes/shader/nodes/node_shader_map_range.c
new file mode 100644
index 00000000000..7ebf3faf1f3
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_map_range.c
@@ -0,0 +1,68 @@
+/*
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup shdnodes
+ */
+
+#include "node_shader_util.h"
+
+/* **************** Map Range ******************** */
+static bNodeSocketTemplate sh_node_map_range_in[] = {
+ {SOCK_FLOAT, 1, N_("Value"), 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("From Min"), 0.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("From Max"), 1.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("To Min"), 0.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("To Max"), 1.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {-1, 0, ""},
+};
+static bNodeSocketTemplate sh_node_map_range_out[] = {
+ {SOCK_FLOAT, 0, N_("Result")},
+ {-1, 0, ""},
+};
+
+static void node_shader_init_map_range(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ node->custom1 = true;
+}
+
+static int gpu_shader_map_range(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ GPU_stack_link(mat, node, "map_range", in, out);
+ if (node->custom1) {
+ GPU_link(mat, "clamp_value", out[0].link, in[3].link, in[4].link, &out[0].link);
+ }
+ return 1;
+}
+
+void register_node_type_sh_map_range(void)
+{
+ static bNodeType ntype;
+
+ sh_node_type_base(&ntype, SH_NODE_MAP_RANGE, "Map Range", NODE_CLASS_CONVERTOR, 0);
+ node_type_socket_templates(&ntype, sh_node_map_range_in, sh_node_map_range_out);
+ node_type_init(&ntype, node_shader_init_map_range);
+ node_type_gpu(&ntype, gpu_shader_map_range);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/shader/nodes/node_shader_math.c b/source/blender/nodes/shader/nodes/node_shader_math.c
index f0cd2273e67..aaedc4aa1b7 100644
--- a/source/blender/nodes/shader/nodes/node_shader_math.c
+++ b/source/blender/nodes/shader/nodes/node_shader_math.c
@@ -31,272 +31,6 @@ static bNodeSocketTemplate sh_node_math_in[] = {
static bNodeSocketTemplate sh_node_math_out[] = {{SOCK_FLOAT, 0, N_("Value")}, {-1, 0, ""}};
-static void node_shader_exec_math(void *UNUSED(data),
- int UNUSED(thread),
- bNode *node,
- bNodeExecData *UNUSED(execdata),
- bNodeStack **in,
- bNodeStack **out)
-{
- float a, b, r = 0.0f;
-
- nodestack_get_vec(&a, SOCK_FLOAT, in[0]);
- nodestack_get_vec(&b, SOCK_FLOAT, in[1]);
-
- switch (node->custom1) {
-
- case NODE_MATH_ADD:
- r = a + b;
- break;
- case NODE_MATH_SUB:
- r = a - b;
- break;
- case NODE_MATH_MUL:
- r = a * b;
- break;
- case NODE_MATH_DIVIDE: {
- if (b == 0) { /* We don't want to divide by zero. */
- r = 0.0;
- }
- else {
- r = a / b;
- }
- break;
- }
- case NODE_MATH_SIN: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = sinf(a);
- }
- else {
- r = sinf(b);
- }
- break;
- }
- case NODE_MATH_COS: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = cosf(a);
- }
- else {
- r = cosf(b);
- }
- break;
- }
- case NODE_MATH_TAN: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = tanf(a);
- }
- else {
- r = tanf(b);
- }
- break;
- }
- case NODE_MATH_ASIN: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- /* Can't do the impossible... */
- if (a <= 1 && a >= -1) {
- r = asinf(a);
- }
- else {
- r = 0.0;
- }
- }
- else {
- /* Can't do the impossible... */
- if (b <= 1 && b >= -1) {
- r = asinf(b);
- }
- else {
- r = 0.0;
- }
- }
- break;
- }
- case NODE_MATH_ACOS: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- /* Can't do the impossible... */
- if (a <= 1 && a >= -1) {
- r = acosf(a);
- }
- else {
- r = 0.0;
- }
- }
- else {
- /* Can't do the impossible... */
- if (b <= 1 && b >= -1) {
- r = acosf(b);
- }
- else {
- r = 0.0;
- }
- }
- break;
- }
- case NODE_MATH_ATAN: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = atan(a);
- }
- else {
- r = atan(b);
- }
- break;
- }
- case NODE_MATH_POW: {
- /* Only raise negative numbers by full integers */
- if (a >= 0) {
- r = pow(a, b);
- }
- else {
- float y_mod_1 = fabsf(fmodf(b, 1.0f));
-
- /* if input value is not nearly an integer,
- * fall back to zero, nicer than straight rounding. */
- if (y_mod_1 > 0.999f || y_mod_1 < 0.001f) {
- r = powf(a, floorf(b + 0.5f));
- }
- else {
- r = 0.0f;
- }
- }
-
- break;
- }
- case NODE_MATH_LOG: {
- /* Don't want any imaginary numbers... */
- if (a > 0 && b > 0) {
- r = log(a) / log(b);
- }
- else {
- r = 0.0;
- }
- break;
- }
- case NODE_MATH_MIN: {
- if (a < b) {
- r = a;
- }
- else {
- r = b;
- }
- break;
- }
- case NODE_MATH_MAX: {
- if (a > b) {
- r = a;
- }
- else {
- r = b;
- }
- break;
- }
- case NODE_MATH_ROUND: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = (a < 0) ? (int)(a - 0.5f) : (int)(a + 0.5f);
- }
- else {
- r = (b < 0) ? (int)(b - 0.5f) : (int)(b + 0.5f);
- }
- break;
- }
- case NODE_MATH_LESS: {
- if (a < b) {
- r = 1.0f;
- }
- else {
- r = 0.0f;
- }
- break;
- }
- case NODE_MATH_GREATER: {
- if (a > b) {
- r = 1.0f;
- }
- else {
- r = 0.0f;
- }
- break;
- }
- case NODE_MATH_MOD: {
- if (b == 0.0f) {
- r = 0.0f;
- }
- else {
- r = fmod(a, b);
- }
- break;
- }
- case NODE_MATH_ABS: {
- r = fabsf(a);
- break;
- }
- case NODE_MATH_ATAN2: {
- r = atan2(a, b);
- break;
- }
- case NODE_MATH_FLOOR: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = floorf(a);
- }
- else {
- r = floorf(b);
- }
- break;
- }
- case NODE_MATH_CEIL: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = ceilf(a);
- }
- else {
- r = ceilf(b);
- }
- break;
- }
- case NODE_MATH_FRACT: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- r = a - floorf(a);
- }
- else {
- r = b - floorf(b);
- }
- break;
- }
- case NODE_MATH_SQRT: {
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- if (a > 0) {
- r = sqrt(a);
- }
- else {
- r = 0.0;
- }
- }
- else {
- if (b > 0) {
- r = sqrt(b);
- }
- else {
- r = 0.0;
- }
- }
- break;
- }
- }
- if (node->custom2 & SHD_MATH_CLAMP) {
- CLAMP(r, 0.0f, 1.0f);
- }
- out[0]->vec[0] = r;
-}
-
static int gpu_shader_math(GPUMaterial *mat,
bNode *node,
bNodeExecData *UNUSED(execdata),
@@ -304,68 +38,65 @@ static int gpu_shader_math(GPUMaterial *mat,
GPUNodeStack *out)
{
static const char *names[] = {
- "math_add", "math_subtract", "math_multiply", "math_divide", "math_sine",
- "math_cosine", "math_tangent", "math_asin", "math_acos", "math_atan",
- "math_pow", "math_log", "math_min", "math_max", "math_round",
- "math_less_than", "math_greater_than", "math_modulo", "math_abs", "math_atan2",
- "math_floor", "math_ceil", "math_fract", "math_sqrt",
+ [NODE_MATH_ADD] = "math_add",
+ [NODE_MATH_SUBTRACT] = "math_subtract",
+ [NODE_MATH_MULTIPLY] = "math_multiply",
+ [NODE_MATH_DIVIDE] = "math_divide",
+
+ [NODE_MATH_POWER] = "math_power",
+ [NODE_MATH_LOGARITHM] = "math_logarithm",
+ [NODE_MATH_SQRT] = "math_sqrt",
+ [NODE_MATH_ABSOLUTE] = "math_absolute",
+
+ [NODE_MATH_MINIMUM] = "math_minimum",
+ [NODE_MATH_MAXIMUM] = "math_maximum",
+ [NODE_MATH_LESS_THAN] = "math_less_than",
+ [NODE_MATH_GREATER_THAN] = "math_greater_than",
+
+ [NODE_MATH_ROUND] = "math_round",
+ [NODE_MATH_FLOOR] = "math_floor",
+ [NODE_MATH_CEIL] = "math_ceil",
+ [NODE_MATH_FRACTION] = "math_fraction",
+ [NODE_MATH_MODULO] = "math_modulo",
+
+ [NODE_MATH_SINE] = "math_sine",
+ [NODE_MATH_COSINE] = "math_cosine",
+ [NODE_MATH_TANGENT] = "math_tangent",
+ [NODE_MATH_ARCSINE] = "math_arcsine",
+ [NODE_MATH_ARCCOSINE] = "math_arccosine",
+ [NODE_MATH_ARCTANGENT] = "math_arctangent",
+ [NODE_MATH_ARCTAN2] = "math_arctan2",
};
- switch (node->custom1) {
- case NODE_MATH_ADD:
- case NODE_MATH_SUB:
- case NODE_MATH_MUL:
- case NODE_MATH_DIVIDE:
- case NODE_MATH_POW:
- case NODE_MATH_LOG:
- case NODE_MATH_MIN:
- case NODE_MATH_MAX:
- case NODE_MATH_LESS:
- case NODE_MATH_GREATER:
- case NODE_MATH_MOD:
- case NODE_MATH_ATAN2:
- GPU_stack_link(mat, node, names[node->custom1], in, out);
- break;
- case NODE_MATH_SIN:
- case NODE_MATH_COS:
- case NODE_MATH_TAN:
- case NODE_MATH_ASIN:
- case NODE_MATH_ACOS:
- case NODE_MATH_ATAN:
- case NODE_MATH_ROUND:
- case NODE_MATH_ABS:
- case NODE_MATH_FLOOR:
- case NODE_MATH_FRACT:
- case NODE_MATH_CEIL:
- case NODE_MATH_SQRT:
- if (in[0].hasinput || !in[1].hasinput) {
- /* use only first item and terminator */
- GPUNodeStack tmp_in[2];
- memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
- memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
- }
- else {
- /* use only second item and terminator */
- GPUNodeStack tmp_in[2];
- memcpy(&tmp_in[0], &in[1], sizeof(GPUNodeStack));
- memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
- }
- break;
- default:
- return 0;
- }
+ GPU_stack_link(mat, node, names[node->custom1], in, out);
if (node->custom2 & SHD_MATH_CLAMP) {
float min[3] = {0.0f, 0.0f, 0.0f};
float max[3] = {1.0f, 1.0f, 1.0f};
- GPU_link(mat, "clamp_val", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
+ GPU_link(mat, "clamp_value", out[0].link, GPU_constant(min), GPU_constant(max), &out[0].link);
}
-
return 1;
}
+static void node_shader_update_math(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ bNodeSocket *sock = BLI_findlink(&node->inputs, 1);
+ nodeSetSocketAvailability(sock,
+ !ELEM(node->custom1,
+ NODE_MATH_SQRT,
+ NODE_MATH_CEIL,
+ NODE_MATH_SINE,
+ NODE_MATH_ROUND,
+ NODE_MATH_FLOOR,
+ NODE_MATH_COSINE,
+ NODE_MATH_ARCSINE,
+ NODE_MATH_TANGENT,
+ NODE_MATH_ABSOLUTE,
+ NODE_MATH_FRACTION,
+ NODE_MATH_ARCCOSINE,
+ NODE_MATH_ARCTANGENT));
+}
+
void register_node_type_sh_math(void)
{
static bNodeType ntype;
@@ -373,9 +104,8 @@ void register_node_type_sh_math(void)
sh_node_type_base(&ntype, SH_NODE_MATH, "Math", NODE_CLASS_CONVERTOR, 0);
node_type_socket_templates(&ntype, sh_node_math_in, sh_node_math_out);
node_type_label(&ntype, node_math_label);
- node_type_storage(&ntype, "", NULL, NULL);
- node_type_exec(&ntype, NULL, NULL, node_shader_exec_math);
node_type_gpu(&ntype, gpu_shader_math);
+ node_type_update(&ntype, node_shader_update_math);
nodeRegisterType(&ntype);
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_normal.c b/source/blender/nodes/shader/nodes/node_shader_normal.c
index 074cc3dd87f..9dd89258446 100644
--- a/source/blender/nodes/shader/nodes/node_shader_normal.c
+++ b/source/blender/nodes/shader/nodes/node_shader_normal.c
@@ -25,7 +25,7 @@
/* **************** NORMAL ******************** */
static bNodeSocketTemplate sh_node_normal_in[] = {
- {SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, PROP_DIRECTION},
+ {SOCK_VECTOR, 1, N_("Normal"), 0.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, PROP_DIRECTION},
{-1, 0, ""},
};
diff --git a/source/blender/nodes/shader/nodes/node_shader_normal_map.c b/source/blender/nodes/shader/nodes/node_shader_normal_map.c
index 4976d038065..712c64084cc 100644
--- a/source/blender/nodes/shader/nodes/node_shader_normal_map.c
+++ b/source/blender/nodes/shader/nodes/node_shader_normal_map.c
@@ -58,7 +58,7 @@ static int gpu_shader_normal_map(GPUMaterial *mat,
GPUNodeLink *realnorm;
GPUNodeLink *strength;
- float d[4] = {0, 0, 0, 0};
+ float strength_min[4] = {0, 0, 0, 0};
if (in[0].link) {
strength = in[0].link;
@@ -85,7 +85,7 @@ static int gpu_shader_normal_map(GPUMaterial *mat,
}
negnorm = GPU_builtin(GPU_WORLD_NORMAL);
- GPU_link(mat, "math_max", strength, GPU_constant(d), &strength);
+ GPU_link(mat, "math_maximum", strength, GPU_constant(strength_min), &strength);
const char *color_to_normal_fnc_name = "color_to_normal_new_shading";
if (nm->space == SHD_SPACE_BLENDER_OBJECT || nm->space == SHD_SPACE_BLENDER_WORLD) {
@@ -114,7 +114,7 @@ static int gpu_shader_normal_map(GPUMaterial *mat,
break;
}
- GPU_link(mat, "vec_math_mix", strength, realnorm, negnorm, &out[0].link);
+ GPU_link(mat, "vector_math_mix", strength, realnorm, negnorm, &out[0].link);
GPU_link(mat, "vect_normalize", out[0].link, &out[0].link);
return true;
diff --git a/source/blender/nodes/shader/nodes/node_shader_object_info.c b/source/blender/nodes/shader/nodes/node_shader_object_info.c
index 118b8136693..58449a53706 100644
--- a/source/blender/nodes/shader/nodes/node_shader_object_info.c
+++ b/source/blender/nodes/shader/nodes/node_shader_object_info.c
@@ -23,6 +23,7 @@
static bNodeSocketTemplate sh_node_object_info_out[] = {
{SOCK_VECTOR, 0, N_("Location"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ {SOCK_RGBA, 0, N_("Color"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{SOCK_FLOAT, 0, N_("Object Index"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{SOCK_FLOAT, 0, N_("Material Index"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
{SOCK_FLOAT, 0, N_("Random"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
@@ -36,38 +37,25 @@ static int node_shader_gpu_object_info(GPUMaterial *mat,
GPUNodeStack *out)
{
Material *ma = GPU_material_get_material(mat);
- /* Convert to float. */
- float index = ma ? ma->index : 0;
+ float index = ma ? ma->index : 0.0f;
return GPU_stack_link(mat,
node,
"node_object_info",
in,
out,
GPU_builtin(GPU_OBJECT_MATRIX),
+ GPU_builtin(GPU_OBJECT_COLOR),
GPU_builtin(GPU_OBJECT_INFO),
GPU_constant(&index));
}
-static void node_shader_exec_object_info(void *UNUSED(data),
- int UNUSED(thread),
- bNode *UNUSED(node),
- bNodeExecData *UNUSED(execdata),
- bNodeStack **UNUSED(in),
- bNodeStack **UNUSED(out))
-{
-}
-
-/* node type definition */
void register_node_type_sh_object_info(void)
{
static bNodeType ntype;
sh_node_type_base(&ntype, SH_NODE_OBJECT_INFO, "Object Info", NODE_CLASS_INPUT, 0);
node_type_socket_templates(&ntype, NULL, sh_node_object_info_out);
- node_type_init(&ntype, NULL);
- node_type_storage(&ntype, "", NULL, NULL);
node_type_gpu(&ntype, node_shader_gpu_object_info);
- node_type_exec(&ntype, NULL, NULL, node_shader_exec_object_info);
nodeRegisterType(&ntype);
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c b/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c
index f1b4a0e9fe3..9a0a132b311 100644
--- a/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c
+++ b/source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c
@@ -24,7 +24,7 @@
static bNodeSocketTemplate sh_node_subsurface_scattering_in[] = {
{SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
{SOCK_FLOAT, 1, N_("Scale"), 1.0, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f},
- {SOCK_VECTOR, 1, N_("Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f},
+ {SOCK_VECTOR, 1, N_("Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f, PROP_NONE, SOCK_COMPACT},
{SOCK_FLOAT, 1, N_("Sharpness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
{SOCK_FLOAT, 1, N_("Texture Blur"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
{SOCK_VECTOR,
@@ -63,7 +63,7 @@ static int node_shader_gpu_subsurface_scattering(GPUMaterial *mat,
GPU_material_flag_set(mat, GPU_MATFLAG_DIFFUSE | GPU_MATFLAG_SSS);
- if (node->sss_id == 1) {
+ if (node->sss_id > 0) {
bNodeSocket *socket = BLI_findlink(&node->original->inputs, 2);
bNodeSocketValueRGBA *socket_data = socket->default_value;
bNodeSocket *socket_sharp = BLI_findlink(&node->original->inputs, 3);
diff --git a/source/blender/nodes/shader/nodes/node_shader_tangent.c b/source/blender/nodes/shader/nodes/node_shader_tangent.c
index 6795f48edb3..478b9524737 100644
--- a/source/blender/nodes/shader/nodes/node_shader_tangent.c
+++ b/source/blender/nodes/shader/nodes/node_shader_tangent.c
@@ -42,7 +42,8 @@ static int node_shader_gpu_tangent(GPUMaterial *mat,
NodeShaderTangent *attr = node->storage;
if (attr->direction_type == SHD_TANGENT_UVMAP) {
- return GPU_stack_link(mat, node, "node_tangentmap", in, out, GPU_attribute(CD_TANGENT, ""));
+ return GPU_stack_link(
+ mat, node, "node_tangentmap", in, out, GPU_attribute(CD_TANGENT, attr->uv_map));
}
else {
GPUNodeLink *orco = GPU_attribute(CD_ORCO, "");
diff --git a/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c b/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c
new file mode 100644
index 00000000000..c0f9a033476
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_tex_white_noise.c
@@ -0,0 +1,76 @@
+/*
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+#include "../node_shader_util.h"
+
+/* **************** WHITE NOISE **************** */
+
+static bNodeSocketTemplate sh_node_tex_white_noise_in[] = {
+ {SOCK_VECTOR, 1, N_("Vector"), 0.0f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("W"), 0.0f, 0.0f, 0.0f, 0.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {-1, 0, ""}};
+
+static bNodeSocketTemplate sh_node_tex_white_noise_out[] = {
+ {SOCK_FLOAT, 0, N_("Value")},
+ {-1, 0, ""},
+};
+
+static void node_shader_init_tex_white_noise(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ node->custom1 = 3;
+}
+
+static int gpu_shader_tex_white_noise(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ static const char *names[] = {
+ "",
+ "node_white_noise_1d",
+ "node_white_noise_2d",
+ "node_white_noise_3d",
+ "node_white_noise_4d",
+ };
+
+ return GPU_stack_link(mat, node, names[node->custom1], in, out);
+}
+
+static void node_shader_update_tex_white_noise(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ bNodeSocket *sockVector = nodeFindSocket(node, SOCK_IN, "Vector");
+ bNodeSocket *sockW = nodeFindSocket(node, SOCK_IN, "W");
+
+ nodeSetSocketAvailability(sockVector, node->custom1 != 1);
+ nodeSetSocketAvailability(sockW, node->custom1 == 1 || node->custom1 == 4);
+}
+
+void register_node_type_sh_tex_white_noise(void)
+{
+ static bNodeType ntype;
+
+ sh_node_type_base(&ntype, SH_NODE_TEX_WHITE_NOISE, "White Noise Texture", NODE_CLASS_TEXTURE, 0);
+ node_type_socket_templates(&ntype, sh_node_tex_white_noise_in, sh_node_tex_white_noise_out);
+ node_type_init(&ntype, node_shader_init_tex_white_noise);
+ node_type_gpu(&ntype, gpu_shader_tex_white_noise);
+ node_type_update(&ntype, node_shader_update_tex_white_noise);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/shader/nodes/node_shader_vectMath.c b/source/blender/nodes/shader/nodes/node_shader_vectMath.c
deleted file mode 100644
index 41273a6dc1d..00000000000
--- a/source/blender/nodes/shader/nodes/node_shader_vectMath.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * 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) 2005 Blender Foundation.
- * All rights reserved.
- */
-
-/** \file
- * \ingroup shdnodes
- */
-
-#include "node_shader_util.h"
-
-/* **************** VECTOR MATH ******************** */
-static bNodeSocketTemplate sh_node_vect_math_in[] = {
- {SOCK_VECTOR, 1, N_("Vector"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
- {SOCK_VECTOR, 1, N_("Vector"), 0.5f, 0.5f, 0.5f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
- {-1, 0, ""}};
-
-static bNodeSocketTemplate sh_node_vect_math_out[] = {
- {SOCK_VECTOR, 0, N_("Vector")}, {SOCK_FLOAT, 0, N_("Value")}, {-1, 0, ""}};
-
-static void node_shader_exec_vect_math(void *UNUSED(data),
- int UNUSED(thread),
- bNode *node,
- bNodeExecData *UNUSED(execdata),
- bNodeStack **in,
- bNodeStack **out)
-{
- float vec1[3], vec2[3];
-
- nodestack_get_vec(vec1, SOCK_VECTOR, in[0]);
- nodestack_get_vec(vec2, SOCK_VECTOR, in[1]);
-
- if (node->custom1 == 0) { /* Add */
- out[0]->vec[0] = vec1[0] + vec2[0];
- out[0]->vec[1] = vec1[1] + vec2[1];
- out[0]->vec[2] = vec1[2] + vec2[2];
-
- out[1]->vec[0] = (fabsf(out[0]->vec[0]) + fabsf(out[0]->vec[1]) + fabsf(out[0]->vec[2])) /
- 3.0f;
- }
- else if (node->custom1 == 1) { /* Subtract */
- out[0]->vec[0] = vec1[0] - vec2[0];
- out[0]->vec[1] = vec1[1] - vec2[1];
- out[0]->vec[2] = vec1[2] - vec2[2];
-
- out[1]->vec[0] = (fabsf(out[0]->vec[0]) + fabsf(out[0]->vec[1]) + fabsf(out[0]->vec[2])) /
- 3.0f;
- }
- else if (node->custom1 == 2) { /* Average */
- out[0]->vec[0] = vec1[0] + vec2[0];
- out[0]->vec[1] = vec1[1] + vec2[1];
- out[0]->vec[2] = vec1[2] + vec2[2];
-
- out[1]->vec[0] = normalize_v3(out[0]->vec);
- }
- else if (node->custom1 == 3) { /* Dot product */
- out[1]->vec[0] = (vec1[0] * vec2[0]) + (vec1[1] * vec2[1]) + (vec1[2] * vec2[2]);
- }
- else if (node->custom1 == 4) { /* Cross product */
- out[0]->vec[0] = (vec1[1] * vec2[2]) - (vec1[2] * vec2[1]);
- out[0]->vec[1] = (vec1[2] * vec2[0]) - (vec1[0] * vec2[2]);
- out[0]->vec[2] = (vec1[0] * vec2[1]) - (vec1[1] * vec2[0]);
-
- out[1]->vec[0] = normalize_v3(out[0]->vec);
- }
- else if (node->custom1 == 5) { /* Normalize */
- /* This one only takes one input, so we've got to choose. */
- if (in[0]->hasinput || !in[1]->hasinput) {
- out[0]->vec[0] = vec1[0];
- out[0]->vec[1] = vec1[1];
- out[0]->vec[2] = vec1[2];
- }
- else {
- out[0]->vec[0] = vec2[0];
- out[0]->vec[1] = vec2[1];
- out[0]->vec[2] = vec2[2];
- }
-
- out[1]->vec[0] = normalize_v3(out[0]->vec);
- }
-}
-
-static int gpu_shader_vect_math(GPUMaterial *mat,
- bNode *node,
- bNodeExecData *UNUSED(execdata),
- GPUNodeStack *in,
- GPUNodeStack *out)
-{
- static const char *names[] = {
- "vec_math_add",
- "vec_math_sub",
- "vec_math_average",
- "vec_math_dot",
- "vec_math_cross",
- "vec_math_normalize",
- };
-
- switch (node->custom1) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- GPU_stack_link(mat, node, names[node->custom1], in, out);
- break;
- case 5:
- if (in[0].hasinput || !in[1].hasinput) {
- /* use only first item and terminator */
- GPUNodeStack tmp_in[2];
- memcpy(&tmp_in[0], &in[0], sizeof(GPUNodeStack));
- memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
- }
- else {
- /* use only second item and terminator */
- GPUNodeStack tmp_in[2];
- memcpy(&tmp_in[0], &in[1], sizeof(GPUNodeStack));
- memcpy(&tmp_in[1], &in[2], sizeof(GPUNodeStack));
- GPU_stack_link(mat, node, names[node->custom1], tmp_in, out);
- }
- break;
- default:
- return false;
- }
-
- return true;
-}
-
-void register_node_type_sh_vect_math(void)
-{
- static bNodeType ntype;
-
- sh_node_type_base(&ntype, SH_NODE_VECT_MATH, "Vector Math", NODE_CLASS_CONVERTOR, 0);
- node_type_socket_templates(&ntype, sh_node_vect_math_in, sh_node_vect_math_out);
- node_type_label(&ntype, node_vect_math_label);
- node_type_storage(&ntype, "", NULL, NULL);
- node_type_exec(&ntype, NULL, NULL, node_shader_exec_vect_math);
- node_type_gpu(&ntype, gpu_shader_vect_math);
-
- nodeRegisterType(&ntype);
-}
diff --git a/source/blender/nodes/shader/nodes/node_shader_vector_math.c b/source/blender/nodes/shader/nodes/node_shader_vector_math.c
new file mode 100644
index 00000000000..03de83655b5
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_vector_math.c
@@ -0,0 +1,113 @@
+/*
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup shdnodes
+ */
+
+#include "node_shader_util.h"
+
+/* **************** VECTOR MATH ******************** */
+static bNodeSocketTemplate sh_node_vector_math_in[] = {
+ {SOCK_VECTOR, 1, N_("Vector"), 0.0f, 0.0f, 0.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_VECTOR, 1, N_("Vector"), 0.0f, 0.0f, 0.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {SOCK_FLOAT, 1, N_("Scale"), 1.0f, 1.0f, 1.0f, 1.0f, -10000.0f, 10000.0f, PROP_NONE},
+ {-1, 0, ""}};
+
+static bNodeSocketTemplate sh_node_vector_math_out[] = {
+ {SOCK_VECTOR, 0, N_("Vector")}, {SOCK_FLOAT, 0, N_("Value")}, {-1, 0, ""}};
+
+static int gpu_shader_vector_math(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+ static const char *names[] = {
+ [NODE_VECTOR_MATH_ADD] = "vector_math_add",
+ [NODE_VECTOR_MATH_SUBTRACT] = "vector_math_subtract",
+ [NODE_VECTOR_MATH_MULTIPLY] = "vector_math_multiply",
+ [NODE_VECTOR_MATH_DIVIDE] = "vector_math_divide",
+
+ [NODE_VECTOR_MATH_CROSS_PRODUCT] = "vector_math_cross",
+ [NODE_VECTOR_MATH_PROJECT] = "vector_math_project",
+ [NODE_VECTOR_MATH_REFLECT] = "vector_math_reflect",
+ [NODE_VECTOR_MATH_DOT_PRODUCT] = "vector_math_dot",
+
+ [NODE_VECTOR_MATH_DISTANCE] = "vector_math_distance",
+ [NODE_VECTOR_MATH_LENGTH] = "vector_math_length",
+ [NODE_VECTOR_MATH_SCALE] = "vector_math_scale",
+ [NODE_VECTOR_MATH_NORMALIZE] = "vector_math_normalize",
+
+ [NODE_VECTOR_MATH_SNAP] = "vector_math_snap",
+ [NODE_VECTOR_MATH_FLOOR] = "vector_math_floor",
+ [NODE_VECTOR_MATH_CEIL] = "vector_math_ceil",
+ [NODE_VECTOR_MATH_MODULO] = "vector_math_modulo",
+ [NODE_VECTOR_MATH_FRACTION] = "vector_math_fraction",
+ [NODE_VECTOR_MATH_ABSOLUTE] = "vector_math_absolute",
+ [NODE_VECTOR_MATH_MINIMUM] = "vector_math_minimum",
+ [NODE_VECTOR_MATH_MAXIMUM] = "vector_math_maximum",
+ };
+
+ GPU_stack_link(mat, node, names[node->custom1], in, out);
+ return true;
+}
+
+static void node_shader_update_vector_math(bNodeTree *UNUSED(ntree), bNode *node)
+{
+ bNodeSocket *sockB = BLI_findlink(&node->inputs, 1);
+ bNodeSocket *sockScale = nodeFindSocket(node, SOCK_IN, "Scale");
+
+ bNodeSocket *sockVector = nodeFindSocket(node, SOCK_OUT, "Vector");
+ bNodeSocket *sockValue = nodeFindSocket(node, SOCK_OUT, "Value");
+
+ nodeSetSocketAvailability(sockB,
+ !ELEM(node->custom1,
+ NODE_VECTOR_MATH_CEIL,
+ NODE_VECTOR_MATH_SCALE,
+ NODE_VECTOR_MATH_FLOOR,
+ NODE_VECTOR_MATH_LENGTH,
+ NODE_VECTOR_MATH_ABSOLUTE,
+ NODE_VECTOR_MATH_FRACTION,
+ NODE_VECTOR_MATH_NORMALIZE));
+ nodeSetSocketAvailability(sockScale, node->custom1 == NODE_VECTOR_MATH_SCALE);
+ nodeSetSocketAvailability(sockVector,
+ !ELEM(node->custom1,
+ NODE_VECTOR_MATH_LENGTH,
+ NODE_VECTOR_MATH_DISTANCE,
+ NODE_VECTOR_MATH_DOT_PRODUCT));
+ nodeSetSocketAvailability(sockValue,
+ ELEM(node->custom1,
+ NODE_VECTOR_MATH_LENGTH,
+ NODE_VECTOR_MATH_DISTANCE,
+ NODE_VECTOR_MATH_DOT_PRODUCT));
+}
+
+void register_node_type_sh_vect_math(void)
+{
+ static bNodeType ntype;
+
+ sh_node_type_base(&ntype, SH_NODE_VECTOR_MATH, "Vector Math", NODE_CLASS_CONVERTOR, 0);
+ node_type_socket_templates(&ntype, sh_node_vector_math_in, sh_node_vector_math_out);
+ node_type_label(&ntype, node_vector_math_label);
+ node_type_gpu(&ntype, gpu_shader_vector_math);
+ node_type_update(&ntype, node_shader_update_vector_math);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/shader/nodes/node_shader_volume_info.c b/source/blender/nodes/shader/nodes/node_shader_volume_info.c
new file mode 100644
index 00000000000..98c44dd590b
--- /dev/null
+++ b/source/blender/nodes/shader/nodes/node_shader_volume_info.c
@@ -0,0 +1,56 @@
+/*
+ * 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) 2005 Blender Foundation.
+ * All rights reserved.
+ */
+
+#include "../node_shader_util.h"
+
+static bNodeSocketTemplate sh_node_volume_info_out[] = {
+ {SOCK_RGBA, 0, N_("Color")},
+ {SOCK_FLOAT, 0, N_("Density")},
+ {SOCK_FLOAT, 0, N_("Flame")},
+ {SOCK_FLOAT, 0, N_("Temperature")},
+ {-1, 0, ""},
+};
+
+static int node_shader_gpu_volume_info(GPUMaterial *mat,
+ bNode *node,
+ bNodeExecData *UNUSED(execdata),
+ GPUNodeStack *in,
+ GPUNodeStack *out)
+{
+
+ return GPU_stack_link(mat,
+ node,
+ "node_volume_info",
+ in,
+ out,
+ GPU_builtin(GPU_VOLUME_DENSITY),
+ GPU_builtin(GPU_VOLUME_FLAME),
+ GPU_builtin(GPU_VOLUME_TEMPERATURE));
+}
+
+void register_node_type_sh_volume_info(void)
+{
+ static bNodeType ntype;
+
+ sh_node_type_base(&ntype, SH_NODE_VOLUME_INFO, "Volume Info", NODE_CLASS_INPUT, 0);
+ node_type_socket_templates(&ntype, NULL, sh_node_volume_info_out);
+ node_type_gpu(&ntype, node_shader_gpu_volume_info);
+
+ nodeRegisterType(&ntype);
+}
diff --git a/source/blender/nodes/texture/nodes/node_texture_curves.c b/source/blender/nodes/texture/nodes/node_texture_curves.c
index 1087d05d040..2e2687bd50e 100644
--- a/source/blender/nodes/texture/nodes/node_texture_curves.c
+++ b/source/blender/nodes/texture/nodes/node_texture_curves.c
@@ -39,8 +39,8 @@ static void time_colorfn(
fac = (p->cfra - node->custom1) / (float)(node->custom2 - node->custom1);
}
- curvemapping_initialize(node->storage);
- fac = curvemapping_evaluateF(node->storage, 0, fac);
+ BKE_curvemapping_initialize(node->storage);
+ fac = BKE_curvemapping_evaluateF(node->storage, 0, fac);
out[0] = CLAMPIS(fac, 0.0f, 1.0f);
}
@@ -58,7 +58,7 @@ static void time_init(bNodeTree *UNUSED(ntree), bNode *node)
{
node->custom1 = 1;
node->custom2 = 250;
- node->storage = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
}
void register_node_type_tex_curve_time(void)
@@ -91,7 +91,7 @@ static void rgb_colorfn(float *out, TexParams *p, bNode *node, bNodeStack **in,
float cin[4];
tex_input_rgba(cin, in[0], p, thread);
- curvemapping_evaluateRGBF(node->storage, out, cin);
+ BKE_curvemapping_evaluateRGBF(node->storage, out, cin);
out[3] = cin[3];
}
@@ -107,7 +107,7 @@ static void rgb_exec(void *data,
static void rgb_init(bNodeTree *UNUSED(ntree), bNode *node)
{
- node->storage = curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
+ node->storage = BKE_curvemapping_add(4, 0.0f, 0.0f, 1.0f, 1.0f);
}
void register_node_type_tex_curve_rgb(void)
diff --git a/source/blender/nodes/texture/nodes/node_texture_math.c b/source/blender/nodes/texture/nodes/node_texture_math.c
index 2eb32e0addc..b1d67a5a953 100644
--- a/source/blender/nodes/texture/nodes/node_texture_math.c
+++ b/source/blender/nodes/texture/nodes/node_texture_math.c
@@ -46,10 +46,10 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
case NODE_MATH_ADD:
*out = in0 + in1;
break;
- case NODE_MATH_SUB:
+ case NODE_MATH_SUBTRACT:
*out = in0 - in1;
break;
- case NODE_MATH_MUL:
+ case NODE_MATH_MULTIPLY:
*out = in0 * in1;
break;
case NODE_MATH_DIVIDE: {
@@ -62,19 +62,19 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
}
break;
}
- case NODE_MATH_SIN: {
+ case NODE_MATH_SINE: {
*out = sinf(in0);
break;
}
- case NODE_MATH_COS: {
+ case NODE_MATH_COSINE: {
*out = cosf(in0);
break;
}
- case NODE_MATH_TAN: {
+ case NODE_MATH_TANGENT: {
*out = tanf(in0);
break;
}
- case NODE_MATH_ASIN: {
+ case NODE_MATH_ARCSINE: {
/* Can't do the impossible... */
if (in0 <= 1 && in0 >= -1) {
*out = asinf(in0);
@@ -84,7 +84,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
}
break;
}
- case NODE_MATH_ACOS: {
+ case NODE_MATH_ARCCOSINE: {
/* Can't do the impossible... */
if (in0 <= 1 && in0 >= -1) {
*out = acosf(in0);
@@ -94,11 +94,11 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
}
break;
}
- case NODE_MATH_ATAN: {
+ case NODE_MATH_ARCTANGENT: {
*out = atan(in0);
break;
}
- case NODE_MATH_POW: {
+ case NODE_MATH_POWER: {
/* Only raise negative numbers by full integers */
if (in0 >= 0) {
out[0] = pow(in0, in1);
@@ -114,7 +114,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
}
break;
}
- case NODE_MATH_LOG: {
+ case NODE_MATH_LOGARITHM: {
/* Don't want any imaginary numbers... */
if (in0 > 0 && in1 > 0) {
*out = log(in0) / log(in1);
@@ -124,7 +124,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
}
break;
}
- case NODE_MATH_MIN: {
+ case NODE_MATH_MINIMUM: {
if (in0 < in1) {
*out = in0;
}
@@ -133,7 +133,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
}
break;
}
- case NODE_MATH_MAX: {
+ case NODE_MATH_MAXIMUM: {
if (in0 > in1) {
*out = in0;
}
@@ -147,7 +147,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break;
}
- case NODE_MATH_LESS: {
+ case NODE_MATH_LESS_THAN: {
if (in0 < in1) {
*out = 1.0f;
}
@@ -157,7 +157,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break;
}
- case NODE_MATH_GREATER: {
+ case NODE_MATH_GREATER_THAN: {
if (in0 > in1) {
*out = 1.0f;
}
@@ -167,7 +167,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break;
}
- case NODE_MATH_MOD: {
+ case NODE_MATH_MODULO: {
if (in1 == 0.0f) {
*out = 0.0f;
}
@@ -177,12 +177,12 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break;
}
- case NODE_MATH_ABS: {
+ case NODE_MATH_ABSOLUTE: {
*out = fabsf(in0);
break;
}
- case NODE_MATH_ATAN2: {
+ case NODE_MATH_ARCTAN2: {
*out = atan2(in0, in1);
break;
}
@@ -197,7 +197,7 @@ static void valuefn(float *out, TexParams *p, bNode *node, bNodeStack **in, shor
break;
}
- case NODE_MATH_FRACT: {
+ case NODE_MATH_FRACTION: {
*out = in0 - floorf(in0);
break;
}
diff --git a/source/blender/physics/BPH_mass_spring.h b/source/blender/physics/BPH_mass_spring.h
index 9666f9ba9ed..c0ceff4d8cf 100644
--- a/source/blender/physics/BPH_mass_spring.h
+++ b/source/blender/physics/BPH_mass_spring.h
@@ -33,7 +33,6 @@ struct Depsgraph;
struct Implicit_Data;
struct ListBase;
struct Object;
-struct VoxelData;
typedef enum eMassSpringSolverStatus {
BPH_SOLVER_SUCCESS = (1 << 0),
diff --git a/source/blender/physics/intern/BPH_mass_spring.cpp b/source/blender/physics/intern/BPH_mass_spring.cpp
index 95c16c2f033..07cb3370eec 100644
--- a/source/blender/physics/intern/BPH_mass_spring.cpp
+++ b/source/blender/physics/intern/BPH_mass_spring.cpp
@@ -393,7 +393,7 @@ BLI_INLINE void cloth_calc_spring_force(ClothModifierData *clmd, ClothSpring *s)
if (s->type & CLOTH_SPRING_TYPE_SEWING) {
/* TODO: verify, half verified (couldn't see error)
* sewing springs usually have a large distance at first so clamp the force so we don't get
- * tunnelling through collision objects. */
+ * tunneling through collision objects. */
BPH_mass_spring_force_spring_linear(data,
s->ij,
s->kl,
diff --git a/source/blender/physics/intern/implicit.h b/source/blender/physics/intern/implicit.h
index a88a5785fee..32416fa01ab 100644
--- a/source/blender/physics/intern/implicit.h
+++ b/source/blender/physics/intern/implicit.h
@@ -186,8 +186,6 @@ bool BPH_mass_spring_force_spring_goal(struct Implicit_Data *data,
struct HairGrid;
-struct VoxelData;
-
#define MAX_HAIR_GRID_RES 256
struct HairGrid *BPH_hair_volume_create_vertex_grid(float cellsize,
diff --git a/source/blender/physics/intern/implicit_blender.c b/source/blender/physics/intern/implicit_blender.c
index 93df51ce58d..c2eb7b465e1 100644
--- a/source/blender/physics/intern/implicit_blender.c
+++ b/source/blender/physics/intern/implicit_blender.c
@@ -1158,12 +1158,9 @@ bool BPH_mass_spring_solve_velocities(Implicit_Data *data, float dt, ImplicitSol
double start = PIL_check_seconds_timer();
# endif
- cg_filtered(data->dV,
- data->A,
- data->B,
- data->z,
- data->S,
- result); /* conjugate gradient algorithm to solve Ax=b */
+ /* Conjugate gradient algorithm to solve Ax=b. */
+ cg_filtered(data->dV, data->A, data->B, data->z, data->S, result);
+
// cg_filtered_pre(id->dV, id->A, id->B, id->z, id->S, id->P, id->Pinv, id->bigI);
# ifdef DEBUG_TIME
diff --git a/source/blender/python/bmesh/bmesh_py_types.h b/source/blender/python/bmesh/bmesh_py_types.h
index 460e7f82222..c61fdeab4b0 100644
--- a/source/blender/python/bmesh/bmesh_py_types.h
+++ b/source/blender/python/bmesh/bmesh_py_types.h
@@ -140,8 +140,8 @@ PyObject *BPy_BMFaceSeq_CreatePyObject(BMesh *bm);
PyObject *BPy_BMLoopSeq_CreatePyObject(BMesh *bm);
PyObject *BPy_BMIter_CreatePyObject(BMesh *bm);
-PyObject *BPy_BMElem_CreatePyObject(BMesh *bm,
- BMHeader *ele); /* just checks type and creates v/e/f/l */
+/* Just checks type and creates v/e/f/l. */
+PyObject *BPy_BMElem_CreatePyObject(BMesh *bm, BMHeader *ele);
void *BPy_BMElem_PySeq_As_Array_FAST(BMesh **r_bm,
PyObject *seq_fast,
diff --git a/source/blender/python/bmesh/bmesh_py_types_customdata.c b/source/blender/python/bmesh/bmesh_py_types_customdata.c
index 56c25edb7e4..a7f4e30b494 100644
--- a/source/blender/python/bmesh/bmesh_py_types_customdata.c
+++ b/source/blender/python/bmesh/bmesh_py_types_customdata.c
@@ -516,8 +516,10 @@ static PyObject *bpy_bmlayercollection_keys(BPy_BMLayerCollection *self)
BPY_BM_CHECK_OBJ(self);
data = bpy_bm_customdata_get(self->bm, self->htype);
- index = CustomData_get_layer_index(data,
- self->type); /* absolute, but no need to make relative */
+
+ /* Absolute, but no need to make relative. */
+ index = CustomData_get_layer_index(data, self->type);
+
tot = (index != -1) ? CustomData_number_of_layers(data, self->type) : 0;
ret = PyList_New(tot);
diff --git a/source/blender/python/bmesh/bmesh_py_types_meshdata.c b/source/blender/python/bmesh/bmesh_py_types_meshdata.c
index 0aa01ddb594..2e15c1d9ce0 100644
--- a/source/blender/python/bmesh/bmesh_py_types_meshdata.c
+++ b/source/blender/python/bmesh/bmesh_py_types_meshdata.c
@@ -20,8 +20,8 @@
/** \file
* \ingroup pybmesh
*
- * This file defines customdata types which can't be accessed as primitive
- * python types such as MDeformVert, MLoopUV, MTexPoly
+ * This file defines custom-data types which can't be accessed as primitive
+ * python types such as #MDeformVert, #MLoopUV.
*/
#include <Python.h>
@@ -515,8 +515,8 @@ static PySequenceMethods bpy_bmdeformvert_as_sequence = {
NULL, /* sq_concat */
NULL, /* sq_repeat */
- /* note: if this is set PySequence_Check() returns True,
- * but in this case we dont want to be treated as a seq */
+ /* Note: if this is set #PySequence_Check() returns True,
+ * but in this case we don't want to be treated as a seq. */
NULL, /* sq_item */
NULL, /* sq_slice */
diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c
index 30cad991b55..d10d281c1f9 100644
--- a/source/blender/python/generic/idprop_py_api.c
+++ b/source/blender/python/generic/idprop_py_api.c
@@ -1428,8 +1428,9 @@ static int BPy_IDArray_ass_slice(BPy_IDArray *self, int begin, int end, PyObject
size = (end - begin);
alloc_len = size * elem_size;
- vec = MEM_mallocN(alloc_len,
- "array assignment"); /* NOTE: we count on int/float being the same size here */
+ /* NOTE: we count on int/float being the same size here */
+ vec = MEM_mallocN(alloc_len, "array assignment");
+
if (PyC_AsArray(vec, seq, size, py_type, is_double, "slice assignment: ") == -1) {
MEM_freeN(vec);
return -1;
diff --git a/source/blender/python/gpu/gpu_py_shader.c b/source/blender/python/gpu/gpu_py_shader.c
index 5d6989af4c3..cccf75513f9 100644
--- a/source/blender/python/gpu/gpu_py_shader.c
+++ b/source/blender/python/gpu/gpu_py_shader.c
@@ -37,7 +37,6 @@
#include "gpu_py_vertex_format.h"
/* -------------------------------------------------------------------- */
-
/** \name Enum Conversion.
* \{ */
diff --git a/source/blender/python/gpu/gpu_py_types.c b/source/blender/python/gpu/gpu_py_types.c
index f7909e38f7b..165af47b4b8 100644
--- a/source/blender/python/gpu/gpu_py_types.c
+++ b/source/blender/python/gpu/gpu_py_types.c
@@ -29,7 +29,6 @@
#include "gpu_py_types.h" /* own include */
/* -------------------------------------------------------------------- */
-
/** \name GPU Types Module
* \{ */
diff --git a/source/blender/python/intern/bpy_app_translations.c b/source/blender/python/intern/bpy_app_translations.c
index a48cd742448..3c1dbfba72e 100644
--- a/source/blender/python/intern/bpy_app_translations.c
+++ b/source/blender/python/intern/bpy_app_translations.c
@@ -890,7 +890,7 @@ PyObject *BPY_app_translations_struct(void)
void BPY_app_translations_end(void)
{
- /* Incase the object remains in a module's namespace, see T44127. */
+ /* In case the object remains in a module's name-space, see T44127. */
#ifdef WITH_INTERNATIONAL
_clear_translations_cache();
#endif
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index 71bc01d6b98..a73e4034ca6 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -808,7 +808,7 @@ int BPY_context_member_get(bContext *C, const char *member, bContextDataResult *
ptr = &(((BPy_StructRNA *)item)->ptr);
// result->ptr = ((BPy_StructRNA *)item)->ptr;
- CTX_data_pointer_set(result, ptr->id.data, ptr->type, ptr->data);
+ CTX_data_pointer_set(result, ptr->owner_id, ptr->type, ptr->data);
CTX_data_type_set(result, CTX_DATA_TYPE_POINTER);
done = true;
}
@@ -834,7 +834,7 @@ int BPY_context_member_get(bContext *C, const char *member, bContextDataResult *
BLI_addtail(&result->list, link);
#endif
ptr = &(((BPy_StructRNA *)list_item)->ptr);
- CTX_data_list_add(result, ptr->id.data, ptr->type, ptr->data);
+ CTX_data_list_add(result, ptr->owner_id, ptr->type, ptr->data);
}
else {
CLOG_INFO(BPY_LOG_CONTEXT,
diff --git a/source/blender/python/intern/bpy_msgbus.c b/source/blender/python/intern/bpy_msgbus.c
index 9db4201c252..630a0392dbd 100644
--- a/source/blender/python/intern/bpy_msgbus.c
+++ b/source/blender/python/intern/bpy_msgbus.c
@@ -269,7 +269,7 @@ static PyObject *bpy_msgbus_subscribe_rna(PyObject *UNUSED(self), PyObject *args
/* Note: we may want to have a way to pass this in. */
bContext *C = (bContext *)BPy_GetContext();
struct wmMsgBus *mbus = CTX_wm_message_bus(C);
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
wmMsgSubscribeValue msg_val_params = {0};
@@ -342,7 +342,7 @@ static PyObject *bpy_msgbus_publish_rna(PyObject *UNUSED(self), PyObject *args,
/* Note: we may want to have a way to pass this in. */
bContext *C = (bContext *)BPy_GetContext();
struct wmMsgBus *mbus = CTX_wm_message_bus(C);
- wmMsgParams_RNA msg_key_params = {{{0}}};
+ wmMsgParams_RNA msg_key_params = {{0}};
if (py_msgbus_rna_key_from_py(py_sub, &msg_key_params, error_prefix) == -1) {
return NULL;
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index aef4ab6667a..5e3b000c604 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -252,8 +252,9 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args)
ReportList *reports;
reports = MEM_mallocN(sizeof(ReportList), "wmOperatorReportList");
- BKE_reports_init(reports,
- RPT_STORE | RPT_OP_HOLD); /* own so these don't move into global reports */
+
+ /* Own so these don't move into global reports. */
+ BKE_reports_init(reports, RPT_STORE | RPT_OP_HOLD);
#ifdef BPY_RELEASE_GIL
/* release GIL, since a thread could be started from an operator
diff --git a/source/blender/python/intern/bpy_operator_wrap.c b/source/blender/python/intern/bpy_operator_wrap.c
index 8f2f08c7c37..2e88a2a5b06 100644
--- a/source/blender/python/intern/bpy_operator_wrap.c
+++ b/source/blender/python/intern/bpy_operator_wrap.c
@@ -58,7 +58,7 @@ static void operator_properties_init(wmOperatorType *ot)
/* set the default property: ot->prop */
{
/* Picky developers will notice that 'bl_property' won't work with inheritance
- * get direct from the dict to avoid raising a load of attribute errors (yes this isnt ideal)
+ * get direct from the dict to avoid raising a load of attribute errors (yes this isn't ideal)
* - campbell. */
PyObject *py_class_dict = py_class->tp_dict;
PyObject *bl_property = PyDict_GetItem(py_class_dict, bpy_intern_str_bl_property);
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c
index 50c61dd0061..9e734123caa 100644
--- a/source/blender/python/intern/bpy_props.c
+++ b/source/blender/python/intern/bpy_props.c
@@ -1505,6 +1505,10 @@ static const EnumPropertyItem *enum_items_from_py(PyObject *seq_fast,
/* calculate combine string length */
totbuf += id_str_size + name_str_size + desc_str_size + 3; /* 3 is for '\0's */
}
+ else if (item == Py_None) {
+ /* Only set since the rest is cleared. */
+ items[i].identifier = "";
+ }
else {
MEM_freeN(items);
PyErr_SetString(PyExc_TypeError,
@@ -2927,8 +2931,8 @@ static PyObject *BPy_StringProperty(PyObject *self, PyObject *args, PyObject *kw
prop = RNA_def_property(srna, id, PROP_STRING, subtype);
if (maxlen != 0) {
- RNA_def_property_string_maxlength(prop,
- maxlen + 1); /* +1 since it includes null terminator */
+ /* +1 since it includes null terminator. */
+ RNA_def_property_string_maxlength(prop, maxlen + 1);
}
if (def && def[0]) {
RNA_def_property_string_default(prop, def);
@@ -2979,6 +2983,8 @@ PyDoc_STRVAR(
" When an item only contains 4 items they define ``(identifier, name, description, "
"number)``.\n"
"\n"
+ " Separators may be added using None instead of a tuple."
+ "\n"
" For dynamic values a callback can be passed which returns a list in\n"
" the same format as the static list.\n"
" This function must take 2 arguments ``(self, context)``, **context may be None**.\n"
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index 9a8d8c5ec21..b85d48b67da 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -139,7 +139,7 @@ static void id_release_gc(struct ID *id)
if (PyType_IsSubtype(Py_TYPE(ob), &pyrna_struct_Type) ||
PyType_IsSubtype(Py_TYPE(ob), &pyrna_prop_Type)) {
BPy_DummyPointerRNA *ob_ptr = (BPy_DummyPointerRNA *)ob;
- if (ob_ptr->ptr.id.data == id) {
+ if (ob_ptr->ptr.owner_id == id) {
pyrna_invalidate(ob_ptr);
// printf("freeing: %p %s, %.200s\n", (void *)ob, id->name, Py_TYPE(ob)->tp_name);
// i++;
@@ -308,7 +308,7 @@ static bool rna_disallow_writes = false;
static bool rna_id_write_error(PointerRNA *ptr, PyObject *key)
{
- ID *id = ptr->id.data;
+ ID *id = ptr->owner_id;
if (id) {
const short idcode = GS(id->name);
/* May need more ID types added here. */
@@ -907,7 +907,7 @@ static PyObject *pyrna_struct_str(BPy_StructRNA *self)
static PyObject *pyrna_struct_repr(BPy_StructRNA *self)
{
- ID *id = self->ptr.id.data;
+ ID *id = self->ptr.owner_id;
PyObject *tmp_str;
PyObject *ret;
@@ -1019,7 +1019,7 @@ static PyObject *pyrna_prop_str(BPy_PropertyRNA *self)
static PyObject *pyrna_prop_repr_ex(BPy_PropertyRNA *self, const int index_dim, const int index)
{
- ID *id = self->ptr.id.data;
+ ID *id = self->ptr.owner_id;
PyObject *tmp_str;
PyObject *ret;
const char *path;
@@ -1982,7 +1982,7 @@ static int pyrna_py_to_prop(
return -1;
}
else if ((value != Py_None) && ((flag & PROP_ID_SELF_CHECK) &&
- ptr->id.data == ((BPy_StructRNA *)value)->ptr.id.data)) {
+ ptr->owner_id == ((BPy_StructRNA *)value)->ptr.owner_id)) {
PyErr_Format(PyExc_TypeError,
"%.200s %.200s.%.200s ID type does not support assignment to itself",
error_prefix,
@@ -3447,7 +3447,7 @@ static PyObject *pyrna_struct_subscript(BPy_StructRNA *self, PyObject *key)
return NULL;
}
- return BPy_IDGroup_WrapData(self->ptr.id.data, idprop, group);
+ return BPy_IDGroup_WrapData(self->ptr.owner_id, idprop, group);
}
static int pyrna_struct_ass_subscript(BPy_StructRNA *self, PyObject *key, PyObject *value)
@@ -3543,7 +3543,7 @@ static PyObject *pyrna_struct_items(BPy_PropertyRNA *self)
return PyList_New(0);
}
- return BPy_Wrap_GetItems(self->ptr.id.data, group);
+ return BPy_Wrap_GetItems(self->ptr.owner_id, group);
}
PyDoc_STRVAR(pyrna_struct_values_doc,
@@ -3571,7 +3571,7 @@ static PyObject *pyrna_struct_values(BPy_PropertyRNA *self)
return PyList_New(0);
}
- return BPy_Wrap_GetValues(self->ptr.id.data, group);
+ return BPy_Wrap_GetValues(self->ptr.owner_id, group);
}
PyDoc_STRVAR(pyrna_struct_is_property_set_doc,
@@ -4708,9 +4708,9 @@ PyDoc_STRVAR(pyrna_struct_get_id_data_doc,
static PyObject *pyrna_struct_get_id_data(BPy_DummyPointerRNA *self)
{
/* Used for struct and pointer since both have a ptr. */
- if (self->ptr.id.data) {
+ if (self->ptr.owner_id) {
PointerRNA id_ptr;
- RNA_id_pointer_create((ID *)self->ptr.id.data, &id_ptr);
+ RNA_id_pointer_create((ID *)self->ptr.owner_id, &id_ptr);
return pyrna_struct_CreatePyObject(&id_ptr);
}
@@ -4894,7 +4894,7 @@ static PyObject *pyrna_struct_get(BPy_StructRNA *self, PyObject *args)
idprop = IDP_GetPropertyFromGroup(group, key);
if (idprop) {
- return BPy_IDGroup_WrapData(self->ptr.id.data, idprop, group);
+ return BPy_IDGroup_WrapData(self->ptr.owner_id, idprop, group);
}
}
@@ -4937,7 +4937,7 @@ static PyObject *pyrna_struct_pop(BPy_StructRNA *self, PyObject *args)
idprop = IDP_GetPropertyFromGroup(group, key);
if (idprop) {
- PyObject *ret = BPy_IDGroup_WrapData(self->ptr.id.data, idprop, group);
+ PyObject *ret = BPy_IDGroup_WrapData(self->ptr.owner_id, idprop, group);
IDP_RemoveFromGroup(group, idprop);
return ret;
}
@@ -5787,7 +5787,7 @@ static PyObject *pyrna_param_to_py(PointerRNA *ptr, PropertyRNA *prop, void *dat
* and will break if a function returns a pointer from
* another ID block, watch this! - it should at least be
* easy to debug since they are all ID's */
- RNA_pointer_create(ptr->id.data, ptype, *(void **)data, &newptr);
+ RNA_pointer_create(ptr->owner_id, ptype, *(void **)data, &newptr);
}
}
@@ -5903,7 +5903,7 @@ static PyObject *pyrna_func_call(BPy_FunctionRNA *self, PyObject *args, PyObject
/* include the ID pointer for pyrna_param_to_py() so we can include the
* ID pointer on return values, this only works when returned values have
* the same ID as the functions. */
- RNA_pointer_create(self_ptr->id.data, &RNA_Function, self_func, &funcptr);
+ RNA_pointer_create(self_ptr->owner_id, &RNA_Function, self_func, &funcptr);
pyargs_len = PyTuple_GET_SIZE(args);
pykw_len = kw ? PyDict_Size(kw) : 0;
@@ -6987,7 +6987,7 @@ static void pyrna_subtype_set_rna(PyObject *newclass, StructRNA *srna)
/* Add staticmethods and classmethods. */
{
- const PointerRNA func_ptr = {{NULL}, srna, NULL};
+ const PointerRNA func_ptr = {NULL, srna, NULL};
const ListBase *lb;
Link *link;
@@ -7285,8 +7285,8 @@ PyObject *pyrna_struct_CreatePyObject(PointerRNA *ptr)
// PyC_ObSpit("NewStructRNA: ", (PyObject *)pyrna);
#ifdef USE_PYRNA_INVALIDATE_WEAKREF
- if (ptr->id.data) {
- id_weakref_pool_add(ptr->id.data, (BPy_DummyPointerRNA *)pyrna);
+ if (ptr->owner_id) {
+ id_weakref_pool_add(ptr->owner_id, (BPy_DummyPointerRNA *)pyrna);
}
#endif
return (PyObject *)pyrna;
@@ -7334,8 +7334,8 @@ PyObject *pyrna_prop_CreatePyObject(PointerRNA *ptr, PropertyRNA *prop)
pyrna->prop = prop;
#ifdef USE_PYRNA_INVALIDATE_WEAKREF
- if (ptr->id.data) {
- id_weakref_pool_add(ptr->id.data, (BPy_DummyPointerRNA *)pyrna);
+ if (ptr->owner_id) {
+ id_weakref_pool_add(ptr->owner_id, (BPy_DummyPointerRNA *)pyrna);
}
#endif
@@ -7358,7 +7358,7 @@ PyObject *pyrna_id_CreatePyObject(ID *id)
bool pyrna_id_FromPyObject(PyObject *obj, ID **id)
{
if (pyrna_id_CheckPyObject(obj)) {
- *id = ((BPy_StructRNA *)obj)->ptr.id.data;
+ *id = ((BPy_StructRNA *)obj)->ptr.owner_id;
return true;
}
else {
@@ -8557,9 +8557,10 @@ static PyObject *pyrna_register_class(PyObject *UNUSED(self), PyObject *py_class
}
if (PyDict_GetItem(((PyTypeObject *)py_class)->tp_dict, bpy_intern_str_bl_rna)) {
- PyErr_SetString(PyExc_ValueError,
- "register_class(...): "
- "already registered as a subclass");
+ PyErr_Format(PyExc_ValueError,
+ "register_class(...): "
+ "already registered as a subclass '%.200s'",
+ ((PyTypeObject *)py_class)->tp_name);
return NULL;
}
diff --git a/source/blender/python/intern/bpy_rna_anim.c b/source/blender/python/intern/bpy_rna_anim.c
index fb9454bf108..5e535d0e3ce 100644
--- a/source/blender/python/intern/bpy_rna_anim.c
+++ b/source/blender/python/intern/bpy_rna_anim.c
@@ -88,7 +88,7 @@ static int pyrna_struct_anim_args_parse_ex(PointerRNA *ptr,
path);
return -1;
}
- else if (ptr->id.data != r_ptr.id.data) {
+ else if (ptr->owner_id != r_ptr.owner_id) {
PyErr_Format(PyExc_ValueError, "%.200s path spans ID blocks", error_prefix, path);
return -1;
}
@@ -370,7 +370,7 @@ PyObject *pyrna_struct_keyframe_insert(BPy_StructRNA *self, PyObject *args, PyOb
return PyBool_FromLong(result);
}
else {
- ID *id = self->ptr.id.data;
+ ID *id = self->ptr.owner_id;
ReportList reports;
short result;
@@ -451,12 +451,12 @@ PyObject *pyrna_struct_keyframe_delete(BPy_StructRNA *self, PyObject *args, PyOb
}
if (prop) {
- ID *id = ptr.id.data;
+ ID *id = ptr.owner_id;
NlaStrip *strip = (NlaStrip *)ptr.data;
FCurve *fcu = list_find_fcurve(&strip->fcurves, RNA_property_identifier(prop), index);
- BLI_assert(fcu !=
- NULL); /* NOTE: This should be true, or else we wouldn't be able to get here */
+ /* NOTE: This should be true, or else we wouldn't be able to get here. */
+ BLI_assert(fcu != NULL);
if (BKE_fcurve_is_protected(fcu)) {
BKE_reportf(
@@ -502,7 +502,7 @@ PyObject *pyrna_struct_keyframe_delete(BPy_StructRNA *self, PyObject *args, PyOb
BKE_reports_init(&reports, RPT_STORE);
result = delete_keyframe(
- G.main, &reports, (ID *)self->ptr.id.data, NULL, group_name, path_full, index, cfra, 0);
+ G.main, &reports, (ID *)self->ptr.owner_id, NULL, group_name, path_full, index, cfra, 0);
MEM_freeN((void *)path_full);
if (BPy_reports_to_error(&reports, PyExc_RuntimeError, true) == -1) {
@@ -548,7 +548,7 @@ PyObject *pyrna_struct_driver_add(BPy_StructRNA *self, PyObject *args)
BKE_reports_init(&reports, RPT_STORE);
result = ANIM_add_driver(&reports,
- (ID *)self->ptr.id.data,
+ (ID *)self->ptr.owner_id,
path_full,
index,
CREATEDRIVER_WITH_FMODIFIER,
@@ -559,7 +559,7 @@ PyObject *pyrna_struct_driver_add(BPy_StructRNA *self, PyObject *args)
}
if (result) {
- ID *id = self->ptr.id.data;
+ ID *id = self->ptr.owner_id;
AnimData *adt = BKE_animdata_from_id(id);
FCurve *fcu;
@@ -629,7 +629,7 @@ PyObject *pyrna_struct_driver_remove(BPy_StructRNA *self, PyObject *args)
BKE_reports_init(&reports, RPT_STORE);
- result = ANIM_remove_driver(&reports, (ID *)self->ptr.id.data, path_full, index, 0);
+ result = ANIM_remove_driver(&reports, (ID *)self->ptr.owner_id, path_full, index, 0);
if (path != path_full) {
MEM_freeN((void *)path_full);
diff --git a/source/blender/python/intern/bpy_rna_array.c b/source/blender/python/intern/bpy_rna_array.c
index 9d8fff5dfe4..a8312d89ef8 100644
--- a/source/blender/python/intern/bpy_rna_array.c
+++ b/source/blender/python/intern/bpy_rna_array.c
@@ -554,8 +554,9 @@ static int py_to_array(PyObject *seq,
/* not freeing allocated mem, RNA_parameter_list_free() will do this */
ParameterDynAlloc *param_alloc = (ParameterDynAlloc *)param_data;
param_alloc->array_tot = (int)totitem;
- param_alloc->array = MEM_callocN(item_size * totitem,
- "py_to_array dyn"); /* freeing param list will free */
+
+ /* freeing param list will free */
+ param_alloc->array = MEM_callocN(item_size * totitem, "py_to_array dyn");
data = param_alloc->array;
}
diff --git a/source/blender/python/intern/bpy_rna_driver.c b/source/blender/python/intern/bpy_rna_driver.c
index e9e8d05aa74..a8d8252b231 100644
--- a/source/blender/python/intern/bpy_rna_driver.c
+++ b/source/blender/python/intern/bpy_rna_driver.c
@@ -91,7 +91,7 @@ bool pyrna_driver_is_equal_anim_rna(const PathResolvedRNA *anim_rna, const PyObj
const PointerRNA *ptr_a = &anim_rna->ptr;
const PointerRNA *ptr_b = &(((const BPy_StructRNA *)py_anim_rna)->ptr);
- if ((ptr_a->id.data == ptr_b->id.data) && (ptr_a->type == ptr_b->type) &&
+ if ((ptr_a->owner_id == ptr_b->owner_id) && (ptr_a->type == ptr_b->type) &&
(ptr_a->data == ptr_b->data)) {
return true;
}
diff --git a/source/blender/python/mathutils/mathutils.c b/source/blender/python/mathutils/mathutils.c
index befa6532e97..2b1ddbbb03a 100644
--- a/source/blender/python/mathutils/mathutils.c
+++ b/source/blender/python/mathutils/mathutils.c
@@ -25,6 +25,7 @@
#include "BLI_math.h"
#include "BLI_utildefines.h"
+#include "../generic/py_capi_utils.h"
#include "../generic/python_utildefines.h"
#ifndef MATH_STANDALONE
@@ -328,6 +329,153 @@ int mathutils_array_parse_alloc_v(float **array,
return size;
}
+/* Parse an sequence array_dim integers into array. */
+int mathutils_int_array_parse(int *array, int array_dim, PyObject *value, const char *error_prefix)
+{
+ int size, i;
+ PyObject *value_fast, **value_fast_items, *item;
+
+ if (!(value_fast = PySequence_Fast(value, error_prefix))) {
+ /* PySequence_Fast sets the error */
+ return -1;
+ }
+
+ if ((size = PySequence_Fast_GET_SIZE(value_fast)) != array_dim) {
+ PyErr_Format(PyExc_ValueError,
+ "%.200s: sequence size is %d, expected %d",
+ error_prefix,
+ size,
+ array_dim);
+ Py_DECREF(value_fast);
+ return -1;
+ }
+
+ value_fast_items = PySequence_Fast_ITEMS(value_fast);
+ i = size;
+ while (i > 0) {
+ i--;
+ if (((array[i] = PyC_Long_AsI32((item = value_fast_items[i]))) == -1) && PyErr_Occurred()) {
+ PyErr_Format(PyExc_TypeError, "%.200s: sequence index %d expected an int", error_prefix, i);
+ size = -1;
+ break;
+ }
+ }
+ Py_DECREF(value_fast);
+
+ return size;
+}
+
+/* Parse sequence of array_dim sequences of integers and return allocated result. */
+int mathutils_array_parse_alloc_vi(int **array,
+ int array_dim,
+ PyObject *value,
+ const char *error_prefix)
+{
+ PyObject *value_fast;
+ int i, size;
+
+ if (!(value_fast = PySequence_Fast(value, error_prefix))) {
+ /* PySequence_Fast sets the error */
+ return -1;
+ }
+
+ size = PySequence_Fast_GET_SIZE(value_fast);
+
+ if (size != 0) {
+ PyObject **value_fast_items = PySequence_Fast_ITEMS(value_fast);
+ int *ip;
+
+ ip = *array = PyMem_Malloc(size * array_dim * sizeof(int));
+
+ for (i = 0; i < size; i++, ip += array_dim) {
+ PyObject *item = value_fast_items[i];
+
+ if (mathutils_int_array_parse(ip, array_dim, item, error_prefix) == -1) {
+ PyMem_Free(*array);
+ *array = NULL;
+ size = -1;
+ break;
+ }
+ }
+ }
+
+ Py_DECREF(value_fast);
+ return size;
+}
+
+/* Parse sequence of variable-length sequences of int and return allocated
+ * triple of arrays to represent the result:
+ * The flattened sequences are put into *array.
+ * The start index of each sequence goes into start_table.
+ * The length of each index goes into len_table.
+ */
+int mathutils_array_parse_alloc_viseq(
+ int **array, int **start_table, int **len_table, PyObject *value, const char *error_prefix)
+{
+ PyObject *value_fast, *subseq;
+ int i, size, start, subseq_len;
+ int *ip;
+
+ *array = NULL;
+ *start_table = NULL;
+ *len_table = NULL;
+ if (!(value_fast = PySequence_Fast(value, error_prefix))) {
+ /* PySequence_Fast sets the error */
+ return -1;
+ }
+
+ size = PySequence_Fast_GET_SIZE(value_fast);
+
+ if (size != 0) {
+ PyObject **value_fast_items = PySequence_Fast_ITEMS(value_fast);
+
+ *start_table = PyMem_Malloc(size * sizeof(int));
+ *len_table = PyMem_Malloc(size * sizeof(int));
+
+ /* First pass to set starts and len, and calculate size of array needed */
+ start = 0;
+ for (i = 0; i < size; i++) {
+ subseq = value_fast_items[i];
+ if ((subseq_len = (int)PySequence_Size(subseq)) == -1) {
+ PyErr_Format(
+ PyExc_ValueError, "%.200s: sequence expected to have subsequences", error_prefix);
+ PyMem_Free(*start_table);
+ PyMem_Free(*len_table);
+ Py_DECREF(value_fast);
+ *start_table = NULL;
+ *len_table = NULL;
+ return -1;
+ }
+ (*start_table)[i] = start;
+ (*len_table)[i] = subseq_len;
+ start += subseq_len;
+ }
+
+ ip = *array = PyMem_Malloc(start * sizeof(int));
+
+ /* Second pass to parse the subsequences into array */
+ for (i = 0; i < size; i++) {
+ subseq = value_fast_items[i];
+ subseq_len = (*len_table)[i];
+
+ if (mathutils_int_array_parse(ip, subseq_len, subseq, error_prefix) == -1) {
+ PyMem_Free(*array);
+ PyMem_Free(*start_table);
+ PyMem_Free(*len_table);
+ *array = NULL;
+ *len_table = NULL;
+ *start_table = NULL;
+ size = -1;
+ break;
+ }
+ ip += subseq_len;
+ }
+ }
+
+ Py_DECREF(value_fast);
+ return size;
+}
+
int mathutils_any_to_rotmat(float rmat[3][3], PyObject *value, const char *error_prefix)
{
if (EulerObject_Check(value)) {
diff --git a/source/blender/python/mathutils/mathutils.h b/source/blender/python/mathutils/mathutils.h
index 8afd60a7324..70bd3a64481 100644
--- a/source/blender/python/mathutils/mathutils.h
+++ b/source/blender/python/mathutils/mathutils.h
@@ -96,16 +96,16 @@ int EXPP_VectorsAreEqual(const float *vecA, const float *vecB, int size, int flo
typedef struct Mathutils_Callback Mathutils_Callback;
-typedef int (*BaseMathCheckFunc)(BaseMathObject *); /* checks the user is still valid */
-typedef int (*BaseMathGetFunc)(BaseMathObject *, int); /* gets the vector from the user */
-typedef int (*BaseMathSetFunc)(BaseMathObject *,
- int); /* sets the users vector values once its modified */
-typedef int (*BaseMathGetIndexFunc)(BaseMathObject *,
- int,
- int); /* same as above but only for an index */
-typedef int (*BaseMathSetIndexFunc)(BaseMathObject *,
- int,
- int); /* same as above but only for an index */
+/** Checks the user is still valid. */
+typedef int (*BaseMathCheckFunc)(BaseMathObject *);
+/** Gets the vector from the user. */
+typedef int (*BaseMathGetFunc)(BaseMathObject *, int);
+/** Sets the users vector values once its modified. */
+typedef int (*BaseMathSetFunc)(BaseMathObject *, int);
+/** Same as above but only for an index. */
+typedef int (*BaseMathGetIndexFunc)(BaseMathObject *, int, int);
+/** Same as above but only for an index. */
+typedef int (*BaseMathSetIndexFunc)(BaseMathObject *, int, int);
struct Mathutils_Callback {
BaseMathCheckFunc check;
@@ -167,6 +167,16 @@ int mathutils_array_parse_alloc_v(float **array,
int array_dim,
PyObject *value,
const char *error_prefix);
+int mathutils_int_array_parse(int *array,
+ int array_dim,
+ PyObject *value,
+ const char *error_prefix);
+int mathutils_array_parse_alloc_vi(int **array,
+ int array_dim,
+ PyObject *value,
+ const char *error_prefix);
+int mathutils_array_parse_alloc_viseq(
+ int **array, int **start_table, int **len_table, PyObject *value, const char *error_prefix);
int mathutils_any_to_rotmat(float rmat[3][3], PyObject *value, const char *error_prefix);
Py_hash_t mathutils_array_hash(const float *float_array, size_t array_len);
diff --git a/source/blender/python/mathutils/mathutils_Matrix.c b/source/blender/python/mathutils/mathutils_Matrix.c
index 2e664616639..6fd0fab2cdd 100644
--- a/source/blender/python/mathutils/mathutils_Matrix.c
+++ b/source/blender/python/mathutils/mathutils_Matrix.c
@@ -2534,7 +2534,7 @@ static PyObject *Matrix_mul(PyObject *m1, PyObject *m2)
return NULL;
}
/*------------------------obj *= obj------------------------------
- * Inplace element-wise multiplication */
+ * In place element-wise multiplication */
static PyObject *Matrix_imul(PyObject *m1, PyObject *m2)
{
float scalar;
@@ -2567,7 +2567,7 @@ static PyObject *Matrix_imul(PyObject *m1, PyObject *m2)
mul_vn_vn(mat1->matrix, mat2->matrix, mat1->num_col * mat1->num_row);
#else
PyErr_Format(PyExc_TypeError,
- "Inplace element-wise multiplication: "
+ "In place element-wise multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(m1)->tp_name,
Py_TYPE(m2)->tp_name);
@@ -2580,7 +2580,7 @@ static PyObject *Matrix_imul(PyObject *m1, PyObject *m2)
}
else {
PyErr_Format(PyExc_TypeError,
- "Inplace element-wise multiplication: "
+ "In place element-wise multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(m1)->tp_name,
Py_TYPE(m2)->tp_name);
@@ -2668,7 +2668,7 @@ static PyObject *Matrix_matmul(PyObject *m1, PyObject *m2)
return NULL;
}
/*------------------------obj @= obj------------------------------
- * inplace matrix multiplication */
+ * In place matrix multiplication */
static PyObject *Matrix_imatmul(PyObject *m1, PyObject *m2)
{
MatrixObject *mat1 = NULL, *mat2 = NULL;
@@ -2715,7 +2715,7 @@ static PyObject *Matrix_imatmul(PyObject *m1, PyObject *m2)
}
else {
PyErr_Format(PyExc_TypeError,
- "Inplace matrix multiplication: "
+ "In place matrix multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(m1)->tp_name,
Py_TYPE(m2)->tp_name);
diff --git a/source/blender/python/mathutils/mathutils_Quaternion.c b/source/blender/python/mathutils/mathutils_Quaternion.c
index 0885e024251..267971408bf 100644
--- a/source/blender/python/mathutils/mathutils_Quaternion.c
+++ b/source/blender/python/mathutils/mathutils_Quaternion.c
@@ -935,7 +935,7 @@ static PyObject *Quaternion_imul(PyObject *q1, PyObject *q2)
mul_vn_vn(quat1->quat, quat2->quat, QUAT_SIZE);
#else
PyErr_Format(PyExc_TypeError,
- "Inplace element-wise multiplication: "
+ "In place element-wise multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(q1)->tp_name,
Py_TYPE(q2)->tp_name);
@@ -1015,7 +1015,7 @@ static PyObject *Quaternion_matmul(PyObject *q1, PyObject *q2)
return NULL;
}
/*------------------------obj @= obj------------------------------
- * inplace quaternion multiplication */
+ * in-place quaternion multiplication */
static PyObject *Quaternion_imatmul(PyObject *q1, PyObject *q2)
{
float quat[QUAT_SIZE];
@@ -1040,7 +1040,7 @@ static PyObject *Quaternion_imatmul(PyObject *q1, PyObject *q2)
}
else {
PyErr_Format(PyExc_TypeError,
- "Inplace quaternion multiplication: "
+ "In place quaternion multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(q1)->tp_name,
Py_TYPE(q2)->tp_name);
diff --git a/source/blender/python/mathutils/mathutils_Vector.c b/source/blender/python/mathutils/mathutils_Vector.c
index 1f17d1eebf2..aa7cbadde14 100644
--- a/source/blender/python/mathutils/mathutils_Vector.c
+++ b/source/blender/python/mathutils/mathutils_Vector.c
@@ -786,10 +786,8 @@ static PyObject *Vector_to_track_quat(VectorObject *self, PyObject *args)
return NULL;
}
- /*
- * flip vector around, since vectoquat expect a vector from target to tracking object
- * and the python function expects the inverse (a vector to the target).
- */
+ /* Flip vector around, since #vec_to_quat expect a vector from target to tracking object
+ * and the python function expects the inverse (a vector to the target). */
negate_v3_v3(vec, self->vec);
vec_to_quat(quat, vec, track, up);
@@ -1834,7 +1832,7 @@ static PyObject *Vector_imul(PyObject *v1, PyObject *v2)
mul_vn_vn(vec1->vec, vec2->vec, vec1->size);
#else
PyErr_Format(PyExc_TypeError,
- "Inplace element-wise multiplication: "
+ "In place element-wise multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(v1)->tp_name,
Py_TYPE(v2)->tp_name);
@@ -1847,7 +1845,7 @@ static PyObject *Vector_imul(PyObject *v1, PyObject *v2)
}
else {
PyErr_Format(PyExc_TypeError,
- "Inplace element-wise multiplication: "
+ "In place element-wise multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(v1)->tp_name,
Py_TYPE(v2)->tp_name);
@@ -1925,7 +1923,7 @@ static PyObject *Vector_matmul(PyObject *v1, PyObject *v2)
static PyObject *Vector_imatmul(PyObject *v1, PyObject *v2)
{
PyErr_Format(PyExc_TypeError,
- "Inplace vector multiplication: "
+ "In place vector multiplication: "
"not supported between '%.200s' and '%.200s' types",
Py_TYPE(v1)->tp_name,
Py_TYPE(v2)->tp_name);
diff --git a/source/blender/python/mathutils/mathutils_geometry.c b/source/blender/python/mathutils/mathutils_geometry.c
index d4f56490627..13d36e5af91 100644
--- a/source/blender/python/mathutils/mathutils_geometry.c
+++ b/source/blender/python/mathutils/mathutils_geometry.c
@@ -29,6 +29,7 @@
# include "BLI_blenlib.h"
# include "BLI_boxpack_2d.h"
# include "BLI_convexhull_2d.h"
+# include "BLI_delaunay_2d.h"
# include "BKE_displist.h"
# include "BKE_curve.h"
#endif
@@ -283,6 +284,42 @@ static PyObject *M_Geometry_intersect_sphere_sphere_2d(PyObject *UNUSED(self), P
return ret;
}
+PyDoc_STRVAR(M_Geometry_intersect_tri_tri_2d_doc,
+ ".. function:: intersect_tri_tri_2d(tri_a1, tri_a2, tri_a3, tri_b1, tri_b2, tri_b3)\n"
+ "\n"
+ " Check if two 2D triangles intersect.\n"
+ "\n"
+ " :rtype: bool\n");
+static PyObject *M_Geometry_intersect_tri_tri_2d(PyObject *UNUSED(self), PyObject *args)
+{
+ const char *error_prefix = "intersect_tri_tri_2d";
+ PyObject *tri_pair_py[2][3];
+ float tri_pair[2][3][2];
+
+ if (!PyArg_ParseTuple(args,
+ "OOOOOO:intersect_tri_tri_2d",
+ &tri_pair_py[0][0],
+ &tri_pair_py[0][1],
+ &tri_pair_py[0][2],
+ &tri_pair_py[1][0],
+ &tri_pair_py[1][1],
+ &tri_pair_py[1][2])) {
+ return NULL;
+ }
+
+ for (int i = 0; i < 2; i++) {
+ for (int j = 0; j < 3; j++) {
+ if (mathutils_array_parse(
+ tri_pair[i][j], 2, 2 | MU_ARRAY_SPILL, tri_pair_py[i][j], error_prefix) == -1) {
+ return NULL;
+ }
+ }
+ }
+
+ bool ret = isect_tri_tri_v2(UNPACK3(tri_pair[0]), UNPACK3(tri_pair[1]));
+ return PyBool_FromLong(ret);
+}
+
PyDoc_STRVAR(M_Geometry_normal_doc,
".. function:: normal(vectors)\n"
"\n"
@@ -1176,7 +1213,7 @@ static PyObject *M_Geometry_tessellate_polygon(PyObject *UNUSED(self), PyObject
PyObject *polyLine, *polyVec;
int i, len_polylines, len_polypoints, ls_error = 0;
- /* display listbase */
+ /* Display #ListBase. */
ListBase dispbase = {NULL, NULL};
DispList *dl;
float *fp; /*pointer to the array of malloced dl->verts to set the points from the vectors */
@@ -1262,7 +1299,7 @@ static PyObject *M_Geometry_tessellate_polygon(PyObject *UNUSED(self), PyObject
BKE_displist_fill(&dispbase, &dispbase, NULL, false);
/* The faces are stored in a new DisplayList
- * that's added to the head of the listbase */
+ * that's added to the head of the #ListBase. */
dl = dispbase.first;
tri_list = PyList_New(dl->parts);
@@ -1471,6 +1508,186 @@ static PyObject *M_Geometry_convex_hull_2d(PyObject *UNUSED(self), PyObject *poi
return ret;
}
+/* Return a PyObject that is a list of lists, using the flattened list array
+ * to fill values, with start_table and len_table giving the start index
+ * and length of the toplevel_len sub-lists.
+ */
+static PyObject *list_of_lists_from_arrays(int *array,
+ int *start_table,
+ int *len_table,
+ int toplevel_len)
+{
+ PyObject *ret, *sublist;
+ int i, j, sublist_len, sublist_start, val;
+
+ ret = PyList_New(toplevel_len);
+ for (i = 0; i < toplevel_len; i++) {
+ sublist_len = len_table[i];
+ sublist = PyList_New(sublist_len);
+ sublist_start = start_table[i];
+ for (j = 0; j < sublist_len; j++) {
+ val = array[sublist_start + j];
+ PyList_SET_ITEM(sublist, j, PyLong_FromLong(val));
+ }
+ PyList_SET_ITEM(ret, i, sublist);
+ }
+ return ret;
+}
+
+PyDoc_STRVAR(
+ M_Geometry_delaunay_2d_cdt_doc,
+ ".. function:: delaunay_2d_cdt(vert_coords, edges, faces, output_type, epsilon)\n"
+ "\n"
+ "Computes the Constrained Delaunay Triangulation of a set of vertices, "
+ "with edges and faces that must appear in the triangulation. "
+ "Some triangles may be eaten away, or combined with other triangles, "
+ "according to output type. "
+ "The returned verts may be in a different order from input verts, may be moved "
+ "slightly, and may be merged with other nearby verts. "
+ "The three returned orig lists give, for each of verts, edges, and faces, the list of "
+ "input element indices corresponding to the positionally same output element. "
+ "For edges, the orig indices start with the input edges and then continue "
+ "with the edges implied by each of the faces (n of them for an n-gon).\n"
+ "\n"
+ " :arg vert_coords: Vertex coordinates (2d)\n"
+ " :type vert_coords: list of :class:`mathutils.Vector`\n"
+ " :arg edges: Edges, as pairs of indices in `vert_coords`\n"
+ " :type edges: list of (int, int)\n"
+ " :arg faces: Faces, each sublist is a face, as indices in `vert_coords` (CCW oriented)\n"
+ " :type faces: list of list of int\n"
+ " :arg output_type: What output looks like. 0 => triangles with convex hull. "
+ "1 => triangles inside constraints. "
+ "2 => the input constraints, intersected. "
+ "3 => like 2 but with extra edges to make valid BMesh faces.\n"
+ " :type output_type: int\\n"
+ " :arg epsilon: For nearness tests; should not be zero\n"
+ " :type epsilon: float\n"
+ " :return: Output tuple, (vert_coords, edges, faces, orig_verts, orig_edges, orig_faces)\n"
+ " :rtype: (list of `mathutils.Vector`, "
+ "list of (int, int), "
+ "list of list of int, "
+ "list of list of int, "
+ "list of list of int, "
+ "list of list of int)\n"
+ "\n");
+static PyObject *M_Geometry_delaunay_2d_cdt(PyObject *UNUSED(self), PyObject *args)
+{
+ const char *error_prefix = "delaunay_2d_cdt";
+ PyObject *vert_coords, *edges, *faces, *item;
+ int output_type;
+ float epsilon;
+ float(*in_coords)[2] = NULL;
+ int(*in_edges)[2] = NULL;
+ int *in_faces = NULL;
+ int *in_faces_start_table = NULL;
+ int *in_faces_len_table = NULL;
+ Py_ssize_t vert_coords_len, edges_len, faces_len;
+ CDT_input in;
+ CDT_result *res = NULL;
+ PyObject *out_vert_coords = NULL;
+ PyObject *out_edges = NULL;
+ PyObject *out_faces = NULL;
+ PyObject *out_orig_verts = NULL;
+ PyObject *out_orig_edges = NULL;
+ PyObject *out_orig_faces = NULL;
+ PyObject *ret_value = NULL;
+ int i;
+
+ if (!PyArg_ParseTuple(
+ args, "OOOif:delaunay_2d_cdt", &vert_coords, &edges, &faces, &output_type, &epsilon)) {
+ return NULL;
+ }
+
+ vert_coords_len = mathutils_array_parse_alloc_v(
+ (float **)&in_coords, 2, vert_coords, error_prefix);
+ if (vert_coords_len == -1) {
+ return NULL;
+ }
+
+ edges_len = mathutils_array_parse_alloc_vi((int **)&in_edges, 2, edges, error_prefix);
+ if (edges_len == -1) {
+ goto exit_cdt;
+ }
+
+ faces_len = mathutils_array_parse_alloc_viseq(
+ &in_faces, &in_faces_start_table, &in_faces_len_table, faces, error_prefix);
+ if (faces_len == -1) {
+ goto exit_cdt;
+ }
+
+ in.verts_len = (int)vert_coords_len;
+ in.vert_coords = in_coords;
+ in.edges_len = edges_len;
+ in.faces_len = faces_len;
+ in.edges = in_edges;
+ in.faces = in_faces;
+ in.faces_start_table = in_faces_start_table;
+ in.faces_len_table = in_faces_len_table;
+ in.epsilon = epsilon;
+
+ res = BLI_delaunay_2d_cdt_calc(&in, output_type);
+
+ ret_value = PyTuple_New(6);
+
+ out_vert_coords = PyList_New(res->verts_len);
+ for (i = 0; i < res->verts_len; i++) {
+ item = Vector_CreatePyObject(res->vert_coords[i], 2, NULL);
+ if (item == NULL) {
+ Py_DECREF(ret_value);
+ Py_DECREF(out_vert_coords);
+ goto exit_cdt;
+ }
+ PyList_SET_ITEM(out_vert_coords, i, item);
+ }
+ PyTuple_SET_ITEM(ret_value, 0, out_vert_coords);
+
+ out_edges = PyList_New(res->edges_len);
+ for (i = 0; i < res->edges_len; i++) {
+ item = PyTuple_New(2);
+ PyTuple_SET_ITEM(item, 0, PyLong_FromLong((long)res->edges[i][0]));
+ PyTuple_SET_ITEM(item, 1, PyLong_FromLong((long)res->edges[i][1]));
+ PyList_SET_ITEM(out_edges, i, item);
+ }
+ PyTuple_SET_ITEM(ret_value, 1, out_edges);
+
+ out_faces = list_of_lists_from_arrays(
+ res->faces, res->faces_start_table, res->faces_len_table, res->faces_len);
+ PyTuple_SET_ITEM(ret_value, 2, out_faces);
+
+ out_orig_verts = list_of_lists_from_arrays(
+ res->verts_orig, res->verts_orig_start_table, res->verts_orig_len_table, res->verts_len);
+ PyTuple_SET_ITEM(ret_value, 3, out_orig_verts);
+
+ out_orig_edges = list_of_lists_from_arrays(
+ res->edges_orig, res->edges_orig_start_table, res->edges_orig_len_table, res->edges_len);
+ PyTuple_SET_ITEM(ret_value, 4, out_orig_edges);
+
+ out_orig_faces = list_of_lists_from_arrays(
+ res->faces_orig, res->faces_orig_start_table, res->faces_orig_len_table, res->faces_len);
+ PyTuple_SET_ITEM(ret_value, 5, out_orig_faces);
+
+exit_cdt:
+ if (in_coords != NULL) {
+ PyMem_Free(in_coords);
+ }
+ if (in_edges != NULL) {
+ PyMem_Free(in_edges);
+ }
+ if (in_faces != NULL) {
+ PyMem_Free(in_faces);
+ }
+ if (in_faces_start_table != NULL) {
+ PyMem_Free(in_faces_start_table);
+ }
+ if (in_faces_len_table != NULL) {
+ PyMem_Free(in_faces_len_table);
+ }
+ if (res) {
+ BLI_delaunay_2d_cdt_free(res);
+ }
+ return ret_value;
+}
+
#endif /* MATH_STANDALONE */
static PyMethodDef M_Geometry_methods[] = {
@@ -1526,6 +1743,10 @@ static PyMethodDef M_Geometry_methods[] = {
(PyCFunction)M_Geometry_intersect_sphere_sphere_2d,
METH_VARARGS,
M_Geometry_intersect_sphere_sphere_2d_doc},
+ {"intersect_tri_tri_2d",
+ (PyCFunction)M_Geometry_intersect_tri_tri_2d,
+ METH_VARARGS,
+ M_Geometry_intersect_tri_tri_2d_doc},
{"area_tri", (PyCFunction)M_Geometry_area_tri, METH_VARARGS, M_Geometry_area_tri_doc},
{"volume_tetrahedron",
(PyCFunction)M_Geometry_volume_tetrahedron,
@@ -1553,6 +1774,10 @@ static PyMethodDef M_Geometry_methods[] = {
(PyCFunction)M_Geometry_convex_hull_2d,
METH_O,
M_Geometry_convex_hull_2d_doc},
+ {"delaunay_2d_cdt",
+ (PyCFunction)M_Geometry_delaunay_2d_cdt,
+ METH_VARARGS,
+ M_Geometry_delaunay_2d_cdt_doc},
{"box_fit_2d", (PyCFunction)M_Geometry_box_fit_2d, METH_O, M_Geometry_box_fit_2d_doc},
{"box_pack_2d", (PyCFunction)M_Geometry_box_pack_2d, METH_O, M_Geometry_box_pack_2d_doc},
#endif
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index dee8dbfaa24..12e9123b5cb 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -33,7 +33,6 @@
struct BakePixel;
struct Depsgraph;
-struct IDProperty;
struct Main;
struct Object;
struct Render;
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 93b85b6b96a..dc18bac541f 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -28,11 +28,9 @@
#include "DNA_vec_types.h"
#include "DEG_depsgraph.h"
-struct Depsgraph;
struct Image;
struct ImageFormatData;
struct Main;
-struct NodeBlurData;
struct Object;
struct RenderData;
struct RenderResult;
@@ -41,7 +39,6 @@ struct Scene;
struct StampData;
struct ViewLayer;
struct bMovieHandle;
-struct bNodeTree;
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* this include is what is exposed of render to outside world */
@@ -256,7 +253,7 @@ void RE_SetView(struct Render *re, float mat[4][4]);
/* get current view and window transform */
void RE_GetViewPlane(struct Render *re, rctf *r_viewplane, rcti *r_disprect);
-/* set the render threads based on the commandline and autothreads setting */
+/* set the render threads based on the command-line and autothreads setting */
void RE_init_threadcount(Render *re);
bool RE_WriteRenderViewsImage(struct ReportList *reports,
diff --git a/source/blender/render/extern/include/RE_render_ext.h b/source/blender/render/extern/include/RE_render_ext.h
index 6771eb53abd..bca3b749192 100644
--- a/source/blender/render/extern/include/RE_render_ext.h
+++ b/source/blender/render/extern/include/RE_render_ext.h
@@ -31,9 +31,6 @@
struct Depsgraph;
struct ImagePool;
struct MTex;
-struct Render;
-struct Scene;
-struct ViewLayer;
/* render_texture.c */
/* used by particle.c, effect.c, editmesh_modes.c and brush.c, returns 1 if rgb, 0 otherwise */
diff --git a/source/blender/render/extern/include/RE_shader_ext.h b/source/blender/render/extern/include/RE_shader_ext.h
index c5e3575d1f9..792b2b7e071 100644
--- a/source/blender/render/extern/include/RE_shader_ext.h
+++ b/source/blender/render/extern/include/RE_shader_ext.h
@@ -41,10 +41,8 @@ typedef struct BakeImBufuserData {
} BakeImBufuserData;
/* node shaders... */
-struct ImBuf;
struct ImagePool;
struct MTex;
-struct Object;
struct Tex;
/* this one uses nodes */
diff --git a/source/blender/render/intern/source/bake_api.c b/source/blender/render/intern/source/bake_api.c
index c61c9b4dd7a..4e5a83555eb 100644
--- a/source/blender/render/intern/source/bake_api.c
+++ b/source/blender/render/intern/source/bake_api.c
@@ -700,7 +700,7 @@ void RE_bake_pixels_populate(Mesh *me,
}
else {
int uv_id = CustomData_get_named_layer(&me->ldata, CD_MLOOPUV, uv_layer);
- mloopuv = CustomData_get_layer_n(&me->ldata, CD_MTFACE, uv_id);
+ mloopuv = CustomData_get_layer_n(&me->ldata, CD_MLOOPUV, uv_id);
}
if (mloopuv == NULL) {
diff --git a/source/blender/render/intern/source/imagetexture.c b/source/blender/render/intern/source/imagetexture.c
index a2a713a5591..9672184cec8 100644
--- a/source/blender/render/intern/source/imagetexture.c
+++ b/source/blender/render/intern/source/imagetexture.c
@@ -267,7 +267,7 @@ int imagewrap(Tex *tex,
if (texres->nor) {
if (tex->imaflag & TEX_NORMALMAP) {
- /* qdn: normal from color
+ /* Normal from color:
* The invert of the red channel is to make
* the normal map compliant with the outside world.
* It needs to be done because in Blender
@@ -947,7 +947,7 @@ static void alpha_clip_aniso(
float alphaclip;
rctf rf;
- /* TXF apha: we're doing the same alphaclip here as boxsample, but i'm doubting
+ /* TXF alpha: we're doing the same alpha-clip here as box-sample, but I'm doubting
* if this is actually correct for the all the filtering algorithms .. */
if (!(extflag == TXC_REPT || extflag == TXC_EXTD)) {
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 8764671ae04..b4d0c2147f2 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -642,7 +642,7 @@ void RE_FreeRender(Render *re)
BLI_freelistN(&re->view_layers);
BLI_freelistN(&re->r.views);
- curvemapping_free_data(&re->r.mblur_shutter_curve);
+ BKE_curvemapping_free_data(&re->r.mblur_shutter_curve);
/* main dbase can already be invalid now, some database-free code checks it */
re->main = NULL;
@@ -772,12 +772,12 @@ static void re_init_resolution(Render *re, Render *source, int winx, int winy, r
void render_copy_renderdata(RenderData *to, RenderData *from)
{
BLI_freelistN(&to->views);
- curvemapping_free_data(&to->mblur_shutter_curve);
+ BKE_curvemapping_free_data(&to->mblur_shutter_curve);
*to = *from;
BLI_duplicatelist(&to->views, &from->views);
- curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve);
+ BKE_curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve);
}
/* what doesn't change during entire render sequence */
@@ -1680,7 +1680,6 @@ static void do_render_all_options(Render *re)
{
Object *camera;
bool render_seq = false;
- int cfra = re->r.cfra;
re->current_scene_update(re->suh, re->scene);
@@ -1692,16 +1691,6 @@ static void do_render_all_options(Render *re)
BKE_image_all_free_anim_ibufs(re->main, re->r.cfra);
BKE_sequencer_all_free_anim_ibufs(re->scene, re->r.cfra);
- /* Update for sequencer and compositing animation.
- * TODO: ideally we would create a depsgraph with a copy of the scene
- * like the render engine, but sequencer and compositing do not (yet?)
- * work with copy-on-write. */
- BKE_animsys_evaluate_all_animation(re->main, NULL, re->scene, (float)cfra);
-
- /* Update for masks
- * (these do not use animsys but own lighter weight structure to define animation). */
- BKE_mask_evaluate_all_masks(re->main, (float)cfra, true);
-
if (RE_engine_render(re, 1)) {
/* in this case external render overrides all */
}
@@ -2003,8 +1992,8 @@ static int render_initialize_from_main(Render *re,
winx = (rd->size * rd->xsch) / 100;
winy = (rd->size * rd->ysch) / 100;
- /* We always render smaller part, inserting it in larger image is compositor bizz,
- * it uses disprect for it. */
+ /* We always render smaller part, inserting it in larger image is compositor business,
+ * it uses 'disprect' for it. */
if (scene->r.mode & R_BORDER) {
disprect.xmin = rd->border.xmin * winx;
disprect.xmax = rd->border.xmax * winx;
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index 75ddf7e0b22..3ede55434b9 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -557,8 +557,8 @@ static float density_falloff(PointDensityRangeData *pdr, int index, float square
}
if (pdr->density_curve && dist != 0.0f) {
- curvemapping_initialize(pdr->density_curve);
- density = curvemapping_evaluateF(pdr->density_curve, 0, density / dist) * dist;
+ BKE_curvemapping_initialize(pdr->density_curve);
+ density = BKE_curvemapping_evaluateF(pdr->density_curve, 0, density / dist) * dist;
}
return density;
diff --git a/source/blender/render/intern/source/render_texture.c b/source/blender/render/intern/source/render_texture.c
index 67555b70be2..be53a1cb067 100644
--- a/source/blender/render/intern/source/render_texture.c
+++ b/source/blender/render/intern/source/render_texture.c
@@ -896,8 +896,6 @@ static int cubemap_glob(const float n[3], float x, float y, float z, float *adr1
/* ------------------------------------------------------------------------- */
-/* ------------------------------------------------------------------------- */
-
static void do_2d_mapping(
const MTex *mtex, float texvec[3], const float n[3], float dxt[3], float dyt[3])
{
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index 64f506f03a8..ddd0ddb46da 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -69,6 +69,7 @@ set(SRC
intern/wm_operators.c
intern/wm_panel_type.c
intern/wm_playanim.c
+ intern/wm_splash_screen.c
intern/wm_stereo.c
intern/wm_subwindow.c
intern/wm_toolsystem.c
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 5d6e405dd5d..13be8701c27 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -53,19 +53,15 @@ struct PropertyRNA;
struct ScrArea;
struct ViewLayer;
struct bContext;
-struct bToolRef_Runtime;
struct rcti;
struct wmDrag;
struct wmDropBox;
struct wmEvent;
-struct wmEventHandler;
struct wmEventHandler_Keymap;
struct wmEventHandler_UI;
struct wmGenericUserData;
struct wmGesture;
struct wmJob;
-struct wmMsgSubscribeKey;
-struct wmMsgSubscribeValue;
struct wmOperator;
struct wmOperatorType;
struct wmPaintCursor;
@@ -162,6 +158,7 @@ enum {
WM_WINDOW_RENDER = 1,
WM_WINDOW_USERPREFS,
WM_WINDOW_DRIVERS,
+ WM_WINDOW_INFO,
// WM_WINDOW_FILESEL // UNUSED
};
@@ -420,11 +417,14 @@ int WM_operator_call_py(struct bContext *C,
struct ReportList *reports,
const bool is_undo);
+/* Used for keymap and macro items. */
void WM_operator_properties_alloc(struct PointerRNA **ptr,
struct IDProperty **properties,
- const char *opstring); /* used for keymap and macro items */
-void WM_operator_properties_sanitize(
- struct PointerRNA *ptr, const bool no_context); /* make props context sensitive or not */
+ const char *opstring);
+
+/* Make props context sensitive or not. */
+void WM_operator_properties_sanitize(struct PointerRNA *ptr, const bool no_context);
+
bool WM_operator_properties_default(struct PointerRNA *ptr, const bool do_update);
void WM_operator_properties_reset(struct wmOperator *op);
void WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring);
diff --git a/source/blender/windowmanager/WM_types.h b/source/blender/windowmanager/WM_types.h
index 195822efd7e..7fdbf79248b 100644
--- a/source/blender/windowmanager/WM_types.h
+++ b/source/blender/windowmanager/WM_types.h
@@ -117,7 +117,6 @@ struct ID;
struct ImBuf;
struct bContext;
struct wmEvent;
-struct wmMsgBus;
struct wmOperator;
struct wmWindowManager;
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h b/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h
index f0771437518..00df6edef22 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_intern.h
@@ -22,8 +22,6 @@
#define __WM_GIZMO_INTERN_H__
struct BLI_Buffer;
-struct GHashIterator;
-struct GizmoGeomInfo;
struct wmGizmoMap;
struct wmKeyConfig;
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
index f5ae5427ac7..094fdf3f514 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_target_props.c
@@ -84,6 +84,7 @@ void WM_gizmo_target_property_def_rna_ptr(wmGizmo *gz,
/* if gizmo evokes an operator we cannot use it for property manipulation */
BLI_assert(gz->op_data == NULL);
+ BLI_assert(prop != NULL);
gz_prop->type = gz_prop_type;
@@ -101,6 +102,9 @@ void WM_gizmo_target_property_def_rna(
{
const wmGizmoPropertyType *gz_prop_type = WM_gizmotype_target_property_find(gz->type, idname);
PropertyRNA *prop = RNA_struct_find_property(ptr, propname);
+ if (prop == NULL) {
+ RNA_warning("%s: %s.%s not found", __func__, RNA_struct_identifier(ptr->type), propname);
+ }
WM_gizmo_target_property_def_rna_ptr(gz, gz_prop_type, ptr, prop, index);
}
diff --git a/source/blender/windowmanager/gizmo/wm_gizmo_fn.h b/source/blender/windowmanager/gizmo/wm_gizmo_fn.h
index 242b0f6de80..58b58fa01d0 100644
--- a/source/blender/windowmanager/gizmo/wm_gizmo_fn.h
+++ b/source/blender/windowmanager/gizmo/wm_gizmo_fn.h
@@ -25,6 +25,8 @@
#include "BLI_compiler_attrs.h"
+struct wmMsgBus;
+
/* wmGizmoGroup */
typedef bool (*wmGizmoGroupFnPoll)(const struct bContext *,
struct wmGizmoGroupType *) ATTR_WARN_UNUSED_RESULT;
diff --git a/source/blender/windowmanager/gizmo/wm_gizmo_wmapi.h b/source/blender/windowmanager/gizmo/wm_gizmo_wmapi.h
index 33c0d305e59..cc9ccc5f4bb 100644
--- a/source/blender/windowmanager/gizmo/wm_gizmo_wmapi.h
+++ b/source/blender/windowmanager/gizmo/wm_gizmo_wmapi.h
@@ -31,11 +31,9 @@
#ifndef __WM_GIZMO_WMAPI_H__
#define __WM_GIZMO_WMAPI_H__
-struct wmEventHandler;
struct wmEventHandler_Gizmo;
struct wmEventHandler_Op;
struct wmGizmoMap;
-struct wmOperator;
struct wmOperatorType;
/* -------------------------------------------------------------------- */
diff --git a/source/blender/windowmanager/intern/wm_dragdrop.c b/source/blender/windowmanager/intern/wm_dragdrop.c
index 6b3bd1ea24e..ba6a0c4ebe1 100644
--- a/source/blender/windowmanager/intern/wm_dragdrop.c
+++ b/source/blender/windowmanager/intern/wm_dragdrop.c
@@ -403,7 +403,7 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect)
/* XXX todo, multiline drag draws... but maybe not, more types mixed wont work well */
GPU_blend(true);
for (drag = wm->drags.first; drag; drag = drag->next) {
- const char text_col[] = {255, 255, 255, 255};
+ const uchar text_col[] = {255, 255, 255, 255};
int iconsize = UI_DPI_ICON_SIZE;
int padding = 4 * UI_DPI_FAC;
@@ -461,7 +461,7 @@ void wm_drags_draw(bContext *C, wmWindow *win, rcti *rect)
drag_rect_minmax(rect, x, y, x + w, y + iconsize);
}
else {
- UI_fontstyle_draw_simple(fstyle, x, y, wm_drag_name(drag), (uchar *)text_col);
+ UI_fontstyle_draw_simple(fstyle, x, y, wm_drag_name(drag), text_col);
}
/* operator name with roundbox */
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index cea2f127b3e..51191b45439 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -1406,8 +1406,10 @@ static int wm_operator_invoke(bContext *C,
if (WM_operator_poll(C, ot)) {
wmWindowManager *wm = CTX_wm_manager(C);
- wmOperator *op = wm_operator_create(
- wm, ot, properties, reports); /* if reports == NULL, they'll be initialized */
+
+ /* if reports == NULL, they'll be initialized */
+ wmOperator *op = wm_operator_create(wm, ot, properties, reports);
+
const bool is_nested_call = (wm->op_undo_depth != 0);
if (event != NULL) {
@@ -2257,7 +2259,7 @@ static int wm_handler_operator_call(bContext *C,
if (ot && wm_operator_check_locked_interface(C, ot)) {
bool use_last_properties = true;
- PointerRNA tool_properties = {{0}};
+ PointerRNA tool_properties = {0};
bToolRef *keymap_tool = ((handler_base->type == WM_HANDLER_TYPE_KEYMAP) ?
((wmEventHandler_Keymap *)handler_base)->keymap_tool :
@@ -2691,6 +2693,12 @@ static int wm_handlers_do_intern(bContext *C, wmEvent *event, ListBase *handlers
wmKeyMap *keymap = WM_event_get_keymap_from_handler(wm, handler);
action |= wm_handlers_do_keymap_with_keymap_handler(
C, event, handlers, handler, keymap, do_debug_handler);
+
+ /* Clear the tool-tip whenever a key binding is handled, without this tool-tips
+ * are kept when a modal operators starts (annoying but otherwise harmless). */
+ if (action & WM_HANDLER_BREAK) {
+ WM_tooltip_clear(C, CTX_wm_window(C));
+ }
}
else if (handler_base->type == WM_HANDLER_TYPE_UI) {
wmEventHandler_UI *handler = (wmEventHandler_UI *)handler_base;
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 10773cf58e1..8546290d281 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -77,6 +77,7 @@
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_idprop.h"
+#include "BKE_library_override.h"
#include "BKE_main.h"
#include "BKE_packedFile.h"
#include "BKE_report.h"
@@ -1061,6 +1062,7 @@ void wm_homefile_read(bContext *C,
}
}
+/* -------------------------------------------------------------------- */
/** \name WM History File API
* \{ */
@@ -1189,6 +1191,10 @@ static void wm_history_file_update(void)
/** \} */
+/* -------------------------------------------------------------------- */
+/** \name Save Main .blend File (internal)
+ * \{ */
+
/* screen can be NULL */
static ImBuf *blend_file_thumb(const bContext *C,
Scene *scene,
@@ -1346,10 +1352,13 @@ static bool wm_file_write(bContext *C, const char *filepath, int fileflags, Repo
}
}
- /* Call pre-save callbacks befores writing preview,
+ /* Call pre-save callbacks before writing preview,
* that way you can generate custom file thumbnail. */
BLI_callback_exec(bmain, NULL, BLI_CB_EVT_SAVE_PRE);
+ /* Enforce full override check/generation on file save. */
+ BKE_main_override_library_operations_create(bmain, true);
+
/* blend file thumbnail */
/* Save before exit_editmode, otherwise derivedmeshes for shared data corrupt T27765. */
/* Main now can store a '.blend' thumbnail, useful for background mode
@@ -1422,7 +1431,11 @@ static bool wm_file_write(bContext *C, const char *filepath, int fileflags, Repo
return ok;
}
-/************************ autosave ****************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Auto-Save API
+ * \{ */
void wm_autosave_location(char *filepath)
{
@@ -1550,6 +1563,9 @@ void wm_autosave_read(bContext *C, ReportList *reports)
WM_file_read(C, filename, reports);
}
+/** \} */
+
+/* -------------------------------------------------------------------- */
/** \name Initialize WM_OT_open_xxx properties
*
* Check if load_ui was set by the caller.
@@ -1593,8 +1609,8 @@ void WM_file_tag_modified(void)
}
}
+/* -------------------------------------------------------------------- */
/** \name Preferences/startup save & load.
- *
* \{ */
/**
@@ -1792,7 +1808,9 @@ static void wm_userpref_update_when_changed(bContext *C,
BPY_execute_string(C, (const char *[]){"addon_utils", NULL}, "addon_utils.reset_all()");
#endif
+ WM_reinit_gizmomap_all(bmain);
WM_keyconfig_reload(C);
+
userdef_curr->runtime.is_dirty = is_dirty;
}
@@ -1947,6 +1965,10 @@ static int wm_homefile_read_exec(bContext *C, wmOperator *op)
if (use_userdef) {
wm_userpref_read_exceptions(&U, &U_backup);
SET_FLAG_FROM_TEST(G.f, use_factory_settings, G_FLAG_USERPREF_NO_SAVE_ON_EXIT);
+
+ if (use_factory_settings) {
+ U.runtime.is_dirty = true;
+ }
}
return OPERATOR_FINISHED;
@@ -2035,8 +2057,8 @@ void WM_OT_read_factory_settings(wmOperatorType *ot)
/** \} */
-/** \name Open main .blend file.
- *
+/* -------------------------------------------------------------------- */
+/** \name Open Main .blend File Utilities
* \{ */
/**
@@ -2062,8 +2084,7 @@ static bool wm_file_read_opwrap(bContext *C,
return success;
}
-/* Generic operator state utilities
- *********************************************/
+/* Generic operator state utilities */
static void create_operator_state(wmOperatorType *ot, int first_state)
{
@@ -2101,8 +2122,11 @@ static int operator_state_dispatch(bContext *C, wmOperator *op, OperatorDispatch
return OPERATOR_CANCELLED;
}
-/* Open Mainfile operator
- ********************************************/
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Open Main .blend File Operator
+ * \{ */
enum {
OPEN_MAINFILE_STATE_DISCARD_CHANGES,
@@ -2326,8 +2350,8 @@ void WM_OT_open_mainfile(wmOperatorType *ot)
/** \} */
-/** \name Reload (revert) main .blend file.
- *
+/* -------------------------------------------------------------------- */
+/** \name Reload (revert) Main .blend File Operator
* \{ */
static int wm_revert_mainfile_exec(bContext *C, wmOperator *op)
@@ -2381,8 +2405,8 @@ void WM_OT_revert_mainfile(wmOperatorType *ot)
/** \} */
+/* -------------------------------------------------------------------- */
/** \name Recover last session & auto-save.
- *
* \{ */
void WM_recover_last_session(bContext *C, ReportList *reports)
@@ -2478,8 +2502,8 @@ void WM_OT_recover_auto_save(wmOperatorType *ot)
/** \} */
-/** \name Save main .blend file.
- *
+/* -------------------------------------------------------------------- */
+/** \name Save Main .blend File Operator
* \{ */
static void wm_filepath_default(char *filepath)
@@ -2707,8 +2731,8 @@ void WM_OT_save_mainfile(wmOperatorType *ot)
/** \} */
+/* -------------------------------------------------------------------- */
/** \name Auto-execution of scripts warning popup
- *
* \{ */
static void wm_block_autorun_warning_ignore(bContext *C, void *arg_block, void *UNUSED(arg))
@@ -2812,6 +2836,12 @@ static uiBlock *block_create_autorun_warning(struct bContext *C,
/* Buttons */
uiBut *but;
uiLayout *split = uiLayoutSplit(layout, 0.0f, true);
+ uiLayoutSetScaleY(split, 1.2f);
+
+ /* empty space */
+ col = uiLayoutColumn(split, false);
+ uiItemS(col);
+
col = uiLayoutColumn(split, false);
/* Allow reload if we have a saved file.
@@ -2852,12 +2882,9 @@ static uiBlock *block_create_autorun_warning(struct bContext *C,
TIP_("Enable scripts"));
UI_but_func_set(but, wm_block_autorun_warning_enable_scripts, block, NULL);
}
+ UI_but_drawflag_disable(but, UI_BUT_TEXT_LEFT);
- /* empty space between buttons */
col = uiLayoutColumn(split, false);
- uiItemS(col);
-
- col = uiLayoutColumn(split, 1);
but = uiDefIconTextBut(block,
UI_BTYPE_BUT,
0,
@@ -2874,8 +2901,10 @@ static uiBlock *block_create_autorun_warning(struct bContext *C,
0,
TIP_("Continue using file without Python scripts"));
UI_but_func_set(but, wm_block_autorun_warning_ignore, block, NULL);
+ UI_but_drawflag_disable(but, UI_BUT_TEXT_LEFT);
+ UI_but_flag_enable(but, UI_BUT_ACTIVE_DEFAULT);
- UI_block_bounds_set_centered(block, 10);
+ UI_block_bounds_set_centered(block, 14 * U.dpi_fac);
return block;
}
@@ -2978,7 +3007,7 @@ static void wm_block_file_close_cancel_button(uiBlock *block, wmGenericCallback
static void wm_block_file_close_discard_button(uiBlock *block, wmGenericCallback *post_action)
{
uiBut *but = uiDefIconTextBut(
- block, UI_BTYPE_BUT, 0, 0, IFACE_("Discard Changes"), 0, 0, 0, UI_UNIT_Y, 0, 0, 0, 0, 0, "");
+ block, UI_BTYPE_BUT, 0, 0, IFACE_("Don't Save"), 0, 0, 0, UI_UNIT_Y, 0, 0, 0, 0, 0, "");
UI_but_func_set(but, wm_block_file_close_discard, block, post_action);
UI_but_drawflag_disable(but, UI_BUT_TEXT_LEFT);
}
@@ -2998,8 +3027,28 @@ static uiBlock *block_create__close_file_dialog(struct bContext *C, struct ARegi
{
wmGenericCallback *post_action = (wmGenericCallback *)arg1;
Main *bmain = CTX_data_main(C);
-
uiStyle *style = UI_style_get();
+ uiFontStyle *fs = &style->widgetlabel;
+
+ /* Filename */
+ const char *blendfile_pathpath = BKE_main_blendfile_path(bmain);
+ char filename[FILE_MAX];
+ if (blendfile_pathpath[0] != '\0') {
+ BLI_split_file_part(blendfile_pathpath, filename, sizeof(filename));
+ BLI_path_extension_replace(filename, sizeof(filename), "");
+ }
+ else {
+ BLI_snprintf(filename, sizeof(filename), IFACE_("Untitled"));
+ }
+
+ /* Title */
+ char title[FILE_MAX + 100];
+ UI_text_clip_middle_ex(
+ fs, filename, U.widget_unit * 9, U.widget_unit * 2, sizeof(filename), '\0');
+ BLI_snprintf(title, sizeof(title), TIP_("Save changes to \"%s\" before closing?"), filename);
+ int title_width = MAX2(UI_fontstyle_string_width(fs, title), U.widget_unit * 22);
+
+ /* Create dialog */
uiBlock *block = UI_block_begin(C, ar, close_file_dialog_name, UI_EMBOSS);
UI_block_flag_enable(
@@ -3012,19 +3061,13 @@ static uiBlock *block_create__close_file_dialog(struct bContext *C, struct ARegi
UI_LAYOUT_PANEL,
10,
2,
- U.widget_unit * 24,
+ U.widget_unit * 2 + title_width,
U.widget_unit * 6,
0,
style);
/* Title */
- bool blend_file_is_saved = BKE_main_blendfile_path(bmain)[0] != '\0';
- if (blend_file_is_saved) {
- uiItemL(layout, "This file has unsaved changes.", ICON_INFO);
- }
- else {
- uiItemL(layout, "This file has not been saved yet.", ICON_INFO);
- }
+ uiItemL(layout, title, ICON_ERROR);
/* Image Saving */
ReportList reports;
@@ -3038,6 +3081,7 @@ static uiBlock *block_create__close_file_dialog(struct bContext *C, struct ARegi
(modified_images_count == 1) ? "Save %u modified image" :
"Save %u modified images",
modified_images_count);
+ uiItemS(layout);
uiDefButBitC(block,
UI_BTYPE_CHECKBOX,
1,
@@ -3070,10 +3114,12 @@ static uiBlock *block_create__close_file_dialog(struct bContext *C, struct ARegi
const bool windows_layout = false;
#endif
- uiLayout *split = uiLayoutSplit(layout, 0.0f, true);
-
if (windows_layout) {
/* Windows standard layout. */
+
+ uiLayout *split = uiLayoutSplit(layout, 0.18f, true);
+ uiLayoutSetScaleY(split, 1.2f);
+
uiLayout *col = uiLayoutColumn(split, false);
uiItemS(col);
@@ -3088,20 +3134,24 @@ static uiBlock *block_create__close_file_dialog(struct bContext *C, struct ARegi
}
else {
/* macOS and Linux standard layout. */
- uiLayout *col = uiLayoutColumn(split, false);
+
+ uiLayout *split = uiLayoutSplit(layout, 0.0f, true);
+ uiLayoutSetScaleY(split, 1.2f);
+
+ uiLayout *col = uiLayoutColumn(split, true);
wm_block_file_close_discard_button(block, post_action);
- col = uiLayoutColumn(split, false);
+ col = uiLayoutColumn(split, true);
uiItemS(col);
- col = uiLayoutColumn(split, false);
+ col = uiLayoutColumn(split, true);
wm_block_file_close_cancel_button(block, post_action);
col = uiLayoutColumn(split, false);
wm_block_file_close_save_button(block, post_action);
}
- UI_block_bounds_set_centered(block, 10);
+ UI_block_bounds_set_centered(block, 14 * U.dpi_fac);
return block;
}
diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c
index f22b5d07686..fcb55d3f801 100644
--- a/source/blender/windowmanager/intern/wm_operator_props.c
+++ b/source/blender/windowmanager/intern/wm_operator_props.c
@@ -512,8 +512,9 @@ void WM_operator_properties_checker_interval_from_op(struct wmOperator *op,
op_params->nth = nth;
op_params->skip = skip;
- op_params->offset = mod_i(offset,
- nth + skip); /* so input of offset zero ends up being (nth - 1) */
+
+ /* So input of offset zero ends up being (nth - 1). */
+ op_params->offset = mod_i(offset, nth + skip);
}
bool WM_operator_properties_checker_interval_test(const struct CheckerIntervalParams *op_params,
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index ea1aa8ea4ea..b10a4ce6794 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -46,7 +46,6 @@
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
#include "DNA_windowmanager_types.h"
-#include "DNA_workspace_types.h"
#include "BLT_translation.h"
@@ -58,10 +57,6 @@
#include "BLI_math.h"
#include "BLI_utildefines.h"
-#include "BLO_readfile.h"
-
-#include "BKE_appdir.h"
-#include "BKE_blender_version.h"
#include "BKE_brush.h"
#include "BKE_context.h"
#include "BKE_global.h"
@@ -87,7 +82,6 @@
#include "GPU_state.h"
#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
#include "ED_numinput.h"
#include "ED_screen.h"
@@ -107,14 +101,17 @@
#include "wm.h"
#include "wm_draw.h"
-#include "wm_event_system.h"
#include "wm_event_types.h"
#include "wm_files.h"
#include "wm_window.h"
#define UNDOCUMENTED_OPERATOR_TIP N_("(undocumented operator)")
-/* ************ operator API, exported ********** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Operator API
+ * \{ */
/* SOME_OT_op -> some.op */
void WM_operator_py_idname(char *to, const char *from)
@@ -371,7 +368,7 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr
continue;
}
- if (ptr->id.data == ctx_item_ptr.id.data) {
+ if (ptr->owner_id == ctx_item_ptr.owner_id) {
if ((ptr->data == ctx_item_ptr.data) && (ptr->type == ctx_item_ptr.type)) {
/* found! */
member_found = identifier;
@@ -405,13 +402,13 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr
{
const char *member_id = NULL;
- if (ptr->id.data) {
+ if (ptr->owner_id) {
# define CTX_TEST_PTR_ID(C, member, idptr) \
{ \
const char *ctx_member = member; \
PointerRNA ctx_item_ptr = CTX_data_pointer_get(C, ctx_member); \
- if (ctx_item_ptr.id.data == idptr) { \
+ if (ctx_item_ptr.owner_id == idptr) { \
member_id = ctx_member; \
break; \
} \
@@ -423,7 +420,7 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr
const char *ctx_member = member; \
const char *ctx_member_full = member_full; \
PointerRNA ctx_item_ptr = CTX_data_pointer_get(C, ctx_member); \
- if (ctx_item_ptr.id.data && cast(ctx_item_ptr.id.data) == idptr) { \
+ if (ctx_item_ptr.owner_id && (ID *)cast(ctx_item_ptr.owner_id) == idptr) { \
member_id = ctx_member_full; \
break; \
} \
@@ -450,19 +447,19 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr
} \
(void)0
- switch (GS(((ID *)ptr->id.data)->name)) {
+ switch (GS(ptr->owner_id->name)) {
case ID_SCE: {
- CTX_TEST_PTR_ID(C, "scene", ptr->id.data);
+ CTX_TEST_PTR_ID(C, "scene", ptr->owner_id);
break;
}
case ID_OB: {
- CTX_TEST_PTR_ID(C, "object", ptr->id.data);
+ CTX_TEST_PTR_ID(C, "object", ptr->owner_id);
break;
}
/* from rna_Main_objects_new */
case OB_DATA_SUPPORT_ID_CASE: {
# define ID_CAST_OBDATA(id_pt) (((Object *)(id_pt))->data)
- CTX_TEST_PTR_ID_CAST(C, "object", "object.data", ID_CAST_OBDATA, ptr->id.data);
+ CTX_TEST_PTR_ID_CAST(C, "object", "object.data", ID_CAST_OBDATA, ptr->owner_id);
break;
# undef ID_CAST_OBDATA
}
@@ -470,18 +467,18 @@ static const char *wm_context_member_from_ptr(bContext *C, const PointerRNA *ptr
# define ID_CAST_OBMATACT(id_pt) \
(give_current_material(((Object *)id_pt), ((Object *)id_pt)->actcol))
CTX_TEST_PTR_ID_CAST(
- C, "object", "object.active_material", ID_CAST_OBMATACT, ptr->id.data);
+ C, "object", "object.active_material", ID_CAST_OBMATACT, ptr->owner_id);
break;
# undef ID_CAST_OBMATACT
}
case ID_WO: {
# define ID_CAST_SCENEWORLD(id_pt) (((Scene *)(id_pt))->world)
- CTX_TEST_PTR_ID_CAST(C, "scene", "scene.world", ID_CAST_SCENEWORLD, ptr->id.data);
+ CTX_TEST_PTR_ID_CAST(C, "scene", "scene.world", ID_CAST_SCENEWORLD, ptr->owner_id);
break;
# undef ID_CAST_SCENEWORLD
}
case ID_SCR: {
- CTX_TEST_PTR_ID(C, "screen", ptr->id.data);
+ CTX_TEST_PTR_ID(C, "screen", ptr->owner_id);
SpaceLink *space_data = CTX_wm_space_data(C);
@@ -695,7 +692,11 @@ void WM_operator_properties_free(PointerRNA *ptr)
}
}
-/* ************ default op callbacks, exported *********** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Default Operator Callbacks
+ * \{ */
void WM_operator_view3d_unit_defaults(struct bContext *C, struct wmOperator *op)
{
@@ -1110,7 +1111,7 @@ static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op)
/* if register is not enabled, the operator gets freed on OPERATOR_FINISHED
* ui_apply_but_funcs_after calls ED_undo_operator_repeate_cb and crashes */
- assert(op->type->flag & OPTYPE_REGISTER);
+ BLI_assert(op->type->flag & OPTYPE_REGISTER);
UI_block_func_handle_set(block, wm_block_redo_cb, arg_op);
layout = UI_block_layout(
@@ -1395,7 +1396,13 @@ int WM_operator_redo_popup(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
-/* ***************** Debug menu ************************* */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Debug Menu Operator
+ *
+ * Set internal debug value, mainly for developers.
+ * \{ */
static int wm_debug_menu_exec(bContext *C, wmOperator *op)
{
@@ -1425,7 +1432,12 @@ static void WM_OT_debug_menu(wmOperatorType *ot)
RNA_def_int(ot->srna, "debug_value", 0, SHRT_MIN, SHRT_MAX, "Debug Value", "", -10000, 10000);
}
-/* ***************** Operator defaults ************************* */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Reset Defaults Operator
+ * \{ */
+
static int wm_operator_defaults_exec(bContext *C, wmOperator *op)
{
PointerRNA ptr = CTX_data_pointer_get_type(C, "active_operator", &RNA_Operator);
@@ -1451,260 +1463,11 @@ static void WM_OT_operator_defaults(wmOperatorType *ot)
ot->flag = OPTYPE_INTERNAL;
}
-/* ***************** Splash Screen ************************* */
-
-static void wm_block_splash_close(bContext *C, void *arg_block, void *UNUSED(arg))
-{
- wmWindow *win = CTX_wm_window(C);
- UI_popup_block_close(C, win, arg_block);
-}
-
-static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *arg_unused);
-
-static void wm_block_splash_refreshmenu(bContext *C, void *UNUSED(arg_block), void *UNUSED(arg))
-{
- ARegion *ar_menu = CTX_wm_menu(C);
- ED_region_tag_refresh_ui(ar_menu);
-}
-
-static void wm_block_splash_add_label(uiBlock *block, const char *label, int x, int *y)
-{
- if (!(label && label[0])) {
- return;
- }
-
- uiStyle *style = UI_style_get();
-
- BLF_size(style->widgetlabel.uifont_id, style->widgetlabel.points, U.pixelsize * U.dpi);
- int label_width = BLF_width(style->widgetlabel.uifont_id, label, strlen(label));
- label_width = label_width + U.widget_unit;
-
- UI_block_emboss_set(block, UI_EMBOSS_NONE);
-
- uiBut *but = uiDefBut(block,
- UI_BTYPE_LABEL,
- 0,
- label,
- x - label_width,
- *y,
- label_width,
- UI_UNIT_Y,
- NULL,
- 0,
- 0,
- 0,
- 0,
- NULL);
-
- /* 1 = UI_SELECT, internal flag to draw in white. */
- UI_but_flag_enable(but, 1);
- UI_block_emboss_set(block, UI_EMBOSS);
- *y -= 12 * U.dpi_fac;
-}
-
-static void wm_block_splash_add_labels(uiBlock *block, int x, int y)
-{
- /* Version number. */
- const char *version_suffix = NULL;
- bool show_build_info = true;
-
- if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "alpha")) {
- version_suffix = " Alpha";
- }
- else if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "beta")) {
- version_suffix = " Beta";
- }
- else if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "rc")) {
- version_suffix = " Release Candidate";
- show_build_info = false;
- }
- else if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "release")) {
- version_suffix = STRINGIFY(BLENDER_VERSION_CHAR);
- show_build_info = false;
- }
-
- char version_buf[256] = "\0";
- BLI_snprintf(version_buf,
- sizeof(version_buf),
- "v %d.%d%s",
- BLENDER_VERSION / 100,
- BLENDER_VERSION % 100,
- version_suffix);
-
- wm_block_splash_add_label(block, version_buf, x, &y);
-
-#ifdef WITH_BUILDINFO
- if (show_build_info) {
- extern unsigned long build_commit_timestamp;
- extern char build_hash[], build_commit_date[], build_commit_time[], build_branch[];
-
- /* Date, hidden for builds made from tag. */
- if (build_commit_timestamp != 0) {
- char date_buf[256] = "\0";
- BLI_snprintf(
- date_buf, sizeof(date_buf), "Date: %s %s", build_commit_date, build_commit_time);
- wm_block_splash_add_label(block, date_buf, x, &y);
- }
-
- /* Hash. */
- char hash_buf[256] = "\0";
- BLI_snprintf(hash_buf, sizeof(hash_buf), "Hash: %s", build_hash);
- wm_block_splash_add_label(block, hash_buf, x, &y);
-
- /* Branch. */
- if (!STREQ(build_branch, "master")) {
- char branch_buf[256] = "\0";
- BLI_snprintf(branch_buf, sizeof(branch_buf), "Branch: %s", build_branch);
-
- wm_block_splash_add_label(block, branch_buf, x, &y);
- }
- }
-#else
- UNUSED_VARS(show_build_info);
-#endif /* WITH_BUILDINFO */
-}
-
-static ImBuf *wm_block_splash_image(void)
-{
-#ifndef WITH_HEADLESS
- extern char datatoc_splash_png[];
- extern int datatoc_splash_png_size;
- extern char datatoc_splash_2x_png[];
- extern int datatoc_splash_2x_png_size;
-
- ImBuf *ibuf = NULL;
-
- if (U.dpi_fac > 1.0) {
- ibuf = IMB_ibImageFromMemory((const uchar *)datatoc_splash_2x_png,
- datatoc_splash_2x_png_size,
- IB_rect,
- NULL,
- "<splash screen>");
- }
- else {
- ibuf = IMB_ibImageFromMemory((const uchar *)datatoc_splash_png,
- datatoc_splash_png_size,
- IB_rect,
- NULL,
- "<splash screen>");
- }
-
- /* overwrite splash with template image */
- if (U.app_template[0] != '\0') {
- ImBuf *ibuf_template = NULL;
- char splash_filepath[FILE_MAX];
- char template_directory[FILE_MAX];
-
- if (BKE_appdir_app_template_id_search(
- U.app_template, template_directory, sizeof(template_directory))) {
- BLI_join_dirfile(splash_filepath,
- sizeof(splash_filepath),
- template_directory,
- (U.dpi_fac > 1.0) ? "splash_2x.png" : "splash.png");
- ibuf_template = IMB_loadiffname(splash_filepath, IB_rect, NULL);
- if (ibuf_template) {
- const int x_expect = ibuf->x;
- const int y_expect = 250 * (int)U.dpi_fac;
- /* don't cover the header text */
- if (ibuf_template->x == x_expect && ibuf_template->y == y_expect) {
- memcpy(ibuf->rect,
- ibuf_template->rect,
- ibuf_template->x * ibuf_template->y * sizeof(char[4]));
- }
- else {
- CLOG_ERROR(WM_LOG_OPERATORS,
- "Splash expected %dx%d found %dx%d, ignoring: %s\n",
- x_expect,
- y_expect,
- ibuf_template->x,
- ibuf_template->y,
- splash_filepath);
- }
- IMB_freeImBuf(ibuf_template);
- }
- }
- }
- return ibuf;
-#else
- return NULL;
-#endif
-}
-
-static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(arg))
-{
- uiBlock *block;
- uiBut *but;
- uiStyle *style = UI_style_get();
-
- block = UI_block_begin(C, ar, "splash", UI_EMBOSS);
-
- /* note on UI_BLOCK_NO_WIN_CLIP, the window size is not always synchronized
- * with the OS when the splash shows, window clipping in this case gives
- * ugly results and clipping the splash isn't useful anyway, just disable it [#32938] */
- UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_KEEP_OPEN | UI_BLOCK_NO_WIN_CLIP);
- UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
-
- ImBuf *ibuf = wm_block_splash_image();
- but = uiDefBut(block,
- UI_BTYPE_IMAGE,
- 0,
- "",
- 0,
- 0.5f * U.widget_unit,
- U.dpi_fac * 501,
- U.dpi_fac * 250,
- ibuf,
- 0.0,
- 0.0,
- 0,
- 0,
- ""); /* button owns the imbuf now */
- UI_but_func_set(but, wm_block_splash_close, block, NULL);
- UI_block_func_set(block, wm_block_splash_refreshmenu, block, NULL);
-
- int x = U.dpi_fac * 502;
- int y = U.dpi_fac * 237;
-
- wm_block_splash_add_labels(block, x, y);
-
- uiLayout *layout = UI_block_layout(block,
- UI_LAYOUT_VERTICAL,
- UI_LAYOUT_PANEL,
- U.dpi_fac * 26,
- 0,
- U.dpi_fac * 450,
- U.dpi_fac * 110,
- 0,
- style);
-
- MenuType *mt = WM_menutype_find("WM_MT_splash", true);
- if (mt) {
- UI_menutype_draw(C, mt, layout);
- }
-
- UI_block_bounds_set_centered(block, 0);
-
- return block;
-}
-
-static int wm_splash_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
-{
- UI_popup_block_invoke(C, wm_block_create_splash, NULL, NULL);
-
- return OPERATOR_FINISHED;
-}
-
-static void WM_OT_splash(wmOperatorType *ot)
-{
- ot->name = "Splash Screen";
- ot->idname = "WM_OT_splash";
- ot->description = "Open the splash screen with release info";
-
- ot->invoke = wm_splash_invoke;
- ot->poll = WM_operator_winactive;
-}
+/** \} */
-/* ***************** Search menu ************************* */
+/* -------------------------------------------------------------------- */
+/** \name Operator Search Menu
+ * \{ */
struct SearchPopupInit_Data {
int size[2];
@@ -1824,7 +1587,8 @@ static const char *wm_call_menu_get_name(wmOperatorType *ot, PointerRNA *ptr)
char idname[BKE_ST_MAXNAME];
RNA_string_get(ptr, "name", idname);
MenuType *mt = WM_menutype_find(idname, true);
- return (mt) ? mt->label : ot->name;
+ return (mt) ? CTX_IFACE_(mt->translation_context, mt->label) :
+ CTX_IFACE_(ot->translation_context, ot->name);
}
static void WM_OT_call_menu(wmOperatorType *ot)
@@ -1888,7 +1652,8 @@ static const char *wm_call_panel_get_name(wmOperatorType *ot, PointerRNA *ptr)
char idname[BKE_ST_MAXNAME];
RNA_string_get(ptr, "name", idname);
PanelType *pt = WM_paneltype_find(idname, true);
- return (pt) ? pt->label : ot->name;
+ return (pt) ? CTX_IFACE_(pt->translation_context, pt->label) :
+ CTX_IFACE_(ot->translation_context, ot->name);
}
static void WM_OT_call_panel(wmOperatorType *ot)
@@ -1911,7 +1676,11 @@ static void WM_OT_call_panel(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
-/* ************ window / screen operator definitions ************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Window/Screen Operators
+ * \{ */
/* this poll functions is needed in place of WM_operator_winactive
* while it crashes on full screen */
@@ -2000,7 +1769,11 @@ static void WM_OT_quit_blender(wmOperatorType *ot)
ot->exec = wm_exit_blender_exec;
}
-/* *********************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Console Toggle Operator (WIN32 only)
+ * \{ */
#if defined(WIN32)
@@ -2023,12 +1796,16 @@ static void WM_OT_console_toggle(wmOperatorType *ot)
#endif
-/* ************ default paint cursors, draw always around cursor *********** */
-/*
- * - returns handler to free
- * - poll(bContext): returns 1 if draw should happen
- * - draw(bContext): drawing callback for paint cursor
- */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name default paint cursors, draw always around cursor
+ *
+ * - Returns handler to free.
+ * - `poll(bContext)`: returns 1 if draw should happen.
+ * - `draw(bContext)`: drawing callback for paint cursor.
+ *
+ * \{ */
wmPaintCursor *WM_paint_cursor_activate(wmWindowManager *wm,
short space_type,
@@ -2065,7 +1842,11 @@ bool WM_paint_cursor_end(wmWindowManager *wm, wmPaintCursor *handle)
return false;
}
-/* *********************** radial control ****************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Radial Control Operator
+ * \{ */
#define WM_RADIAL_CONTROL_DISPLAY_SIZE (200 * UI_DPI_FAC)
#define WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE (35 * UI_DPI_FAC)
@@ -3029,7 +2810,13 @@ static void WM_OT_radial_control(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
-/* ************************** timer for testing ***************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Redraw Timer Operator
+ *
+ * Use for simple benchmarks.
+ * \{ */
/* uses no type defines, fully local testing function anyway... ;) */
@@ -3221,7 +3008,13 @@ static void WM_OT_redraw_timer(wmOperatorType *ot)
60.0);
}
-/* ************************** memory statistics for testing ***************** */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Report Memory Statistics
+ *
+ * Use for testing/debugging.
+ * \{ */
static int memory_statistics_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
@@ -3238,7 +3031,13 @@ static void WM_OT_memory_statistics(wmOperatorType *ot)
ot->exec = memory_statistics_exec;
}
-/* *************************** Mat/tex/etc. previews generation ************* */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Data-Block Preview Generation Operator
+ *
+ * Use for material/texture/light ... etc.
+ * \{ */
typedef struct PreviewsIDEnsureData {
bContext *C;
@@ -3328,7 +3127,11 @@ static void WM_OT_previews_ensure(wmOperatorType *ot)
ot->exec = previews_ensure_exec;
}
-/* *************************** Datablocks previews clear ************* */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Data-Block Preview Clear Operator
+ * \{ */
/* Only types supporting previews currently. */
static const EnumPropertyItem preview_id_type_items[] = {
@@ -3427,7 +3230,11 @@ static void WM_OT_previews_clear(wmOperatorType *ot)
"Which data-block previews to clear");
}
-/* *************************** Doc from UI ************* */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Doc from UI Operator
+ * \{ */
static int doc_view_manual_ui_context_exec(bContext *C, wmOperator *UNUSED(op))
{
@@ -3460,8 +3267,14 @@ static void WM_OT_doc_view_manual_ui_context(wmOperatorType *ot)
ot->exec = doc_view_manual_ui_context_exec;
}
-/* ******************************************************* */
-/* toggle 3D for current window, turning it fullscreen if needed */
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Toggle Stereo 3D Operator
+ *
+ * Turning it fullscreen if needed.
+ * \{ */
+
static void WM_OT_stereo3d_set(wmOperatorType *ot)
{
PropertyRNA *prop;
@@ -3512,6 +3325,12 @@ static void WM_OT_stereo3d_set(wmOperatorType *ot)
RNA_def_property_flag(prop, PROP_SKIP_SAVE);
}
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Operator Registration & Keymaps
+ * \{ */
+
void wm_operatortypes_register(void)
{
WM_operatortype_append(WM_OT_window_close);
@@ -3715,10 +3534,16 @@ void wm_window_keymap(wmKeyConfig *keyconf)
WM_keymap_fix_linking();
}
-/**
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Enum Filter Functions
+ *
* Filter functions that can be used with rna_id_itemf() below.
* Should return false if 'id' should be excluded.
- */
+ *
+ * \{ */
+
static bool rna_id_enum_filter_single(ID *id, void *user_data)
{
return (id != user_data);
@@ -3871,3 +3696,5 @@ const EnumPropertyItem *RNA_mask_local_itemf(bContext *C,
return rna_id_itemf(
C, ptr, r_free, C ? (ID *)CTX_data_main(C)->masks.first : NULL, true, NULL, NULL);
}
+
+/** \} */
diff --git a/source/blender/windowmanager/intern/wm_splash_screen.c b/source/blender/windowmanager/intern/wm_splash_screen.c
new file mode 100644
index 00000000000..8629997030f
--- /dev/null
+++ b/source/blender/windowmanager/intern/wm_splash_screen.c
@@ -0,0 +1,314 @@
+/*
+ * 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) 2007 Blender Foundation.
+ * All rights reserved.
+ */
+
+/** \file
+ * \ingroup wm
+ *
+ * This file contains the splash screen logic (the `WM_OT_splash` operator).
+ *
+ * - Loads the splash image.
+ * - Displaying version information.
+ * - Lists New Files (application templates).
+ * - Lists Recent files.
+ * - Links to web sites.
+ */
+
+#include <string.h>
+
+#include "CLG_log.h"
+
+#include "DNA_ID.h"
+#include "DNA_screen_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_userdef_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BLI_blenlib.h"
+#include "BLI_utildefines.h"
+
+#include "BKE_appdir.h"
+#include "BKE_blender_version.h"
+#include "BKE_context.h"
+#include "BKE_screen.h"
+
+#include "BLF_api.h"
+
+#include "IMB_imbuf_types.h"
+#include "IMB_imbuf.h"
+
+#include "ED_screen.h"
+
+#include "UI_interface.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "wm.h"
+
+static void wm_block_splash_close(bContext *C, void *arg_block, void *UNUSED(arg))
+{
+ wmWindow *win = CTX_wm_window(C);
+ UI_popup_block_close(C, win, arg_block);
+}
+
+static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *arg_unused);
+
+static void wm_block_splash_refreshmenu(bContext *C, void *UNUSED(arg_block), void *UNUSED(arg))
+{
+ ARegion *ar_menu = CTX_wm_menu(C);
+ ED_region_tag_refresh_ui(ar_menu);
+}
+
+static void wm_block_splash_add_label(uiBlock *block, const char *label, int x, int *y)
+{
+ if (!(label && label[0])) {
+ return;
+ }
+
+ uiStyle *style = UI_style_get();
+
+ BLF_size(style->widgetlabel.uifont_id, style->widgetlabel.points, U.pixelsize * U.dpi);
+ int label_width = BLF_width(style->widgetlabel.uifont_id, label, strlen(label));
+ label_width = label_width + U.widget_unit;
+
+ UI_block_emboss_set(block, UI_EMBOSS_NONE);
+
+ uiBut *but = uiDefBut(block,
+ UI_BTYPE_LABEL,
+ 0,
+ label,
+ x - label_width,
+ *y,
+ label_width,
+ UI_UNIT_Y,
+ NULL,
+ 0,
+ 0,
+ 0,
+ 0,
+ NULL);
+
+ /* 1 = UI_SELECT, internal flag to draw in white. */
+ UI_but_flag_enable(but, 1);
+ UI_block_emboss_set(block, UI_EMBOSS);
+ *y -= 12 * U.dpi_fac;
+}
+
+static void wm_block_splash_add_labels(uiBlock *block, int x, int y)
+{
+ /* Version number. */
+ const char *version_suffix = NULL;
+ bool show_build_info = true;
+
+ if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "alpha")) {
+ version_suffix = " Alpha";
+ }
+ else if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "beta")) {
+ version_suffix = " Beta";
+ }
+ else if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "rc")) {
+ version_suffix = " Release Candidate";
+ show_build_info = false;
+ }
+ else if (STREQ(STRINGIFY(BLENDER_VERSION_CYCLE), "release")) {
+ version_suffix = STRINGIFY(BLENDER_VERSION_CHAR);
+ show_build_info = false;
+ }
+
+ char version_buf[256] = "\0";
+ BLI_snprintf(version_buf,
+ sizeof(version_buf),
+ "v %d.%d%s",
+ BLENDER_VERSION / 100,
+ BLENDER_VERSION % 100,
+ version_suffix);
+
+ wm_block_splash_add_label(block, version_buf, x, &y);
+
+#ifdef WITH_BUILDINFO
+ if (show_build_info) {
+ extern unsigned long build_commit_timestamp;
+ extern char build_hash[], build_commit_date[], build_commit_time[], build_branch[];
+
+ /* Date, hidden for builds made from tag. */
+ if (build_commit_timestamp != 0) {
+ char date_buf[256] = "\0";
+ BLI_snprintf(
+ date_buf, sizeof(date_buf), "Date: %s %s", build_commit_date, build_commit_time);
+ wm_block_splash_add_label(block, date_buf, x, &y);
+ }
+
+ /* Hash. */
+ char hash_buf[256] = "\0";
+ BLI_snprintf(hash_buf, sizeof(hash_buf), "Hash: %s", build_hash);
+ wm_block_splash_add_label(block, hash_buf, x, &y);
+
+ /* Branch. */
+ if (!STREQ(build_branch, "master")) {
+ char branch_buf[256] = "\0";
+ BLI_snprintf(branch_buf, sizeof(branch_buf), "Branch: %s", build_branch);
+
+ wm_block_splash_add_label(block, branch_buf, x, &y);
+ }
+ }
+#else
+ UNUSED_VARS(show_build_info);
+#endif /* WITH_BUILDINFO */
+}
+
+static ImBuf *wm_block_splash_image(void)
+{
+#ifndef WITH_HEADLESS
+ extern char datatoc_splash_png[];
+ extern int datatoc_splash_png_size;
+ extern char datatoc_splash_2x_png[];
+ extern int datatoc_splash_2x_png_size;
+
+ ImBuf *ibuf = NULL;
+
+ if (U.dpi_fac > 1.0) {
+ ibuf = IMB_ibImageFromMemory((const uchar *)datatoc_splash_2x_png,
+ datatoc_splash_2x_png_size,
+ IB_rect,
+ NULL,
+ "<splash screen>");
+ }
+ else {
+ ibuf = IMB_ibImageFromMemory((const uchar *)datatoc_splash_png,
+ datatoc_splash_png_size,
+ IB_rect,
+ NULL,
+ "<splash screen>");
+ }
+
+ /* overwrite splash with template image */
+ if (U.app_template[0] != '\0') {
+ ImBuf *ibuf_template = NULL;
+ char splash_filepath[FILE_MAX];
+ char template_directory[FILE_MAX];
+
+ if (BKE_appdir_app_template_id_search(
+ U.app_template, template_directory, sizeof(template_directory))) {
+ BLI_join_dirfile(splash_filepath,
+ sizeof(splash_filepath),
+ template_directory,
+ (U.dpi_fac > 1.0) ? "splash_2x.png" : "splash.png");
+ ibuf_template = IMB_loadiffname(splash_filepath, IB_rect, NULL);
+ if (ibuf_template) {
+ const int x_expect = ibuf->x;
+ const int y_expect = 250 * (int)U.dpi_fac;
+ /* don't cover the header text */
+ if (ibuf_template->x == x_expect && ibuf_template->y == y_expect) {
+ memcpy(ibuf->rect,
+ ibuf_template->rect,
+ ibuf_template->x * ibuf_template->y * sizeof(char[4]));
+ }
+ else {
+ CLOG_ERROR(WM_LOG_OPERATORS,
+ "Splash expected %dx%d found %dx%d, ignoring: %s\n",
+ x_expect,
+ y_expect,
+ ibuf_template->x,
+ ibuf_template->y,
+ splash_filepath);
+ }
+ IMB_freeImBuf(ibuf_template);
+ }
+ }
+ }
+ return ibuf;
+#else
+ return NULL;
+#endif
+}
+
+static uiBlock *wm_block_create_splash(bContext *C, ARegion *ar, void *UNUSED(arg))
+{
+ uiBlock *block;
+ uiBut *but;
+ uiStyle *style = UI_style_get();
+
+ block = UI_block_begin(C, ar, "splash", UI_EMBOSS);
+
+ /* note on UI_BLOCK_NO_WIN_CLIP, the window size is not always synchronized
+ * with the OS when the splash shows, window clipping in this case gives
+ * ugly results and clipping the splash isn't useful anyway, just disable it [#32938] */
+ UI_block_flag_enable(block, UI_BLOCK_LOOP | UI_BLOCK_KEEP_OPEN | UI_BLOCK_NO_WIN_CLIP);
+ UI_block_theme_style_set(block, UI_BLOCK_THEME_STYLE_POPUP);
+
+ ImBuf *ibuf = wm_block_splash_image();
+ but = uiDefBut(block,
+ UI_BTYPE_IMAGE,
+ 0,
+ "",
+ 0,
+ 0.5f * U.widget_unit,
+ U.dpi_fac * 501,
+ U.dpi_fac * 250,
+ /* Button owns the imbuf now. */
+ ibuf,
+ 0.0,
+ 0.0,
+ 0,
+ 0,
+ "");
+ UI_but_func_set(but, wm_block_splash_close, block, NULL);
+ UI_block_func_set(block, wm_block_splash_refreshmenu, block, NULL);
+
+ int x = U.dpi_fac * 502;
+ int y = U.dpi_fac * 237;
+
+ wm_block_splash_add_labels(block, x, y);
+
+ uiLayout *layout = UI_block_layout(block,
+ UI_LAYOUT_VERTICAL,
+ UI_LAYOUT_PANEL,
+ U.dpi_fac * 26,
+ 0,
+ U.dpi_fac * 450,
+ U.dpi_fac * 110,
+ 0,
+ style);
+
+ MenuType *mt = WM_menutype_find("WM_MT_splash", true);
+ if (mt) {
+ UI_menutype_draw(C, mt, layout);
+ }
+
+ UI_block_bounds_set_centered(block, 0);
+
+ return block;
+}
+
+static int wm_splash_invoke(bContext *C, wmOperator *UNUSED(op), const wmEvent *UNUSED(event))
+{
+ UI_popup_block_invoke(C, wm_block_create_splash, NULL, NULL);
+
+ return OPERATOR_FINISHED;
+}
+
+void WM_OT_splash(wmOperatorType *ot)
+{
+ ot->name = "Splash Screen";
+ ot->idname = "WM_OT_splash";
+ ot->description = "Open the splash screen with release info";
+
+ ot->invoke = wm_splash_invoke;
+ ot->poll = WM_operator_winactive;
+}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index d17b8817691..47491813f70 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -482,8 +482,8 @@ void wm_window_title(wmWindowManager *wm, wmWindow *win)
}
/* Informs GHOST of unsaved changes, to set window modified visual indicator (macOS)
- * and to give hint of unsaved changes for a user warning mechanism in case of OS
- * application terminate request (e.g. OS Shortcut Alt+F4, Cmd+Q, (...), or session end). */
+ * and to give hint of unsaved changes for a user warning mechanism in case of OS application
+ * terminate request (e.g. OS Shortcut Alt+F4, Command+Q, (...), or session end). */
GHOST_SetWindowModifiedState(win->ghostwin, (GHOST_TUns8)!wm->file_saved);
}
}
@@ -658,7 +658,7 @@ void wm_window_ghostwindows_ensure(wmWindowManager *wm)
BLI_assert(G.background == false);
- /* no commandline prefsize? then we set this.
+ /* No command-line prefsize? then we set this.
* Note that these values will be used only
* when there is no startup.blend yet.
*/
@@ -893,6 +893,9 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
else if (type == WM_WINDOW_DRIVERS) {
ED_area_newspace(C, sa, SPACE_GRAPH, false);
}
+ else if (type == WM_WINDOW_INFO) {
+ ED_area_newspace(C, sa, SPACE_INFO, false);
+ }
else {
ED_area_newspace(C, sa, SPACE_USERPREF, false);
}
@@ -917,6 +920,9 @@ wmWindow *WM_window_open_temp(bContext *C, int x, int y, int sizex, int sizey, i
else if (sa->spacetype == SPACE_GRAPH) {
title = IFACE_("Blender Drivers Editor");
}
+ else if (sa->spacetype == SPACE_INFO) {
+ title = IFACE_("Blender Info Log");
+ }
else {
title = "Blender";
}
diff --git a/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c b/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c
index 73758e2d98f..0c2ce9783ec 100644
--- a/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c
+++ b/source/blender/windowmanager/message_bus/intern/wm_message_bus_rna.c
@@ -50,7 +50,7 @@ static uint wm_msg_rna_gset_hash(const void *key_p)
// printf("%s\n", RNA_struct_identifier(params->ptr.type));
uint k = void_hash_uint(params->ptr.type);
k ^= void_hash_uint(params->ptr.data);
- k ^= void_hash_uint(params->ptr.id.data);
+ k ^= void_hash_uint(params->ptr.owner_id);
k ^= void_hash_uint(params->prop);
return k;
}
@@ -59,7 +59,7 @@ static bool wm_msg_rna_gset_cmp(const void *key_a_p, const void *key_b_p)
const wmMsgParams_RNA *params_a = &((const wmMsgSubscribeKey_RNA *)key_a_p)->msg.params;
const wmMsgParams_RNA *params_b = &((const wmMsgSubscribeKey_RNA *)key_b_p)->msg.params;
return !((params_a->ptr.type == params_b->ptr.type) &&
- (params_a->ptr.id.data == params_b->ptr.id.data) &&
+ (params_a->ptr.owner_id == params_b->ptr.owner_id) &&
(params_a->ptr.data == params_b->ptr.data) && (params_a->prop == params_b->prop));
}
static void wm_msg_rna_gset_key_free(void *key_p)
@@ -100,7 +100,7 @@ static void wm_msg_rna_update_by_id(struct wmMsgBus *mbus, ID *id_src, ID *id_ds
while (BLI_gsetIterator_done(&gs_iter) == false) {
wmMsgSubscribeKey_RNA *key = BLI_gsetIterator_getKey(&gs_iter);
BLI_gsetIterator_step(&gs_iter);
- if (key->msg.params.ptr.id.data == id_src) {
+ if (key->msg.params.ptr.owner_id == id_src) {
/* GSet always needs updating since the key changes. */
BLI_gset_remove(gs, key, NULL);
@@ -123,10 +123,10 @@ static void wm_msg_rna_update_by_id(struct wmMsgBus *mbus, ID *id_src, ID *id_ds
if (BLI_listbase_is_empty(&key->head.values)) {
/* Remove, no reason to keep. */
}
- else if (key->msg.params.ptr.data == key->msg.params.ptr.id.data) {
+ else if (key->msg.params.ptr.data == key->msg.params.ptr.owner_id) {
/* Simple, just update the ID. */
key->msg.params.ptr.data = id_dst;
- key->msg.params.ptr.id.data = id_dst;
+ key->msg.params.ptr.owner_id = id_dst;
remove = false;
}
else {
@@ -177,7 +177,7 @@ static void wm_msg_rna_remove_by_id(struct wmMsgBus *mbus, const ID *id)
while (BLI_gsetIterator_done(&gs_iter) == false) {
wmMsgSubscribeKey_RNA *key = BLI_gsetIterator_getKey(&gs_iter);
BLI_gsetIterator_step(&gs_iter);
- if (key->msg.params.ptr.id.data == id) {
+ if (key->msg.params.ptr.owner_id == id) {
/* Clear here so we can decrement 'messages_tag_count'. */
for (wmMsgSubscribeValueLink *msg_lnk = key->head.values.first, *msg_lnk_next; msg_lnk;
msg_lnk = msg_lnk_next) {
@@ -226,7 +226,7 @@ void WM_msg_publish_rna_params(struct wmMsgBus *mbus, const wmMsgParams_RNA *msg
CLOG_INFO(WM_LOG_MSGBUS_PUB,
2,
"rna(id='%s', %s.%s)",
- msg_key_params->ptr.id.data ? ((ID *)msg_key_params->ptr.id.data)->name : none,
+ msg_key_params->ptr.owner_id ? ((ID *)msg_key_params->ptr.owner_id)->name : none,
msg_key_params->ptr.type ? RNA_struct_identifier(msg_key_params->ptr.type) : none,
msg_key_params->prop ? RNA_property_identifier((PropertyRNA *)msg_key_params->prop) :
none);
@@ -237,7 +237,7 @@ void WM_msg_publish_rna_params(struct wmMsgBus *mbus, const wmMsgParams_RNA *msg
/* Support anonymous subscribers, this may be some extra overhead
* but we want to be able to be more ambiguous. */
- if (msg_key_params->ptr.id.data || msg_key_params->ptr.data) {
+ if (msg_key_params->ptr.owner_id || msg_key_params->ptr.data) {
wmMsgParams_RNA msg_key_params_anon = *msg_key_params;
/* We might want to enable this later? */
@@ -250,7 +250,7 @@ void WM_msg_publish_rna_params(struct wmMsgBus *mbus, const wmMsgParams_RNA *msg
msg_key_params_anon.prop = msg_key_params->prop;
}
- msg_key_params_anon.ptr.id.data = NULL;
+ msg_key_params_anon.ptr.owner_id = NULL;
msg_key_params_anon.ptr.data = NULL;
if ((key = WM_msg_lookup_rna(mbus, &msg_key_params_anon))) {
WM_msg_publish_with_key(mbus, &key->head);
@@ -292,7 +292,7 @@ void WM_msg_subscribe_rna_params(struct wmMsgBus *mbus,
CLOG_INFO(WM_LOG_MSGBUS_SUB,
3,
"rna(id='%s', %s.%s, info='%s')",
- msg_key_params->ptr.id.data ? ((ID *)msg_key_params->ptr.id.data)->name : none,
+ msg_key_params->ptr.owner_id ? ((ID *)msg_key_params->ptr.owner_id)->name : none,
msg_key_params->ptr.type ? RNA_struct_identifier(msg_key_params->ptr.type) : none,
msg_key_params->prop ? RNA_property_identifier((PropertyRNA *)msg_key_params->prop) :
none,
@@ -303,7 +303,7 @@ void WM_msg_subscribe_rna_params(struct wmMsgBus *mbus,
if (msg_val_params->is_persistent) {
if (msg_key->msg.params.data_path == NULL) {
- if (msg_key->msg.params.ptr.data != msg_key->msg.params.ptr.id.data) {
+ if (msg_key->msg.params.ptr.data != msg_key->msg.params.ptr.owner_id) {
/* We assume prop type can't change. */
msg_key->msg.params.data_path = RNA_path_from_ID_to_struct(&msg_key->msg.params.ptr);
}
@@ -339,14 +339,14 @@ void WM_msg_subscribe_ID(struct wmMsgBus *mbus,
const wmMsgSubscribeValue *msg_val_params,
const char *id_repr)
{
- wmMsgParams_RNA msg_key_params = {{{NULL}}};
+ wmMsgParams_RNA msg_key_params = {NULL};
RNA_id_pointer_create(id, &msg_key_params.ptr);
WM_msg_subscribe_rna_params(mbus, &msg_key_params, msg_val_params, id_repr);
}
void WM_msg_publish_ID(struct wmMsgBus *mbus, ID *id)
{
- wmMsgParams_RNA msg_key_params = {{{NULL}}};
+ wmMsgParams_RNA msg_key_params = {NULL};
RNA_id_pointer_create(id, &msg_key_params.ptr);
WM_msg_publish_rna_params(mbus, &msg_key_params);
}
diff --git a/source/blender/windowmanager/message_bus/wm_message_bus.h b/source/blender/windowmanager/message_bus/wm_message_bus.h
index 4a8bce52992..4ee087593ac 100644
--- a/source/blender/windowmanager/message_bus/wm_message_bus.h
+++ b/source/blender/windowmanager/message_bus/wm_message_bus.h
@@ -23,7 +23,6 @@
#include <stdio.h>
-struct GSet;
struct ID;
struct bContext;
struct wmMsg;
@@ -173,7 +172,7 @@ void WM_msg_subscribe_static(struct wmMsgBus *mbus,
/* wm_message_bus_rna.c */
typedef struct wmMsgParams_RNA {
- /** when #PointerRNA.data & id.data are NULL. match against all. */
+ /** when #PointerRNA.data & owner_id are NULL. match against all. */
PointerRNA ptr;
/** when NULL, match against any property. */
const PropertyRNA *prop;
@@ -233,7 +232,7 @@ void WM_msg_publish_ID(struct wmMsgBus *mbus, struct ID *id);
#define WM_msg_publish_rna_prop(mbus, id_, data_, type_, prop_) \
{ \
- wmMsgParams_RNA msg_key_params_ = {{{0}}}; \
+ wmMsgParams_RNA msg_key_params_ = {{0}}; \
_WM_MESSAGE_EXTERN_BEGIN; \
extern PropertyRNA rna_##type_##_##prop_; \
_WM_MESSAGE_EXTERN_END; \
@@ -244,7 +243,7 @@ void WM_msg_publish_ID(struct wmMsgBus *mbus, struct ID *id);
((void)0)
#define WM_msg_subscribe_rna_prop(mbus, id_, data_, type_, prop_, value) \
{ \
- wmMsgParams_RNA msg_key_params_ = {{{0}}}; \
+ wmMsgParams_RNA msg_key_params_ = {{0}}; \
_WM_MESSAGE_EXTERN_BEGIN; \
extern PropertyRNA rna_##type_##_##prop_; \
_WM_MESSAGE_EXTERN_END; \
diff --git a/source/blender/windowmanager/wm.h b/source/blender/windowmanager/wm.h
index fa375efb469..00d9a8a2fab 100644
--- a/source/blender/windowmanager/wm.h
+++ b/source/blender/windowmanager/wm.h
@@ -78,6 +78,9 @@ void wm_autosave_delete(void);
void wm_autosave_read(bContext *C, struct ReportList *reports);
void wm_autosave_location(char *filepath);
+/* wm_splash_screen.c */
+void WM_OT_splash(wmOperatorType *ot);
+
/* wm_stereo.c */
void wm_stereo3d_draw_interlace(wmWindow *win, struct ARegion *ar);
void wm_stereo3d_draw_anaglyph(wmWindow *win, struct ARegion *ar);
diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h
index 90c580818c9..b0329f7415e 100644
--- a/source/blender/windowmanager/wm_window.h
+++ b/source/blender/windowmanager/wm_window.h
@@ -24,10 +24,6 @@
#ifndef __WM_WINDOW_H__
#define __WM_WINDOW_H__
-struct EnumPropertyItem;
-struct PointerRNA;
-struct PropertyRNA;
-struct wmEvent;
struct wmOperator;
/* *************** internal api ************** */