First commit.

This commit is contained in:
Fangjun Kuang 2021-07-16 15:16:56 +08:00
commit be8442fd68
50 changed files with 3939 additions and 0 deletions

9
.clang-format Normal file
View File

@ -0,0 +1,9 @@
---
BasedOnStyle: Google
---
Language: Cpp
Cpp11BracedListStyle: true
Standard: Cpp11
DerivePointerAlignment: false
PointerAlignment: Right
---

5
.flake8 Normal file
View File

@ -0,0 +1,5 @@
[flake8]
max-line-length = 80
ignore =
E402

36
.github/workflows/publish_to_pypi.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: Publish to PyPI
on:
push:
tags:
- '*'
jobs:
pypi:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Python
uses: actions/setup-python@v2
with:
python-version: 3.6
- name: Install Python dependencies
shell: bash
run: |
python3 -m pip install --upgrade pip
python3 -m pip install wheel twine setuptools
- name: Build
shell: bash
run: |
python3 setup.py sdist
ls -l dist/*
- name: Publish wheels to PyPI
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
twine upload dist/kaldifeat-*.tar.gz

4
.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
build/
build*/
*.egg-info*/
dist/

26
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,26 @@
repos:
- repo: https://github.com/psf/black
rev: 21.6b0
hooks:
- id: black
args: [--line-length=80]
- repo: https://github.com/PyCQA/flake8
rev: 3.9.2
hooks:
- id: flake8
args: [--max-line-length=80]
- repo: https://github.com/pycqa/isort
rev: 5.9.2
hooks:
- id: isort
args: [--profile=black]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.0.1
hooks:
- id: check-executables-have-shebangs
- id: end-of-file-fixer
- id: mixed-line-ending
- id: trailing-whitespace

44
CMakeLists.txt Normal file
View File

@ -0,0 +1,44 @@
# Copyright (c) 2021 Xiaomi Corporation (author: Fangjun Kuang)
cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(kaldifeat)
set(kaldifeat_VERSION "0.0.1")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_SKIP_BUILD_RPATH FALSE)
set(BUILD_RPATH_USE_ORIGIN TRUE)
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
set(CMAKE_INSTALL_RPATH "$ORIGIN")
set(CMAKE_BUILD_RPATH "$ORIGIN")
if(NOT CMAKE_BUILD_TYPE)
message(STATUS "No CMAKE_BUILD_TYPE given, default to Release")
set(CMAKE_BUILD_TYPE Release)
endif()
set(CMAKE_CXX_STANDARD 14 CACHE STRING "The C++ version to be used.")
set(CMAKE_CXX_EXTENSIONS OFF)
message(STATUS "C++ Standard version: ${CMAKE_CXX_STANDARD}")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
option(BUILD_TESTS "Whether to build tests or not" ON)
include(pybind11)
include(torch)
if(BUILD_TESTS)
include(googletest)
enable_testing()
endif()
include_directories(${CMAKE_SOURCE_DIR})
add_subdirectory(kaldifeat)

211
LICENSE Normal file
View File

@ -0,0 +1,211 @@
Legal Notices
NOTE (this is not from the Apache License): The copyright model is that
authors (or their employers, if noted in individual files) own their
individual contributions. The authors' contributions can be discerned
from the git history.
-------------------------------------------------------------------------
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

23
README.md Normal file
View File

@ -0,0 +1,23 @@
# kaldifeat
Wrap kaldi's feature computations to Python with PyTorch support.
# Installation
`kaldifeat` can be installed by
```bash
pip install kaldifeat
```
# TODOs
- [ ] Add Python interface
- [ ] Support torch.device so that it can switch between CUDA and CPU
- [ ] Add unit tests
- [ ] Set up GitHub actions
- [ ] Benchmark its speed and compare it with Kaldi
- [ ] Support batch processing of multiple waves
- [ ] Handle non-default parameters
- [ ] Support MFCC and other features available in Kaldi
- [ ] Publish it to PyPI

View File

@ -0,0 +1,916 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FetchContent
------------------
.. only:: html
.. contents::
Overview
^^^^^^^^
This module enables populating content at configure time via any method
supported by the :module:`ExternalProject` module. Whereas
:command:`ExternalProject_Add` downloads at build time, the
``FetchContent`` module makes content available immediately, allowing the
configure step to use the content in commands like :command:`add_subdirectory`,
:command:`include` or :command:`file` operations.
Content population details would normally be defined separately from the
command that performs the actual population. Projects should also
check whether the content has already been populated somewhere else in the
project hierarchy. Typical usage would look something like this:
.. code-block:: cmake
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.8.0
)
FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
FetchContent_Populate(googletest)
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
endif()
When using the above pattern with a hierarchical project arrangement,
projects at higher levels in the hierarchy are able to define or override
the population details of content specified anywhere lower in the project
hierarchy. The ability to detect whether content has already been
populated ensures that even if multiple child projects want certain content
to be available, the first one to populate it wins. The other child project
can simply make use of the already available content instead of repeating
the population for itself. See the
:ref:`Examples <fetch-content-examples>` section which demonstrates
this scenario.
The ``FetchContent`` module also supports defining and populating
content in a single call, with no check for whether the content has been
populated elsewhere in the project already. This is a more low level
operation and would not normally be the way the module is used, but it is
sometimes useful as part of implementing some higher level feature or to
populate some content in CMake's script mode.
Declaring Content Details
^^^^^^^^^^^^^^^^^^^^^^^^^
.. command:: FetchContent_Declare
.. code-block:: cmake
FetchContent_Declare(<name> <contentOptions>...)
The ``FetchContent_Declare()`` function records the options that describe
how to populate the specified content, but if such details have already
been recorded earlier in this project (regardless of where in the project
hierarchy), this and all later calls for the same content ``<name>`` are
ignored. This "first to record, wins" approach is what allows hierarchical
projects to have parent projects override content details of child projects.
The content ``<name>`` can be any string without spaces, but good practice
would be to use only letters, numbers and underscores. The name will be
treated case-insensitively and it should be obvious for the content it
represents, often being the name of the child project or the value given
to its top level :command:`project` command (if it is a CMake project).
For well-known public projects, the name should generally be the official
name of the project. Choosing an unusual name makes it unlikely that other
projects needing that same content will use the same name, leading to
the content being populated multiple times.
The ``<contentOptions>`` can be any of the download or update/patch options
that the :command:`ExternalProject_Add` command understands. The configure,
build, install and test steps are explicitly disabled and therefore options
related to them will be ignored. In most cases, ``<contentOptions>`` will
just be a couple of options defining the download method and method-specific
details like a commit tag or archive hash. For example:
.. code-block:: cmake
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.8.0
)
FetchContent_Declare(
myCompanyIcons
URL https://intranet.mycompany.com/assets/iconset_1.12.tar.gz
URL_HASH 5588a7b18261c20068beabfb4f530b87
)
FetchContent_Declare(
myCompanyCertificates
SVN_REPOSITORY svn+ssh://svn.mycompany.com/srv/svn/trunk/certs
SVN_REVISION -r12345
)
Populating The Content
^^^^^^^^^^^^^^^^^^^^^^
.. command:: FetchContent_Populate
.. code-block:: cmake
FetchContent_Populate( <name> )
In most cases, the only argument given to ``FetchContent_Populate()`` is the
``<name>``. When used this way, the command assumes the content details have
been recorded by an earlier call to :command:`FetchContent_Declare`. The
details are stored in a global property, so they are unaffected by things
like variable or directory scope. Therefore, it doesn't matter where in the
project the details were previously declared, as long as they have been
declared before the call to ``FetchContent_Populate()``. Those saved details
are then used to construct a call to :command:`ExternalProject_Add` in a
private sub-build to perform the content population immediately. The
implementation of ``ExternalProject_Add()`` ensures that if the content has
already been populated in a previous CMake run, that content will be reused
rather than repopulating them again. For the common case where population
involves downloading content, the cost of the download is only paid once.
An internal global property records when a particular content population
request has been processed. If ``FetchContent_Populate()`` is called more
than once for the same content name within a configure run, the second call
will halt with an error. Projects can and should check whether content
population has already been processed with the
:command:`FetchContent_GetProperties` command before calling
``FetchContent_Populate()``.
``FetchContent_Populate()`` will set three variables in the scope of the
caller; ``<lcName>_POPULATED``, ``<lcName>_SOURCE_DIR`` and
``<lcName>_BINARY_DIR``, where ``<lcName>`` is the lowercased ``<name>``.
``<lcName>_POPULATED`` will always be set to ``True`` by the call.
``<lcName>_SOURCE_DIR`` is the location where the
content can be found upon return (it will have already been populated), while
``<lcName>_BINARY_DIR`` is a directory intended for use as a corresponding
build directory. The main use case for the two directory variables is to
call :command:`add_subdirectory` immediately after population, i.e.:
.. code-block:: cmake
FetchContent_Populate(FooBar ...)
add_subdirectory(${foobar_SOURCE_DIR} ${foobar_BINARY_DIR})
The values of the three variables can also be retrieved from anywhere in the
project hierarchy using the :command:`FetchContent_GetProperties` command.
A number of cache variables influence the behavior of all content population
performed using details saved from a :command:`FetchContent_Declare` call:
``FETCHCONTENT_BASE_DIR``
In most cases, the saved details do not specify any options relating to the
directories to use for the internal sub-build, final source and build areas.
It is generally best to leave these decisions up to the ``FetchContent``
module to handle on the project's behalf. The ``FETCHCONTENT_BASE_DIR``
cache variable controls the point under which all content population
directories are collected, but in most cases developers would not need to
change this. The default location is ``${CMAKE_BINARY_DIR}/_deps``, but if
developers change this value, they should aim to keep the path short and
just below the top level of the build tree to avoid running into path
length problems on Windows.
``FETCHCONTENT_QUIET``
The logging output during population can be quite verbose, making the
configure stage quite noisy. This cache option (``ON`` by default) hides
all population output unless an error is encountered. If experiencing
problems with hung downloads, temporarily switching this option off may
help diagnose which content population is causing the issue.
``FETCHCONTENT_FULLY_DISCONNECTED``
When this option is enabled, no attempt is made to download or update
any content. It is assumed that all content has already been populated in
a previous run or the source directories have been pointed at existing
contents the developer has provided manually (using options described
further below). When the developer knows that no changes have been made to
any content details, turning this option ``ON`` can significantly speed up
the configure stage. It is ``OFF`` by default.
``FETCHCONTENT_UPDATES_DISCONNECTED``
This is a less severe download/update control compared to
``FETCHCONTENT_FULLY_DISCONNECTED``. Instead of bypassing all download and
update logic, the ``FETCHCONTENT_UPDATES_DISCONNECTED`` only disables the
update stage. Therefore, if content has not been downloaded previously,
it will still be downloaded when this option is enabled. This can speed up
the configure stage, but not as much as
``FETCHCONTENT_FULLY_DISCONNECTED``. It is ``OFF`` by default.
In addition to the above cache variables, the following cache variables are
also defined for each content name (``<ucName>`` is the uppercased value of
``<name>``):
``FETCHCONTENT_SOURCE_DIR_<ucName>``
If this is set, no download or update steps are performed for the specified
content and the ``<lcName>_SOURCE_DIR`` variable returned to the caller is
pointed at this location. This gives developers a way to have a separate
checkout of the content that they can modify freely without interference
from the build. The build simply uses that existing source, but it still
defines ``<lcName>_BINARY_DIR`` to point inside its own build area.
Developers are strongly encouraged to use this mechanism rather than
editing the sources populated in the default location, as changes to
sources in the default location can be lost when content population details
are changed by the project.
``FETCHCONTENT_UPDATES_DISCONNECTED_<ucName>``
This is the per-content equivalent of
``FETCHCONTENT_UPDATES_DISCONNECTED``. If the global option or this option
is ``ON``, then updates will be disabled for the named content.
Disabling updates for individual content can be useful for content whose
details rarely change, while still leaving other frequently changing
content with updates enabled.
The ``FetchContent_Populate()`` command also supports a syntax allowing the
content details to be specified directly rather than using any saved
details. This is more low-level and use of this form is generally to be
avoided in favour of using saved content details as outlined above.
Nevertheless, in certain situations it can be useful to invoke the content
population as an isolated operation (typically as part of implementing some
other higher level feature or when using CMake in script mode):
.. code-block:: cmake
FetchContent_Populate( <name>
[QUIET]
[SUBBUILD_DIR <subBuildDir>]
[SOURCE_DIR <srcDir>]
[BINARY_DIR <binDir>]
...
)
This form has a number of key differences to that where only ``<name>`` is
provided:
- All required population details are assumed to have been provided directly
in the call to ``FetchContent_Populate()``. Any saved details for
``<name>`` are ignored.
- No check is made for whether content for ``<name>`` has already been
populated.
- No global property is set to record that the population has occurred.
- No global properties record the source or binary directories used for the
populated content.
- The ``FETCHCONTENT_FULLY_DISCONNECTED`` and
``FETCHCONTENT_UPDATES_DISCONNECTED`` cache variables are ignored.
The ``<lcName>_SOURCE_DIR`` and ``<lcName>_BINARY_DIR`` variables are still
returned to the caller, but since these locations are not stored as global
properties when this form is used, they are only available to the calling
scope and below rather than the entire project hierarchy. No
``<lcName>_POPULATED`` variable is set in the caller's scope with this form.
The supported options for ``FetchContent_Populate()`` are the same as those
for :command:`FetchContent_Declare()`. Those few options shown just
above are either specific to ``FetchContent_Populate()`` or their behavior is
slightly modified from how :command:`ExternalProject_Add` treats them.
``QUIET``
The ``QUIET`` option can be given to hide the output associated with
populating the specified content. If the population fails, the output will
be shown regardless of whether this option was given or not so that the
cause of the failure can be diagnosed. The global ``FETCHCONTENT_QUIET``
cache variable has no effect on ``FetchContent_Populate()`` calls where the
content details are provided directly.
``SUBBUILD_DIR``
The ``SUBBUILD_DIR`` argument can be provided to change the location of the
sub-build created to perform the population. The default value is
``${CMAKE_CURRENT_BINARY_DIR}/<lcName>-subbuild`` and it would be unusual
to need to override this default. If a relative path is specified, it will
be interpreted as relative to :variable:`CMAKE_CURRENT_BINARY_DIR`.
``SOURCE_DIR``, ``BINARY_DIR``
The ``SOURCE_DIR`` and ``BINARY_DIR`` arguments are supported by
:command:`ExternalProject_Add`, but different default values are used by
``FetchContent_Populate()``. ``SOURCE_DIR`` defaults to
``${CMAKE_CURRENT_BINARY_DIR}/<lcName>-src`` and ``BINARY_DIR`` defaults to
``${CMAKE_CURRENT_BINARY_DIR}/<lcName>-build``. If a relative path is
specified, it will be interpreted as relative to
:variable:`CMAKE_CURRENT_BINARY_DIR`.
In addition to the above explicit options, any other unrecognized options are
passed through unmodified to :command:`ExternalProject_Add` to perform the
download, patch and update steps. The following options are explicitly
prohibited (they are disabled by the ``FetchContent_Populate()`` command):
- ``CONFIGURE_COMMAND``
- ``BUILD_COMMAND``
- ``INSTALL_COMMAND``
- ``TEST_COMMAND``
If using ``FetchContent_Populate()`` within CMake's script mode, be aware
that the implementation sets up a sub-build which therefore requires a CMake
generator and build tool to be available. If these cannot be found by
default, then the :variable:`CMAKE_GENERATOR` and/or
:variable:`CMAKE_MAKE_PROGRAM` variables will need to be set appropriately
on the command line invoking the script.
Retrieve Population Properties
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. command:: FetchContent_GetProperties
When using saved content details, a call to :command:`FetchContent_Populate`
records information in global properties which can be queried at any time.
This information includes the source and binary directories associated with
the content and also whether or not the content population has been processed
during the current configure run.
.. code-block:: cmake
FetchContent_GetProperties( <name>
[SOURCE_DIR <srcDirVar>]
[BINARY_DIR <binDirVar>]
[POPULATED <doneVar>]
)
The ``SOURCE_DIR``, ``BINARY_DIR`` and ``POPULATED`` options can be used to
specify which properties should be retrieved. Each option accepts a value
which is the name of the variable in which to store that property. Most of
the time though, only ``<name>`` is given, in which case the call will then
set the same variables as a call to
:command:`FetchContent_Populate(name) <FetchContent_Populate>`. This allows
the following canonical pattern to be used, which ensures that the relevant
variables will always be defined regardless of whether or not the population
has been performed elsewhere in the project already:
.. code-block:: cmake
FetchContent_GetProperties(foobar)
if(NOT foobar_POPULATED)
FetchContent_Populate(foobar)
# Set any custom variables, etc. here, then
# populate the content as part of this build
add_subdirectory(${foobar_SOURCE_DIR} ${foobar_BINARY_DIR})
endif()
The above pattern allows other parts of the overall project hierarchy to
re-use the same content and ensure that it is only populated once.
.. _`fetch-content-examples`:
Examples
^^^^^^^^
Consider a project hierarchy where ``projA`` is the top level project and it
depends on projects ``projB`` and ``projC``. Both ``projB`` and ``projC``
can be built standalone and they also both depend on another project
``projD``. For simplicity, this example will assume that all four projects
are available on a company git server. The ``CMakeLists.txt`` of each project
might have sections like the following:
*projA*:
.. code-block:: cmake
include(FetchContent)
FetchContent_Declare(
projB
GIT_REPOSITORY git@mycompany.com/git/projB.git
GIT_TAG 4a89dc7e24ff212a7b5167bef7ab079d
)
FetchContent_Declare(
projC
GIT_REPOSITORY git@mycompany.com/git/projC.git
GIT_TAG 4ad4016bd1d8d5412d135cf8ceea1bb9
)
FetchContent_Declare(
projD
GIT_REPOSITORY git@mycompany.com/git/projD.git
GIT_TAG origin/integrationBranch
)
FetchContent_GetProperties(projB)
if(NOT projb_POPULATED)
FetchContent_Populate(projB)
add_subdirectory(${projb_SOURCE_DIR} ${projb_BINARY_DIR})
endif()
FetchContent_GetProperties(projC)
if(NOT projc_POPULATED)
FetchContent_Populate(projC)
add_subdirectory(${projc_SOURCE_DIR} ${projc_BINARY_DIR})
endif()
*projB*:
.. code-block:: cmake
include(FetchContent)
FetchContent_Declare(
projD
GIT_REPOSITORY git@mycompany.com/git/projD.git
GIT_TAG 20b415f9034bbd2a2e8216e9a5c9e632
)
FetchContent_GetProperties(projD)
if(NOT projd_POPULATED)
FetchContent_Populate(projD)
add_subdirectory(${projd_SOURCE_DIR} ${projd_BINARY_DIR})
endif()
*projC*:
.. code-block:: cmake
include(FetchContent)
FetchContent_Declare(
projD
GIT_REPOSITORY git@mycompany.com/git/projD.git
GIT_TAG 7d9a17ad2c962aa13e2fbb8043fb6b8a
)
FetchContent_GetProperties(projD)
if(NOT projd_POPULATED)
FetchContent_Populate(projD)
add_subdirectory(${projd_SOURCE_DIR} ${projd_BINARY_DIR})
endif()
A few key points should be noted in the above:
- ``projB`` and ``projC`` define different content details for ``projD``,
but ``projA`` also defines a set of content details for ``projD`` and
because ``projA`` will define them first, the details from ``projB`` and
``projC`` will not be used. The override details defined by ``projA``
are not required to match either of those from ``projB`` or ``projC``, but
it is up to the higher level project to ensure that the details it does
define still make sense for the child projects.
- While ``projA`` defined content details for ``projD``, it did not need
to explicitly call ``FetchContent_Populate(projD)`` itself. Instead, it
leaves that to a child project to do (in this case it will be ``projB``
since it is added to the build ahead of ``projC``). If ``projA`` needed to
customize how the ``projD`` content was brought into the build as well
(e.g. define some CMake variables before calling
:command:`add_subdirectory` after populating), it would do the call to
``FetchContent_Populate()``, etc. just as it did for the ``projB`` and
``projC`` content. For higher level projects, it is usually enough to
just define the override content details and leave the actual population
to the child projects. This saves repeating the same thing at each level
of the project hierarchy unnecessarily.
- Even though ``projA`` is the top level project in this example, it still
checks whether ``projB`` and ``projC`` have already been populated before
going ahead to do those populations. This makes ``projA`` able to be more
easily incorporated as a child of some other higher level project in the
future if required. Always protect a call to
:command:`FetchContent_Populate` with a check to
:command:`FetchContent_GetProperties`, even in what may be considered a top
level project at the time.
The following example demonstrates how one might download and unpack a
firmware tarball using CMake's :manual:`script mode <cmake(1)>`. The call to
:command:`FetchContent_Populate` specifies all the content details and the
unpacked firmware will be placed in a ``firmware`` directory below the
current working directory.
*getFirmware.cmake*:
.. code-block:: cmake
# NOTE: Intended to be run in script mode with cmake -P
include(FetchContent)
FetchContent_Populate(
firmware
URL https://mycompany.com/assets/firmware-1.23-arm.tar.gz
URL_HASH MD5=68247684da89b608d466253762b0ff11
SOURCE_DIR firmware
)
#]=======================================================================]
set(__FetchContent_privateDir "${CMAKE_CURRENT_LIST_DIR}/FetchContent")
#=======================================================================
# Recording and retrieving content details for later population
#=======================================================================
# Internal use, projects must not call this directly. It is
# intended for use by FetchContent_Declare() only.
#
# Sets a content-specific global property (not meant for use
# outside of functions defined here in this file) which can later
# be retrieved using __FetchContent_getSavedDetails() with just the
# same content name. If there is already a value stored in the
# property, it is left unchanged and this call has no effect.
# This allows parent projects to define the content details,
# overriding anything a child project may try to set (properties
# are not cached between runs, so the first thing to set it in a
# build will be in control).
function(__FetchContent_declareDetails contentName)
string(TOLOWER ${contentName} contentNameLower)
set(propertyName "_FetchContent_${contentNameLower}_savedDetails")
get_property(alreadyDefined GLOBAL PROPERTY ${propertyName} DEFINED)
if(NOT alreadyDefined)
define_property(GLOBAL PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} ${ARGN})
endif()
endfunction()
# Internal use, projects must not call this directly. It is
# intended for use by the FetchContent_Declare() function.
#
# Retrieves details saved for the specified content in an
# earlier call to __FetchContent_declareDetails().
function(__FetchContent_getSavedDetails contentName outVar)
string(TOLOWER ${contentName} contentNameLower)
set(propertyName "_FetchContent_${contentNameLower}_savedDetails")
get_property(alreadyDefined GLOBAL PROPERTY ${propertyName} DEFINED)
if(NOT alreadyDefined)
message(FATAL_ERROR "No content details recorded for ${contentName}")
endif()
get_property(propertyValue GLOBAL PROPERTY ${propertyName})
set(${outVar} "${propertyValue}" PARENT_SCOPE)
endfunction()
# Saves population details of the content, sets defaults for the
# SOURCE_DIR and BUILD_DIR.
function(FetchContent_Declare contentName)
set(options "")
set(oneValueArgs SVN_REPOSITORY)
set(multiValueArgs "")
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
unset(srcDirSuffix)
unset(svnRepoArgs)
if(ARG_SVN_REPOSITORY)
# Add a hash of the svn repository URL to the source dir. This works
# around the problem where if the URL changes, the download would
# fail because it tries to checkout/update rather than switch the
# old URL to the new one. We limit the hash to the first 7 characters
# so that the source path doesn't get overly long (which can be a
# problem on windows due to path length limits).
string(SHA1 urlSHA ${ARG_SVN_REPOSITORY})
string(SUBSTRING ${urlSHA} 0 7 urlSHA)
set(srcDirSuffix "-${urlSHA}")
set(svnRepoArgs SVN_REPOSITORY ${ARG_SVN_REPOSITORY})
endif()
string(TOLOWER ${contentName} contentNameLower)
__FetchContent_declareDetails(
${contentNameLower}
SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src${srcDirSuffix}"
BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build"
${svnRepoArgs}
# List these last so they can override things we set above
${ARG_UNPARSED_ARGUMENTS}
)
endfunction()
#=======================================================================
# Set/get whether the specified content has been populated yet.
# The setter also records the source and binary dirs used.
#=======================================================================
# Internal use, projects must not call this directly. It is
# intended for use by the FetchContent_Populate() function to
# record when FetchContent_Populate() is called for a particular
# content name.
function(__FetchContent_setPopulated contentName sourceDir binaryDir)
string(TOLOWER ${contentName} contentNameLower)
set(prefix "_FetchContent_${contentNameLower}")
set(propertyName "${prefix}_sourceDir")
define_property(GLOBAL PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} ${sourceDir})
set(propertyName "${prefix}_binaryDir")
define_property(GLOBAL PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} ${binaryDir})
set(propertyName "${prefix}_populated")
define_property(GLOBAL PROPERTY ${propertyName}
BRIEF_DOCS "Internal implementation detail of FetchContent_Populate()"
FULL_DOCS "Details used by FetchContent_Populate() for ${contentName}"
)
set_property(GLOBAL PROPERTY ${propertyName} True)
endfunction()
# Set variables in the calling scope for any of the retrievable
# properties. If no specific properties are requested, variables
# will be set for all retrievable properties.
#
# This function is intended to also be used by projects as the canonical
# way to detect whether they should call FetchContent_Populate()
# and pull the populated source into the build with add_subdirectory(),
# if they are using the populated content in that way.
function(FetchContent_GetProperties contentName)
string(TOLOWER ${contentName} contentNameLower)
set(options "")
set(oneValueArgs SOURCE_DIR BINARY_DIR POPULATED)
set(multiValueArgs "")
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT ARG_SOURCE_DIR AND
NOT ARG_BINARY_DIR AND
NOT ARG_POPULATED)
# No specific properties requested, provide them all
set(ARG_SOURCE_DIR ${contentNameLower}_SOURCE_DIR)
set(ARG_BINARY_DIR ${contentNameLower}_BINARY_DIR)
set(ARG_POPULATED ${contentNameLower}_POPULATED)
endif()
set(prefix "_FetchContent_${contentNameLower}")
if(ARG_SOURCE_DIR)
set(propertyName "${prefix}_sourceDir")
get_property(value GLOBAL PROPERTY ${propertyName})
if(value)
set(${ARG_SOURCE_DIR} ${value} PARENT_SCOPE)
endif()
endif()
if(ARG_BINARY_DIR)
set(propertyName "${prefix}_binaryDir")
get_property(value GLOBAL PROPERTY ${propertyName})
if(value)
set(${ARG_BINARY_DIR} ${value} PARENT_SCOPE)
endif()
endif()
if(ARG_POPULATED)
set(propertyName "${prefix}_populated")
get_property(value GLOBAL PROPERTY ${propertyName} DEFINED)
set(${ARG_POPULATED} ${value} PARENT_SCOPE)
endif()
endfunction()
#=======================================================================
# Performing the population
#=======================================================================
# The value of contentName will always have been lowercased by the caller.
# All other arguments are assumed to be options that are understood by
# ExternalProject_Add(), except for QUIET and SUBBUILD_DIR.
function(__FetchContent_directPopulate contentName)
set(options
QUIET
)
set(oneValueArgs
SUBBUILD_DIR
SOURCE_DIR
BINARY_DIR
# Prevent the following from being passed through
CONFIGURE_COMMAND
BUILD_COMMAND
INSTALL_COMMAND
TEST_COMMAND
)
set(multiValueArgs "")
cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
if(NOT ARG_SUBBUILD_DIR)
message(FATAL_ERROR "Internal error: SUBBUILD_DIR not set")
elseif(NOT IS_ABSOLUTE "${ARG_SUBBUILD_DIR}")
set(ARG_SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_SUBBUILD_DIR}")
endif()
if(NOT ARG_SOURCE_DIR)
message(FATAL_ERROR "Internal error: SOURCE_DIR not set")
elseif(NOT IS_ABSOLUTE "${ARG_SOURCE_DIR}")
set(ARG_SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_SOURCE_DIR}")
endif()
if(NOT ARG_BINARY_DIR)
message(FATAL_ERROR "Internal error: BINARY_DIR not set")
elseif(NOT IS_ABSOLUTE "${ARG_BINARY_DIR}")
set(ARG_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_BINARY_DIR}")
endif()
# Ensure the caller can know where to find the source and build directories
# with some convenient variables. Doing this here ensures the caller sees
# the correct result in the case where the default values are overridden by
# the content details set by the project.
set(${contentName}_SOURCE_DIR "${ARG_SOURCE_DIR}" PARENT_SCOPE)
set(${contentName}_BINARY_DIR "${ARG_BINARY_DIR}" PARENT_SCOPE)
# The unparsed arguments may contain spaces, so build up ARG_EXTRA
# in such a way that it correctly substitutes into the generated
# CMakeLists.txt file with each argument quoted.
unset(ARG_EXTRA)
foreach(arg IN LISTS ARG_UNPARSED_ARGUMENTS)
set(ARG_EXTRA "${ARG_EXTRA} \"${arg}\"")
endforeach()
# Hide output if requested, but save it to a variable in case there's an
# error so we can show the output upon failure. When not quiet, don't
# capture the output to a variable because the user may want to see the
# output as it happens (e.g. progress during long downloads). Combine both
# stdout and stderr in the one capture variable so the output stays in order.
if (ARG_QUIET)
set(outputOptions
OUTPUT_VARIABLE capturedOutput
ERROR_VARIABLE capturedOutput
)
else()
set(capturedOutput)
set(outputOptions)
message(STATUS "Populating ${contentName}")
endif()
if(CMAKE_GENERATOR)
set(generatorOpts "-G${CMAKE_GENERATOR}")
if(CMAKE_GENERATOR_PLATFORM)
list(APPEND generatorOpts "-A${CMAKE_GENERATOR_PLATFORM}")
endif()
if(CMAKE_GENERATOR_TOOLSET)
list(APPEND generatorOpts "-T${CMAKE_GENERATOR_TOOLSET}")
endif()
if(CMAKE_MAKE_PROGRAM)
list(APPEND generatorOpts "-DCMAKE_MAKE_PROGRAM:FILEPATH=${CMAKE_MAKE_PROGRAM}")
endif()
else()
# Likely we've been invoked via CMake's script mode where no
# generator is set (and hence CMAKE_MAKE_PROGRAM could not be
# trusted even if provided). We will have to rely on being
# able to find the default generator and build tool.
unset(generatorOpts)
endif()
# Create and build a separate CMake project to carry out the population.
# If we've already previously done these steps, they will not cause
# anything to be updated, so extra rebuilds of the project won't occur.
# Make sure to pass through CMAKE_MAKE_PROGRAM in case the main project
# has this set to something not findable on the PATH.
configure_file("${__FetchContent_privateDir}/CMakeLists.cmake.in"
"${ARG_SUBBUILD_DIR}/CMakeLists.txt")
execute_process(
COMMAND ${CMAKE_COMMAND} ${generatorOpts} .
RESULT_VARIABLE result
${outputOptions}
WORKING_DIRECTORY "${ARG_SUBBUILD_DIR}"
)
if(result)
if(capturedOutput)
message("${capturedOutput}")
endif()
message(FATAL_ERROR "CMake step for ${contentName} failed: ${result}")
endif()
execute_process(
COMMAND ${CMAKE_COMMAND} --build .
RESULT_VARIABLE result
${outputOptions}
WORKING_DIRECTORY "${ARG_SUBBUILD_DIR}"
)
if(result)
if(capturedOutput)
message("${capturedOutput}")
endif()
message(FATAL_ERROR "Build step for ${contentName} failed: ${result}")
endif()
endfunction()
option(FETCHCONTENT_FULLY_DISCONNECTED "Disables all attempts to download or update content and assumes source dirs already exist")
option(FETCHCONTENT_UPDATES_DISCONNECTED "Enables UPDATE_DISCONNECTED behavior for all content population")
option(FETCHCONTENT_QUIET "Enables QUIET option for all content population" ON)
set(FETCHCONTENT_BASE_DIR "${CMAKE_BINARY_DIR}/_deps" CACHE PATH "Directory under which to collect all populated content")
# Populate the specified content using details stored from
# an earlier call to FetchContent_Declare().
function(FetchContent_Populate contentName)
if(NOT contentName)
message(FATAL_ERROR "Empty contentName not allowed for FetchContent_Populate()")
endif()
string(TOLOWER ${contentName} contentNameLower)
if(ARGN)
# This is the direct population form with details fully specified
# as part of the call, so we already have everything we need
__FetchContent_directPopulate(
${contentNameLower}
SUBBUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-subbuild"
SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-src"
BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${contentNameLower}-build"
${ARGN} # Could override any of the above ..._DIR variables
)
# Pass source and binary dir variables back to the caller
set(${contentNameLower}_SOURCE_DIR "${${contentNameLower}_SOURCE_DIR}" PARENT_SCOPE)
set(${contentNameLower}_BINARY_DIR "${${contentNameLower}_BINARY_DIR}" PARENT_SCOPE)
# Don't set global properties, or record that we did this population, since
# this was a direct call outside of the normal declared details form.
# We only want to save values in the global properties for content that
# honours the hierarchical details mechanism so that projects are not
# robbed of the ability to override details set in nested projects.
return()
endif()
# No details provided, so assume they were saved from an earlier call
# to FetchContent_Declare(). Do a check that we haven't already
# populated this content before in case the caller forgot to check.
FetchContent_GetProperties(${contentName})
if(${contentNameLower}_POPULATED)
message(FATAL_ERROR "Content ${contentName} already populated in ${${contentNameLower}_SOURCE_DIR}")
endif()
string(TOUPPER ${contentName} contentNameUpper)
set(FETCHCONTENT_SOURCE_DIR_${contentNameUpper}
"${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}"
CACHE PATH "When not empty, overrides where to find pre-populated content for ${contentName}")
if(FETCHCONTENT_SOURCE_DIR_${contentNameUpper})
# The source directory has been explicitly provided in the cache,
# so no population is required
set(${contentNameLower}_SOURCE_DIR "${FETCHCONTENT_SOURCE_DIR_${contentNameUpper}}")
set(${contentNameLower}_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build")
elseif(FETCHCONTENT_FULLY_DISCONNECTED)
# Bypass population and assume source is already there from a previous run
set(${contentNameLower}_SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src")
set(${contentNameLower}_BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build")
else()
# Support both a global "disconnect all updates" and a per-content
# update test (either one being set disables updates for this content).
option(FETCHCONTENT_UPDATES_DISCONNECTED_${contentNameUpper}
"Enables UPDATE_DISCONNECTED behavior just for population of ${contentName}")
if(FETCHCONTENT_UPDATES_DISCONNECTED OR
FETCHCONTENT_UPDATES_DISCONNECTED_${contentNameUpper})
set(disconnectUpdates True)
else()
set(disconnectUpdates False)
endif()
if(FETCHCONTENT_QUIET)
set(quietFlag QUIET)
else()
unset(quietFlag)
endif()
__FetchContent_getSavedDetails(${contentName} contentDetails)
if("${contentDetails}" STREQUAL "")
message(FATAL_ERROR "No details have been set for content: ${contentName}")
endif()
__FetchContent_directPopulate(
${contentNameLower}
${quietFlag}
UPDATE_DISCONNECTED ${disconnectUpdates}
SUBBUILD_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-subbuild"
SOURCE_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-src"
BINARY_DIR "${FETCHCONTENT_BASE_DIR}/${contentNameLower}-build"
# Put the saved details last so they can override any of the
# the options we set above (this can include SOURCE_DIR or
# BUILD_DIR)
${contentDetails}
)
endif()
__FetchContent_setPopulated(
${contentName}
${${contentNameLower}_SOURCE_DIR}
${${contentNameLower}_BINARY_DIR}
)
# Pass variables back to the caller. The variables passed back here
# must match what FetchContent_GetProperties() sets when it is called
# with just the content name.
set(${contentNameLower}_SOURCE_DIR "${${contentNameLower}_SOURCE_DIR}" PARENT_SCOPE)
set(${contentNameLower}_BINARY_DIR "${${contentNameLower}_BINARY_DIR}" PARENT_SCOPE)
set(${contentNameLower}_POPULATED True PARENT_SCOPE)
endfunction()

View File

@ -0,0 +1,21 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
cmake_minimum_required(VERSION ${CMAKE_VERSION})
# We name the project and the target for the ExternalProject_Add() call
# to something that will highlight to the user what we are working on if
# something goes wrong and an error message is produced.
project(${contentName}-populate NONE)
include(ExternalProject)
ExternalProject_Add(${contentName}-populate
${ARG_EXTRA}
SOURCE_DIR "${ARG_SOURCE_DIR}"
BINARY_DIR "${ARG_BINARY_DIR}"
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)

5
cmake/Modules/README.md Normal file
View File

@ -0,0 +1,5 @@
## FetchContent
`FetchContent.cmake` and `FetchContent/CMakeLists.cmake.in`
are copied from `cmake/3.11.0/share/cmake-3.11/Modules`.

76
cmake/googletest.cmake Normal file
View File

@ -0,0 +1,76 @@
# Copyright 2020 Fangjun Kuang (csukuangfj@gmail.com)
# See ../LICENSE for clarification regarding multiple authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
function(download_googltest)
if(CMAKE_VERSION VERSION_LESS 3.11)
# FetchContent is available since 3.11,
# we've copied it to ${CMAKE_SOURCE_DIR}/cmake/Modules
# so that it can be used in lower CMake versions.
message(STATUS "Use FetchContent provided by k2")
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
endif()
include(FetchContent)
set(googletest_URL "https://github.com/google/googletest/archive/release-1.10.0.tar.gz")
set(googletest_HASH "SHA256=9dc9157a9a1551ec7a7e43daea9a694a0bb5fb8bec81235d8a1e6ef64c716dcb")
set(BUILD_GMOCK ON CACHE BOOL "" FORCE)
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
set(gtest_disable_pthreads ON CACHE BOOL "" FORCE)
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_Declare(googletest
URL ${googletest_URL}
URL_HASH ${googletest_HASH}
)
FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
message(STATUS "Downloading googletest")
FetchContent_Populate(googletest)
endif()
message(STATUS "googletest is downloaded to ${googletest_SOURCE_DIR}")
message(STATUS "googletest's binary dir is ${googletest_BINARY_DIR}")
if(APPLE)
set(CMAKE_MACOSX_RPATH ON) # to solve the following warning on macOS
endif()
#[==[
-- Generating done
Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake
--help-policy CMP0042" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.
MACOSX_RPATH is not specified for the following targets:
gmock
gmock_main
gtest
gtest_main
This warning is for project developers. Use -Wno-dev to suppress it.
]==]
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR} EXCLUDE_FROM_ALL)
target_include_directories(gtest
INTERFACE
${googletest_SOURCE_DIR}/googletest/include
${googletest_SOURCE_DIR}/googlemock/include
)
endfunction()
download_googltest()

34
cmake/pybind11.cmake Normal file
View File

@ -0,0 +1,34 @@
# Copyright (c) 2020 Fangjun Kuang (csukuangfj@gmail.com)
# See ../LICENSE for clarification regarding multiple authors
function(download_pybind11)
if(CMAKE_VERSION VERSION_LESS 3.11)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules)
endif()
include(FetchContent)
set(pybind11_URL "https://github.com/pybind/pybind11/archive/v2.6.0.tar.gz")
set(pybind11_HASH "SHA256=90b705137b69ee3b5fc655eaca66d0dc9862ea1759226f7ccd3098425ae69571")
set(double_quotes "\"")
set(dollar "\$")
set(semicolon "\;")
FetchContent_Declare(pybind11
URL ${pybind11_URL}
URL_HASH ${pybind11_HASH}
PATCH_COMMAND
sed -i s/\\${double_quotes}-flto\\\\${dollar}/\\${double_quotes}-Xcompiler=-flto${dollar}/g "tools/pybind11Tools.cmake" &&
sed -i s/${seimcolon}-fno-fat-lto-objects/${seimcolon}-Xcompiler=-fno-fat-lto-objects/g "tools/pybind11Tools.cmake"
)
FetchContent_GetProperties(pybind11)
if(NOT pybind11_POPULATED)
message(STATUS "Downloading pybind11")
FetchContent_Populate(pybind11)
endif()
message(STATUS "pybind11 is downloaded to ${pybind11_SOURCE_DIR}")
add_subdirectory(${pybind11_SOURCE_DIR} ${pybind11_BINARY_DIR} EXCLUDE_FROM_ALL)
endfunction()
download_pybind11()

39
cmake/torch.cmake Normal file
View File

@ -0,0 +1,39 @@
# Copyright (c) 2020 Fangjun Kuang (csukuangfj@gmail.com)
# See ../LICENSE for clarification regarding multiple authors
# PYTHON_EXECUTABLE is set by cmake/pybind11.cmake
message(STATUS "Python executable: ${PYTHON_EXECUTABLE}")
execute_process(
COMMAND "${PYTHON_EXECUTABLE}" -c "import os; import torch; print(os.path.dirname(torch.__file__))"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE TORCH_DIR
)
list(APPEND CMAKE_PREFIX_PATH "${TORCH_DIR}")
find_package(Torch REQUIRED)
# set the global CMAKE_CXX_FLAGS so that
# kaldifeat uses the same ABI flag as PyTorch
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
execute_process(
COMMAND "${PYTHON_EXECUTABLE}" -c "import torch; print(torch.__version__)"
OUTPUT_STRIP_TRAILING_WHITESPACE
OUTPUT_VARIABLE TORCH_VERSION
)
message(STATUS "PyTorch version: ${TORCH_VERSION}")
# Solve the following error for NVCC:
# unknown option `-Wall`
#
# It contains only some -Wno-* flags, so it is OK
# to set them to empty
set_property(TARGET torch_cuda
PROPERTY
INTERFACE_COMPILE_OPTIONS ""
)
set_property(TARGET torch_cpu
PROPERTY
INTERFACE_COMPILE_OPTIONS ""
)

2
kaldifeat/CMakeLists.txt Normal file
View File

@ -0,0 +1,2 @@
add_subdirectory(csrc)
add_subdirectory(python)

View File

@ -0,0 +1,40 @@
# Copyright (c) 2021 Xiaomi Corporation (author: Fangjun Kuang)
set(kaldifeat_srcs
feature-fbank.cc
feature-window.cc
mel-computations.cc
)
add_library(kaldifeat_core SHARED ${kaldifeat_srcs})
target_link_libraries(kaldifeat_core PUBLIC ${TORCH_LIBRARIES})
add_executable(test_kaldifeat test_kaldifeat.cc)
target_link_libraries(test_kaldifeat PRIVATE kaldifeat_core)
function(kaldifeat_add_test source)
get_filename_component(name ${source} NAME_WE)
add_executable(${name} "${source}")
target_link_libraries(${name}
PRIVATE
kaldifeat_core
gtest
gtest_main
)
add_test(NAME "Test.${name}"
COMMAND
$<TARGET_FILE:${name}>
)
endfunction()
if(BUILD_TESTS)
# please sort the source files alphabetically
set(test_srcs
feature-window-test.cc
)
foreach(source IN LISTS test_srcs)
kaldifeat_add_test(${source})
endforeach()
endif()

View File

@ -0,0 +1,69 @@
// kaldifeat/csrc/feature-common-inl.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
// This file is copied/modified from kaldi/src/feat/feature-common-inl.h
#ifndef KALDIFEAT_CSRC_FEATURE_COMMON_INL_H_
#define KALDIFEAT_CSRC_FEATURE_COMMON_INL_H_
#include "kaldifeat/csrc/feature-window.h"
namespace kaldifeat {
template <class F>
torch::Tensor OfflineFeatureTpl<F>::ComputeFeatures(const torch::Tensor &wave,
float vtln_warp) {
const FrameExtractionOptions &frame_opts = computer_.GetFrameOptions();
torch::Tensor strided_input;
if (wave.dim() == 1) {
strided_input = GetStrided(wave, frame_opts);
} else {
KALDIFEAT_ASSERT(wave.dim() == 2);
KALDIFEAT_ASSERT(wave.size(1) == frame_opts.WindowSize());
strided_input = wave;
}
if (frame_opts.dither != 0.0f) {
strided_input = Dither(strided_input, frame_opts.dither);
}
if (frame_opts.remove_dc_offset) {
torch::Tensor row_means = strided_input.mean(1).unsqueeze(1);
strided_input = strided_input - row_means;
}
bool use_raw_log_energy = computer_.NeedRawLogEnergy();
torch::Tensor log_energy_pre_window;
// torch.finfo(torch.float32).eps
constexpr float kEps = 1.1920928955078125e-07f;
if (use_raw_log_energy) {
// it is true iff use_energy==true and row_energy==true
log_energy_pre_window =
torch::clamp_min(strided_input.pow(2).sum(1), kEps).log();
}
if (frame_opts.preemph_coeff != 0.0f) {
strided_input = Preemphasize(frame_opts.preemph_coeff, strided_input);
}
strided_input = feature_window_function_.Apply(strided_input);
int32_t padding = frame_opts.PaddedWindowSize() - strided_input.size(1);
if (padding > 0) {
strided_input = torch::nn::functional::pad(
strided_input, torch::nn::functional::PadFuncOptions({0, padding})
.mode(torch::kConstant)
.value(0));
}
return computer_.Compute(log_energy_pre_window, vtln_warp, strided_input);
}
} // namespace kaldifeat
#endif // KALDIFEAT_CSRC_FEATURE_COMMON_INL_H_

View File

@ -0,0 +1,62 @@
// kaldifeat/csrc/feature-common.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
// This file is copied/modified from kaldi/src/feat/feature-common.h
#ifndef KALDIFEAT_CSRC_FEATURE_COMMON_H_
#define KALDIFEAT_CSRC_FEATURE_COMMON_H_
#include "kaldifeat/csrc/feature-window.h"
namespace kaldifeat {
template <class F>
class OfflineFeatureTpl {
public:
using Options = typename F::Options;
// Note: feature_window_function_ is the windowing function, which initialized
// using the options class, that we cache at this level.
OfflineFeatureTpl(const Options &opts)
: computer_(opts),
feature_window_function_(computer_.GetFrameOptions(), opts.device) {}
/**
Computes the features for one file (one sequence of features).
This is the newer interface where you specify the sample frequency
of the input waveform.
@param [in] wave The input waveform. It can be either 1-D or 2-D.
If it is a 1-D tensor, we assume it contains
samples of a mono channel sound file.
If it is a 2-D tensor, we assume each row
is a frame of size opts.WindowSize().
@param [in] sample_freq The sampling frequency with which
'wave' was sampled.
if sample_freq is higher than the frequency
specified in the config, we will downsample
the waveform, but if lower, it's an error.
@param [in] vtln_warp The VTLN warping factor (will normally
be 1.0)
@param [out] output The matrix of features, where the row-index
is the frame index.
*/
torch::Tensor ComputeFeatures(const torch::Tensor &wave, float vtln_warp);
int32_t Dim() const { return computer_.Dim(); }
const Options &GetOptions() const { return computer_.GetOptions(); }
// Copy constructor.
OfflineFeatureTpl(const OfflineFeatureTpl<F> &) = delete;
OfflineFeatureTpl<F> &operator=(const OfflineFeatureTpl<F> &) = delete;
private:
F computer_;
FeatureWindowFunction feature_window_function_;
};
} // namespace kaldifeat
#include "kaldifeat/csrc/feature-common-inl.h"
#endif // KALDIFEAT_CSRC_FEATURE_COMMON_H_

View File

@ -0,0 +1,109 @@
// kaldifeat/csrc/feature-fbank.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
// This file is copied/modified from kaldi/src/feat/feature-fbank.cc
#include "kaldifeat/csrc/feature-fbank.h"
#include <cmath>
#include "torch/fft.h"
#include "torch/torch.h"
namespace kaldifeat {
std::ostream &operator<<(std::ostream &os, const FbankOptions &opts) {
os << opts.ToString();
return os;
}
FbankComputer::FbankComputer(const FbankOptions &opts) : opts_(opts) {
if (opts.energy_floor > 0.0f) log_energy_floor_ = logf(opts.energy_floor);
// We'll definitely need the filterbanks info for VTLN warping factor 1.0.
// [note: this call caches it.]
GetMelBanks(1.0f);
}
FbankComputer::~FbankComputer() {
for (auto iter = mel_banks_.begin(); iter != mel_banks_.end(); ++iter)
delete iter->second;
}
const MelBanks *FbankComputer::GetMelBanks(float vtln_warp) {
MelBanks *this_mel_banks = nullptr;
// std::map<float, MelBanks *>::iterator iter = mel_banks_.find(vtln_warp);
auto iter = mel_banks_.find(vtln_warp);
if (iter == mel_banks_.end()) {
this_mel_banks =
new MelBanks(opts_.mel_opts, opts_.frame_opts, vtln_warp, opts_.device);
mel_banks_[vtln_warp] = this_mel_banks;
} else {
this_mel_banks = iter->second;
}
return this_mel_banks;
}
// ans.shape [signal_frame.size(0), this->Dim()]
torch::Tensor FbankComputer::Compute(torch::Tensor signal_raw_log_energy,
float vtln_warp,
const torch::Tensor &signal_frame) {
const MelBanks &mel_banks = *(GetMelBanks(vtln_warp));
KALDIFEAT_ASSERT(signal_frame.dim() == 2);
KALDIFEAT_ASSERT(signal_frame.size(1) == opts_.frame_opts.PaddedWindowSize());
// torch.finfo(torch.float32).eps
constexpr float kEps = 1.1920928955078125e-07f;
// Compute energy after window function (not the raw one).
if (opts_.use_energy && !opts_.raw_energy) {
signal_raw_log_energy =
torch::clamp_min(signal_frame.pow(2).sum(1), kEps).log();
}
// note spectrum is in magnitude, not power, because of `abs()`
torch::Tensor spectrum = torch::fft::rfft(signal_frame).abs();
// remove the last column, i.e., the highest fft bin
spectrum = spectrum.index(
{"...", torch::indexing::Slice(0, -1, torch::indexing::None)});
// Use power instead of magnitude if requested.
if (opts_.use_power) spectrum.pow_(2);
torch::Tensor mel_energies = mel_banks.Compute(spectrum);
if (opts_.use_log_fbank) {
// Avoid log of zero (which should be prevented anyway by dithering).
mel_energies = torch::clamp_min(mel_energies, kEps).log();
}
// if use_energy is true, then we get an extra bin. That is,
// if num_mel_bins is 23, the feature will contain 24 bins.
//
// if htk_compat is false, then the 0th bin is the log energy
// if htk_compat is true, then the last bin is the log energy
// Copy energy as first value (or the last, if htk_compat == true).
if (opts_.use_energy) {
if (opts_.energy_floor > 0.0f) {
signal_raw_log_energy =
torch::clamp_min(signal_raw_log_energy, log_energy_floor_);
}
signal_raw_log_energy.unsqueeze_(1);
if (opts_.htk_compat) {
mel_energies = torch::cat({mel_energies, signal_raw_log_energy}, 1);
} else {
mel_energies = torch::cat({signal_raw_log_energy, mel_energies}, 1);
}
}
return mel_energies;
}
} // namespace kaldifeat

View File

@ -0,0 +1,107 @@
// kaldifeat/csrc/feature-fbank.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
// This file is copied/modified from kaldi/src/feat/feature-fbank.h
#ifndef KALDIFEAT_CSRC_FEATURE_FBANK_H_
#define KALDIFEAT_CSRC_FEATURE_FBANK_H_
#include <map>
#include "kaldifeat/csrc/feature-common.h"
#include "kaldifeat/csrc/feature-window.h"
#include "kaldifeat/csrc/mel-computations.h"
#include "torch/torch.h"
namespace kaldifeat {
struct FbankOptions {
FrameExtractionOptions frame_opts;
MelBanksOptions mel_opts;
// append an extra dimension with energy to the filter banks
bool use_energy = false;
float energy_floor = 0.0f; // active iff use_energy==true
// If true, compute log_energy before preemphasis and windowing
// If false, compute log_energy after preemphasis ans windowing
bool raw_energy = true; // active iff use_energy==true
// If true, put energy last (if using energy)
// If false, put energy first
bool htk_compat = false; // active iff use_energy==true
// if true (default), produce log-filterbank, else linear
bool use_log_fbank = true;
// if true (default), use power in filterbank
// analysis, else magnitude.
bool use_power = true;
torch::Device device;
FbankOptions() : device("cpu") { mel_opts.num_bins = 23; }
std::string ToString() const {
std::ostringstream os;
os << "frame_opts: \n";
os << frame_opts << "\n";
os << "\n";
os << "mel_opts: \n";
os << mel_opts << "\n";
os << "use_energy: " << use_energy << "\n";
os << "energy_floor: " << energy_floor << "\n";
os << "raw_energy: " << raw_energy << "\n";
os << "htk_compat: " << htk_compat << "\n";
os << "use_log_fbank: " << use_log_fbank << "\n";
os << "use_power: " << use_power << "\n";
os << "device: " << device << "\n";
return os.str();
}
};
std::ostream &operator<<(std::ostream &os, const FbankOptions &opts);
class FbankComputer {
public:
using Options = FbankOptions;
explicit FbankComputer(const FbankOptions &opts);
~FbankComputer();
FbankComputer &operator=(const FbankComputer &) = delete;
FbankComputer(const FbankComputer &) = delete;
int32_t Dim() const {
return opts_.mel_opts.num_bins + (opts_.use_energy ? 1 : 0);
}
// if true, compute log_energy_pre_window but after dithering and dc removal
bool NeedRawLogEnergy() const { return opts_.use_energy && opts_.raw_energy; }
const FrameExtractionOptions &GetFrameOptions() const {
return opts_.frame_opts;
}
const FbankOptions &GetOptions() const { return opts_; }
// signal_raw_log_energy is log_energy_pre_window, which is not empty
// iff NeedRawLogEnergy() returns true.
torch::Tensor Compute(torch::Tensor signal_raw_log_energy, float vtln_warp,
const torch::Tensor &signal_frame);
private:
const MelBanks *GetMelBanks(float vtln_warp);
FbankOptions opts_;
float log_energy_floor_;
std::map<float, MelBanks *> mel_banks_; // float is VTLN coefficient.
};
using Fbank = OfflineFeatureTpl<FbankComputer>;
} // namespace kaldifeat
#endif // KALDIFEAT_CSRC_FEATURE_FBANK_H_

View File

@ -0,0 +1,82 @@
// kaldifeat/csrc/feature-window-test.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#include "kaldifeat/csrc/feature-window.h"
#include "gtest/gtest.h"
namespace kaldifeat {
TEST(FeatureWindow, NumFrames) {
FrameExtractionOptions opts;
opts.samp_freq = 1000;
opts.frame_length_ms = 4;
opts.frame_shift_ms = 2;
int32_t frame_length = opts.samp_freq / 1000 * opts.frame_length_ms;
int32_t frame_shift = opts.samp_freq / 1000 * opts.frame_shift_ms;
for (int32_t num_samples = 10; num_samples < 1000; ++num_samples) {
opts.snip_edges = true;
int32_t num_frames = NumFrames(num_samples, opts);
int32_t expected_num_frames =
(num_samples - frame_length) / frame_shift + 1;
ASSERT_EQ(num_frames, expected_num_frames);
opts.snip_edges = false;
num_frames = NumFrames(num_samples, opts);
expected_num_frames = (num_samples + frame_shift / 2) / frame_shift;
ASSERT_EQ(num_frames, expected_num_frames);
}
}
TEST(FeatureWindow, FirstSampleOfFrame) {
FrameExtractionOptions opts;
opts.samp_freq = 1000;
opts.frame_length_ms = 4;
opts.frame_shift_ms = 2;
// samples: [a, b, c, d, e, f]
int32_t num_samples = 6;
opts.snip_edges = true;
ASSERT_EQ(NumFrames(num_samples, opts), 2);
EXPECT_EQ(FirstSampleOfFrame(0, opts), 0);
EXPECT_EQ(FirstSampleOfFrame(1, opts), 2);
// now for snip edges if false
opts.snip_edges = false;
ASSERT_EQ(NumFrames(num_samples, opts), 3);
EXPECT_EQ(FirstSampleOfFrame(0, opts), -1);
EXPECT_EQ(FirstSampleOfFrame(1, opts), 1);
EXPECT_EQ(FirstSampleOfFrame(2, opts), 3);
}
TEST(FeatureWindow, GetStrided) {
FrameExtractionOptions opts;
opts.samp_freq = 1000;
opts.frame_length_ms = 4;
opts.frame_shift_ms = 2;
// [0 1 2 3 4 5]
torch::Tensor samples = torch::arange(0, 6).to(torch::kFloat);
opts.snip_edges = true;
auto frames = GetStrided(samples, opts);
// 0 1 2 3
// 2 3 4 5
std::vector<float> v = {0, 1, 2, 3, 2, 3, 4, 5};
torch::Tensor expected =
torch::from_blob(v.data(), {int64_t(v.size())}, torch::kFloat32);
EXPECT_TRUE(frames.flatten().allclose(expected));
// 0 0 1 2
// 1 2 3 4
// 3 4 5 5
opts.snip_edges = false;
frames = GetStrided(samples, opts);
v = {0, 0, 1, 2, 1, 2, 3, 4, 3, 4, 5, 5};
expected = torch::from_blob(v.data(), {int64_t(v.size())}, torch::kFloat32);
EXPECT_TRUE(frames.flatten().allclose(expected));
}
} // namespace kaldifeat

View File

@ -0,0 +1,192 @@
// kaldifeat/csrc/feature-window.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
// This file is copied/modified from kaldi/src/feat/feature-window.cc
#include "kaldifeat/csrc/feature-window.h"
#include <cmath>
#include "torch/torch.h"
#ifndef M_2PI
#define M_2PI 6.283185307179586476925286766559005
#endif
namespace kaldifeat {
std::ostream &operator<<(std::ostream &os, const FrameExtractionOptions &opts) {
os << opts.ToString();
return os;
}
FeatureWindowFunction::FeatureWindowFunction(const FrameExtractionOptions &opts,
torch::Device device) {
int32_t frame_length = opts.WindowSize();
KALDIFEAT_ASSERT(frame_length > 0);
window = torch::empty({frame_length}, torch::kFloat32);
float *window_data = window.data_ptr<float>();
double a = M_2PI / (frame_length - 1);
for (int32_t i = 0; i < frame_length; i++) {
double i_fl = static_cast<double>(i);
if (opts.window_type == "hanning") {
window_data[i] = 0.5 - 0.5 * cos(a * i_fl);
} else if (opts.window_type == "sine") {
// when you are checking ws wikipedia, please
// note that 0.5 * a = M_PI/(frame_length-1)
window_data[i] = sin(0.5 * a * i_fl);
} else if (opts.window_type == "hamming") {
window_data[i] = 0.54 - 0.46 * cos(a * i_fl);
} else if (opts.window_type ==
"povey") { // like hamming but goes to zero at edges.
window_data[i] = pow(0.5 - 0.5 * cos(a * i_fl), 0.85);
} else if (opts.window_type == "rectangular") {
window_data[i] = 1.0;
} else if (opts.window_type == "blackman") {
window_data[i] = opts.blackman_coeff - 0.5 * cos(a * i_fl) +
(0.5 - opts.blackman_coeff) * cos(2 * a * i_fl);
} else {
KALDIFEAT_ERR << "Invalid window type " << opts.window_type;
}
}
window = window.unsqueeze(0);
if (window.device() != device) {
window = window.to(device);
}
}
torch::Tensor FeatureWindowFunction::Apply(const torch::Tensor &wave) const {
KALDIFEAT_ASSERT(wave.dim() == 2);
KALDIFEAT_ASSERT(wave.size(1) == window.size(1));
return wave.mul(window);
}
int64_t FirstSampleOfFrame(int32_t frame, const FrameExtractionOptions &opts) {
int64_t frame_shift = opts.WindowShift();
if (opts.snip_edges) {
return frame * frame_shift;
} else {
int64_t midpoint_of_frame = frame_shift * frame + frame_shift / 2,
beginning_of_frame = midpoint_of_frame - opts.WindowSize() / 2;
return beginning_of_frame;
}
}
int32_t NumFrames(int64_t num_samples, const FrameExtractionOptions &opts,
bool flush /*= true*/) {
int64_t frame_shift = opts.WindowShift();
int64_t frame_length = opts.WindowSize();
if (opts.snip_edges) {
// with --snip-edges=true (the default), we use a HTK-like approach to
// determining the number of frames-- all frames have to fit completely into
// the waveform, and the first frame begins at sample zero.
if (num_samples < frame_length)
return 0;
else
return (1 + ((num_samples - frame_length) / frame_shift));
// You can understand the expression above as follows: 'num_samples -
// frame_length' is how much room we have to shift the frame within the
// waveform; 'frame_shift' is how much we shift it each time; and the ratio
// is how many times we can shift it (integer arithmetic rounds down).
} else {
// if --snip-edges=false, the number of frames is determined by rounding the
// (file-length / frame-shift) to the nearest integer. The point of this
// formula is to make the number of frames an obvious and predictable
// function of the frame shift and signal length, which makes many
// segmentation-related questions simpler.
//
// Because integer division in C++ rounds toward zero, we add (half the
// frame-shift minus epsilon) before dividing, to have the effect of
// rounding towards the closest integer.
int32_t num_frames = (num_samples + (frame_shift / 2)) / frame_shift;
if (flush) return num_frames;
// note: 'end' always means the last plus one, i.e. one past the last.
int64_t end_sample_of_last_frame =
FirstSampleOfFrame(num_frames - 1, opts) + frame_length;
// the following code is optimized more for clarity than efficiency.
// If flush == false, we can't output frames that extend past the end
// of the signal.
while (num_frames > 0 && end_sample_of_last_frame > num_samples) {
num_frames--;
end_sample_of_last_frame -= frame_shift;
}
return num_frames;
}
}
torch::Tensor GetStrided(const torch::Tensor &wave,
const FrameExtractionOptions &opts) {
KALDIFEAT_ASSERT(wave.dim() == 1);
std::vector<int64_t> strides = {opts.WindowShift() * wave.strides()[0],
wave.strides()[0]};
int64_t num_samples = wave.size(0);
int32_t num_frames = NumFrames(num_samples, opts);
std::vector<int64_t> sizes = {num_frames, opts.WindowSize()};
if (opts.snip_edges) {
return wave.as_strided(sizes, strides);
}
int32_t frame_length = opts.samp_freq / 1000 * opts.frame_length_ms;
int32_t frame_shift = opts.samp_freq / 1000 * opts.frame_shift_ms;
int64_t num_new_samples = (num_frames - 1) * frame_shift + frame_length;
int32_t num_padding = num_new_samples - num_samples;
int32_t num_left_padding = (frame_length - frame_shift) / 2;
int32_t num_right_padding = num_padding - num_left_padding;
// left_padding = wave[:num_left_padding].flip(dims=(0,))
torch::Tensor left_padding =
wave.index({torch::indexing::Slice(0, num_left_padding, 1)}).flip({0});
// right_padding = wave[-num_righ_padding:].flip(dims=(0,))
torch::Tensor right_padding =
wave.index({torch::indexing::Slice(-num_right_padding,
torch::indexing::None, 1)})
.flip({0});
torch::Tensor new_wave = torch::cat({left_padding, wave, right_padding}, 0);
return new_wave.as_strided(sizes, strides);
}
torch::Tensor Dither(const torch::Tensor &wave, float dither_value) {
if (dither_value == 0.0f) wave;
torch::Tensor rand_gauss = torch::randn_like(wave);
#if 1
return wave + rand_gauss * dither_value;
#else
// use in-place version of wave and change its to pointer type
wave_->add_(rand_gauss, dither_value);
#endif
}
torch::Tensor Preemphasize(float preemph_coeff, const torch::Tensor &wave) {
using namespace torch::indexing; // It imports: Slice, None
if (preemph_coeff == 0.0f) return wave;
KALDIFEAT_ASSERT(preemph_coeff >= 0.0f && preemph_coeff <= 1.0f);
torch::Tensor ans = torch::empty_like(wave);
// right = wave[:, 1:]
torch::Tensor right = wave.index({"...", Slice(1, None, None)});
// current = wave[:, 0:-1]
torch::Tensor current = wave.index({"...", Slice(0, -1, None)});
// ans[1:, :] = wave[:, 1:] - preemph_coeff * wave[:, 0:-1]
ans.index({"...", Slice(1, None, None)}) = right - preemph_coeff * current;
ans.index({"...", 0}) = wave.index({"...", 0}) * (1 - preemph_coeff);
return ans;
}
} // namespace kaldifeat

View File

@ -0,0 +1,135 @@
// kaldifeat/csrc/feature-window.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
// This file is copied/modified from kaldi/src/feat/feature-window.h
#include "kaldifeat/csrc/log.h"
#include "torch/torch.h"
#ifndef KALDIFEAT_CSRC_FEATURE_WINDOW_H_
#define KALDIFEAT_CSRC_FEATURE_WINDOW_H_
namespace kaldifeat {
inline int32_t RoundUpToNearestPowerOfTwo(int32_t n) {
// copied from kaldi/src/base/kaldi-math.cc
KALDIFEAT_ASSERT(n > 0);
n--;
n |= n >> 1;
n |= n >> 2;
n |= n >> 4;
n |= n >> 8;
n |= n >> 16;
return n + 1;
}
struct FrameExtractionOptions {
float samp_freq = 16000;
float frame_shift_ms = 10.0f; // in milliseconds.
float frame_length_ms = 25.0f; // in milliseconds.
float dither = 1.0f; // Amount of dithering, 0.0 means no dither.
float preemph_coeff = 0.97f; // Preemphasis coefficient.
bool remove_dc_offset = true; // Subtract mean of wave before FFT.
std::string window_type = "povey"; // e.g. Hamming window
// May be "hamming", "rectangular", "povey", "hanning", "sine", "blackman"
// "povey" is a window I made to be similar to Hamming but to go to zero at
// the edges, it's pow((0.5 - 0.5*cos(n/N*2*pi)), 0.85) I just don't think the
// Hamming window makes sense as a windowing function.
bool round_to_power_of_two = true;
float blackman_coeff = 0.42f;
bool snip_edges = true;
// bool allow_downsample = false;
// bool allow_upsample = false;
// int32_t max_feature_vectors = -1;
int32_t WindowShift() const {
return static_cast<int32_t>(samp_freq * 0.001f * frame_shift_ms);
}
int32_t WindowSize() const {
return static_cast<int32_t>(samp_freq * 0.001f * frame_length_ms);
}
int32_t PaddedWindowSize() const {
return (round_to_power_of_two ? RoundUpToNearestPowerOfTwo(WindowSize())
: WindowSize());
}
std::string ToString() const {
std::ostringstream os;
#define KALDIFEAT_PRINT(x) os << #x << ": " << x << "\n"
KALDIFEAT_PRINT(samp_freq);
KALDIFEAT_PRINT(frame_shift_ms);
KALDIFEAT_PRINT(frame_length_ms);
KALDIFEAT_PRINT(dither);
KALDIFEAT_PRINT(preemph_coeff);
KALDIFEAT_PRINT(remove_dc_offset);
KALDIFEAT_PRINT(window_type);
KALDIFEAT_PRINT(round_to_power_of_two);
KALDIFEAT_PRINT(blackman_coeff);
KALDIFEAT_PRINT(snip_edges);
// KALDIFEAT_PRINT(allow_downsample);
// KALDIFEAT_PRINT(allow_upsample);
// KALDIFEAT_PRINT(max_feature_vectors);
#undef KALDIFEAT_PRINT
return os.str();
}
};
std::ostream &operator<<(std::ostream &os, const FrameExtractionOptions &opts);
class FeatureWindowFunction {
public:
FeatureWindowFunction() = default;
FeatureWindowFunction(const FrameExtractionOptions &opts,
torch::Device device);
torch::Tensor Apply(const torch::Tensor &wave) const;
private:
torch::Tensor window;
};
/**
This function returns the number of frames that we can extract from a wave
file with the given number of samples in it (assumed to have the same
sampling rate as specified in 'opts').
@param [in] num_samples The number of samples in the wave file.
@param [in] opts The frame-extraction options class
@param [in] flush True if we are asserting that this number of samples
is 'all there is', false if we expecting more data to possibly come in. This
only makes a difference to the answer if opts.snips_edges
== false. For offline feature extraction you always want flush ==
true. In an online-decoding context, once you know (or decide)
that no more data is coming in, you'd call it with flush == true at the end
to flush out any remaining data.
*/
int32_t NumFrames(int64_t num_samples, const FrameExtractionOptions &opts,
bool flush = true);
int64_t FirstSampleOfFrame(int32_t frame, const FrameExtractionOptions &opts);
// return a 2-d tensor with shape [num_frames, opts.WindowSize()]
//
// Suppose the wave contains samples [a, b, c, d, e, f],
// windows size is 4 and window shift is 2
//
// if opt.snip_edges is true, it returns:
// a b c d
// c d e f
//
// if opt.snip_edges is false, it returns
// a a b c
// b c d e
// d e f f
// (Note, it use reflections at the end. That is
// abcdef is reflected to fedcba|abcdef|fedcba)
torch::Tensor GetStrided(const torch::Tensor &wave,
const FrameExtractionOptions &opts);
torch::Tensor Dither(const torch::Tensor &wave, float dither_value);
torch::Tensor Preemphasize(float preemph_coeff, const torch::Tensor &wave);
} // namespace kaldifeat
#endif // KALDIFEAT_CSRC_FEATURE_WINDOW_H_

94
kaldifeat/csrc/log.h Normal file
View File

@ -0,0 +1,94 @@
// kaldifeat/csrc/log.h
//
// Copyright (c) 2020 Xiaomi Corporation (authors: Fangjun Kuang)
#ifndef KALDIFEAT_CSRC_LOG_H_
#define KALDIFEAT_CSRC_LOG_H_
#include <cstdlib>
#include <iostream>
#include <sstream>
namespace kaldifeat {
enum class LogLevel {
kInfo = 0,
kWarn = 1,
kError = 2, // abort the program
};
class Logger {
public:
Logger(const char *filename, const char *func_name, uint32_t line_num,
LogLevel level)
: filename_(filename),
func_name_(func_name),
line_num_(line_num),
level_(level) {
os_ << filename << ":" << func_name << ":" << line_num << "\n";
switch (level_) {
case LogLevel::kInfo:
os_ << "[I] ";
break;
case LogLevel::kWarn:
os_ << "[W] ";
break;
case LogLevel::kError:
os_ << "[E] ";
break;
}
}
template <typename T>
Logger &operator<<(const T &val) {
os_ << val;
return *this;
}
~Logger() {
std::cerr << os_.str() << "\n";
if (level_ == LogLevel::kError) abort();
}
private:
std::ostringstream os_;
const char *filename_;
const char *func_name_;
uint32_t line_num_;
LogLevel level_;
};
class Voidifier {
public:
void operator&(const Logger &)const {}
};
#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) || \
defined(__PRETTY_FUNCTION__)
// for clang and GCC
#define KALDIFEAT_FUNC __PRETTY_FUNCTION__
#else
// for other compilers
#define KALDIFEAT_FUNC __func__
#endif
#define KALDIFEAT_LOG \
kaldifeat::Logger(__FILE__, KALDIFEAT_FUNC, __LINE__, \
kaldifeat::LogLevel::kInfo)
#define KALDIFEAT_WARN \
kaldifeat::Logger(__FILE__, KALDIFEAT_FUNC, __LINE__, \
kaldifeat::LogLevel::kWarn)
#define KALDIFEAT_ERR \
kaldifeat::Logger(__FILE__, KALDIFEAT_FUNC, __LINE__, \
kaldifeat::LogLevel::kError)
#define KALDIFEAT_ASSERT(x) \
(x) ? (void)0 \
: kaldifeat::Voidifier() & KALDIFEAT_ERR << "Check failed!\n" \
<< "x: " << #x
} // namespace kaldifeat
#endif // KALDIFEAT_CSRC_LOG_H_

View File

@ -0,0 +1,195 @@
// kaldifeat/csrc/mel-computations.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
//
// This file is copied/modified from kaldi/src/feat/mel-computations.cc
//
#include "kaldifeat/csrc/mel-computations.h"
#include "kaldifeat/csrc/feature-window.h"
namespace kaldifeat {
std::ostream &operator<<(std::ostream &os, const MelBanksOptions &opts) {
os << opts.ToString();
return os;
}
float MelBanks::VtlnWarpFreq(
float vtln_low_cutoff, // upper+lower frequency cutoffs for VTLN.
float vtln_high_cutoff,
float low_freq, // upper+lower frequency cutoffs in mel computation
float high_freq, float vtln_warp_factor, float freq) {
/// This computes a VTLN warping function that is not the same as HTK's one,
/// but has similar inputs (this function has the advantage of never producing
/// empty bins).
/// This function computes a warp function F(freq), defined between low_freq
/// and high_freq inclusive, with the following properties:
/// F(low_freq) == low_freq
/// F(high_freq) == high_freq
/// The function is continuous and piecewise linear with two inflection
/// points.
/// The lower inflection point (measured in terms of the unwarped
/// frequency) is at frequency l, determined as described below.
/// The higher inflection point is at a frequency h, determined as
/// described below.
/// If l <= f <= h, then F(f) = f/vtln_warp_factor.
/// If the higher inflection point (measured in terms of the unwarped
/// frequency) is at h, then max(h, F(h)) == vtln_high_cutoff.
/// Since (by the last point) F(h) == h/vtln_warp_factor, then
/// max(h, h/vtln_warp_factor) == vtln_high_cutoff, so
/// h = vtln_high_cutoff / max(1, 1/vtln_warp_factor).
/// = vtln_high_cutoff * min(1, vtln_warp_factor).
/// If the lower inflection point (measured in terms of the unwarped
/// frequency) is at l, then min(l, F(l)) == vtln_low_cutoff
/// This implies that l = vtln_low_cutoff / min(1, 1/vtln_warp_factor)
/// = vtln_low_cutoff * max(1, vtln_warp_factor)
if (freq < low_freq || freq > high_freq)
return freq; // in case this gets called
// for out-of-range frequencies, just return the freq.
KALDIFEAT_ASSERT(vtln_low_cutoff > low_freq);
KALDIFEAT_ASSERT(vtln_high_cutoff < high_freq);
float one = 1.0f;
float l = vtln_low_cutoff * std::max(one, vtln_warp_factor);
float h = vtln_high_cutoff * std::min(one, vtln_warp_factor);
float scale = 1.0f / vtln_warp_factor;
float Fl = scale * l; // F(l);
float Fh = scale * h; // F(h);
KALDIFEAT_ASSERT(l > low_freq && h < high_freq);
// slope of left part of the 3-piece linear function
float scale_left = (Fl - low_freq) / (l - low_freq);
// [slope of center part is just "scale"]
// slope of right part of the 3-piece linear function
float scale_right = (high_freq - Fh) / (high_freq - h);
if (freq < l) {
return low_freq + scale_left * (freq - low_freq);
} else if (freq < h) {
return scale * freq;
} else { // freq >= h
return high_freq + scale_right * (freq - high_freq);
}
}
float MelBanks::VtlnWarpMelFreq(
float vtln_low_cutoff, // upper+lower frequency cutoffs for VTLN.
float vtln_high_cutoff,
float low_freq, // upper+lower frequency cutoffs in mel computation
float high_freq, float vtln_warp_factor, float mel_freq) {
return MelScale(VtlnWarpFreq(vtln_low_cutoff, vtln_high_cutoff, low_freq,
high_freq, vtln_warp_factor,
InverseMelScale(mel_freq)));
}
MelBanks::MelBanks(const MelBanksOptions &opts,
const FrameExtractionOptions &frame_opts,
float vtln_warp_factor, torch::Device device)
: htk_mode_(opts.htk_mode) {
int32_t num_bins = opts.num_bins;
if (num_bins < 3) KALDIFEAT_ERR << "Must have at least 3 mel bins";
float sample_freq = frame_opts.samp_freq;
int32_t window_length_padded = frame_opts.PaddedWindowSize();
KALDIFEAT_ASSERT(window_length_padded % 2 == 0);
int32_t num_fft_bins = window_length_padded / 2;
float nyquist = 0.5f * sample_freq;
float low_freq = opts.low_freq, high_freq;
if (opts.high_freq > 0.0f)
high_freq = opts.high_freq;
else
high_freq = nyquist + opts.high_freq;
if (low_freq < 0.0f || low_freq >= nyquist || high_freq <= 0.0f ||
high_freq > nyquist || high_freq <= low_freq)
KALDIFEAT_ERR << "Bad values in options: low-freq " << low_freq
<< " and high-freq " << high_freq << " vs. nyquist "
<< nyquist;
float fft_bin_width = sample_freq / window_length_padded;
// fft-bin width [think of it as Nyquist-freq / half-window-length]
float mel_low_freq = MelScale(low_freq);
float mel_high_freq = MelScale(high_freq);
debug_ = opts.debug_mel;
// divide by num_bins+1 in next line because of end-effects where the bins
// spread out to the sides.
float mel_freq_delta = (mel_high_freq - mel_low_freq) / (num_bins + 1);
float vtln_low = opts.vtln_low, vtln_high = opts.vtln_high;
if (vtln_high < 0.0f) {
vtln_high += nyquist;
}
if (vtln_warp_factor != 1.0f &&
(vtln_low < 0.0f || vtln_low <= low_freq || vtln_low >= high_freq ||
vtln_high <= 0.0f || vtln_high >= high_freq || vtln_high <= vtln_low))
KALDIFEAT_ERR << "Bad values in options: vtln-low " << vtln_low
<< " and vtln-high " << vtln_high << ", versus "
<< "low-freq " << low_freq << " and high-freq " << high_freq;
bins_mat_ = torch::zeros({num_bins, num_fft_bins}, torch::kFloat);
int32_t stride = bins_mat_.strides()[0];
for (int32_t bin = 0; bin < num_bins; ++bin) {
float left_mel = mel_low_freq + bin * mel_freq_delta,
center_mel = mel_low_freq + (bin + 1) * mel_freq_delta,
right_mel = mel_low_freq + (bin + 2) * mel_freq_delta;
if (vtln_warp_factor != 1.0f) {
left_mel = VtlnWarpMelFreq(vtln_low, vtln_high, low_freq, high_freq,
vtln_warp_factor, left_mel);
center_mel = VtlnWarpMelFreq(vtln_low, vtln_high, low_freq, high_freq,
vtln_warp_factor, center_mel);
right_mel = VtlnWarpMelFreq(vtln_low, vtln_high, low_freq, high_freq,
vtln_warp_factor, right_mel);
}
// this_bin will be a vector of coefficients that is only
// nonzero where this mel bin is active.
float *this_bin = bins_mat_.data_ptr<float>() + bin * stride;
int32_t first_index = -1, last_index = -1;
for (int32_t i = 0; i < num_fft_bins; ++i) {
float freq = (fft_bin_width * i); // Center frequency of this fft
// bin.
float mel = MelScale(freq);
if (mel > left_mel && mel < right_mel) {
float weight;
if (mel <= center_mel)
weight = (mel - left_mel) / (center_mel - left_mel);
else
weight = (right_mel - mel) / (right_mel - center_mel);
this_bin[i] = weight;
if (first_index == -1) first_index = i;
last_index = i;
}
}
KALDIFEAT_ASSERT(first_index != -1 && last_index >= first_index &&
"You may have set num_mel_bins too large.");
// Replicate a bug in HTK, for testing purposes.
if (opts.htk_mode && bin == 0 && mel_low_freq != 0.0f)
this_bin[first_index] = 0.0f;
}
if (debug_) KALDIFEAT_LOG << bins_mat_;
bins_mat_.t_();
if (bins_mat_.device() != device) {
bins_mat_ = bins_mat_.to(device);
}
}
torch::Tensor MelBanks::Compute(const torch::Tensor &spectrum) const {
return torch::mm(spectrum, bins_mat_);
}
} // namespace kaldifeat

View File

@ -0,0 +1,94 @@
// kaldifeat/csrc/mel-computations.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
//
// This file is copied/modified from kaldi/src/feat/mel-computations.h
#include <cmath>
#include "kaldifeat/csrc/feature-window.h"
#ifndef KALDIFEAT_CSRC_MEL_COMPUTATIONS_H_
#define KALDIFEAT_CSRC_MEL_COMPUTATIONS_H_
namespace kaldifeat {
struct MelBanksOptions {
int32_t num_bins = 25; // e.g. 25; number of triangular bins
float low_freq = 20; // e.g. 20; lower frequency cutoff
// an upper frequency cutoff; 0 -> no cutoff, negative
// ->added to the Nyquist frequency to get the cutoff.
float high_freq = 0;
float vtln_low = 100; // vtln lower cutoff of warping function.
// vtln upper cutoff of warping function: if negative, added
// to the Nyquist frequency to get the cutoff.
float vtln_high = -500;
bool debug_mel = false;
// htk_mode is a "hidden" config, it does not show up on command line.
// Enables more exact compatibility with HTK, for testing purposes. Affects
// mel-energy flooring and reproduces a bug in HTK.
bool htk_mode = false;
std::string ToString() const {
std::ostringstream os;
os << "num_bins: " << num_bins << "\n";
os << "low_freq: " << low_freq << "\n";
os << "high_freq: " << high_freq << "\n";
os << "vtln_low: " << vtln_low << "\n";
os << "vtln_high: " << vtln_high << "\n";
os << "debug_mel: " << debug_mel << "\n";
os << "htk_mode: " << htk_mode << "\n";
return os.str();
}
};
std::ostream &operator<<(std::ostream &os, const MelBanksOptions &opts);
class MelBanks {
public:
static inline float InverseMelScale(float mel_freq) {
return 700.0f * (expf(mel_freq / 1127.0f) - 1.0f);
}
static inline float MelScale(float freq) {
return 1127.0f * logf(1.0f + freq / 700.0f);
}
static float VtlnWarpFreq(
float vtln_low_cutoff,
float vtln_high_cutoff, // discontinuities in warp func
float low_freq,
float high_freq, // upper+lower frequency cutoffs in
// the mel computation
float vtln_warp_factor, float freq);
static float VtlnWarpMelFreq(float vtln_low_cutoff, float vtln_high_cutoff,
float low_freq, float high_freq,
float vtln_warp_factor, float mel_freq);
MelBanks(const MelBanksOptions &opts,
const FrameExtractionOptions &frame_opts, float vtln_warp_factor,
torch::Device device);
int32_t NumBins() const { return static_cast<int32_t>(bins_mat_.size(0)); }
torch::Tensor Compute(const torch::Tensor &spectrum) const;
// for debug only
const torch::Tensor &GetBinsMat() const { return bins_mat_; }
private:
// A 2-D matrix of shape [num_bins, num_fft_bins]
torch::Tensor bins_mat_;
bool debug_;
bool htk_mode_;
};
} // namespace kaldifeat
#endif // KALDIFEAT_CSRC_MEL_COMPUTATIONS_H_

View File

@ -0,0 +1,81 @@
// kaldifeat/csrc/test_kaldifeat.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#include "torch/torch.h"
static void TestPreemph() {
torch::Tensor a = torch::arange(0, 12).reshape({3, 4}).to(torch::kFloat);
torch::Tensor b =
a.index({"...", torch::indexing::Slice(1, torch::indexing::None,
torch::indexing::None)});
torch::Tensor c = a.index({"...", torch::indexing::Slice(0, -1, 1)});
a.index({"...", torch::indexing::Slice(1, torch::indexing::None,
torch::indexing::None)}) =
b - 0.97 * c;
a.index({"...", 0}) *= 0.97;
std::cout << a << "\n";
std::cout << b << "\n";
std::cout << "c: \n" << c << "\n";
torch::Tensor d = b - 0.97 * c;
std::cout << d << "\n";
}
static void TestPad() {
torch::Tensor a = torch::arange(0, 6).reshape({2, 3}).to(torch::kFloat);
torch::Tensor b = torch::nn::functional::pad(
a, torch::nn::functional::PadFuncOptions({0, 3})
.mode(torch::kConstant)
.value(0));
std::cout << a << "\n";
std::cout << b << "\n";
}
static void TestGetStrided() {
// 0 1 2 3 4 5
//
//
// 0 1 2 3
// 2 3 4 5
torch::Tensor a = torch::arange(0, 6).to(torch::kFloat);
torch::Tensor b = a.as_strided({2, 4}, {2, 1});
// b = b.clone();
std::cout << a << "\n";
std::cout << b << "\n";
std::cout << b.mean(1).unsqueeze(1) << "\n";
b = b - b.mean(1).unsqueeze(1);
std::cout << a << "\n";
std::cout << b << "\n";
}
static void TestDither() {
torch::Tensor a = torch::arange(0, 6).reshape({2, 3}).to(torch::kFloat);
torch::Tensor b = torch::arange(0, 6).reshape({2, 3}).to(torch::kFloat) * 0.1;
std::cout << a << "\n";
std::cout << b << "\n";
std::cout << (a + b * 2) << "\n";
}
static void TestCat() {
torch::Tensor a = torch::arange(0, 6).reshape({2, 3}).to(torch::kFloat);
torch::Tensor b = torch::arange(0, 2).reshape({2, 1}).to(torch::kFloat) * 0.1;
torch::Tensor c = torch::cat({a, b}, 1);
torch::Tensor d = torch::cat({b, a}, 1);
torch::Tensor e = torch::cat({a, a}, 0);
std::cout << a << "\n";
std::cout << b << "\n";
std::cout << c << "\n";
std::cout << d << "\n";
std::cout << e << "\n";
}
int main() {
TestCat();
return 0;
}

View File

@ -0,0 +1 @@
add_subdirectory(csrc)

View File

@ -0,0 +1,9 @@
add_definitions(-DTORCH_API_INCLUDE_EXTENSION_H)
pybind11_add_module(_kaldifeat
feature-fbank.cc
feature-window.cc
kaldifeat.cc
mel-computations.cc
)
target_link_libraries(_kaldifeat PRIVATE kaldifeat_core)
target_link_libraries(_kaldifeat PRIVATE ${TORCH_DIR}/lib/libtorch_python.so)

View File

@ -0,0 +1,51 @@
// kaldifeat/python/csrc/feature-fbank.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#include "kaldifeat/python/csrc/feature-fbank.h"
#include "kaldifeat/csrc/feature-fbank.h"
namespace kaldifeat {
void PybindFbankOptions(py::module &m) {
py::class_<FbankOptions>(m, "FbankOptions")
.def(py::init<>())
.def_readwrite("frame_opts", &FbankOptions::frame_opts)
.def_readwrite("mel_opts", &FbankOptions::mel_opts)
.def_readwrite("use_energy", &FbankOptions::use_energy)
.def_readwrite("energy_floor", &FbankOptions::energy_floor)
.def_readwrite("raw_energy", &FbankOptions::raw_energy)
.def_readwrite("htk_compat", &FbankOptions::htk_compat)
.def_readwrite("use_log_fbank", &FbankOptions::use_log_fbank)
.def_readwrite("use_power", &FbankOptions::use_power)
.def("set_device",
[](FbankOptions *fbank_opts, py::object device) {
std::string device_type =
static_cast<py::str>(device.attr("type"));
KALDIFEAT_ASSERT(device_type == "cpu" || device_type == "cuda")
<< "Unsupported device type: " << device_type;
auto index_attr = static_cast<py::object>(device.attr("index"));
int32_t device_index = 0;
if (!index_attr.is_none())
device_index = static_cast<py::int_>(index_attr);
if (device_type == "cpu")
fbank_opts->device = torch::Device("cpu");
else
fbank_opts->device = torch::Device(torch::kCUDA, device_index);
})
.def("__str__", [](const FbankOptions &self) -> std::string {
return self.ToString();
});
py::class_<Fbank>(m, "Fbank")
.def(py::init<const FbankOptions &>(), py::arg("opts"))
.def("dim", &Fbank::Dim)
.def("options", &Fbank::GetOptions,
py::return_value_policy::reference_internal)
.def("compute_features", &Fbank::ComputeFeatures, py::arg("wave"),
py::arg("vtln_warp"));
}
} // namespace kaldifeat

View File

@ -0,0 +1,16 @@
// kaldifeat/python/csrc/feature-fbank.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#ifndef KALDIFEAT_PYTHON_CSRC_FEATURE_FBANK_H_
#define KALDIFEAT_PYTHON_CSRC_FEATURE_FBANK_H_
#include "kaldifeat/python/csrc/kaldifeat.h"
namespace kaldifeat {
void PybindFbankOptions(py::module &m);
} // namespace kaldifeat
#endif // KALDIFEAT_PYTHON_CSRC_FEATURE_FBANK_H_

View File

@ -0,0 +1,44 @@
// kaldifeat/python/csrc/feature-window.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#include "kaldifeat/python/csrc/feature-window.h"
#include "kaldifeat/csrc/feature-window.h"
namespace kaldifeat {
void PybindFrameExtractionOptions(py::module &m) {
py::class_<FrameExtractionOptions>(m, "FrameExtractionOptions")
.def(py::init<>())
.def_readwrite("samp_freq", &FrameExtractionOptions::samp_freq)
.def_readwrite("frame_shift_ms", &FrameExtractionOptions::frame_shift_ms)
.def_readwrite("frame_length_ms",
&FrameExtractionOptions::frame_length_ms)
.def_readwrite("dither", &FrameExtractionOptions::dither)
.def_readwrite("preemph_coeff", &FrameExtractionOptions::preemph_coeff)
.def_readwrite("remove_dc_offset",
&FrameExtractionOptions::remove_dc_offset)
.def_readwrite("window_type", &FrameExtractionOptions::window_type)
.def_readwrite("round_to_power_of_two",
&FrameExtractionOptions::round_to_power_of_two)
.def_readwrite("blackman_coeff", &FrameExtractionOptions::blackman_coeff)
.def_readwrite("snip_edges", &FrameExtractionOptions::snip_edges)
#if 0
.def_readwrite("allow_downsample",
&FrameExtractionOptions::allow_downsample)
.def_readwrite("allow_upsample", &FrameExtractionOptions::allow_upsample)
.def_readwrite("max_feature_vectors",
&FrameExtractionOptions::max_feature_vectors)
#endif
.def("__str__", [](const FrameExtractionOptions &self) -> std::string {
return self.ToString();
});
m.def("num_frames", &NumFrames, py::arg("num_samples"), py::arg("opts"),
py::arg("flush") = true);
m.def("get_strided", &GetStrided, py::arg("wave"), py::arg("opts"));
}
} // namespace kaldifeat

View File

@ -0,0 +1,16 @@
// kaldifeat/python/csrc/feature-window.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#ifndef KALDIFEAT_PYTHON_CSRC_FEATURE_WINDOW_H_
#define KALDIFEAT_PYTHON_CSRC_FEATURE_WINDOW_H_
#include "kaldifeat/python/csrc/kaldifeat.h"
namespace kaldifeat {
void PybindFrameExtractionOptions(py::module &m);
} // namespace kaldifeat
#endif // KALDIFEAT_PYTHON_CSRC_FEATURE_WINDOW_H_

View File

@ -0,0 +1,56 @@
// kaldifeat/python/csrc/kaldifeat.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#include "kaldifeat/python/csrc/kaldifeat.h"
#include <chrono>
#include "kaldifeat/csrc/feature-fbank.h"
#include "kaldifeat/python/csrc/feature-fbank.h"
#include "kaldifeat/python/csrc/feature-window.h"
#include "kaldifeat/python/csrc/mel-computations.h"
#include "torch/torch.h"
namespace kaldifeat {
static torch::Tensor Compute(const torch::Tensor &wave, Fbank *fbank) {
float vtln_warp = 1.0f;
torch::Tensor ans = fbank->ComputeFeatures(wave, vtln_warp);
return ans;
}
PYBIND11_MODULE(_kaldifeat, m) {
m.doc() = "Python wrapper for kaldifeat";
PybindFrameExtractionOptions(m);
PybindMelBanksOptions(m);
PybindFbankOptions(m);
m.def("compute", &Compute, py::arg("wave"), py::arg("fbank"));
// It verifies that the reimplementation produces the same output
// as kaldi using default parameters with dither disabled.
m.def(
"_compute_with_elapsed_time", // for benchmark only
[](const torch::Tensor &wave,
Fbank *fbank) -> std::pair<torch::Tensor, double> {
std::chrono::steady_clock::time_point begin =
std::chrono::steady_clock::now();
torch::Tensor ans = Compute(wave, fbank);
std::chrono::steady_clock::time_point end =
std::chrono::steady_clock::now();
double elapsed_seconds =
std::chrono::duration_cast<std::chrono::microseconds>(end - begin)
.count() /
1000000.;
return std::make_pair(ans, elapsed_seconds);
},
py::arg("wave"), py::arg("fbank"));
}
} // namespace kaldifeat

View File

@ -0,0 +1,11 @@
// kaldifeat/python/csrc/kaldifeat.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#ifndef KALDIFEAT_PYTHON_CSRC_KALDIFEAT_H_
#define KALDIFEAT_PYTHON_CSRC_KALDIFEAT_H_
#include "pybind11/pybind11.h"
namespace py = pybind11;
#endif // KALDIFEAT_PYTHON_CSRC_KALDIFEAT_H_

View File

@ -0,0 +1,27 @@
// kaldifeat/python/csrc/mel-computations.cc
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#include "kaldifeat/csrc/mel-computations.h"
#include "kaldifeat/python/csrc/feature-window.h"
namespace kaldifeat {
void PybindMelBanksOptions(py::module &m) {
py::class_<MelBanksOptions>(m, "MelBanksOptions")
.def(py::init<>())
.def_readwrite("num_bins", &MelBanksOptions::num_bins)
.def_readwrite("low_freq", &MelBanksOptions::low_freq)
.def_readwrite("high_freq", &MelBanksOptions::high_freq)
.def_readwrite("vtln_low", &MelBanksOptions::vtln_low)
.def_readwrite("vtln_high", &MelBanksOptions::vtln_high)
.def_readwrite("debug_mel", &MelBanksOptions::debug_mel)
.def_readwrite("htk_mode", &MelBanksOptions::htk_mode)
.def("__str__", [](const MelBanksOptions &self) -> std::string {
return self.ToString();
});
;
}
} // namespace kaldifeat

View File

@ -0,0 +1,16 @@
// kaldifeat/python/csrc/mel-computations.h
//
// Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
#ifndef KALDIFEAT_PYTHON_CSRC_MEL_COMPUTATIONS_H_
#define KALDIFEAT_PYTHON_CSRC_MEL_COMPUTATIONS_H_
#include "kaldifeat/python/csrc/kaldifeat.h"
namespace kaldifeat {
void PybindMelBanksOptions(py::module &m);
} // namespace kaldifeat
#endif // KALDIFEAT_PYTHON_CSRC_MEL_COMPUTATIONS_H_

View File

View File

@ -0,0 +1,37 @@
#!/usr/bin/env bash
#
# Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
KALDI_ROOT=/root/fangjun/open-source/kaldi
export PATH=${KALDI_ROOT}/src/featbin:$PATH
if [ ! -f test.wav ]; then
# generate a wav of two seconds, containing a sine-wave
# swept from 300 Hz to 3300 Hz
sox -n -r 16000 -b 16 test.wav synth 1.2 sine 300-3300
fi
echo "1 test.wav" > test.scp
# We disable dither for testing
if [ ! -f test.txt ]; then
compute-fbank-feats --dither=0 scp:test.scp ark,t:test.txt
fi
if [ ! -f test-htk.txt ]; then
compute-fbank-feats --dither=0 --use-energy=1 --htk-compat=1 scp:test.scp ark,t:test-htk.txt
fi
if [ ! -f test-with-energy.txt ]; then
compute-fbank-feats --dither=0 --use-energy=1 scp:test.scp ark,t:test-with-energy.txt
fi
if [ ! -f test-40.txt ]; then
compute-fbank-feats --dither=0 --num-mel-bins=40 scp:test.scp ark,t:test-40.txt
fi
if [ ! -f test-40-no-snip-edges.txt ]; then
compute-fbank-feats --dither=0 --num-mel-bins=40 --snip-edges=0 \
scp:test.scp ark,t:test-40-no-snip-edges.txt
fi

View File

@ -0,0 +1,121 @@
1 [
18.96444 19.86346 21.15996 23.03783 24.78062 24.94543 23.25801 21.85808 21.16464 20.76589 20.42589 20.15896 19.90022 19.69295 19.52393 19.30501 19.16441 18.99253 18.84548 18.69155 18.54767 18.39189 18.25266 18.09157 17.94785 17.78059 17.6096 17.43325 17.23833 17.02701 16.80378 16.5495 16.25627 15.90453 15.49727 14.97293 14.30372 13.22139 11.32305 13.5525
13.92753 13.86944 15.39794 20.46374 25.03641 25.20131 22.09086 16.44104 13.82726 13.68196 11.64849 9.743029 11.38992 11.13653 7.746305 10.62938 9.88602 9.107728 10.07885 8.270217 9.766935 8.492453 9.40504 8.623954 8.594773 9.016858 8.66531 8.656908 8.608487 8.477707 8.260619 8.622458 8.053888 8.32217 8.370289 8.643818 8.507599 8.028069 7.892542 7.890952
13.99486 13.42189 16.01205 19.33348 24.87531 25.36166 22.61705 16.45071 14.23818 13.68901 11.9747 9.808083 10.99918 11.4527 7.4759 10.28248 10.36299 8.060785 10.22566 7.89238 9.779221 8.225794 9.42803 8.342211 8.886475 8.424166 8.302045 8.314983 8.478705 8.561936 8.171611 8.077629 7.809419 8.093275 8.545591 7.652286 7.700088 8.514207 8.594678 8.550256
12.7885 13.3399 16.08387 17.97527 24.67034 25.4923 23.10605 16.49453 14.50649 13.64687 12.52543 10.24612 10.65288 11.6139 9.111442 9.757303 10.63304 7.346739 10.10882 8.902452 9.560848 9.050172 9.174734 8.399022 9.132246 8.106356 8.121744 8.6475 8.344028 8.434936 8.303373 7.982547 7.882221 8.173124 8.458884 8.157388 8.519258 8.12985 8.164676 8.631008
14.19501 13.68966 15.75414 17.60499 24.41491 25.59239 23.559 16.9673 14.4115 13.46476 13.07809 10.10822 9.828719 11.7355 9.625244 8.948779 10.85012 8.296032 9.873562 9.619483 9.01224 9.362689 8.920494 8.93167 9.038802 8.435759 8.714669 8.422825 8.172736 8.452174 8.669788 8.412346 8.109411 8.22609 8.608659 8.47726 7.93852 7.868503 7.920403 7.827925
11.93478 14.22943 15.13304 18.03271 24.10098 25.66022 23.97587 17.84577 14.1089 13.56284 13.20702 10.53455 9.524833 11.60045 10.49826 7.72007 10.77716 9.363244 9.329349 10.04248 8.19213 9.757459 8.37489 9.436014 8.518677 8.391635 9.074756 8.402056 8.399717 8.530869 8.293662 8.662748 7.990947 7.953528 8.291599 7.972326 8.189728 7.884634 8.484457 7.945732
13.84968 13.98155 13.84277 18.10137 23.71636 25.69401 24.35676 18.77302 14.15763 13.61351 13.33863 11.13808 9.603687 11.38357 11.03271 6.92614 10.55428 10.00589 8.54751 10.25809 7.485835 9.778771 8.198379 9.660854 8.419934 9.002856 8.778744 8.491339 8.819053 8.271058 7.878938 7.987629 7.8442 8.272031 8.364207 8.484409 7.948706 7.956578 8.168621 8.202809
14.05192 13.43017 13.98759 17.78053 23.24482 25.6911 24.70111 19.61791 14.96192 13.36693 13.60789 11.23198 9.634218 11.05997 11.41688 7.222315 10.08306 10.51521 7.005197 10.18997 8.528556 9.412126 8.788412 9.238343 8.341981 9.200038 8.412097 8.536278 8.647992 8.456712 8.13729 8.151546 8.391846 8.467136 8.1287 7.890868 8.215422 8.224256 8.141408 8.02177
12.9521 12.50171 14.70281 17.02281 22.66139 25.64869 25.00848 20.39981 15.71651 13.1417 13.54901 12.1886 9.35283 10.62883 11.62244 8.359998 9.479664 10.75233 7.240462 9.781852 9.276721 9.16307 9.448709 8.905751 8.975319 8.837951 8.225341 8.849485 8.567094 8.339903 8.23304 8.214993 8.714778 7.845261 7.969625 8.405843 8.603411 7.730905 8.225713 8.704536
11.537 12.57132 14.91826 15.79485 21.92712 25.56316 25.27911 21.14349 16.1152 13.35317 13.53193 12.57241 9.629152 9.993024 11.72771 9.543485 8.509588 10.81497 8.723059 9.48882 9.922702 8.178643 9.511891 8.135677 9.317843 8.627149 8.783343 8.829432 8.307034 8.598661 8.491149 7.826979 8.422489 8.401865 8.62768 8.286551 7.954192 8.446002 8.458312 8.386852
14.13382 12.92764 14.5535 15.47992 20.97535 25.4298 25.51281 21.85495 16.08128 13.91129 13.33398 12.88178 9.944342 8.8364 11.69192 10.29948 7.432528 10.66362 9.689359 8.779737 10.23533 7.083467 9.778561 8.079132 9.555658 8.290154 8.994397 8.795761 8.650785 8.745133 8.150888 8.181345 7.956937 8.22002 8.069079 8.144303 8.407532 8.464736 8.537698 8.131825
13.14486 13.45293 13.76188 16.1331 19.71048 25.24318 25.70798 22.52982 15.7485 14.33897 13.07282 13.23537 10.22418 8.982106 11.37759 11.01981 6.782285 10.39504 10.32468 7.057974 10.2008 8.23507 9.55358 8.842996 9.152381 8.387238 9.109639 8.475524 8.778235 8.571877 8.161068 8.189759 8.242151 8.315583 8.661754 7.821664 7.757828 7.876688 8.493256 8.183323
14.62146 12.97491 12.71443 16.31416 18.27462 24.99532 25.8636 23.16007 16.12168 14.51022 13.12712 13.42717 10.61451 9.27471 11.069 11.36677 7.392759 9.880783 10.625 6.794327 10.0245 9.193109 9.185366 9.450398 8.778997 8.978249 8.987951 8.508389 8.928736 8.654698 8.557281 8.241104 8.400942 8.276546 8.397776 7.905837 7.983003 7.7945 7.921339 7.260141
13.28532 12.06667 13.51212 15.91945 18.11305 24.67559 25.97745 23.73675 17.2737 14.35368 13.1993 13.49609 11.25745 9.443562 10.44973 11.61252 8.533048 8.863948 10.85761 8.025737 9.516124 9.815843 8.37797 9.712187 8.184046 9.319806 8.532254 8.878237 8.926048 8.436695 8.378731 8.379004 8.468233 8.565086 8.256347 8.212387 8.420709 8.341476 7.948794 8.494109
11.98633 11.56752 13.99693 14.93547 18.37166 24.26905 26.04674 24.25738 18.10957 14.36195 13.15674 13.51392 11.95745 9.603451 9.688143 11.69178 9.565722 7.395791 10.80829 9.28723 8.82257 10.15363 6.915184 9.813416 8.044415 9.45695 8.020289 8.912694 8.675011 8.593932 8.723937 8.234506 7.759539 7.911783 8.151685 8.261821 8.349186 8.165023 7.881241 7.888895
13.85496 12.08074 13.79914 14.06445 18.14848 23.75295 26.0684 24.72088 18.49096 15.0193 12.90408 13.44729 12.50017 9.590921 8.88856 11.6489 10.45054 6.717255 10.50196 10.03616 7.590971 10.22286 7.921915 9.618941 8.901101 9.305834 8.689757 9.225738 8.308323 8.891333 8.40597 8.331337 8.651505 8.162349 8.650281 8.236614 8.441779 8.189634 8.165902 7.935593
14.25518 12.62388 12.81839 14.76859 17.38274 23.09387 26.03856 25.12774 18.45385 15.7235 12.98861 13.27322 12.97692 9.57593 8.891761 11.32172 11.08891 6.954304 10.0237 10.51271 6.286627 10.00061 9.186401 9.087299 9.418575 8.341475 8.715434 8.736726 8.565044 9.175105 8.354331 8.510913 8.746083 8.738852 8.729287 8.745701 8.325168 8.318779 8.294274 7.901007
12.56703 12.28875 12.06554 15.09205 16.14279 22.23565 25.95272 25.4796 18.79211 16.02933 13.50089 12.96202 13.26455 9.705603 8.662133 10.91717 11.40846 7.214862 9.263866 10.75018 7.231107 9.665637 9.786585 8.377714 9.809061 7.862905 9.26324 8.310773 8.865776 8.308889 8.383538 8.766862 8.676751 8.174548 8.381707 8.344373 8.180348 8.402632 8.353408 7.990006
12.69995 11.73825 12.90232 14.84019 15.92745 21.08722 25.80557 25.77644 20.33664 15.96815 14.00281 12.7274 13.40466 10.88238 8.886324 10.20257 11.63213 8.425384 7.889374 10.77477 8.963527 9.00936 10.24356 6.991604 9.686445 8.155169 9.40262 8.213345 9.28226 8.083532 8.307887 8.740362 8.563697 8.480595 8.310162 8.312341 7.935925 8.172094 8.341632 7.822821
12.64143 11.21407 13.30658 13.8678 16.45354 19.54845 25.59018 26.018 21.76446 15.98159 14.0835 12.58977 13.46148 11.63159 8.966925 9.225318 11.68016 9.784614 6.695007 10.57204 9.808759 7.347447 10.26384 7.89377 9.610036 9.061913 9.115568 8.846012 9.103807 8.374656 8.793431 7.972172 7.909441 8.153095 8.538972 8.471871 8.213154 8.854737 8.771893 8.450315
14.10555 11.54358 12.79246 13.17528 16.34012 18.49227 25.29697 26.20305 22.87696 16.9097 13.92254 12.89692 13.40938 12.23579 9.4019 8.677924 11.54842 10.66094 6.75503 10.23784 10.44909 6.338826 10.01891 9.157262 8.970403 9.405566 8.446748 9.289919 8.381941 8.299614 8.788377 8.322357 8.407666 8.272642 8.100509 8.179901 8.358006 8.78405 8.762209 8.370586
14.12938 12.13099 11.56028 14.08695 15.53536 18.72113 24.91354 26.32924 23.75708 17.84197 14.23425 12.75465 13.34712 12.72359 9.435951 8.65111 11.22588 11.24277 6.545706 9.555956 10.80892 6.65797 9.55804 9.709231 7.996374 9.723963 7.713635 9.667581 7.841636 8.817051 8.47205 8.167587 8.312313 8.261719 8.523742 8.43089 8.669062 8.309869 8.397217 8.260386
10.3394 11.19567 11.44475 14.10355 14.41502 18.53981 24.42231 26.3945 24.46622 18.32564 14.98167 12.70718 13.02427 13.13122 9.205243 8.477915 10.66525 11.52618 7.3344 8.210299 10.8694 8.483711 8.868153 10.08513 6.69371 9.712736 8.28461 9.584719 8.539211 9.156302 8.419721 8.804134 8.569139 8.60252 8.652645 8.714884 8.623045 8.697209 8.458084 8.146002
11.86054 10.98682 12.68882 13.63208 14.97933 17.7088 23.80346 26.39663 25.0414 18.42434 15.38957 13.07093 12.56306 13.38223 10.12949 8.316425 9.817917 11.69504 8.962517 6.279859 10.59057 9.628177 7.306702 10.23974 8.048016 9.437468 8.998648 9.192538 9.057128 8.631988 8.227707 8.848169 8.145844 8.063428 8.517113 7.817259 8.476541 8.015585 8.194544 8.257279
12.94468 11.40996 12.69361 12.40325 15.31445 16.3231 23.03893 26.33461 25.5061 19.0841 15.35997 13.61636 12.27996 13.46206 11.2761 8.699541 8.555113 11.6625 10.22388 6.143903 10.21059 10.29533 5.671217 10.05693 9.23906 8.950302 9.653742 8.15354 9.170722 8.023641 8.482596 8.559265 8.491233 8.980557 8.417949 7.960992 8.178121 8.321733 8.685974 8.349942
12.71497 11.80604 11.99111 13.20571 14.83799 16.48505 22.13153 26.20776 25.87822 20.66957 15.41012 13.75003 12.32594 13.41095 12.02165 8.712304 8.141302 11.39704 10.89713 6.180814 9.669131 10.7171 6.492829 9.641242 9.798822 7.79485 9.822726 7.348335 9.428946 7.783045 8.733977 8.045519 8.370099 8.716186 8.947448 8.833805 8.566073 8.225642 8.832191 8.038643
12.9261 10.94213 11.0594 13.49787 13.58834 16.79365 21.16314 26.01524 26.16883 22.06717 16.29932 13.68073 12.43676 13.30966 12.59064 9.020962 8.379679 10.9613 11.37114 7.057708 8.357925 10.85876 8.336505 8.811317 10.19227 6.714524 9.712838 8.489841 9.195466 8.510193 8.953351 8.389952 9.159567 8.275454 8.244229 8.411911 7.944868 8.24395 7.794047 7.807465
11.57436 10.67886 12.1769 13.08298 13.9649 16.28535 20.29064 25.75367 26.38621 23.1641 17.01928 14.01875 12.28071 13.09428 12.98476 9.316661 8.204331 10.1969 11.58692 7.965437 6.53003 10.67513 9.59997 6.937071 10.2257 8.146053 9.374315 9.287271 8.563384 8.783537 8.61888 8.544364 9.00265 8.210259 8.496133 8.696222 8.239873 8.582247 8.273208 8.49008
11.41108 11.36671 12.32938 11.87177 14.46757 15.00712 19.46472 25.41514 26.53532 24.03547 17.27253 14.70303 12.48538 12.63741 13.32798 9.782304 8.348717 9.053724 11.67269 9.681922 5.885649 10.29879 10.26761 6.203468 10.03388 9.365661 8.713467 9.632063 7.69505 9.333009 8.297468 9.09348 8.299969 8.154701 8.527946 8.529608 8.389789 8.537373 8.019721 7.915309
12.74487 11.53243 11.11679 12.67108 13.88304 15.17536 18.38017 24.9841 26.61895 24.73693 17.49536 14.94045 13.03444 12.02336 13.5235 10.58439 8.588664 8.041625 11.49706 10.67256 6.215046 9.641813 10.65845 6.388104 9.508482 9.845655 7.1731 9.797134 7.730247 9.441159 8.142369 9.351688 8.172249 8.754276 8.411193 8.660025 8.568802 8.008389 8.012046 8.310217
12.23122 10.80345 10.94152 12.94572 12.70366 15.56592 17.28575 24.43556 26.63757 25.30701 18.56256 14.86363 13.28476 12.03443 13.40141 11.96859 8.518432 7.755698 11.15431 11.20405 6.364634 8.390969 10.80119 7.907028 8.668501 10.23443 6.631686 9.72658 8.891287 8.987116 8.529719 9.012446 8.344838 8.464882 8.323185 8.330257 8.992197 8.336278 8.072982 7.892574
9.792301 10.17572 11.80419 11.85172 13.44435 14.92375 17.33253 23.73187 26.58919 25.77324 19.78508 15.42152 13.20851 11.97754 13.32017 12.51721 8.918539 8.11684 10.5302 11.56965 7.46386 6.568418 10.62642 9.548109 6.833417 10.21609 8.432261 9.174993 9.455292 8.051958 8.785715 8.532986 8.880374 8.62604 8.506261 8.463858 8.485867 8.301833 8.394436 8.178029
13.59771 10.50773 11.32115 11.40611 13.60885 13.79101 17.17872 22.81604 26.46768 26.15626 20.87822 16.19423 13.54666 11.9691 13.00485 13.0021 9.255051 8.095631 9.553852 11.76036 9.053226 6.173191 10.26831 10.18027 5.750229 9.98216 9.446585 8.47736 9.611327 7.130522 9.156697 8.131793 9.251884 8.399532 8.718871 8.380248 8.617123 8.573546 8.516653 8.216991
9.693386 10.80871 10.22453 12.28544 12.74393 14.45492 16.21767 21.5991 26.2608 26.46785 21.98479 16.43998 14.12559 12.17887 12.51941 13.28971 9.843358 8.180183 8.037691 11.62118 10.46239 6.056435 9.590559 10.62991 6.225706 9.401241 10.00183 7.299619 9.658146 8.19598 9.30921 8.541983 8.927401 8.35702 8.861884 7.646996 7.769051 8.223982 8.00993 7.921154
10.50867 9.709421 11.06947 12.09144 12.28641 14.51281 15.50716 20.01693 25.94712 26.71073 23.09657 16.51934 14.24467 12.65042 12.07571 13.4299 10.99831 8.468023 7.656695 11.29638 11.09846 6.610844 8.414127 10.89274 8.252539 8.321078 10.2464 7.161576 9.321264 8.785572 9.042821 9.080304 8.527917 8.418767 8.674025 8.382962 8.185157 8.587141 7.816489 7.743362
10.37742 10.75649 11.55395 10.92101 13.1599 13.43682 15.97734 18.82935 25.49285 26.87926 24.10457 17.55953 14.26659 12.72505 11.77587 13.39539 11.98995 8.413165 7.762542 10.76689 11.54368 6.516209 6.451596 10.70982 9.605924 6.420524 10.12054 8.570615 8.641854 9.241666 8.143771 9.475064 8.358728 8.77801 8.453871 8.437792 8.619388 8.721886 8.410512 7.952282
13.22101 10.41632 10.35124 11.72891 12.63689 13.41869 15.53698 18.64641 24.84725 26.96363 24.95131 18.49781 15.00406 12.78048 11.49563 13.21159 12.63333 8.513183 7.724898 9.654073 11.70168 8.517886 5.995789 10.25019 10.26929 6.235368 9.654737 9.442605 7.602398 9.675601 7.60859 9.395299 8.129521 8.73391 7.94509 8.835979 9.040886 8.482374 8.573007 8.593596
10.6259 9.559591 10.2681 11.80713 11.46911 13.87623 14.37483 18.00716 23.93063 26.95534 25.63291 18.90309 15.43861 13.34007 11.67623 12.88216 13.05136 9.14479 8.014631 8.091807 11.64407 10.15871 6.008073 9.642803 10.75125 6.326005 9.004231 9.758878 6.065685 9.528562 8.391138 9.25007 8.939242 8.748505 7.989374 8.356485 8.315074 8.63712 8.780479 8.014479
12.32747 9.826773 10.95927 10.71537 12.42167 13.08454 14.86158 16.80875 22.61238 26.85089 26.16413 19.86667 15.37702 13.57122 12.06996 12.27164 13.37512 9.202879 7.998466 7.501684 11.34936 10.96773 6.06204 8.035746 10.92596 8.32774 7.654922 10.16805 7.413445 9.259487 9.093625 8.548314 9.097095 8.716316 8.855844 8.473911 8.398688 8.760138 8.012494 7.221141
12.48284 10.64699 10.17995 11.19019 12.27775 12.58782 14.78153 16.66586 20.77183 26.65146 26.56617 21.64229 16.10933 13.56512 12.16536 11.83611 13.41248 11.3319 8.171837 7.63644 10.80867 11.43326 6.29053 5.795801 10.67373 9.70679 6.551837 10.1421 9.148066 8.389745 9.534385 7.453064 9.296977 7.9221 8.878758 8.481856 9.022684 8.622174 8.151717 8.267547
10.72302 8.675613 9.612658 11.30684 10.90301 13.2314 13.58347 16.57492 19.68012 26.3567 26.85831 23.11813 16.89822 14.17117 12.33259 11.16196 13.34728 12.16072 8.385238 7.812989 9.832119 11.67619 8.461903 6.108616 10.15162 10.34207 5.873975 9.959012 9.976222 7.310884 9.705515 7.740975 9.185526 8.336202 8.970927 7.943895 8.805475 8.19111 8.089149 8.653698
11.44084 9.868311 10.79939 10.34971 12.03235 12.56318 14.04576 15.61208 19.39646 25.953 27.05449 24.24694 16.96608 14.55111 12.75968 11.24071 13.10966 12.76638 8.645997 7.9029 8.426421 11.69544 10.05739 6.541818 9.403143 10.6746 6.669736 8.952512 10.14051 7.035377 9.799883 9.020035 8.712966 8.743789 8.930927 8.622931 8.722629 8.287946 8.413375 8.507125
12.95159 10.29173 9.47324 10.8912 11.71815 12.0563 14.02027 15.35852 18.14857 25.40201 27.16076 25.12328 17.79243 14.53316 12.90659 11.59981 12.65752 13.16934 8.88816 7.864521 7.256561 11.3612 10.91231 6.218258 7.829098 10.80318 8.610075 7.324981 10.14265 8.087407 9.029538 9.411717 8.068038 9.174262 7.999922 8.287065 7.95179 7.789848 8.615518 7.817109
9.411627 8.552019 9.529355 10.90015 10.4985 12.69113 12.82414 15.45747 17.22688 24.6359 27.17525 25.81314 19.04196 15.24924 13.06434 11.58695 11.98841 13.41319 10.23554 7.931351 7.310263 10.87243 11.3983 6.610487 6.424202 10.52134 9.866404 6.474243 9.800307 9.165149 8.103717 9.81575 7.393714 9.099735 7.879087 8.78071 7.904059 8.883175 8.732355 8.711155
12.86572 8.787655 10.17322 9.641698 11.55397 11.80543 13.42378 14.53374 17.4195 23.55021 27.09103 26.35946 19.60915 15.71778 13.56538 11.88466 11.28354 13.42436 11.65477 8.134711 7.575608 9.921209 11.67647 8.070831 6.14395 10.04613 10.39103 6.074013 9.267277 9.688132 6.609621 9.479883 7.929209 9.119164 8.525018 8.774234 8.477155 9.076281 8.581732 8.50051
11.96736 9.578141 9.449269 10.64609 11.24204 11.81264 13.26562 14.50153 16.36389 21.99438 26.89845 26.78734 20.92294 15.75707 13.69524 12.16513 10.99347 13.23906 12.46036 8.036533 7.292656 8.1572 11.68145 9.950655 6.355164 9.178432 10.70312 7.086998 8.481102 10.07008 7.324314 9.154308 8.947964 8.678967 9.20787 8.728177 8.92048 8.105593 8.239427 8.635988
9.246257 8.325666 9.836687 10.38393 10.50371 12.17208 12.21319 14.50699 15.91056 20.13709 26.5848 27.10672 22.85216 16.7716 14.0069 12.20831 11.06947 12.87041 12.98965 8.485254 7.784563 7.317986 11.34217 10.86847 6.213542 7.226398 10.64812 8.967677 7.039364 9.986489 8.631069 8.872515 9.7755 7.982738 9.278093 8.136973 9.171354 8.15026 8.492737 8.201525
13.13325 9.253441 9.153484 9.19138 11.10188 10.80398 12.95127 13.50275 16.02761 19.48171 26.13047 27.31762 24.30685 17.28021 14.57224 12.69168 11.27034 12.34441 13.29623 9.687407 7.897893 7.229227 10.80834 11.35713 6.78059 6.436977 10.43851 9.981344 6.833956 9.704997 9.413626 7.317312 9.715166 7.681406 9.007298 8.341558 8.91612 8.109326 8.679747 7.756166
11.94374 8.939424 8.837139 10.62966 10.15854 11.78209 12.24521 13.93107 14.86156 18.62781 25.5015 27.41805 25.35441 17.66684 14.65949 12.85161 11.54472 11.44345 13.44667 11.01158 7.834606 7.17826 9.90675 11.69859 8.163104 6.813072 9.894266 10.48821 6.710368 8.992522 9.842723 6.520046 9.2132 8.586124 8.899988 9.067018 8.714602 8.423224 8.50868 7.695277
11.78273 8.583348 9.947175 9.486566 10.80823 11.38963 12.15517 13.49506 15.12294 17.31954 24.63825 27.40825 26.11875 19.13856 15.25817 13.02369 11.61043 10.59507 13.35977 12.12483 7.872345 7.322275 7.884753 11.62605 9.918971 5.948843 8.676576 10.71963 7.3319 8.078082 10.29263 7.765662 9.038054 9.458276 8.122332 9.237354 7.792097 8.734715 8.424784 8.354317
13.03408 9.4725 8.10013 10.17084 10.44322 10.87845 12.35625 12.97802 14.72147 17.32103 23.44119 27.28812 26.68573 19.93491 15.77293 13.58257 11.98636 10.66439 13.03967 12.80438 8.156332 7.534781 7.121669 11.283 10.88781 6.568369 6.996685 10.66334 9.360002 6.649167 9.970668 9.047276 8.126559 9.676839 7.535694 9.252214 8.100321 8.982647 8.170953 8.970799
8.984565 8.025319 9.320192 9.917192 9.786518 11.42216 11.24379 13.30489 13.98147 16.4604 21.76588 27.04901 27.11173 21.37236 15.99877 13.58999 12.15507 10.92759 12.51755 13.19862 8.73354 7.529955 7.607414 10.71589 11.35865 6.629833 6.572442 10.2699 10.1248 5.961834 9.527024 9.793013 7.127723 9.469219 8.367498 8.887517 8.635766 8.974715 8.697451 8.96188
12.457 9.046703 9.629483 9.235014 10.83002 10.32514 12.16555 12.38048 14.37501 15.9472 19.96535 26.66781 27.41813 23.39042 16.99667 14.18629 12.35583 10.9983 11.68423 13.44781 10.23702 7.616289 7.177721 9.721822 11.64816 8.06798 6.853655 9.611148 10.69831 7.125721 8.602898 10.13503 7.432285 9.287728 9.152255 8.566585 9.027664 8.225929 8.625115 7.85839
11.44657 9.15943 9.168633 10.51369 9.605378 11.34762 11.29044 12.91176 13.33402 15.85222 19.25659 26.10612 27.60292 24.86326 17.35683 14.43307 12.73108 11.31895 10.66512 13.3843 11.81109 7.740671 7.064697 7.634698 11.55273 10.08838 6.727871 8.331896 10.96368 8.306729 7.229035 10.19979 8.586422 8.465938 9.290403 7.616018 8.950905 7.82827 8.632999 8.01822
12.08209 8.669271 9.611587 8.734673 10.52755 10.34964 11.63224 12.20775 13.76486 14.88089 18.06278 25.30837 27.66028 25.88924 18.41028 14.80932 12.85681 11.44992 10.40703 13.12215 12.63237 7.954478 7.181726 6.678024 11.22556 10.94951 5.722804 6.789535 10.62443 9.774707 6.830627 9.650119 9.237244 7.449689 9.530144 7.528171 8.951774 8.436905 9.015025 8.464884
11.82257 8.396215 8.150265 9.818905 9.512011 10.63597 11.22632 12.23775 13.04322 15.1058 17.29872 24.18062 27.5913 26.61499 19.64456 15.44685 13.35253 11.77706 10.55853 12.67858 13.11206 8.29001 7.583103 7.004 10.69269 11.42948 6.904373 6.902897 10.16638 10.33068 6.682519 9.106133 9.773338 6.480328 9.47368 8.97629 8.53241 8.909519 8.580739 8.689636
11.77328 8.391885 9.089387 8.966393 9.804882 10.40989 10.91504 12.05381 13.05869 14.24745 16.92013 22.56742 27.39611 27.13898 20.76835 15.62205 13.48732 11.95978 10.72858 11.83532 13.41008 9.453309 7.407996 6.948433 9.391711 11.71326 8.754203 7.008124 9.154174 10.68345 7.100258 7.921858 10.02787 7.73304 8.975855 9.376974 7.933773 9.295214 8.183537 8.724171
12.59896 8.712226 7.993382 9.763116 9.489342 10.29253 11.12414 11.70738 12.78211 14.3642 15.94783 20.57051 27.06114 27.51523 22.87552 16.59554 14.01499 12.2484 10.9553 10.64374 13.42235 11.5103 7.459174 6.99518 7.297637 11.53325 10.29236 6.634552 7.221496 10.61852 8.824777 6.476803 9.996596 9.245985 8.300275 9.644681 7.560382 9.113668 8.404453 8.515999
11.49904 8.039647 8.901397 9.212797 9.361112 10.38506 10.41578 11.83231 12.44592 13.76246 15.94049 19.56776 26.54637 27.76132 24.56923 16.82901 14.25643 12.49863 11.16805 10.11157 13.14931 12.45989 7.734925 6.74743 7.214405 11.14336 11.0456 6.909313 6.61804 10.3189 9.900761 7.013818 9.558028 9.735407 7.246668 9.305911 8.517941 9.04179 9.017807 8.61134
10.78609 8.452023 8.44018 8.995213 9.711106 9.633389 10.96681 11.17129 12.4592 13.67985 15.01798 18.29671 25.7671 27.87407 25.76602 18.07829 14.76152 12.76035 11.30962 10.16545 12.72971 13.01286 8.032072 7.141364 6.768107 10.51326 11.55281 7.113681 7.015652 9.856145 10.53903 7.581882 8.512076 9.972108 6.917979 9.030144 9.120571 8.502459 9.106558 8.08077
8.343257 7.967618 9.007709 8.22296 9.501595 9.984174 10.19295 11.48011 11.98157 13.25426 15.09243 17.52103 24.56515 27.84417 26.62099 18.81596 15.1859 13.16006 11.68403 10.47993 12.0142 13.30832 9.475904 7.480025 7.439378 9.086184 11.75573 9.116817 6.708983 8.594894 10.77169 7.609914 7.629534 9.896534 8.362179 8.526189 9.427325 7.399474 9.022934 8.43722
12.43218 8.21479 7.7665 9.158417 9.227893 9.591988 10.62445 10.86534 12.04597 13.13003 14.27144 16.88675 22.70892 27.6669 27.23034 20.41336 15.72602 13.40133 11.83834 10.58901 10.72315 13.4109 11.36435 7.38154 7.041286 7.217563 11.50878 10.57785 6.467231 6.489393 10.60045 9.451204 6.966281 9.457012 9.148612 7.536738 9.667881 8.422006 8.756687 8.543365
9.659868 7.866355 8.896992 8.002372 9.377602 9.712494 10.01202 11.12181 11.62726 12.73636 14.37436 16.1769 20.73795 27.33651 27.66329 22.14643 16.3185 13.84826 12.19364 10.88665 9.91936 13.2059 12.40554 7.764851 7.004973 7.322201 10.9339 11.0905 6.937466 6.525359 10.11653 10.21271 6.734303 9.061218 9.772686 7.552592 9.11105 8.648112 8.167356 8.679305
11.75461 7.858597 7.711735 8.865136 8.999681 9.384847 10.28226 10.61355 11.59205 12.6789 13.59627 15.79867 19.65735 26.78934 27.96541 23.96427 17.01674 14.153 12.36726 11.01983 9.953483 12.7983 13.01591 7.960924 6.877825 6.486092 10.10786 11.58455 7.171012 6.99545 9.402557 10.50944 6.915524 7.746887 10.14588 8.13375 8.680706 9.310124 7.946612 9.501256
10.26237 8.261129 8.730233 8.079642 9.25448 9.419481 9.920063 10.73414 11.38053 12.19536 13.75537 15.22248 18.11209 25.84456 28.12009 25.58682 17.8898 14.6368 12.7537 11.32241 10.17253 12.07845 13.33509 9.169125 7.106677 6.903112 8.106017 11.7337 9.611146 7.096062 7.782575 10.55413 8.496132 7.362803 9.847276 9.194559 7.755082 9.639445 7.983432 9.089018
9.985912 7.975514 7.219047 8.79021 8.326206 9.318903 9.753315 10.44915 11.01623 12.30136 12.98316 14.8601 17.67911 24.2115 28.08621 26.70329 19.00425 15.09351 13.00328 11.51574 10.3321 10.6407 13.43628 11.23241 7.275207 6.923216 6.934333 11.29607 10.70958 6.981384 7.252422 10.33308 9.846339 7.642333 9.569844 9.694818 7.335835 9.334597 8.628448 8.626921
12.12559 7.450782 8.334276 7.412103 9.100471 8.774668 9.851036 10.15342 11.1779 11.60875 13.16428 14.49127 16.57525 21.92027 27.87755 27.40926 20.51534 15.5787 13.37364 11.78497 10.58387 9.738382 13.17418 12.34825 7.541817 7.090853 7.260298 10.75631 11.21604 6.980581 7.480446 9.823298 10.33839 7.173231 8.254015 9.897215 7.359776 8.828425 8.996876 7.774534
9.118288 6.686203 7.121362 8.395504 7.504637 9.241625 8.960067 10.35512 10.35232 11.92276 12.53674 13.98838 16.28914 20.61629 27.52345 27.86511 22.36995 16.33637 13.77936 12.09085 10.7937 9.748035 12.75342 12.95849 7.558084 7.509924 7.098193 9.637979 11.60163 7.955584 7.13189 8.500966 10.5483 7.351573 6.943029 10.03208 8.825996 8.359191 9.615571 7.769891
12.38418 7.99728 6.435606 7.442183 8.350675 7.826702 9.579821 9.346581 10.8487 11.15091 12.48828 13.88741 15.55095 18.77181 26.96385 28.15844 24.55945 16.8049 14.08463 12.34269 11.01577 9.918769 11.99253 13.34046 8.956137 7.38539 7.329821 7.388168 11.53107 10.08451 7.803452 7.332762 10.5873 9.41411 7.668976 9.48047 9.256932 7.84491 9.568426 8.69387
10.31461 7.345574 7.992132 8.602097 7.998126 9.345994 8.779222 10.28122 10.14792 11.47207 12.29076 13.2521 15.14641 18.23392 26.05633 28.28855 26.05478 18.05041 14.68955 12.70766 11.26024 10.10943 10.51327 13.37492 11.17803 7.344627 6.923202 6.613702 11.03211 10.82062 7.367577 6.623693 10.08019 10.08896 7.621299 8.67285 9.59276 7.365992 9.558412 9.461658
10.99333 8.067812 7.108855 8.406361 8.191368 8.617185 9.388927 9.521557 10.42347 11.15307 11.79307 13.29592 14.80382 17.04801 24.56961 28.23855 27.04107 18.82281 14.96771 12.94584 11.44848 10.27953 9.548371 13.15504 12.41534 7.386014 7.195842 7.112096 10.4748 11.43623 7.960808 7.01176 9.344459 10.54842 6.795839 7.381814 10.19664 8.33856 8.386831 9.123301
11.96335 7.397974 7.172203 6.819872 7.947008 8.132379 8.813837 9.419516 10.15179 10.63524 11.93349 12.74978 14.14928 16.50532 22.30288 28.01301 27.69214 20.74999 15.74054 13.38901 11.79101 10.52325 9.523965 12.70483 12.98803 7.688992 7.25051 6.910191 8.904606 11.68858 9.007637 6.991005 8.207302 10.71451 8.591758 7.56038 9.871 9.230167 8.001332 8.817948
7.299907 6.250014 6.747605 7.80491 6.964287 8.63123 8.21083 9.63745 9.507748 10.94692 11.34923 12.51105 14.07979 16.02889 20.62151 27.61031 28.13068 22.54478 16.33655 13.76898 12.07316 10.78085 9.75003 11.91948 13.35986 9.067917 7.264734 7.243609 6.846663 11.30465 10.38193 7.270008 7.34003 10.30113 9.797505 7.432833 9.192149 9.61973 7.965199 8.418705
11.42719 8.001019 6.981034 7.724518 8.119635 7.813948 9.110888 8.831551 10.08082 10.3827 11.30333 12.47341 13.52759 15.15309 18.80805 26.93289 28.40759 24.93824 16.99077 14.10411 12.30537 10.93236 9.886992 10.12749 13.39514 11.38067 7.332273 7.332652 7.170456 10.91773 11.13713 7.04033 7.034219 9.894688 10.47697 7.368356 8.379983 10.0679 8.127286 8.14875
9.825316 7.325085 8.130085 6.992884 8.547185 8.326845 8.870357 9.382529 9.801529 10.3407 11.37188 11.93374 13.2231 15.03654 18.03631 25.81255 28.48947 26.51051 18.28973 14.73626 12.73476 11.2515 10.12056 9.172091 13.12269 12.50723 7.400298 7.26105 6.671456 9.990132 11.51266 7.887018 6.81844 8.573472 10.53149 7.884539 7.715273 9.670406 8.691711 8.31346
5.992543 5.362492 5.746371 7.192521 6.30743 8.071486 7.794109 9.10209 9.033556 10.37644 10.66343 11.80684 13.08931 14.48158 16.98026 24.05761 28.37057 27.45382 19.33862 15.17298 13.02911 11.52552 10.37462 9.350359 12.63158 13.05931 7.578941 7.620606 7.348931 7.964743 11.47502 9.621641 6.969088 7.266216 10.40409 9.330475 8.32312 9.631368 9.619749 8.140731
12.04615 7.150443 6.548471 7.538146 7.76091 7.674717 8.753199 8.523589 9.656739 9.901796 10.73152 11.75907 12.59011 13.90419 16.21865 21.69625 28.07771 28.0435 21.34311 15.72038 13.34409 11.72179 10.50352 9.533566 11.65875 13.37668 9.465445 7.326468 6.427587 6.48113 11.13903 10.69603 6.346294 6.943848 9.910281 9.977624 7.635419 8.940674 9.835176 7.539977
11.75809 6.519623 7.213002 6.582277 7.683378 7.744935 8.221483 8.789815 9.266538 9.713153 10.74112 11.21413 12.33182 13.80582 15.81422 20.00132 27.57418 28.43616 23.59544 16.65236 13.87307 12.07419 10.7143 9.624747 9.780307 13.34727 11.6169 7.286546 6.735546 7.115655 10.54027 11.27915 7.162425 7.245909 9.095122 10.38943 7.890321 7.501718 9.566058 8.215444
6.541668 5.884628 6.644673 7.179222 6.670929 8.040021 7.444785 8.895606 8.615495 9.933456 10.22048 11.07957 12.25603 13.4078 15.12522 18.44084 26.69754 28.65028 25.81092 17.43454 14.32468 12.45084 11.0619 9.882819 9.053218 12.99325 12.57167 6.971918 7.194774 7.299242 9.214173 11.5154 8.456043 6.680022 7.099259 10.3029 8.837655 7.309789 9.228461 9.129539
8.146123 6.546387 6.377187 6.875638 7.416086 7.24558 8.265387 8.185274 9.064399 9.559128 10.01811 11.10795 11.86846 12.86061 14.59786 17.30513 25.21215 28.64372 27.14594 18.5483 14.68356 12.68158 11.25932 10.11233 9.108642 12.43193 13.10145 7.414884 7.078713 7.688578 7.264609 11.33394 10.24439 7.057091 7.19317 10.31401 10.01104 7.719715 9.000297 9.922765
11.22432 7.510434 6.717707 6.305013 7.52808 6.741403 8.206367 7.895669 9.072075 9.048317 10.14185 10.77012 11.47332 12.70291 14.30963 16.69154 22.8835 28.43182 27.93666 20.43932 15.35661 13.04887 11.49876 10.32285 9.36103 11.25619 13.33798 9.912584 7.203582 7.527382 7.253288 10.87671 10.94959 7.562984 7.118236 9.385281 10.28161 6.854384 7.842165 9.523863
8.712201 6.800009 7.539176 6.453963 7.860007 7.641113 8.06379 8.582435 8.804768 9.316825 10.0915 10.40987 11.45809 12.5668 13.89284 15.94162 20.82111 28.03444 28.43371 22.56021 16.18371 13.56018 11.85351 10.51625 9.556219 9.157159 13.26799 11.90042 7.062065 7.591826 7.336048 10.02519 11.39803 7.416307 7.476079 8.388204 10.55798 8.087416 7.524757 8.361075
5.964931 5.192113 6.094519 6.54167 6.145336 7.459027 6.914179 8.318332 7.984808 9.304734 9.467449 10.28735 11.28589 12.14297 13.37932 15.20534 18.90887 27.33844 28.75052 25.01458 16.89852 14.03385 12.23255 10.77587 9.70003 8.854827 12.8829 12.74892 8.117065 7.697565 7.088444 7.956087 11.4698 9.545403 7.949845 7.979012 10.13459 9.336966 7.971369 8.344216
10.83501 6.996565 6.471487 7.825675 6.84522 7.920014 7.920762 8.348453 8.61014 9.286561 9.418916 10.41604 11.03088 11.76591 13.0899 14.75962 17.68708 25.99769 28.86257 26.74824 17.76972 14.41582 12.53238 11.10656 9.860488 9.023696 12.20103 13.14957 8.402879 7.858808 7.138241 7.794621 11.14441 10.66277 7.690366 7.519765 9.549378 9.974596 7.936096 7.777947
11.34744 7.199853 5.676105 6.741299 6.742834 6.673654 7.751072 7.354266 8.513927 8.585282 9.3508 10.10048 10.58946 11.55169 12.83482 14.37837 16.92042 23.58519 28.72029 27.81677 19.35173 14.90694 12.82052 11.38413 10.15758 9.174933 10.561 13.40723 10.59538 7.261573 8.029905 7.866159 10.55786 11.26078 7.27205 7.549348 8.882438 10.512 8.234412 7.868624
11.82466 6.567402 5.460005 4.834461 6.437574 6.045532 7.237011 7.241606 8.186209 8.21276 9.310757 9.669246 10.39147 11.43343 12.52763 13.93027 16.14756 21.35829 28.38208 28.43534 21.48877 15.64537 13.18868 11.60765 10.40636 9.273128 8.690699 13.18672 12.218 7.25077 7.075029 7.673737 9.249814 11.54529 8.649039 7.802108 7.457508 10.38572 9.044327 7.782094
6.507605 6.573214 7.150672 6.125864 7.444263 7.197303 7.577138 8.037239 8.202565 8.654323 9.320351 9.530586 10.43234 11.28956 12.19949 13.47164 15.39904 19.3915 27.79478 28.8331 23.89569 16.56281 13.69496 11.87773 10.65643 9.587254 8.836632 12.68415 12.85096 7.398492 7.059837 7.626296 7.307831 11.29343 10.21631 8.070432 7.61856 10.11351 10.0839 7.561709
8.751151 5.106844 6.291219 5.612121 6.399487 6.916032 6.558285 7.788399 7.458542 8.538497 8.826749 9.323975 10.24836 10.94221 11.82314 13.04657 14.78084 17.85148 26.66998 29.02824 26.35692 17.56357 14.26949 12.24245 10.84531 9.818192 8.872169 11.84099 13.26835 8.687147 7.142334 7.319712 7.716365 10.72452 10.80094 7.453862 7.46703 9.210042 10.20873 7.577258
5.197408 4.168213 4.873863 5.833982 5.045999 6.625531 6.150583 7.437746 7.192914 8.386505 8.405694 9.270206 10.00601 10.59984 11.5471 12.71973 14.30839 16.8386 24.7231 28.95043 27.7208 18.75357 14.85909 12.64598 11.10227 10.04853 9.019563 9.756844 13.35735 11.27952 8.026661 7.322983 7.394009 9.743781 11.2035 7.555269 7.539378 7.650432 10.5458 8.81293
9.791748 6.590796 6.269381 7.493006 6.342014 7.586239 7.335623 7.898211 7.890402 8.638192 8.569109 9.46145 9.91789 10.43316 11.3932 12.47838 13.92053 16.13681 22.1007 28.659 28.45532 20.49083 15.47386 13.09736 11.38983 10.23776 9.160659 8.498878 12.99719 12.42646 7.987738 7.646665 7.924497 8.228909 11.47983 9.706209 7.939912 7.77562 9.819118 9.382478
9.257995 6.43642 5.631595 6.77946 6.267143 6.753156 7.177883 7.169698 7.75803 8.12818 8.341062 9.228248 9.5431 10.17882 11.16684 12.17413 13.52839 15.52428 19.81808 28.14386 28.91114 23.09203 16.17686 13.56117 11.7221 10.44341 9.368016 8.654866 12.37046 12.94168 7.761596 7.508756 7.501022 7.396878 11.03118 10.65721 8.230658 7.7542 9.517715 10.20294
9.588691 6.573676 5.799591 6.436254 6.476595 6.334822 7.220333 6.85141 7.741257 7.845736 8.32435 9.024783 9.320766 10.0109 10.9584 11.8987 13.14793 14.95416 18.29019 27.10311 29.183 25.87286 17.0612 14.04826 12.11539 10.67683 9.639961 8.696182 11.19874 13.30364 9.608274 7.219231 7.51196 7.33313 10.43534 11.17483 7.900285 7.489223 8.47808 10.45107
11.27802 6.566007 4.568697 6.311274 5.771065 6.127057 6.862001 6.565032 7.514077 7.569718 8.152965 8.801309 9.092151 9.82889 10.72676 11.61668 12.77816 14.42536 17.18812 25.13461 29.15698 27.64446 18.30583 14.59715 12.51322 10.93319 9.885118 8.991034 8.910151 13.17078 11.80855 7.00811 7.378305 6.988872 8.657417 11.3512 8.724949 7.594879 8.091222 9.180101
9.412766 6.152186 6.545533 5.818655 7.132524 6.222237 7.419615 6.911292 7.850704 7.616416 8.408516 8.742139 9.078797 9.777321 10.5692 11.36627 12.45529 13.94262 16.30631 22.48005 28.88714 28.50559 20.20084 15.21277 12.90333 11.21471 10.08786 9.08392 8.369255 12.79206 12.6862 7.644567 7.901211 7.796418 7.75951 11.27846 10.35083 8.308418 8.298537 7.868106
11.36524 6.030192 5.691029 5.692005 6.412035 5.906878 6.935846 6.497201 7.481317 7.338619 8.086382 8.483191 8.834109 9.544183 10.32449 11.08216 12.11753 13.49241 15.56477 20.08481 28.40947 29.00651 22.89285 15.96251 13.36459 11.53407 10.34727 9.286142 8.523339 12.10705 13.17506 8.15258 8.076228 7.473193 7.388535 10.53962 10.84708 7.906721 8.275231 8.520076
11.41524 6.111812 5.009803 5.469007 5.950559 5.473609 6.637791 6.156896 7.225657 7.087584 7.860912 8.269451 8.604678 9.34573 10.08017 10.82161 11.80174 13.07978 14.92748 18.38989 27.47135 29.31289 25.75381 16.8999 13.87322 11.88765 10.62808 9.535591 8.690525 10.27635 13.27443 10.74014 7.026146 6.940402 7.175591 9.498998 11.2795 8.191031 7.368701 7.574039
11.17535 5.825561 5.739704 5.559534 6.402933 5.794887 6.868148 6.394966 7.341917 7.165797 7.882565 8.242764 8.521235 9.22006 9.917591 10.61808 11.5185 12.71868 14.3723 17.18468 25.61655 29.32919 27.65967 18.16713 14.42457 12.24678 10.90145 9.673234 8.724936 8.349432 13.02015 12.24219 7.741546 7.797537 7.675023 7.331717 11.29698 9.810261 7.994541 7.980527
8.560222 5.806853 6.105862 5.501945 6.68724 5.765993 6.978631 6.43926 7.375011 7.1531 7.829649 8.177463 8.437882 9.048641 9.772526 10.38788 11.26899 12.3706 13.87237 16.24761 22.81635 29.07603 28.59802 20.04892 15.06594 12.64602 11.18653 9.876183 8.964291 8.348014 12.50725 12.8772 7.990242 7.637405 7.716331 7.59802 10.82224 10.69357 7.626433 7.389323
10.69832 6.175426 4.650933 6.185154 5.306508 6.047936 6.397294 6.25317 6.887877 7.097635 7.367974 8.037461 8.198782 8.770026 9.531394 10.16828 10.98186 12.03358 13.41579 15.47014 20.15455 28.60955 29.12953 22.75595 15.82512 13.12201 11.53411 10.18496 9.311869 8.483793 11.4417 13.22075 9.235437 7.508982 7.452638 7.633602 10.13129 11.18336 8.290553 7.779666
6.612829 5.012783 4.967431 5.142372 5.735872 5.168497 6.298124 5.841702 6.73493 6.7765 7.202777 7.809378 8.035673 8.557328 9.301068 9.924716 10.71669 11.71136 12.98498 14.79023 18.25944 27.68133 29.45965 25.66014 16.7646 13.64115 11.82632 10.46285 9.560906 8.785496 9.185115 13.19581 11.59936 7.16614 7.069373 7.564715 8.294757 11.17795 9.171228 8.280854
8.589593 4.845956 4.697377 5.799618 4.969803 5.951359 5.891715 6.271617 6.42642 6.987298 6.994518 7.731203 8.000654 8.407074 9.085953 9.745186 10.48406 11.40962 12.58409 14.19321 16.97192 25.51497 29.50018 27.72195 18.05256 14.25468 12.1925 10.80273 9.702637 8.89122 8.199128 12.76025 12.52114 7.790661 7.817349 8.061134 7.07386 10.932 10.33667 8.294839
7.182476 5.484783 5.486754 6.480318 5.272406 6.611522 6.045448 6.855761 6.454996 7.344272 7.121096 7.749077 8.135027 8.401732 8.944424 9.583915 10.30005 11.13567 12.21811 13.6596 16.05085 22.57333 29.23273 28.73713 20.00249 14.94964 12.55563 11.06545 9.815469 8.861204 8.403857 12.03337 12.99598 8.619775 8.053946 7.962262 7.62635 10.34025 10.93892 8.061187
9.853708 5.653747 5.360332 6.169168 5.022718 6.383687 5.672194 6.692768 6.165927 7.100517 6.985955 7.448472 7.985643 8.249037 8.74134 9.342904 10.03362 10.83358 11.87997 13.20317 15.33389 20.00509 28.7557 29.28064 22.85537 15.74327 13.00557 11.37456 10.14058 9.043698 8.404627 10.25583 13.22802 10.52075 8.005329 7.989845 7.955199 9.18672 11.18503 8.717312
10.75021 5.857028 4.52083 4.84022 4.431675 5.292464 4.85057 5.928833 5.730745 6.375521 6.747915 6.895474 7.568015 8.035726 8.458331 9.065511 9.740935 10.54925 11.55617 12.82212 14.72229 18.1617 27.80157 29.61094 25.90344 16.67428 13.56323 11.69066 10.41309 9.2643 8.787476 8.126985 12.96839 12.10737 8.418252 8.037169 7.961571 8.577995 10.99033 10.07521
10.98068 5.925663 3.054311 3.741139 4.27568 3.793691 5.121933 4.669813 5.877678 5.656937 6.568521 6.769375 7.16677 7.812197 8.370313 8.836013 9.546799 10.30448 11.26331 12.46342 14.13027 16.80175 25.60911 29.63781 27.93675 17.93632 14.20207 12.05824 10.65452 9.4803 8.884014 8.277511 12.43289 12.77398 7.550601 7.8488 8.097521 8.350364 10.53811 10.68759
10.2295 5.542926 4.580927 5.805062 4.943329 5.728366 5.820453 5.928385 6.243299 6.531353 6.596389 7.223875 7.34946 7.727184 8.394205 8.818147 9.415763 10.13599 11.01955 12.10069 13.54829 15.82178 22.51994 29.35621 28.92416 19.93763 14.88153 12.51069 10.94767 9.781235 9.030171 8.289839 11.38598 13.13668 9.030307 7.910858 8.185753 8.382686 9.417315 11.03632
6.507758 4.989269 4.941835 5.988116 4.727482 6.078514 5.489732 6.345822 5.912407 6.772892 6.435259 7.116625 7.411133 7.649405 8.161706 8.667974 9.239023 9.913116 10.72541 11.71143 13.07471 15.15258 19.78954 28.84792 29.45943 22.92584 15.61277 13.02919 11.22434 9.942523 9.058123 8.436604 9.141152 13.12075 11.55381 7.579254 7.424534 7.645464 8.115077 10.74676
10.56404 5.27012 4.99657 4.802553 5.089798 5.359402 5.184176 5.91424 5.646976 6.218699 6.50244 6.535473 7.18911 7.543239 7.867959 8.389984 8.987358 9.645424 10.43602 11.40642 12.70627 14.54552 17.84604 27.76048 29.7846 26.08776 16.60336 13.51485 11.66487 10.24533 9.348238 8.829914 8.187937 12.68305 12.4686 7.374892 7.579156 7.759122 7.724037 9.126225
10.81132 5.33148 5.068778 4.422298 5.567084 4.828373 5.840376 5.44871 6.19091 5.789182 6.637628 6.667794 6.951482 7.443938 7.93886 8.27584 8.823849 9.47378 10.21368 11.15117 12.31206 13.8606 16.62857 25.13964 29.76567 28.21884 18.13104 14.05528 12.02633 10.58094 9.43454 8.836285 7.98397 11.98778 13.0178 7.814445 8.135278 7.510582 7.237779 7.752811
8.208878 4.381228 4.210218 5.283213 4.458814 5.272271 5.354734 5.490386 5.656767 6.101464 6.017971 6.681689 6.826645 7.121433 7.709845 8.13305 8.644902 9.235297 9.962946 10.81678 11.88621 13.34757 15.7912 21.84385 29.44674 29.15037 20.37732 14.81945 12.4062 10.83274 9.656508 8.911243 8.611234 10.19144 13.08034 10.48253 8.332409 7.72656 8.126221 8.160328
10.34551 5.223377 4.636143 4.969522 4.537664 5.326198 4.749315 5.691602 5.258239 6.024079 6.072001 6.266455 6.856802 7.06864 7.391074 7.921682 8.467166 9.070049 9.718033 10.52364 11.58887 12.96982 14.89855 19.29094 28.88173 29.65949 23.55037 15.71277 12.94442 11.19716 10.02586 9.311603 8.983247 8.056064 12.82133 12.07494 7.658259 7.642365 8.118491 8.357718
10.45872 5.469087 2.948377 4.166479 3.678107 4.069579 4.63904 4.366869 5.202911 5.150471 5.717429 6.056438 6.232696 6.818186 7.306348 7.687865 8.207606 8.782555 9.484921 10.28813 11.24661 12.43995 14.23647 17.62767 27.63468 29.9431 26.76316 16.70487 13.48432 11.59348 10.27689 9.377563 8.607491 8.044796 12.25641 12.72657 8.03615 7.646071 8.034185 8.266746
4.887673 4.110399 4.11273 5.088186 4.010402 5.239149 4.672409 5.442643 5.131711 5.89804 5.681942 6.281426 6.522764 6.735446 7.247957 7.624787 8.14338 8.662683 9.279833 10.01631 10.90533 12.10054 13.74183 16.24339 24.91352 29.85781 28.58735 18.34425 14.03835 11.95612 10.47447 9.410384 8.543321 8.128203 11.11568 13.11944 9.257526 7.215612 7.554005 8.570115
10.65018 5.107321 4.994195 4.036024 5.334199 4.677763 5.446463 5.27525 5.698911 5.598524 6.199839 6.056402 6.512186 6.942647 7.21382 7.579191 7.994668 8.545382 9.10225 9.823964 10.68708 11.734 13.11188 15.46507 21.5061 29.49821 29.40558 20.85581 14.87376 12.43162 10.85608 9.799146 9.04464 8.350663 8.317528 12.95441 11.58165 7.888685 8.065846 8.452837
5.529515 4.165848 3.844052 4.955673 3.990273 4.93162 4.782084 5.074806 5.078896 5.744646 5.37659 6.150558 6.358843 6.424098 7.040905 7.34193 7.767672 8.301147 8.882608 9.541748 10.33705 11.34905 12.75705 14.61729 18.94181 28.83766 29.8759 24.29454 15.6529 12.91186 11.17237 9.917813 9.136414 8.661738 8.175283 12.53087 12.49968 8.227909 8.238882 8.440227
10.26477 5.351025 3.443055 3.462162 3.204471 3.809874 3.641548 4.556345 4.336611 4.94714 5.420209 5.428961 5.817356 6.254668 6.619345 6.993843 7.49617 8.042185 8.626432 9.281248 10.10286 11.05262 12.20807 14.01019 17.15247 27.27377 30.09641 27.41928 16.95398 13.4723 11.50886 10.11223 9.092961 8.432449 8.277338 11.6948 12.91696 8.154648 7.708325 7.942381
6.821995 4.554965 4.338621 5.475019 4.161325 5.456838 5.050931 5.572858 5.29972 5.899604 5.623273 6.313914 6.303175 6.537803 6.928658 7.248131 7.624956 8.046345 8.574695 9.184243 9.850272 10.74801 11.93069 13.39774 16.03494 24.13617 29.92362 28.97105 18.59684 14.13323 11.95488 10.51086 9.563578 9.286369 8.467231 9.380229 12.93163 10.80899 8.217871 8.621651
8.833724 4.898462 4.051894 3.163823 4.33294 3.605029 4.395575 4.325355 4.775034 4.698422 5.437991 5.396327 5.772923 6.067739 6.454517 6.765712 7.276272 7.721941 8.272539 8.887562 9.630219 10.43109 11.44789 12.94172 15.06591 20.70759 29.50196 29.6775 21.41038 14.91377 12.41036 10.80079 9.679358 9.292558 8.553695 7.62615 12.65319 12.13825 8.125648 8.009385
7.990551 3.324861 2.861131 3.585737 2.508976 3.911581 3.229927 4.29066 3.950584 4.822487 4.920309 5.271902 5.540841 5.734142 6.192036 6.641123 7.042824 7.554556 8.039988 8.633275 9.305388 10.14701 11.17357 12.37506 14.39668 18.19092 28.67266 30.10132 25.09795 15.87007 12.94013 11.14429 9.812944 8.888597 8.32408 8.358528 12.01804 12.71187 8.172144 7.655767
14.46001 14.94931 15.47007 16.05365 16.46428 16.88718 17.28766 17.68773 17.98324 18.37319 18.66286 18.98722 19.29638 19.58979 19.91974 20.20302 20.51936 20.83249 21.16296 21.5027 21.87342 22.26493 22.71623 23.22777 23.87244 24.74313 27.25333 30.17958 27.93754 25.41158 24.42596 23.78542 23.29553 22.87997 22.51264 22.16168 21.81339 21.44056 21.05675 20.60414 ]

View File

@ -0,0 +1,119 @@
1 [
14.82847 14.29972 15.26227 20.70775 25.07027 25.15668 21.95399 16.42345 13.66041 13.71073 11.44489 9.610499 11.50439 11.04033 7.573106 10.70927 9.700921 9.296234 10.00261 8.555894 9.77741 8.64382 9.358109 8.701863 8.537101 9.026182 8.761405 8.624044 8.636608 8.561096 8.272346 8.724076 8.330278 8.360717 8.21146 8.688565 8.396061 8.031399 7.864937 7.795931
13.2505 13.28812 15.85689 19.64007 24.91962 25.32427 22.48899 16.46161 14.17703 13.67171 12.03201 9.799796 11.17465 11.36215 7.960481 10.40081 10.25343 8.459239 10.26454 7.776544 9.795074 8.13468 9.422432 8.379702 8.76223 8.572392 8.433003 8.467333 8.345504 8.511544 8.226226 8.2338 7.752968 8.178805 8.607297 7.797312 7.991452 8.515513 8.457396 8.351418
12.83536 13.08363 16.08789 18.28188 24.72611 25.46243 22.98738 16.46148 14.48146 13.4729 12.72146 10.03859 10.5787 11.65006 8.455178 9.868307 10.60086 6.912314 10.1162 8.64474 9.605797 8.845458 9.258528 8.332769 9.121269 8.153004 8.054242 8.472212 8.586069 8.424656 8.11894 7.893559 7.86851 8.069588 8.355613 8.140826 8.350318 8.11402 8.238952 8.730089
13.57289 13.70631 15.88192 17.55658 24.48383 25.57034 23.44899 16.79903 14.47857 13.4245 13.02945 10.13194 10.22496 11.66735 9.635495 9.187299 10.82936 7.887651 9.97365 9.448459 9.224346 9.31129 8.97408 8.753983 9.070223 8.373955 8.516268 8.58692 8.011744 8.424559 8.656828 8.328395 7.998621 8.313913 8.639099 8.464811 8.177402 8.039361 8.058804 8.094687
14.63817 13.9133 15.22555 17.93797 24.18556 25.6464 23.87496 17.61712 14.20484 13.6667 13.04788 10.78058 9.53795 11.68891 10.27537 8.235083 10.80691 9.182936 9.474031 9.967148 8.391831 9.683876 8.604962 9.366177 8.681553 8.357981 9.052174 8.36445 8.437981 8.6403 8.43119 8.736533 8.128663 8.032574 8.385471 7.91932 8.135258 7.772158 8.240488 7.909641
13.18761 14.04514 14.30485 18.1217 23.81974 25.68893 24.2649 18.54382 14.00681 13.57786 13.35161 10.66886 9.39561 11.48923 10.84425 7.345708 10.60153 9.870187 8.771662 10.22989 7.517962 9.807878 8.132565 9.615414 8.444991 8.862212 8.890815 8.414049 8.596997 8.175153 7.993013 8.120119 7.8471 8.005344 8.301017 8.515237 7.952535 8.002945 8.383121 8.172313
12.01862 13.45573 13.69868 17.88305 23.3714 25.69551 24.61842 19.41188 14.74699 13.40496 13.53246 11.25242 9.546489 11.14958 11.31229 7.41505 10.22183 10.40358 7.570663 10.23305 8.245772 9.491753 8.57664 9.436473 8.349967 9.180617 8.472775 8.581512 8.81542 8.432635 7.995599 7.991404 8.156177 8.575426 8.29686 7.865513 8.119515 8.189482 8.070114 7.903097
11.94295 12.18865 14.47787 17.22278 22.81902 25.66329 24.93493 20.20915 15.57611 13.21531 13.5986 11.97308 9.618507 10.74285 11.58803 8.214291 9.684521 10.71072 6.852503 9.898599 9.145435 9.302328 9.372096 8.968152 8.831927 8.971417 8.254866 8.649395 8.569132 8.404818 8.221089 8.294596 8.663661 7.949795 7.812922 8.356472 8.501079 7.823971 8.251275 8.666225
12.08183 12.23951 14.89606 16.10744 22.1275 25.58884 25.21488 20.96068 16.04993 13.23139 13.52943 12.52852 9.493817 9.92072 11.76533 9.020708 8.661462 10.83381 8.364287 9.513895 9.742825 8.443134 9.481059 8.30799 9.191348 8.677104 8.602679 9.018684 8.348836 8.516141 8.466432 7.988486 8.631799 8.249335 8.560469 8.326639 8.184137 8.27565 8.400822 8.555741
14.07495 12.69461 14.64828 15.37687 21.23745 25.4679 25.45796 21.68004 16.11706 13.76444 13.40761 12.75906 9.859487 9.135631 11.7127 10.10307 7.383914 10.73582 9.432216 9.090313 10.22684 7.207192 9.72902 7.939687 9.57367 8.412446 8.969767 8.688923 8.483075 8.668484 8.301769 8.037947 7.984097 8.35249 8.204122 8.183769 8.363253 8.425508 8.446438 8.128072
11.26539 13.51576 14.13012 16.01808 20.06426 25.29516 25.66287 22.36495 15.829 14.24096 13.10867 13.1577 10.11097 8.901441 11.45888 10.8819 6.503843 10.49044 10.21638 7.430942 10.21257 7.846674 9.656753 8.686913 9.261065 8.274352 9.111433 8.580627 8.804522 8.657231 8.106971 8.195083 8.138225 8.237574 8.520123 7.895361 7.971828 8.147636 8.563963 8.213259
14.65929 13.09093 12.6515 16.31602 18.58314 25.06362 25.82847 23.0072 15.8979 14.50743 13.10574 13.40034 10.51344 9.208775 11.17132 11.2962 7.170997 10.02251 10.54668 6.54192 10.10764 8.980019 9.2669 9.309279 8.869361 8.820356 9.077743 8.55278 8.909734 8.709534 8.474583 8.152492 8.340719 8.320786 8.468546 7.789712 7.834623 7.767596 8.050405 7.455574
13.75157 12.37105 13.32815 16.07592 18.02842 24.76293 25.95306 23.59778 16.9993 14.39998 13.17822 13.48356 11.06815 9.389745 10.61132 11.5687 8.255111 9.170503 10.82736 7.620112 9.646111 9.719078 8.661988 9.700286 8.364148 9.317504 8.656201 8.76936 8.943769 8.403932 8.511848 8.352326 8.502172 8.452881 8.289745 8.196607 8.276633 8.222081 7.947218 8.276966
11.92801 11.46329 13.92556 15.2305 18.34572 24.37993 26.03375 24.13254 17.94362 14.30209 13.19227 13.51608 11.79233 9.596591 9.915071 11.68124 9.319045 7.810485 10.85237 9.05242 9.039384 10.06129 7.211698 9.753723 7.863302 9.41266 8.002176 8.846606 8.769947 8.565608 8.58597 8.388929 7.934448 8.159925 8.160707 8.277904 8.490897 8.285239 7.927857 8.074306
13.42882 12.01884 13.93334 14.13274 18.25402 23.89384 26.06765 24.61036 18.4382 14.81834 12.9627 13.47269 12.37348 9.576527 9.040638 11.67823 10.25701 6.782329 10.6013 9.878713 7.978516 10.27025 7.537562 9.721354 8.720576 9.358075 8.581275 9.252597 8.375068 8.775004 8.449407 8.127517 8.34847 7.964514 8.547323 8.064443 8.306484 8.123559 8.078975 7.920132
14.42242 12.41857 13.05803 14.55763 17.62531 23.27448 26.05109 25.03123 18.49009 15.58025 12.92049 13.33484 12.87573 9.62678 8.921379 11.42598 10.96278 6.949769 10.15282 10.40011 6.454196 10.04375 8.937967 9.266132 9.332387 8.653087 8.663018 8.834681 8.421961 9.213487 8.337876 8.519968 8.825986 8.732672 8.694007 8.855647 8.499044 8.209281 8.29581 8.017713
10.75031 12.60797 12.29913 15.08171 16.47554 22.47327 25.97969 25.39679 18.55837 15.98256 13.32661 13.03312 13.19527 9.457562 8.56931 11.02714 11.33743 6.807133 9.519377 10.69389 6.766777 9.767231 9.64556 8.573915 9.724151 8.052308 9.173015 8.500987 8.851023 8.517773 8.506977 8.738763 8.679927 8.285606 8.56496 8.320017 8.193767 8.502294 8.334095 7.787189
13.55521 12.09832 12.79805 15.02394 15.79883 21.40922 25.84842 25.70742 19.93023 16.01716 13.90329 12.78509 13.38136 10.65714 8.844765 10.39216 11.5929 7.969721 8.29954 10.79651 8.616557 9.240245 10.16225 7.264007 9.749057 7.749299 9.396683 8.039235 9.097534 8.015417 8.157174 8.8527 8.654562 8.425517 8.253921 8.187222 7.959323 8.077348 8.254355 7.846973
11.8389 11.07528 13.2721 14.0913 16.37438 19.96055 25.65096 25.96279 21.44106 15.9089 14.11401 12.61155 13.45731 11.47262 9.032109 9.480524 11.69542 9.527978 7.029069 10.63349 9.657567 7.807725 10.30481 7.5335 9.668229 8.927277 9.243515 8.745177 9.27597 8.389694 8.801782 8.002497 7.996096 8.142969 8.476811 8.572268 8.226545 8.848603 8.777195 8.268381
13.22276 11.8657 13.21429 13.15317 16.46143 18.57311 25.37821 26.16219 22.62386 16.63146 13.95431 12.84562 13.43365 12.08364 9.361659 8.615222 11.60669 10.46006 6.78126 10.33373 10.32546 6.243025 10.10363 8.851118 9.14184 9.294001 8.574555 9.073586 8.585967 8.270329 8.731244 8.285007 8.317756 8.322383 8.274253 8.104224 8.132306 8.745307 8.740798 8.577918
14.21655 11.93494 12.14213 13.91385 15.82783 18.67168 25.01866 26.30334 23.55477 17.64352 14.06734 12.77619 13.36142 12.6414 9.127471 8.477092 11.34342 11.10623 6.758173 9.764921 10.74932 6.057723 9.707911 9.634424 8.309509 9.70469 7.957487 9.657306 7.89908 8.663869 8.647723 8.214715 8.314189 8.21201 8.411451 8.501976 8.643373 8.327972 8.513859 8.214322
13.75552 11.9421 11.63301 14.30986 14.6202 18.65432 24.55636 26.38399 24.30293 18.24921 14.81092 12.72884 13.06743 13.06517 9.145677 8.467157 10.85105 11.47103 6.825859 8.517924 10.8936 7.945721 9.094168 9.992237 7.000875 9.701162 8.006939 9.623034 8.303315 9.080552 8.325731 8.637669 8.531487 8.585323 8.609891 8.699528 8.68548 8.749103 8.453034 8.211416
10.38632 9.865591 12.35965 13.60529 14.76577 17.96916 23.9714 26.4021 24.90863 18.41731 15.35511 13.00025 12.79541 13.29908 10.36074 8.699292 10.12207 11.66791 8.671617 6.988223 10.68012 9.434175 7.802823 10.19679 7.546166 9.607493 8.860782 9.346521 8.979891 8.891822 8.260843 8.882399 8.352569 8.168922 8.596547 8.049837 8.531948 8.112905 8.1546 7.966974
12.3833 11.31966 12.71713 12.58632 15.29863 16.64691 23.24403 26.35618 25.39918 18.78297 15.405 13.5186 12.48408 13.39668 11.2247 8.807157 9.040277 11.66803 10.04774 6.408699 10.30271 10.18324 5.9366 10.14668 9.028759 9.026737 9.521035 8.47102 9.169631 8.139259 8.436775 8.682685 8.384774 8.849459 8.276716 7.604419 8.151202 8.223825 8.507478 8.524284
13.98077 11.59071 11.63667 12.91855 14.94953 16.30075 22.36864 26.24563 25.79313 20.27316 15.33188 13.79586 12.47675 13.3889 11.9375 9.084296 8.47413 11.48701 10.77114 6.341293 9.858783 10.60801 6.272079 9.791172 9.692576 8.227149 9.801981 7.406867 9.356017 7.778194 8.646093 7.985569 8.210733 8.739974 8.974836 8.836543 8.539139 8.303147 9.044683 8.037832
13.42942 11.60612 10.95153 13.59161 13.85572 16.79991 21.40184 26.06965 26.1033 21.74915 16.05876 13.68983 12.53294 13.26616 12.54556 8.846831 8.231004 11.08772 11.28565 6.529558 8.803127 10.8688 7.879363 9.055853 10.12089 6.778394 9.77739 8.132524 9.310287 8.35048 8.95729 8.400567 9.015866 8.413774 8.346025 8.459229 8.114073 8.119066 7.765747 7.920043
10.03269 9.608505 11.77159 12.98868 13.69851 16.46434 20.49543 25.82592 26.33838 22.91382 16.89336 13.91759 12.42721 13.09553 12.96924 9.043729 8.452668 10.47437 11.54156 7.910175 7.229434 10.74056 9.386422 7.621769 10.24163 7.677176 9.471749 9.181141 8.771936 8.690669 8.765159 8.421848 9.1649 8.20105 8.446832 8.638453 8.168303 8.593101 8.246864 8.385466
13.21075 10.27882 12.06611 11.92006 14.34023 15.31472 19.67962 25.50767 26.50427 23.83527 17.24382 14.55471 12.39783 12.7939 13.23978 9.753622 8.359168 9.239919 11.68775 9.253551 5.742343 10.40399 10.10769 6.117132 10.11003 9.144887 8.894462 9.576253 7.936011 9.220999 8.323048 9.047394 8.566904 8.250362 8.547539 8.644527 8.360217 8.510482 8.002238 8.127376
12.27686 11.49232 11.7688 12.48139 14.17764 14.98627 18.69065 25.10167 26.60412 24.57517 17.37183 14.91793 12.87477 12.22742 13.45255 10.56898 8.326457 8.134407 11.57373 10.46022 6.005435 9.837187 10.57524 6.267281 9.67376 9.766628 7.71391 9.736529 7.34556 9.497632 8.129078 9.281357 8.029055 8.456784 8.434175 8.594058 8.502531 8.149116 8.156064 8.133643
9.592161 10.58304 10.24682 12.80065 12.88837 15.53103 17.46935 24.5855 26.63909 25.17505 18.24601 14.86642 13.25908 11.81918 13.52121 11.479 8.686141 7.904554 11.24048 11.0915 6.331678 8.80712 10.81762 7.322769 8.920998 10.17645 6.439944 9.844662 8.700116 9.134482 8.468131 9.149306 8.284537 8.758836 8.298429 8.360319 8.923626 8.277974 7.856144 8.045138
9.708895 9.422339 11.58617 12.11184 13.17599 15.16484 17.27292 23.92485 26.60781 25.66524 19.49573 15.21024 13.23047 12.08507 13.31724 12.4309 8.935612 8.166769 10.69456 11.50966 6.97099 6.956057 10.6805 9.310076 7.387146 10.24198 8.002475 9.314441 9.388409 8.255198 8.68153 8.647773 8.729584 8.396879 8.425626 8.407998 8.688736 8.356751 8.351434 7.915539
13.60028 10.05032 11.30919 11.08898 13.59931 13.92698 17.28257 23.06911 26.50548 26.06745 20.60825 16.03728 13.40013 11.91447 13.07952 12.94012 8.696048 8.0237 9.820872 11.74993 8.515508 6.192577 10.37462 10.02552 5.713363 10.07025 9.293576 8.683351 9.592575 7.33949 9.067284 8.243411 9.212743 8.540426 8.63591 8.486102 8.631226 8.504005 8.554974 8.439106
10.30788 11.01488 10.79071 12.19982 13.12652 14.28487 16.53945 21.93752 26.32149 26.39637 21.70377 16.4282 14.00764 12.0468 12.64309 13.23859 9.362782 8.032866 8.386142 11.66461 10.21788 5.838795 9.789088 10.53226 6.261406 9.575031 9.895576 7.496974 9.633547 7.840702 9.329185 8.311925 9.020328 8.352136 8.921204 7.868377 7.988183 8.332847 8.002159 7.874154
10.98489 9.921109 10.72671 12.26152 12.04879 14.60752 15.47475 20.43741 26.03717 26.65664 22.82449 16.43453 14.26524 12.5771 12.12778 13.41474 10.73929 8.27333 7.622457 11.4029 10.97131 6.547224 8.815676 10.86393 7.781743 8.681383 10.20062 7.014984 9.502334 8.756417 9.152194 9.046833 8.644415 8.347246 8.757036 8.132206 7.98973 8.545063 7.974536 7.83007
10.86406 10.40983 11.51644 11.08245 13.03712 13.77328 15.91239 18.98454 25.62202 26.84462 23.86656 17.25738 14.19441 12.74797 11.72686 13.44213 11.73721 8.43306 7.77217 10.93253 11.45449 6.641953 6.76402 10.80029 9.365156 6.791404 10.17668 8.197793 8.755383 9.018455 8.358977 9.356042 8.421586 8.77764 8.514923 8.506199 8.295042 8.615601 8.247099 7.913276
12.46673 10.73781 10.98879 11.50511 12.95042 13.19587 15.75852 18.70093 25.03021 26.95096 24.75552 18.31821 14.79371 12.69159 11.52352 13.26832 12.49285 8.511412 7.638108 9.956244 11.68101 7.880384 5.806364 10.34609 10.11328 6.356776 9.808081 9.3316 7.944159 9.668899 7.616401 9.428312 8.00898 8.739065 7.983003 8.660886 9.179432 8.591833 8.477654 8.409656
12.41274 10.4324 10.32706 12.1511 11.64384 13.93739 14.6142 18.24185 24.1913 26.96638 25.47739 18.82396 15.39843 13.19433 11.6314 12.93134 12.98403 8.634762 7.832515 8.56212 11.68042 9.849838 5.872507 9.875818 10.66559 5.989759 9.211553 9.695643 6.458827 9.537165 8.130424 9.303563 8.793538 8.747753 7.864145 8.631823 8.398382 8.565641 8.90686 8.366498
12.08157 9.352373 10.95836 11.22395 12.21545 13.43347 14.69364 17.09674 22.98937 26.886 26.04426 19.48467 15.36723 13.55475 11.95501 12.51823 13.27176 9.57078 7.998351 7.467115 11.43851 10.83869 5.657919 8.475923 10.91462 7.778965 8.046882 10.05505 6.772839 9.432703 9.006819 8.802021 9.075496 8.744912 8.706333 8.361787 8.430994 8.739586 8.136106 7.171822
13.67575 9.864913 9.729376 10.70663 12.29942 12.31846 14.89725 16.58936 21.26592 26.7101 26.47668 21.21132 15.84929 13.54124 12.18937 11.85354 13.4632 10.75716 8.220649 7.735179 10.98762 11.32773 6.565496 6.380569 10.77901 9.513367 6.675482 10.17336 8.83312 8.583877 9.370239 7.68409 9.223089 8.154003 8.905912 8.50903 8.799635 8.673989 8.054677 7.951533
11.69859 10.02812 9.589029 11.61561 11.20989 13.23399 13.91273 16.68793 19.75632 26.43972 26.79469 22.78575 16.77054 13.97715 12.23298 11.37993 13.35647 12.01019 8.234815 7.578976 10.12786 11.61876 7.715343 5.972532 10.28465 10.19339 6.013228 10.07128 9.868765 7.641237 9.780278 7.536468 9.326059 8.132593 8.945045 8.039494 8.865452 8.363733 8.147555 8.657363
11.76999 9.076123 10.65785 10.83179 11.72609 12.89564 13.80726 15.90664 19.5353 26.06578 27.01394 23.99156 16.97757 14.50549 12.6472 11.09524 13.15931 12.6823 8.095576 7.731778 8.685997 11.7547 9.729636 6.37205 9.623663 10.59496 6.1394 9.22869 10.07247 6.854125 9.744347 8.735951 8.789116 8.681403 8.970531 8.516313 8.823366 8.266441 8.26714 8.624357
12.76036 10.03518 10.43903 10.58352 12.09972 11.91178 14.19152 15.26981 18.56415 25.55669 27.14262 24.9238 17.43563 14.48627 12.88154 11.46455 12.77531 13.08742 8.289381 7.646614 7.293829 11.44407 10.73035 6.358664 8.321952 10.82707 8.177494 7.82336 10.19215 7.789985 9.298559 9.317757 8.23637 9.026469 8.295874 8.34935 8.201962 7.783085 8.63632 7.859872
12.14002 9.529004 9.643765 11.33898 10.75864 12.76643 13.15002 15.54733 17.19286 24.85249 27.18056 25.65553 18.79679 15.02707 12.95779 11.54706 12.21393 13.37159 9.757822 7.933412 7.295151 11.02628 11.31073 6.40202 6.462659 10.60277 9.644777 6.562313 9.918603 8.97407 8.456203 9.761306 7.527035 9.190477 7.795479 8.689009 7.780042 8.707673 8.660596 8.595179
11.60476 9.406305 10.43293 10.24794 11.49061 12.2356 13.26049 14.83614 17.47506 23.85922 27.12183 26.23468 19.4946 15.67721 13.45842 11.75016 11.48197 13.4363 11.37108 8.080658 7.528472 10.2548 11.61637 7.631104 6.200376 10.198 10.26813 6.166321 9.403701 9.574801 6.740812 9.673392 7.725665 9.161063 8.357018 8.873454 8.443162 9.100098 8.64479 8.518734
13.4235 9.502111 8.884371 10.5114 11.29531 11.53226 13.42846 14.3531 16.73325 22.43555 26.95739 26.69067 20.44633 15.68788 13.71411 12.1824 10.95172 13.32006 12.2827 8.240573 7.608634 8.658079 11.72246 9.57277 6.383914 9.474188 10.65908 6.690874 8.768341 10.02106 6.960681 9.153408 8.669776 8.774599 9.085591 8.687383 8.682495 8.272491 8.307195 8.686452
11.04841 9.40998 9.901675 11.09631 10.40986 12.3992 12.33891 14.66221 15.76809 20.55048 26.67543 27.03698 22.40875 16.49738 13.84776 12.14747 11.03687 12.96696 12.88417 8.208944 7.529532 7.250766 11.45302 10.72165 6.005757 7.730651 10.68468 8.499765 7.180361 10.05295 8.368668 9.010398 9.66873 8.253955 9.318643 8.258702 9.184639 8.210572 8.307214 8.25059
12.3174 9.508866 9.984016 9.360943 11.26465 11.2754 12.90814 13.7423 16.14192 19.57385 26.25878 27.27519 23.987 17.23999 14.47072 12.54917 11.14695 12.50843 13.22927 9.342554 7.864208 7.236631 10.947 11.21913 6.632028 6.524538 10.54551 9.83047 6.979176 9.791369 9.246861 7.793059 9.800182 7.462074 9.06254 8.270119 9.01152 8.092809 8.741424 7.853457
12.7278 9.259123 8.852555 10.62615 10.59934 11.60456 12.6066 13.81944 15.18837 18.93578 25.67781 27.40332 25.12317 17.41006 14.64667 12.86823 11.49967 11.68119 13.42904 10.674 7.840516 7.135073 10.21664 11.65891 7.687418 6.655385 10.03931 10.38367 6.696255 9.178805 9.757267 6.61673 9.324656 8.4202 8.867358 8.855627 8.872529 8.420103 8.634769 7.836382
10.48093 8.352781 9.808423 9.901903 10.46928 11.66044 11.85352 13.73791 14.9722 17.5288 24.88062 27.42097 25.94898 18.81351 15.04553 12.91467 11.60043 10.76253 13.40622 11.8855 7.82958 7.384185 8.478916 11.67794 9.550273 6.184241 9.078135 10.67043 6.765749 8.41608 10.22847 7.199739 9.040756 9.260613 8.424955 9.226987 7.890619 8.527726 8.353918 8.042258
13.26379 8.972953 8.319504 9.524128 10.65635 10.44987 12.45993 12.82864 14.97421 17.34031 23.77926 27.32873 26.55886 19.77815 15.71895 13.49917 11.88716 10.57924 13.13478 12.67898 8.101657 7.452368 7.076728 11.38077 10.72352 6.624431 7.27755 10.72625 9.068661 6.981515 10.07825 8.807657 8.498142 9.68074 7.662171 9.341424 7.992654 9.014166 8.184183 8.867691
7.810865 6.652678 8.270928 9.731196 9.233036 11.33092 11.28038 13.32543 13.88382 16.77382 22.23486 27.12093 27.01674 20.86242 15.8549 13.58278 12.14828 10.89581 12.68951 13.10564 8.657496 7.602964 7.488385 10.89938 11.23831 6.602429 6.409171 10.38885 9.972483 5.79469 9.680555 9.6728 7.209474 9.487706 7.940344 8.928373 8.372565 8.993444 8.540013 9.12128
8.503547 9.555747 10.02308 9.16528 10.95359 10.6453 12.12162 12.6219 14.43697 15.88268 20.32666 26.7783 27.35262 22.93267 16.77324 14.00098 12.25492 10.97782 11.90176 13.41723 9.556427 7.627874 7.305314 10.06309 11.60433 7.653098 6.842497 9.782768 10.50523 6.939811 8.893822 10.01566 7.386279 9.403547 9.058727 8.793079 9.114359 8.431836 8.672567 8.06668
11.43154 8.370397 8.133114 9.876086 9.736441 10.87895 11.55036 12.6977 13.57329 15.99039 19.4154 26.26608 27.56856 24.54374 17.31504 14.45095 12.68603 11.2562 10.95969 13.41555 11.55206 7.647218 7.126854 8.064535 11.61716 9.693601 7.007698 8.823049 11.01016 7.841296 7.501571 10.26608 8.175562 8.766197 9.309016 7.821373 8.792065 7.869912 8.655047 7.859344
10.99012 8.783937 9.533077 9.170135 10.23557 10.75827 11.32874 12.51559 13.63386 15.0321 18.4377 25.53416 27.65792 25.66566 18.01876 14.60131 12.79879 11.43347 10.38275 13.19617 12.4879 7.698838 7.134631 6.985664 11.31006 10.77671 5.798806 7.002039 10.69385 9.507847 6.80242 9.823198 9.142713 7.625817 9.51115 7.208209 9.087349 8.269844 8.952795 8.36176
12.21463 9.271255 8.19299 9.783855 9.875564 10.35085 11.52291 12.01466 13.36639 15.10255 17.3117 24.50088 27.62024 26.45555 19.41437 15.38006 13.2458 11.67669 10.43413 12.8221 13.01615 8.098628 7.446031 6.882704 10.86602 11.35214 6.265078 6.904018 10.32058 10.24441 6.697612 9.252413 9.674136 6.623974 9.486019 8.790209 8.5759 8.795495 8.747478 8.624358
8.024528 7.919059 9.210418 8.727557 9.731669 10.58008 10.66074 12.26147 12.85711 14.51368 17.13036 23.02563 27.45712 27.02326 20.36045 15.47336 13.48439 11.97805 10.75706 12.15419 13.33513 9.389056 7.69109 7.210593 9.848182 11.65886 8.327008 7.086361 9.499384 10.59582 6.943315 8.366599 10.03304 7.452487 9.127213 9.194386 8.262607 9.201231 8.125878 8.734555
12.40574 9.120517 8.082086 9.229297 9.799856 9.705978 11.29343 11.40501 13.03566 14.25033 16.05715 21.03801 27.15961 27.43354 22.35963 16.42049 13.853 12.12967 10.86361 10.85831 13.46401 11.07232 7.454353 7.034041 7.687271 11.60366 9.968685 6.465147 7.692279 10.69935 8.37498 6.526925 9.968046 8.958634 8.577853 9.715957 7.471033 9.189773 8.343859 8.54611
9.24525 8.150488 8.938282 9.541739 9.18659 10.6152 10.2781 12.01137 12.2513 14.05276 16.02447 19.75532 26.69551 27.712 24.19952 16.74227 14.24781 12.491 11.13683 10.19114 13.22086 12.29762 7.453726 6.778996 7.078902 11.28548 10.90806 6.819656 6.58343 10.40561 9.699717 6.841997 9.709526 9.63369 7.222027 9.34432 8.129841 9.127826 8.916649 8.654907
11.92293 8.603253 8.971673 8.872159 10.0578 9.526655 11.15149 11.0961 12.69695 13.55358 15.22992 18.69488 25.99385 27.85888 25.50389 17.75819 14.56041 12.64126 11.23691 10.10409 12.86209 12.90691 7.55537 7.010523 6.88733 10.72487 11.44588 7.039308 7.005962 10.00708 10.4194 7.585832 8.884477 9.973528 7.069921 9.132766 9.061029 8.672992 9.085567 8.07642
6.835232 6.615261 8.301949 8.459729 8.676019 10.07096 9.73375 11.56711 11.70459 13.50796 15.09333 17.54587 24.91757 27.86545 26.43319 18.65039 15.15745 13.12288 11.63514 10.4617 12.20432 13.26439 8.443527 7.456777 7.317645 9.516291 11.75042 8.571362 6.848787 9.015289 10.74811 7.330063 7.555674 9.878972 7.907105 8.709584 9.293806 7.555378 9.042949 8.460276
12.20456 8.289942 8.659228 8.635714 9.77597 9.249635 10.83759 10.74524 12.27975 12.97067 14.50648 17.17125 23.24266 27.72498 27.09715 19.93323 15.46958 13.25847 11.73998 10.53011 11.0084 13.42307 10.89574 7.315733 7.144176 7.473875 11.60006 10.32655 6.286923 6.941175 10.68763 9.142355 7.436095 9.619548 8.984842 7.846994 9.740011 8.095666 8.876628 8.488464
8.072157 7.42528 8.41473 8.762055 8.66857 9.967424 9.598575 11.28329 11.3557 13.00927 14.34673 16.17608 21.10117 27.43522 27.56822 21.72603 16.26829 13.80305 12.12776 10.83416 10.06942 13.26682 12.20688 7.654194 6.924213 7.312637 11.11026 10.98734 6.993195 6.284911 10.21885 10.02378 6.611416 9.213971 9.67261 7.290545 9.247493 8.56354 8.387247 8.416401
9.255895 8.764297 8.566869 8.551475 9.587285 9.009679 10.58464 10.40477 11.87192 12.51357 13.82218 16.02823 19.99137 26.9542 27.90192 23.50111 16.68715 13.97378 12.25524 10.94353 9.892876 12.91335 12.90248 7.589538 6.806527 6.515487 10.32516 11.46226 6.530581 6.826154 9.683377 10.50179 6.802376 8.014586 10.08681 7.973623 8.81668 9.280657 7.910408 9.577562
10.55674 7.544182 8.427542 8.893524 8.587474 9.841073 9.430034 10.99803 11.08658 12.49005 13.74639 15.18291 18.36627 26.13233 28.09805 25.22745 17.78386 14.60041 12.691 11.24273 10.10805 12.29302 13.2836 8.432627 6.841764 6.573412 8.793405 11.76731 9.122865 7.114097 8.099365 10.56849 8.040534 7.498686 9.89383 8.943809 7.954895 9.52514 7.76871 9.049161
12.13052 7.83934 7.689442 8.675144 8.964087 9.057981 10.15421 10.22738 11.38382 12.18542 13.14273 15.09602 17.8856 24.70238 28.11275 26.46905 18.54284 14.86513 12.87767 11.42572 10.27645 11.04556 13.44478 10.7601 7.276621 7.118711 7.042762 11.41221 10.49843 7.105273 7.453974 10.39121 9.599499 7.51478 9.742396 9.673116 7.346058 9.474776 8.582533 8.84574
11.32732 7.724969 8.209386 8.297722 8.58582 9.357139 9.385679 10.53379 10.91069 11.89188 13.22774 14.42348 16.70765 22.46223 27.94354 27.26194 20.21265 15.55893 13.34359 11.74962 10.51789 9.782467 13.2698 12.12546 7.442219 6.89868 7.240586 10.947 11.13524 6.908404 7.462094 10.0163 10.25004 7.382789 8.59751 9.747414 7.208766 8.954752 8.877158 8.037073
11.73573 8.085103 7.596793 9.105343 8.320032 9.450005 9.686837 10.32462 10.83092 11.96634 12.54077 14.26373 16.49564 20.9412 27.62705 27.76787 21.77571 16.03643 13.60756 11.97915 10.70372 9.635656 12.86668 12.83054 7.531894 7.452139 7.149133 9.971107 11.51692 7.556952 7.045434 8.884863 10.49216 6.875581 7.207372 10.07125 8.544497 8.445582 9.536246 7.553835
11.71888 8.077192 7.901906 7.105978 8.696791 8.414382 9.512068 9.809499 10.83446 11.21492 12.70219 13.84369 15.55671 19.15322 27.12971 28.0996 24.07837 16.7592 14.05155 12.29842 10.98197 9.856703 12.24387 13.27238 8.418561 7.307539 7.237826 8.017947 11.59453 9.733142 7.738388 7.617971 10.63103 9.07722 7.505793 9.664595 9.204977 7.913986 9.535314 8.302996
9.337073 7.737884 7.917978 8.991948 7.932025 9.510186 9.055012 10.33966 10.21524 11.66307 12.16805 13.44315 15.39818 18.48156 26.32633 28.27249 25.73738 17.71444 14.52054 12.60077 11.17772 10.05759 10.96796 13.39903 10.6994 7.379681 7.031098 6.599682 11.17577 10.63938 7.381736 6.569479 10.25986 9.966171 7.720179 8.879638 9.395806 7.485775 9.661861 9.467006
12.13579 8.080095 6.586469 7.746664 8.218734 7.885656 9.424575 9.138703 10.5717 10.88863 12.02255 13.35544 14.75799 17.09949 25.0132 28.26812 26.83141 18.54683 14.87066 12.88024 11.41717 10.2703 9.603232 13.2261 12.20017 7.46109 7.19066 7.122693 10.65529 11.32446 8.005099 7.053511 9.547521 10.43213 6.876048 7.801205 10.16166 7.955553 8.605855 9.171439
10.98424 6.897776 7.860428 7.867931 8.077593 8.870616 8.661197 9.898949 9.96352 11.01144 11.94182 12.72594 14.37578 16.84208 22.913 28.08495 27.55353 20.32963 15.63781 13.32435 11.74118 10.48249 9.513658 12.8365 12.85753 7.539446 7.363614 6.95527 9.459802 11.66907 8.494951 7.002981 8.461458 10.77952 8.176914 7.448959 9.983704 9.089855 8.187874 8.92583
11.35199 7.864576 7.341869 8.781395 7.822636 9.04091 9.07977 9.716415 10.04843 11.04885 11.39465 12.78496 14.16959 15.98579 20.95518 27.73086 28.03616 21.96346 16.02677 13.60668 11.93875 10.6824 9.655926 12.18376 13.30117 8.258126 7.178996 7.070723 7.168555 11.41436 10.10931 7.109386 7.622978 10.35541 9.540663 7.428902 9.382826 9.496323 7.705096 8.458015
11.72969 7.364492 8.021942 7.232905 8.722927 8.057713 9.305351 9.165918 10.24136 10.34615 11.60437 12.43435 13.53304 15.41566 19.24773 27.13701 28.35499 24.40764 16.92956 14.06061 12.25104 10.87964 9.782163 10.55375 13.43805 10.87829 7.268381 7.22472 7.115737 11.06186 11.00674 6.971378 6.886304 10.04139 10.38336 7.415667 8.584406 10.05599 8.274434 8.161366
10.02984 7.08238 7.614011 8.284759 7.502453 8.889271 8.28209 9.664075 9.408318 10.68731 11.20496 11.99911 13.44196 15.18873 18.29244 26.14359 28.48873 26.1897 17.94447 14.59566 12.63874 11.18124 10.06167 9.101551 13.20049 12.29741 7.251204 7.227715 6.688125 10.26336 11.42711 7.757756 6.846556 9.016937 10.50761 7.509938 7.840146 9.772781 8.392979 8.389621
10.67155 6.629097 6.628845 7.592858 7.688403 7.983122 8.718624 8.902403 9.624344 10.33094 10.77281 12.04246 13.09676 14.42079 17.0526 24.56888 28.41739 27.25984 18.91131 14.95175 12.87924 11.38191 10.2753 9.292673 12.78687 12.94654 7.684108 7.592038 7.261319 8.61693 11.53843 9.132796 7.114877 7.431987 10.49146 9.085039 8.225414 9.652885 9.523511 8.112173
12.20349 7.023471 6.087039 5.868507 7.482085 6.896128 8.457693 8.352684 9.546974 9.662506 10.9023 11.62839 12.57543 14.13734 16.5227 22.27256 28.16716 27.91855 20.92252 15.66653 13.31643 11.6622 10.43397 9.466312 11.98573 13.31724 8.88264 7.278543 6.70705 6.703887 11.26626 10.53683 6.220708 6.78669 10.06462 9.868031 7.748029 9.130969 9.755266 7.790809
10.36082 6.479095 7.326125 7.512198 7.375084 8.332942 7.838513 9.175137 8.967917 10.09555 10.64412 11.26499 12.54917 13.92756 15.91559 20.43355 27.72684 28.35308 22.9304 16.43356 13.78506 12.05017 10.69565 9.574695 10.2516 13.39243 11.23 7.385314 6.537415 6.861923 10.69041 11.16483 6.937842 7.388532 9.312101 10.33531 7.795266 7.962809 9.691809 7.856168
10.02659 7.294158 6.76932 8.161706 7.120165 8.365227 8.318173 8.949298 9.120098 10.06193 10.21011 11.37557 12.29915 13.33888 15.17187 18.64139 26.96368 28.61647 25.3496 17.06941 14.1084 12.29875 10.97692 9.847832 8.890142 13.11018 12.39222 7.110289 7.159741 7.313976 9.685184 11.48299 7.94071 6.593992 7.695018 10.26442 8.43082 7.29361 9.353747 8.940239
11.48867 7.573582 6.308431 6.965129 7.41566 6.984978 8.367523 7.950002 9.23301 9.306532 10.2665 11.10077 11.79506 13.00314 14.81156 17.68322 25.65631 28.66617 26.87615 18.33358 14.59393 12.56814 11.17921 10.05504 9.158044 12.59898 12.99265 7.351615 7.100564 7.503765 7.545796 11.40987 9.938064 7.067168 7.137408 10.38995 9.88317 7.752361 9.020113 9.780483
11.25878 6.558473 7.447984 6.510989 7.861645 7.652637 8.173366 8.590364 9.013535 9.384206 10.30305 10.65977 11.68194 12.91968 14.43205 16.88532 23.53146 28.50184 27.77403 19.95009 15.31153 13.02674 11.43827 10.19706 9.338668 11.65881 13.30457 9.123607 7.246268 7.639903 7.23412 11.03441 10.82854 7.434911 7.226473 9.636701 10.11839 7.114443 8.272775 9.767364
8.987104 6.615786 6.957499 7.782034 6.772747 8.22774 7.544199 8.833064 8.452526 9.656516 9.854502 10.57389 11.61445 12.55878 13.89243 15.97533 21.25944 28.15384 28.32823 21.92405 15.93539 13.47038 11.82319 10.45456 9.40722 9.583233 13.31656 11.55816 6.800994 7.672186 7.346467 10.25919 11.31402 7.330945 7.304085 8.725723 10.58197 7.391881 7.484375 8.537802
9.590849 5.627592 5.535903 6.722438 6.654787 7.168568 7.66354 8.00121 8.492546 9.219196 9.46069 10.53003 11.25599 12.07767 13.47864 15.37966 19.25247 27.55481 28.68766 24.46364 16.52638 13.82719 12.09529 10.78176 9.628654 8.782683 12.99969 12.60142 7.970293 7.454009 7.049816 8.659005 11.47864 9.046844 7.865851 7.942899 10.32632 9.254881 7.707776 8.374046
11.77121 7.090946 5.159593 6.887596 6.698246 6.811213 7.836071 7.521076 8.651458 8.783028 9.536455 10.33475 10.86136 11.85737 13.24679 14.97532 18.11098 26.42217 28.85812 26.38229 17.56485 14.22586 12.37743 11.04496 9.912937 8.954278 12.41954 13.05151 8.183489 7.938524 7.189037 7.373811 11.2655 10.47526 7.868893 7.708053 9.555157 9.693703 8.147479 8.006824
11.73866 6.793155 5.447452 4.957923 6.400501 6.203855 7.243697 7.444045 8.286749 8.426315 9.488379 9.865208 10.67088 11.73813 12.9224 14.48515 17.14558 24.27069 28.77748 27.60247 19.08694 14.84932 12.70937 11.23808 10.11156 9.121375 11.12796 13.39026 9.957778 7.406591 7.802435 7.989968 10.73547 11.13584 7.353767 7.450608 9.25588 10.4552 8.060258 7.725845
10.48028 6.014523 6.95394 6.205402 7.200565 7.300535 7.376822 8.121498 8.144773 8.826443 9.389657 9.701233 10.67827 11.55667 12.54707 13.95424 16.20581 21.8853 28.48308 28.308 20.86821 15.60015 13.16297 11.48204 10.30629 9.274791 8.893154 13.26397 11.9488 7.218422 7.461304 7.779585 9.69009 11.5039 8.118137 7.661531 7.6253 10.4776 8.770045 7.887937
8.64116 6.560933 6.749259 7.652138 6.496075 7.943588 7.259709 8.408455 7.979278 9.080734 9.097427 9.784113 10.59446 11.24448 12.20743 13.52372 15.4773 19.6503 27.97825 28.74894 23.19817 16.34988 13.65577 11.82317 10.50231 9.501945 8.722854 12.83758 12.72688 7.255758 7.031198 7.593225 7.644725 11.3951 9.922864 8.164942 7.672549 10.17858 9.872365 7.500423
9.457255 6.706583 6.531444 7.689709 6.539951 7.836347 7.473587 8.21659 8.075524 8.958786 8.880112 9.792484 10.34636 10.93567 11.95168 13.19855 14.96895 18.17565 27.02009 29.00462 25.85212 17.14617 14.14378 12.21581 10.72669 9.697594 8.763636 12.11498 13.18478 7.767665 7.036183 7.371494 7.57 10.91114 10.71556 7.487628 7.382726 9.519588 10.22516 7.406958
10.22704 5.692012 5.842234 6.402164 6.651088 6.627168 7.404872 7.227338 8.033651 8.338311 8.693023 9.531156 9.953533 10.64819 11.72157 12.8909 14.5209 17.24031 25.29605 28.99314 27.459 18.22074 14.626 12.61203 11.04922 9.90431 9.001387 10.41886 13.38948 10.75208 7.888107 7.351258 7.567333 10.03509 11.10663 7.367195 7.52031 8.120255 10.52316 8.502721
11.33546 6.796406 5.024902 6.625103 6.131681 6.520802 7.216458 6.995442 7.902296 8.045557 8.603827 9.327202 9.668706 10.4755 11.50819 12.5707 14.07653 16.45088 22.73476 28.749 28.30678 19.97927 15.1685 13.00722 11.39134 10.12825 9.209806 8.427047 13.11156 12.23891 8.022084 7.32202 7.728386 8.604288 11.47915 9.261144 7.78818 7.539609 10.03891 9.261639
11.15125 6.828306 5.203739 5.641881 6.194603 5.573936 7.001581 6.49503 7.739731 7.583091 8.547137 8.99969 9.460834 10.31461 11.23996 12.25299 13.62789 15.72345 20.42471 28.3036 28.81342 22.49324 15.84923 13.40306 11.73904 10.3665 9.399056 8.641074 12.55075 12.83103 7.773651 7.787786 7.759528 7.361193 11.17586 10.4812 8.212577 7.826158 9.589701 10.03373
11.63764 6.368737 4.778424 4.514976 5.87696 5.281999 6.60661 6.524731 7.440319 7.424679 8.425008 8.694973 9.307281 10.14795 10.971 11.92563 13.20594 15.06412 18.71289 27.44102 29.1384 25.21431 16.76061 13.83014 12.08976 10.58131 9.610791 8.690718 11.61182 13.23878 8.892941 7.186689 7.435037 7.471846 10.62061 11.10704 8.030029 7.536372 8.835545 10.5015
9.25628 6.360319 6.971277 5.887985 7.348863 6.677644 7.493096 7.402111 7.944356 7.885948 8.705766 8.783932 9.386374 10.13158 10.81429 11.66174 12.84486 14.4853 17.43451 25.71044 29.19229 27.3167 18.01775 14.32957 12.4369 10.86987 9.785056 8.93329 9.462639 13.2488 11.46109 6.949882 7.420438 7.025404 9.247678 11.30476 8.212622 7.643775 7.981782 9.616146
11.34829 5.930337 5.985191 5.251379 6.38504 6.175762 6.632245 6.965662 7.298562 7.55472 8.278126 8.395041 9.125827 9.842322 10.49757 11.35512 12.45743 13.97114 16.44301 23.1839 28.97136 28.33791 19.78867 14.92191 12.82306 11.15957 10.02183 9.030123 8.430202 12.89851 12.49921 7.507258 7.608207 7.371712 7.593172 11.35712 10.10507 8.114388 8.162773 7.96932
11.29715 6.029606 5.465486 5.289768 5.773866 6.069875 6.073518 6.859467 6.922524 7.386817 8.031826 8.185479 8.956936 9.632248 10.24647 11.07326 12.12556 13.51921 15.64633 20.67886 28.55605 28.90051 22.2456 15.63184 13.24781 11.4912 10.27841 9.240575 8.511719 12.34264 13.09852 7.997991 8.2982 7.898559 7.660017 10.73292 10.75148 8.148024 8.457036 8.59529
11.13662 5.762593 5.995296 5.325958 6.296426 6.190496 6.508904 6.898523 7.073848 7.416092 8.037256 8.13311 8.848467 9.488959 10.06193 10.83243 11.83298 13.11077 14.99234 18.77288 27.775 29.25826 25.05886 16.52146 13.73104 11.82814 10.50655 9.401141 8.649461 10.88906 13.27684 10.04037 6.987164 6.742599 6.989861 9.868967 11.15416 7.703442 7.445904 7.689423
8.519547 5.965726 6.564258 5.532876 6.882 6.33559 6.991531 7.045232 7.361362 7.502259 8.141479 8.147503 8.816106 9.405827 9.92532 10.64013 11.57752 12.74842 14.43461 17.43316 26.18581 29.35522 27.30326 17.71152 14.27495 12.19231 10.82232 9.635138 8.744119 8.558354 13.10661 11.9933 7.665789 7.696452 7.686353 7.787361 11.39133 9.493839 7.97125 7.885179
11.24136 6.100547 4.719471 4.517653 5.071122 5.406358 5.607741 6.225649 6.501305 6.841258 7.559178 7.696391 8.397704 9.042962 9.622802 10.33131 11.25645 12.38306 13.92724 16.44453 23.52838 29.15816 28.41693 19.45592 14.90545 12.57806 11.09098 9.835196 8.916413 8.340612 12.67487 12.76369 7.86319 7.706305 7.651464 7.47351 10.9526 10.55958 7.433063 7.347179
8.401374 6.203499 6.173982 5.148856 6.536236 5.825871 6.683879 6.546843 7.133716 7.001093 7.816963 7.851535 8.391481 9.017663 9.551065 10.18802 11.03886 12.07862 13.49193 15.65939 20.8065 28.75242 29.0181 22.0276 15.65745 13.00235 11.44828 10.06274 9.296376 8.40837 11.79668 13.15084 8.744991 7.416071 7.554696 7.734758 10.34382 11.08983 8.25425 7.849519
9.411935 5.799684 6.395838 5.462933 6.823624 5.994817 6.979465 6.628801 7.353025 7.062226 7.88115 7.905397 8.318386 8.936383 9.445452 10.03654 10.80252 11.79558 13.09602 15.00291 18.76446 27.99018 29.3964 24.98959 16.57686 13.4523 11.75914 10.3202 9.487147 8.664739 9.784032 13.25187 11.16845 7.236787 7.077674 7.232661 8.806485 11.21346 8.72307 8.007609
10.0069 5.462902 6.059949 5.265544 6.57247 5.709958 6.813748 6.310545 7.157124 6.912397 7.612999 7.8422 8.083498 8.702344 9.274867 9.825035 10.56779 11.50747 12.71402 14.4137 17.33938 26.21371 29.52617 27.31793 17.78082 14.00177 12.13375 10.67616 9.6713 8.860662 8.223404 12.89408 12.37288 7.464945 7.567387 8.151121 7.354194 11.03644 10.19086 8.401232
8.940316 4.972572 5.356933 4.938144 6.003849 5.151241 6.418757 5.791041 6.775064 6.632689 7.204695 7.625005 7.833241 8.360247 9.021596 9.600122 10.31486 11.20812 12.33994 13.86435 16.26472 23.30636 29.31725 28.54902 19.51683 14.65568 12.53256 10.94873 9.754497 8.913137 8.43753 12.249 12.8749 8.638904 8.150916 7.83111 7.368337 10.46766 10.77094 8.11153
4.572227 4.433328 4.104479 5.138983 4.702711 5.263908 5.541975 5.776391 6.060026 6.572459 6.653583 7.420026 7.618087 8.072603 8.753305 9.350143 10.06728 10.90072 11.97782 13.3421 15.42721 20.54586 28.902 29.16734 22.11549 15.46268 12.93403 11.30685 10.01349 9.021379 8.359375 10.91673 13.21909 9.858085 8.020725 7.989076 7.844766 9.58867 11.17422 8.509573
6.943148 5.278515 5.348474 6.237194 5.111198 6.380175 5.831333 6.655722 6.201419 7.168641 6.838143 7.516032 7.896521 8.128567 8.654998 9.24799 9.912843 10.67176 11.65162 12.89563 14.77966 18.6073 28.1178 29.54972 25.19431 16.44945 13.38843 11.65658 10.31731 9.227023 8.780889 8.320651 13.07058 11.84796 8.437156 8.153003 8.186154 8.693033 11.05588 9.736009
10.48307 5.541771 5.053675 5.570226 4.852986 5.886109 5.165749 6.324153 5.776872 6.737224 6.758623 6.989419 7.653012 7.959211 8.400757 8.965096 9.641378 10.3807 11.31398 12.51237 14.25202 17.24545 26.31666 29.66702 27.54652 17.68079 13.94319 12.00181 10.56667 9.366524 8.704662 8.137074 12.58462 12.63978 7.619987 7.808619 7.823955 8.122942 10.73352 10.64113
10.3593 5.24445 5.904229 4.859554 6.288745 5.531501 6.376708 6.170515 6.664509 6.547329 7.173265 7.133242 7.611039 8.071231 8.415329 8.877464 9.505038 10.20061 11.08812 12.19903 13.75432 16.13157 23.30885 29.44502 28.73993 19.42576 14.66585 12.36947 10.90621 9.688863 8.988558 8.27924 11.75243 13.07388 8.246262 7.886061 8.292314 8.503717 9.721097 10.91654
8.069042 5.426614 4.964082 5.072155 5.432057 4.943784 5.923509 5.350373 6.22997 6.113461 6.613592 6.964795 7.103729 7.654074 8.203354 8.647764 9.236066 9.94786 10.78671 11.84895 13.21477 15.22866 20.44241 29.00534 29.34757 22.13283 15.49015 12.8426 11.1382 9.931691 9.064088 8.434175 9.677041 13.17156 11.10241 7.601228 7.589989 7.889289 8.432513 10.97121
6.731613 5.196455 5.118284 6.147876 4.99379 6.22286 5.68314 6.415877 6.127123 6.811746 6.524237 7.201066 7.380304 7.622057 8.121202 8.624474 9.13578 9.772924 10.55274 11.49913 12.7523 14.62013 18.40107 28.13577 29.72503 25.35767 16.39801 13.40317 11.51662 10.11957 9.268784 8.719174 8.212077 12.81799 12.30893 7.503936 7.327972 7.637199 7.645635 9.614836
10.05127 4.719968 5.090455 4.377787 5.256351 5.265975 5.182724 5.797653 5.678986 6.118789 6.449442 6.4694 7.117317 7.418337 7.77895 8.289992 8.850383 9.494205 10.25018 11.17485 12.39346 14.10415 16.88639 25.93575 29.81015 27.83096 17.6261 13.97899 11.95119 10.49408 9.414008 8.832001 7.984987 12.2053 12.90901 7.613996 8.129071 7.661078 7.352401 7.807902
7.225847 5.081284 5.507807 4.588964 5.897443 5.093786 6.006906 5.660398 6.291416 5.995462 6.724882 6.686982 6.982962 7.489201 7.850025 8.209585 8.702332 9.347464 10.05138 10.93379 12.03934 13.47814 15.87688 22.67856 29.54399 28.97687 19.6548 14.56791 12.33957 10.77059 9.557091 8.802725 8.351411 10.79109 13.10499 9.712767 8.185811 7.613372 7.811925 8.006339
6.917923 4.76398 4.391577 5.582681 4.519851 5.543377 5.241806 5.822014 5.609973 6.220834 6.016633 6.699805 6.832993 7.085021 7.594842 8.086982 8.539777 9.148051 9.799959 10.62313 11.63151 13.00353 15.18511 19.75787 29.05927 29.55291 22.68128 15.43729 12.75311 11.12217 9.907272 9.219947 9.077266 8.577381 12.90671 11.82603 8.014688 7.719454 8.278756 8.394465
9.677554 5.299991 4.602666 5.015553 4.380041 5.297332 4.731846 5.598832 5.213952 5.960031 5.964427 6.206364 6.761745 6.978113 7.343637 7.817236 8.338223 8.875766 9.555181 10.34362 11.34413 12.63995 14.38624 17.91947 28.05784 29.90098 26.04475 16.51267 13.3582 11.45594 10.21308 9.425289 8.659224 8.069209 12.44125 12.59975 7.854147 7.835834 8.152843 8.268888
9.724236 5.318787 3.594715 4.625905 4.077235 4.433786 4.880552 4.60547 5.331479 5.305602 5.730676 6.129924 6.233614 6.772944 7.21267 7.625436 8.081643 8.675651 9.330628 10.0899 11.00232 12.13135 13.81447 16.67758 25.73071 29.91334 28.26401 17.82218 13.91929 11.89409 10.42035 9.35299 8.46108 7.95212 11.4967 13.04887 8.595453 6.863901 7.365669 8.571421
6.346632 4.396853 4.413946 5.212883 4.243655 5.36824 4.749128 5.64716 5.095474 6.022987 5.738884 6.226587 6.619367 6.730198 7.191416 7.641065 8.053783 8.550179 9.160802 9.845625 10.70496 11.85223 13.33289 15.529 22.33931 29.60755 29.24813 20.086 14.58998 12.28787 10.77843 9.683667 8.963158 8.377571 9.054226 13.0484 11.18957 7.816776 8.000925 8.395679
9.588944 4.680316 5.233761 4.299648 5.660708 4.85961 5.683496 5.485805 5.91902 5.692751 6.352983 6.233004 6.642655 6.90008 7.247789 7.493847 7.955167 8.43937 8.997295 9.684023 10.47721 11.45672 12.77717 14.89769 19.39539 29.05066 29.77741 23.4021 15.52909 12.80636 11.07839 9.881399 9.127552 8.689312 8.049981 12.65002 12.32529 8.212595 8.295368 8.49675
7.22903 4.685439 4.546804 5.64097 4.163903 5.663935 4.982903 5.831977 5.40206 6.126326 5.860121 6.42897 6.497844 6.66952 7.058173 7.445205 7.819676 8.264708 8.794419 9.417802 10.16241 11.16576 12.42553 14.08116 17.61942 27.80824 30.07697 26.77586 16.49697 13.29896 11.41424 10.05377 9.021979 8.18631 8.078956 11.97969 12.85234 8.003635 7.666875 8.002188
10.33079 4.849276 4.911753 4.002999 5.342668 4.628654 5.377671 5.232836 5.641508 5.354798 6.143945 5.999215 6.248173 6.698164 6.88475 7.213528 7.591523 8.058967 8.617184 9.237598 9.95178 10.81995 11.93556 13.61882 16.20672 25.0054 29.99583 28.70125 18.1832 13.9758 11.8398 10.38374 9.42742 9.128633 8.620648 10.19577 12.95898 10.15329 8.138618 8.418491
7.834709 2.569564 2.864877 2.409044 2.75573 3.471937 2.941097 4.146451 3.825817 4.660102 4.876309 5.232179 5.656147 5.874244 6.291943 6.791259 7.263289 7.71408 8.277572 8.90319 9.660644 10.50279 11.61497 12.96241 15.36625 21.48009 29.63016 29.53746 20.55853 14.66496 12.30672 10.75477 9.692705 9.434882 8.54594 7.649139 12.76376 11.92958 8.040447 8.344356
9.993098 4.494246 4.506891 3.888798 4.985553 4.197396 5.154287 4.780618 5.383793 5.121579 5.86406 5.749516 5.913295 6.265452 6.645205 6.901227 7.253794 7.73156 8.214808 8.809663 9.412622 10.21117 11.23288 12.61308 14.46037 18.77124 28.9519 30.01378 24.16138 15.66695 12.80091 11.02652 9.773706 8.826304 8.265381 8.087324 12.20953 12.60203 8.206242 7.611145 ]

View File

@ -0,0 +1,119 @@
1 [
15.00744 21.17303 25.52861 24.46438 16.69938 13.84804 11.2087 11.79517 10.3911 10.44909 10.30123 9.874329 9.699727 9.37509 9.347578 9.355928 9.107419 9.00323 9.031268 8.839916 9.082197 8.744139 8.40221 25.38532
13.87853 20.56466 25.49562 24.69662 16.9541 13.91633 11.33638 11.84495 10.25656 10.58718 10.34841 9.747416 9.612316 9.39642 9.06955 9.117751 8.913527 8.842571 8.59212 8.831518 8.622513 8.86048 8.976251 25.40668
13.94753 19.94101 25.4494 24.90511 17.00044 13.92074 11.66673 11.82172 10.34108 10.72575 10.09829 9.810879 9.676199 9.421767 9.124647 8.774353 9.086291 8.74897 8.469534 8.670973 8.772754 8.740549 8.982433 25.39494
14.46999 19.35756 25.38992 25.09344 16.9938 13.9162 11.93417 11.74966 10.509 10.89407 10.06301 9.909191 9.719013 9.472373 9.279746 8.977654 8.786046 9.155951 8.680856 8.915503 9.044468 8.622409 8.614415 25.38965
14.86701 18.83547 25.31638 25.26457 17.58689 13.96361 12.28831 11.64583 10.77008 10.93227 9.965744 9.983705 9.794715 9.683822 9.214636 9.22319 9.027518 9.08751 9.00797 8.690693 8.636527 8.534263 8.608916 25.40345
14.39263 18.34291 25.22669 25.42082 18.7565 14.08459 12.57443 11.49681 10.99936 10.84389 10.00922 10.07006 9.847752 9.723428 9.365665 9.261901 8.973814 8.559562 8.594522 8.591494 8.902281 8.581494 8.84674 25.39414
13.61556 17.75853 25.11799 25.56325 19.88541 14.27314 12.8651 11.33338 11.27241 10.69851 10.1366 10.13036 9.733146 9.577723 9.381716 9.248396 9.189224 8.688073 8.67134 8.974331 8.558913 8.680233 8.567945 25.41012
12.70632 17.03329 24.98648 25.69186 20.8378 14.4026 13.10278 11.17627 11.47603 10.54565 10.22696 10.1561 9.839836 9.555802 9.335251 9.099536 9.089512 8.861704 8.978891 8.57215 8.816164 8.740176 8.932856 25.40563
13.09457 16.32271 24.82719 25.80641 21.64091 14.35672 13.28589 10.87103 11.64153 10.29185 10.38676 10.24745 9.539135 9.469715 9.396955 9.291441 9.129187 9.020734 8.797786 9.009113 8.906702 8.755951 9.0032 25.39347
14.06665 16.02923 24.63424 25.90593 22.32723 14.31126 13.35114 10.60129 11.75252 10.03298 10.56536 10.33102 9.686008 9.650635 9.584603 9.3017 9.158677 8.917218 8.604981 8.810085 8.729281 8.944183 8.883796 25.40889
13.76552 16.17645 24.40143 25.98881 22.92096 14.51278 13.519 10.32357 11.80536 9.94855 10.81537 9.988535 9.792647 9.714604 9.450595 9.331737 9.288633 8.835147 8.742838 8.838379 8.664718 8.639749 8.949137 25.38499
14.44698 16.13566 24.12027 26.05389 23.43876 15.07109 13.7058 10.467 11.8015 10.10384 10.89065 9.880134 9.865986 9.778766 9.492803 9.437282 9.25561 9.110746 8.765221 8.912471 8.568149 8.348438 8.390752 25.38442
13.59612 15.84653 23.77955 26.1 23.89321 15.48908 13.77098 10.92392 11.6539 10.49951 10.93642 9.76797 9.976171 9.902955 9.547713 9.3839 9.268895 9.086465 8.846323 9.010743 8.74517 8.780628 8.61915 25.38152
12.42751 15.24208 23.36539 26.12598 24.29347 15.65469 13.78163 11.5635 11.49901 10.84122 10.83632 9.919022 10.06573 9.811605 9.432329 9.192472 9.299401 9.084225 8.756673 8.669268 8.81456 8.906392 8.540642 25.39383
13.4067 14.73229 22.85692 26.13116 24.64714 15.57566 13.7268 12.04653 11.3495 11.15552 10.63575 10.06661 10.2592 9.813733 9.597858 9.504023 9.314473 8.994366 8.889587 8.720882 8.823824 8.691456 8.598278 25.40385
14.13769 14.69011 22.22506 26.11513 24.95954 15.84595 13.71551 12.48036 11.14894 11.39038 10.3956 10.22951 10.25367 9.664195 9.491752 9.236977 9.344962 9.222926 9.244186 9.266691 9.292159 8.896353 8.74614 25.39873
12.76465 14.89703 21.4271 26.07779 25.23589 16.70513 13.71459 12.76208 10.81923 11.53612 10.13377 10.43053 10.23193 9.694115 9.626987 9.374685 9.270073 9.114141 9.14038 9.032728 8.902119 8.942383 8.672675 25.40309
13.38605 14.8356 20.40041 26.01928 25.48057 17.49077 13.79619 13.014 10.44904 11.66904 9.762179 10.64586 10.1455 9.802798 9.62978 9.478968 9.245587 8.869559 9.19227 8.963789 8.72923 8.594576 8.61386 25.38262
12.14785 14.2581 19.0896 25.93938 25.69799 17.88586 13.74379 13.20764 9.85603 11.78116 9.502366 10.80447 9.846269 9.893407 9.8751 9.638045 9.473519 9.190859 8.588326 8.740058 9.035091 9.157508 9.160873 25.39624
13.16602 13.83908 17.92742 25.83628 25.89285 17.94353 13.71196 13.34838 9.700342 11.78662 9.779746 10.9355 9.672676 9.896886 9.838532 9.375263 9.16255 8.973556 9.010108 8.777596 8.674643 9.062126 9.211525 25.39575
13.86471 13.88087 17.79526 25.70607 26.06824 18.59229 13.82555 13.52382 9.76897 11.69692 10.40343 10.91232 9.763716 10.0799 9.795081 9.625959 9.292827 9.095508 8.83057 8.85857 9.041067 9.008874 8.958606 25.3924
13.47869 14.08497 17.71741 25.54159 26.22568 20.12139 14.19963 13.58492 10.6855 11.50563 10.82252 10.70544 9.939025 10.20654 9.581658 9.628597 9.514054 9.224993 9.022577 9.179948 9.230008 9.184273 8.987253 25.38689
10.8599 13.60977 17.17766 25.33295 26.36387 21.47556 14.45353 13.64482 11.28663 11.30426 11.1289 10.41729 10.09634 10.25901 9.609992 9.688148 9.621655 9.198067 9.073863 8.920963 8.850325 8.829373 8.668608 25.39572
12.44882 13.25772 16.3365 25.0682 26.47949 22.5416 14.46115 13.60225 11.8654 11.03887 11.38732 10.12286 10.37625 10.22439 9.657678 9.678977 9.410151 8.98861 9.107933 9.131783 8.408139 8.818702 9.012233 25.38815
13.61083 12.99741 15.86411 24.73421 26.56852 23.39189 14.665 13.55504 12.34036 10.74424 11.56615 9.850986 10.63515 10.0465 9.769161 9.729738 9.434759 8.89463 8.809294 9.231894 9.403095 9.04627 9.194419 25.39475
13.14976 13.37105 15.98677 24.31701 26.62762 24.07859 15.28078 13.49346 12.69593 10.18019 11.72155 9.344111 10.84595 9.769073 9.866045 9.835915 9.48774 9.143046 9.363906 9.050531 8.916459 8.609077 8.404105 25.39246
10.49969 13.00027 15.76365 23.80087 26.65528 24.63814 15.78207 13.41955 12.95716 9.597183 11.75687 9.102958 10.89925 9.544214 9.929428 9.954329 9.274131 9.182056 9.335903 9.091219 9.026561 8.973861 8.865469 25.39709
12.81212 12.58995 15.1809 23.16413 26.65202 25.09767 15.86973 13.2824 13.14867 9.163857 11.69363 9.856095 10.81384 9.621449 10.20201 9.762736 9.355642 9.345261 9.280268 8.974323 9.058703 9.051085 8.586198 25.40476
12.38201 12.70537 14.83122 22.37294 26.61972 25.47789 16.07757 13.22915 13.34908 8.822659 11.57742 10.52796 10.64509 9.839672 10.3342 9.488523 9.502357 9.518306 9.29292 8.913283 9.085662 8.861794 8.687978 25.39227
10.79937 12.57765 14.8058 21.36834 26.56048 25.79585 17.04343 13.35482 13.4809 9.609352 11.38088 10.93552 10.44044 10.09058 10.32454 9.641837 9.719406 9.418237 9.369368 9.016812 9.069472 9.04493 8.564624 25.40465
10.32977 12.3828 14.65666 20.07064 26.47523 26.06562 17.84056 13.3329 13.57142 10.36037 11.15125 11.25122 10.08686 10.36572 10.10395 9.627095 9.736663 9.100936 9.315399 8.911035 9.040281 9.003739 8.75481 25.39269
13.13178 11.81498 14.13262 18.60655 26.36274 26.29818 18.16405 13.30045 13.5937 11.33253 10.88959 11.49276 9.724923 10.56028 9.943349 9.791771 9.733048 9.134796 9.407298 9.274118 9.021625 9.163772 9.007115 25.40318
11.33392 12.17634 13.97306 17.99822 26.21798 26.50193 18.8454 13.74406 13.5025 12.00464 10.37248 11.67512 9.040639 10.77064 9.650483 9.92784 9.734184 9.398894 9.266025 9.278213 8.763576 8.782077 8.476363 25.39934
10.97407 12.19395 13.97546 17.77283 26.03134 26.68094 20.49142 14.11067 13.37916 12.48801 9.67083 11.80206 8.587571 10.94581 9.411396 10.08683 9.719779 9.523563 9.37726 9.089842 8.897139 8.768185 8.619372 25.39792
11.21369 11.90777 13.76455 17.06482 25.7874 26.83533 21.96497 14.10946 13.25149 12.8101 8.842713 11.81082 9.582809 10.85173 9.56566 10.16637 9.236102 9.315321 9.478457 9.173648 9.059334 8.94195 8.756848 25.38512
12.22904 11.79058 13.41159 16.22705 25.46511 26.96134 23.11126 14.5002 13.13788 13.04379 8.523494 11.61214 10.35582 10.56667 9.81172 10.22126 9.322379 9.529746 9.431326 8.95977 9.195964 9.429123 8.96103 25.39313
12.10827 12.0283 13.36568 16.13785 25.03592 27.05349 24.01527 15.13233 12.99253 13.23919 8.635099 11.43096 10.82514 10.44325 10.26044 9.988782 9.284991 9.468534 9.671181 9.001472 8.924876 9.130087 9.189729 25.39145
11.70254 11.62782 13.21703 15.89717 24.45942 27.10648 24.73969 15.20656 12.77705 13.40029 9.136568 11.20642 11.18341 10.09956 10.54405 9.792101 9.524915 9.710972 9.558682 9.291119 8.94125 9.138536 8.542342 25.40082
13.18281 10.83587 12.70127 15.20383 23.6747 27.11683 25.32512 15.53311 12.77924 13.53135 9.925284 10.89513 11.41596 9.648012 10.75599 9.738762 9.788702 9.675976 9.19371 9.213122 9.212561 9.232891 8.64039 25.39538
11.4595 11.45932 12.72565 14.99607 22.58523 27.08455 25.79824 16.44048 12.81807 13.51851 11.16206 10.38372 11.5845 8.717129 10.82312 9.668043 10.25313 9.790008 9.34961 9.262219 9.090082 9.095958 8.917315 25.39835
11.39531 11.27944 12.7032 14.92153 21.05106 27.01375 26.18005 16.7182 12.79441 13.47517 11.93377 9.662321 11.81005 7.939085 10.83689 9.301044 10.21876 9.734275 9.396607 9.320921 9.316814 9.034009 8.943901 25.3992
12.34765 11.04485 12.45315 14.43327 19.32409 26.91016 26.49008 17.06933 13.22958 13.32867 12.41799 8.470423 11.74444 9.420547 10.71906 9.591082 10.25519 9.512598 9.483331 9.266434 8.877497 8.661476 8.819108 25.39301
11.73516 11.23995 12.2956 14.19154 18.82068 26.77568 26.74659 18.43301 13.5085 13.16805 12.78078 8.253699 11.63104 10.35254 10.46461 9.984721 10.10212 9.439977 9.650408 9.302923 8.87884 8.937749 9.221094 25.38788
11.29051 10.90401 12.23811 14.1132 18.11719 26.60219 26.96573 19.15473 13.59607 13.0086 13.04039 8.444627 11.42235 10.82648 10.20272 10.28867 9.844623 9.41747 9.577289 9.437025 9.126613 9.351392 9.251872 25.39198
12.92475 10.43881 11.79169 13.64253 16.91122 26.3683 27.15821 20.06217 14.18076 12.77268 13.25114 8.497205 11.18721 11.1804 9.843991 10.54145 9.7145 9.582467 9.553921 9.372896 9.32786 8.960086 9.024402 25.39025
10.84383 11.12249 11.97418 13.56972 16.81125 26.03967 27.32385 22.04198 14.3807 12.44584 13.4102 8.831858 10.82101 11.4206 9.105699 10.64409 9.329636 9.796351 9.945902 9.454774 9.397694 9.238239 8.779975 25.38977
11.89882 10.31477 11.70415 13.37498 16.30475 25.57321 27.45031 23.62535 14.64373 12.32201 13.51306 10.18905 10.26978 11.55661 8.041362 10.87954 9.129904 9.992952 9.63693 9.316474 9.269462 9.168614 8.907243 25.39284
12.24847 10.51309 11.47697 13.022 15.56868 24.92313 27.52242 24.74959 15.34945 12.10645 13.51373 11.31404 9.361758 11.7979 8.037827 10.75723 9.309247 10.12249 9.097322 9.301515 9.412771 9.267547 8.886382 25.38806
10.20325 10.38561 11.46918 12.95047 15.55509 24.04658 27.53413 25.5533 15.46525 12.37213 13.40425 12.09511 8.069228 11.71304 9.535841 10.50912 9.722877 10.27901 9.264794 9.536005 9.50345 8.8305 8.862941 25.39465
12.75432 9.564649 11.021 12.63566 14.94484 22.89631 27.49205 26.13497 16.20246 12.66662 13.23433 12.58181 7.982838 11.51854 10.4286 10.2934 10.18298 10.04224 9.481591 9.74062 9.453218 9.163432 9.163871 25.39323
7.789706 9.679388 10.85249 12.37431 14.67008 21.38643 27.40782 26.56757 16.88902 12.77263 13.0323 12.87965 8.162897 11.28995 10.85068 9.953865 10.42422 9.803104 9.659452 9.606634 9.128386 9.251111 9.366357 25.39714
9.878863 10.27527 11.3014 12.49571 14.51772 19.58002 27.28844 26.90281 17.25132 13.24171 12.77515 13.13947 8.173211 11.04728 11.19791 9.449917 10.66798 9.450585 9.844444 9.784229 9.424738 9.304177 8.991207 25.38697
10.97782 9.761937 10.70426 12.05827 13.99293 18.65778 27.13207 27.1743 18.69637 13.31063 12.46916 13.325 8.152137 10.61272 11.41027 8.763468 11.05791 9.153708 10.14808 9.452844 9.1348 8.947744 8.85778 25.39441
10.6653 9.932255 10.88813 12.07134 13.96241 17.80698 26.92521 27.40325 19.56342 13.82563 11.99313 13.47707 9.117208 9.962461 11.60508 7.231112 10.84451 9.184261 10.13769 9.140426 9.227799 9.276782 9.286122 25.39055
11.77176 9.716299 10.52641 11.78009 13.49872 16.79408 26.63661 27.60093 21.23021 14.06032 11.6745 13.53437 10.80172 8.710612 11.76942 8.540421 10.68507 9.692649 10.06138 9.186681 9.551732 9.29074 9.274199 25.39395
8.620667 9.561668 10.52952 11.64857 13.39908 16.57313 26.21651 27.76248 23.21864 14.46805 11.74975 13.42699 11.86008 7.893573 11.66198 10.04757 10.35929 10.05721 9.939523 9.399005 9.642406 9.380163 9.079967 25.38966
11.93747 9.278503 10.23127 11.45848 13.05751 15.71358 25.59802 27.87026 24.63966 14.95105 11.93128 13.24736 12.44058 7.609775 11.43241 10.62196 9.969308 10.3026 9.670509 9.66452 9.912711 9.172092 9.126786 25.39335
9.251123 9.77851 10.38592 11.39443 12.93486 15.57506 24.68438 27.90949 25.63485 15.24442 12.21396 13.00031 12.77396 7.537259 11.2098 11.03398 9.492985 10.52345 9.520593 9.887691 9.424563 9.336003 9.385068 25.39293
11.45655 9.450672 10.357 11.31556 12.71024 14.95603 23.31774 27.87861 26.34176 16.02759 12.37887 12.75092 13.05495 7.669878 10.90534 11.3627 8.797594 10.83234 9.091355 10.01253 9.3844 9.430385 9.277229 25.39348
7.424523 8.898629 9.806354 10.89184 12.42037 14.74526 21.32289 27.79004 26.85083 16.32501 12.79467 12.39951 13.24821 8.116926 10.45524 11.62327 7.647385 10.82492 8.964593 9.945512 9.200193 9.235236 9.311338 25.39263
11.70811 9.169433 10.0785 11.00682 12.3023 14.28629 19.74532 27.65992 27.22758 17.47718 12.94993 11.86431 13.42561 8.93996 9.465794 11.76136 7.576023 10.61887 9.578827 9.936003 9.269413 9.600918 9.305164 25.39305
8.302985 9.114309 9.767797 10.70667 12.06497 14.08333 18.62179 27.49034 27.52183 17.99552 13.40037 11.3165 13.49113 10.67342 7.942401 11.64852 9.404872 10.30346 9.956794 9.859705 9.305886 9.461892 8.93665 25.39201
9.485378 9.089854 9.886886 10.73024 11.91256 13.68232 17.45058 27.26279 27.7652 19.7374 13.60618 11.17832 13.41471 11.8585 7.2311 11.45415 10.38023 10.09121 10.29821 9.652331 9.621033 9.696717 9.399599 25.39616
10.12578 9.1906 9.689177 10.51984 11.74023 13.52286 16.91914 26.93453 27.97427 21.02431 14.09931 11.40947 13.2386 12.43565 7.195565 11.37024 10.97788 9.491202 10.39382 9.362895 9.803859 9.524618 9.203852 25.39701
11.62103 8.756125 9.477743 10.38884 11.52554 13.1279 16.13109 26.41845 28.14648 23.32856 14.43159 11.6115 12.99983 12.80206 7.69707 10.95787 11.17051 8.829436 10.65847 9.205196 10.14746 9.38579 9.388907 25.39065
10.84752 8.792562 9.392868 10.21436 11.37372 13.00202 15.69574 25.59359 28.24888 25.09568 14.94092 11.92532 12.69247 13.04221 7.692672 10.5419 11.39976 7.944696 10.74874 8.871852 9.934642 9.040377 9.181849 25.3955
11.24868 9.052888 9.396246 10.21963 11.23713 12.66914 15.23739 24.35388 28.2563 26.20521 15.494 12.10807 12.26493 13.25512 8.015066 9.721652 11.58516 7.661808 10.4218 9.310007 10.10927 9.312395 9.525958 25.38783
11.23325 8.18042 9.057845 9.877741 10.99268 12.48392 14.70842 22.60999 28.18518 26.90794 16.01323 12.50192 11.64364 13.46231 8.779012 8.336069 11.67826 9.221161 10.34657 9.98944 9.845531 9.35046 9.680387 25.39352
9.140487 9.059326 9.306144 10.01284 10.96115 12.28265 14.51055 20.45776 28.0636 27.38154 16.96865 12.68942 10.83249 13.45161 10.80073 7.50154 11.42411 10.05992 10.00919 10.29331 9.375909 9.267025 10.12802 25.39195
11.63225 7.80241 8.614532 9.568792 10.61794 11.97198 13.93372 19.12489 27.90082 27.72964 17.67187 13.08636 10.86543 13.31865 11.94421 7.703676 11.29086 10.78771 9.562213 10.47833 9.32577 9.917489 9.387947 25.39283
10.48662 8.399567 8.896224 9.578027 10.55934 11.8593 13.78492 17.62442 27.68391 28.00599 19.31479 13.45021 10.96279 13.12877 12.48155 7.725416 11.07037 11.16652 8.990263 10.79457 8.969749 10.13199 8.994781 25.39704
10.87343 8.748537 8.981209 9.677258 10.521 11.65406 13.44188 17.03849 27.37576 28.23714 20.90114 13.72584 11.22096 12.92475 12.88153 7.677142 10.54401 11.27745 7.996792 10.63179 8.87534 10.06192 8.60385 25.38908
11.22066 8.26867 8.995963 9.543327 10.35951 11.49655 13.08665 16.19089 26.89518 28.42901 23.26255 14.30239 11.47383 12.55513 13.12341 7.834759 9.955585 11.55775 7.533898 10.63999 9.663215 10.10163 9.219362 25.39367
9.599471 8.498966 8.73507 9.355002 10.19654 11.30484 12.93717 15.55079 26.07908 28.55852 25.1111 14.68052 11.66453 12.0313 13.31994 7.914319 8.38732 11.64284 8.796171 10.22832 9.883939 9.692562 9.256657 25.39642
10.16908 7.674166 8.290555 9.044679 9.923223 11.00951 12.57286 15.23768 24.62391 28.58647 26.3688 15.18729 12.00385 11.15844 13.48659 9.449435 7.953401 11.47594 9.963059 9.895932 10.23273 9.744529 9.74754 25.39367
11.67933 6.544823 7.76744 8.674165 9.635606 10.80167 12.2627 14.60542 22.26552 28.51015 27.17687 16.02146 12.3226 10.37652 13.43566 11.37394 7.37083 11.25638 10.58098 9.366466 10.39244 9.371986 9.803345 25.39505
9.870395 7.947427 8.302985 8.867916 9.696465 10.73532 12.15896 14.1999 20.43287 28.37624 27.69063 16.64081 12.55636 10.39028 13.23711 12.19189 7.36186 10.95273 10.98301 8.636997 10.55655 8.80361 9.709915 25.39614
9.608464 8.13715 8.313739 8.955525 9.660022 10.58485 11.91691 13.97874 18.5451 28.20039 28.05437 17.68823 12.95235 10.65401 12.99104 12.62072 7.72286 10.60034 11.24379 7.480002 10.30079 8.817954 9.752146 25.39404
10.98993 7.192304 7.798724 8.523185 9.313427 10.30643 11.58066 13.54238 17.48501 27.96262 28.33959 19.31971 13.37888 10.9111 12.68895 12.94648 7.771276 9.936911 11.44094 7.559737 10.52922 9.781414 9.893038 25.39353
10.74353 7.664224 8.245938 8.659761 9.366634 10.27968 11.46852 13.14053 16.79412 27.61593 28.57609 21.21401 13.70451 11.08888 12.26805 13.16082 7.920091 8.741113 11.56809 8.614607 10.05023 9.845473 9.584752 25.39484
8.627831 7.932775 8.080894 8.610788 9.289057 10.14242 11.31842 12.92895 15.9065 27.0432 28.77049 23.68413 14.12465 11.36238 11.51749 13.35676 8.339801 8.008994 11.42614 9.946846 9.889275 10.24657 8.514298 25.3952
9.090196 6.737612 7.354279 8.07781 8.891042 9.800032 11.01107 12.68188 15.20478 25.95255 28.88987 25.64782 14.75306 11.66314 10.209 13.44408 10.68221 7.75351 11.20602 10.55494 9.438339 10.38043 8.574641 25.39439
11.25329 6.806694 7.28998 8.054334 8.780321 9.669956 10.77501 12.35655 14.83431 23.84829 28.8754 26.94446 15.40336 11.9887 10.03691 13.26827 11.84477 8.054001 10.9717 10.96832 8.555928 10.24343 8.708538 25.39125
11.21714 5.845804 6.787416 7.596877 8.471261 9.440975 10.55536 12.00439 14.45516 21.46783 28.76059 27.68685 16.01651 12.24607 10.18482 13.08161 12.48303 8.228065 10.61665 11.25366 8.003961 10.58327 9.204256 25.3952
9.97048 7.220875 7.689921 8.048877 8.702988 9.498979 10.51397 11.80348 13.98572 19.23778 28.60122 28.14866 16.8695 12.54532 10.34384 12.80404 12.83611 7.889399 10.01953 11.48686 8.103563 10.31023 9.646062 25.39419
8.330555 7.777743 7.826451 8.289393 8.824086 9.505386 10.43703 11.66361 13.51855 17.86479 28.38935 28.48586 18.27849 12.92808 10.55355 12.40854 13.07215 7.714967 8.675978 11.54422 8.992141 10.11903 10.07504 25.39473
9.03912 7.73458 7.785523 8.255892 8.764335 9.384748 10.27323 11.48537 13.14469 16.98039 28.09088 28.75492 20.21802 13.38722 10.78635 11.78823 13.29113 7.757352 8.002884 11.33046 9.850041 9.7013 10.21216 25.39162
9.712454 6.639585 7.144888 7.677936 8.281572 9.015732 9.942518 11.20621 12.84312 16.18772 27.61889 28.97877 22.61649 13.88093 11.09691 10.54886 13.43762 9.977577 8.039506 10.99101 10.38766 9.159881 10.49822 25.39325
10.82014 6.569227 6.861944 7.511952 8.109405 8.829951 9.738983 10.95371 12.58078 15.44671 26.74204 29.14309 25.16562 14.39955 11.41411 9.578781 13.30102 11.58474 8.13674 10.91568 10.97781 8.450768 10.33928 25.39149
10.64047 5.984795 6.534686 7.152894 7.823585 8.598401 9.513368 10.68982 12.31607 14.79096 24.94745 29.17978 26.8417 14.95716 11.72093 9.757715 13.02758 12.23307 8.327576 10.49402 11.20908 8.577643 10.31422 25.39344
11.11244 5.21432 6.168289 6.854764 7.595154 8.43082 9.327142 10.44791 12.04287 14.24384 22.2623 29.08129 27.7814 15.61685 12.03068 9.930234 12.79525 12.67847 7.890158 9.817462 11.42898 8.365617 10.2777 25.39408
8.828473 7.145768 7.622215 7.806074 8.223385 8.781716 9.475601 10.40291 11.84016 13.80178 19.76007 28.92521 28.32084 16.4663 12.3535 10.15693 12.43184 12.96421 7.712798 8.318481 11.37266 8.962286 9.392389 25.39202
10.82244 6.239038 6.778635 7.106415 7.676603 8.356074 9.138875 10.09989 11.53531 13.38584 18.03846 28.71769 28.69423 17.66333 12.71349 10.37747 11.87561 13.18284 8.169359 7.969197 11.39324 10.14456 8.621069 25.39589
10.77233 5.931324 6.367038 6.784081 7.424591 8.124977 8.943243 9.894213 11.26738 13.01921 16.88655 28.42727 28.98402 19.50719 13.11888 10.64791 10.73511 13.41674 9.58146 8.434292 10.9909 10.53405 9.0092 25.39645
10.61124 6.276302 6.725314 7.025312 7.525676 8.154601 8.883856 9.755839 11.0506 12.6844 16.01592 27.97216 29.22237 22.16374 13.57975 10.87773 9.376094 13.26407 11.3173 7.354141 10.64834 10.81498 8.048265 25.39591
8.130305 6.763392 7.18414 7.360906 7.743001 8.274958 8.893733 9.687943 10.87953 12.37963 15.30686 27.10591 29.40565 25.03781 14.1033 11.1913 9.400677 13.05591 12.16242 8.2497 10.33555 11.21182 8.536982 25.3912
10.71752 5.202735 5.674926 6.222646 6.897706 7.634897 8.42588 9.313105 10.57407 12.03487 14.68455 25.33784 29.45079 27.02379 14.72376 11.462 9.576531 12.81832 12.6264 8.270387 9.499403 11.34488 8.073051 25.39535
8.060112 6.379651 6.804731 6.984161 7.391845 7.905588 8.531066 9.320446 10.44166 11.77781 14.15352 22.5232 29.3504 28.02977 15.47719 11.79146 9.874359 12.44151 12.90475 8.144958 8.369903 11.39948 9.385494 25.39261
8.930271 6.603449 7.072587 7.216211 7.561055 8.001204 8.530456 9.267945 10.2949 11.52403 13.6724 19.80739 29.18673 28.58979 16.42966 12.09701 10.09092 11.9169 13.14394 7.850308 7.714192 11.08295 10.06944 25.39389
9.493579 6.286148 6.817085 7.006487 7.339575 7.800827 8.349975 9.097334 10.06532 11.28051 13.23414 17.88873 28.9677 28.97144 17.71176 12.4901 10.33791 10.74466 13.28647 9.13166 8.498666 10.86947 10.60338 25.39423
8.441597 5.702048 6.259866 6.560413 6.9474 7.457028 8.066579 8.847219 9.784683 11.04121 12.83325 16.63787 28.65701 29.26548 19.57741 12.90775 10.47743 9.248651 13.1779 11.24687 8.395916 10.49361 10.82182 25.39533
5.010352 5.215635 5.478734 6.005132 6.530851 7.103768 7.808163 8.620622 9.49804 10.80548 12.48969 15.7574 28.1552 29.50632 22.29512 13.42417 10.74184 9.149988 13.0099 12.09741 8.487741 10.13058 11.10091 25.39554
6.728384 6.368806 6.339997 6.714892 7.075587 7.476359 8.021311 8.660121 9.434615 10.6399 12.21153 15.06934 27.10415 29.68914 25.37743 14.0282 11.03112 9.426717 12.74352 12.53742 8.780671 9.504362 11.20913 25.39308
9.962044 5.848419 5.899266 6.219161 6.665694 7.153049 7.693129 8.356776 9.241917 10.33799 11.89656 14.45346 24.86841 29.69902 27.49796 14.70006 11.31726 9.4571 12.35907 12.8265 8.280419 8.548094 11.26487 25.3965
9.837029 6.074376 6.545005 6.660047 6.962574 7.358819 7.813959 8.394919 9.22714 10.14035 11.60577 13.87758 21.82346 29.57105 28.42744 15.42721 11.70942 9.757011 11.82256 13.0687 8.344014 8.971826 10.85925 25.39348
7.66081 5.536566 5.818714 6.127999 6.427118 6.90408 7.404124 8.113817 8.901797 9.896574 11.2474 13.35622 19.16378 29.38811 28.94657 16.36225 12.04661 9.934801 10.66899 13.23589 9.321173 8.289311 10.578 25.39616
6.548136 6.238544 6.206706 6.555174 6.851414 7.18173 7.627229 8.178882 8.826127 9.826376 11.03646 12.96248 17.44212 29.14021 29.30885 17.84695 12.42279 10.13033 9.154135 13.15591 11.23068 8.018407 9.322872 25.39317
9.526473 5.349868 5.722674 5.848371 6.27978 6.706903 7.215951 7.793292 8.60259 9.509521 10.78716 12.58374 16.19171 28.77547 29.59143 20.1919 12.89938 10.40601 9.086123 12.9635 12.10402 8.399249 8.115746 25.39464
6.900651 5.717015 6.149593 6.26402 6.525858 6.89699 7.294518 7.845399 8.577667 9.330828 10.53438 12.20247 15.22628 28.13513 29.82292 23.3842 13.45026 10.62598 9.203753 12.62517 12.4444 8.461801 8.413981 25.39489
6.585339 5.616796 5.628093 5.977717 6.298108 6.635653 7.092598 7.663805 8.278466 9.224275 10.26847 11.85002 14.59918 26.54948 29.96852 26.48663 13.98981 10.96883 9.720801 12.22382 12.74777 8.420835 8.853937 25.39444
9.166204 5.355229 5.360714 5.637752 5.987251 6.399713 6.870164 7.405295 8.128 8.972618 10.0661 11.5526 13.99156 23.43262 29.89875 28.18707 14.71665 11.30095 9.694644 11.63052 12.99867 8.414451 8.704899 25.39328
9.211708 4.729653 4.821526 5.230456 5.599786 6.037741 6.567583 7.195518 7.912862 8.709632 9.790423 11.21089 13.40349 20.24129 29.73744 28.91551 15.6984 11.65026 9.593091 10.23598 13.18614 9.407353 8.488461 25.39395
6.059479 5.373656 5.376691 5.687725 5.998209 6.353787 6.773111 7.265417 7.907587 8.708107 9.637274 10.95882 13.01328 17.87422 29.52157 29.36066 16.80356 12.02192 10.00303 8.952479 13.04781 11.30949 8.678006 25.39198
9.068792 5.445178 5.909282 5.97247 6.233187 6.539448 6.90586 7.311459 7.937879 8.530205 9.494306 10.70614 12.53214 16.56237 29.21855 29.68676 18.785 12.4844 10.19204 9.135778 12.81355 12.07218 8.881263 25.39395
6.837213 5.692661 5.604218 5.953091 6.188729 6.50216 6.853444 7.222213 7.711873 8.464505 9.264201 10.43897 12.1899 15.44039 28.73654 29.94721 21.77916 12.91464 10.28617 8.804447 12.54166 12.49033 8.370256 25.39408
9.804167 5.114905 5.607141 5.683089 5.967355 6.267506 6.63746 7.041984 7.613036 8.173422 9.103513 10.20424 11.78505 14.69491 27.7221 30.15152 25.33221 13.54656 10.66986 9.573904 12.02359 12.65319 8.784128 25.393
7.310941 3.171319 3.531911 3.921892 4.562146 5.178815 5.807542 6.384023 7.020895 7.902781 8.750008 9.918304 11.45531 13.97022 25.05706 30.17872 27.86279 14.15844 11.00974 9.796109 11.37465 12.94318 8.705699 25.39316
9.466416 4.766158 5.252964 5.383954 5.655123 6.018968 6.339795 6.717179 7.281072 7.854917 8.698115 9.709486 11.12261 13.46861 21.47232 30.03626 28.89217 15.08547 11.25627 9.398794 9.767819 13.05902 9.960008 25.39214 ]

View File

@ -0,0 +1,119 @@
1 [
25.38532 15.00744 21.17303 25.52861 24.46438 16.69938 13.84804 11.2087 11.79517 10.3911 10.44909 10.30123 9.874329 9.699727 9.37509 9.347578 9.355928 9.107419 9.00323 9.031268 8.839916 9.082197 8.744139 8.40221
25.40668 13.87853 20.56466 25.49562 24.69662 16.9541 13.91633 11.33638 11.84495 10.25656 10.58718 10.34841 9.747416 9.612316 9.39642 9.06955 9.117751 8.913527 8.842571 8.59212 8.831518 8.622513 8.86048 8.976251
25.39494 13.94753 19.94101 25.4494 24.90511 17.00044 13.92074 11.66673 11.82172 10.34108 10.72575 10.09829 9.810879 9.676199 9.421767 9.124647 8.774353 9.086291 8.74897 8.469534 8.670973 8.772754 8.740549 8.982433
25.38965 14.46999 19.35756 25.38992 25.09344 16.9938 13.9162 11.93417 11.74966 10.509 10.89407 10.06301 9.909191 9.719013 9.472373 9.279746 8.977654 8.786046 9.155951 8.680856 8.915503 9.044468 8.622409 8.614415
25.40345 14.86701 18.83547 25.31638 25.26457 17.58689 13.96361 12.28831 11.64583 10.77008 10.93227 9.965744 9.983705 9.794715 9.683822 9.214636 9.22319 9.027518 9.08751 9.00797 8.690693 8.636527 8.534263 8.608916
25.39414 14.39263 18.34291 25.22669 25.42082 18.7565 14.08459 12.57443 11.49681 10.99936 10.84389 10.00922 10.07006 9.847752 9.723428 9.365665 9.261901 8.973814 8.559562 8.594522 8.591494 8.902281 8.581494 8.84674
25.41012 13.61556 17.75853 25.11799 25.56325 19.88541 14.27314 12.8651 11.33338 11.27241 10.69851 10.1366 10.13036 9.733146 9.577723 9.381716 9.248396 9.189224 8.688073 8.67134 8.974331 8.558913 8.680233 8.567945
25.40563 12.70632 17.03329 24.98648 25.69186 20.8378 14.4026 13.10278 11.17627 11.47603 10.54565 10.22696 10.1561 9.839836 9.555802 9.335251 9.099536 9.089512 8.861704 8.978891 8.57215 8.816164 8.740176 8.932856
25.39347 13.09457 16.32271 24.82719 25.80641 21.64091 14.35672 13.28589 10.87103 11.64153 10.29185 10.38676 10.24745 9.539135 9.469715 9.396955 9.291441 9.129187 9.020734 8.797786 9.009113 8.906702 8.755951 9.0032
25.40889 14.06665 16.02923 24.63424 25.90593 22.32723 14.31126 13.35114 10.60129 11.75252 10.03298 10.56536 10.33102 9.686008 9.650635 9.584603 9.3017 9.158677 8.917218 8.604981 8.810085 8.729281 8.944183 8.883796
25.38499 13.76552 16.17645 24.40143 25.98881 22.92096 14.51278 13.519 10.32357 11.80536 9.94855 10.81537 9.988535 9.792647 9.714604 9.450595 9.331737 9.288633 8.835147 8.742838 8.838379 8.664718 8.639749 8.949137
25.38442 14.44698 16.13566 24.12027 26.05389 23.43876 15.07109 13.7058 10.467 11.8015 10.10384 10.89065 9.880134 9.865986 9.778766 9.492803 9.437282 9.25561 9.110746 8.765221 8.912471 8.568149 8.348438 8.390752
25.38152 13.59612 15.84653 23.77955 26.1 23.89321 15.48908 13.77098 10.92392 11.6539 10.49951 10.93642 9.76797 9.976171 9.902955 9.547713 9.3839 9.268895 9.086465 8.846323 9.010743 8.74517 8.780628 8.61915
25.39383 12.42751 15.24208 23.36539 26.12598 24.29347 15.65469 13.78163 11.5635 11.49901 10.84122 10.83632 9.919022 10.06573 9.811605 9.432329 9.192472 9.299401 9.084225 8.756673 8.669268 8.81456 8.906392 8.540642
25.40385 13.4067 14.73229 22.85692 26.13116 24.64714 15.57566 13.7268 12.04653 11.3495 11.15552 10.63575 10.06661 10.2592 9.813733 9.597858 9.504023 9.314473 8.994366 8.889587 8.720882 8.823824 8.691456 8.598278
25.39873 14.13769 14.69011 22.22506 26.11513 24.95954 15.84595 13.71551 12.48036 11.14894 11.39038 10.3956 10.22951 10.25367 9.664195 9.491752 9.236977 9.344962 9.222926 9.244186 9.266691 9.292159 8.896353 8.74614
25.40309 12.76465 14.89703 21.4271 26.07779 25.23589 16.70513 13.71459 12.76208 10.81923 11.53612 10.13377 10.43053 10.23193 9.694115 9.626987 9.374685 9.270073 9.114141 9.14038 9.032728 8.902119 8.942383 8.672675
25.38262 13.38605 14.8356 20.40041 26.01928 25.48057 17.49077 13.79619 13.014 10.44904 11.66904 9.762179 10.64586 10.1455 9.802798 9.62978 9.478968 9.245587 8.869559 9.19227 8.963789 8.72923 8.594576 8.61386
25.39624 12.14785 14.2581 19.0896 25.93938 25.69799 17.88586 13.74379 13.20764 9.85603 11.78116 9.502366 10.80447 9.846269 9.893407 9.8751 9.638045 9.473519 9.190859 8.588326 8.740058 9.035091 9.157508 9.160873
25.39575 13.16602 13.83908 17.92742 25.83628 25.89285 17.94353 13.71196 13.34838 9.700342 11.78662 9.779746 10.9355 9.672676 9.896886 9.838532 9.375263 9.16255 8.973556 9.010108 8.777596 8.674643 9.062126 9.211525
25.3924 13.86471 13.88087 17.79526 25.70607 26.06824 18.59229 13.82555 13.52382 9.76897 11.69692 10.40343 10.91232 9.763716 10.0799 9.795081 9.625959 9.292827 9.095508 8.83057 8.85857 9.041067 9.008874 8.958606
25.38689 13.47869 14.08497 17.71741 25.54159 26.22568 20.12139 14.19963 13.58492 10.6855 11.50563 10.82252 10.70544 9.939025 10.20654 9.581658 9.628597 9.514054 9.224993 9.022577 9.179948 9.230008 9.184273 8.987253
25.39572 10.8599 13.60977 17.17766 25.33295 26.36387 21.47556 14.45353 13.64482 11.28663 11.30426 11.1289 10.41729 10.09634 10.25901 9.609992 9.688148 9.621655 9.198067 9.073863 8.920963 8.850325 8.829373 8.668608
25.38815 12.44882 13.25772 16.3365 25.0682 26.47949 22.5416 14.46115 13.60225 11.8654 11.03887 11.38732 10.12286 10.37625 10.22439 9.657678 9.678977 9.410151 8.98861 9.107933 9.131783 8.408139 8.818702 9.012233
25.39475 13.61083 12.99741 15.86411 24.73421 26.56852 23.39189 14.665 13.55504 12.34036 10.74424 11.56615 9.850986 10.63515 10.0465 9.769161 9.729738 9.434759 8.89463 8.809294 9.231894 9.403095 9.04627 9.194419
25.39246 13.14976 13.37105 15.98677 24.31701 26.62762 24.07859 15.28078 13.49346 12.69593 10.18019 11.72155 9.344111 10.84595 9.769073 9.866045 9.835915 9.48774 9.143046 9.363906 9.050531 8.916459 8.609077 8.404105
25.39709 10.49969 13.00027 15.76365 23.80087 26.65528 24.63814 15.78207 13.41955 12.95716 9.597183 11.75687 9.102958 10.89925 9.544214 9.929428 9.954329 9.274131 9.182056 9.335903 9.091219 9.026561 8.973861 8.865469
25.40476 12.81212 12.58995 15.1809 23.16413 26.65202 25.09767 15.86973 13.2824 13.14867 9.163857 11.69363 9.856095 10.81384 9.621449 10.20201 9.762736 9.355642 9.345261 9.280268 8.974323 9.058703 9.051085 8.586198
25.39227 12.38201 12.70537 14.83122 22.37294 26.61972 25.47789 16.07757 13.22915 13.34908 8.822659 11.57742 10.52796 10.64509 9.839672 10.3342 9.488523 9.502357 9.518306 9.29292 8.913283 9.085662 8.861794 8.687978
25.40465 10.79937 12.57765 14.8058 21.36834 26.56048 25.79585 17.04343 13.35482 13.4809 9.609352 11.38088 10.93552 10.44044 10.09058 10.32454 9.641837 9.719406 9.418237 9.369368 9.016812 9.069472 9.04493 8.564624
25.39269 10.32977 12.3828 14.65666 20.07064 26.47523 26.06562 17.84056 13.3329 13.57142 10.36037 11.15125 11.25122 10.08686 10.36572 10.10395 9.627095 9.736663 9.100936 9.315399 8.911035 9.040281 9.003739 8.75481
25.40318 13.13178 11.81498 14.13262 18.60655 26.36274 26.29818 18.16405 13.30045 13.5937 11.33253 10.88959 11.49276 9.724923 10.56028 9.943349 9.791771 9.733048 9.134796 9.407298 9.274118 9.021625 9.163772 9.007115
25.39934 11.33392 12.17634 13.97306 17.99822 26.21798 26.50193 18.8454 13.74406 13.5025 12.00464 10.37248 11.67512 9.040639 10.77064 9.650483 9.92784 9.734184 9.398894 9.266025 9.278213 8.763576 8.782077 8.476363
25.39792 10.97407 12.19395 13.97546 17.77283 26.03134 26.68094 20.49142 14.11067 13.37916 12.48801 9.67083 11.80206 8.587571 10.94581 9.411396 10.08683 9.719779 9.523563 9.37726 9.089842 8.897139 8.768185 8.619372
25.38512 11.21369 11.90777 13.76455 17.06482 25.7874 26.83533 21.96497 14.10946 13.25149 12.8101 8.842713 11.81082 9.582809 10.85173 9.56566 10.16637 9.236102 9.315321 9.478457 9.173648 9.059334 8.94195 8.756848
25.39313 12.22904 11.79058 13.41159 16.22705 25.46511 26.96134 23.11126 14.5002 13.13788 13.04379 8.523494 11.61214 10.35582 10.56667 9.81172 10.22126 9.322379 9.529746 9.431326 8.95977 9.195964 9.429123 8.96103
25.39145 12.10827 12.0283 13.36568 16.13785 25.03592 27.05349 24.01527 15.13233 12.99253 13.23919 8.635099 11.43096 10.82514 10.44325 10.26044 9.988782 9.284991 9.468534 9.671181 9.001472 8.924876 9.130087 9.189729
25.40082 11.70254 11.62782 13.21703 15.89717 24.45942 27.10648 24.73969 15.20656 12.77705 13.40029 9.136568 11.20642 11.18341 10.09956 10.54405 9.792101 9.524915 9.710972 9.558682 9.291119 8.94125 9.138536 8.542342
25.39538 13.18281 10.83587 12.70127 15.20383 23.6747 27.11683 25.32512 15.53311 12.77924 13.53135 9.925284 10.89513 11.41596 9.648012 10.75599 9.738762 9.788702 9.675976 9.19371 9.213122 9.212561 9.232891 8.64039
25.39835 11.4595 11.45932 12.72565 14.99607 22.58523 27.08455 25.79824 16.44048 12.81807 13.51851 11.16206 10.38372 11.5845 8.717129 10.82312 9.668043 10.25313 9.790008 9.34961 9.262219 9.090082 9.095958 8.917315
25.3992 11.39531 11.27944 12.7032 14.92153 21.05106 27.01375 26.18005 16.7182 12.79441 13.47517 11.93377 9.662321 11.81005 7.939085 10.83689 9.301044 10.21876 9.734275 9.396607 9.320921 9.316814 9.034009 8.943901
25.39301 12.34765 11.04485 12.45315 14.43327 19.32409 26.91016 26.49008 17.06933 13.22958 13.32867 12.41799 8.470423 11.74444 9.420547 10.71906 9.591082 10.25519 9.512598 9.483331 9.266434 8.877497 8.661476 8.819108
25.38788 11.73516 11.23995 12.2956 14.19154 18.82068 26.77568 26.74659 18.43301 13.5085 13.16805 12.78078 8.253699 11.63104 10.35254 10.46461 9.984721 10.10212 9.439977 9.650408 9.302923 8.87884 8.937749 9.221094
25.39198 11.29051 10.90401 12.23811 14.1132 18.11719 26.60219 26.96573 19.15473 13.59607 13.0086 13.04039 8.444627 11.42235 10.82648 10.20272 10.28867 9.844623 9.41747 9.577289 9.437025 9.126613 9.351392 9.251872
25.39025 12.92475 10.43881 11.79169 13.64253 16.91122 26.3683 27.15821 20.06217 14.18076 12.77268 13.25114 8.497205 11.18721 11.1804 9.843991 10.54145 9.7145 9.582467 9.553921 9.372896 9.32786 8.960086 9.024402
25.38977 10.84383 11.12249 11.97418 13.56972 16.81125 26.03967 27.32385 22.04198 14.3807 12.44584 13.4102 8.831858 10.82101 11.4206 9.105699 10.64409 9.329636 9.796351 9.945902 9.454774 9.397694 9.238239 8.779975
25.39284 11.89882 10.31477 11.70415 13.37498 16.30475 25.57321 27.45031 23.62535 14.64373 12.32201 13.51306 10.18905 10.26978 11.55661 8.041362 10.87954 9.129904 9.992952 9.63693 9.316474 9.269462 9.168614 8.907243
25.38806 12.24847 10.51309 11.47697 13.022 15.56868 24.92313 27.52242 24.74959 15.34945 12.10645 13.51373 11.31404 9.361758 11.7979 8.037827 10.75723 9.309247 10.12249 9.097322 9.301515 9.412771 9.267547 8.886382
25.39465 10.20325 10.38561 11.46918 12.95047 15.55509 24.04658 27.53413 25.5533 15.46525 12.37213 13.40425 12.09511 8.069228 11.71304 9.535841 10.50912 9.722877 10.27901 9.264794 9.536005 9.50345 8.8305 8.862941
25.39323 12.75432 9.564649 11.021 12.63566 14.94484 22.89631 27.49205 26.13497 16.20246 12.66662 13.23433 12.58181 7.982838 11.51854 10.4286 10.2934 10.18298 10.04224 9.481591 9.74062 9.453218 9.163432 9.163871
25.39714 7.789706 9.679388 10.85249 12.37431 14.67008 21.38643 27.40782 26.56757 16.88902 12.77263 13.0323 12.87965 8.162897 11.28995 10.85068 9.953865 10.42422 9.803104 9.659452 9.606634 9.128386 9.251111 9.366357
25.38697 9.878863 10.27527 11.3014 12.49571 14.51772 19.58002 27.28844 26.90281 17.25132 13.24171 12.77515 13.13947 8.173211 11.04728 11.19791 9.449917 10.66798 9.450585 9.844444 9.784229 9.424738 9.304177 8.991207
25.39441 10.97782 9.761937 10.70426 12.05827 13.99293 18.65778 27.13207 27.1743 18.69637 13.31063 12.46916 13.325 8.152137 10.61272 11.41027 8.763468 11.05791 9.153708 10.14808 9.452844 9.1348 8.947744 8.85778
25.39055 10.6653 9.932255 10.88813 12.07134 13.96241 17.80698 26.92521 27.40325 19.56342 13.82563 11.99313 13.47707 9.117208 9.962461 11.60508 7.231112 10.84451 9.184261 10.13769 9.140426 9.227799 9.276782 9.286122
25.39395 11.77176 9.716299 10.52641 11.78009 13.49872 16.79408 26.63661 27.60093 21.23021 14.06032 11.6745 13.53437 10.80172 8.710612 11.76942 8.540421 10.68507 9.692649 10.06138 9.186681 9.551732 9.29074 9.274199
25.38966 8.620667 9.561668 10.52952 11.64857 13.39908 16.57313 26.21651 27.76248 23.21864 14.46805 11.74975 13.42699 11.86008 7.893573 11.66198 10.04757 10.35929 10.05721 9.939523 9.399005 9.642406 9.380163 9.079967
25.39335 11.93747 9.278503 10.23127 11.45848 13.05751 15.71358 25.59802 27.87026 24.63966 14.95105 11.93128 13.24736 12.44058 7.609775 11.43241 10.62196 9.969308 10.3026 9.670509 9.66452 9.912711 9.172092 9.126786
25.39293 9.251123 9.77851 10.38592 11.39443 12.93486 15.57506 24.68438 27.90949 25.63485 15.24442 12.21396 13.00031 12.77396 7.537259 11.2098 11.03398 9.492985 10.52345 9.520593 9.887691 9.424563 9.336003 9.385068
25.39348 11.45655 9.450672 10.357 11.31556 12.71024 14.95603 23.31774 27.87861 26.34176 16.02759 12.37887 12.75092 13.05495 7.669878 10.90534 11.3627 8.797594 10.83234 9.091355 10.01253 9.3844 9.430385 9.277229
25.39263 7.424523 8.898629 9.806354 10.89184 12.42037 14.74526 21.32289 27.79004 26.85083 16.32501 12.79467 12.39951 13.24821 8.116926 10.45524 11.62327 7.647385 10.82492 8.964593 9.945512 9.200193 9.235236 9.311338
25.39305 11.70811 9.169433 10.0785 11.00682 12.3023 14.28629 19.74532 27.65992 27.22758 17.47718 12.94993 11.86431 13.42561 8.93996 9.465794 11.76136 7.576023 10.61887 9.578827 9.936003 9.269413 9.600918 9.305164
25.39201 8.302985 9.114309 9.767797 10.70667 12.06497 14.08333 18.62179 27.49034 27.52183 17.99552 13.40037 11.3165 13.49113 10.67342 7.942401 11.64852 9.404872 10.30346 9.956794 9.859705 9.305886 9.461892 8.93665
25.39616 9.485378 9.089854 9.886886 10.73024 11.91256 13.68232 17.45058 27.26279 27.7652 19.7374 13.60618 11.17832 13.41471 11.8585 7.2311 11.45415 10.38023 10.09121 10.29821 9.652331 9.621033 9.696717 9.399599
25.39701 10.12578 9.1906 9.689177 10.51984 11.74023 13.52286 16.91914 26.93453 27.97427 21.02431 14.09931 11.40947 13.2386 12.43565 7.195565 11.37024 10.97788 9.491202 10.39382 9.362895 9.803859 9.524618 9.203852
25.39065 11.62103 8.756125 9.477743 10.38884 11.52554 13.1279 16.13109 26.41845 28.14648 23.32856 14.43159 11.6115 12.99983 12.80206 7.69707 10.95787 11.17051 8.829436 10.65847 9.205196 10.14746 9.38579 9.388907
25.3955 10.84752 8.792562 9.392868 10.21436 11.37372 13.00202 15.69574 25.59359 28.24888 25.09568 14.94092 11.92532 12.69247 13.04221 7.692672 10.5419 11.39976 7.944696 10.74874 8.871852 9.934642 9.040377 9.181849
25.38783 11.24868 9.052888 9.396246 10.21963 11.23713 12.66914 15.23739 24.35388 28.2563 26.20521 15.494 12.10807 12.26493 13.25512 8.015066 9.721652 11.58516 7.661808 10.4218 9.310007 10.10927 9.312395 9.525958
25.39352 11.23325 8.18042 9.057845 9.877741 10.99268 12.48392 14.70842 22.60999 28.18518 26.90794 16.01323 12.50192 11.64364 13.46231 8.779012 8.336069 11.67826 9.221161 10.34657 9.98944 9.845531 9.35046 9.680387
25.39195 9.140487 9.059326 9.306144 10.01284 10.96115 12.28265 14.51055 20.45776 28.0636 27.38154 16.96865 12.68942 10.83249 13.45161 10.80073 7.50154 11.42411 10.05992 10.00919 10.29331 9.375909 9.267025 10.12802
25.39283 11.63225 7.80241 8.614532 9.568792 10.61794 11.97198 13.93372 19.12489 27.90082 27.72964 17.67187 13.08636 10.86543 13.31865 11.94421 7.703676 11.29086 10.78771 9.562213 10.47833 9.32577 9.917489 9.387947
25.39704 10.48662 8.399567 8.896224 9.578027 10.55934 11.8593 13.78492 17.62442 27.68391 28.00599 19.31479 13.45021 10.96279 13.12877 12.48155 7.725416 11.07037 11.16652 8.990263 10.79457 8.969749 10.13199 8.994781
25.38908 10.87343 8.748537 8.981209 9.677258 10.521 11.65406 13.44188 17.03849 27.37576 28.23714 20.90114 13.72584 11.22096 12.92475 12.88153 7.677142 10.54401 11.27745 7.996792 10.63179 8.87534 10.06192 8.60385
25.39367 11.22066 8.26867 8.995963 9.543327 10.35951 11.49655 13.08665 16.19089 26.89518 28.42901 23.26255 14.30239 11.47383 12.55513 13.12341 7.834759 9.955585 11.55775 7.533898 10.63999 9.663215 10.10163 9.219362
25.39642 9.599471 8.498966 8.73507 9.355002 10.19654 11.30484 12.93717 15.55079 26.07908 28.55852 25.1111 14.68052 11.66453 12.0313 13.31994 7.914319 8.38732 11.64284 8.796171 10.22832 9.883939 9.692562 9.256657
25.39367 10.16908 7.674166 8.290555 9.044679 9.923223 11.00951 12.57286 15.23768 24.62391 28.58647 26.3688 15.18729 12.00385 11.15844 13.48659 9.449435 7.953401 11.47594 9.963059 9.895932 10.23273 9.744529 9.74754
25.39505 11.67933 6.544823 7.76744 8.674165 9.635606 10.80167 12.2627 14.60542 22.26552 28.51015 27.17687 16.02146 12.3226 10.37652 13.43566 11.37394 7.37083 11.25638 10.58098 9.366466 10.39244 9.371986 9.803345
25.39614 9.870395 7.947427 8.302985 8.867916 9.696465 10.73532 12.15896 14.1999 20.43287 28.37624 27.69063 16.64081 12.55636 10.39028 13.23711 12.19189 7.36186 10.95273 10.98301 8.636997 10.55655 8.80361 9.709915
25.39404 9.608464 8.13715 8.313739 8.955525 9.660022 10.58485 11.91691 13.97874 18.5451 28.20039 28.05437 17.68823 12.95235 10.65401 12.99104 12.62072 7.72286 10.60034 11.24379 7.480002 10.30079 8.817954 9.752146
25.39353 10.98993 7.192304 7.798724 8.523185 9.313427 10.30643 11.58066 13.54238 17.48501 27.96262 28.33959 19.31971 13.37888 10.9111 12.68895 12.94648 7.771276 9.936911 11.44094 7.559737 10.52922 9.781414 9.893038
25.39484 10.74353 7.664224 8.245938 8.659761 9.366634 10.27968 11.46852 13.14053 16.79412 27.61593 28.57609 21.21401 13.70451 11.08888 12.26805 13.16082 7.920091 8.741113 11.56809 8.614607 10.05023 9.845473 9.584752
25.3952 8.627831 7.932775 8.080894 8.610788 9.289057 10.14242 11.31842 12.92895 15.9065 27.0432 28.77049 23.68413 14.12465 11.36238 11.51749 13.35676 8.339801 8.008994 11.42614 9.946846 9.889275 10.24657 8.514298
25.39439 9.090196 6.737612 7.354279 8.07781 8.891042 9.800032 11.01107 12.68188 15.20478 25.95255 28.88987 25.64782 14.75306 11.66314 10.209 13.44408 10.68221 7.75351 11.20602 10.55494 9.438339 10.38043 8.574641
25.39125 11.25329 6.806694 7.28998 8.054334 8.780321 9.669956 10.77501 12.35655 14.83431 23.84829 28.8754 26.94446 15.40336 11.9887 10.03691 13.26827 11.84477 8.054001 10.9717 10.96832 8.555928 10.24343 8.708538
25.3952 11.21714 5.845804 6.787416 7.596877 8.471261 9.440975 10.55536 12.00439 14.45516 21.46783 28.76059 27.68685 16.01651 12.24607 10.18482 13.08161 12.48303 8.228065 10.61665 11.25366 8.003961 10.58327 9.204256
25.39419 9.97048 7.220875 7.689921 8.048877 8.702988 9.498979 10.51397 11.80348 13.98572 19.23778 28.60122 28.14866 16.8695 12.54532 10.34384 12.80404 12.83611 7.889399 10.01953 11.48686 8.103563 10.31023 9.646062
25.39473 8.330555 7.777743 7.826451 8.289393 8.824086 9.505386 10.43703 11.66361 13.51855 17.86479 28.38935 28.48586 18.27849 12.92808 10.55355 12.40854 13.07215 7.714967 8.675978 11.54422 8.992141 10.11903 10.07504
25.39162 9.03912 7.73458 7.785523 8.255892 8.764335 9.384748 10.27323 11.48537 13.14469 16.98039 28.09088 28.75492 20.21802 13.38722 10.78635 11.78823 13.29113 7.757352 8.002884 11.33046 9.850041 9.7013 10.21216
25.39325 9.712454 6.639585 7.144888 7.677936 8.281572 9.015732 9.942518 11.20621 12.84312 16.18772 27.61889 28.97877 22.61649 13.88093 11.09691 10.54886 13.43762 9.977577 8.039506 10.99101 10.38766 9.159881 10.49822
25.39149 10.82014 6.569227 6.861944 7.511952 8.109405 8.829951 9.738983 10.95371 12.58078 15.44671 26.74204 29.14309 25.16562 14.39955 11.41411 9.578781 13.30102 11.58474 8.13674 10.91568 10.97781 8.450768 10.33928
25.39344 10.64047 5.984795 6.534686 7.152894 7.823585 8.598401 9.513368 10.68982 12.31607 14.79096 24.94745 29.17978 26.8417 14.95716 11.72093 9.757715 13.02758 12.23307 8.327576 10.49402 11.20908 8.577643 10.31422
25.39408 11.11244 5.21432 6.168289 6.854764 7.595154 8.43082 9.327142 10.44791 12.04287 14.24384 22.2623 29.08129 27.7814 15.61685 12.03068 9.930234 12.79525 12.67847 7.890158 9.817462 11.42898 8.365617 10.2777
25.39202 8.828473 7.145768 7.622215 7.806074 8.223385 8.781716 9.475601 10.40291 11.84016 13.80178 19.76007 28.92521 28.32084 16.4663 12.3535 10.15693 12.43184 12.96421 7.712798 8.318481 11.37266 8.962286 9.392389
25.39589 10.82244 6.239038 6.778635 7.106415 7.676603 8.356074 9.138875 10.09989 11.53531 13.38584 18.03846 28.71769 28.69423 17.66333 12.71349 10.37747 11.87561 13.18284 8.169359 7.969197 11.39324 10.14456 8.621069
25.39645 10.77233 5.931324 6.367038 6.784081 7.424591 8.124977 8.943243 9.894213 11.26738 13.01921 16.88655 28.42727 28.98402 19.50719 13.11888 10.64791 10.73511 13.41674 9.58146 8.434292 10.9909 10.53405 9.0092
25.39591 10.61124 6.276302 6.725314 7.025312 7.525676 8.154601 8.883856 9.755839 11.0506 12.6844 16.01592 27.97216 29.22237 22.16374 13.57975 10.87773 9.376094 13.26407 11.3173 7.354141 10.64834 10.81498 8.048265
25.3912 8.130305 6.763392 7.18414 7.360906 7.743001 8.274958 8.893733 9.687943 10.87953 12.37963 15.30686 27.10591 29.40565 25.03781 14.1033 11.1913 9.400677 13.05591 12.16242 8.2497 10.33555 11.21182 8.536982
25.39535 10.71752 5.202735 5.674926 6.222646 6.897706 7.634897 8.42588 9.313105 10.57407 12.03487 14.68455 25.33784 29.45079 27.02379 14.72376 11.462 9.576531 12.81832 12.6264 8.270387 9.499403 11.34488 8.073051
25.39261 8.060112 6.379651 6.804731 6.984161 7.391845 7.905588 8.531066 9.320446 10.44166 11.77781 14.15352 22.5232 29.3504 28.02977 15.47719 11.79146 9.874359 12.44151 12.90475 8.144958 8.369903 11.39948 9.385494
25.39389 8.930271 6.603449 7.072587 7.216211 7.561055 8.001204 8.530456 9.267945 10.2949 11.52403 13.6724 19.80739 29.18673 28.58979 16.42966 12.09701 10.09092 11.9169 13.14394 7.850308 7.714192 11.08295 10.06944
25.39423 9.493579 6.286148 6.817085 7.006487 7.339575 7.800827 8.349975 9.097334 10.06532 11.28051 13.23414 17.88873 28.9677 28.97144 17.71176 12.4901 10.33791 10.74466 13.28647 9.13166 8.498666 10.86947 10.60338
25.39533 8.441597 5.702048 6.259866 6.560413 6.9474 7.457028 8.066579 8.847219 9.784683 11.04121 12.83325 16.63787 28.65701 29.26548 19.57741 12.90775 10.47743 9.248651 13.1779 11.24687 8.395916 10.49361 10.82182
25.39554 5.010352 5.215635 5.478734 6.005132 6.530851 7.103768 7.808163 8.620622 9.49804 10.80548 12.48969 15.7574 28.1552 29.50632 22.29512 13.42417 10.74184 9.149988 13.0099 12.09741 8.487741 10.13058 11.10091
25.39308 6.728384 6.368806 6.339997 6.714892 7.075587 7.476359 8.021311 8.660121 9.434615 10.6399 12.21153 15.06934 27.10415 29.68914 25.37743 14.0282 11.03112 9.426717 12.74352 12.53742 8.780671 9.504362 11.20913
25.3965 9.962044 5.848419 5.899266 6.219161 6.665694 7.153049 7.693129 8.356776 9.241917 10.33799 11.89656 14.45346 24.86841 29.69902 27.49796 14.70006 11.31726 9.4571 12.35907 12.8265 8.280419 8.548094 11.26487
25.39348 9.837029 6.074376 6.545005 6.660047 6.962574 7.358819 7.813959 8.394919 9.22714 10.14035 11.60577 13.87758 21.82346 29.57105 28.42744 15.42721 11.70942 9.757011 11.82256 13.0687 8.344014 8.971826 10.85925
25.39616 7.66081 5.536566 5.818714 6.127999 6.427118 6.90408 7.404124 8.113817 8.901797 9.896574 11.2474 13.35622 19.16378 29.38811 28.94657 16.36225 12.04661 9.934801 10.66899 13.23589 9.321173 8.289311 10.578
25.39317 6.548136 6.238544 6.206706 6.555174 6.851414 7.18173 7.627229 8.178882 8.826127 9.826376 11.03646 12.96248 17.44212 29.14021 29.30885 17.84695 12.42279 10.13033 9.154135 13.15591 11.23068 8.018407 9.322872
25.39464 9.526473 5.349868 5.722674 5.848371 6.27978 6.706903 7.215951 7.793292 8.60259 9.509521 10.78716 12.58374 16.19171 28.77547 29.59143 20.1919 12.89938 10.40601 9.086123 12.9635 12.10402 8.399249 8.115746
25.39489 6.900651 5.717015 6.149593 6.26402 6.525858 6.89699 7.294518 7.845399 8.577667 9.330828 10.53438 12.20247 15.22628 28.13513 29.82292 23.3842 13.45026 10.62598 9.203753 12.62517 12.4444 8.461801 8.413981
25.39444 6.585339 5.616796 5.628093 5.977717 6.298108 6.635653 7.092598 7.663805 8.278466 9.224275 10.26847 11.85002 14.59918 26.54948 29.96852 26.48663 13.98981 10.96883 9.720801 12.22382 12.74777 8.420835 8.853937
25.39328 9.166204 5.355229 5.360714 5.637752 5.987251 6.399713 6.870164 7.405295 8.128 8.972618 10.0661 11.5526 13.99156 23.43262 29.89875 28.18707 14.71665 11.30095 9.694644 11.63052 12.99867 8.414451 8.704899
25.39395 9.211708 4.729653 4.821526 5.230456 5.599786 6.037741 6.567583 7.195518 7.912862 8.709632 9.790423 11.21089 13.40349 20.24129 29.73744 28.91551 15.6984 11.65026 9.593091 10.23598 13.18614 9.407353 8.488461
25.39198 6.059479 5.373656 5.376691 5.687725 5.998209 6.353787 6.773111 7.265417 7.907587 8.708107 9.637274 10.95882 13.01328 17.87422 29.52157 29.36066 16.80356 12.02192 10.00303 8.952479 13.04781 11.30949 8.678006
25.39395 9.068792 5.445178 5.909282 5.97247 6.233187 6.539448 6.90586 7.311459 7.937879 8.530205 9.494306 10.70614 12.53214 16.56237 29.21855 29.68676 18.785 12.4844 10.19204 9.135778 12.81355 12.07218 8.881263
25.39408 6.837213 5.692661 5.604218 5.953091 6.188729 6.50216 6.853444 7.222213 7.711873 8.464505 9.264201 10.43897 12.1899 15.44039 28.73654 29.94721 21.77916 12.91464 10.28617 8.804447 12.54166 12.49033 8.370256
25.393 9.804167 5.114905 5.607141 5.683089 5.967355 6.267506 6.63746 7.041984 7.613036 8.173422 9.103513 10.20424 11.78505 14.69491 27.7221 30.15152 25.33221 13.54656 10.66986 9.573904 12.02359 12.65319 8.784128
25.39316 7.310941 3.171319 3.531911 3.921892 4.562146 5.178815 5.807542 6.384023 7.020895 7.902781 8.750008 9.918304 11.45531 13.97022 25.05706 30.17872 27.86279 14.15844 11.00974 9.796109 11.37465 12.94318 8.705699
25.39214 9.466416 4.766158 5.252964 5.383954 5.655123 6.018968 6.339795 6.717179 7.281072 7.854917 8.698115 9.709486 11.12261 13.46861 21.47232 30.03626 28.89217 15.08547 11.25627 9.398794 9.767819 13.05902 9.960008 ]

View File

@ -0,0 +1 @@
1 test.wav

View File

@ -0,0 +1,119 @@
1 [
15.00744 21.17303 25.52861 24.46438 16.69938 13.84804 11.2087 11.79517 10.3911 10.44909 10.30123 9.874329 9.699727 9.37509 9.347578 9.355928 9.107419 9.00323 9.031268 8.839916 9.082197 8.744139 8.40221
13.87853 20.56466 25.49562 24.69662 16.9541 13.91633 11.33638 11.84495 10.25656 10.58718 10.34841 9.747416 9.612316 9.39642 9.06955 9.117751 8.913527 8.842571 8.59212 8.831518 8.622513 8.86048 8.976251
13.94753 19.94101 25.4494 24.90511 17.00044 13.92074 11.66673 11.82172 10.34108 10.72575 10.09829 9.810879 9.676199 9.421767 9.124647 8.774353 9.086291 8.74897 8.469534 8.670973 8.772754 8.740549 8.982433
14.46999 19.35756 25.38992 25.09344 16.9938 13.9162 11.93417 11.74966 10.509 10.89407 10.06301 9.909191 9.719013 9.472373 9.279746 8.977654 8.786046 9.155951 8.680856 8.915503 9.044468 8.622409 8.614415
14.86701 18.83547 25.31638 25.26457 17.58689 13.96361 12.28831 11.64583 10.77008 10.93227 9.965744 9.983705 9.794715 9.683822 9.214636 9.22319 9.027518 9.08751 9.00797 8.690693 8.636527 8.534263 8.608916
14.39263 18.34291 25.22669 25.42082 18.7565 14.08459 12.57443 11.49681 10.99936 10.84389 10.00922 10.07006 9.847752 9.723428 9.365665 9.261901 8.973814 8.559562 8.594522 8.591494 8.902281 8.581494 8.84674
13.61556 17.75853 25.11799 25.56325 19.88541 14.27314 12.8651 11.33338 11.27241 10.69851 10.1366 10.13036 9.733146 9.577723 9.381716 9.248396 9.189224 8.688073 8.67134 8.974331 8.558913 8.680233 8.567945
12.70632 17.03329 24.98648 25.69186 20.8378 14.4026 13.10278 11.17627 11.47603 10.54565 10.22696 10.1561 9.839836 9.555802 9.335251 9.099536 9.089512 8.861704 8.978891 8.57215 8.816164 8.740176 8.932856
13.09457 16.32271 24.82719 25.80641 21.64091 14.35672 13.28589 10.87103 11.64153 10.29185 10.38676 10.24745 9.539135 9.469715 9.396955 9.291441 9.129187 9.020734 8.797786 9.009113 8.906702 8.755951 9.0032
14.06665 16.02923 24.63424 25.90593 22.32723 14.31126 13.35114 10.60129 11.75252 10.03298 10.56536 10.33102 9.686008 9.650635 9.584603 9.3017 9.158677 8.917218 8.604981 8.810085 8.729281 8.944183 8.883796
13.76552 16.17645 24.40143 25.98881 22.92096 14.51278 13.519 10.32357 11.80536 9.94855 10.81537 9.988535 9.792647 9.714604 9.450595 9.331737 9.288633 8.835147 8.742838 8.838379 8.664718 8.639749 8.949137
14.44698 16.13566 24.12027 26.05389 23.43876 15.07109 13.7058 10.467 11.8015 10.10384 10.89065 9.880134 9.865986 9.778766 9.492803 9.437282 9.25561 9.110746 8.765221 8.912471 8.568149 8.348438 8.390752
13.59612 15.84653 23.77955 26.1 23.89321 15.48908 13.77098 10.92392 11.6539 10.49951 10.93642 9.76797 9.976171 9.902955 9.547713 9.3839 9.268895 9.086465 8.846323 9.010743 8.74517 8.780628 8.61915
12.42751 15.24208 23.36539 26.12598 24.29347 15.65469 13.78163 11.5635 11.49901 10.84122 10.83632 9.919022 10.06573 9.811605 9.432329 9.192472 9.299401 9.084225 8.756673 8.669268 8.81456 8.906392 8.540642
13.4067 14.73229 22.85692 26.13116 24.64714 15.57566 13.7268 12.04653 11.3495 11.15552 10.63575 10.06661 10.2592 9.813733 9.597858 9.504023 9.314473 8.994366 8.889587 8.720882 8.823824 8.691456 8.598278
14.13769 14.69011 22.22506 26.11513 24.95954 15.84595 13.71551 12.48036 11.14894 11.39038 10.3956 10.22951 10.25367 9.664195 9.491752 9.236977 9.344962 9.222926 9.244186 9.266691 9.292159 8.896353 8.74614
12.76465 14.89703 21.4271 26.07779 25.23589 16.70513 13.71459 12.76208 10.81923 11.53612 10.13377 10.43053 10.23193 9.694115 9.626987 9.374685 9.270073 9.114141 9.14038 9.032728 8.902119 8.942383 8.672675
13.38605 14.8356 20.40041 26.01928 25.48057 17.49077 13.79619 13.014 10.44904 11.66904 9.762179 10.64586 10.1455 9.802798 9.62978 9.478968 9.245587 8.869559 9.19227 8.963789 8.72923 8.594576 8.61386
12.14785 14.2581 19.0896 25.93938 25.69799 17.88586 13.74379 13.20764 9.85603 11.78116 9.502366 10.80447 9.846269 9.893407 9.8751 9.638045 9.473519 9.190859 8.588326 8.740058 9.035091 9.157508 9.160873
13.16602 13.83908 17.92742 25.83628 25.89285 17.94353 13.71196 13.34838 9.700342 11.78662 9.779746 10.9355 9.672676 9.896886 9.838532 9.375263 9.16255 8.973556 9.010108 8.777596 8.674643 9.062126 9.211525
13.86471 13.88087 17.79526 25.70607 26.06824 18.59229 13.82555 13.52382 9.76897 11.69692 10.40343 10.91232 9.763716 10.0799 9.795081 9.625959 9.292827 9.095508 8.83057 8.85857 9.041067 9.008874 8.958606
13.47869 14.08497 17.71741 25.54159 26.22568 20.12139 14.19963 13.58492 10.6855 11.50563 10.82252 10.70544 9.939025 10.20654 9.581658 9.628597 9.514054 9.224993 9.022577 9.179948 9.230008 9.184273 8.987253
10.8599 13.60977 17.17766 25.33295 26.36387 21.47556 14.45353 13.64482 11.28663 11.30426 11.1289 10.41729 10.09634 10.25901 9.609992 9.688148 9.621655 9.198067 9.073863 8.920963 8.850325 8.829373 8.668608
12.44882 13.25772 16.3365 25.0682 26.47949 22.5416 14.46115 13.60225 11.8654 11.03887 11.38732 10.12286 10.37625 10.22439 9.657678 9.678977 9.410151 8.98861 9.107933 9.131783 8.408139 8.818702 9.012233
13.61083 12.99741 15.86411 24.73421 26.56852 23.39189 14.665 13.55504 12.34036 10.74424 11.56615 9.850986 10.63515 10.0465 9.769161 9.729738 9.434759 8.89463 8.809294 9.231894 9.403095 9.04627 9.194419
13.14976 13.37105 15.98677 24.31701 26.62762 24.07859 15.28078 13.49346 12.69593 10.18019 11.72155 9.344111 10.84595 9.769073 9.866045 9.835915 9.48774 9.143046 9.363906 9.050531 8.916459 8.609077 8.404105
10.49969 13.00027 15.76365 23.80087 26.65528 24.63814 15.78207 13.41955 12.95716 9.597183 11.75687 9.102958 10.89925 9.544214 9.929428 9.954329 9.274131 9.182056 9.335903 9.091219 9.026561 8.973861 8.865469
12.81212 12.58995 15.1809 23.16413 26.65202 25.09767 15.86973 13.2824 13.14867 9.163857 11.69363 9.856095 10.81384 9.621449 10.20201 9.762736 9.355642 9.345261 9.280268 8.974323 9.058703 9.051085 8.586198
12.38201 12.70537 14.83122 22.37294 26.61972 25.47789 16.07757 13.22915 13.34908 8.822659 11.57742 10.52796 10.64509 9.839672 10.3342 9.488523 9.502357 9.518306 9.29292 8.913283 9.085662 8.861794 8.687978
10.79937 12.57765 14.8058 21.36834 26.56048 25.79585 17.04343 13.35482 13.4809 9.609352 11.38088 10.93552 10.44044 10.09058 10.32454 9.641837 9.719406 9.418237 9.369368 9.016812 9.069472 9.04493 8.564624
10.32977 12.3828 14.65666 20.07064 26.47523 26.06562 17.84056 13.3329 13.57142 10.36037 11.15125 11.25122 10.08686 10.36572 10.10395 9.627095 9.736663 9.100936 9.315399 8.911035 9.040281 9.003739 8.75481
13.13178 11.81498 14.13262 18.60655 26.36274 26.29818 18.16405 13.30045 13.5937 11.33253 10.88959 11.49276 9.724923 10.56028 9.943349 9.791771 9.733048 9.134796 9.407298 9.274118 9.021625 9.163772 9.007115
11.33392 12.17634 13.97306 17.99822 26.21798 26.50193 18.8454 13.74406 13.5025 12.00464 10.37248 11.67512 9.040639 10.77064 9.650483 9.92784 9.734184 9.398894 9.266025 9.278213 8.763576 8.782077 8.476363
10.97407 12.19395 13.97546 17.77283 26.03134 26.68094 20.49142 14.11067 13.37916 12.48801 9.67083 11.80206 8.587571 10.94581 9.411396 10.08683 9.719779 9.523563 9.37726 9.089842 8.897139 8.768185 8.619372
11.21369 11.90777 13.76455 17.06482 25.7874 26.83533 21.96497 14.10946 13.25149 12.8101 8.842713 11.81082 9.582809 10.85173 9.56566 10.16637 9.236102 9.315321 9.478457 9.173648 9.059334 8.94195 8.756848
12.22904 11.79058 13.41159 16.22705 25.46511 26.96134 23.11126 14.5002 13.13788 13.04379 8.523494 11.61214 10.35582 10.56667 9.81172 10.22126 9.322379 9.529746 9.431326 8.95977 9.195964 9.429123 8.96103
12.10827 12.0283 13.36568 16.13785 25.03592 27.05349 24.01527 15.13233 12.99253 13.23919 8.635099 11.43096 10.82514 10.44325 10.26044 9.988782 9.284991 9.468534 9.671181 9.001472 8.924876 9.130087 9.189729
11.70254 11.62782 13.21703 15.89717 24.45942 27.10648 24.73969 15.20656 12.77705 13.40029 9.136568 11.20642 11.18341 10.09956 10.54405 9.792101 9.524915 9.710972 9.558682 9.291119 8.94125 9.138536 8.542342
13.18281 10.83587 12.70127 15.20383 23.6747 27.11683 25.32512 15.53311 12.77924 13.53135 9.925284 10.89513 11.41596 9.648012 10.75599 9.738762 9.788702 9.675976 9.19371 9.213122 9.212561 9.232891 8.64039
11.4595 11.45932 12.72565 14.99607 22.58523 27.08455 25.79824 16.44048 12.81807 13.51851 11.16206 10.38372 11.5845 8.717129 10.82312 9.668043 10.25313 9.790008 9.34961 9.262219 9.090082 9.095958 8.917315
11.39531 11.27944 12.7032 14.92153 21.05106 27.01375 26.18005 16.7182 12.79441 13.47517 11.93377 9.662321 11.81005 7.939085 10.83689 9.301044 10.21876 9.734275 9.396607 9.320921 9.316814 9.034009 8.943901
12.34765 11.04485 12.45315 14.43327 19.32409 26.91016 26.49008 17.06933 13.22958 13.32867 12.41799 8.470423 11.74444 9.420547 10.71906 9.591082 10.25519 9.512598 9.483331 9.266434 8.877497 8.661476 8.819108
11.73516 11.23995 12.2956 14.19154 18.82068 26.77568 26.74659 18.43301 13.5085 13.16805 12.78078 8.253699 11.63104 10.35254 10.46461 9.984721 10.10212 9.439977 9.650408 9.302923 8.87884 8.937749 9.221094
11.29051 10.90401 12.23811 14.1132 18.11719 26.60219 26.96573 19.15473 13.59607 13.0086 13.04039 8.444627 11.42235 10.82648 10.20272 10.28867 9.844623 9.41747 9.577289 9.437025 9.126613 9.351392 9.251872
12.92475 10.43881 11.79169 13.64253 16.91122 26.3683 27.15821 20.06217 14.18076 12.77268 13.25114 8.497205 11.18721 11.1804 9.843991 10.54145 9.7145 9.582467 9.553921 9.372896 9.32786 8.960086 9.024402
10.84383 11.12249 11.97418 13.56972 16.81125 26.03967 27.32385 22.04198 14.3807 12.44584 13.4102 8.831858 10.82101 11.4206 9.105699 10.64409 9.329636 9.796351 9.945902 9.454774 9.397694 9.238239 8.779975
11.89882 10.31477 11.70415 13.37498 16.30475 25.57321 27.45031 23.62535 14.64373 12.32201 13.51306 10.18905 10.26978 11.55661 8.041362 10.87954 9.129904 9.992952 9.63693 9.316474 9.269462 9.168614 8.907243
12.24847 10.51309 11.47697 13.022 15.56868 24.92313 27.52242 24.74959 15.34945 12.10645 13.51373 11.31404 9.361758 11.7979 8.037827 10.75723 9.309247 10.12249 9.097322 9.301515 9.412771 9.267547 8.886382
10.20325 10.38561 11.46918 12.95047 15.55509 24.04658 27.53413 25.5533 15.46525 12.37213 13.40425 12.09511 8.069228 11.71304 9.535841 10.50912 9.722877 10.27901 9.264794 9.536005 9.50345 8.8305 8.862941
12.75432 9.564649 11.021 12.63566 14.94484 22.89631 27.49205 26.13497 16.20246 12.66662 13.23433 12.58181 7.982838 11.51854 10.4286 10.2934 10.18298 10.04224 9.481591 9.74062 9.453218 9.163432 9.163871
7.789706 9.679388 10.85249 12.37431 14.67008 21.38643 27.40782 26.56757 16.88902 12.77263 13.0323 12.87965 8.162897 11.28995 10.85068 9.953865 10.42422 9.803104 9.659452 9.606634 9.128386 9.251111 9.366357
9.878863 10.27527 11.3014 12.49571 14.51772 19.58002 27.28844 26.90281 17.25132 13.24171 12.77515 13.13947 8.173211 11.04728 11.19791 9.449917 10.66798 9.450585 9.844444 9.784229 9.424738 9.304177 8.991207
10.97782 9.761937 10.70426 12.05827 13.99293 18.65778 27.13207 27.1743 18.69637 13.31063 12.46916 13.325 8.152137 10.61272 11.41027 8.763468 11.05791 9.153708 10.14808 9.452844 9.1348 8.947744 8.85778
10.6653 9.932255 10.88813 12.07134 13.96241 17.80698 26.92521 27.40325 19.56342 13.82563 11.99313 13.47707 9.117208 9.962461 11.60508 7.231112 10.84451 9.184261 10.13769 9.140426 9.227799 9.276782 9.286122
11.77176 9.716299 10.52641 11.78009 13.49872 16.79408 26.63661 27.60093 21.23021 14.06032 11.6745 13.53437 10.80172 8.710612 11.76942 8.540421 10.68507 9.692649 10.06138 9.186681 9.551732 9.29074 9.274199
8.620667 9.561668 10.52952 11.64857 13.39908 16.57313 26.21651 27.76248 23.21864 14.46805 11.74975 13.42699 11.86008 7.893573 11.66198 10.04757 10.35929 10.05721 9.939523 9.399005 9.642406 9.380163 9.079967
11.93747 9.278503 10.23127 11.45848 13.05751 15.71358 25.59802 27.87026 24.63966 14.95105 11.93128 13.24736 12.44058 7.609775 11.43241 10.62196 9.969308 10.3026 9.670509 9.66452 9.912711 9.172092 9.126786
9.251123 9.77851 10.38592 11.39443 12.93486 15.57506 24.68438 27.90949 25.63485 15.24442 12.21396 13.00031 12.77396 7.537259 11.2098 11.03398 9.492985 10.52345 9.520593 9.887691 9.424563 9.336003 9.385068
11.45655 9.450672 10.357 11.31556 12.71024 14.95603 23.31774 27.87861 26.34176 16.02759 12.37887 12.75092 13.05495 7.669878 10.90534 11.3627 8.797594 10.83234 9.091355 10.01253 9.3844 9.430385 9.277229
7.424523 8.898629 9.806354 10.89184 12.42037 14.74526 21.32289 27.79004 26.85083 16.32501 12.79467 12.39951 13.24821 8.116926 10.45524 11.62327 7.647385 10.82492 8.964593 9.945512 9.200193 9.235236 9.311338
11.70811 9.169433 10.0785 11.00682 12.3023 14.28629 19.74532 27.65992 27.22758 17.47718 12.94993 11.86431 13.42561 8.93996 9.465794 11.76136 7.576023 10.61887 9.578827 9.936003 9.269413 9.600918 9.305164
8.302985 9.114309 9.767797 10.70667 12.06497 14.08333 18.62179 27.49034 27.52183 17.99552 13.40037 11.3165 13.49113 10.67342 7.942401 11.64852 9.404872 10.30346 9.956794 9.859705 9.305886 9.461892 8.93665
9.485378 9.089854 9.886886 10.73024 11.91256 13.68232 17.45058 27.26279 27.7652 19.7374 13.60618 11.17832 13.41471 11.8585 7.2311 11.45415 10.38023 10.09121 10.29821 9.652331 9.621033 9.696717 9.399599
10.12578 9.1906 9.689177 10.51984 11.74023 13.52286 16.91914 26.93453 27.97427 21.02431 14.09931 11.40947 13.2386 12.43565 7.195565 11.37024 10.97788 9.491202 10.39382 9.362895 9.803859 9.524618 9.203852
11.62103 8.756125 9.477743 10.38884 11.52554 13.1279 16.13109 26.41845 28.14648 23.32856 14.43159 11.6115 12.99983 12.80206 7.69707 10.95787 11.17051 8.829436 10.65847 9.205196 10.14746 9.38579 9.388907
10.84752 8.792562 9.392868 10.21436 11.37372 13.00202 15.69574 25.59359 28.24888 25.09568 14.94092 11.92532 12.69247 13.04221 7.692672 10.5419 11.39976 7.944696 10.74874 8.871852 9.934642 9.040377 9.181849
11.24868 9.052888 9.396246 10.21963 11.23713 12.66914 15.23739 24.35388 28.2563 26.20521 15.494 12.10807 12.26493 13.25512 8.015066 9.721652 11.58516 7.661808 10.4218 9.310007 10.10927 9.312395 9.525958
11.23325 8.18042 9.057845 9.877741 10.99268 12.48392 14.70842 22.60999 28.18518 26.90794 16.01323 12.50192 11.64364 13.46231 8.779012 8.336069 11.67826 9.221161 10.34657 9.98944 9.845531 9.35046 9.680387
9.140487 9.059326 9.306144 10.01284 10.96115 12.28265 14.51055 20.45776 28.0636 27.38154 16.96865 12.68942 10.83249 13.45161 10.80073 7.50154 11.42411 10.05992 10.00919 10.29331 9.375909 9.267025 10.12802
11.63225 7.80241 8.614532 9.568792 10.61794 11.97198 13.93372 19.12489 27.90082 27.72964 17.67187 13.08636 10.86543 13.31865 11.94421 7.703676 11.29086 10.78771 9.562213 10.47833 9.32577 9.917489 9.387947
10.48662 8.399567 8.896224 9.578027 10.55934 11.8593 13.78492 17.62442 27.68391 28.00599 19.31479 13.45021 10.96279 13.12877 12.48155 7.725416 11.07037 11.16652 8.990263 10.79457 8.969749 10.13199 8.994781
10.87343 8.748537 8.981209 9.677258 10.521 11.65406 13.44188 17.03849 27.37576 28.23714 20.90114 13.72584 11.22096 12.92475 12.88153 7.677142 10.54401 11.27745 7.996792 10.63179 8.87534 10.06192 8.60385
11.22066 8.26867 8.995963 9.543327 10.35951 11.49655 13.08665 16.19089 26.89518 28.42901 23.26255 14.30239 11.47383 12.55513 13.12341 7.834759 9.955585 11.55775 7.533898 10.63999 9.663215 10.10163 9.219362
9.599471 8.498966 8.73507 9.355002 10.19654 11.30484 12.93717 15.55079 26.07908 28.55852 25.1111 14.68052 11.66453 12.0313 13.31994 7.914319 8.38732 11.64284 8.796171 10.22832 9.883939 9.692562 9.256657
10.16908 7.674166 8.290555 9.044679 9.923223 11.00951 12.57286 15.23768 24.62391 28.58647 26.3688 15.18729 12.00385 11.15844 13.48659 9.449435 7.953401 11.47594 9.963059 9.895932 10.23273 9.744529 9.74754
11.67933 6.544823 7.76744 8.674165 9.635606 10.80167 12.2627 14.60542 22.26552 28.51015 27.17687 16.02146 12.3226 10.37652 13.43566 11.37394 7.37083 11.25638 10.58098 9.366466 10.39244 9.371986 9.803345
9.870395 7.947427 8.302985 8.867916 9.696465 10.73532 12.15896 14.1999 20.43287 28.37624 27.69063 16.64081 12.55636 10.39028 13.23711 12.19189 7.36186 10.95273 10.98301 8.636997 10.55655 8.80361 9.709915
9.608464 8.13715 8.313739 8.955525 9.660022 10.58485 11.91691 13.97874 18.5451 28.20039 28.05437 17.68823 12.95235 10.65401 12.99104 12.62072 7.72286 10.60034 11.24379 7.480002 10.30079 8.817954 9.752146
10.98993 7.192304 7.798724 8.523185 9.313427 10.30643 11.58066 13.54238 17.48501 27.96262 28.33959 19.31971 13.37888 10.9111 12.68895 12.94648 7.771276 9.936911 11.44094 7.559737 10.52922 9.781414 9.893038
10.74353 7.664224 8.245938 8.659761 9.366634 10.27968 11.46852 13.14053 16.79412 27.61593 28.57609 21.21401 13.70451 11.08888 12.26805 13.16082 7.920091 8.741113 11.56809 8.614607 10.05023 9.845473 9.584752
8.627831 7.932775 8.080894 8.610788 9.289057 10.14242 11.31842 12.92895 15.9065 27.0432 28.77049 23.68413 14.12465 11.36238 11.51749 13.35676 8.339801 8.008994 11.42614 9.946846 9.889275 10.24657 8.514298
9.090196 6.737612 7.354279 8.07781 8.891042 9.800032 11.01107 12.68188 15.20478 25.95255 28.88987 25.64782 14.75306 11.66314 10.209 13.44408 10.68221 7.75351 11.20602 10.55494 9.438339 10.38043 8.574641
11.25329 6.806694 7.28998 8.054334 8.780321 9.669956 10.77501 12.35655 14.83431 23.84829 28.8754 26.94446 15.40336 11.9887 10.03691 13.26827 11.84477 8.054001 10.9717 10.96832 8.555928 10.24343 8.708538
11.21714 5.845804 6.787416 7.596877 8.471261 9.440975 10.55536 12.00439 14.45516 21.46783 28.76059 27.68685 16.01651 12.24607 10.18482 13.08161 12.48303 8.228065 10.61665 11.25366 8.003961 10.58327 9.204256
9.97048 7.220875 7.689921 8.048877 8.702988 9.498979 10.51397 11.80348 13.98572 19.23778 28.60122 28.14866 16.8695 12.54532 10.34384 12.80404 12.83611 7.889399 10.01953 11.48686 8.103563 10.31023 9.646062
8.330555 7.777743 7.826451 8.289393 8.824086 9.505386 10.43703 11.66361 13.51855 17.86479 28.38935 28.48586 18.27849 12.92808 10.55355 12.40854 13.07215 7.714967 8.675978 11.54422 8.992141 10.11903 10.07504
9.03912 7.73458 7.785523 8.255892 8.764335 9.384748 10.27323 11.48537 13.14469 16.98039 28.09088 28.75492 20.21802 13.38722 10.78635 11.78823 13.29113 7.757352 8.002884 11.33046 9.850041 9.7013 10.21216
9.712454 6.639585 7.144888 7.677936 8.281572 9.015732 9.942518 11.20621 12.84312 16.18772 27.61889 28.97877 22.61649 13.88093 11.09691 10.54886 13.43762 9.977577 8.039506 10.99101 10.38766 9.159881 10.49822
10.82014 6.569227 6.861944 7.511952 8.109405 8.829951 9.738983 10.95371 12.58078 15.44671 26.74204 29.14309 25.16562 14.39955 11.41411 9.578781 13.30102 11.58474 8.13674 10.91568 10.97781 8.450768 10.33928
10.64047 5.984795 6.534686 7.152894 7.823585 8.598401 9.513368 10.68982 12.31607 14.79096 24.94745 29.17978 26.8417 14.95716 11.72093 9.757715 13.02758 12.23307 8.327576 10.49402 11.20908 8.577643 10.31422
11.11244 5.21432 6.168289 6.854764 7.595154 8.43082 9.327142 10.44791 12.04287 14.24384 22.2623 29.08129 27.7814 15.61685 12.03068 9.930234 12.79525 12.67847 7.890158 9.817462 11.42898 8.365617 10.2777
8.828473 7.145768 7.622215 7.806074 8.223385 8.781716 9.475601 10.40291 11.84016 13.80178 19.76007 28.92521 28.32084 16.4663 12.3535 10.15693 12.43184 12.96421 7.712798 8.318481 11.37266 8.962286 9.392389
10.82244 6.239038 6.778635 7.106415 7.676603 8.356074 9.138875 10.09989 11.53531 13.38584 18.03846 28.71769 28.69423 17.66333 12.71349 10.37747 11.87561 13.18284 8.169359 7.969197 11.39324 10.14456 8.621069
10.77233 5.931324 6.367038 6.784081 7.424591 8.124977 8.943243 9.894213 11.26738 13.01921 16.88655 28.42727 28.98402 19.50719 13.11888 10.64791 10.73511 13.41674 9.58146 8.434292 10.9909 10.53405 9.0092
10.61124 6.276302 6.725314 7.025312 7.525676 8.154601 8.883856 9.755839 11.0506 12.6844 16.01592 27.97216 29.22237 22.16374 13.57975 10.87773 9.376094 13.26407 11.3173 7.354141 10.64834 10.81498 8.048265
8.130305 6.763392 7.18414 7.360906 7.743001 8.274958 8.893733 9.687943 10.87953 12.37963 15.30686 27.10591 29.40565 25.03781 14.1033 11.1913 9.400677 13.05591 12.16242 8.2497 10.33555 11.21182 8.536982
10.71752 5.202735 5.674926 6.222646 6.897706 7.634897 8.42588 9.313105 10.57407 12.03487 14.68455 25.33784 29.45079 27.02379 14.72376 11.462 9.576531 12.81832 12.6264 8.270387 9.499403 11.34488 8.073051
8.060112 6.379651 6.804731 6.984161 7.391845 7.905588 8.531066 9.320446 10.44166 11.77781 14.15352 22.5232 29.3504 28.02977 15.47719 11.79146 9.874359 12.44151 12.90475 8.144958 8.369903 11.39948 9.385494
8.930271 6.603449 7.072587 7.216211 7.561055 8.001204 8.530456 9.267945 10.2949 11.52403 13.6724 19.80739 29.18673 28.58979 16.42966 12.09701 10.09092 11.9169 13.14394 7.850308 7.714192 11.08295 10.06944
9.493579 6.286148 6.817085 7.006487 7.339575 7.800827 8.349975 9.097334 10.06532 11.28051 13.23414 17.88873 28.9677 28.97144 17.71176 12.4901 10.33791 10.74466 13.28647 9.13166 8.498666 10.86947 10.60338
8.441597 5.702048 6.259866 6.560413 6.9474 7.457028 8.066579 8.847219 9.784683 11.04121 12.83325 16.63787 28.65701 29.26548 19.57741 12.90775 10.47743 9.248651 13.1779 11.24687 8.395916 10.49361 10.82182
5.010352 5.215635 5.478734 6.005132 6.530851 7.103768 7.808163 8.620622 9.49804 10.80548 12.48969 15.7574 28.1552 29.50632 22.29512 13.42417 10.74184 9.149988 13.0099 12.09741 8.487741 10.13058 11.10091
6.728384 6.368806 6.339997 6.714892 7.075587 7.476359 8.021311 8.660121 9.434615 10.6399 12.21153 15.06934 27.10415 29.68914 25.37743 14.0282 11.03112 9.426717 12.74352 12.53742 8.780671 9.504362 11.20913
9.962044 5.848419 5.899266 6.219161 6.665694 7.153049 7.693129 8.356776 9.241917 10.33799 11.89656 14.45346 24.86841 29.69902 27.49796 14.70006 11.31726 9.4571 12.35907 12.8265 8.280419 8.548094 11.26487
9.837029 6.074376 6.545005 6.660047 6.962574 7.358819 7.813959 8.394919 9.22714 10.14035 11.60577 13.87758 21.82346 29.57105 28.42744 15.42721 11.70942 9.757011 11.82256 13.0687 8.344014 8.971826 10.85925
7.66081 5.536566 5.818714 6.127999 6.427118 6.90408 7.404124 8.113817 8.901797 9.896574 11.2474 13.35622 19.16378 29.38811 28.94657 16.36225 12.04661 9.934801 10.66899 13.23589 9.321173 8.289311 10.578
6.548136 6.238544 6.206706 6.555174 6.851414 7.18173 7.627229 8.178882 8.826127 9.826376 11.03646 12.96248 17.44212 29.14021 29.30885 17.84695 12.42279 10.13033 9.154135 13.15591 11.23068 8.018407 9.322872
9.526473 5.349868 5.722674 5.848371 6.27978 6.706903 7.215951 7.793292 8.60259 9.509521 10.78716 12.58374 16.19171 28.77547 29.59143 20.1919 12.89938 10.40601 9.086123 12.9635 12.10402 8.399249 8.115746
6.900651 5.717015 6.149593 6.26402 6.525858 6.89699 7.294518 7.845399 8.577667 9.330828 10.53438 12.20247 15.22628 28.13513 29.82292 23.3842 13.45026 10.62598 9.203753 12.62517 12.4444 8.461801 8.413981
6.585339 5.616796 5.628093 5.977717 6.298108 6.635653 7.092598 7.663805 8.278466 9.224275 10.26847 11.85002 14.59918 26.54948 29.96852 26.48663 13.98981 10.96883 9.720801 12.22382 12.74777 8.420835 8.853937
9.166204 5.355229 5.360714 5.637752 5.987251 6.399713 6.870164 7.405295 8.128 8.972618 10.0661 11.5526 13.99156 23.43262 29.89875 28.18707 14.71665 11.30095 9.694644 11.63052 12.99867 8.414451 8.704899
9.211708 4.729653 4.821526 5.230456 5.599786 6.037741 6.567583 7.195518 7.912862 8.709632 9.790423 11.21089 13.40349 20.24129 29.73744 28.91551 15.6984 11.65026 9.593091 10.23598 13.18614 9.407353 8.488461
6.059479 5.373656 5.376691 5.687725 5.998209 6.353787 6.773111 7.265417 7.907587 8.708107 9.637274 10.95882 13.01328 17.87422 29.52157 29.36066 16.80356 12.02192 10.00303 8.952479 13.04781 11.30949 8.678006
9.068792 5.445178 5.909282 5.97247 6.233187 6.539448 6.90586 7.311459 7.937879 8.530205 9.494306 10.70614 12.53214 16.56237 29.21855 29.68676 18.785 12.4844 10.19204 9.135778 12.81355 12.07218 8.881263
6.837213 5.692661 5.604218 5.953091 6.188729 6.50216 6.853444 7.222213 7.711873 8.464505 9.264201 10.43897 12.1899 15.44039 28.73654 29.94721 21.77916 12.91464 10.28617 8.804447 12.54166 12.49033 8.370256
9.804167 5.114905 5.607141 5.683089 5.967355 6.267506 6.63746 7.041984 7.613036 8.173422 9.103513 10.20424 11.78505 14.69491 27.7221 30.15152 25.33221 13.54656 10.66986 9.573904 12.02359 12.65319 8.784128
7.310941 3.171319 3.531911 3.921892 4.562146 5.178815 5.807542 6.384023 7.020895 7.902781 8.750008 9.918304 11.45531 13.97022 25.05706 30.17872 27.86279 14.15844 11.00974 9.796109 11.37465 12.94318 8.705699
9.466416 4.766158 5.252964 5.383954 5.655123 6.018968 6.339795 6.717179 7.281072 7.854917 8.698115 9.709486 11.12261 13.46861 21.47232 30.03626 28.89217 15.08547 11.25627 9.398794 9.767819 13.05902 9.960008 ]

Binary file not shown.

View File

@ -0,0 +1,197 @@
#!/usr/bin/env python3
#
# Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
import sys
from pathlib import Path
from typing import List
cur_dir = Path(__file__).resolve().parent
kaldi_feat_dir = cur_dir.parent.parent.parent
sys.path.insert(0, f"{kaldi_feat_dir}/build/lib")
import _kaldifeat
import numpy as np
import soundfile as sf
import torch
def read_ark_txt(filename) -> torch.Tensor:
test_data_dir = cur_dir / "test_data"
filename = test_data_dir / filename
features = []
with open(filename) as f:
for line in f:
if "[" in line:
continue
line = line.strip("").split()
data = [float(d) for d in line if d != "]"]
features.append(data)
ans = torch.tensor(features)
return ans
def read_wave() -> torch.Tensor:
test_data_dir = cur_dir / "test_data"
filename = test_data_dir / "test.wav"
with sf.SoundFile(filename) as sf_desc:
sampling_rate = sf_desc.samplerate
assert sampling_rate == 16000
data = sf_desc.read(dtype=np.float32, always_2d=False)
data *= 32768
return torch.from_numpy(data)
def test_and_benchmark_default_parameters():
devices = [torch.device("cpu")]
if torch.cuda.is_available():
devices.append(torch.device("cuda", 0))
for device in devices:
fbank_opts = _kaldifeat.FbankOptions()
fbank_opts.frame_opts.dither = 0
fbank_opts.set_device(device)
fbank = _kaldifeat.Fbank(fbank_opts)
data = read_wave().to(device)
ans, elapsed_seconds = _kaldifeat._compute_with_elapsed_time(
data, fbank
)
expected = read_ark_txt("test.txt")
assert torch.allclose(ans.cpu(), expected, rtol=1e-2)
print(f"elapsed seconds {device}:", elapsed_seconds)
def test_use_energy_htk_compat_true():
devices = [torch.device("cpu")]
if torch.cuda.is_available():
devices.append(torch.device("cuda", 0))
for device in devices:
fbank_opts = _kaldifeat.FbankOptions()
fbank_opts.frame_opts.dither = 0
fbank_opts.set_device(device)
fbank_opts.use_energy = True
fbank_opts.htk_compat = True
fbank = _kaldifeat.Fbank(fbank_opts)
data = read_wave().to(device)
ans = _kaldifeat.compute(data, fbank)
expected = read_ark_txt("test-htk.txt")
assert torch.allclose(ans.cpu(), expected, rtol=1e-2)
def test_use_energy_htk_compat_false():
devices = [torch.device("cpu")]
if torch.cuda.is_available():
devices.append(torch.device("cuda", 0))
for device in devices:
fbank_opts = _kaldifeat.FbankOptions()
fbank_opts.frame_opts.dither = 0
fbank_opts.use_energy = True
fbank_opts.htk_compat = False
fbank_opts.set_device(device)
fbank = _kaldifeat.Fbank(fbank_opts)
data = read_wave().to(device)
ans = _kaldifeat.compute(data, fbank)
expected = read_ark_txt("test-with-energy.txt")
assert torch.allclose(ans.cpu(), expected, rtol=1e-2)
def test_40_mel():
devices = [torch.device("cpu")]
if torch.cuda.is_available():
devices.append(torch.device("cuda", 0))
for device in devices:
fbank_opts = _kaldifeat.FbankOptions()
fbank_opts.frame_opts.dither = 0
fbank_opts.mel_opts.num_bins = 40
fbank_opts.set_device(device)
fbank = _kaldifeat.Fbank(fbank_opts)
data = read_wave().to(device)
ans = _kaldifeat.compute(data, fbank)
expected = read_ark_txt("test-40.txt")
assert torch.allclose(ans.cpu(), expected, rtol=1e-1)
def test_40_mel_no_snip_edges():
devices = [torch.device("cpu")]
if torch.cuda.is_available():
devices.append(torch.device("cuda", 0))
for device in devices:
fbank_opts = _kaldifeat.FbankOptions()
fbank_opts.frame_opts.snip_edges = False
fbank_opts.frame_opts.dither = 0
fbank_opts.mel_opts.num_bins = 40
fbank_opts.set_device(device)
fbank = _kaldifeat.Fbank(fbank_opts)
data = read_wave().to(device)
ans = _kaldifeat.compute(data, fbank)
expected = read_ark_txt("test-40-no-snip-edges.txt")
assert torch.allclose(ans.cpu(), expected, rtol=1e-2)
def test_compute_batch():
devices = [torch.device("cpu")]
if torch.cuda.is_available():
devices.append(torch.device("cuda", 0))
for device in devices:
data1 = read_wave().to(device)
data2 = read_wave().to(device)
fbank_opts = _kaldifeat.FbankOptions()
fbank_opts.frame_opts.dither = 0
fbank_opts.frame_opts.snip_edges = False
fbank_opts.set_device(device)
fbank = _kaldifeat.Fbank(fbank_opts)
def impl(waves: List[torch.Tensor]) -> List[torch.Tensor]:
num_frames = [
_kaldifeat.num_frames(w.numel(), fbank_opts.frame_opts)
for w in waves
]
strided = [
_kaldifeat.get_strided(w, fbank_opts.frame_opts) for w in waves
]
strided = torch.cat(strided, dim=0)
features = _kaldifeat.compute(strided, fbank).split(num_frames)
return features
feature1, feature2 = impl([data1, data2])
assert torch.allclose(feature1, feature2)
def main():
test_and_benchmark_default_parameters()
test_use_energy_htk_compat_true()
test_use_energy_htk_compat_false()
test_40_mel()
test_40_mel_no_snip_edges()
test_compute_batch()
if __name__ == "__main__":
main()

View File

@ -0,0 +1,84 @@
#!/usr/bin/env python3
#
# Copyright (c) 2021 Xiaomi Corporation (authors: Fangjun Kuang)
import sys
from pathlib import Path
cur_dir = Path(__file__).resolve().parent
kaldi_feat_dir = cur_dir.parent.parent.parent
sys.path.insert(0, f"{kaldi_feat_dir}/build/lib")
import _kaldifeat
def test_frame_extraction_options():
opts = _kaldifeat.FrameExtractionOptions()
opts.samp_freq = 220500
opts.frame_shift_ms = 15
opts.frame_length_ms = 40
opts.dither = 0.1
opts.preemph_coeff = 0.98
opts.remove_dc_offset = False
opts.window_type = "hanning"
opts.round_to_power_of_two = False
opts.blackman_coeff = 0.422
opts.snip_edges = False
print(opts)
def test_mel_banks_options():
opts = _kaldifeat.MelBanksOptions()
opts.num_bins = 23
opts.low_freq = 21
opts.high_freq = 8000
opts.vtln_low = 101
opts.vtln_high = -501
opts.debug_mel = True
opts.htk_mode = True
print(opts)
def test_fbank_options():
opts = _kaldifeat.FbankOptions()
frame_opts = opts.frame_opts
mel_opts = opts.mel_opts
opts.energy_floor = 0
opts.htk_compat = False
opts.raw_energy = True
opts.use_energy = False
opts.use_log_fbank = True
opts.use_power = True
frame_opts.blackman_coeff = 0.42
frame_opts.dither = 1
frame_opts.frame_length_ms = 25
frame_opts.frame_shift_ms = 10
frame_opts.preemph_coeff = 0.97
frame_opts.remove_dc_offset = True
frame_opts.round_to_power_of_two = True
frame_opts.samp_freq = 16000
frame_opts.snip_edges = True
frame_opts.window_type = "povey"
mel_opts.debug_mel = True
mel_opts.high_freq = 0
mel_opts.low_freq = 20
mel_opts.num_bins = 23
mel_opts.vtln_high = -500
mel_opts.vtln_low = 100
print(opts)
def main():
# test_frame_extraction_options()
# test_mel_banks_options()
test_fbank_options()
if __name__ == "__main__":
main()

11
pyproject.toml Normal file
View File

@ -0,0 +1,11 @@
[tool.isort]
profile = "black"
[tool.black]
line-length = 80
exclude = '''
/(
\.git
| \.github
)/
'''

54
setup.py Normal file
View File

@ -0,0 +1,54 @@
#!/usr/bin/env python3
#
# Copyright (c) 2021 Xiaomi Corporation (author: Fangjun Kuang)
import re
import setuptools
def read_long_description():
with open("README.md", encoding="utf8") as f:
readme = f.read()
return readme
def get_package_version():
with open("CMakeLists.txt") as f:
content = f.read()
match = re.search(r"set\(kaldifeat_VERSION (.*)\)", content)
latest_version = match.group(1).strip('"')
return latest_version
package_name = "kaldifeat"
setuptools.setup(
name=package_name,
version=get_package_version(),
author="Fangjun Kuang",
author_email="csukuangfj@gmail.com",
data_files=[("", ["LICENSE", "README.md"])],
package_dir={
package_name: "kaldifeat/python/kaldifeat",
},
packages=[package_name],
url="https://github.com/csukuangfj/kaldifeat",
long_description=read_long_description(),
long_description_content_type="text/markdown",
# ext_modules=[cmake_extension('_kaldifeat')],
# cmdclass={'build_ext': BuildExtension},
zip_safe=False,
classifiers=[
"Programming Language :: C++",
"Programming Language :: Python",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
],
python_requires=">=3.6.0",
license="Apache licensed, as found in the LICENSE file",
)